@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr 0100 ; OSEQU.M650110 ;0120 OSEQU0130 ;0140 ;USEFUL OPERATING SYSTEM EQUATES0150 ;INCLUDING FMS AND SOME GENERA}L 0131 ;PROGRAM EQUATES0160 ;0170 ;0180 ;CIO BYTE VALUES0190 ;0200 OPEN = $030210 OREAD = $040220 GETREC = $050230 }ODIR = $060240 GETCHR = $070250 OWRITE = $080260 PUTREC = $090270 APPEND = $090280 PUTCHR = $0B0290 CLOSE = $0C0300 O}UPDATE = $0C0310 STATUS = $0D0320 RENAME = $200330 DELETE = $210340 DFRMAT = $21 ;RESIDENT DISK HANDLER (RDH)0350 LOC}K = $230360 UNLOCK = $240370 POINT = $250380 NOTE = $260390 PTSECT = $50 ;RDH0400 GTSECT = $52 ; |0410 DSTAT = }$53 ; |0420 PSECTV = $57 ;RDH0430 NOIRG = $800440 EOL = $9B0450 ;0460 ;OS VARIABLES0470 ;0480 ;PAGE 00490 ; }0500 CASINI = $020510 WARMST = $080520 DOSVEC = $0A0530 DOSINI = $0C0540 APPMHI = $0E ;DIS LOW LIMIT,20550 POKMSK = $ }10 ;IRQ ENABLE FLAGS0560 BRKKEY = $11 ;FLAG0570 RTCLOK = $12 ;,3 +2=LSB0580 ZIOCB = $20 ;ZERO PAGE IOCB0590K}4 4 1 5 0 5 75 2 4 132A-@27EAPPENDIX AHARDWARE REGISTERS Register  } Shadow Name Description } Address Name Address ---------------------------------------------------------------------- ALLPOT} game paddle ready indicators $D208 53768 AUDC1 Audio channel 1 control $D201 53761 } AUDC2 Audio channel 2 control $D203 53763 AUDC3 Audio channel 3 control } $D205 53765 AUDC4 Audio channel 1 control $D207 53767 AUDCTL general audio }control $D208 53768 AUDF1 Audio frequency 1 control $D200 53760 AU}DF2 Audio frequency 2 control $D202 53762 AUDF3 Audio frequency 3 control $D204 53764 } AUDF4 Audio frequency 4 control $D206 53766 CHACTL character control } $D401 54273 CHART $02F3 755 CHBASE Address of character set / 256 $D409 54281 CHBAS $O2F4 756 COLBK color/brig}htness of setcolor 4 $D01A 53274 COLOR4 $02C8 712 COLPF0 Color/brightness of setcolor 0 $D016 53270 COLOR0 $02C4 708} COLPF1 color/brightness of setcolor 1 $D017 53271 COLOR1 $02C5 709 COLPF2 color/brightness of setcolor 2 $DO18 532}72 COLOR2 $02C6 710 COLPF3 color/brightness of setcolor 3 $DO19 53273 COLOR3 $02C7 711 COLPM0 color/brightness, player/}missile 0 $D012 53266 PCOLR0 $02C0 704 COLPM1 color/brightness, player/missile 1 $DO13 53267 PCOLR1 $02C1 705 COLPM2 color/}brightness, player/missile 2 $DO14 53268 PCOLR2 $02C2 706 COLPM3 color/brightness, player/missile 3 $DO15 53269 PCOLR3 $02C3} 707 CONSOL [START], [SELECT], [OPT.], speaker $D01F 53279 DLISTH display list pointer high byte $D403} 54275 SDLSTH $0231 561 DLISTL display list pointer low byte $D402 54274 SDLSTL $0230 560 DMACTL Direct Memory access }control (DMA) $D400 54272 SDMCTL $022F 559 GRACTL graphics control $D01D 53277 GRAFM mi}ssile graphics $D011 53265 GRAFP0 player 0 graphics $D00D 53261 } GRAFP1 player 1 graphics $D00E 53262 GRAFP2 player 2 graphics $ }D00F 53263 GRAFP3 player 3 graphics $D010 53264 HITCLR clear collisions !} $D01E 54278 HPOSM0 horizontal position of missile 0 $D004 53252 HPOSM"}1 horizontal position of missile 1 $D005 53253 HPOSM2 horizontal position of missile 2 $D006 53254 #} HOPSM3 horizontal position of missile 3 $D007 53255 HPOSP0 horizontal position of player 0 $} $D000 53248 HPOSP1 horizontal position of player 1 $D001 53249 HPOSP2 horizontal po%}sition of player 2 $D002 53250 HPOSP3 horizontal position of player 3 $D003 53251 H&}SCROL horizontal scroll $D404 54276 IRQEN interrupt request enable (IRQ) $D20E 53774 '}POKMSK $0010 16 IRQST IRQ status $D20E 53774 KBCODE keyboard code (} $D209 53769 CH $O2FC 764 M0PF missile 0 to graphics collisions $D000 53248 M0PL missile 0)} to player collisions $D008 53256 M1PF missile 1 to graphics collisions $D001 53249 *} M1PL missile 1 to player collisions $D009 53257 M2PF missile 2 to graphics collisions $D002+} 53250 M2PL missile 2 to player collisions $D00A 53258 M3PF missile 3 to graphics,} collisions $D003 53251 M3PL missile 3 to player collisions $D00B 53259 NMIEN no-}n-maskable interrupt enable (NMI)$D40E 54286 NMIRES NMI reset $D40F 54287 .} NMIST NMI status $D40F 54287 P0PF player 0 to graphics collisions $/}D004 53252 P0PL player 0 to player collisions $D00C 53260 P1PF player 1 to graph0}ics collisions $D005 53253 P1PL player 1 to player collisions $D00D 53261 P2PF 1} player 2 to graphics collisions $D006 53254 P2PL player 2 to player collisions $D00E 53262 2} P3PF player 3 to graphics collisions $DOO7 53255 P3PL player 3 to player collisions 3} $D00F 53263 PACTL port A control $D302 54018 PAL Europe/North 4}America TV indicator $D014 53268 PBCLT port B control $D303 54019 PE5}NH light pen horizontal position $D40C 54284 LPENH $0234 564 PENV light pen vertical position $D40D 54285 L6}PENV $0235 565 PMBASE player/missile address / 256 $D407 54279 PORTA port A 7} $D300 54016 STICK0 $0278 632 STICK1 $0279 634 PORTB port B 8} $D301 54017 STICK2 $027A 634 STICK3 $027B 6359} POT0 game paddle 0 $D200 53760 PADDL0 $0270 624 POT1 game paddle 1 $D201 537:}61 PADDL1 $0271 625 POT2 game paddle 2 $D202 53762 PADDL2 $0272 626 POT3 game paddle 3 ;} $D203 53763 PADDL3 $0273 627 POT4 game paddle 4 $D204 53764 PADDL4 $0274 628 POT5 game p<}addle 5 $D205 53765 PADDL5 $0275 629 POT6 game paddle 6 $D206 53766 PADDL6 $0276=} 630 POT7 game paddle 7 $D207 53767 PADDL7 $0277 631 POTGO start pot scan sequence $D20B>} 53771 PRIOR p/m priority and GTIA mode $D21B 53275 GPRIOR $026F 623 RANDOM random number generat?}or $D20A 53770 SERIN serial port input $D20D 53774 SEROUT se@}rial port output $D20D 53773 SIZEM missile size $D00C 53260 A} SIZEP0 player 0 size $D008 53256 SIZEP1 player 1 size $B}D009 53257 SIZEP2 player 2 size $D00A 53258 SIZEP3 player 3 size C} $D00B 53259 SKCTL serial port control $D20F 53775 SSKCTL $0232 563 SKRESD}T reset serial port status $D20A 53770 SKSTAT serial port status $D20F 53775 E} STIMER start timer $D209 53769 TRIG0 joystick trigger 0 F} $D010 53264 STRIG0 $0284 644 TRIG1 joystick trigger 1 $D011 53265 STRIG1 $0285 645 TRIG2 joystick trigG}ger 2 $D012 53266 STRIG2 $0286 646 TRIG3 joystick trigger 3 $D013 53267 STRIG3 $0287 647 VH}COUNT vertical line counter $D40B 54283 VDELAY vertical delay $D01C 54276 I} VSCROL vertical scroll $D405 54277 WSYNC wait for horizontal sync J} $D40A 54282 D:APNDXA.1DIX AHARDWARE REGISTERS Register 3 SOUNDR = $41 ;0=QUIET I/O0600 CRITIC = $42 ;NO VVBLKD FLAG0610 DSTAT = $4C ;DISPLAY STATUS0620 ATRACT = $4D063L}0 LMARGN = $520640 RMARGN = $530650 ROWCRS = $540660 COLCRS = $550670 DINDEX = $57 ;DISPLAY MODE0680 SAVMSC = $58 M};SCREEN ADR0690 OLDROW = $5A ;BEFORE DRAW/FILL0700 OLDCOL = $5B ;SCREEN ADR0710 OLDADR = $5E ;CURSOR ADDRESS0720N} PALNTS = $62 ;PAL/NTSB FLAG0730 RAMTOP = $6A ;END OF DIS +10740 ZROFRE = $80 ;USER ZERO PAGE0750 ;TO - $D307O}60 ;FP - $D4 ;FREE IF NO0770 ;TO - $FF ;FLOATING POINT0780 ;0790 ;PAGE 1 STACK0800 ;0810 ;PAGE 20820 ;083P}0 VDSLST = $0200 ;NMI VECTOR0840 VBREAK = $02060850 VKEYBD = $02080860 VVBLKI = $02220870 VVBLKD = $02240880 SDMCTL = $Q}022F0890 SDLSTL = $02300900 LPENH = $0234 ;LIGHT PEN0910 LPENV = $02350920 DFLAGS = $0240 ;DISK FLAG BYTE0930 PADDL0 R}= $02700940 GPRIOR = $026F0950 GTIA = $026F0960 STICK0 = $02780970 STRIG0 = $02840980 TXTROW = $02900990 TXTMSC = $029S}41000 TXTCOL = $02911010 INVFLG = $02B61020 SHFLOC = $02BE1030 BOTSCR = $02BF1040 PCOLR0 = $02C01050 COLOR0 = $02C4106T}0 RAMSIZ = $02E4 ;START OF ROM1070 KRPDER = $02D9 ;REPEAT DELAY1080 KEYREP = $02DA ;REPEAT RATE1090 NOCLIK = $02DB ;CLU}ICK DISABLE1100 HELPFG = $02DC ;HELP KEY FLAG1110 GLBABS = $02E0 ;GLOBAL VARIABLES1120 RUNADR = $02E0 ;DISK RUN POINTERV}1130 INIADR = $02E2 ;DISK INIT POINT1140 RAMSIZ = $02E4 ;START OF ROM1150 MEMTOP = $02E5 ;END OF FREE RAM1160 MEMLO = W}$02E71170 CRSINH = $02F01180 KEYDEL = $02F1 ;KEY DELAY & RATE1190 CHACT = $02F31200 CHBAS = $02F41210 ATACHR = $02FB12X}20 CH = $02FC1230 FILDAT = $02FC1240 DSPFLG = $02FE1250 SSFLAG = $02FF1260 ;1270 ;PAGE 31280 ;1290 ;RESIDENT DISK HY}ANDLER & SIO INTERFACE1300 ;1310 DDEVIC = $03001320 DUNIT = $03011330 DCOMND = $03021340 DSTATS = $03031350 DBUFLO = $0Z}3041360 DBUFHI = $03051370 DTIMLO = $03061380 DBYTLO = $03081390 DBYTHI = $03091400 DAUX1 = $030A1410 DAUX2 = $030B142[}0 ;1430 ;IOCB's1440 ;1450 ICHID = $03401460 ICDNO = $03411470 ICCOM = $03421480 ICSTA = $03431490 ICBAL = $03441500 I\}CBAH = $03451510 ICPTL = $03461520 ICPTH = $03471530 ICBLL = $03481540 ICBLH = $03491550 ICAX1 = $034A1560 ICAX2 = $034]}B1570 ICAX3 = $034C1580 ICAX4 = $034D1590 ICAX5 = $034E1600 ICAX6 = $034F1610 ;TO - $03BF ;OTHER IOCB's1620 PRNBUF ^}= $03C01630 ;TO - $O3E71640 ;SPARE - $03E81650 ;TO - $03FC1660 CASBUF = $03FD ;CASSETTE BUFFER1670 ;1680 ;PAGE 4_}1690 ;1700 ;TO - $047F ;CASBUF CONT.1710 USAREA = $0480 ;FREE1720 ;TO - $04FF1730 ;1740 ;PAGE 51750 ;1760 PAG`}E5 = $0500 ;FREE1770 ;TO - $057D1780 ;FP ONLY $057E ;FREE IF NO1790 ;TO - $05FF ;FLOATING POINT1800 ;1810 ;PAGa}E 61820 ;1830 PAGE6 = $0600 ;FREE1840 ;TO - $06FF1850 ;1860 ;PAGE 71870 ;1880 BOOTRG = $0700 ;PROGRAM AREA1890 ;b}1900 ;1910 ;UPPER ADDRESSES1920 ;1930 ;1940 RITCAR = $8000 ;RAM IF NO1950 LFTCAR = $A000 ;CARTRIDGE1960 C0PAGE = $C0c}00 ;EMPTY IN 8001970 ;TO - $CFFF1980 ;1990 ;HARDWARE REGISTERS2000 ;2010 HPOSP0 = $D0002020 M0PF = $D0002030 SIZEd}P0 = $D0082040 M0PL = $D0082050 SIZEM = $D00C2060 GRAFP0 = $D00D2070 GRAFM = $D0112080 COLPM0 = $D0122090 COLPF0 = $D0e}162100 PRIOR = $D01B2110 GTIAR = $D01B2120 VDELAY = $D01C2130 GRACTL = $D01D2140 HITCLR = $D01E2150 CONSOL = $D01F2160f} AUDF1 = $D2002170 AUDC1 = $D2012180 AUDCTL = $D2082190 RANDOM = $D20A2200 IRQEN = $D20E2210 SKCTL = $D20F2220 PORTA = g}$D3002230 PORTB = $D3012240 PACTL = $D3022250 PBCTL = $D3032260 DLISTL = $D4022270 HSCROL = $D4042280 VSCROL = $D40522h}90 CHBASE = $D4092300 WSYNC = $D40A2310 VCOUNT = $D40B2320 NMIEN = $D40E2330 ;2340 ;FLOATING POINT MATH ROUTINES2350 ;i}2360 AFP = $D8002370 FASC = $D8E62380 IFP = $D9AA2390 FPI = $D9D22400 ZFR0 = $DA442410 ZF1 = $DA462420 FSUB =j} $DA602430 FADD = $DA662440 FMUL = $DADB2450 FDIV = $DB282460 PLYEVL = $DD402470 FLD0R = $DD892480 FLD0P = $DD8D24k}90 FLD1R = $DD982500 FLD1P = $DD9C2510 FSTOR = $DDA72520 FSTOP = $DDAB2530 FMOVE = $DDB62540 EXP = $DDC02550 EXP10 = l}$DDCC2560 LOG = $DECD2570 LOG10 = $DED12580 ;2590 ;2600 ;OPERATING SYSTEM2610 ;2620 ;2630 CHORG = $E000 ;CHARACTEm}R SET2640 ;TO - $E3FF2650 ;2660 ;ROM VECTORS2670 ;2680 DSKINV = $E4532690 CIOV = $E4562700 SIOV = $E4592710 SYSVBn}V = $E45F2720 VBIVAL = $E460 ;ADR AT VVBLKI2730 XITVBV = $E4622740 VBIXVL = $E463 ;ADR AT VVBLKD2750 BLKBDV = $E471276o}0 WARMSV = $E4742770 COLDSV = $E4772780 ;2790 ;2800 ;GENERAL PROGRAM EQUATES2810 ;2820 COLOR = $C8 ;USED BY BASIC2p}830 FROM = $CB2840 TO = $CD2850 ZPBYTE = $CF2860 ZPWORD = $D02870 TEMP = $04802820 COLOR = $C8 ;USED BY BASIC2X0100 ; CIOMAC.LIB0110 ;0120 CIOMAC0130 ;0140 .IF .NOT .DEF OSEQU0150 .ERROR "must include OSEQU.M65" r}0160 .ENDIF 0170 ;0180 ; MACRO: @CH0190 ;0200 .MACRO @CH 0210 .IF %1>70220 LDA %10230 ASL s}A0240 ASL A0250 ASL A0260 ASL A0270 TAX 0280 .ELSE 0290 LDX #%1*160300 .ENDI t}F 0310 .ENDM 0320 ;0330 ;0340 ;0350 ; MACRO: @CV0360 ;0370 ; Loads Constant or Value into0380 ; accumultor (A-re u}gister)0390 ;0400 .MACRO @CV 0410 .IF %1<2560420 LDA #%10430 .ELSE 0440 LDA %10450 .EN v}DIF 0460 .ENDM 0470 ;0480 .MACRO @LA 0490 @CV %10500 .ENDM 0510 ;0520 ;0530 ; MACRO: @FL0540 ;05 w}50 ; @FL is used to establish a0560 ; filespec (file name)0570 ;0580 .MACRO @FL 0590 .IF %1<2560600 JMP *+ x}%1+40610 @F .BYTE %$1,00620 LDA # <@F0630 STA ICBAL,X0640 LDA # >@F0650 STA ICBAH,X0660 y} .ELSE 0670 LDA # <%10680 STA ICBAL,X0690 LDA # >%10700 STA ICBAH,X0710 .ENDIF 0720 z}.ENDM 0730 ;0740 ;0750 ;0760 ; MACRO: XIO0770 ;0780 ; FORM: XIO cmd,ch[,aux1,aux2][,filespec]0790 ;0800 ; performs {} I/O operations by0810 ; itself or as called by other0820 ; macros. Used as BASIC XIO.0830 ;0840 .MACRO XIO 0850 |} @CH %20860 @CV %10870 STA ICCOM,X0880 .IF %0>=40890 @CV %30900 STA ICAX1,X0910 @ }}CV %40920 STA ICAX2,X0930 .ELSE 0940 LDA #00950 STA ICAX1,X0960 STA ICAX2,X0970 .E ~}NDIF 0980 .IF %0=2 .OR %0=40990 @FL "S:"1000 .ELSE 1010 @@IO .= %01020 @FL %$(@@IO)1030 } .ENDIF 1040 JSR CIOV1050 .ENDM 1060 ;1070 ;1080 ;1090 ; MACRO: OPEN1100 ;1110 ; FORM: OPEN ch,aux1,aux2 },filespec1120 ;1130 ; will attempt to open the given1140 ; channel as in the BASIC open1150 ; command1160 ;1170 .MA }CRO OPEN 1180 .IF %4<2561190 XIO OPEN,%1,%2,%3,%$41200 .ELSE 1210 XIO OPEN,%1,%2,%3,%41220 } .ENDIF 1230 .ENDM 1240 ;1250 ;1260 ;1270 ; MACROS: BGET and BPUT1280 ;1290 ; FORM: BGET ch,buf,len1300 ; } BPUT ch,buf,len1310 ;1320 ; performs block I/O1330 ;1340 ; first: a common macro1350 ;1360 .MACRO @GP 1370 } @CH %11380 LDA #%41390 STA ICCOM,X1400 LDA # <%21410 STA ICBAL,X1420 LDA # >%21430 STA ICBA }H,X1440 LDA # <%31450 STA ICBLL,X1460 LDA # >%31470 STA ICBLH,X1480 JSR CIOV1490 .ENDM 1500 ; }1510 .MACRO BGET 1520 @GP %1,%2,%3,GETCHR1530 .ENDM 1540 ;1550 .MACRO BPUT 1560 @GP %1,%2,%3,PUT }CHR1570 .ENDM 1580 ;1590 ;1600 ;1610 ; MACRO: PRINT1620 ;1630 ; FORM: PRINT ch[,buffer[,length]]1640 ;1650 ; }used to print text. Length1660 ; must be given or else buffer1670 ; must be a literal string in1680 ; quotes. Like BASIC } PRINT #.1690 ;1700 .MACRO PRINT 1710 .IF %0>11720 .IF %2<1281730 JMP *+4+%21740 @IO .BYTE %$ }2,$9B1750 @GP %1,@IO,%2+1,PUTREC1760 .ELSE 1770 .IF %0=21780 @GP %1,%2,255,PUTREC1 }790 .ELSE 1800 @GP %1,%2,%3,PUTREC1810 .ENDIF 1820 .ENDIF 1830 .ELSE 1840 } JMP *+41850 @IO .BYTE $9B1860 @GP %1,@IO,1,PUTREC1870 .ENDIF 1880 .ENDM 1890 ;1900 ;1910 ;1 }920 ; MACRO: INPUT1930 ;1940 ; FORM: INPUT ch,buf,len1950 ;1960 ; performs input as in BASIC1970 ; INPUT command1980 } ;1990 .MACRO INPUT 2000 .IF %0=22010 @GP %1,%2,255,GETREC2020 .ELSE 2030 @GP %1,%2,%3,GET }REC2040 .ENDIF 2050 .ENDM 2060 ;2070 ;2080 ;2090 ; MACRO: CLOSE2100 ;2110 ; FORM: CLOSE ch2120 ;2130 ; } closes channel ch2140 ;2150 .MACRO CLOSE 2160 @CH %12170 LDA #CLOSE2180 STA ICCOM,X2190 JSR CIOV }2200 .ENDM 2210 ;2220 ;2230 ;2240 ; MACRO: P2250 ;2260 ; FORM: P [ch,] buffer2270 ;2280 ; Calls PRINT and use }s channel 02290 ; if only one parameter is given2300 ; buffer may be a literal string2310 ; in quotes. Like BASIC ?.2320 } ;2330 .MACRO P 2340 .IF %0>22350 ERROR "P: Two parameters max"2360 .ELSE 2370 .IF %0=22380 } .IF %2<1282390 PRINT %1,%$22400 .ELSE 2410 PRINT %1,%22420 .ENDIF 2 }430 .ELSE 2440 .IF %0=02450 PRINT 02460 .ELSE 2470 .IF %1<1282480 } PRINT 0,%$12490 .ELSE 2500 PRINT 0,%12510 .ENDIF 2520 .ENDIF 253 }0 .ENDIF 2540 .ENDIF 2550 .ENDM 2560 ;2570 ;2580 ;2590 ; MACRO: I2600 ;2610 ; FORM: I buffer2620 };2630 ; same as BASIC input except2640 ; for ch 0 only for up to2650 ; 40 bytes2660 ;2670 .MACRO I 2680 INPUT } 0,%1,402690 .ENDM 2700 ;2710 ;2720 ;2730 ; MACROS: GET & PUT2740 ;2750 ; FORM: (GET or PUT) ch,buffer2760 ;27 }70 ; Same as BASIC GET # or PUT #.2780 ;2790 .MACRO GET 2800 BGET %1,%2,12810 .ENDM 2820 .MACRO PUT 2 }830 BPUT %1,%2,12840 .ENDM 2850 ;2860 ;2870 ;2880 ; MACRO: LP2890 ;2900 ; FORM: LP [string]2910 ;2920 ; s }ame as BASIC LP.2930 ;2940 .MACRO LP 2950 OPEN 7,8,0,"P:"2960 .IF %0=12970 PRINT 72980 .ELS }E 2990 PRINT 7,%23000 .ENDIF 3010 CLOSE 73020 .ENDM 3030 ;3040 ;3050 ;3060 ;3070 ; MACRO: PO }S3080 ;3090 ; FORM: POS X,Y3100 ;3110 ; same as BASIC position3120 ;3130 .MACRO POS 3140 LDA # <%13150 S:}0100 ; GRAFMAC.LIB0110 ;0120 GRAFMAC0130 ;0140 .IF .NOT .DEF CIOMAC0150 .ERROR "must include CIOM}AC.LIB"0160 .ENDIF 0170 ;0180 ; GRAPHICS MACROS0190 ;0200 ; REQUIRES CIOMAC.LIB0210 ;0220 ;0230 ;0240 ; MACRO:} GRAPHICS0250 ;0260 ; FORM: GRAPHICS mode0270 ;0280 ; enters a graphics mode as in0290 ; BASIC0300 ;0310 .MACRO G}RAPHICS 0320 .IF %1>310330 LDY #00340 @LOOP LDA PCOLR0,Y0350 PHA 0360 INY 0370 CPY #90380 } BNE @LOOP0390 .ENDIF 0400 @LA %10410 AND #$F00420 EOR #$10 ;COMP S IN AUX10430 ORA #$0C}0440 STA TEMP0450 @LA %10460 AND #$0F0470 STA TEMP+10480 .IF %1>00490 CLOSE 60500 } OPEN 6,TEMP,TEMP+1,"S:"0510 .ELSE 0520 CLOSE 00530 OPEN 0,12,0,"E:"0540 .ENDIF 0550 .I}F %1>310560 LDY #00570 @LOOP2 PLA 0580 STA PCOLR0,Y0590 INY 0600 CPY #90610 BNE @LOOP206}20 .ENDIF 0630 .ENDM 0640 ;0650 .MACRO GR 0660 GRAPHICS %10670 .ENDM 0680 ;0690 ;0700 ; MACRO}: COLOR0710 ;0720 ; FORM: COLOR data0730 ;0740 ; selects color register as in0750 ; BASIC color statement0760 ;0770 } .MACRO COLOR 0780 @LA %10790 STA COLOR0800 .ENDM 0810 ;0820 ;0830 ;0840 ; MACRO: PLOT0850 ;0860 ; }FORM: PLOT X,Y0870 ;0880 ; same as BASIC plot0890 ;0900 .MACRO PLOT 0910 .IF %1<3200920 LDA # <%10930 } STA COLCRS0940 LDA # >%10950 STA COLCRS+10960 .ELSE 0970 LDA %10980 STA COLCRS0990 } LDA %1+11000 STA COLCRS+11010 .ENDIF 1020 @LA %21030 STA ROWCRS1040 LDA COLOR1050 STA} ATACHR1060 BPUT 6,ATACHR,11070 .ENDM 1080 ;1090 ;1100 ;1110 ; MACRO: DRAWTO1120 ;1130 ; FORM: DRAWTO X,Y}1140 ;1150 ; same as basic drawto1160 ;1170 .MACRO DRAWTO 1180 .IF %1<3201190 LDA # <%11200 STA COL}CRS1210 LDA # >%11220 STA COLCRS+11230 .ELSE 1240 LDA %11250 STA COLCRS1260 LDA %1+}11270 STA COLCRS+11280 .ENDIF 1290 @LA %21300 STA ROWCRS1310 LDA COLOR1320 STA ATACHR133}0 LDX #61340 LDA ICAX1,X1350 STA TEMP1360 LDA ICAX2,X1370 STA TEMP+11380 XIO $11,6,TEMP,TEMP+1},"S:"1390 .ENDM 1400 ;1410 .MACRO DR 1420 DRAWTO %1,%21430 .ENDM 1440 ;1450 ;1460 ; MACRO: SETCOLOR}1470 ;1480 ; FORM: SETCOLOR color,hue,lum1490 ;1500 ; same as BASIC setcolor command1510 ;1520 .MACRO SETCOLOR 15}30 @LA %11540 TAY 1550 @LA %21560 ASL A1570 ASL A1580 ASL A1590 ASL A1600 .IF %3<1}61610 ORA #%31620 .ELSE 1630 ORA %31640 .ENDIF 1650 TAX 1660 LDA DINDEX1670 CMP #9}1680 BEQ @B11690 INY 1700 INY 1710 INY 1720 INY 1730 @B1 TXA 1740 STA PCOLR0,Y1750 .ENDM }1760 ;1770 .MACRO SE 1780 SETCOLOR %1,%2,%31790 .ENDM 1800 ;1810 ;1820 ; MACRO: TPOS1830 ;1840 ; FORM}: TPOS X,Y1850 ;1860 ; position for text window1870 ;1880 .MACRO TPOS 1890 .IF %2<20 .OR %2>231900 .ERROR} "TPOS cursor out of range"1910 .ENDIF 1920 @LA #%11930 STA TXTCOL1940 @LA #%21950 } STA TXTROW1960 .ENDM 1970 ;1980 ;1990 ;2000 ; MACRO: LOCATE2010 ;2020 ; FORM: LOCATE X,Y2030 ;2040 ; same as B}ASIC LOCATE except2050 ; color data is put in2060 ; ATACHR2070 ;2080 .MACRO LOCATE 2090 .IF %1<3202100 LD}A # <%12110 STA COLCRS2120 LDA # >%12130 STA COLCRS+12140 .ELSE 2150 LDA %12160 STA} COLCRS2170 LDA %1+12180 STA COLCRS+12190 .ENDIF 2200 @LA %22210 STA ROWCRS2220 BGET }6,ATACHR,12230 .ENDM 2240 ;2250 ;2260 ;S+12190 .ENDIF 2200 @LA %22210 STA ROWCRS2220 BGET 00100 ; SOUNDMAC.LIB0110 ;0120 .IF .NOT .DEF OSEQU0130 .ERROR "Must include OSEQU.LIB"0140 .END(}IF 0150 ;0160 ;0170 ;0180 ; MACRO: SOUND0190 ;0200 ; FORM: SOUND ch,pitch,timbre,voulme0210 ;0220 ; same as basic so(}und command0230 ;0240 .MACRO SOUND 0250 @LA %10260 STA TEMP0270 CLC 0280 ADC TEMP0290 TAX 0(}300 @LA %20310 STA AUDF1,X0320 @LA %30330 ASL A0340 ASL A0350 ASL A0360 ASL A0370 (}STA TEMP0380 @LA %40390 ORA TEMP0400 STA AUDC1,X0410 .ENDM 0420 ;0430 ;0440 ;60 ASL A0370 (g0100 ; FPMAC.LIB0110 ;0120 FPMAC0130 ;0140 .IF .NOT .DEF OSEQU0150 .ERROR "Must include OSEQU.LIB"0,}160 .ENDIF 0170 ;0180 ; floating point macros0190 ;0200 ;0210 ; MACRO: @A2FP0220 ;0230 ; FORM: @A2FP inbuff024,}0 ;0250 ; converts 10 byte or less0260 ; ascii number at inbuff to0270 ; FP number in FR00280 ;0290 .MACRO @A2FP 03,}00 LDA # <%10310 STA INBUFF0320 LDA # >%10330 STA INBUFF+10340 LDA #00350 STA CIX0360 JSR A,}FP ;[D800]0370 BCC @B10380 JMP FPERROR0390 @B1 NOP 0400 .ENDM 0410 ;0420 ;0430 ;0440 ; MACRO: @FP2A0,}450 ;0460 ; FORM: @FP2A0470 ;0480 ; converts a FP number in FR0 to0490 ; ascii and places it in LBUFF0500 ; pointed to ,}by INBUFF0510 ;0520 .MACRO @FP2A 0530 JSR FASC ;[D8E6]0540 .ENDM 0550 ;0560 ;0570 ;0580 ; MACRO: @FP2M,}EM0590 ;0600 ; FORM: @FP2MEM buffer0610 ;0620 ; moves reslut of FP to ASCII0630 ; conversion to memory0640 ;0650 ,}.MACRO @FP2MEM 0660 LDA # <%10670 STA TO0680 LDA # >%10690 STA TO+10700 LDY #$FF0710 @LOOP INY 072,}0 LDA (INBUFF),Y0730 STA (TO),Y0740 CMP #$800750 BCS @LOOP0760 AND #$7F0770 STA (TO),Y0780 ,}INY 0790 LDA #$9B0800 STA (TO),Y0810 .ENDM 0820 ;0830 ;0840 ;0850 ; MACRO: @WRD2FP0860 ;0870 ; FORM: @W,}RD2FP0880 ;0890 ; converts a two byte word in0900 ; FR0 to FP0910 ;0920 .MACRO @WRD2FP 0930 JSR IFP ;[D9AA],}0940 .ENDM 0950 ;0960 ;0970 ;0980 ; MACRO: @FP2WRD0990 ;1000 ; FORM: @FP2WRD1010 ;1020 ; converts a FP number i,}n FR01030 ; to a two byte word1040 ;1050 .MACRO @FP2WRD 1060 JSR FPI ;[D9D2]1070 BCC @B11080 JMP FP,}ERROR1090 @B1 NOP 1100 .ENDM 1110 ;1120 ;1130 ;1140 ; MACRO: @LODFR01150 ;1160 ; FORM: @LODFR0 buffer1170 ;118,}0 ; loads FR0 with 10 byte ASCII1190 ; number at buffer1200 ;1210 .MACRO @LODFR0 1220 LDA # <%11230 STA FLPT,}R1240 LDA # >%11250 STA FLPTR+11260 JSR FLD0P ;[DD8D]1270 .ENDM 1280 ;1290 ;1300 ;1310 ; MACRO: @LO,}DFR11320 ;1330 ; FORM: @LODFR1 buffer1340 ;1350 ; loads FR1 with 10 byte ASCII1360 ; number at buffer1370 ;1380 .,}MACRO @LODFR1 1390 LDA # <%11400 STA FLPTR1410 LDA # >%11420 STA FLPTR+11430 JSR FLD1P ;[DD9C]144,}0 .ENDM 1450 ;1460 ;1470 ;1480 ; MACRO: @STFR01490 ;1500 ; FORM: @STFR0 buffer1510 ;1520 ; stores number in FR0 ,}to buffer1530 ;1540 .MACRO @STFR0 1550 LDA # <%11560 STA FLPTR1570 LDA # >%11580 STA FLPTR+11590 ,} JSR FSTOP ;[DDAB]1600 .ENDM 1610 ;1620 ;1630 ;1640 ; MACRO: @FR02FR11650 ;1660 ; FORM: @FR02FR11670 ;1680 ,}; moves FP number from FR0 to1690 ; FR11700 ;1710 .MACRO @FR02FR1 1720 JSR FMOVE ;[DDB6]1730 .ENDM 1740 ;,}1750 ;1760 ;1770 ; MACRO: @MATH1780 ;1790 ; FORM: @MATH op addr,buffer1,buffer2 [,buffer3]1800 ;1810 ; performs FP ma,}th function as1820 ; called by other FP macros with1830 ; result to buffer 3 if no1840 ; buffer 3 is specified the1850,} ; result is stored in buffer 11860 ;1870 .MACRO @MATH 1880 @A2FP %31890 @FR02FR1 1900 @A2FP %219.%}12 4 1 5 0 10 70 2 12 132C-@27EAPPENDIX CMEMORY USEPage 0$00-$7FOperating system zero-page. The }entire first half of page zero is reserved for the operating system.$80-$FFFree zero-page. The top half of page zero is }free if BASIC is disabled. BASIC uses all but $CB-$D1. The floating point math routines use $D4-$FF. If the floating point} arithmetic package is not used this memory is free.Page 1$100-1FFThis is the 6502 stack. The stack pointer initializ}ed to $1FF and moves downward as the stack is filled.Pages 2-5$200-$47FThis area is used for operating system database} variables. Parts which are not used in some particular programs, such as the cassette buffer or printer buffer, may then be} used for other purposes. See the O.S. equate listing for these locations.$480-$57D ($480-$6FF if no floating point)This} is called the user work space. It is free to be used by programs. If the floating point arithmetic package is not used the} user work space extends to $6FF. This area is used by BASIC.$57E-$5FFThis area is used by the floating point arithmetic} package. It is free if the package is not used.Page 6$600-6FFAtari has solemnly sworn never to put anything in this} page of memory.Page 7-the screen region$700This is called the boot region. Most machine language programs which don'}t use DOS load at this address. DOS extends from $700-$1CFB.MEMLOThe address pointed to by the O.S. database variable M}EMLO [$02E7,2 (743)] is the first byte of free memory. This pointer is usually changed by any program's initialization routi}ne. For example, upon power-up, MEMLO points to $700. When DOS loads in, DOS changes MEMLO to point to $2A80. If an AUTORU}N.SYS program then loads in just above DOS, such as DISKIO, it will usually change MEMLO to point above itself. One importan}t reason for this is to protect the program from BASIC. BASIC uses memory starting at MEMLO.MEMTOPMEMTOP [$2E5,2 (741)] }is set by the O.S. whenever a graphics mode is entered. The graphics region is at the very top of ram and extends downward. } The address MEMTOP points to depends on how much memory the screen region uses.APPMHIAPPMHI [$0E,2 (14)] should be set b}y any program to point to the highest address required by the program. If the O.S. cannot set up a screen without going belo}w APPMHI it will return a not-enough-memory-for-screen-mode error.The cartridge slots$8000 (32768)This is the beginnin}g of the 8K bytes used by the right cartridge slot of the 800. This is also where 16K cartridges begin. If there is no cart}ridge here it is ram.$A000 (40960)This is the beginning of the left cartridge of the 800 or the only cartridge slot on a}ll other models. This is where the BASIC ROM resides in the XL/XE models. This area is RAM is there is no cartridge or BASI}C is disabled on XL/XE models.above the cartridges$C000-$CFFF (49152-53247)This area is empty on the 800. Sometimes s}pecial ROM chips, such as Omnimon are wired in here. On the XL/XE models $C000-C7FF is free ram if there are no cartridges. } On XL/XE models, the O.S. ROM starts at $C800$D000-$D7FF (53248-57373)This area is taken up by the hardware chips. The }chips actually take only a fraction of this space. If these addresses are further decoded there is space for many, many more} hardware chips. For example, The PIA chip uses 256 bytes of memory but needs only 4 bytes. There is room for 64 PIA chips }in this reserved memory.$E000-E3FF (57344-58367)This is the location of the ATASCII character set.$E400-FFF7 (58368-655}27)This is the operating system ROM$FFF8-$FFFF (65528-65535)These last 8 bytes contain the addresses of the interrupt v}ectors. Upon power up the 6502 gets a reset pulse and looks up the reset routine here.7FOperating system zero-page. The X4 4 1 5 0 5 75 2 4 132NUMERICAL ORDERRegisters sharing addresses are listed first when writen to, then when r}ead from Register Shadow } Name Description Address Name Address ------------------------}---------------------------------------------- HPOSP0 horizontal position of player 0 $D000 53248 M0PF } missile 0 to graphics collisions $D000 53248 HPOSP1 horizontal position of player 1 $D001 53249 } M1PF missile 1 to graphics collisions $D001 53249 HPOSP2 horizontal position of player 2 } $D002 53250 M2PF missile 2 to graphics collisions $D002 53250 HPOSP3 horizontal po}sition of player 3 $D003 53251 M3PF missile 3 to graphics collisions $D003 53251 H}POSM0 horizontal position of missile 0 $D004 53252 P0PF player 0 to graphics collisions $D004 53252 } HPOSM1 horizontal position of missile 1 $D005 53253 P1PF player 1 to graphics collisi}ons $D005 53253 HPOSM2 horizontal position of missile 2 $D006 53254 P2PF player 2 }to graphics collisions $D006 53254 HOPSM3 horizontal position of missile 3 $D007 53255  } P3PF player 3 to graphics collisions $D007 53255 SIZEP0 player 0 size $D008 53 }256 M0PL missile 0 to player collisions $D008 53256 SIZEP1 player 1 size  } $D009 53257 M1PL missile 1 to player collisions $D009 53257 SIZEP2 playe }r 2 size $D00A 53258 M2PL missile 2 to player collisions $D00A 53258  } SIZEP3 player 3 size $D00B 53259 M3PL missile 3 to player collisions $D00B} 53259 SIZEM missile size $D00C 53260 P0PL player 0 to player co}llisions $D00C 53260 GRAFP0 player 0 graphics $D00D 53261 P1PL pl}ayer 1 to player collisions $D00D 53261 GRAFP1 player 1 graphics $D00E 53262 } P2PL player 2 to player collisions $D00E 53262 GRAFP2 player 2 graphics $}D00F 53263 P3PL player 3 to player collisions $D00F 53263 GRAFP3 player 3 graphics} $D010 53264 TRIG0 joystick trigger 0 $D010 53264 STRIG0 $0284 644 GRAFM} missile graphics $D011 53265 TRIG1 joystick trigger 1 $D011 53265 STRI}G1 $0285 645 COLPM0 color/brightness, player/missile 0 $D012 53266 PCOLR0 $02C0 704 TRIG2 joystick trigger 2 } $D012 53266 STRIG2 $0286 646 COLPM1 color/brightness, player/missile 1 $D013 53267 PCOLR1 $02C1 705 TRIG3 joystick trig}ger 3 $D013 53267 STRIG3 $0287 647 COLPM2 color/brightness, player/missile 2 $D014 53268 PCOLR2 $02C2 706 P}AL Europe/North America TV indicator $D014 53268 COLPM3 color/brightness, player/missile 3 $D015 53269 }PCOLR3 $02C3 707 COLPF0 Color/brightness of setcolor 0 $D016 53270 COLOR0 $02C4 708 COLPF1 color/brightness of setcolor} 1 $D017 53271 COLOR1 $02C5 709 COLPF2 color/brightness of setcolor 2 $D018 53272 COLOR2 $02C6 710 COLPF3 color/bri}ghtness of setcolor 3 $D019 53273 COLOR3 $02C7 711 COLBK color/brightness of setcolor 4 $D01A 53274 COLOR4 $02C8 71}2 VDELAY vertical delay $D01C 54276 GRACTL graphics control $D01D} 53277 HITCLR clear collisions $D01E 54278 CONSOL [START], [SELECT], [O}PT.], speaker $D01F 53279 AUDF1 Audio frequency 1 control $D200 53760 POT0 ga}me paddle 0 $D200 53760 PADDL0 $0270 624 AUDC1 Audio channel 1 control $D201 53761  } POT1 game paddle 1 $D201 53761 PADDL1 $0271 625 AUDF2 Audio frequency 2 control $!}D202 53762 POT2 game paddle 2 $D202 53762 PADDL2 $0272 626 AUDC2 Audio channel 2 c"}ontrol $D203 53763 POT3 game paddle 3 $D203 53763 PADDL3 $0273 627 AUDF3#} Audio frequency 3 control $D204 53764 POT4 game paddle 4 $D204 53764 PADD$}L4 $0274 628 AUDC3 Audio channel 3 control $D205 53765 POT5 game paddle 5 %} $D205 53765 PADDL5 $0275 629 AUDF4 Audio frequency 4 control $D206 53766 POT6 game paddle 6&} $D206 53766 PADDL6 $0276 630 AUDC4 Audio channel 1 control $D207 53767 P'}OT7 game paddle 7 $D207 53767 PADDL7 $0277 631 ALLPOT game paddle ready indicators $D208 53768 (} AUDCTL general audio control $D208 53768 KBCODE keyboard code )} $D209 53769 CH $O2FC 764 STIMER start timer $D209 53769 RANDOM random nu*}mber generator $D20A 53770 SKREST reset serial port status $D20A 53770 +} POTGO start pot scan sequence $D20B 53771 SEROUT serial port output $D20D 53,}773 SERIN serial port input $D20D 53774 IRQEN interrupt request enable-} (IRQ) $D20E 53774 POKMSK $0010 16 IRQST IRQ status $D20E 53774 SKCTL seria.}l port control $D20F 53775 SSKCTL $0232 563 SKSTAT serial port status $D20F 53775 /} PRIOR p/m priority and GTIA mode $D21B 53275 GPRIOR $026F 623 PORTA port A $D300}0 54016 STICK0 $0278 632 STICK1 $0279 633 PORTB port B 1} $D301 54017 STICK2 $027A 634 STICK3 $027B 635 PACTL p2}ort A control $D302 54018 PBCTL port B control $D303 54019 3} DMACTL Direct Memory access control (DMA) $D400 54272 SDMCTL $022F 559 CHACTL character control 4}$D401 54273 CHART $02F3 755 DLISTL display list pointer low byte $D402 54274 SDLSTL $0230 560 DLISTH display list poi5}nter high byte $D403 54275 SDLSTH $0231 561 HSCROL horizontal scroll $D404 54276 VSCR6}OL vertical scroll $D405 54277 PMBASE player/missile address / 256 $D407 54279 7} CHBASE Address of character set / 256 $D409 54281 CHBAS $O2F4 756 WSYNC wait for horizontal sync 8} $D40A 54282 VCOUNT vertical line counter $D40B 54283 PENH light pen ho9}rizontal position $D40C 54284 LPENH $0234 564 PENV light pen vertical position $D40D 54285 LPENV $0235 565 :}NMIEN non-maskable interrupt enable (NMI)$D40E 54286 NMIRES NMI reset $D40F 54287;} NMIST NMI status $D40F 54287 D:APNDXA.2 $D40F 54287i4 4 1 5 0 5 75 2 4 132SHADOW REGISTER ORDERALPHEBETICAL ORDER Register =} Shadow Name Description >} Address Name Address ---------------------------------------------------------------------- KBCODE?} keyboard code $D209 53769 CH $O2FC 764 CHACTL character control $D401 54273 CHART@} $02F3 755 CHBASE Address of character set / 256 $D409 54281 CHBAS $O2F4 756 COLBK color/brightness of setcolor 4 A} $D01A 53274 COLOR4 $02C8 712 COLPF0 Color/brightness of setcolor 0 $D016 53270 COLOR0 $02C4 708 COLPF1 color/brightneB}ss of setcolor 1 $D017 53271 COLOR1 $02C5 709 COLPF2 color/brightness of setcolor 2 $D018 53272 COLOR2 $02C6 710 COC}LPF3 color/brightness of setcolor 3 $D019 53273 COLOR3 $02C7 711 PRIOR p/m priority and GTIA mode $D21B 53275 GD}PRIOR $026F 623 PENH light pen horizontal position $D40C 54284 LPENH $0234 564 PENV light pen vertical position E} $D40D 54285 LPENV $0235 565 POT0 game paddle 0 $D200 53760 PADDL0 $0270 624 POT1 game paddlF}e 1 $D201 53761 PADDL1 $0271 625 POT2 game paddle 2 $D202 53762 PADDL2 $0272 626G} POT3 game paddle 3 $D203 53763 PADDL3 $0273 627 POT4 game paddle 4 $D204 537H}64 PADDL4 $0274 628 POT5 game paddle 5 $D205 53765 PADDL5 $0275 629 POT6 game paddle 6 I} $D206 53766 PADDL6 $0276 630 POT7 game paddle 7 $D207 53767 PADDL7 $0277 631 COLPM0 color/J}brightness, player/missile 0 $D012 53266 PCOLR0 $02C0 704 COLPM1 color/brightness, player/missile 1 $D013 53267 PCOLR1 $02C1K} 705 COLPM2 color/brightness, player/missile 2 $D014 53268 PCOLR2 $02C2 706 COLPM3 color/brightness, player/missile 3 $D015L} 53269 PCOLR3 $02C3 707 IRQEN interrupt request enable (IRQ) $D20E 53774 POKMSK $0010 16 DLISTH display list pointer M}high byte $D403 54275 SDLSTH $0231 561 DLISTL display list pointer low byte $D402 54274 SDLSTL $0230 560 DMACTL DiN}rect Memory access control (DMA) $D400 54272 SDMCTL $022F 559 SKCTL serial port control $D20F 53775 SSKCTL $O}0232 563 PORTA port A $D300 54016 STICK0 $0278 632 P} STICK1 $0279 633 PORTB port B $D301 54017 STICK2 $027A 634 Q} STICK3 $027B 635 TRIG0 joystick trigger 0 $D010 53264 STRIG0 $0284 644 TRIG1R} joystick trigger 1 $D011 53265 STRIG1 $0285 645 TRIG2 joystick trigger 2 $D012 53266 STRIS}G2 $0286 646 TRIG3 joystick trigger 3 $D013 53267 STRIG3 $0287 647 NUMERICAL ORDERIRQEN interrupT}t request enable (IRQ) $D20E 53774 POKMSK $0010 16 DMACTL Direct Memory access control (DMA) $D400 54272 SDMCTL $022F 5U}59 DLISTL display list pointer low byte $D402 54274 SDLSTL $0230 560 DLISTH display list pointer high byte $D403 5V}4275 SDLSTH $0231 561 SKCTL serial port control $D20F 53775 SSKCTL $0232 563 PENH light pen horizontal poW}sition $D40C 54284 LPENH $0234 564 PENV light pen vertical position $D40D 54285 LPENV $0235 565 PRIOR p/m X}priority and GTIA mode $D21B 53275 GPRIOR $026F 623 POT0 game paddle 0 $D200 53760 PADDL0 $02Y}70 624 POT1 game paddle 1 $D201 53761 PADDL1 $0271 625 POT2 game paddle 2 $D2Z}02 53762 PADDL2 $0272 626 POT3 game paddle 3 $D203 53763 PADDL3 $0273 627 POT4 game paddle 4 [} $D204 53764 PADDL4 $0274 628 POT5 game paddle 5 $D205 53765 PADDL5 $0275 629 POT6 \}game paddle 6 $D206 53766 PADDL6 $0276 630 POT7 game paddle 7 $D207 53767 PADDL7]} $0277 631 PORTA port A $D300 54016 STICK0 $0278 632 ^} STICK1 $0279 633 PORTB port B $D301 54017 STICK2 $027A 634 _} STICK3 $027B 635 TRIG0 joystick trigger 0 $D010 53264 STRIG0 $0284 644 TRI`}G1 joystick trigger 1 $D011 53265 STRIG1 $0285 645 TRIG2 joystick trigger 2 $D012 53266 STa}RIG2 $0286 646 TRIG3 joystick trigger 3 $D013 53267 STRIG3 $0287 647 COLPM0 color/brightness, player/missib}le 0 $D012 53266 PCOLR0 $02C0 704 COLPM1 color/brightness, player/missile 1 $D013 53267 PCOLR1 $02C1 705 COLPM2 color/brighc}tness, player/missile 2 $D014 53268 PCOLR2 $02C2 706 COLPM3 color/brightness, player/missile 3 $D015 53269 PCOLR3 $02C3 707 d}COLPF0 Color/brightness of setcolor 0 $D016 53270 COLOR0 $02C4 708 COLPF1 color/brightness of setcolor 1 $D017 5327e}1 COLOR1 $02C5 709 COLPF2 color/brightness of setcolor 2 $D018 53272 COLOR2 $02C6 710 COLPF3 color/brightness of setcolf}or 3 $D019 53273 COLOR3 $02C7 711 COLBK color/brightness of setcolor 4 $D01A 53274 COLOR4 $02C8 712 CHACTL charactg}er control $D401 54273 CHART $02F3 755 CHBASE Address of character set / 256 $D409 54281 CHBAS $O2F4 q}B.OSEQU LSTB?APNDXA 1 B? APNDXA B/qCIOMAC LIBB GRAFMAC LIBBAPNDXC B-<APNDXA 2 BKrAPNDXB BEAPNDXB 1 B#APNDXB 2 BSOUNDMACLIBB0FPMAC LIBB<README 756 KBCODE keyboard code $D209 53769 CH $O2FC 764 DER Register M8 4 1 5 0 4 76 2 8 132B-@27EAPPENDIX BOPERATING SYSTEM EQUATES0100 ;0101 ; ATARI 80s}0 EQUATE LISTING0102 ;0103 ;0104 ;0105 ;This listing is based on the original release of Operating System,0106 ;version t}A. The vectors shown here were not changed in version B.0107 ;New equates for XL and XE models are included and noted. Chau}nges0108 ;from version B to XL/XE are also noted.0109 ;0110 ;Most of the equate names given below are the official Atari0v}111 ;names. They are in common use but are not mandatory.0112 ;0113 ;0114 ; DEVICE NAMES0115 ;0116 ;0117 ;SCREDTw} = "E" SCREEN EDITOR0118 ;KBD = "K" KEYBOARD0119 ;DISPLY = "S" DISPLAY0120 ;PRINTR = "P" PRINTER0121 ;CASSET =x} "C" CASSETTE0122 ;DISK = "D" DISK DRIVE0123 ;0124 ;0125 ;0126 ; STATUS CODES 0127 ;0128 ;0129 SUCCES =y} $01 10130 BRKABT = $80 128 BREAK KEY ABORT0131 PRVOPN = $82 130 IOCB ALREADY OPEN0132 NONDEV = $82 z}130 NONEXISTANT DEVICE0133 WRONLY = $83 131 OPENED FOR WRITE ONLY0134 NVALID = $84 132 INVALID COMMAND0135 NOTOP{}N = $85 133 DEVICE OR FILE NOT OPEN0136 BADIOC = $86 134 INVALID IOCB NUMBER0137 RDONLY = $87 135 OPENED FOR|} READ ONLY0138 EOFERR = $88 136 END OF FILE0139 TRNRCD = $89 137 TRUNCATED RECORD0140 TIMOUT = $8A 138 PERI}}PHERAL TIME OUT0141 DNACK = $8B 139 DEVICE DOES NOT ACKNOWLEDGE0142 FRMERR = $8C 140 SERIAL BUS FRAMING ERROR01~}43 CRSROR = $8D 141 CURSOR OUT OF RANGE0144 OVRRUN = $8E 142 SERIAL BUS DATA OVERRUN0145 CHKERR = $8F 143 SE}RIAL BUS CHECKSUM ERROR0146 DERROR = $90 144 PERIPHERAL DEVICE ERROR0147 BADMOD = $91 145 NON EXISTANT SCREEN MOD}E0148 FNCNOT = $92 146 FUNCTION NOT IMPLEMENTED0149 SCRMEM = $93 147 NOT ENOUGH MEMORY FOR SCREEN MODE0150 ;015}1 ;0152 ;0153 ;0154 ; COMMAND CODES FOR CIO0155 ;0156 ;0157 OPEN = $03 30158 OPREAD = $04 4 OPEN FOR }INPUT0159 GETREC = $05 5 GET RECORD0160 OPDIR = $06 6 OPEN TO DISK DIRECTORY0161 GETCHR = $07 7 GET }BYTE0162 OWRITE = $08 8 OPEN FOR OUTPUT0163 PUTREC = $09 9 WRITE RECORD0164 APPEND = $09 9 OPEN TO AP}PEND TO END OF DISK FILE0165 MXDMOD = $10 16 OPEN TO SPLIT SCREEN (MIXED MODE)0166 PUTCHR = $0B 11 PUT-BYTE016}7 CLOSE = $0C 120168 OUPDAT = $0C 12 OPEN FOR INPUT AND OUTPUT AT THE SAME TIME0169 STATUS = $0D 130170} SPECIL = $0E 14 BEGINNING OF SPECIAL COMMANDS0171 DRAWLN = $11 17 SCREEN DRAW0172 FILLIN = $12 18 SCREEN} FILL0173 RENAME = $20 320174 INSCLR = $20 32 OPEN TO SCREEN BUT DON'T ERASE0175 DELETE = $21 330176 DF}RMAT = $21 33 FORMAT DISK (RESIDENT DISK HANDLER (RDH))0177 LOCK = $23 350178 UNLOCK = $24 360179 POIN}T = $25 370180 NOTE = $26 380181 PTSECT = $50 80 RDH PUT SECTOR0182 GTSECT = $52 82 RDH GET SEC}TOR0183 DSTAT = $53 83 RDH GET STATUS0184 PSECTV = $57 87 RDH PUT SECTOR AND VERIFY0185 NOIRG = $80 128} NO GAP CASSETTE MODE0186 CR = $9B 155 CARRIAGE RETURN (EOL)0187 ;0188 IOCBSZ = $10 16 IOCB SIZE0189 MAXIO}C = $80 128 MAX IOCB BLOCK SIZE0190 IOCBF = $FF 255 IOCB FREE0191 ;0192 LEDGE = $02 2 DEFAULT LEFT MARG}IN0193 REDGE = $27 39 DEFAULT RIGHT MARGIN0194 ;0195 ; OS VARIABLES0196 ;0197 ; PAGE 00198 ;0199} LINZBS = $00 0 (800) FOR ORIGINAL DEBUGGER0200 ; $00 0 (XL) RESERVED0201 NGFLAG = $01 1 (XL) F}OR POWER-UP SELF TEST0202 CASINI = $02 20203 RAMLO = $04 4 POINTER FOR SELF TEST0204 TRAMSZ = $06 6 }TEMPORARY RAM SIZE0205 TSTDAT = $07 7 TEST DATA0206 WARMST = $08 80207 BOOT? = $09 9 SUCCESSFUL BOOT} FLAG0208 DOSVEC = $0A 10 PROGRAM RUN VECTOR0209 DOSINI = $0C 12 PROGRAM INITIALIZATION0210 APPMHI = $0E } 14 DISPLAY LOW LIMIT0211 POKMSK = $10 16 IRQ ENABLE FLAGS0212 BRKKEY = $11 17 FLAG0213 RTCLOK = $12 18 }3 BYTES, MSB FIRST0214 BUFADR = $15 21 INDIRECT BUFFER ADDRESS0215 ICCOMT = $17 23 COMMAND FOR VECTOR0216 DSKF}MS = $18 24 DISK FILE MANAGER POINTER0217 DSKUTL = $1A 26 DISK UTILITY POINTER (DUP.SYS)0218 PTIMOT = $1C } 28 (800) PRINTER TIME OUT REGISTER0219 ABUFPT = $1C 28 (XL) RESERVED0220 PBPNT = $1D 29 (800) PRINTER BUFFER }POINTER0221 ; $1D 29 (XL) RESERVED0222 PBUFSZ = $1E 30 (800) PRINTER BUFFER SIZE0223 ; $1E } 30 (XL) RESERVED0224 PTEMP = $1F 31 (800) TEMPORARY REGISTER0225 ; $1F 31 (XL) RESERVED0226 ZIOCB = }$20 32 ZERO PAGE IOCB0227 ICHIDZ = $20 32 HANDLER INDEX NUMBER (ID)0228 ICDNOZ = $21 33 DEVICE NUMBER022}9 ICCOMZ = $22 34 COMMAND0230 ICSTAZ = $23 35 STATUS0231 ICBALZ = $24 36 BUFFER POINTER LOW BYTE0232 ICB}AHZ = $25 37 BUFFER POINTER HIGH BYTE0233 ICPTLZ = $26 38 PUT ROUTINE POINTER LOW0234 ICPTHZ = $27 39 PUT} ROUTINE POINTER HIGH0235 ICBLLZ = $28 40 BUFFER LENGTH LOW0236 ICBLHZ = $29 410237 ICAX1Z = $2A 42 AUXI}LIARY INFORMATION BYTE 10238 ICAX2Z = $2B 430239 ICSPRZ = $2C 44 TWO SPARE BYTES (CIO USE)0240 ICIDNO = $2E } 46 IOCB NUMBER X 160241 CIOCHR = $2F 47 CHARACTER BYTE FOR CURRENT OPERATION0242 ;0243 STATUS = $30 48 STA}TUS STORAGE0244 CHKSUM = $31 49 SUM WITH CARRY ADDED BACK0245 BUFRLO = $32 50 DATA BUFFER LOW BYTE0246 BUFRHI }= $33 510247 BFENLO = $34 52 ADDRESS OF LAST BUFFER BYTE +1 (LOW)0248 BFENHI = $35 530249 CRETRY = $36 } 54 (800) NUMBER OF COMMAND FRAME RETRIES0250 LTEMP = $36 54 (XL) LOADER TEMPORARY STORAGE, 2 BYTES0251 DRETRY =} $37 55 (800) DEVICE RETRIES0252 BUFRFL = $38 56 BUFFER FULL FLAG0253 RECVDN = $39 57 RECEIVE DONE FLAG0}254 XMTDON = $3A 58 TRANSMISSION DONE FLAG0255 CHKSNT = $3B 59 CHECKSUM-SENT FLAG0256 NOCKSM = $3C 60 CHE}CKSUM-DOES-NOT-FOLLOW-DATA FLAG0257 BPTR = $3D 610258 FTYPE = $3E 620259 FEOF = $3F 630260 FREQ }= $40 640261 ;0262 SOUNDR = $41 65 0=QUIET I/O0263 CRITIC = $42 66 CRITICAL FUNCTION FLAG, NO DEFFERED V}BI0264 FMSZPG = $43 67 DOS ZERO PAGE, 7 BYTES0265 CKEY = $4A 74 (800) START KEY FLAG0266 ZCHAIN = $4A }74 (XL) HANDLER LOADER TEMP, 2 BYTES0267 CASSBT = $4B 75 (800) CASSETTE BOOT FLAG0268 DSTAT = $4C 76 DISPLAY S}TATUS0269 ;0270 ATRACT = $4D 770271 DRKMSK = $4E 78 ATTRACT MASK0272 COLRSH = $4F 79 ATTRACT COLOR SHIF}TER (EORed WITH GRAPHICS)0273 ;0274 TMPCHR = $50 800275 HOLD1 = $51 810276 LMARGN = $52 82 SCREEN LEFT} MARGIN REGISTER0277 RMARGN = $53 83 SCREEN RIGHT MARGIN0278 ROWCRS = $54 84 CURSOR ROW0279 COLCRS = $55 } 85 CURSOR COLUMN, 2 BYTES0280 DINDEX = $57 87 DISPLAY MODE0281 SAVMSC = $58 88 SCREEN ADDRESS0282 OLDROW = $5}A 90 CURSOR BEFORE DRAW OR FILL0283 OLDCOL = $5B 910284 OLDCHR = $5D 93 DATA UNDER CURSOR0285 OLDADR = $}5E 94 CURSOR ADDRESS0286 NEWROW = $60 96 (800) DRAWTO DESTINATION0287 FKDEF = $60 96 (XL) FUNCTION KEY D}EFINATION POINTER0288 NEWCOL = $61 97 (800) DRAWTO DESTINATION, 2 BYTES0289 PALNTS = $62 98 (XL) EUROPE/NORTH A}MERICA TV FLAG0290 LOGCOL = $63 99 LOGICAL LINE COLUMN POINTER0291 MLTTMP = $66 1020292 OPNTMP = $66 102 T}EMPORARY STORAGE FOR CHANNEL OPEN0293 SAVADR = $68 1040294 RAMTOP = $6A 106 START OF ROM (END OF RAM + 1), HIGH B}YTE ONLY0295 BUFCNT = $6B 107 BUFFER COUNT0296 BUFSTR = $6C 108 POINTER USED BY EDITOR0297 BITMSK = $6E 110} POINTER USED BY EDITOR0298 SHFAMT = $6F 1110299 ROWAC = $70 1120300 COLAC = $72 1140301 ENDPT = $74 } 1160302 DELTAR = $76 1180303 DELTAC = $77 1190304 ROWINC = $79 121 (800)0305 KEYDEF = $79 121 (XL)} KEY DEFINATION POINTER, 2 BYTES0306 COLINC = $7A 122 (800)0307 SWPFLG = $7B 123 NON 0 IF TEXT AND REGULAR RAM IS} SWAPPED0308 HOLDCH = $7C 124 CH MOVED HERE BEFORE CTRL AND SHIFT0309 INSDAT = $7D 1250310 COUNTR = $7E 126}0311 ;0312 ZROFRE = $80 128 FREE ZERO PAGE, 84 BYTES0313 FPZRO = $D4 212 FLOATING POINT RAM, 43 BYTES0314 FR0 } = $D4 212 FP REGISTER 00315 FRE = $DA 2180316 FR1 = $E0 224 FP REGISTER 10317 FR2 = $E6 23}0 FP REGISTER 20318 FRX = $EC 236 SPARE0319 EEXP = $ED 237 VALUE OF E0320 NSIGN = $ED 237 SIGN OF FP }NUMBER0321 ESIGN = $EF 239 SIGN OF FP EXPONENT0322 FCHFLG = $F0 240 FIRST CHARACTER FLAG0323 DIGRT = $F1 }241 NUMBER OF DIGITS RIGHT OF DECIMAL POINT0324 CIX = $F2 242 INPUT INDEX0325 INBUFF = $F3 243 POINTER TO ASCI}I FP NUMBER0326 ZTEMP1 = $F5 2450327 ZTEMP4 = $F7 2470328 ZTEMP3 = $F9 2490329 DEGFLG = $FB 2510330 }RADFLG = $FB 251 0=RADIANS, 6=DEGREES0331 FLPTR = $FC 252 POINTER TO BCD FP NUMBER0332 FPTR2 = $FE 254033}3 ;0334 ;0335 ; PAGE 10336 ;0337 ; 65O2 STACK0338 ;0339 ;D:APNDXB.1ER0332 FPTR2 = $FE 254033\0340 ;0341 ;0342 ; PAGE 20343 ;0344 ;0345 INTABS = $0200 512 INTERRUPT RAM0346 VDSLST = $0200 512 NMI VE!}CTOR0347 VPRCED = $0202 514 PROCEED LINE IRQ VECTOR0348 VINTER = $0204 516 INTERRUPT LINE IRQ VECTOR0349 VBREAK = $0!}206 5180350 VKEYBD = $0208 5200351 VSERIN = $020A 522 SERIAL INPUT READY IRQ0352 VSEROR = $020C 524 SERIAL OUT!}PUT READY IRQ0353 VSEROC = $020E 526 SERIAL OUTPUT COMPLETE IRQ0354 VTIMR1 = $0210 528 TIMER 1 IRQ0355 VTIMR2 = $021!}2 530 TIMER 2 IRQ0356 VTIMR4 = $0214 532 TIMER 4 IRQ0357 VIMIRQ = $0216 534 IRQ VECTOR0358 CDTMV1 = $0218 536 !}DOWN TIMER 10359 CDTMV2 = $021A 538 DOWN TIMER 20360 CDTMV3 = $021C 540 DOWN TIMER 30361 CDTMV4 = $021E 542 DOWN !}TIMER 40362 CDTMV5 = $0220 544 DOWN TIMER 50363 VVBLKI = $0222 5460364 VVBLKD = $0224 5480365 CDTMA1 = $0226 !}550 DOWN TIMER 1 JSR ADDRESS0366 CDTMA2 = $0228 552 DOWN TIMER 2 JSR ADDRESS0367 CDTMF3 = $022A 554 DOWN TIMER 3 FLAG!}0368 SRTIMR = $022B 555 REPEAT TIMER0369 CDTMF4 = $022C 556 DOWN TIMER 4 FLAG0370 INTEMP = $022D 557 IAN'S TEMP0!}371 CDTMF5 = $022E 558 DOWN TIMER FLAG 50372 SDMCTL = $022F 559 DMACTL SHADOW0373 SDLSTL = $0230 560 DISPLAY LIST !}POINTER0374 SSKCTL = $0232 562 SKCTL SHADOW0375 ; $0233 563 (800) UNLISTED0376 LCOUNT = $0233 563 (XL) LOA!}DER TEMP0377 LPENH = $0234 564 LIGHT PEN HORIZONTAL0378 LPENV = $0235 565 LIGHT PEN VERTICAL0379 ; $0236 !} 566 2 SPARE BYTES0380 ; $0238 568 (800) SPARE, 2 BYTES0381 RELADR = $0238 568 (XL) LOADER0382 CDEVIC = $023A!} 570 DEVICE COMMAND FRAME BUFFER0383 CAUX1 = $023C 572 DEVICE COMMAND AUX 10384 CAUX2 = $023D 573 DEVICE COMMAND!} AUX 20385 TEMP = $023E 574 TEMPORARY STORAGE0386 ERRFLG = $023F 575 DEVICE ERROR FLAG (EXCEPT TIMEOUT)0387 DFLAGS!} = $0240 576 FLAGS FROM DISK SECTOR 10388 DBSECT = $0241 577 NUMBER OF BOOT DISK SECTORS0389 BOOTAD = $0242 578 BO!}OT LOAD ADDRESS POINTER0390 COLDST = $0244 580 COLD START FLAG, 1 = COLD START IN PROGRESS0391 ; $0245 581 (80!}0) SPARE0392 RECLEN = $0245 581 (XL) LOADER0393 DSKTIM = $0246 582 (800) DISK TIME OUT REGISTER0394 ; $0246 !} 582 (XL) RESERVED, 39 BYTES0395 LINBUF = $0247 583 (800) CHARACTER LINE BUFFER, 40 BYTES0396 CHSALT = $026B 619 (XL!}) CHARACTER SET POINTER0397 VSFLAG = $026C 620 (XL) FINE SCROLL TEMPORARY0398 KEYDIS = $026D 621 (XL) KEYBOARD DISABL!}E0399 FINE = $026E 622 (XL) FINE SCROLL FLAG0400 GPRIOR = $026F 623 P/M PRIORITY AND GTIA MODES0401 GTIA = $026F!} 6230402 PADDL0 = $0270 624 (XL) 3 MORE PADDLES, (800) 6 MORE PADDLES0403 STICK0 = $0278 632 (XL) 1 MORE STICK, (8!}00) 3 MORE STICKS0404 PTRIG0 = $027C 636 (XL) 3 MORE PADDLE TRIGGERS, (800) 6 MORE0405 STRIG0 = $0284 644 (XL) 1 MORE!} STICK TRIGGER, (800) 3 MORE0406 CSTAT = $0288 648 (800)0407 WMODE = $0289 6490408 BLIM = $028A 6500409 ; !} $028B 651 5 SPARE BYTES0410 NEWADR = $028E 654 (XL) LOADER RAM0411 TXTROW = $0290 6560412 TXTCOL = $0291 !} 6570413 TINDEX = $0293 659 TEXT INDEX0414 TXTMSC = $0294 6600415 TXTOLD = $0296 662 OLD ROW AND OLD COL FOR TEXT!}, 2 BYTES0416 ; $0298 664 4 SPARE BYTES0417 TMPX1 = $029C 668 (800)0418 CRETRY = $029C 668 (XL) NUMBER O!}F COMMAND FRAME RETRIES0419 SUBTMP = $029E 6700420 HOLD2 = $029F 6710421 DMASK = $02A0 6720422 TMPLBT = $02A1 !} 6730423 ESCFLG = $02A2 6740424 TABMAP = $02A3 675 15 BYTE BIT MAP FOR TAB SETTINGS0425 LOGMAP = $02B2 690 4 BY!}TE LOGICAL LINE START BIT MAP0426 INVFLG = $02B6 6940427 FILFLG = $02B7 695 FILL DIRING DRAW FLAG0428 TMPROW = $02B8!} 6960429 TMPCOL = $02B9 6970430 SCRFLG = $02BB 699 SCROLL FLAG0431 HOLD4 = $02BC 7000432 HOLD5 = $02BD 7!}01 (800)0433 DRETRY = $02BD 701 (XL) NUMBER OF DEVICE RETRIES0434 SHFLOC = $02BE 7020435 BOTSCR = $02BF 703 24 N!}ORM, 4 SPLIT0436 PCOLR0 = $02C0 704 3 MORE PLAYER COLOR REGISTERS0437 COLOR0 = $02C4 708 4 MORE GRAPHICS COLOR REGIST!}ERS0438 ; $02C9 713 (800) 23 SPARE BYTES0439 RUNADR = $02C9 713 (XL) LOADER VECTOR0440 HIUSED = $02CB 715 !}(XL) LOADER VECTOR0441 ZHIUSE = $02CD 717 (XL) LOADER VECTOR0442 GBYTEA = $02CF 719 (XL) LOADER VECTOR0443 LOADAD = !}$02D1 721 (XL) LOADER VECTOR0444 ZLOADA = $02D3 723 (XL) LOADER VECTOR0445 DSCTLN = $02D5 725 (XL) DISK SECTOR SIZ!}0446 ACMISR = $02D7 727 (XL) RESERVED0447 KRPDER = $02D9 729 (XL) KEY AUTO REPEAT DELAY0448 KEYREP = $02DA 730 (X!}L) KEY AUTO REPEAT RATE0449 NOCLIK = $02DB 731 (XL) KEY CLICK DISABLE0450 HELPFG = $02DC 732 (XL) HELP KEY FLAG0451 !}DMASAV = $02DD 733 (XL) SDMCTL (DMA) SAVE0452 PBPNT = $02DE 734 (XL) PRINTER BUFFER POINTER0453 PBUFSZ = $02DF 73!}5 (XL) PRINTER BUFFER SIZE0454 GLBABS = $02E0 736 GLOBAL VARIABLES, 4 SPARE BYTES0455 RAMSIZ = $02E4 740 PERMANENT ST!}ART OF ROM POINTER0456 MEMTOP = $02E5 741 END OF FREE RAM0457 MEMLO = $02E7 7430458 ; $02E9 745 (800) SPA!}RE0459 HNDLOD = $02E9 745 (XL) HANDLER LOADER FLAG0460 DVSTAT = $02EA 746 DEVICE STATUS BUFFER, 4 BYTES0461 CBAUDL =!} $02EE 750 CASSETTE BAUD RATE, 2 BYTES0462 CRSINH = $02F0 752 1 = INHIBIT CURSOR0463 KEYDEL = $02F1 753 KEY DELAY !}AND RATE0464 CH1 = $02F2 7540465 CHACT = $02F3 7550466 CHBAS = $02F4 756 CHARACTER SET POINTER0467 NEWROW =!} $02F5 757 (XL) DRAW DESTINATION0468 NEWCOL = $02F6 758 (XL) DRAW DESTINATION0469 ROWINC = $02F8 760 (XL)0470 COL!}INC = $02F9 761 (XL)0471 CHAR = $02FA 7620472 ATACHR = $02FB 763 ATASCII CHARACTER FOR CIO0473 CH = $02FC !} 7640474 FILDAT = $02FC 764 COLOR FOR SCREEN FILL0475 DSPFLG = $02FE 766 DISPLAY CONTROL CHARACTERS FLAG0476 SSFLAG!} = $02FF 767 DISPLAY START/STOP FLAFG0477 ;0478 ;0479 ; PAGE 30480 ;0481 ;0482 ; RESIDENT DISK HANDLER!}/SIO INTERFACE0483 ;0484 DCB = $0300 768 DEVICE CONTROL BLOCK0485 DDEVIC = $0300 7680486 DUNIT = $0301 7690!}487 DCOMND = $0302 7700488 DSTATS = $0303 7710489 DBUFLO = $0304 7720490 DBUFHI = $0305 7730491 DTIMLO = $030!}6 7740492 DBYTLO = $0308 7760493 DBYTHI = $0309 7770494 DAUX1 = $030A 7780495 DAUX2 = $030B 7790496 TIM!}ER1 = $030C 780 INITIAL TIMER VALUE0497 ADDCOR = $030E 782 (800) ADDITION CORRECTION0498 JMPERS = $030E 782 (XL) O!}PTION JUMPERS0499 CASFLG = $030F 783 CASSETTE MODE WHEN SET0500 TIMER2 = $0310 784 FINAL VALUE, TIMERS 1 & 2 DETERMIN!}E BAUD RATE0501 TEMP1 = $0312 7860502 TEMP2 = $0313 787 (XL)0503 TEMP2 = $0314 788 (800)0504 PTIMOT = $0314 !} 788 (XL) PRINTER TIME OUT0505 TEMP3 = $0315 7890506 SAVIO = $0316 790 SAVE SERIAL IN DATA PORT0507 TIMFLG = $031!}7 791 TIME OUT FLAG FOR BAUD RATE CORRECTION0508 STACKP = $0318 792 SIO STACK POINTER SAVE0509 TSTAT = $0319 793 !}TEMPORARY STATUS HOLDER0510 HATABS = $031A 794 HANDLER ADDRESS TABLE, 38 BYTES0511 MAXDEV = $0321 801 MAXIMUM HANDLER!} ADDRESS INDEX0512 PUPBT1 = $033D 829 (XL) POWER-UP/RESET0513 PUPBT2 = $033E 830 (XL) POWER-UP/RESET0514 PUPBT3 = $0!}33F 831 (XL) POWER-UP/RESET0515 ;0516 ;IOCB's0517 ;0518 IOCB = $0340 8320519 ICHID = $0340 8320520 ICDNO =!} $0341 8330521 ICCOM = $0342 8340522 ICSTA = $0343 8350523 ICBAL = $0344 8360524 ICBAH = $0345 837052!}5 ICPTL = $0346 8380526 ICPTH = $0347 8390527 ICBLL = $0348 8400528 ICBLH = $0349 8410529 ICAX1 = $034A !} 8420530 ICAX2 = $034B 8430531 ICAX3 = $034C 8440532 ICAX4 = $034D 8450533 ICAX5 = $034E 8460534 ICAX6!} = $034F 8470535 ; OTHER IOCB's, 112 BYTES0536 PRNBUF = $03C0 960 PRINTER BUFFER, 40 BYTES0537 !}; $03E8 1000 (800) 21 SPARE BYTES0538 SUPERF = $03E8 1000 (XL) SCREEN EDITOR0539 CKEY = $03E9 1001 (XL) STAR!}T KEY FLAG0540 CASSBT = $03EA 1002 (XL) CASSETTE BOOT FLAG0541 CARTCK = $03EB 1003 (XL) CARTRIDGE CHECKSUM0542 ACMVAR !}= $03ED 1005 (XL) RESERVED, 6 BYTES0543 MINTLK = $03F9 1017 (XL) RESERVED0544 GINTLK = $03FA 1018 (XL) CARTRIDGE INTE!}RLOCK0545 CHLINK = $03FB 1019 (XL) HANDLER CHAIN, 2 BYTES0546 CASBUF = $03FD 1021 CASSETTE BUFFER, 131 BYTES TO $047F0"}547 ;0548 ;0549 ; PAGE 40550 ;0551 ;0552 USAREA = $0480 1152 128 SPARE BYTES0553 ;0554 ; SEE APPENDIX C "}FOR PAGES 4 AND 5 USAGE0555 ;0556 ;D:APNDXB.2;0552 USAREA = $0480 1152 128 SPARE BYTES0553 ;0554 ; SEE APPENDIX C 20557 ;0558 ;0559 ; PAGE 50560 ;0561 PAGE5 = $0500 1280 127 FREE BYTES0562 ; $057E 1406 129 FREE BYT&}ES IF FLOATING POINT ROUTINES NOT USED0563 ;0564 ;FLOATING POINT NON-ZERO PAGE RAM, NEEDED ONLY IF FP IS USED0565 ;0566 L&}BPR1 = $057E 1406 LBUFF PREFIX 10567 LBPR2 = $05FE 1534 LBUFF PREFIX 20568 LBUFF = $0580 1408 LINE BUFFER0569 PLY&}ARG = $05E0 1504 POLYNOMIAL ARGUMENTS0570 FPSCR = $05E6 1510 PLYARG+FPREC0571 FPSCR1 = $05EC 1516 FPSCR+FPREC0572 F&}SCR = $05E6 1510 =FPSCR0573 FSCR1 = $05EC 1516 =FPSCR10574 LBFEND = $05FF 1535 END OF LBUFF0575 ;0576 ;0577 ; &} PAGE 60578 ;0579 ;0580 PAGE6 = $0600 1536 256 FREE BYTES0581 ;0582 ;0583 ; PAGE 70584 ;0585 ;0&}586 BOOTRG = $0700 1792 PROGRAM AREA0587 ;0588 ;0589 ; UPPER ADDRESSES0590 ;0591 ;0592 RITCAR = $8000 32768 RA& }M IF NO CARTRIDGE0593 LFTCAR = $A000 40960 RAM IF NO CARTRIDGE0594 C0PAGE = $C000 49152 (800) EMPTY, 4K BYTES0595 C0PAGE& } = $C000 49152 (XL) 2K FREE RAM IF NO CARTRIDGE0596 ; $C800 51200 (XL) START OF OS ROM0597 CHORG2 = $CC00 52224 (& }XL) INTERNATIONAL CHARACTER SET0598 ;0599 ;0600 ; HARDWARE REGISTERS0601 ;0602 ;0603 ; SEE REGISTER LIST FOR MORE& } INFORMATION0604 ;0605 ;0606 HPOSP0 = $D000 532480607 M0PF = $D000 532480608 SIZEP0 = $D008 532560609 M0PL = $D0& }08 532560610 SIZEM = $D00C 532600611 GRAFP0 = $D00D 532610612 GRAFM = $D011 532650613 COLPM0 = $D012 532660614 CO&}LPF0 = $D016 532700615 PRIOR = $D01B 532750616 GTIAR = $D01B 532750617 VDELAY = $D01C 532760618 GRACTL = $D01D 532&}770619 HITCLR = $D01E 532780620 CONSOL = $D01F 532790621 AUDF1 = $D200 537600622 AUDC1 = $D201 537610623 AUDCTL = &}$D208 537680624 RANDOM = $D20A 537700625 IRQEN = $D20E 537740626 SKCTL = $D20F 537750627 PORTA = $D300 540160628&} PORTB = $D301 540170629 PACTL = $D302 540180630 PBCTL = $D303 540190631 DMACLT = $D400 542720632 DLISTL = $D402 &}542740633 HSCROL = $D404 542760634 VSCROL = $D405 542770635 CHBASE = $D409 542810636 WSYNC = $D40A 542820637 VCOUNT&} = $D40B 542830638 NMIEN = $D40E 542860639 ;0640 ; FLOATING POINT MATH ROUTINES0641 ;0642 AFP = $D800 552960643 &}FASC = $D8E6 555260644 IFP = $D9AA 557220645 FPI = $D9D2 557620646 ZFR0 = $DA44 558760647 ZF1 = $DA46 5&}58780648 FSUB = $DA60 559040649 FADD = $DA66 559100650 FMUL = $DADB 560270651 FDIV = $DB28 561040652 PLYEVL &}= $DD40 566400653 FLD0R = $DD89 567130654 FLD0P = $DD8D 567170655 FLD1R = $DD98 567280656 FLD1P = $DD9C 5673206&}57 FSTOR = $DDA7 567430658 FSTOP = $DDAB 567470659 FMOVE = $DDB6 567580660 EXP = $DDC0 567680661 EXP10 = $DDCC&} 567800662 LOG = $DECD 570370663 LOG10 = $DED1 570410664 ;0665 ;0666 ; OPERATING SYSTEM0667 ;0668 ;0669 &}; MODULE ORIGIN TABLE0670 ;0671 CHORG = $E000 57344 CHARACTER SET, 1K0672 VECTBL = $E400 58368 VECTOR TABLE0673 VC&}TABL = $E480 58496 RAM VECTOR INITIAL VALUE TABLE0674 CIOORG = $E4A6 58534 CIO HANDLER0675 INTORG = $E6D5 59093 INTERRUP&}T HANDLER0676 SIOORG = $E944 59716 SIO DRIVER0677 DSKORT = $EDEA 60906 DISK HANDLER0678 PRNORG = $EE78 61048 PRINTER HA&}NDLER0679 CASORG = $EE78 61048 CASSETTE HANDLER0680 MONORG = $F0E3 61667 MONITOR/POWER UP MODULE0681 KBDORG = $F3E4 624&}36 KEYBOARD/DISPLAY HANDLER0682 ;0683 ;0684 ; VECTOR TABLE, CONTAINS ADDRESSES OF CIO ROUTINES IN THE0685 ; FOLLOWING O&}RDER. THE ADDRESSES IN THE TABLE ARE TRUE ADDRESSES-10686 ;0687 ; ADDRESS + 0 OPEN0688 ; + 2 CLOSE0689 ; &} + 4 GET0690 ; + 6 PUT0691 ; + 8 STATUS0692 ; + A SPECIAL0693 ; + C JMP TO I& }NITIALIZATION0694 ; + F NOT USED0695 ;0696 ;0697 EDITRV = $E400 58368 EDITOR0698 SCRENV = $E410 58384 SCREEN&!}0699 KEYBDV = $E420 58400 KEYBOARD0700 PRINTV = $E430 58416 PRINTER0701 CASETV = $E440 58432 CASSETTE0702 ;0703 ; &"} ROM VECTORS0704 ;0705 DSKINV = $E453 584510706 CIOV = $E456 584540707 SIOV = $E459 584570708 SYSVBV = $E45F &#}584630709 VBIVAL = $E460 58464 ADR AT VVBLKI0710 XITVBV = $E462 58466 EXIT VBI0711 VBIXVL = $E463 58467 ADR AT VVBLKD0&$}712 BLKBDV = $E471 58481 MEMO PAD MODE0713 WARMSV = $E474 584840714 COLDSV = $E477 58487 = $E463 58467 ADR AT VVBLKD0$^10 JSR %1 ; FP operation addr1920 BCC @B11930 JMP FPERROR1940 @B1 @FP2A 1950 .IF %0<41960 .&}@FP2MEM %21970 .ELSE 1980 @FP2MEM %41990 .ENDIF 2000 .ENDM 2010 ;2020 ;2030 ;2040 ; MACRO: A.'}DD2050 ;2060 ; FORM: ADD buffer1,buffer2 [,buffer3]2070 ;2080 ; adds buffers 1 and 22090 ; uses the macro @MATH2100 ; .(}see @MATH for details2110 ;2120 .MACRO ADD 2130 .IF %0=22140 @MATH FADD,%1,%22150 .ELSE 2160 .)} @MATH FADD,%1,%2,%32170 .ENDIF 2180 .ENDM 2190 ;2200 ;2210 ;2220 ; MACRO: SUB2230 ;2240 ; FORM: SUB (a.*}s in ADD)2250 ;2260 ; subtracts buffer2 from buffer12270 ; see @MATH for details2280 ;2290 .MACRO SUB 2300 .IF .+}%0=22310 @MATH FSUB,%1,%22320 .ELSE 2330 @MATH FSUB,%1,%1,%32340 .ENDIF 2350 .ENDM 2360.,} ;2370 ;2380 ;2390 ; MACRO: MUL2400 ;2410 ; FORM: MUL (as in ADD)2420 ;2430 ; multiplies buffer1 by buffer22440 ; se.-}e @MATH for details2450 ;2460 .MACRO MUL 2470 .IF %0=22480 @MATH FMUL,%1,%22490 .ELSE 2500 ..} @MATH FMUL,%1,%1,%32510 .ENDIF 2520 .ENDM 2530 ;2540 ;2550 ;2560 ; MACRO: DIV2570 ;2580 ; FORM: DIV (as ./}in ADD)2590 ;2600 ; divides buffer1 by buffer22610 ; see @MATH for details2620 ;2630 .MACRO DIV 2640 .IF %0=22.0}650 @MATH FDIV,%1,%22660 .ELSE 2670 @MATH FDIV,%1,%1,%32680 .ENDIF 2690 .ENDM 2700 ;271.1}0 ;2720 ;2730 ; MACRO: LOG2740 ;2750 ; FORM: LOG buffer1 [,buffer2]2760 ;2770 ; takes the natural logarithm2780 ; of .2}buffer1 and stores it in2790 ; buffer2 if no buffer2 is2800 ; specified then the result is2810 ; put back in buffer1282.3}0 ;2830 .MACRO LOG 2840 @A2FP %12850 JSR LOG ;[DECD]2860 .IF %0=22870 @FP2MEM %22880 .4} .ELSE 2890 @FP2MEM %12900 .ENDIF 2910 .ENDM 2920 ;2930 ;2940 ;2950 ; MACRO: CLOG2960 ;2970 ; FO.5}RM: CLOG buffer1 [,buffer2]2980 ;2990 ; takes the base 10 logarithm3000 ; of buffer1 as in LOG3010 ;3020 .MACRO CLOG.6} 3030 @A2FP %13040 JSR LOG10 ;[DED1]3050 .IF %0=23060 @FP2MEM %23070 .ELSE 3080 @F.7}P2MEM %13090 .ENDIF 3100 .ENDM 3110 ;3120 ;3130 ;3140 ; MACRO: LET3150 ;3160 ; FORM: LET label,string317.8}0 ;3180 ; asigns a string or floating3190 ; point number to a label3200 ; FP numbers are up to 10 bytes3210 ; either must.9} be in quotes3220 ;3230 .MACRO LET 3240 SAVEPC =*3250 *= %13260 .BYTE %23270 *= SAVEPC3280 .;}TA COLCRS3160 LDA # >%13170 STA COLCRS+13180 LDA #%23190 STA ROWCRS3200 .ENDM 3210 ;3220 ;3230 ; } .ENDM 3290 ;3300 ;3310 ;ACRO LET 3240 SAVEPC =*3250 *= %13260 .BYTE %23270 *= SAVEPC3280 , A voluntary payment of $2.50 isrequested for this disk. I will giveany technical support I can to thosewho have paid thi2=}s fee and include aS.A.S.E. with their questions. Writeto:Bob DuHamel6915 Casselberry WaySan Diego, CA 92119This di2>}sk contains appendices for areference manual for Atari 8 bitcomputers. The manual is written forthe Atari 800 but updates2?} for XL/XEmodels are included. The appendicesare an equate listing and registerlists in several orders. Alsoincluded is2@} a macro library forMAC65. These macroes perform manyfunctions with Atari-BASIC-likecommands. Enter these files intoMAC2A}65 then save them to convert themto the proper format. To followtraditional protocol, rename thesaved version of OSEQU.LS2B}T toOSEQU.M65. When using the macroes donot use the pound symbol (#) beforechannel numbers. Otherwise themacro calls ar2C}e identical to theequivalent BASIC commands.The files were written withATARIWRITER and for an Epson MX80.You should be a2D}ble to load them intoanother word processor and changethem to work with it and a differentprinter.If you have ATARIWRITE2E}R and an Epsoncompatible printer, load and printeach APNDX file (APNDXA - APNDXC).Ignore the files with extensions(i.e. A2F}PNDXA.1) as they will auto-matically chain to the APNDX files.Change the following codes for adifferent word processor or2G} printer.[CONTROL][O]27E starts NLQ mode " [O]27F stops NLQ mode " [O]27G starts BOLD mode " [O]27H s2H}tops BOLD mode " [V]D:... chains new file " [E] page eject " [L] left margin " [R] ri2I}ght margin " [T] top margin (half " [B] bottom margin lines) " [Y] page length " "2J} [C] center " [C][C] right justifyFor a copy of the Atari 8bit reference manual write to:C & T ComputerAct2K}iveP.O. Box 893Clinton, OK 73601ght justifyFor a copy of the Atari 8bit reference manual write to:C & T ComputerAct0$