@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 D8u00L9@1UK__WWWWﯯUUUUUUUUUUUiiUUUT}뫫뫿WWﯯ________U}??????/+ ////V}?????????????????W} ????0//  <X}/+ ?????????  Y} %EA)/oЩԢxo9=>/o``hpx?5 :@5d} ;A5 ;B5 0;`آ K < )H #9 : F < F>0510 d9=; s9?5L:x4(e}8Jc5ȩ;_5=a5i`5 FGc55d50e5 ; ~;c:;d:;:;:Ɲ F;$=f}= : < < F V< >оt4  a< : H < < F>晥)L9Ј`y=g} `= `= `= ` ` ` `h} `F;T;b;p;:;;0;H$ ԍ ԩЩڍЩh@ ԍЩh@ ԍh@ 7<Mquqi}q 7<Mqsqq  V<З` )e杊 7=8=``j}``ҩ V<ҍ`<:8DVXZ\^qrrrrrrrrrrqqqqqpppppppppppqqqqqqqqq#=">00 9ȩ:n}` -ȩ. +ȩ,֠)ȩ* > .51/5 @@ FG 1`' 1`Bar-B-Q Ro}anchRingading PhoneCrosseye Cable TVOlde Yorke TimesSpuds Potato FarmBlack Gold OilRex Auto Corp.Thredbare ClothingKop}lbe's CheeseDaisy's DairyBlack Jack's CasinoDeath Valley SpaAdams Apple OrchardSour Grapes VineyardShort Circuit P & Lq}Heavy Water CompanyStytch's ClinicSchappel's ScalpelsCrosstrax RailwayDrip Dry CleanersJetstream AirlinesHAL Computersr}Selmart StoresIOU PenneysWilt's VegetablesTitanic ShippingSteal SteelworksSilicon GulchDisastrous InsuranceThe Luck Sqs}uareCapital Gains Tax@q@@8???@@)?H@@@w??V@??@#@?>5@@>e@G?@Z?i?@>?@@??K0|4`0ŦK0t}ei` )C`g8 }G A` 0 0 LB -B0`'0 8 }GLa- .+)? `4~`|}D0ؘiA` EФ#~LKE֙31 FG ə31`ύ041:/ 8 F Ȋ}}iёȩii EE31壟i(x431Ċ` C~D }G-LC}ɛ`~ ^F wF`}~} !"􅀅` FGH wFh 恢` Ɓ`i 惈e`H hy000e0}LF 08堙00孙0'04Și00 00 Gȱ FG0򤊥y4Ċ`Ԇ 7` } ؠȱ)ȩGȑ` XG75` XG;5`H****)h)`` GGG F HGG`HHH}II i̢II 8hhh@H:ԩ ЍЩЍ ԍh@ ԍh@MLbHh`}`H \ :041>/ H$G8ԩ% H 76 6 HJLHJ H报}ͩJĩ HILuH?5ȩ?5ĊLEҩҠM`ШE%`G$041=/ F8} J0 6CLI =J00 ř9 ALI B.|4'0o0HJyo0o0 =Jؠ8 }G Bho0 BL\A F FH}?5 JJ8 }Gh 00#0ř00o0ޓ0 F a<?5L: F?5 J%8 }G fGL9 )Ś`#o}0 J Je0쥤 #o0J0`檩7 }G $H @@ D $Ho0 vG0 vG'0 H  $H|4 8 }}GLJ 8 }G $H0K0|40ŮK0e vG wF0 JƪL$Hx4(8L}G#0'0}s4K0$%&'% 9 `pGs(op@BCEG(((((((((((((((((((((((((((((nI((l@?@@?@@@BBBCC}DDDB@CE(((((((((((((((w@^(m@@@@@?@@@@@@@@@@@@@L(bqDDr(((((({CA@se(@@?@@@??@@@@@@@@@@@@@@@@U}md((((y@@?x((K@?@349:+,+,9:;<9:9:}9:56@ka@@`((y@@?Lt((W@?@@@@???@@@@@@@@@@@@@@@`a@@g{z@@?L((((@?@@+,@??@@@@@@@@@@@@@+,@^_@@@@@@@@d((((@?@@@@?@??@@@@@@@@@@@@@@@}@@@@@@@?@@d((((@@?@+,@???@@>111=>212=+,9:+,+,/0@?@c((((@@?@@@@@??@@>121=>212=@@@@@@@@@@?@@@h(((S@?@9:@@@??@>111=>212=@@@@@@@?}9:@@@@i(((O@@?@@@@@@?@@@@@@@@@@@@@@@@@@?@@@@@e((((~N@@9:9:56@?@@@@@@@@@@@@@@78+,+,@@e((((((N@@@@@@@??@@@@@@@@@@@@@@@@?@@@@f(}(((((((}}N@@+,+,9:9:;<+,+,9:9:9:@@@@@`(((((((((((~}N@@@@?@@@@@@@@@@@@@QQRRRN@H(((((((((((((}}}}O@@@@@@@@@@@@x((((((O@H(((((}((((((((((((~OLN@@@@L}}}}}((((((~N@h(((((((((((((((((~(~N@@M(((((((((((((~vu((((((((((((((((((((N@|((((((((((((((T(((((((((}((((((((((((N(((((((((((((((((((((0((((((((((((~(~N@@M(((((((((((((~vu((((((((((((((((((((N@|((((((((((((((T((((((((()S(dX;SAVE#D:CAPITAL1.M65nEIxX;------------------------;X; ;X; CAPITAL! ; }X; ;X;by: Bryan Schappel ;X;and Barry Kolbe ;X; ;X;( }C) 1988 BBK Enterprises;X; ;X;------------------------;X;PASSPASS PASS }>D:SYSEQU.M65X;"X;Zero Page Equates,X;6@XPOS;;'cursor' x,yJYPOS;;positionsTSCR;;ind. sc }r loc^ SCR2hSAVEX;;save XrXSV1;;register| XSV2 PLAYERMAXP;;max # plyrsSPEED;;game s }peedCONSAV;;CONSOL savePX0;;PMG x,yPY0;;positionsPTHP0;;plyr map posPNUM;;curr. plyr # }RNUML;;indirectSQRS;;squares to mov SCNT BDLCTMP;;cash tmp saveXT;;save x & y Y }T&CPROP;;cur. property0DISFLAG;;disaster flag: VALUEDOWNER;;owner of propNTPROP;;temp prop. # }XPPROP;;picked propertybESCFLAG;;print 'ESC' ?lPAUSE?;;print speedvRFLAG;;pay to whom?AMOUNT;; }amount owedSVY;;save ySVY2;;registerX;X;Other Memory UsageX;GR0MEM ;;txt scrn RAMMSET$;; }a char. setNAMEBUF( GRTAB)BOTLIN;;txt scrn lengthPMB;;P/M baseP0;;player 0P1;;pla }yer 1 P2;;player 2P3;;player 3 MONEY_CLR;;$ line color*X;4 PRINT > Q>4 H %>5 R EPRINT\f }X;pPOSITION z $>4  %>4  POSITX;X;Start of AssemblyX;0CSET!FAKEX;"X;Tables for p }roperty ownership X;rent, cost and double Xref.X;WHO$;;ownersIMP$;;improvementsRENT$;;rentCOST$; };value$REFTAB$;;shadow table.CASH;;players money8RANTAB$;;selling priceBMONEY(;;money lineLPRPLIN(; };prop. lineVIBUF;;input buffer`X;j X;Fetch the character set fortX;the Map of the US~X;@1>D:CAPITAL3.M }65X;X;Initial Table ValuesX;X;the initial rent valuesX;must be less than 32 sinceX;inprovements are done by }X;multiplying by 8 (3 ASL's)X;RENTORG ===== = ==== =====  ==== }= ===== ==== = (X;2#X;the initial cost of properties<X;FCOSTORG ==%==E=AP  }=)=<=I=T=Z  ==&== =d ==$=%==n 3= ==5=0=8x == ==d=/=*X;$X;initial status o }f each propertyX;128 =special, like TAX$X;0=single,free - 1=single,bought$X;2=double,free - 3=double,bought X;4=LUCK }, including CAP GAINSX;REFORG ===== ===== ===== ===== = }==== ===== w=w=w=wX;"X;these are the special squares""X;which have scrolling message }s,X;6SPLC = ==@X9 = ==JX;T!X;These cross reference tables^#X;identify the double propertiesh$X;by }halves and allow the programr X;to find the other half of a|X;property.X;XREF ===== === = = } ===== ===== ===== ====#="X;!X;these are used to center the }X;info on the money lineX;OFFSET = = XST ==X; X;Display List (Transactions)X;&DLTXT p=p=p }=F0 TITLE: =0=bD GR0MEMN ="="="="="X "="="="="b "="="="="l "="===v MONEY } =F PLRN A DLTXTX;X;Display List (Names)X;NDLIST p=p=p=p=p p=F NAMEL p=p=F }GR0MEM p==p==p =A  NDLISTX; X;Display List (Intro)*X;4IDL p=p=p==B> INTLH === }R 0==p==p\ =0=Vf ANDp 0=Vz KNAME p=p=F INTM p==p=p=p =V BBK A }IDLX;X;Display List (US map)X;DL p=p=P=D SCRN ====  ====  ====   }====$  F. PLRN8  B TWIN RLMESL =BV MONEY`  Aj  DLt X;~ X;tables to convert ATASCII X;to I }C or vice versa X; A2I @== =` I2A  =@==` X; X;table for which players !X;are on the screen 0=off,1=on } X; ONBRD === X; X;screen titles X; TITLE A CAPITAL! A  A A PLRN A } A  A A( NAMEL A enter yoA2  Aur names A< X;F X;Data for the word CAPITAL!P X;on the intro screen. This }Z X;was done with contro chars.d X;n INTL ===H=x  =J==H=  =J==H=  =J==H=  J== }H==J  =H===J  =J===  =H===  ====  ====  ====  == }==  ====  ====  ====  ====  ====  ====R"  R= }===,  ====6  ====@  ==R=R=J  ====T  ====^  ====Jh  = }===r  ====|  ====  ====  ====  ==J==  ====  = }===  ====  ====  ====  ====  ====  ====   }=O=== X; X;Other Screen Memory X;  A A& AA0 LO A programmed byA:  AZA===D } A AN A AX AND A Ab A Al KNAME A Av A A INTM A } fast A Agame A PLN A SELECT A  A A  A COPYRIGHT A  A1988 A BBK A bbk enterpris }esA A A X; X;Scrolling Text Messages X; RLMES A RA  AOLL DICE A  A SA  ATOP DICE A } X; STKMES A Stock MaA*  Arket DividA4  Aends pay yA>  Aou $12G AH X;R TAXMES A IRS Tax A\  AAudit: los }Af  Ae 12% of yAp  Aour cash Az X; VACMES A VacatiA  Aon time atA  A the Hog HA  Ailton A X; F }AST AfastA SLOW AslowA BROKE ABROKEA= X; X;Property Selection Box X; BOX }  A Prop:A=EOL A Pric }e: A AResale:A=EOL A Level: A$ ADouble:A=EOL. A Fee: A8 A Owner:A=BX;LYES } AYesA=VNO ANoA=`NA ANoneA=jX;tX;colors for various screens~X;TCLR B= ===ICLR === }B=NCLR == ==X;X;more messagesX;WINNER A has won!A EOL=APress a keA Ay to play again.A= }DEAD_MES A is Broke!A=EOL  YNTXT A property [Y/N]?A=!IMP_TXT EOL=EOL=AImprove A  AaA= SELL_TX }T EOL=EOL=ASell aA (!BUY_MESS EOL=EOL=ABuy thiA2 AsA=<!PICK_MESS EOL=EOL=ASPC=neAF Axt, RET=chooseA }=PPICK_REST A, ESC=exitA=ZTRAN_OK EOL=EOL=ATranAd Asaction processed.A=n!NCASH EOL=EOL=AInsufficieAx } Ant funds.A=!DOPT EOL=EOL=ADouble OptiA Aon.A= MAX EOL=EOL=AAt Maximum A ALevelA= FEE EOL=E }OL=AFee PaymentA A Required.A= AMTOWD EOL=EOL=AAmount oA Awed A=X; X;Get the Map Handler Half ofX; }the game.X;>D:CAPITAL4.M65>D:CAPITAL5.M65X;X;"X;Put a byte to the screen,X;6CLRSCRQ>};;clear scn@ }EPUTR>EOL;;a CR?J HTRYDELTPUTCRQ>;;linefeed^ PXPOSh #YPOSr:|X;TRYDELR>~;;delete? HTRYCLR MOVELE }FT;;DEL-BCKSP GETSCR;;get scrn locQ>;;zap char? P@SCR7:TRYCLRR>};;clear? HNORMAL%>C;;clear }theCLRSCPGR0MEM8;;screenPGR0MEM8PGR0MEM83& HCLRSC0 PXPOS: PYPOSD:NX;X NORMAL ASC2IC;;to }INT. codeb 5;;save itl GETSCR;;get scn locv%>7;;get byteP@SCR7;;on screenX; GORIGHT$XPOS;;move 'cursor' }2;;to right(> ;;at end ofDEPLEAV;;line?#YPOS;;yes$>;;left marginEPLEAV&XPOS:X;MOVELEFTQXP }OS;;can we>;;go left?  LYPOSFGOLEAV;;no  0;;yes*IGOX4$>;;if $FF go>%YPOS;;up 1 lineHHMVUP;;if not 0R }$>\FGOXfMVUP"YPOS;;up 1 linep GOX&XPOSzGOLEAV:;;exitX;X;Get Scr Mem Loc of CursorX;GETSCRQ>4GR0 }MEM PSCRQ>5GR0MEM  PSCR%YPOS;;get theGETSC1QSCR;;correct ,;;rowO> ;;narrow plfldPSCR } DGODWN #SCRGODWN1;;at row yet?IGETSC1;;no$QSCR;;now get the. ,;;column8OXPOS;;add in xBPSCR;;posit }ionL DGETSCDNV #SCR` GETSCDN:jX;tX;Add Money to player cash~X;ADD5;;save $ C;;plyr # T?;;x2? 7;;g }et $,OCASH8;;add toPCASH8;;plyr's cash QCASH8OAMOUNT;;if >255 PCASH8!FORMDOL;;show result }X; X;Subtract Money from playerX;SUBPCTMP;;save $(C;;get plyr #2 T?;;x2<?FQCASH8;;get cashP ;;;subt. $Z }SCTMPd PCASH8n QCASH8xSAMOUNT;;if $ > 255PCASH8;;fall throughX;X;Format MONEY lineX;FORMDOL }%>';;zero outQ>;;the lineFD1PMONEY81IFD1$MAXP;;max plyrsQXST9;;for centering >;;info3;;y wa }s $FFFD2C;;plyr #,O>;;for screen IC"PMONEY9;;show it, Q>;; '$'6PMONEY9@&XT;;save x,yJ'YTT C;;p }lyr #^ T?;;x2h?rQCASH8;;get his cash|>;;x=high byteQCASH8;;a=low FORMNUM;;to ATASCII$XT;;position %> };;nowFD33;;change cashQ@INBUFF7;;toFFD4;;if '0' done ASC2IC;;internal codePMONEY9;;show it2HF }D3;;next digitFD4%MAXP;;get offsetQXT;;to next,;;plyr's infoOOFFSET8>&%YT03;;next plyr:)MAXP;;l }ast one?D HFD2;;noN :;;whew!XX;bX;Format a numberlX;vFORMNUMPFR0;;low byte&FR0;;hiLFR0;;hello!H }GFPQ>4BROKE;;if 0 youPINBUFF;;are 'broke' Q>5BROKEPINBUFF:GFP IFP;;INT to FP FASC;;FP to ATASC }II%>FM13;;find lastQ@INBUFF7;;inversedIFM1;;digit M>;;& make itP@INBUFF7;;regular 3;;add a 'G'*Q }> G4P@INBUFF7;;and an EOL>Q>;;i.e. a 0H3R P@INBUFF7\ :;;donefX;pX;Convert ASCII to ICODEzX;ASC2IC BITE }R LA2I9 $XSV2:X;X;Convert ICODE to ASCX;IC2ASC BITER LI2A9 $XSV2:X;X;Make char an index }X; BITER5U?$U?.U?8U?BM>L &XSV2V>`7jM>t:~X;>D:CAPITAL2.M65X;pX;the screen da }ta for theX;map of the U.S.A.X;>D:CAPITAL6.M65 CSET>D:CAPITAL2.M65X;pX;the screen da M dX;SAVE#D:CAPITAL2.M65nX;xX;--------------------;X; ;X; CAPITAL! part 2 ;X; } ;X;by: Bryan Schappel ;X; ;X;--------------------;X;X;Get a key pressX; G}ETCH$>&CH GETCQCHR> FGETC&CH:"X;,X;Print a Number6X;@PRNUM FORMNUM;;to IC firstJQINBUFF};;fall throughT%INBUFF^X;hX;Eprint RoutinerX;|EPRINTPEPL;;A= low byte'EPL;;Y = hi byteEPLQ;;}print untilFEPO;;hitting a 0 EPUT;;put itQPAUSE?;;fast or slowHEPN;;printing? JIFF;;wait a jiffEPN#E}PL;;next byteHEPL #EPLHEPLEPO:;;exitX;X;Intro DLIX;IDLI5;;save all the&A;;registers05:}CD5NQ>;;green hueX%>;;dark lumb IDLP$>lIDL1PCOLPF2;;plyfld 2vN>;;switch lumPCOLPF1;;plyfld 1N>};;swtich backPWSYNC;;wait sync 0;;3 lines IIDL1,O>;;increase lum 1;;8 timesIIDLP;;more shades%>;};now startQ>;;with brightIDL2$>;;and shadeIDL3PCOLPF2N>  PCOLPF1N>  PWSYNC*04 IIDL3>;;;br}ing lumH S>;;downR1\ IIDL2f Q>;;grayp PCOLPF1z 7;;restore?;;registers7>7 9;;exitX;X;Text Scr}een DLIX;TDLI5;;save AQBDL;;DLI cntr HTDL2Q>:;;to narrowPDMACTL;;plyfldQ> ;;white PCOLPF1 PCO}LPF0$Q>MONEY_CLR;;$ line. PCOLPF28 PWSYNCBPCOLBK;;& bckgrndL#BDLV7;;restore A` 9;;exitjTDL2Q>;;top DLIt} PWSYNC~PCOLBK;;black bckgnd79X; X;Simple VBI to keep DLI'S OKX; VBIQ> PATRACTPBDL;;DLI counter} !XITVBVX;X;Wait RoutineX;JIFF5;;wait 1 jiffy Q> PRTCLOKW1QRTCLOK(FW127<:FX;PX;Positio}n CursorZX;dPOSIT&XPOSn 'YPOSx:X;X;Intro RoutineX;INTROQ>;;set up Vblank $>5VBI %>4VBI SET}VBV CLRPMG;;erase PMGQ>4IDL;;install DLIST PSDLSTL Q>5IDLPSDLSTLQ>>;;normal plyfd PSDMCTL JIF}F;;wait a jiffQ>5MSET;;our char"PCHBAS;;set,Q>4IDLI;;install DLI6 PVDSLST@ Q>5IDLIJPVDSLSTT%>;;get in}tro^INTYQICLR8;;colorsh PCOLOR08r1| IINTYQ>;;center somePHSCROL;;textQ>;;0 = fastPSPEED;;game spe}ed PCONSAVQ>;;default #PMAXP;;playersQ>%;;make a tone BUZZERINTRL$>;;get theQSPEED;;word 'fast'}T?;;or 'slow'T??RL1QFAST8;;put it onPINTM 9;;screen&302:(>;;done?DHRL1NQMAXP;;# plyrsXL>};;in COLOR!bPPLN ;;show itl CONC;;get CONSOLv V?;;/2DST2!INTLV;;START!X;ST2V?;;SELECT?DST3 Q>} ;;tone BUZZER#MAXP;;more plyrsQMAXP;;too many?R>DINTRL;;noQ>;;reset to 2 PMAXPHINTRL;;loooo}oppppp X;ST3V?;;is it OPTION? DINTRL;;naw*Q>;;another tone4 BUZZER>QSPEED;;change speedHN>R PSPEED\}!INTRL;;loop de loopfINTLV%>;;yea, we startpQ>;;zap allzTCLPONBRD81ITCL3;;put 1's forQ>;;those }plyrsTCL2PONBRD8;;getting 3;;tokens)MAXP;;enuf?HTCL2;;yup!GETNAMES;;who are they?X;X;Buzzer sound}X;BUZZERPAUDF2;;doesn't Q>;;sound like PAUDC2;;a buzzer to me %>;;but ok$ BZ0;;make a sound. HBZ8 &ATRA}CTB 1L HBZV 'AUDC2` :j X;t X;Console Checker~ X; CONCQCONSOL;;get button ?;;i wonder NCONSAV;;what this M}CONSAV;;does except 'CONSAV;;waste time R> : X; X;Transaction Processor X; TRANSQ>4TDLI;;put in DLI PV}DSLST Q>5TDLI PVDSLST Q>5MSET;;our char set PCHBAS( Q>4DLTXT;;& our display2 PSDLSTL;;list< Q>5DLTXTF P}SDLSTLP Q>=;;->narrow<-Z PSDMCTL;;plyfldd  CLRSCR;;clear screenn %>;;get ourx TCQTCLR8;;coloring set PCOLO}R08 1 ITC Q>;;0=fast print PPAUSE? PDISFLAG;;no disaster  MAKE_RAN;;get selling $PNUM;;prices QPTHP09};;get property PCPROP;;landed on ? QREFTAB8;;what is it? R>;;LUCK?? HGWHO;;no who has it?  DO_LUCK;;U Lucky} dog! !OVER;;skip this" !GWHO SHOPROP;;show prop info, %CPROP;;curr prop #6 QWHO8;;get owner@ POWNERJ GTRY_BUY;;}$FF=no oneT RPNUM;;is it US(ME?)^ FOVER;;yesh  PAY_RENT;;Ugh pay rentr !OVER;;skip buying| TRY_BUY BUY_IT;;wanna b}uy HOVER;;a bridge? %CPROP;;check for a QXREF8;;double FOVER;;nope PCPROP;;save it ? QWHO8;;who owns it?} IOVER;;+ = owned QCOST8;;how much? is 5;;that double V? ,;;add 1/2 again OCOST8;;as much for PCOST8;;double}s  SHOPROP;;show prop info PRINT DOPT;;'Doubl option'&  BUY_IT;;'wanna buy?'0 %CPROP;;location: 7;;restore origi}n-D PCOST8;;al cost of propN OVER WANT_SALE;;sell a propX !IMPROVE;;improve one?b X;l X;Handle Player Deathv X;  }DEAD PUTCR;;linefeeds PUTCR QPNUM;;get plyr # 5;;save it > "ONBRD9;;make 0 to ?;;remove  SHO_NAME;;who wa }s it? PRINT DEAD_MES;;'gone' 7;;plyr # again T?;;x2 ?;;zap his/her Q>;;cash PCASH8 PCASH8 $>#;;sel }l props SELL_OFFQWHO9;;back to* RPNUM;;the bank4 HSELL_DN> Q>;;$FF = freeH PWHO9;;propertyR QRANTAB9;;new cost }\ PCOST9;;is half pricef "REFTAB9;;what ap SELL_DN0;;bargain!z ISELL_OFF  FORMDOL;;show $ line  WAITKEY;;pause } $>;;is anyone %>;;left-if so FNWQONBRD8;;s/he is FFNW2;;the winner 2 FNW21 IFNW (>;;LT 2 means D}SHO_WIN;;a winner !NOW;;still going X;X;Show the winnerX;SHO_WIN PUTCR;;linefeed$%>.SW1QONBRD8;;get }plyr's #8HGWNB1LISW1V GWN SHO_NAME;;winner's name`PRINT WINNER;;'wins'j GETCH;;get a keyt!FAKE;;restart}~X;"X;Get a RND # between 1 and AccX;GET_RNDPRNUM;;save ARNDQRANDOMM>;;0-127FRND;;no 0RRNUM;;LT} A?FRNDO;;yupERND;;oversRNDO:;;doneX;X;Make the random property!X;value table. Values are bet- X;ween 1}/2 and full price.X;MAKE_RAN%>#;;36 props(MK1QCOST8;;if 0 no2 FNORAN<V?;;div by 2FPVALUE;;save itP GET_}RND;;get rand #Z,;;LT valuedOVALUE;;add to 1/2nNORANPRANTAB8;;pricex1;;next propIMK1QDISFLAG;;if forced}FMKO;;sale,just%>#;;make pricesMK2QCOST8;;1/2 priceV? PRANTAB81IMK2MKO:X;X;Show a Property}X;SHOPROP#PAUSE?;;fast printPRINT BOX;;printPOSITION =;;outline"QCPROP;;curr. prop,T?;;get name6 >};;x2 for@QPRPTAB9;;offset fromJ ?;;tableTQPRPTAB9;;A=hi Y=lo^ INVPROP;;inversehPOSITION =;;namer$>;;}X=lo cost| %CPROPQCOST8;;A = hi PRNUM;;show costQ>;;move cursor PXPOS$>%CPROP;;get prop#QRANTA}B8;;sale priceSPQ PRNUM;;show it%CPROP;;get improve-QIMP8;;ment levelL>;;for screenPGR0MEMH;;show it}POSITION =%CPROP;;see if doubl QXREF8 HSPY;;yes&PRINT NO;;no0!SPO;;skip:SPYPRINT YESDSPO}POSITION =N%CPROP;;who owns itX QWHO8bPSVY;;save itlQRENT8;;get 'rent'vPVALUE;;= feeQXREF8;;double? F}SHV;;no>;;who owns doubl?QWHO9;;ownerRSVY;;same as ME? HSHV;;noQRENT9;;yes so,;;rent is more OVALUE} PVALUESHVQVALUE;;show rent$>;;A=hi,X=lo PRNUMQ>  PXPOS GETSCR;;screen loc %CPROP;;prop #*QW}HO8;;owner?4?;;get name> SHO_NAMEH"PAUSE?;;slow printR$>;;position\%>;;cursorf!POSIT;;& exitpX;zX;Show} a player's nameX;Y=player # to showX;SHO_NAMEQX98;;get right PL;;nameQ>5NAMEBUF;;via offset PL)>};;is it no one?HSNM0;;no someoneQ>4NA;;'none'PL Q>5NA PLSNM0QL;;print name %L !EPRINTX };$X;Initialize game tables.X;8INITAB%>#;;36 locationsBIT1Q>;;$FF = noLPWHO8;;ownerVQ>;;0 = no`PIMP8;;i!}nprovementj1tIIT1~%>s;;copy allIT2QRENTORG8;;presetPRENT8;;tables to1;;working tablesIIT2%>;;dow"}nloadMVSETQ8;;ROMPMSET8;;character Q8;;setPMSET8Q8PMSET8Q8PMSET8 3 H#}MVSET%>;;all this to(Q>;;define a2ASETPMSET8;;block<1;;cursor forFIASET;;name screen!!!PQ>4FAKE;;SYS$}TEM RESETZPDOSINI;;restartsdQ>5FAKE;;the gamenPDOSINIxQ>;;enable DLI's PNMIEN:screen!!!PQ>4FAKE;;SYSdz dX;SAVE#D:CAPITAL3.M65nX;xX;-------------------;X; CAPITAL! ;X; redefined char. ;X; set for the&} MAP ;X; ;X; by Barry Kolbe ;X; ;X;-------------------;X;!X;include'}s most of a characterX;set for ANTIC mode 4.X; === === === === =_==(}" ==_=, ===6 ===@ ===J ===T ===^ ===h W=W==r)} ==W=W| === === === === U=U=U=U U=U=U=U U=U=U=i i=*}U=U=U === === === === === === === ===+} ===& ===0 ===: ===D ===N ===X W===b ===Wl,} ===v === === === _=_=_=_ _=_=_=_ === === =-}== === === === === === === ===  ===.} ===  ===* ===4 ===> ===H ===R ===\ ===f/} ===p ===z === === === === ?=?== === ?=0}?=?=? === === === === === =/=+=  === /=/=/=1}/ === ===$ ===. ===8 ===B ===L ===V ===`2} ===j ===t ===~ === ===ϒ ==?=? ?=?=?=? === =3}== ?=?=?=? === ==?= === === === === ===4}  === ?=?=?=? ===( ===2 ===< ===F ==?=P ===Z5} ===d ===n ===x === ===? === === === =6}== === === === === === === === ===7} === === ===" ===, ===6 ===@  = = = J  = ==T8} ===?^ ?=?==h ===r ===?| =0== /=/= =  ===Ϛ ===  =9}<== === === === === === === === ===:} === === =/=+=  ?=?=?=?& ?=?==0 ===: ===D ===N;} ==?=X ===?b ===l ===v ===? === === === =<}==  = == === === ====? === === === =C 3dX;SAVE#D:CAPITAL4.M65nX;xX;------------------;X; CAPTIAL! ;X; ;X; PMG & U.S.A. M>}AP ;X; ;X; by: Barry Kolbe ;X; ;X;------------------;X;X;Set up PMGX;?}SETPMGQ>>;;enable PMG PSDMCTLQ>;;set priority PGPRIOR$>;;set size to 0Q>"PBDL,PLSPSIZEP096@}0@IPLSJQ>T PGRACTL^Q>5PMB;;set PMG baseh PPMBASErX;|#X;Initially put Players (Tokens)X;beneath the DICEA}X;$>PPSQ>x;;vertical pos PPY09QIXP9;;initial horzPPX09;;position0IPPSX;X;Set Token ColorsB}X;$>PC1QPCLR9 PPCOLR09Q>;;all begin at&PPTHP09;;'Stock Market'00:IPC1DQ>;;player 1NPPNUM;;C}startsXX;bRSTPMGQ>>;;reset PMGlPSDMCTL;;for MAPvQ>;;screen PGPRIOR:X;"X;Initial X Positions of TokensD}X;IXP `=h=p=xX;X;Put P/M on screenX; SHOWPMQONBRD;;is '1' alive? FJ1;;nope DEFP0;;show '1'E}J1QONBRD;;'2' on? FJ2;;etc.  DEFP1J2QONBRD FJ3* DEFP24J3QONBRD>FJ4H DEFP3RJ4:\X;fF}X;Entry Point While PlayingpX;zFAKE-;;clear decimal$>;;reset stackB INITAB;;redo tables SNDOFF;;init sndG} INTRO;;show intro SETPMG;;set up PMG CLRPMG;;clear PMG mem FORMDOL;;show $ line RESROL;;DICE mesg SHH}WPUR;;show 'free'X;X;Entry point of MAP movesX;ENTRYQ>4DL;;display list PSDLSTL Q>5DL$PSDLSTL.Q>5I}CSET;;char. set8 PCHBASB RSTPMG;;reset PMGL$>;;get MAPVMC1QMAPCL9;;colors` PCOLOR09j0tIMC1~Q>;;DLI cJ}ntrPBDLPAMOUNT;;safetyQ>4DLI;;set up DLI PVDSLST Q>5DLIPVDSLST SHOWPM;;put tokens onX;$K}PNUM;;get plyr #QONBRD9;;alive? HMV1;;yes!NXP;;no do nextMV1%>;;put plyr name QX99;;on screenPSCRL}Q>5NAMEBUF( PSCR2GNLQ@SCR7;;get length<FGNE;;of nameF3PHGNLZGNE'SVY;;save YdQ>;;20 bytes/linen;;;M}subt from 20xSSVY V?;;1/2>;;use as index%>;;0 out lineQ>;;20 bytesGNCPPLRN81IGNC3Q>;;;puN}t '[#]'PPLRN9;;on screenQ>= PPLRN9QPNUM;;get plyr #,O>;;for screenPPLRN9;;show #"GNPQ@O}SCR7;;next the name,FGNU;;done on 06 ASC2IC;;INT code@PPLRN9;;show charJ2T3^HGNPhGNUQ>5;;' UP 'r PPLRNP}9|Q>0 PPLRN9SCCQCONSOL;;wait forR>;;OPTIONHSCC ROLDIC;;roll 'emX;X;Move the TokensX;Q}QPNUM;;plyr #T?;;x2 for table>QETAB9;;erase table PEJSR QETAB9 PEJSRQDTAB9;;define table& R}PDJSR0 QDTAB9: PDJSRDX;NMAIN"SQRS;;# to moveXEJSR ERSP0;;erase tokenb$PNUM;;plyr #l#PTHP09;;nexS}t squarevQPTHP09;;all the wayR>$;;around yet? HMOK;;noQ>;;yes reset to 0 PPTHP09MOKQPTHP09;;find newT}?;;position ofQPTHX8;;token(Player) PPX09 QPTHY8 PPY09DJSR DEFP0;;show token BEEP;;make a sound$PNU}UM;;plyr #QPTHP09;;see if on $  HMKK;;no$>;;scroll message  MESSAG*Q> ;;add 12G to4%PNUM;;player> ADDHV}MKK WAIT;;wait a littleR SHWPRP;;show name\QSQRS;;done moving?f HMAIN;;nop$PNUM;;get locationz QPTHP09X;W}X;dont wait on specialsX;%>SCMRSPLC8;;is it LUCKFNOW;;HILTON, TAX1;;CAP GAINSISCMX;#X;This is X}a square that requires X;a transaction, so we removeX;the P/M and call the TRANS"X;routine. Then we restore the !X;MY}AP screen display and loop. X;  WAITKEY;;wait or key$  CLRPMG;; remove PMG.  TRANS;;go to TRANS8 X;B X;NOW is entrZ}y spot from T_OKL X;V NOW RESROL;;reset ROLL DICE` $PNUM;;plyr #j QPTHP09;;locationt FCOV;;if it is $~  CKMES;;ot[}her specials? COV SHWPUR;;show name NXP#PNUM;;next plyr QPNUM;;only 0-3 M> PPNUM;;next person's !ENTRY;;\}move X; X;Clear PMG Memory X; CLRPMG$> A CP1PP09 PP19 PP29 PP39 2( HCP12 $>;;put plyrs off< ]}CP2PHPOSP09;;screenF 1P ICP2Z :d X;n X;Four routines to definex X;each of the four players X;vertically & horizon^}tally X; DEFP0$>;;define %PY0;;player 0 DF0QP0DEF9;;vertically PP08 3 2 (> HDF0;;and set its Q_}PX0;;horizontal PHPOSP0;;position : X; DEFP1$> %PY0" DF1QP1DEF9, PP186 3@ 2J (> T HDF1^ QPX0`}h PHPOSP0r :| X; DEFP2$> %PY0 DF2QP2DEF9 PP28 3 2 (> HDF2 QPX0 PHPOSP0 : a}X; DEFP3$> %PY0 DF3QP3DEF9 PP38& 30 2: (> D HDF3N QPX0X PHPOSP0b :l X;v X;Four routinesb} to erase each X;of the four players X; ERSP0%PY0;;get vert. Q>;;position $> ;;erase the EP0PP08;;13 bytesc} 3 0 IEP0 : X; ERSP1%PY0 Q> $> EP1PP18 3 0* IEP14 :> X;H ERSP2%PY0R Q>\ $> fd} EP2PP28p 3z 0 IEP2 : X; ERSP3%PY0 Q> $> EP3PP38 3 0 IEP3 : X; $X;Table of Erase Pe}layers RoutinesX;ETAB ERSP0 ERSP1$ ERSP2. ERSP38X;BX;L$X;Table of Define Player RoutinesVX;`DTAB f}DEFP0j DEFP1t DEFP2~ DEFP3X;!X;Change Character Sets in DLIX;DLI5QBDL;;which DLI?HBL2;;not 1stg}Q>5MSET;;switch toPCHBASE;;our ROM set PWSYNCQ>;;change colorsPCOLPF2;;blueQ>;;bright green PCOLPFq}B%DOS SYSB*)DUP SYSB=SCAPITAL COMBSCAPITAL1M65BBCAPITAL2M65B%CAPITAL3M65Bi=CAPITAL4M65BUCAPITAL5M65BCAPITAL6M65B !GRAPHICSM65B*GUNTEST BASB1GUNVBIM COMB%?GUNVBIM M65B)dIOMAC LIBpMOUNTAINBASAPICTPERFBAS>PICTPERFM65SSYSEQU M651 Q>;;Orng Green PCOLPF3#BDL;;next DLI( 7;;routine29<BL2R>;;next DLI?F HBL3;;noPQ>MONEY_CLR;;colorZr}PWSYNC;;for $ lined PCOLPF2nQ>;;backgrndxPCOLBK;;scan line#BDL;;next DLI79BL3Q>MONEY_CLR;;bottomPs}WSYNC;;all onePCOLBK;;color79X;X;Roll DICE with OPTIONX;stop them with SELECTX;ROLDICQ>;;sqrs=# t}to move PSQRS GETRND;;get random #$>;;now show it"%>;;on DIE # 1,DR1Q@L7;;move 3 bytes6PDICPOS'9;;tou}@2;;screen:x isJ 3;;offsetT)>^HDR1h$>;;move 3 morerDR2Q@L7;;1 line down|PDICPOS923)>HDv}R2$>;;& 3 more DR3Q@L7PDICPOS)9;;another2;;line down3)> HDR3 GETRND;;now do 2nd %>;;DIEw}$>;;move x over DT1Q@L7PDICPOS'9&203:)>;;3 bytes fromDHDT1;;dice definitionN$>;;tableX DT2Q@Lx}7bPDICPOS9l2v3)>;;3 moreHDT2$>;;next line DT3Q@L7PDICPOS)923)> HDT3PCONSOy}L;;clear CONSOL WAITQCONSOL;;wait forR>;;SELECTHROLDIC;;keep rollin' :X; X;Get Random DICE Throws*Xz};4GETRNDQRANDOM;;only 0-5>M>HR>R EGETRND\>;;current throwf,pOSQRS;;0-5z PSQRS#SQRS;;1-6AT?;;{}x2 for table>QRTAB9;;get rightPL;;bytes forQRTAB9;;DICE PL:X;X;Wait a few jiffiesX; WA|}ITQ> PRTCLOKWAQRTCLOKR>$DWA.:8X;B X;Wait for 8 seconds or untilLX;a key is pressed.VX;`WAITKEY$}}>;;clear CHj&CHtQCH;;read keyboard~R>;;unitl released HWAITKEYQ>;;set clock PRTCLOKPRTCLOKW~}KQCH;;key pressed?R>HWTDON;;yes-exitQRTCLOK;;no see ifR>;;time is upDWKWTDON&CH;;clear CH:}X; X;Initialixe Sound RegistersX;SNDOFF$>(Q>2SN1PAUDF19<0FISN1PPZ:dX;nX;Make a BEEP soun}dxX; BEEPQ> PAUDF1Q> PAUDF1 WAITQ> PAUDF1 PAUDF1:X; X;Scroll Messages for Spec}ialX;Properties. X = msg #X;MESSAGQSCTAB9;;how far to 5;;scrollPSCNT;;save it" RESROL;;reset line,SC4#}TWIN;;coarse scroll6HSC1@ #TWINJSC1"SCNT;;decrease cntrT JIFF;;wait a jiffy^QSCNT;;done yet?h HSC4;;nor} WAITKEY;;wait 8 secs|7;;amount toPSCNT;;scroll backSC3"TWIN;;do the back JIFF;;ward scolling QTWINR>}HSC2 "TWINSC2"SCNT;;countdownHSC3;;not done RESROL;;reset line :;;exitX;X;Number of bytes to }scrollX;SCTAB (=P=xX;& X;reset the ROLL DICE message0X;:RESROLQ>4RLMESD PTWINN Q>5RLMESX PTWINb}:lX;vX;Check for Scolling MessageX;CKMESQPNUM;;plyr #>T??QPTHP09;;which prop$>;;for scrollR}>;;taxes? HNTAX;;noQCASH8;;if taxesPL;;div cash byQCASH8;;8 andPL;;subtractVL;;from cash }WL;;if able toVL;;otherwise WL;;just exit* VL4WL;;this is a>QCASH8;;tax breakH;;;for the poorRSL\} PCASH8f QCASH8p SLz PCASH8 FORMDOL;;show new $$>;;now scroll!MJMNTAX2;;vacation=2R> ;;H}OGG #1FMJMR>;;HOGG #2FMJM :;;doneMJM!MESSAG;;go scrollX;X;Dice Definition TablesX; RTAB ONE} TWO TRE$ FOR. FIV8 SIXBX;LONE AQQQQRQQQQAVTWO ARQQQQQQQRA`TRE ARQQQRQQQRAjFOR ARQRQQQRQRAt}FIV ARQRQRQRQRA~SIX ARQRRQRRQRAX;$X;These are the Token DefinitionsX;P0DEF `==`=` `===<=<} <=<=<=<X;P1DEF 8=l= = 0=|==<=< <=<=<=<X;P2DEF ~= ==  f=<==<=<  <=}<=<=<X;P3DEF ===( ===<=<2 <=<=<=<<X;FX;These are the HorizontalPX;positions of the Pla}yersZX;dPTHX ===n =x=p=hx `=X=P=P H=@=@=@ @=@=H=P X=`=h=p x=== }=== ===X;X;These are the VerticalX;positions of the PlayersX;PTHY x=== ===} ===x x=x=h=X H=8=8=8 8=8=8=8" 8=8=8=H, X=X=X=X6 X=h=x=x@X;JX;The MAP co}lors and theTX;TOKEN colors^X;hMAPCL N====rPCLR =B=z=|X;#X;These are the low and hi bytes#X;of} the screen position of eachX;property square on the MAPX;SCL =J=H=F=D B=@=>=<=: 8====} D==== ==== ===V=X Z=\=^== X;SCH q=r=r=r=r r=r=r=r=r }r=q=q=q=q& q=p=p=p=p0 p=p=p=p=p: p=p=q=q=qD q=q=q=q=qN qXX;bX;If a property is boughtl}X;show it with a thickervX;box or circle. Each symbol"X;is 2 ANTIC 4 characters wide,X;SHWPUR$>#;;go thru all}SHHQSCL9;;36-firstPL;;get itsQSCH9;;screen location PLQREFTAB9;;find out itsGFJ;;status: specialH}FI%>;;0=single freeQ>9;;left side boxP@L73 Q>:;;right side P@L7;;box FJ0;;next property*ISHH4 :};;done>FIR>;;1=singl,boughtHHFKRQ>-;;thick box,left\%>fP@L7p3zQ>.;;thick,rightP@L7HFJFKR>};;double,free? HFL;;no%>Q>+;;circleP@L7;;left side3Q>,;;right sideP@L7HFJFLR>;;double,b}oughtHFJ%>Q>);;thick circleP@L7;;left side$3.Q>*;;right side8P@L7BHFJLX;VX;Show the Property }Name as`X;you go by it.jX;tSHWPRP CLRPRP;;clear line~Q>4PRPLIN;;point toPTWIN;;line inQ>5PRPLIN;;display}PTWIN;;list$PNUM;;plyr #QPTHP09;;get prop #T?>;;x2 for tableQPRPTAB9;;get namePLQPRPTAB9 }PL%>$> ;;posit. on SP1Q@L7;;line,get byteFSP2;;0=done ASC2IC;;to INT code(PPRPLIN9;;show it23<}2FHSP1PSP2:ZX;dX;Clear Property Show LinenX;xCLRPRP$>'Q>CPLPPRPLIN90ICPL:X;X;The P}roperty NamesX;P01 ABar-B-Q RanchA=P02 ARingading PhoneA=P03 ACrosseye Cable TVA=P04 AOlde Yorke} TimesA=P05 ASpuds Potato FarmA=P06 ABlack Gold OilA=P07 ARex Auto Corp.A= P08 AThredbare Clothing}A="P09 AKolbe's CheeseA=,P10 ADaisy's DairyA=6P11 ABlack Jack's CasinoA@ JP12 ADeath Valley SpaA=}TP13 AAdams Apple OrchardA^ hP14 ASour Grapes VineyardAr |P15 AShort Circuit P & LA P16 AHeavy }Water CompanyA P17 AStytch's ClinicA=P18 ASchappel's ScalpelsA P19 ACrosstrax RailwayA=P20 A}Drip Dry CleanersA= P21 AJetstream AirlinesA=P22 AHAL ComputersA=P23 ASelmart StoresA=P24 AIOU Pe}nneysA=P25 AWilt's VegetablesA= P26 ATitanic ShippingA= P27 ASteal SteelworksA= P28 ASilicon GulchA=}& P29 ADisastrous InsuranceA0  : P30 AThe Luck SquareA=D P31 N P32 ACapital Gains TaxA=X X;b X;The Lo}ok-Up Table for eachl X;square on the MAP board.v X;* marks the doubles X; PRPTAB P31;;stock market  P25;;wilt veg} *  P26;;titanic ship*  P07;;rex auto  P18;;schappel *  P17;;stytches *  P30;;L (luck)  P19;;crosstrax r}ail  P06;;black gold oil  P22;;HAL computer *  P28;;silicon gulch*  P31;;H (holiday)! P11;;casino ! P12;;dea}th valley! P23;;selmart ! P13;;adams apple **! P14;;sour grapes *4! P31;;T (taxman)>! P20;;drip dryH! P05;;spud }potatoes *R! P01;;bbq ranch *\! P21;;jetstream airf! P30;;L (luck)p! P02;;phone coz! P24;;iou pennys! P08;;t}hreadbare! P31;;H (holiday)! P09;;kolbe *! P10;;daisy *! P27;;steal steel! P03;;crosseye TV *! P04;;olde yo}rke *! P32;;C (capital tax)! P29;;insurance! P16;;heavy H2O *! P15;;P&L *3;;crosseye TV *! P04;;olde yo\#)dX;SAVE#D:CAPITAL5.M65nX;xX;--------------------;X; ;X;CAPITAL! Subroutines;X; } ;X;by: Bryan Schappel ;X; ;X;--------------------;X;X;Get the Rent of a propert}yX;GET_RENTQCPROP;;curr prop>;;offset in tableQRENT9;;get rentPAMOUNT;;saveQ>;;0 hi bytePAMOUNT}QXREF9;;is this a dbl?"HGOTD;;YES!, :;;no.6X;@GOTD?;;half #JQWHO8;;get ownerTROWNER;;same as landed^HR}OUT;;on? no!hQRENT8;;YES! Make rentr,;;=half+half| OAMOUNT PAMOUNTQAMOUNTO>PAMOUNTROUT:;;exi}tX;X;Handle an ImprovementX;IMPROVE HAVE_ANY;;own any? IIM1;;YES:;;none if -#IM1PRINT IMP_TXT;;'Imp}rove?' GETYN;;Yes/NoFGIM;;0 = yes :;;outGIMQPNUM;;plyr #& T?;;x20?:QCASH8;;see if plyrDHGIMP;;has }$10GNQCASH8;;plus $1GXR> bEGIMP;;surel!NO_CASH;;not enufv GIMP PICK_PROP;;pick a prop$PPROP;;picked prop #}GGOUT;;- = none pick HIMP_ITGOUT:;;0 = noX;IMP_ITQIMP9;;get cur levelR>;;at max. level?DDO_IMP;;n}oPRINT MAX;;'At max'!WAITKEY;;exitDO_IMPQRENT9;;get rent T?;;x2PRENT9;;save it#IMP9;;inc level QC}OST9;;add 5 to,;;prop cost O>* PCOST94Q> ;;costs $10g>%PNUM;;to inproveH SUBR!T_OK;;'Trans. comp'\X;f}X;Get a Yes or NopX;0= yes <> = nozX;!GETYNPRINT YNTXT;;'Yes No'GYN GETCH R>+;;a Y HTRYN:TRYNR>}#;;an NHGYNR>;;force BNE:X;X;Make a Player PAYX; PAY_RENT GET_RENT;;get rentPRINT FEE;;print i}tQ>;;pay toPRFLAG;;player$ FJJSS.JUST_PAYQ>;;just lose $8 PRFLAGBJJSSQPNUM;;plyr #L T?;;x2V?`QCAS}H8;;get CASHjRAMOUNT;;is it enuf?tFPALO;;check low~EPAY_IT;;yesPALOQCASH8;;enuf low? RAMOUNTDFORCE};;no,force sellFFORCE;;dittoPAY_IT%PNUM;;payQAMOUNT;;this amount SUBQ>;;turn disasterPDISFLAG;;flag} offQRFLAG;;just lose ifHTOK;;<> 0%OWNER;;pay ownerQAMOUNT;;the amount  ADD;;add to ownerTOK!T_OK;;ex}itFORCEQ>;;force sale(PDISFLAG;;of props2 MAKE_RAN;;selling prices<QSPEED;;fast game=0FFDEDP NO_CASH;;'N}o cash'Z WANT_SALE;;sell propsdQPPROP;;get prop #nIJJSS;;ok,try payxDED7;;no props so7;;player dies!DEAD;;}tell everyoneX;X;Pick a PropertyX; PICK_PROPQCPROP;;save curr.PTPROP;;property # HAVE_ANY;;have any?I}G_PICK;;yes'PPROP;;no Y=$FF :;;exitG_PICK%>;;cycle thruPCK1QWHO8;;props. who'CPROP;;owns this oneRP}NUM;;ME? HPCKU;;no" SHOPROP;;show prop info,#PAUSE?;;1 = fast prnt6QDISFLAG;;disaster?@ FPCKQ;;noJPRINT AM}TOWD;;'Amt owed'TQAMOUNT;;print amnt^$AMOUNTh PRNUMr#PCKQPRINT PICK_MESS;;'pick?'|QDISFLAG;;if disaster}HPCKX;;must pickPRINT PICK_REST;;'ESC'PCKX"PAUSE?;;slow downPCKK GETCH;;get key R>;;ESC?HNOESC;;no}QDISFLAG;;yes,but ifHPCKK;;disaster -noQ>;;if ESC set toPCPROP;;0 => noneFPICK_LV;;leaveNOESCR>!;;SP}ACE?FPCKU;;next oneR> ;;RETURN?HPCKK;;picked onePICK_LVQCPROP;;get picked&PPPROP;;property0QTPROP;;res}tore:PCPROP;;cur. propD:NX;XPCKU%CPROP;;get propb3;;next onel)>$;;at end?vDPCK1;;no-cycle%>;;reset to} 0 FPCK1X;X;Handle Buying a PropertyX;#BUY_ITPRINT BUY_MESS;;'Buy?' GETYN;;choiceFBUY1;;yes:;;do}n't want toX;BUY1QPNUM;;which plyr%CPROP;;cur. prop T?;;x2> QCASH9;;enuf CASH?HBUY_OK;;yes QCAS}H9;;check low bytes* RCOST84DNO_CASH;;not enuf>FNO_CASH;; "HBUY_OKQPNUM;;show whoRPWHO8;;now owns it\Cf>;};show it hasp#REFTAB9;;been purchasedzQCOST8;;get price%PNUM;;subtract SUB;;from CASH$T_OKPRINT TRAN_OK;;}'Complted' WAITKEY;;wait 8 secsQ>;;set pay toPRFLAG;;flag & hiPAMOUNT;;byte of pay :;;amountX;X;S}orry no CASHX;NO_CASHQ>4NCASH %>5NCASH EPRINT  WAITKEY;;wait 8 secs Q>$ :. X;8 X;Sell a PropertyB X};L WANT_SALE HAVE_ANY;;any?V IP_SALE;;yes if +` 'PPROP;;$FF if -j :t P_SALEQDISFLAG;;disaster?~ HGO_SELL;;yes-se}ll PRINT SELL_TXT;;choice  GETYN;;if not forced FGO_SELL;;sell SLV: X; GO_SELL PICK_PROP;;pick one QPP}ROP;;picked GSLV;;none available HSELL_IT;;if $FF. 0 QDISFLAG;;=none picked HGO_SELL;;forced sell : X; SEL}L_IT>;;which prop "REFTAB9;;sell it in Q>;;table, $FF =( PWHO9;;no one owns2 QRANTAB9;;another< X; sta cost,X };way to makeF %PNUM;;the gameP  ADD;;add $ to CASHZ !T_OK;;doned X;n X;Own any Propertiesx X;Y has propery # or 0 }X;+ if prop owned, - if not X; HAVE_ANY%>#;;check list QPNUM;;get our # HAV1RWHO8;;in table? FHAV2;;yes 1 } IHAV1 HAV2: X; X;Handle LUCK locations X; DO_LUCK$PNUM;;plyr # QPTHP09;;cur prop # R> ;;cap gains? HD}O_RLUK;;no" Q>4CAPGNS;;CG routine, PLJMP6 Q>5CAPGNS@ PLJMPJ Q>};;clear scnT EPUT^ Q>4P32;;CG prop nameh } %>5P32r !DO_CG| DO_RLUK$RANDOM;;get random (>;;LUCK EDO_LUCK QLUCKL9;;get LUCK PLJMP;;routine QLUCK}H9 PLJMP Q>};;clear scn EPUT Q>4P30;;'LUCK Sq' %>5P30 DO_CG INVPROP;;inverse name PRINT YL;;'You }lose' LJMP ;;go to routine !T_OK;;done X; X;** Luck Routines **& X;0 X;Win 10G free (WOW for ME?): X;D G1Q>} N HG2.1X X;b X;Win 15G freel X;v G2Q>;;give $ G2.1%PNUM;;to whom? PVALUE  ADD;;add to CASH  PG;;Luck }is 'good' PRINT YW;;'You win' QVALUE;;'$nnG' $> !PRNUM;;print & exit !PGPRINT GOOD;;print 'good' : X;} X;Get a FREE Improvement X; G3 GRPROP;;get a prop GG1;;none so >;;give $ QIMP9;;get level* R>;;at max?4 }EG1;;yup give $> #IMP9;;increase itH QRENT9;;get feeR T?;;x2\ PRENT9;;save itf &TPROP;;save prop #p  PG;;'good'z }PRINT YW;;'You win' PRINT AN_IMP;;'improv..' QTPROP;;get prop # T?;;x2 >;;get name QPRPTAB9 ? QPRP}TAB9 !EPRINT;;print & exit X; X;Loose 10G X; B1 PB;;'Bad luck' PRINT YD;;'You lose'Q> ;;'$10G'B1AP}AMOUNT;;low amt$>;;high amt$ PRNUM;;show it.#RFLAG;;pay to bank8 JUST_PAY;;take it awayB7;;pull returnL7V }:;;exit`X;jPBQ>4BAD;;print 'badt%>5BAD;;luck'~ !EPRINTX;X;Cut the Rent(Fee) in halfX;B2 GRPROP;;grab} prop # GB1;;none>QRENT9;;get rentR>;;don't fallDB1;;below 1 V?;;div 2PRENT9;;save itQ>4HR;;'1/2} value%>5HR;;'on improv..' X;SB5;;save hi/lo'L;;of msg( PB;;'bad luck'2 PUTCR;;linefeed< 7;;get msgF%}LP EPRINT;;print itZQPPROP;;picked propdT?n>;;get namexQPRPTAB9? QPRPTAB9!EPRINT;;print nameX;}"X;Halve the Value of a PropertyX;B3 GRPROP;;grab a prop # GB1;;none>QCOST9;;get priceR>;;not LT 1D}B1V?;;div by 2PCOST9;;save itQ>4HV;;'1/2 value' %>5HV"HSB;;print it,X;6X;Luck address tables@X;altern}ate for randomnessJX;TLUCKL 4B1=4G1=4B2^ 4G2=4B3=4G3hLUCKH 5B1=5G1=5B2r 5G2=5B3=5G3|X;X;Luck Tex}tX;GOOD AGood.A=EOL=BAD ABad.A=EOL=YL EOL=EOL=AYour luck A Awas - A=YW AYou win A=}YD AYou lose A=HR A1/2 Rent onA=EOL=HV A1/2 Value on A=EOL=AN_IMP Aan improvement A AonA=EOL=}X;X;Get a Random Property"X;WHO =owners, GRTAB cur playerX;&!GRPROP HAVE_ANY;;any to get?0IGR2;;yes indeed: }:;;nawh.DX;NGR2%>;;indx to WHOX$>;;indx to GRTABbGR3QWHO8;;who owns itlRPNUM;;ME?v HGR4;;noC;;yes,save} # PGRTAB92;;next oneGR43)>$;;at end? HGR3;;no2;;now pick aA;;random one GET_RND;;from those>;;}we've foundQGRTAB9PPPROP;;picked prop:X;  X;Print a Property in InverseX; INVPROPPL;;prop name*'L};;address4Q>> EPUTH%>R INV1'SVY\Q@L7;;get bytefFINV2;;done on 0pL>;;inversez EPUT;;show it%}SVY3;;next byte HINV1INV2Q>;;end!EPUT;;exitX;X;Get Key Table (A - Z)X;KEY_TAB ?===:=* }8===9= = ==%=#=  =/=(=>=-  ==.==+=X;X;Get a Key for InputX;$GET_KEY$>;;cle}ar CH.&CH8GETK1QCH;;raw codeBR>LFGETK1;;none pressedVM>?;;no INV or CTRL`R> ;;RETURN?jHTRY7F;;notQ>};;0=RET~:TRY7FR>4;;delete?HSCANT;;noQ>~;;DELETE:SCANT%>;;scan tableGETK2RKEY_TAB8;;is it?FG}ETK3;;YES!1IGETK2;;try againGGET_KEY;;no matchGETK3C;;index ,;;add 'A'O> A  :;;outX;X;Input Owner }Names(X;2INPUTPL;;where in NAME<'L;;BUF to storeF%>;;namesPINP1'SVY;;counterZQ>;;our BLOCKdP@L7;;c}ursorn GET_KEY;;get keyx$>;;poke speaker&CONSOL;;for click%SVY;;get YR>;;is A =0(RET?)FINDONE;;yes}R>~;;DEL-BK SPC?HINEXT;;no)>;;is Y=0FINP1;;yes,no deleteQ>;;zap charP@L71;;back up 1P@L7!IN}P1;;get inputX;INEXT)>;;end of input?EINP1;;yes"PIBUF8;;input buffer, ASC2IC;;to INT code6L>;;inverse }for@P@L7;;colorJ3;;next charT HINP1^X;hINDONEPIBUF8;;0 for anrP@L7;;EOL &| :;;exitX;X;Get Player Names}X;GETNAMESQ>4NDLIST;;installPSDLSTL;;display list Q>5NDLISTPSDLSTLQ>:;;normal plyfld PSDMCTL%}>;;screenGNM1QNCLR8;;colors PCOLOR081 IGNM1 CLRSCR;;clear screenX;&Q>4GR0MEM;;get start0PSCR;;of} memory: Q>5GR0MEMD PSCRN$>;;plyr #XGNM0Q>;;'['b P@SCR7l3;;scrn positionvA,O>;;plyr # inP@S}CR7;;color3;;next position Q>;;']' P@SCR7C;;add 18 onto,;;screen positionO>?;;now in Y2;;next plyr}(MAXP;;at max yet?HGNM0;;no do more%>;;now get names GNM2'SVY2;;save YQSCR;;move over 4  ,;;bytes*O>};;A= low byte4%SCR;;Y = hi> INPUT;;get a nameHQIBUF;;get 1st charRFGNM2;;if none try\QSCR;;againf,;;add }20 bytespO>;;to scrn pntrzPSCRQ>5NAMEBUF;;high bytePL;;low =0%SVY2;;keep YQX98;;get place inPL;};buffer%>;;move name toGNM3QIBUF8;;NAMEBUFP@L71IGNM3;;9 chars total%SVY2;;retrieve Y3;;next plyr})MAXP;;at Max? HGNM2 :;;YESX;$X;Handle Captial Gains Tax.X;8CAPGNS PB;;'bad LUCK'BPRINT YD;;'You lose} $45G'LQ>-V!B1A;;jmp into BADX;$X;Handle Captial Gains Tax.X;8CAPGNS PB;;'bad LUCK'BPRINT YD;;'You lose# dX;SAVE#D:CAPITAL6.M65nX;xX;------------------;X; CAPITAL! ;X; (c) 1988 ;X; MAP of U.S.A"}. ;X; By: Barry Kolbe ;X; ;X;------------------;X;X;Map Screen DataX;#X;H = Hog Hilton"} C=Capital Gains X;T = Tax db =double propertyX;L = LUCK Dicepos = DICEX;X;SCRN (=o=p=@ B=C=E=G" "}(=(=(=(, (=(=(=(6 (=(=(=(@ (=(=(=(J (=(=(=(T (=(=(=(^ (=(=(=(h (=n=I=(r (=l"}=@=?| @=@=?=@ @=@=B=B B=C=C=D D=D=B=@ C=E=(=( (=(=(=( (=(=(=( (=(=(=" }( (=w=@=^ (=m=@=@ @=@=@=? @=@=@=@ @=@=@=@ @=@=@=@ @=L=(=b q=D=D=r " }(=(=(=(& (=(={=C0 A=@=s=e: (=@=@=?D @=@=@=?N ?=@=@=@X @=@=@=@b @=@=@=@l @=@" }=@=@v @=U=}=m d=(=(=( (=y=@=@ ?=x=(=( K=@=?=@ 3=4=9=: +=,=+=,;;db 9=:=" };=<;;L 9=:=9=: 9=:=5=6;;H @=k=a=@ @=`=(=( y=@=@=? L=t=(=( W=@=?=@  @=@" }=@=? ?=?=@=@  @=@=@=@* @=@=@=@4 @=@=@=@> @=`=a=@H @=g={=zR @=@=?=L\ (=(=(="}(f @=?=@=@p +=,=@=?;;dbz ?=@=@=@ @=@=@=@ @=@=@=@ @=@=+=,;;db @=^=_=@ @=@="}@=@ @=@=@=d (=(=(=( @=?=@=@ @=@=?=@ ?=?=@=@ @=@=@=@ @=@=@=@ @=@=@=@"} @=@=@=@ @=@=@=@ ?=@=@=d$ (=(=(=(. @=@=?=@8 +=,=@=?;;dbB ?=?=@=@L >=1=1=1;;"}HV ==>=2=1` 2===+=,;;dbj 9=:=+=,;;dbt +=,=/=0;; C~ @=?=@=c (=(=(=( @=@=?=@ @="}@=@=@ ?=?=@=@DICPOS >=1=2=1 ==>=2=1 2===@=@ @=@=@=@ @=@=@=@ ?=@=@=@ "}h=(=(=( S=@=?=@ 9=:=@=@  @=?=?=@ >=1=1=1;;H ==>=2=1( 2===@=@2 @=@=@=@< @="}?=9=:F @=@=@=@P i=(=(=(Z O=@=@=?d @=@=@=@n @=@=?=@x @=@=@=@ @=@=@=@ @=@=@"}=@ @=@=@=@ @=?=@=@ @=@=@=e (=(=(=( ~=N=@=@ 9=:=9=: 5=6=@=? @=@=@=@"} @=@=@=@ @=@=@=@ @=@=7=8 +=,=+=,;;db @=@=e=( (=(=(=(" (==N=@, @=@=@=@6"} @=@=?=?@ @=@=@=@J @=@=@=@T @=@=@=@^ @=@=@=@h ?=@=@=@r @=f=(=(| (=(=(=( (="}(==} }=N=@=@ +=,=+=,;;db 9=:=9=: ;=<=+=,;;L +=,=9=:;;db 9=:=9=: @=@=@=@"} @=`=(=( (=(=(=( (=(=(=( (=~=}=N @=@=@=@ ?=@=@=@ @=@=@=@ @=@=@=@& @="}@=Q=Q0 R=R=R=N: @=H=(=(D (=(=(=(N (=(=(=(X (=(=(=b }=}=}=}l O=@=@=@v @=@=@"}=@ @=@=@=@ @=x=(=( (=(=(=( O=@=H=( (=(=(=( (=(=(=( (=(=(=( (=(=(=("} ~=O=L=N @=@=@=@ L=}=}=} }=}=(=( (=(=(=( ~=N=@=h  (=(=(=( (=(=(=(  (="}(=(=(* (=(=(=(4 (=~=(=~> N=@=@=MH (=(=(=(R (=(=(=(\ (=(=(=(f (=~=v=up (=(=("}=(z (=(=(=( (=(=(=( (=(=(=( (=(=(=( =N=@=| (=(=(=( (=(=(=( (=(=(=("} (=(==T (=(=(=( (=(=(=( (=(=(=( (=(=(=( (=(=(=(  (==N=(  (=(=(=(  (=" }(=(=($  (=(=(=(.  (=(=(=(8  (=(=(=((=( (=(=(=( (=(=(=(  (==N=(  (=(=(=(  (= 5_X*SAVE#D:GRAPHICS.M65 X*X* Mat*Rat's FAVORITE Macro!X*X* GRAPHICS gX*(X* ENTRY: A-REG CONTAINS-X* &"} GRAPHICS MODE 'G'2X* EXIT: Y-REG HAS7X* COMPLETION STATUS<X*FSNAME AS:A==P GRAFIXZ5;;SAVE 'G'd&#}$>;;FILE 6n Q>CCLOSEx PICCOM9y!X* First we must close IOCB #6 CIO"X* Ignore any errors from closeX* $>&$}X* We will open this IOCB Q>COPN PICCOM9 Q>4SNAMEX* We use the filename "S:" PICBADR9 Q>5SNAMEX*&%} By pointing to itPICBADR9X* X* All is setup for open, nowX* we tell CIO (& S:) whatX* kind of open.X*&&}X* Retrieve our saved 'G'X* graphics mode7X* Is given to 'S:' PICAUX29!X* (Note that S: ignores upperX* bit&'}s of AUX2"X*#X* Now we get the upper bits,M>-X* And flip bit 46N>7#X* (S: expects it to be invertedJ"X* from &(}the normal BASIC usage)KX*L!X* Allow read and write accessMX* for CIO and S:TL> ^ PICAUX19h CIO;;OPEN S:m X* Gr&)}aphics mode 'G' now openr:|GRAPHICS    AGRAPHICS LENA  Q Q>  GRAFIXGr${ 6CRITIMOD@P@@ SAVE"D:GUNTEST.BAS"!!For use with Gun Assist VBI*+}$$routine by Mat*Rat, for ANALOG(Computing (c) 1989. You2##must execute GUNVBIM.COM from<DOS before running*,} me.FM +@A@1A@CA M@P4%6-F:AX,%AV$F:AY,46-F:*-}AW,Z-+ A ,*+ A`,#,- Ad @nAR@x R:@,"@A *.}F:Ad,AU*AdAU4+@FA@XA@jA t@AR@*/}-@@ 4%6-F:AX,%AV$F:AY,46-F:AW,(X= Y= #+ A ,**0}+ A`,#/ A  D:GUNTEST.BASV$F:AY,46-F:AW,(X= Y= #+ A ,*(444W (iZZ8Zɠ0 N . 80 N.2}LS:H` B V`BD4EhK)I J V`45$ ;%4L4Already in use BD4EHI VL.3}9$}4%~44 $% 4L65 B$D5EHI VLi5| | .4}BWD5EHI VL5 BD5E56HI VL5| ANY Atari Mode| BD5EH.5}I VL6|X=PEEK(258) | BD5EHI VL56| +256*PEEK(259)| B#D6EHI VLh6| Y=PEEK(257).6} | BVD6EHI VL6 BD676EHI VL6| Use | BD6.7}EHI VL7| screen colors | BD6EHI VL47| for reliable | B"D7EHI VLg7| re.8}adings. | BUD7EHI VL7| Tech Assist by| B78D7EHI VL7| Jim Zalewski | .9}BD7EHI VL8 BD7EHI VL38|(c) 1989 Analog| B!D8EHI .:}VLf8|By Mat*Rat | BTD8EHI VL8|Ratware | B89D8EHI VL8|Softworks, 19.;}89| BD8EHI Vx6L9|Gun in port 0 | BD8EHI VL9y6LC9|Gun in port 1 |.<} B1D9EHI VL9Ly9|Gun found | BgD9EHI VL9|R98:ESET to remove| BD9E.=}HI VL9 B͝D9EHI VL: BD:EHI V`.>}4I VL9 B͝D9EHI VL: BD:EHI V`,X*SAVE#D:GUNVBIM.M65 X*ASM,,#D:GUNVBIM.COMEI)X* Version 1.00, (c) 1989, Analog (X* Computing 2X*2@} By Matthew J. W. Ratcliff<X* Ratware SoftworksFX* Install a VBIPX* handler for theZX* Atari light gun.dX* Each VB2A}InX* LPENV and LPENHxX* are read andX* converted toX* SCREEN COORDINATEX* equivalents, basedX* on the current2B}X* graphics mode -X* found in DINDEX.X*X* Algorithm:X* X range forX* gun is 0-159X* Y range forX* gun2C} is 0-95X* These valuesX* are closeX* approximations, X* and the"X* unusual readings,X* from the light6X* gu2D}n do require@X* adjustments.JX* However the 160TX* range for X^X* and 96 rangehX* for Y work outrX* to be PERFECT2E}|X* multiples forX* ALL graphicsX* modes as follows:X*X* GRAPHICS X-wd Y-htX* MODE - ConvertX* 2F} factorX* - ------- --------X* 0 40-1/4 24-1/4X* 1 20-1/8 24-1/4X* 2 20-1/8 12-1/8X* 3 80-1/22G} 24-1/4X* 4 80-1/2 48-1/2X* 5 80-1/2 48-1/2X* 6 160-1/1 96-1/1X* 7 160-1/1 96-1/1X* 8 320-2/1 192-2H}2/1&X* 9 80-1/2 192-2/10X* 10 80-1/2 192-2/1:X* 11 80-1/2 192-2/1DX* 12 40-1/4 24-1/4NX* 13 40-1/4 12-1/8X2I}X* 14 160-1/1 192-2/1bX* 15 160-1/1 192-2/1lX*vX*X* Note that EVERYX* conversion isX* a multiple of 2!X* 2J}What a strokeX* of luck (or wasX* it pure geniusX* on the part ofX* Atari 800 designerX* Jay Miner?).X* The2K} current GR.X* mode can be usedX* as an indexX* into a shiftX* table. If the X* entry is zero,X* then no shi2L}ft. X* If positive, then*X* shift right4X* to divide.>X* If negative thenHX* shift left toRX* multiply.\X*f L2M}PENH p LPENV zVVBLKD$DOSLOAD4F DOSLOAD>D1:SYSEQU.M65>D1:IOMAC.LIBX*X* The VBI co2N}deX* for gun readingX*DOSOFFSET0CASBUFBOTSTACKYGUNBOTSTACKXGUNBOTSTACKXSHIFT2O}CASBUFYSHIFTXSHIFT$X*.X* Actual YGUN,8X* XGUN, XSHIFT andBX* YSHIFT data thatLX* will be copiedVX* to p2P}age 4 - if`X* the VBI isn'tjX* already there.tX*~ DUMMY === === === ===2Q} === === === ===X*X* Start of VBIX* handler forX* light gunX*2R}  START $DINDEX QLPENH(R>(2 EHCK2<O>F DHCK2PQ>Z HCK2R>Zd EHCK3nQ>Zx HCK3;S>ZR> D2S}HCK4Q>HCK4PXGUN QXSHIFT9X* No shift reqd FSETYGUN GSHLEFT?SHRIGHTVXGUN1 HSHRIGHT FSE2T}TYGUNSHLEFT%>X* In case of mode 8"X* where x can be > 256, 'XGUN6 TXGUN@ UXGUNJSETYGUNQLPENVT;^2U}S>h ESAVYrQ>|SAVYPYGUN QYSHIFT9 GSHYLEFT FEXITNOW?SHYRIGHTVYGUN1 HSHYRIGHT FEXITNOW2V}SHYLEFTTYGUNIX* If address atX* label LT480 mustX* be at $47F or below!X*X* Modified codeEXITNOW!2W}& LT4800EI:>D1:GRAPHICS.M65DX*NX* VBI install codeXX*bVBISTARTSTARTDOSOFFSETlINSTALLQVVBLKDvR>4V2X}BISTART HINSTALL1QVVBLKDR>5VBISTART HINSTALL1 ALHERE PRINT =AAlready in useA !GUNEXITINSTA2Y}LL1QVVBLKDPEXITNOWQVVBLKDPEXITNOW$>LT480DUMMY%>MOVBIQDUMMY8  PCASBUF83 0* H2Z}MOVBI4Q>4VBISTART>%>5VBISTARTH $JIFFYRINST1(JIFFY\ FINST1f PVVBLKDp'VVBLKDzGRAPHICS "PRINT 2[}=AA"PRINT =A| |A"PRINT =AA"PRINT =A| ANY Atari Mode|A2\}"PRINT =A|X=PEEK(258) |A"PRINT =A| +256*PEEK(259)|A"PRINT =A| Y=PEEK(257) |A"PRINT =A2]}A"PRINT =A| Use |A"PRINT =A| screen colors |A"PRINT =A| for reliable |A"PRINT =2^}A| readings. |A"PRINT =A| Tech Assist by|A "PRINT =A| Jim Zalewski |A "PRINT =AA "2_}PRINT =A|(c) 1989 Analog|A$ "PRINT =A|By Mat*Rat |A. "PRINT =A|Ratware |A8 "PRINT =A|Softworks2`}, 1989|AB QSTICK0L R>V HCKST1` "PRINT =A|Gun in port 0 |Aj !GUNEXITt CKST1QSTICK0~ R> HCKST2 "P2a}RINT =A|Gun in port 1 |A !GUNEXIT CKST2 "PRINT =A|Gun found |A GUNEXIT "PRINT =A|RESET to remov2b}e|A "PRINT =AA PRINT =A A Q> VHOLDERR FVHOLDER P : X* X* 2c}Code startup header( X*2 < INSTALLF X*P X* End of programZ X*d  VHOLDERR FVHOLDER P : X* X* 0M)AIOMAC.LIB -- OSS system I/O macrosAA Support MacrosA 10IOCB2 AYou must include SYSEQU.M65 ahead of th6e}is!!AX;$6X; These macros are called by the actual I/O macros.9X; to perform the rudimentary register load functions.6f}8X;BX;LX; MACRO: @CHVX;`6X; Loads IOCB number (parameter 1) into X register.jX;t 7 then a memory location1X; is assumed to6h} contain the channel number.X; @CH   Q T?T?T?T?>  $> (X;2X;<X; MAC6i}RO: @CVFX;P:X; Loads Constant or Value into accumultor (A-register)ZX;d+X; If value of parameter 1 is 0-255, @CVn+X; 6j}assumes it's an (immediate) constant.xX;'X; Otherwise the value is assumed to+X; be a memory location (non-zero page).6k}X;X;X; @CV   Q> Q X;X;X;X;"X; MACRO: @FL,X;65X; @FL is used to e6l}stablish a filespec (file name)@X;J-X; If a literal string is passed, @FL willT'X; generate the string in line, jump^&X;6m} around it, and place its addressh/X; in the IOCB pointed to by the X-register.rX;|(X; If a non-zero page label is passed6n}*X; the MACRO assumes it to be the label.X; of a valid filespec and uses it instead.X;X;X; @FL   6o} !   @F = Q>4@F PICBADR9 Q>5@FPICBADR9 Q>4  PICBADR9& Q>5 0PICBADR9:D6p}NA XIO macroAXX;bX; MACRO: XIOlX;v/X; FORM: XIO cmd,ch[,aux1,aux2][,filespec]X;%X; ch is given as in the6q} @CH macro3X; cmd, aux1, aux2 are given as in the @CV macro+X; filespec is given as in the @FL macroX;5X; performs f6r}amiliar XIO operations with/for OS/A+X;/X; If aux1 is given, aux2 must also be given8X; If aux1 and aux2 are omitted, 6s}they are set to zero1X; If the filespec is omitted, "S:" is assumedX; XIO  3 % AXIO: wrong number o6t}f argumentsA  @CH   @CV *PICCOM9;; COMMAND4  > @CV H PICAUX19R @CV \ PICAUX29fp6u}Q>z PICAUX19 PICAUX29 3 @FL AS:A @@IO @FL @@@IO: CIOA 6v} OPEN macroAX; X; MACRO: OPEN X; (X; FORM: OPEN ch,aux1,aux2,filespec$ X;. %X; ch is given as in the @CH macro8 16w}X; aux1 and aux2 are given as in the @CV macroB +X; filespec is given as in the @FL macroL X;V 1X; will attempt to open the 6x}given file name on` /X; the given channel, using the open "modes"j X; specified by aux1 and aux2t X;~ OPEN   &6y} AOPEN: wrong number of argumentsA    XIO COPN= = = =   XIO COPN= = = =    6z} A BGET and BPUT macrosA X; X; MACROS: BGET and BPUT X; X; FORM: BGET ch,buf,len X; BPUT ch,buf,le6{}n( X;2 %X; ch is given as in the @CH macro< .X; len is ALWAYS assumed to be an immediateF 1X; and actual value...never a m6|}emory addressP /X; buf must be the address of an appropriateZ X; buffer in memoryd X;n +X; puts or gets length bytes to/f6}}rom thex 0X; specified buffer, uses binary read/write X; X; X; first: a common macro X; @GP @CH  Q> 6~} PICCOM9 Q>4  PICBADR9 Q>5  PICBADR9 Q>4  PICBLEN9 Q>5  PICBLEN9"  CIO, 6 X;@ B6}GET J  T ' ABGET: wrong number of parametersA^ h @GP = = =CGBINRr |  X; BPUT   ' AB6}PUT: wrong number of parametersA  @GP = = =CPBINR   X; A PRINT macroA X; X; MACRO: PRINT 6}X; (X; FORM: PRINT ch[,buffer[,length]] X; !X; ch is as given in @CH macro& (X; if no buffer, prints just a RETURN0 %X;6} if no length given, 255 assumed: X;D 8X; used to print text. To print text without RETURN,N -X; length must be given. See6} OS/A+ manualX X;b 2X; EXCEPTION: second parameter may be a literall .X; string (e.g., PRINT 0,"test"), in whichv -X; case6} the length (if given) is ignored. X; PRINT  3  ( APRINT: wrong number of parametersA    6}  !   @IO = @GP =@IO= =CPTXTR    @GP = ==CPTXTR  @GP = 6}= =CPTXTR  * 4 ! > @IO H @GP =@IO==CPTXTRR \ f p X;z A INPUT macroA X; X; MACRO:6} INPUT X; X; FORM: INPUT ch,buf,len X; %X; ch is given as in the @CH macro )X; buf MUST be a proper buffer address6} 6X; len may be omitted, in which case 255 is assumed X; ,X; gets a line of text input to the given 'X; buffer, maximu6}m of length bytes X; INPUT  3 ( AINPUT: wrong number of parametersA$  .@GP = ==6}CGTXTR8B@GP = = =CGTXTRLV`jA CLOSE macroAtX;~X; MACRO: CLOSEX;X; FORM: CLOSE ch6}X;%X; ch is given as in the @CH macroX;X; closes channel chX; CLOSE   ( ACLOSE: wrong number of par6}ametersA @CH  Q>CCLOSE  PICCOM9 CIO(2X;<-X;;;;;;;;;;; END OF IOMAC.LIB ;;;;;;;;;;;;FX; of par4v@ !9\7r7MAPBACKSPACESNOWFONTDXDYDRDZFULSMMGOMMTFOOOLOSCSTICSHAMCQQIBBDDEL:}LZZXYGGTTRRIICCVVAACCWIGACGAGWWUUGCHROOOBYMELMORQQIQOFBADLIS:}@@@@ :} :}!"#$%&'()*+,-./0:}123456789:;<=>?:}@ABCDEFGHIJKL@MN@O:}PQRS@TUVWXYZ[\]^:}_`ab$$******************************$$* NUCLEAR MOUNTAIN *$$* BY BRAD TI:}MMINS *$$* *$$* COPYRIGHT 1989 *$$* BY ANALOG COMPUTING *$:}$****************************** A$`2 AF:A,&@2+@%@ee;A$u,;A$u,;:}@U,;@4,9@,9@,;@,9@<@,(W68@,-A2-68@,-A4B68@:},-A)W68@,-A126-@6-@ '6-@$36-@?6-@K6-@W6-@c6-:}@i6-u6-@6-@6-@ <{68@,-A3-68@,-A3B68@,-A0W68@:},-A0c6-@ o6-@{6-@UFg%6-F:@,%AV$F:@,F6-+F:A,%@,$AVO6-C::},[6-@ g6-@UP6 6-C:,6-@6-*6-@p66-@Z0@70@@:}@Q0@k0@@@0@@@d06.>:Ag,!67@,.067:}@,.n A$x--@@4")67<,.>:,- 6-?:C:,<<BsD,%-A6A"!:}% /-A"+@%%/ /-@1"+A%%/ /-@9":}+Ar%%/ AV'AV A@ ML CHARACTER SET RELOCATER99104,104,133,204,104,133,203,10:}4,133,206,104,133,20599162,0,160,0,177,205,145,203,200,208,249,230,204,230206,232,224,4,208,240,96ML WINDOW R:}OUTINEUU104,104,133,204,104,133,203,104,133,206,104,133,205,162,0,160,0,177,203,145,205SS200,192,11,208,247,232,24,16:}5,203,105,55,133,203,165,204,105,0,133,204,24,165BB205,105,20,133,205,165,206,105,0,133,206,224,11,208,214,96,0CHAR:}ACTER DATA"0,21,63,127,255,127,63,21,!!0,85,255,255,255,255,255,856!!0,84,252,254,255,254,252,84@##254,124,254,:}124,254,124,56,16J%%254,124,254,124,254,124,254,124T##16,56,254,124,254,124,254,124^%%255,255,255,255,255,255,255,25:}5h24,24,60,126,219,60,36,36r24,60,90,126,66,60,36,102|!!34,145,154,124,60,90,137,690,75,190,162,110,38,46,:}62##60,126,255,255,255,255,126,600,0,24,126,60,24,0,0!!85,186,87,234,85,186,87,170!!36,90,189,189,189,189,9:}0,3615,3,5,9,16,32,64,128240,192,160,144,8,4,2,1128,64,32,16,9,5,3,151,2,4,8,144,160,192,24016,:}56,84,16,16,16,16,1616,16,16,16,16,84,56,160,0,32,64,255,64,32,00,0,4,2,255,2,4,0%%255,255,255,255,255,:}255,255,255 28,91,27,93,12,94,30,92,29-@@&;-@@"&68<,-* . ;6-5@:}09-@@5%%@ $@9 :--@-(@ radiation:D*-@*:}(@:N0-0(@ Xo-@@#->(@ :} B T-@o(@ b+-@@+(@>:@,l06-@6-@0:}6-F:%%@U$,v+-@@"+(@SCORE AY+-@@+(@LEVEL :}%%@U$@OO6-?:A655:}!@I) @)!@9) @A H&&F:%%@U$,"A 0R6-F:%%@U$,\"@c:}A`f%"@w6-@% APp"A8A`z"@tA!P"A9A"A7:}A  A 3%%@U$!6-'6-36-@=%2A`@@=%%@U:}$@/-@%@%/(@>:@2,6-N:&,6-N:&,>-@%@%>(@>:8%:}@<%@,,qO6-?:A6:,76-&@Y2@:}c A MONSTER MOVE ROUTINE46-N:&,6-N:&,46-F:%%%@U$+%,,(%%2@@:}@@2"@c6- Ap<t"@w6-@)6-%A;-@@"H(@j2@:}t APF"@A 0P 6-Z\%%@U$6-%%6-%:6-F:%%@U:}$,P"@c)"AC\6-d%%@U$A7nOO6-?:A6:@,?6-@PM6-&@$1"Ag6-:}@'6-1 A'"@6-Ag'6-@A-@@%(@>:,A2@A:}@ 6-&? 6-@ $ -@6@{-@@ 1A%%U2:}@@0$@@Y {2@w-@@,(@ melt down@-@:}AD V-@@m(@ w A"RANDOM PLACEMENT ROUTINEG%6-P:H:@,$@D,%:}@G6-P:H:@,$@$,%@'%%@U$A8!6-'6--@"G%6-P:H:@,$@E,:}%@G6-P:H:@,$@3,%@,&&F:%%@U$,Ap6%%@U$A9 @-@:}JG%6-P:H:@,$@E,%@G6-P:H:@,$@3,%@T&&F:%%@U$,A^"%%@U:}$@w "$hEXPLOSION ROUTINEr?"@'%%@U$-6-36-96-?6-|j"@':}%%@U$/6-%76-%C6-@ O6-@U6-j6-F:%%@U$,s"@'%%@U$:}/6-%76-%O%%@U$A8U6-a6-m6-@s6-g%%@U$@g6-?:A62@A(%@B E$PLAYER KILLED BY MONSTER1%%@U$!6-'6-1 A @%:}%%@U$6-%%6-%%%@U$A7OO6-?:A6%%@U$@H"A7 ApRRO6-?:A6-@@O(@hita-@@t(@start%%2@:} &-@@&(@key F:B2y,@A#  -@@;2@$@:}@@? a2@m6-@y6-@6-@6-@ 6-@U$ K6:}-@6-@U'6-@ 36-@ ?6-@K6-@. 6-6-@'6-@ 36-@?6-:}@K6-@W6-@c6-@o6-{6-@6-@p6-@8 86-F:AY,$AY:}. A$8 A@B Y-@-A%%AU1 C-@@"Y(@ L 3-@:})(@ 3 A`V SET MAP DATA IN STRING` 06.>:@c,!67@U,.067@,.j 06.>::},!67A$u,.067@,.t 06.>:,!67A$u,.067@,.~ ,-@@E(67@U$,.,:}  C@U$@,.>:,&$ TITLE SCREEN +76-F:A`,%F:Aa,$AV%@Q0:}k0@0@@ -AR@'-@-:}(  i%@@)-@@G(@NUCLEAR MOUNTAINY-@8@i(@By /-@4@:}/(@ Brad Timmins -@ 0  -@@P  /-:}@+0@/  U-@A *6-F:AY,<AYR(@>:A%,U$D::}MOUNTANW.BASYR(@>:A%,U$D:8MOP XYVVVV3AVSVCVACSSV9VVVXYXYCVXYPS1MDCS2@W@@>}A@ @3@ @ @ @ A P@$B2SB2SBIB>}&$@@@!@@P@@W@AA @!BI"?}# ?$@x%@x&B8'A($$******************************$$* PICTURE PERFECT *$$*?} BY JOE D. BRZUSZEK *$$* *$$* COPYRIGHT 1989 *$$* BY ANALOG COM?}PUTING *$$****************************** AL6-?:B0C,!6-F:A,06-F:A,?6-F:A,?}L(@  !  ($2B6-?:B0C,!6-F:A,06-F:A,?6-F:A,B$cĠd!"?}*A"!"An"@ Ax "6-%!6-#"@6-%"#6-B(v?}P:$@0,$ů٠C  6-4A"C6-?:<<<<AY<@<<<<,I-B:,I6?}-?:<<@:7,,<@:7%,,<@:7%,,<@:7%,,<<<<,B -  "F:B2y,"*6-%6B2y<!B6-< ?} 26-?:<<<<AY<A<<<<,< A" A Р"  ( 6-6-"6-/B00?}%@E+B01%@6/ ="6-?:<<<<%<%<<<<,=6-?:<<<<<<<<<,"! 6-6- !"A? },> "(6-?:<<<<%<%<<<<,4B2y> A 6  @>"*"A46-?:<<<<%<%< AŦŠ, ( }Halve",( }Double( HVOK6-2-@0(? }  %6-P:',/ )!2$  6- AH 6-'(}Please wait,"Ap<!@y*"H6-@y? }0 -06-?:<<<<<<<$'+$,<<,b-6-?:<<<<<<<$'+$,%O:&,<<,1 GA+%,$''X6? }-F:A,&b A`!@G*"6-@G2 -26-?:<<<<<<<<%$'+$,<,d/6-?:<<<<:,67%,.>:,-67%,.>:,;67%,.>:,?}OB00%@EcB01%@6 A ?Ҡ@6-O:&,J'6. '6. T.?}-@ 'B02%@:7<,,+ .$ ՠ'6-B( A D (A0")")"@A ?}: AD A5!!AY) )!@5)"+ A`5 Aw)6-P:+&,$?4,$%P:$?F,%mA!?}A0AAA%A3A"Aw A6-B$kAY6. ) A ?}5B(v;6-G6-@S6-Aa6-%A@k A m%Ah@e.%AiF:A`,E%Ap?}F:Aa,Q6-@fW6-]6-c6-m A dA @!A/-@7%; O%@A?}aAY@bd$zB(vP:$@0, 6-&6-26-A86-L%Ay@ec%AF:A`,?}z%AF:Aa, <A F:%,%AF:%,/ A 9 A<$*6-?:B18<<<<<,$3 ?}4"@y6-@x$>6-@y$Š6 6- 6($}Animate NewAppendPlay? ?}6-P:',$ )!A2"A8"?6. 6-  A  ˠ   %%(}A. DirectoryE. R?}ename File ""(B. Main MenuF. Load File ##(C. Format DiskG. Save File %%(D. Delete FileH. Unlock File R A%? }P@6(Select item or :C@R4A% /6-@:,&@d& )!A%P,"/$ R?!} )"@A& 6(FILENAME or :C@R4A%P( ##7<,4:)7<,4:A& 2 >6-B:,%?"}67,.7<&,,67<,.D:>67,.7<%&,< ` A'QA&0A%pA&`A&A&A'A'A?#}'pV` A%PF +@D:*.*$ A&P+(}P 7 -(-"()-(7 A&@Z $?$}d A)( }Y to format drive #1 or :6@>0YA$n ATD:$x $ <%(}D:OLD?%}NAME,NEWNAME or :2@94<$ @2$ ]6-+&@,$ ."A'0D7B:?&},,0A'0R-@Y)]  < -)% %),)2< A'` s AP%'A?'}R@9AS@EAVWAW@0s6-?:C:hhhLV,<@, . 6-"-#*F:%,?(}' + .$  -)%  6-?:C:,, $ @6$ 46-F:A, %(}Error-?)}1"A`4% $ ̠ V $( }Fill 0 with F:AC,,-J( with F:AC%,N V(OK  ?*}6-P:',!$ 5 "(}Please wait+6-?:AR,5 A` (6-F:AC%,6-%""(6- 0AC?+}%-@&(0 A0 ̠ ] ((} Cel 0123NOK>-@+'@d,E( I ]!?,}@9A .6-P:',$@d""AV.6-AU A`@EAY!AfAC3AgA1?-}EBBy@JL-"L;$,;@c,;@&,T9"-"56-?:C:,(;;each mode 14 line is CD}40 bytes widePDNX1#"NX10,HDW16X;@X;find row to copy toJ1NOPLUS$Y3;;if Y3=0, no addition is needCE}edT FNOPLUZ^ DW2Qh,r+O>(;;each mode 14 line is 40 bytes wide|P͆DNX2#ΚNX20HDW2NOPLUZQCELCF}R> HNEWPLOT!FSTCOPY;;fast copyX;"X;begin copying the image pixelX;by pixel...X;find column to copy fromCG}NEWPLOTQX1V?;;divide by 4V??;;Y = horizontal offset&QX10M>:>D2NX;XX;locate pixel to copybQ@7CH}l SHIFT0v FANDITT?T? !SHIFT ANDITM>'PGRABIT;;store bit pattern of pixelX;"X;make pixel color transpCI}arent? CELR> FNOPLOTX;&X;find horizontal column to copy toQX3V?;;divide by 4V? ?;;Y = horizontal offCJ}set&)>(;;screen is only 40 bytes wide! EENDLINE;;off screen?* QX3;;no.4M>>>H2RX;\X;adjust copy datafQHCK}BITS9p RIGHT0z FSTOREIT VGRABIT VGRABIT !RIGHTSTOREITN>M@7 LGRABITP@7;;pixel is storedCL}NOPLOTQX1 X2R> FENDLINE#X3#X1 QCEL R> HNEWPLOT FZIPCOPY$ 'ENDLINE#Y1;;end of line reachCM}ed. Y1Q>8 Y2R>B HBELOWL EXIT:;;return to BASICV BELOW#Y3` Y3Q>j R>;;off bottom of screen?t EEXIT~ CN}!AX1Q>;;No, carriage return. PX1 AX3Q> PX3 Q>(;;40 bytes wide ,;;next line to copy from O P DFRCO}OM # +FROMQ>(;;mode 14 line is 40 bytes wide ,;;next line to copy to O P DJUMP # JUMPQCEL( R>CP}2 FZIPCOPY< !NEWPLOTF "FSTCOPYQX1;;fast copy routineP V?;;divide all X values by 4Z V?d PX1n PAX1x QX2CQ} V? V? PX2 QX3 V? V? PX3 PAX3 ZIPCOPY%X1 Q@7;; load 4 pixels %X3 P@7;; store 4 pixelsCR} /!NOPLOT;;increment and check X and Y values HBITS =0= =1 Q@7;; load 4 pixels %X3 P@7;; store 4 pixels@D X*SAVE#D:SYSEQU.M65 X* IOCB and other important$X* system equates, from Compute's&X* mapping the Atari and the MGT}ac/65(#X* reference manual from ICD/OSS2&X* --------------------------------<X* I/O CONTROL BLOCK EQUATESFX*PIOCBZGU}X*dX* Device handler, set by OSn ICHID@xX* Device number, set by OS ICDNOAX* I/O Command ICCOMB$X* GV}I/O Status, same as error code ICSTACX* Buffer address, 2 bytesICBADRDX* Disk handler put routine,X* adGW}dress - 1, goes here ICPUTFX* Buffer length, 2 bytesICBLENHX* Auxillary control bytesICAUX1J;;AUX 1GX}ICAUX2K;;AUX 2ICAUX3L;;AUX 3"ICAUX4M;;AUX 4,ICAUX5N;;AUX 56ICAUX6O;;AUX 6@X* Length of one GY}IOCBJIOCBLENTX*^ X* IOCB COMMAND VALUE EQUATEShX*rX* Open channel| COPNX* Get binary record CGBINRGZ}X* Get text record CGTXTRX* Put binary record CPBINR X* Put text record CPTXTR X* Open IOCB CCG[}LOSE X* Check status CSTAT X*X* DEVICE DEPENDENT COMMANDX* EQUATES FOR FILE MANAGERX*&CREN ;;RENAMG\}E0CERA!;;ERASE:CPRO#;;PROTECTDCUNP$;;UNPROTECTNCPOINT%;;POINTXCNOTE&;;NOTEbX*lX* AUX1 VALUES REQG]}D FOR OPENvX*OPIN;;OPEN INPUTOPOUT;;OPEN OUTPUTOPUPD ;;OPEN UPDATEOPAPND ;;OPEN APPENDOPDIRG^};;OPEN DIRECTORYX*X*X*X* MISC ADDRESS EQUATESX* CPALOC X* Warm start, 0=cold WARMST$X* Store G_}here,wait for horiz sync  WSYNC X* Available memory, low  MEMLO*X* Available memory, high4MEMTOP>$X* G`}Upper limit of application RAMH APPMHIRX* Atari load/init addr\INITADRfX* Atari Load/Go addrp GOADRzXGa}* Cartridge RUN locationCARTLOCX* CIO Entry address CIOVX* End of line character EOLX* X* VeryGb} useful Atari reserved"X* memory and hardware registerX* locations.X*RANDOM  SAVMSCXCONSOLCOLGc}OR0CRSINH BOOT? $ DINDEXW.HATABS8 CHBSTRIG0LSTICK0xV POKMSK` RAMTOPjjGd}SDMCTL/t STACK~X* IRQENҒ NMIENԜ SKCTLҦDMACTL԰KBCODE Һ POTGO AUDCTLGe} AUDF3 AUDC3 PACTL PORTA PORTBX* X* Timer counter:JIFFY;; 60Hz clockX* CassGf}ette buffer at $400("X* use as general filename buff2FILENAME<X* Display list pointerF DLIST0z clockX* CassDl