@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr KD:KINGEQU.M65 >D:KING.DATX;X;Erase P/M MemoryX;CLRPM%>;;zero }A + YCCPM1PPLR08;;zap plyr's PPLR18 PPLR28 PPLR383HCPM1;;loop again :;;bye.X;"X;Erase screen m}emory,X;6CLRSCR$>;;do 1K@%>J'SCRT Q>5MYSCRN^ PSCRhCrCS1P@SCR7|3HCS1;;page yet? #SCR}0;;next pageICS1 :;;done.X;X;Erase MYLINEX;ERMYLN%>';;40 charsQ>ERLPMYLINE8;;on scrn1I}ERL :;;doneX;X;Print routine&X;0EPRINTPIND2;;save address: 'IND2D ERMYLN;;clear lineN 3;;Y = 0XPRL }1Q@IND27;;first charbIPRL2;;normal? printlM>;;mask inversevPRL2PMYLINE8;;on screenQ@IND27;;get againGPRL3 };;if>$80 end3;;up countHPRL1;;go againPRL3%>w;;two secondsPRL4 WAIT;;wait jiffy1;;dec loop IPRL4 :;; }leavePRL5$>;;wait 10 sec.PRL6 PRL30 HPRL6: X;X;Show number of men left X;*MENLEFTQMEN1;;player } one4,;;add color>O>PHPMENL;;on scrnRQMEN2;;same for\,;;player twofO>Pp PMENLz :;;done.X;X;Ver }tical Blank RoutineX;VBLANK1Q>;;just KILLPATRACT;;atract mode. !SYSVBVX;X;Audio promptsX;BEEPQ>};;high toneHBTONE;;play itX;BOOPQ>d;;low toneBTONEPAUDF1;;save freqQ>;;pure sound PAUDC1$ BWAIT;};and leave on.X;8X;Sound OffBX;LSNDOFFQ>;;now zeroVPAUDF1;;the sound`PAUDF2;;registersj PAUDC1t PAUDC2~}:X;X;Wait 4 jiffiesX;BWAIT%>;;wait 4 jiffiesDOW WAIT;;pause 1 jiffy1;;decrease loopIDOW;;do again} :;;leaveX;X;Turn on screenX;TURNON$>&COLOR4;;in color  &COLOR2$> &COLOR1($>4GDLI;;point to} DLI2 &VDSLST< $>5GDLIF&VDSLSTP$>;;turn it onZ &NMIENd$>>n &SDMCTLx :;;doneX;X;Turn off screen}X;TURNOFF$>&SDMCTL;;turn off scrn !WAITX;X;Posit players for boardX;POSPM$>;;get zero &PCOLR2} &PCOLR32&GPRIOR;;set priority&SIZEP0;;double wide CLRPM;;erase P/M"Q>;;gold color, PPCOLR06Q>5MYPM};;set PMBASE@ PPMBASEJQ>;;set sizesT PSIZEP2^ PSIZEP3hPGRACTL;;turn on P/MrQ>;;define plyrs|%>>;;2 + 3 as} thePDF1PPLR28;;borders PPLR383)> HPDF1Q>,;;now positionPHPOSP2;;them on theQ>;;screen PHP}OSP3 :;;later.X;X;Switch playersX;SWITCHQPLAYER;;get playerN>;;flip itPPLAYER;;store& :;;done.0X;}:X;Wait a 1 jiffyDX;NWAITQ>;;zero the clockX PRTCLOKbW1QRTCLOK;;get clocklFW1;;if same loopv :;;leaveX;}X;Test player moveX;TESTITPSAVEA;;save AGMVOK;;empty? yes.FMVNK;;bad moveR>;;objects? EMVNKQPL}AYER;;get plyr #HHAV2;;player 2QSAVEA;;charR> ;;equal 10?EMVOK;;no. good.DMVNK;;bad move. HAV2QSAVEA;};restore AR> ;;> 10? EMVNK;;yes. bad one.*MVOK,;;signal good.4 :;;leave.>MVNK;;;signal bad.H :;;leaveRX;\X};Move + define cursorfX;pDEFINEQPLRX;;get X poszPHPOSP0;;in horizontal%PLRY;;get Y pos$>;;and erase topA};;half of theDEF0PPLR08;;cursor1 HDEF0%PLRY;;get Y againDEF1QDEFPL19;;and put inPPLR08;;the definitio}n32(>;;20 bytes yet?HDEF1;;no. DEF2PPLR08;;now erase under 3;;the cursor. HDEF2$ :;;done.. X;8 X;P}erform a cursor moveB X;L DOMOVE%MOVED;;get moveV QMOVTAB8;;load and store` PMOVJMP;;vector inj QMOVTAB8;;the } tablet PMOVJMP~ MOVJMP!;;Move it! X; X;Move LEFT X; LEFT%TABPOS;;get pos QGAMBRD8;;look left FD!}N1;;bad move! %>;;okeh move it LLP'SAVEY;;back 8 pixels "PLRX  WAIT;;wait a jiffy DEFINE %SAVEY 1 I"}LLP "TABPOS;;new posit DN1:;;done.( X;2 X;Move RIGHT< X;F RIGHT%TABPOS;;positionP QGAMBRD8;;look rightZ FD#}N1;;bad oned %>;;move rightn RLP'SAVEY;;8 pixels.x #PLRX WAIT DEFINE %SAVEY 1 IRLP #TABPOS : X$}; X;Move UP X; UPQTABPOS;;posit ;;;up one line S> ? QGAMBRD8;;look in board FDN2;;bad move!" 'TABPOS;%};save posit, %>;;move player6 ULP'SAVEY;;up 16 pixels@ "PLRYJ WAITT DEFINE^ %SAVEYh 1r IULP| : X; X;M&}ove DOWN X; DOWNQTABPOS;;posit ,;;add 13 for line O>;;down ? QGAMBRD8;;get piece FDN2;;bad 'TABPOS;;sa'}ve posit %>;;move player DLP'SAVEY;;down 16 pixels #PLRY WAIT DEFINE %SAVEY& 10 IDLP: DN2:;;all do(}neD X;N X;Read Stick + buttonX X;b X;MOVED = 0 for leftl X; = 2 for rightv X; = 4 for up X; = 6 for do)}wn X; STICK$PLAYER;;get player Q>;;and reset PSTICK09;;stick values Q> PSTRIG09 QMOVED;;put last move*} POMOVE;;in hold area STCKQ> PMOVED;;no move made CSTKQSTICK09;;read stick R>;;no move FTRYTRG;;try trig+}ger R> ;;left? HST0;;no. Q>;;move is 0* FSTDN4 ST0R>;;right?> HST1;;no.H Q>;;table offsetR HSTDN;;=2\ ,}ST1R>;;up?f HST2;;no.p Q>;;offset = 4z HSTDN ST2R> ;;down? HCSTK;;no. read again Q>;;make a 6 STDNP-}MOVED;;save move ;;;signal move : TRYTRGQSTRIG09;;trigger HCSTK;;read stick ,;;signal fire : X; X;Add bord.}er to game board X;ADDBORD$> ;;12 linesQ>;;make thePCOLOR2;;screen black$ PCOLOR4.Q>4MYSCRN 8PSCR/}BQ>5MYSCRN L PSCRVBOR0%>;;26 chars`Q>T;;red spacejBOR1P@SCR7;;on screent1;;down loop~IBOR1;;and 0}run againQSCR;;now add 40,;;to screenO>(;;pointer toPSCR;;get to nextQSCR;;screen lineO> PSCR1}0;;dec outer loopIBOR0;;do again:;;all doneX;X;Randomize terrain featuresX; TERRAIN%>;;21 features2}TERR1QRANDOM;;numberR>( DTERR12R>Q< ETERR1F>PTERR2QRANDOM;;next numberZR>;;check if pieced DTERR2n3}R>x ETERR2PSAVEA;;save itQGAMBRD9;;get pieceITERR1;;<128 no goodQSAVEA;;get feature,;;and add 18O4}>PGAMBRD9;;put in 1;;boardITERR1;;do againX;X;Now assure a path throughX;DOPATHQRANDOMM>;;only5} 0-3 R>;;=3?FDOPATH;;yes do again"T?;;times 8,T?6T?@?J$>;;do 8 spacesTPATH2QPATHS8;;get posit^'SAV6}EY;;save Yh?rQ>;;get blank|PGAMBRD8;;put in%SAVEY;;board. get Y3;;up posit0;;dec loopIPATH2;;and loop 7}again:;;all doneX;X;Fill play fieldX;SETSCR%>Q>4DLIST1;;install myPSDLSTL;;display list Q>5DLIST8}1PSDLSTL SE1QGAMBRD8;;get a pieceFSNXT;;leave aloneISE2;;have character&Q>;;get empty0SE2T?;;* 29}: T?;;* 4D'SAVEY;;save yN>;;char indexXC;;screen positb T?;;* 2l?vQSCRTAB8;;look up addrPINDR;;and save it:}QSCRTAB8 PINDR%>SE3QCHARS9;;get charP@INDR7;;on screen2;;up count3)>;;2 yet? HSE3;;no;}.%>QINDR;;add 40 to scrn,;;positionO>(  PINDR QINDR O>* PINDR4SE4QCHARS9;;next half of><}P@INDR7;;characterH2;;goes on screenR3\)>fHSE4p%SAVEY;;restore YzSNXT3;;up it.)>F;;70 yet? HSE1;;no=}. :;;done.X;X;Copy game boardX;BEGIN-;;no decimalQ>;;fix boot status PBOOT?Q>4BEGIN;;make program>}PDOSINI;;reset proof Q>5BEGINPDOSINIQ>;;init soundPSKCTL;;stuffQ>;;kill cold start$ PCOLDST. P?}AUDCTL8$>;;erase bottomBERZPGPZPAGE9;;half ofL2;;page zeroV HERZPG`?jZGBPGAMBRD8;;erase GAMBRDt3~HZGB@}Q> ;;set # of men PMEN1 PMEN2%>E;;now copy inBEG1QBRDSET8;;the newPGAMBRD8;;board1 IBEG1%>A};;copy in theHTBQHITTAB8;;hit pointPHTAB8;;table1IHTB Q>4SCRTAB;;now we makePINDR;;up the screenQ>B}5SCRTAB;;definition(PINDR;;table.2$><Q>4MYSCRN, ;;startFPIND2;;screen positPQ>5MYSCRN, Z PIND2C}d SC1%>nSC2QIND2;;get scrnx,;;and add 2O> PIND2P@INDR7;;save in table QIND2O>;;now do hi bytD}e3P@INDR7;;in table PIND23)>;;28 yet? HSC2;;no.QINDR;;now add offset,;;to tableO>;;positiE}onPINDR;;and store it. QINDR"O>, PINDR6QIND2;;now update@,;;screen pointerJO>4;;52 chars laterT PF}IND2^ QIND2hO>r PIND2|2;;up line count(>;;5 yet? HSC1;;no. INTRO;;display intro TERRAINX;G}X;Start of gameX;CHESS TURNOFF%>4VBLANK1;;set Vblank$>5VBLANK1;;vectorQ>;;Immediate mode SETVBV;;H}set it! CLRSCR;;erase screen ADDBORD;;add border SETSCR;;set board up POSPM;;add P/M& TURNON;;turn it on0I}X;:LOOP0Q>N;;position playerD PPLRXNQ>FX PPLRYbQ>;;set tabpos.l PTABPOSvQ>;;make player 1 PPLAERJ}QPLAYER;;get player FSCRONQ>;;player 2PPLRX;;reset cursorQ>;;and tabposPTABPOS;;pntrs.Q>i;;playerK} II PPLAERX;SCRON MENLEFT;;# men left SETSCR;;update scrnLOOP DEFINE;;put on cursor$PLAYER;;playerL} num  STCK;;read stickDFIRED;;pressed fire  DOMOVE;;move cursor*!LOOP;;and loop....4FIRED%>;;zero out move>M}Q>;;tableHFR1PMOVES8R1\IFR1f%TABPOS;;get table posp'OLDPOS;;and save itzQGAMBRD8;;get piecePOLDPCE;N};save it.GLOOP;;blank. loop.R>;;trying to moveELOOP;;on terrain?$PLAYER;;get playerHPL2;;have player 2O}R> ;;trying to moveDCHOK;;on yourself?ELOOP;;yes!PL2R> ;;same thing. DLOOPX;X;Now we see if the pieceP}X;selection was a good oneX;CHOK%>;;check 4$MCK0QGTABH8;;inset table.PMCHECK;;position8QGTABL8;;in pQ}rogramBPMCHECKL'SAVEY;;save YV%TABPOS;;get pos.`MCHECKQ8;;and piecej TESTIT;;test playerstEUPLP;;bad R}one~%SAVEY;;restore YC;;possible moveT?;;* 2 andPMOVES8;;save moveUPLP%SAVEY;;get Y again1;;and loop agaS}in IMCK0X;X;Now see if any move isX;possible this time.X;%>SMVQMOVES8IHAVMOV;;got one! 1IST}MVQ>4ALAS;;print can't(%>5ALAS;;move.2 EPRINT< ERMYLN;;erase lineF!LOOP;;loop again.PHAVMOV BEEP;;beep!ZU}TRYMOV STICK;;read stickd QMOVEDnGTRYMOV;;mask out buttonx%>;;test againstCMVRMOVES8;;possible movesFGMOV}VE;;good move!1ICMV BOOP;;Error!!TRYMOV;;try againGMOVE DOMOVE STICKDBEP$PLAYER;;player #%W}>;;wait 1/2 secondGVMQ>;;and check forPRTCLOK;;press of fireGVM1QSTRIG09;;buttonFBEPQRTCLOK;;get cloX}ck"FGVM1;;=0? yes.,GVM21;;loop again6IGVM@%OMOVE;;now we moveJQNEGTAB8;;the cursorTPUNJSR;;back to its^Y}QNEGTAB8;;originalhPUNJSR;;position.r UNJSR |!TRYMOV;;go againBEP BEEP;;signal move%TABPOS;;get pZ}ositQGAMBRD8;;and pieceIDOBATTLE;;do a combat!QOLDPCE;;just move oldPGAMBRD8;;piece on the%OLDPOS;;board[}Q>;;remove previousPGAMBRD8;;character SWITCH;;flip player!LOOP0;;and loopX; DOBATTLE?R> ;;player >\}10? DGP1;;no.'PLRTYPE;;player type&1;;decrease index0QHTAB8;;get hit points:PHTS;;save emDHINH0;;play]}er 1 hitsNGP1'PLRTYPE;;player 1X1;;down indexbQHTAB8;;hit pointslPHTS;;savevINH0%OLDPCE;;old piece )> ;;>1^}0?DGP11;;no.'PLRTYPE;;move player 11;;hits out ofQHTAB8;;table PHTSHINH1;;play gameGP11'PLRT_}YPE;;player #11;;and get outQHTAB8;;their hitsPHTSINH1 TURNOFF;;screen offX;Q>@ PNMIEN;;kill DLI's`} BATTLE;;Do battle! $>;;do 2 players*UH0%PLRTYPE9;;type #4QHTS9;;new hit points>1HPHTAB8;;save in tableRa}0\IUH0;;do nextfQPLAYER;;get the playerp>;;X holds plr #zRWINNER;;same as winner?HCHANGE;;no. lost.N>>b}QOLDPCE;;old piece%TABPOS;;and move toPGAMBRD8;;the new squareX;CHANGEQ>;;erase old guy %OLDPOSPGc}AMBRD8;;save in board. SWITCH;;flip players"MEN19;;lower men leftQHTAB;;check if kingsFDEATH;;are dead yetd}. QHTAB FDEATH$!CHESS;;and play chess.X;8X;Handle Death of a teamBX;LDEATHA;;get playerVN>;;flip it`e},;;make scr memjO>tPTROPHY;;save in string~ CLRSCR MENLEFT;;show # left ADDBORD;;add border SETSCRf} POSPM;;put on P/M TURNONQ>4TROPHY;;print trophy%>5TROPHY;;message. EPRINT PRL5;;wait 10 sec CLRPg}M;;remove P/MQ>@ PNMIEN TURNOFF !BEGIN;;start over.X;X;Introduction Screen(X;2INTROQ>;;screen off<h} PSDMCTLFQ>4IDLST;;install disp.PPSDLSTL;;list.Z Q>5IDLSTdPSDLSTLnQRANDOM;;random #xM>;;hit nybblePi}INTC;;save in colorQ> ;;and add charac.PCHBAS;;set. CLRPM;;remove players CLRSCRQ>4DLI1;;install DLIPj}VDSLST;;address inQ>5DLI1;;vector.PVDSLSTQ>;;fire DLI! PNMIEN%>;;copy 4 nums.ICQICLR8;;get numbk}erPCOLOR08;;save in color1;;dec loopIIC;;do again"X;,X;Now add text to intro6X;@Q>4SLN1 ;;start adrJl}PSCR;;of where textTQ>5SLN1 ;;goes in^PSCR;;memory.h$>;;zero XrPTILQSTXT9;;get a position|FLINFD;m};if 0 line feed?;;in Y regPTIL22;;up XQSTXT9;;next charR>;;if $FF lin feed FLINFDR>;;if $FE then endn} FSTITLP@SCR7;;in memory 3;;up YHPTIL2;;and do againLINFDQSCR;;now add a 32,;;to memoryO> ;;pointer o}PSCR;;save it. QSCR;;get hi byte O>;;and add carry& PSCR;;save it.0 2;;up X: !PTIL;;do again.D X;N X;Scp}roll Title ScreenX X;b STITLQ>=;;turn on narrowl PSDMCTL;;screen.v Q>5SLN1;;set LMS to my PDVC;;memory. Q>q} PDVC PATRACT;;kill atract PLINES;;lines = 0 DOLNQ>;;scroll counter PSCROLC;;is zero. LNL WAIT;;wait 1r} jiffy #SCROLC;;inc scrol count QSCROLC;;get it. R>;;done 8 yet? FLNDN;;yes. line done PVSCROL;;in VSCROL!Qs}CONSOL;;check START key !R>!FSTARTUP;;if pressed go! !HLNL;;loop again.*!LNDN%>;;zero Y4!'SCROLC;;counter nil>t}!'VSCROL;;same for VSCROLH!QDVC;;now add 32 toR! ,;;the LMS\!O> ;;instructionf! PDVCp!QDVC;;and take carez!u}O>;;of hi byte.! PDVC!#LINES;;inc lines done!QLINES;;get it.!R>%;;37 lines yet?!FSTITL;;yes. start over!v}%>;;check if this!CLNRPLINS8;;line is one!FWSEC;;we pause on.!1;;not this one!ICLN;;try next.!GDOLN;;do nexw}t line.!WSECQ>;;zero clock! PRTCLOK"WSC1QRTCLOK;;get it and"R>x;;wait 2 seconds" FDOLN$"QCONSOL;;check CONSx}OL."R>;;START?8"HWSC1;;no. loop.B"STARTUPQ>@;;kill DLIL" PNMIENV"!TURNOFF;;and play game.`"X;j"X;DLI for intro cy}olorst"X;~"DLI15;;save A"&DLIX;;and X regis."DLL0QINTC;;color"PDCLOR;;save it"$>;;loop 8 times"DLL1QDCLOz}R;;get color"PWSYNC;;wait sync"PCOLPF3;;store it",;;add for next"O>;;luminance"PDCLOR;;and save it."0;;dec l{}oop count"IDLL1;;and do again#X; #$>;;loop 8 more#DLL2QDCLOR;;get color#;;;and subtract 2(#S>;;from luminanc|}e2#PWSYNC;;wait for sync<#PCOLPF3;;store itF#PDCLOR;;save colorP#0;;dec loopZ#IDLL2;;and do againd#7;;restore An#$}}DLIX;;and X regs.x# 9;;done.#X;#X;Game board DLI1#X;# GDLI5#Q># PWSYNC# PCOLPF2# Q>4GDLI2# PVDSLST# Q>5~}GDLI2#PVDSLST#7#9$X;$X;Game board DLI2$X;"$ GDLI25,$Q>6$ PWSYNC@$ PCOLPF2J$ Q>4GDLIT$ PVDSLST^$ Q>5}GDLIh$PVDSLSTr$7|$9$>D:KING2.M65$$ BEGIN$LI25,$Q>6$ PWSYNC@$ PCOLPF2J$ Q>4GDLIT$ PVDSLST^$ Q>5@1 dEInX;xX; THE CLASH OF KINGSX; BY: Bryan SchappelX; and Barry KolbeX;X; Chess section by:X; Bryan S}chappel (c) 1985X; X; EquatesX;PMBASE;;PM baseGRACTL;;PM enableHPOSP0;;HorizontalHPOSP1};;P/M positionsHPOSP2HPOSP3HITCLR;;hit clearSIZEP0;;P/M sizes"SIZEP1 ,SIZEP2 6}SIZEP3 @SDMCTL/;;DMA screenJSDLSTL0;;display listTGPRIORo;;priority reg^PCOLR0;;P/M colorshP}COLR1rPCOLR2|PCOLR3COLOR0;;PlayfieldCOLOR1;;colorsCOLOR2COLOR3COLOR4}COLPF0;;hardware colorCOLPF1;;registersCOLPF2COLPF3 COLBKWSYNC ;;wait for sync}CHBAS;;char setVDSLST;;DLI vectorNMIEN;;NMI enableSKCTL;;sound controlsAUDCTL&AUDF}1;;freq. registers0 AUDF2: AUDF3D AUDF4NAUDC1;;volumes +XAUDC2;;distortionsb AUDC3l} AUDC4vVSCROL;;vertical scrolCONSOL;;console keysSTICK0x;;joy stickSTRIG0;;fire button}RTCLOK;;jiffy clockSETVBV\;;Set VBLANK vecSYSVBV_;;system VblankXITVBVb;;exit VBVATRACTM;;atra}ct modeBOOT? ;;boot flagDOSINI ;;init vectorCOLDSTD;;cold startRANDOM ;;random numberX;MYPM};;P/M memory PLR0MYPMPLR1MYPM PLR2MYPM*PLR3MYPM4GAMBRD;;current board>HTAB};;hit tableHMYSCRNMYPMRMYLINEMYSCRN\SCRTAB;;scr mem tablefSLN1MYSCRN;;scroll memorypSCMEMMY}SCRNzPMBMYPM;;player baseZPAGE;;zero pageX;BORD;;border charBAR;;hit point barSTAR;;bould}er(star)X;X; Zero page usageX;INDR ;;indr temp holdTABPOS ;;table positPLRX ;;cursor X}-posPLRY ;;cursor Y-posSCR ;;screen pntrSCROLC ;;scroll indexSAVEY ;;Y hold$SAVEX ;;X }hold.MOVED ;;last move8IND2 ;;temp indr holdBPLAYER ;;current PLYRLSAVEA ;;temp A holdVOLDPOS} ;;old TABPOS`OLDPCE ;;old piecejOMOVE ;;old movetMEN1 ;;lives left~ MEN2 LINES ;;lines} scrolledDCLOR ;;DLI colorDLIX ;;DLI save XINTC ;;DLI base colorWINNER ;;battle winnerPLR}TYPE ;;player typeTIMER ;;fade timerVTIME ;;plyr def timerSTIME ;;sound timerPTYPE ;;plyr} typeRFLG ;;who hit flagEXEC ;;vblank exec flgWSR ;;whirley sound PMFR ;;player pntrs PMTO} XTEM ;;save x(TEMP ;;temp location2XPOS0 ;;plyr positions<XPOS1 ;;x coordFXPOS2 PX}POS3 ZYPOS0 ;;ditto-y coorddYPOS1 nYPOS2 xYPOS3 SCX ;;scr pos of plyrWC ;;wal}l check flgSAVST ;;saves sticksX1 ;;store xX2 ;;store xZAP ;;plyr hit flagBSR ;;blowu}p snd regMISM ;;miss directionMISF ;;missile fromMIST ;;missile toHTS ;;# hits leftHSCL };;h scrl regVSCL ;;v scrl regUDFL ;;missile Up/Dn?MSR ;;missile soundMTIME ;;missile timer}"PFLG ;;hit plyr flg,PCX ;;store x6TRY ;;other plyr pos@ZTIME ;;maze timerJMZR ;;random ma}ze ptrLG ;;hit plyr flg,PCX ;;store x6TRY ;;other plyr pos@ZTIME ;;maze timerJMZR ;;random ma #dX;n!X;Redefined Character Set DataxX;X;by: Bryan Schappel withX; Barry Kolbe (c) 1985X; ===} === === === === === =J=4= ;=,=R= =~=<= ~}==<= === === ===" ===, ===6 ===@ ===J ==}=T ===^ ===h ===r ===| === === === ===8} === === === =<=<= === === ==f= v=f=~= }==x=x ==~= =|=f=L =6=~= =~==&  =f=>=0 = ==<: l== =D ==}`=N =f=|=X =|==|b =f=~=l ==f= v =0=0= =<=f=< =f== ==f=} = =8= ==<=< =<=<= === === = = =<  = == === }=== `=0=0=< 0=0=`=  === ===  ===* ===4 ==<=f> f=~=}=H ==f=R f=f=|=\ ==f=`f =f=~=p ==l=fz =l=|= ==`=| =f=~=} ==c= l=`=`= ==f=` =f=~= =v=6=~ 6=6=v= =~==< ==~= }=== =f=<= ==n= x=n=f= ==`= `=v=~=$ ==w=. k=c=w=8 =f=}v=~B ~=n=v=L ==f=V f=f=~=` ==f=j |=`=p=t ==f=~ f=l=v= ==f=} |=l=v= ==`=~ =f=~= =~== === ==f= f=~=|= ==f= f}=~== ==c= =w=c= ==f=<  <=f=v= ==f=< =8=8=( ==l=2 0=f=}~=< ===F ?====P ===Z ===d ===n ===x === = ==0} =0=`= === === === === === === p=p=p=p }=== === === === ==~=f f=~== == =" ===, ==}=6 ===@ ===J p=`=`=pT ===^ ===h ===r ===| ===} === === ==c= === === === === === }=== === ===g =0== === === === ===& ==}=0 ===: ===D ===N ===X ===gb g==w=l =o=f=v ==g=} ===` `=== === = = =( === = == === === }=== @=@=P=P ===  = =*=* === ===  === ===  ==}=* ===4 ===> 0=0=<=H ==0=0R 8===\ ===f ===p `=l=l=lz} o=`== ===̎ = == === == = === =0=0=< q===? 0}=0=8= === === ===0 6=== ===  n===  ==c=  ==}=$  ===.  ===8  ===B   ==<=L  ===V  =`==`  =c==j   = =<=t}  ===~  =`==  ===?  ?===  ===~  ~==0=  U=U=U=U  U=U=U=U  }===  ===  ===  ===  ===  ===  ===  ===  "=(=} =  ===(  == =2  ===<  ===F  ===P  ===Z  =@==d  ===n}  ===x  ===  ===  ===  === X; X;Game board display list X; DLIST1 p}=p=p=B PNAME =p=p  B=4MYSCRN=5MYSCRN  ===  ===  ===p =p=F PLAER } p"  F=4MENL=5MENL,  A=4DLIST1=5DLIST16 X;@ X;Intro Display ListJ X;T IDLST p=p=p=p^  B=4PRES=5PRESh  }p=p==r PNAM2|   p=p= DVC =4SLN1=5SLN1  "="="="=" "="=  A=4IDLST=5IDLST X; X;}Battle Display List X; DLIST p=p=p=G SCMEM  ====  ==== =A DLIST X; X;Scree}n Memory& X;0 5PNAME A THE CLASH OF KINGS ANALOG 1985 A: 'PLAER A playerA==A i AD 3MENL A menA=}===A menA====A AN 0PRES =A ANALOG COMPUTING PRESENTS: AX !PNAM2 =A THE^_CLASH Ab  =A []} OF KINGS [] Al X;v X;Player 1 Pieces X; CHARS === X;HUMAN W/ PACK #1-2  @=A=`=a  @=A=`=a X;SC}ORPION #3-5  B=C=b=c  B=C=b=c  B=C=b=c X;VIPER #6-7  D=E=d=e  D=E=d=e X;CANINE #8  H=I=}h=i X;KING #9  F=G=f=g X;* X;Player 2 Pieces4 X;> X;TANK DROID #10-11H  J=K=j=kR  J=K=j=k\ X;PLANE }#12-14f  L=M=l=mp  L=M=l=mz  L=M=l=m X;SERVICE DROID #15-16  N=O=n=o  N=O=n=o X;TRANSPORT #17}  R=S=r=s X;CYBORG #18  P=Q=p=q X;TERRAIN PIECES #19-21  Y=Z=y=z  [=\={=|  ]=^=}=~ X; X;}Game board initial set-upX;structure DATA tableX; BRDSET$X;. X;Line #18X;B ====L ====V} == =`X;j X;Line #2tX;~ ==== ==== == =X; X;Line #3X; === =} ==== == =X; X;Line #4X; ==== ====  == =X; X;Line #5(}X;2 ====< ====F ===PX;ZX;Path positionsdX;nPATHS 3=2=$=#="x 0=/=. };=<===>=0 1=2=3 .=/=0=1=? @=A=BX;X;Cursor DefinitionX;DEFPL1 ==== ===}= ==== ====X;X;Game table vectors (LSB)X;GTABL 4GAMBRD ;;Left 4GAMBRD} " 4GAMBRD ;;Up, 4GAMBRD ;;Down6X;@X;Game table (MSB)JX;TGTABH 5GAMBRD ^ 5GAMBRD h 5GA}MBRD r 5GAMBRD |X;X;Table of movement routinesX;MOVTAB LEFT RIGHT UP DOWNX;X;Un-move} vector tableX;NEGTAB RIGHT LEFT DOWN UPX;X;Move holderX;&MOVES ===0X;:X;Hit poin}t tableDX;N%HITTAB ======== X ======== bX;lX;Intro colorsvX;ICLR ===}=X; X;TextX;"ALAS AALAS, YOU CANNOT MOVEA&TROPHY APLAYER , YOU WIN THE $ASTXT == AFROM:A=} =;;blanks ;;BBK enter Aˠ ENTERPRISES A A1985A= ==;;blank lines   ACRAFTED BY:A}= =;;blank   * ABARRY KOLBEA=4 > H AA=R \  f ABRYAN SCHAPPELA=p ;;blankz } ;;blank    A PRESS Ԡ  A   A`afg TO BEGIN pqjkA X; X;Lines} to pause scrolling onX;PLINS ==X;X;battle field colorsX;BFCLR ==t=F=$X;.X;whirly snd d}ata8X;BWSN ==VLX;VX;plyr explode data`X;jEXPLR == =t )=h==~ "=a=R=  =d==} === ===0 ===$ ==L=0 === === ==j= d===@ =}== === =@= =  ===  === === ===( ===2X;<X;exp}losion snd dataFX;PEXF ===Z ===d ===n ===x === === ==}= =~={=w s=o=k=g d=`=\=X T=P=M=I E=A=9=6 2=.=*=& "=== == =} === t=h=]=Q F=:=.=# = =X;X;maze color table"X;,MZCOL =C==6X;@X;stick d}irectionsJX;TWALLTAB = == ^X;h$X;adder table to add 1 left-rightrX;up or down|X;ADDER ===X;}X;missile pagesX;MSUP 5PLR2=5PLR3X;X;missile snd dataX;MSN ===x n=d=x=d ZX;X;}plyr pagesX;UDTAB 5PLR0=5PLR1X;&X;table to check maze0X;:MZCK '=(=;= <===HP}LY6 ===;;set up screenQ>BO }RD;;do top borderSQ1PSCMEM8PSCMEM81ISQ1Q>4SCMEM;;now doPPMTO;;sides Q>5SCMEM PPMTO$> }SQ2 ADD20;;add 20Q>BORD;;do edge"%>, P@PMTO76%>@ P@PMTO7J0TISQ2^:;;border donehX;rADD20QPMT }O;;add 20 to scr|,;;memory ptr.O> PPMTO QPMTOO> PPMTO:X;BATTLEQSTRIG0;;wait untilFB }ATTLE;;players releaseQSTRIG0;;buttons FBATTLE$>5VBLAN;;set up%>4VBLAN;;vblankQ> SETVBVQ>;;tu }rn off vblank& PEXEC0START2 CLRSCR;;start here:Q>;;turn allDPCOLOR0;;colors blackNPCOLOR1;;at firstX PCOLOR }2b PCOLOR3lQ>4DLIST;;installvP0;;gr.2 displayQ>5DLIST;;listP1X; PUTMAZE;;put maze scrn MAKSCR;;d }o border SHOWSC;;show hits SETCL;;fade colors PMINIT;;init. pm CLRPM;;clear pm DEFPLR;;define plyrs I }NITGM;;intial gamePHITCLR;;clear collisionMAIN CHKHIT;;chk hits CHKZAP;;check if hit QRFLG;;restart flgFM }AIN;;no hit  REMMIS;;rem miss*"RFLG;;get plyr #4$RFLG;;0 or 1> EXPLOD;;do explosionH$RFLG;;get x backR"HTS9 };;1 less hit\QHTS9;;done yet?fFQUIT;;yesp REMPLR;;plyrs offz!START2;;set up again QUITAN>;;flip loser to }PWINNER;;winner REMMIS;;all done REMPLR;;no miss/plrysQ>$>5XITVBV;;get rid%>4XITVBV;;of vblan SET }VBV !TURNOFFX;X;turn colors onX; SETCL%>QS1QBFCLR8 PCOLOR08$1.IQS18:BX;LX;initialize plyr }sVX;`PMINITQ>>;;single linejPSDMCTL;;res.tQ>~ PGPRIORQ>:;;drk orange PPCOLR0 PPCOLR2Q>;;blue gr }ay PPCOLR1 PPCOLR3Q>5PMB;;pmbase PPMBASEQ>PGRACTL;;turn on pmQ>$>;;put plyrs offPM1PHPOS }P09;;screen PSIZEP09;;normal size0IPM1(Q>;;clear zap2PZAP;;registers< PZAPF:PX;ZCLRM0Q>;;clear } miss 0d%>;;i.e. plyr 2nMC1PPLR28x1HMC1:X;CLRM1Q>;;clear miss 1%>;;i.e. plyr 3MC2PPLR38 }1HMC2:X;X;define playersX;DEFPLR%>o$> DFQPLY19 PPLR08" QPLY29,PPLR0861@0JID }FTQ>8;;init x pos^PHPOSP0;;plyr 0h PXPOS0rQ>;;ditto plyr 1| PHPOSP1 PXPOS1Q>`;;init y pos. PYPOS0Q }>p PYPOS1:X;X; move playrsX;MOVEPQ>;;clear collisions PHITCLRQHSCL9;;moving lft or rt?FTRYUD };;no try up-dnQSAVST9;;which direction R>;;rt? HLFM;;no&QHSCL9;;first time to0R>;;scroll?: HRTOK;;noD }WALLCK;;check if wallNQWC9;;or starXFNOHS;;no moveb CHKPLR;;is other plyrlQPFLG;;there?v HRT;;noNOHSQ>;;d }o not scrollPHSCL9;;plyr:RT#SCX9;;change screen posRTOK#XPOS09;;chng horz.pos QXPOS09PHPOSP09;;do mov }e"HSCL9;;scroll reg.-1:LFMR> ;;try leftHTRYUD;;nopeQHSCL9;;moving?R>;;first time?HLFOK;;nope  }WALLCK;;check wallQWC9;;& star FNOHS;;no move* CHKPLR;;plyr in way?4 QPFLG>FNOHS;;yupH"SCX9;;ok scrn pos - }1RLFOK"XPOS09;;do lft move\ QXPOS09f PHPOSP09p"HSCL9;;scroll reg.-1z:TRYUDQVSCL9;;try movingFGETST;;up- }dnQSAVST9;;get direct. R>;;up?HTRDN;;try dnQVSCL9;;moving yet?R>HUPOK;;yup WALLCK;;chk wall & st }arQWC9FNOVS;;no move CHKPLR;;chk plyrQPFLG;;in way HUL;;ok NOVSQ>;;no move PVSCL9$ :. ULQSCX9; };subt. 20 from8 ;;;scrn. pos.B S>L PSCX9V UPOK UPDOWN;;get pmg page` 1;;set up to movej 'PMFRt %>~ UPLQ@PMT }O7;;move 17 bytes P@PMFR7;;down in memry 3 )> HUPL "YPOS09;;chng y pos ptr "VSCL9;;scrll -1 : TRDNR> };;down? HGETST;;no get stick QVSCL9;;moving? R> HDNOK  WALLCK;;chk wall & star QWC9 FNOVS  CHKPLR;;c }hk other guy( QPFLG;;he there?2 FNOVS;;yup< QSCX9;;add 20 to scrnF ,;;memry locationP O>Z PSCX9d DNOK UPDOWN;; }set up pagesn 3;;to movex 'PMFR;;player up in %>;;memry DNLQ@PMTO7 P@PMFR7 1 IDNL 3 Q>;;knock out th }e P@PMTO7;;last byte #YPOS09;;new y pos. "VSCL9;;scroll-1 :;;all done moving GETSTQSTICK09 PSAVST9 R> }HT11 T7Q>" PHSCL9, :6 T11R> @ HT14J FT7T T14R>^ HT13h T15Q>r PVSCL9| : T13R> FT15 : }X; X; UPDOWNQUDTAB9;;set up pages PPMTO;;for plyr moves PPMFR QYPOS09 ? 'PMTO : X; X;Initial }ize variables X; INITGMQ>Q& PSCX0 Q>v: PSCXD Q>N PWSRX PSTIMEb Q>l PZTIMEv Q> PMZR Q> }PMISM PMISM PHSCL PHSCL PVSCL PVSCL PRFLG PBSR;;no blowup PMSR;;no missile snd PEXEC : } X; X;do the maze X; MAZE%>* PCK1 RND4 PMZTAB8> 1H HPCK1R :\ X;f X;p RNDQRANDOMz R> DRND R> } ERND $> CRNRMZCK9 FRND 0 ICRN : X; X; X;put maze on screen X;PUTMAZE MAZE$>MZ1Q }MZTAB9$?.&X18 QRANDOMBM>L>V QMZCOL9`$X1j PSCMEM8t0~HMZ1:X;X;X;X;check if wallX; }WALLCK&XTEMQ>;;0=no movePWC9QSCX9;;pos. in sc.memPTEMP;;0-239 QSAVST9$>;;get dir WCKRWALLTAB9 } FWCK10(IWCK2WCK1QADDER9<,F OTEMPP?Z'TEMP;;hang on to locd $XTEMnQSCMEM8;;get bytexHRT1;;not 0 > }no moveQ>;;ok to movePWC9;;move flagRT1:X;X;move missile routineX;MOVEMPHITCLRQMISM9;;directio }n orHMOK;;0=not moving QSTRIG09FPMIS;;0=pressed:;;not pressedPMISQSAVST9;;get direct&TEMP;;save x$> }CKMDRWALLTAB9;;chk direct"FPMOK;;ok valid,06 ICKMD@Q>;;not validJ$TEMP;;directT PMISM9^:hPMOK$TE }MPrPMISM9;;save direction|Q>;;set up missilePMSR;;snd rout.Q>  PMTIME PUTMIS MOK&XTEMQMISM9;;ge }t dir R>;;rt?HN1 QXPOS29,O> PXPOS29 PHPOSP29: N1R> HN2& QXPOS290;:S>D PXPOS29N } PHPOSP29X:bN2R>;;up?lHN3vQ> PUDFLUPAGN MSUPDN1 'MIST%>N5Q@MISF7 P@MIST73)> }HN5 "YPOS29 "UDFL QUDFL HUPAGN : N3R> FN7*:4 N7Q>> PUDFLHDNAGN MSUPDNR3\ 'MISTf%> };;only 8 bytespN6Q@MISF7z P@MIST71IN6%>C P@MISF7 #YPOS29 "UDFL QUDFL HDNAGN:X; }X;set page ptrs missX;MSUPDNQMSUP9 PMISF PMIST$ %YPOS29. 'MISF8:;;rtn with yBX;LX;VX;put miss }ile on scn`X;jPUTMISQXPOS09t PXPOS29~ QYPOS09,O> PYPOS29X;X;define missilesX; &XTEM(>;; }miss 0 or 1HMM1;;do miss1 CLRM0%YPOS29;;get y pos$>MM2QMISS09  PPLR2832((>2HMM2< $XTEM }FMM4QXPOS29P PHPOSP29Z:dMM1 CLRM1n %YPOS29x$>MM3QMISS19 PPLR3832(>HMM3 $XTEM! }MM4:X; X; delaysX; DELAYQ>x PTIMER DEL2Q> PTIMER"DEL3"TIMER, QTIMER6 HDEL3@ "TIMERJ } QTIMERT HDEL2^:hX;rX;longer delay|X;DELAY1Q>F PTIMER HDEL2X;X;vblank routineX;VBLA }NQBSRFVNS BLOWUP !XITVBV VNSQEXECFVOK SNDOFF !XITVBVVOK#VTIME QVTIME&R> 0FVB1:!TR }YMIS;;doneD VB1Q>N PVTIMEX#PTYPE;;next defb QPTYPElR>vDPTQ> PTPPTYPEQPTYPE;;plyr type 0/1H }VB3 Q>4PLY1 PVB2 Q>5PLY1 PVB2 Q>4PLY2 PVB4 Q>5PLY2 PVB4!VB5 VB3R> HVB6 Q>4 }PLY3  PVB2* Q>5PLY34 PVB2> Q>4PLY4H PVB4R Q>5PLY4\ PVB4f!VB5pVB6Q>4PLY5z PVB2 Q>5PLY !}5 PVB2 Q>4PLY6 PVB4 Q>5PLY6 PVB4VB5%YPOS0;;plyr 0$>;; 16 bytesVB2QPLY39 PPLR083 "}2(>HVB2%YPOS1;;plyr 1 $>;;16$VB4QPLY49. PPLR1883B2L(>VHVB4`Q>jPM;;kill attractt #}TRYMISPHITCLR~ VB7$> MOVEM2 MOVEM$> MOVEP2 MOVEP WHIRLY MISHOT CHMAZE !XITVBV $}X;X;check for hits X;CHKHITQ;;plyr2=miss0 FK1;;no(K3Q>;;yes2PMISM;;don't move<PHPOSP2;;get off sc %}nF K1QP FK2;;noZQ>d PMISMn PHPOSP3x K2QЂM>;;hit plyr1? FK4;;noQ> PZAPPEXEC;;kill &}vblank K4QоM>;;hit plyr0?FK5Q>PZAPPEXEC;;kill vblankK5PHITCLR:X;X;check zapX;" '}CHKZAP$>,&RFLG;;defalt =06%>@ QZAP9JFZP1T ZP2'RFLG^:hZP12r3| QZAP9HZP2:X;X;show score (}X;SHOWSC$> %HTS91 Q>BARSH1PSCMEM81ISH12 %HTS91SH2PSCMEM8&10ISH2::DX )};NX;remove misslsXX;bREMMISQ>l PMISMv PMISM PHPOSP2 PHPOSP3:X;X;remove plrsX;REMPLRQ> *} PHPOSP0 PHPOSP1:X;X;whirlybird sndX;WHIRLY"STIME  QSTIME FDOSND :* DOSNDQ>4 PSTIME>$W +}SRH FCHWSRQ>\ PAUDC1f QWSN9p PAUDF1z"WSR: CHWS$>&WSR:X;X;miss shotX;MISHOTQMSR ,}HSNOK: SNOK$MSRQ> PAUDC2 QMSN9 PAUDF2"MSR$:.X;8X;explosionBX;LEXPLOD%YPOS09;;get y posV -}Q>C`PBSRj 'PMFRtQ>~ PTEMP Q>5EXPLRPPMTO;;hi byteQ>4EXPLR;;low PPMTO QUDTAB9 PPMFR .}EX1%>EXQ@PMTO7 P@PMFR73)>HEX DELAY , QPMTOO>( PPMTO2 QPMTO<O>;;add 16F PPMTO /}P"TEMP;;1 less def.Z QTEMPdHEX1n DELAYx:X;X;explosion sndX; BLOWUP$BSR;;blowup snd reg.HBOK 0}:;;no blowupBOK$BSR;;blowup snd reg.Q> PAUDC2QEXF9;;get freq. PAUDF2"BSR:X;X;check if run 1}into plyrX;"CHKPLR&PCX;;save x,Q>6PPFLG;;flag@(>;;which plyr?J HCP2;;1T2^QTEMP;;test poshRSCX9;;= 2} other guy?r HCKPOK|FRT3CKPOK#PFLG;;now 1 RT3$PCX:CP20;;now 0QTEMP;;other guyRSCX9;;= ? HCKPO 3}KFRT3X;X;change mazeX;CHMAZE"ZTIME;;maze timer QZTIME FMZ4 :;;not yet MZ4Q>& PZTIME;;reset t 4}imer0 $MZR: QMZTAB9D ?N Q>;;get rid ofX PSCMEM8;;starb  RNDl $MZRv PMZTAB9;;new ?;;position QRANDOM M> 5} > QMZCOL9 PSCMEM8;;put new * "MZR QMZR HMZ5 Q> PMZR MZ5:TAB9;;new ?;;position QRANDOM M> VHEHX;!X; !X; נ͠!X; X; 7}ˠΠ$X; .X;8X;B!X; (C) 1985 by Charles JohnsonL X; and Little Green FootballsV8}X;`!X; This program uses the extraj#X; RAM in the 130XE or the AXLONtX; 128K board to hold either~#X; 32 (130XE) or 489} (AXLON 128K) X; compressed Koala pictures.X; X; Also displays mode 8 and 9#X; pictures if they are in Koala!X; fo:}rmat and the mode byte in!X; the file header is changed.X;X; Last revision: 10/12/85X;PASSPASS PASS;}EI>D1:SYSTEXT.M65 >D1:IOCOMEQU.M65I(X;2X;<FX;P POINT1Z POINT2d MAXRAMn BYTC<}NTx FILCNT PICCNT NAMLEN COUNTR OPNFLG BANKCT ADRESS TYPE OTBUFP U=}NIQUE ODD DATA COUNT DLPTR MODSAV UNCCNT ALLFLG" DLFLAG, MODFLG6 VBP>}NTR@ SCRFLGJ SCRSAVT SCRSV2^ BOTSCRh AUTFLGr TEMP| CONSAV TPOINT SWITCH ?}FILSIZ MXBANKX;X; ----------------X; Start of programX; ----------------X;&X; START-@}$>;;Close IOCB #0 CLOSEMX;&Q>OPEN;;Open IOCB #0 to0PICCOM;;the E: device: Q>4ENAMED PICBALN Q>5ENAMEX A}PICBAHbQ> l PICAX1v CIOVX;Q>;;Find out whichP;;type of RamdiskP@;;(130XE or AXLON)Q>PӼB}Q@R> FCKAXLNQ> PSWITCHQ>PSWITCHQ>  PFILSIZQ>  PMXBANK*$>4 CPYXE> QXEMSGC}9H PRDTYPE9R0\ ICPYXEf GGOTRAMp CKAXLNzQ>PώP@Q>PϬQ@R> FNORAMDQ> PSWITCD}HQ>PSWITCHQ>0 PFILSIZ Q> PMXBANK $>$ CPYAX. QAXMSG98 PRDTYPE9B 0L ICPYAXV GGOTRAM` E}X;j NORAMDt Q>NOTLEN~ $>4NOTRAM %>5NOTRAM PRINT0 FREEZE !FREEZE X; GOTRAM Q>;;Set screen PCOLOF}R1;;colors Q> PCOLOR2 Q>$ PCOLOR4 , QSAVMSC;;Put address of O>P;;screen memory PGR0SCR;;(+ 2 lines) iG}n( QSAVMSC;;my display list2 O>< PGR0SCRF Q>4DLIST1P PSDLSTLZ Q>5DLIST1d PSDLSTHn X;x $> ;;Close IOCBH} #2 CLOSEM X; Q>OPEN;;Open IOCB #2 to PICCOM9;;the K: device Q>4KNAME PICBAL9 Q>5KNAME PICBAH9 Q>I} PICAX19 CIOV X; Q>;;Set maximum RAM PMAXRAM;;size (16K per Q>@;;bank) PMAXRAM" X;, Q>6 PROWCRJ}S@ Q>M1LEN;;Print drive #J $>4MSG1;;promptT %>5MSG1^ PRINT0h X;r $> | Q>GETCHR PICCOM9 Q> PICBLL9 PK}ICBLH9 GETDRV  CIOV;;Get drive # X; R> 1;;Must be 1 or 2 FGOTDRV R> 2 HGETDRV X; GOTDRV PALLMSG L}PDIRNAM PPICNAM& Q>0 PALLFLG: Q>ALLLEN;;"All pix?" msgD $>4ALLMSGN %>5ALLMSGX PRINT0b X;l $> ;;GetM} keypressv CIOV PMSG2 R> Y HNOTALL;;Not "Y", skip #ALLFLG;;Set flag Q>;;Set msg length HNOTA.2 NOTALLN} Q>M2LEN NOTA.2 $>4MSG2 %>5MSG2 PRINT0 X; Q>;;Init variables PBANKCT;;and pointers PMODFLG PSCO}RFLG* PFILCNT4 PPICCNT> PBYTCNTH PBYTCNTR ARRSET\ X;f $>0;;Open chosenp Q>OPEN;;disk directoryz PICCOM9P} Q>4DIRNAM PICBAL9 Q>5DIRNAM PICBAH9 Q> PICAX19 CIOV X; #X; Read filenames from directory X; GEQ}TNAM $>0;;Get filenames Q>GETREC PICCOM9 Q>4FNAME PICBAL9$ Q>5FNAME. PICBAH98Q>B PICBLL9LQ>V PR}ICBLH9` CIOVjX;tQFNAME;;"FREE SECTORS"~R> S;;message?FCONTIN;;Yes, go onQFILCNT;;Reached max #RFILSIS}Z;;allowed?FCONTIN;;Yes, go onX;QALLFLG;;Skip if allHMOV.1;;picturesX;Q>;;Print names$>4FNAME;;T}and prompt%>5FNAME PRINT0X;  Q>PRLEN $>4PROMPT %>5PROMPT( PRINT02X;< GETYNF$> ;;Get a keypresU}sP Q>GETCHRZ PICCOM9dQ>n PICBLL9x PICBLH9 CIOVX; R> Y;;"Y"?FGOTYN;;Yes, go on R> N;;"N"?FGOTYNV};;Yes, go on R>;;ESC?HGETYN;;No, get back!$>0;;Close directory CLOSEM!START;;Go to startX; GOTYNW}PMSG3;;Print Y or N Q>M3LEN $>4MSG3" %>5MSG3, PRINT06X;@QMSG3;;Was it "N"?JR> NTFGETNAM;;Yes, get namesX}^X;h MOV.1r%>| MOVNAMQFNAME8;;Move name toP@POINT17;;array1 IMOVNAMX;,QPOINT1;;IncrementY}O>;;zero page ptr PPOINT1 DMOV.2#POINT1 MOV.2#FILCNT;;Count files!GETNAM;;Get namesX; CONTZ}IN&$> ;;Close K: and D:0 CLOSEM:X;D$>0N CLOSEMXX;bQFILCNT;;Any files?lHCONT.2;;Yes, skipv!START;;Bac[}k to startX; CONT.2 ARRSET;;Init pointers Q>4COLORS PPOINT2 Q>5COLORSPPOINT2Q>$>4MSG3\}%>5MSG3 PRINT0X;"X; Load the compressed picturesX; into memory X; GETPIX %>;;Clear file open*'OP]}NFLG;;flag4 MOVNM2>Q@POINT17;;Move nameHR> ;;from array toRFEXT;;filespec area\PPICNAM8f3p)>z HMOVNM^}2EXT$> MOVEXTQEXTCHR9;;Put .PIC extPPICNAM832(> HMOVEXTX;C,O>PNAMLEN;;_}Save length,QPOINT1;;Increment array$O>;;pointer. PPOINT18 DM2.2B#POINT1LM2.2VX;`Q>M4LEN;;"Loadi`}ng"j $>4MSG4t %>5MSG4~ PRINT0X;QNAMLEN;;Filename $>4PICNAM %>5PICNAM PRINT0X;$>;;Open file foa}rQ>OPEN;;input PICCOM9 Q>4PICNAM PICBAL9 Q>5PICNAM PICBAH9 Q> PICAX19 CIOV(X;2Q>;;Get heab}der<PCOUNTR;;bytesF Q>GETCHRP PICCOM9ZQ>d PICBLL9n PICBLH9xHDR1 CIOV "COUNTR IHDR1%PICCNT;;Sac}ve type ofPTYPES8;;compression CIOV;;and graphics%PICCNT;;mode PMODES8X;Q> PCOUNTRHDR2 CIOVd} "COUNTR IHDR2X;"Q>, PCOUNTR6HDR3@ CIOVJ%COUNTR;;Save colorsT P@POINT27^ "COUNTRh IHDR3rX;|e},QPOINT2;;Increment colorO>;;array pointer PPOINT2 DHDR3.2#POINT2 HDR3.2X;Q>;;Get rest off}PCOUNTR;;headerHDR4 CIOV "COUNTR IHDR4X; GETDATQ>GETCHR;;Read picture&PICCOM9;;data0,:Q>D g}OBYTCNTN PICBAL9XQ>@bOBYTCNTl PICBAH9v; QMAXRAM SBYTCNT PICBLL9QMAXRAMSBYTCNT PICBLq}(B|KING1 M65BKINGEQU M65BHKING DATBRKING2 M65B6SLIDSHOWM65BROAD1 M65BAgPAPERWGTM65H9 CIOVX;QOPNFLG;;Is file open?HADDBYT;;Yes, skipX; %PICCNTQBYTCNT;;Store offsetPOFFTBL8;;of datr}a from QBYTCNT;;start of bank POFFTBH8  QBANKCT* PBNKTBL84X;> ADDBYTH,RQBYTCNT;;Increment counter\OIs}CBLL9;;by # of bytesfPBYTCNT;;readpQBYTCNTz OICBLH9PBYTCNTX; QICSTA9R>;;End of file?FDOMORE;t};Yes, read moreX;QBANKCT;;At end of RAM? RMXBANKFMEMFUL;;Yes, skipX;,;;Increment bankO>;;counter Pu}BANKCT %FILSIZ)>0 FSETB.1$;.S>8T?BT?L,VO>` SETB.1j%>tP@SWITCH7;;Switch banks~'BYTCNT;;v}Set byte count'BYTCNT;;to zero#OPNFLG;;Set open flag!GETDAT;;Rest of dataX; MEMFULQ>M5LEN;;Print fulw}l msg $>4MSG5 %>5MSG5 PRINT0X;$>;;Close file CLOSEMX;  ,;;PauseQRTCLOKO>x(WAIT2RRTx}CLOK< HWAITFFDISPLAY;;Go to SLIDESHOWPX;Z DOMOREd#PICCNT;;Count pixn$>;;Close filex CLOSEMX;QPICy}CNT;;At end of pix? RFILCNTFDISPLAY;;Yes, skip aheadQBYTCNT;;At end of bank? RMAXRAM HGOBACKQBYTCNTz}RMAXRAMHGOBACK;;No, skipX;QBANKCT;;Switch banks RMXBANK FDISPLAYX;,"O>, PBANKCT6 %FILSIZ@{})>0J FSETB.2T;^S>hT?rT?|,O> SETB.2%> P@SWITCH7 'BYTCNT'BYTCNT GOBACK !GETPIX|}X;X; ---------------------X; The SLIDESHOW sectionX; ---------------------X; DISPLAYQ>PPOINT2&}}Q>;;Init flags and0PPOINT2;;turn screen off: PDLFLAGD PAUTFLGN PSDMCTLX PDMACTLb PCOLOR4l PCOLBKv$>@?~} CLSCRNP@POINT27;;Clear screen 3;;memory HCLSCRN#POINT20 HCLSCRNX;%> SETTOPQMTITL8;;S}et prompt inPTITLE 8;;text line1  ISETTOPX; Q>4DLIST2;;Set pointers*PDLPTR;;to display list4 PVBPNTR> }Q>5DLIST2H PDLPTRRPVBPNTR\%>f MODDLpQDLBYTS8;;Set text linez P@DLPTR71 IMODDLX;Q>;;Set v}ertical$>5VBI;;blank interrupt %>4VBI SETVBVX;Q>;;Set displayPNMIEN;;list interruptsX; DLOOP1}Q>;;Init variablesPCOUNTR;;and selectPBANKCT;;bank 0 at $4000 %FILSIZ$)>0. FSETB.38Q>B SETB.3L%>V} P@SWITCH7` DLOOP2j QSCRFLGtN>~ PSCRFLGX;,;;Get offset of%COUNTR;;data from startQOFFTBL8;;of buffe}rO> PADRESS QOFFTBH8O>@PADRESS QBNKTBL8 PBANKCT $FILSIZ(>0  FSETBNK;S>( GSETBN}K2T?<T?F,PO>Z SETBNKd%>n P@SWITCH7x %COUNTRQTYPES8;;Get compressionPTYPE;;type HGOCNV CNVU}NC;;Uncompressed, DSETSCRX; GOCNV CONVERTX; SETSCR#MODFLG;;Flag for VBIQ>;;Prevent colorPA}TRACT;;switchingX;GET1"Q>;;Clear key press,PCH6X;@ GETKEYJQCONSOL;;Get console keysTPCONSAV;;Save^R}>;;START pressed?hHCONSL2;;No, skipr STRTWT|QCONSOL;;Wait for releaseR> FSTRTWT SOUND;;Make a soundQ}AUTFLG;;Toggle automaticN>;;show flag PAUTFLG>;;Get message adrQTADLO9;;for top line PTPOINT QTADHI9}PTPOINT%> CHNGTI Q@TPOINT7;;Put message PTITLE 8;;in top line 1& ICHNGTI0 X;: CONSL2D QCONSAV;;G}et consoleN R>;;OPTION pressed?X HCKAUTO;;No, skipb !TOPLIN;;Go do top linel CKAUTOv QAUTFLG;;Automatic show? F}CKSTIK;;No, skip QRTCLOK ,;;Set time to wait O> > AUTOWT QCONSOL;;Get console keys PCONSAV;;Save R>};;START pressed? FSTRTWT;;Yes, go back R>;;OPTION? HAUTO2;;No, skip !TOPLIN;;Do top line! AUTO2 !QCH;;Get k}ey press! R>;;ESC? !HAUTO3;;No, skip*!!GOSTRT;;Go restart4! AUTO3>!(RTCLOK;;Keep waitingH! HAUTOWTR!!NXTPIC;;}Next picture\!X;f! CKSTIKp!QSTICK0;;Get stickz!R>;;Centered?!FGET1.3;;Yes, skip!5;;Save value!QRTCLOK;;Wait} one VB! STIKWT!RRTCLOK! FSTIKWT!7;;Restore value!R>;;Forward?!HSTK1;;No, skip!!NXTPIC;;Next picture!}STK1!R> ;;Back?!HGET1.3;;No, skip"!LSTPIC;;Last picture" GET1.3"QSTRIG0;;Get trigger$"HCKKEYS;;Not pressed."}!TOPLIN;;Do top line8"X;B" CKKEYSL"QCH;;Get key pressV"R>;;None?`"HCKK2;;No, skipj"!GETKEY;;Go backt"CKK2~" R>};;ESC?"HGK2;;No, skip" GOSTRT"Q>;;Cancel press"PCH"!START;;Restart"GK2"R>!;;SPACE?"FNXTPIC;;Yes, sk}ip" R>;;"+"?"HBACKUP;;No, skip" NXTPIC" #COUNTR# QCOUNTR # RPICCNT# FGOL1#GOL2(# !DLOOP22#GOL1<# !DLOOP}1F# BACKUPP# R>;;"B"?Z#FLSTPIC;;Yes, skipd# R>;;"-"?n#FLSTPIC;;Yes, skipx#!GET1;;Go back# LSTPIC#"COUNTR;;Set} counter back#ILST.2;;>=0, skip#$PICCNT;;Set to last pic#0# &COUNTR# LST.2# !DLOOP2#X;# TOPLIN#QSTRIG0;;}Wait til trigger#FTOPLIN;;or console key#QCONSOL;;is released$R>$ FTOPLIN$ SOUND;;Make sound"$#DLFLAG;;Set f}lag for VBI,$!GET1;;Go back6$X;@$X; -----------J$X; SUBROUTINEST$X; -----------^$X;h$ PRINT0r$ PICBLL|$ &ICBAL$ '}ICBAH$ Q>PUTCHR$ PICCOM$$>$ !CIOV$X;$ CLOSEM$ Q>CLOSE$ PICCOM9$ !CIOV$X;$ ARRSET$ Q>4ARRAY% PPOIN}T1% Q>5ARRAY%PPOINT1&%:0%X;:% SOUNDD%Q>xN% PTEMPX%Q>b% PAUDC1l% SOUN2v% QTEMP% PAUDF1%;%S>% PTE}MP% GSOUN3%QRTCLOK% SOUNWT%RRTCLOK% FSOUNWT% HSOUN2% SOUN3%:%X;&DLI1 &5&A &5*&C4&5>& QCOL}OR4H&M>R&$>\&%>f& PWSYNCp& PCOLPF2z& &COLPF1& 'PRIOR& Q>4DLI2& PVDSLST& Q>5DLI2&PVDSLST&7&?&7}&>&7&9&X;&DLI2'5'A'5$'C.'58' QCOLOR2B' $COLOR1L' %GPRIORV' PWSYNC`' PCOLPF2j' &COLPF1t' 'PRIOR~'7}'?'7'>'7'9'X;'"X; ----------------------------'"X; The vertical blank interrupt'"X; ---------------------------}-'X;'VBI' Q>4DLI1( PVDSLST ( Q>5DLI1(PVDSLST( QMODFLG(( HDOMOD2( !CKDLST<( DOMODF( "MODFLGP( $SCRFLGZ(} QSCRAD19d( PSCRN1n( QSCRAD29x( PSCRN2( $COUNTR( QMODES9(M>( PMODSAV( QMODES9(M>( PGPRIOR( PPRI}OR(Q>(PPOINT1(A(T?(UPOINT1)T?)UPOINT1)T?")UPOINT1,),6) O>4ARRAY@) PPOINT1J)QPOINT1}T) O>5ARRAY^)PPOINT1h)%>r) PUTNAM|) Q@POINT17);)S> )PTITLE8)1) IPUTNAM)X;),) Q>4DLIST2) PSD}LSTL) PDLISTL)O>) PDLPTR) Q>5DLIST2* PSDLSTH* PDLISTH*O>&* PDLPTR0*Q>":* PSDMCTLD* PDMACTLN*%>X*} QMODSAVb*R>l* HSETMODv*5*Q>* PCOLOR2* PCOLPF2* PCOLOR4* PCOLBK*Q>* PCOLOR1* PCOLPF1*7* SETMOD}*L>@* P@DLPTR7*%>`+ P@DLPTR7 +,+ QDLPTR +O>*+ PDLPTR4+ DSETM1.1>+ #DLPTRH+ SETM1.1R+%>\\+ QMODSAVf+ }SETMD2p+ P@DLPTR7z+1+ ISETMD2+,+ QDLPTR+O>`+ PDLPTR+ DSETM2.1+ #DLPTR+ SETM2.1+%>`+ QMODSAV+ SE}TMD3+ P@DLPTR7+1, ISETMD3,R>, HDOCOLR$, !XITVBV., DOCOLR8,Q>B,PPOINT2L, QCOUNTRV,T?`,UPOINT2j,T}?t,UPOINT2~,,, OCOUNTR, DDOCOL.2,#POINT2, DOCOL.2,,, O>4COLORS, PPOINT2,QPOINT2, O>5COLORS,}PPOINT2,%>,$>- SETCOL - Q@POINT27- PCOLOR09- PCOLPF09(-22-1<- ISETCOLF- GEXITVBP- CKDLSTZ- QDLFLAGd-} FEXITVBn- "DLFLAGx-%>-Q>0- R@VBPNTR7- FTOPON- TOPOFF- P@VBPNTR7-1- ITOPOFF- GEXITVB- TOPON- QDLBYT}S8- P@VBPNTR7-1- ITOPON. EXITVB. !XITVBV.X;"."X; ----------------------------,."X; De-compress ATARI ARTIST (or6.}"X; MICRO ILLUSTRATOR) pictures.@."X; ----------------------------J.X;T.X; TYPE values:^.X; 0 = Uncompressedh.X; 1 = V}ertical compressionr.!X; 2 = Horizontal compression|.X;.X; Uncompressed pictures.X; are handled at CNVUNC.X;. CON}VERT. %SCRFLG.Q>P. POTBUFP. PSCRSAV. PSCRSV2. PBOTSCR. QSCRAD18.POTBUFP.PSCRSAV/PSCRSV2/,}/O>&/PBOTSCR0/%>:/'ODD;;Set ODD to 0D/X;N/ LOOP1X/'COUNT;;Clear count andb/'UNIQUE;;unique flagl/Q@AD}RESS7;;Get countv/6;;Save status/ INCIBP;;Bump pointer/8;;Restore flags/,/U?;;Bit 7 of count/UUNIQUE;;in unique }flag/V?;;and clear bit 7/ PCOUNT/ HCKUNQ/ Q@ADRESS7/ PCOUNT/ INCIBP/ Q@ADRESS7/ PCOUNT0 INCIBP 0X;0 }CKUNQ 0 QUNIQUE*0 FLOOP340X;>0 LOOP2H0 Q@ADRESS7R0 INCIBP\0 P@OTBUFP7f0 $TYPEp0(>z0 HL2.20 INCOBP20 !L2.3}0L2.20 INCOBP0L2.30 "COUNT0 HLOOP20 QCOUNT0 FLOOP10 "COUNT0 ILOOP20X;0 LOOP31 Q@ADRESS71 PD}ATA1 INCIBP$1L3.2.1 QDATA81 P@OTBUFP7B1 $TYPEL1(>V1 HL3.3`1 INCOBP2j1 !L3.4t1L3.3~1 INCOBP1L3.41 "COU}NT1 HL3.21 QCOUNT1 FLOOP11 "COUNT1 IL3.21X;1X; -----------------------1X; Subroutines for CONVERT1X; }-----------------------1X;2 INCOBP 2,2 QOTBUFP2O>P(2 POTBUFP22DIO2<2#OTBUFPF2IO2P2 QOTBUFPZ2 RBOTSCRd2 }HRETURNn2QOTBUFPx2RBOTSCR2 HRETURN2X;2 CKODD2QODD2 HCKDONE2#ODD2,2 QSCRSV22O>(2 POTBUFP2Q}SCRSV22O>2POTBUFP3,3 QBOTSCR3O>("3 PBOTSCR,3QBOTSCR63O>@3PBOTSCRJ3 #SCRSV2T3 HRETURN^3#}SCRSV2h3X;r3 RETURN|3:3X;3 CKDONE3"ODD3 QSCRSV23 POTBUFP3 PBOTSCR3QSCRSV23POTBUFP3,3O>}3PBOTSCR3 QSCRSAV3,4O>(4>4QSCRSAV&4O>04ROTBUFP:4 HRETURND4 (OTBUFPN4 HRETURNX4X;b4BACKTOMAI}Nl47v474:;;To main routine4X;4 INCOBP24 #OTBUFP4 HIOB2.24#OTBUFP4 IOB2.24QSCRSAV4,4O>4>4 Q}SCRSAV4(OTBUFP5 HRETURN 5 ROTBUFP5 HRETURN 5FBACKTOMAIN*5X;45 INCIBP>55H5 QADRESSR5R>\5HIN2f5QADRESS}p5R>z5HIN25 #BANKCT5 QBANKCT5 %FILSIZ5)>05 FSETB.55;5S>5T?5T?5,5O>5 SETB.55%>6 P@S}WITCH76Q>6 PADRESS$6Q>@.6PADRESS86HIN3B6IN2L6 #ADRESSV6HIN3`6#ADRESSj6IN3t67~6:6X;6X; Move u}ncompressed picture6X; to screen RAM.6X;6 CNVUNC6 %SCRFLG6Q>P6 POTBUFP6 QSCRAD186POTBUFP6Q>6 PUNCC}NT7Q> 7PUNCCNT7%>7 COPYEM(7 Q@ADRESS727 P@OTBUFP7<7 #OTBUFPF7 HCOPY2P7#OTBUFPZ7 COPY2d7 INCIBPn7 "}UNCCNTx7 HCOPYEM7"UNCCNT7 ICOPYEM7:7X;7X; ------------------7X; Variables and data7X; ------------------}7X;7 DLIST17 p=p=P=B7 NAMLIN7 ===B7 GR0SCR8 8 =====8 ====="8 ==}===,8 ===A68 DLIST1@8X;J8 DLIST2T8 p==^8 TITLEh8 r8 O|8 SCRN18 P8 ====8 =}===8 ====8 ====8 ====8 ====8 ====8 ====8 }====8 ====8 ====8 ====9 ====9 ====9 ====&9 }====09 ====:9 ====D9 ==N9 OX9 SCRN2b9 l9 ====v9 ====9 }====9 ====9 ====9 ====9 ====9 ====9 ====9 }====9 ====9 ====9 ====9 ====9 ====: ==== : }====: ==== : ====*: =4: A>: DLIST2H:X;R: SCRAD1\: =f: SCRAD2p: =z:X;}: ENAME: AE:A: KNAME: AK:A: SNAME: AS:A:X;: NOTRAM:, AϠ͠ġ͠ԮA:NOTLEN }NOTRAM:X;: NAMLIN:! AנA; RDTYPE; AA;/ A}A$;X;.; XEMSG8; AAB; AXMSGL; AAV;X;`;MSG1j; AWhich drive (/)? At;M1LEN MSG1~;X;; ALLMS}G; A A==; AShow all pictures (/)? A;ALLLEN ALLMSG;X;;MSG2; A A==;0 Aes/o=Select pictures }=RestartA==;M2LEN MSG2;X;; PROMPT; A --> A<PRLEN PROMPT <X;<MSG3< A A=(<M3LEN MSG32<X};<<MSG4F< ALoading AP<M4LEN MSG4Z<X;d<MSG5n< A٠̡A=x<M5LEN MSG5<X;< DIRNAM< AD :*A< EX}TCHR< A.PICA=<X;< PICNAM< AD : A<X;< FNAME< A A<X;< DLBYTS= p===} TITLE= "=X;,= TITLE6=! =========@=% A =Forward =Back =Exit AJ=X;T= MTITL^= A=Forwa}rd =BackAh= ATITLr= A Â A|=X;= TADLO= 4MTITL=4ATITL= TADHI= 5MTITL=5ATITL=X;= ARRAY= }0=X;= COLORS= 0=X;= TYPES=0>X;> MODES>0&>X;0> OFFTBL:>0D> OFFTBHN>0X>X;b> BNKTBLl>0v>}X;>X;> RUNAD> START>X;>EI=0>X;> MODES>0&>X;0> OFFTBL:>0D> OFFTBHN>0X>X;b> BNKTBLl>0v>'G X; ------------------------X; ONE FOR THE ROADX; by Clayton Walnum(X; ANALOG Computing #2X; (C)1985 ANALOG C}omputing<X; ------------------------FX;PX; MACRO DEFINITIONSZX; -----------------dX;nX; POSITION MACROx}X; -------------- X; SYNTAX:X; POSITION xpos,yposX;POSITION  3 '3  APOS paramete}rsA   %>  POSIT13$> %>  POSIT",X;6X; PRINT MACRO@X; }-----------J X; SYNTAX:T+X; PRINT ^X;h PRINT r  | APRINTE parametersA Q}>4  %>5  EPRINTX;X; TEXT MACROX; ---------- X; SYNTAX:X; TEXT <"string">}X; TEXT  3  ATEXT parametersA& =EOL0:DX;NX; SYSTEM EQUATESXX; ---------------b}X;lX; ZERO-PAGEvX; ---------BOOT? ;; OS boot flagPOKMSK;; interrupt maskRTCLOK;; }system clockLMARGNR;; left marginRMARGNS;; right marginROWCRST;; cursor rowCOLCRSU;; cursor column}RAMTOPj;; # pages of RAM$FR0;; floating point registerCIX;; FP index registerINBUFF;; FP pointerX;}X; PAGES 2-3X; --------- VDSLST;; DLI vector!SRTIMR+;; key repeat timer SDMCTL/;; DMA} control*SDLSTL0;; D-list addr4COLDSTD;; coldstart flag>GPRIORo;; PMG priorityHPCOLR0;; player 0 col}orRPCOLR1;; player 1 color\PCOLR2;; player 2 colorfPCOLR3;; player 3 colorp"COLOR0;; playfield 0 c}olorz"COLOR1;; playfield 1 color"COLOR2;; playfield 2 color!COLOR4;; background colorCRSINH;; cur}sor inhibitCHBAS;; adr of char setCH;; keypress registerICCOMB;; CIO commandICBADRD;; CIO addr}ICBLENH;; CIO lengthICAUX1J;; AUX byte 1ICAUX2K;; AUX byte 2X;X; CTIA/GTIAX; -}--------HPOSP0;; h-pos player 0HPOSP1;; " " 1HPOSP2;; " " 2$HPOSP3;; " } " 3.SIZEP0;; width player 08SIZEP1 ;; " " 1BSIZEP2 ;; " " 2LSIZEP3 ;; " } " 3V"GRAFP0 ;; graphics player 0`"GRAFP1;; " " 1j"GRAFP2;; " " 2t"GRAFP3;; }" " 3~!COLPF2;; color register 2CONSOL;; console keysX;X; POKEYX; -----}#AUDF1;; frequency channel 1"AUDC1;; vol/dist channel 1AUDCTL;; audio control#RANDOM ;; random # g}enerator IRQEN;; interrupt enableX;X; ANTICX; -----DMACTL;; DMA control "WSYNC ;}; wait for horz syncNMIEN;; NMI enableX;(X; FLOATING POINT2X; --------------<FASC;; FP-}to-ATASCIIFIFP;; integer-to-FPPZFR0D;; clear FR0ZX;dX; OS ROUTINESnX; -----------xCIO}VV;; CIO entry#SETVBV\;; set v-blank vectorSYSVBV_;; OS VBI entrySIOINVe;; SIO initX;X; INTERNAL} EQUATESX; ----------------X; X; MEMORY ALLOCATION X; -----------------"INLINE;; text inpu}t bufferGAMEDATA:;; working area)EDLIST <;; start of E: display list$SCREEN@<;; start of screen RAMX;X}; Game play databaseX;" GAMEDATA,X;6EVENT ;; event #@PLACE ;; locationJ!CABINET ;; cabibet opened}T#RAFTIN ;; raft in the water^!INFLATE ;; raft inflated?hCHEST ;; chest open?rJUG ;; jug open?|R}OBE ;; wearing robe?&SACRIF ;; sacrifice performed? GOBLET ;; goblet filled?!SHELVES ;; shelves move}d?!DRINK ;; liquid consumed? PAPER ;; paper inserted? PHOTO ;; photo inserted?&DPLACE ;; location} of dynamiteOIL ;; oil poured?LIT ;; match lit?MATCNT ;; # of matches$CHECNT ;; chest turn cou}nterWALLET $ROCKCNT ;; hit rocks counterCORD ;; cord pulled?RAFTFND ;; raft found?"DYNAFND} ;; dynamite found?&SNAKE ;; snake dead?0LASSO ;; got coconut?:LITCNT ;; match counterDBLAST ;}; dynamite lit?N%HOLDINGS ;; current inventoryX'VECTORS ;; current vector tableb'OBJECTS ;; current object }tablel,NTRANS &;; current translation matrixvX;X; MISCELLANEOUSX; ------------- EOL SPA}CE  SETPNTͲ OFFCNTϼNEWSETDROMSETX;X; ZERO-PAGEX; ---------X;}X; Cursor control X;$CURSEN ;; cursor on/off flag &CSHAPE ;; current cursor shape*#BLINK ;; cursor blin}k timer4X;>X; Keyboard handlerHX;R"CLICK ;; key click counter\&LENGTH ;; line length registerfX;pX; DLI} controlzX;!DLICOL ;; DLI color indexX;X; Screen clearingX;'CLPOINT ;; screen clear pointer$CINDE}X ;; window clear indexX; X; ParserX;PBUFF ;; parsing bufferPDEX ;; scanning index$LBREAK };; pos. of space charVCODE ;; verb code # )UCODE ;; untranslated noun code # 'NCODE ;; translated noun co}de # 'DOVECT ;; verb execution vector$ 'CURVECT ;; current room vectors. 'CUROBJS ;; current room objects8 $}NEWPLACE ;; next room code #B (VPNT ;; addr of current v-bufferL (OPNT ;; addr of current o-bufferV .INVPOS };; position in inventory buffer` *ROOMPOS ;; position in room bufferj 'ANY? ;; flag for empty room/invt VLAST };; last verb~ ULAST ;; last noun X; X; Event counter X; EBUFF ;; printing buffer X; X; INIT}IALIZATION X; -------------- X;  X; ENTRY $> &COLDST 2;; = 1 &BOOT? MOVESET;; redefine} char set(  SIOINV;; for sound init2 !TITLE< X;F !X; CUSTOM DISPLAY LISTP !X; -------------------Z DLI}STd p=p=p=p;; blank 32 linesn % B=4SCREEN=5SCREEN;; text w/LMSx  =;; blank 4 w/DLI  ;; text (location)  }=;; blank 4 w/DLI  ;; text (exits)  =;; blank 4 w/DLI & =====;; text (v-items)  =;; blank 4 w}/DLI  =;; text (events)  =;; blank 4 w/DLI  =;; text (response)  ==;; blank 4 w/DLIs & ===}==;; text (i-items)  p;; blank 8  A=4DLIST=5DLIST;; JVB X; X; TITLE SCREEN X; ------------" } TITLE, $>6 B@  NEWSCREEN;; reset E:J POSITION  =T #PRINT T0;; "Clayton Walnum's"^ POSITION =h #PRI }NT T1;; "ONE FOR THE ROAD"r POSITION = | +PRINT T2;; "(C)1985 ANALOG Computing" X; STARTOP POSITION = } 1PRINT T3;; "Press Ԡ to play new game" POSITION = 5PRINT T4;; "Press Π to restore old game" X; } Q> PEDLIST ;; modify PEDLIST ;; display list X; Q>" PSDMCTL;; restore screen BEEP X; X; Wait f }or selection& X;0 POLL: QCONSOLD R>;; scan until aN FPOLL;; key is pressedX LETGOb $CONSOLl (>v HLETGO R}>;; START pressed? !FNEWGAME;; yes, do a new game R>;; OPTION pressed? $FRESTORE;; yes, restore old game BADPOLL}  BOOP;; else !POLL;; resume scan X; X; Start new game X; NEWGAME INITDATA !PLAYSCREEN X; X; Restor}e a previous game X; RESTORE* POSITION =4 -PRINT T5;; "Restore from Disk or Tape?"> BEEPH DORTR GETKEY}\ R> D;; disk?f FGETDISKp R> C;; tape?z FGETAPE DORTERR CLOSE1 BOOP !DORT X; X; Get game from disk }X; GETDISK DPOINT !READOPEN X; X; Get game from tape X; GETAPE TPOINTX;$ READOPEN.Q>;; OPEN c}ommand8 PICCOM9BQ>;; READL PICAUX19VQ>` PICAUX29j CIOVt GDORTERR~X; X; Get game data thru IOCB #1X;} GETDATA$>Q>4GAMEDATA PICBADR9Q>5GAMEDATAPICBADR9Q>Q PICBLEN9Q>PICBLEN9Q>;;} GET RECORD  PICCOM9 CIOV GDORTERR( CLOSE12X;<X; PLAYSCREEN INITFX; ---------------PPLAY}SCREENZ NEWSCREEN;; reset E:dX;n X; Enable custom display listxX; Q>4DLIST PSDLSTL Q>5DLISTPSDLSTL}X;X; Print title & labelsX;+PRINT T6;; "ONE FOR THE ROAD EVENT #"Q> ;; set right marginPRMARGN;; for wrapa}round!PRINT T7;; "LOCATION/EXITS" PRINT T8;; "VISIBLE ITEMS" BAR BAR BAR BAR;; 4 blank bars" SAY}WHAT;; "WHAT",)PRINT T11;; "HAPPENS/YOUR RESPONSE"6 SAYWHAT;; "WHAT"@$PRINT T12;; "YOU ARE CARRYING"J BART B}AR;; more blank bars^Q>'hPRMARGN;; resetrX;|Q> ;; whitePPCOLR0;; cursorX;X; Setup P/M borders & maskX};Q>0PHPOSP1;; position left Q>;; andPHPOSP2;; right borders Q>@;; andPHPOSP3;; title cover$>&}GRAFP1;; set up&GRAFP2;; side borders and&GRAFP3;; title mask 2;; = 0&SIZEP0;; set cursor width& 2;; = 10!&G}PRIOR;; set player priority:Q>DPSIZEP1;; set borderNPSIZEP2;; and maskXPSIZEP3;; widthsbX;lQ>;; initvPC}SHAPE;; cursor shape Q>;; andPBLINK;; blink timerX;Q> PLMARGN;; init left marginX;%>4IMMVBI;; set V}BI vector,$>5IMMVBI;; specifyingQ>;; immediate-mode SETVBVX; Q>4DLIPVDSLST;; tell OS whereQ>5DLI;; } we put our $PVDSLST;; DLI service routine!Q>;; set bits 6 & 7 of NMIEN $PNMIEN;; to enable DLIs and VBIs*X;4 Q!}PLACE> !REENTRYHX;RX; EVENT GENERATOR\X; ---------------fX;p NEXTEVENTz$>;; empty stackB;"}; just in case! SHOWEV;; show event ##EVENT;; updateHHITROCKS;; event#EVENT;; counterX;X; Handle roc#}ksX; HITROCKS QPLACER>DR1 !EXPLODER1 "ROCKCNT QROCKCNT$ HEXPLODE. NEWSCREEN8POSITION $} =B+PRINT T77;; "Crashing into the rocks"L !KILLSVX;`X; Handle explosionjX;t EXPLODE~QBLAST;; counter set%}?FCHESTRTN;; no"BLAST;; -1 from counterQBLAST;; time to explode?HCHESTRTN;; no QPLACE.RDPLACE;; player &}in same room as dynamite?FEXP4;; yes, too bad!Q>;; dynamite OWNIT?FEXP4;; deep trouble! QDPLACE;; room wi'}th dynamite"T?;; * 2 ; calculate positionPNCODE;; in objects buffer  T?;; * 4,ONCODE;; *2 + *4 = *6(O>2(}?;; use Y as index<EXP0FQOBJECTS8;; get objectPR>;; dynamite?ZFEXP1;; sure is!d1nHEXP0;; try next objectx)}EXP1 QDPLACER> ;; explosion in room 9?HEXP3;; nopeQ>;; cavePOBJECTS8;; put in room 9Q> ;; new room v*}ectorPVECTORS9EXP2POSITION  = !PRINT T48;; "Booooommmmm!!" BOOM !CHESTRTNEXP3Q>#POBJ+}ECTS8;; get rid of dynamite HEXP2"EXP4, NEWSCREEN6POSITION  =@"PRINT T73;; "Huge explosion"J BOOMT !,}KILLS^X;hX; handle chestrX;| CHESTRTN QCHECNTR>;; chest already placed?FMATCHRTN;; yes$R>;; time for -}chest to show up?HCRTN1;; nopeQPLACE;; current roomR>;; is it room 3?FMATCHRTN;; yes'%>;; point to room .}3 object bufferCRTN QOBJECTS8R>;; got space?FCRTN0;; yes!1)>;; end of room 3 buffer?HCRTN;; no, t/}ry again&FMATCHRTN;; no space yet0 CRTN0:Q>;; chestDPOBJECTS8;; put in roomN CRTN1X "CHECNTbX;lX; handle 0}matchesvX; MATCHRTNQLIT;; match lit?FDRNKRTN;; nope"LITCNT;; -1 from counterHDRNKRTN;; still litQ>1}PLIT;; match goes outPOSITION  = "PRINT T29;; "Match goes out" X;X; handle liquid X;* DRNKRTN4QDRI2}NK;; drank liquid?>FPARSER;; noH#"DRINK;; yes, decrement counterRQDRINK;; time up?\HPARSER;; no, whew!f NEWSCRE3}ENpPOSITION  =z"PRINT T32;; "Strange liquid" !KILLSX;X; INPUT PARSERX; ------------4}X; PARSERQ>" PSDMCTL# GETLINE;; put line into INLINE CLWH $LENGTH(>;; if length is 1"HDOCLAUSE;; 5}check for legalityX;+X; Check for a legal single-char commandX;$QINLINE;; get the character.$>;; init search i6}ndex8 LEGSINGB RSCOMS9LFEXSING;; matched! go do itV0;; otherwise`ILEGSING;; keep searchingj SYNERR;; error, so7} printt#PRINT T14;; "Invalid command"~!BADPARSE;; and try againX;#X; Execute a single-char commandX; EXSING8}QSVECTL9;; fetch the lsbPDOVECT;; andQSVECTH9;; msb of thePDOVECT;; execution addr!@DOVECT:;; and do i9}t!X;"X; Find the 1st space characterX; in the user's responseX;  DOCLAUSE Q>SPACE PPBUFF( PPBUFF2:}$>< FIND1FQINLINE9;; length is in XPR>SPACE;; is it a space?ZFENDV;; yes!d2;; else keep scanningn (LENGTHx;} DFIND1 BADVERB' SYNERR;; verb is no good, so print'PRINT T15;; "Verb not recognized"!BADPARSE;; and try agai<}nX;%X; Space char found, so record its&X; position and move the first half+X; of the clause into the parsing buffer=}X;ENDV &LBREAK(> DTOVB$>TOVB QINLINE9" PPBUFF9,06 ITOVB@X;JX; Check for a legal verbT>}X;^$>;; init verb indexh &VCODEr VNEXT| &PDEX %>;; init buffer char index VSCAN$QPBUFF8;; get a char fro?}m bufferRVERBS9;; match?%HNEXTRY;; nope - try another verb23)>!DVSCAN;; if all 3 chars matchELEGALV;@}; the verb is legal NEXTRY #VCODE $PDEX222&(>NV;; out of verbs?0!DVNEXT;; nope - keep scanning:A}%EBADVERB;; else verb is worthlessDX;N+X; Verb is legal, so fetch its executionX X; vectorbX;!X; Move the second halB}f of the$X; clause into the parsing bufferX; LEGALV&$LBREAK;; fetch pos. of space char 2;; plus 1 %>;; init C}buffer char index MOVENQINLINE9;; fetch character PPBUFF8;; stuff into buffer2 3*)>;; until 3 characters4D}DMOVEN;; have been moved>X;HX; Check for a legal nounRX;\$>;; init noun indexf &UCODEp NNEXTz &PDEX %>;E}; init buffer char index NSCAN$QPBUFF8;; get a char from bufferRNOUNS9;; match?&HNEXTRY2;; nope - try another noF}un23)>!DNSCAN;; if all 3 chars matchELEGALN;; the noun is legal NEXTRY2 #UCODE $PDEX222$G}(>NN;; out of nouns?.!DNNEXT;; nope - keep scanning8" SYNERR;; else noun is garbageBPRINT T16;; "Bad noun"LH} !BADPARSEVX;` X; Noun's code # is in UCODE;j X; verb's code # is in VCODE;t&X; verb execution addr is in DOVECT~X;I} LEGALNQVCODE;; fetch PVLASTT?;; execution addr >;; andQVVECTS9;; save itPDOVECT;; in DOVECT2 QVVEJ}CTS9PDOVECT QUCODE PULAST>QNTRANS9;; translate noun( PNCODE2!@DOVECT:;; execute verbxX;*X; K} EXECUTE SINGLE-CHAR COMMANDS*X; ----------------------------X;#X; COMMAND VECTOR TABLES#X; L} --------------------- SVECTL! 4DOM=4DOM=4DOM=4DOM=4DOM 4DOM=4DOQ=4DOX=4DOA SVECTH! 5DOM=5DOM=5DOM=M}5DOM=5DOM 5DOM=5DOQ=5DOX=5DOAX;X; HANDLE "Q" (QUIT)X; -----------------DOQPOSITIONN}  = "(PRINT T19;; "Type Y to quit game:",POSITION "= 6&CURSEN;; enable cursor@ BEEPJ GETKEYTR> Y^ FDO}OQUITh$> r ERASE| !BADPARSE DOQUIT !TITLEX;X; HANDLE MOVEMENTX; ---------------X; EP}NTRY: Vector (0-5) in XX;DOM QCURVECT9 IEXMOVE CANTGO*PRINT T18;; "You can't go that way." !BADPARSEQ} EXMOVE -;; for safety PNEWPLACE;; save destination& R>;; going to room 2?0 HEXMV0;; no: QINFLATE;; raft inflatR}ed?D FEXMV3;; noN $RAFTIN;; raft in the water?X FEXMV3;; nob HEXMV2l EXMV0v R>;; going to room 1? HEXMV1;; noS} $INFLATE;; raft inflated? FEXMV2;; no Q>;; raft OWNIT? FEXMV4 EXMV1 R> ;; going to room 9? HEXMV2;T}; no QSNAKE;; snake dead? HEXMV2;; yes (PRINT T46;; "Snake won't let you!" !GOODPARSE! EXMV2 ! SAVELOC;; savU}e status! QNEWPLACE;; get destination, !!PPLACE;; make it current, and*! REENTRY4!& BPOINT;; point to the new buffers>!V}X;H!X; Get new buffer dataR!X;\!%>f! RLOOPp! Q@VPNT7z! PCURVECT8! Q@OPNT7! PCUROBJS8!1! IRLOOP!X;!X; RefrW}esh screen!X;! SHOWPLACE!$>!" ERASE;; clear location window!POSITION  =!$PLACE;; get loc #! CHGCLR;; sX}et screen colors"QRDLS9;; fetch lsb and"!%RDHS9;; msb of text addr and" EPRINT;; print it$"X;."$ SHOWVIS;; display Y}visible items8"$ SHOWVECTS;; display new vectorsB" SHOWINV;; show inventoryL"!POKAY;; congratulations!V" EXMV3`" NEWSZ}CREENj"POSITION  =t"&PRINT T71;; "Storm tossed ocean"~" !KILLS" EXMV4""PRINT T38;; "Raft's too big""!GOODP[}ARSE"X;""X; POINT TO NEW BUFFERS""X; --------------------"!X; ENTRY: Buffer # (0-23) in A"X;" BPOINT\}" T?;; * 2"PNCODE;; save it" T?;; * 4#, #ONCODE;; *2 + *4 = *6#PNCODE;; save it#,(#O>4VECTORS2# PVPNT<#Q>5]}VECTORSF#O>P# PVPNTZ#,d# QNCODEn#O>4OBJECTSx# POPNT#Q>5OBJECTS#O># POPNT#:#X;#$X; HANDLE^} "X" (SAVE GAME)#$X; ----------------------#DOX#" SAVELOC;; save current status# NEWSCREEN#POSITION =_} #2PRINT T82;; "Save game to Disk or Cassette?"#Q>"$ PSDMCTL$ BEEP$ SAVEPOLL"$ GETKEY,$R> D6$ FDSAVE@$R> C`}J$ FCSAVET$ BADWRITE^$ CLOSE1h$ BOOPr$ !SAVEPOLL|$X;$X; Save to disk$X;$ DSAVE$ DPOINT$ !GSAVE$X;$X; Sa}ave to cassette$X;$ CSAVE$ TPOINT$X;$ GSAVE$Q>% PICCOM9%Q>% PICAUX19&%Q>0% PICAUX29:% CIOVD% GBb}ADWRITEN%X;X%X; Write out game datab%X;l% WRITEv%$>%Q>4GAMEDATA% PICBADR9%Q>5GAMEDATA%PICBADR9%Q>Q% c}PICBLEN9%Q>%PICBLEN9%Q> % PICCOM9% CIOV% GBADWRITE% CLOSE1&!PLAYSCREEN &X;& X; HANDLE "Ad}" (AGAIN) & X; ------------------*&DOA4&QVLAST;; restore old verb>& PVCODEH&QULAST;; and nounR& PUCODE\&!LEe}GALN;; and do it again!f&X;p&X; SAVE LOC STATUSz&X; ---------------& SAVELOC& QPLACE& BPOINT&%>f}& SLOOP& QCURVECT8& P@VPNT7& QCUROBJS8& P@OPNT7&1& ISLOOP&:&X;------& SAVELOC& QPLACE& BPOINT&%>PdX; PAPERWEIGHTnX; BY Curt FoxxX; RPAD PAD( FS EOFSFSMRSCFS VT KEYh}S CTR BLINKWSTRTFD NMIENAUDCTL SKCTL FSIST0 SETOB\PADASE" i}START, SELECT6 DYMUMP@FSIVECJVTNABLT VDEL^VTBASEh CTRLSBr RED0| GREEN҆j} AMBER' ORANGE" SPFC0 SCBAKATTRACTM CONSL COMB BUFADD BUFLHCUROSRk} CHLUM P0C HP0C PUT  DMA/ P0X& OSP00 OSP1: OSP2D OSP3N OSCl}0X OSC1b OSC2l OSC3v CIOVV PIz ROWT COLUXITOBVb FSPSP Ҳ GRAF м m}HPF1C HPF2C HCBAK PACTL SHOE BOOT  SIZEX; ,;;After DOSX;  PWQ><* Pn}PACTL4 Q>;;Trap>PBOOT;;System ResetHX;R Q>5SDV1\ PSHOEf Q>4SDV1p PSHOEzX;SDV1Q>5PAD PPADASE$o}> &AUDCTLCTQRPAD9;;MovePPAD9;;ROMQRPAD9;;vectorPPAD9;;tableQRPAD9;;to RAMPPAD9;p};to useQRPAD9;;as aPPAD9;;"scratchpad"0HCTQ>GREEN;;conditionPSPFC0;;green$X;. SDVQ>>8 Pq}DMA;;SetBQ>;;preliminaryLPOSC0;;access orVPOSC1;;"handshake"`Q>;;flags sojPOSP0;;vector istQ>;;locatabler}~ POSP1 Q>;;KillPCUROSR;;cursorX;QFSIST;;InitalizePFSP;;FlagPFSP2;;SequenceQFSIST;;Procs}essingPFSP;;StackPFSP2;;PointersQ>;;(FSPSP) $>;;andFSPPDYMUM9;;their 2;;stack (>;;(F-stack)t}HFSPX;( Q>5FSI2PFSIVEC< Q>4FSIFPFSIVEC;;ComputePQ>5VT;;mainZPVTBASE;;offsetsd Q>;;fromnPSKCTLu};;scratchpadx PATTRACTQ> PWSTRTFX;$>5M1;;Print%>4M1;;PaperweightQ>M2M1;;by Curt Cox PRINTX;v}WAITQCONSL;;Wait forR>;;[START] HWAITX;Q>PSTI;;PrintW2$>5M2;;Locating %>4M2" Q>M3M2, w}PRINT6X;@Q>;;Find nextJ FIND;;flagTX;^ $>5M3h%>4M3;;PrintrQ>M4M3;;Locating| PRINTX;Q>;;Find nx}ext FIND;;vector"STI;;Find moreHW2;;if neededX; $>5M4%>4M4;;PrintQ>M5M4;;found PRINT;;andy}W4QCONSL;;wait R>;;forHW4;;[START]X; $>5M5%>4M5;;Sure?& Q>M6M50 PRINT:X;DQ>NPKEYS;;Sure.Xz} W3QKEYSbR>+lHW3vX; Q>AMBERPSPFC0;;Print$>5M6;;ten seconds%>4M6;;to safelyQ>M7M6;;abort PR{}INTX;Q>5ABORT;;Abort onPSHOE;;SystemQ>4ABORT;;Reset PSHOEX;Q> ;;Print 10 PSTI;; 9 CDWQ>;;|} 8 FIND;; 7  $>5M7;; 6* %>4M7;; 54Q>M8M7;; 4> PRINT;; 3H "STI;; 2RHCDW;; 1 + 0\X;fQ>p PDAMAGEDz}}$>5M8;;Destruct%>4M8;;Proceeding Q>A1M8 PRINTX;Q>PNMIEN;;SetQ>;;finalPSBI;;flagsSB S~}TAT;;from"SBI;;f-stackQSBI PSLVLR> HSB X; Q>RED$ PSPFC0. $>5OBI;;Set8 %>4OBI;;A,X,and yB Q>};;and jumpL  SETOB;;to SDVV X;` Q>;;Successfulj PSLVL;;Jump?t X;~ REP STAT;;If not QDEL;;try GQE2;;res}et !REP;;flags X; QE2$>;;and try %>_;;secondary Q>;;vector SETOB X; $>;;The rest of FL FOB;;th}e routines 0;;are used HFL;;in flag Q>4RQE2;;and vector PSHOE;;locating and Q>5RQE2;;determining( PSHOE;;p}roper2 RQE2Q>;;flag< $>;;valuesF CPLPGRAF9P 0;;roughZ HCPL;;explanationsd HFL;;will ben Q>?;;given butx PD}MA;;generally $>;;a detailed &VTNABL;;explanation POOLQ>O;;would PFS9;;require PFS9;;comments PFS9};;of an 2;;obscene 2;;length. Q>5MRSC PFS9;;For PFS9;;further PFS9;;information 2;;see the revised }(>;;1986 ATARI HPOOL;;technical Q>A;;users notes" PEOFS;;destruct, Q>;;appendix6 POSP3;;(ATUNDA)@ PEOFS;};sectionJ PFSIST;;givenT PSPFC0^ Q>5FSh PEOFSr PFSIST| X; Q> POSP0;;Put Q>;;preliminary POSP1;};values in Q>;;acess POSP2;;flags Q>;;to verify POSC0;;vector Q>;;location POSC1 Q> POSC2 Q>} POSC3 X; OL$>& L2QFSPSP;;Resort0 2;;vector: PFS9;;tableD PFS9;;accordingN PFS9;;to flagX 2;;value}b 2l (>v HL2 X; $> L3QFSPSP;;Screen PMRSC9;;out QFSPSP;;unnecessary PMRSC9;;scratchpad 0;;and} HL3;;f-stack &ATTRACT;;entries !OL;;to save FSI5;;time. A 5;;Pass $PN;;results QFSPSP;;to 6502 PP0X}9;;stack 0;;to FILO* HXITD;;reverse4 $>> XITD&PNH 7R >\ 7f 9p X;z OBIQ>RED PHPF2C;;Load Q> ;;flag }PHPF1C;;location Q>;;and PHCBAK;;scramble #STI;;it to QSTI;;determine V?;;its V?;;proper V?;;value M>} PBLINK QSLVL;;ScrambleV?;;it using?;;the vectorQ>;;high byte$ POSC3. QFSPSP8CSLLFSPSPB 1;;If t}heLHCSL;;differenceVNCONSL;;is even`PCONSL;;thenj$>;;go on.t RLQFSPSP~ PHP0C9QFSPSP;;SortPSIZE9;;ne}eded 0;;vectorsHRL;;out of$CD;;scratchpad 0;;andHXITV;;transposeQFSPSP;;them M>p;;asFSP2PDYMUM;;s}pecifiedQ>;;by bitsPHPF2C;;2,3,4, andPHCBAK;;7 of their Q>;;f-stackPHPF1C;;entries"DEL(QDEL2V?<}V?FV?PV?;;ComputeZ M>;;thedO>;;ambidorsalnPSLVL;;parallelsxQ>;;by sub-POSC3;;sequencing%>PAD};;theDCHA'CP1;;returciary'SL;;indices DCH;;and1;;performing)>PAD;;GoadianHDCHA;;tra}nsductionQDEL MFSPSPL>> XITV&CD !XITOBVX;DCH$FSPSP"QFSPSP;;Scramble, M>;;the6HSL;;FSPS}P@ CP1VPAD9J:T SLTPAD9^:hX;r STAT$>|PCQFSPSP;;UseM>;;scratchpad PP0C9;;toQ>;;determinePV}TNABL;;if allQ>;;flagsPVDEL;;have been 0;;foundHPCX;$>LOOP SORTPVT9;;Find SORT;;the}PVT9;;variance SORT;;factorPVT9;;between& SORT;;FSPSP0PVT9;;and the: SORT;;scratchpadDPVT}9;;andN0;;restructureX HLOOP;;ifb:;;necessarylX;vSORTQFSPSP SLVL%>L9MFSPSP;;Check 1;;flagHL9;;t}o make ?;;sureM>;;properL>;;value hasPOSC2;;been foundC:X;FINDPCTRLSB;;WaitPAWQCTRLSB;;for} DestructHPAW;;line to  :;;be low.X; FOBQCTRLSB*FOBWRCTRLSB4FFOBW;;Check>Q>;;flag,HPOSC3;;flag valu}eRQ>;;vector\PSPFC0;;andfPSCBAK;;sequencepQ>;;code andzPCHLUM;;recomputeQCTRLSB;;as necessaryVWRCTR}LSBFVW Q>RED PSPFC0Q> PATTRACT PSCBAKQ>  PCHLUMQ> POSC3:X;PRINT'BUFAD &BUFA}D$PBUFL;;Print.$>;;routine8 &BUFLBQ> LPCOMV CIOV`:jX;tABORTQ>5PAD;;Clear~PPADASE;;destruct}Q>;;request PCUROSR Q>GREENPX;$>5A1;;Print%>4A1;;aborted Q>A2A1 PRINTX; QDAMAGED}FNOD;;determineQ>ORANGE;;damage P $>5A3 %>4A3( Q>A4A32 PRINT<X;FNOD$>5A2;;PrintP%>4A2;;howZ}Q>A3A2;;muchd PRINTnX;xCHECKQCONSLR>START;;Exit FJSDV;;orR>SELECT;;restart FJDOS;;as!CHECK;;re}quested JSDV!SDV JDOS!@ :X; CD  DEL x PN DAMAGED  SBI  STI M1 A} A }AԠA=" A by Curt CoxA, =6 APress to beginA@ A locating SDVA==JM2 ALoc}ating ...A=TM3 A砮A==AA^M4 ==h ASelf-Destruct VectorAr A foundA==| APress }to A Aexecute orA= A͠ to A Aabort.A==M5 AAre you sure?A A (press 'Y' for yes)A }=M6 A}A=== AYou can abort withoutA A damage forA= Aten seconds.A==  A}A AA==AA M7 A A M8  AΠA&A1 A}A==0 ADestruct aborted -} A=:A2 =Apress toAD =Are-locate SDV or AN A to exit.AX A3 =ADamage incalcuable Ab Abe}cause ofA=l Adamaged memoryA=vA4X;;;load run address PW.AX A3 =ADamage incalcuable Ab AbeS/