ML }  X c0C)HCCH Mhhݩh `eCDiCD`  RWH   * 1H0芢@) Y0.Ș`i#(PMR\ \b Pgi 0 @ $ ࠮UY   0DDԝLyȀ}iN@ )?HI   Y0`HIJH)* J j *  hJJJ)HJ   h i   }  YS S0 i`σ큅쀄H J3x}j2h)1 |9 ӭ45(420 * (0241өX.`  ? *^)Lkl  }k*PE 5 LN(G 2 gh ` ghgL ( 2 L<(0d( L ^E0O +)$IC} H @8 f e h q  |_ 8cd CDL> CFa M  L< ?^)La`2' }")*F$F$F$F$F$ 5 )ШF/Șa]`efС,L>/A! A^)Za`@ ܬ/^)( }")")`$F$F$F 5$/L /aF@__(LN`ae$$%8(`()` ? % 2L< ?^)^>_f i ;g }Ch) qkl5\   Zc[d 4akl L>@^LZ>_ 3L kJjjj^^ e } fE]_agh`L>:$ȱ$@+[_#{ %  Խji! ai % 2 I   } J C H h  ˰ %  ;  q LZ 2  ,  H `L> ,/ % k/ q Ơ?} ѩ/ | H /L_0?MdLc 3_MfLe N`aL<L>cLdMaNL< }?"(+ըHH`Q R !   $ . FȑF! /GF \H"+0+* }! F sL>cm: J~cTF1F  *c+)5! c (, c)1JJJc(c*d} I ,0  Xi N dF4 5 ,8,0 ʩ0H 2h     i} D JDbbFL>vij`*&!ߍ*@h ] 0 ^0`ߍ c 0l$$%}()()%*&J%H,@hH hH@,h $% 8i8$(%)0hhH ]h`() c 0H c 0 h}`hhh&JJ ](ll  L>0 q/qcdHH 99 H H  I9 9 } NY 2H  >8 d c  qFcdL HII/ Ih8`h`Lcdc`cd`u F }E KE]L</auF a0BF/aɜɛ׽]E ;  qW  KFL FREE SECTORS C}H) *Fh ):FȽ F FCIH' 0 d  i:Fȩ/F.a`CD/08HDIC}IHȰ/F`ȱ$>.+.i ȱ$:刄H !A I Hȱ$*?ȝ 2. ? [_{ ,0}-:) 0$:>WI  IТ,L>H  0hLY k i j`C ?(  0(C.` E *}! .ii  c0N EE 1 EC)0')AY)ע ? 0E088FG \dc}  (HhLcL3 ^J ^ Lrfe 0=ghecfdefa``_Z_0  _ 3LMHFhȑFȽa}F^0 ] FFL3ekfl\cZd[L3 ef7 | 40^ 0 FJJ]1FfȱFeȱF``B!08`]}EE 1 8. *D}iji( AʩLMW!)   XȌVȌY W`VVWH8 h}YaHXY8 XH hHH \h hX` *Hh I8ih( a ( a(!`L\CJfCJ}fCJfCDfC` qV  HII  INYh `h`c)8jHciPdijIjFIjFIjh` qV I }38 8H0 I  ' H L>8jY8j NYY &I &I &IHeH.eIif!}  `!.莼 2Jjj }.b Ȉ!b FG` ɩL> z  "}e H^04 \ Ȍ  8 i h !`I0 `C Y%.`DOS SYS I #} ` kݩ.C/`WV.b۩bѤC9`CLJ G  ,F0(BԝDEI$} V0 : , BLVDE`D1:*AR18hhJ ȱHȱIȱBȱDȱEeeHHLV)%}  1*  ,,p-  0  &  '0   Lv)l, 0  &LD&}1:MEM.SAVE:D1:DUP.SYSTERMUF1:MEM.SAVE:D1:DUP.SYSTERMUF}I)vCD1:DOS.SYS n  * \*`آ R'S )ɀ@  T))% CError lo(}ading MEM.SAV or memory!  0* a*b*c*d* R Hc*JSDc*J-=d* 0b*ʈд =}MyDOS 4)}.53/4- Copyright 1988,˛Disks 1S- D: = D1: = =1-8.Dir of D1:-D8: *. Dir of D:A. *}Disk Directory K. Save MemoryB. Run Cartridge L. Load MemoryC. Copy File(s) M. Run at AddressD. Delete File(s) N. L+}oad MEM.SAVE. Rename File(s) O. Change Config.F. Lock File(s) P. Set DensityG. Unlock File(s) Q. Make DirectoryH. Wr,}ite DOS Files R. Pick DirectoryI. Initialize Disk S. Set RAMdisk #J. Duplicate Disk V. Set Verify Flag  @莻-}( 0  =Select Item ( for menu):@  =ɛL)1L,*L,:W@ ,,L=No such item!.}L), -0{ ПFull directory name?Z"L.Directo3}ry to be used as 'D:'? @ A(5)L.(I: 輿ȱޝL), CInvalid directory!L@( 4}(0Le-File source, destination? '( @C۩wڭ8wܭC B8'0 @(ߍeލd(DЍ( ? 8' 5}B Bȱޙ':>Ȍ(C0J* .B 9'ȱ/.* #,ɛȝ9' ߰ B |?,(0L), 'u6}t(9'3?&' .'Ƚ9'?&'  .و'Q?''(#( = =-->' =Q7} =YR_o (J(  0?B݋''BJ)`''utz0( ?(L|0L),L@nDisk to FORMAT: 8}A B(UTލ1 =(Press for Enhanced Dns)Type to Format Drive 1: =AIYZNj[R VL@L)9},D1:DUP.SYSDrive to write DOS files to? AH1:*J)2I) Z B hpI) ?<2UT:}C٩vة۩.کL;Source, Destination (Sectors)? A)((8'( A)((((( @(0% =Insert b;}oth disks, type = B( A((/( DB(( CDrives not compatible!J(j(8'Hh''<}h(ɛy CInvalid options! N@-&& N@)׍&&(&&&۩ک&&&&8* 84&&&& 848=}*8(ܭ(ݥwC, CNot enough memory! ک&&`(Mh  & >L@&i &&>}&&mm   >  &((&թԥԍ(Ս(((( ( ((Cw((?}ԍ((,(0"( (( >m(m( & &("L),  ( BL4,(, =Insert DESTIN@}ATION disk, press =Nͻ I) b( 0J) @((ԭ(խ( ( (((L4Drive, new density: A}A8'ɛ CDrive unchanged.(ު90٨Ȍ(SD  qBL)xԌҭHӭ@@ ʎӆ@B}ӭ@@ :  $ӹ@hөԥX` Aˠ =RAM disk present? =NL08 =xlon C}or E type RAMdisk? =Aό  L   M   A1| =6: ' =No extra memory available!L08L7D} & & & =Use default config for 0)ȩ = =K? =NL 8 =Size(K)? ? N@FjFjFjFjE}: =Page sequence? ? P@o* =RAM disk drive no? = 09) `9 - 9**H***) 9 Ȋ)h9 F}@@ H'h(#''/'(ɛ ? P@(@: 3 ʽ' L 8 =Duplicated sequence number!LG}7 =Wrong number of entries!L7K큅쀄 =Verify WRITEsH}? ; =Number of File Buffers? ? N@  6 Lv),R( 4;L),Drive number or : =ɛLP99L50Ȍ(I} =Remove drive? =Y =Is drive configurable? =YЂ =High capacity drive? =Yy =Is drive double sided? =YJ} *; =Tracks/side? ? N@#0M P( *; =Step rate? =4/ *; 4;L), =Drive size (in sectors)? ? N@K}H(h 7;L),RAM disk drive no? 8L),Verify WRITEs? ;L), =WNPp`(`(  LqBSAVE:filename,stL}art,end(,init(,run)) @TUH P@Cp` ?< P@؆8օڊ CInvalid START-END range!۩ P@ M} P@ hԄՠAλȌZ B04*  0$ڍXۍY֍T׍U,0LCL C HCL@ֆ׌`Load MEN}M.SAV from what file? 0#L),L@Load from what file?) @TU&̩Z B &0&-&а&𨭻INO}IZ'RV0II CNO CARTRIDGE!Ԇխ  )L>Run from what address? ?ɛP} P@ CAddress must be 1-4 hex digits! BHILV {=`hh =HH` =0{a HɛQ} {= {=h` {=L), = = pHH =hh`K: p `(((( i ɀ((L@(`(BD(0>HHR}''>I>U>I>ɛ(ɛ (>(`͈>DH(`(HI`(k5 = =( 5B( (>@S}A (J B0}((HHIIDDEE B @(CɈP(# B = =( 5BL'?(B>>((ڤ ܝHT}ݝI VL>L@(" B !B I)  B(L& R XY( @&:0H&Ϳ((&U} ( .( & ( .(ʩ(`ލD&ߍEBIʎH( V0`ԩ ؠA@ȱB@ȱ)C@ V}CError -- 128&`$8f cAԄձG/ $<68i/(Ԧ`H&եԦ&&eԅheԅԊe(iLZ@&&W}&&ԅLZ@B ? cA?*(ɛ:./2SX(0ȱ/.ɛ(ލ8'ި0X}#:Ȱ :ފ :ȱ: : sAD sAޥ`(eޅީe߅`(` @LA @TUȪ: CFile name noY}t allowed!: )  h( >0+L TUD CNot a disk file!(0` =Insert SOURCE disk, press Z} =,(pӮ(A(O aB qBaB`1(L$ b(de BJKO [}L@O` B((*(((`ȱޙ((:>Ȍ(`D:`OS.SYS,DOS.SYShh =L),  VLI /C /C\},pLhL~F#Խ٩Յ׆  LC`David R. Eichel rel.ver.1/1/90OS.SYShh =L),  VLI /C /CS@@E B8HITDAE VqPA, BDAEHI V `qLA0 BDA^}EHI V` BDAEHI V) A AA̽BͽCνD I@q̽PAqL̩u̩̭_} ACA  `xԌԄӑ ؅ө@X`)`L ̛Highspeed SIO patch V1`}.12(c) 2008 by Matthias ReichlOS already patchedincompatible OSpatching OS1a}  `L̥AHA(̠ H̙ 0 E ̭ L̩ 2@ +A !( ̩S@b}L̢Ḫ̠h hAL>?@  9xBmi:;̅: 8 < =;: = =6A!@ *c}H$ ;ɡɢ(:PRW ;:@(ҩ4ө05ҩ:23 4(ҢA $: l$:Pҩ8d}234 5 ,P ? bΤ08LP9 (:L̩BҤ0ȌX`#ҍ ҩЍұ21 2  e}35451 ϭ)`1 Α2 *3545 1g`ҩ<Ӡ \ˍ&΍'` nΩ .`jj)?j)f} pΩҍ ҩ< ACE,,,,0;L͠0`ҥҦ; bΠ0Lͩ ,ߍҩҭҍ ) `,g}ҩЍҊ e1i1`h}Hias 1.12 080902h8s9Ȏ$?%?"^έ!͠ͅȱ̠ͅEL9%?˅Έ˅͠?͘ ? ? ?? L8j}˭̠~?ˈiͥiΠ͈8ȥ͍ͥ!΍"ii $9 Jq9 9 ,9 9 P9 9ˈk}ҩҩҠ 9 Ҡ<`DEHBLVҠźScreen Accelerator Wedge v1.2JH 17-Nov-90 by Doug Wokounl}E:??WrUS)} Li@`]^_T ^ &_ &_e^_eU_eX^_eY_^Uc^_^]Im}^`` i`8n}i`8; Go-Go Garbage Truck ; by Bill Kendrick ; For William; http://www.newbreedsoftware.com/; 2009.Sep.12 - 20p}09.Sep.13; GlobalsCard SC,DL ;Screen and display listByte Pointer SCMem ;Screen as a pointerByte Array Buf(3092) ;Place w}|| HERE BE CLOUDS    r}  s}   |     t}    |    | etc.   |   ?acbbbbbbbbbabcbbbbbbbbbcbbabbcbbbbbbbcbbbbbbbbbbcbbbbbbbcbbbCDEbbbbcbbbbbbbbbcbbb\]^bbbbcbbbbbbv}bbbcbbbbbbbbbbbcbbbbbbbbbcbbbbbbbbijkuvwbbbcbbijkbbblmnxyzdlmnopq{|}efgfhopquvwijkbbbcbbuvwb}for charset and PMgfx to liveCard CHSet,Sprites ;Charset and PMgfxByte Array Truck(294) ;Data for truck (and 2nd wheels anix}m)Byte Array Road(492) ;Data for 3 sidewalk framesBYTE DLICOL ;Var for DLI to tweak as it runs each frameByte STICK0=632 ;y}JoystickByte CONSOL=53279 ;Console keys (START=quit; ironic!)Byte CurCan,CurTruck,CanHeight ;Current can, which can we WANTz}, and cur can's Y posCard WhichCan ;Pointer to can art, for re-blitting to PMgfx (remember, can't vert scroll em!)Byte CanX{} ;X position of canByte Score ;ScoreByte SkyCol,Brite,Ground,Sidewalk ;Colors, for day/night anim (used by DLI)BYTE RANDO|}fffffff>`<|fl0fF68of;p88pf<``nf>ff~fff~~f<flxxlf`````~cwkccfv~~nf}(*D @@@@ (x8@}D2@ (H <~~~<@@@@@@@@?@TTTTTTx`x`~** }hh ~ <~~<?? ** UUEEEEU@PPPTTUUUAUUUA}AUTUUAUUUTUQQQQUUTTPPP@@<<AA<<@6nUUUUU@PTTUUUUUUUAAUTUUUUUUTUUUUU}TTP@8x8QQUUTTPPP@@<<AA<<@6nUUUUU@PTTUUUUUUUAAUTUUUUUUTUUUUUgh--MUPFACDCCCKUUCHCHQXYCCSSTIRGOCOUOCOXYXYRDODYXDDDGOQLML}!) ? BPV@@ Bd @ @ @ @@@IK}LBPVBq@ Ah@@@C@@@@C@u} @C!A"TAA#A$%A&`AA'AA(lA)*+,@"P-.@/}0@3SAVE"D:FONT3.BAS":RUN B<;@%,;@,;@,;@",;@,\6.hhhh}hΠΑ`}6-+F:A,&@,$AV+@(@ (@FONT 3J(@% } \A@0nA@6-F:A`,%F:Aa,$AV%@$6-+F:A},&@,$AV8%@@L%@@`-@t-@A$@%}  >>6-?:C: hhhhh͢ˑ͈`,<BsD<,>>6-?:C: hhhhh͢ˑ͈`,<Bs}D<, 6-6.6.>@@K:;@,;@,9@d,9@d,9@d,}9@d,9@d,-@@d 68,-!68,-068,-?68,-N68,-R }^6-@j6-v6-@6-@2 +76-F:A`,%F:Aa,$AV%@IAR@P(}}b@t@@9A @A@dA@& A)%@}@=%@@Q%@@e-@yA@d%} -@6@ :}A@d% /AV'AV:@ k-@@9(! #$%&'()*+,-./0123456789:;<=>?K-@@}Y(>:@4,k-@@v(( @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_:-@@d(% }v-@@ ++(#`abcdefghijklmnopqrstuvwxyz{|}~ -(>:,$6-R:,0"@>6-}%@L6-%@X!@5d6-@r6-%@~!@ 6-@6-u"@6-&@}+6-&@7 @C6-@5Q6-&@] @i6-@ u6-A'Q"@6-%@+6-%}@27!@ C6-@Q6-&A(Q"@6-&@+6-&@27 @C6-@ Q6-%A(}] 1-(-#( )-/(K6-&+@2$+!A$,,]AY@4]-@ @!(>:},3-@)@?(>:,Q-@8@](>:,J-AV'AV%+@$+!@c,,JF:Ad,AU}A)-@")(>:@I%+",,T:,@ f -(>:,#AY7-}@C-Q(++++++++f6-F:%$@%,7&A(%6-&A(1-7( 7&@d}%6-&@d1-@7(!7&@2%6-&@21-@7("7&@%6-&@}1-@7(#7&@%6-&@1-@7($7&@%6-&@1-@}7(%7&@%6-&@1-@7(&7&@%6-&@1-@7(' }AY@4%6-16-91M-@z67%@<%@,.>:F:%$@%,,~ 6-}( -(>:, 6-R:,/6-T:,9 @P6-%+!@* @* @,&+!@* @*!},)aI6-%+"@)"@ )"@,&+"@)"@)"@,U a6-*!@6-@}-= 1*"%6-@C1"@C=6-Aq."6-/( 6-F:Ad,AU( A!0}3 -(+-( !-'(--3(1 @@2!6-F:Ad,"AU!$3"A56-@4}"A46-@5"AC6-@6"AB6-@7"@6-8$# A})@#6.>:,F 4P-@B67%@,.>:F:%$@%,,F i 4D6-%-@}H67%@,.>:F:%$@%,,L i6-?:C:,<%$@:F:%}$@%,,F c6-?:C:,<%$@}:F:%$@%,,F Z-@%$@%AU&@:7%@<%@,, 4+ 6- 41}6- 426- 4-@B67%@,.>:F:%$@%,,F Z-@z%$@}%@:7@&,,~ 6- 4N-@B67%@,.>:F:%$@%,,F Z-@%}$@%F:BsD%$@%, 4N 6-4A4SA4LA04?A} 1 4} @ ")@."A%1%4A0! 4R6-@"P! A1! 46-@}! A1K @ L 6-AY@4/-@D6-F:%$@%,P6-d67%@,.>:},6-@:7%@<%@,,M3&A(%6-&A(36-%@N3&@d%6-&@d36-}%@O3&@2%6-&@236-%@P3&@%6-&@36-%@Q3&@}%6-&@36-%@R3&@%6-&@36-%@2S3&@%6-&@}36-%@dT3&@%6-&@36-%A(U5%$@% +AY@45 @ Vu}AVA$2(}Save which font? (1/2/)< @I)@W6-&@Hu @)!@@W 6-"}@6-Xh(Save as: @'6.D:667@,.@ A K@h@@Y;(F}ile by that name!%(save1(rename;(exitZF A)@(6-&@HF )!@A[}"@A\"@`c1( Saving Font @%+", as ...<@F @c@@}a?AY)-A#;*@F:%,? ej@ AY@4#(-(Done.J}-@6@f2@P@j f$ @)@$ @j|AVA$9(}Loa}d to which font set? (1/2/)C @P)@^6-&@H| @)!@@k 6-"@6-lH} (Load: @$6.D:367@,.= @H@m @@2ARFAS}'AVXAVjAW@|AP@6-?:C:hhhLV,<@,nb( ( ((Done.!@}A@@K:K @X)@b @ +AR@&(}8@}J@@9\A @nA@dA00((Ԡ󺠠(} pick up''( drop (picked up chr.)!!( drop in inverse**("  drop in horizon}tal flip(((  drop in vertical flip(((  drop in vertical flip((( clear 'pick up' mem}ory""( undo last change''( change chr. to normal ( see/edit set 1 ( } see/edit set 2( save a set( load a set( reset(   reset}""( see command menu$$( rotate & drop chr.o-@#)(Press a key...3 A @)@}R-@o((Editing commands:!!( push line right ( }̮ pull line left!!( push chr. right ( pull chr. left ( push chr. down(} ̮pull chr. up( inverse line( inverse chr.(̮ clear chr.( ̮ } clear line//(' exit chr.edit(with no change),,($ exit chr.edit(with change)J-@#})(Press a key...3 A @)@J @4A -(>:, @G()@16.>:,A4@54} A"6L 41@%-1(>:,=-@D( L17H 41%-},(8-@@(>:,H18o 4AY/-5(I-@W1@c-}k(>:,o 9= 4-@#(+1=AY@4:p 4AY1-@}?1K-@S(>:,W i-p(;> 4-@$(,1>AY@}4<0 4~-$(++++++++06-@C=a 4})@$"A%8-@D-Q(}++++++++U a6-@C>[ 4+AY1-@91?-O(>:A&,S [1?k 4}*AY1-@E-@M1S-c(>:A&,g k @34+)4*#AY}@4+4*31An 4>AY1-@?1@K-W(>:,c-@j}( n Bj 4<AY1-@?1K-R(^-@f(>:,j C+4}>)4<1+AY@4G$yAY-#(>:,7-@C6-O6-AVc-}@q6-'@y1!A(6-%9 %$@% /AY@49 @ +}AR@&(}8@J@@9\A @nA@dA@} m@ A0<@@D:NAMEP-@@ ])@i(>:,m  ]@} @;@@D:*.*E A0 Q6-]6-@ c@-()6-%@5}"@#A6-@O6-%@ c!@ A0 A0 J-@#)(Press a key...3 @@)@}J @ L-@#5(Press a key to continue...? A0L)@ T-@2(}>6-J6-@T A0 d6-!AY5-@A-O(+++}+++++d6-F:%$@%, 7&A(%6-&A(1-7( 7&@d%6-&@d1-@}7( 7&@2%6-&@21-@7( 7&@%6-&@1-@7(! }7&@%6-&@1-@7(" 7&@%6-&@1-@7(# 7&@}%6-&@1-@7($ 7&@%6-&@1-@7(% r 6-6-'}1;-@h67%@<%@,.>:F:%$@%,,l r6-& m-@#6-/6-AV}C-@Q6-'@Y1e"Aqm6-%' ) %%+$@,%+@&,) * AY@4} @ N\ +@P(@5 press to keep font in mem-16 and mem-8.\6-@!N] B@}8@@K:E)@Q"@']6-"N@$ D:FONT3.BAS B@m)6^^<s3>00x|73>00x`c6<9c` 33c366fffg~33>00xgfffff<}11111{!!\]_\ED!EOHI B V`}   } TURBO-BASIC XL 1.5 (c) 1985 Frank Ostrowski!  ӥL]""$$ (p}%J[WܠjeC /D%Zub2gTSt$8®݊Ò2% 5R}Ţtd.’$3@X7t5w5$?## $#L+D:*.*S:C:P:$#.#) `:#(6ENeU\l؏&/ؕ؄sأ$}LENeU\lأ$8آǔƐƉƐƇ4cY%٦rULۉCۄړp^gyض%iwܸJڅ*ܣ$ڭڞجئأأ}$ ,(""(222000000..222222222222222222222222222222**22*22(222(2222222222 ,(""(}0000000--**2*(22(2222222 V`hh@,lHH$HHHHHHӍl"}H$HHl $`GHFH\` ` 4ӭ l 4Lq ӠԪӅԆL} Ӡ L( }) ` b% +L:#HH 0 HHLj%ӥHlL{ee 8eee}eӦee褢%ƚƜ`88夅奅8}夕奕Ӡȱȱȱ㦢`L+`8` .E)))8@8e0 }*څۅ܅݅ޅ߄ԠF0y"ޥy"ݥy"ܥy"ۥy"ڥy"و0ǠF0y"ݥy"ܥy"ۥy"ڥy"٥y"؈}0ǠF0y"ܥy"ۥy"ڥy"٥y"إy"׈0ǠF0y"ۥy"ڥy"٥y"إy"ץy"ֈ0}ǠF0y"ڥy"٥y"إy"ץy"֥y"Ո0L-`8`E)))8i@0 *ڄԠ}"("!""" "L**""""""&О"("!""}" "L**""""""&О"("!""" "L**}""""""&О"("!""" "L**""""}""&О"("!""" "L**""""""&Оd}"("!""" "L**""""""&ОL-6"e"}"e""e""e""e""i""}"""}"""}"""}"""}"""}""ǭ"m"""m"}""m"""m"""m"""m"""}"""}"""}"""}"""}"""}""ǥՅօׅ؅مԅՅօ}ׅ؅`` ` ` `80 `ԥՅ +.JJJJ)iFiFi1FicFi'ȐȦoFiU}ȐFiiFi#iFiGi Fii@F iiFiiciՊFigi'iՊօשBL-`I}))83Ԥԥդե֤֥פץؤإ٤L,K6"ХL--L--L-}-E0:e٥eإeץe֥eՐ؅٥ׅإօץՅ֩L-8٥إץ֥հ'I8}م٘؅ؘׅטօ֘ՅL-ؤm\G0Q@Ն֩م؅2եمֆשم"ե؅֥م׆ةեׅ֥}؅ץم؆لԘ)q +` . |. &7i |. ,%!L?.`刱䈱㈱∱}ሱ`ԅՅօׅ؅م`ԍՍ֍׍؍ٍ`ԍՍ֍׍؍ٍ`L.L. Խսֽ}׽ؽ` L%/`ӽޕ &ԅ)@إ)JJJe)e - M} 1. &Je0F 2 . /L(8`@ԠՈքׄ؄` . |. , . . |. , #/L(8`0 I@ԥ)} 2f / . & r 1. #/ &?P , .Iiԩ +)ԅ ,ӽޕL(`8`$})Ԧ61718191:1;1 (ť)8@0$Յ)e)e -F . / , . &1 1.} #/ &F I`U9>`D'RFuCU?b9dYdg@W2@?tS)%)@0)%ԅԢ / . &G } 1.Ӱ6 #/ &.ӽߕ ,ԅԥ B1 (`8``0?i? . . / , #/ &ԍՍ}֍׍؍ٍ . . ( / , O2 / ,0 .JeF 2`L+) .e٥eإeץe֥e}Պi؊؅٥ׅإօץՅֆե1ԥ'JffffJffffJffffJffffم`ԩ&&&&*&&&&*&&&&*&}&&&*`Pi`)JJJeԅԘ)Peԅ`եԆ8@EB)JJJeԅԥ)PeԅԘ)3eԅԽ3eՅ՘)JJJ}3}}3`)JJJeԅԥ)PeԅԹ3eԅԹ3eՅդЧ` 0@P`'Nu pX@(#d,X L(  兢}0襙 bɥ⥋㩀 50ɥ0DȱȱȄ   ik#ZMkVgğe拰ㅋ }⅊0 eee拰 L f5дƨħ 4LY4 f5К,樥ŧH 4h h5L4樤ܱ.* O %30 }  5Ԅ +(fԤԈ`ř嚰Ԥ`ڥۥड़0-԰eڅڐۈ0eeL+58`  }O#`,#5  6`]5 6DE 68DHEIHI V0$ 6Sл B } V,# 6` $#LllBHI V0HH V0Ԩh``{a$%Ȏ$$xө$Ѝ$ ` } `@X a Ӆʢ ʎD  _ɠ %` ɩHH `өL: g% D}:AUTORUN.BASөjJHH`ՠԢӱԙ!ӹ!`֝DEIHB V0Y|ڝDa۝E}օܥׅݥܝHݝI V0+Ӡڑڑ0`l `  䅠 _ɠԐ}e拢 &L &Lħ © ¥4 䥝ň剰' k ɀ8@4= LY ĩ`OJ ]J?L} KԪȱLRHHצ R, hhLRHHHHHH /0ȑȑޠhhhhh}h`HHHHHHHHHH $H bɐhȥLHhhhhLň剰)}i桰` )``L(兢ħ #$ x Hҩ h$襚ҥ ԝ`} UV #T` ` `,H ¥ȍ` JKhLŢ  #)I L ¤Ȣ`L¦ ¦ Lĩ} ½J*K+ $LąLĩ …L~ …`H Ġh é`,H hH Ġ  ĭ 8}}} L n [h`LkL © 8倝偝 Ġ  ĥ󥃅  Lĩ LH} éLH#h ĩ`H hKJ L+ , H hHHħ s hKhJ  Lĩ# qL } ŘL ũ& QŽLM " ĽNL  ĥԝL՝M  ĥԝN%LV  ¤ħ` Ťħ` ƪ Ċ }Ťħ` ¢`届 x݅ L ĽCӠɀ L]Ɉ L] Ln LŠI}HEDBL$HH hh +L `ħ LĢl ¦`YDAER ԅՅ֦}󅗄`L+ ¢p 0 Hp hɈL` ,#,$,!Lé ,H ĥDEԝH՝Ih L}©L $`L© , k ĩԅ  + ĥ 夨ħ`2ƪƪ ! A!Ƚa!Ƚ!Ƚ!Ƚ!Ƚ!}``氤hhL1@$ƪư 0 0 n$P`L+FҐ֥װ綾إٰو LǠFf}ؐ ee&ee* &eeeԪeըee$.ƪ@!Ƚ`!Ƚ!Ƚ!Ƚ!Ƚ!`檦}!!!!`!@!^!` Ȅ 8 n奱 ٥Lǥ֤צưĘ=ŗ78֪א&  } eԥe$`L: L ԅՅօׄ 1פ& ٤ţĢԅeՅe8包卅 ]&!} 8Ԩժ%אְ`ֆL夨ħ` FҰg8&0ei֥i0Tׅiإi0BJe؅eم0&f"}fff&0 &0 eeL+օפإ颎 %8包ԥ卅 L ɥ #}ȱъŠe拰8``,ªȱȱI ѝ3ȥLɥHHO]$}  ȥe暰Х ȥL+ʅȱhh`Lħ OԪȱԨ``L :0%} `L(奷 bɥ󥋅ȱȱȱȄ#鈄0B8eeŶ&}ɛ,@LBˤ,ɛ`L?± ˤ樱f Oƨ x݅ + ~ [ˠ O樥0# +  L˥`'}LL :ɛ,$PH h $P润䧰 ʐLʦ䧐 +` ʐL3LBˢ(}ԝD՝E֝HםI L 兢L]& 兢L% ,L6 ,L6 &L6 (L6妪@!I@!` ؐb`P KW ؐRB ؐ)}=;G ؐ4@ ;+ƪƪ@!=A! (ƪƪ@!A! ƪ@! ,@@檦@!`!!!!!!`ƪ@! ǩjҤ*} /L.٤ƪƪ@!@!, 舽`!`!!ـ!!٠!!!!!`@!jI*` . ֪ (+}ϰ`(8` ֤ׅԄ +҅L: Lyƪ8吪周Ly sũ + ŐL Ly sŠԄ h L},} L}٩    e쪽pLyL( + ڥHJJJJ h) 0:i`  ک; n +ȱ)ȥ%-}ݓ Lh ԍՅԄׅ֩өL:ƪ?Ԣ )ɠ )  -L &Lڦ@!)@!` n)8@.} -L:` / n)8@I= n)8@/ѩ֔$ሄ ,L: + n 0L8 n/} 0L8 n H1L8 n /L8 n /L8 n D/L8 n 1L8LLإL( &)ԥ)8@JjH@0}MC)JJJe)e .F / .P . &F . #/ &L.L(HHHHHH /hhhhhh &1} Y/hԅL:,` L _ܘ%ᨥ%Ly _ܘᨥLy _ܘEᨥELyٚ<|'g 0L`2}!!!!i ` &LإL٥LyɥLzvmZ ƨ!0 4 䦵 ¥ԝD՝E֝Heם3}I Lܤį eį L` x݅ƨLLLܤ ©`#ۢ Lĩ_,ߤ4} ڄ . eڅԥeۅհ"8څ֥ۅא8ܥݰL۠Q%0ԅإՅ٥ަ0%Q% 5}L-ե0LޥڤLyمօנ6&֐ eו`L( Hħ hբՅ `ޥԢ `ޥՅ֠6}&&֐eܥeېڈ 7 \ 7 j N \ N j$0!ee80å/8ܥ۰uڕ07}eUiV`TUV`8UV`eTi`8TȢ` $L„')Q ȱ8 e8}新`8`L齀).Q Ӱȱ8e新 O :L䅫# *$Ŭ9} Ʃ HL"䥫ș L` Ml/#樱0ZS'`ȱȱȱȱȱȱȄ`ȱօȘuԩׅu՘e֨҄`:}I 屝Ҡȱȱȱȱȱ` n$҅J?eԨe` L 兙 兛 n %3 Ԥ` ҩ,;} , , L檤 ٙ!ؙ!י!֙!ՙ`!ԙ@!ә !ҙ!` 䤪ƪ!ٹ!ع!׹!ֹ`!չ@!Թ !ӹ!`ƪ!!<}!㹁!a!A!Lp ґȥӑȥԑȥՑȥ֑ȥבȥؑȥّ` ***j)e)e`ʭȅiȅ=}iȅȩȩ Lfإ  4  \ +] ¥򄟄>}   넨ɛ$0L祔 Z f0#ڠ쩀 ߩ6ei$0 녖چ + !5?}ɛȑ @膔7 ɛ 襔!ɛL! _ɩ8$IȢ %e拢 @} &!$P* &8孨客 "&$ 1L~ L~ &L _ɰe拢 &L~ +0 %30Ԅ A}L 9:枢0 O L :H9Hhh tLHH`hB}hLCL馩`ʆLC枢0ְşLC`A枢Ɣ!L!LC}!T 򈩛LQLD ijq ߰,iŰD VD8` 覲`8` 넬 S( +饰D}0 S0:$$ p8`$p (ȩ@҅ҥ򄬤 ߰ A L8򨢄 %Ӥ򈦬ʽ ʽ % E}+HH 屝EҨhh$P0Ƭ 襯I `_A[`8`80 &ՈԅF}` 넬$ +  + h갳 h) + , 褔ԙ!` "8` 襔 ɛ "ȱ"G}嫤!`! `) ɛ%)a{)_0:A[_դ`RE͕DATINPUԑCOLOҝLISԖENTEҚLEԛIƜFOH}NEXԑGOTϑGO TϑGOSU½TRAАBYŐCONԞCO͟CLOSŐCLҐDEǞDI͐ENĐNEנOPEΖLOAĖSAVŢSTATUӣNOTPOINԡXIϤOΒPOKťPRINԐRAęREAI}ĨRESTORŐRETURΩRUΐSTOАPOХGEԫPUԑGRAPHICӒPLOԒPOSITIOΐDOӒDRAWTϓSETCOLOҬLOCATŔSOUNĦLPRINԐCSAVŐCLOAĚERROR- J}DPOKœMOVœ-MOVŪ*ƐREPEAԑUNTȊWHILŐWENĐELSŐENDIBPUBGEԒFILLTϐDϐLOOШEXIDIҖLOC˖UNLOC˖RENAMŖDELETőPAUSŖTIK}ME$PROøEXEÐENDPROÑFCOLOҪ*̕-RENU͒DEDUMЪTRACTEXԖBLOAĖBRUθGO*’PAINԟCLӔDSOUNCIRCLū%PUԘ%GEԚGL}OTGOSUTSTETHEΣ<<>ުNOOANĨ<<>STRCHRUSASVALEADATCOPEESIRNFREXLOCLOSQSGABINM}PADDLSTICPTRISTRIDPEE˦INSTINKEYEXOHEXDEDIFRATIMETIMMOEXERNRANTRUN%%%%GOUINSTERER+,%5N}&6(+8,<Xk`fghilm^deDѳHc?,Ќ,е,Y_Ҳ+7,/0O}1 2!3"4Ɛ"-"."-؂ٿ֐ːP}ĐאŐbj+9,+;,ʐͭQ}ͭ@ABC\=>[<+:е<,&%rvnnxc<\R}-78s_XV+@D&0d*"'2GJh NS}Rl~&2 +饰(+VWZ ]a8`L`  ¤ħ.H h L5 䄡 T} 䅭 bɠ04Ů .ŭ%) e拰 ĩ L+Ư0 LeU}`毤Hɛ) h`  L ȱ R @ʆ ȱȄ Iğ` :62T F :V}7 8 Lbԩ- L 8 8,I ɨ 8L.UH `ƨh $ %3   + \L L 8󅯩" W} 8" ©" Ư" L8q :Z#]abj(=) W같  L樤ħ`hh`H YhZ X}L<>EO ƹƹ0`H f5h`I&` =? FQA` L񄳱ȱI 䦐Y}Ħ ąŅ T k /䧰 k ,Ǡ ĩJH ThĥȑĥȑĦʊȑ`HHąŅZ}H h hhhh ȱIELZ L`ȱI Hȱȱȱȱȱ [}, h @ $L+L.*ȱȱȱȱȱjEE `EjI `e`ħ ¥\}0 ` Lk 䦪`! 䧰L A@L `I&`L ©؅ L.]}0`STOPPED륺 bɠhhL :ʅ` k %3Hƹ h5h`hbjH h #^}ԤLQ #LLei  `LԑȥՑȥ֑ȥבȥؑȥّ``䈥剰_}#)iiLɠL4űI&`048ץğ=ȱȄ `}`L  L0e拠0ȱȄL  䦪`!' >?L (<ж`!  $Л +`,LőŐ78Ƒ8 Ƒ`8` - PѠb}`,,L L PQ 8,L ȱI ѝߠȱ`ԩc},L E  $EL+L],,,؍ 0âLɀL ©7 F󦹩 RbL g d}0g `Ո V fL{Ն + +􅕄L AT LINE?BLOAMEVALU>#VAR$LE?DAT>3276INPUDISTACOVERFLO?LIN?e}FOTOO LON?DE?GOSUGARBAG?CHMEͣ?LOA?NES?WHIL?REPEA?D?EXIXPRO?EXE?PRO?IS OPE?DEWR ONLCMNOT OPEΣRD ONLEOTf}RUNTIMEOUNA!FRAMCURSO!OVERRUCHKSUDONMODNOT IMPRA͠D?>#FILEDSK FULFATAL I/FILENAMPOINLOCKEDCM>DIq}F#DOS SYSF6'DUP SYSF ]HISION COMFiHYPERE COMFoGOGOGARBACTFqMOCKUP TXTFuTRUCK DATF |GARB FNTF\FONT3 BASFTBASIC COMFROAD DATFIACTRUN ACTFGOGOGARBBAKFEBUILD ACTf?GOGOGARBAR0?FILPOIN?APPNBAD SECTORӥHՄ +h & .hԩ + ,҅L: ƪn (@Մ$ 0` 0r}` 0LoH - . /h &@Յ՘JJJJ X) 0:i`AVC2 sŠ 5  <)  <s} L L + e +e`e`&&&&&&eee` &t}&eee&*`` 兙 䦪!0 4 ۄܱ **m ݤܱEۅڦڱ= u} ܥeƥiեLN@ ` **)]` 00`` ( ((((((((8v}`W)ߥ & &e &߽řِ׼JJJJ&eXޥeYߥ䥛 9 FfЎᰈ w} `  M 8*` 兙 󥐅i祣L{ &Lx}  0 & L ȑ & L; # )ȱ L y})ȱ) )ȱ 8ƣŐő0eސ`ƙ8ް`)ȱJJJ`z}``=`]``` E߭H Ġ} hL±&Lv`[  ȱ R] {} L L  䅠 bɰhhğȱȄ L l"0e拱LjLx`[  ȱ R] hM=53770 ;POKEY's random # regBYTE SIZEP0=$D008, ;Access to PMG sizes SIZEP1=$D009, SIZEP2=$D00A, SIZEP3=$D00}}B, SIZEM=$D00C, HPOS0=$D000, ;Access to PMG positions HPOS1=$D001, HPOS2=$D002, HPOS3=$D003, HP~}OSM0=$D004, HPOSM1=$D005, HPOSM2=$D006, HPOSM3=$D007, PCOLR0=704, ;Access to PMG colors PCOLR1=705,} PCOLR2=706, PCOLR3=707, GRACTL=53277, ;We'll want DMA PMG bitmaps (vs. solid bit bars) SDMCTL=559, ;We'll} want PMGs on, and double-height PMBASE=54279 ;Need to tell it where our PMG data is!BYTE RTCLOCK = 20 ;Clock for su}n and beep effect regularity; Note: I failed at using a true VBI for stuff, since MoveBlock() and FastMove() borked!!!; St}uff for DLI magic:BYTE VCOUNT = $D40B, ;What scan line we on? WSYNC = $D40A, ;Wait for horiz scan synch NMIE}bbxyzlmndxyz{|}opqefgfh{|}bbijkbbblmnxyzdlmnopq{|}efgfhopquvwijkbbbcbbuvwb2N = $D40E, ;To enable/disable DLI COLPF1 = $D017, ;To tweak sidewalk color reg in GTIA COLPF4 = $D01A ;To tweak} sky color "CARD VDSLST = $200, ;To set the DLI vector OLDVEC ;Keep track of old DLI vector so we can re-set at qu}it; Assembly language!DEFINE PHA = "$48", PLA = "$68", TAX = "$AA", TAY = "$A8", TXA = "$8A",} TYA = "$98", RTI = "$40"; Access to OS's CIO functionProc CIO=$E456(Byte areg,xreg); A very fast memory b}lock move routine by Rick Cortese 1996Proc FastMove(Card Source, Card Dest, Card Size) [ $A0$00$A6$A5$F0$13$B1$A0$91$A2$C8$}B1$A0$91$A2$C8 $D0$F4$E6$A1$E6$A3$CA$D0$ED$A6$A4$F0$14$A5$A4$29 $01$D0$06$B1$A0$91$A2$C8$CA$B1$A0$91$A2$C8$CA$D0$F2 ]R}eturn; Quickly load data from disk to bufferCard Func Burst(Byte chan,mode, Card addr,buflen) Type IOCB=}[Byte id,num,cmd,stat Card badr,padr,blen Byte a1,a2,a3,a4,a5,a6] IOCB Pointer iptr chan==&$0}FBBFFGFVBF}BVFBGFBG}FBGFBGBVG}FGGVBGBVGv7 iptr=$340+(chan LSH 4) iptr.cmd=mode iptr.blen=buflen iptr.badr=addr CIO(0,chan LSH 4)Return(iptr.blen); Our d}isplay list interrupt!PROC DLI() [PHA TYA PHA TXA PHA] WSYNC = 1 IF (VCOUNT<34) THEN ;In the beginning; start w/ }new sky color ;also, re-use sun color as red/pink in truck DLICOL=SkyCol COLPF1 = 68 ELSEIF (VCOUNT<60) THEN } ;A few lines of gradient DLICOL=DLICOL+Brite COLPF4 = DLICOL ELSEIF (VCOUNT<90) THEN ;Sky turns into road } COLPF4 = Ground ELSE ;Road turns into sidewalk! COLPF4 = Sidewalk FI [PLA TAX PLA TAY PLA RTI]Proc SetupDLI(}) NMIEN = $40 ;DISABLE DLI OLDVEC = VDSLST VDSLST = DLI NMIEN = $C0 ;ENABLE DLIReturnProc DisableDLI() NMIEN = $ }; Go-Go Garbage Truck ; by Bill Kendrick ; For William; http://www.newbreedsoftware.com/; 2009.Sep.12 - 20}09.Sep.13; GlobalsCard SC,DL ;Screen and display listByte Pointer SCMem ;Screen as a pointerByte Array Buf(3092) ;Place }for charset and PMgfx to liveCard CHSet,Sprites ;Charset and PMgfxByte Array Truck(294) ;Data for truck (and 2nd wheels ani}m)Byte Array Road(492) ;Data for 3 sidewalk framesBYTE DLICOL ;Var for DLI to tweak as it runs each frameByte STICK0=632 ;}JoystickByte CONSOL=53279 ;Console keys (START=quit; ironic!)Byte CurCan,CurTruck,CanHeight ;Current can, which can we WANT}, and cur can's Y posCard WhichCan ;Pointer to can art, for re-blitting to PMgfx (remember, can't vert scroll em!)Byte CanX} ;X position of canByte Score ;ScoreByte SkyCol,Brite,Ground,Sidewalk ;Colors, for day/night anim (used by DLI)BYTE RANDO}M=53770 ;POKEY's random # regBYTE SIZEP0=$D008, ;Access to PMG sizes SIZEP1=$D009, SIZEP2=$D00A, SIZEP3=$D00}B, SIZEM=$D00C, HPOS0=$D000, ;Access to PMG positions HPOS1=$D001, HPOS2=$D002, HPOS3=$D003, HP}OSM0=$D004, HPOSM1=$D005, HPOSM2=$D006, HPOSM3=$D007, PCOLR0=704, ;Access to PMG colors PCOLR1=705,} PCOLR2=706, PCOLR3=707, GRACTL=53277, ;We'll want DMA PMG bitmaps (vs. solid bit bars) SDMCTL=559, ;We'll}PROC _CPYPRM=*()SET $4EE = _CPYPRM[$85$A0$86$A1$84$A2$18$68$85$84$69$03$A8$68$85$85$69$00$48$98$48$A0$01$B1$84$85$82$C8}$B1$84$85$83$C8$B1$84$A8$B9$A0$00$91$82$88$10$F8$60]PROC _CHGSGN=*()[$85$C0$86$C1$38$A9$00$E5$C0$48$A9$00$E5$C1$AA$68$6}0]PROC _FIXSGN=*()[$86$C2$E0$00$10$03$20 _CHGSGN $85$82$86$83$A5$85$45$C2$85$C2$A6$85$10$09$A5$84$20 _CHGSGN $85$84$86$}85$60]PROC _FIXRES=*()[$A5$86$A6$87$A4$C2$10$03$4C _CHGSGN$60]PROC _MUL=*()SET $4E8 = _MUL[$20 _FIXSGN $A9$00$85$86}$85$87$A5$82$D0$04$A5$83$F0$22$A5$84$D0$04$A5$85$F0$1A$46$85$66$84$90$0D$18$A5$86$65$82$85$86$A5$87$65$83$85$87$06$82$26$}83$38$B0$D6$4C _FIXRES]PROC _DIV=*()SET $4EA = _DIV[$20 _FIXSGN $A9$00$85$86$85$87$85$C1$A9$01$85$C0$A5$82$D0$04$A5$83$}F0$5F$A5$84$D0$04$A5$85$F0$57$A5$82$C5$84$A5$83$E5$85$90$0F$A5$C1$30$0B$06$84$26$85$06$C0$26$C1$38$B0$E7$A5$C0$D0$04$A5$C}1$F0$36$A5$82$D0$04$A5$83$F0$2E$A5$82$C5$84$A5$83$E5$85$90$19$38$A5$82$E5$84$85$82$A5$83$E5$85$85$83$A5$86$05$C0$85$86$A5$}87$05$C1$85$87$46$85$66$84$46$C1$66$C0$38$B0$C2$4C_FIXRES]PROC _MODOP=*()SET $4EC = _MODOP[$20 _DIV $A5$82$A6$83$60]}PROC _RSHOP=*()SET $4E6 = _RSHOP[$A4$84$F0$0A$86$86$46$86$6A$88$D0$FA$A6$86$60]PROC _LSHOP=*()SET $4E4 = _LSHOP[$A4$}84$F0$0A$86$86$0A$26$86$88$D0$FA$A6$86$60]PROC _ERROU=*()[$A9$70$AA$A9$0C$9D$42$03$20$56$E4$8A$38$E9$10$D0$F1$6C$0A$00]}PROC _ERRVEC=*()[_ERROU]PROC _DEVIC=*()[$00]MODULECARD Error=_ERRVECBYTE device=_DEVICPROC _GOCIO=*()[$20$56$E}4$10$1A$C0$88$F0$06$68$68$98$6C _ERRVEC $48$8A$48$4A$4A$4A$4A$AA$A9$01$9D$C0$05$68$AA$68$60]PROC _LODCHN=*()[$C9$08$90$}07$68$68$A9$86$6C _ERRVEC$0A$0A$0A$0A$AA$60]PROC _STONAM=*()[$18$69$01$9D$44$03$98$69$00$9D$45$03$60]PROC _SHFTR=*()}[$48$8A$A8$68$AA$AD _DEVIC $60]PROC _CLREOL=*()[$48$A9$00$85$A5$68$60]PROC _SETEOL=*()[$48$A9$01$85$A5$68$60]PROC} _PRECON=*()[$8A$48$98$AA$68$A0$03$84$A3$A0$FD$60]PROC _DOPRNT=*()[$86$A3$84$A4$20 _LODCHN $A9$00$9D$49$03$A8$B1$A3$F0$}1A$9D$48$03$18$A5$A3$69$01$9D$44$03$A5$A4$69$00$9D$45$03$A9$0B$9D$42$03$20 _GOCIO $A5$A5$F0$12$A9$00$9D$48$03$9D$49$03$A9$}0B$9D$42$03$A9$9B$20 _GOCIO $60]PROC StrC=*(CARD c, s)[$85$D4$86$D5$84$A2$20$AA$D9$20$E6$D8$A0$00$B1$F3$30$06$C8$91$A2$}38$B0$F6$29$7F$C8$91$A2$98$A0$00$91$A2$60]PROC StrB=*(BYTE b CARD s)[$84$A3$48$8A$A8$A2$00$68$4C StrC]PROC StrI=*(INT} i CARD s)[$E0$00$30$03$4C StrC $49$FF$85$A2$8A$49$FF$AA$E6$A2$D0$01$E8$A5$A2$20StrC $A0$00$18$B1$A2$69$01$91$A2$A8$88$}B1$A2$C8$91$A2$88$88$D0$F7$C8$A9$2D$91$A2$60]PROC _DOPRNC=*()[$48$20 _PRECON $20 StrC $68$A2$FD$A0$03$4C _DOPRNT]PRO}C DOPRNI=*()[$48$20 _PRECON $20 StrI $68$A2$FD$A0$03$4C _DOPRNT]PROC PrintCD=*(BYTE d CARD c)[$20 _CLREOL $4C _DOPRNC]}PROC PrintC=*(CARD c)[$20 _SHFTR $4C PrintCD]PROC PrintCDE=*(BYTE d CARD c)[$20 _SETEOL $4C _DOPRNC]PROC PrintCE=*(}CARD c)[$20 _SHFTR $4C PrintCDE]PROC PrintBD=*(BYTE d, b)[$A0$00$4C PrintCD]PROC PrintB=*(BYTE b)[$20 _SHFTR $4C Pri}ntBD]PROC PrintBDE=*(BYTE d, b)[$A0$00$4C PrintCDE]PROC PrintBE=*(BYTE b)[$20 _SHFTR $4C PrintBDE]PROC PrintID=*(B}YTE d INT i)[$20 _CLREOL $4C _DOPRNI]PROC PrintI=*(INT i)[$20 _SHFTR $4C PrintID]PROC PrintIDE=*(BYTE d INT i)[$20 _}SETEOL $4C _DOPRNI]PROC PrintIE=*(INT i)[$20 _SHFTR $4C PrintIDE]PROC PrintD=*(BYTE d CARD s)[$20 _CLREOL $4C _DOPRNT}]PROC Print=*(CARD s)[$20 _SHFTR $4C PrintD]PROC PrintDE=*(BYTE d CARD s)[$20 _SETEOL $4C _DOPRNT]PROC PrintE=*(CA}RD s)[$20 _SHFTR $4C PrintDE]PROC _HEXSTR=*()[$85$84$86$85$A9$FD$85$A2$A9$03$85$A3$A0$00$A9$05$91$A2$C8$A9$24$91$A2$A9}$00$A2$04$06$84$26$85$2A$CA$D0$F8$69$30$C9$3A$90$02$69$06$C8$91$A2$C0$05$D0$E5$60]PROC PrintF=*(CARD s,a,b,c,d,e,f,g)[$}85$82$86$83$84$A2$AD _DEVIC $0A$0A$0A$0A$85$C1$A0$00$84$87$84$C0$B1$82$F0$4C$85$86$E6$C0$F0$46$A4$C0$C4$86$F0$02$B0$3E$B1$}82$C9$25$D0$3E$E6$C0$C8$C4$86$F0$02$B0$35$B1$82$C9$25$F0$2F$C9$45$F0$29$A8$A6$87$E0$0E$B0$D4$B5$A2$48$B5$A3$E8$E8$86$87$AA}$68$C0$43$F0$15$C0$49$F0$34$C0$48$F0$3C$C0$53$F0$3F$38$B0$1D$60$38$B0$B2$A9$9B$A8$A6$C1$A9$00$9D$48$03$9D$49$03$A9$0B$9D$}42$03$98$20 _GOCIO $38$B0$E4$A0$03$84$A3$A0$FD$20 StrC $38$B0$0F$A0$03$84$A3$A0$FD$20 StrI $38$B0$03$20 _HEXSTR $A9$FD$A2$}03$85$84$86$85$A6$C1$A9$00$9D$49$03$A8$B1$84$F0$B5$9D$48$03$18$A5$84$69$01$9D$44$03$A5$85$69$00$9D$45$03$A9$0B$9D$42$03$20}_GOCIO $38$B0$98]PROC PutD=*(BYTE d, c)[$86$A0$20 _LODCHN $A9$00$9D$48$03$9D$49$03$A9$0B$9D$42$03$A5$A0$20 _GOCIO$60]}PROC PutDE=*(BYTE d)[$A2$9B$4C PutD]PROC Put=*(BYTE c)[$AA$AD _DEVIC $4C PutD]PROC PutE=*()[$A9$9B$4C Put]BYTE }FUNC ValB=*(CARD a)CARD FUNC ValC=*(CARD a)INT FUNC ValI=*(CARD a)[$85$A2$86$A3$A9$00$85$A0$85$A1$85$A5$A8$B1$A2$85$A4$C8}$B1$A2$C9$20$F0$F9$C9$2D$D0$0B$C6$A5$C8$C4$A4$F0$02$B0$31$B1$A2$38$E9$30$90$2A$C9$0A$B0$26$48$06$A0$26$A1$A5$A0$A6$A1$0A$2}6$A1$0A$26$A1$18$65$A0$85$A0$8A$65$A1$85$A1$18$68$65$A0$85$A0$90$CD$E6$A1$38$B0$C8$A5$A5$F0$0D$38$A9$00$E5$A0$85$A0$A9$00}$E5$A1$85$A1$60]PROC _DOINPT=*()[$86$A4$84$A5$20 _LODCHN $18$A5$A4$69$01$9D$44$03$A5$A5$69$00$9D$45$03$A5$A3$F0$18$9D$4}8$03$A9$00$9D$49$03$A9$05$9D$42$03$20 _GOCIO $BD$48$03$F0$03$38$E9$01$A0$00$91$A4$A5$A6$F0$07$A5$A4$A6$A5$4C ValC $60]B}YTE FUNC InputBD=*(BYTE d)CARD FUNC InputCD=*(BYTE d)INT FUNC InputID=*(BYTE d)[$48$A9$78$85$A3$A9$01$85$A6$68$A2$FD$A0$0}3$4C _DOINPT]BYTE FUNC InputB=*()CARD FUNC InputC=*()INT FUNC InputI=*()[$AD _DEVIC$4C InputCD]PROC InputMD=*(BYTE d} CARD s BYTE l)[$48$A9$00$85$A6$68$4C _DOINPT]PROC InputSD=*(BYTE d CARD s)[$48$A9$FF$85$A3$68$4C InputMD]PROC InputS}=*(CARD s)[$20 _SHFTR $4C InputSD]CHAR FUNC GetD=*(BYTE d)[$20 _LODCHN $A9$00$9D$48$03$9D$49$03$A9$07$9D$42$03$20 _GOCI}O$85$A0$60]PROC Open=*(BYTE d CARD s BYTE m, a)[$86$A1$20 _LODCHN $A5$A1$20 _STONAM $A5$A3$9D$4A$03$A5$A4$9D$4B$03$A9$}03$9D$42$03$20 _GOCIO $8A$4A$4A$4A$4A$AA$A9$00$9D$C0$05$60]PROC Close=*(BYTE d)[$20 _LODCHN $A9$0C$9D$42$03$20_GOCIO $6}0]PROC XIO=*(BYTE d,z,c,a1,a2 CARD s)[$20 _LODCHN $98$9D$42$03$A5$A3$9D$4A$03$A5$A4$9D$4B$03$A5$A5$A4$A6$20_STONAM $20 }_GOCIO $60]PROC Note=*(BYTE d CARD s, o)[$86$A1$84$A2$20 _LODCHN $A9$26$9D$42$03$20 _GOCIO $A0$00$BD$4C$03$91$A1$BD$4E$}03$91$A3$BD$4D$03$C8$91$A1$60]PROC Point=*(BYTE d CARD s BYTE o)[$86$A1$20 _LODCHN $A5$A1$9D$4C$03$98$9D$4D$03$A5$A3$9D$}4E$03$A9$25$9D$42$03$20 _GOCIO $60]PROC Graphics=*(BYTE m)[$48$A2$60$A9$0C$9D$42$03$20$56$E4$68$9D$4B$03$49$10$09$0C$9D}$4A$03$A9$53$85$A0$A9$3A$85$A1$A9$A0$9D$44$03$A9$00$9D$45$03$A9$03$9D$42$03$20 _GOCIO$60]PROC SetColor=*(BYTE r, h, l)}[$C9$05$B0$13$85$A0$8A$0A$0A$0A$0A$85$A1$98$29$0F$05$A1$A6$A0$9D$C4$02$60]PROC Position=*(CARD x BYTE y)[$85$55$86$56$84}$54$60]PROC Plot=*(CARD x BYTE y)[$20 Position $A9$06$AE$FD$02$4CPutD]PROC DrawTo=*(CARD x BYTE y)[$20 Position $A2$}60$A9$11$9D$42$03$AD$FB$02$8D$FD$02$20 _GOCIO$60]PROC Fill=*(CARD x BYTE y)[$20 Position $A2$60$A9$12$9D$42$03$AD$FB$0}2$8D$FD$02$20 _GOCIO$60]BYTE FUNC Locate=*(CARD x BYTE y)[$20 Position $A9$06$4C GetD]PROC Sound=*(BYTE c, p, d, v)[}$C9$04$B0$25$86$A1$0A$AA$A9$00$8D$08$D2$A9$03$8D$0F$D2$A5$A3$29$0F$85$A3$98$29$0E$0A$0A$0A$0A$05$A3$9D$01$D2$A5$A1$9D$00$D}2$60]PROC SndRst=*()[$A9$00$A2$07$9D$00$D2$CA$10$FA$60]BYTE FUNC Paddle=*(BYTE p)[$29$07$AA$BD$70$02$85$A0$60]BYTE} FUNC PTrig=*(BYTE p)[$29$07$AA$BD$7C$02$85$A0$60]BYTE FUNC Stick=*(BYTE p)[$29$03$AA$BD$78$02$85$A0$60]BYTE FUNC STr}ig=*(BYTE p)[$29$03$AA$BD$84$02$85$A0$60]INT FUNC SCompare=*(CARD s1, s2)[$85$A4$86$A5$84$A2$A0$00$84$A0$84$A1$B1$A4$85}$A6$B1$A2$85$A7$C4$A6$F0$15$C4$A7$F0$11$C8$B1$A4$D1$A2$F0$F1$90$03$E6$A0$60$C6$A0$C6$A1$60$A5$A6$C5$A7$F0$F9$B0$F0$90$F1]}PROC SCopy=*(CARD d, s)[$85$A0$86$A1$84$A2$A0$00$B1$A2$A8$B1$A2$91$A0$C0$00$F0$04$88$38$B0$F4$60]PROC SCopyS=*(CARD d,} s BYTE b, e)[$85$A0$86$A1$84$A2$A0$00$84$A6$B1$A2$C5$A5$B0$02$85$A5$A5$A4$F0$15$C5$A5$F0$02$B0$0F$A4$A4$E6$A4$B1$A2$E6$A6}$A4$A6$91$A0$38$B0$E7$A5$A6$A0$00$91$A0$60]PROC SAssign=*(CARD d, s BYTE b, e)[$85$A0$86$A1$84$A2$A5$A4$F0$3B$C5$A5$F0}$02$B0$35$85$A7$C6$A7$A0$00$84$A8$B1$A0$85$A9$B1$A2$85$AA$A5$A7$C5$A5$B0$15$A5$A8$C5$AA$B0$0F$E6$A8$A4$A8$B1$A2$E6$A7$A4$A}7$91$A0$38$B0$E5$A5$A7$C5$A9$90$04$A0$00$91$A0$60]BYTE FUNC Rand=*(BYTE r)[$85$A2$C6$A2$A9$01$C5$A2$B0$05$38$2A$38$B0$F}7$85$A3$AD$0A$D2$25$A3$C5$A2$F0$04$90$02$B0$F3$85$A0$60]PROC Poke=*(CARD a BYTE v)[$85$A0$86$A1$98$A0$00$91$A0$60]PRO}C PokeC=*(CARD a, v)[$20 Poke $C8$A5$A3$91$A0$60]BYTE FUNC Peek=*(CARD a)CARD FUNC PeekC=*(CARD a)[$85$A2$86$A3$A0$00$B}1$A2$85$A0$C8$B1$A2$85$A1$60]PROC SetBlock=*(CARD a, l, v)[$85$A0$86$A1$84$A2$A0$00$A5$A2$D0$04$A5$A3$F0$16$A5$A4$91$A0}$C8$D0$02$E6$A1$C6$A2$A5$A2$C9$FF$D0$E7$C6$A3$38$B0$E2$60]PROC Zero=*(CARD a, l)[$48$A9$00$85$A4$68$4C SetBlock]PROC} MoveBlock=*(CARD d, s, l)[$85$A0$86$A1$84$A2$A0$00$A5$A4$D0$04$A5$A5$F0$18$B1$A2$91$A0$C8$D0$04$E6$A1$E6$A3$C6$A4$A5$A4$C}9$FF$D0$E5$C6$A5$38$B0$E0$60]MODULE84$A2$A0$00$A5$A4$D0$04$A5$A5$F0$18$B1$A2$91$A0$C8$D0$04$E6$A1$E6$A3$C6$A4$A5$A4$C) want PMGs on, and double-height PMBASE=54279 ;Need to tell it where our PMG data is!BYTE RTCLOCK = 20 ;Clock for su}n and beep effect regularity; Note: I failed at using a true VBI for stuff, since MoveBlock() and FastMove() borked!!!; St}uff for DLI magic:BYTE VCOUNT = $D40B, ;What scan line we on? WSYNC = $D40A, ;Wait for horiz scan synch NMIE}N = $D40E, ;To enable/disable DLI COLPF1 = $D017, ;To tweak sidewalk color reg in GTIA COLPF4 = $D01A ;To tweak} sky color "CARD VDSLST = $200, ;To set the DLI vector OLDVEC ;Keep track of old DLI vector so we can re-set at qu}it; Assembly language!DEFINE PHA = "$48", PLA = "$68", TAX = "$AA", TAY = "$A8", TXA = "$8A",} TYA = "$98", RTI = "$40"; Access to OS's CIO functionProc CIO=$E456(Byte areg,xreg); A very fast memory b}lock move routine by Rick Cortese 1996Proc FastMove(Card Source, Card Dest, Card Size) [ $A0$00$A6$A5$F0$13$B1$A0$91$A2$C8$}B1$A0$91$A2$C8 $D0$F4$E6$A1$E6$A3$CA$D0$ED$A6$A4$F0$14$A5$A4$29 $01$D0$06$B1$A0$91$A2$C8$CA$B1$A0$91$A2$C8$CA$D0$F2 ]R}eturn; Quickly load data from disk to bufferCard Func Burst(Byte chan,mode, Card addr,buflen) Type IOCB=}[Byte id,num,cmd,stat Card badr,padr,blen Byte a1,a2,a3,a4,a5,a6] IOCB Pointer iptr chan==&$0}7 iptr=$340+(chan LSH 4) iptr.cmd=mode iptr.blen=buflen iptr.badr=addr CIO(0,chan LSH 4)Return(iptr.blen); Our d}isplay list interrupt!PROC DLI() [PHA TYA PHA TXA PHA] WSYNC = 1 IF (VCOUNT<34) THEN ;In the beginning; start w/ }new sky color ;also, re-use sun color as red/pink in truck DLICOL=SkyCol COLPF1 = 68 ELSEIF (VCOUNT<60) THEN } ;A few lines of gradient DLICOL=DLICOL+Brite COLPF4 = DLICOL ELSEIF (VCOUNT<90) THEN ;Sky turns into road } COLPF4 = Ground ELSE ;Road turns into sidewalk! COLPF4 = Sidewalk FI [PLA TAX PLA TAY PLA RTI]Proc SetupDLI(}) NMIEN = $40 ;DISABLE DLI OLDVEC = VDSLST VDSLST = DLI NMIEN = $C0 ;ENABLE DLIReturnProc DisableDLI() NMIEN = $}40 ;DISABLE DLI VDSLST = OLDVECReturnCard Func BGet(Byte chan Card addr,len) Card temp temp=Burst(chan,7,addr,len)R}eturn(temp); Load truck artworkProc LoadTruck() Open(1,"D:TRUCK.DAT",4,0) BGet(1,Truck,494) Close(1)Return; Load }sidewalk artworkProc LoadRoad() Byte Y Open(1,"D:ROAD.DAT",4,0) For Y=0 To 12 Do BGet(1,Road+Y*40,40) GetD(1)} Od Close(1)Return;Draw top of truck (but not the wheels)Proc DrawTruckTop() Card Src,Dest Byte Y Src=Truck De}st=SC+(7*40)+7 For Y=0 To 6 Do FastMove(Src,Dest,22) Src=Src+23 Dest=Dest+40 OdReturn;Draw bottom of truck} (on or the other wheel anim. frame)Proc DrawTruck(Byte Wheels) Card Src,Dest Byte Y Src=Truck+(7*23) Dest=SC+(14*40})+7 If ((Wheels&1)=1) Then Src=Src+(3*23) Fi For Y=0 To 2 Do FastMove(Src,Dest,22) Src=Src+23 Dest=Dest}+40 OdReturn;Draw the sidewalk; this needs help...;It kind of coarse-scrolls between flipping frames, but just looks cr}uddyProc DrawRoad(Byte Frame, Byte Off) Card Src,Dest Src=Road+((2-Frame)*4)*40 Dest=SC+(20*40)-(Off*2) FastMove(Src},Dest,120)Return;Load our charset font!Proc LoadFont() Card A CHSet=((Buf/1024)+1)*1024 Close(1) Open(1,"D:GARB.}FNT",4,0) BGet(1,CHSet,1024) Close(1) Poke(756,CHSet/256)Return;Set up routine!;===============Proc Setup() Byte} Y ;Kill sounds & reset regs... just in case SndRst() ;Switch to OS's GRAPHICS 0 mode (40x24 monocolor text) Graphi}cs(0) ;Figure out where current screen mem and display list are located SC=PeekC(88) SCMem=SC DL=PeekC(560) ;Set }some colors (though DLI handle a bunch too!) SetColor(0,0,0) SetColor(1,2,14) SetColor(2,12,10) SetColor(4,7,4) ; }Shrink first couple of "skip 8 scanlines" ;(since I replace first two true lines with tall text, want the bottom to stay on/}40 ;DISABLE DLI VDSLST = OLDVECReturnCard Func BGet(Byte chan Card addr,len) Card temp temp=Burst(chan,7,addr,len)R }eturn(temp); Load truck artworkProc LoadTruck() Open(1,"D:TRUCK.DAT",4,0) BGet(1,Truck,494) Close(1)Return; Load  }sidewalk artworkProc LoadRoad() Byte Y Open(1,"D:ROAD.DAT",4,0) For Y=0 To 12 Do BGet(1,Road+Y*40,40) GetD(1) } Od Close(1)Return;Draw top of truck (but not the wheels)Proc DrawTruckTop() Card Src,Dest Byte Y Src=Truck De}st=SC+(7*40)+7 For Y=0 To 6 Do FastMove(Src,Dest,22) Src=Src+23 Dest=Dest+40 OdReturn;Draw bottom of truck} (on or the other wheel anim. frame)Proc DrawTruck(Byte Wheels) Card Src,Dest Byte Y Src=Truck+(7*23) Dest=SC+(14*40})+7 If ((Wheels&1)=1) Then Src=Src+(3*23) Fi For Y=0 To 2 Do FastMove(Src,Dest,22) Src=Src+23 Dest=Dest}+40 OdReturn;Draw the sidewalk; this needs help...;It kind of coarse-scrolls between flipping frames, but just looks cr}uddyProc DrawRoad(Byte Frame, Byte Off) Card Src,Dest Src=Road+((2-Frame)*4)*40 Dest=SC+(20*40)-(Off*2) FastMove(Src},Dest,120)Return;Load our charset font!Proc LoadFont() Card A CHSet=((Buf/1024)+1)*1024 Close(1) Open(1,"D:GARB.}FNT",4,0) BGet(1,CHSet,1024) Close(1) Poke(756,CHSet/256)Return;Set up routine!;===============Proc Setup() Byte} Y ;Kill sounds & reset regs... just in case SndRst() ;Switch to OS's GRAPHICS 0 mode (40x24 monocolor text) Graphi}cs(0) ;Figure out where current screen mem and display list are located SC=PeekC(88) SCMem=SC DL=PeekC(560) ;Set }some colors (though DLI handle a bunch too!) SetColor(0,0,0) SetColor(1,2,14) SetColor(2,12,10) SetColor(4,7,4) ;}Shrink first couple of "skip 8 scanlines" ;(since I replace first two true lines with tall text, want the bottom to stay on} the TV) Poke(DL,0) Poke(DL+1,0) ; A pair of GR2 lines ; (for sun, score, and cur. objective) Poke(DL+3,7+$C0) } Poke(DL+6,7) ; The rest GR12 lines Poke(DL+7,4) For Y=8 To 16 Do ; (With DLI) Poke(DL+Y,$84) Od For Y=17 To 2}8 Do ; (Without DLI) Poke(DL+Y,4) Od Poke(DL+24,$84) ; (With DLI) ;Load our font! LoadFont() ;Just below font}, use space for sprite gfx Sprites=((Buf/1024)+2)*1024 ;Wipe it (so we don't get garbage floating around; no pun intende}d) Zero(Sprites,1024) ;Tell our gfx chips where to DMA it! PMBASE=Sprites/256 ;Amusing PMG/playfield priority ;pl}us enable "5th player" ;(all four missiles share one color, ;rather than each inheriting their players'... ;I use this }for the exhaust effect) Poke(623,3+16) ;Splat the "current objective" onto the top right ;(we end up replacing what sh }ape the font is, ;rather than changing the tiles; lame, but it works ;and we don't do it very often) Poke(SCMem+17,1) !} Poke(SCMem+37,2) Poke(SCMem+18,3) Poke(SCMem+38,4) ;Garbage cans: SIZEP0=0 ;left half (1x wide) SIZEP1=0 ;right h"}alf (1x wide) SIZEP2=1 ;solid color background (2x wide) ;Clouds SIZEP3=3 ;4x wide HPOS3=200 ;Shove it over to the r#}ight PCOLR3=12 ;Light grey ;Exhaust SIZEM=64+16+4+1 ;all four are 2x wide Poke(711,10) ;Darker grey HPOSM0=70 ;The$}y never move, so set hpos now HPOSM1=74 HPOSM2=78 HPOSM3=82 ;Copy the cloud shape from the font to the cloud PMG ;%}(cloud never moves up/down, so do it once, here) FastMove(ChSet+('t*8),Sprites+896+10,8) ;Enable sprites! GRACTL=3 S&}DMCTL=46 ;Load truck and sidewalk data from disk LoadTruck() LoadRoad() ;Init score Score=0 ;Set color vars fo'}r DLI to use, too SkyCol=112 Ground=8 Sidewalk=12 Brite=2 ;Lastly, activate DLI! SetupDLI()Return; Blit the d(}ata for the garbage can; It's a set of 3 players (sprites),; and you can't move them vertically,; so we need to erase/redr)}aw in diff; parts of the PMG memoryProc DrawCan(Byte H) Byte Y,B ;Just in case it goes too low somehow? If H>80 Then*} H=80 Fi ;Erase a few lines above/below, ;so when we move it up/down it doesn't leave trails! ;(not erasing ENTIRE thi+}ng, because it'd flicker) Zero(Sprites+512+H-3,3) Zero(Sprites+640+H-3,3) Zero(Sprites+768+H-3,3) Zero(Sprites+512+H+,}16,2) Zero(Sprites+640+H+16,2) Zero(Sprites+768+H+16,2) ;Copy stuff from our charset font ;into the pair of left/rig-}ht sprites For Y=0 To 15 Do B=255-Peek(CHSet+WhichCan+Y) Poke(Sprites+512+H+Y,B) B=255-Peek(CHSet+WhichCan+Y+16.}) Poke(Sprites+640+H+Y,B) Od ;Set a solid color on the behind sprite SetBlock(Sprites+768+H,16,255) ;A little c}} the TV) Poke(DL,0) Poke(DL+1,0) ; A pair of GR2 lines ; (for sun, score, and cur. objective) Poke(DL+3,7+$C0) 0} Poke(DL+6,7) ; The rest GR12 lines Poke(DL+7,4) For Y=8 To 16 Do ; (With DLI) Poke(DL+Y,$84) Od For Y=17 To 21}8 Do ; (Without DLI) Poke(DL+Y,4) Od Poke(DL+24,$84) ; (With DLI) ;Load our font! LoadFont() ;Just below font2}, use space for sprite gfx Sprites=((Buf/1024)+2)*1024 ;Wipe it (so we don't get garbage floating around; no pun intende3}d) Zero(Sprites,1024) ;Tell our gfx chips where to DMA it! PMBASE=Sprites/256 ;Amusing PMG/playfield priority ;pl4}us enable "5th player" ;(all four missiles share one color, ;rather than each inheriting their players'... ;I use this 5}for the exhaust effect) Poke(623,3+16) ;Splat the "current objective" onto the top right ;(we end up replacing what sh6}ape the font is, ;rather than changing the tiles; lame, but it works ;and we don't do it very often) Poke(SCMem+17,1) 7} Poke(SCMem+37,2) Poke(SCMem+18,3) Poke(SCMem+38,4) ;Garbage cans: SIZEP0=0 ;left half (1x wide) SIZEP1=0 ;right h8}alf (1x wide) SIZEP2=1 ;solid color background (2x wide) ;Clouds SIZEP3=3 ;4x wide HPOS3=200 ;Shove it over to the r9}ight PCOLR3=12 ;Light grey ;Exhaust SIZEM=64+16+4+1 ;all four are 2x wide Poke(711,10) ;Darker grey HPOSM0=70 ;The:}y never move, so set hpos now HPOSM1=74 HPOSM2=78 HPOSM3=82 ;Copy the cloud shape from the font to the cloud PMG ;;}(cloud never moves up/down, so do it once, here) FastMove(ChSet+('t*8),Sprites+896+10,8) ;Enable sprites! GRACTL=3 S<}DMCTL=46 ;Load truck and sidewalk data from disk LoadTruck() LoadRoad() ;Init score Score=0 ;Set color vars fo=}r DLI to use, too SkyCol=112 Ground=8 Sidewalk=12 Brite=2 ;Lastly, activate DLI! SetupDLI()Return; Blit the d>}ata for the garbage can; It's a set of 3 players (sprites),; and you can't move them vertically,; so we need to erase/redr?}aw in diff; parts of the PMG memoryProc DrawCan(Byte H) Byte Y,B ;Just in case it goes too low somehow? If H>80 Then@} H=80 Fi ;Erase a few lines above/below, ;so when we move it up/down it doesn't leave trails! ;(not erasing ENTIRE thiA}ng, because it'd flicker) Zero(Sprites+512+H-3,3) Zero(Sprites+640+H-3,3) Zero(Sprites+768+H-3,3) Zero(Sprites+512+H+B}16,2) Zero(Sprites+640+H+16,2) Zero(Sprites+768+H+16,2) ;Copy stuff from our charset font ;into the pair of left/rigC}ht sprites For Y=0 To 15 Do B=255-Peek(CHSet+WhichCan+Y) Poke(Sprites+512+H+Y,B) B=255-Peek(CHSet+WhichCan+Y+16D}) Poke(Sprites+640+H+Y,B) Od ;Set a solid color on the behind sprite SetBlock(Sprites+768+H,16,255) ;A little cF}INCLUDE"D:ACTRUN.ACT"INCLUDE"D:GOGOGARB.ACT"}/heckerboard shadow at the ;bottom of the behind sprite; ;always at street-level, to make the ;the can-going-up-onto-truG}ck effect ;more realistic. :) Poke(Sprites+768+96,170) Poke(Sprites+768+97,85)Return;Based on the can choice (0-3),H};figure out where, in the charset font,;the artwork is. Sigh, they didn't all;end up sequential. I didn't plan well...CardI} Func CanArt(Byte C) Card Z If C=0 Then Z=576 ElseIf C=1 Then Z=576+32 ElseIf C=2 Then Z=576+64 Else J} Z=576+96+24 Fi Return(Z);Pick the next canProc PickCan() Byte Colr ;DIFFICULTY HACK! ;================ ;K}The earlier the rounds (the lower the score), ;it's more likely it is we simply ;choose the can you need. ;Means the gaL}me is braindead easy ;for the first few cans, and ramps up If Rand((Score/3)+1)<1 Then CurCan=CurTruck Else ;WM}hen score is higher, it's a lot ;more likely we truly pick randomly from the 4 choices CurCan=Rand(4) Fi ;So DraN}wCan() knows what to draw, keep track of where in chset font the art is WhichCan=CanArt(CurCan) ;Can is at street level.O}.. CanHeight=80 ;...off the right side of the screen CanX=240 ;Pick a random color Colr=(Rand(15)+1)*16 PCOLR0=P}Colr+8 ;Light can PCOLR1=Colr+8 PCOLR2=Colr ;Dark background ;Blit the can artwork into the PMG memory! ;(we only Q}do this again when animating the lift/drop when joystick is held up or released) DrawCan(CanHeight)Return;Pick which kinR}d of can our truck wantsProc PickTruck() Card Art Byte B,Y CurTruck=Rand(4) ;Determine where its art is Art=CanAS}rt(CurTruck) ;Duplicate that art into the chars we blitted at the top right of the screen ;(sigh, because it was easier T}to "just do" then figuring out which chars to re-blit; ;another issue is that GRAPHICS 2 mode can't ;access the entire chU}set at once; high bits used for color choices) FastMove(CHSet+Art,CHSet+8,32)Return;Day-to-night-to-day transition effecV}t;to denote the next level. (Aka every 10th point earned)Proc NextLevel() Byte I Card J ;Remove the objective ZeroW}(CHSet+8,32) ;Move the sun down one position ;(wow, 16 scanlines... smoooooth) Poke(SC,0) Poke(SC+20,90) ;Cut briX}ghtness in half (used by DLI) Brite=1 ;Cycle through some values For I=0 To 15 Do ;Change hue of horizon from blueY} down thru to yellows and then black SkyCol=(7-(I/2))*16 ;Match the non-DLI'd (solid-color at the top) chunk of skyZ} Poke(712,SkyCol) ;Darken some of our playfield colors ;(e.g. the truck) SetColor(1,2,15-I) SetColor(2,12[},12-((I*2)/3)) ;Have DLI darken the ground and sidewalk Ground=8-(I/2) Sidewalk=15-I ;BASIC-style delay loo\}p. Awesome! For J=0 To 7000 Do Od Od ;Sun goes away (poof!) Poke(SC+20,0) ;Everything's black; gradient becomes ]}solid black, too SkyCol=0 Brite=0 ;Longer delay For J=0 To 30000 Do Od ;(We should really do something fun here)^} ;Sun comes back up... the rest is ;pretty much opposite of the above Poke(SC+20,90) Brite=1 For I=0 To 15 Do Sk_}yCol=(I/2)*16 Poke(712,SkyCol) SetColor(1,2,I) SetColor(2,12,(I*2)/3) Ground=(I/2) Sidewalk=I For J=`}0 To 7000 Do Od Od ;Sun goes away ;(about to be redrawn at top of screen by main loop) Poke(SC+20,0) ;Set our cola}ors and DLI settings back SetColor(4,7,4) SetColor(1,2,14) SetColor(2,12,10) SkyCol=112 Ground=8 Sidewalk=12 Bb}rite=2Return; MAIN; It all happens here!; ====================Proc Main() Byte Done,Snd1,I Card J Byte Dist,Wheec}ls ; Set up and load stuff Setup() ; Choose the objective PickTruck() ; Draw the truck (and wheels) DrawTruckTd}op() DrawTruck(0) ; Draw the sidealk DrawRoad(0,0) ; Pick the current can PickCan() ; Init some vars Wheels=e}0 ;Wheel anim frame (0 or 1) Dist=0 ;Scrolly stuff for clouds and sidewalk Done=0 ;Quit? Do Snd1=0 ;Which sound tof} annoy mom with? If STICK0=7 Or (STICK0=14 And CanX>=130 And CanX<146) Then ; If pushing right g} ; (or pushing up, and can is just to the right of where it SHOULD be) ; Animate wheels Wheels=Wheels+1 h} ; Move clouds and sidewalk If Dist=255 Then Dist=0 Else Dist=Dist+1 Fi ; Move the can ; (IF it's on the gi}round; ; if not, we actually 'carry' it with us! LOL!) If (Wheels&1)=1 And CanHeight=80 Then CanX=CanX-2j} ; If can goes off the left, pick a new one If (CanX<40) Then CanX=240 PickCan() k} Fi ; Position the can horiz'ly HPOS0=CanX ;Left half HPOS1=CanX+8 ;Right half HPOS2=CanX l} ;Double-wide bkgd Fi ; Draw the animated wheels DrawTruck(Wheels RSH 1) ; Draw the road Dram}wRoad((Dist/10) MOD 3,(Dist/3)&3) ; We want 'driving fwd sound' Snd1=1 ElseIf STICK0=11 Or (STICn}K0=14 And CanX<=115 And CanX>96) Then ; Similar to above, but backing up Wheels=Wheels+1 If o}Dist=0 Then Dist=255 Else Dist=Dist-1 Fi If (Wheels&1)=1 And CanHeight=80 Then CanX=CanX+1 ; If can gop}es off the right, ; keep it there! (Don't replace ; with new one, like when it ; goes off the left, lq}ike we do above) If (CanX>240) Then CanX=240 Fi HPOS0=CanX HPOS1=CanX+8 HPOr}S2=CanX Fi DrawTruck(Wheels RSH 1) DrawRoad((Dist/10) MOD 3,(Dist/3)&3) ; Backup sound Snd1=s}2 ElseIf STICK0=14 And CanX>115 And CanX<130 Then ; Lifting can into the air! CanHeight=CanHeight-1 Ift} CanHeight<40 Then CanHeight=40 ; Clear the can bitmap ; (next time we blit it will be ; at u}ground level, and we don't ; want the old art floating above it!; ; DrawCan() only removes a few scanlines abv}ove/below ; so that trails aren't left during lift/drop anim) Zero(Sprites+512+40,16) Zero(Sprites+6w}40+40,16) Zero(Sprites+768+40,16) If CurCan=CurTruck Then ; This was the can we wanted! x} ; Silence engine Sound(0,0,0,0) ; Play a 'ding!' sound, and flash the truck golden hues For Iy}=0 TO 15 Do Sound(1,100-(((Score-1) MOD 10)*5),10,15-I) For J=0 To 1000 Do Od SetColor(2,z}1,15-I) Od ; Truck back to green SetColor(2,12,10) ; Increase score & show it {} Score=Score+1 Position(10,0) PrintB(Score) ; Do end-of-level day/night/day sequence every|} 10th point If (Score MOD 10)=0 Then NextLevel() Fi ; Pick the next objective }heckerboard shadow at the ;bottom of the behind sprite; ;always at street-level, to make the ;the can-going-up-onto-tru~}ck effect ;more realistic. :) Poke(Sprites+768+96,170) Poke(Sprites+768+97,85)Return;Based on the can choice (0-3),};figure out where, in the charset font,;the artwork is. Sigh, they didn't all;end up sequential. I didn't plan well...Card} Func CanArt(Byte C) Card Z If C=0 Then Z=576 ElseIf C=1 Then Z=576+32 ElseIf C=2 Then Z=576+64 Else } Z=576+96+24 Fi Return(Z);Pick the next canProc PickCan() Byte Colr ;DIFFICULTY HACK! ;================ ;}The earlier the rounds (the lower the score), ;it's more likely it is we simply ;choose the can you need. ;Means the ga}me is braindead easy ;for the first few cans, and ramps up If Rand((Score/3)+1)<1 Then CurCan=CurTruck Else ;W}hen score is higher, it's a lot ;more likely we truly pick randomly from the 4 choices CurCan=Rand(4) Fi ;So Dra}wCan() knows what to draw, keep track of where in chset font the art is WhichCan=CanArt(CurCan) ;Can is at street level.}.. CanHeight=80 ;...off the right side of the screen CanX=240 ;Pick a random color Colr=(Rand(15)+1)*16 PCOLR0=}Colr+8 ;Light can PCOLR1=Colr+8 PCOLR2=Colr ;Dark background ;Blit the can artwork into the PMG memory! ;(we only }do this again when animating the lift/drop when joystick is held up or released) DrawCan(CanHeight)Return;Pick which kin}d of can our truck wantsProc PickTruck() Card Art Byte B,Y CurTruck=Rand(4) ;Determine where its art is Art=CanA}rt(CurTruck) ;Duplicate that art into the chars we blitted at the top right of the screen ;(sigh, because it was easier }to "just do" then figuring out which chars to re-blit; ;another issue is that GRAPHICS 2 mode can't ;access the entire ch}set at once; high bits used for color choices) FastMove(CHSet+Art,CHSet+8,32)Return;Day-to-night-to-day transition effec}t;to denote the next level. (Aka every 10th point earned)Proc NextLevel() Byte I Card J ;Remove the objective Zero}(CHSet+8,32) ;Move the sun down one position ;(wow, 16 scanlines... smoooooth) Poke(SC,0) Poke(SC+20,90) ;Cut bri}ghtness in half (used by DLI) Brite=1 ;Cycle through some values For I=0 To 15 Do ;Change hue of horizon from blue} down thru to yellows and then black SkyCol=(7-(I/2))*16 ;Match the non-DLI'd (solid-color at the top) chunk of sky} Poke(712,SkyCol) ;Darken some of our playfield colors ;(e.g. the truck) SetColor(1,2,15-I) SetColor(2,12},12-((I*2)/3)) ;Have DLI darken the ground and sidewalk Ground=8-(I/2) Sidewalk=15-I ;BASIC-style delay loo}p. Awesome! For J=0 To 7000 Do Od Od ;Sun goes away (poof!) Poke(SC+20,0) ;Everything's black; gradient becomes }solid black, too SkyCol=0 Brite=0 ;Longer delay For J=0 To 30000 Do Od ;(We should really do something fun here)} ;Sun comes back up... the rest is ;pretty much opposite of the above Poke(SC+20,90) Brite=1 For I=0 To 15 Do Sk}yCol=(I/2)*16 Poke(712,SkyCol) SetColor(1,2,I) SetColor(2,12,(I*2)/3) Ground=(I/2) Sidewalk=I For J=}0 To 7000 Do Od Od ;Sun goes away ;(about to be redrawn at top of screen by main loop) Poke(SC+20,0) ;Set our col}ors and DLI settings back SetColor(4,7,4) SetColor(1,2,14) SetColor(2,12,10) SkyCol=112 Ground=8 Sidewalk=12 B}rite=2Return; MAIN; It all happens here!; ====================Proc Main() Byte Done,Snd1,I Card J Byte Dist,Whee}ls ; Set up and load stuff Setup() ; Choose the objective PickTruck() ; Draw the truck (and wheels) DrawTruckT}op() DrawTruck(0) ; Draw the sidealk DrawRoad(0,0) ; Pick the current can PickCan() ; Init some vars Wheels=}0 ;Wheel anim frame (0 or 1) Dist=0 ;Scrolly stuff for clouds and sidewalk Done=0 ;Quit? Do Snd1=0 ;Which sound to} annoy mom with? If STICK0=7 Or (STICK0=14 And CanX>=130 And CanX<146) Then ; If pushing right } ; (or pushing up, and can is just to the right of where it SHOULD be) ; Animate wheels Wheels=Wheels+1 } ; Move clouds and sidewalk If Dist=255 Then Dist=0 Else Dist=Dist+1 Fi ; Move the can ; (IF it's on the g}round; ; if not, we actually 'carry' it with us! LOL!) If (Wheels&1)=1 And CanHeight=80 Then CanX=CanX-2} ; If can goes off the left, pick a new one If (CanX<40) Then CanX=240 PickCan() } Fi ; Position the can horiz'ly HPOS0=CanX ;Left half HPOS1=CanX+8 ;Right half HPOS2=CanX } ;Double-wide bkgd Fi ; Draw the animated wheels DrawTruck(Wheels RSH 1) ; Draw the road Dra}wRoad((Dist/10) MOD 3,(Dist/3)&3) ; We want 'driving fwd sound' Snd1=1 ElseIf STICK0=11 Or (STIC}K0=14 And CanX<=115 And CanX>96) Then ; Similar to above, but backing up Wheels=Wheels+1 If }Dist=0 Then Dist=255 Else Dist=Dist-1 Fi If (Wheels&1)=1 And CanHeight=80 Then CanX=CanX+1 ; If can go}es off the right, ; keep it there! (Don't replace ; with new one, like when it ; goes off the left, l}ike we do above) If (CanX>240) Then CanX=240 Fi HPOS0=CanX HPOS1=CanX+8 HPO}S2=CanX Fi DrawTruck(Wheels RSH 1) DrawRoad((Dist/10) MOD 3,(Dist/3)&3) ; Backup sound Snd1=}2 ElseIf STICK0=14 And CanX>115 And CanX<130 Then ; Lifting can into the air! CanHeight=CanHeight-1 If} CanHeight<40 Then CanHeight=40 ; Clear the can bitmap ; (next time we blit it will be ; at }ground level, and we don't ; want the old art floating above it!; ; DrawCan() only removes a few scanlines ab}ove/below ; so that trails aren't left during lift/drop anim) Zero(Sprites+512+40,16) Zero(Sprites+6}40+40,16) Zero(Sprites+768+40,16) If CurCan=CurTruck Then ; This was the can we wanted! } ; Silence engine Sound(0,0,0,0) ; Play a 'ding!' sound, and flash the truck golden hues For I}=0 TO 15 Do Sound(1,100-(((Score-1) MOD 10)*5),10,15-I) For J=0 To 1000 Do Od SetColor(2,}1,15-I) Od ; Truck back to green SetColor(2,12,10) ; Increase score & show it } Score=Score+1 Position(10,0) PrintB(Score) ; Do end-of-level day/night/day sequence every} 10th point If (Score MOD 10)=0 Then NextLevel() Fi ; Pick the next objective } PickTruck() ; Pick the next can ; (do it AFTER picking objective ; so the difficulty hac}k gets applied properly) PickCan() HPOS0=CanX HPOS1=CanX+8 HPOS2=CanX Else } ; WRONG CAN! ; Play a 'brzt!' sound, ; flash the truck red and ; make the can fall dow}n, and ; move to the left (away from ; our dest: the next can). ; This makes it harder to frust}rate yourself. For I=0 To 15 Do Sound(1,200,12,15-I) DrawCan(40+(I*3)) CanX=Can}X-2 HPOS0=CanX HPOS1=CanX+8 HPOS2=CanX For J=0 To 500 Do Od SetCo}lor(2,4,I) Od ; Truck back to green SetColor(2,12,10) ; Can back to ground level } CanHeight=80 ; Take another moment to ; flash the objective and ; the current can a fe}w times, ; to point out the fact that they're ; not the same shapes For I=0 To 5 Do } ; Flash on Poke(706,15) Poke(SCMem+17,129) Poke(SCMem+37,130) Poke(SCMem+18},131) Poke(SCMem+38,132) For J=0 To 5000 Do Od ; Flash off Poke(706,0) } Poke(SCMem+17,1) Poke(SCMem+37,2) Poke(SCMem+18,3) Poke(SCMem+38,4) Fo}r J=0 To 5000 Do Od Od Fi Else ; Not yet at the top, play a lifting sound ; and draw }the can in the new position Sound(1,CanHeight+40,0,8) DrawCan(CanHeight) Fi ElseIf CanHeight<80 The}n ; Can is up in the air? ; Joystick is not being pushed UP? (Note we're an ELSE situation here...) ; Drop} the can down and play a dropping sound CanHeight=CanHeight+1 Sound(1,CanHeight,0,8) DrawCan(CanHeight) } Fi ; Play our sound choices ; (Plus, take opportunity to draw exhaust) If Strig(0)=0 Then ; Honk! Overri}des all! Bahah Sound(0,10,12,8) Sound(1,0,0,0) Else If Snd1=1 Then ; Driving forward S}ound(0,50,4,10) Sound(1,0,0,0) ; Exhaust... ; Pick random pixels, but use BINARY AND ("&") to confor}m them to a shape ; (else it'd be a rectangle of smoke) Poke(Sprites+384+80,RANDOM&48) Poke(Sprites+3}84+81,RANDOM) Poke(Sprites+384+82,RANDOM&252) Poke(Sprites+384+83,RANDOM&48) ElseIf Snd1=2 Then } ; Driving backards Sound(0,100,4,10) ; Also play a beeping sound when backing up! BEEP! BEEP! BEEP! } ; (use OS's clock counter for regularity) Sound(1,50,10,((RTCLOCK RSH 5)&1)*10) ; More exhaust Poke}(Sprites+384+81,RANDOM&192) Poke(Sprites+384+82,RANDOM&48) Poke(Sprites+384+83,RANDOM&192) Else } ; Idle sound Sound(0,255,4,4) Sound(1,0,0,0) ; No exhaust Zero(Sprites+384+80,4) Fi } Fi ; Move the cloud HPOS3 = 255-Dist ; Flicker the sun SCMem^= 90+((RTCLOCK RSH 4)&1) ; Quit if STA}RT key is pushed If CONSOL=6 Then Done=1 Fi Until Done=1 Od ; Disable everyone to prevent leaving wacky stuff on scr}een when we return to Action! or DOS GRACTL=0 SDMCTL=2 HPOS0=0 HPOS1=0 HPOS2=0 HPOS3=0 DisableDLI() SndRst()} Graphics(0)ReturnAction! or DOS GRACTL=0 SDMCTL=2 HPOS0=0 HPOS1=0 HPOS2=0 HPOS3=0 DisableDLI() SndRst() PickTruck() ; Pick the next can ; (do it AFTER picking objective ; so the difficulty hac}k gets applied properly) PickCan() HPOS0=CanX HPOS1=CanX+8 HPOS2=CanX Else } ; WRONG CAN! ; Play a 'brzt!' sound, ; flash the truck red and ; make the can fall dow}n, and ; move to the left (away from ; our dest: the next can). ; This makes it harder to frust}rate yourself. For I=0 To 15 Do Sound(1,200,12,15-I) DrawCan(40+(I*3)) CanX=Can}X-2 HPOS0=CanX HPOS1=CanX+8 HPOS2=CanX For J=0 To 500 Do Od SetCo}lor(2,4,I) Od ; Truck back to green SetColor(2,12,10) ; Can back to ground level } CanHeight=80 ; Take another moment to ; flash the objective and ; the current can a fe}w times, ; to point out the fact that they're ; not the same shapes For I=0 To 5 Do } ; Flash on Poke(706,15) Poke(SCMem+17,129) Poke(SCMem+37,130) Poke(SCMem+18},131) Poke(SCMem+38,132) For J=0 To 5000 Do Od ; Flash off Poke(706,0) } Poke(SCMem+17,1) Poke(SCMem+37,2) Poke(SCMem+18,3) Poke(SCMem+38,4) Fo}r J=0 To 5000 Do Od Od Fi Else ; Not yet at the top, play a lifting sound ; and draw }the can in the new position Sound(1,CanHeight+40,0,8) DrawCan(CanHeight) Fi ElseIf CanHeight<80 The}n ; Can is up in the air? ; Joystick is not being pushed UP? (Note we're an ELSE situation here...) ; Drop} the can down and play a dropping sound CanHeight=CanHeight+1 Sound(1,CanHeight,0,8) DrawCan(CanHeight) } Fi ; Play our sound choices ; (Plus, take opportunity to draw exhaust) If Strig(0)=0 Then ; Honk! Overri}des all! Bahah Sound(0,10,12,8) Sound(1,0,0,0) Else If Snd1=1 Then ; Driving forward S}ound(0,50,4,10) Sound(1,0,0,0) ; Exhaust... ; Pick random pixels, but use BINARY AND ("&") to confor}m them to a shape ; (else it'd be a rectangle of smoke) Poke(Sprites+384+80,RANDOM&48) Poke(Sprites+3}84+81,RANDOM) Poke(Sprites+384+82,RANDOM&252) Poke(Sprites+384+83,RANDOM&48) ElseIf Snd1=2 Then } ; Driving backards Sound(0,100,4,10) ; Also play a beeping sound when backing up! BEEP! BEEP! BEEP! } ; (use OS's clock counter for regularity) Sound(1,50,10,((RTCLOCK RSH 5)&1)*10) ; More exhaust Poke}(Sprites+384+81,RANDOM&192) Poke(Sprites+384+82,RANDOM&48) Poke(Sprites+384+83,RANDOM&192) Else } ; Idle sound Sound(0,255,4,4) Sound(1,0,0,0) ; No exhaust Zero(Sprites+384+80,4) Fi } Fi ; Move the cloud HPOS3 = 255-Dist ; Flicker the sun SCMem^= 90+((RTCLOCK RSH 4)&1) ; Quit if STA}RT key is pushed If CONSOL=6 Then Done=1 Fi Until Done=1 Od ; Disable everyone to prevent leaving wacky stuff on scr}een when we return to Action! or DOS GRACTL=0 SDMCTL=2 HPOS0=0 HPOS1=0 HPOS2=0 HPOS3=0 DisableDLI() SndRst()} Graphics(0)ReturnAction! or DOS GRACTL=0 SDMCTL=2 HPOS0=0 HPOS1=0 HPOS2=0 HPOS3=0 DisableDLI() SndRst()1&DhihiHHȱȱ`8Hh` ^&E…¦ ^&`L^&` o&}"Ff ee&8L& o&_Wń児0 &&86.ń児8}儅充FfFf8L& &` Fj` &`p B V8l q' Vhhl'HHJJJJ}hh`hhl' `iDiE`Hh'`Hh`Hh`Hh` 'IHiDiE B 'HI} B '`ԆՄ ؠ0ȑ8)ȑ`HhL+(0L+(II襢 +(iȑȩ-`H ' +(hL'H} ' Y(hL' 'L( 'L( 'L( 'L(L( 'L(L( 'L( 'L( 'L( 'L( 'L( 'L' 'L( 'L' 'L(}ȩ$&*i0:iȑ`' LFĆ>%>Ć5%/E)ԵH膇hCI4}Hs.L>`.L><<L=8<<<)ILB>.IP}LB>..L->...iЭ.Э