====== 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!