; *************************************************************************** ; Headers for Commodore C64 Kernal ; Notes about the C64 operating system & memory ; Author: Peter Mount, Area51.dev & Contributors ; ; URL: https://area51.dev/c64/kernal/ ; ; Modified: Sun, 23 Jan 2022 17:05:58 UTC ; ; Current version: https://area51.dev/c64/kernal/reference/include/beebasm/headers.asm ; *************************************************************************** ; C64 Zero Page D6510 = &0 ; 6510 On-Chip I/O DATA Direction Register R6510 = &1 ; 6510 On-Chip I/O Port ADRAY1 = &3 ; Vector to routine to convert Number from Floating Point to Signed Integer ADRAY2 = &5 ; Vector to routine to convert Number from Integer to Floating Point VERCK = &A ; Flag: LOAD or VERIFY TXTTAB = &2B ; Pointer to start of BASIC program text VARTAB = &2D ; Pointer to start of BASIC Variable storage area ARYTAB = &2F ; Pointer to start of array variable area STREND = &31 ; End of Basic array storage (+1), Start of free ram FRETOP = &33 ; Pointer to bottom of string text area FRESPC = &35 ; Temp pointer for strings BASMEMSIZ = &37 ; Highest address used by basic BLNSW = &CC ; Cursor Blink Enable RIBUF = &F7 ; RS232 Input Buffer Pointer ROBUF = &F9 ; RS232 Output Buffer Pointer FREKZP = &FB ; 4 free bytes of Zero Page for User Programs BASZPT = &FF ; BASIC temp data area for floating point to ASCII conversion ; C64 Page 2 BUF = &200 ; BASIC Line Editor Input Buffer LAT = &259 ; Active logical file number table FAT = &263 ; Device number for each logical file SAT = &26D ; Secondary address for each logical file KEYD = &277 ; Keyboard buffer MEMSTR = &281 ; Start of Memory pointer MEMSIZ = &283 ; End of Memory pointer COLOR = &286 ; Current Foreground text colour GDCOL = &287 ; Colour of character under Cursor HIBASE = &288 ; Page of Screen Memory XMAX = &289 ; Max length of keyboard buffer RPTFLG = &28A ; Which keys will repeat SHFLAG = &28D ; Shift/Ctrl/Commodore key pressed LSTSHF = &28E ; Last value of Shift/Ctrl/Commodore key pressed MODE = &291 ; Shift/Commodore switch AUTODN = &292 ; Screen scrolling enabled M51CTR = &293 ; Mock 6551 RS-232 Control Register M51CDR = &294 ; Mock 6551 RS-232 Command Register M51AJB = &295 ; Mock 6551 RS-232 Nonstandard Bit Timing M51STAT = &297 ; Mock 6551 RS-232 Status Register RIDBE = &29B ; RS-232 Index to end of receive buffer RIDBS = &29C ; RS-232 Index to start of receive buffer RODBE = &29D ; RS-232 Index to end of transmit buffer RODBS = &29E ; RS-232 Index to start of transmit buffer ENABL = &2A1 ; RS-232 Interrupts Enabled ; C64 Page 3 Vectors & Cassette Buffer USRPOK = &310 ; Jump instruction for BASIC USR() function USRADD = &311 ; Address of USR() function CINV = &314 ; IRQ Interrupt Routine Vector CBNV = &316 ; BRK Interrupt Routine Vector NMINV = &318 ; NMI Interrupt Routine Vector IOPEN = &31A ; Kernal OPEN Vector ICLOSE = &31C ; Kernal close Vector ICHKIN = &31E ; Kernal CHKIN Vector ICKOUT = &320 ; Kernal CKOUT Vector ICLRCH = &322 ; Kernal CLRCHN Vector IBASIN = &324 ; Kernal CHRIN Vector IBSOUT = &326 ; Kernal CHROUT Vector ISTOP = &328 ; Kernal STOP Vector IGETIN = &32A ; Kernal GETIN Vector ICLALL = &32C ; Kernal CLALL Vector USRCMD = &32E ; User-Defined Command Vector ILOAD = &330 ; Kernal LOAD Vector ISAVE = &332 ; Kernal SAVE Vector TBUFFR = &33C ; Cassette I/O Buffer ; VIC-II Registers VIC2M0X = &D000 ; X Coordinate Sprite 0 VIC2M0Y = &D001 ; Y Coordinate Sprite 0 VIC2M1X = &D002 ; X Coordinate Sprite 1 VIC2M1Y = &D003 ; Y Coordinate Sprite 1 VIC2M2X = &D004 ; X Coordinate Sprite 2 VIC2M2Y = &D005 ; Y Coordinate Sprite 2 VIC2M3X = &D006 ; X Coordinate Sprite 3 VIC2M3Y = &D007 ; Y Coordinate Sprite 3 VIC2M4X = &D008 ; X Coordinate Sprite 4 VIC2M4Y = &D009 ; Y Coordinate Sprite 4 VIC2M5X = &D00A ; X Coordinate Sprite 5 VIC2M5Y = &D05B ; Y Coordinate Sprite 5 VIC2M6X = &D00C ; X Coordinate Sprite 6 VIC2M6Y = &D00D ; Y Coordinate Sprite 6 VIC2M7X = &D00E ; X Coordinate Sprite 7 VIC2M7Y = &D00F ; Y Coordinate Sprite 7 VIC2MNX = &D010 ; Bit 8 of X coordinates VIC2CR1 = &D011 ; Control register 1 VIC2RASTER = &D012 ; Raster counter VIC2LPX = &D013 ; Light pen X VIC2LPY = &D014 ; Light pen Y VIC2SPE = &D015 ; Sprite Enabled VIC2CR2 = &D016 ; Control register 2 VIC2SPYE = &D017 ; Sprite Y expansion VIC2MPTR = &D018 ; Memory pointers VIC2INTR = &D019 ; Interrupt Register VIC2INTE = &D01A ; Interrupt Enabled VIC2SPDP = &D01B ; Sprite data priority VIC2SPMC = &D01C ; Sprite multicolour VIC2SPXE = &D01D ; Sprite X expansion VIC2SPSPCOL = &D01E ; Sprite-Sprite collision VIC2SPDCOL = &D01F ; Sprite data collision VIC2BORDER = &D020 ; Border colour VIC2B0C = &D021 ; Background colour 0 VIC2B1C = &D022 ; Background colour 1 VIC2B2C = &D023 ; Background colour 2 VIC2B3C = &D024 ; Background colour 3 VIC2SPMM0 = &D025 ; Sprite multicolour 0 VIC2SPMM1 = &D026 ; Sprite multicolour 1 VIC2SPCOL0 = &D027 ; Sprite 0 colour VIC2SPCOL1 = &D028 ; Sprite 1 colour VIC2SPCOL2 = &D029 ; Sprite 2 colour VIC2SPCOL3 = &D02A ; Sprite 3 colour VIC2SPCOL4 = &D02B ; Sprite 4 colour VIC2SPCOL5 = &D02C ; Sprite 5 colour VIC2SPCOL6 = &D02D ; Sprite 6 colour VIC2SPCOL7 = &D02E ; Sprite 7 colour ; SID Registers SID1FRELOW = &D400 ; Frequency voice 1 low byte SID1FREHIGH = &D401 ; Frequency voice 1 high byte SID1PWDCLOW = &D402 ; Pulse wave duty cycle voice 1 low byte SID1PWDCHIGH = &D403 ; Pulse wave duty cycle voice 1 high byte SID1CR = &D404 ; Control Register voice 1 ; Colour memory COLMEM = &D800 ; Colour Memory ; CIA 1 CIA1PRA = &DC00 ; Data Port A CIA1PRB = &DC01 ; Data Port B CIA1DDRA = &DC02 ; Data Direction Port A CIA1DDRB = &DC03 ; Data Direction Port B CIA1TIMAL = &DC04 ; Timer A Low byte CIA1TIMAH = &DC05 ; Timer A High byte CIA1TIMBL = &DC06 ; Timer B Low byte CIA1TIMBH = &DC07 ; Timer B High byte CIA1RTCT = &DC08 ; Real time clock 1/10s CIA1RTCS = &DC09 ; Real time clock seconds CIA1RTCM = &DC0A ; Real time clock minutes CIA1RTCH = &DC0B ; Real time clock hours CIA1SR = &DC0C ; Shift register CIA1ICS = &DC0D ; Interrupt Control & Status CIA1CTA = &DC0E ; Control Timer A CIA1CTB = &DC0F ; Control Timer B ; CIA 2 CIA2PRA = &DD00 ; Data Port A CIA2PRB = &DD01 ; User Port PB0-7 CIA2DDRA = &DD02 ; Data Direction Port A CIA2DDRB = &DD03 ; Data Direction Port B CIA2TIMAL = &DD04 ; Timer A Low byte CIA2TIMAH = &DD05 ; Timer A High byte CIA2TIMBL = &DD06 ; Timer B Low byte CIA2TIMBH = &DD07 ; Timer B High byte CIA2RTCT = &DD08 ; Real time clock 1/10s CIA2RTCS = &DD09 ; Real time clock seconds CIA2RTCM = &DD0A ; Real time clock minutes CIA2RTCH = &DD0B ; Real time clock hours CIA2SR = &DD0C ; Shift register CIA2ICS = &DD0D ; Interrupt Control & Status CIA2CTA = &DD0E ; Control Timer A CIA2CTB = &DD0F ; Control Timer B