====== System ROM ======
The first 8K of the Astrocade's [[hardware:memory map]] ($0000-$1FFF) is dedicated to system ROM, which contains the operating system and the four built-in programs: Scribbling, Calculator, Checkmate, and Gunfight.
The end of the Nutting Manual contains the complete 8K ROM Source Listing. Its table of contents reads as follows:
^ Name ^ Pages ^ ROM Memory ^
| Home Video Game Equates | 2–15 | |
| System Routines | 16–94 | $0000 |
| [[Scribbling]] | 1–17 | $0E19 |
| [[Calculator]] | 1–20 | $1020 |
| [[Checkmate]] | 1–30 | $1328 |
| [[:Gunfight]] | 1–46 | $17
===== System Dope Vector =====
; Stuff in SYSTEM DOPE VECTOR (valid for ALL system ROMs):
STIMER EQU $0200 ; Seconds and game TIMER, music
CTIMER EQU $0203 ; Custom TIMERs
FNTSYS EQU $0206 ; FoNT descriptor for SYStem font
FNTSML EQU $020D ; FoNT descriptor for SMaLl font
ALKEYS EQU $0214 ; ALl KEYS keypad mask
MENUST EQU $0218 ; head of onboard MENU STart
MXSCR EQU $021E ; address of 'MaX SCoRe' text string
NOPLAY EQU $0228 ; address of 'Number Of PLAYers' string
NOGAME EQU $0235 ; address of 'Number Of GAMEs' string
===== System RAM Memory Cells =====
System RAM memory definitions are located at $4FC8–4FFD in the Nutting Manual source listing (p. 14–15).
So it's possible to squash these definitions if user program overwrites these RAM areas??
; ***************************
; * SYSTEM RAM MEMORY Cells *
; ***************************
WASTE EQU $0FFF
WASTER EQU WASTE
;
SYSRAM EQU $4FCE ; Resides at the highest possible address
BEGRAM EQU SYSRAM ; typically used for initial Stack Pointer
; Used by MUSIC PROCESSOR:
MUZPC EQU $4FCE ; MUSic Program Counter
MUZSP EQU $4FD0 ; MUSic Stack Pointer
PVOLAB EQU $4FD2 ; Preset VOLume for tones A and B
PVOLMC EQU $4FD3 ; Preset VOLuMe for tone C and Noise Mode
VOICES EQU $4FD4 ; music VOICES mask
; COUNTER TIMERS (used by DECCTS,ACTINT,CTIMER):
CT0 EQU $4FD5 ; Counter Timer 0
CT1 EQU $4FD6 ; Counter Timer 1
CT2 EQU $4FD7 ; Counter Timer 2
CT3 EQU $4FD8 ; Counter Timer 3
CT4 EQU $4FD9 ; Counter Timer 4
CT5 EQU $4FDA ; Counter Timer 5
CT6 EQU $4FDB ; Counter Timer 6
CT7 EQU $4FDC ; Counter Timer 7
;Used by SENTRY to track controls:
CNT EQU $4FDD ; Counter update & Number Tracking
SEMI4S EQU $4FDE ; SEMAPHORE flag bitS
OPOT0 EQU $4FDF ; Old POT 0 tracking byte
OPOT1 EQU $4FE0 ; Old POT 1 tracking byte
OPOT2 EQU $4FE1 ; Old POT 2 tracking byte
OPOT3 EQU $4FE2 ; Old POT 3 tracking byte
KEYSEX EQU $4FE3 ; KEYS-EX tracking byte
OSW0 EQU $4FE4 ; Old SWitch 0 tracking byte
OSW1 EQU $4FE5 ; Old SWitch 1 tracking byte
OSW2 EQU $4FE6 ; Old SWitch 2 tracking byte
OSW3 EQU $4FE7 ; Old SWitch 3 tracking byte
COLLST EQU $4FE8 ; COLset LaST address for P.B. A
; Used by STIMER:
DURAT EQU $4FEA ; note DURATion
TMR60 EQU $4FEB ; TiMeR for SIXTY'ths of sec
TIMOUT EQU $4FEC ; TIMer for blackOUT
GTSECS EQU $4FED ; Game Time SECondS
GTMINS EQU $4FEE ; Game Time MINuteS
; Used by MENU:
RANSHT EQU $4FEF ; RANdom number SHifT register
NUMPLY EQU $4FF3 ; NUMber of PLaYers
ENDSCR EQU $4FF4 ; END SCoRe to 'play to'
MRLOCK EQU $4FF7 ; Magic Register LOCK out flag
GAMSTB EQU $4FF8 ; GAMe STatus Byte
PRIOR EQU $4FF9 ; PRIOR music protect flag
SENFLG EQU $4FFA ; SENtry control seizure FLaG
; User UPI Routines, even numbers from $80 to $FE ( + 1 for SUCK):
UMARGT EQU $4FFB ; User Mask ARGument Table + (routine / 2)
USERTB EQU $4FFD ; USER Table Base + routine = JumP address
;
URINAL EQU $4FFF ; WASTER flushes here!