A.N.A.L.O.G. ISSUE 35 / OCTOBER 1985 / PAGE 67
This month’s assembly language game is Bonk, a fast-moving arcade game for one player. You control a small, green creature with joystick 1. Your object is to collect all of the flashing diamonds scattered around the board before time runs out. When you hit a diamond, a “ding” will be heard.
You’re probably thinking, “What a stupid game! It sounds easy.” Well, of course your green creature is not free to roam wherever it pleases. You’re being chased by three electric whirlers that kill on contact. They don’t sound friendly…and they aren’t.
They will chase you wherever they can, trying to send you to that big arcade in the sky. But, luckily, they aren’t extremely intelligent (in other words, their IQ is the same as their shoe size). When you’re being chased, just put a wall between yourself and your relentless pursuers, and Bonk! — they’ll slam into the wall and be thrown backwards.
After a while, they’ll regain their senses, and you’ll be in trouble again. If you plan your strategy correctly, you can get the whirlers trapped in corners. Bonking around. Just don’t trap them near a jewel that you still need. Later in the game, the whirlers will recover from a Bonk sooner, and you’ll have to use your other defenses. More on that in a minute.
Before typing anything, look at the listings accompanying this article.
Listing 1 is the BASIC data and data checking routine. This listing is used to create both cassette and disk versions of Bonk. The data statements are listed in hexadecimal (base 16], so the program will fit in 16K cassette systems.
Listing 2 is the assembly language source code for the game of Bonk, created with the OSS MAC/65 assembler. You don’t have to type this listing to play the game! It is included for those readers interested in assembly language.
Follow the instructions below to make either a cassette or disk version of Bonk.
In order to play, you must have a joystick plugged into port 1. If, after you’ve loaded Bonk, the title screen does not appear try to locate your error. To start on a level other than 1, press the SELECT key. To begin play, press START (of course).
First of all, you’ll probably notice that the walls are two different colors. If you cruise into a blue one. bzzzzt — you’re fried. But, if you hit a green one, it will disappear. This opens up all sorts of strategic possibilities. Use them wisely.
Also, there are small boxes lying around, marked with an F. If you hit one of these, the whirlers will be frozen for a couple of seconds (by now, you’ve figured out that the F is for “freeze”). There are very few of these boxes, so don’t waste them. They can come in handy when you’re surrounded.
The scoring In Bonk is relatively simple. Bagging a jewel is worth 70 points. Flitting a freeze box is worth 100, plus the handy freeze effect. Wiping out the green walls doesn’t give you any points, but it’s a good way to sneak by the whirlers.
When you finish a board, 10 points will be added to your score for each second left on the timer Then it’s on to the next board — there are three. After you complete the third board, you gain an extra life.
Good luck and happy Bonking!
James Hague is a junior at Berknar High School in Richardson. Texas. After graduation, he plans to major in computer science.
10 REM *** BONK *** 20 TRAP 20:? "MAKE CASSETTE (0), OR DISK (1)";:INPUT DSK:IF DSK>1 THEN 20 30 TRAP 40000:DATA 0,1,2,3,4,5,6,7,8,9 ,0,0,0,0,0,0,0,10,11,12,13,14,15 40 DIM DAT$(91),HEX(22):FOR X=0 TO 22: READ N:HEX(X)=N:NEXT X:LINE=990:RESTOR E 1000:TRAP 120:? "CHECKING DATA" 50 LINE=LINE+10:? "LINE:";LINE:READ DA T$:IF LEN(DAT$)<>90 THEN 220 60 DATLIN=PEEK(183)+PEEK(184)*256:IF D ATLIN<>LINE THEN ? "LINE ";LINE;" MISS ING!":END 70 FOR X=1 TO 89 STEP 2:D1=ASC(DAT$(X) )-48:D2=ASC(DAT$(X+1))-48:BYTE=HEX(D1) *16+HEX(D2) 80 IF PASS=2 THEN PUT #1,BYTE:NEXT X:R EAD CHKSUM:GOTO 50 90 TOTAL=TOTAL+BYTE:IF TOTAL>999 THEN TOTAL=TOTAL-1000 100 NEXT X:READ CHKSUM:IF TOTAL=CHKSUM THEN 50 110 GOTO 220 120 IF PEEK(195)<>6 THEN 220 130 IF PASS=0 THEN 170 140 IF NOT DSK THEN 160 150 PUT #1,224:PUT #1,2:PUT #1,225:PUT #1,2:PUT #1,0:PUT #1,40:CLOSE #1:END 160 FOR X=1 TO 34:PUT #1,0:NEXT X:CLOS E #1:END 170 IF NOT DSK THEN 200 180 ? "INSERT DISK WITH DOS, PRESS RET URN";:DIM IN$(1):INPUT IN$:OPEN #1,8,0 ,"D:AUTORUN.SYS" 190 PUT #1,255:PUT #1,255:PUT #1,0:PUT #1,40:PUT #1,181:PUT #1,53:GOTO 210 200 ? "READY CASSETTE AND PRESS RETURN ";:OPEN #1,8,128,"C:":RESTORE 230:FOR X=1 TO 40:READ N:PUT #1,N:NEXT X 210 ? :? "WRITING FILE":PASS=2:LINE=99 0:RESTORE 1000:TRAP 120:GOTO 50 220 ? "BAD DATA: LINE ";LINE:END 230 DATA 0,28,216,39,255,39,169,0,234, 234,234,169,60,141,2,211,169,0,141,231 ,2,133,14,169,56,141,232,2 240 DATA 133,15,169,0,133,10,169,40,13 3,11,24,96 1000 DATA 2065E4A95085C1A91D85C2A202A5 C29D3222A5C19D002218691485C19002E6C2E8 E018D0E8A9008584AABD00E0,756 1010 DATA 9D0020BDFFE09DFF20E8D0F1A920 8DF402A277BDF42D9D0820CA10F7A207BD6C2E 9DD820CA10F7A900858D2072,718 1020 DATA 2A20852AA9038D3002A92F8D3102 A9C88DC402A9788DC502A9468DC602AD1FD06A 90206AB0F7E684A584C909D0,955 1030 DATA 04A900858418690109108D642FAD 1FD0C905F0F9D0DAAD1FD06A90FAA900858085 8185828586A9038587A58485,373 1040 DATA 838585A900858DA583F8186901D8 8583A685E00FF002E685A686E003F004E686D0 0CA2018686A587C909F002E6,278 1050 DATA 87A685BD732E85A3A90585A5BD82 2E859CBD912E85A2A686BDA02E85AAA9B98D30 02A92E8D310220852AA90085,618 1060 DATA 8D858A85AB85A98D1ED085948595 85A485A68589859D859E859FA685BDA32E8588 A0CBA22AA907205CE4A5860A,687 1070 DATA AABDB12E85C1BDB22E85C2A000B1 C199501DC8C0F0D0F618A5C169F085C19002E6 C2A000B1C199401EC8C0F0D0,453 1080 DATA F6A9688DC402A9C88DC502A9008D C602A9868DC702A227BDDB2E9D001DA9009D28 1DCA10F220802C20692C208E,430 1090 DATA 2CA583A04A206D2CA5860A0AAABD 8F2F858CBD9B2F858BE8A002BD8F2F998E00BD 9B2F999100A9009999009996,528 1100 DATA 00E88810E820722AA9208D07D4A9 028D1DD0A93E8D2F02A9018D6F02A9DA8DC002 A91A8DC1028DC2028DC302A5,380 1110 DATA 8C8D00D0A48BA200BDAB2F95B999 0024C8E8E008D0F2A209BDEB2F95AFCA10F820 9F2AA9AA8D01D2A205BD1D30,167 1120 DATA 8D00D2A905204B2DCA10F220852A A928204B2DA9FF858D20192B20802C20692CAD 1FD06A902DADFC02C921D00E,645 1130 DATA A9FF8DFC02458D858DD003208F2A A58DF0E1A58AD00DA588F009A5ABC5AAD0CA4C BB2D4C612D4C5428A900AA9D,556 1140 DATA 00249D00259D00269D0027E8D0F1 60A90085AC85AD85A085AE8D01D28D03D28D05 D28D07D28D08D260A90085C5,708 1150 DATA A92585C6A90085A7A6A7E003F0D3 B58E9D01D0B491A200B5AF91C5C8E8E00AD0F6 E6A7E6C64CAB2AD8A58DF00F,610 1160 DATA 20EB2B20D62C20122D20E52A2094 2C8D1ED04C62E4A207A48BA900854D990024C8 CA10F9AE780286A9A58C187D,373 1170 DATA 1E30858C8D00D0A58B187D293085 8BA207A8B5B9990024C8CA10F760A5A0D011A5 A4F003C6A460A5A385A4A5A6,76 1180 DATA F003C6A660A5A585A6A200209C2B B596F005D6964C812BB58EC58C900AD004A900 F006A9FFD002A9018594B591,841 1190 DATA C58B900AD004A900F006A9FFD002 A9018595A008A594D93930D00CA595D94230D0 0598959910038810EAB599A8,286 1200 DATA B58E18793930958EB59118794230 9591E8E003D09C4C9F2AB599A8B58E38F94B30 4A4A4A8594B59138F954304A,722 1210 DATA 4A4AA8B9002285C1B9322285C2A4 94B1C1293FF069C91BF065C90FF061A59C9596 A9108D00D2A9068D01D285AC,420 1220 DATA AD0AD22903A8B95D30959910B1A5 8B38E91C4A4A4AA8B9002285C3B9322285C4A5 8C38E92C4A4A4AA8B1C3293F,506 1230 DATA F022C90FF032C91BF01BB1C329C0 C940D012A90385AEA9F08D06D2A9C88D07D2A9 0091C360A97020552CA91085,214 1240 DATA ADA9828D02D2E6AB4C2B2C202B2C A5A285A0A90585A1A9A68D05D2A950F8186580 8580A90065818581A9006582,573 1250 DATA 8582D860A588A03648386A4A4A4A 99001DC868290F091099001D60A202A02AB580 206D2CC8CA10F760A587A040,109 1260 DATA D0D9A4ACF0068884AC8C01D2A4AD F0098884AD9809A08D03D2A5A0F019A4A1B961 308D04D2C6A1D00DA90585A1,257 1270 DATA C6A0D005A9008D05D2A5AEF009C6 AED005A9008D07D260E69FA59FC914D010A900 859FA968CDC402D002A90A8D,974 1280 DATA C402E689A589C93CD00DA9008589 A588F838E901D88588AD0CD0858AAD04D02908 F002858A60A59D18690AC932,505 1290 DATA D002A900859DA8A209B9EB2F95AF C8CA10F7A5A9C90FF009A59E186908C940D002 A900859EA8A207B9AB2F95B9,237 1300 DATA C8CA10F76085A7A9008514A514C5 A7F0BAAD1FD0C907F0F34C5428A900858D2085 2AC687208E2CA9CC8D01D2A2,986 1310 DATA 28E68CA58C8D00D0AD0AD28D00D2 A901204B2DC68CA58C8D00D0AD0AD28D00D2A9 01204B2DCA10D920852AA587,116 1320 DATA F0034C0829A209BD67309D311ECA 10F720722AA9FF204B2D4C5428A900858D2085 2AA588F838E9018588D82069,771 1330 DATA 2CA91020552C20802CA9328D00D2 A0A48C01D2A901204B2D88C0A0D0F3A588D0D4 20852A4CB7280000FFFFFFFF,118 1340 DATA 00003C3C3C3C3C3C3C3C0000F8FC FCFC3C3C00001F3F3F3F3C3C3C3CFCFCFCF800 003C3C3F3F3F1F00003C7CFC,962 1350 DATA FCFCFC7C3C3C3E3F3F3F3F3E3C00 00FFFFFFFF7E3C3C7EFFFFFFFF000000183C3C 3C3C3C3C3C3C3C3C3C3C1800,578 1360 DATA 0000FCFEFEFC000000003F7F7F3F 0000FF81BDA1B9A181FF007EFF7E3C18000028 25231F1D1918171615141312,369 1370 DATA 1110322D281E1919191919191919 191919191817161514131211100F0E0D0C0B10 0E1A60605555505045454040,956 1380 DATA 404040404071302932E133707070 42001D0246501D060606060606060606060606 06060606060606060641B92E,838 1390 DATA 000033232F32251A00000000222F 2E35331A000000002C293625331A000000002C 2536252C1A00007070707070,396 1400 DATA 70707070471B2F70067007700670 060641032F0000000000000000226F2E6B0000 00000080808080A3AFB0B9B2,270 1410 DATA A9A7A8B4809199989480A2B99A80 800000002A212D253300002821273525000000 000000000000006C6576656C,511 1420 DATA 1A00110080808080808080B3A5AC A5A3B480A6AFB280ACA5B6A5AC8080808080B3 B4A1B2B480B4AF80A2A5A7A9,897 1430 DATA AE808080487E7EB8806098805050 92B87848C078486060D0D2A86880FED6FE107C 6C6CEEFED6FE107C6CEC0EFE,333 1440 DATA D6FE107CEC0C0EFED6FE107C6CEC 0EFED6FE107C6C6CEEFED6FE107C6C6EE0FED6 FE107C6E60E0FED6FE107C6C,305 1450 DATA 6EE00020203F3C3CFC0404000010 103C3FFC3C0808000008083CFC3F3C10100000 0404FC3C3C3F202000008142,814 1460 DATA 3C3C3C3C428100A000A0828C9601 010100FFFFFF0000000001FF000001FF000001 FF00000001010100FFFFFF00,293 1470 DATA FFFF0001010100FF2C2C2A2A2A2C 2E2E2E1C1E1E1C1A1A1A1C1E0204060800C8DC D2E69627212D2500002F3625,31 1480 DATA 32C4C1C1C1C1C9C1C1C1C1C1C1C1 C1C9C1C1C1C1C3C2C01B404042404040404040 40404240401BC0C2C2C0C01B,293 1490 DATA 4042404040404040404042401BC0 C0C2C2C0C0C01B424040404040404040421BC0 C0C0C2C84141414145404040,629 1500 DATA 40404040404641414141C7C2C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C2C2C0 C0C0C0C0C0C0C0C0C0C0C0C0,12 1510 DATA C0C0C0C0C0C2C2C0C0C0C0C0C0C4 C1C1C1C1C3C0C0C0C0C0C0C2C2C0C0C0C0C4C1 CAC1C9C9C1CAC1C3C0C0C0C0,720 1520 DATA C2C8C3C0404042401BC0C2C2C0C0 1B42404040C4C7C2C24040404240404FC2C2C0 4F4042404040C2C2C8C5C0C0,433 1530 DATA 4042401BC0C2C2C0C01B42404040 C6C7C2C0C0C0C0C6C1C9C1CACAC1C9C1C5C0C0 C0C0C2C2C0C0C0C0C0C0C6C1,934 1540 DATA C1C1C1C5C0C0C0C0C0C0C2C2C0C0 C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C2C2C0 C0C0C0C0C0C0C0C0C0C0C0C0,590 1550 DATA C0C0C0C0C0C2C2C0C0C0C0C0C0C0 C0C0C0C0C0C0C0C0C0C0C0C2C8414141414340 404040404040404441414141,955 1560 DATA C7C2C0C0C01B4240404040404040 40421BC0C0C0C2C2C0C01B4042404040404040 404042401BC0C0C2C2C01B40,851 1570 DATA 404240404040404040404240401B C0C2C6C1C1C1C1CAC1C1C1C1C1C1C1C1CAC1C1 C1C1C5C4C1C1C1C1C1C1C1C1,727 1580 DATA C1C1C1C1C1C1C1C1C1C1C3C2C01B C0C0C0C0C0C0C0C0C0C0C0C0C0C01BC0C2C2C0 C0C0C0C0C0C0C0C0C0C0C0C0,56 1590 DATA C0C0C0C0C0C2C2C0C0C4C1C1C1C3 C0C0C0C0C4C1C1C3C0C0C0C2C2C0C0C2C01B40 4C404040404C1BC0C2C0C0C0,525 1600 DATA C2C2C0C0C2C0C0C0C0C0C0C0C0C0 C0C0C2C0C0C0C2C2C0C0CCC0C0C0C0CBC0C0CB C0C0C0CCC0C0C0C2C2C0C0C0,227 1610 DATA C0C0C0C0C2C01BC8C1CDC0C0C0C0 C0C2C2C0C0C0C0C0CEC1C7C0C042C0C0C0C0C0 C0C0C2C2C0C0C0C0C01B4048,217 1620 DATA 414147401BC0C0C0C0C0C2C2C0C0 C0C0C0C0C0424040C8C1CDC0C0C0C0C0C2C2C0 C0C0C0C0CEC1C71BC0C2C0C0,696 1630 DATA C0C0C0C0C0C2C2C0C0C0C0C0C0C0 CCC0C0CCC0C0C0C0C0C0C0C2C2C0C0C01BC0C0 C0C0C0C0C0C0C01BC0C0C0C0,38 1640 DATA C2C2C0C0C0C0C0C04B404040404B 404040404040C2C2C0C0C0C0C0C0C2C0C0C0C0 C2C0C0C0C0C0C0C2C2C0C0C0,180 1650 DATA C0C01BC2C0C0C0C0C21BC0C0C0C0 C0C2C2C0C0C0C0CEC1C5C0C0C0C0C6C1CDC0C0 C0C0C2C2C0C0C0C0C0C0C0C0,542 1660 DATA C0C0C0C0C0C0C0C0C0C0C2C84143 404040404040404F4040404040404441C7C21B 424040404040404040404040,222 1670 DATA 404040421BC2C6C1CAC1C1C1C1C1 C1C1C1C1C1C1C1C1C1CAC1C5C4C1C1C1C1C1C9 C1C1C1C1C1C1C9C1C1C1C1C1,274 1680 DATA C3C21B001B001B42404040404040 C2C0252E24C0C2C2C01B001B404240401BC0C0 C0C8C1C1C1C1C1C7C21B001B,998 1690 DATA 001B424040C4C3C0C0C2C01B001B C0C2C84141414141C7C0C0C2424040C2C0C01B C0C0C2C2C0C0C0C0C0C2C0C0,231 1700 DATA 42C2C0C0C2C01B001BC0C2C2C0C0 1BC0C0C2C0C0C6C5C0C0C2C0C01BC0C0C2C2C0 C0C0C0C0C2C0C0C0C0404042,540 1710 DATA 4040404040C2C2C0C0CBC0C0C2C0 C0C0C04F40424040404040C2C2C0C0C2C01BC2 C0C0C0C0C0C0424040404040,627 1720 DATA C2C2C0C0C2C0C0C2C0C0C4C3C0C0 C2C0C0C0C0C0C2C2C0C0C2C0C0C2404042C2C0 C0C21B00001BA0C2C21BC0C2,9 1730 DATA C0C0C2C0C0C242401BC84D404040 4EC7C2C0C0CCC0C0C2C0C0C6C5C0C0C2C0C0C0 C0C0C2C2C0C0C0C0C0C2C0C0,671 1740 DATA C0C0C0C0C2C0C0C0C0C0C2C2C0C0 C0C0C0C2C0C0C0C0C0C0C2C0C0C0C0C0C2C2C0 C0C0C0C0C8C1C1C1434040C8,963 1750 DATA 4141414141C7C84141414141C7C0 1B40424040424040404040C2C2C0C04F404042 401B404240404C4040404040,864 1760 DATA C2C2C0C0C0C0C042401B40424040 4040401BC0C0C2C2C0C0C0C0C042401B404240 40404040404040C2C6C1C1C1,348 1770 DATA C1C1CAC1C1C1CAC1C1C1C1C1C1C1 C1C50000000000000000000000000000000000 000000000000000000000000,458
;***************************** ;* BONK * ;* Copyright 1984 * ;* Programmed by James Hague * ;* Using MAC/65 by OSS Inc. * ;***************************** ; ;HARDWARE REGISTERS ; RANDOM = $D20A ;Random #s GRACTL = $D01D ;Graphic ctrl AUDC1 = $D201 ;Audio controls AUDC2 = $D203 AUDC3 = $D205 AUDC4 = $D207 AUDF1 = $D200 ;Audio frequency AUDF2 = $D202 AUDF3 = $D204 AUDF4 = $D206 AUDCTL = $D208 HPOSP0 = $D000 ;Pl. 0 horiz. HPOSP1 = $D001 ;Pl. 1 horiz. P0PF = $D004 ;P0 to PF coll. P0PL = $D00C ;P0 to PL coll. HITCLR = $D01E ;Collision clear CONSOL = $D01F ;Console buttons PMBASE = $D407 SETVBV = $E45C ;VBLANK vectors XITVBV = $E462 ;VBLANK exit SIOINV = $E465 ;Initialize SIO ; ;SHADOW REGISTERS ; CLOCK = $14 ;Real time clock ATTRACT = $4D DMACTL = $022F ;DMA control SDLSTL = $0230 ;Dlist pointer GPRIOR = $026F STICK = $0278 ;Joystick 0 COL0 = $02C4 ;Color regs. COL1 = $02C5 COL2 = $02C6 COL3 = $02C7 PCOL0 = $02C0 ;Player colors PCOL1 = $02C1 CHBAS = $02F4 ;Character base CH = $02FC ;Keyboard buffer ; *= $80 ; ;GAME VARIABLES ; SCORE .DS 3 ;Player's score LEVEL .DS 1 ;Current level SLEVEL .DS 1 ;Starting level BLEVEL .DS 1 ;Binary level BOARD .DS 1 ;Current board LIVES .DS 1 ;Remaining lives TIME .DS 2 ;Bonus timer DIE .DS 1 ;Death flag P0Y .DS 1 ;Pl0 y position P0X .DS 1 ;Pl0 x position GAMCTL .DS 1 ;Game control ENXPOS .DS 3 ;Enemy X pos. ENYPOS .DS 3 ;Enemy Y pos. ENXADD .DS 1 ;Enemy X add ENYADD .DS 1 ;Enemy Y add ENBOUN .DS 3 ;En bounce flags ENDIR .DS 3 ;Enemy direction BDIST .DS 1 ;Bounce distance ENAN .DS 1 ;Enemy pointer PLAN .DS 1 ;Play. pointer FLASH .DS 1 ;Treas. flasher FREEZE .DS 2 ;Freeze timers FTIME .DS 1 ;Freeze time WAIT .DS 4 ;Time delay TEMP .DS 2 ;Temp storage DIR .DS 1 ;Jstick direct. TOTAL .DS 1 ;Jewels/board COUNT .DS 1 ;Jewels/taken BONK .DS 1 ;Bounce sound DING .DS 1 ;Bell sound WSND .DS 1 ;Eat wall sound ENEMY .DS 10 ;Enemy image PLAYER .DS 8 ;Player image LO .DS 2 ;General pointer VLO .DS 2 ;Ditto POINT .DS 2 ;Play. pointer ; ;RESERVED MEMORY ; *= $2000 ; PM .DS $0400 ;Pmbase PL0 .DS $0100 PL1 .DS $0100 PL2 .DS $0100 PL3 .DS $0100 ; DISP = $1D00 ;Display area CHSET = $2000 ;New char set LOTBL = $2200 ;Plotter table HITBL = LOTBL+50 ; *= $2800 ;Program start ; ;SET-UP PLOTTER ; GAME JSR SIOINV ;Init sounds LDA # <DISP+80 STA LO LDA # >DISP+80 STA LO+1 LDX #2 SEPL LDA LO+1 STA HITBL,X LDA LO STA LOTBL,X CLC ADC #20 STA LO BCC SEP2 INC LO+1 SEP2 INX CPX #24 BNE SEPL LDA #0 STA SLEVEL ; ;REDEFINE CHARSET ; TAX ;Move set MSET LDA $E000,X STA CHSET,X LDA $E0FF,X STA CHSET+$FF,X INX BNE MSET LDA # >CHSET ;Install it STA CHBAS LDX #119 ;Redefine set RDEF LDA CDAT,X STA CHSET+8,X DEX BPL RDEF LDX #7 RDEF2 LDA CDAT2,X STA CHSET+216,X DEX BPL RDEF2 ; GO LDA #0 ;Turn off VBI STA GAMCTL JSR PMCLR ;No players JSR QUIET ;No sound ; ;TITLE SCREEN ; LDA # <TDL ;Point to title STA SDLSTL ;screen display LDA # >TDL ;list. STA SDLSTL+1 LDA #200 ;Set up title STA COL0 ;colors. LDA #120 STA COL1 LDA #70 STA COL2 ; START LDA CONSOL ;Start key ROR A ;pressed? BCC ST1 ;Yes! ; ;LEVEL SELECTION ; ROR A ;Select pressed? BCS START ;No, skip this. INC SLEVEL ;Yes, start at LDA SLEVEL ;next level. CMP #9 ;Highest level? BNE Z1 ;No, continue. LDA #0 ;Yes, reset and STA SLEVEL ;store it. Z1 CLC ;Add 1 to start- ADC #1 ;ing level # ORA #16 ;Add color STA TITLE+73 ;and show it Z2 LDA CONSOL ;Get keys again CMP #5 ;Key released? BEQ Z2 ;No, wait for it BNE START ;Branch always! ; ST1 LDA CONSOL ROR A BCC ST1 LDA #0 ;Set variables STA SCORE ;that are set STA SCORE+1 ;once per game. STA SCORE+2 STA BOARD LDA #3 ;3 lives STA LIVES LDA SLEVEL ;Set level STA LEVEL STA BLEVEL ; NEWLEV LDA #0 ;Turn off VBI STA GAMCTL LDA LEVEL ;Get BCD level SED CLC ADC #1 ;And raise it CLD STA LEVEL ;Then store. LDX BLEVEL ;Get bin. level CPX #15 ;Highest level? BEQ SAMEL ;Yes, keep it. INC BLEVEL ;No, raise it. SAMEL LDX BOARD ;Get board # CPX #3 ;Highest board? BEQ BRD1 ;Yes, reset INC BOARD ;and store BNE SETLEV ;Branch always! ; BRD1 LDX #1 ;Reset board # STX BOARD LDA LIVES ;And give extra CMP #9 ;life BEQ SETLEV INC LIVES SETLEV LDX BLEVEL ;Binary level LDA DEL1-1,X ;Set up delay STA WAIT LDA #5 STA WAIT+2 LDA BOUN-1,X ;Get bounces STA BDIST LDA FTM-1,X ;Get freeze time STA FTIME LDX BOARD ;Board # LDA TOT-1,X ;Get jewels STA TOTAL LDA # <DL ;Install DL STA SDLSTL LDA # >DL STA SDLSTL+1 ; NEWLIFE JSR QUIET ;No sound. LDA #0 ;Zero items STA GAMCTL ;that must be STA DIE ;zeroed for each STA COUNT ;new life STA DIR STA HITCLR STA ENXADD STA ENYADD STA WAIT+1 STA WAIT+3 STA TIME+1 STA ENAN ;Reset pointers STA PLAN STA FLASH LDX BLEVEL ;Set timer LDA TIM-1,X STA TIME LDY # <VBI ;Deferred VBI LDX # >VBI LDA #7 JSR SETVBV ; ;DRAW SCREEN ; LDA BOARD ;Get board # ASL A ;Times 2 TAX ;use as index LDA BDTBL-2,X ;Board lo byte STA LO LDA BDTBL-1,X ;Hi byte of it STA LO+1 LDY #0 ;Draw 1st part DR1 LDA (LO),Y ;Get screen byte STA DISP+80,Y ;and show it INY CPY #240 BNE DR1 CLC LDA LO ;point to part 2 ADC #240 STA LO BCC DR2 INC LO+1 DR2 LDY #0 DR3 LDA (LO),Y ;Get byte STA DISP+320,Y INY CPY #240 BNE DR3 ; ;INITIALIZE ; LDA #104 ;Color 0 is STA COL0 ;purple LDA #200 ;Color 1 is STA COL1 ;green LDA #0 ;Color 2 is STA COL2 ;black LDA #134 ;Color 3 is STA COL3 ;blue LDX #39 ;Print score PS LDA SCL,X ;line STA DISP,X LDA #0 STA DISP+40,X DEX BPL PS JSR SHOSC ;Show score JSR SHOBO ;Show bonus JSR SHOLI ;Show lives LDA LEVEL ;Show level LDY #74 JSR BCD LDA BOARD ;Set initial ASL A ;player ASL A ;positions. TAX LDA IX-4,X ;Set player X STA P0X LDA IY-4,X ;and Y STA P0Y INX LDY #2 ;Set all enemy SET LDA IX-4,X ;X STA ENXPOS,Y LDA IY-4,X ;Y STA ENYPOS,Y LDA #0 STA ENDIR,Y ;Zero enemy STA ENBOUN,Y ;status INX DEY BPL SET ;Finish up ; ;P/M SET UP ; JSR PMCLR ;Clear players LDA # >PM ;Point to PM STA PMBASE ;area LDA #2 ;Set gractl STA GRACTL LDA #62 ;Set dmactl STA DMACTL LDA #1 ;Set priority STA GPRIOR LDA #218 ;Set pl0 color STA PCOL0 LDA #26 ;Set enemy color STA PCOL1 STA PCOL1+1 STA PCOL1+2 LDA P0X ;Draw player STA HPOSP0 ;Set x pos. LDY P0Y ;Get y LDX #0 PD LDA PDAT,X ;Get player byte STA PLAYER,X STA PL0,Y ;And show it INY INX CPX #8 BNE PD LDX #9 ;Copy enemy data CD LDA EDAT,X ;from memory to STA ENEMY,X ;animation table DEX BPL CD JSR DRAWEN ;Draw enemy LDA #170 ;Introduction STA AUDC1 LDX #5 IN LDA MUSIC,X STA AUDF1 LDA #5 JSR DELAY DEX BPL IN JSR QUIET LDA #40 JSR DELAY LDA #$FF ;Turn on the STA GAMCTL ;VBI ; ;MAIN LOOP ; MAIN JSR ENMOVE ;Move enemy JSR SHOSC ;Show score JSR SHOBO ;Show bonus M1 LDA CONSOL ;Start pressed? ROR A BCC M4 ;Yes. LDA CH CMP #$21 ;Space bar? BNE M2 ;No. LDA #$FF STA CH ;Reset keycode EOR GAMCTL ;Flip pause STA GAMCTL BNE M2 JSR HUSH ;Peace and... M2 LDA GAMCTL BEQ M1 LDA DIE ;Player dead? BNE M3 ;Yes. LDA TIME ;Time up? BEQ M3 LDA COUNT ;Level done? CMP TOTAL BNE MAIN JMP LDONE M3 JMP KILL ;Auuughh! M4 JMP GO ; ;CLEAR PM ; PMCLR LDA #0 TAX PC STA PL0,X STA PL1,X STA PL2,X STA PL3,X INX BNE PC DE3 RTS ; ;SOUND OFF ; QUIET LDA #0 ;Turn off sound STA BONK STA DING STA FREEZE STA WSND HUSH STA AUDC1 STA AUDC2 STA AUDC3 STA AUDC4 STA AUDCTL RTS ; ;DRAW ENEMY ; DRAWEN LDA # <PL1 ;Draw all 3 STA POINT ;enemy LDA # >PL1 STA POINT+1 LDA #0 STA TEMP DE1 LDX TEMP CPX #3 BEQ DE3 LDA ENXPOS,X ;Set x position STA HPOSP1,X LDY ENYPOS,X LDX #0 DE2 LDA ENEMY,X STA (POINT),Y INY INX CPX #10 BNE DE2 INC TEMP INC POINT+1 JMP DE1 ; ;VBI ; VBI CLD ;Kill decimal! LDA GAMCTL ;Do this VBI? BEQ EXIT ;No! Get out! JSR PCHK ;Check player JSR STUFF ;Do work JSR ANIM ;Animate JSR PLMOVE ;Move player JSR SOUND ;Make noise EXIT STA HITCLR ;Clear all hits JMP XITVBV ;Go home! ; ;MOVE PLAYER ; PLMOVE LDX #7 ;1st- erase LDY P0Y ;player LDA #0 STA ATTRACT ;Kill attract ERPL STA PL0,Y INY DEX BPL ERPL LDX STICK ;2nd- get new STX DIR ;player position LDA P0X ;Get x position CLC ;then add offset ADC XOFF-5,X ;to old coord STA P0X ;Save new pos. STA HPOSP0 ;and show it LDA P0Y ;Now repeat for CLC ;y position. ADC YOFF-5,X STA P0Y LDX #7 ;3rd- redraw TAY DRPL LDA PLAYER,X STA PL0,Y INY DEX BPL DRPL RTS ; ;ENEMY HANDLER ; ENMOVE LDA FREEZE ;Frozen? BNE TWX ;Yup, ice cold. LDA WAIT+1 ;Get 1st timer BEQ TWO ;If 0, do next. DEC WAIT+1 ;Decrement 1st RTS ;And leave. ; TWO LDA WAIT ;Reset 1st timer STA WAIT+1 LDA WAIT+3 ;Get 2nd timer BEQ MOVE ;If 0, move 'em DEC WAIT+3 ;Decrement 2nd TWX RTS ; MOVE LDA WAIT+2 ;Reset 2nd STA WAIT+3 LDX #0 ;Main counter DOMOR JSR CHECK ;Check enemy LDA ENBOUN,X ;Bouncing? BEQ NOB ;No, continue. DEC ENBOUN,X ;Yes, JMP OUT ;Do next enemy. ; NOB LDA ENXPOS,X ;Get x pos CMP P0X ;Comp with play BCC XLES ;Less than? BNE XMOR ;More than? LDA #0 ;Equal to, stop BEQ DOY ;movement. XMOR LDA #$FF ;More than, move BNE DOY ;left. XLES LDA #1 ;Less than, move DOY STA ENXADD ;right. LDA ENYPOS,X ;Get y pos CMP P0Y ;Comp eith play BCC YLES ;Less than? BNE YMOR ;More than? LDA #0 ;Equal to, stop BEQ FINI ;movement. YMOR LDA #$FF ;More than, move BNE FINI ;left. YLES LDA #1 ;Less than, move FINI STA ENYADD ;right. LDY #8 ;Convert to dir CDIR LDA ENXADD ;Is x direction CMP ENX,Y ;correct? BNE AGA ;No, check more. LDA ENYADD ;Is y direction CMP ENY,Y ;correct? BNE AGA ;Nope. TYA STA ENDIR,X ;It's correct! BPL OUT ;Branch always! ; AGA DEY ;Continue BPL CDIR ;searching OUT LDA ENDIR,X ;Get direction TAY LDA ENXPOS,X ;Update x pos CLC ADC ENX,Y STA ENXPOS,X LDA ENYPOS,X ;Update y CLC ADC ENY,Y STA ENYPOS,X INX CPX #3 BNE DOMOR JMP DRAWEN ;Draw enemy ; CHECK LDA ENDIR,X ;Check if the TAY ;enemy hit LDA ENXPOS,X ;anything SEC ;1st, scan on SBC SCX,Y ;x axis LSR A LSR A LSR A STA ENXADD LDA ENYPOS,X ;2nd, scan on SEC ;y axis SBC SCY,Y LSR A LSR A LSR A TAY ;Now, get point LDA LOTBL,Y STA LO LDA HITBL,Y STA LO+1 LDY ENXADD LDA (LO),Y AND #$3F ;Mask off color BEQ L0 ;Hit anything? CMP #27 ;Hit diamond? BEQ L0 ;Yup, forget it CMP #$0F ;Hit freezer? BEQ L0 ;Yup, who cares LDA BDIST ;A hit! Make the STA ENBOUN,X ;enemy bounce! LDA #16 ;Set sound STA AUDF1 LDA #6 STA AUDC1 STA BONK LDA RANDOM ;Get new direct. AND #3 TAY LDA BDIR,Y STA ENDIR,X BPL CHECK ;Check it out! ; ;CHECK PLAYER ; PCHK LDA P0Y ;Get y pos SEC ;And convert to SBC #28 ;screen position LSR A LSR A LSR A TAY ;Get address LDA LOTBL,Y STA VLO LDA HITBL,Y STA VLO+1 LDA P0X ;Now convert x SEC SBC #44 LSR A LSR A LSR A TAY LDA (VLO),Y ;Get point AND #$3F ;Mask out color BEQ L0 ;Nothing there CMP #$0F ;Hit freezer? BEQ HITFR ;Yup, handle it CMP #$1B ;Hit diamond? BEQ HITDI ;Yup, fix it LDA (VLO),Y ;Get point AND #192 ;Get color used CMP #64 ;Hit weak wall? BNE L0 ;No, leave. ; ;Hit weak wall ; LDA #3 ;Set sound STA WSND LDA #240 STA AUDF4 LDA #200 STA AUDC4 HITX LDA #0 ;Erase wall STA (VLO),Y L0 RTS ; ;Hit diamond ; HITDI LDA #$70 ;Give points JSR ADD LDA #16 ;Set sound STA DING LDA #130 STA AUDF2 INC COUNT ;Count it JMP HITX ; ;Hit freezer ; HITFR JSR HITX ;Erase freezer LDA FTIME ;Set freeze time STA FREEZE LDA #5 STA FREEZE+1 LDA #166 ;Set sound STA AUDC3 LDA #$50 ;Give points ; ;SCORE ROUTINES ; ADD SED ;Add points to CLC ;score ADC SCORE STA SCORE LDA #0 ADC SCORE+1 STA SCORE+1 LDA #0 ADC SCORE+2 STA SCORE+2 CLD RTS ; SHOBO LDA TIME ;Show bonus LDY #54 ; BCD PHA ;Show 1 bcd SEC ROR A LSR A LSR A LSR A STA DISP,Y INY PLA AND #$0F ORA #$10 STA DISP,Y RTS ; SHOSC LDX #2 ;Show score LDY #42 SS LDA SCORE,X JSR BCD INY DEX BPL SS RTS ; SHOLI LDA LIVES ;Show lives LDY #64 BNE BCD ; ;SOUND ROUTINES ; SOUND LDY BONK ;Bounce sound? BEQ T1 ;No DEY STY BONK STY AUDC1 T1 LDY DING ;Bell sound? BEQ T2 ;No DEY STY DING TYA ORA #$A0 STA AUDC2 T2 LDA FREEZE ;Freezer sound? BEQ T3 ;No LDY FREEZE+1 LDA FSND,Y STA AUDF3 DEC FREEZE+1 BNE T3 LDA #5 STA FREEZE+1 DEC FREEZE BNE T3 LDA #0 STA AUDC3 T3 LDA WSND ;Wall sound? BEQ T4 ;No DEC WSND BNE T4 LDA #0 STA AUDC4 T4 RTS ; ;FLASH JEWELS ; STUFF INC FLASH ;Handle flash LDA FLASH ;timers. CMP #20 BNE S1 LDA #0 STA FLASH LDA #104 CMP COL0 BNE S2 LDA #10 S2 STA COL0 ; ;HANDLE TIME ; S1 INC TIME+1 ;Count down LDA TIME+1 CMP #60 ;We interrupt BNE S3 ;this program LDA #0 ;for an import- STA TIME+1 ;ant news LDA TIME ;bulletin: SED ; HI MOM! SEC SBC #1 CLD STA TIME S3 LDA P0PL ;Check player STA DIE ;collisions LDA P0PF AND #8 BEQ S4 STA DIE S4 RTS ; ;ANIMATE ; ANIM LDA ENAN ;Animate enemy. CLC ;Hey guys, look! ADC #10 ;Your names are CMP #50 ;in print : BNE A1 ; David Hague LDA #0 ; Robbie Hague A1 STA ENAN ; Martin Beck TAY ; Nathan Zink LDX #9 ;and everyone's A2 LDA EDAT,Y ;favorite: STA ENEMY,X ; A. ZLOTNICK! INY ;Tron to you! DEX ;(No you don't BPL A2 ;get paid) LDA DIR ;Animate player CMP #15 ;by storing a BEQ A3 ;different image LDA PLAN ;in the player CLC ;animation table ADC #8 CMP #64 BNE A4 ;Is this game A3 LDA #0 ;better than A4 STA PLAN ;The Electroids? TAY LDX #7 A5 LDA PDAT,Y STA PLAYER,X INY DEX BPL A5 RTS ; ;TIME DELAY ; DELAY STA TEMP ;Enter with LDA #0 ;length of pause STA CLOCK ;(in jiffies) in D0 LDA CLOCK ;the accumulator CMP TEMP BEQ S4 LDA CONSOL CMP #7 BEQ D0 JMP GO ; ;DIE ; KILL LDA #0 ;Stop movement STA GAMCTL JSR QUIET ;No sound DEC LIVES ;Take a life JSR SHOLI ;And show them. LDA #204 STA AUDC1 LDX #40 ;Kill player K1 INC P0X ;1st shift LDA P0X STA HPOSP0 LDA RANDOM STA AUDF1 LDA #1 JSR DELAY DEC P0X ;2nd shift LDA P0X STA HPOSP0 LDA RANDOM STA AUDF1 LDA #1 JSR DELAY DEX BPL K1 ;Repeat again. JSR QUIET LDA LIVES ;Any lives? BEQ OVR JMP NEWLIFE ; ;GAME OVER ; OVR LDX #9 ;Show GAME OVER O1 LDA GOVR,X STA DISP+305,X DEX BPL O1 JSR PMCLR LDA #255 JSR DELAY JMP GO ; ;LEVEL DONE ; LDONE LDA #0 ;Stop movement STA GAMCTL JSR QUIET ;No sound C1 LDA TIME ;Give 10 points SED ;for each second SEC ;left on the SBC #1 ;timer. STA TIME CLD JSR SHOBO ;Add points for LDA #$10 ;time remaining JSR ADD ;and make bell JSR SHOSC ;tones by vary- LDA #50 ;ing the volume STA AUDF1 ;of voice 1. LDY #164 C2 STY AUDC1 LDA #1 JSR DELAY DEY CPY #160 BNE C2 LDA TIME BNE C1 JSR QUIET ;Kill noise JMP NEWLEV ;Start new level ; ;CHARACTER DATA ; CDAT .BYTE 0,0,255,255,255,255,0 .BYTE 0,60,60,60,60,60,60 .BYTE 60,60,0,0,248,252,252 .BYTE 252,60,60,0,0,31,63,63 .BYTE 63,60,60,60,60,252,252 .BYTE 252,248,0,0,60,60,63 .BYTE 63,63,31,0,0,60,124 .BYTE 252,252,252,252,124,60 .BYTE 60,62,63,63,63,63,62 .BYTE 60,0,0,255,255,255,255 .BYTE 126,60,60,126,255,255 .BYTE 255,255,0,0,0,24,60,60 .BYTE 60,60,60,60,60,60,60 .BYTE 60,60,60,24,0,0,0,252 .BYTE 254,254,252,0,0,0,0,63 .BYTE 127,127,63,0,0,255,129 .BYTE 189,161,185,161,129 .BYTE 255 CDAT2 .BYTE 0,126,255,126,60,24,0 .BYTE 0 ; ;LEVEL DATA ; DEL1 .BYTE 40,37,35,31,29,25 .BYTE 24,23,22,21,20,19,18 .BYTE 17,16 BOUN .BYTE 50,45,40,30,25,25 .BYTE 25,25,25,25,25,25,25 .BYTE 25,25 FTM .BYTE 25,24,23,22,21,20 .BYTE 19,18,17,16,15,14,13 .BYTE 12,11 TOT .BYTE 16,14,26 TIM .BYTE $60,$60,$55,$55,$50 .BYTE $50,$45,$45,$40,$40 .BYTE $40,$40,$40,$40,$40 BDTBL .WORD BD1,BD2,BD3 ; ;INSTALL DISPLAY LIST ; DL .BYTE $70,$70,$70,$42 .WORD DISP .BYTE 2,$46 .WORD DISP+80 .BYTE 6,6,6,6,6,6,6,6,6,6,6 .BYTE 6,6,6,6,6,6,6,6,6,6 .BYTE $41 .WORD DL ; SCL .SBYTE " SCORE: BONUS: " .SBYTE " LIVES: LEVEL:" .SBYTE " " ; TDL .BYTE $70,$70,$70,$70,$70 .BYTE $70,$70,$70,$70,$47 .WORD TITLE .BYTE $70,6,$70,7,$70,6 .BYTE $70,6,6,$41 .WORD TDL ; TITLE .SBYTE " BoNk " .SBYTE +$80," COPYRIGH" .SBYTE +$80,"T 1984 BY: " .SBYTE " JAMES HAGUE " .SBYTE " level: 1 " .SBYTE +$80," SELEC" .SBYTE +$80,"T FOR LEVEL " .SBYTE +$80," START TO" .SBYTE +$80," BEGIN " ; IX .BYTE 72,126,126,184 .BYTE 128,96,152,128 .BYTE 80,80,146,184 IY .BYTE 120,72,192,120 .BYTE 72,96,96,208 .BYTE 210,168,104,128 ; ; PLAYER, ENEMY, MUSIC DATA ; PDAT .BYTE 254,214,254,16,124,108 .BYTE 108,238,254,214,254 .BYTE 16,124,108,236,14,254 .BYTE 214,254,16,124,236,12 .BYTE 14,254,214,254,16,124 .BYTE 108,236,14,254,214,254 .BYTE 16,124,108,108,238,254 .BYTE 214,254,16,124,108,110 .BYTE 224,254,214,254,16,124 .BYTE 110,96,224,254,214,254 .BYTE 16,124,108,110,224 EDAT .BYTE 0,32,32,63,60,60,252 .BYTE 4,4,0,0,16,16,60,63 .BYTE 252,60,8,8,0,0,8,8,60 .BYTE 252,63,60,16,16,0,0,4 .BYTE 4,252,60,60,63,32,32,0 .BYTE 0,129,66,60,60,60,60 .BYTE 66,129,0 MUSIC .BYTE 160,0,160,130,140,150 ; ;X,Y OFFSETS + MISC. ; XOFF .BYTE 1,1,1,0,$FF .BYTE $FF,$FF,0,0,0,0 YOFF .BYTE 1,$FF,0,0 .BYTE 1,$FF,0,0,1,$FF,0 ENX .BYTE 0,0,1,1,1,0,$FF,$FF .BYTE $FF ENY .BYTE 0,$FF,$FF,0,1,1,1,0 .BYTE $FF SCX .BYTE 44,44,42,42,42,44,46 .BYTE 46,46 SCY .BYTE 28,30,30,28,26,26,26 .BYTE 28,30 BDIR .BYTE 2,4,6,8 FSND .BYTE 0,200,220,210,230,150 GOVR .SBYTE "GAME OVER" ; ;BOARD DATA ; BD1 .SBYTE +$A0,"DAAAAIAAAAAAAA" .SBYTE +$A0,"IAAAACB@" .SBYTE ";" .SBYTE +$20,"@@B@@@@@@@@B@@" .SBYTE ";" .SBYTE +$A0,"@BB@@" .SBYTE ";" .SBYTE +$20,"@B@@@@@@@@B@" .SBYTE ";" .SBYTE +$A0,"@@BB@@@" .SBYTE ";" .SBYTE +$20,"B@@@@@@@@B" .SBYTE ";" .SBYTE +$A0,"@@@BH" .SBYTE +$20,"AAAAE@@@@@@@@F" .SBYTE +$20,"AAAA" .SBYTE +$A0,"GB@@@@@@@@@@@@" .SBYTE +$A0,"@@@@@@BB@@@@@@" .SBYTE +$A0,"@@@@@@@@@@@@BB" .SBYTE +$A0,"@@@@@@DAAAAC@@" .SBYTE +$A0,"@@@@BB@@@@DAJA" .SBYTE +$A0,"IIAJAC@@@@BHC@" .SBYTE +$20,"@@B@" .SBYTE ";" .SBYTE +$A0,"@BB@@" .SBYTE ";" .SBYTE +$20,"B@@@" .SBYTE +$A0,"DGBB" .SBYTE +$20,"@@@B@@O" .SBYTE +$A0,"BB@" .SBYTE +$20,"O@B@@@" .SBYTE +$A0,"BBHE@@" .SBYTE +$20,"@B@" .SBYTE ";" .SBYTE +$A0,"@BB@@" .SBYTE ";" .SBYTE +$20,"B@@@" .SBYTE +$A0,"FGB@@" .SBYTE +$A0,"@@FAIAJJAIAE@@" .SBYTE +$A0,"@@BB@@@@@@FAAA" .SBYTE +$A0,"AE@@@@@@BB@@@@" .SBYTE +$A0,"@@@@@@@@@@@@@@" .SBYTE +$A0,"BB@@@@@@@@@@@@" .SBYTE +$A0,"@@@@@@BB@@@@@@" .SBYTE +$A0,"@@@@@@@@@@@@BH" .SBYTE +$20,"AAAAC@@@@@@@@D" .SBYTE +$20,"AAAA" .SBYTE +$A0,"GB@@@" .SBYTE ";" .SBYTE +$20,"B@@@@@@@@B" .SBYTE ";" .SBYTE +$A0,"@@@BB@@" .SBYTE ";" .SBYTE +$20,"@B@@@@@@@@B@" .SBYTE ";" .SBYTE +$A0,"@@BB@" .SBYTE ";" .SBYTE +$20,"@@B@@@@@@@@B@@" .SBYTE ";" .SBYTE +$A0,"@BFAAAAJAAAAAA" .SBYTE +$A0,"AAJAAAAE" ; BD2 .SBYTE +$A0,"DAAAAAAAAAAAA" .SBYTE +$A0,"AAAAAACB@" .SBYTE ";" .SBYTE +$A0,"@@@@@@@@@@@@@@" .SBYTE ";" .SBYTE +$A0,"@BB@@@@@@@@@@@" .SBYTE +$A0,"@@@@@@@" .SBYTE +$A0,"BB@@DAAAC@@@@" .SBYTE +$A0,"DAAC@@@BB@@B@" .SBYTE ";" .SBYTE +$20,"@L@@@@L" .SBYTE ";" .SBYTE +$A0,"@B@@@BB@@B@@@@" .SBYTE +$A0,"@@@@@@@B@@@BB" .SBYTE +$A0,"@@L@@@@K@@K@@" .SBYTE +$A0,"@L@@@BB@@@@@@" .SBYTE +$A0,"@B@" .SBYTE ";" .SBYTE +$A0,"HAM@@@@@BB@@@" .SBYTE +$A0,"@@NAG@@" .SBYTE +$20,"B" .SBYTE +$A0,"@@@@@@@BB@@@@@" .SBYTE ";" .SBYTE +$20,"@HAAG@" .SBYTE ";" .SBYTE +$A0,"@@@@@BB@@@@@@@" .SBYTE +$20,"B@@" .SBYTE +$A0,"HAM@@@@@BB@@@" .SBYTE +$A0,"@@NAG" .SBYTE ";" .SBYTE +$A0,"@B@@@@@@@BB@@@" .SBYTE +$A0,"@@@@L@@L@@@@@" .SBYTE +$A0,"@@BB@@@" .SBYTE ";" .SBYTE +$A0,"@@@@@@@@@" .SBYTE ";" .SBYTE +$A0,"@@@@BB@@@@@@" .SBYTE +$20,"K@@@@K@@@@@@" .SBYTE +$A0,"BB@@@@@@B@@@@" .SBYTE +$A0,"B@@@@@@BB@@@@@" .SBYTE ";" .SBYTE +$A0,"B@@@@B" .SBYTE ";" .SBYTE +$A0,"@@@@@BB@@@@NAE" .SBYTE +$A0,"@@@@FAM@@@@BB@" .SBYTE +$A0,"@@@@@@@@@@@@@@" .SBYTE +$A0,"@@@BH" .SBYTE +$20,"AC@@@@@@@O@@@" .SBYTE +$20,"@@@DA" .SBYTE +$A0,"GB" .SBYTE ";" .SBYTE +$20,"B@@@@@@@@@@@@" .SBYTE +$20,"@@B" .SBYTE ";" .SBYTE +$A0,"BFAJAAAAAAAAA" .SBYTE +$A0,"AAAAAJAE" ; BD3 .SBYTE +$A0,"DAAAAAIAAAAAAI" .SBYTE +$A0,"AAAAACB" .SBYTE "; ; ;" .SBYTE +$20,"B@@@@@@" .SBYTE +$A0,"B@" .SBYTE "END" .SBYTE +$A0,"@BB@" .SBYTE "; ;" .SBYTE +$20,"@B@@" .SBYTE ";" .SBYTE +$A0,"@@@HAAAAAGB" .SBYTE "; ; ;" .SBYTE +$20,"B@@" .SBYTE +$A0,"DC@@B@" .SBYTE "; ;" .SBYTE +$A0,"@BH" .SBYTE +$20,"AAAAA" .SBYTE +$A0,"G@@B" .SBYTE +$20,"B@@" .SBYTE +$A0,"B@@" .SBYTE ";" .SBYTE +$A0,"@@BB@@@@@B@@" .SBYTE +$20,"B" .SBYTE +$A0,"B@@B@" .SBYTE "; ;" .SBYTE +$A0,"@BB@@" .SBYTE ";" .SBYTE +$A0,"@@B@@FE@@B@@" .SBYTE ";" .SBYTE +$A0,"@@BB@@@@@B@@@@" .SBYTE +$20,"@@B@@@@@" .SBYTE +$A0,"BB@@K@@B@@@@" .SBYTE +$20,"O@B@@@@@" .SBYTE +$A0,"BB@@B@" .SBYTE ";" .SBYTE +$A0,"B@@@@@@" .SBYTE +$20,"B@@@@@" .SBYTE +$A0,"BB@@B@@B@@DC@@" .SBYTE +$A0,"B@@@@@BB@@B@@B" .SBYTE +$20,"@@B" .SBYTE +$A0,"B@@B" .SBYTE "; ;" .SBYTE +$A0," BB" .SBYTE ";" .SBYTE +$A0,"@B@@B@@B" .SBYTE +$20,"B@" .SBYTE ";" .SBYTE +$A0,"H" .SBYTE +$20,"M@@@N" .SBYTE +$A0,"GB@@L@@B@@FE@" .SBYTE +$A0,"@B@@@@@BB@@@@" .SBYTE +$A0,"@B@@@@@@B@@@@" .SBYTE +$A0,"@BB@@@@@B@@@@" .SBYTE +$A0,"@@B@@@@@BB@@@" .SBYTE +$A0,"@@HAAA" .SBYTE +$20,"C@@" .SBYTE +$A0,"H" .SBYTE +$20,"AAAAA" .SBYTE +$A0,"GH" .SBYTE +$20,"AAAAA" .SBYTE +$A0,"G@" .SBYTE ";" .SBYTE +$20,"@B@@B@@@@@" .SBYTE +$A0,"BB@@" .SBYTE +$20,"O@@B@" .SBYTE ";" .SBYTE +$20,"@B@@L@@@@@" .SBYTE +$A0,"BB@@@@@" .SBYTE +$20,"B@" .SBYTE ";" .SBYTE +$20,"@B@@@@@" .SBYTE ";" .SBYTE +$A0,"@@BB@@@@@" .SBYTE +$20,"B@" .SBYTE ";" .SBYTE +$20,"@B@@@@@@@@" .SBYTE +$A0,"BFAAAAAJAAA" .SBYTE +$A0,"JAAAAAAAAE" ; *= $02E0 .WORD GAME .END