@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 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;DEL`?<0LV`@ʆ 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  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u1240 DATA CA10F2A9008D01D2A209BD9C339DBD37CA10F7A202FE1A06BD1A06C91A9005A9109D1A069D0036CA900210E9A9,8441250 DATA C84CD32180T}8080809B0000000000000000000000AD0136C588F002B00160E688E68920FA22A202A9208D00D2A0,320036CA900210E9A9,8441250 DATA C84CD32180T12%&DSDATHEXLINDATLIDDBYTPASCHKSUTOTAIN@ V} *** BONK ***I @ 1(MAKE CASSETTE (0), OR DISK (1)5I W}!@@ C BC0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15(r;@,9@",/-@ X}"3"<68,-@ L6-A V#A` A r( CHECKING DATA286-%@(LINE:!"8B:,@A Y}<F%6-F:A,%F:A,$AV+C(LINE  MISSING!FFe-@@@36-@:7,,&@H Z}O6-@:7%@,,&@He6-8,$@%8,P."@*@ $". @PZ% 6-%!A %6-& [}Ad  ""@Pn A x F:A,@A "Ap(A`*@ \}A$)*@@<*@A%O*@@b*@u*@@@@ ]}<-@@4**@. 9@<(Ag+("INSERT DISK WITH DOS, PRESS RETURN8;@ ^},<g@@ D:AUTORUN.SYS*@AU)*@AU<*@O*@@ _}@b*@Au*@@S A{((READY CASSETTE AND PRESS RETURNH@@A(C: `}R#A0f-@@@j"w*@{ M(( WRITING FILE#6-@/6-A 9#AC A M @P a}(BAD DATA: LINE cc0,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, b}232,2--133,15,169,0,133,10,169,40,133,11,24,96dd2065E4A95085C1A91D85C2A202A5C29D3222A5C19D002218691485C19002E6C2E8E01 c}8D0E8A9008584AABD00E0,756dd9D0020BDFFE09DFF20E8D0F1A9208DF402A277BDF42D9D0820CA10F7A207BD6C2E9DD820CA10F7A900858D2072,718 d}dd2A20852AA9038D3002A92F8D3102A9C88DC402A9788DC502A9468DC602AD1FD06A90206AB0F7E684A584C909D0,955dd04A9008584186901091 e}08D642FAD1FD0C905F0F9D0DAAD1FD06A90FAA9008580858185828586A9038587A58485,373dd838585A900858DA583F8186901D88583A685E00FF002 f}E685A686E003F004E686D00CA2018686A587C909F002E6,278dd87A685BD732E85A3A90585A5BD822E859CBD912E85A2A686BDA02E85AAA9B98D3002A g}92E8D310220852AA90085,618$dd8D858A85AB85A98D1ED08594859585A485A68589859D859E859FA685BDA32E8588A0CBA22AA907205CE4A5860A,687 h}.ddAABDB12E85C1BDB22E85C2A000B1C199501DC8C0F0D0F618A5C169F085C19002E6C2A000B1C199401EC8C0F0D0,4538ddF6A9688DC402A9C88DC i}502A9008DC602A9868DC702A227BDDB2E9D001DA9009D281DCA10F220802C20692C208E,430Bdd2CA583A04A206D2CA5860A0AAABD8F2F858CBD9B2F85 j}8BE8A002BD8F2F998E00BD9B2F999100A9009999009996,528Ldd00E88810E820722AA9208D07D4A9028D1DD0A93E8D2F02A9018D6F02A9DA8DC002A91 k}A8DC1028DC2028DC302A5,380Vdd8C8D00D0A48BA200BDAB2F95B9990024C8E8E008D0F2A209BDEB2F95AFCA10F8209F2AA9AA8D01D2A205BD1D30,167 l}`dd8D00D2A905204B2DCA10F220852AA928204B2DA9FF858D20192B20802C20692CAD1FD06A902DADFC02C921D00E,645jddA9FF8DFC02458D858DD m}003208F2AA58DF0E1A58AD00DA588F009A5ABC5AAD0CA4CBB2D4C612D4C5428A900AA9D,556tdd00249D00259D00269D0027E8D0F160A90085AC85AD85 n}A085AE8D01D28D03D28D05D28D07D28D08D260A90085C5,708~ddA92585C6A90085A7A6A7E003F0D3B58E9D01D0B491A200B5AF91C5C8E8E00AD0F6E6A o}7E6C64CAB2AD8A58DF00F,610dd20EB2B20D62C20122D20E52A20942C8D1ED04C62E4A207A48BA900854D990024C8CA10F9AE780286A9A58C187D,373 p}cc1E30858C8D00D0A58B187D2930858BA207A8B5B9990024C8CA10F760A5A0D011A5A4F003C6A460A5A385A4A5A6,76ddF003C6A660A5A585A6A2 q}00209C2BB596F005D6964C812BB58EC58C900AD004A900F006A9FFD002A9018594B591,841ddC58B900AD004A900F006A9FFD002A9018595A008A594D r}93930D00CA595D94230D00598959910038810EAB599A8,286ddB58E18793930958EB591187942309591E8E003D09C4C9F2AB599A8B58E38F94B304A4A s}4A8594B59138F954304A,722dd4A4AA8B9002285C1B9322285C2A494B1C1293FF069C91BF065C90FF061A59C9596A9108D00D2A9068D01D285AC,420 t}ddAD0AD22903A8B95D30959910B1A58B38E91C4A4A4AA8B9002285C3B9322285C4A58C38E92C4A4A4AA8B1C3293F,506ddF022C90FF032C91BF01B u}B1C329C0C940D012A90385AEA9F08D06D2A9C88D07D2A90091C360A97020552CA91085,214ddADA9828D02D2E6AB4C2B2C202B2CA5A285A0A90585A1A v}9A68D05D2A950F81865808580A90065818581A9006582,573dd8582D860A588A03648386A4A4A4A99001DC868290F091099001D60A202A02AB580206D w}2CC8CA10F760A587A040,109ddD0D9A4ACF0068884AC8C01D2A4ADF0098884AD9809A08D03D2A5A0F019A4A1B961308D04D2C6A1D00DA90585A1,257 x}ddC6A0D005A9008D05D2A5AEF009C6AED005A9008D07D260E69FA59FC914D010A900859FA968CDC402D002A90A8D,974ddC402E689A589C93CD00D y}A9008589A588F838E901D88588AD0CD0858AAD04D02908F002858A60A59D18690AC932,505 ddD002A900859DA8A209B9EB2F95AFC8CA10F7A5A9C90FF z}009A59E186908C940D002A900859EA8A207B9AB2F95B9,237ddC8CA10F76085A7A9008514A514C5A7F0BAAD1FD0C907F0F34C5428A900858D20852AC6 {}87208E2CA9CC8D01D2A2,986dd28E68CA58C8D00D0AD0AD28D00D2A901204B2DC68CA58C8D00D0AD0AD28D00D2A901204B2DCA10D920852AA587,116 |}(ddF0034C0829A209BD67309D311ECA10F720722AA9FF204B2D4C5428A900858D20852AA588F838E9018588D82069,7712dd2CA91020552C20802CA9 }}328D00D2A0A48C01D2A901204B2D88C0A0D0F3A588D0D420852A4CB7280000FFFFFFFF,118<dd00003C3C3C3C3C3C3C3C0000F8FCFCFC3C3C00001F3F3 ~}F3F3C3C3C3CFCFCFCF800003C3C3F3F3F1F00003C7CFC,962FddFCFCFC7C3C3C3E3F3F3F3F3E3C0000FFFFFFFF7E3C3C7EFFFFFFFF000000183C3C3C3C }3C3C3C3C3C3C3C3C1800,578Pdd0000FCFEFEFC000000003F7F7F3F0000FF81BDA1B9A181FF007EFF7E3C1800002825231F1D1918171615141312,369 }Zdd1110322D281E1919191919191919191919191817161514131211100F0E0D0C0B100E1A60605555505045454040,956ddd404040404071302932E1 }3370707042001D0246501D06060606060606060606060606060606060606060641B92E,838ndd000033232F32251A00000000222F2E35331A000000002 }C293625331A000000002C2536252C1A00007070707070,396xdd70707070471B2F70067007700670060641032F0000000000000000226F2E6B00000000 }0080808080A3AFB0B9B2,270ddA9A7A8B4809199989480A2B99A80800000002A212D253300002821273525000000000000000000006C6576656C,511 }dd1A00110080808080808080B3A5ACA5A3B480A6AFB280ACA5B6A5AC8080808080B3B4A1B2B480B4AF80A2A5A7A9,897ddAE808080487E7EB88060 }9880505092B87848C078486060D0D2A86880FED6FE107C6C6CEEFED6FE107C6CEC0EFE,333ddD6FE107CEC0C0EFED6FE107C6CEC0EFED6FE107C6C6CE }EFED6FE107C6C6EE0FED6FE107C6E60E0FED6FE107C6C,305dd6EE00020203F3C3CFC0404000010103C3FFC3C0808000008083CFC3F3C101000000404 }FC3C3C3F202000008142,814dd3C3C3C3C428100A000A0828C9601010100FFFFFF0000000001FF000001FF000001FF00000001010100FFFFFF00,293 }ccFFFF0001010100FF2C2C2A2A2A2C2E2E2E1C1E1E1C1A1A1A1C1E0204060800C8DCD2E69627212D2500002F3625,31dd32C4C1C1C1C1C9C1C1C1C }1C1C1C1C1C9C1C1C1C1C3C2C01B40404240404040404040404240401BC0C2C2C0C01B,293dd4042404040404040404042401BC0C0C2C2C0C0C01B4240 }40404040404040421BC0C0C0C2C84141414145404040,629cc40404040404641414141C7C2C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C2C2C0C0C0C }0C0C0C0C0C0C0C0C0C0,12ddC0C0C0C0C0C2C2C0C0C0C0C0C0C4C1C1C1C1C3C0C0C0C0C0C0C2C2C0C0C0C0C4C1CAC1C9C9C1CAC1C3C0C0C0C0,720 }ddC2C8C3C0404042401BC0C2C2C0C01B42404040C4C7C2C24040404240404FC2C2C04F4042404040C2C2C8C5C0C0,433dd4042401BC0C2C2C0C01B42 }404040C6C7C2C0C0C0C0C6C1C9C1CACAC1C9C1C5C0C0C0C0C2C2C0C0C0C0C0C0C6C1,934ddC1C1C1C5C0C0C0C0C0C0C2C2C0C0C0C0C0C0C0C0C0C0C0C }0C0C0C0C0C0C0C2C2C0C0C0C0C0C0C0C0C0C0C0C0C0,590ddC0C0C0C0C0C2C2C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C2C8414141414340404040 }404040404441414141,955ddC7C2C0C0C01B424040404040404040421BC0C0C0C2C2C0C01B4042404040404040404042401BC0C0C2C2C01B40,851" }dd404240404040404040404240401BC0C2C6C1C1C1C1CAC1C1C1C1C1C1C1C1CAC1C1C1C1C5C4C1C1C1C1C1C1C1C1,727,ccC1C1C1C1C1C1C1C1C1C1C3 }C2C01BC0C0C0C0C0C0C0C0C0C0C0C0C0C01BC0C2C2C0C0C0C0C0C0C0C0C0C0C0C0C0,566ddC0C0C0C0C0C2C2C0C0C4C1C1C1C3C0C0C0C0C4C1C1C3C0C0 }C0C2C2C0C0C2C01B404C404040404C1BC0C2C0C0C0,525@ddC2C2C0C0C2C0C0C0C0C0C0C0C0C0C0C0C2C0C0C0C2C2C0C0CCC0C0C0C0CBC0C0CBC0C0C0C }CC0C0C0C2C2C0C0C0,227JddC0C0C0C0C2C01BC8C1CDC0C0C0C0C0C2C2C0C0C0C0C0CEC1C7C0C042C0C0C0C0C0C0C0C2C2C0C0C0C0C01B4048,217Td }d414147401BC0C0C0C0C0C2C2C0C0C0C0C0C0C0424040C8C1CDC0C0C0C0C0C2C2C0C0C0C0C0CEC1C71BC0C2C0C0,696^ccC0C0C0C0C0C2C2C0C0C0C0C }0C0C0CCC0C0CCC0C0C0C0C0C0C0C2C2C0C0C01BC0C0C0C0C0C0C0C0C01BC0C0C0C0,38hddC2C2C0C0C0C0C0C04B404040404B404040404040C2C2C0C0C }0C0C0C0C2C0C0C0C0C2C0C0C0C0C0C0C2C2C0C0C0,180rddC0C01BC2C0C0C0C0C21BC0C0C0C0C0C2C2C0C0C0C0CEC1C5C0C0C0C0C6C1CDC0C0C0C0C2C2 }C0C0C0C0C0C0C0C0,542|ddC0C0C0C0C0C0C0C0C0C0C2C84143404040404040404F4040404040404441C7C21B424040404040404040404040,222dd }404040421BC2C6C1CAC1C1C1C1C1C1C1C1C1C1C1C1C1C1CAC1C5C4C1C1C1C1C1C9C1C1C1C1C1C1C9C1C1C1C1C1,274ddC3C21B001B001B4240404040 }4040C2C0252E24C0C2C2C01B001B404240401BC0C0C0C8C1C1C1C1C1C7C21B001B,998dd001B424040C4C3C0C0C2C01B001BC0C2C84141414141C7C0C }0C2424040C2C0C01BC0C0C2C2C0C0C0C0C0C2C0C0,231dd42C2C0C0C2C01B001BC0C2C2C0C01BC0C0C2C0C0C6C5C0C0C2C0C01BC0C0C2C2C0C0C0C0C0 }C2C0C0C0C0404042,540dd4040404040C2C2C0C0CBC0C0C2C0C0C0C04F40424040404040C2C2C0C0C2C01BC2C0C0C0C0C0C0424040404040,627bb }C2C2C0C0C2C0C0C2C0C0C4C3C0C0C2C0C0C0C0C0C2C2C0C0C2C0C0C2404042C2C0C0C21B00001BA0C2C21BC0C2,9ddC0C0C2C0C0C242401BC84D4040 }404EC7C2C0C0CCC0C0C2C0C0C6C5C0C0C2C0C0C0C0C0C2C2C0C0C0C0C0C2C0C0,671ddC0C0C0C0C2C0C0C0C0C0C2C2C0C0C0C0C0C2C0C0C0C0C0C0C2C }0C0C0C0C0C2C2C0C0C0C0C0C8C1C1C1434040C8,963dd4141414141C7C84141414141C7C01B40424040424040404040C2C2C0C04F404042401B404240 }404C4040404040,864ddC2C2C0C0C0C0C042401B404240404040401BC0C0C2C2C0C0C0C0C042401B40424040404040404040C2C6C1C1C1,348ddC }1C1CAC1C1C1CAC1C1C1C1C1C1C1C1C50000000000000000000000000000000000000000000000000000000000,458 D:BONK.BASC1,348ddC pLLd"X;*****************************i"X;* BONK *n"X;* Copyright 1984 *s"X;* Programmed b}y James Hague *x"X;* Using MAC/65 by OSS Inc. *}"X;*****************************X;X;HARDWARE REGISTERSX;RANDO}M ;;Random #sGRACTL;;Graphic ctrlAUDC1;;Audio controls AUDC2ҥ AUDC3Ҫ AUDC4үAUDF1};;Audio frequency AUDF2ҹ AUDF3Ҿ AUDF4AUDCTLHPOSP0;;Pl. 0 horiz.HPOSP1;;Pl. 1 horiz}.P0PF;;P0 to PF coll.P0PL ;;P0 to PL coll.HITCLR;;Collision clearCONSOL;;Console buttonsPM}BASESETVBV\;;VBLANK vectorsXITVBVb;;VBLANK exitSIOINVe;;Initialize SIOX;X;SHADOW REGISTERSX}; CLOCK;;Real time clockATTRACTMDMACTL/;;DMA controlSDLSTL0;;Dlist pointerGPRIORo"STICK}x;;Joystick 0'COL0;;Color regs., COL11 COL26 COL3;PCOL0;;Player colors@ PCOL1ECHBAS};;Character baseJCH;;Keyboard bufferOX;TYX;^X;GAME VARIABLEScX;hSCORE;;Player's scoremLEVEL};;Current levelrSLEVEL;;Starting levelwBLEVEL;;Binary level|BOARD;;Current boardLIVES;;Remaining l}ivesTIME;;Bonus timerDIE;;Death flagP0Y;;Pl0 y positionP0X;;Pl0 x positionGAMCTL;;Game con}trolENXPOS;;Enemy X pos.ENYPOS;;Enemy Y pos.ENXADD;;Enemy X addENYADD;;Enemy Y addENBOUN;;}En bounce flagsENDIR;;Enemy directionBDIST;;Bounce distanceENAN;;Enemy pointerPLAN;;Play. pointer}FLASH;;Treas. flasherFREEZE;;Freeze timersFTIME;;Freeze timeWAIT;;Time delayTEMP;;Temp sto}rageDIR;;Jstick direct.TOTAL;;Jewels/boardCOUNT;;Jewels/takenBONK;;Bounce soundDING;;Bell }soundWSND;;Eat wall soundENEMY ;;Enemy imagePLAYER;;Player image LO;;General pointerVLO;;Dit}toPOINT;;Play. pointerX;!X;RESERVED MEMORY&X;+ 0X;5PM;;Pmbase: PL0? PL1D PL2I }PL3NX;SDISP;;Display areaXCHSET ;;New char set]LOTBL";;Plotter tablebHITBLLOTBL2gX;l(};;Program startqX;vX;SET-UP PLOTTER{X;GAME SIOINV;;Init soundsQ>4DISPPPLOQ>5DISPP PLO$>}SEPLQLO PHITBL9QLO PLOTBL9,O>PLO DSEP2 #LO SEP22(> HSEPLQ> PSLEVEL}X;X;REDEFINE CHARSETX;>;;Move set MSETQ9 PCHSET9Q9PCHSET9 2 HMSETQ>5CHSET;;Install }it PCHBAS $>w;;Redefine set%RDEFQCDAT9*PCHSET9/04 IRDEF9$>>RDEF2QCDAT29CPCHSET9H0M IRDE}F2RX;WGOQ>;;Turn off VBI\ PGAMCTLa PMCLR;;No playersf QUIET;;No soundkX;pX;TITLE SCREENuX;zQ>4TDL;;Po}int to titlePSDLSTL;;screen displayQ>5TDL;;list.PSDLSTLQ>;;Set up titlePCOL0;;colors.Q>x PCOL1}Q>F PCOL2X;STARTQCONSOL;;Start keyW?;;pressed?DST1;;Yes!X;X;LEVEL SELECTIONX;W?;;Select pre}ssed?ESTART;;No, skip this.#SLEVEL;;Yes, start atQSLEVEL;;next level.R> ;;Highest level?HZ1;;No, continue}.Q>;;Yes, reset andPSLEVEL;;store it.Z1,;;Add 1 to start-O>;;ing level #L>;;Add colorPTITLEI;;an}d show it Z2QCONSOL;;Get keys againR>;;Key released?FZ2;;No, wait for itHSTART;;Branch always!X;$ST1Q}CONSOL)W?.DST13Q>;;Set variables8PSCORE;;that are set=PSCORE;;once per game.B PSCOREG PBOARDLQ>;};3 livesQ PLIVESVQSLEVEL;;Set level[ PLEVEL` PBLEVELeX;jNEWLEVQ>;;Turn off VBIo PGAMCTLtQLEVEL;;Get BCD }levely<~,O>;;And raise it-PLEVEL;;Then store.$BLEVEL;;Get bin. level(>;;Highest level?FSAMEL;;Ye}s, keep it.#BLEVEL;;No, raise it.SAMEL$BOARD;;Get board #(>;;Highest board?FBRD1;;Yes, reset#BOARD;;and} storeHSETLEV;;Branch always!X;BRD1$>;;Reset board # &BOARDQLIVES;;And give extra R> ;;life FSETLEV} #LIVES SETLEV$BLEVEL;;Binary levelQDEL19;;Set up delay PWAITQ> PWAITQBOUN9;;Get bounces} PBDISTQFTM9;;Get freeze time  PFTIME$BOARD;;Board #QTOT9;;Get jewels PTOTALQ>4DL;;Install DL# P}SDLSTL( Q>5DL-PSDLSTL2X;7NEWLIFE QUIET;;No sound.<Q>;;Zero itemsAPGAMCTL;;that must beFPDIE;;zeroed }for eachKPCOUNT;;new lifePPDIRU PHITCLRZ PENXADD_ PENYADDd PWAITi PWAITn PTIMEsPENAN;;Reset poi}ntersx PPLAN} PFLASH$BLEVEL;;Set timer QTIM9 PTIME%>4VBI;;Deferred VBI $>5VBIQ> SETVBVX;}X;DRAW SCREENX;QBOARD;;Get board #T?;;Times 2>;;use as indexQBDTBL9;;Board lo bytePLOQBDTBL9};;Hi byte of it PLO%>;;Draw 1st partDR1Q@LO7;;Get screen bytePDISPP8;;and show it3)>HDR1},QLO;;point to part 2O>PLO DDR2 #LO DR2%>DR3Q@LO7;;Get bytePDISP@8"3')>,HDR31}X;6X;INITIALIZE;X;@Q>h;;Color 0 isEPCOL0;;purpleJQ>;;Color 1 isOPCOL1;;greenTQ>;;Color 2 isYPCOL2;;}black^Q>;;Color 3 iscPCOL3;;blueh$>';;Print scoremPSQSCL9;;liner PDISP9wQ>| PDISP(90IPS SH}OSC;;Show score SHOBO;;Show bonus SHOLI;;Show livesQLEVEL;;Show level%>J BCDQBOARD;;Set initial T?;};playerT?;;positions.>QIX9;;Set player XPP0XQIY9;;and YPP0Y2%>;;Set all enemySETQIX}9;;X PENXPOS8QIY9;;Y PENYPOS8Q>PENDIR8;;Zero enemyPENBOUN8;;status21ISET;;Finish up X};X;P/M SET UPX; PMCLR;;Clear players!Q>5PM;;Point to PM&PPMBASE;;area+Q>;;Set gractl0 PGRACTL5Q>>;;S}et dmactl: PDMACTL?Q>;;Set priorityD PGPRIORIQ>;;Set pl0 colorN PPCOL0SQ>;;Set enemy colorX PPCOL1] PPC}OL1b PPCOL1gQP0X;;Draw playerlPHPOSP0;;Set x pos.q%P0Y;;Get yv$>{PDQPDAT9;;Get player byte PPLAYE}R9PPL08;;And show it32(>HPD$> ;;Copy enemy dataCDQEDAT9;;from memory toPENEMY9;;animation tab}le0ICD DRAWEN;;Draw enemyQ>;;Introduction PAUDC1$>INQMUSIC9 PAUDF1Q> DELAY0II}N QUIETQ>( DELAYQ>;;Turn on thePGAMCTL;;VBIX;X;MAIN LOOP X;MAIN ENMOVE;;Move enemy SHOS}C;;Show score SHOBO;;Show bonus M1QCONSOL;;Start pressed?%W?* DM4;;Yes./QCH4R>!;;Space bar?9 HM2;;No.>Q}>CPCH;;Reset keycodeHNGAMCTL;;Flip pauseM PGAMCTLRHM2W HUSH;;Peace and...\M2QGAMCTLaFM1fQDIE;;Playe}r dead?k HM3;;Yes.pQTIME;;Time up?uFM3zQCOUNT;;Level done? RTOTAL HMAIN !LDONEM3!KILL;;Auuughh! M}4!GOX; X;CLEAR PMX; PMCLRQ>> PCPPL09 PPL19 PPL29 PPL392HPCDE3:X;X;SOUND OFF}X;QUIETQ>;;Turn off sound PBONK PDING PFREEZE PWSNDHUSHPAUDC1 PAUDC2 PAUDC3 PAUDC4 PAUDCTL} : X; X;DRAW ENEMY$ X;) DRAWENQ>4PL1;;Draw all 3. PPOINT;;enemy3 Q>5PL18 PPOINT= Q>B PTEMPG DE1$TE}MPL (>Q FDE3V QENXPOS9;;Set x position[ PHPOSP19` %ENYPOS9e $>j DE2QENEMY9o P@POINT7t 3y 2~ (> HDE}2 #TEMP #POINT !DE1 X; X;VBI X; VBI-;;Kill decimal! QGAMCTL;;Do this VBI? FEXIT;;No! Get out!  }PCHK;;Check player  STUFF;;Do work  ANIM;;Animate  PLMOVE;;Move player  SOUND;;Make noise EXITPHITCLR;;Clear }all hits !XITVBV;;Go home! X; X;MOVE PLAYER X; PLMOVE$>;;1st- erase %P0Y;;player Q> PATTRACT;;Kill at}tract ERPLPPL08 3 0 IERPL $STICK;;2nd- get new &DIR;;player position QP0X;;Get x position ,;;then add o}ffset# OXOFF9;;to old coord( PP0X;;Save new pos.- PHPOSP0;;and show it2 QP0Y;;Now repeat for7 ,;;y position.< O}YOFF9A PP0YF $>;;3rd- redrawK ?P DRPLQPLAYER9U PPL08Z 3_ 0d IDRPLi :n X;s X;ENEMY HANDLERx X;} ENMOVE}QFREEZE;;Frozen? HTWX;;Yup, ice cold. QWAIT;;Get 1st timer FTWO;;If 0, do next. "WAIT;;Decrement 1st :;;}And leave. X; TWOQWAIT;;Reset 1st timer PWAIT QWAIT;;Get 2nd timer FMOVE;;If 0, move 'em "WAIT;;De}crement 2nd TWX: X; MOVEQWAIT;;Reset 2nd PWAIT $>;;Main counter DOMOR CHECK;;Check enemy QENBOUN}9;;Bouncing? FNOB;;No, continue. "ENBOUN9;;Yes, !OUT;;Do next enemy. X; NOBQENXPOS9;;Get x pos RP0X;;Comp w}ith play DXLES;;Less than? HXMOR;;More than? Q>;;Equal to, stop FDOY;;movement. XMORQ>;;More than, move H}DOY;;left. XLESQ>;;Less than, move DOYPENXADD;;right." QENYPOS9;;Get y pos' RP0Y;;Comp eith play, DYLES;;Less} than?1 HYMOR;;More than?6 Q>;;Equal to, stop; FFINI;;movement.@ YMORQ>;;More than, moveE HFINI;;left.J YLESQ>};;Less than, moveO FINIPENYADD;;right.T %>;;Convert to dirY CDIRQENXADD;;Is x direction^ RENX8;;correct?c HAGA};;No, check more.h QENYADD;;Is y directionm RENY8;;correct?r HAGA;;Nope.w C| PENDIR9;;It's correct! IOUT;;Branch }always! X; AGA1;;Continue ICDIR;;searching OUTQENDIR9;;Get direction ? QENXPOS9;;Update x pos , OENX8 } PENXPOS9 QENYPOS9;;Update y , OENY8 PENYPOS9 2 (> HDOMOR !DRAWEN;;Draw enemy X; CHECKQENDIR9;;}Check if the ?;;enemy hit QENXPOS9;;anything ;;;1st, scan on SSCX8;;x axis V? V? V? PENXADD QENYPOS9;;2}nd, scan on ;;;y axis SSCY8 V?! V?& V?+ ?;;Now, get point0 QLOTBL85 PLO: QHITBL8? PLOD %ENXADDI Q@LO}7N M>?;;Mask off colorS FL0;;Hit anything?X R>;;Hit diamond?] FL0;;Yup, forget itb R>;;Hit freezer?g FL0;;Yup, }who caresl QBDIST;;A hit! Make theq PENBOUN9;;enemy bounce!v Q>;;Set sound{ PAUDF1 Q> PAUDC1 PBONK QRAN}DOM;;Get new direct. M> ? QBDIR8 PENDIR9 ICHECK;;Check it out! X; X;CHECK PLAYER X; PCHKQP0Y;;Get y }pos ;;;And convert to S>;;screen position V? V? V? ?;;Get address QLOTBL8 PVLO QHITBL8 PVLO Q}P0X;;Now convert x ; S>, V? V? V? ? Q@VLO7;;Get point M>?;;Mask out color FL0;;Nothing there% R>;;Hi}t freezer?* FHITFR;;Yup, handle it/ R>;;Hit diamond?4 FHITDI;;Yup, fix it9 Q@VLO7;;Get point> M>;;Get color usedC} R>@;;Hit weak wall?H HL0;;No, leave.M X;R X;Hit weak wallW X;\ Q>;;Set sounda PWSNDf Q>k PAUDF4p Q>u P}AUDC4z HITXQ>;;Erase wall P@VLO7 L0: X; X;Hit diamond X; HITDIQ>p;;Give points  ADD Q>;;Set sound} PDING Q> PAUDF2 #COUNT;;Count it !HITX X; X;Hit freezer X; HITFR HITX;;Erase freezer QFTIME;;Set} freeze time PFREEZE Q> PFREEZE Q>;;Set sound PAUDC3 Q>P;;Give points X; X;SCORE ROUTINESX;}ADD<;;Add points to  ,;;score OSCORE PSCOREQ> OSCORE$ PSCORE)Q>. OSCORE3 PSCORE8-=:B}X;GSHOBOQTIME;;Show bonusL%>6QX;VBCD5;;Show 1 bcd[;`W?eV?jV?oV?t PDISP8y3~7M>L> PD}ISP8:X;SHOSC$>;;Show score%>*SSQSCORE9 BCD30ISS:X;SHOLIQLIVES;;Show lives%>}@HBCDX;X;SOUND ROUTINESX;SOUND%BONK;;Bounce sound? FT1;;No1 'BONK 'AUDC1T1%DING;;Bell soun}d? FT2;;No 1 'DINGCL> PAUDC2#T2QFREEZE;;Freezer sound?( FT3;;No-%FREEZE2 QFSND87 PAUDF3<}"FREEZEAHT3FQ>KPFREEZEP "FREEZEUHT3ZQ>_ PAUDC3dT3QWSND;;Wall sound?i FT4;;Non "WSNDsHT}4xQ>} PAUDC4T4:X;X;FLASH JEWELSX;STUFF#FLASH;;Handle flashQFLASH;;timers.R>HS1Q> }PFLASHQ>h RCOL0HS2Q>  S2PCOL0X;X;HANDLE TIMEX;S1#TIME;;Count down QTIMER><;;We} interruptHS3;;this programQ>;;for an import-PTIME;;ant newsQTIME;;bulletin:<;; HI MOM!; S>}- PTIMES3QP0PL;;Check playerPDIE;;collisions" QP0PF'M>,FS41PDIE6S4:;X;@ X;ANIMATEEX;JANIMQ}ENAN;;Animate enemy.O,;;Hey guys, look!TO> ;;Your names areYR>2;;in print :^HA1;; David HaguecQ>;; Robbie Hag}uehA1PENAN;; Martin Beckm?;; Nathan Zinkr$> ;;and everyone'swA2QEDAT8;;favorite:|PENEMY9;; A. ZLOTNICK!3;;}Tron to you!0;;(No you don'tIA2;;get paid)QDIR;;Animate playerR>;;by storing aFA3;;different imageQPL}AN;;in the player,;;animation tableO>R>@HA4;;Is this gameA3Q>;;better thanA4PPLAN;;The Electroids?}?$> A5QPDAT8 PPLAYER930IA5:X;X;TIME DELAYX;DELAYPTEMP;;Enter withQ>;;length of} pausePCLOCK;;(in jiffies) inD0QCLOCK;;the accumulator  RTEMPFS4 QCONSOLR>!FD0&!GO+X;0X;DIE5 }X;:KILLQ>;;Stop movement? PGAMCTLD QUIET;;No soundI"LIVES;;Take a lifeN SHOLI;;And show them.SQ>X PAU }DC1]$>(;;Kill playerbK1#P0X;;1st shiftgQP0Xl PHPOSP0q QRANDOMv PAUDF1{Q> DELAY"P0X;;2nd shiftQ }P0X PHPOSP0 QRANDOM PAUDF1Q> DELAY0IK1;;Repeat again. QUIETQLIVES;;Any lives?FOVR !N }EWLIFEX;X;GAME OVERX;OVR$> ;;Show GAME OVER O1QGOVR9PDISP190IO1 PMCLRQ> DELAY }!GOX;X;LEVEL DONE X;LDONEQ>;;Stop movement PGAMCTL QUIET;;No sound C1QTIME;;Give 10 points%<;;for} each second*;;;left on the/S>;;timer.4 PTIME9-> SHOBO;;Add points forCQ>;;time remainingH ADD;;and make }bellM SHOSC;;tones by vary-RQ>2;;ing the volumeWPAUDF1;;of voice 1.\%>a C2'AUDC1fQ>k DELAYp1u)>z}HC2 QTIMEHC1 QUIET;;Kill noise!NEWLEV;;Start new levelX;X;CHARACTER DATAX;CDAT =====}= =<=<=<=<=<=< <=<===== =<=<====?=? ?=<=<=<=<== ====<=<}=? ?=?====<=| ====|=< <=>=?=?=?=?=> <====== ~=<=<=~== =}=====<=< <=<=<=<=<=<=< <=<=<===== =======? ==?==== }==== CDAT2 =~==~=<== X; X;LEVEL DATAX;DEL1 (=%=#=== ====}== =$BOUN 2=-=(===) ======. =3FTM =====8 ====== =}  = BTOT ==GTIM `=`=U=U=PL P=E=E=@=@Q @=@=@=@=@VBDTBL BD1=BD2=BD3[X;`X;INSTALL DI}SPLAY LISTeX;jDL p=p=p=Bo DISPt =Fy DISPP~$ ==========! =======}== A DLX;SCL A SCORE: BONUS: A A LIVES: LEVEL:A A AX;TDL p=p=p=p=p p=}p=p=p=G TITLE p==p==p= p===A TDLX;TITLE A BoNk A =A COPYRIGHA} =AT 1984 BY: A A JAMES HAGUE A A level: 1 A =A SELECA =AT FOR LEVEL A =A } START TOA =A BEGIN AX;IX H=~=~= =`==  P=P==IY x=H==x H=`=`= =}=h=X;#X; PLAYER, ENEMY, MUSIC DATA(X;-PDAT ====|=l2 l====7 =|=l===< ==}=|== A =====|F l=====K =|=l=l==P ===|=l=nU =====|Z n=`=}===_ =|=l=n=dEDAT = = =?=<=<=i ======<=?n =<======= =AAAAAAJAEACX;HBD3 =ADAAAAAIAAAAAAIAM =AAAAAACBAR A; ; ;AW  =AB@@@@@@A\ =AB@A4}a AENDAf =A@BB@Ak A; ;Ap  =A@B@@Au A;Az =A@@@HAAAAAGBA A; ; ;A  =AB@@A =ADC@@B@A5} A; ;A =A@BHA  =AAAAAAA =AG@@BA  =AB@@A =AB@@A A;A =A@@BB@@@@@B@@A  =ABA6} =AB@@B@A A; ;A =A@BB@@A A;A =A@@B@@FE@@B@@A A;A =A@@BB@@@@@B@@@@A  =A@@B@@@@@A7} =ABB@@K@@B@@@@A  =AO@B@@@@@A =ABB@@B@A A;A =AB@@@@@@A  =AB@@@@@A =ABB@@B@@B@@DC@@8}A =AB@@@@@BB@@B@@BA  =A@@BA  =AB@@BA A; ;A =A BBA A;A =A@B@@B@@BA$  =AB@A) A9};A. =AHA3  =AM@@@NA8 =AGB@@L@@B@@FE@A= =A@B@@@@@BB@@@@AB =A@B@@@@@@B@@@@AG =A@BB@@@@@B@@@:}@AL =A@@B@@@@@BB@@@AQ =A@@HAAAAV  =AC@@A[ =AHA`  =AAAAAAAe =AGHAj  =AAAAAAAo =AG;}@At A;Ay  =A@B@@B@@@@@A~ =ABB@@A  =AO@@B@A A;A  =A@B@@L@@@@@A =ABB@@@@@A  =AB@A<} A;A  =A@B@@@@@A A;A =A@@BB@@@@@A  =AB@A A;A  =A@B@@@@@@@@A =ABFAAAAAJAAAA =A=}JAAAAAAAAEAX; GAME=A@@BB@@@@@A  =AB@A A;A  =A@B@@@@@@@@A =ABFAAAAAJAAAA =A$  KnAAARBBAP({;@ ,'6-F:A,&@?}3AEAA$S6-$AVg-@@ k"w67,.>:,{ Z6-?:C:,,'-Av%A %@}86-F:&A,D6-N @V%Z F-Ad%Ar%$6-F:,06-: @B%F `A}A@'A 9A@EAV](THE job... Is DoNe!`)!A'6-&A()6B}-A()!@c6-&@d)6-@d+!@16-&@2+6-%@2+!@6-&@+6C}-%@+!@6-&@+6-%@ +!@6-&@+6-%@ +!@6-&@D}+6-%@ )"@6-)6-%@ $ PP104,162,4,160,0,177,205,145,203,200,208,249,230,206,230,20E}4,202,208,242,96 D8:COLOR.SET)6-%@ $ PP104,162,4,160,0,177,205,145,203,200,208,249,230,206,230,20%./DATHEXLINDATLIDDBYTPASCHKSUTOTAIN@G} !!*** G: GRAPHICS PRINTER ***990,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,1H}4,15r;@,9@",/-@"3"<68,-@ L6-A V#A` Ar( CHECKING DATA(86I}-%@(LINE:!"8B:,@AP2F%6-F:A,%F:A,$AV+C(LINE  MISSING!F<eJ}-@@@36-@:7,,&@HO6-@:7%@,,&@He6-8,$@%8,F."@*@ K} $". @@P% 6-%!A %6-&AZ  ""@@d APn F:A,@APxL}"@g+("INSERT DISK WITH DOS, PRESS RETURN8;@,<g@@ D:AUTORUN.SYSM(M}( WRITING FILE#6-@/6-A 9#AC AM @@(BAD DATA: LINE ddFFFFD025F52520FFFFA5N}0A8D8B29A50B8D8C29A50C8DD1258D8D29A50D8DD2258D8E29A9D0850CA925850D60E2,546dd02E302D325D3258A29A200BD1A03F005E8E8E8D0F6A94O}79D1A03A9019D1B03A9269D1C03A910850AA926850BA9,253ddFC8DE702A92E8DE802601C2687269E269F269C26CD274C9D26A203BD8B29950ACA10F8P}6C0A00088A4A4A4A4AA8,793dd883004C0079004A086D057A621CA8EA929BDDF2999D829A52BC9FFD002A900C903B004AABDE3298DF729A522C9,416Q}dd40D017A52AC902B004A91CD00AC903B004A90ED002A9018DF4292036298DAB29A20ABDED299DC003CA10F72041,122dd293005201029A0012860R}203629A91B8DC003A9408DC103A99B8DC203204129A00160088EA52948A207B5D49D9B,190$dd29CA10F8ADA32985D4ADA42985D568ACAB29F013C040DS}016A52B8DA829A9B885D6A92985D7D038C99BD0034C5D,192.dd27A0008CA82984D70A6EA8294AACAB29D00FC920B00469409007C960B00338E920A003T}0A26D788D0FA85D6ADF4,4118dd0205D785D7A0078CA629B1D6ACA829F00249FFA0074A48B1D46A91D4688810F5CEA629ACA62910E2A007B1D4C9,294U}Bdd9BD004A99791D48810F318A5D469088DA32985D49005EEA429E6D4EEFA29AEA929F06BADFA29DDE629D063A000,654LddA99B91D48CAA29A2030EV}FA292EFB29CAD0F7ADAB29C940D004A94CD00CADA5294A4A4A4AAACABDD8298DF929A9,571VddF885DAA92985DB203629A8B1DA99C003C99BD0058DAA2W}9F010C8C028D0ED18A5DA692885DA9002E6DB204129AD,633`ddAA29F0D6201029A207BD9B2995D4CA10F828A001608EA529201D26C001D051A9048DA9X}29A55885D88DB2298DB0,797jdd29A55985D98DB3298DB129A5228DAB29C940F032C911B004A918D002E9108DAD29A9008DAC29ACAC29B1D8AEA5,314Y}tdd2920A026EEAC29ADAC29C928D0EB204F29CEAD29D0DE4C8826A52AC902900DC903B004A905D002A9068DA929A5,384~dd21C903900B8DB729A2A0Z}A000A930D00BA9008DB729A240A001A9188EB4298CB5298DB629A9008DAE29A9008DAF,272dd29ADB22985D8ADB32985D9A200A000B1D89DB829ACB72[}9F0039DB929204F29E8C0039001E8E008D0E4A52AC902,950cc9030205B29A207BDC0299DB829CA10F720A026A207BDC8299DB829CA10F720A026A52A\}C903D00EA207BDD0299D,47ddB829CA10F720A026EEB229D003EEB329EEAF29ADAF29C928D08D18ADB0296DB4298DB0298DB229ADB1296DB529,710]}dd8DB1298DB329EEAE29ADAE29CDB629F0034C6928A9058DF4294C8826A900AA9DFC299DFC2A9DFC2B9DFC2C9DFC,567dd2DE8D0EE8DFA298DFB29A^}9FC8DA329A9298DA42960A227A9009DC003CA10FA60A20BBD8F299D0003CA10F74C59,195ddE418A5D8692885D89002E6D960A217A9009DC029CA10FA_}A207A9078DA729BDB8294A48A42A087EC0297EC8297E,543ddD0292888D0F268CEA72910E8CA10DD608F29FB2940015780C003050028004E000000000`}0000000000000000000,793dd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,793a}dd000000000000000000004C4C4B4B08090C0026263C2850781B401B4E051B4D051B41081B000000E002E102D325,638D:G.BAS00000,793r-d(X; ==================================nX;x%X; A GRAPHICS PRINTING DEVICE'X; G: FOR EPSON OR GEMINI PRINTERSc}X;(X; ==================================X;X;!X; (c) 1985 by CHARLES JOHNSON X; and Little Green FootballsX;d}X; G1: --- 80 Column NormalX; G2: --- 40 Column Normal$X; G3: --- 40 Column Double-Width$X; G4: --- 60 Column Double}e-WidthX;X; XIO 16,#1,0,0,"G:" --- X; print a GRAPHICS 0 screen.#X; Any XIO command # larger than"!X; 16 will be uf}sed as the # of, X; screen lines to print +16.6X;@X; XIO 64,#1,0,0,"G:" ---J"X; print a GRAPHICS 8 or 7+ (E)T X; screeg}n.^X;hX; Auxiliary byte 2 values:rX; (These go in ICAX2)|X;X; 0 - 8/72 in. line feedX; 1 - 9/72 in. LFX; 2 -q}GB%DOS SYSB*)DUP SYSBSAV LSTBLUBONK BASBBONK M65B>COLOR BASBFG BASB^bG M65BEHIDE BASBKALEIDO TURBLSHARK LSTBMATLOC LSTBONLINE1 ACTBONLINE2 ACTB!ONLINE3 ACTB &ONLINE5 ACTB2ONLINE6 ACTB 8ONLINE7 ACTBASQUIRAL TURB;BTURTLE BASB }ZPLOTTERLST 12/72 in. LF"X; 255 - INVERSE PRINT (XIO 64)X;"X; Any number (n) larger than 2!X; will be used as n/72 in. LFX;r}X;X; --------------X; System equatesX; --------------X; DOSVEC  DOSINI  ICDNOZ!& ICCOMZ"0 s}ICAX1Z*: ICAX2Z+D SAVMSCXN ZPOUTPX FNTPTRb SCRPTRl POINTRvX; RUNADINITAD MEt}MLO CHBASX;DDEVICHATABSPRNBUF SIOVYX;#X; -----------------------------#X; u}Make this routine RESET-proof#X; -----------------------------X; %X;  START *PILFERQDOSVEC4 PDVSAVE>v}QDOSVECHPDVSAVERQDOSINI;;Steal the DOS\PSTART;;init vectorsfPDVSAVE;;and put thempQDOSINI;;inw} my codez PSTARTPDVSAVEQ>4START;;Put addressPDOSINI;;of G: init codeQ>5START;;in DOSINIPDOSINIx}:X; INITADX; PILFERX;X; ---------------------X; Install the G: deviceX; ---------------------y}X; PILFER$X;.INSTAL$>8!SEARCHQHATABS9;;Look for theBFADDG;;end of theL2;;handler tableV2`2j HSEARCHtz}X;~ADDGQ> G;;Add G: to thePHATABS9;;device tableQ>4GDRIVERPHATABS9Q>5GDRIVERPHATABS9Q>4GDV{}EC;;Reset DOSPDOSVEC;;vectors Q>5GDVECPDOSVECQ>4PND;;Reset the MEMLOPMEMLO;;pointer Q>5PND PMEMLO|} :X;X; ----------------------(X; The table of addresses2X; ----------------------<X;FGDRIVER GOPENP}} GCLOSEZ GGETBd GPUTBn GSTATx GXIO !GINITX;"X; DOS commands go through hereX; GDVEC~}$>GDV2QDVSAVE9;;Restore DOSPDOSVEC9;;vectors0 IGDV2!@DOSVEC:;;Go to DOS!X;X; =====================}==X; THE G: HANDLER ROUTINESX; =======================X;X; ----------------"X; The OPEN routine,X; ----------}------6X;@ GOPEN6JA;;Calling IOCB #TV?;;Divide by 16^V?;;to use as indexhV?rV?|?;;Move to Y1;;-1GSETER}R;;<0 = error)>;;>6 = errorDGO2SETERR%>;;Bad IOCB # HGORTSX;GO2$ICDNOZ;;Get device #0;;Subtract }1&SPLIT;;Store itQGRNUM9;;Put gr mode inPGRTBL8;;tableQICAX2Z;;Get LF valueR>;;Inverse pic?HGO3;;No,} skipQ>;;Reset for LF&GO3R>;;>=3?0ESETLFT;;Yes, skip:>;;Move index to XDQLFNUM9;;Get preset LFN"SETLFTPL}NFEED;;Put LF in initXQICCOMZ;;Get command #bR>@;;Picture dump?lHCLP1;;No, skipvQICAX1Z;;Get widthR>;;Single} width?ENOTSNG;;No, skipQ>;;Margin at 28 HSETMGNX;NOTSNGR>;;Double width?ENOTDBL;;No, skipQ>;;M}argin at 14 HSETMGNX;NOTDBLQ>;;Margin at 1SETMGNPMARGN;;Set marginCLP1 CLPBUF;;Clear bufferPXIO?;;C}lear XIO flag $>ICLENCCODESQICODES9;;Copy init PPRNBUF9;;codes to SIO* 0;;buffer4 ICCODES> DOSIO;;Send in}it codesHGGORTS;;Error, skipR INIT\%>f GORTS8p:zX;X; -----------------X; The CLOSE routineX; -------}----------X;GCLOSE CLPBUFQ>;;Reset printerPPRNBUF;;and send oneQ>@;;line feedPPRNBUFQ>PP}RNBUF DOSIO GSTAT GINIT%> GGETB: X;$ X; ----------------. X; PUT BYTE routine8 X; ----------------B X};L GPUTB6V &XSAVE` 5j $>t GP1QZPOUTP9;;Save zero page~ PZPSAVE9;;locations 0 IGP1 QOUTPTR;;Set zero page} PZPOUTP;;pointer to QOUTPTR;;gr buffer PZPOUTP 7 %XIO?;;Is this XIO? FGP1.2;;No, skip )>@;;Gr 8 du}mp? HGP2;;No, skip QICAX2Z;;Set inverse PINVERS;;flag Q>4GRBUF;;Set pointer to PFNTPTR;;graphics buffer Q>5}GRBUF( PFNTPTR2 HBYTE1< X;F GP1.2R>;;End of line?P HGP2;;No, skipZ !DOPRINT;;Go print it!d X;n GP2%>x '}INVERS 'FNTPTR T?;;Clear inverse WINVERS;;bit and save V? %XIO? HCONVERT R> ;;Convert from ECK2;;AT}ASCII to O>@;;internal code DCONVERT CK2R>` ECONVERT ; S>  X; CONVERT%>" GETINDEXT?;;Get index int}o, UFNTPTR;;char set table6 1@ HGETINDEXJ X;T PFNTPTR;;Set pointer to^ QCHBAS;;char storageh LFNTPTRr PFN}TPTR| X; BYTE1%>;;Eight bytes 'BYTCNT;;per character "BYTELOOPQ@FNTPTR7;;Get a byte %INVERS;;Inverse char?} FB2;;No, skip N>;;Reverse bits B2%>;;8 bits per byte BITLOOPV?;;Bit to carry 5;;Save byte Q@ZPOUTP7;;Roll} bit W?;;sideways into P@ZPOUTP7;;each byte 7;;Restore byte 1;;Next bit IBITLOOP X;& "BYTCNT;;Count bytes0 %}BYTCNT;;More?: IBYTELOOP;;Yes, go backD X;N %>X CKRETQ@ZPOUTP7b R>;;Check for EOLsl HNOTRET;;in outputv Q>;};Replace P@ZPOUTP7 NOTRET1 ICKRET X; , QZPOUTP;;Increment ptr O>;;to print buffer POUTPTR;;by 8 bytes} PZPOUTP DSKIP #OUTPTR #ZPOUTP SKIP#OUTCNT;;Count chars $SPLIT;;Is this 80-col? FEXIT;;Yes, exit Q}OUTCNT;;Have we done RSPVAL9;;one line?* HEXIT;;No, more bytes4 X;> DOPRINT%>;;Put EOL at endH Q>;;of print buff}erR P@ZPOUTP7\ 'DONE;;Clear done flagf $>p !MULT8TOUTCNT;;Multiply the #z UOUTCNT;;of characters 0;;by 8 to g}et the HMULT8;;# of gr bytes QXIO? R>@ HNOTPIC Q>L HSETM X; NOTPICQXSAVE;;Get IOCB # V?;;Divide by }16 V? V? V?>;;Move to X0;;-1QGRTBL9;;Get gr mode$SETMPGRMODE;;Put in header.Q>4HEADER;;Set pointer8P}POINTR;;to start ofBQ>5HEADER;;header andLPPOINTR;;print bufferV!SENDEM CLPBUF;;Clear SIO buf`?jSEND2Q@POI}NTR7;;Move charstPPRNBUF8;;40 at a time~R>;;to SIO bufferHSEND3;;(or until EOL)PDONE;;Set done flagFPRNT;;}SkipX; SEND33)>( HSEND2,;;Increment zeroQPOINTR;;page pointer by O>(;;40 PPOINTR DPRNT#POINT}R PRNT DOSIO;;Send 40 bytesQDONE;;Done?FSENDEM;;No, do the rest( INIT;;Re-init2 EXIT$><EX1QZPSAVE9;};Restore zeroFPZPOUTP9;;page locationsP0ZIEX1d8n%>;;=Successfulx:X;!X; ---------------------------!X; }The XIO screen dump routine!X; ---------------------------X;GXIO&XSAVE;;Save IOCB # GOPEN;;Open G:)>;;Open} OK?HGXXIT;;No, exitQ>;;Set line length PSPLITQSAVMSC;;Set pointersPSCRPTR;;to start ofPCOLPTR;;scree}n memory PROWPTRQSAVMSC"PSCRPTR,PCOLPTR6PROWPTR@QICCOMZ;;Get command #JPXIO?;;Store itTR>}@;;Gr 8 dump?^FGR8;;Yes, go to ithR>;;Full screen?rESHORT;;No, skip|Q>;;Set 24 linesHSETLIN;;SkipX;}SHORTS>;;Subtract 16"SETLINPLINNUM;;Set # of linesX;STLINEQ>;;Clear bytePLINIX;;index PRSCRN%LINIX;;Ge}t byte fromQ@SCRPTR7;;screen mem $XSAVE GPUTB;;Send to G:#LINIX;;Inc index QLINIXR>(;;Done one line?}HPRSCRN;;No, go back NEXTLN;;Inc pointer&"LINNUM;;Count lines0HSTLINE;;Not done yet:GXXIT!GCLOSEDX;NGR8Q}ICAX1Z;;Get widthXR>;;Single?bDCKHT;;Yes, skiplR>;;Double width?vECKW2;;No, skipQ>;;Length indexHCKW3;};SkipX;CKW2Q>;;Length indexCKW3PSPLITCKHTQICDNOZR>;;>2=Dbl heightDNOT4;;Not dbl, skipPDBLHT;;}Set flag$>4(;;Set offset to%>5(;;next rowQ>0;;Set # of rows HSETG8X; NOT4Q>;;Not dbl heightP}DBLHT;;Clear flag $>4(;;Offset* %>5(4Q>;;# of rows>SETG8&ROWADDH'ROWADDR PENDROW\Q>;;Clear row} countf PROWCNTpGR8.1Q>;;Set column to 0z PCOLCNT!GR8.2QCOLPTR;;Set pointer toPSCRPTR;;screenQCOLPTR}PSCRPTR$> GET8B%>Q@SCRPTR7;;Move bytesPGRBUF9;;to buffer%DBLHT;;Double height?FGET8.1;;No, sk}ipPGRBUF9;;Double it!GET8.1 NEXTLN;;Inc pointer2)>;;Double height?DGET8.2;;No, skip2$GET8.2(>};;Done 8 bytes?.HGET8B;;No, do the rest8QICAX1Z;;Get widthB R>;;>1?LDNOTDBW;;No, skipV EXPAND;;Expand 'em`$>}j!DBW1QWIDBUF9;;These sectionstPGRBUF9;;copy the wide~0;;buffer to theIDBW1;;gr print buffer GPUTB;;& send }it to G:$>DBW2QWIDBUF9 PGRBUF90 IDBW2 GPUTB QICAX1ZR> HNOTDB2$>DBW3QWIDBUF9}  PGRBUF90 IDBW3(NOTDBW GPUTB;;Send to G:2#NOTDB2#COLPTR;;Move pointer to<HGR8.3;;next columnF#COLPTR}P GR8.3#COLCNT;;Count columnsZ QCOLCNTdR>(;;Done 40?nHGR8.2;;No. Do the restx,QROWPTR;;Set row pointerOR}OWADD;;to the next row PROWPTRPCOLPTR;;Also store hereQROWPTROROWADDPROWPTRPCOLPTR#ROW}CNT;;Count rows QROWCNTRENDROW;;Done all?FGR8XIT;;Yes, skip !GR8.1X;GR8XITQ>;;Reset margin PMARGN"} !GCLOSE,X;6X; -----------@X; SubroutinesJX; -----------TX;^INITQ>;;Clear theh>;;output bufferrCLRBUFPO}UTBUF9|POUTBUF9POUTBUF9POUTBUF9POUTBUF92 HCLRBUFPOUTCNT;;Clear characterPOUTCNT};;counterQ>4OUTBUF;;Set pointerPOUTPTR;;to buffer start Q>5OUTBUFPOUTPTR:X;CLPBUF$>';;Clear th}e SIOQ>;;print bufferCLP2PPRNBUF9&00 ICLP2::DX;N DOSIO$> XCOPYQPRNCOM9;;Copy printbPDDEVIC9;;comm}ands tol 0;;the DCBv ICOPY !SIOVX;NEXTLN,;;Increment scrnQSCRPTR;;pointer by oneO>(;;line; 40 bytes P}SCRPTR DNLN2#SCRPTR NLN2:X;EXPAND$>;;Clear the wideQ>;;bufferCLWBUFPWIDBUF90  ICLWBUF}$>;;Expand 8 bytes EXP1Q>;;7 bits per byte* PBITCNT4QGRBUF9;;Get byte>EXP2V?;;Shift bitH5;;Save byteR%ICA}X1Z;;Get width\EXP36;;Save status regfWWIDBUF9;;Roll carrypWWIDBUF9;;thru 3 byteszWWIDBUF98;;Restore sta}tus1;;Width countHEXP3;;Not done7;;Restore byte"BITCNT;;Count bitsIEXP2;;Not done yet0;;Count bytesI}EXP1;;Not done yet! :;;DONE!!!X;X; ------------------X; Miscellaneous dataX; ------------------X;DVSAVE};;DOS vectorsPRNCOM @;;Printer$ ;;Device number. W;;Write8 ;;OutputB PRNBUF;;Buffer addressL ;;Timeo}utV (;;Buffer length` N;;Normal printj ;;UnusedtZPSAVE ===~OUTPTR ;;Ptr to bufferXSAVE ;;Call}ing IOCB #BYTCNT ;;Byte counterBITCNT ;;Bit counterINVERS ;;Inverse flagSPLIT ;;Length indexDONE };;Line done flagXIO? ;;XIO flagLINIX ;;Screen indexLINNUM ;;# of linesROWCNT ;;Row counterCOLCN}T ;;Column counterROWPTR ;;Row pointerCOLPTR ;;Column pointer ROWADD ;;Offset to rowENDROW ;;# of ro}wsDBLHT ;;Dbl height flag(!GRBUF =======2"WIDBUF =======< ===FGRTBL }======PGRNUM L=L=K=KZLFNUM = = dSPVAL =&=&=<=(=P=xnICODES =@;;Init printerx =}N=;;Skip perf =MMARGN ;;Left margin =ALNFEED ;;LF (n/72 in.)X;ICLEN ICODESX; HEADER}  GRMODE  OUTCNT X;OUTBUF;;Print bufferX; PND X; RUNAD" INSTAL,ODESX; HEADERju""NN1FILL2LENFILLANN5N1N1N5377N1NCN3CN25N25N70N70N71NN70N70SCN8N8MSTRN4TTN3M!}ATCGNNN1N1NG2N1ROTN65N65BSCORTRYCNN71N1NN1N2N76XADDYADDPPMPLN6N10N20TSCORMIN360SEN6TES!}CORN3N10N25N30PMMOVPLRDLISCHRSELO !} !} !"#$%&'(!})*+,-./012345678!}9:;@<=@>?@ABCDEFGH!}IJKLMNOPQRSTUVW!} +--------------------++ HIDE AND SEEK ++ BY +(+ GREG PECK +2+-------!}-------------+<+ COPYRIGHT (C) 1985 +F+ ANALOG COMPUTING +P+--------------------+Zd A `n# -!}6-C:,!#6-C:,x6-?:, 2!}&6-?:<<<<<<,,H"6APR& 6-&"&( @@\ "( @ f " '!} Ap# ( # A zF2A%*( 2-6 @2F6-T:,!}A M (( .G( SELECT LEVEL - M6-3 #( PRESS BUTTON 3(T!}:,A 0 (R:,$6-%*"06-2 #( PRESS BUTTON 2T:,A 0% (}6-!}6-6-% A """""!}AF:,&@ +)6-F:,&A(/!5AB7tCC;,;@T,;,;,;,;,;,;!},;,;@X,W6. #6-C:,/AR5;W6-F:A`,%F:Aa,$?%@h!}-#%%' 3A?AYG -%@%% +@46-C:,G( READING DATA$+@"!}-"'67,.>:,+ .1@V-@T!"-67,.>:,1 8% -"!67,.>:,% B1!}@x-@X!"-67,.>:,1 L1AF-@W!"-67,.>:,1 V1AX-@X!"!}-67,.>:,1 `JAx-"'67,.>:,+ 66-F:,%BBByJ6-$j(9,9,-"$68,-!}( t( -"68,- (A~cAY@F!B2w-B2V9B2W?EQA#!}]6-Ac6-$$6-?:<<<<A<@p<,J6-F:,%.6-?:C:,<BsD<$<A$,:AVJ6-$%Av!}7 -%@ %-3%Ap7 -@#% ? 6-$%-)%A!}- 5%?@= ,///!/)6.0467,.0=67,.V (} AV6.>!}216,104,104,104,133,213,104,24,105,2,133,206,104,133,205AA104,133,204,104,133,203,104,104,133,208,104,104,133,209,104>!}>104,24,101,209,133,207,166,213,240,16,165,205,24,105,128;;133,205,165,206,105,0,133,206,202,208,240,160,0,162,0CC19"}6,209,144,19,196,207,176,15,132,212,138,168,177,203,164,212CC145,205,232,169,0,240,4,169,0,145,205,200,192,128,208,224,16"}6213,165,208,157,0,208,96 MOV$AA104,104,133,205,104,133,204,104,133,207,104,133,206,104,133BB209,104,133,2"}08,166,209,240,16,160,0,177,204,145,206,136,208CC249,230,205,230,207,202,208,242,164,208,136,192,255,240,7,177204,1"}45,206,24,144,244,96 MSTR$@@104,104,133,205,104,133,204,104,133,207,104,133,206,169,60<<133,208,162,0,160,0,177,"}204,145,206,200,196,208,240,27";;232,224,30,240,3,24,144,239,216,165,206,24,105,10,133,<<206,165,207,105,0,133,207,162,"}0,24,144,220,192,240,2406<<37,165,204,24,105,60,133,204,165,205,105,0,133,205,169@CC240,133,208,160,0,165,206,24,105,70"},133,206,165,207,105,0,133J207,162,0,24,144,179,96,0T FILL$^==104,104,133,204,104,133,203,160,255,173,10,210,41,1"},240hBB5,169,98,24,144,2,169,97,200,145,203,192,255,208,235,166,204rBB232,134,204,173,10,210,41,1,240,5,169,98,24,144,2"},169,97,200|!!145,203,192,44,208,235,96,0 FILL2$==104,104,133,204,104,133,203,160,255,173,10,210,41,3,240BB5," }169,98,24,144,2,169,97,200,145,203,192,255,208,235,166,204BB232,134,204,173,10,210,41,3,240,5,169,98,24,144,2,169,97,200" }145,203,192,44,208,235,96 ROT$DD104,104,133,204,104,133,203,104,133,206,104,133,205,169,12,133DD207,169,255" },133,208,162,12,216,165,207,168,177,203,230,208,164EE208,145,205,138,201,4,48,6,233,4,170,24,144,236,230,207,166,207 " }224,16,240,3,24,144,223,96 PLR$AA252,252,132,132,132,132,132,132,132,132,132,132,132,132,132132,132,132,252,2" }52STICK DATA4,4,4,0,-4,-4,-4,0,0,0,04,-4,0,0,4,-4,0,0,4,-4,0 D2:HIDE.BAS,132132,132,132,252,2 bACCYGRHC=RND4 S=RND60 C=C-1 COLCTTO0D=RND5D=D-1F=D*10+100REPB6PNUSET240,-500TRN60FORSPND GTOF&}$ELPB&TSTZ>Y(IFTGTO46*Z=Z+1,GTO8.ENDdTRN-30eREPA3fFORSgTRN120hELPAiTRN30jGTO36nTRN-45oREPA4pFORSqTRN90rELPA&}sTRN45tGTO36xTRN-67.5yREPA8zE=S/2{FORE|TRN45}ELPA~TRN67.5GTO36TRN-18REPA5FORSTRN144ELPATRN18GTO36T&}RN-60FORSTRN60FORSTRN120FORSTRN-60FORSTRN120FORSTRN60FORSTRN120GTO36TRN144ELPATRN18GTO36T$_600 POSITION K0,K0:? #6;"PRINCIPAL APR # PAYMENT TOTAL INT":RETURN 2005 POSITION K0,LINE:PIC$=" .00":NU=P:GOSUB *}1003020 LINE=LINE+1:POSITION K0,LINE:? #6;"PAYOFF AMOUNT FOR ABOVE IS ";FRM$5035 IF TEXT$(8,8)=" " THEN 5100":NU=P:GOSUB (p500 DIM MATLOC(4,6):REM MATLOC stands for MATrix LOCation.510 X=0:Y=0:VALUE=0:REM VALUE will equal the value of the number i.}n the "box".520 IF X>4 THEN X=0:Y=Y+1:REM If column number is >4 then reset column number to 0 and increase row value by one.}.530 IF Y>6 THEN RETURN :REM RETURN to original program from subroutine, that is.540 IF VALUE>30 THEN VALUE=-1:REM When it .}gets to the 30th room, set the left over matrix "boxes" to -1.550 MATLOC(X,Y)=VALUE560 X=X+1:IF VALUE<>-1 THEN VALUE=VALUE+.}1570 GOTO 520h room, set the left over matrix "boxes" to -1.550 MATLOC(X,Y)=VALUE560 X=X+1:IF VALUE<>-1 THEN VALUE=VALUE+,MODULE ;Example 1SET $B5 = $1BFC ;(compile to $4000, ;from LOMEM of $2404)BYTE i, j, k ;some variable definitions2}SET $B5 = 0SET $B6 = 0 ;account for bug ;involving TYPE statementsTYPE DISK = [ CARD sector BYTE pos ]SET $B2}5 = $1BFC ;return offset to what ;it used to be;... statementsTYPE DISK = [ CARD sector BYTE pos ]SET $B0FMODULE ; Example 2; This is my global variable fileSET $B5 = $1BFC; so program compiles to $4000 from; $2404 LOMEM. Not6}e: your system; probably has a different address; for LOMEM than mine. The value for; LOMEM will differ depending on what6}; DOS you're using, how many drives; and file buffers you have allocated,; etc. Do a ?$491 at the monitor; with an emp6}ty edit buffer to find; your LOMEM, and subtract it from; $4000 to get the proper SET value; for your computer.BYTE tw6 }o = [2], three = [3], four = [4]M, and subtract it from; $4000 to get the proper SET value; for your computer.BYTE tw4"MODULE ; Example 3SET $B5 = $1BFF; Note that this value is $4003 (the; address of the byte following the; first module:"}) minus $2404, my LOMEM; address. Again, as in Example 2,; adjust your values accordingly.; First off, we have to tell t:#}his; module where our globals are:BYTE two = $4000, three = $4001, four = $4002; Now, for this module's code:PROC :$}Main()BYTE i, j, k i = two + three j = three + four k = two + three + four PrintF("i=%U, j=%U, k=%U%E", :%}i, j, k)RETURNj, k i = two + three j = three + four k = two + three + four PrintF("i=%U, j=%U, k=%U%E", 8MODULE ; Action! version of Example 5; First, let's define the PROC's; to be called:PROC Print1=*() PrintE("Number 1>'}")RETURNPROC Print2=*() PrintE("Number 2")RETURNPROC Print3=*() PrintE("Number 3")RETURN; Next, we define a dumm>(}y PROC which; holds the addresses of the PROC's; we want to execute:;; (We can't define these in a; CARD ARRAY because t>)}hey're NOT; constants and Action! would choke; on them.)PROC dummy=*() [ Print1 Print2 Print3 ]; Now, a MODULE state>*}ment because; we have to declare a variable:MODULE ; for CARD ARRAY declaration; This declares a CARD ARRAY that; poin>+}ts (suprize!) to "dummy"CARD ARRAY ptrary = dummy; This routine does a JMP indirect;to the address passed to it:PRO>,}C Indirect=*(CARD address) [ ; ("address" is passed in the A and ; X registers) $85 $AE ;STA $AE save low byte >-} $86 $AF ;STX $AF save high byte; NOTE! To change this to emulate; ON x GOTO rather than; ON x GOSUB, add this l>.}ine here:; $68 $68 ;PLA/PLA pull off ; return address $6C $AE $00 ] ;JMP ($AE); jump indirect>/} to routine, which; RTS's itself to the calling PROC; Now, our version of the; C "main" function:PROC main()BYTE i >0} FOR i = 0 TO 2 DO ; Fetch address of routine to ; call ( ptrary(i) ) and execute ; it (via "Indirect" PROC) >1}Indirect(ptrary(i)) ODRETURNdress of routine to ; call ( ptrary(i) ) and execute ; it (via "Indirect" PROC) <!MODULE ; Example 6; Declare our individual arrays:BYTE ARRAY one() = [ 1, 2, 3 ], two() = [ 4, 5, 6 ], three(B3}) = [ 7, 8, 9 ]; Declare a dummy PROC with the; addresses of the BYTE ARRAYs:PROC dummy=*() [ one two three ]; MODULE B4}statement because we're; declaring a variable:CARD ARRAY ary_of_arys = dummy; Now, our main procedure, which; illustrB5}ates how to access our; doubly subscripted arrays:PROC main()BYTE i, jBYTE ARRAY bary ; loop for first subscript: FB6}OR i = 0 TO 2 DO ; fetch address of array: bary = ary_of_arys(i) ; loop for second subscript: FOR j = 0 TO B7}2 DO PrintF("Array(%U)(%U) = %U%E", i, j, bary(j)) OD PutE() ODRETURNript: FOR j = 0 TO @fMODULE ; Example 7; This subroutine prints out an; English explanation for the user; when a system error occurs (Only;F9} errors 128 through 144 are given; for space reasons)DEFINE LASTERR = "144"CHAR ARRAY s128() = "BREAK key abort", s1F:}29() = "IOCB already open", s130() = "Nonexistent device", s131() = "IOCB Write only", s132() = "Illegal handler commanF;}d", s133() = "IOCB not Open", s134() = "Illegal IOCB number", s135() = "IOCB Read only", s136() = "End of file", s1F<}37() = "Truncated record", s138() = "Device timeout", s139() = "Device NAK", s140() = "Serial frame error", s141() = F=}"Cursor out of range", s142() = "Serial bus overrun", s143() = "Checksum error", s144() = "Device done error", generiF>}c() = "Error %U!%E"PROC dummy=*() [ s128 s129 s130 s131 s132 s133 s134 s135 s136 s137 s138 s139 s140 s141 s142 s143 sF?}144 ]MODULE ; for variable declarationCARD ARRAY errstrs = dummyPROC PrintError(BYTE errnum) IF errnum > 128 THENF@} IF errnum > LASTERR THEN PrintF(generic, errnum) ELSE PrintE(errstrs(errnum - 128)) FI FIRETURND| GRHCOL2SET240,-500PNDREPA90FORSTRN89S=S+2 ELPAE PrintE(errstrs(errnum - 128)) FI FIRETURNHBVdxBEEPROMPCBELKKKKK2K4K6PROGLINEDATNOABCACDKEXTTROSANGLPRLONYXLINLTNC}ACTNENTVST ND} @@@NE} !"#$%&'()*+NF},-./0123456789 TURTLE 1NG}020 By Jason LeighA"A1080,90,155,253,1,2,3,4,27,40,65(1;A,6.>:,(67ANH},.167,.2\\;AU,;AU,;,9@&,9@&,9@&,;,;@9,;A(,<$ 6.>:,67@9NI},.$67,.F0-@&68,-#68,-,68,-0 P!(>:A%, TURTLE 1020!(ZV 6- A@NJ}=(>:@0,>:,>:@1,I@V@d (B:, n3 B:,"6-@:,3!@G* @XA@NK}x2 A@B:,"$6-8@:,&,.(=2 4DELA4CAT)4DIRA# 4TON6-6-@NL}4#  4TOF6-6-  4NEW%4MEMAP4LOADA@4SAVE6- A@NM}* 6-@:,*!@G* @XA04RUNAP&7<,4LIS6-" A`& I7<,4LIP NN}A !5@P:;6-E A`I @ 4SEE<(X=P:, Y=P:, COLOR= ANGLE=@  6.NO}6.7<, A  4REM I 4TXT&@P:0(7,E(>:,>:@,I " 4PFNNP}(7, ,& 4GRH"(>:,>:@,& 67<,4=A @< A @4COL#6-A:7,,- A 8(NQ}C< J 4PND6- T 4PNU6- ^D A 4HME#6-A@)6-/6-@(M,D hNR}4SETA r) A P4TRN%6-%A:7,,) |' A `4TTO#6-A:7,,'  A p4BACANS}0 A 4FORA= A 4GTO6-' A96-+A:7,,&,$= H 4REP6-+@:7,,&NT},268,-A:7@,,;68,-D68,-H D 4ELP6-+@:7,,&,+68,-8,%78, 8,@6-8,D  4ELPNU} 0 A 4ORG6-#6-,(H0 > 4CLR-@&$68,--68,-668,-: > 4TNV}STAp4IFFAP4IFTA 4END6- ^ AP4ACC)AY@476-@:7NW},,&;E A@N68,-ZAY^ $(>:, Command error$ A * (>:,Illegal line number* A NX}'(>:,Illegal variable' A &9F:A,"@/(>:, Illegal input9 A 0-  (6-B:,!-6-NY}+A:7,,&,$: 6-%@:7,,AD A!Ay`)! $N ApXO(' !-%@9-NZ}@:7,,1 E(7<%@9,O Ab(7<&, Al(>:, Printer error v6-A:7,,& A N[}6-E:,$&6-G:,$(D&,&((M&,& 6-&6-& 6-A:7,,N\}& A 6-E:,$&6-G:,$(D%,%((M%,% 6-%6-% B:N]}, AP-B:,!@9)(>:, Line too long-  6-B:,67%,.>:,1 -6-@:7,,-!@G* @XN^}1 6-A:7<,,6- 4!A) 0(>:,Illegal line number4 67$<$%@9,.    *'N_}@:7,,"@26-%' A4B:,& A >+67$<$%&%,.7,#$!+6-$H R2 A N`}&@P:2AY\Z 6-6-6-6-!6-/-@&868,-A68,-J68,-N T6-Z6-f6Na} A06.6-"6-%6@:7,,A p!Ay`)!6- z ApI-%@9@:7,,'Nb}6-%567<,.7,;6-? I A  6- A  A('  A`- A 6-8Nc}@:7,,&,)(C- $ A  6-%8@:7,,&,$ " A 6-8@:7,,&," ( A 6-8@:7,,&,Nd}( A@( A 6-8@:7,,&,( A) 6-6-@:7,,&)* A@-B:,7<,0, Ne} 6-%6-A:7<&,,#6-@:7,,&#* AP6-A:7,, A`" 6-8,6-@" A  6Nf}-8,$" A "(D,.((M,8;!A`) 6A`+6-P:'A`,;6-&$A`BNg}AL((OkayAR VC-@6*2A@@. @AY@4C$`* A0Nh}*7<@,4RNDAPj6-@:,&6-t A@~% 6- A6-6-%6-' 6-% ANi}6-!6-'6-6.7<, AP 4+6-% A` 4-6-& A` 4/6-' ANj}` 4*6-$ A` 4^6-# A`!(>:,Illegal function! (>:,Overflow Nk} 6-6-68,-  A` - A6-@:7,,&-* A`P 6-6.7<,"4-)4+*Nl}6-%06->6-@:7,,&P* A`D 6--B:, 6-@:7,,@"@F)!@G* @YD (6-Nm}&6-26-A:7<&,,6-< B:,6-F$P' 6-*4-6-68,' AZ 6-8,d 6-%6-Nn}& A@n 6- Apx>F:Ad,AU*AdAU4(Break> A AdAU$No}( at line #'6- &(Enter Filename->&@& AP6-& Ap6-Np} ))4 )(0(>:,Not a TURTLE 1020 file4  )6-$ ) )"AUA@Nq}!67$%<$%,.>:,!6-% A 6- A<F:A,A6(<(>:, I/O error # F:ANr}, " @6- 6-, **6 *'@ 6-%@:7,,A0J"!Ay`)!Ns}@" T A^I *'-%@9(@:7,,5*@:7,,;6-? I Ah$ 6-*AU$Nt} Ar- 6--A%@:7,,"-6-%| ( LINES FREE $ A 6-@:7,,&$6-8,;6Nu}-@:7@,,&(!6* @&16-8,; A6-A:7@,,6-@:7@,,6-"@`6- Nv} "@b6-! "@a*"6-   A 6- "7<,4 6-%" A`Nw} 6.6.7, A` A 6-( "7<,4 6-%" A 6.6.7, A`Nx}(( DISK CATALOG(3 AP)@D:*.*3 A@& ( A00 ( : A DNy}46-@:7@,,&!* *6-8,4 AN6-A:7@,,X%6-@:,&!68,-P:H:,$,%% b$6-@:7,,&Nz} 6-+8,&,$$ l6(DELETE FROM LINE #->!2( TO LINE #->6v% !(>:,Illegal values% )!AN{}) 6-6-) A-)( DELETE LINE  TO  (Y/N)-'7<,4Y(DELETING' A` '-N|}$$67<,.>:,# '  D:TURTLE.BASTO  (Y/N)-'7<,4Y(DELETING' A` '-L4208 IF PEEK(764)=28 THEN ? "}":GOTO 1046300 CLOSE #K1:OPEN #K1,8,K0,"P:":PRINT #1,CHR$(14);CHR$(27);CHR$(62):PRINT #1;CHR$(2R~}7);"T08"301 REM *CHR$(14) TURNS ON EXPANDED MODE AND WILL MAKE Z-AXIS TWICE AS LONG WITHOUT CHANGE TO X OR Y302 FOR X=DM TOR} DM+39304 A$=CHR$(K0):A$(192)=A$:A$(2)=A$:B$=A$306 W=USR(1536,X,ADR(A$),ADR(B$))308 PRINT #1;CHR$(27);"S0192";A$310 PRINTR} #1;CHR$(27);"S0192";B$312 NEXT X:PRINT #1;CHR$(27);CHR$(60);CHR$(27);"A";CHR$(15)314 CLOSE #1316 RETURN 1000 K1=1:GRAPHIR}CS 24:RESTORE 1000:FOR Z=K0 TO 137:READ X:POKE 1536+Z,X:NEXT Z1001 DIM A$(192),B$(192):DM=PEEK(88)+PEEK(89)*256:DM=DM+40*191R}1002 T=K0:DIM Z$(169),Q$(40),F$(20),FC$(40):ISO=0.5235987751046 POKE 82,K0:GRAPHICS K0:? :? 1048 ? "MAKE SELECTION TO USE R}SAME FORMULA OR NEW FORMULA."1050 ? :? " 1] SAME FORMULA":? " 2] NEW FORMULA"1052 ? "ENTER SELECTION >";:INPUT T1R}054 IF T=2 THEN 10081056 IF T<>1 THEN ? "WHOOPS":GOTO 10521058 ? "}":GOTO 10131100 DATA 104,104,141,35,6,141,54,6,104,141,R}34,6,141,53,6,104,141,46,6,104,141,45,6,104,141,64,6,104,141,631102 DATA 6,160,192,173,255,255,136,240,70,41,240,32,110,6,14R}1,255,255,238,45,6,240,45,173,255,255,10,10,101104 DATA 10,32,110,6,141,255,255,238,63,6,240,33,173,34,6,56,233,40,141,34,6,R}141,53,6,144,4,24,76,33,6,2061106 DATA 35,6,206,54,6,76,33,6,238,46,6,76,52,6,238,64,6,76,70,6,96,24,162,0,134,203,10,102,20R}3,10,102,2031110 DATA 10,102,203,10,102,203,70,203,70,203,70,203,70,203,165,203,964,6,76,70,6,96,24,162,0,134,203,10,102,20PT