Memory Map $00 CPU_DDR Address of 6510 data direction register $01 CPU_DATA Built-in 6510 I/O port, bit oriented Bit 0 - 0=RAM, 1=BASIC ROM Bit 1 - 0=RAM, 1=Kernal ROM Bit 2 - 0=Character set ROM, 1=I/O ports Bits 3-5 - Cassette control lines Bits 6-7 - Unconnected $02-$03 R0 General pointer, usually used to pass a parameter to a Kernal routine. $04-$05 R1 General pointer $04 R1L Track number for disk operations $05 R1H Sector number for disk operations $05 R1H Row to print text on $06-$0B R2L-R4H Box size descriptor $06 R2L Top row of a box $07 R2H Bottom row of a box $08-$09 R3 Left margin of a box $0A-$0B R4 Right margin of a box $0C-$0D R5 Directory entry pointer, returned by lookup. Also used as the destination indirect pointer for hires graphic operations. $0E-$0F R6 Filename pointer, used to point to a file name for file operations. Also used as the source indirect pointer for hires graphic operations. $10 R7L Selected GEOS file type; used by FindFTypes $11 R7H Maximum number of files to find; used by table $12-$13 R8 Temporary storage areas $14-$15 R9 Alternate directory entry pointer, usually points to $8400. Also used to point to a file's info sector when it is in memory. $16 R10L Number of directory sectors to skip before finding a hole in the directory; used by file save routines and GetFreeDirBlk. Also used as a parameter value to be passed to programs. Could be DESKTOP's page number. $16-$17 R10 Pointer to class string; used by FindFTypes $18-$19 R11 Column to print text in $1A-$1B R12 $1C-$1D R13 $1E-$1F R14 $20-$21 R15 Unused $22-$23 curPattern Pointer to fill pattern data $24-$25 string Pointer to input buffer $26-$2E (font data) Current font data table. See Font File Format for a complete description of this header information. $26 baselineOffset Number of pixels above line of print. Underlining appears 1 pixel below the line of print. $27-$28 curSetWidth Number of bytes in the font's bit streams $29 curHeight Point size of the font $2A-$2B curIndexTable Address of bit stream indices table $2C-$2D curDataPntr Address of the first bit stream $2E currentMode Defines the current print style Bit 7 - Underline Bit 6 - Boldface Bit 5 - Reversed video Bit 4 - Italics Bit 3 - Outline $2F dispBufferOn Controls the source and destination screens, used by GetScanLine. Bits 6 & 7 are used to determine the source and destination screens as follows: 7 6 $0C-$0D $0E-$0F 0 0 AF00 AF00 (MIDSCREEN) 0 1 2 1 1 0 1 1 1 1 1 2 If bit 5 is set, then only screen 1 is used for text (Mode 10). $30 mouseOn Mouse control flag Bit 7 - Mouse is not visible Bit 6 - Enable checking mouse's position against current menu limits. Bit 5 - Enable checking mouse's position against click box table. $31-$32 msePicPtr Pointer to the sprite data for the default mouse, usually $84C1 $33 windowTop Top margin, usually 0 (Top of screen) $34 windowBottom Bottom margin, usually 199 (Bottom of screen) $35-$36 leftMargin Left margin $37-$38 rightMargin Right margin, if an attempt is made to print text past this column, control passes through $84AB. $39 pressFlag Input control flags Bit 7 - There is data in the keyboard buffer Bit 6 - Input device has changed direction Bit 5 - Button status has changed $3A-$3B mouseXPos Mouse's X position $3C mouseYPos Mouse's Y position $3D-$3E Address for inline return $3F-$40 returnAddress Pointer to click box data table $41-$42 Jump vector used by CallRoutine $43-$44 Pointer used by DoDlgBox to point to the window descriptor block. $45-$6F Unused in GEOS? For main Kernal, are BASIC vars $70 A2L General application pointer $71 A2H General application pointer $72 A3L General application pointer $73 A3H General application pointer $74 A4L General application pointer $75 A4H General application pointer $76 A5L General application pointer $77 A5H General application pointer $78 A6L General application pointer $79 A6H General application pointer $7A A7L General application pointer $7B A7H General application pointer $7C A8L General application pointer $7D A8H General application pointer $7E A9L General application pointer $7F A9H General application pointer $80-$8D Unknown - seem to be more BASIC vars for KERNAL $8E The least significant 3 bits of location $DD00, used by serial communications routines. These three bits represent the VIC memory bank number and the RS-232 output line. $8F A copy of location $8E with the clock and data lines set. $90 STATUS C64 status register $91-$B9 KERNAL I/O registers and variables $BA curDevice Current serial device number $BB-$FA KERNAL I/O registers and variables $FB A0L General application pointer $FC A0H General application pointer $FD A1L General application pointer $FE A1H General application pointer $FF Unknown - in KERNAL, is a BASIC work area $0100-$013E Tape Input Error log. $0100-$01FF 6510 Hardware Stack Area. $013F-$01FF BASIC Stack Area. $0200-$0258 BASIC Input Buffer (Input Line from Screen). $0259-$0262 Kernal Table: Active logical File numbers. $0263-$026C Kernal Table: Active File First Addresses (Device numbers). $026D-$0276 Kernal Table: Active File Secondary Addresses. $0277-$0280 Keyboard Buffer Queue (FIFO). $0281-$0282 Pointer: Bottom of Memory for Operating System ($0800). $0283-$0284 Pointer: Top of Memory for Operating System ($A000). $0285 Serial IEEE Bus timeout defeat Flag. $0286 Current Character Color code. $0287 Background Color under Cursor. $0288 High Byte of Screen Memory Address ($04). $0289 Maximum number of Bytes in Keyboard Buffer ($0A). $028A Flag: Repeat keys; $00 = Cursors, INST/DEL & Space repeat, $40 no Keys repeat, $80 all Keys repeat ($00). $028B Repeat Key: Speed Counter ($04). $028C Repeat Key: First repeat delay Counter ($10). $028D Flag: Shift Keys: Bit 1 = Shift, Bit 2 = CBM, Bit 3 = CTRL; ($00 = None, $01 = Shift, etc.). $028E Last Shift Key used for debouncing. $028F-$0290 Vector: Routine to determine Keyboard table to use based on Shift Key Pattern ($EB48). $0291 Flag: Upper/Lower Case change: $00 = Disabled, $80 = Enabled ($00). $0292 Flag: Auto scroll down: $00 = Disabled ($00). $0293 RS232 Pseudo 6551 control Register Image. $0294 RS232 Pseudo 6551 command Register Image. $0295-$0296 RS232 Non-standard Bits/Second. $0297 RS232 Pseudo 6551 Status Register Image. $0298 RS232 Number of Bits left to send. $0299-$029A RS232 Baud Rate; Full Bit time microseconds. $029B RS232 Index to End of Input Buffer. $029C RS232 Pointer: High Byte of Address of Input Buffer. $029D RS232 Pointer: High Byte of Address of Output Buffer. $029E RS232 Index to End of Output Buffer. $029F-$02A0 Temporary store for IRQ Vector during Tape operations. $02A1 RS232 Enables. $02A2 TOD sense during Tape I/O. $02A3 Temporary storage during Tape READ. $02A4 Temporary D1IRQ Indicator during Tape READ. $02A5 Temporary for Line Index. $02A6 Flag: TV Standard: $00 = NTSC, $01 = PAL. $02A7-$02FF Unused. $02C0-$02FE Sprite #11 Data Area. (SCREEN + $03F8 + SPR number) POKE 1024+1016+0,11 to use Sprite#0 DATA from ($02C0-$02FE). $0300-$0301 Vector: Indirect entry to BASIC Error Message, (X) points to Message ($E38B). $0302-$0303 Vector: Indirect entry to BASIC Input Line and Decode ($A483). $0304-$0305 Vector: Indirect entry to BASIC Tokenise Routine ($A57C). $0306-$0307 Vector: Indirect entry to BASIC LIST Routine ($A71A). $0308-$0309 Vector: Indirect entry to BASIC Character dispatch Routine ($A7E4). $030A-$030B Vector: Indirect entry to BASIC Token evaluation ($AE86). $030C Storage for 6510 Accumulator during SYS. $030D Storage for 6510 X-Register during SYS. $030E Storage for 6510 Y-Register during SYS. $030F Storage for 6510 Status Register during SYS. $0310 USR Function JMP Instruction ($4C). $0311-0312 USR Address ($LB,$MB). $0313 Unused. $0314-$0315 irqvec IRQ vector $0316-$0317 bkvec Break ins vector $0318-$0319 nmivec Non-masked interrupt vector $031A- kernalVectors Location of kernal vectors $0400-$5FFF APP_RAM Start of application space $6000-$7F3F BACK_SCR_BASE Secondary hires screen, used as a backup for erasing menus and windows. $7900-$7F3F PRINT_BASE Printer driver address; see printer driver definitions $7F40-$7FFF APP_VAR Application variable space $8000-$80FF diskBlkBuf Disk buffer #0 $8100-$81FF fileHeader Disk buffer #1, Info sector $8200-$82FF curDirHead Disk buffer #2, Directory work area $8300-$83FF fileTrScTab Disk buffer #3, Table of tracks and sectors $8400-$841D dirEntryBuf Current directory entry, set up by FindFile $841E-$842F DrACurDkNm Name of disk in drive 0 (device 8) $8430-$8441 DrBCurDkNm Name of disk in drive 1 (device 9) $8442-$8452 dataFileName Name of data file (passed to application) $8453-$8464 dataDiskName Name of disk in drive 3 (device 11) $8465-$8475 PrntFilename Name of current printer driver $8476-$8484 PrntDiskName Name of disk containing printer driver $8485 Unknown $8486 Point to index from to reach $848E $8489 curDrive Current drive's device number $848A diskOpenFlg Point to index from to reach $8492 $848B isGEOS Format flag of current disk, $00 - GEOS format $FF - Non-GEOS diskette $848C interleave Skew factor for diskette operations $848D numDrives Number of drive in the system $848E-$8491 driveType GEOS uses this table to designate the boot drive, by placing a $01 in the location corresponding to the boot drive. This table is reached by indexing off of $8486 with the device number. $8492-$8495 turboFlags Drive status bytes, indexed from $848A with the device number. Bit 7 - Turbodos is loaded Bit 6 - Turbodos is running $8496 curRecord Current VLIR chain number $8497 usedRecords Number of VLIR chains in the open file $8498 fileWritten Modified flag, set to $FF if the open VLIR file has been changed; $00 otherwise $8499-$849A fileSize VLIR file size $849B-$849C appMain Vector for user additions to the GEOS main loop $849D-$849E intTopVector Vector for GEOS's IRQ routine $849F-$84A0 intBotVector Vector for a user's additions to the IRQ routine $84A1-$84A2 mouseVector Vector for button status changes $84A3-$84A4 keyVector Vector for any key entered from the keyboard $84A5-$84A6 inputVector Vector for mouse direction change $84A7-$84A8 mouseFaultVec Vector to close a menu $84A9-$84AA otherPressVec This vector is used for a lot of things that require an action to be performed. These items include: the button was released, the button was pressed and either the mouse was visible or Bit 5 of MSFLAG (location $30) was set. $84AB-$84AC StringFaultVec Vector for margins exceeded $84AD-$84AE alarmTmrVector Vector for the alarm clock routine $84AF-$84B0 BRKVector Vector for the BRK instruction, initially this is set to Panic $84B1-$84B2 RecoverVector Vector for a routine to clear a region of the screen, initially set to ImprintRectangle $84B3 selectionFlash Default delay value for flashing boxes $84B4 alphaFlag Text cursor flag - ** BSW = alphanum input flag Bit 7 - Blink the cursor Bit 6 - Cursor is turned on Bits 0-5 - Blink rate $84B5 iconSelFlag Control flag for click box Bit 7 - Flash the box Bit 6 - Only invert the box $84B6 faultData Mouse position flag, set by InterruptMain Bit 7 - Mouse is below the bottom of the window, windowBottom, $84B9 Bit 6 - Mouse is above the top of the window, windowTop, $84B8 Bit 5 - Mouse is to the left of the window, leftMargin, $84BA-$84BB Bit 4 - Mouse is to the right of the window, rightMargin, $84BC- $84BD Bit 3 - Mouse is outside the menu, windowTop,windowBottom,leftMargin, rightMargin, $86C1-$86C6 $84B7 menuNumber Number of menu levels $84B8-$84BD Window size description $84B8 mouseTop Top row of window $84B9 mouseBottom Bottom row of window $84BA-$84BB mouseLeft Left margin of window $84BC-$84BD mouseRight Right margin of window $84BE-$84BF stringX Text cursor's X position $84C0 stringY Text cursor's Y position $84C1-$84FF mousePicData Sprite data for default mouse $8500 Unused $8501 maxMouseSpeed Maximum mouse speed $8502 minMouseSpeed Minimum mouse speed $8503 mouseAccel Mouse's acceleration rate $8504 keyData Next key from keyboard buffer, set by GetNextChar $8505 mouseData Current button status $00 - Pressed $FF - Released $8506 inputData Mouse's current direction, 0-7,$FF 3 2 1 4 * 0 5 6 7 $8507 Current mouse speed $8508-$8509 Unused $850A-$850B random Random number generator value $850C-$8514 saveFontTab Temporary storage for font data during menu processing, copy of font data, locations $26-$2E $8515 dblClickCount A counter used by the click box routine, which is decremented by the IRQ service routine if it is nonzero. See Appendix IV. $8516 year Current year (0-99) $8517 month Current month $8518 day Current day of the month $8519 hour Current hour $851A minutes Current minute of the hour $851B seconds Current second of the minute $851C alarmSetFlag **BSW says TRUE if alarm is set for geos to mon $851D sysDBData Command byte returned by the window processor $851E screencolors Preferred colors; high nibble for the foreground color and low nibble for the background color $851F-$8697 dlgBoxRamBuf Temporary storage buffer for the window processor; see DoDlgBox for more information $8698-$86BB Unused $86BC-$86BF Unknown $86C0 Number of options in the current menu $86C1-$86C6 Current menu size description $86C1 Top row of menu $86C2 Bottom row of menu $86C3-$86C4 Left margin of menu $86C5-$86C6 Right margin of menu $86C7-$86CE Stack for menu descriptors $86CF-$86D2 Menu option that was clicked on, indexed by menu level (0-3) $86D3-$86E1 Menu option box limits, either row values or column high bytes $86E2-$86F0 Menu option box limits, column low bytes $86F1-$8718 Table of running timers, see $8755 $8719-$872C Timer command bytes Bit 7 - Execute routine, timer reached zero Bit 6 - Disable routine execution, leave timer running Bit 5 - Stop timer Bit 4 - Stop timer $872D-$8754 Subroutine addresses associated with each timer $8755-$877C Initial values for timers, copied to $86F1 when the timer reaches zero $877D Number of timers in table $877E Stack pointer for delay stack $877F-$87A6 Time delay values $87A7-$87CE Return addresses for when the delay time has expired $87CF Length of user entry $87D0 Maximum length of user entry $87D1-$87D2 Copy of IMARGN, locations $84A3-$84A4 $87D3 Margin control flag, Bit 7 - User supplies the margin exceeded routine for the window with a line of text, GetString or window command 13 $87D4-$87D6 Column and row variables for GraphicsString processor $87D7 Head of keyboard queue $87D8 Tail of keyboard queue $87D9 If this flag is zero, then the value of NXTKEY, location $87EA, is placed in the keyboard queue $87DA-$87E9 Keyboard queue $87EA Next key to be placed in the keyboard buffer $87EB-$87F2 Used by keyboard scan routine for debouncing the keyboard $87F3-$87FA Used by keyboard scan routine to prevent multiple key hits $87FB-$8806 Used by SmallPutChar to manipulate the font bit streams $8807 realSize Width of previous character for delete character $8808 Temporary storage used by the click box routine $8809 Temporary storage used by the click box routine $880A A non-zero value disables alarm chimes $880B Temporary storage used by the IRQ routine $880C-$884F Default click box table used by the window processor; see also DoIcons $880C Number of click boxes (8 maximum) $880D-$880E X position of mouse after click boxes have been drawn $880F Y position of mouse after click boxes have been drawn $8810-$884F Click box definitions; see DoIcons $8850-$8851 Return address of caller to LdDeskAcc $8852 Copy of the SP register from LdDeskAcc $8853-$8854 Return address of caller to DoDlgBox $8855 Copy of the SP register from DoDlgBox $8856-$885C Used by command 16 in DoDlgBox $8856 Number of files found $8857 Left indent of file subwindow $8858 Down indent of file subwindow $8859-$885A Pointer to filename table $885B Index of first file in the subwindow $885C Index on selected file $885D Parameter passed to a program, copy of DPAGE, location $16 $885E Copy of the status register during serial communications $885F Copy of location $D01A during serial communications $8860 Copy of R6510, location $01, during serial communications $8861 Copy of location $D015 during serial communication $8862 Copy of location $DD00 before sending Turbodos $8863-$8866 Command buffer for Turbodos $8867 Copy of location $DD00 with serial lines cleared $8868 Copy of location $DD00 with clock line set $8869 Try counter for disk read/write operations $886A Disk status byte read by Turbodos $886B Load flag Bit 0 - Do not run the application being loaded; use LDADRS locations $886C-$886D as load address $886C-$886D Alternate file load address $886E Reports which drive is being searched $00 - logged disk $FF - checking other drive $886F-$8874 Used by VLIR file routines $886F Track number of VLIR file directory entry $8870 Sector number of VLIR file directory entry $8871-$8872 Index into directory sector to VLIR file directory entry $8873 Track number of VLIR sector $8874 Sector number of VLIR sector $8875 Try counter used by VerWriteBlock $8876 Verify flag; $00=NO, $FF=YES $8877-$88BA Unused $88BB savedmoby2 Saved value of moby2 for context saving done in dlg boxes & desk accessories. Left out of original GEOS save code, put here so we don't screw up desk accessories, etc. that know the size of TOT_SRAM_SAVED above. $88BC scr80polar Copy of reg 24 in VDC for C128 $88BD scr80colors Screen colors for 80 column $88BE vdcClrMode Holds current color mode for C128 color rtns. $88BF-$88C2 driveData 1 byte each drive reserved for disk drivers $88C3 ramExpSize Size of ram expansion unit $88C4 sysRAMFlg Tells how ram expansion is being used Bank 0 - reserved for kernal use Bit 7 - whether $000-$78FF used by MoveData Bit 6 - $8300-$B8FF holds disk drivers for A-C Bit 5 - $7900-$7DFF is loaded with $8400-$88FF Bit 4 - $7E00-$82FF has reboot code $B900-$FCFF is saved with kernal rboot $88C5 firstBoot $00 if deskTop not yet loaded, $FF otherwise $88C6 curType Current disk type (copied from diskType) $88C7-$88CA ramBase RAM bank for each drive to use if RAM/shadowed $88CB-$88DB inputDevName Holds name of current input device $88DC-$88ED DrCCurDkNm Name of disk in drive C, padded with $A0 $88EE-$88FF DrDCurDkNm Name of disk in drive D, padded with $A0 $8900-$89FF dir2Head 2nd directory header block for larger drives $8A00-$8A3E Sprite data block #40, GEOS sprite 0 $8A40-$8A7E Sprite data block #41, GEOS sprite 1 $8A80-$8ABE Sprite data block #42, GEOS sprite 2 $8AC0-$8AFE Sprite data block #43, GEOS sprite 3 $8B00-$8B3E Sprite data block #44, GEOS sprite 4 $8B40-$8B7E Sprite data block #45, GEOS sprite 5 $8B80-$8BBE Sprite data block #46, GEOS sprite 6 $8BC0-$8BFE Sprite data block #47, GEOS sprite 7 $8C00-$8FE7 COLOR_MATRIX Color ram for hires screen $8FE8-$8FFF Sprite pointers; usually set to 40 to 47 $9000-$9FFF DISK_BASE Disk driver base address $9C78-$9D78 3rd BAM sector? $A000-$BF3F SCREEN_BASE Primary hires screen $BF40-$FE7F GEOS Kernal $FE80-$FFF9 Input driver $FFFA-$FFFB NMI_VECTOR NMI vector $FFFC-$FFFD RESET_VECTOR Power up reset vector $FFFE-$FFFF IRQ_VECTOR IRQ vector GEOS EQUATES and LOGICALS For $2F - dispBufferOn ST_WR_FORE - $80 ST_WR_BACK - $40 ST_WRGS_FORE - $20 For GraphicsString MOVEPENTO - 1 Move Pen to X,Y LINETO - 2 Draw line to X,Y RECTANGLETO - 3 Draw a rectangle to x,y - 4 NEWPATTERN - 5 Set a new pattern ESC_PUTSTRING - 6 Start PutString interpretation FRAME_RECTO - 7 Draw frame or rectangle PEN_X_DELTA - 8 Move pen by signed word delta in x PEN_Y_DELTA - 9 PEN_XY_DELTA For PutDecimal SET_LEFTJUST - %10000000 Left justified SET_RIGHTJUST - %00000000 Right justified SET_SUPRESS - %01000000 Supress leading 0's SET_NOSUPRESS - %00000000 Leading 0's For $01 - CPU_DATA IO_IN - $35 60K RAM, 4K IO space in RAM_64K - $30 64K RAM KRNL_BAS_IO_IN - $37 Both Kernal and BASIC ROMS mapped in KRNL_IO_IN - $36 Kernal and IO space mapped in For DoMenu HORIZONTAL - %00000000 VERTICAL - %10000000 CONSTRAINED - %01000000 UN_CONSTRAINED - %00000000 . SUB_MENU - $80 Defining action of a menu item click DYN_SUB_MENU - $40 MENU_ACTION - $00 For $2E - currentMode SET_UNDERLINE - %10000000 SET_BOLD - %01000000 SET_REVERSE - %00100000 SET_ITALIC - %00010000 SET_OUTLINE - %00001000 SET_SUPERSCRIPT - %00000100 SET_SUBSCRIPT - %00000010 SET_PLAINTEXT - %00000000 . UNDERLINE_BIT - 7 BOLD_BIT - 6 REVERSE_BIT - 5 ITALIC_BIT - 4 OUTLINE_BIT - 3 SUPERSCRIPT_BIT - 2 SUBSCRIPT_BIT - 1 For PutChar, PutString, etc. BOLDON - 24 ITALICON - 25 OUTLINEON - 26 PLAINTEXT - 27 USELAST - 127 Erase characters SHORTCUT - 128 Shortcut characters For directory entries "GEOS file type" byte NOT_GEOS - 0 BASIC - 1 ASSEMBLY - 2 DATA - 3 SYSTEM - 4 DESC_ACC - 5 APPLICATION - 6 APPL_DATA - 7 FONT - 8 PRINTER - 9 INPUT_DEVICE - 10 DISK_DEVICE - 11 SYSTEM_BOOT - 12 TEMPORARY - 13 AUTO_EXEC - 14 INPUT_128 - 15 NUM_FILE_TYPES - 15 For "GEOS File Structure" SEQUENTIAL - 0 VLIR - 1 GEOS Error Messages NO_BLOCKS - 1 INSUFF_SPACE - 3 FULL_DIRECTORY - 4 FILE_NOT_FOUND - 5 OUT_OF_RECORDS - 9 DEV_NOT_FOUND - 13 WR_VERR_ERR - $25 WR_PR_ON - $26 File Types DEL - 0 SEQ - 1 PRG - 2 USR - 3 REL - 4