chipty5/c64.asm

483 lines
31 KiB
NASM

;
; Commodore 64 specific constants and memory addresses
;
.proff
.cpu "6502"
io .namespace
.include "vic2.asm"
.include "sid.asm"
.virtual $d000
vic2 .dstruct _vic2
.endvirtual
.virtual $d400
sid .dstruct _sid
.endvirtual
.endnamespace
BASIC_START = $0801
BTOK_SYS = $9e
SCREEN_RAM = $0400
; Kernal routines
ACPTR = $ffa5 ; Input byte from serial port
CHKIN = $ffc6 ; Open channel for input
CHKOUT = $ffc9 ; Open a channel for output
CHRIN = $ffcf ; Get a character from the input channel
CHROUT = $ffd2 ; Output a character
CIOUT = $ffa8 ; Transmit a byte over the serial bus
CINT = $ff81 ; Initialize the screen editor and VIC-II Chip
CLALL = $ffe7 ; Close all open files
CLOSE = $ffc3 ; Close a logical file
CLRCHN = $ffcc ; Clear all I/O channels
GETIN = $ffe4 ; Get a character
IOBASE = $fff3 ; Define I/O memory page
IOINIT = $ff84 ; Initialize I/O devices
LISTEN = $ffb1 ; Command a device on the serial bus to listen
LOAD = $ffd5 ; Load RAM from device
MEMBOT = $ff9c ; Set bottom of memory
MEMTOP = $ff99 ; Set the top of RAM
OPEN = $ffc0 ; Open a logical file
PLOT = $fff0 ; Set or retrieve cursor location
RAMTAS = $ff87 ; Perform RAM test
RDTIM = $ffde ; Read system clock
READST = $ffb7 ; Read status word
RESTOR = $ff8a ; Set the top of RAM
SAVE = $ffd8 ; Save memory to a device
SCNKEY = $ff9f ; Scan the keyboard
SCREEN = $ffed ; Return screen format
SECOND = $ff93 ; Send secondary address for LISTEN
SETLFS = $ffba ; Set up a logical file
SETMSG = $ff90 ; Set system message output
SETNAM = $ffbd ; Set up file name
SETTIM = $ffdb ; Set the system clock
SETTMO = $ffa2 ; Set IEEE bus card timeout flag
STOP = $ffe1 ; Check if STOP key is pressed
TALK = $ffb4 ; Command a device on the serial bus to talk
TKSA = $ff96 ; Send a secondary address to a device commanded to talk
UDTIM = $ffea ; Update the system clock
UNLSN = $ffae ; Send an UNLISTEN command
UNTLK = $ffab ; Send an UNTALK command
VECTOR = $ff8d ; Manage RAM vectors
; BASIC routines
STMDSP = $a00c ; BASIC Command Vectors WORD
FUNDSP = $a052 ; BASIC Function Vectors WORD
OPTAB = $a080 ; BASIC Operator Vectors WORD
RESLST = $a09e ; BASIC Command Keyword Table DATA
MSCLST = $a129 ; BASIC Misc. Keyword Table DATA
OPLIST = $a140 ; BASIC Operator Keyword Table DATA
FUNLST = $a14d ; BASIC Function Keyword Table DATA
ERRTAB = $a19e ; Error Message Table DATA
ERRPTR = $a328 ; Error Message Pointers WORD
OKK = $a364 ; Misc. Messages TEXT
FNDFOR = $a38a ; Find FOR/GOSUB Entry on Stack
BLTU = $a3b8 ; Open Space in Memory
GETSTK = $a3fb ; Check Stack Depth
REASON = $a408 ; Check Memory Overlap
OMERR = $a435 ; Output ?OUT OF MEMORY Error
ERROR = $a437 ; Error Routine
ERRFIN = $a469 ; Break Entry
READY = $a474 ; Restart BASIC
MAIN = $a480 ; Input & Identify BASIC Line
MAIN1 = $a49c ; Get Line Number & Tokenise Text
INSLIN = $a4a2 ; Insert BASIC Text
LINKPRG = $a533 ; Rechain Lines
INLIN = $a560 ; Input Line Into Buffer
CRUNCH = $a579 ; Tokenise Input Buffer
FNDLIN = $a613 ; Search for Line Number
SCRTCH = $a642 ; Perform [new]
CLEAR = $a65e ; Perform [clr]
STXPT = $a68e ; Reset TXTPTR
LIST = $a69c ; Perform [list]
QPLOP = $a717 ; Handle LIST Character
FOR = $a742 ; Perform [for]
NEWSTT = $a7ae ; BASIC Warm Start
CKEOL = $a7c4 ; Check End of Program
GONE = $a7e1 ; Prepare to execute statement
GONE3 = $a7ed ; Perform BASIC Keyword
B_RESTOR = $a81d ; Perform [restore]
B_STOP = $a82c ; Perform [stop], [end], break
CONT = $a857 ; Perform [cont]
RUN = $a871 ; Perform [run]
GOSUB = $a883 ; Perform [gosub]
GOTO = $a8a0 ; Perform [goto]
RETURN = $a8d2 ; Perform [return]
DATA = $a8f8 ; Perform [data]
DATAN = $a906 ; Search for Next Statement / Line
IF = $a928 ; Perform [if]
REM = $a93b ; Perform [rem]
ONGOTO = $a94b ; Perform [on]
LINGET = $a96b ; Fetch linnum From BASIC
LET = $a9a5 ; Perform [let]
PUTINT = $a9c4 ; Assign Integer
PTFLPT = $a9d6 ; Assign Floating Point
PUTSTR = $a9d9 ; Assign String
PUTTIM = $a9e3 ; Assign TI$
GETSPT = $aa2c ; Add Digit to FAC#1
PRINTN = $aa80 ; Perform [print]#
CMD = $aa86 ; Perform [cmd]
STRDON = $aa9a ; Print String From Memory
PRINT = $aaa0 ; Perform [print]
VAROP = $aab8 ; Output Variable
CRDO = $aad7 ; Output CR/LF
COMPRT = $aae8 ; Handle comma, TAB(, SPC(
STROUT = $ab1e ; Output String
OUTSPC = $ab3b ; Output Format Character
DOAGIN = $ab4d ; Handle Bad Data
GET = $ab7b ; Perform [get]
INPUTN = $aba5 ; Perform [input#]
INPUT = $abbf ; Perform [input]
BUFFUL = $abea ; Read Input Buffer
QINLIN = $abf9 ; Do Input Prompt
READ = $ac06 ; Perform [read]
RDGET = $ac35 ; General Purpose Read Routine
EXINT = $acfc ; Input Error Messages TEXT
NEXT = $ad1e ; Perform [next]
DONEXT = $ad61 ; Check Valid Loop
FRMNUM = $ad8a ; Confirm Result
FRMEVL = $ad9e ; Evaluate Expression in Text
EVAL = $ae83 ; Evaluate Single Term
PIVAL = $aea8 ; Constant - pi DATA
QDOT = $aead ; Continue Expression
PARCHK = $aef1 ; Expression in Brackets
CHKCLS = $aef7 ; Confirm Character
;- = $aef7 ; -test ')'-
;- = $aefa ; -test '('-
;- = $aefd ; -test comma-
SYNERR = $af08 ; Output ?SYNTAX Error
DOMIN = $af0d ; Set up NOT Function
RSVVAR = $af14 ; Identify Reserved Variable
ISVAR = $af28 ; Search for Variable
TISASC = $af48 ; Convert TI to ASCII String
ISFUN = $afa7 ; Identify Function Type
STRFUN = $afb1 ; Evaluate String Function
NUMFUN = $afd1 ; Evaluate Numeric Function
OROP = $afe6 ; Perform [or], [and]
DOREL = $b016 ; Perform <, =, >
NUMREL = $b01b ; Numeric Comparison
STRREL = $b02e ; String Comparison
DIM = $b07e ; Perform [dim]
PTRGET = $b08b ; Identify Variable
ORDVAR = $b0e7 ; Locate Ordinary Variable
NOTFNS = $b11d ; Create New Variable
NOTEVL = $b128 ; Create Variable
ARYGET = $b194 ; Allocate Array Pointer Space
N32768 = $b1a5 ; Constant 32768 in Flpt DATA
FACINX = $b1aa ; FAC#1 to Integer in (AC/YR)
INTIDX = $b1b2 ; Evaluate Text for Integer
AYINT = $b1bf ; FAC#1 to Positive Integer
ISARY = $b1d1 ; Get Array Parameters
FNDARY = $b218 ; Find Array
BSERR = $b245 ; ?BAD SUBSCRIPT/?ILLEGAL QUANTITY
NOTFDD = $b261 ; Create Array
INLPN2 = $b30e ; Locate Element in Array
UMULT = $b34c ; Number of Bytes in Subscript
FRE = $b37d ; Perform [fre]
GIVAYF = $b391 ; Convert Integer in (AC/YR) to Flpt
POS = $b39e ; Perform [pos]
ERRDIR = $b3a6 ; Confirm Program Mode
GETFNM = $b3e1 ; Check Syntax of FN
FNDOER = $b3f4 ; Perform [fn]
STRD = $b465 ; Perform [str$]
STRLIT = $b487 ; Set Up String
PUTNW1 = $b4d5 ; Save String Descriptor
GETSPA = $b4f4 ; Allocate Space for String
GARBAG = $b526 ; Garbage Collection
DVARS = $b5bd ; Search for Next String
GRBPAS = $b606 ; Collect a String
CAT = $b63d ; Concatenate Two Strings
MOVINS = $b67a ; Store String in High RAM
FRESTR = $b6a3 ; Perform String Housekeeping
FREFAC = $b6db ; Clean Descriptor Stack
CHRD = $b6ec ; Perform [chr$]
LEFTD = $b700 ; Perform [left$]
RIGHTD = $b72c ; Perform [right$]
MIDD = $b737 ; Perform [mid$]
PREAM = $b761 ; Pull sTring Parameters
LEN = $b77c ; Perform [len]
LEN1 = $b782 ; Exit String Mode
ASC = $b78b ; Perform [asc]
GTBYTC = $b79b ; Evaluate Text to 1 Byte in XR
VAL = $b7ad ; Perform [val]
STRVAL = $b7b5 ; Convert ASCII String to Flpt
GETNUM = $b7eb ; Get parameters for POKE/WAIT
GETADR = $b7f7 ; Convert FAC#1 to Integer in LINNUM
PEEK = $b80d ; Perform [peek]
POKE = $b824 ; Perform [poke]
WAIT = $b82d ; Perform [wait]
FADDH = $b849 ; Add 0.5 to FAC#1
FSUB = $b850 ; Perform Subtraction
FADD5 = $b862 ; Normalise Addition
FADD = $b867 ; Perform Addition
NEGFAC = $b947 ; 2's Complement FAC#1
OVERR = $b97e ; Output ?OVERFLOW Error
MULSHF = $b983 ; Multiply by Zero Byte
FONE = $b9bc ; Table of Flpt Constants DATA
LOG = $b9ea ; Perform [log]
FMULT = $ba28 ; Perform Multiply
MULPLY = $ba59 ; Multiply by a Byte
CONUPK = $ba8c ; Load FAC#2 From Memory
MULDIV = $bab7 ; Test Both Accumulators
MLDVEX = $bad4 ; Overflow / Underflow
MUL10 = $bae2 ; Multiply FAC#1 by 10
TENC = $baf9 ; Constant 10 in Flpt DATA
DIV10 = $bafe ; Divide FAC#1 by 10
FDIV = $bb07 ; Divide FAC#2 by Flpt at (AC/YR)
FDIVT = $bb0f ; Divide FAC#2 by FAC#1
MOVFM = $bba2 ; Load FAC#1 From Memory
MOV2F = $bbc7 ; Store FAC#1 in Memory
MOVFA = $bbfc ; Copy FAC#2 into FAC#1
MOVAF = $bc0c ; Copy FAC#1 into FAC#2
ROUND = $bc1b ; Round FAC#1
SIGN = $bc2b ; Check Sign of FAC#1
SGN = $bc39 ; Perform [sgn]
ABS = $bc58 ; Perform [abs]
FCOMP = $bc5b ; Compare FAC#1 With Memory
QINT = $bc9b ; Convert FAC#1 to Integer
INT = $bccc ; Perform [int]
FIN = $bcf3 ; Convert ASCII String to a Number in FAC#1
N0999 = $bdb3 ; String Conversion Constants DATA
INPRT = $bdc2 ; Output 'IN' and Line Number
FOUT = $bddd ; Convert FAC#1 to ASCII String
FOUTIM = $be68 ; Convert TI to String
FHALF = $bf11 ; Table of Constants DATA
SQR = $bf71 ; Perform [sqr]
FPWRT = $bf7b ; Perform power ($)
NEGOP = $bfb4 ; Negate FAC#1
LOGEB2 = $bfbf ; Table of Constants DATA
EXP = $bfed ; Perform [exp]
; Miscellaneous
D6510 = $0000 ; 6510 On-chip Data Direction Register.
R6510 = $0001 ; 6510 On-chip 8-bit Input/Output Register.
TEMP0002 = $0002 ; Unused. Free for user programs.
ADRAY1 = $0003 ; Jump Vector: Convert FAC to Integer in (A/Y) ($B1AA).
ADRAY2 = $0005 ; Jump Vector: Convert Integer in (A/Y) to Floating point in (FAC); ($B391).
CHARAC = $0007 ; Search Character/Temporary Integer during INT.
ENDCHR = $0008 ; Flag: Scan for Quote at end of String.
INTEGR = $0007 ; Temporary Integer during OR/AND.
TRMPOS = $0009 ; Screen Column for last TAB.
VERCK = $000a ; Flag: 0 = Load, 1 = Verify.
COUNT = $000b ; Input Buffer Pointer/Number of Subscripts.
DIMFLG = $000c ; Flag: Default Array dimension.
VALTYP = $000d ; Data type Flag: $00 = Numeric, $FF = String.
INTFLG = $000e ; Data type Flag: $00 = Floating point, $80 = Integer.
GARBFL = $000f ; Flag: DATA scan/List Quote/Garbage collection.
SUBFLG = $0010 ; Flag: Subscript reference/User Function call.
INPFLG = $0011 ; Input Flag: $00 = INPUT, $40 = GET, $98 = READ.
TANSGN = $0012 ; Flag: TAN sign/Comparative result.
CHANNL = $0013 ; File number of current Input Device.
LINNUM = $0014 ; Temporary: Integer value.
TEMPPT = $0016 ; Pointer: Temporary String Stack.
LASTPT = $0017 ; Last temporary String Address.
TEMPST = $0019 ; Stack for temporary Strings.
INDEX = $0022 ; Utility Pointer Area.
INDEX1 = $0022 ; First Utility Pointer.
INDEX2 = $0024 ; Second Utility Pointer.
RESHO = $0026 ; Floating point product of Multiply and Divide.
TXTTAB = $002b ; Pointer: Start of BASIC Text Area ($0801).
VARTAB = $002d ; Pointer: Start of BASIC Variables.
ARYTAB = $002f ; Pointer: Start of BASIC Arrays.
STREND = $0031 ; Pointer: End of BASIC Arrays + 1.
FRETOP = $0033 ; Pointer: Bottom of String space.
FRESPC = $0035 ; Utility String Pointer.
ZMEMSIZ = $0037 ; Pointer: Highest Address available to BASIC ($A000).
CURLIN = $0039 ; Current BASIC Line number.
OLDLIN = $003b ; Previous BASIC Line number.
OLDTXT = $003d ; Pointer: BASIC Statement for CONT.
DATLIN = $003f ; Current DATA Line number.
DATPTR = $0041 ; Pointer: Used by READ - current DATA Item Address.
INPPTR = $0043 ; Pointer: Temporary storage of Pointer during INPUT Routine.
VARNAM = $0045 ; Name of Variable being sought in Variable Table.
VARPNT = $0047 ; Pointer: to value of (VARNAM) if Integer, to descriptor if String.
FORPNT = $0049 ; Pointer: Index Variable for FOR/NEXT loop.
VARTXT = $004b ; Temporary storage for TXTPTR during READ, INPUT and GET.
OPMASK = $004d ; Mask used during FRMEVL.
TEMPF3 = $004e ; Temporary storage for FLPT value.
FOUR6 = $0053 ; Length of String Variable during garbage collection.
JMPER = $0054 ; Jump Vector used in Function Evaluation - JMP followed by Address ($4C,$LB,$MB).
TEMPF1 = $0057 ; Temporary storage for FLPT value.
TEMPF2 = $005c ; Temporary storage for FLPT value.
FAC = $0061 ; Main Floating point Accumulator.
FACEXP = $0061 ; FAC Exponent.
FACHO = $0062 ; FAC Mantissa.
FACSGN = $0066 ; FAC Sign.
SGNFLG = $0067 ; Pointer: Series Evaluation Constant.
BITS = $0068 ; Bit Overflow Area during normalisation Routine.
AFAC = $0069 ; Auxiliary Floating point Accumulator.
ARGEXP = $0069 ; AFAC Exponent.
ARGHO = $006a ; AFAC Mantissa.
ARGSGN = $006e ; AFAC Sign.
ARISGN = $006f ; Sign of result of Arithmetic Evaluation.
FACOV = $0070 ; FAC low-order rounding.
FBUFPT = $0071 ; Pointer: Used during CRUNCH/ASCII conversion.
CHRGET = $0073 ; Subroutine: Get next Byte of BASIC Text.
CHRGOT = $0079 ; Entry to Get same Byte again.
TXTPTR = $007a ; Pointer: Current Byte of BASIC Text.
RNDX = $008b ; Floating RND Function Seed Value.
STATUS = $0090 ; Kernal I/O Status Word ST.
STKEY = $0091 ; Flag: $7F = STOP key.
SVXT = $0092 ; Timing Constant for Tape.
VERCKK = $0093 ; Flag: 0 = Load, 1 = Verify.
C3PO = $0094 ; Flag: Serial Bus - Output Character buffered.
BSOUR = $0095 ; Buffered Character for Serial Bus.
SYNO = $0096 ; Cassette Sync. number.
TEMPX = $0097 ; Temporary storage of X Register during CHRIN.
TEMPY = $0097 ; Temporary storage of Y Register during RS232 fetch.
LDTND = $0098 ; Number of Open Files/Index to File Table.
DFLTN = $0099 ; Default Input Device (0).
DFLTO = $009a ; Default Output Device (3).
PRTY = $009b ; Parity of Byte Output to Tape.
DPSW = $009c ; Flag: Byte received from Tape.
MSGFLG = $009d ; Flag: $00 = Program mode: Suppress Error Messages, $40 = Kernal Error Messages only, $80 = Direct mode: Full Error Messages.
FNMIDX = $009e ; Index to Cassette File name/Header ID for Tape write.
PTR1 = $009e ; Tape Error log pass 1.
PTR2 = $009f ; Tape Error log pass 2.
TIME = $00a0 ; Real-time jiffy Clock (Updated by IRQ Interrupt approx. every 1/60 of Second); Update Routine: UDTIMK ($F69B).
TSFCNT = $00a3 ; Bit Counter Tape Read or Write/Serial Bus EOI (End Of Input) Flag.
TBTCNT = $00a4 ; Pulse Counter Tape Read or Write/Serial Bus shift Counter.
CNTDN = $00a5 ; Tape Synchronising count down.
BUFPNT = $00a6 ; Pointer: Tape I/O buffer.
INBIT = $00a7 ; RS232 temporary for received Bit/Tape temporary.
BITC1 = $00a8 ; RS232 Input Bit count/Tape temporary.
RINONE = $00a9 ; RS232 Flag: Start Bit check/Tape temporary.
RIDATA = $00aa ; RS232 Input Byte Buffer/Tape temporary.
RIPRTY = $00ab ; RS232 Input parity/Tape temporary.
SAL = $00ac ; Pointer: Tape Buffer/Screen scrolling.
EAL = $00ae ; Tape End Address/End of Program.
CMPO = $00b0 ; Tape timing Constants.
TAPE1 = $00b2 ; Pointer: Start Address of Tape Buffer ($033C).
BITTS = $00b4 ; RS232 Write bit count/Tape Read timing Flag.
NXTBIT = $00b5 ; RS232 Next Bit to send/Tape Read - End of Tape.
RODATA = $00b6 ; RS232 Output Byte Buffer/Tape Read Error Flag.
FNLEN = $00b7 ; Number of Characters in Filename.
LA = $00b8 ; Current File - Logical File number.
SA = $00b9 ; Current File - Secondary Address.
FA = $00ba ; Current File - First Address (Device number). OPEN LA,FA,SA; OPEN 1,8,15,"I0":CLOSE 1
FNADR = $00bb ; Pointer: Current File name Address.
ROPRTY = $00bd ; RS232 Output Parity/Tape Byte to be Input or Output.
FSBLK = $00be ; Tape Input/Output Block count.
MYCH = $00bf ; Serial Word Buffer.
CAS1 = $00c0 ; Tape Motor Switch.
STAL = $00c1 ; Start Address for LOAD and Cassette Write.
MEMUSS = $00c3 ; Pointer: Type 3 Tape LOAD and general use.
LSTX = $00c5 ; Matrix value of last Key pressed; No Key = $40.
NDX = $00c6 ; Number of Characters in Keyboard Buffer queue.
RVS = $00c7 ; Flag: Reverse On/Off; On = $01, Off = $00.
INDX = $00c8 ; Pointer: End of Line for Input (Used to suppress trailing spaces).
LXSP = $00c9 ; Cursor X/Y (Line/Column) position at start of Input.
SFDX = $00cb ; Flag: Print shifted Characters.
BLNSW = $00cc ; Flag: Cursor blink; $00 = Enabled, $01 = Disabled.
BLNCT = $00cd ; Timer: Count down for Cursor blink toggle.
GDBLN = $00ce ; Character under Cursor while Cursor Inverted.
BLNON = $00cf ; Flag: Cursor Status; $00 = Off, $01 = On.
CRSW = $00d0 ; Flag: Input from Screen = $03, or Keyboard = $00.
PNT = $00d1 ; Pointer: Current Screen Line Address.
PNTR = $00d3 ; Cursor Column on current Line, including Wrap-round Line, if any.
QTSW = $00d4 ; Flag: Editor in Quote Mode; $00 = Not.
LNMX = $00d5 ; Current logical Line length: 39 or 79.
TBLX = $00d6 ; Current Screen Line number of Cursor.
SCHAR = $00d7 ; Screen value of current Input Character/Last Character Output.
INSRT = $00d8 ; Count of number of inserts outstanding.
LDTB1 = $00d9 ; Screen Line link Table/Editor temporaries. High Byte of Line Screen Memory Location.
USER = $00f3 ; Pointer: Current Colour RAM Location.
KEYTAB = $00f5 ; Vector: Current Keyboard decoding Table. ($EB81)
RIBUF = $00f7 ; RS232 Input Buffer Pointer.
ROBUF = $00f9 ; RS232 Output Buffer Pointer.
FREKZP = $00fb ; Free Zero Page space for User Programs.
BASZPT = $00ff ; BASIC temporary Data Area.
ASCWRK = $00ff ; Assembly Area for Floating point to ASCII conversion.
BAD = $0100 ; Tape Input Error log.
STACK = $0100 ; 6510 Hardware Stack Area.
BSTACK = $013f ; BASIC Stack Area.
BUF = $0200 ; BASIC Input Buffer (Input Line from Screen).
LAT = $0259 ; Kernal Table: Active logical File numbers.
FAT = $0263 ; Kernal Table: Active File First Addresses (Device numbers).
SAT = $026d ; Kernal Table: Active File Secondary Addresses.
KEYD = $0277 ; Keyboard Buffer Queue (FIFO).
MEMSTR = $0281 ; Pointer: Bottom of Memory for Operating System ($0800).
MEMSIZ = $0283 ; Pointer: Top of Memory for Operating System ($A000).
TIMOUT = $0285 ; Serial IEEE Bus timeout defeat Flag.
COLOR = $0286 ; Current Character Colour code.
GDCOL = $0287 ; Background Colour under Cursor.
HIBASE = $0288 ; High Byte of Screen Memory Address ($04).
XMAX = $0289 ; Maximum number of Bytes in Keyboard Buffer ($0A).
RPTFLG = $028a ; Flag: Repeat keys; $00 = Cursors, INST/DEL & Space repeat, $40 no Keys repeat, $80 all Keys repeat ($00).
KOUNT = $028b ; Repeat Key: Speed Counter ($04).
DELAY = $028c ; Repeat Key: First repeat delay Counter ($10).
SHFLAG = $028d ; Flag: Shift Keys: Bit 1 = Shift, Bit 2 = CBM, Bit 3 = CTRL; ($00 = None, $01 = Shift, etc.).
LSTSHF = $028e ; Last Shift Key used for debouncing.
KEYLOG = $028f ; Vector: Routine to determine Keyboard table to use based on Shift Key Pattern ($EB48).
MODE = $0291 ; Flag: Upper/Lower Case change: $00 = Disabled, $80 = Enabled ($00).
AUTODN = $0292 ; Flag: Auto scroll down: $00 = Disabled ($00).
M51CTR = $0293 ; RS232 Pseudo 6551 control Register Image.
M51CDR = $0294 ; RS232 Pseudo 6551 command Register Image.
M51AJB = $0295 ; RS232 Non-standard Bits/Second.
RSSTAT = $0297 ; RS232 Pseudo 6551 Status Register Image.
BITNUM = $0298 ; RS232 Number of Bits left to send.
BAUDOF = $0299 ; RS232 Baud Rate; Full Bit time microseconds.
RIDBE = $029b ; RS232 Index to End of Input Buffer.
RIDBS = $029c ; RS232 Pointer: High Byte of Address of Input Buffer.
RODBS = $029d ; RS232 Pointer: High Byte of Address of Output Buffer.
RODBE = $029e ; RS232 Index to End of Output Buffer.
IRQTMP = $029f ; Temporary store for IRQ Vector during Tape operations.
ENABL = $02a1 ; RS232 Enables.
TODSNS = $02a2 ; TOD sense during Tape I/O.
TRDTMP = $02a3 ; Temporary storage during Tape READ.
TD1IRQ = $02a4 ; Temporary D1IRQ Indicator during Tape READ.
TLNIDX = $02a5 ; Temporary for Line Index.
TVSFLG = $02a6 ; Flag: TV Standard: $00 = NTSC, $01 = PAL.
TEMP02a7 = $02a7 ; Unused.
SPR11 = $02c0 ; Sprite #11 Data Area. (SCREEN + $03F8 + SPR number) POKE 1024+1016+0,11 to use Sprite#0 DATA from ($02C0-$02FE).
IERROR = $0300 ; Vector: Indirect entry to BASIC Error Message, (X) points to Message ($E38B).
IMAIN = $0302 ; Vector: Indirect entry to BASIC Input Line and Decode ($A483).
ICRNCH = $0304 ; Vector: Indirect entry to BASIC Tokenise Routine ($A57C).
IQPLOP = $0306 ; Vector: Indirect entry to BASIC LIST Routine ($A71A).
IGONE = $0308 ; Vector: Indirect entry to BASIC Character dispatch Routine ($A7E4).
IEVAL = $030a ; Vector: Indirect entry to BASIC Token evaluation ($AE86).
SAREG = $030c ; Storage for 6510 Accumulator during SYS.
SXREG = $030d ; Storage for 6510 X-Register during SYS.
SYREG = $030e ; Storage for 6510 Y-Register during SYS.
SPREG = $030f ; Storage for 6510 Status Register during SYS.
USRPOK = $0310 ; USR Function JMP Instruction ($4C).
USRADD = $0311 ; USR Address ($LB,$MB).
TEMP0313 = $0313 ; Unused.
CINV = $0314 ; Vector: Hardware IRQ Interrupt Address ($EA31).
CNBINV = $0316 ; Vector: BRK Instruction Interrupt Address ($FE66).
NMINV = $0318 ; Vector: Hardware NMI Interrupt Address ($FE47).
IOPEN = $031a ; Vector: Indirect entry to Kernal OPEN Routine ($F34A).
ICLOSE = $031c ; Vector: Indirect entry to Kernal CLOSE Routine ($F291).
ICHKIN = $031e ; Vector: Indirect entry to Kernal CHKIN Routine ($F20E).
ICKOUT = $0320 ; Vector: Indirect entry to Kernal CHKOUT Routine ($F250).
ICLRCH = $0322 ; Vector: Indirect entry to Kernal CLRCHN Routine ($F333).
IBASIN = $0324 ; Vector: Indirect entry to Kernal CHRIN Routine ($F157).
IBSOUT = $0326 ; Vector: Indirect entry to Kernal CHROUT Routine ($F1CA).
ISTOP = $0328 ; Vector: Indirect entry to Kernal STOP Routine ($F6ED).
IGETIN = $032a ; Vector: Indirect entry to Kernal GETIN Routine ($F13E).
ICLALL = $032c ; Vector: Indirect entry to Kernal CLALL Routine ($F32F).
USRCMD = $032e ; User Defined Vector ($FE66).
ILOAD = $0330 ; Vector: Indirect entry to Kernal LOAD Routine ($F4A5).
ISAVE = $0332 ; Vector: Indirect entry to Kernal SAVE Routine ($F5ED).
TEMP0334 = $0334 ; Unused.
TBUFFR = $033c ; Tape I/O Buffer.
SPR13 = $0340 ; Sprite #13.
SPR14 = $0380 ; Sprite #14.
SPR15 = $03c0 ; Sprite #15.
TEMP03fc = $03fc ; Unused.
VICSCN = $0400 ; Default Screen Video Matrix.
TEMP07e8 = $07e8 ; Unused.
SPNTRS = $07f8 ; Default Sprite Data Pointers.
.pron
; vim: syntax=64tass