@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@W1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD` D  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLL&0") $G% }H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` dB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}} HE |||DDOS DOSDOS SYS }}}}CDOS SYS} 0`BDELV !B }`LVUQ   ]   TU J ]L!T  #      TU  } L ? .  t`GBJ V~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI   0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DELV䌚 !B y`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J V (` 9 V⪍ ઍ  -'}LLu DEHILV 9 .l 9 .l  `` s$B VBH(}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL)}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e*}1i1232435ޥ<<8} 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D,}UPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. LOCK F-}ILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES9!&x#!7&p))'&X*./)L''-؆莟.}R'S  vW DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i/}il ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 00}JB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE1}N !B 1L " 1 !BDED:}:1BJ|DE 1DEBH2}I 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L 3} BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWED COPYING---DN:4}# 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B5} 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#6}PdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%7} 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C}//3Hu ξL/L DRIVE TO WRITE DOS FILES TO?WRITING NEW DOS FILESTYPE "Y" TO WRITE DOS TO DRIVE 1.?}D1:DOS.SYSERROR - NOT VERSION 2 FORMAT. , &* բ( 1L `[) 0NΞ 0 L1M) 1@} L BAD LOAD FILELOAD FROM WHAT FILE?) 0 0#B 1L WHAT FILE TO LOCK?) 0 0$B 1L WHAT FILE TO UNLOCK?DUA}P DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO USE PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV. h  ,B}  `)  <0 2 2 0  ,   ,,ޢ* 1L ,K* 1 ~0 0C}FINSERT BOTH DISKS, TYPE RETURNERROR - DRIVES INCOMPATIBLE., 1 ~038  , 1L D}, &*  Lz+, 0 , 1 ~0 + Y,0!,0 ,L+ ,mm  v,"ǭE}0Ξ, 05,Lt+L +,Hh` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNF}INSERT DESTINATION DISK,TYPE RETURN`    `L,8,0( rG}L1(`ߢ) 1* 1 ~0Y`hhL S SL1) 8`NAME OF FILE TO MOVE?- 0 0|DLtH}% A., 1 <0 0 .@L# .BJ 1  DEHIB V L1 ,5 1 <0,L. I} JB|,A#Pd#DE 1 HI BDEHHII 1 B 1 , 1 <0,0Lf- B VJ},A#P, 1 <0 0L#L ߢ) 1* 1 ~0Yj383}mm ݭK}}`8}``|* ? ɛ,`|:(|/ 1L `DESTINATION CANT L}BE DOS.SYS0 0H{ $22Δ $28/L /) $2 Π $2 0 ξM}hAΞB,0 J 1 BޝDEHI,HDE 1HIHIDELSAVE-N}GIVE FILE,START,END(,INIT,RUN)O X0 1`BDEPHI V` X0H 1 L O}0 0 1L0`PLEASE TYPE 1 LETTER,0`hhL <0 1L0LA1 ,;ɛ7,"ɛ:ݦ1ݥP}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{Q}NAME TOO LONG B VL ` L1I H1EӝDL1|mDiE` V0`8d/8 i:"2!22 1R} L ERROR- 128ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4u; CLOUDHOPPER; by Greg Knauss; Copyright 1988 by ANALOG Computing;; CHECKSUM DATA;[18 D4 B3 2E 68 04 47 59 ; 71 18V} 1B 42 6A 87 2F A5 ; 43 14 66 25 C6 F3 5E 4D ; B6 7D 89 AC 89 8E D3 91 ; EE 91 06 0F 15 B6 73 E9 ; 1B 3C D3 B4 01 7B 6E 5W}4 ; 97 68 B8 C0 93 69 93 C7 ; 31 ]BYTE ST=[0],PM,Y,UP,X,S,P,OONS,ES, LIVES,CHX=[10],CHY=[40],FGBYTE ARRAY CSPD(4),CX(4)X},CCNT(4)INT X1,CX1=[1]INT ARRAY CDIR(4)CARD SC,J,I,CH,DRB,SCN,SCR=[0]PROC DLIST()[112 112 68 0 0 4 4 4 68 0 0 68 0 04 Y}4 68 0 0 68 0 0 4 4 68 0 0 68 0 04 4 68 0 0 68 0 0 4 4 68 0 0 469 0 0 70 0 0 2 2 7 7 65 DLIST]RETURNPROC PLRVBI()[162 3Z} 189 244 6 240 89 56 221 240 6240 83 141 254 6 106 141 255 6 142253 6 24 169 0 109 253 6 24 109 2526 133 204 133 206 189 2[}40 6 133 203173 254 6 133 205 189 248 6 170 23246 255 6 144 16 168 177 203 145 205169 0 145 203 136 202 208 244 76 876 16\}0 0 177 203 145 205 169 0 145203 200 202 208 244 174 253 6 173254 6 157 240 6 189 236 6 240 48 133203 24 138 141 253 6 109]} 235 6 133204 24 173 253 6 109 252 6 133 206189 240 6 133 205 189 248 6 170 1600 177 203 145 205 200 202 208 248 174 253 ^}6 169 0 157 236 6 202 48 376 2 6 76 98 228 0 0]RETURNPROC VBINIT()[169 7 162 6 160 0 32 92 228 96]RETURNPROC CHSTORE(_})[0 0 0 0 0 0 0 00 0 1 21 170 0 0 00 1 85 85 169 10 0 05 85 85 85 106 170 0 085 85 85 85 149 169 10 085 85 85 89 85 170`} 170 00 85 85 85 106 170 168 00 0 85 85 149 170 0 00 0 0 90 168 128 0 03 3 15 15 15 63 252 2550 192 195 207 243 243 243 a}2550 0 3 207 243 243 255 25548 240 240 252 252 252 255 25515 63 255 255 255 255 63 15192 240 252 252 252 252 240 1921 1 b}1 1 15 15 15 0255 195 185 181 173 157 195 255255 247 247 247 247 247 247 255255 195 253 195 191 191 195 255255 195 253 22c}7 253 253 195 255255 187 187 193 251 251 251 255255 195 191 195 253 253 195 255255 195 191 131 189 189 195 255255 129 253d} 251 247 247 247 255255 195 189 195 189 189 195 255255 195 189 193 253 253 195 2550 0 0 0 192 192 192 0255 255 255 255 25e}5 255 255 2550 240 204 240 204 204 240 00 204 204 204 48 48 48 00 60 192 192 204 204 60 00 252 204 252 240 204 204 00 25f}2 192 240 192 192 252 00 204 204 240 204 204 204 00 204 252 252 252 252 204 00 48 204 252 204 204 204 00 204 204 204 204 g}204 252 00 252 192 252 12 12 252 0255 193 191 195 253 253 131 255255 193 191 191 191 191 193 255255 195 189 189 189 189 1h}95 255255 131 189 189 131 167 185 255255 129 191 143 191 191 129 255255 255 231 231 255 231 231 255255 255 255 255 255 25i}5 255 85253 253 253 253 253 253 253 253253 253 253 253 253 253 253 85253 253 253 253 253 244 208 6464 208 244 253 253 253j} 253 253255 255 255 255 127 31 7 13 15 63 255 255 255 255 255253 255 255 255 127 31 7 10 64 208 244 253 255 255 850 0 0 k}0 0 64 208 80]RETURNPROC GUYCLOTHES()[56 60 0 0 36 126 255 90 126 60 60 60126 126 24 0 28 60 0 0 36 126 255 90 126 60 6l}0 60126 126 24 0]RETURNPROC GUYFACE()[0 0 40 60 24 0 0 129 126 24 24 24 24126 24 00 0 20 60 24 0 0 129 126 24 24 24 24m}126 24 0]RETURNPROC COPTER() [240 16 56 77 143 222 124 4830 16 56 77 143 222 124 4815 8 28 178 241 123 62 12120 8 28 n}178 241 123 62 12]RETURNPROC CLOUDS()[5 6 7 6 7 6 5 4 5 6 7 8 0 0 0 1 2 3 4 5 6 5 6 7 8 0 0 0 0 1 2 3 4 5 6 7 6 7 8 0 0o} 1 2 3 4 5 4 5 6 7 6 7 2 8 1 2 3 7 8 0 0 0 1 2 3 2 3 4 5 6 7 6 7 8 1 8 0 0 0 0 1 2 3 7 8 0 0 1 2 3 4 5 4 3 4 5 6 7 6 7 8 0p} 0 0 0 1 2 3 4 5 6 7 8 0 0 0 1 2 3 4 5 0 0 1 2 3 4 5 6 5 6 7 8 0 0 0 0 1 2 3 4 5 7 8 0 0 0 0 1 2 3 4 5 4 5 6 7 8 0 0 0 0q} 0 1 2 8 0 0 0 1 2 3 4 5 4 6 7 8 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 1 8 0 0 0 0 0 0 1 8 1 2 3 7 8 0 0 0 0 0 0 0 1 2 3 4 5 6 5r} 4 5 6 7 8 0 0 0 0 0 0 1 2 3 4 5 6 5 0 0 0 0 0 1 2 3 4 6 7 8 0 0 0 0 0 1 2 7 8 0 0 0 0 0 0 1 2 3 6 7 8 0 0 0 1 2 3 4 5 s}4 5 6 5 6 7 8 0 0 0 0 0 1 2 3 7 8 0 0 1 2 3 4 5 4 7 8 0 0 0 0 0 1 8 0 0 0 0 1 2 3 4 6 7 8 1 8 1 2 3 5 7 8 0 0 0 0 0 1 2 3 t}6 7 8 0 1 8 0 0 0 1 2 3 4 5 6 5 6 7 0 0 0 0 1 2 7 8 0 0 0 0 0 0 0 0 0 0 1 8 0 0 0 0 0 0 0 0 0 1 7 8 0 0 0 0 0 0 0 1 2 3 u}4 6 7 2 8 0 0 0 0 0 0 0 1 2 3 6 7 8 1 2 7 8 0 0 0 0 0 0 1 2 8 1 8 0 0 0 0 0 0 1 2 3 5 6 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 v}2 3 4 5 6 5 6 7 8 0 0 1 2 8 0 0 0 5 6 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 7 8 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 5 4 5 6 w}7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 4 5 6 7 8 1 2 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 x}0 0 0 0 1 2 3 4 5 4 5 6 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 y}1 2 3 4 3 4 5 6 7 6 7 6 5 4 5 6 7 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 z}0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]PROC SETCLOUDS()FOR J=1 TO 120 DOS=PEEK(CLOUDS+J+ST*120) POKE(J+SC+160,S) POKE(J+SC+640,{}S) ODFOR J=1 TO 120 DOS=PEEK(CLOUDS+J+(ST+1)*120) POKE(J+SC+400,S) POKE(J+SC+880,S) ODFOR J=1 TO 40 DO S=PEEK(CLOUDS+J|}+ST*120) POKE(SC+1120+J,S) I=RAND(4)+9 POKE(SC+1320+J,I) IF I=9 THEN I=13 FI POKE(SC+1280+J,I-1) ODRETURNPROC RNDCLD()}}CSPD(I)=RAND(3)+9-ST*2RETURNPROC MOVECLDS()FOR I=0 TO 3 DOCCNT(I)==+1WHILE CCNT(I)>CSPD(I) DOIF CX(I)=77 THEN CDIR(I)~}=-1 RNDCLD() FIIF CX(I)=0 THEN CDIR(I)=1 RNDCLD() FICX(I)==+CDIR(I)POKEC(DLIST+I*8+9,SC+CX(I)+I*240+160)CCNT(I)=1OD OD}RETURNPROC BALLOONS()P=0FOR I=5 TO 35 DOP=RAND(4)IF P=0 THEN J=1 FIIF P=1 THEN J=7 FIIF P=2 THEN J=13 FIIF P=3 THEN }J=19 FIPOSITION(I,J) PRINT("-.")I==+5 ODRETURNPROC PAUSE()SNDRST() POKE(764,255) WHILE PEEK(764)<>33 DO ODPOKE(7}64,255)RETURNPROC PRNTSCR()POKEC(88,SCN)POSITION(12,0) PRINTC(SCR)POKEC(88,SC)RETURNPROC BURN()POKE(DLIST+45,SC+32*}40+1)P=1 IF CX1=1 THEN P=17 FIPOKE(1775,P)FOR I=1 TO 300 DO ODPOKE(DLIST+45,SC+33*40+1)P=9 IF CX1=1 THEN P=25 FIPOKE(17}75,P)FOR I=1 TO 300 DO ODRETURNPROC CHMOVE()CHX==+CX1*((ST/2)+1)IF CHX<3 OR CHX>252 THEN CX1=-CX1CHY=RAND(5)*32+40 FI}POKE(53251,CHX) POKE(1783,CHY)IF CHXX THEN SOUND(1,190+(CHX }MOD 4) *20,14,(X-CHX)/17-3) FIRETURNPROC BLOOGA()SOUND(0,0,0,0)I=3 J=(X-50)/4-1DOP=LOCATE(J,I)I==+1 IF I=24 THEN I=0} J==+1 FIUNTIL P=45 ODSOUND(0,50,10,10)POSITION(J,I-1) PRINT("  ")OONS==+1 IF OONS=6 THEN ES=1 FISCR==+10+I*(ST+}1) PRNTSCR()UP=16 SOUND(0,0,0,0)RETURNPROC POS()POKE(53248,X) POKE(53249,X) POKE(53250,X)POKE(1780,Y) POKE(1781,Y) PO}KE(1782,Y+16)RETURNPROC SETUP()GRAPHICS(0) POKE(559,0) POKE(82,0) POKE(752,1) POKE(82,0)SCN=PEEKC(88) SC=(PEEK(106)-16)}*256POKEC(DLIST+3,SC)POKEC(DLIST+9,SC+4*40+1)POKEC(DLIST+12,SC+7*40+1)POKEC(DLIST+17,SC+10*40+1)POKEC(DLIST+20,SC+13*40+}1)POKEC(DLIST+25,SC+16*40+1)POKEC(DLIST+28,SC+19*40+1)POKEC(DLIST+33,SC+22*40+1)POKEC(DLIST+36,SC+25*40+1)POKEC(DLIST+41},SC+28*40+1)POKEC(DLIST+45,SC+32*40+1)J=PEEKC(88) POKEC(DLIST+48,J)POKEC(560,DLIST)MOVEBLOCK(1536,PLRVBI,160)PM=PEEK(106})-32 DRB=PM*256+1ZERO(DRB+1024,1024) POKE(623,36)POKE(1788,PM+4)POKE(53277,3) POKE(54279,PM)POKE(1771,PM)POKE(1784,16) P}OKE(1785,16) POKE(1786,1) POKE(1787,8)POKE(1772,17) POKE(1773,17) POKE(1774,1) POKE(1775,1)POKE(53259,3)MOVEBLOCK(DRB,GU}YFACE,32)MOVEBLOCK(DRB+256,GUYCLOTHES,32)FOR I=0 TO 256 DO POKE(DRB+I+512,24) ODMOVEBLOCK(DRB+256*3,COPTER,32)VBINIT() } POKE(704,30) POKE(705,84) POKE(706,15)POKE(707,2) POKE(708,15) POKE(709,8)POKE(710,52) POKE(711,42)POKE(712,7*16)PO}SITION(0,0)PRINTE("˻")PRINT("")CH=(PEEK(106)-24)*256MOVEBLOCK(CH,CHSTORE,512)POKE}(756,CH/256)ST=0FOR I=0 TO 4 DO CDIR(I)=1 CSPD(I)=RAND(3)+10-ST*2 CX(I)=RAND(70)+1 CCNT(I)=1 ODZERO(SC,2000) SETCLOUDS}()RETURNPROC TITLE()POKE(53278,0) POKE(77,0) POKEC(88,SC)POSITION(0,7)PRINTE (" RLN M RLP M M ;LP")PRINTE} (" M M M M M M M M")PRINTE (" QLN LLN QLO QLO LLO")POSITION(0,13)PRINTE (" M M RLP ;;P} ;;P ;LN ;;P")PRINTE (" ;LM M M ;LO ;LO ;N ;;O")PRINTE (" N N QLO N N LLN NSTU")POSITION(14,20)PRI}NT("")PRNTSCR() SETCLOUDS() MOVECLDS()POKE(559,62) X=120 Y=169 POS()DOMOVECLDS() BURN() CHMOVE()IF PEEK(53}279)=5 THEN ST==+1 IF ST=5 THEN ST=0 FI SETCLOUDS() FOR I=0 TO 3 DO RNDCLD() OD FIUNTIL PEEK(53279)=6 OR STRIG(0)=0 ODPOK}E(764,255)ZERO(SC+7*40,120)ZERO(SC+13*40,120)ZERO(SC+20*40,40)SCR=0 LIVES=3 UP=0 X1=0 OONS=0 FG=0POKEC(88,SCN)POSITION(}12,0) PRINT("0")POKEC(88,SC)RETURNPROC MAIN()DOSETUP() TITLE()BALLOONS()WHILE LIVES>0 DO X1=0 X=120DOES=0}WHILE ES=0 DOPOKE(77,0) MOVECLDS()S=STICK(0)P=PEEK(53254)IF S=7 THEN POKE(1772,1) POKE(1773,1) FIIF S=11 THEN POKE(1772},17) POKE(1773,17) FIIF P=1 OR P=2 THEN IF S=7 THEN X1=1 FI IF S=11 THEN X1=-1 FI FIIF PEEK(53263)=3 THE}N X1=CX1 FIIF X>200 THEN X1=-1 X==-1 FIIF X<50 THEN X1=1 X==+1 FIX==+X1IF UP=0 THEN SOUND(0,0,0,0) FIY==+1IF UP=0 AND (}P=1 OR P=2) THEN UP=5 X1=0 IF S=14 OR S=10 OR S=6 OR STRIG(0)=0 THEN UP=25 FI IF S=10 OR S=11 THEN X1=-1 FI IF S=6 OR S}=7 THEN X1=1 FI FIIF Y<5 THEN UP=0 FI IF UP=0 AND (P=1 OR P=2) THEN UP=5 FIIF UP>0 THEN UP==-1 Y==-2 SOUND(0,UP*5+50,10,}4) FIIF UP>5 THEN Y==-1 FIPOS()IF PEEK(53252)=4 AND Y<180 THEN BLOOGA() FIPOKE(53278,0)IF Y=180 AND UP=0 THEN ES=2 FOR} J=181 TO 240 DO MOVECLDS() Y==+1 X==+X1 POS() CHMOVE() BURN() OD FIBURN() CHMOVE()IF PEEK(764)=33 THEN PAUSE() FIIF SCR>}999 AND FG=0 THEN FG=PEEK(705) POKE(705,2) LIVES==+1 FIODIF OONS=6 THEN FOR J=4 TO Y/3 DO Y==-3 POS() BURN() CHMOVE() MOV}ECLDS() SOUND(0,Y+50,10,4) OD SNDRST() X=120 Y=1 UP=0 X1=0 POS() ST==+1 IF ST=5 THEN ST=3 FI SETCLOUDS() BALLOONS() OONS=}0 FIUNTIL ES=2 OD P=PEEK(705)IF P=84 THEN S=118 FIIF P=118 THEN S=184 FIPOKE(705,S)IF FG>1 THEN POKE(705,FG) FG=1 FIL}IVES==-1Y=240 UP=40WHILE STRIG(0)=1 DO MOVECLDS() BURN()CHMOVE()POKE(764,255)ODX=0 POS()ODODf;ӠŮ MODULE ; CHECKSUM DATA;[61 4F 6D B9 C9 38 9B 37 ; 98 6A D4 94 37 3C E1 CC ; 66 F4 71 86 25 4D C2 DA }; C8 DD 8E 0C F2 7E 60 C4 ; B0 C6 A0 DB EB 75 E1 2E ; CD BA 0D 76 60 2A 9B CE ; AC ];宛; This hol }ds the 4 direction; positions and each of them has 3; animation shapes to themBYTE ARRAY P0=[ 16 186 186 40 56 186 186 0 } 16 56 186 40 56 186 56 0 16 186 56 40 56 56 186 0 0 186 186 56 40 186 186 16 0 56 186 56 40 186 56 16 0 186 56 56 40 }56 186 16 102 0 126 238 126 0 102 0 36 0 126 238 126 0 36 0 66 0 126 238 126 0 66 0 102 0 126 119 126 0 102 0 36 0 126 }119 126 0 36 0 66 0 126 119 126 0 66 0 ],; 宛; Has the same as your car but ; different shape s }tyle EP=[ 189 189 36 60 60 165 189 36 60 189 36 60 60 165 60 36 189 60 36 60 60 36 189 36 36 189 165 60 60 36 189 18 }9 36 60 165 60 60 36 189 60 36 189 36 60 60 36 60 189 198 0 255 218 218 255 0 130 68 0 255 218 218 255 0 68 130 0 } 255 218 218 255 0 130 99 0 255 91 91 255 0 99 34 0 255 91 91 255 0 34 65 0 255 91 91 255 0 99],; } CHST=[ 0 0 3 15 15 3 0 0 0 0 0 192 192 0 0 0 15 48 192 192 192 48 15 0 192 48 12 12 12 48 192 0 48 48 204 204 20 }4 48 48 0 255 0 0 0 0 0 255 0 204 204 204 204 204 48 48 0 48 48 204 204 204 204 204 204 204 204 204 204 204 204 204 2 }04 192 192 192 192 192 192 192 192 12 12 12 12 12 12 12 12 0 0 0 0 0 0 255 0 255 0 0 0 0 0 0 0 192 192 192 192 19 }2 48 15 0 12 12 12 12 12 48 192 0 192 48 12 12 12 12 12 12 15 48 192 192 192 192 192 192 0 51 0 63 51 63 0 51 0 0 }0 85 0 0 0 0 0 0 0 84 0 0 0 0 16 16 16 16 16 16 16 0 3 12 8 15 15 15 15 15 192 240 240 240 240 240 240 240 0 5 21 }42 41 37 41 42 0 80 84 168 104 88 104 168 0 0 63 63 63 0 0 0 0 0 240 245 240 0 0 0 0 107 106 106 106 106 106 0 0 2 }53 253 253 189 189 173 0 10 42 1 1 1 1 1 1 128 144 0 0 0 0 0 0 0 48 204 205 204 48 0 0 0 0 0 84 16 0 0 0 0 0 0 0 0 }0 0 0 51 15 12 60 252 255 60 15 48 252 48 252 63 63 60 240],; ؠ٠ for different ; screen objects.; } PRL=[ 3 1 18 1 3 23 18 23 0 11 3 11 0 13 3 13 9 4 18 4 9 11 15 11 12 7 15 7 18 7 21 7 9 13 15 13 12 15 15 }15 40],; PUD=[ 3 1 3 11 3 13 3 23 6 3 6 11 6 13 6 21 9 6 9 11 15 7 15 11 18 7 18 11 9 13 9 21 12 1 }5 12 21 18 13 18 15 18 17 18 21 15 17 15 21 40],; DOOR=[ 3 12 15 14 10 7 19 1 10 21 16 17 16 21 19 23 }19 11],; ENER=[ 10 14 16 19 4 7 28 14 22 19 34 7], KEYS=[7 4 19 4 31 4 16 9 22 9 7 17 31 17 19 14], SPNA }=[0 3 1 2],SCR,DLIST,T8M(12), T3M(6),ST=632,PCOLR=704,HPOSP=53248, HPOSM=53252,SIZEP=53256,MPL=53256, AUDFC=53760,PARY,SH, }SCOR(8),SC, STX(5),STY(5),ODR(5),OSX(5),OSY(5), CSX(5),CSY(5),CDX(5),CDY(5),SAX(5), SAY(5),BRPO(5),DIR(5),DDU(5),DDD(5), }DDL(5),DDR(5),EH(5),EDF(4),PDF(5), SPT(5),SPIN(5),SPN(5),ECT(4)CARD ARRAY Y40(24),PAD(5)CARD CHSET,DL,CLP0,PMTEMP,M0,PL0,P }L1,PL2,PL3,SHAD,GC,GG,POWER=[0],DELAY,MBTBYTE P106,LP0,LP1,R,PLX,PLY,DRX,DRY,P0X,P0Y,P1X,P1Y,TALL,IC,S,S0,S1,PMTL,SP=[2] },PMNO,DI,TS0,TS1,TS2,TS3,STIK,DCD,DCD0BYTE DDM,PMM,TM,SP1,PO,LB,SP0,ST0,ST1, ST2,ST3,COL=[0],PT=[0],PD=[0],SSC, XTRA=[3] },OSCOR=[0],ESC=[2],ELP,SES, MEM,INE=[0],THO=[1]; ӠŠBYTE RTCLOK=18,ATRACT=77,RAMTOP=106, SDMCTL=55 }9,GRPRIOR=623,STRIG0=644, CHBAS=756,CH=764,PFCOLR2=53272, P0C=53260,GRACTL=53277,HITCLR=53278, CONSOL=53279,AUDCTL=53768, } PMBASE=54279,WSYNC=54282, VCOUNT=54283 ; PROC PRSCOR() FOR SP0=0 TO 7 DO SCR(10+SP0)=SCOR(SP0)+16 ODRET }URN; PROC SCLP() LB=8 FOR SP1=0 TO 7 DO LB==-1 PO=SCOR(LB) IF PO>9 THEN SCOR(LB)=SCOR(LB) }-10 SCOR(LB-1)=SCOR(LB-1)+1 FI ODRETURN; Ġ; 宛PROC SCORE(BYTE ADD) }IF ADD>0 THEN ADD==-1 FOR SP0=0 TO ADD DO SCOR(7)=SCOR(7)+1 SCLP() ;up date score. OD FI PRSCOR() ;Print it.R }ETURN; ȠPROC THOUS(BYTE TH) SCOR(4)==+TH SCLP() PRSCOR()RETURN; Ġ }PROC HUND(BYTE HD) SCOR(5)==+HD SCLP() PRSCOR()RETURN; ΠPROC PL(BYTE PX,PY) PLX=PX PLY=PY S }CR(PLX+Y40(PLY))=IC ;Access screen.RETURN; ; PROC DR(BYTE DX,DY }) DRX=DX DRY=DY ;Find out which is greater ; the plot or the drawto x position. IF PLX<>DRX THEN IF PLX>DRX THEN S }0=DRX S1=PLX ELSE S0=PLX S1=DRX FI IF IC=70 THEN SCR(S0+Y40(DRY))=67 SCR(S1+Y40(DRY))=68 S0==+1 S1==-1 F }I FOR S=S0 TO S1 DO SCR(S+Y40(DRY))=IC OD FI ;Find out the greater y position. IF PLY<>DRY THEN IF PLY>DRY THEN } S0=DRY S1=PLY ELSE S0=PLY S1=DRY FI IF IC=73 THEN SCR(PLX+Y40(S0))=72 SCR(PLX+Y40(S1))=71 TS0=SCR(DRX+1 }+Y40(S0)) TS2=SCR(DRX-1+Y40(S0)) ;Check for intersecting line and ;add corners when needed. IF TS0=70 THEN S }CR(DRX+Y40(S0))=81 FI IF TS2=70 THEN SCR(DRX+Y40(S0))=80 FI TS1=SCR(DRX+1+Y40(S1)) TS2=SCR(DRX-1+Y40(S1)) } IF TS1=70 THEN SCR(DRX+Y40(S1))=78 FI IF TS2=70 THEN SCR(DRX+Y40(S1))=79 FI S0==+1 S1==-1 FI FOR S }=S0 TO S1 DO SCR(DRX+Y40(S))=IC ;Plot character OD ;on screen. FI ;Save drawto's values in plx and ; }ply variable for next drawto. PLX=DRX PLY=DRYRETURN;;Ϡ }.PROC PMST(CARD PMADR,SHADR,D) ;Make array pary point to the ;players ram area. PARY=PMADR TM=T3M(D) SHAD=SHADR DI=T8M(T }M) ;Check to see if Player is player or ;missile shapes. IF PMADR>M0 THEN PMNO=((PMADR-PMTEMP-1024)) RSH 8 ELSE PMN }O=4 FIRETURN;;Я͠; };箛PROC PM_GO(BYTE PMX,PMY,FR) IF PMNO<4 THEN HPOSP(PMNO)=PMX ELSEIF PMNO=4 THEN;If it's missiles move them all as } 1. HPOSP(PMNO)=PMX+6 HPOSP(PMNO+1)=PMX+4 HPOSP(PMNO+2)=PMX+2 HPOSP(PMNO+3)=PMX FI ;Shape table index using anim }ation ;frame variable plus direction var. SH=SHAD+((T8M(FR))+DI) ;This loop erases as many bytes ;ahead and behind the P }/M shapes as ;the variable SP's value. FOR TALL=0 TO SP DO PARY((PMY-SP)+TALL)=0 PARY((PMY+7)+TALL)=0 OD ;takes the d }ata from the shape table ;and puts it in player ram. FOR TALL=0 TO 7 DO PARY(PMY+TALL)=SH(TALL) ODRETURN; };;;PROC VARSET(BY }TE VN) OSX(VN)=STX(VN) ;Make old X&Y pos. OSY(VN)=STY(VN) ;= new X&Y pos. ODR(VN)=DIR(VN) ;old direction = new CSX(VN })=STX(VN)-48 ;Make P/M x&y = CSY(VN)=STY(VN)-32 ;that of screen. SAX(VN)=CSX(VN)&3 ;Checks for even SAY(VN)=CSY(VN)&7 ;cha }r. pos. CDX(VN)=CSX(VN)/4 ;Divide to find CDY(VN)=CSY(VN)/8 ;char. we're over.RETURN;栛; };PROC LOOK() BYTE K0,K1,KP IF STX(4)>52 AND STX(4)<192 THEN DCD=SCR(CDX(4)+Y40(CDY( }4))) DCD0=SCR(CDX(4)+1+Y40(CDY(4))) ;Check to see if char. is Gold. IF DCD=193 THEN SCR(CDX(4)+Y40(CDY(4)))=0 SCR }(CDX(4)+1+Y40(CDY(4)))=0 GG==+1 ;increase gold count. ST0=10 ;sound effects timer. SCORE(5) ;Add 5 points to score. } FI ;Check to see if it's an energizer. IF DCD=86+INE THEN ;Compare your position with that ;of the enegizer posit }ion table. FOR LP0=0 TO 12 STEP 2 DO K0=ENER(LP0) K1=ENER(LP0+1) ;If it'S a match the erase it. IF K0=CDX(4) A }ND K1=CDY(4) THEN IC=98 PL(CDX(4),CDY(4)) PL(CDX(4)+1,CDY(4)) FI OD KP=LP0 HUND((INE RSH 1)+1) P }OWER=100 ;Set power timer. ST3=60 PT=60 PD=5 FOR LP0=0 TO 3 DO ECT(LP0)=80 OD FI ;See if it's a key. IF D }CD=96 THEN ;Scan key pos. table and see if ;ours matches the keys. FOR LP0=0 TO 16 STEP 2 DO K0=KEYS(LP0) K }1=KEYS(LP0+1) IF K0=CDX(4) AND K1=CDY(4) THEN IC=98 PL(CDX(4),CDY(4)) PL(CDX(4)+1,CDY(4)) KP=LP0 ;Ma }ke KP=LP0 so we can ;use it to index the ;door array. HUND(1) ;Add 1 hundred to score. ST2 }=20 FI OD ;Find out if it'S a vertical or ;horizontal door and erase it. IF KP<4 THEN IC=98 PL(DOOR(KP) },DOOR(KP+1)) PL(39-DOOR(KP),DOOR(KP+1)) ELSE IC=98 PL(DOOR(KP),DOOR(KP+1)) PL(DOOR(KP)+1,DOOR(KP+1)) PL(38 }-DOOR(KP),DOOR(KP+1)) PL(38-DOOR(KP)+1,DOOR(KP+1)) FI FI FI ;Find out if it's the money bag. IF DCD=99 THEN IC=98 } PL(CDX(4),CDY(4)) THOUS(THO) ;Add thousands to score. PL(CDX(4)+1,CDY(4)) ST2=30 FIRETURN ; };PROC CHCH(BYTE CN);CN is the P/M number. BYTE BPAS,BPAS2 ;Checks to see if player s }hape is ;evenly placed over a character. IF SAY(CN)=0 AND SAX(CN)=0 THEN ;Set all direction vars. to 0. DDU(CN)=0 DDD(C }N)=0 DDL(CN)=0 DDR(CN)=0 DDM=0 EH(CN)=0 ;Checks Pl. up direction for walls. DCD=SCR(CDX(CN)+Y40(CDY(CN)-1)) DCD0=SC }R(CDX(CN)+1+Y40(CDY(CN)-1)) IF DCD>66 AND DCD<86 OR DCD0>66 AND DCD0<86 THEN DDU(CN)=1 FI ;Check down DCD=SCR( }CDX(CN)+Y40(CDY(CN)+1)) DCD0=SCR(CDX(CN)+1+Y40(CDY(CN)+1)) IF DCD>66 AND DCD<86 OR DCD0>66 AND DCD0<86 THEN DDD(CN) }=1 FI ;Checks left. DCD=SCR(CDX(CN)-1+Y40(CDY(CN))) IF DCD>66 AND DCD<86 THEN DDL(CN)=1 FI ;Check right. }DCD=SCR(CDX(CN)+2+Y40(CDY(CN))) IF DCD>66 AND DCD<86 THEN DDR(CN)=1 FI ;If it's your car see what's under ;it. IF } CN=4 THEN DCD=SCR(CDX(4)+Y40(CDY(4))) DCD0=SCR(CDX(4)+1+Y40(CDY(4))) ;See if it'S more than just a ;blank area. } IF DCD>0 AND DCD0>0 THEN DDM=1 FI FI FI ;See if we're off screen. IF STX(CN)<30 THEN STX(CN)=220 FI IF ST }X(CN)>220 THEN STX(CN)=30 FI ;See if we entered horizontal ;tunnels ,and if so block from ;moving up or down. IF STX( }CN)<56 OR STX(CN)>192 THEN DDU(CN)=1 DDD(CN)=1 DDL(CN)=0 DDR(CN)=0 FI ;See if we're in vertical. IF STY(CN)<48 OR ST }Y(CN)>208 THEN DDL(CN)=1 DDR(CN)=1 FI ;This bit of code tells us which ;directions we can go. IF DIR(CN)=0 AND DDU( }CN)=1 THEN DIR(CN)=ODR(CN) EH(CN)=1 FI IF DIR(CN)=1 AND DDD(CN)=1 THEN DIR(CN)=ODR(CN) EH(CN)=1 FI IF DIR(CN)= }2 AND DDL(CN)=1 THEN DIR(CN)=ODR(CN) EH(CN)=1 FI IF DIR(CN)=3 AND DDR(CN)=1 THEN DIR(CN)=ODR(CN) EH(CN)=1 FI ; }This part moves P/M in the legal ;direction and is used to gain ;continues motion. ;with out it you would have to hold } ;the joystick in that direction ;all the time to keep moving. IF DIR(CN)=0 AND DDU(CN)=0 THEN STY(CN)==-SP FI IF } DIR(CN)=1 AND DDD(CN)=0 THEN STY(CN)=STY(CN)+SP FI IF DIR(CN)=2 AND DDL(CN)=0 THEN STX(CN)=STX(CN)-SP FI IF D }IR(CN)=3 AND DDR(CN)=0 THEN STX(CN)=STX(CN)+SP FIRETURN;; }ﮛPROC EMBR(BYTE EN) BYTE R,D,FL,D0,D1 FL=0 D=ODR(EN) D0=OSY(EN) D1=OSX(EN) VARSET(EN) ;Go set up P/M screen } ;variables. ;Makes sure it'S directly over a ;character position. IF SAX(EN)=0 AND SAY(EN)=0 THEN ;Sees if your pow }er off and if ;they are with in range of you. ;If they are then they follow you! IF POWER=0 AND STX(EN)>STX(4) AND STX( }EN)STX(4)-48 THEN DIR(EN)=3 ELSEIF STY(EN)>S }TX(4) AND STY(EN)STY(4)-48 THEN DIR(EN)=1 ELSE };If not then run random. R=RAND(4) DIR(EN)=R FI DO ;Check for legal movement. IF D=0 AND DIR(EN)=1 THEN FL=1 EL }SEIF D=1 AND DIR(EN)=0 THEN FL=1 ELSEIF D=2 AND DIR(EN)=3 THEN FL=1 ELSEIF D=3 AND DIR(EN)=2 THEN FL=1 } ELSE FL=0 FI ;If illegal move get a new ;direction. IF FL=1 THEN R=RAND(4) DIR(EN)=R FI UNTIL FL= }0 OD IF STX(EN)=D1 AND STY(EN)=D0 THEN R=RAND(4) DIR(EN)=R FI FI CHCH(EN) ;Go check chraracter.RETURNINCLUDE }"D:MIDAS2.ACT" ; CHECKSUM DATA;[EC 61 1B 36 B8 1C C8 1E ; 4C 34 CD 5E 3C 82 2A 56 ; DF 77 62 ED 61 C7 5A 14 ; 20 C1 6C 4F E9 2C D1 }EB ; 6C 95 E1 84 AF 0B 1A 88 ; 3B EE ];;PROC STICK(BYTE PN) VARS}ET(4) ;Set atract to keep it off. IF ST(0)<>15 THEN ATRACT=0 ;Only if x is evenly over a ;character position may you } move ;up or down. IF SAX(4)=0 THEN ;Check for up movement. STIK=ST(0) & 1 IF STIK = 0 THEN DIR(4)=0 FI  } ;Checks for down. STIK=ST(0) & 2 IF STIK=0 THEN DIR(4)=1 FI FI ;Only if y postion even divided ;by 8 m }ay you move left or right. IF SAY(4)=0 THEN ;Check for right. STIK=ST(0) & 8 IF STIK=0 THEN DIR(4)=3 FI  };For left. STIK=ST(0) & 4 IF STIK=0 THEN DIR(4)=2 FI FI FI CHCH(4) ;check for anything. IF DDM=1 AND PN=4 } THEN LOOK() ;If not a wall then what? FIRETURN;PROC CHCOL() BYTE COP COL=0 FOR COP=0 TO 3 DO } IF MPL(COP)>0 THEN COL=MPL(COP) FI OD HITCLR=0 ;clear collision reg.RETURN;場PROC GR4() GRAPHICS(0) DLIST}=PEEKC(560) POKE(752,1) PRINT(" ") ;Change display list. DLIST(3)=66 FOR LP0=6 TO 28 DO DLIST(LP0)=4 OD ;Set multip}lication arrays. FOR LP0=0 TO 40 DO Y40(LP0)=LP0*40 OD FOR LP0=0 TO 12 DO T8M(LP0)=LP0*8 OD FOR LP0=0 TO 4 DO T3M}(LP0)=LP0*3 ODRETURN;Я͠PROC CHSETUP() ;Push ram top pointer back 4K. P106=PEEK(106)-1}2 CHSET=P106*256 RAMTOP=P106 GR4() CHBAS=P106 ;Move rom char. set to ram. MOVEBLOCK(CHSET,57344,1024) ;MOve custom char. }data. FOR CLP0=0 TO 288-1 DO POKE((CHSET+520)+CLP0,CHST(CLP0)) OD SCR=PEEKC(88) ;Find screen ram.RETURN } ;Я͠PROC PM_SET() SDMCTL=62 ;Single line res. GRPRIOR=1+16 ;P/M over PF. GRACTL=3 ;Turn }P/M on. ;Set size to small. FOR LP0=0 TO 3 DO SIZEP(LP0)=0 OD ;Set variables to point to P/M ram. PMBASE=P106+4 PMTEMP}=(P106+4)*256 M0=PMTEMP+768 PL0=M0+256 PL1=PL0+256 PL2=PL1+256 PL3=PL2+256 ;Save addresses of player in PAD. PAD(0)=PL0 }PAD(1)=PL1 PAD(2)=PL2 PAD(3)=PL3 ;Set players color reg.s. PCOLR(0)=0*16+10 ;White. PCOLR(1)=12*16+5 ;Green. PCOLR(2)=8*}16+4 ;Blue. PCOLR(3)=4*16+4 ;Red. ;Zero out P/M area. ZERO(PMTEMP,2048)RETURNPROC PAUSE() POSITION(33,0) PRINT("PAUSE}D") FOR LP0=0 TO 7 DO ;Turn sound off. AUDFC(LP0)=0 OD CH=255 ;Reset key scan. DO ;Till a key is pressed UNTIL CH<25}5 OD CH=255 ;Erase pause message. POSITION(33,0) PRINT(" ")RETURN;;}宛PROC MIRROR() BYTE SC ;Left halfs 20 byte wide. FOR LP0=0 TO 19 DO ;24 bytes tall. FOR LP1=0 TO 23 DO SC=SCR}(LP0+Y40(LP1)) ;check for corner char.s and ;replace it with mirrored char. IF SC=78 OR SC=80 THEN SC==+1 ELSEIF} SC=79 OR SC=81 THEN SC==-1 FI IF SC=67 THEN SC==+1 ELSEIF SC=68 THEN SC==-1 FI IF SC=83 THEN SC==+1 ELSE}IF SC=84 THEN SC==-1 FI ;Put right side down. SCR((39-LP0)+Y40(LP1))=SC OD ODRETURNPROC BOARDS() IC=70 LP0=0 } P0X=PRL(LP0) ;Put walls up. WHILE P0X<40 DO ;Get values from arrays. P0Y=PRL(LP0+1) P1X=PRL(LP0+2) P1Y=PRL(LP0+3)  } PL(P0X,P0Y) DR(P1X,P1Y) LP0==+4 P0X=PRL(LP0) OD IC=73 LP0=0 P0X=PUD(LP0) WHILE P0X<40 DO P0Y=PUD(LP0+1) P1X=PUD(LP0!}+2) P1Y=PUD(LP0+3) PL(P0X,P0Y) DR(P1X,P1Y) LP0==+4 P0X=PUD(LP0) OD IC=69 PL(12,9) IC=98 FOR LP0=0 TO 2 DO PL(LP0,1)"} DR(LP0,10) PL(LP0,14) DR(LP0,23) OD PL(0,12) DR(2,12) PL(19,8) DR(19,10) PL(10,8) PL(10,10) PL(12,14) IC=85 ;Put up do#}ors. FOR LP0=0 TO 4 STEP 2 DO P0X=DOOR(LP0) P0Y=DOOR(LP0+1) PL(P0X,P0Y) OD IC=84 FOR LP0=4 TO 15 STEP 2 DO P0X=DO$}OR(LP0) P0Y=DOOR(LP0+1) IC=83 PL(P0X,P0Y) IC=84 PL(P0X+1,P0Y) OD MIRROR() ;Put it on the right side. FOR LP0=0 TO 10 D%}O ;Flash the walls. R=RAND(15) PCOLR(6)=R*16+8 FOR CLP0=0 TO 3500 DO OD OD ;Place energizers on screen. FOR LP0=0 TO&} 11 STEP 2 DO P0X=ENER(LP0) P0Y=ENER(LP0+1) IC=86+INE PL(P0X,P0Y) IC=87+INE PL(P0X+1,P0Y) OD ;Set keys in place. FO'}R LP0=0 TO 15 STEP 2 DO P0X=KEYS(LP0) P0Y=KEYS(LP0+1) IC=96 PL(P0X,P0Y) IC=97 PL(P0X+1,P0Y) OD ;Fill maze with gold.(} FOR CLP0=40 TO 959 DO TS0=SCR(CLP0) TS1=SCR(CLP0+1) ;See if area open for gold coin. IF TS0=0 AND TS1=0 THEN SCR(CL)}P0)=193 SCR(CLP0+1)=194 GC==+1 FI ODRETURN;PROC TITLE() XTRA=3 OSCOR=0 SSC=5 COL=0 INE=0 ;Rem*}ove player from screen. FOR LP0=0 TO 7 DO HPOSP(LP0)=0 OD DELAY=700 RAMTOP=MEM ;Reset ram pointer. GRAPHICS(1) SETCO+}LOR(4,0,0) SETCOLOR(0,8,3) SETCOLOR(1,2,8) ;2 lines of GR.2. DLIST=PEEKC(560) DLIST(10)=7 DLIST(11)=7 POKE(752,1) SCR=,}PEEKC(88) ;Find screen ram. PRSCOR() POSITION(5,5) PRINTD (6,"") POSITION(9,6) PRINTD(6,"") POSITION(2,14) PRIN-}TDE(6," pressŠor") PRINTD(6," Ԡto") PUTE() PRINT(" by Ken Miller") SNDRST() ;Turn sound off. DO.} ;Scroll colors thru message. FOR LP0=0 TO 1 DO TS0=COL DO ;Keep in sync and increase color ;for every scan l/}ine. WSYNC=0 PFCOLR2=TS0 TS0==+1 ;Until scans off screen UNTIL VCOUNT=128 OD OD COL==-1 ;Increase color value 0} ;Do it until start or fire buttons ;pressed. UNTIL CONSOL=6 OR STRIG0=0 OD COL=0 TS0=0 ;Clear score out. ZERO(SCOR,8)1} PRSCOR() ;Set-up P/M and char.set. CHSETUP() PM_SET() HITCLR=0 ;Clear collision reg.RETURN;2}PROC START() BYTE R DO SNDRST() GC=0 GG=0 ;GOLD COUNT VARIABLES. ;Put enemy in holding pen. FOR LP0=0 TO 3 DO3} STX(LP0)=124 STY(LP0)=96 OD ;Put your car on screen. STX(4)=124 STY(4)=160 BRPO(1)=0 ;clear screen and draw maze.4} ZERO(SCR,959) BOARDS() ;Put up extra cars. FOR LP0=0 TO XTRA-1 DO SCR(21+LP0)=82 OD ZERO(M0,1279) SETCOLOR(0,5}0,14) SETCOLOR(1,8,10) SETCOLOR(2,3,5) SETCOLOR(3,2,8) SETCOLOR(4,0,0) ;Set your car going left. DIR(4)=2 SP=2 ;Nu6}lls spinning var.s. FOR LP0=0 TO 4 DO SPIN(LP0)=0 EDF(LP0)=0 PDF(LP0)=0 SPT(LP0)=0 SPN(LP0)=0 OD DO ;See if we7} want to pause. IF CH<255 THEN PAUSE() FI ;See if you get an extra car. IF SCOR(3)>OSCOR THEN OSCOR=SCOR(3) XTRA8}==+1 SCR(21+(XTRA-1))=82 FI IF SCOR(3)=0 THEN OSCOR=0 FI ;Sound effects time. IF ST0>0 THEN AUDFC(0)=ST0 9}AUDFC(1)=32+1 ST0==-1 ;Decrease timer. ELSE AUDFC(1)=0 ;Shut sound down. FI IF ST2>0 THEN AUDFC(2)=10+ST2 :} AUDFC(3)=128+64+2 ST2==-1 ELSE AUDFC(3)=0 FI IF ST3>0 THEN AUDFC(4)=12+ST3 AUDFC(5)=64+32+2 ST3==-1 ;} ELSE AUDFC(5)=0 FI ;See if you cleared the maze. IF GC=GG THEN DELAY==-25 IF DELAY<10 OR DELAY>700 THEN DE<}LAY=10 FI INE==+2 IF INE>8 THEN INE=0 FI ;Money bag bonus value. THO==+1 IF THO>5 THEN THO=1 FI S=}TART() ;Do it again. FI ;Check to see if it's time for ;money bag, put it in the screen IF GG=75 THEN IC=99>} PL(19,10) IC=100 PL(20,10) MBT=350 ;Money bag timer. FI IF MBT>0 THEN MBT==-1 FI ;Erase money bag. IF MB?}T=1 THEN IC=98 PL(19,10) PL(20,10) FI CHCOL() ;Check for collision. IF PT=0 THEN ESC=2 FI IF COL>0 THEN @} ;Make collision value into ;player number for ID. IF COL=8 THEN COL=3 ELSE COL== RSH 1 FI A}IF DIR(4)>1 THEN PDF(4)=1 ELSE PDF(4)=0 FI ;Clear player dead flag. IF DIR(COL)>1 THEN PDF(COL)=1 ELSE B} PDF(COL)=0 FI ;See if you have gold power. IF POWER>0 OR PT>0 THEN ;Set dead flag timer. IF EDF(COLC})=0 THEN EDF(COL)=80 ;Give your points for enemy. IF EDF(COL)=80 THEN FOR ELP=1 TO ESC DO HUND(1)D} OD ESC==+1 ;increase bonus value FI IF ESC>16 THEN ESC=8 FI FI ;See if your dead. ELSEE}IF PDF(4)=PDF(COL) AND EDF(COL)=0 THEN ZERO(M0,1279) PMM=0 ;Set enmy back to garage. FOR LP0=0 TO 3 DO F} STX(LP0)=124 STY(LP0)=96 OD SNDRST() ;Spin your car. FOR CLP0=0 TO 500 DO SPT(4)==+1 IG}F SPT(4)>SPN(4) RSH 3 THEN SPT(4)=0 SPN(4)==+6 IF SPN(4)>250 THEN SPN(4)=0 FI SPIN(4)==+1 IF SPINH}(4)>3 THEN SPIN(4)=0 FI FI ;Put player on screen. PMST(M0,P0,SPIN(4)) PM_GO(STX(4),STY(4),PMM) I};Spinning sound effects. AUDFC(6)=SPIN(4) LSH 4 AUDFC(7)=2 FOR LP0=0 TO 200 DO OD OD ;Reset variJ}ables AUDFC(6)=0 AUDFC(7)=0 SPT(4)=0 SPN(4)=0 ZERO(M0,255) DIR(4)=2 ;Put your car in maze again. STX(4)=K}124 STY(4)=160 COL=0 PMST(M0,P0,DIR(4)) PM_GO(STX(4),STY(4),PMM) FOR CLP0=0 TO 40000 DO OD ;Decrease extrL}a cars. SCR(21+(XTRA-1))=0 XTRA==-1 ;all gone?. IF XTRA=0 THEN TITLE() START() FI FI FI COL=0 M} ;See if enemy gets spun IF POWER>0 THEN POWER==-1 ;Make their cars gold FOR LP0=0 TO 3 DO PCOLR(LP0)=2*16+6N} OD ;Flash their color before ;returning them to regular state. ELSEIF PT>0 THEN PT==-1 PD==-1 FOR LP0=0 TO O}3 DO PCOLR(LP0)=2*16+6 OD IF PD>200 THEN PD=5 PCOLR(0)=0*16+10 PCOLR(1)=12*16+5 PCOLR(2)=8*16+4P} PCOLR(3)=4*16+4 FI FI ;Move enemy players FOR LP0=0 TO 3 DO ;See if enemys alive IF EDF(LP0)=0 THEN Q} EMBR(LP0) PMST(PAD(LP0),EP,DIR(LP0)) PM_GO(STX(LP0),STY(LP0),PMM) ELSE ;Nah their dead,spin them. R}EDF(LP0)==-1 SPT(LP0)==+1 IF EDF(LP0)>2 THEN IF SPT(LP0)>SPN(LP0) THEN SPT(LP0)=0 SPN(LP0)==+1 IF SPS}N(LP0)>15 THEN SPN(LP0)=0 FI SPIN(LP0)==+1 IF SPIN(LP0)>3 THEN SPIN(LP0)=0 FI T} ;Spin the poor guy. SES=SPNA(SPIN(LP0)) PMST(PAD(LP0),EP,SES) PM_GO(STX(LP0),STY(LP0),PMM) AU}UDFC(4)=SPIN(LP0) AUDFC(5)=4 ELSEIF EDF(LP0)>2 AND EDF(LP0)<5 THEN ;Reset player spinning var.s. AUV}DFC(6)=0 AUDFC(7)=0 SPT(LP0)=0 SPN(LP0)=0 ZERO(PAD(LP0),255) DIR(LP0)=1 ;Put him back in the garage. W} STX(LP0)=124 STY(LP0)=96 EMBR(LP0) PMST(PAD(LP0),EP,DIR(LP0)) PM_GO(STX(LP0),STY(LP0),PMM) EDX}F(LP0)=0 FI FI FI OD ;See if you want to move. STICK(4) ;Put your car on the screen. PMST(M0,Y}P0,DIR(4)) PM_GO(STX(4),STY(4),PMM) ;animation variable. PMM==+1 IF PMM>2 THEN PMM=0 FI ;Game speed control.Z} FOR CLP0=0 TO DELAY DO OD ;Start pressed? UNTIL CONSOL=6 OD TITLE() ODRETURN;䮛PROC[} MAIN() ZERO(SCOR,8) MEM=RAMTOP ;Save top of ram. TITLE() START() RETURN;THE END?X; ***** CELLULAR AUTOMATA *****; LAST MODIFIED 12/2/86 BY JONATHAN OSUCH;; Use Joystick # 1 ; Push fire button for nex]}t screen; Press any key and then fire button ; to restart; OPTION for top center; SELECT to change magnification; STAR^}T for bottom center CARD Location=88BYTE Mode=[1], SDMCTL=559 BYTE ARRAY Cell1(256), Cell2(256), _} Initial(256), Code(10), Screen(22995)=16960, Dsplist=16650;*************************`}***********PROC CHANGELIST()BYTE Ctr=203, Nmr=206BYTE ARRAY Antic=[8 10], Size=[24 48] FOR Ctr=1 TO Sa}ize(Mode) DO Nmr=Ctr*3 Dsplist(Nmr)=64+Antic(Mode) Dsplist(Nmr+1)=Peek(88) Dsplist(Nmr+2)=Peek(89) Lob}cation==+64 OD Location==-(64*Size(Mode)) Dsplist(147)=65 Dsplist(148)=10 Dsplist(149)=65RETURNPROC CELLCALC (c})CARD Line=204, Temp=208BYTE ATTRACT=77, Stick=632, CONSOL=53279, Ctr=203, Nmr=206 SDMCTL=0;*d}***TURN OFF SCREEN FOR SPEED FOR Line=0 TO 365 DO FOR Ctr=1 TO 63 DO Nmr=Ctr LSH 2 Screen(Line LSe}H 6 +Ctr)=Cell1(Nmr+2) LSH 6 % Cell1(Nmr+3) LSH 4 % Cell1(Nmr+4) LSH 2 % Cell1(Nmr+5) OD FOR Ctr=1 TO 254 DO f} Cell2(Ctr)=Code(Cell1(Ctr-1)+Cell1(Ctr)+Cell1(Ctr+1)) OD MoveBlock(Cell1,Cell2,256) OD SDMCTL=34;***g}*TURN SCREEN BACK ON DO Temp=Location IF Stick=14 THEN Temp==-128 ELSEIF Stick=13 THEN Temp==+128 ELSEIq}.?B'DOS SYSB*+DUP SYSBMUCLOUDHOPACTB_MIDAS1 ACTBTMIDAS2 ACTB!\CELLAUTOACTBMAKMAZFIACTB[ROLLEM ACTBTRAILS1 ACTB TRAILS2 ACTBTRAILS3 ACTB<TECHPOP ACTBVTIMBRES B"]PRESETS BROLLEM MAZBREADME DOCF Stick=11 THEN Temp==-1 ELSEIF Stick=7 THEN Temp==+1 ELSE FI IF Temp<16961 OR (Temp-16961) MOD 64=0 THENr} Temp=Location FI IF Temp>37227 OR (Temp-16940) MOD 64=0 THEN Temp=Location FI IF CONSOL=3 THEN Temp=16986-Mos}de*5 FI IF CONSOL=6 THEN Temp=37210-Mode*5 FI IF CONSOL=5 THEN Mode==!1 FI Location=Temp CHANGELIt}ST() ATTRACT=0 UNTIL STrig(0)#1 ; PUSH TRIGGER FOR NEXT SCREEN ODRETURN;***************************************u}PROC INTRO()BYTE Cells=[1], Ctr=203, Nmr=206, Key=207 Zero(Cell1,256) ;****ZERO ARRAYS Cell1(0)=255 v} ;****TURN INTO A STRING Zero(Cell2,256) Cell2(0)=255 Graphics(0) Poke(755,0) ; TURN OFF CURSOR Close(1) Ow}pen(1,"K:",4,0) Print("# OF CELLS USED LAST: ") Nmr=Cells PrintBE(Nmr) PutE() Print("LAST CODE USED WAS: ") Ctr=x}Nmr*3 DO Key=Code(Ctr) PrintB(Key) Ctr==-1 UNTIL Ctr=255 OD PutE() PutE() Print("INITIAL CELL WAS: y}") FOR Ctr=1 TO Initial(0) DO Key=Initial(Ctr) PrintB(Key) OD PutE() PutE() Print("ENTER # OF DIFFz}ERENT CELLS (1,2,3) ") DO Nmr=GetD(1) UNTIL Nmr=49 OR Nmr=50 OR Nmr=51 OR Nmr=155 OD IF Nmr=155 THEN Nmr=Cells{} ELSE Nmr==-48 Cells=Nmr FI PrintBE(Nmr) PutE() PutE() Ctr=Nmr*3+1 PrintF("ENTER A %U DIGIT CODE # US|}ING 0 TO %U",Ctr,Nmr) DO Ctr==-1 PrintF("%E DIGIT %U = ",Ctr) DO Key=GetD(1) UNTIL Key>=48 AND Key<}}=Nmr+48 OR Key=155 OD IF Key=155 THEN PrintB(Code(Ctr)) ELSE Key==-48 PrintB(Key) Code(Ctr)=K~}ey FI UNTIL Ctr<1 OD Ctr=0 PrintF("%E%EENTER INITIAL CELL ") DO Key=GetD(1) IF Key=155 AND Ctr<>0 TH}EN EXIT ELSEIF Key=155 THEN SCopy(Cell2,Initial) EXIT FI IF Key>=48 AND Key<=Nmr+48 THEN Key==-48 } Ctr==+1 Cell2(0)=Ctr Initial(0)=Ctr Cell2(Ctr)=Key Initial(Ctr)=Key PrintB(Key) FI O}D Close(1) Nmr=128-Ctr/2 SAssign(Cell1,Cell2,Nmr,Nmr+Ctr)RETURNPROC DISPLAYLIST()CARD MEMTOP=741 Graphics(21) } ;****NEW DISPLAYLIST Mode=1;**** GRAPHICS 5 Location=16981 MEMTOP=16649 Dsplist(0)=112 Dsplist(1)=112 Dsplis}t(2)=112 CHANGELIST() PokeC(560,16650) ;****DISPLAYLIST ADDRESS Poke(708,50) ;*****RED Poke(709,210) ;*****GREEN} Poke(710,112) ;*****BLUERETURNPROC CELLULAR()BYTE CH=764 Zero(Initial,255) Zero(Code,10) DO INTRO() D}ISPLAYLIST() DO Cell1(0)=0 Cell2(0)=0 CELLCALC() UNTIL CH#255 ;****HIT ANY KEY TO ESCAPE OD} SDMCTL=34 ODRETURN;Maze file generator for Roll 'Em!;By Brian StrandBYTE num=[10]BYTE ARRAY mazes=[;#1 0 0 0 0 0 0 0 0 0 0 0 0 0 0} 3 0 1 1 0 1 0 1 1 0 1 2 0 0 0 4 1 0 2 2 1 0 4 0 0 1 0 2 1 0 2 1 0 2 1 0 2 1 0 0 1 0 2 1 1 1 0 2 1 0 0 0 8 1 0 1 1 3 }3 1 0 1 0 8 0 1 1 1 1 0 0 0 1 1 1 1 0;#2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 3 1 0 3 0 4 0 1 1 2 0 2 8 0 3 1 0 1 0 2 8} 2 0 0 1 0 1 0 1 1 1 0 2 1 0 2 0 3 0 1 2 1 1 1 0 2 1 2 0 0 0 8 2 1 1 2 1 0 0 8 0 2 0 1 0 1 1 0 1 0 4 0 1 1 0;#3 }0 0 0 2 0 0 2 0 0 2 0 0 2 0 3 0 0 1 0 0 3 0 0 3 0 0 1 2 2 0 4 2 1 2 2 1 2 8 1 0 0 1 2 0 1 2 0 1 2 0 1 2 0 1 0 0 3 0 0} 1 0 0 3 0 0 0 8 2 1 2 2 0 4 2 1 2 2 1 0 0 1 2 0 1 2 0 1 2 0 1 2;#4 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2 4 2 8 2 3 2 1 0 }2 1 2 0 3 0 2 2 3 0 2 1 0 1 0 0 0 2 3 0 2 0 1 2 4 0 1 1 2 0 0 3 1 1 0 8 2 1 1 0 2 2 0 8 0 0 2 4 0 1 2 8 2 0 0 0 0 2} 8 0 1 1 0 0 0 1 0 4;#5 0 0 0 0 0 0 0 2 0 0 0 0 0 1 0 2 2 3 0 1 2 3 0 2 1 0 0 1 0 2 0 3 0 2 0 3 1 2 3 1 1 2 0 3 0 }2 3 0 2 2 2 0 0 2 1 1 2 2 0 0 3 0 0 1 1 0 2 3 0 0 2 1 1 2 1 1 3 0 0 0 0 1 0 1 3 0 0 1 0 0 1;#6 0 0 0 0 0 0 0 0 0 0} 0 0 0 0 3 1 1 1 1 0 3 1 1 1 1 2 0 2 1 0 8 2 1 0 3 0 1 0 2 0 2 0 3 0 0 3 2 0 2 1 0 2 0 2 1 0 0 1 0 1 0 1 0 4 0 0 2 }1 2 4 0 1 0 8 0 2 0 2 0 1 0 1 1 1 1 1 1 1 1 1 0;#7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 3 0 3 0 3 1 1 0 0 2 1 0 0 0} 1 2 2 0 1 0 2 0 0 3 0 8 2 4 0 0 2 4 0 0 0 1 2 1 0 3 0 2 8 0 2 1 2 0 2 0 8 1 0 3 0 0 2 1 2 0 0 1 1 0 1 0 0 1 0 1 0 1 }0;#8 1 1 1 1 1 1 3 3 1 3 0 0 0 0 2 1 2 1 2 1 0 2 0 2 3 2 0 3 0 0 2 1 0 1 3 0 0 1 0 0 0 2 1 0 1 0 2 0 1 0 3 2 0 2} 0 1 2 1 0 0 2 1 0 1 0 0 3 0 2 0 3 0 1 3 0 2 3 2 0 0 1 0 1 0 3 2 0 2 0 1 0;#9 0 2 0 2 0 0 0 0 0 0 0 0 0 0 2 2 2 1 }2 2 2 3 0 4 0 4 0 2 2 2 3 1 3 3 1 2 0 0 0 0 2 2 2 0 1 0 1 0 0 4 0 4 0 0 2 0 2 1 2 3 0 2 0 0 0 1 1 1 0 1 3 3 3 3 0 4 0} 4 0 1 1 1 1 0 0 0 1 0 0 0 0;#10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 3 0 2 2 3 0 3 0 0 0 0 0 0 2 0 3 2 3 0 3 0 3 2 3 8 0} 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 1 2 3 1 0 3 1 0 0 1 1 0 8 1 2 2 1 2 1 1 2 0 0 0 0 1 1 0 1 1 0 1 1 0 ]CARD aPROC} MakeMazes()Close(1)Open(1,"D:ROLLEM.MAZ",8,0)PutD(1,num)FOR a=0 TO 91*num DO PutD(1,mazes(a))ODClose(1)RETURN|; ROLL 'EM!; By Brian StrandSET $000E=$4000SET $0491=$4000BYTE rcen=[136],brx,bry,wallb=[129], colorc,revxor=[2],im}=[1],topf=[10], fm=[0],aa,a,b,c,d,revb=[2],stop=[0], firelen=[16],ok,paintc=[4],hit,dir, wallc=[7],tc,chlen=[80],dmask,ddi}r, cdir,stopx=[0],rdoor,ff=[0],life=[3], pdir=[0],consol=$D01F,psflag=[0], dist,vol,tune,df,scr=[0],nsc,index, stopm,dura}t,attract=77,key=764INT xx,yyINT ARRAY xadj=[0 0 65535 65534 1 2 0 0], yadj=[65534 65535 0 0 0 0 1 2], xfm=[65535 1 0 }0],yfm=[0 0 65535 1], xa=[65535 2 0 0], ya=[0 0 65535 2]CARD pm,scad,ac,dliptr=512,score=[0], nb,bc,hi=[0],xtra,dvBYTE} ARRAY brush=[ 240 240 240 240 240 240 240 247 247 244 244 244 244 244 252 252 15 15 15 15 15 15 15 239 239 4}7 47 47 47 47 63 63 255 255 255 255 255 255 255 255 3 3 31 31 16 16 16 16 16 16 16 16 31 31 3 } 3 255 255 255 255 255 255 255 255 ], chset=[ 207 207 207 0 252 252 252 0 170 170 170 170 170 170 170 170 170 }170 170 170 170 170 170 170 255 255 255 255 255 255 255 255 0 0 0 0 0 0 0 0 170 170 170 170 170 170 170} 170 85 85 85 85 85 85 85 85 170 170 190 190 190 190 170 170 0 24 24 24 0 0 0 0 0 24 24 24 } 24 0 24 0 ], fireim=[ 146 219 222 239 126 126 255 255 255 255 255 255 255 255 126 60 83 126 119 230 255 126 }255 255 255 255 255 255 255 255 126 60 ], moves(4),firex(4),firey(4),pd(4), fxdir(4),fydir(4),prevf(4),turn(4), vals=}$2500,skipf(4),rt(128), cngx=[0 0 1 1],cngy=[1 1 0 0], tvals=[13 14 7 11],tops=[0 5 10 20], dirs=[1 2 4 8],sc=[2 3 0 1], }masks=[63 191 223 239 247 251 253 254], notes=[47 40 45 47 53 47 45 47 53 60 53 47 53 60 }40 120 115 110 105 100 95 90 0 120 115 110 105 100 95 90 0 85 80 75 70 65 60 55 0 85 }80 75 70 65 60 55 0], durats=[2 2 2 2 2 1 1 2 2 2 2 1 1 2 4 255 9 } 9 9 9 9 9 9 9 9 9 9 9 9 255 9 9 9 9 9 9 9 9 9 9 9 9 } 9 9 9 9 255], durtable=[5 10 20 40 80 15 30 60 120 1 2 3 4]PROC dli=*()[72 169 180 141} 10 212 141 24 208 169 22 141 23 208 169 112 141 26 208 104 64]RETURNPROC Wait(CARD wval)CARD wlFOR wl=1 TO wval DO O}DRETURNPROC PMMove(CARD pmb,adr BYTE pn,px,py,len)CARD padrpx==+48py==+32padr=pm+768+pn*256Zero(padr+py-}10,len+20)MoveBlock(padr+py,adr,len)Poke(53247+pn,px)RETURNPROC Plotc(BYTE xc,yr)CARD scoffscoff=yr*40+xc Poke(scad+s}coff,colorc)RETURNBYTE FUNC Locatc(BYTE xc,yr)CARD scoff BYTE svalscoff=yr*40+xc sval=Peek(scad+scoff)RETURN(sval)PRO}C Music()BYTE noteIF stopm=0 THEN durat==-1 IF durat=0 THEN index==+1 IF durats(index)=255 THEN stopm=1 R}ETURN FI durat=durtable(durats(index)) note=notes(index) FI Sound(0,note,dist,vol)ELSE Sound(0,0,0,0)FIR}ETURNPROC Puthw(BYTE xleft,y)nb==-2 colorc=wallbPlotc(xleft+1,y) Plotc(xleft+2,y)RETURNPROC Putvw(BYTE x,ytop)nb==-2 }colorc=wallbPlotc(x,ytop+1) Plotc(x,ytop+2)RETURNPROC Puthdoor(BYTE xc,yc)colorc=rcen Plotc(xc,yc) colorc=revbPlotc(xc-}2,yc) Plotc(xc-1,yc)Plotc(xc+1,yc) Plotc(xc+2,yc)RETURNPROC Putvdoor(BYTE xc,yc)colorc=rcen Plotc(xc,yc) colorc=revbPlo}tc(xc,yc-2) Plotc(xc,yc-1)Plotc(xc,yc+1) Plotc(xc,yc+2)RETURNPROC DrawMaze()Zero(scad+40,920)bc=0 nb=684FOR ac=40 TO }79 DOPoke(scad+ac,wallb)Poke(scad+840+ac,wallb)ODFOR ac=40 TO 920 STEP 40 DOPoke(scad+ac,wallb)Poke(scad+ac+39,wallb)O}DFOR ac=160 TO 760 STEP 120 DOFOR aa=3 TO 36 STEP 3 DOPoke(scad+ac+aa,wallb)ODODFOR ac=0 TO 90 DO b=ac/13 c=ac-(b*13)} IF vals(ac+91*scr)#0 THEN d=vals(ac+91*scr) IF (d&1)#0 THEN Puthw(c*3,1+b*3) FI IF (d&2)#0 THEN Putvw(c*3,1+}b*3) FI IF (d&4)#0 THEN Puthdoor(c*3,1+b*3) FI IF (d&8)#0 THEN Putvdoor(c*3,1+b*3) FI FIODRETURNPROC FlipDo}or(BYTE centx,centy)BYTE aaFOR aa=0 TO 7 DO colorc=Locatc(centx-xadj(aa), centy-yadj(aa))!revxor Plotc(centx-}xadj(aa),centy-yadj(aa))ODstopm=0 index=31 durat=1 vol=7 dist=10df=1RETURNPROC RevDoor(BYTE startx,starty)BYTE p0,p1,p}2,p3,r0,r1IF cdir=0 OR cdir=1 THEN p0=startx p1=starty-1 p2=startx p3=starty+2ELSE p0=startx-1 p1=starty p2=startx+2 p}3=starty FIr0=Locatc(p0,p1)r1=Locatc(p2,p3)IF r0=rcen THEN FlipDoor(p0,p1) ELSE FlipDoor(p2,p3)FIRETURNPROC ChkWall}(BYTE dir,door)BYTE xs1,ys1,xs2,ys2,byt1,byt2xs1=brx RSH 2+xa(dir)xs2=xs1+cngx(dir)ys1=bry RSH 3+ya(dir)-1ys2=ys1+cngy(}dir)byt1=Locatc(xs1,ys1)byt2=Locatc(xs2,ys2)df=0psflag=0IF byt1=revb AND byt2=revb OR byt1=rdoor AND byt2=rdoor THEN} IF door=1 THEN RevDoor(xs1,ys1) FI stop=1 RETURNELSEIF byt1=0 AND byt2=0 THEN psflag=1 stop=1 RETURNELSE IF b}yt1#paintc AND byt1#0 OR byt2#paintc AND byt2#0 THEN stop=0 ELSE stop=1 FIFIRETURNPROC MvPlr()attract=0brx==+x}x bry==+yyPMMove(pm,brush+im*16,1,brx,bry,16)RETURNPROC DoPaint()BYTE pb1x,pb2x,pb1y,pb2y,b1,b2,nsIF cdir=0 OR cdir=1 }THEN pb1x=brx RSH 2 IF cdir=1 THEN pb1x==+1 FI pb1y=bry RSH 3-1 pb2x=pb1x pb2y=pb1y+1ELSE pb1y=bry RSH 3-1 IF cd}ir=3 THEN pb1y==+1 FI pb1x=brx RSH 2 pb2y=pb1y pb2x=pb1x+1FIcolorc=paintcb1=Locatc(pb1x,pb1y)b2=Locatc(pb2x,pb2y)ns=}0IF b1=0 THEN ns==+1 FIIF b2=0 THEN ns==+1 FIscore==+nsxtra==+ns IF xtra=1000 THEN life==+1 Position(19,0) PrintBD(6,}life) xtra=0FIbc==+nsPlotc(pb1x,pb1y) Plotc(pb2x,pb2y)RETURNBYTE FUNC ChkfWall(BYTE x,y,dn)BYTE x2,y2,c1,c2,okx==RSH} 2+xa(dn) y==RSH 3+ya(dn)-1x2=x+cngx(dn) y2=y+cngy(dn)c1=Locatc(x,y) c2=Locatc(x2,y2)ok=1IF c1#0 AND c1#paintc OR c2#0 AN}D c2#paintc THEN ok=0 FIRETURN(ok)PROC GetfDir(BYTE fn,fx,fy)BYTE aa,bb,cc,dd,tvdmask=0+ChkfWall(fx,fy,0)*1dmask==+C}hkfWall(fx,fy,1)*2dmask==+ChkfWall(fx,fy,2)*4dmask==+ChkfWall(fx,fy,3)*8aa=prevf(fn) tv=tvals(aa)!15IF dmask#tv THEN dm}ask==&tvals(prevf(fn))FIIF fx=brx THEN IF fy-4 AND xd<4 AND yd>-8 AND yd<8 THEN hit=1 FIFIRETURNPROC Getnd()BYTE wmask,s,tdirBYTE ARRAY mu=[4 8 1 2]DoPain}t()wmask=0FOR aa=0 TO 3 DO ChkWall(aa,0) wmask==+stop*mu(aa) IF aa=cdir AND stop=0 THEN cdir=255 FIODs=Stick(0)!15} s==&wmaskIF (s&12)#0 THEN s==&12 FItdir=0IF s THEN tdir=sELSE ChkWall(pdir,0) IF stop=1 THEN tdir=mu(pdir) ELSE tdir=0} FIFIIF tdir THEN IF tdir=1 THEN cdir=2 ELSEIF tdir=2 THEN cdir=3 ELSEIF tdir=4 THEN cdir=0 ELSEIF tdir=8 THEN cdir=1 }FI pdir=cdir ChkWall(cdir,1) IF psflag=1 THEN index=15 durat=1 stopm=0 vol=2 dist=8 ELSEIF df=0 THEN stopm=1 FIFIsto}px=0IF cdir=255 AND tdir=0 THEN stopx=1 FIxx=xfm(cdir) yy=yfm(cdir)IF cdir#255 THEN im=cdir FIRETURNPROC NewScrn()BYT}E a,bscr==+1IF scr>nsc-1 THEN scr=0 dv==-50 IF dv<50 THEN dv=50 FIFISndRst()Wait(30000)a=180WHILE a<192 DOPoke(dl}i+2,a)Sound(0,255-a,10,8)Wait(1200)a==+1ODWait(2000)a=127WHILE a>111 DOPoke(dli+2,a)Sound(0,a-64,10,8)Wait(1200)a=}=-1ODa=48 WHILE a>40 DO Sound(0,a,10,8) Wait(1200) a==-1 ODWait(2000)SndRst()Wait(60000)DrawMaze()Poke(dli+2,180)tun}e=1RETURNPROC Setup()im=0 hit=0 brx=76 bry=96firex(1)=4 firey(1)=96firex(2)=76 firey(2)=24firex(3)=148 firey(3)=96pre}vf(1)=Rand(4) prevf(2)=Rand(4)prevf(3)=Rand(4)rdoor=paintc!revxorPoke(704,22) Poke(705,36)Poke(706,38) Poke(707,52)SetCo}lor(0,2,6) SetColor(1,12,6)SetColor(2,7,4) SetColor(3,3,4)SetColor(4,0,0)Zero(pm+1024,1024)RETURNPROC PushTrig()Posit}ion(0,1)PrintD(6,"push trigger to play")DObrx=Rand(160)bry=Rand(160)MvFire(1) MvFire(2) MvFire(3)Wait(500)a=Stick(0)}IF a=13 THEN scr=scr+1 IF scr>nsc-1 THEN scr=nsc-1 ELSE DrawMaze() FIELSEIF a=14 THEN scr=scr-1 IF scr=255 THEN scr=}0 ELSE DrawMaze() FIFIUNTIL STrig(0)=0 ODRETURNPROC PlaySet()Zero(scad,40)PMMove(pm,brush+(im*16),1,brx,bry,16)P}MMove(pm,fireim,2,firex(1),firey(1),16)PMMove(pm,fireim,3,firex(2),firey(2),16)PMMove(pm,fireim,4,firex(3),firey(3),16)Pos}ition(0,0) PrintD(6,"ú")PrintCD(6,score)Position(8,0) PrintD(6,"ɺ")PrintCD(6,hi)Position(16,0) PrintD(6,"ֺ")PrintB}D(6,life)colorc=paintca=brx RSH 2 b=bry RSH 3-1Plotc(a,b) Plotc(a+1,b)Plotc(a,b+1) Plotc(a+1,b+1)RETURNPROC MakeRandt}()BYTE ARRAY flags(128) Zero(flags,128)FOR c=0 TO 127 DO a=Rand(128) b=flags(a) IF b=1 THEN DO a==+1 IF a=128 TH}EN a=0 FI UNTIL flags(a)=0 OD FI flags(a)=1 rt(a)=cODRETURNPROC dissolve()BYTE ARRAY tempp(16)MoveBlock(tempp,}brush+im*16,16)MakeRandt()FOR a=0 TO 127 STEP 2 DO b=(rt(a)/8) c=rt(a)-b*8 tempp(b)==&masks(c) PMMove(pm,tempp,1,brx},bry,16) b=(rt(a+1)/8) c=rt(a+1)-b*8 tempp(b)==&masks(c) PMMove(pm,tempp,1,brx,bry,16) MvFire(1) MvFire(2) MvFire(3)} IF consol=6 THEN life=0 SndRst() RETURN FI b=rt(a) Sound(0,b,0,6) Wait(450)ODSndRst() stopm=1RETURNPROC Die(})life=life-1Position(19,0)PrintBD(6,life)Dissolve()RETURNPROC Title()Position(5,0) PrintD(6,"ROLL )EM*")PushTrig()}RETURNPROC PlayTune()index=255 durat=1 dist=10 vol=8stopm=0DO Wait(500) Music() UNTIL stopm=1 ODRETURNPROC Ready()P}osition(7,1) PrintD(6,"READY*")RETURNPROC MainLoop()fm=0DO Setup() PlaySet() Ready() IF tune=1 THEN tune=0 PlayTune()} ELSE Wait(60000) FI Zero(scad+20,20) DO Music() Position(3,0) PrintCD(6,score) IF bc>=nb THEN NewScrn() EXIT }FI Wait(dv-50) IF key#255 OR STrig(0)=0 THEN key=255 SndRst() DO UNTIL STrig(0)#0 OD Wait(25000) } DO UNTIL key#255 OR STrig(0)=0 OD key=255 DO UNTIL STrig(0)#0 OD FI IF (brx&3)=0 AND (bry&7)=0 THE}N Getnd() FI IF stopx=0 THEN MvPlr() FI Music() MvFire(1) MvFire(2) MvFire(3) IF hit=1 THEN Die(}) Wait(30000) EXIT FI IF consol=6 THEN life=0 SndRst() EXIT FI IF consol=5 THEN dv==-10 IF dv<50 THEN dv=50 }FI FI IF consol=3 THEN dv==+10 IF dv>450 THEN dv=450 FI FI ODcdir=0 pdir=0UNTIL life=0ODZero(pm+1024,255)RETUR}NPROC Init()Close(2)Open(2,"D:ROLLEM.MAZ",4,0)nsc=GetD(2)FOR ac=0 TO 91*nsc DOvals(ac)=GetD(2)ODClose(2)b=Peek(1}06)-8 Poke(106,b)MoveBlock(b*256,57344,1023)MoveBlock(b*256+8,chset,chlen)a=Peek(106)-16 Poke(106,a)Graphics(17)ac=Peek}C(560)FOR aa=7 TO 28 DOPoke(ac+aa,4)ODPoke(ac+6,134) Poke(54279,a)Poke(53277,3) Poke(559,62) Poke(623,1)pm=a*256 Zero(p}m+1024,1024)scad=PeekC(88)Poke(756,b)Zero(scad+80,839)dliptr=dli Poke(54286,192)index=255 stopm=0 durat=1RETURNPROC G}ameOver()PushTrig()RETURNPROC Game()Init() DrawMaze() Setup() Title()DO DrawMaze() score=0 xtra=0 tune=1 dv=450 } MainLoop() IF score>hi THEN hi=score FI Position(11,0) PrintCD(6,hi) GameOver() life=3ODRETURNk;TRAILS.ACT; Copyright 1986 by Kevin Garlow; Last modified 1-3-86; CHECKSUM DATA;[E7 5F 32 D9 1B 77 3D 89 ; 74 05!} 6C C4 EB C2 6B ]DEFINE pers_ratio = "35"BYTE col1=709,col2=710,border=712, cur=752,key=764,attract=77, clock=2!}0,mirror=[1],modeCARD ARRAY x(500),y(500)CARD x0,y0,n=[0],i,maxpts=[175] PROC Setup(BYTE mode)FOR i=0 TO maxpts DO !}x(i)=0:y(i)=0ODGraphics(mode) : col2=0 : col1=14cur=0 : color=1 : border=16*Rand(16)+2IF mode<>0 THEN Plot(64,0) Draw!}To(192+64,0) DrawTo(192+64,191) DrawTo (64,191) DrawTo (64,0)FIRETURNPROC Instructions(); =======================!}===========; = for KoalaPad =; = (see listing 2 for joystick) =; ==================================S!}etup(0)PrintE(" """"")PutE()PrintE(" Draw with KoalaPad...")PutE()Print("LEFT __\ Ҡ !} ")PrintE("/__ RIGHT")Print("button / ")PrintE("\ button")PutE()Print(" ANY KEY:")PrintE(" !}Ӡ")Print(" or ")PrintE("")PutE()PutE()PutE()Print("------------------")Pr!}intE("------------------")IF key=255 THEN Print(" Hit any button ") Print("to start:") DO UNTIL (PTrig(0)=0 OR PT"}rig(1)=0 OR key<>255 OR STrig(0)=0) OD key=255FIRETURNPROC Get_pers()Instructions() key=255PutE()maxpt"}s==/pers_ratioPrint("Persistence is now ")PrintCE(maxpts)PutE()Print("Enter new ")Print("persistence (1-10): ")PrintC(m"}axpts) Print("")IF maxpts=10 THEN Print("") FImaxpts=InputB()RETURNPROC Octplot(CARD x0,y0)CARD x1,y1x1=191-x0y1"}=191-y0IF Locate(x0+64,y0)=1 THEN color=0ELSE color=1FIPlot (x0+64,y0)IF mirror=1 THEN Plot(x0+64,y1) Plot(y0+"}64,x0) Plot(y0+64,x1) Plot(x1+64,y0) Plot(x1+64,y1) Plot(y1+64,x0) Plot(y1+64,x1)FIattract=0clock=0IF mirror=0 "}THEN DO UNTIL ((clock&1)=1) ODFIRETURNPROC Draw();===================================;= for KoalaPad "} =;= (see listing 2 for joystick) =;===================================DO x0=(Paddle(0)*95/114)-1 y0=(Paddle("}1)*95/114)-1 IF PTrig(1)=0 THEN Setup(24) IF mirror=1 THEN mirror=0 ELSE mirror=1 FI DO UNTIL PTri"}g(1)<>0 OD FI IF PTrig(0)=0 THEN Setup(24) FI Octplot(x(n),y(n)) x(n)=x0 y(n)=y0 Octplot(x(n),y(n)) n==+1" } IF n>=maxpts THEN n=0 FI UNTIL (key<>255)ODRETURNPROC Main()Instructions()DO IF (key<>255) THEN Get_pers()" } IF maxpts >10 THEN maxpts=10 ELSEIF maxpts<1 THEN Graphics(0) RETURN FI maxpts=maxpts*pers_ratio" } FI key=255: Setup(24) Draw()OD ); CHECKSUM DATA;[2A 9D 20 72 ]PROC Instructions(); =================================; = for joystick & } =; = (substitute into listing 1) =; =================================Setup(0)PrintE(" """"")Pu&}tE()Print(" Draw with ")Print("joystick...")PutE()PrintE(" button: Ҡ and ")PrintE(" &} ")PutE()Print(" ANY KEY:")PrintE(" Ӡ")Print(" or ")PrintE("&}") PutE()PutE()PutE()Print("------------------------")PrintE("------------")IF key=255 THEN Print(" Hit any butto&}n") Print(" to start:") DO UNTIL (PTrig(0)=0 OR PTrig(1)=0 OR key<>255 OR STrig(0)=0) OD key=255FIRETURN$|; CHECKSUM DATA;[BA 99 3B ]PROC Draw() ; =================================; = for joystick =; = *} (substitute into listing 1) =; =================================INT delx=[0],dely=[0],stx0=95 y0=95DO st=Stick(0)*} delx=(st&4) RSH 2 - ((st&8) RSH 3) dely=((st&1)) -((st&2) RSH 1) x0=(x0+2*delx ) y0=(y0+2*dely ) IF x0<1 OR x0>19*}0 THEN x0=95 FI IF y0<1 OR y0>190 THEN y0=95 FI IF STrig(0)=0 THEN Setup(24) IF mirror=1 THEN mirror=0 ELSE*} mirror=1 FI DO UNTIL STrig(1)<>0 OD FI Octplot(x(n),y(n)) x(n)=x0 y(n)=y0 Octplot(x(n),y(n)) n==+1 IF n*}>maxpts THEN n=0 FI UNTIL (key<>255)ODRETURN(3;TechPop Wes Philp; 160 Sand Pine Road; Indialantic, FL 32903;DEFINE END="$FE", ;end o.}f preset T="$FD", ;timbre W="$FC", ;wait M="$FB", ;metronome EOL="$FF", ;end-of-list .} A="$A",B="$B",C="$C",D="$D", E="$E",F="$F", QUIET="0 0 0"CARD ARRAY PRESETS(1)=[INCLUDE "PRESETS"EOL]BYTE .}ARRAY TIMBRES(1)=[INCLUDE "TIMBRES"EOL];; TRAP -------------------------------BYTE BRKKEY=$11PROC TRAP(BYTE N);stop on.} BREAK or any OS errorBRKKEY=0RETURN;; ALERT ------------------------------PROC ALERT(BYTE ARRAY STRING)PRINTF("%E%S%E".},STRING)RETURN;; BUILD_DLI --------------------------MODULECARD VDLI_OLD=[0], CLOCK=[0];counts at 4*frame ratePROC.} BUILD_DLI();delay list interrupt servicer;increments 16-bit CLOCK;BYTE ARRAY DLISERVE(1)=[$48 ;PHA$18 .} ;CLC$A9 $01 ;LDA 1$6D] ;ADC LSBBYTE POINTER D1=CLOCKBYTE ARRAY D2(1)=[$8D] ;STA LSBBYT. }E POINTER D3=CLOCKBYTE ARRAY D4(1)=[$90 $03 ;BCC 3$EE] ;INC MSBBYTE POINTER D5=CLOCK+1BYTE ARRAY D6(1)=.!}[$68 ;PLA$40] ;RTI;BYTE ARRAY MOD_LIST(1)=[0 8 16 24]BYTE I, NMIEN=$D40ECARD VDLI=$200BYTE ."}POINTER BPCARD POINTER SDLST=560;;install the DLI service routineVDLI_OLD=VDLIVDLI=DLISERVENMIEN=$C0 ;DLI and VBI;modi.#}fy the display listFOR I=0 TO 3 DO BP=2+MOD_LIST(I)+SDLST^ IF MOD_LIST(I)>=2 THEN BP==+2 FI BP^==%$80OD BP=SD.$}LST^RETURN; ; UNBUILD_DLI ------------------------PROC UNBUILD_DLI()BYTE NMIEN=$D40ECARD VDLI=$200 N.%}MIEN=$40 ;VBI onlyVDLI=VDLI_OLDGRAPHICS(0)RETURN;; KBD --------------------------------BYTE FUNC KBD(BYTE KCHAN,SCHAN).&};KCHAN=K: channel #;SCHAN=S: channel #;RETURN:; - operator-entered preset # (0-9); - $FF no entry; - $FE BREAK; - $.'}FD invalid input; - $FC >; - $FB = '0 AND N<='9 THEN PUTD(SCHAN,N) PUTD(SCHAN,CR) N==-'0 ELSEIF N=CR THEN N=$FF ;ignore RETURN ELSE .+} N=$FD ;invalid input FIFIRETURN(N);; FIND_PRESET ------------------------CARD FUNC FIND_PRESET(BYTE N);N=preset # (.,}0,1 ...);RETURN:; - preset data address; - $FFFF if not foundBYTE I, PVCARD POINTER PP=PRESETSI=0DO PV=P.-}^ ;LSB only IF I=N AND PV#EOL THEN ;done RETURN(P) ELSEIF PV=EOL THEN ;e.d-of-string found RETURN($FFFF)..} ELSEIF PV=END THEN I==+1 FI P==+2OD;; PREP_TIMBRE ------------------------BYTE FUNC PREP_TIMBRE();RETURN: numb./}er of timbres definedBYTE NT, I, DIST, LBYTE POINTER BPBP=TIMBRESFOR NT=0 TO 254 DO DIST=BP^ BP==+2 .0}L=BP^ BP==+1 IF DIST=EOL THEN NT==RSH 1 RETURN(NT) ELSEIF L>0 THEN ;fix shapes by ORing distortion DIST.1}==LSH 4 FOR I=1 TO L DO BP^==%DIST BP==+1 OD FIODRETURN(0) ;error return;; INIT_TIMBRE ------------.2}------------PROC INIT_TIMBRE(BYTE N,V, CARD ARRAY ADDR);N=timbre # (0,1 ...);V=voice (0 or 1);ADDR=addre.3}sses of 4 shape strings;BYTE I,J, L, CHANBYTE POINTER BP, AUDFBP=TIMBRESIF N#0 THEN ;skip over .4}2*N timbre arrays J=N+N FOR I=1 TO J DO BP==+2 L=BP^ BP==+L+1 ODFI;FOR I=0 TO 1 DO CHAN=V+V+I ;Atari v.5}oice # (0-3) BP==+1 AUDF=CHAN+CHAN ;set AUDF AUDF==+$D200 AUDF^=BP^ BP==+1 ADDR(CHAN)=BP ;timbre string address .6} L=BP^ ;timbre string length BP==+L+1ODRETURN;; MODULATE ---------------------------PROC MODULATE(CARD ARRAY A.7}DDR, BYTE ARRAY OFFSET);ADDR=addresses of 4 shape strings;OFFSET=clock offset for voices 0 & 1BYTE V, I.8}DX, LSB, I,J, L, CHANBYTE POINTER BPBYTE ARRAY AUDC(1)=$D201CHAN=0 ;0-3FOR V=0 TO 1 DO ;loop over t.9}he two voices LSB=CLOCK ;compute the shape index IDX=LSB-OFFSET(V) IF IDX>127 THEN IDX=127 OFFSET(V)=LSB+127 .:}FI FOR I=0 TO 1 DO ;loop over two channels per voice BP=ADDR(CHAN);timbre string addr L=BP^ ;timbre stri.;}ng length IF L>0 THEN IF IDX}nd of wait=current+delta; where delta=4*60*N/rateCARD DELTAIF N>273 THEN N=273 ;overflow will occurFIDELTA=N*240IF D.?}ELTA>32767 THEN DELTA==RSH 1 R==RSH 1FIDELTA==/RRETURN(DELTA+CLOCK);; CONTINUE ---------------------------BYTE FUNC.@} CONTINUE(CARD ARRAY P, INT SPEED, BYTE N_TIMBRES);P=address of preset;SPEED=operator.A} modification to tempo;N_TIMBRES=number of timbres defined;RETURN:; 0 - normal; 1 - error;BYTE INIT=[1], COM.B}, VOICE, I, STATUSCARD R, N, NEXTINT METROBYTE ARRAY AUD(1)=$D200, OFFSET(2), .C} NULL(1)=[QUIET]CARD ARRAY S_ADDR(4)CARD POINTER OLD_P=[$FFFF];IF INIT#0 THEN ;initialize INIT=0 STATUS=0 OLD_P.D}=P VOICE=0 ZERO(AUD,9) FOR N=0 TO 3 DO S_ADDR(N)=NULL OD CLOCK=0 NEXT=CLOCKFI;IF NEXT<=CLOCK THEN ;proc.E}ess a command from P array COM=OLD_P^ OLD_P==+2 IF COM=END THEN ;end of preset INIT=1 ELSEIF COM=T THEN ;.F}timbre VOICE==!1 ;flip between 0 and 1 I=OLD_P^ OLD_P==+2 IF I32767 THEN ;negative R=2 FI N=OLD_P^ OLD_P==+2 NEXT=QUANTUM(R,N) ELSEIF COM=M THEN ;metron.I}ome METRO=OLD_P^ OLD_P==+2 ELSE STATUS=1 ;error FIFIIF STATUS=0 THEN ;continue playing MODULATE(S_ADDR,.J}OFFSET)ELSE ;error detected INIT=1FIRETURN(STATUS);; TECHPOP ----------------------------PROC TECHPOP()BYTE CLICK=.K}731, ;XL keyclick switch RATE=730, ;XL cursor rep rate CRSINH=$02F0,;cursor inhibit SKCTL=$D20F, ;serial .L}port cntrl SSKCTL=$0232,; ... shadow KCHAN=[7], ;kbd channel # N, N_TIMBRESCARD OLD_ERROR, P=[$FF.M}FF]INT SPEED=[0];GRAPHICS(0)OLD_ERROR=ERRORERROR=TRAPCLICK=$FF ;disable XL keyclickSKCTL=3SSKCTL=3DEVICE=0CLOSE(KCH.N}AN)OPEN(KCHAN,"K:",12,0)BUILD_DLI()CRSINH=$FFPRINTF("%E TechPop ")PRINTF("Synthesizer wp%E")RATE=3 ;fast .O}key auto-repeat;N_TIMBRES=PREP_TIMBRE();setup timbresIF N_TIMBRES=0 THEN ALERT("invalid timbre format")FI;DO; N=KBD(.P}KCHAN,SCHAN) N=KBD(KCHAN,0) IF N=$FF THEN ;no input ELSEIF N=$FE THEN ;BREAK key EXIT ELSEIF N=$FD THEN .Q} ALERT("?") ELSEIF N=$FC THEN ;speed up SPEED==+1 ELSEIF N=$FB THEN ;slow down SPEED==-1 ELSEIF N=$FF.R} THEN ;no entry ELSE ;startup a new preset P=FIND_PRESET(N) SPEED=0 IF P=$FFFF THEN ALERT("invali.S}d preset") FI FI IF P#$FFFF THEN ;continue playing the preset N=CONTINUE(P,SPEED,N_TIMBRES) IF N#0 THEN .T} ALERT("invalid preset") P=$FFFF FI FIODBRKKEY=$FF;ERROR=OLD_ERRORCLICK=0 ;reenable XL keyclickUNBUILD_.U}DLI()SNDRST()RETURN,;timbre 0 - bass (marching band)1 0 36F F 0 0 F F 0 0 E E 0 0 C C 0 0A A 0 0 8 8 0 0 6 6 0 0 4 4 0 02 2 0 010 255 328 82W} 8 8 7 7 7 7 6 6 6 6 5 5 5 54 4 4 4 3 3 3 3 2 2 2 2 1 1 1 0 ;timbre 1 - snare (marching band)1 0 8F 0 A 0 5 0 2 08 5 172X}A 5 9 5 8 4 7 4 6 3 5 3 4 2 3 1 0;timbre 2 - clap8 2 2C 08 2 40 0 C 0;timbre 3 - bass (pop)1 0 16F F 0 0 F F 0 0 8 8 2Y}0 0 4 4 0 010 255 168 8 7 7 6 6 5 5 4 4 3 3 2 2 1 0;timbre 4 - snare (pop)1 0 6F 0 A 0 5 08 5 7A 5 8 4 6 3 0;timbre 52Z} - tom10 255 13C B A 9 8 7 6 5 4 3 2 1 0QUIET;timbre 6 - cymbal8 1 11A 9 8 7 6 5 4 3 2 1 08 5 11A 9 8 7 6 5 4 3 2 1 02[};timbre 7 -cowbell10 80 174 4 4 4 3 3 3 3 2 2 2 2 1 1 1 1 010 41 178 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0;timbre 8 - ping6 2\}1 98 7 6 5 4 3 2 1 06 2 98 7 6 5 4 3 2 1 00.;preset 0 - rolloffM 32T 0 T 1 W 8 T 1 W 24 ;1T 0 T 1 W 8 T 1 W 24 ;1T 0 T 1 W 1 T 1 W 1 T 1 6^}W 1 T 1 W 1T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1T 0 T 1 W 1 T 16_} W 1 T 1 W 1 T 1 W 1T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 ;36`}T 0 T 1 W 8 T 1 W 24 ;4END;preset 1 - cadence (triple)M 24T 0 T 1 W 8 T 1 W 4 T 0 T 1 W 8T 1 W 1 T 1 W 1 T6a} 1 W 1 T 1 W 1 ;1T 0 T 1 W 8 T 1 W 4 T 0 T 1 W 8T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 ;1T 0 T 1 W 4 T 1 W 4 T 1 W 4T 0 T 6b}1 W 4 T 1 W 4 T 1 W 4 ;3T 0 T 1 W 8 T 1 W 4 T 0 T 1 W 8T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 ;1T 0 T 1 W 8 T 1 W 4 T 06c} T 1 W 8T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 ;1T 0 T 1 W 8 T 1 W 4 T 0 T 1 W 8T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 ;1T 0 T 1 6d}W 4 T 1 W 4 T 1 W 4T 0 T 1 W 4 T 1 W 4 T 1 W 4 ;3T 0 T 1 W 20 T 1 W 1 T 1 W 1T 1 W 1 T 1 W 1 ;86e}END;preset 2 - cadence (duple)M 32T 0 T 1 W 8 T 1 W 8 T 0 W 8 T 1 W 8;1T 0 W 8 T 1 W 8 T 0 W 8 T 1 W 4T 1 W 4 6f} ;2T 0 T 1 W 8 T 1 W 8 T 0 T 1 W 4T 1 W 4 T 1 W 4 T 1 W 4 ;3T 0 T 1 W 8 T 1 W 8 T 0 T 1 W 8T 16g} W 1 T 1 W 1 T 1 W 1 T 1 W 1T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 ;4T 0 T 1 W 8 T 1 W 8 T 0 W 8 T 1 W 8;1T 0 W 8 T 1 W 8 T 0 6h}W 8 T 1 W 4T 1 W 4 ;2T 0 T 1 W 8 T 1 W 8 T 0 T 1 W 4T 1 W 4 T 1 W 4 T 1 W 4 ;3T 0 T6i} 1 W 16 T 0 W 8T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1T 1 W 1 T 1 W 1 T 1 W 1 T 1 W 1 ;8END;preset 3M 12T 3 W 3 T 3 W 1 T 4 6j}W 1 T 3 W 2T 3 W 1 T 3 W 4 T 2 W 2 T 3 W 2 ;1T 3 W 3 T 3 W 1 T 4 W 1 T 3 W 2T 3 W 1 T 3 W 2 T 3 W 2T 2 T 3 W 2 T 3 W 26k} ;2T 3 W 3 T 3 W 1 T 4 W 1 T 3 W 2T 3 W 1 T 3 W 4 T 2 W 2 T 3 W 2 ;1T 3 W 3 T 3 W 1 T 4 W 1 T 3 T 4W 2 6l}T 3 W 1 T 3 W 2 T 3 W 2 T 2T 3 W 4 ;4END;preset 4M 8T 3 T 5 W 2 T 5 T 6 W 2 T 2 T 5 W 2T 5 W6m} 2 T 3 T 5 W 1 T 6 W 1 T 5 T 6W 2 T 2 T 5 W 2 T 5 T 6 W 2 ;1T 3 T 5 W 2 T 5 T 6 W 2 T 2 T 5 W 2T 5 W 2 T 3 T 5 W 1 6n}T 6 W 1 T 5 T 6W 2 T 2 T 5 W 2 T 5 T 6 W 2 ;1T 3 T 5 W 2 T 5 T 6 W 2 T 2 T 5 W 2T 5 W 2 T 3 T 5 W 1 T 6 W 1 T 5 T 66o}W 2 T 2 T 5 W 2 T 5 T 6 W 2 ;3T 3 T 5 W 2 T 5 T 6 W 2 T 2 T 5 W 2T 5 W 2 T 3 T 5 W 1 T 6 W 1 T 5 T 6W 1 T 6 W 1 T 6p}2 T 5 W 1 T 6 W 1 T 5T 6 W 1 T 6 W 1 ;4END;preset 5M 14T 1 W 2 T 1 W 2 T 1 W 4 T 5 W 2 T 5 W 2 T 2 W6q} 4 ;1T 1 W 2 T 1 W 2 T 1 W 4 T 3 W 4T 2 W 2 T 6 W 1 T 6 W 1 ;2T 1 W 2 T 1 W 2 T 1 W 4 T 5 W 6r}2 T 5 W 2 T 2 W 4 ;1T 1 W 2 T 1 W 2 T 1 W 4 T 3 W 2T 6 W 1 T 6 W 1 T 2 W 2 T 5 W 1T 5 W 1 6s} ;4END;preset 6M 14T 4 W 2 T 4 W 2 T 2 T 3 W 2 T 4 W 2;1T 4 W 2 T 4 W 2 T 2 T 3 W 2 T 4 T 6 W 1 T 6 W 1 6t} ;2T 4 W 2 T 4 W 2 T 2 T 3 W 2 T 4 W 2;1T 4 W 2 T 6 W 2 T 4 W 2 T 6 W 2 ;4END;preset 7M 16T 3 T6u} 6 W 4 T 4 W 2 T 3 W 2 T 6 T 3W 4 T 4 W 2 T 3 W 2 ;1T 3 T 6 W 4 T 4 W 2 T 3 W 2 T 6 T 3W 2 T 4 W 1 T 4 W 1 6v}T 4 W 2 T 3 W 2;2T 3 T 6 W 4 T 4 W 2 T 3 W 2 T 6 T 3W 4 T 4 W 2 T 3 W 2 ;1T 3 T 6 W 4 T 4 W 2 T 3 W 2 T 3 T6w} 4W 2 T 6 W 2 T 3 T 4 W 2 T 6 W 2 ;4END;preset 8M 12T 3 T 4 W 2 T 4 W 2 T 2 T 4 W 2 T 4W 1 T 4 W 1 T 3 T 4 W 2 T 4W6x} 2 T 2 T 4 W 2 T 4 T 6 W 2 ;1T 3 T 4 W 2 T 4 W 2 T 2 T 4 W 2 T 4W 1 T 4 W 1 T 3 T 4 W 2 T 4W 2 T 2 T 4 W 2 T 4 T 6 6y}W 2 ;1T 3 T 4 W 2 T 4 W 2 T 2 T 4 W 2 T 4W 1 T 4 W 1 T 3 T 4 W 2 T 4W 2 T 2 T 4 W 2 T 4 T 6 W 2 ;1T 3 T 4 W6z} 1 T 4 W 1 T 4 W 1 T 4 W 1T 2 T 4 W 1 T 4 W 1 T 4 W 1 T 4 W 1T 5 T 6 W 1 T 5 W 1 T 5 W 1 T 5 W 1T 2 T 5 W 1 T 5 W 1 T 5 W 6{}1 T 5 W 1;4END;preset 9M 16T 3 T 6 W 4 T 6 W 4 T 4 T 6 W 4 T 3 T 6 W 4 T 3 T 6 W 4 T 6 W 4 T 2 T 4 W 4 T 3 T 6 W 4 6|} ;1T 3 T 6 W 4 T 6 W 4 T 4 T 6 W 4T 3 T 6 W 4 T 3 T 6 W 4 T 6 W 4T 2 T 4 W 4 T 3 T 6 W 2 T 4 T 6W 2 6}} ;2T 3 T 6 W 4 T 6 W 4 T 4 T 6 W 4 T 3 T 6 W 4 T 3 T 6 W 4 T 6 W 4 T 2 T 4 W 4 T 3 T 6 W 4 ;1T 6~}3 T 6 W 4 T 6 W 4 T 4 T 6 W 4T 3 T 6 W 4 T 3 T 6 W 4 T 6 W 4T 3 W 4 T 6 W 4 ;4END4h :}:}:}:}:}:}:}8%All .OBJ files on this disk are "runtime" binaries; they do not needan ACTION! cartridge to run. (All .ACTfiles are A>}CTION! source, of course!)CLOUDHOP.ACT -The game of Cloudhopper. See the May'88 issue of ANALOG for full details.Brie>}fly, use a joystick in port 1 tocontrol your hopping: fire button tohop, left or right to angle the hopaccordingly. You c>}an fall into thevolcano twice, and survive. The thirdtime will be your last. The balloonshave gold attached to them - to>}uch themto burst them and get the gold.MIDAS1.ACT -Compile/run this file (it INCLUDEsMIDAS2.ACT). This is a game call>}edMidas Maze - it's similar to Pac Man.CELLAUTO.ACT -This program uses something calledcellular automata to produce in>}terestinggraphic patterns. It's sort of the sameidea as Conway's game of Life, but morecomplex. The comments in the prog>}ramoutline how to use it, but to clarifythings, note that the pictures generatedare larger than the screen - use thejoyst>}ick to move your "window" around.(See the comment on OPTION and START keys, also.) Also, you must pressRETURN when enter>}ing the initial cellnumber (from 1 to the number of cells,which is also the number of colors).When you press the fire butt>}on, thereis a delay while the automata arecomputed, but be patient, the nextpicture will appear.ROLLEM.ACT -This is a>} game called Roll 'Em. Usinga joystick in port 1 to control yourroller, paint the entire floor of themaze. Avoid the mov>}ing fires - contactwith one will destroy your roller.ROLLEM.MAZ -Maze file used by Roll 'Em.MAKMAZFI.ACT -Creates >}a ROLLEM.MAZ file. Edit theprogram to select a different maze,and run it to create the file.TRAILS1.ACT -This a graph>}ics "toy" called Trails.Compile/run this file "as is" to getthe Koala Pad version of Trails (butthere seems to be somethin>}g amiss withthe Koala draw() routine,at least on mysystem.... the .OBJ version works OK though). TRAILS2.ACT, TRAILS3.>}ACT - These contain replacement functionsfor TRAILS1.ACT, that convert it towork with a joystick (works fine thisway).>}TECHPOP.ACT -This is a pre-programmed percussionrhythm box (or whatever the terminologyis, I'm not a musician). Enter a>} digitfrom 0 through 9 to play one of tenpreset rhythms. Press the '<' key toslow down the tempo, or the '>' key tospeed>} it up. TIMBRES, PRESETS -Used by TECHPOP. SMACK.OBJ -This is a set of games that are similarto Concentration. R>}un with no cartridge(BASIC disabled). Uses joystick #1 andthe keyboard. (The source file for SMACK was not available.) >} RATSRVNG.OBJ -The game of Rats' Revenge. Traverse allthe ladders and platforms, avoiding thegiant rats. The pr>}ogram allows you todesign your own playing "field." (Thesource file for RATSRVNG was not avail-able.)CLOUDHOP.OBJ -C>}ompiled (runtime) version of CLOUDHOP.ACT.MIDAS.OBJ -Compiled (runtime) version of MIDAS1.ACTand MIDAS2.ACT.TRAILPA>}D.OBJ -Compiled (runtime) version of Trails (TRAILS1.ACT)for use with a Koala Pad. (This version works perfectly.) >} TRAILJOY.OBJ - Compiled (runtime) version of Trails foruse with a joystick.TECHPOP.OBJ -Compile>}d (runtime) version of TECHPOP(TECHPOP.ACT, TIMBRES, and PRESETS).<E