@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 ALLOWED160 FREE SECTORS COPYING---D2:DLIR4}OUT.STR# 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- 138ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D41uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D41uVVHIBYTLOBYTPLRHPLRVPLRRATEPMWIDTHFRMLSTPTRMOVERATECLSEGTEMPHICHRSPEETEMPMOVEALLINITANIMATSNV}SNDSCONVVOWALINITAUTOMOVFST2BYTMFILFLAOBJECLST2NSPSCRLSTEFRSTPLNUMPLRSPOINTERCFLACHAPAINLFENCPTHEIGHW}WIDTGRNSCRLWILINELECLOUSCRSPCFLAROOMLEFSCRNSZSTORCHIMNESHRUANTENNTREODDHOUSTRUNTREETOBDIDLSZMEOBJFRMX}DATAFRAMESFRMSIZEPLRFRMMEMFRMLSTSIZETEMPTEMPTEMPFRAMEMETOTFRMLSTSIZBUFFERFRAMEMEMFRMLSTMEMHIBASLOBASDLBASSCRNY}HSCRNLSCROLSCROLLDLIROUDLIROUTPMOVERANIMATANIMATEAUTOMOVAUTOMOVEMFILLBUFFEPLRFRAMEFRMLSTMEWINDOPMBASCHRBAOFZ}FSECHARTOTAOFFSETFRAMELISTDLITBLSZDLITABLEDLITABLPARAMBASPMBAPMBUSCRLINISCRLADSCRLLESCRLCLDLIADVVBLKCRITICA[}PPPP@@@@@@@ \}]} !"#$%@&@'()*+,-^}./0123456789:;<=_}>?@ABCDEF@G@H@I@J@KL`}MNOPQRSTUVWXYZ[\a}]^_`abcdefghijkb}l@mnopqrstuvwxyz{c}|}~ %%ŠԠŠΠ%%報(^^Prograd}m putting it all together - PM Graphics, Fine Scrolling, & Display List Interrupts288Copyright (C) 1982 by David Fox and Me}itchell Waite<F A@Pdn*6-P:'AV,*Calculate High Bytex(6-&$AVf}(Calculate Low Byte$囖RR9@,9@,9@,9@,9@,9@,9@g},&&;@$,;@$,;@,V67@,.>:,367@$,.>:,B67@,.VFill with ASCII h}0* B*Initialize Routine strings' AP'Set up memory locations# A`#Set up Display List Ai}&Clear screen" Ap"Set up Player area% A%Load in Character Set$ B$Read frames into Rj}AM0AV0Switch to Street character setgAY@GgTurn screen DMA on again, Wide Playfield, PM 2 linek} resolution, Players enabled) A( A0)Create a street* B *Set up parameter addresses"" B0l}"Turn on interrupts6G-@&8,@* GFrame rate for walking man@/6-6@/Temporary startm} up conditionJ A AT6-@^6-?:<,h r A|5#@@K:5n}ATAU36-O:F:Ad,&A(,+6-'@36-%K6-+A(&,'@ o}52@@K2@@+!!6-&+@,+ Ap-" 6-?:<,-6p}-6@hF:A,"@:2@@@\2hFootstepsA+F:Aq}b,!A)F:Ab, @ 5 APAReset ManK+F:Ad,!A))F:Ae, @5 AKReset other plar}yers F:AT,"AUAH)@6-&@H0ATAU< H6- A s} AXb(6-P:,"(6-@lK6-&?P+2@@At}2@@K A vX'6-?:<8@,<AV<,XUse memory fill routine to clear Players 2 & 3M%6u}-P:H:@,$@%@,MWhich object to display (if possible)(6-(No object selected yetF7Av}AAAAAC"F$6-?:<, 6"@w}%6-A(&$@/ A@6Tree/"@6-A%&' A@/Truck6-A2&Car'8@x},!8@,'6-D8,A)&18@,A)&>"6@D6-   $y}ӠҠӛ \%A@$@%@GA@$@%@\Set color to z}peachB6-6-@% ABPoint to proper Frame List-8,@-8@,@"{}@Ap$c8,@ -8@,@(9!@N8,Ac8@,A&.%%6-P:H:|}@,$A%@ ,8$BL V"$`f%A@$@%@GA@$@}}%@fBrown trunk and green leavesj-8@,A)-8@,At-8@,@B-8@,~}@(~d6-@6-@% A16-@=6-@G AdPoint to proper Frame List-8@,}-8@,@6-$ 뛺U%A@$@%@UAP:H:@,}$@,$@%@-8@,A-8@,A3-8@,@w-8@,@wB6-@}6-@% ABPoint to proper Frame List-8@,@-8@,@6-@6-A}$ "@$(o6-P:H:@,$@,G6-@&P:H:@,$@,$@W6-$@}%cAoA2-8@,-8@,@<9!@$8@,A98@,A}2F-8@,@-8@,@PB6-@6-@% ABPoint to proper Frame ListZ-8}@,@-8@,@d6-@6-@@n$x++}-8,&@6-8<, A8%,8%,%@ $"l}v6-)!A'6-&A()6-A(7 @6-&@2) 76-%@6}-%%$@d$) 6-B:, @$)67%@,.6-%@-} A"-@  6-$%6-@:7<,, A +!%@$%%@#+ A!0*}"A! 4"@6-%@d>)%%$@$%&@) A!0H%%$%&@R \} f6-%%O:,%p6-z6-&@%&$团 @A"@j"@}6-@:Q,$ A16-6@; A"PF6-@:E,P AV6-` A"Pj A"@T6-@:A, A%6-6@}/ A"P:6-@:D,D AJ6-T A"P$%%$%$` $$}j -@t -@$~ ""%$%&@%%F:%$%,     $ ( //}蠰2 6-?:<<<,< $F  R6.Խ}Խ$6-@06-@<6-@H6-@R A  D6. Խ 6-@.6-%@:6-@}D A  P"6..6-@:6-F6-@$P A  $"   Š}ٛ͠ 56-5Initialize Pointer to Scroll Window (6-@(How tall is the window 6-6-} 0%6-P:H:@,$@%@,0From 2-4 F H:@,$A@E,6-@6 A0F45% 2 Stories} F H:@,$@U@5,6-@6 A0F35% 3 Stories 6-@20% 4 Stories )6-+H:@,?`},)60% chance H"(6-+H:@,?@,H40% chance (only if no shrub) > @6->Not eno}ugh room left for a fence& )6-+H:@,?P,)50% chance0 36-+H:@,?P,350% yellow, 50% pink: 7 6.}-&@A5A7A97 A D = @ A$$=No room for tree, exit routineN }X 6-6-b H#"*"*!@<6-+H:@,?0,HA4@l v} 6-@6. Find height of tree < H:@,$@@,6-@6 A2`<10% < H:@,$@ }@,6-@6 A2`<20% < H:@,$@@,6-@6 A2`<40% < H:@,$@}@,6-@6 A2`<20% 6-@10% A)6-P:H:@,$+&@,%@,5"@A6- 1 }6-&!@%6-&@16-@ ##6-+@&,$@%@ 67,. "@A3@ -}@&@ 6-%@67,.tt   6-%@67,. "@A3 -@&@}* 6-%@67,.BV4  > ,H:@,?P,67%@,.KLH ((Add random spacing on side of tree}R C%6-P:H:@,$@%@,C"@) @A4p\ '"@6-%@' A4pf 6-@ }A4pp z S%6-P:H:@,$@%@,+6.7"@I67@ ,.S A4p 67@,.}  %6-6-% A  I @A1@IAdd another tree if not enough room for a house A0@} 蠲 !@6-@ 6-@ "@6-@ 67,.INZU A5` 67,}.IOZX 56-%@5-%+&@,$@@ .H:@,?P$67,.. A5 67,.} 67@ ,."A6@$4H:@,?P*67@,.WW4 A6@.67@,.EQ8}$Bt 蠳~##6-+@&,$@%@&* @&67&@,.`67,.ZTX,H:@,}?P"6., A7` 6.56-%@5-%+&@,$@@ 67,. 67@},.67@,.WWW$< 蠴F##6-+@&,$@%@P'"@67,.HTTJ}' A@PZ@,!@))H:@,?33A@@Which type house?dCreate Odd House typen6-@x)}67@,.INZU) A967@,.IOZX6-)67@ ,. ITTO) AACrea}te Normal House type- *#67&@,.`HJYTTJ- A@P=67&@,.HJ%"367,.HTTJ= A@P}0H:@,?P&67,.YTTJ0 A@P67,.HTTM56-%@5-%+&@,$@@0}H:@,?%&67,.0 A@67,. 67@,.67@!,.WEQW$}6-#6-@4#Display List size76-A`7Horizontal length }of scrolling window/!6-@$@$%$@/Screen size1 6-%1MEMory to reserve for DL and Screen # "}-9<@,-9,9,9,9,9,-@ " 68,-68,-68,-68,-8,$8,%}@6-%8,$8, 68,-8,%@6-%8,$8, (;A(,;,;,2'6-%@'$A}V AQp<.6-F:A,&.Find DL Hi and Lo bytesF6-P6-$AV%Z, 6-%,Starting address }of Screen RAMd 6- An- 6-6--Find Screen Hi and Lo bytesx.6-%@H.Beginning of Scroll window} 6-C:, 6-C:, 6-C:, 6-C:, 6-C:, 6-C:, 6-C:, 6-C:, 6-C:,$p}z4+@%@4Set flags to Graphics mode 2+AY+Turn off screen DMA2}A2Set up top border, 24 scan lines%@A%@A(%@@q(LMS for lin}e 1%@%@1%@@%A(1Line 2 (w/ DLI),-@,Loop for line}s 3-9 6-%$6-@LMS and HSCRLT"@)"@-6-@%A(TDLI, LMS and HSCRL for lines} 5 and 82"@6-@q2No scroll for line 9+%@%@$+LMS and HSCRL 6- A}%@%@$$%@ %@$. 8.%@(@%A(.Last 3 linesB%@)@}L%@0@%A(V;%@1@e;Jump on VBLANK to beginning of DL`%@2j%@3}t 6- A~8A8Address of DL for DLI handling routineA Tell ANTIC where the DL is}A`Aa0@@70@@@Q0@@k0@}@0@@ @Brn, grn, wht, wht, blue$X((b<6-F:A},&&@<Set aside Player-Missile areal,BBy,Tell ANTIC where PM RAM isv(6-AV$(Find PM Base }address-@968,-%A($%A9Set addresses of Players568,-B2V%5Set addresses o}f Player Widths 7A#@7Set priority - Players in front-B2w@-Enable Player display}R'6-?:<8,<A<,RUse memory fill routine to clear Players$@$$}J86-F:A,&&@8Reserve space (512 bytes)T/6-$AV/Find start of Character Set^,,Read in data, }skip first 28 charactersh#6-@($@#6-@5r #B0|"6-!!-%%%$@&@}" 6-% 6 +3  In Character Set Data6''Clear out first char (background)}-%@ $'',6-6-"9,,#B$'-}@.'68,-%8'6-%+8,%@,$8,B'-8,&@L'068<,-%0Store addresses of frame da}taV'6-%8,`'J8<,8,JPoke Frame size at beginning of each set of frame dataj'-@8,&@t'"}~'8<,%'   '$'** ŠŠӛ+̠ +;A,+}mm67@,.ZPLbحHYZ01PQNPJNQP-mF PYP +mm67@,.Z}-FMԭPmDDED8mQDEE(DDEPBCPgP*+mm67A,.ZDQDE}BmPBRCCSA))P )ȭRmRȭSmSP4+AA67Aq,..YZPFDE}BCP\+ɠ堛f+;@,p+mm67@,.ZP LbKHHH]^$%KHȱȱȌK}h ԍЎЌЭ]^hz+67@,.hh@+&&ɠ+6-@#BU+} ;,+ 6-C:,+-&@+"+ %, $,Ҡ.,;A,8,mm67@,}.ZPLb&0ߝShhhF&B,mm67@,.ZFI}T`L*H *hMNNML,67A,.LP,Š}囒,;A,,mm67@,.ZPLbآY0H PN򩀍+. 23P0ֽ:},mm67@,.Z>ɩ. %:IX.: 23>>,mm67A},.Z >PPPHȱh∱QNPmQJnRR8eeP*RR,++67Aq,.QP}..P,Š,;@t,-]]67@,.JPLbح0N G𩀍GI}&}(0 (G&0P-̠Z-;@A,d-<<67@,.)hhhhhhh̥ͥ`-}$--.!!.(6-A$(Parameter Base address.. 6-.Hi Byte of PLR0 Location} goes here.06-%@0Address of a 128 byte buffer/46-%@4Initialize Frame Animate routine/66-%@}6Initialize Player Automove routine/=6-%@=Poke a 1 to initialize the scroll routine&/-@0}/=68,-%@%=Player horizontal "shadow" registers:/;68,-%@%;Player vertical "shadow" registersD/86}8,-%@%8Animate rate "shadow" registersN/768,-%@%$@7Pointer to Frame ListsX/968,-%@2%}9Horizontal movement for AUTOMOVEb/ l//6-%@&/Address of scrolling windowv/36-%@(3Line length of }scrolling window/:6-%@0:Number of Color Clocks per screen byte/26-%@12Step size of scroll each jiffy}/(6-%@6(Address of DLI table/:6-AH:Deferred Vertical Blank Interrupt Vector/6-@fCritical F}lag/W6-@6-@'6-@36-@WControl bits for the four Players/ 6-%/ 6-%6-%%%}/D6-?:<<@<,DIMPORTANT: Clear out parameter area/H6-8, A"HPoke Hi Byte of Playe}r 0 into PMBAS/2 6- A2Poke address of buffer/%@/ 6- A0  0%@} 0 6- A*0 40%@>00@0Set to 8 color clocks per byteH0 6- AR0 \0}%@f0p0z09<@,0-@0-8,&@0=8<,-8,%}$8,=Points to start of each Frame List06-8<, A0-8<,-Put in address of Frame Data08<,%}@0C-@8,CMake up a Frame List (numbers 1 thru FRAMES)08<,%%@0 0NHN55Number of Frames, Frame Size, Number of PlayersRN. (Walking Man)\N 5,19,2fN. (Tree Trunk)pN } 1,52,1zN. (Tree Top)N 1,26,1N. (Truck)N 1,25,2N. (Car)N 1,13,2NR }RFrame 1, Player 0R770,0,0,0,0,0,0,3,15,29,59,51,7,7,15,252,224,112,48&RFrame 2, Player 00R990,0,0,0,0,0,}0,1,7,15,31,55,55,7,111,125,248,192,193:RFrame 3, Player 0DR;;0,0,0,0,0,0,3,7,15,31,31,31,31,222,254,251,231,206,15NR}Frame 4, Player 0XR==1,3,3,3,1,7,15,31,30,62,62,63,63,60,124,120,112,112,252bRFrame 5, Player 0lR::0,0,1,1,1,0,7,31},31,31,31,31,15,15,13,31,123,112,124vRFrame 1, Player 1RHH0,28,62,62,62,28,240,240,240,240,251,255,220,192,192,227,118},60,24RFrame 2, Player 1RKK0,0,56,124,124,124,56,224,224,224,224,246,254,192,128,192,224,224,248RFrame 3, Player} 1REE0,112,248,248,248,112,192,192,128,128,128,224,224,0,0,0,0,0,128RFrame 4, Player 1R55192,224,224,224,192,0,0,0},0,0,0,0,0,0,0,0,0,0,0RFrame 5, Player 1RII0,224,240,240,240,224,128,128,128,128,176,240,0,128,192,128,192,0,0R}UUPlayer 2, Tree TrunkVNN2,2,132,128,64,0,149,165,210,211,219,251,255,254,126,126,126,126,126,}126VUU126,126,126,126,126,126,126,126,126,122,126,126,126,126,126,126,126,126,126,126V55126,126,126,126,126,126,126,126},255,255,219,137"VPlayer 3, Tree Top,VQQ24,24,60,60,126,126,126,255,255,255,255,255,255,255,255,255,255,255,255,1266V}126,60,60,60,24,24@VTV^VPlayer 2, Truck CabhVBB0,0,0,0,0,15,25,17,17,17,17,17,31,31,255,2}55,255,255,255,255rV255,255,255,28,28|VPlayer 3, Truck BodyVUU255,255,255,255,255,255,255,255,255,255,255,255,255,}255,255,255,255,255,255,255V255,255,255,12,12VVVPlayer 2, Car backV..7,9,17,17,17,31},63,127,255,255,255,56,16VPlayer 3, Car frontV22192,64,32,32,16,248,255,255,255,254,255,28,8Y}Y 38646Y0,3,15,31,63,63,127,127Y##0,192,240,248,252,252,254,254Z127,127,127,63,63,31,15,7 Z%%254,254,254,25}2,252,248,240,224Z4,31,4,31,4,4,4,4Z48,48,48,63,54,54,54,54(Z3,3,3,3,3,3,3,32Z%%255,195,219,219,219,219,219,2}19}REMENT PLAYER NUMBER1480 CPX #$04 ;DONE WITH ALL 4 PLAYERS?1490 BNE LOOP ;NO, LOOP1500 LDA TEMP ;RESTORE ANIMINIT BYTE !?}TO1510 STA ANIMINIT ;WHAT IT WAS ORIGINALLY1520 INX ;SET X TO 51530 LOOP51540 .IF 1-ABASIC @NOREST1550 LDA PMSAVE,X !@};RESTORE ZERO PAGE TEMPORARIES1560 STA ZERO,X1570 DEX1580 BPL LOOP51590 NOREST1600 RTS ;BACK TO BASIC1610 ;1620 D!A}OIT1630 LDY #$7F ;MOVE PLAYER INTO TEMPORARY BUFFER1640 LOOP21650 LDA (ZERO),Y1660 STA (ONE),Y1670 DEY ;NEXT BYTE. A!B}RE WE DONE?1680 BPL LOOP2 ;NO, LOOP.1690 STX PM1 ;SAVE X-REG1700 LDA O0Y,X ;THIS GNARLED MESS OF CODE ENDS UP WITH1710!C} PHA ;THE "DESTINATION" COORDINATE IN THE1720 LDA VPLR,X ;X-REG, THE "SOURCE" Y COORDINATE IN1730 STA O0Y,X ;THE Y-REG,!D} AND MOVES THE DESTINATION1740 TAY ;Y COORDINATE INTO THE SOURCE Y1750 PLA ;COORDINATE LOCATION1760 TAX1770 STX PM2!E}1780 LOOP31790 STY PM3 ;SAVE Y-REG1800 TXA ;TRANSFER X-REG TO Y-REG1810 TAY1820 LDA (ONE),Y ;GET DATA BACK FROM BUF!F}FER1830 LDY PM3 ;RESTORE Y-REG1840 STA (ZERO),Y ;STORE DATA IN PLAYER IN NEW SPOT1850 INY ;NEXT BYTE1860 BPL OK ;DID!G} THE Y-REG HIT $80?1870 LDY #$00 ;SET IT BACK TO 0.1880 OK1890 INX1900 BPL OK2 ;DID THE X-REG HIT $80?1910 LDX #$00 !H};SET IT BACK TO 01920 OK21930 CPX PM2 ;HAVE WE COPIED ALL 128 BYTES?1940 BNE LOOP3 ;NO, COPY MORE1950 LDX PM1 ;RESTORE!I} X-REG1960 CLV ;BRANCH BACK TO 'NEXT' TO1970 BVC NEXT ;MOVE ANOTHER PLAYER1980 ;1990 .ENDPMOVER.ASM;v02.10-810713,82 b@@PLb&0ߝShhhF&FIT%K}`L*H *hMNNMLPFIT$C26000 REM 26010 DATA PMOVER,11310,186,2215726020 DATA 184,80,16,76,98,228,162,3,189,38,4,157,0,208,)M}202,16,247,48,240,162,6,181,223,157,8326030 DATA 4,202,208,248,104,104,104,133,227,165,227,133,226,172,4,4,162,0,142,4,4,70,)N}226,144,626040 DATA 189,6,4,157,38,4,232,224,4,208,241,140,4,4,162,0,134,224,173,0,4,133,225,173,126050 DATA 4,133,228,173,)O}2,4,133,229,173,3,4,133,226,142,3,4,70,227,176,30,165,224,73,128,13326060 DATA 224,208,2,230,225,232,224,4,208,237,165,226,1)P}41,3,4,232,189,84,4,149,224,202,16,248,9626070 DATA 160,127,177,224,145,228,136,16,249,142,76,4,189,42,4,72,189,10,4,157,42,)Q}4,168,104,17026080 DATA 142,77,4,140,78,4,138,168,177,228,172,78,4,145,224,200,16,2,160,0,232,16,2,162,026090 DATA 236,77,4)R},208,229,174,76,4,184,80,16526010 DATA PMOVER,11310,186,2215726020 DATA 184,80,16,76,98,228,162,3,189,38,4,157,0,208,(11310 DIM PMOVER$(186)11320 PMOVER$(1)="PLb&0ߝShhhF&-T}"11330 PMOVER$(91)="FIT`L*H *hMNNM"11340 -U}PMOVER$(181)="LP"11320 PMOVER$(1)="PLb&0ߝShhhF&,10 ; Š20 ;30 ; COPYRIGHT (C) 1982 BY DAVID FOX AND MITCHELL WAITE40 ;0100 .TITLE "CLK-ANIMATE.ASM;v01.05-810714,1W}820619"0110 .PAGE "Interrupt-driven Player Animater"0120 ;0130 ; BY COREY L. KOSAK0140 ;0150 ; B=$4000,FREL0160 ;01701X} BASE=$40000180 ;0190 *=$4000200 ;0210 ;CASBUF DATABASE EQUATES0220 ;0230 PMBAS *=*+1 ;HIBYTE OF PLAYER MISSILE AREA (1Y}LOBYTE EQUALS 0)0240 PMBUF *=*+2 ;ADDRESS OF 128 BYTE BUFFER (FOR PMOVER)0250 ANIMINIT *=*+1 ;INIT LOCATION FOR ANIMATE0261Z}0 AUTOINIT *=*+1 ;INIT LOCATION FOR AUTOMOVE0270 SCRLINIT *=*+1 ;INIT LOCATION FOR SCROLLER0280 HPLR *=*+4 ;PLAYERS 0-3 X C1[}OORDINATE (FOR PMOVER)0290 VPLR *=*+4 ;PLRS 0-3 Y COORD (FOR PMOVER)0300 RATE *=*+4 ;PLRS 0-3 RATE (FOR ANIMATE)0310 FLSTP1\}TR *=*+8 ;PLRS 0-3 FRAME LIST POINTERS (FOR ANIMATE)0320 SCRLADR *=*+2 ;SCREEN ADDRESS (FOR SCROLL)0330 SCRLLEN *=*+2 ;LINE1]} LENGTH OF SCROLLED AREA (FOR SCROLL)0340 SCRLCLK *=*+1 ;COLOR CLOCKS IN SCREEN BYTE (FOR SCROLL)0350 SCRLSTEP *=*+1 ;SCROL1^}L STEP (FOR SCROLL)0360 MOVERATE *=*+4 ;PLRS 0-3 HORIZONTAL STEP (FOR AUTOMOVE)0370 DLIADR *=*+2 ;ADDRESS OF COLOR TABLE031_}80 ;0390 ;*LOCAL* DATABASE EQUATES0400 ; THESE LOCATIONS ARE *LOCAL* TO THE ROUTINES0410 ; AND SHOULD *NOT* BE MODIFIED BY1`} THE HOST PROGRAM0420 ;0430 O0X *=*+4 ;PLRS 0-3 X COORDINATE0440 O0Y *=*+4 ;PLRS 0-3 Y COORD0450 ORATE0 *=*+4 ;PLRS 0-3 F1a}RAME CHANGE RATE0460 OADR0 *=*+8 ;PLRS 0-3 FRAME LIST ADDRESS0470 TIMR0 *=*+4 ;PLRS 0-3 COUNTDOWN TIMERS (HOW MANY JIFFIES 1b}UNTIL FRAME CHANGE)0480 POS0 *=*+4 ;PLRS 0-3 FRAME LIST POSITION0490 OSADR *=*+2 ;SCREEN ADDRESS FOR SCROLLER0500 CPOS *=*1c}+2 ;COARSE SCROLL POSITION FOR SCROLLER (0-LINELEN)0510 FPOS *=*+1 ;FINE SCROLL POSITION (0-7)0520 OXSTEP0 *=*+4 ;PLRS 0-3 1d}HORIZONTAL STEP0530 DLIPOS *=*+1 ;CURRENT POSITION IN COLOR TABLE0540 PM1 *=*+1 ;4 LOCATIONS RESERVED FOR PMOVER0550 PM2 *1e}=*+10560 PM3 *=*+10570 PM4 *=*+10580 EX1 *=*+1 ;4 LOCATIONS RESERVED FOR ANIMATE, AUTOMOVE, SCROLL, AND MFILL0590 EX2 *=*1f}+10600 EX3 *=*+10610 EX4 *=*+10620 PMSAVE *=*+5 ;ZERO PAGE SAVE AREA FOR PMOVER0630 ZSAVE *=*+4 ;ZERO PAGE SAVE AREA FOR 1g}ALL OTHER ROUTINES0640 ;0650 HPOSP0=$D0000660 XITVBV=$E4620670 ;0680 ZERO=$E00690 ONE=$E20700 ;0710 *=BASE0720 ;071q} B'DOS SYSB*+DUP SYSBUEX14 BASB MFILL ASMBMFILL OBJBMFILL DATBMFILL STRB MFILL2 ASMB,PMOVER ASMBJPMOVER OBJBLPMOVER DATBSPMOVER STRB4VANIMATE ASMBANIMATE OBJB ANIMATE DATBANIMATE STRBAUTOMOVEASMBAUTOMOVEOBJBAUTOMOVEDATBAUTOMOVESTRB5SCROLL ASMBSCROLL OBJB SCROLL DATBSCROLL STRB DLIROUT ASMB)DLIROUT OBJB*DLIROUT DATB.DLIROUT STRB0EX14 32K30 START0740 CLV0750 BVC START1 ;SKIP OVER VBLANK EXIT ROUTINE.0760 ;0770 EXIT0780 JMP XITVBV0790 ;0800 START108101r} CLD ;CLEAR DEC MODE FOR ATARI BASIC!0820 LDX #$03 ;SAVE ZERO PAGE TEMPS0830 LOOP40840 LDA ZERO,X0850 STA ZSAVE,X0861s}0 DEX0870 BPL LOOP40880 ;0890 LDA ANIMINIT ;READ INIT BYTE0900 BEQ EXIT ;IF IT'S ZERO, LEAVE.0910 BMI DOIT ;IF > 121t}7, OPERATE NORMALLY0920 ;0930 ASL A ;GET '+16' BIT INTO '+128' BIT0940 ASL A0950 ASL A0960 STA EX10970 ;0980 LDX 1u}#$00 ;X=CURRENT PLAYER #0990 ;1000 LOOP1010 LSR ANIMINIT ;PLAYER BIT SET?1020 BCS MOVE ;YES, INITIALIZE PLAYER1030 BC1v}C NEXT ;SKIP OVER BUCKET-BRIGADE1040 ;1050 BBEXIT1060 BEQ EXIT1070 ;1080 NEXT1090 INX ;NEXT PLAYER1100 CPX #$04 ;D1w}ONE?1110 BNE LOOP ;NO, LOOP1120 LDA #$80 ;SET INIT BYTE TO1130 STA ANIMINIT ;"ON"1140 ;1150 BNE DOIT ;UNCONDITIONAL 1x}BRANCH TO DOIT1160 ;1170 MOVE1180 LDA RATE,X ;DOES RATE=0?1190 BNE STORE ;NO, STORE IT1200 LDA #$FF ;YES, CHANGE IT T1y}O $FF1210 STORE1220 STA ORATE0,X ;MOVE PARAMS INTO LOCAL AREA1230 ;1240 TXA ;MULTIPLY X BY 21250 ASL A1260 TAY ;AND1z} PUT INTO Y1270 LDA FLSTPTR,Y ;MOVE ADR INTO LOCAL AREA1280 STA OADR0,Y1290 LDA FLSTPTR+1,Y1300 STA OADR0+1,Y1310 L1{}DA EX1 ;WAS '+16' BIT SET?1320 BMI NEXT ;YES, DON'T INITIALIZE FRAME #1330 LDA RATE,X1340 STA TIMR0,X1350 LDA #$01131|}60 STA POS0,X1370 BNE NEXT ;UNCOND. BRANCH1380 ;1390 DOIT1400 LDA #$00 ;'ZERO' POINTS TO CURRENT1410 STA ZERO ;PLAYE1}}R1420 LDA PMBAS1430 STA ZERO+11440 ;1450 LDX #$00 ;START WITH PLAYER #01460 LOOP21470 LDA ORATE0,X ;IS THIS A SPECI1~}AL1480 BEQ NEXT21490 CMP #$FF ;"RATE=0" PLAYER?1500 BEQ CHANGE2 ;YES. FILL PLAYER.1510 ;1520 NOTZERO1530 DEC TIMR0,1}X ;HAS TIME RUN OUT FOR THIS PLAYER?1540 BEQ CHANGEIT ;YES, CHANGE FRAME1550 ;1560 NEXT21570 LDA ZERO ;POINT TO NEXT PL1}AYER1580 EOR #$801590 STA ZERO1600 BNE INC1610 INC ZERO+11620 ;1630 INC1640 INX ;MOVE TO NEXT PLAYER1650 CPX #$1}04 ;LAST PLAYER?1660 BNE LOOP2 ;NO, LOOP1670 ;1680 LOOP51690 LDA ZSAVE-1,X ;RESTORE ZERO PAGE LOCS1700 STA ZERO-1,X11}710 DEX1720 BNE LOOP51730 BEQ BBEXIT ;UNCOND. BRANCH TO EXIT1740 ;1750 CHANGEIT1760 LDA ORATE0,X ;RESET TIMER1770 1}CMP #$FF1780 BNE NOTSPECIAL1790 CHANGE21800 LDA #$011810 NOTSPECIAL1820 STA TIMR0,X1830 TXA ;SET Y=X*21840 ASL A1}1850 TAY1860 LDA OADR0,Y ;MOVE PLR ADDRESS1870 STA ONE ;INTO 'ONE'1880 LDA OADR0+1,Y1890 STA ONE+11900 ;1910 INC1} POS0,X ;INCREMENT POSITION IN TABLE1920 LDA POS0,X1930 ZAPPO1940 TAY1950 LDA (ONE),Y ;GET FRAME #1960 BNE OK ;IF IT1}'S NON-ZERO, JUMP T 'OK'1970 LDA #$02 ;RESET FRAME POSITION1980 STA POS0,X1990 BNE ZAPPO ;UNCOND. BRANCH TO ZAPPO2000 1}BBNEXT22010 BVC NEXT2 ;BUCKET-BRIGADE2020 ;2030 OK2040 STA EX1 ;STORE FRAME # MINUS ONE.2050 DEC EX12060 LDY #$0021}070 LDA (ONE),Y ;PUT ADDRESS OF2080 PHA ;FRAME DATA2090 INY ;INTO 'ONE'2100 LDA (ONE),Y2110 STA ONE+1 ;STORE IT211}20 PLA2130 STA ONE2140 DEY ;SET Y TO ZERO2150 LDA (ONE),Y ;STORE FRAME HEIGHT2160 STA EX2 ;FRAME HEIGHT2170 ;2180 1};PERFORM:2190 ;FRAMENUMBER TIMES HEIGHT + FRAME ADDRESS + 12200 ;2210 LDA #$00 ;THIS MULTIPLIES (FRAMENUMBER-1)*HEIGHT221}20 LDY #$082230 NEXTBIT2240 LSR EX1 ;FRAMENUMBER2250 BCC ALIGN2260 CLC2270 ADC EX22280 ;2290 ALIGN2300 LSR A231}10 ROR EX32320 DEY2330 BNE NEXTBIT2340 TAY ;HIBYTE OF RESULT INTO Y2350 ;2360 LDA EX3 ;LOBYTE OF RESULT IN A-REG21}370 SEC ;+ 12380 ADC ONE ;+ FRAME ADDRESS2390 STA ONE2400 TYA ;NOW ADD THE HIBYTES2410 ADC ONE+12420 STA ONE+121}430 STX EX1 ;SAVE X2440 LDA O0Y,X ;GET PLAYER Y COORD2450 TAY ;PUT IN Y-REG2460 LDX #$002470 ;2480 LOOP32490 STY 1}EX3 ;SAVE Y2500 TXA ;MOVE X INTO Y2510 TAY2520 LDA (ONE),Y ;MOVE FRAME INTO PLAYER2530 LDY EX3 ;RESTORE Y2540 STA (1}ZERO),Y2550 INY2560 INX2570 CPX EX2 ;HAVE WE COPIED ALL BYTES?2580 BNE LOOP3 ;NO, LOOP2590 ;2600 LDX EX1 ;RESTORE 1}X2610 LDA ORATE0,X2620 CMP #$FF ;IS RATE=$FF?2630 BNE NOTFF2640 INC ORATE0,X ;YES, SET RATE=02650 NOTFF2660 CLV261}70 BVC BBNEXT22680 ;2690 .END (C) 1982 BY DAVID FOX AND MITCHELL WAITE40 ;0100 .TITLE "CLK-ANIMATE.ASM;v01.05-810714,0"@%APLbآY0H PN򩀍+. 23P0ֽ:>ɩ. %:5}IX.: 23>> >PPPHȱh∱QNPmQJnRR8e5}eP*RRQP..P򩀍+. 23P0ֽ:>ɩ. %:4227000 REM 27010 DATA ANIMATE,11410,294,3477927020 DATA 184,80,3,76,98,228,216,162,3,181,224,157,89,4,209}2,16,248,173,3,4,240,237,48,72,1027030 DATA 10,10,141,80,4,162,0,78,3,4,176,16,144,2,240,218,232,224,4,208,242,169,128,141,39}27040 DATA 4,208,43,189,14,4,208,2,169,255,157,46,4,138,10,168,185,18,4,153,50,4,185,19,427050 DATA 153,51,4,173,80,4,48,219}4,189,14,4,157,58,4,169,1,157,62,4,208,201,169,0,133,22427060 DATA 173,0,4,133,225,162,0,189,46,4,240,9,201,255,240,37,222,59}8,4,240,25,165,224,73,12827070 DATA 133,224,208,2,230,225,232,224,4,208,227,189,88,4,149,223,202,208,248,240,149,189,46,4,209}127080 DATA 255,208,2,169,1,157,58,4,138,10,168,185,50,4,133,226,185,51,4,133,227,254,62,4,18927090 DATA 62,4,168,177,226,29}08,9,169,2,157,62,4,208,244,80,186,141,80,4,206,80,4,160,0,17727100 DATA 226,72,200,177,226,133,227,104,133,226,136,177,226,9}141,81,4,169,0,160,8,78,80,4,144,427110 DATA 24,109,81,4,74,110,82,4,136,208,240,168,173,82,4,56,101,226,133,226,152,101,2279},133,22727120 DATA 142,80,4,189,42,4,168,162,0,140,82,4,138,168,177,226,172,82,4,145,224,200,232,236,8127130 DATA 4,208,2379},174,80,4,189,46,4,201,255,208,3,254,46,4,184,80,15110,294,3477927020 DATA 184,80,3,76,98,228,216,162,3,181,224,157,89,4,208511410 DIM ANIMATE$(294)11420 ANIMATE$(1)="PLbآY0H PN򩀍+. 23P0=}ֽ:"11430 ANIMATE$(91)=">ɩ. %:IX.: 23>>"114=}40 ANIMATE$(181)=" >PPPHȱh∱QNPmQJnRR8eeP*RR"11450 ANIMATE$(=}271)="QP..P"IMATE$(1)="PLbآY0H PN򩀍+. 23P0< 10 ; Š20 ;30 ; COPYRIGHT (C) 1982 BY DAVID FOX AND MITCHELL WAITE40 ;0100 .TITLE "CLK-AUTOMOVE.ASM;v01.04-81072A}4,820619"0110 .PAGE "Automatic Player Mover"0120 ;0130 ;BY COREY L. KOSAK0140 ;0150 ;B=$4000,FREL0160 ;0170 BASE=$400A}00180 ;0190 *=$4000200 ;0210 ;CASBUF DATABASE EQUATES0220 ;0230 PMBAS *=*+1 ;HIBYTE OF PLAYER MISSILE AREA (LOBYTE EQUA}ALS 0)0240 PMBUF *=*+2 ;ADDRESS OF 128 BYTE BUFFER (FOR PMOVER)0250 ANIMINIT *=*+1 ;INIT LOCATION FOR ANIMATE0260 AUTOINITA} *=*+1 ;INIT LOCATION FOR AUTOMOVE0270 SCRLINIT *=*+1 ;INIT LOCATION FOR SCROLLER0280 HPLR *=*+4 ;PLAYERS 0-3 X COORDINATE A}(FOR PMOVER)0290 VPLR *=*+4 ;PLRS 0-3 Y COORD (FOR PMOVER)0300 RATE *=*+4 ;PLRS 0-3 RATE (FOR ANIMATE)0310 FLSTPTR *=*+8 ;A}PLRS 0-3 FRAME LIST POINTERS (FOR ANIMATE)0320 SCRLADR *=*+2 ;SCREEN ADDRESS (FOR SCROLL)0330 SCRLLEN *=*+2 ;LINE LENGTH OFA} SCROLLED AREA (FOR SCROLL)0340 SCRLCLK *=*+1 ;COLOR CLOCKS IN SCREEN BYTE (FOR SCROLL)0350 SCRLSTEP *=*+1 ;SCROLL STEP (FOA}R SCROLL)0360 MOVERATE *=*+4 ;PLRS 0-3 HORIZONTAL STEP (FOR AUTOMOVE)0370 DLIADR *=*+2 ;ADDRESS OF COLOR TABLE0380 ;0390 A};*LOCAL* DATABASE EQUATES0400 ; THESE LOCATIONS ARE *LOCAL* TO THE ROUTINES0410 ; AND SHOULD *NOT* BE MODIFIED BY THE HOST A}PROGRAM0420 ;0430 O0X *=*+4 ;PLRS 0-3 X COORDINATE0440 O0Y *=*+4 ;PLRS 0-3 Y COORD0450 ORATE0 *=*+4 ;PLRS 0-3 FRAME CHANGA}E RATE0460 OADR0 *=*+8 ;PLRS 0-3 FRAME LIST ADDRESS0470 TIMR0 *=*+4 ;PLRS 0-3 COUNTDOWN TIMERS (HOW MANY JIFFIES UNTIL FRAMA}E CHANGE)0480 POS0 *=*+4 ;PLRS 0-3 FRAME LIST POSITION0490 OSADR *=*+2 ;SCREEN ADDRESS FOR SCROLLER0500 CPOS *=*+2 ;COARSEA} SCROLL POSITION FOR SCROLLER (0-LINELEN)0510 FPOS *=*+1 ;FINE SCROLL POSITION (0-7)0520 OXSTEP0 *=*+4 ;PLRS 0-3 HORIZONTALA} STEP0530 DLIPOS *=*+1 ;CURRENT POSITION IN COLOR TABLE0540 PM1 *=*+1 ;4 LOCATIONS RESERVED FOR PMOVER0550 PM2 *=*+10560 A}PM3 *=*+10570 PM4 *=*+10580 EX1 *=*+1 ;4 LOCATIONS RESERVED FOR ANIMATE, AUTOMOVE, SCROLL, AND MFILL0590 EX2 *=*+10600 EXA}3 *=*+10610 EX4 *=*+10620 PMSAVE *=*+5 ;ZERO PAGE SAVE AREA FOR PMOVER0630 ZSAVE *=*+4 ;ZERO PAGE SAVE AREA FOR ALL OTHER A}ROUTINES0640 ;0650 XITVBV=$E4620660 ;0670 ZERO=$E00680 ONE=$E20690 ;0700 *=BASE0710 ;0720 START0730 CLV0740 BVCA} START10750 ;0760 EXIT0770 JMP XITVBV0780 ;0790 START10800 CLD ;CLEAR DECIMAL MODE!!!0810 LDA AUTOINIT ;INIT BYTE A}SET?0820 BEQ EXIT ;NO, LEAVE0830 BMI MOVETHEM ;NORMAL OPERATION IF >1270840 ;0850 LDX #$00 ;START WITH PLAYER #00860 A}LOOP0870 LSR AUTOINIT ;IS THE BIT FOR THIS PLAYER SET?0880 BCC NEXT ;NO, SKIP OVER UPDATE0890 LDA MOVERATE,X ;MOVE PARAA}MS INTO LOCAL LOCATIONS0900 STA OXSTEP0,X0910 NEXT0920 INX0930 CPX #$04 ;ARE WE ALL DONE?0940 BNE LOOP ;NO, SO LOOPA}0950 LDA #$800960 STA AUTOINIT ;SET INIT BYTE TO $800970 ;0980 MOVETHEM0990 LDX #$03 ;START WITH PLAYER #31000 LOOP2A}1010 LDA OXSTEP0,X ;READ STEP1020 EOR #$80 ;REVERSE SIGN1030 PHP1040 CLC1050 ADC O0X,X ;ADD STEP TO OLD XCOORD1060 A} BCC CCLEAR1070 ;1080 PLP1090 BMI OK ;CARRY SET IS OK, IF STEP IS NEGATIVE1100 BPL BAD1110 ;1120 CCLEAR1130 PLP11A}40 BPL OK ;CARRY CLEAR IS OK, IF STEP IS POSITIVE1150 ;1160 BAD1170 LDA #$80 ;ZERO THE STEP. (STOP MOTION FOR THIS PLAYEA}R)1180 STA OXSTEP0,X1190 LDA #$00 ;ZERO THE XCOORD OF THIS PLAYER1200 ;1210 OK1220 STA O0X,X ;STORE XCOORD1230 DEX A};DO NEXT PLAYER1240 BPL LOOP2 ;LAST PLAYER? NO, LOOP1250 BMI EXIT ;YES, LEAVE.1260 .END "CLK-AUTOMOVE.ASM;v01.04-81072@^@I@PLbح0N G𩀍GI}&(0 (G&0E.1260 .END "CLK-AUTOMOVE.ASM;v01.04-81072DP28000 REM 28010 DATA AUTOMOVE,11510,74,656428020 DATA 184,80,3,76,98,228,216,173,4,4,240,247,48,23,162I},0,78,4,4,144,6,189,32,4,15728030 DATA 71,4,232,224,4,208,240,169,128,141,4,4,162,3,189,71,4,73,128,8,24,125,38,4,14428040 I}DATA 5,40,48,12,16,3,40,16,7,169,128,157,71,4,169,0,157,38,4,202,16,223,48,1854,80,3,76,98,228,216,173,4,4,240,247,48,23,162HO11510 DIM AUTOMOVE$(74)11520 AUTOMOVE$(1)="PLbح0N G𩀍GI}&(0 (G&0"3,162Lx10 ; ̠20 ;30 ; COPYRIGHT (C) 1982 BY DAVID FOX AND MITCHELL WAITE40 ;0100 .TITLE "CLK-SCROLL.ASM;v01.09-810719,82Q}0619"0110 .PAGE "Interrupt-driven Screen Scroller"0120 ;0130 ; BY COREY L. KOSAK0140 ;0150 ; B=$4000,FREL0160 ;0170 BQ}ASE=$40000180 ;0190 *=$4000200 ;0210 ; CASBUF DATABASE EQUATES0220 ;0230 PMBAS *=*+1 ;HIBYTE OF PLAYER MISSILE AREA (LQ}OBYTE EQUALS 0)0240 PMBUF *=*+2 ;ADDRESS OF 128 BYTE BUFFER (FOR PMOVER)0250 ANIMINIT *=*+1 ;INIT LOCATION FOR ANIMATE0260Q} AUTOINIT *=*+1 ;INIT LOCATION FOR AUTOMOVE0270 SCRLINIT *=*+1 ;INIT LOCATION FOR SCROLLER0280 HPLR *=*+4 ;PLAYERS 0-3 X COQ}ORDINATE (FOR PMOVER)0290 VPLR *=*+4 ;PLRS 0-3 Y COORD (FOR PMOVER)0300 RATE *=*+4 ;PLRS 0-3 RATE (FOR ANIMATE)0310 FLSTPTQ}R *=*+8 ;PLRS 0-3 FRAME LIST POINTERS (FOR ANIMATE)0320 SCRLADR *=*+2 ;SCREEN ADDRESS (FOR SCROLL)0330 SCRLLEN *=*+2 ;LINE Q}LENGTH OF SCROLLED AREA (FOR SCROLL)0340 SCRLCLK *=*+1 ;COLOR CLOCKS IN SCREEN BYTE (FOR SCROLL)0350 SCRLSTEP *=*+1 ;SCROLLQ} STEP (FOR SCROLL)0360 MOVERATE *=*+4 ;PLRS 0-3 HORIZONTAL STEP (FOR AUTOMOVE)0370 DLIADR *=*+2 ;ADDRESS OF COLOR TABLE038Q}0 ;0390 ;*LOCAL* DATABASE EQUATES0400 ; THESE LOCATIONS ARE *LOCAL* TO THE ROUTINES0410 ; AND SHOULD *NOT* BE MODIFIED BY Q}THE HOST PROGRAM0420 ;0430 O0X *=*+4 ;PLRS 0-3 X COORDINATE0440 O0Y *=*+4 ;PLRS 0-3 Y COORD0450 ORATE0 *=*+4 ;PLRS 0-3 FRQ}AME CHANGE RATE0460 OADR0 *=*+8 ;PLRS 0-3 FRAME LIST ADDRESS0470 TIMR0 *=*+4 ;PLRS 0-3 COUNTDOWN TIMERS (HOW MANY JIFFIES UQ}NTIL FRAME CHANGE)0480 POS0 *=*+4 ;PLRS 0-3 FRAME LIST POSITION0490 OSADR *=*+2 ;SCREEN ADDRESS FOR SCROLLER0500 CPOS *=*+Q}2 ;COARSE SCROLL POSITION FOR SCROLLER (0-SCRLLEN)0510 FPOS *=*+1 ;FINE SCROLL POSITION (0-7)0520 OXSTEP0 *=*+4 ;PLRS 0-3 HQ}ORIZONTAL STEP0530 DLIPOS *=*+1 ;CURRENT POSITION IN COLOR TABLE0540 PM1 *=*+1 ;4 LOCATIONS RESERVED FOR PMOVER0550 PM2 *=Q}*+10560 PM3 *=*+10570 PM4 *=*+10580 EX1 *=*+1 ;4 LOCATIONS RESERVED FOR ANIMATE, AUTOMOVE, SCROLL, AND MFILL0590 EX2 *=*+Q}10600 EX3 *=*+10610 EX4 *=*+10620 PMSAVE *=*+5 ;ZERO PAGE SAVE AREA FOR PMOVER0630 ZSAVE *=*+4 ;ZERO PAGE SAVE AREA FOR AQ}LL OTHER ROUTINES0640 ;0650 XITVBV=$E4620660 HSCROLL=$D4040670 SDLSTL=$2300680 ;0690 ZERO=$E00700 ONE=$E20710 ;0720 Q} *=BASE0730 ;0740 START0750 CLV0760 BVC START1 ;SKIP OVER VBLANK EXIT ROUTINE0770 ;0780 EXIT0790 JMP XITVBV0800 ;Q}0810 START10820 CLD ;CLEAR DECIMAL MODE FOR ATARI BASIC!0830 LDA SCRLINIT ;IS THE INIT BYTE SET?0840 BEQ EXIT ;NO, LEAQ}VE0850 BPL BBINIT2 ;YES, INIT EVERYTHING0860 ;0870 LDA ZERO ;SAVE ZERO PAGE TEMPS0880 STA ZSAVE0890 LDA ZERO+10900 Q} STA ZSAVE+10910 LDA SDLSTL ;MOVE DISPLAY LIST POINTER0920 STA ZERO ;INTO TEMPORARY POINTER0930 LDA SDLSTL+10940 STA Q}ZERO+10950 ;0960 ; NOW WE SPLIT SCRLSTEP INTO A COARSE0970 ; AND FINE STEP, AND ALSO COMPUTE, VIA0980 ; SCRLCLK, THE NUMBQ}ER OF BYTES PER SCREEN LINE (IN WIDE PLAYFIELD)0990 ;1000 LDA SCRLCLK ;MOVE CLOCK VALUE TO EX11010 STA EX11020 LDA #$CQ}0 ;BYTES PER MODE LINE1030 STA EX21040 LDA SCRLSTEP ;SHIFT OUT FINE SCROLL1050 LDY #$00 ;OFFSET IN SCREEN BYTE TABLE10Q}60 CLOOP1070 LSR EX1 ;SHIFT RIGHT CLOCK VALUE1080 BCC CDONE ;ANY BITS LEFT?1090 LSR A ;YES, SHIFT SCROLL VALUE1100 LSQ}R EX2 ;DIVIDE MODE LINE LENGTH BY 21110 INY ;AND BUMP POINTER1120 BNE CLOOP ;ALWAYS TAKEN1130 CDONE1140 STA EX1 ;STOREQ} COARSE STEP1150 ;1160 LDA SCRLSTEP1170 AND SCRLCLK ;GET FINE STEP1180 ;1190 CLC1200 ADC FPOS ;ADD CURRENT FINESCROQ}LL VALUE1210 CMP SCRLCLK ;DID IT GO OVER CLOCK VALUE?1220 BEQ OK ;NOPE.1230 BCC OK ;NOPE.1240 BCS INCIT ;SKIP OVER BUQ}CKET-BRIGADES1250 ;1260 BBEXIT21270 BVC EXIT1280 BBINIT21290 BNE BBINIT1300 ;1310 INCIT1320 INC EX1 ;YES. INCREMENQ}T COARSE STEP1330 AND SCRLCLK ;AND PUT FINE STEP IN RANGE1340 ;1350 OK1360 STA FPOS ;STORE IN CURRENT SCROLL VALUE1370Q} EOR SCRLCLK ;HSCROLL REGISTER IS1380 STA HSCROLL ;'BACKWARDS'1390 ;1400 LDA EX1 ;GET COARSE SCROLL STEP1410 CLC1420Q} ADC CPOS ;ADD CURRENT SCROLL VALUE1430 STA CPOS ;AND STORE BACK1440 BCC OK41450 INC CPOS+11460 ;1470 OK41480 LDA Q}CPOS ;ADD EX2+1 TO TEST FOR1490 SEC ;END OF SCREEN1500 ADC EX21510 STA CPOS1520 BCC OK51530 INC CPOS+11540 OK515Q}50 LDA CPOS+11560 CMP SCRLLEN+1 ;HAVE WE SCROLLED TO EDGE OF SCREEN?1570 BCC OK2 ;NO, WE'RE OK1580 BNE RESET ;YES, SETQ} BACK TO BEGINNING1590 LDA CPOS ;MAYBE?1600 CMP SCRLLEN1610 BCC OK2 ;NO, WE'RE OK1620 RESET1630 LDA #$00 ;SET POINTEQ}RS TO BEGINNING OF1640 STA CPOS ;SCREEN LINE1650 STA CPOS+11660 STA EX11670 LDA SCRLADR ;MOVE START ADDRESS1680 STAQ} OSADR ;OF SCROLL WINDOW1690 LDA SCRLADR+1 ;INTO LOCAL AREA1700 STA OSADR+11710 CLV ;JUMP OVER BUCKET BRIGADE BRANCHESQ}1720 BVC OK6 ;AND DON'T SUBTRACT EX21730 ;1740 BBINIT1750 BNE INIT1760 BBEXIT1770 BVC BBEXIT21780 ;1790 OK21800 LQ}DA CPOS ;SUBTRACT THE EX2 WE ADDED EARLIER1810 CLC1820 SBC EX21830 STA CPOS1840 BCS OK61850 DEC CPOS+11860 OK6187Q}0 LDA OSADR1880 CLC1890 ADC EX1 ;ADD STEP TO SCREEN ADDRESS1900 STA OSADR ;AND MOVE INTO EX3 AND EX41910 STA EX3192Q}0 BCC OK31930 INC OSADR+11940 ;1950 OK31960 LDA OSADR+11970 STA EX41980 LDY #$03 ;SKIP OVER FIRST THREE DL INSTRUCQ}TIONS1990 LOOP2000 LDA (ZERO),Y ;GET BYTE IN DISPLAY LIST2010 CMP #$41 ;JVB? (END OF DLIST?)2020 BEQ DONE ;YES, QUIT2Q}030 ;2040 AND #$50 ;HSCROLL OR LMS BITS SET?2050 BEQ NOCHANGE ;NO, FORGET IT2060 AND #$10 ;HSCROLL SET?2070 BEQ NSCROQ}LL ;NO, SKIP OVER NEXT TWO BYTES2080 INY ;NEXT 2 BYTES ARE MEMORY ADDRESS OF CURRENT LINE2090 LDA EX3 ;MOVE SCREEN ADDRESQ}S2100 STA (ZERO),Y ;INTO DISPLAY LIST2110 CLC2120 ADC SCRLLEN ;AND ADD SCRLLENGTH2130 STA EX32140 INY2150 LDA EX4Q} ;DO HIBYTE2160 STA (ZERO),Y2170 ADC SCRLLEN+12180 STA EX42190 ;2200 .BYTE $AD ;"LDA ABSOLUTE" OPCODE SKIPS NEXT 2 BQ}YTES2210 ;2220 NSCROLL2230 INY2240 INY2250 ;2260 NOCHANGE2270 INY2280 BNE LOOP ;ALWAYS (DISPLAY LIST MUSTN'T BE LQ}ONGER THAN 256 BYTES)2290 ;2300 BBEXIT32310 BVC BBEXIT2320 ;2330 DONE2340 LDA ZSAVE ;RESTORE ZERO PAGE TEMPS2350 STQ}A ZERO2360 LDA ZSAVE+12370 STA ZERO+12380 CLV2390 BVC BBEXIT2400 ;2410 INIT2420 LDA #$802430 STA SCRLINIT ;SET Q}INIT BYTE TO "ON"2440 LDA SCRLCLK ;SET SCROLL POINTERS TO LEFT OF SCREEN2450 STA FPOS2460 LDA #$002470 STA CPOS2480 Q} STA CPOS+12490 LDA SCRLADR ;MOVE SCREEN ADDRESS TO LOCAL AREA2500 STA OSADR2510 LDA SCRLADR+12520 STA OSADR+12530 LQ}EAVE2540 CLV2550 BVC BBEXIT3 ;LEAVE.2560 ;2570 .END MITCHELL WAITE40 ;0100 .TITLE "CLK-SCROLL.ASM;v01.09-810719,82P;@;APLbحHYZ01PQNPJNQP-mF PYP-FMԭPmDDEU}D8mQDEE(DDEPBCPgPDQDEBmPBRCCSA))P )ȭRmU}RȭSmSPYZPFDEBCP-mF PYP-FMԭPmDDETH24000 REM ̠24010 DATA SCROLL,11020,316,2934924020 DATA 184,80,3,76,98,228,216,173,5,4,240,247,16,72,165,2Y}24,141,89,4,165,225,141,90,4,17324030 DATA 48,2,133,224,173,49,2,133,225,173,30,4,141,80,4,169,192,141,81,4,173,31,4,160,02Y}4040 DATA 78,80,4,144,7,74,78,81,4,200,208,244,141,80,4,173,31,4,45,30,4,24,109,70,424050 DATA 205,30,4,240,14,144,12,176,4,Z}80,173,208,89,238,80,4,45,30,4,141,70,4,77,30,424060 DATA 141,4,212,173,80,4,24,109,68,4,141,68,4,144,3,238,69,4,173,68,4,56Z},109,81,424070 DATA 141,68,4,144,3,238,69,4,173,69,4,205,29,4,144,40,208,8,173,68,4,205,28,4,14424080 DATA 30,169,0,141,68,Z}4,141,69,4,141,80,4,173,26,4,141,66,4,173,27,4,141,67,4,18424090 DATA 80,19,208,103,80,159,173,68,4,24,237,81,4,141,68,4,176Z},3,206,69,4,173,66,4,2424100 DATA 109,80,4,141,66,4,141,82,4,144,3,238,67,4,173,67,4,141,83,4,160,3,177,224,20124110 DATA 6Z}5,240,41,41,80,240,32,41,16,240,26,200,173,82,4,145,224,24,109,28,4,141,82,4,20024120 DATA 173,83,4,145,224,109,29,4,141,83,Z}4,173,200,200,200,208,211,80,166,173,89,4,133,224,17324130 DATA 90,4,133,225,184,80,153,169,128,141,5,4,173,30,4,141,70,4,16Z}9,0,141,68,4,141,6924140 DATA 4,173,26,4,141,66,4,173,27,4,141,67,4,184,80,2070,3,76,98,228,216,173,5,4,240,247,16,72,165,2XP11020 DIM SCROLL$(316)11030 SCROLL$(1)="PLbحHYZ01PQNPJNQP-mF ^}PYP"11040 SCROLL$(91)="-FMԭPmDDED8mQDEE(DDEPBCPgP"11050 ^ }SCROLL$(181)="DQDEBmPBRCCSA))P )ȭRmRȭSmSP"11060 SCROLL$(271)=^ }"YZPFDEBCP"HYZ01PQNPJNQP-mF \110 ; Ԡ20 ;30 ; COPYRIGHT (C) 1982 BY DAVID FOX AND MITCHELL WAITE40 ;0100 .TITLE "CLK-DLIROUT.ASM;v01.06-810806,b }820619"0110 .PAGE "DLI Color Changer"0120 ;0130 ; BY COREY L. KOSAK0140 ;0150 ; B=$4000,FREL0160 ;0170 BASE=$4000018b }0 ;0190 *=$4000200 ;0210 ; CASBUF DATABASE EQUATES0220 ;0230 PMBAS *=*+1 ;HIBYTE OF PLAYER MISSILE AREA (LOBYTE EQUALS b}0)0240 PMBUF *=*+2 ;ADDRESS OF 128 BYTE BUFFER (FOR PMOVER)0250 ANIMINIT *=*+1 ;INIT LOCATION FOR ANIMATE0260 AUTOINIT *=*b}+1 ;INIT LOCATION FOR AUTOMOVE0270 SCRLINIT *=*+1 ;INIT LOCATION FOR SCROLLER0280 HPLR *=*+4 ;PLAYERS 0-3 X COORDINATE (FORb} PMOVER)0290 VPLR *=*+4 ;PLRS 0-3 Y COORD (FOR PMOVER)0300 RATE *=*+4 ;PLRS 0-3 RATE (FOR ANIMATE)0310 FLSTPTR *=*+8 ;PLRSb} 0-3 FRAME LIST POINTERS (FOR ANIMATE)0320 SCRLADR *=*+2 ;SCREEN ADDRESS (FOR SCROLL)0330 SCRLLEN *=*+2 ;LINE LENGTH OF SCRb}OLLED AREA (FOR SCROLL)0340 SCRLCLK *=*+1 ;COLOR CLOCKS IN SCREEN BYTE (FOR SCROLL)0350 SCRLSTEP *=*+1 ;SCROLL STEP (FOR SCb}ROLL)0360 MOVERATE *=*+4 ;PLRS 0-3 HORIZONTAL STEP (FOR AUTOMOVE)0370 DLIADR *=*+2 ;ADDRESS OF COLOR TABLE0380 ;0390 ;*LOb}CAL* DATABASE EQUATES0400 ; THESE LOCATIONS ARE *LOCAL* TO THE ROUTINES0410 ; AND SHOULD *NOT* BE MODIFIED BY THE HOST PROGb}RAM0420 ;0430 O0X *=*+4 ;PLRS 0-3 X COORDINATE0440 O0Y *=*+4 ;PLRS 0-3 Y COORD0450 ORATE0 *=*+4 ;PLRS 0-3 FRAME CHANGE RAb}TE0460 OADR0 *=*+8 ;PLRS 0-3 FRAME LIST ADDRESS0470 TIMR0 *=*+4 ;PLRS 0-3 COUNTDOWN TIMERS (HOW MANY JIFFIES UNTIL FRAME CHb}ANGE)0480 POS0 *=*+4 ;PLRS 0-3 FRAME LIST POSITION0490 OSADR *=*+2 ;SCREEN ADDRESS FOR SCROLLER0500 CPOS *=*+2 ;COARSE SCRb}OLL POSITION FOR SCROLLER (0-LINELEN)0510 FPOS *=*+1 ;FINE SCROLL POSITION (0-7)0520 OXSTEP0 *=*+4 ;PLRS 0-3 HORIZONTAL STEb}P0530 DLIPOS *=*+1 ;CURRENT POSITION IN COLOR TABLE0540 PM1 *=*+1 ;4 LOCATIONS RESERVED FOR PMOVER0550 PM2 *=*+10560 PM3 b}*=*+10570 PM4 *=*+10580 EX1 *=*+1 ;4 LOCATIONS RESERVED FOR ANIMATE, AUTOMOVE, SCROLL, AND MFILL0590 EX2 *=*+10600 EX3 *=b}*+10610 EX4 *=*+10620 PMSAVE *=*+5 ;ZERO PAGE SAVE AREA FOR PMOVER0630 ZSAVE *=*+4 ;ZERO PAGE SAVE AREA FOR ALL OTHER ROUTb}INES0640 DLI1 *=*+10650 DLI2 *=*+10660 ;0670 COLPF2=$D0180680 COLPF3=$D0190690 COLBAK=$D01A0700 XITVBV=$E4620710 WSYNb}C=$D40A0720 ;0730 ZERO=$E00740 ;0750 *=BASE0760 ;0770 START0780 CLV0790 BVC DLIDO ;SKIP OVER VBLANK EXIT ROUTINE0b}800 ;0810 EXIT0820 JMP XITVBV0830 ;0840 VBINT0850 LDA #$00 ;ON VBLANK, ZERO THE COLOR TABLE POINTER0860 STA DLIPOS0b}870 BEQ EXIT ;LEAVE0880 ;0890 DLIDO0900 PHA ;SAVE A,X, & Y ON STACK0910 TXA0920 PHA0930 TYA0940 PHA0950 ;0960b } LDA ZERO ;SAVE ZERO PAGE LOCS0970 STA DLI10980 LDA ZERO+10990 STA DLI21000 LDA DLIADR ;MOVE ADDRESS OF COLOR TABLEb!}1010 STA ZERO ;INTO POINTER1020 LDA DLIADR+11030 STA ZERO+11040 ;1050 LDY DLIPOS ;GET COLOR TABLE POINTER INTO Y-REGb"}1060 LDA (ZERO),Y ;GET COLOR1070 PHA ;A=COLPF21080 ;1090 INY ;GET THE NEXT COLOR1100 LDA (ZERO),Y1110 TAX ;X=COLPF3b#}1120 ;1130 INY ;AND THE NEXT1140 LDA (ZERO),Y1150 INY1160 STY DLIPOS ;STORE NEW COLOR TABLE POINTER1170 TAY ;Y=COLb$}BAK1180 PLA ;A=COLPF21190 NOP ;PUT 18 CYCLE DELAY IN FOR1200 NOP ;TIMING PROBLEM1210 NOP1220 NOP1230 NOP1240 NOb%}P1250 NOP1260 NOP1270 NOP1280 ;1290 STA WSYNC ;WAIT FOR HORIZONTAL SYNC1300 STA COLPF2 ;QUICK! STORE THOSE COLORS!b&}1310 STX COLPF31320 STY COLBAK1330 ;1340 LDA DLI1 ;RESTORE ZERO PAGE LOCS1350 STA ZERO1360 LDA DLI21370 STA ZEROb'}+11380 ;1390 PLA ;AND REGISTERS FROM STACK1400 TAY1410 PLA1420 TAX1430 PLA1440 RTI ;AND RETURN FROM WHENCE.14b(}50 ;1460 .END0 ;30 ; COPYRIGHT (C) 1982 BY DAVID FOX AND MITCHELL WAITE40 ;0100 .TITLE "CLK-DLIROUT.ASM;v01.06-810806,`@]@P LbKHHH]^$%KHȱȱȌKh ԍЎЌЭ]^hhh@LIROUT.ASM;v01.06-810806,dd25000 REM ɠ25010 DATA DLIROUT,11110,94,1280325020 DATA 184,80,10,76,98,228,169,0,141,75,4,240,246,72,138,72,j+}152,72,165,224,141,93,4,165,22525030 DATA 141,94,4,173,36,4,133,224,173,37,4,133,225,172,75,4,177,224,72,200,177,224,170,200j,},17725040 DATA 224,200,140,75,4,168,104,234,234,234,234,234,234,234,234,234,141,10,212,141,24,208,142,25,20825050 DATA 140,j-}26,208,173,93,4,133,224,173,94,4,133,225,104,168,104,170,104,6420 DATA 184,80,10,76,98,228,169,0,141,75,4,240,246,72,138,72,h@11110 DIM DLIROUT$(94)11120 DLIROUT$(1)="P LbKHHH]^$%KHȱȱȌKh ԍЎЌЭ]n/}^h"11130 DLIROUT$(91)="hh@"T$(1)="P LbKHHH]^$%KHȱȱȌKh ԍЎЌЭ]l#IIHIBYTLOBYTPLRHPLRVPLRRATEPMWIDTHFRMLSTPTRMOVERATECLSEGTEMPHICHRSPEETEMPMOVEALLINITANIMATSNr1}SNDSCONVVOWALINITAUTOMOVFST2BYTMFILFLAOBJECLST2NSPSCRLSTEFRSTPLNUMPLRSPOINTERCFLACHAPAINLFENCPTHEIGHr2}WIDTGRNSCRLWILINELECLOUSCRSPCFLAROOMLEFSCRNSZSTORCHIMNESHRUANTENNTREODDHOUSTRUNTREETOBDIDLSZMEOBJFRMr3}DATAFRAMESFRMSIZEPLRFRMMEMFRMLSTSIZETEMPTEMPTEMPFRAMEMETOTFRMLSTSIZBUFFERFRAMEMEMFRMLSTMEMHIBASLOBASDLBASSCRNr4}HSCRNLSCROLSCROLLDLIROUDLIROUTPMOVERANIMATANIMATEAUTOMOVAUTOMOVEMFILLBUFFEPLRFRAMEFRMLSTMEWINDOPMBASCHRBAOFr5}FSECHARTOTAOFFSETFRAMELISTDLITBLSZDLITABLEDLITABLPARAMBASPMBAPMBUSCRLINISCRLADSCRLLESCRLCLDLIADVVBLKCRITICAr6}PPPP@@@@@@@ r7}r8} !"#$%@&@'()*+,-r9}./0123456789:;<=r:}>?@ABCDEF@G@H@I@J@KLr;}MNOPQRSTUVWXYZ[\r<}]^_`abcdefghijkr=}l@mnopqrstuvwxyz{r>}|}~ %%ŠԠŠΠ報򠳲˛(^^Programr?} putting it all together - PM Graphics, Fine Scrolling, & Display List Interrupts288Copyright (C) 1982 by David Fox and Mir@}tchell Waite<F A@Pdn6-P:'AV,x6-&$AV$rA}囖RR9@,9@,9@,9@,9@,9@,9@,&&;@$,;@$,;@,BrB}67@,.>:,367@$,.>:,B67@,. B AP A` A& AprC} A BAVAY@G A( A0 B " B06*-rD}@&8,@* @6-6@J A AT6-@^6-?:<,h r A|5#rE}@@K:5ATAU36-O:F:Ad,&A(,+6-'@36rF}-%K6-+A(&,'@ 52@@K2@@+!!6-&+@,+ AprG}-" 6-?:<,-6-6@\F:A,"@:2@@@\2rH}5+F:Ab,!A)F:Ab, @ 5 AP5+F:Ad,!A))F:Ae, @5 A F:rI}AT,"AUAH)@6-&@H0ATAU< H6- A ArJ}Xb(6-P:,"(6-@lK6-&?P+2@@A2@@rK}K A v''6-?:<8@,<AV<,%%6-P:H:@,$@%@,6-F7ArL}AAAAAC"F$6-?:<, /"@rM}%6-A(&$@/ A@'"@6-A%&' A@6-A2&'8@,!8@,rN}'6-D8,A)&18@,A)&>"6@D6-   $ӠҠrO}ӛ G%A@$@%@GA@$@%@%6-6-@% ArP}-8,@-8@,@"@Ap$c8,@ -8@,@(9!@NrQ}8,Ac8@,A&.%%6-P:H:@,$A%@ ,8$BL V"$`G%ArR}@$@%@GA@$@%@j-8@,A)-8@,At-8@,rS}@B-8@,@(~G6-@6-@% A16-@=6-@G A-8@,-rT}8@,@6-$ 뛺U%A@$@%@UAP:H:@,$@rU},$@%@-8@,A-8@,A3-8@,@w-8@,@w%6-@6rV}-@% A-8@,@-8@,@6-@6-A$ "@rW}$(o6-P:H:@,$@,G6-@&P:H:@,$@,$@W6-$@%cAoA2-8rX}@,-8@,@<9!@$8@,A98@,A2F-8@,@-8@rY},@P%6-@6-@% AZ-8@,@-8@,@d6-@6-@@nrZ}$x++-8,&@6-8<, A8%,r[}8%,%@ $"lv6-)!A'6-&A()6-A(7r\} @6-&@2) 76-%@6-%%$@d$) 6-B:,r]} @$)67%@,.6-%@- A"-@  6-$%6-@:7<,r^}, A +!%@$%%@#+ A!0*"A! 4"@6-%@d>)%%$@$r_}%&@) A!0H%%$%&@R \ f6-%%O:,%p6-z6-&@%&$r`}团 @A"@j"@6-@:Q,$ A16-6@; A"PF6-@:E,P Ara}V6-` A"Pj A"@T6-@:A, A%6-6@/ A"P:6-@:D,D AJ6-T A"P$rb}%%$%$` $$j -@t -@$~ ""rc}%$%&@%%F:%$%,     $ ( //蠰2 6-?:<<<,rd}< $F  R6.ԽԽ$6-@06-@<6-@H6-@R A re} D6. Խ 6-@.6-%@:6-@D A  P"6..6-@:6-rf}F6-@$P A  $"  Šٛ͠ 6- 6-@ 6-6- %%rg}6-P:H:@,$@%@, 6 H:@,$A@E,6-@6 A0 6 H:@,$@U@5,6-@rh}6 A0 6-@ 6-+H:@,?`, ("(6-+H:@,?@,  @6-ri}& 6-+H:@,?P,0 6-+H:@,?P,: 7 6.-&@A5A7A97 A D  @rj} A$$N X 6-6-b H#"*"*!@<6-+H:@,?0,rk}HA4@l v 6-@6. Find height of tree 6 H:@,$@@,6-@6 A2rl}` 6 H:@,$@ @,6-@6 A2` 6 H:@,$@@,6-@6 A2` 6 H:@rm},$@@,6-@6 A2` 6-@ A)6-P:H:@,$+&@,%@,5"@A6- 1rn} 6-&!@%6-&@16-@ ##6-+@&,$@%@ 67,. "@A3@ ro}-@&@ 6-%@67,.tt   6-%@67,. "@A3 -@&rp}@* 6-%@67,.BV4  > ,H:@,?P,67%@,.KLH ((Add random spacing on side of trerq}eR C%6-P:H:@,$@%@,C"@) @A4p\ '"@6-%@' A4pf 6-@ rr}A4pp z S%6-P:H:@,$@%@,+6.7"@I67@ ,.S A4p 67@,.rs}  %6-6-% A   @A1@ A0@ 蠲 !@6-@ 6rt}-@ "@6-@ 67,.INZU A5` 67,.IOZX 56-%@5-%+&@,$@ru}@ .H:@,?P$67,.. A5 67,. 67@ ,."A6@$rv}4H:@,?P*67@,.WW4 A6@.67@,.EQ8$Bt 蠳~##6-+@&,$@%rw}@&* @&67&@,.`67,.ZTX,H:@,?P"6., A7` 6.56-rx}%@5-%+&@,$@@ 67,. 67@,.67@,.WWW$ry}< 蠴F##6-+@&,$@%@P'"@67,.HTTJ' A@PZ,,!@))H:@,?33Arz}@dCreate Odd House typen6-@x)67@,.INZU) A967@,.IOZX6-r{})67@ ,. ITTO) AACreate Normal House type- *#67&@,.`HJYTTJ- A@P=r|}67&@,.HJ%"367,.HTTJ= A@P0H:@,?P&67,.YTTJ0 A@P67,.HTTMr}}56-%@5-%+&@,$@@0H:@,?%&67,.0 A@67,. r~}67@,.67@!,.WEQW$6-6-@46r}-A`!!6-@$@$%$@ 6-% # "-9<@,-9,9,9,9,9,-@r} " 68,-68,-68,-68,-8,$8,%@6-%8,$8, 68,-8,%@6-%8,$r}8, (;A(,;,;,2'6-%@'$AV AQp<6-F:A,&F6-P6-$AVr}%Z 6-%d 6- An 6-6-x6-%@H 6-C:, 6-C:, 6-C:, 6-C:, 6-C:r}, 6-C:, 6-C:, 6-C:, 6-C:,$pz+@%@AYr}A%@A%@A%@@q%@%@r}%@@%A(-@ 6-%$6-@-"@)"@-6-@%A(r}"@6-@q%@%@$ 6- A%@%@$$%@ %@r}$. 8%@(@%A(B%@)@L%@0@%A(V%@1@e`r}%@2j%@3t 6- A~AA Tell ANTIC where the DL isA`r}Aa0@@70@@@Q0@@k0@@0r}@@ @$X((b6-F:A,&&@lBByv6r}-AV$-@68,-%A($%A68,-B2V% A#@B2wr}@''6-?:<8,<A<,$@$$J6-F:A,&&@Tr}6-$AV^,,Read in data, skip first 28 charactersh#6-@($@#6-@5r #B0|"6-r}!!-%%%$@&@" 6-% 6 +3  In Character Set Data6''Clear}r out first char (background)-%@ $'',6-6r}-"9,,#B$'-@.'68,-%8'6-%+8,%@,$8,B'-8,&@L'68<,r}-%V'6-%8,`'8<,8,j'-@8,&@t'"~'8<,%'   '$'* r}ŠŠӛ+̠ +;A,+mm67@,.ZPLbحHYZ01PQr}NPJNQP-mF PYP +mm67@,.Z-FMԭPmDDED8mQDEE(Dr}DEPBCPgP*+mm67A,.ZDQDEBmPBRCCSA))P )ȭRmRȭSmr}SP4+AA67Aq,..YZPFDEBCP\+ɠ堛f+;@,p+mm67@r},.ZP LbKHHH]^$%KHȱȱȌKh ԍЎЌЭ]^hz+67@,.hh@+r}&&ɠ+6-@#BU+ ;,+ 6-C:,+-&@+"+ %r}, $,Ҡ.,;A,8,mm67@,.ZPLb&0ߝShhhF&r}B,mm67@,.ZFIT`L*H *hMNNr}ML,67A,.LP,Š囒,;A,,mm67@,.ZPLbآY0H r} PN򩀍+. 23P0ֽ:,mm67@,.Z>ɩ. %:Ir}X.: 23>>,mm67A,.Z >PPPHȱh∱QNPmQJnRr}R8eeP*RR,++67Aq,.QP..P,Š,;@t,-]]6r}7@,.JPLbح0N G𩀍GI}&(0 (G&0P-̠Z-;@A,r}d-<<67@,.)hhhhhhh̥ͥ`-$-.!!.6-A$. r}6-.6-%@/6-%@/6-%@/6-%@&/-@0/68,-%@%:/68r},-%@%D/68,-%@%N/68,-%@%$@X/68,-%@2%b/ l/6-%@&v/6-%@(r}/6-%@0/6-%@1/6-%@6/6-AH/6-@f/36-@6-@'6-@r}36-@/ 6-%/ 6-%6-%%%/6-?:<<@<,/"6-8, A"/ 6- Ar}/%@/ 6- A0  0%@ 0 6- A*0 40%@>0r}@H0 6- AR0 \0%@f0p0z09<@,0-@0-r}8,&@08<,-8,%$8,06-8<, A08<,08<,%@0-@8,r}08<,%%@0 0!!8<,%8,%@0   0$02 2r}@26-%@ A2 2%@26-%@ A3%@3%@3r}6-%@ A"3%@,3%@636-%@ A@3%@J3%@T36r}-%@ A^3%@h3%@r3|3@3BBA3$3 Nr}Š*NNumber of objects4N5>NHN55Number of Frames, Frame Size, Number of PlayersRN. (Walking Man)\N r}5,19,2fN. (Tree Trunk)pN 1,52,1zN. (Tree Top)N 1,26,1N. (Truck)N 1,25,2N. (Car)N 1,13,2r}NR RFrame 1, Player 0R770,0,0,0,0,0,0,3,15,29,59,51,7,7,15,252,224,112,48&RFramr}e 2, Player 00R990,0,0,0,0,0,0,1,7,15,31,55,55,7,111,125,248,192,193:RFrame 3, Player 0DR;;0,0,0,0,0,0,3,7,15,31,31,3r}1,31,222,254,251,231,206,15NRFrame 4, Player 0XR==1,3,3,3,1,7,15,31,30,62,62,63,63,60,124,120,112,112,252bRFrame 5,r} Player 0lR::0,0,1,1,1,0,7,31,31,31,31,31,15,15,13,31,123,112,124vRFrame 1, Player 1RHH0,28,62,62,62,28,240,240,240,r}240,251,255,220,192,192,227,118,60,24RFrame 2, Player 1RKK0,0,56,124,124,124,56,224,224,224,224,246,254,192,128,192,2r}24,224,248RFrame 3, Player 1REE0,112,248,248,248,112,192,192,128,128,128,224,224,0,0,0,0,0,128RFrame 4, Player 1r}R55192,224,224,224,192,0,0,0,0,0,0,0,0,0,0,0,0,0,0RFrame 5, Player 1RII0,224,240,240,240,224,128,128,128,128,176,2r}40,0,128,192,128,192,0,0RUUPlayer 2, Tree TrunkVNN2,2,132,128,64,0,149,165,210,211,219,2r}51,255,254,126,126,126,126,126,126VUU126,126,126,126,126,126,126,126,126,122,126,126,126,126,126,126,126,126,126,126V55r}126,126,126,126,126,126,126,126,255,255,219,137"VPlayer 3, Tree Top,VQQ24,24,60,60,126,126,126,255,255,255,255,255,255,r}255,255,255,255,255,255,1266V126,60,60,60,24,24@VTV^VPlayer 2, Truck CabhVBB0,0,0,0,0,1r}5,25,17,17,17,17,17,31,31,255,255,255,255,255,255rV255,255,255,28,28|VPlayer 3, Truck BodyVUU255,255,255,255,255,2r}55,255,255,255,255,255,255,255,255,255,255,255,255,255,255V255,255,255,12,12VVVPlayer 2r}, Car backV..7,9,17,17,17,31,63,127,255,255,255,56,16VPlayer 3, Car frontV22192,64,32,32,16,248,255,255,255,254,25r}5,28,8YY 38646Y0,3,15,31,63,63,127,127Y##0,192,240,248,252,252,254,254Z127,127,127,63r},63,31,15,7 Z%%254,254,254,252,252,248,240,224Z4,31,4,31,4,4,4,4Z48,48,48,63,54,54,54,54(Z3,3,3,3,3,3,3,32Z%r}%255,195,219,219,219,219,219,219