@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u;; SHARP SHOOTER; by Matthew J.W. Ratcliff ;; COPYRIGHT 1989; BY ANALOG COMPUTING;; CHECT}KSUM DATA;[48 0B 1E 62 0B 10 10 12 ; 78 1A 5B 6E 9E 58 23 EE ; D8 EB E2 41 52 46 14 71 ; 0B 3A 83 1F A4 53 18 ]BYTE RTSU}=[$60] ; This declaration ; must be the first ; compiled code if ; using this V}pgm with ; OS/A+ versions 2.2 ; and before; Game global target arrayBYTE ARRAY XCS=[26 79 1W}32 26 79 132]BYTE ARRAY YCS=[48 48 48 144 144 144]BYTE ARRAY Tgsel(6)BYTE Jiffy = 20BYTE Jiffy1 = 19BYTE CH = 764X}BYTE TRIGGER= 632BYTE Attract= 77;-------------------------INCLUDE "D:GUNREAD.ACT";-------------------------PROC ZeroTY}ime()CARD Timer=19Timer = 0RETURN;-------------------------; Get elapsed time in jiffies;CARD FUNC GetJTime()CARZ}D tictic = Jiffy1*256 + Jiffy RETURN(tic);-------------------------PROC Blast( CARD xb, BYTE yb )BYTE sCARD dAttra[}ct = 0IF xb < 1 THEN xb = 1FIIF xb >158 THEN xb = 158FIIF yb < 1 THEN yb = 1FIIF yb > 190 THEN yb = 190F\}IPlot(xb-1, yb)Plot(xb+1, yb)Plot(xb, yb-1)Plot(xb, yb+1)s = 16 Sound(0, 100, 8, 15)FOR d = 0 TO 200 DO ; OD]}WHILE s # 0 DO s = s - 1 Sound(0, 140, 8, s) FOR d = 0 TO 100 DO ; OD ODSound(0, 0, 0, 0)RETURN ^};-------------------------; Return the integer square; ROOT of the value passed.;; Algorithm: The integer square ; roo_}t is the count of the total; successive odd numbers, starting; from 1, that can be subtracted; from the parameter before i`}t goes; negative.BYTE FUNC ISqrt( INT r )BYTE i, ji = 1j = 0WHILE (r > 0) DO r = r - i i = i + 2 IF r >= 0 Ta}HEN j = j + 1 FI ODRETURN( j );-------------------------PROC SelTarget( BYTE tg )CARD XBYTE yAttract = 0b}x = XCS(tg)y = YCS(tg) Plot(x-26,y-26)DrawTo(x+26,y-26)DrawTo(x+26,y+26)DrawTo(x-26,y+26)DrawTo(x-26,y-26)IF colorc} # 0 THEN FOR y = 0 TO 15 DO Sound(0, 60, 10, y) FOR x = 0 TO 200 DO ; OD OD Sd}ound(0, 0, 0, 0) FIRETURN;-------------------------INT FUNC ABS(INT NUMBER)IF (NUMBER < 0) THEN RETURN(-NUMBER)FIe}RETURN(NUMBER);---------------------------PROC GAMESCREEN()BYTE I,RINT DXINT DYINT PHI, PHIXY, PHIYCARD XBYTE Yf}Attract = 0color = 1FOR R=5 TO 25 STEP 5 DO DX=R DY=0 PHI = 0 WHILE DX >= DY DO PHIY = PHI+DY+DY+1 g} PHIXY= PHIY-DX-DX+1 X = DX Y = DY FOR I=0 TO 5 DO Plot (XCS(I)+X,YCS(I)+Y) Plot (XCS(I)+Y,YCSh}(I)+X) Plot (XCS(I)+Y,YCS(I)-X) Plot (XCS(I)+X,YCS(I)-Y) Plot (XCS(I)-X,YCS(I)-Y) Plot (XCS(I)-Y,YCS(i}I)-X) Plot (XCS(I)-Y,YCS(I)+X) Plot (XCS(I)-X,YCS(I)+Y) OD PHI = PHIY DY = DY + 1 IF ABS(PHIXY)j}+0 3 THEN color = 1 FI Blast( x, y ) radius = GetRadius(x,y,tgsel(i)) IF radius <= 5 T~}HEN bulls = bulls + 1 BingBong() FI IF radius <= 25 THEN hits = hits + 1 scor}e = score + (26-radius) ELSE misses = misses + 1 BingBap() FI DO UNTIL TRIGGER=}14 OD color = 0 SelTarget( tgsel(i)) i = i + 1 IF i > 5 THEN i = 0 RandTgts()} FI color = Rand(3) + 1 OD OD x = GetJTime() x = x/60 IF x < 3600 THEN x = 3600/x ELSE } x = 0 FI CH = 255 Graphics(0) Poke (710, 20) Position(2,2) PrintE("Sharp Shooter By Mat*Rat") Print("Final }Score for Round ") PrintCE( round ) round = round + 1 Print("Bullets/Min = ") PrintCE( x ) Print("Total Hits = "}) PrintCE( hits ) Print("Total Misses = ") PrintCE( misses ) Print("Bullseyes = ") PrintBE( bulls ) Print("Sco}re = ") PrintCE( score ) IF score > hiscore THEN hiscore = score FI Print("Accuracy = ") x = 100 *} bulls x = x/60 IF x > hipct THEN hipct = x FI PrintC( x ) PrintE("%") PrintE("") Print("High Score = "}) PrintCE( hiscore ) Print("Best Accuracy= ") PrintB( hipct ) PrintE("%") PrintE("") PrintE("Press to p}lay") PrintE("Or typeŠ to exit") DO UNTIL TRIGGER=14 OR CH=28 OD DO UNTIL TRIGGER=15 OR CH=28 OD DO } UNTIL TRIGGER=14 OR CH=28 ODUNTIL (CH = 28)ODCH=255Graphics(0)PrintE("Sharp Shooter, by Mat*Rat")PrintE("(c) 1989,} Analog Computing")RETURN ODUNTIL (CH = 28)ODCH=255Graphics(0)PrintE("Sharp Shooter, by Mat*Rat")PrintE("(c) 1989,; GUNREAD.ACT;; CHECKSUM DATA;[6A BA 3A 75 52 ]; Read the Atari light gun; and convert the readings; of LPENH & L }PENV to current; graphics mode screen coordinates;; Algorithm developed by:; Matthew J. W. Ratcliff; Ratware Softworks; } (c) 1989;; For Analog Computing;; Algorithm:; The DELTA-X gun readings were; apparently DESIGNED to be 160; with DELT }A-Y at 96. These values; work out to be multiples of two,; by powers of two, for each and; EVERY possible Atari graphics }mode; 0 through 15 (full screen modes).; ; The X reading starts at about 89; at the far left of the display,; increases }to 227 at about text; column 34, then drops to zero.; It increases to about 22 at the; far right of the display.;; The Y } reading starts at about 17; at the top to 112 at the bottom.;; GunRead normalizes the X reading; to 0-159, inclusive and } Y to a; range of 0-95. Then the XSHIFT; and YSHIFT tables are accessed,; based on the current graphics mode.; If the va }lue is less than 128, it; is a right shift count (divide).; A value of 128 indicates a single; left shift (multiply by 2). }; ; The end result is a valid X,Y; coordinate reading of the light; gun for the present graphics; mode. It is up to the } user; to assure the screen intensity; (COLOR*16+INTENSITY) is at a level; to get valid gun readings. A value; of at lea }st 10 is recommended.; A "flash" technique may work best; Set all playfield intensities to ; 14, call GunRead, and restore } the; original playfield colors.; PROC GunRead( CARD POINTER xx, BYTE POINTER yy)BYTE ARRAY xshift=[2 } 3 3 1 1 1 0 0 128 1 1 1 2 2 0 0] BYTE ARRAY yshift=[2 2 3 2 1 1 0 0 128 128 128 128 2 3 128 128]CARD GunXBYTE GunYBYT }E DINDEX= $57BYTE LPENH = 564BYTE LPENV = 565BYTE shift, index GunX = LPENHGunX = GunX & $FFGunY = LPENVinde }x = DINDEXIF GunX <= 40 THEN GunX = GunX + 227 IF GunX > 255 THEN GunX = 255 FIFIIF GunX <= 90 THEN GunX = 90FI }GunX = GunX - 90IF GunX > 159 THEN GunX = 159 FIshift = xshift(index)IF shift = 128 THEN GunX = GunX LSH 1E }LSE GunX = GunX RSH shiftFIGunY = GunY - 17 IF GunY > 127 THEN GunY = 0FI IF GunY > 95 THEN GunY = 95FI }shift = yshift(index)IF shift = 128 THEN GunY = GunY LSH 1ELSE GunY = GunY RSH shiftFIxx ^= GunXyy ^= GunYRETUR }Nft = yshift(index)IF shift = 128 THEN GunY = GunY LSH 1ELSE GunY = GunY RSH shiftFIxx ^= GunXyy ^= GunYRETUR ?@ COUNPOLECOUNTSOURCEDESTSPARESOURCDESSPARLEVELOO@A AAA&AD}@@ @ @ @ @@@&&***** THE TOWERS OF HANOI *****&&*}****** by GREGG HESLING *******q +A1A @C@O(COUNT Sq @})!@@ KKRAM is not a problem in this program, so we indiscriminantly waste it D,9@<@,9,}9,9,9,>AR@D(}PPAssign the poles temporary labels and tell how many discs are on each polef6-}6-@'6-@868<,-O68<,-f68<,-11Make the poles and put th}e discs on pole #1m-@@!#-@=(  A m(' }|-@&68<,-&%@96-&P:'@,V6-+'@"P:'@,,n-@&&%@!x @| }[ @"@# @P- @@[Move the top disc and don't save the labels!D-@  (SAVING})68,-268,-;68,-D68,-#CCSave the current labels, then switch the DEST and SPARE poles%; 6-6-6-#}6-&@16-%@; @0(?6-&@ /-@ <(COMPLETE?+Q-@ #( }RESTORING,6-8,56-8,>6-8,G6-8,Q @-aaRestore the previous labels, move the top disc to the DEST pole,} and swap SOURCE with SPARE/W @P-@ -( SWITCHING;6-&@A6-G6-M6-W @01 Move }disc to top of screen2h6-8<,-68<,-&@86-8<,U6-+'@"P:'@,,h6-&P:'@,}7g-@ 1-$@%@&@!&; @Y-$@%@@"&c @g ;##Move disc from S}OURCE to DEST<R-@0-@O:&,$@N(>:AT%++&,!,,R F6-8<,%@-}68<,-J68<,-$@%&@i-@!%@6@-$@%@&@#& @JLo}wer disc down to DESTK2!-$@%@@"&+ @/ 2$OPrint discPW(>:@2%A!$,1-@}$@8(< T(>:@2&@$,W$TErase discUVS( >:@2%A!$+ @,,>:@2&@}$+ @,, V$Zm-&(COUNT= 8-@C(LEVEL=G[-@$%m(&@} ]|-@$%@@#+(SOURCEG-@$%@@#T( DEST p-@$%@@#|(}SPARE ad-@A --@ ;( >$dTo speed things up, change 100 to 1 D:HANOI.}BASARE ad-@A --@ ;( >$dTo speed things up, change 100 to 1 D:HANOI.45; R SIZRAARRAYALEFTRIGHTLEVELLEVECOUNSOR@A3*&&&@wZ }@ @ @ @@&&*********** HEAPSORT ***********&&****** by G}REGG HESLING ******* a @%(Max. size/entry)S6-P:+I:,&&A,'+%@,,a;$,;, ``Re}cursion devours RAM, up to 28% in this program depending on the "maximum size per entry"f,;$@,;$@,;$}@,46.G67$@,.V67@,.\6.f @PccLEFT$ and RIGHT$ will store the pointers, while LEVEL$} will be the "recursive variable saver"d76-@:7$@&@,,$AV%@:7$@,,K"@0dThere is} no left childjjThe address of the current node is stored, then we make the left child the current node and go againx}6-P:'AV,267%@<%@,.>:,Z67%@<%@,.>:&$AV,h6-%@n6-x @ n"(7+}&@,$%@<$,nARRAY$ is printed in sorted order -- left child, parent, then right child#w76-@:7$@&@},,$AV%@:7$@,,;A6-K @ wFollow right leg without saving positions'aaRestore the last saved po}sition -- the parent with a left child -- and go directly to PRINT(K6-&@A6-@:7%@,,$AV%@:7%@},,K @02.(.( records used& records left7l(Entry:  6-@'436-@?6-}I @ lGo to recursive printing routine;mmStore new string, then use a binary tree search to determine the new strin}g's position and set pointers<d 6-$-@&67%,. * B67%@<%B:,,.P6-%@d"@@U}AfG7+&@,$%@<$,37+&@,$%@<$,@ufFollow left or right branch?EVVLeft branch. } If there is a child, go to it. Else, save new entry at this pointF76-@:7$@&@,,$AV%@:7$@,,A }@O67<,.>:,w67%@<%@,.>:&$AV, @UJWWRight branch. If there is a child, go to it. E}lse, save new entry at this pointK76-@:7$@&@,,$AV%@:7$@,,A @O67<,.>:,w67%@}<%@,.>:&$AV, @UP 6-' @eU36-$@&@6-06-P:'AV,3$YooChang}e line 55 to line 56 and type "55 IF COUNT THEN GOSUB 95" to see previous entries and their pointersZa-@a(@:7}$@&@,,$AV%@:7$@,,7+&@,$%@<$,_<5(@:7$@&@,,$AV%@:7$@,,}9 <$D2:HEAPSORT.BAS$@,,7+&@,$%@<$,_<5(@:7$@&@,,$AV%@:7$@,,56 HSTARLOLXENCELOFFSEOFFTABLDTABLACTIVOL@}A @ As A @x @$$******************************$$* MACRO EDITOR} *$$* by Frank Seipel *$$* *$$* COPYRIGHT 1989 *$$* } BY ANALOG COMPUTING *$$******************************h +@A@1-@Q(@} Ġh6-F:A6,"Aim(@.(@ BY FRANK SEIPEL9(@D(@O(@}m(@ please wait%-A6Ar"!% X +( @(+6-F:A5,=A5}AL6-?:A5,XA5I(+( Enter macros. Hit afterI(entering each macro. Any=+(# ke}ypresses will be part of:( the macro.=(I&(A macro is a string of text --I(for instance, you could defineO(( Sh}ift+Control+0 as LIST O("with this program -- and then type K(( Shift+Control+0 instead of LIST.+(K(This pro}gram can be used to!N)(!redefine the macros in memory, orN( write out an AUTORUN.SYS file to"b+(#your disk, which wil}l automaticallyR("install your macros every time you_(boot-up.b(#G#@@K:/6-;6-A}sG6-A$c(%(Hit for next page2)@?(>:A%,B(c(Sum length of all macros may%P&(no}t exceed 128. After using aP(%macro, you may not use it again until&i)(!you have typed some other key, orE(used anot}her macro key.i((If this is a problem, just hit'/,($ before executing the macro)/((-@ * }%2G(>(Enter macro for >:%@H%A(,G(--><+F:B2y,"@" A@+*SAVE*F"}F:Ad,"AU" @`P)%F:Ad,!)@)(>:,6-%@ @`;%AU6-%@}3-@A7 ; S( (*(Would you like to make theseS($your default macros [i.e., would youq$(lik}e to write an AUTORUN.SYSK("consisting of these macros and theq( macro program to D1: ? -->H)@$"@:}y,)"@:Y,,(Yes/(>( Working...H B (No RqWW169,0,141,149,6,165,12,141,46,6,165,13,141,47,6,169,23,13}3,12,169,6,133,13,160,48\qaa162,6,169,6,32,92,228,173,149,6,201,1,240,6,169,1,141,149,6,96,76,224,7,72,138,72,173,147,6fq]}]208,44,173,9,210,197,0,240,17,133,0,162,0,189,127,6,205,9,210,240,11,232,224,10,208,243qii104,170,104,76,95,228,169,1,14}1,147,6,189,137,6,141,148,6,76,80,6,174,148,6,189,150,6,201,255,240,9raa141,252,2,238,148,6,76,80,6,169,0,141,147,6,76,80,}6,242,223,222,218,216,221,219,243,245,2400u9@9@@ D:AUTORUN.SYS:u%6-A6-A}% BDu%6-A66-A% BNu)*@A&)*@@Xu)*@A')*@@}bu)*@)*@@lu@y)*@AU)*@AU"y 6- B,y}*@*@6y 6- B@y*@*@Jy -Ty*@F:, y'6-P:'AV},$6-&$AV'$D:MACROEDT.BAS@y*@*@Jy -Ty*@F:, y'6-P:'AV-d!X;****************************n!X;* *x!X;* Macro keys *!X;* } *!X;* Written by: Frank Seipel *!X;* *!X;* December 30, 1988 *!X;* } *!X;****************************X;SYSVBV_SETVBV\ CHKBCODE LASTKEY}Q> PFIRSTRUNQ "PDOSJUMP,Q 6PDOSJUMP@ Q>INITJP TQ>INIT^P hINIT%>STARTr}$>START|Q> SETVBV QFIRSTRUNR> FDOSJUMPQ> PFIRSTRUN:DOSJUMP!X;X; Actual code} starts hereX;START5;; Save AA 5;; Save XQINPROGRESS;;Already goingHTYPEITOUT;; do next key&QKBCODE;; } compare key0RLASTKEY;; to last-:FEXIT;; quit if sameDPLASTKEY;; store lastN$>;; zero indexXLOOPQKEYCODE}S9;; check ifbRKBCODE;; key is alFMACROPRESSED;; macro keyv 2;; inc X(> ;; done?HLOOP;; no; do nxtEXITX}; Code to exit interrupt7>;; Restore X7;; Restore A !SYSVBVMACROPRESSED X; Initiate macro typing codeQ>};; Tell interruptPINPROGRESS;; to get goingQOFFSETS9;; get offsetPCUROFFSET;; store offset !EXIT;; quit TY}PEITOUT X; code to key macro*$CUROFFSET;; get offset4QDATA9;; get data>R>;; end of macro?HFDONE;; yes; quitR}PCH;; no; type\#CUROFFSET;; inc offsetf!EXIT;; quitpDONEzX; End macro codeQ>;; Tell interruptPINPROGRESS};; quit typing!EXIT;; and quitLKEYCODES =========;; Codes for macro keys (internal)COFFSETS =}======= = ;; Reserve RAM for offsetsINPROGRESS CUROFFSET FIRSTRUN DATAX; Macro key d}ata table==== = ;; Reserve RAM for offsetsINPROGRESS CUROFFSET FIRSTRUN DATAX; Macro key d 45Y p SIZRAARRAYAFIRSTLASTPIVOFIRSLASLEVECOUN@AiiQQQ/d/@4 }@4@6 @5 @5&&*********** QUIKSORT ***********&&****** by GREGG HESLING ******* _ }(Max. size/entryQ6-P:+I:,&&A,'+%@'@,,_;$,;, XX57% of RAM is lost when SIZE } equals 1, but only 1% is lost when SIZE is 65 or moreq/;'@$@,;'@$@,76.R67'@$ }@,.a67@,.g6.q @ccFIRST$ and LAST$ will hold pointers to the beginning and end of arrays that n }eed to be sortediiLines 20-40 take the first entry in the array and move it over until everything less than the pivot? }?is to the left, while everything greater is to the right.26-+&@,$%@26.7<%&@,H+-$%@ }+&@,$%@H7<%&@,3@@#S'67<%&@,.7<%&@,/6-%S67<%&@,.7 }<%&@,(L 67<%&@,.66-+&@,'%@L%@@`1XXIf there are entries to the r }ight of PIVOT, the first and last positions are saved2e6-%@"6-P:'AV,667%@,.>:,T67%@,.>:!}&$AV,e6-P:'AV,7k67%@,.>:,567%@,.>:&$AV,C6-%@[(>:'@%@d,kDi!}splay level;mmIf there are entries to the left of PIVOT, change FIRST and LAST to the new limits and immediately sort<)!} &@6-&@) @ EFFRestore the positions of unsorted arrays (to the right) and sortF++6-@:7&!}@,,$AV%@:7,,K]+6-@:7&@,,$AV%@:7,,96-&@@(~J @ ]ESC/BACK SPACE=~O??AR!}RAY$ is already sorted, so a simple print is sufficientP4-@0(7+&@,$%@<$,4 U.(.( reco!}rds used& records leftZf(Entry: 4'6-@-6-96-C @ fCall recursive sorting algo!}rithm^77Simple routine to tack entry to the end of ARRAY$_Z 6-$-@&67%,. * B67%@<%B:,,.!}P6-%@Z @D2:QUIKSORT.BASd of ARRAY$_Z 6-$-@&67%,. * B67%@<%B:,,. 189 8## 8` BD8E8H8I V 8nl89E819 8% }88  P  klʍ`} Setting Up ATARI 800XL Ram Disk*ExԭӅ˩`ˍX@` L% }S` LYxԭӅ˩ ˍX@`1`R%PWS` H̭ H̄ͮ΄Ϡ% }̑Έ0ϭ hhĭ h`i`qݰɍ 8q 8 eͨ`̩͢&`8 H̄ͮ΄Ϡ$fSCr .LIOFF#*********************************(*MDRIVE2.5*2*----------*<**!F*Ramdiskdriverf) }or800XL*!P*------WithDOS2.5-----*Z** d*UseasRAMDISK.COM(D5:)*n**x*Author:JerryvanDijk**)}Pelikaanhof15**2312EALeiden**TheNetherlands***"*Lastrevision:12-dec-1988****Writtenin)}SynAssembler***#*>>>USESPARTOFPAGE6<<<***#*******************************;#;----------------)}--------------;MDRIVECONSTANTS#;------------------------------;!"MAXSEC.EQ$01;Maxsectorhi ,OFFSET.EQ$)}38;VTOCoff-set!6SECNUM.EQ$45;VTOCdatasec@VSEC.EQ$68;VTOCsecloJDSEC.EQ$69;DIRseclo TSECLOW.EQ$71)};DATAseclow ^SECMID.EQ$8D;DATAsecmid"hSECHIGH.EQ$DD;DATAsechigh"rTESTBYT.EQ$EA;RAMtestbyte|;#;--)}----------------------------;MDRIVEEQUATES#;------------------------------;TEMP.EQ$CB;MemorystatZPAG)}E.EQ$CC;Temp.adrMPROG.EQ$3800;Progbegin RTSTART.EQ$38EC;RTorigin EXSTART.EQ$3930;EXorigin!RAMLOW)}.EQ$C000;LowRAMblkVTOC.EQ$C100;VTOCadrDIR.EQ$C180;DIRadr"LOWBANK.EQ$C200;DATAloadr#HIGHBANK.)}EQ$D800;DATAhiadrSOMERAM.EQ$F123;TestRAM;#&;------------------------------0;DOS2.5CONSTANTS#:;-----)}-------------------------D;ND5.EQ$05;D5:deviceXDRV5.EQ$50;Drive5!bSECLEN.EQ$7F;Sectorlengthl;#v;-)}-----------------------------;DOS2.5EQUATES#;------------------------------; DRVBYT.EQ$70A;Act.drives)}DSIO.EQ$7B0;SIOVcallDINIT.EQ$7E0;InitDOSDDSK.EQ$106B;DSKINVcall;#;------------------------------)};ATASCIICODE'S#;------------------------------;CD.EQ$1D;CursordownCLS.EQ$7D;Clearscreen EOL.E)}Q$9B;Clearscreen;# ;------------------------------*;XLSYSTEMCONSTANTS#4;------------------------------>;)} HIOCB0.EQ$00;IOCB0offset!RNMIOFF.EQ$00;NMIoffvalue\OK.EQ$01;NoerrorcodefPUTBUF.EQ$0B;CIOputbuf)}pDISK.EQ$31;SIOdiscodezNMION.EQ$40;NMIonvalueWRITE.EQ$50;SIOputcmdREAD.EQ$52;SIOgetcmd ST)}ATUS.EQ$53;SIOstatcmdVERIFY.EQ$57;SIOputcmdNOSEC.EQ$90;SectorerrorNOCMD.EQ$A8;CmderrorRAMON)}.EQ$FE;ROMdisable;#;------------------------------;XLSYSTEMEQUATES#;------------------------------;) }DDEVIC.EQ$300;DCBdeviceDUNIT.EQ$301;DCBunitDCOMND.EQ$302;DCBcmdDSTATS.EQ$303;DCBstatus$DBUF)!}LO.EQ$304;DCBbuflo.DBUFHI.EQ$305;DCBbufhi8DAUX1.EQ$30A;DCBsecloBDAUX2.EQ$30B;DCBsechiLICCOM.)"}EQ$342;CIOcmdVICBAL.EQ$344;CIObuflo`ICBAH.EQ$345;CIObufhijICBLL.EQ$348;CIOlenlotICBLH.EQ$349)#};CIOlenhi~PAGE6.EQ$6BC;Freespace PORTB.EQ$D301;Memoryctrl NMIEN.EQ$D40E;NMIcontrol DSKINV.EQ$E453)$};SIOstatusCIOV.EQ$E456;CIOvectorSIOV.EQ$E459;SIOvector;#********************************Checkf)%}orRAMmodule*#*******************************;";Thismoduleisthefirstrun!;whenMDRIVEisexecuted.It!)&};checkswhetherthereisRAM! ;beneaththeOS.Ifthereis ;itrunstheinstallmodule ;otherwiseitsimplyexit)'}s.(;2.ORMPROG<; FMDRIVEP;Z;DisableOSROM'sd;nJSRROMOFFx;;Store&retrieveabyte;)(}LDA#TESTBYTSTASOMERAMLDASOMERAMTAX;;RestoreOSROM's;JSRROMON;;Checkifthere))}isRAM;CPX#TESTBYTBEQINSTALLRTS";#,*******************************6*INSTALLRAMDISKMODULE*)*}#@*******************************J;T;ModuletoinstalltheRAM ^;disk.Itformatsthedisk,h;makestheDOSpat)+}chesandr;copiestheruntimeand|;modulesinplace.; INSTALL;;Firstprintamessage;LDA#PUT),}BUFLDX#IOCB0STAICCOM LDA#MSGSTAICBAL LDA/MSGSTAICBAHLDAMSGLENSTAICBLLLDAM)-}SGLEN+1STAICBLH &JSRCIOV0;:;DisableOSROM'sD;NJSRROMOFFX;b;Clearvtoc&directoryl; vL).}DA#0TAY.0STAVTOC,YSTADIR,YINY BNE.0;;WriteVTOCsector; LDA#2 STAVTOC )/}LDA#110STAVTOC+1 LDA#108STAVTOC+3 LDA#%01111111STAVTOC+OFFSET LDA#%11111111*LDY#OFFSET)0}+14.1STAVTOC,Y>INYHCPY#SECNUM RBNE.1\LDA#%11111000fSTAVTOC,Yp;"z;Copyexecutemoduleinpla)1}ce;LDYEXLEN.2LDAEXSTART-1,YSTARAMLOW-1,YDEY BNE.2;;EnableOSROM's;JSRROMO)2}N;";Copyruntimemoduleinplace; LDYRTLEN .3LDARTSTART-1,Y STAPAGE6-1,Y$ DEY . BNE.38 ;)3}B ;AddD5:toDOSL ;V LDADRVBYT` ORA#DRV5j STADRVBYTt JSRDINIT~ ; ;PatchDOSDSKINVcall ; LD)4}A#MDSK STADDSK LDA/MDSK STADDSK+1 ; ;PatchDOSSIOcall ; LDA#MSIO STADSIO LDA/MSIO)5} STADSIO+1 ; ;Imstallationdone ;( RTS2 ;< ;ThemessageF ;P MSG.DA#CLS,#CD,#CD,#CDZ .DA#CD,#C)6}D,#CDd .AS'SettingUpATA'n .AS'RI800XLRamDis' x .AS'k' .DA#EOL,#EOL MSGLEN.DAMSGLEN-MSG ; ;R)7}untimemodulelength ; RTLEN.DA#RTEND-PAGE6+1 ; ;Executemodulelength ; EXLEN.DA#EXEND-RAMLOW+1 ;)8}# ;------------------------------ ;MDRIVESUBROUTINES# ;------------------------------ ;  ROMOFF" ;, ;Disabl)9}eOSROM's6 ;@ SEIJ LDA#NMIOFFT STANMIEN^ LDAPORTB h STATEMPr LDA#RAMON| STAPORTB RTS ; ):} ROMON ; ;EnableOSROM's ; LDATEMP STAPORTB CLI LDA#NMION STANMIEN RTS ;# *******);}************************ *RUNTIMEMODULE*# *******************************& ;#0 ;ThiscodeiscalledbyDOSif: )<};itexecutesaDSKINV(SIOD ;status)orSIOcall."N ;IfdeviceisD5:anditisa#X ;statuscallthestatusisset"b)=} ;toOKandtheroutineexits."l ;IfdeviceisD5:anditisa v ;SIOcallthentheOSROM's ;aredisabledandajum)>}pis# ;madetotheexecutemoduleto ;executethecommand." ;Ifthedeviceisn'tD5:then ;theroutinecontinue)?}swith ;DSKINVorSIOV. ; ;Runtimecodeorigin: ; .ORPAGE6 .TARTSTART ;# ;----------------------)@}-------- ;DSKINVPATCH# ;------------------------------ ; MDSK* ;4 ;CheckifdeviceisD5:> ;H JSRCHKD)A}EVR BEQDODSK\ ;!f ;IfnotcontinuewithDSKINVp ;z JMPDSKINV ;" ;Otherwisesetstatus&return ; DOD)B}SKLDY#OK STYDSTATS RTS ;# ;------------------------------ ;SIOVPATCH# ;------------------------------)C} ; MSIO ;;CheckifdeviceisD5:;JSRCHKDEV$BEQDOSIO.;8;IfnotcontinuewithSIOVB; L)D}JMPSIOVV;"`;Otherwiserunexecutemodulej; tDOSIOSEI~LDA#NMIOFFSTANMIENLDAPORTB STATEMP)E}LDA#RAMONSTAPORTB JSREXEC LDATEMPSTAPORTBCLILDA#NMIONSTANMIEN CPY#0RTS )F};#;------------------------------;RUNTIMESUBROUTINES#(;------------------------------2; <CHKDEVF; P;Ch)G}eckifSIOdeviceisD5:#Z;Returnswithzeroflagsetis d;itis.n;xLDADDEVICCMP#DISKBNECHKDNL)H}DADUNIT CMP#D5 CHKDNRTS;#;------------------------------;ENDOFRUNTIME#;---------------------------)I}---; RTEND;#********************************EXECUTECOMMANDMODULE*#*******************************)J}; ";Thiscode,whichishidden",;beneaththeOS,executesthe6;RAMDiskSIOcommands.@;J.ORRAMLOWT.TA)K}EXSTART^;h;Decodecommandr;|EXECLDADCOMNDCMP#READBEQGETSECCMP#WRITEBEQPUTSECCMP#)L}VERIFYBEQPUTSECCMPSTATUSBEQSETOK;";Nocommandthenreturnerror;LDY#NOCMDBNEERRXIT)M};";-----------------------------;SETSTATUS"&;-----------------------------0;:SETOKLDY#OKDERRXITSTY)N}DSTATSNRTSX;#b;------------------------------l;PUTSECTOR#v;------------------------------; PUTSEC;)O};Calculatesectoraddress; JSRCALC;;Movedataset-up;LDADBUFLOSTAZPAGELDADBUFHI)P}STAZPAGE+1 BNEMOVE ;#;------------------------------ ;GETSECTOR#*;------------------------------4;)Q} >GETSECH;R;Calculatesectoraddress\; fJSRCALCp;z;Movedataset-up;STXZPAGESTYZPAGE+1)R}LDXDBUFLOLDYDBUFHI;!;Movethedata:FROMaddress#;in(ZPAGE),TOaddressinX,Y;MOVESTXZPAGE)S}+2STYZPAGE+3LDY#SECLEN.0LDA(ZPAGE),YSTA(ZPAGE+2),YDEY BPL.0$BMISETOK.;#8;--------)T}----------------------B;CALCULATESECTORADDRESS#L;------------------------------V;`CALCj;t;Firstcheckth)U}ehighbyte~;LDADAUX2CMP#MAXSECBEQDOCALC;";Ifnotthenaillegalsector;SECERRPLAP)V}LALDY#NOSECBNEERRXIT;;Checkifvtocsector; DOCALCLDADAUX1CMP#VSECBNECHKDIR(;#2)W};Ifitissetaddress$return<;FLDX#VTOCPLDY/VTOCZRTSd;n;Checkifdirectorysectorx;CHKDIR)X}CMP#DSECBNECHKDAT;!;Ifso,setaddress&return; LDX#DIR LDY/DIRRTS;!;Checkifsect)Y}ornottoolow;CHKDATCMP#SECLOWBCCSECERR;;Checkifnottoohigh;"CMP#SECHIGH,BCSSECERR)Z}6;@;FindRAMbankJ;TCMP#SECMID ^BCS.0h;r;Calculatelowbank|;SECSBC#SECLOW JSRMU)[}LTLDA/LOWBANK BNE.1;;Calculatehighbank; .0SECSBC#SECMID JSRMULTLDA/HIGHBANK)\};;Addallup&return; .1CLC&ADCZPAGE+10TAY:LDXZPAGEDRTSN;#X;---------------------------)]}---b;MULTIPLY$80#l;------------------------------v;;MultiplyAccuwith$80.;Resultin(ZPAGE).;MU)^}LTSTAZPAGE LDA#0STAZPAGE+1 LDX#7.0ASLZPAGEROLZPAGE+1DEX BNE.0RTS;#;------)_}------------------------ ;ENDOFEXECUTE#;------------------------------ ; *EXEND4;#>***********************)`}********H*ENDOFMDRIVE2.5*#R*******************************\;f.EN; *EXEND4;#>***********************(R?X`OO?000? (c)1983 Action Computer Services  B JKIHi-b}DiELV`L&@ &@ BLV`L@~@l L@ &` Fj`8冨凪`-c} @EӅӥ @`ʆǪƩ Ɛee` @ƦʆǢ &Ɛeǐ @ @L@ @-d}'&&&8儨児祂*L@&&*ń8&&L@ DA`hihiHHȱȱ-e}L@c !#3`L@JJJJ`H @h`Hȩh [@LA d@LA @LA-f} @LA @H8`HhHh HBLA BHI V䅠LA LB &@LAԆ -g}PIPP` BP @LA BLB BLB BLBH- B8塪墨hLB CLB CLB-q}B%DOS SYSB*)DUP SYSB8SGUN ACTBGUNREAD ACTBHANOI BASBHEAPSORTBASBMACROEDTBASBMACROEDTM65BQUIKSORTBASBRAMDISK OBJBU RAMDISK SYNB3aSHOOTER OBJBqSKEET M65BSKEET OBJB SKEET LST BȹP`텠8堨塪 B芨Oȩ-`PP wBP棩 Ѥģ0--r}6000:,80H & &ehe&eģ0ʥ 8堅塅`$ B&*i0:0i BƦ`-s}¢ 护°ڱ%ȱ%E BLID担CS ;BLIDI CLIDH DLID BLID &B-t} V ANLMȑ` MLN%B VLAS:DE:DH 5B DD A 5Bh)0IDDLA[\ZUVT-u}` )EDD` 0ELB #EL}B )ELB) ` 0ELB A` 0d @-v}ҥ `2)2ҩ`p`0)9E`@0)ӈJJJJ)`Ѕ`ȱ`` -w}Fȥ`HhƣĢ`ƥĤ`Ѣ F`ȱѢĦ-x}`膡``ťƤe8夰LF Ƥ8`ŦeѠ-y}e桊LFnS\S7GIGP:LcG A3G\G4[G[G)[G\G)\G5]GW_G([G\GLG-z}[Gi[G\Gi\G[G\GLG\G[GZ[G\GLG\GZ[G8[GZ[G\G\G[G\GL H\G[GGGm_GHGi-{}^G^GIL5H[G.\GLKH^G\G[G @[G\G8]G]G]GLcH]G_]GLrH_]GYGm_GZGi^G^GILH]GLH-|}^G]G @]G3G4G\G[G5G6G]G`LH`5 LH AeHiHHH`P:eLI -}}A IM IIL6IIȌ I IILOII IIL^IIILmII8 III \E IiIi-~}I \E8II I \EIiI I \EId EIIIILIIILIIL=J8III-} EIIdIIL:JIIL JLI E` LRJLJKJMJNJKJLJ0LJ8KJMJKJLJLJMJiMJKJ-}LJLJNJLaJNJ`O0LJJM?mJ?iJJ?mJ?iJ8JJ8J \EJi-}Ji8J LEJiJiJi LE8JJJi LE8JJ8J LE-}LKJͩJLKJ < EJJͧJJLKJJLKJLK E` LKKKKK0LL8KK-}`KK`L%LMȌLLLgOLLLLLLLLLLLL[OLmLLmLmLm-}LiLiL8LLLL8LLiLiLL LLLL!LLLLN?mL?imL-}m L?mL?im!L \E?mL?im!L?mL?imL \E?mL?im-}!L?mL?i8L \E?mL?imLm L?mL?i8!L \E?mL?i8-}L L?mL?i8!L \E?mL?i8!L?mL?i8L \E?mL?i-}8!L?mL?imL \E?mL?i8L L?mL?im!L \ELLLL-}LLLLLLL KiiHHLL KhhŠ0LXOLLLL8LLLLLULLiLL2L`P:ed-} LvO AhO?mlO?irOqOiOnOhOmO8mOqOmOnOrOnOnOmO KnOmO?mlO?irOqOkOpO-}jOoO8oOqOoOpOrOpOpOoO KpOoOnOmOnOmO AmOnOpOoOpOoO AoOpOmOmoOmOnOmpOnOmOqnO-}0LPnOmO OJrOqOLPrOqOrOqO`LP D FLPSharp Shooter, by Mat*RatP (BLP(c) 1989, Analog Co-}mputingP (BLPP (BL%Q!Connect Light Gun first game portQ (BL0QQ/ (BLYQPress for NEXT game orQ: (BLQ!-}type Š key to exit programQc (BxI ILQxI ILQ`LQQͯQLQQQ?QLQQͯQL-}R EQQMQLQQ?QQ?Q?QQ?QLQ`L!RRRLR8R < E8R @ ERR-}LgRRLWR8R P E8R T ERRLRRLRRL&R E E`LRRͿRLAS8R-} ER ERRLSRLR8R ER © ERRL;SRL+SRLR E-} E`:  |9!LsSlSȌkSmSjSiS P D bSdScSfSeShSgS "L H Q^S_S_SLFU]S ]S-}L@U^S? JS\Sn `GxI ILSILbT DL5TSharp Shooter, by Mat*RatT (BLZT(c) 1989, Analog C-}omputingT? (B`LtT\SoSnS I^S?\SoSnS sOaS`S`SaSLTbS R`SaSLTeSfS8-}`SaScSecSdSedSLTgShS RxILT^S? J^S^SL-U^S Q Ei]SLS_SLS H-}oSnSCSIZE;;SKEETS DISTANCEHSCOREH1};;HI BYTE OF SCORERSCOREL;;LO BYTE OF SCORE\ROUND;;ROUND COUNTERfPOINT;;VALUE OF SKEETSpTSHOT;;STAY 1}OF BULLETzAUINDX;;AUDIO REG.X;X;START SET UPX;Q>4BEGIN;;WHEN RESET ISPDOSVIN;;PRESSQ>5BEGIN;;GAME 1}WILLPDOSVIN;;START OVER.X;X; CLEAR MEMORY FOR PLAYER,X; CHARACTER SET, AND SCREENX;Q>$>CLEAR1}PPLAYERS9PPLAYERS9PPLAYERS9$PPLAYERS9.PPLAYERS98PPLAYERS9BPPLAYERS9LPPLAYERS1}9V2` HCLEARjX;tBEGIN%>;;DRAW~CONTSTQCHARDT8;;CHARACTERS >;;ON THE 3;;SCREEN QCHARDT8STORDTPSCR1}5,QSTORDTO>PSTORDTQSTORDTO>PSTORDT7 0 HSTORDT3()>|2 HCONTST<X;F1}X;SET UP SCREENPX;ZSUSQ>LSTd PSDLSTLn Q>LSTx PSDLSTHQ> PNMIENQ>DLI;;SET DLI PINTL Q>1}DLI PINTHQ> PDLIREGQ> PCOLBKX;X; SET UP P/M GRAPHICSX;STARTQ>5PLAYERS PPMBASEQ>X"1} PPCOLP0, PPCOLP26Q>@ PPCOLP3JQ> T PPCOLP1^Q>xh PHPOSP0r PPLX0| PHPOSP1X;X;CLEAR REGISTERSQ>1} PHPOSP2 PPLX2 PHPOSP3 PPLX3 PSHOTSPHIT PSCOREH PSCOREL PTSHOT PROUNDX; CLEAR NUMBERS ON 1}SCREENQ> PDISPF& PDISPG0 PDISPH: PDISPD PDISPN PDISP X PDISP.b PDISP/l PDISP0vX1};X; SET UP SCREEN POINTERSX;Q>> PSDMCTLQ> PGRACTLQ>x PLOCATIONQ>;;SET SKEETSPLOSKEE1;;IN1} THEREPLOSKEE2;;STARTINGQ>;;POSITION PSIZEP0 PSIZEP1  CLRAIM;;CLEAR GUNSIGHTQ>  PSKEE1* PSKEE24$1}>> RESETH RESET2R TSCORE\X;fX; PRINT TITLE IN SKYpX;z$>PRINTQSKESHO9 PSCR92(>  FLCH1}AR !PRINTSKESHO ASKEET SHOOTAX;X; REDEFINE CHARACTER SETX;LCHARQ9 PCHSET9Q9 PCHSET9 1}2 HLCHAR$ Q>5CHSET. PCHBAS8 $>PB CHANCHQCHDATA9L PCHSET9V 0` ICHANCHj X;t X; WAIT FOR (START) KEY~ X;1} CKEYQCONSOL R> HCKEY PHITCRL X; X;CLEAR TITLE X; $> CSCRQCLRSCR9 PSCR9 2 (> FPULL 1} !CSCR CLRSCR A A X;( X; VCOUNT DELAY ROUTINE2 X;< CHKQVCOUNTF R>{P HCHKZ QCDTMF3d HCHK2n  A1}U0x CHK2QVCOUNT R>{ FCHK2 QCHECK R> GDIR FPULL X; X; BEGIN PLAY X; PULL CLRSKE1;;CLEAR SKEET11}  CLRSKE2;;CLEAR SKEET2 Q>r;;SET PLAYERS PHPOSP0;;TO THERE PPLX0;;POSITIONS Q>;;AND WAIT PLOCATION;;FOR TH1}E STICK"  CLRAIM;;TO BE PUSH UP, Q>6 PAUDC1;;CLEAR AUDIO@ X;J #X;WAIT FOR STICK TO BE PUSHED UPT X;^ PULLSh QSTI1}CKr R>| HPULLS Q> PCHECK QRANDOM;;LOAD RANDOM # PSPEED;;FOR SPEED. Q>;;MAKE SLINING PCDTMF3;;SOUND.1} Q> PAUINDX  AU0 Q> PATRACT !DIR!PICKDIR;;RELEASE SKEETS. X; COUQDIS2;;COUNT LENGTH OF R>;;BULLE1}T ON FCLRSHOT;;THE SCREEN& IGOBULL0 X;: X;JOYSTICK CONTROLD X;N TRIGX $TSHOT;;COUNT SHOTS THATb (>;;HAVE BEEN 1}FIREDl ILRMOVE;;IF TWO HAS BEENv QTRIG0;;FIRED THEN YOUR R>;;OUT OF SHELL FFIRE !LRMOVE FIRE!SHOT;;FIRE GUN1} !GOBULL!SHOOT;;DISPLAY BULLET CLRSHOT!ERASE;;CLEAR SHOOT LRMOVE%STICK;;MOVE YOUR $PLX0;;AIM LEFT OR QSTRX8;1};RIGHT R> FSTOHOZ IRIGHT LEFT; (>( DLEFT2 0 0* LEFT2!STOHOZ4 RIGHT;> (>H ESTOHOZR 2\ 2f 1}STOHOZ&PLX0p &HPOSP0z !HMOVE UDMOVE%STICK;;MOVE YOUR AIM QSTRY8;;UP OR DOWN FMAC IMDN GMUP MDN; QL1}OCATION R> EMAC MOVEDN MOVEDN MOVEDN MAC!CHKMUP; QLOCATIONR>$DMAC. MOVEUP8 MOVEUP1}B MOVEUPL MOVEUPV!CHK`MOVEUP,;;MOVE PL0 UPj QDRAWtO>~ PTEMPO $LOCATION %DRAW0LOOPUPQPIC8 1}PPLAYER0923 )TEMPO HLOOPUPQ> PPLAYER09 "LOCATION: X;MOVEDN,;;MOVE PL0 DOWN QDRAW(O>21} PTEMPO< $LOCATIONF %DRAWPQ>Z PPLAYER09d2nLOOPDNQPIC8x PPLAYER0932 )TEMPO HLOOPDN #LOCATION1}:X;HMOVE,;;HOZ. MOVE QDRAWO> PTEMPO $LOCATION %DRAWLOOPHQPIC8 PPLAYER092"3, )TEMPO61} HLOOPH@ FJUMPUPJJUMPUP!UDMOVETX;^X; SHOOT AT THE SKEEThX;rSHOTQ>;;MAKE AUDIO|PCDTMF3;;GUN SHOTQ>1} PAUINDX QCDTMF3 HCONTS AU0 CONTS$TSHOT;;DISPLAY BULLET2;;15 LOOPS ON THE&TSHOT;;SCREENQ> PDIS1}2 #SHOTSSHOOTQPLX0 PHPOSP1, QDRAWO> & PTEMPO0 $LOCATION: %DRAWDBULLETQPIC28N PPLAYER19X2b1}3l )TEMPOv HBULLET "DIS2 !COLLX;!ERASEQDRAW;;ERASE THE BULLETO>  PTEMPO $LOCATION %DRAWQ>1} PDIS2CLRLOPQ> PPLAYER1923  )TEMPO HCLRLOP $SHOTS;;CHANGE SHOT REG.* DISPNUM4 PUTSHOT>!CHK1}HX;RSOUMAKPAUINDX\Q>f PCDTMF3p AU0z:X;X;COLLISIONX;COLLQP1PLM> HCCOLORX;COLL2Q1}P1PL PHITCRLM> HHIT2!CHKX;CCOLORQSKEE1;;SHOT SKEET1R>;;CHECK IF ITICOLL2;;HAS BEEN HIT$#HI1}T;;BEFORE..QSKEE1;;NO!8O>;;CHANGE CHARACTERBPSKEE1;;MAKE SOMELQ>*;;NOISEV SOUMAK;;AND GIVE ME`$HIT;;SOME P1}OINTS.j DISPNUMt PUTHIT~Q> SCSP QPOINT B16 !COLL2X;HIT2QSKEE2;;SHOT SKEET2R>;;SAME AS BE1}FORE IMAC2#HIT QSKEE2O> PSKEE2Q>*  SOUMAK SCSP QPOINT( B162 MAC2!CHK<X;FB16,;;16-B1}IT MATHPOSCOREL;;ADDITIONZPSCOREL;;ROUTINEdQ>n OSCOREHx PSCOREH TSCORE:X;SMALL2$CSIZE;;KEEP TRAC1}K2;;OF SKEET&CSIZE;;DISTANCE(>1 HSKEE2UPMAKE2QSKEE2;;CHANGEO>;;CHARACTER OFPSKEE2;;THE SKEETQ>1} PCSIZEX;X; P/M OF SKEET (2)X;" SKEE2UP,, QSKEE26O>@ PTEMPOJ $LOSKEE2T %SKEE2^0hLOOPSK2QMG81}r PPLAYER39|23 )TEMPO HLOOPSK2Q> PPLAYER39 "LOSKEE2 QLOSKEE2R> FRESET2:X;SMALL1$1}CSIZE;;KEEP TRACK2;;OF DISTANCE&CSIZE;;SKEET1(>1 HSKEE1UP&"MAKE1QSKEE1;;CHANGE CHARACTER0O>: PSKEE1D1}Q>N PCSIZEXX;bX; P/M OF SKEET (1)lX;v SKEE1UP, QSKEE1O> PTEMPO $LOSKEE1 %SKEE10LOOPSK1Q1}MG8 PPLAYER2923 )TEMPO HLOOPSK1Q> PPLAYER29  "LOSKEE1 QLOSKEE1 R>* FRESET4:>X;H$X; RES1}ET REGISTERS & COUNT ROUNDSRX;\RESET2 CLRSKE2f #ROUNDp #CHECKz QRANDOM PDIRECT2 SIDE2O> PHPOSP3 1}PPLX3Q> PLOSKEE2Q> PSKEE2Q> PTSHOT PAUDF1 PAUDC1 PCDTMV3 $ROUND(>$ FADDUP. DIS1}PNUM8 PUTRODB PHITCRLL:VX;`X; RESET SKEET1 REGISTERSjX;tRESET CLRSKE1~ #CHECK QRANDOM PDIRECT SI1}DE1 PHPOSP2 PPLX2Q> PLOSKEE1Q> PSKEE1 PHITCRL:X;ADDUPQ>;;AT END OF GAME  B16;;GIVE 5 1}POINTS$SHOTS;;FOR EVER BULLET2;;THAT IS LEFT.( &SHOTS2(><< FGAMEF !ADDUPPX;ZGAME$>;;DISPLAY ONdOVER1}QEND9;;THE SCREENnPSCR9;;GAME OVERx2(> FJAM !OVERX;JAMQCONSOL;;WAIT FORR>;;START KEY TOF1}AGAIN;;BEGIN. Q>;;PHPOSP2;;GET PLAYERS 1,2PHPOSP3;;OUT OF THE !JAM;;WAYX;AGAIN CLRAIM !STARTX;1}END AGAME OVERA"X;,SIDE1QDIRECT;;SKEET ONE6!SIDE;;DIRECTION@SIDE2QDIRECT2;;SKEET TWOJSIDER>U;;DIRECTIONT1} GLSIDE^R>h GMIDDLEr IRSIDE|RE:RSIDEQ>2;;LEFT SIDE!REMIDDLEQ>v;;MIDDLE!RELSIDEQ>;;RIGHT S1}IDE!RESKEEU2 SMALL1;;MOVE SKEET1QSPEED;;UP;R>2 DPICK2 SMALL1 QSPEED;R> DPICK2& SM1}ALL10 !PICK2: SKEE2U2 SMALL2;;MOVE SKEET2D;;;UPN QLOCATIONXR>b EPASTl MOVEDN;;GRAVITYvPASTQSPEED;1}R>2 DGOUP SMALL2 QSPEED;R> DGOUP SMALL2X; GOUP!COUX;#X;MAKE 16-BIT AUDIO WITH SUSTAIN1}X; AU0$AUINDX QSOUND19  PAUDF1*24 QSOUND19> PAUDC1H2R QSOUND19\ PCDTMV3f2p &AUINDXzQ> PCDTMF1}3:X;!PICKDIRQDIRECT;;MOVE IN WHATR>U;;DIRECTIONGSLEFT;;SKEET1R> GSKEEU2 ISRIGHT"PICK2QDIRECT1}2;;MOVE DIRECTIONR>U;;SKEET2 GS2LEFTR> GSKEE2U2 IS2RIGHT!COU$SLEFT$PLX2;;MOVE SKEET1. 0;;LEFT8 &1}PLX2B &HPOSP2L !SKEEU2VSRIGHT$PLX2;;MOVE SKEET1` 2;;RIGHTj &PLX2t &HPOSP2~ !SKEEU2S2LEFT$PLX3;;MOVE SKEET1}2 0;;LEFT &HPOSP3 &PLX3 !SKEE2U2S2RIGHT$PLX3;;MOVE SKEET2 2;;RIGHT &HPOSP3 &PLX3 !SKEE2U2 CLRSK1}E1QSKEE1;;CLEAR SKEET1O> PTEMPO  $LOSKEE1 %SKEE1BLANK1Q>( PPLAYER2922<3F )TEMPOP HBLANK1Z:d 1}CLRSKE2QSKEE2;;CLEAR SKEET2nO>x PTEMPO $LOSKEE2 %SKEE2BLANK2Q> PPLAYER3923 )TEMPO HBLANK21}:CLRAIM$>;;CLEAR AIMQ> CLRLOOP2 PPLAYER09 PPLAYER19(> HCLRLOOP" MOVEUP,:6DISPNUM%>;;D1}ISPLAY NUMBER@A;;ON THE SCREENJ;T L01S>d^DL02h3r>|EL01L02,CO> PHUNDRED%>A; L03S1}> DL043>EL03L04, C O> PTEN& A0 O>: PONED :N X;X TSCOREQSCOREL;;PRINT SCOREb PFRO;;ON1} SCREENl QSCOREHv PFRO  IFP FASC %> S01Q@INBUFF7 GS02 3 HS01 S02M> $> S03; S> 1} PDISP9 (>!FS05 !0!1 !)>*!FS044! Q@INBUFF7>!,H!DS03R!S043\!Q>0f!HS03p!S05:z!PUTHITQHUNDRED;1};PUT # OF!PDISP.;;HITS ON!QTEN;;SCREEN! PDISP/!QONE! PDISP0!:!PUTSHOTQHUNDRED;;PUT # OF!PDISP;1};SHOTS ON!QTEN;;SCREEN! PDISP!QONE! PDISP !:"PUTRODQHUNDRED;;PUT # OF"PDISPF;;ROUNDS"QTEN;;ON SC1}REEN$" PDISPG."QONE8" PDISPHB":L"SCSPQSPEED;;SET VALUE OFV" ;;;SKEETS`"R>;;DEPENDING ONj"ESC50;;SPEEDt";~"1}R>2" ESC25"SC10Q> ;;GIVE 10 FOR SLOW" PPOINT":"SC25Q>;;GIVE 25 FOR MED." PPOINT":"SC50Q>2;;GIVE 50 FO1}R FAST" PPOINT":"X;" X; DATA FOR NEW CHARACTER SET#X; #CHDATA 8=x===# ==# =======1}(# =|= = =|2# `=`=|<# ===|= =|= =|F# =====6=>=P# <====Z# ==D% RDLIREGN%HA1X%Q>b% PDLIREGl%A17v%>%7%9%X;%X;COLOR TAB2}LE FOR SKY%X;%TABLE ====% ====% ===r=b=R%! B=========% ===2}=%X;%X;DATA FOR AUDIO SOUNDS%X;&SOUND1 == & ==& == & == *&  == 4& ==>& 2}==H& ==R& ==\& ==f& (=-=p& (=*=z& (=$=& ==&SOUND2  == &  ==& 2}==& ==& ==&X;&X;DATA FOR SCREEN&X;&CHARDT =====& ===== =& ==2 }== &! =="= ======'! ========$= ' +==='! == =======$'! 2 }&= =Q======"=.' ====(= ===8' 3==(==/B' =4==3=====L' 3==#==/2 }==2==%V' == ===(==)=`' 4==3====j' =2==/==5==.=t' $=== =~'X;'X;D2 }ISPLAY LIST'X;'LST ===¦' SCR=SCR' ====' ====' ===' ==' =2 }====' ====A' LST'X;(X;SCREEN DISPLAY (X;(' ====' ===' ==' =0IHPE H @ABCDEFGPȹP`HPHiPHQHiQHh|ک0P1ԩOHЩ@6}X xЍHЩЍHЍHHHHHHH.d/d0dcccddd>/ЩxHЍ H HЍ N6}HH L UL MN4I` L&I3+%%43(//4@@@PN@ТxI` -LjI {*6} eM {H0@ M MrЍHH NҭxH ҍH*H eMMLM HHLJLJLJLKxH6}-O 8(L&J8̰HLJx=O08H԰ J J JLI8H fJ fJ fJ fJLI Hi HH HʹMOD HD6}H` Hi HH HDMOD HH` Hi HH HMOD HL/J*H* eMHH HHH Hi HH6} HOE H HLSK Hi HH H HE HH N NLIH* eM` ) Ѝ)1LIHHHiH* GKH 6}N N NH KLZKHHHiH* GK NH KLImHHmHH MN`HH1 HiHHHi H HHʹZOG H6}G H HF`HH1 HiHHHi H HHʹZOF HF H HD` MHH ҍH MiЍHЍ HH6}HҍҍH- N N` MH ҍH LЍHЍ HH` KHH<LLL` LL ЍLL NLH'!-%6}/6%2HLMHU0ɪ0`2LMvLMLM LH82f LH8ɠ[ LLM K8H԰ JH82 KH8ɠ KLIHOO6}OH*`HU0ɪ0HU0#ɪ0*LIHʎHL"MHHL"MHʎЎHL>MHЎHL>MHi H HHF H`6}Hi H HHG H`DE fJ`8dȪiH8 ȪiHiH`HԭH ؠ0)8 d6}ʈȩ0`HdHdHd`HcHcHc`H.dH/dH0d`H8ɠ82 H`H`2H`8x6}| |``|| | |6><<8lllll88lll86U8|0x p p6}A" P@ |||||||HHHOH ԍЍЩHHhh@²rbRB 6} (-(*($   " $ + & Q"( 3(/436}3#/2% ()432/5.$ `APH & Q"( 3(/434V10 .OPT NO LIST20 .OPT OBJ30 ; *** SKEET SHOOT ***40 ;programed by Tracy and Mike Jacobs50 ;programed in Ma:!}c/65 by OSS inc.60 *= $400070 PLAYERS $0400 ;RESERVED80 PLAYER0 $0100 ;MEMORY FOR90 PLAYER1 $0100 ;PLA:"}YERS0100 PLAYER2 $01000110 PLAYER3 $01000120 DOSVIN = $0C ;RESET POINTER0130 SDLSTL = $0230 ;DL POINTER (LB):#}0140 SDLSTH = $0231 ;DL POINTER (HB)0150 INTL = $0200 ;DLI POINTER (LB)0160 INTH = $0201 ;DLI POINTER (HB)0170 NMIE:$}N = $D40E ;INTERRUPT ENABLE0180 WSYNC = $D40A ;WAIT HOR. SYNC0190 CHSET = PLAYERS ;NEW CHAR SET0200 HPOSP0 = $D000 ;H:%}OR. PL00210 HPOSP1 = $D001 ;HOR. PL10220 HPOSP2 = $D002 ;HOR. PL20230 HPOSP3 = $D003 ;HOR. PL30240 SIZEP0 = $D008 ;SI:&}ZE OF PL00250 SIZEP1 = $D009 ;SIZE OF PL10260 SDMCTL = $022F ;(DMA) CONTROL0270 GRACTL = $D01D ;GRAPHIC CONTROL0280 PC:'}OLP0 = $02C0 ;COLOR OF0290 PCOLP1 = $02C1 ;PLAYERS0300 PCOLP2 = $02C20310 PCOLP3 = $02C30320 PMBASE = $D407 ;P/M BASE:(}0330 STICK = $0278 ;JOYSTICK (A)0340 TRIG0 = $D010 ;JOYSTICK TRIGGER0350 VCOUNT = $D40B ;VER. LINE COUNT0360 P1PL = :)}$D00D ;PL1 TO PLAYERS0370 HITCRL = $D01E ;COLLISSION CLR0380 RANDOM = $D20A ;RANDOM #0390 CHBAS = $02F4 ;CHARACTER B:*}ASE0400 COLBK = $D01A ;BACKGROUND COLOR0410 COLPF2 = $D018 ;COLOR PLAYFIELD20420 FRO = $D4 ;FLOATING POINT #0430:+} IFP = $D9AA ;(FP) CONVERSION0440 FASC = $D8E6 ;CONVERSION (SUB)0450 INBUFF = $F3 ;POINTER TO0460 ; BUFFER ASCII:,}0470 CDTMV3 = $021C ;TIMER 30480 CDTMF3 = $022A ;(3) FLAG/VECTOR0490 CONSOL = $D01F ;CONSOL PORT KEYS0500 AUDC1 = $D20:-}1 ;AUDIO(1) CONTROL0510 AUDF1 = $D200 ;AUDIO(1) FREQ.0520 AUDCTL = $D208 ;AUDIO CONTROL0530 ATRACT = $4D ;MODE TIM:.}ER0540 SCR = PLAYERS+$2000 ;DISPLAY0550 DISP = SCR+$03E8 ;COUNTERS0560 ;0570 ;Reserved Bytes for Variables0580 ;0590:/} LOCATION 1 ;PLAYER 1,2 Y POS0600 PLX0 1 ;AIM X POS.0610 PLX1 1 ;BULLET X POS.0620 PLX2 1 :0};SKEET1 X POS.0630 PLX3 1 ;SKEET2 X POS.0640 SKEE1 1 ;CHAR FOR SKEET10650 SKEE2 1 ;CHAR FOR SKEET:1}20660 HIT 1 ;HIT COUNTER0670 SHOTS 1 ;SHOT COUNTER0680 TEMPO 1 ;TEMPORARY REG.0690 DRAW 1 :2} ;PLAYERS POINTER0700 DIS2 1 ;LENGHT OF BULLET0710 ;ON THE SCREEN0720 LOSKEE1 1 ;Y POS. OF SKEE10730 LO:3}SKEE2 1 ;Y POS. OF SKEE20740 DIRECT 1 ;SKEET1 DIRECTION0750 DIRECT2 1 ;SKEET2 DIRECTION0760 SPEED 1:4} ;WHICH SPEED0770 CHECK 1 ;# FINISH SKEES0780 NUMBER 1 ;MATH REGISTERS0790 HUNDRED 10800 TEN 1:5}0810 ONE 10820 DLIREG 1 ;DLI REGISTER0830 CSIZE 1 ;SKEETS DISTANCE0840 SCOREH 1 ;HI BYTE OF SCO:6}RE0850 SCOREL 1 ;LO BYTE OF SCORE0860 ROUND 1 ;ROUND COUNTER0870 POINT 1 ;VALUE OF SKEETS0880 TSHO:7}T 1 ;STAY OF BULLET0890 AUINDX 1 ;AUDIO REG.0900 ;0910 ;START SET UP0920 ;0930 LDA # BEGIN ;GAME WILL0960 STA DOSVIN+1 ;START OVER.0970 ;0980 ; CLEAR MEM:9}ORY FOR PLAYER,0990 ; CHARACTER SET, AND SCREEN1000 ;1010 LDA #01020 LDX #01030 CLEAR STA PLAYERS,X1040 STA::} PLAYERS+$0100,X1050 STA PLAYERS+$0200,X1060 STA PLAYERS+$0300,X1070 STA PLAYERS+$0400,X1080 STA PLAYERS+:;}$0500,X1090 STA PLAYERS+$0600,X1100 STA PLAYERS+$0700,X1110 INX 1120 BNE CLEAR1130 ;1140 BEGIN LDY #0 :<} ;DRAW1150 CONTST LDA CHARDT,Y ;CHARACTERS1160 TAX ;ON THE1170 INY ;SCREEN1180 LDA CHARDT,Y:=}1190 STORDT STA SCR1200 PHA 1210 CLC 1220 LDA STORDT+11230 ADC #11240 STA STORDT+11250 LDA STOR:>}DT+21260 ADC #01270 STA STORDT+21280 PLA 1290 DEX 1300 BNE STORDT1310 INY 1320 CPY #12413:?}30 BNE CONTST1340 ;1350 ;SET UP SCREEN1360 ;1370 SUS LDA #LST&2551380 STA SDLSTL1390 LDA #LST/2561400 :@}STA SDLSTH1410 LDA #1921420 STA NMIEN1430 LDA #DLI&255 ;SET DLI1440 STA INTL1450 LDA #DLI/2561460 :A} STA INTH1470 LDA #01480 STA DLIREG1490 LDA #2421500 STA COLBK1510 ;1520 ; SET UP P/M GRAPHICS1530 ;:B}1540 START LDA # >PLAYERS1550 STA PMBASE1560 LDA #881570 STA PCOLP01580 STA PCOLP21590 LDA #134160:C}0 STA PCOLP31610 LDA #$0A1620 STA PCOLP11630 LDA #1201640 STA HPOSP01650 STA PLX01660 STA H:D}POSP11670 ;1680 ;CLEAR REGISTERS1690 LDA #01700 STA HPOSP21710 STA PLX21720 STA HPOSP31730 STA PLX:E}31740 STA SHOTS1750 STA HIT1760 STA SCOREH1770 STA SCOREL1780 STA TSHOT1790 STA ROUND1800 ; CL:F}EAR NUMBERS ON SCREEN1810 LDA #161820 STA DISP+701830 STA DISP+711840 STA DISP+721850 STA DISP+7186:G}0 STA DISP+81870 STA DISP+91880 STA DISP+461890 STA DISP+471900 STA DISP+481910 ;1920 ; SET UP SCRE:H}EN POINTERS1930 ;1940 LDA #621950 STA SDMCTL1960 LDA #31970 STA GRACTL1980 LDA #1201990 STA LO:I}CATION2000 LDA #208 ;SET SKEETS2010 STA LOSKEE1 ;IN THERE2020 STA LOSKEE2 ;STARTING2030 LDA #1 ;P:J}OSITION2040 STA SIZEP02050 STA SIZEP12060 JSR CLRAIM ;CLEAR GUNSIGHT2070 LDA #12080 STA SKEE12090 :K} STA SKEE22100 LDX #02110 JSR RESET2120 JSR RESET22130 JSR TSCORE2140 ;2150 ; PRINT TITLE IN SKY216:L}0 ;2170 LDX #02180 PRINT LDA SKESHO,X2190 STA SCR+135,X2200 INX 2210 CPX #112220 BEQ LCHAR2230 :M} JMP PRINT2240 SKESHO .SBYTE "SKEET SHOOT"2250 ;2260 ; REDEFINE CHARACTER SET2270 ;2280 LCHAR LDA $E000,X2290 STA C:N}HSET,X2300 LDA $E0FF,X2310 STA CHSET+$FF,X2320 INX 2330 BNE LCHAR2340 LDA # >CHSET2350 STA CHBA:O}S2360 LDX #802370 CHANCH LDA CHDATA,X2380 STA CHSET+8,X2390 DEX 2400 BPL CHANCH2410 ;2420 ; WAIT FOR (:P}START) KEY2430 ;2440 CKEY LDA CONSOL2450 CMP #62460 BNE CKEY2470 STA HITCRL2480 ;2490 ;CLEAR TITLE2500 ;:Q}2510 LDX #02520 CSCR LDA CLRSCR,X2530 STA SCR+135,X2540 INX 2550 CPX #112560 BEQ PULL2570 JMP C:R}SCR2580 CLRSCR .SBYTE " "2590 ;2600 ; VCOUNT DELAY ROUTINE2610 ;2620 CHK LDA VCOUNT2630 CMP #1232640 :S} BNE CHK2650 LDA CDTMF32660 BNE CHK22670 JSR AU02680 CHK2 LDA VCOUNT2690 CMP #1232700 BEQ CHK22710:T} LDA CHECK2720 CMP #22730 BMI DIR2740 BEQ PULL2750 ;2760 ; BEGIN PLAY2770 ;2780 PULL JSR CLRSKE1 ;CLEA:U}R SKEET12790 JSR CLRSKE2 ;CLEAR SKEET22800 LDA #114 ;SET PLAYERS2810 STA HPOSP0 ;TO THERE2820 STA PLX:V}0 ;POSITIONS2830 LDA #130 ;AND WAIT2840 STA LOCATION ;FOR THE STICK2850 JSR CLRAIM ;TO BE PUSH UP2860 :W} LDA #02870 STA AUDC1 ;CLEAR AUDIO2880 ;2890 ;WAIT FOR STICK TO BE PUSHED UP2900 ;2910 PULLS2920 LDA STICK:X}2930 CMP #142940 BNE PULLS2950 LDA #02960 STA CHECK2970 LDA RANDOM ;LOAD RANDOM #2980 STA SPEE:Y}D ;FOR SPEED.2990 LDA #0 ;MAKE SLINING3000 STA CDTMF3 ;SOUND.3010 LDA #183020 STA AUINDX3030 :Z} JSR AU03040 LDA #03050 STA ATRACT3060 DIR JMP PICKDIR ;RELEASE SKEETS.3070 ;3080 COU LDA DIS2 ;COUNT LENGTH :[}OF3090 CMP #1 ;BULLET ON3100 BEQ CLRSHOT ;THE SCREEN3110 BPL GOBULL3120 ;3130 ;JOYSTICK CONTROL3140 ;:\}3150 TRIG3160 LDX TSHOT ;COUNT SHOTS THAT3170 CPX #2 ;HAVE BEEN FIRED3180 BPL LRMOVE ;IF TWO HAS BEEN:]}3190 LDA TRIG0 ;FIRED THEN YOUR3200 CMP #0 ;OUT OF SHELL3210 BEQ FIRE3220 JMP LRMOVE3230 FIRE JMP :^}SHOT ;FIRE GUN3240 GOBULL JMP SHOOT ;DISPLAY BULLET3250 CLRSHOT JMP ERASE ;CLEAR SHOOT3260 LRMOVE LDY STICK ;MOVE YOUR3:_}270 LDX PLX0 ;AIM LEFT OR3280 LDA STRX,Y ;RIGHT3290 CMP #03300 BEQ STOHOZ3310 BPL RIGHT3320 LEFT:`} SEC 3330 CPX #403340 BCC LEFT23350 DEX 3360 DEX 3370 LEFT2 JMP STOHOZ3380 RIGHT SEC 3390 CPX #204:a}3400 BCS STOHOZ3410 INX 3420 INX 3430 STOHOZ STX PLX03440 STX HPOSP03450 JMP HMOVE3460 UDMOVE LDY :b}STICK ;MOVE YOUR AIM3470 LDA STRY,Y ;UP OR DOWN3480 BEQ MAC3490 BPL MDN3500 BMI MUP3510 MDN SEC 3520 :c} LDA LOCATION3530 CMP #2123540 BCS MAC3550 JSR MOVEDN3560 JSR MOVEDN3570 JSR MOVEDN3580 MAC JMP C:d}HK3590 MUP SEC 3600 LDA LOCATION3610 CMP #163620 BCC MAC3630 JSR MOVEUP3640 JSR MOVEUP3650 JSR:e} MOVEUP3660 JSR MOVEUP3670 JMP CHK3680 MOVEUP CLC ;MOVE PL0 UP3690 LDA DRAW3700 ADC #143710 ST:f}A TEMPO3720 LDX LOCATION3730 LDY DRAW3740 DEX 3750 LOOPUP LDA PIC,Y3760 STA PLAYER0,X3770 INX 3780:g} INY 3790 CPY TEMPO3800 BNE LOOPUP3810 LDA #03820 STA PLAYER0,X3830 DEC LOCATION3840 RTS 3:h}850 ;3860 MOVEDN CLC ;MOVE PL0 DOWN3870 LDA DRAW3880 ADC #143890 STA TEMPO3900 LDX LOCATION3910 :i} LDY DRAW3920 LDA #03930 STA PLAYER0,X3940 INX 3950 LOOPDN LDA PIC,Y3960 STA PLAYER0,X3970 INY 39:j}80 INX 3990 CPY TEMPO4000 BNE LOOPDN4010 INC LOCATION4020 RTS 4030 ;4040 HMOVE CLC ;HOZ. MOVE:k}4050 LDA DRAW4060 ADC #144070 STA TEMPO4080 LDX LOCATION4090 LDY DRAW4100 LOOPH LDA PIC,Y4110 :l}STA PLAYER0,X4120 INX 4130 INY 4140 CPY TEMPO4150 BNE LOOPH4160 BEQ JUMPUP4170 JUMPUP JMP UDMOVE41:m}80 ;4190 ; SHOOT AT THE SKEET4200 ;4210 SHOT LDA #0 ;MAKE AUDIO4220 STA CDTMF3 ;GUN SHOT4230 LDA #04240 :n} STA AUINDX4250 LDA CDTMF34260 BNE CONTS4270 JSR AU04280 CONTS LDX TSHOT ;DISPLAY BULLET4290 INX :o} ;15 LOOPS ON THE4300 STX TSHOT ;SCREEN4310 LDA #154320 STA DIS24330 INC SHOTS4340 SHOOT LDA PLX0435:p}0 STA HPOSP14360 CLC 4370 LDA DRAW4380 ADC #94390 STA TEMPO4400 LDX LOCATION4410 LDY DRAW4:q}420 BULLET LDA PIC2,Y4430 STA PLAYER1,X4440 INX 4450 INY 4460 CPY TEMPO4470 BNE BULLET4480 DEC :r}DIS24490 JMP COLL4500 ;4510 ERASE LDA DRAW ;ERASE THE BULLET4520 ADC #94530 STA TEMPO4540 LDX LOCATION:s}4550 LDY DRAW4560 LDA #04570 STA DIS24580 CLRLOP LDA #04590 STA PLAYER1,X4600 INX 4610 INY 46:t}20 CPY TEMPO4630 BNE CLRLOP4640 LDX SHOTS ;CHANGE SHOT REG.4650 JSR DISPNUM4660 JSR PUTSHOT4670 :u} JMP CHK4680 ;4690 SOUMAK STA AUINDX4700 LDA #04710 STA CDTMF34720 JSR AU04730 RTS 4740 ;4750 ;COLLI:v}SION4760 ;4770 COLL LDA P1PL4780 AND #$044790 BNE CCOLOR4800 ;4810 COLL2 LDA P1PL4820 STA HITCRL4830 :w}AND #$084840 BNE HIT24850 JMP CHK4860 ;4870 CCOLOR LDA SKEE1 ;SHOT SKEET14880 CMP #15 ;CHECK IF IT4890 :x} BPL COLL2 ;HAS BEEN HIT4900 INC HIT ;BEFORE.4910 LDA SKEE1 ;NO!4920 ADC #22 ;CHANGE CHARACTER:y}4930 STA SKEE1 ;MAKE SOME4940 LDA #42 ;NOISE4950 JSR SOUMAK ;AND GIVE ME4960 LDX HIT ;SOME POIN:z}TS.4970 JSR DISPNUM4980 JSR PUTHIT4990 LDA #1285000 JSR SCSP5010 LDA POINT5020 JSR B165030 :{} JMP COLL25040 ;5050 HIT2 LDA SKEE2 ;SHOT SKEET25060 CMP #15 ;SAME AS BEFORE5070 BPL MAC25080 INC HIT5:|}090 LDA SKEE25100 ADC #225110 STA SKEE25120 LDA #425130 JSR SOUMAK5140 JSR SCSP5150 LDA POI:}}NT5160 JSR B165170 MAC2 JMP CHK5180 ;5190 B16 CLC ;16-BIT MATH5200 ADC SCOREL ;ADDITION5210 STA SC:~}OREL ;ROUTINE5220 LDA #05230 ADC SCOREH5240 STA SCOREH5250 JSR TSCORE5260 RTS 5270 ;5280 SMALL2 L:}DX CSIZE ;KEEP TRACK5290 INX ;OF SKEET5300 STX CSIZE ;DISTANCE5310 CPX #495320 BNE SKEE2UP5330:} MAKE2 LDA SKEE2 ;CHANGE5340 ADC #3 ;CHARACTER OF5350 STA SKEE2 ;THE SKEET5360 LDA #05370 STA CSIZ:}E5380 ;5390 ; P/M OF SKEET (2)5400 ;5410 SKEE2UP CLC 5420 LDA SKEE25430 ADC #45440 STA TEMPO5450 LDX :}LOSKEE25460 LDY SKEE25470 DEX 5480 LOOPSK2 LDA MG,Y5490 STA PLAYER3,X5500 INX 5510 INY 5520 CP:}Y TEMPO5530 BNE LOOPSK25540 LDA #05550 STA PLAYER3,X5560 DEC LOSKEE25570 LDA LOSKEE25580 CMP #2:}45590 BEQ RESET25600 RTS 5610 ;5620 SMALL1 LDX CSIZE ;KEEP TRACK5630 INX ;OF DISTANCE5640 STX C:}SIZE ;SKEET15650 CPX #495660 BNE SKEE1UP5670 MAKE1 LDA SKEE1 ;CHANGE CHARACTER5680 ADC #35690 STA SKEE:}15700 LDA #05710 STA CSIZE5720 ;5730 ; P/M OF SKEET (1)5740 ;5750 SKEE1UP CLC 5760 LDA SKEE15770 ADC :}#45780 STA TEMPO5790 LDX LOSKEE15800 LDY SKEE15810 DEX 5820 LOOPSK1 LDA MG,Y5830 STA PLAYER2,X5840:} INX 5850 INY 5860 CPY TEMPO5870 BNE LOOPSK15880 LDA #05890 STA PLAYER2,X5900 DEC LOSKEE15:}910 LDA LOSKEE15920 CMP #245930 BEQ RESET5940 RTS 5950 ;5960 ; RESET REGISTERS & COUNT ROUNDS5970 ;598:}0 RESET2 JSR CLRSKE25990 INC ROUND6000 INC CHECK6010 LDA RANDOM6020 STA DIRECT26030 JSR SIDE26040 :} ADC #86050 STA HPOSP36060 STA PLX36070 LDA #2086080 STA LOSKEE26090 LDA #16100 STA SKEE2611:}0 LDA #06120 STA TSHOT6130 STA AUDF16140 STA AUDC16150 STA CDTMV36160 LDX ROUND6170 CPX #31:}6180 BEQ ADDUP6190 JSR DISPNUM6200 JSR PUTROD6210 STA HITCRL6220 RTS 6230 ;6240 ; RESET SKEET1 REG:}ISTERS6250 ;6260 RESET JSR CLRSKE16270 INC CHECK6280 LDA RANDOM6290 STA DIRECT6300 JSR SIDE16310 S:}TA HPOSP26320 STA PLX26330 LDA #2086340 STA LOSKEE16350 LDA #16360 STA SKEE16370 STA HITCRL638:}0 RTS 6390 ;6400 ADDUP LDA #5 ;AT END OF GAME6410 JSR B16 ;GIVE 5 POINTS6420 LDX SHOTS ;FOR EVER BUL:}LET6430 INX ;THAT IS LEFT.6440 STX SHOTS6450 CPX #606460 BEQ GAME6470 JMP ADDUP6480 ;6490 :}GAME LDX #0 ;DISPLAY ON6500 OVER LDA END,X ;THE SCREEN6510 STA SCR+135,X ;GAME OVER6520 INX 6530 CPX #9:}6540 BEQ JAM6550 JMP OVER6560 ;6570 JAM LDA CONSOL ;WAIT FOR6580 CMP #6 ;START KEY TO6590 BEQ AGAI:}N ;BEGIN.6600 LDA #0 ;6610 STA HPOSP2 ;GET PLAYERS 1,26620 STA HPOSP3 ;OUT OF THE6630 JMP JAM :} ;WAY6640 ;6650 AGAIN JSR CLRAIM6660 JMP START6670 ;6680 END .SBYTE "GAME OVER"6690 ;6700 SIDE1 LDA DIRECT ;SKEET:} ONE6710 JMP SIDE ;DIRECTION6720 SIDE2 LDA DIRECT2 ;SKEET TWO6730 SIDE CMP #85 ;DIRECTION6740 BMI LSIDE675:}0 CMP #1706760 BMI MIDDLE6770 BPL RSIDE6780 RE RTS 6790 RSIDE LDA #50 ;LEFT SIDE6800 JMP RE6810 MIDD:}LE LDA #118 ;MIDDLE6820 JMP RE6830 LSIDE LDA #192 ;RIGHT SIDE6840 JMP RE6850 SKEEU2 JSR SMALL1 ;MOVE SKEET16860:} LDA SPEED ;UP6870 SEC 6880 CMP #506890 BCC PICK26900 JSR SMALL16910 LDA SPEED6920 SEC 6:}930 CMP #1606940 BCC PICK26950 JSR SMALL16960 JMP PICK26970 SKEE2U2 JSR SMALL2 ;MOVE SKEET26980 SEC :} ;UP6990 LDA LOCATION7000 CMP #2127010 BCS PAST7020 JSR MOVEDN ;GRAVITY7030 PAST LDA SPEED7040 :} SEC 7050 CMP #507060 BCC GOUP7070 JSR SMALL27080 LDA SPEED7090 SEC 7100 CMP #1607110 B:}CC GOUP7120 JSR SMALL27130 ;7140 GOUP JMP COU7150 ;7160 ;MAKE 16-BIT AUDIO WITH SUSTAIN7170 ;7180 AU0 LDX AUINDX7:}190 LDA SOUND1,X7200 STA AUDF17210 INX 7220 LDA SOUND1,X7230 STA AUDC17240 INX 7250 LDA SOU:}ND1,X7260 STA CDTMV37270 INX 7280 STX AUINDX7290 LDA #$FF7300 STA CDTMF37310 RTS 7320 ;7330 P:}ICKDIR LDA DIRECT ;MOVE IN WHAT7340 CMP #85 ;DIRECTION7350 BMI SLEFT ;SKEET17360 CMP #1707370 BMI S:}KEEU27380 BPL SRIGHT7390 PICK2 LDA DIRECT2 ;MOVE DIRECTION7400 CMP #85 ;SKEET27410 BMI S2LEFT7420 CM:}P #1707430 BMI SKEE2U27440 BPL S2RIGHT7450 JMP COU7460 SLEFT LDX PLX2 ;MOVE SKEET17470 DEX ;LEF:}T7480 STX PLX27490 STX HPOSP27500 JMP SKEEU27510 SRIGHT LDX PLX2 ;MOVE SKEET17520 INX ;RIGHT753:}0 STX PLX27540 STX HPOSP27550 JMP SKEEU27560 S2LEFT LDX PLX3 ;MOVE SKEET27570 DEX ;LEFT7580 :}STX HPOSP37590 STX PLX37600 JMP SKEE2U27610 S2RIGHT LDX PLX3 ;MOVE SKEET27620 INX ;RIGHT7630 STX:} HPOSP37640 STX PLX37650 JMP SKEE2U27660 CLRSKE1 LDA SKEE1 ;CLEAR SKEET17670 ADC #47680 STA TEMPO7690 :} LDX LOSKEE17700 LDY SKEE17710 BLANK1 LDA #07720 STA PLAYER2,X7730 INX 7740 INY 7750 CPY TEMPO77:}60 BNE BLANK17770 RTS 7780 CLRSKE2 LDA SKEE2 ;CLEAR SKEET27790 ADC #47800 STA TEMPO7810 LDX LOSKEE2:}7820 LDY SKEE27830 BLANK2 LDA #07840 STA PLAYER3,X7850 INX 7860 INY 7870 CPY TEMPO7880 BNE BLAN:}K27890 RTS 7900 CLRAIM LDX #0 ;CLEAR AIM7910 LDA #07920 CLRLOOP INX 7930 STA PLAYER0,X7940 STA PLAYER:}1,X7950 CPX #2557960 BNE CLRLOOP7970 JSR MOVEUP7980 RTS 7990 DISPNUM LDY #0 ;DISPLAY NUMBER8000 TX:}A ;ON THE SCREEN8010 SEC 8020 L01 SBC #$648030 BCC L028040 INY 8050 TAX 8060 BCS L018070 L:}02 CLC 8080 TYA 8090 ADC #$108100 STA HUNDRED8110 LDY #08120 TXA 8130 SEC 8140 L03 SBC #$0A81:}50 BCC L048160 INY 8170 TAX 8180 BCS L038190 L04 CLC 8200 TYA 8210 ADC #$108220 STA TEN82:}30 TXA 8240 ADC #$108250 STA ONE8260 RTS 8270 ;8280 TSCORE LDA SCOREL ;PRINT SCORE8290 STA FRO :};ON SCREEN8300 LDA SCOREH8310 STA FRO+18320 JSR IFP8330 JSR FASC8340 LDY #08350 S01 LDA (INBUFF),Y:}8360 BMI S028370 INY 8380 BNE S018390 S02 AND #$7F8400 LDX #48410 S03 SEC 8420 SBC #$208430 ST:}A DISP+30,X8440 CPX #08450 BEQ S058460 DEX 8470 DEY 8480 CPY #$FF8490 BEQ S048500 LDA (INB:}UFF),Y8510 CLC 8520 BCC S038530 S04 INY 8540 LDA #$308550 BNE S038560 S05 RTS 8570 PUTHIT LDA HUNDRED :};PUT # OF8580 STA DISP+46 ;HITS ON8590 LDA TEN ;SCREEN8600 STA DISP+478610 LDA ONE8620 STA DISP+:}488630 RTS 8640 PUTSHOT LDA HUNDRED ;PUT # OF8650 STA DISP+7 ;SHOTS ON8660 LDA TEN ;SCREEN8670 STA :}DISP+88680 LDA ONE8690 STA DISP+98700 RTS 8710 PUTROD LDA HUNDRED ;PUT # OF8720 STA DISP+70 ;ROUNDS8730:} LDA TEN ;ON SCREEN8740 STA DISP+718750 LDA ONE8760 STA DISP+728770 RTS 8780 SCSP LDA SPEED ;SE:}T VALUE OF8790 SEC ;SKEETS8800 CMP #160 ;DEPENDING ON8810 BCS SC50 ;SPEED8820 SEC 8830 :} CMP #508840 BCS SC258850 SC10 LDA #10 ;GIVE 10 FOR SLOW8860 STA POINT8870 RTS 8880 SC25 LDA #25 ;GIVE:} 25 FOR MED.8890 STA POINT8900 RTS 8910 SC50 LDA #50 ;GIVE 50 FOR FAST8920 STA POINT8930 RTS 8940 ;:}8950 ; DATA FOR NEW CHARACTER SET8960 ;8970 CHDATA .BYTE 56,120,216,24,248980 .BYTE 24,24,2258990 .BYTE 0,0,0,0,0:},0,0,09000 .BYTE 0,124,12,12,1249010 .BYTE 96,96,1249020 .BYTE 0,0,0,124,12,124,12,1249030 .BYTE 0,0,0,0,:}0,54,62,69040 .BYTE 60,195,195,195,1959050 .BYTE 195,195,609060 .BYTE 0,56,108,108,1089070 .BYTE 108,108,:}569080 .BYTE 0,0,0,56,108,108,108,569090 .BYTE 0,0,0,0,0,28,54,289100 .BYTE 85,0,0,0,0,0,0,09110 ;9120 ;LEFT:} OR RIGHT DATA FOR STICK9130 ;9140 STRX .BYTE 0,0,0,0,0,1,1,19150 .BYTE 0,-1,-1,-1,0,0,0,09160 ;9170 ;UP OR DOWN DAT:}A FOR STICK9180 ;9190 STRY .BYTE 0,0,0,0,0,1,-1,09200 .BYTE 0,1,-1,0,0,1,-1,09210 ;9220 ;GRAPHICS FOR AIM(GUNSIGHT):}9230 ;9240 PIC .BYTE 16,16,16,0,0,09250 .BYTE 146,0,0,0,16,16,169260 ;9270 ;GRAPHICS FOR SKEETS9280 ;9290 MG .BYTE:} 0,56,124,254,0,48,1209300 .BYTE 252,0,32,112,248,0,329310 .BYTE 112,0,0,0,0,0,0,0,09320 .BYTE 0,0,0,0,20,65,8:},34,89330 .BYTE 32,132,32,80,128,169340 .BYTE 128,64,128,32,0,0,0,0,09350 ;9360 ;GRAPHICS FOR BULLET9370 ;9380 :}PIC2 .BYTE 0,0,0,124,124,1249390 .BYTE 124,124,124,124,0,0,09400 ;9410 ;DLI ROUTINE9420 ;9430 DLI PHA 9440 TXA :}9450 PHA 9460 LDX DLIREG9470 LDA TABLE,X9480 INX 9490 STX DLIREG9500 STA WSYNC9510 STA COL:}BK9520 STA COLPF29530 DLOOP LDA #309540 CMP DLIREG9550 BNE A19560 LDA #09570 STA DLIREG9580 A1 PL:}A 9590 TAX 9600 PLA 9610 RTI 9620 ;9630 ;COLOR TABLE FOR SKY9640 ;9650 TABLE .BYTE 242,242,242,242,242966:}0 .BYTE 242,226,210,194,1789670 .BYTE 162,146,130,114,98,829680 .BYTE 66,2,2,2,4,4,4,4,4,49690 .BYTE 4,4,4:},4,49700 ;9710 ;DATA FOR AUDIO SOUNDS9720 ;9730 SOUND1 .BYTE 20,$8F,69740 .BYTE 18,$8A,49750 .BYTE 16,$85,2976:}0 .BYTE 14,$82,109770 .BYTE 10,$82,129780 .BYTE 0,0,09790 .BYTE 20,$84,49800 .BYTE 18,$86,49810 :}.BYTE 16,$88,49820 .BYTE 14,$8A,49830 .BYTE 40,$2D,19840 .BYTE 40,$2A,29850 .BYTE 40,$24,29860 .BYTE:} 0,0,09870 SOUND2 .BYTE 10,$8F,109880 .BYTE 9,$8A,89890 .BYTE 8,$87,79900 .BYTE 7,$85,69910 .BYTE 6,$83,:}59920 ;9930 ;DATA FOR SCREEN9940 ;9950 CHARDT .BYTE 200,0,200,0,160,09960 .BYTE 3,0,1,5,2,9,289970 .BYTE 0,1,5,:}2,99980 .BYTE 6,0,34,10,5,0,1,4,2,89990 .BYTE 30,0,1,4,2,8,4,0,36,10010000 .BYTE 43,0,1,3010010 .BYTE 2,7,32,:}0,1,3,2,7,2,0010020 .BYTE 38,10,81,0,1,1,2,6,34,0010030 .BYTE 1,1,2,6,40,10,1,0,1010040 .BYTE 51,1,40,1,47010050 8}