Mercurial > hg > index.cgi
view defs.s @ 0:605ff82c4618
Initial check in with cleaned up sources
This is the initial check in the source code in a state where it builds byte
accurate copies of all the various ROM versions included.
author | William Astle <lost@l-w.ca> |
---|---|
date | Sat, 08 Dec 2018 19:57:01 -0700 |
parents | |
children | 704b2c9dc19e |
line wrap: on
line source
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; First, some useful macro definitions to avoid most instances with FCB standing for actual code. skip1 macro noexpand fcb 0x21 ; opcode of BRN which causes next code byte to be skipped endm skip2 macro noexpand fcb 0x8c ; opcode of CMPX immediate which will skip two bytes (but clobbers flags) endm skip2keepc macro noexpand fcb 0x7d ; opcode of TST extended which will skip two bytes like above but preserves C endm skip1lda macro noexpand fcb 0x86 ; opcode of LDA immediate; used to load A with nonzero and skip a CLRA, usually endm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Now various constants used in the ROMs. STKBUF equ 58 ; extra room kept between the stack and variables during memory checks DEBDEL equ 0x45e ; delay constant for debouncing the keyboard (10ms at standard clock speed) LBUFMX equ 250 ; size of the line input buffer MAXLIN equ 0xfa ; the maximum MS byte of a line number DOSBUF equ 0x2600 ; address where DOS command loads track 24 DIRLEN equ 32 ; size of a directory entry on disk SECLEN equ 256 ; length of a disk sector SECMAX equ 18 ; number of sectors per track TRKLEN equ SECMAX*SECLEN ; number of bytes on a track TRKMAX equ 35 ; number of tracks per disk FATLEN equ 6+(TRKMAX-1)*2 ; size of memory copy of a file allocation table GRANMX equ (TRKMAX-1)*2 ; number of granules per disk FCBLEN equ SECLEN+25 ; size of a file control block INPFIL equ 0x10 ; input file type OUTFIL equ 0x20 ; output file type RANFIL equ 0x40 ; random file type ROWMAX equ 24 ; the number of rows on the hi-res text screen HRESSCRN equ 0x2000 ; where the hi-res text screen starts in logical memory HRESBUFF equ 0xc000 ; where the HGET/HPUT buffers are in logical memory TMPSTACK equ 0xdfff ; temporary stack location when in secondary memory map CURCHAR equ SPACE ; hi-res text screen cursor character ; HGET/HPUT buffer header structure HB.ADDR equ 0 ; address of next buffer (2 bytes) HB.NUM equ 2 ; number of this buffer (1 byte) HB.SIZE equ 3 ; number of bytes in this buffer (2 bytes) HB.LEN equ 5 ; number of bytes in a buffer header ; Video register definitions ; INIT0 COCO equ 0x80 ; 1 = Coco2 compatible mode MMUEN equ 0x40 ; 1 = MMU enabled IEN equ 0x20 ; 1 = IRQ enabled FEN equ 0x10 ; 1 = FIRQ enabled MC3 equ 0x08 ; 1 = FExx constant page enabled MC2 equ 0x04 ; 1 = Standard SCS operation MC1 equ 0x02 ; ROM map control bit 1 MC0 equ 0x01 ; ROM map control bit 0 ; Interrupt enable/status bits TMR equ 0x20 ; TIMER HBORD equ 0x10 ; horizontal border VBORD equ 0x08 ; vertical border EI2 equ 0x04 ; serial data EI1 equ 0x02 ; keyboard EI0 equ 0x01 ; cartridge port ; Memory block definitions BLOCK6.0 equ 0x30 ; hi-res graphics screen BLOCK6.1 equ 0x31 ; hi-res graphics screen BLOCK6.2 equ 0x32 ; hi-res graphics screen BLOCK6.3 equ 0x33 ; hi-res graphics screen BLOCK6.4 equ 0x34 ; HGET/HPUT buffers BLOCK6.5 equ 0x35 ; stack space for hi-res graphics operations BLOCK6.6 equ 0x36 ; hi-res text screen BLOCK6.7 equ 0x37 ; unused by Basic BLOCK7.0 equ 0x38 ; standard 64K memory map BLOCK7.1 equ 0x39 ; standard 64K memory map BLOCK7.2 equ 0x3a ; standard 64K memory map BLOCK7.3 equ 0x3b ; standard 64K memory map BLOCK7.4 equ 0x3c ; standard 64K memory map BLOCK7.5 equ 0x3d ; standard 64K memory map BLOCK7.6 equ 0x3e ; standard 64K memory map BLOCK7.7 equ 0x3f ; standard 64K memory map (constant page comes from this block) ; Disk Basic FAT data format. The memory image contains a six byte header followed by the cached copy ; of the FAT from the disk. The cached copy may be modified compared to the copy on disk. This is indicated ; by a nonzero of the "FAT1" byte. FAT0 equ 0 ; active file counter for this image FAT1 equ 1 ; data changed flag - nonzero means write is needed FATCON equ 6 ; offset to start of FAT data ; Directory entry format. Entries are 32 bytes long but only the first 16 are used. DIRNAM equ 0 ; file name (8 characters) DIREXT equ 8 ; extention (3 characters) DIRTYP equ 11 ; file type number DIRASC equ 12 ; ASCII flag DIRGRN equ 13 ; first granule number for the file DIRLST equ 14 ; number of bytes used in last sector (two bytes are needed) ; File control block format. FCBTYP equ 0 ; file type: 0x40=RANDOM, 0x20=WRITE, 0x10=READ FCBDRV equ 1 ; drive number FCBFGR equ 2 ; first granule in the file FCBCGR equ 3 ; current granule being used FCBSEC equ 4 ; current sector within granule FCBCPT equ 5 ; input file - next char to be read; output: sector full flag (sequential) FCBPOS equ 6 ; current print position (0 for random files) FCBREC equ 7 ; current record number (random files) FCBRLN equ 9 ; random file record length FCBBUF equ 11 ; pointer to the start of this files buffer FCBSOF equ 13 ; sector offset to current position in the record FCBFLG equ 15 ; GET/PUT flag FCBCFL equ 16 ; cache flag: nonzero is cache full (sequential) FCBCDT equ 17 ; cache byte (sequential) FCBDIR equ 18 ; directory entry number FCBLST equ 19 ; number of bytes in last sector of the file FCBGET equ 21 ; GET record counter (how many pulled from record) FCBPUT equ 23 ; PUT record counter (where to put next byte in record) FCBDFL equ 23 ; input file: data left flag (nonzero is no data) FCBLFT equ 24 ; number of characters left in input file buffer FCBCON equ 25 ; offset to data buffer ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This is the memory map and variable definitions for the entire system (all levels of Basic) ; NOTE: unnamed variables (Vxx) are generally scratch variables used for various purpose. As such, no further description is ; provided for those. org 0 setdp 0 ENDFLG rmb 1 ; STOP/END flag: bit 7 set means STOP, bit 7 clear means END CHARAC rmb 1 ; terminator character for searches ENDCHR rmb 1 ; terminator character for searches TMPLOC rmb 1 ; scratch variable IFCTR rmb 1 ; number of "IF" statements encountered while scanning a line DIMFLG rmb 1 ; nonzero means dimensioning, zero means evaluating (when parsing array) VALTYP rmb 1 ; the type of the current value when evaluating expressions GARBFL rmb 1 ; flag for whether garbage collection has been done yet when allocating strings ARYDIS rmb 1 ; nonzero means don't parse arrays when parsing variables INPFLG rmb 1 ; are we running INPUT or READ - nonzero for INPUT RELFLG rmb 1 ; which relational operators are currently in play TEMPPT rmb 2 ; pinter to the top of the string stack LASTPT rmb 2 ; pointer to the last entry on the string stack TEMPTR rmb 2 ; scratch pointer TMPTR1 rmb 2 ; scratch pointer FPA2 rmb 4 ; floating point accumulator, mantissa only BOTSTK rmb 2 ; bottom of stack during last check; also a scratch variable TXTTAB rmb 2 ; pointer to the beginning of the program VARTAB rmb 2 ; pointer to the beginning of the scalar variable table (end of program) ARYTAB rmb 2 ; pointer to the beginning of the array table (end of scalars) ARYEND rmb 2 ; pointer to the end of the array table (start of free memory) FRETOP rmb 2 ; top of free memory (start of string space) STRTAB rmb 2 ; start of allocates string space FRESPC rmb 2 ; pointer to newly allocated string space MEMSIZ rmb 2 ; top of memory (and string space) allowed for the interpreter to size OLDTXT rmb 2 ; save line number during STOP BINVAL rmb 2 ; binary value of line number during parsing OLDPTR rmb 2 ; saving input pointer during STOP TINPTR rmb 2 ; temporary input pointer storage DATTXT rmb 2 ; line number where we're looking for DATA DATPTR rmb 2 ; input pointer where we're looking for DATA DATTMP rmb 2 ; scratch pointer for INPUT and READ VARNAM rmb 2 ; storage for variable name during parsing VARPTR rmb 2 ; pointer to variable descriptor VARDES rmb 2 ; pointer to variable descriptor RELPTR rmb 2 ; pointer to relational operator processing routine TRELFL rmb 1 ; temporary relational operator flags V40 rmb 1 V41 rmb 1 V42 rmb 1 V43 rmb 1 V44 rmb 1 V45 rmb 1 V46 rmb 1 V47 rmb 1 V48 rmb 2 V4A rmb 1 V4B rmb 2 V4D rmb 2 FP0EXP rmb 1 ; floating point accumulator #0 exponent FPA0 rmb 4 ; floating point accumulator #0 mantissa FP0SGN rmb 1 ; floating point accumulator #0 sign COEFCT rmb 1 ; polynomial expansion coefficient counter STRDES rmb 5 ; temporary string descriptor FPCARY rmb 1 ; floating point carry byte FP1EXP rmb 1 ; floating point accumulator #1 exponent FPA1 rmb 4 ; floating point accumulator #1 mantissa FP1SGN rmb 1 ; floating point accumulator #1 sign RESSGN rmb 1 ; pre-calculated result sign FPSBYT rmb 1 ; floating point extra precision underflow byte COEFPT rmb 2 ; polynomial expansion coefficient pointer LSTTXT rmb 2 ; current line pointer during LIST CURLIN rmb 2 ; line number of currently executing statement (0xffff for direct) DEVCFW rmb 1 ; width of tab field for current device DEVLCF rmb 1 ; column of last tab field for current device DEVPOS rmb 1 ; current output column for current device DEVWID rmb 1 ; number of characters per line for current device PRTDEV rmb 1 ; print device flag: 0xff for non-display device (tape) DEVNUM rmb 1 ; current I/O device/file number (signed) CINBFL rmb 1 ; EOF flag for console in (0xff for EOF) RSTFLG rmb 1 ; warm start enable flag: 0x55 for enabled RSTVEC rmb 2 ; pointer to warm start routine (must start with NOP) TOPRAM rmb 2 ; the actual top of memory rmb 2 ; *unused* FILSTA rmb 1 ; status of tape file (0=closed, 1=input, 2=output) CINCTR rmb 1 ; number of characters in buffer CINPTR rmb 2 ; pointer to current buffer location BLKTYP rmb 1 ; cassette block type BLKLEN rmb 1 ; length of cassette block CBUFAD rmb 2 ; pointer to data buffer for cassette I/O CCKSUM rmb 1 ; cassette checksum CSRERR rmb 1 ; cassette error flag/charactercount CPULWD rmb 1 ; pulse width counter CPERTM rmb 1 ; bit counter CBTPHA rmb 1 ; sync phase flag CLSTSN rmb 1 ; last sine table entry GRBLOK rmb 1 ; graphic block value for SET/RESET/POINT IKEYIM rmb 1 ; cached key read during BREAK check CURPOS rmb 2 ; screen cursor position ZERO rmb 2 ; always kept as 0 SNDTON rmb 1 ; tone value for SOUND SNDDUR rmb 2 ; duration value for SOUND CMPMID rmb 1 ; 1200/2400 Hz partition (why is this a variable?) CMP0 rmb 1 ; upper limit of 1200 Hz period (why is this a variable?) CMP1 rmb 1 ; upper limit of 2400 Hz period (why is this a variable?) SYNCLN rmb 2 ; number of 0x55s for a cassette leader (why is this a variable?) BLKCNT rmb 1 ; cursor blink delay counter LPTBTD rmb 2 ; serial baud rate delay count LPTLND rmb 2 ; delay for waiting for carriage return LPTCFW rmb 1 ; tab field width for printer LPTLCF rmb 1 ; last tab field position for printer LPTWID rmb 1 ; width of printer line LPTPOS rmb 1 ; current character position for printer EXECJP rmb 2 ; default jump address for EXEC GETNCH rmb 6 ; fetch next character for interpretation (INC CHARAD+1\BNE GETCCH\INC CHARAD) GETCCH rmb 1 ; re-fetch the current character for interpretation (opcode of LDA extended) CHARAD rmb 2 ; current input pointer rmb 3 ; (JMP BROMHK) VAB rmb 1 VAC rmb 1 VAD rmb 1 VAE rmb 1 TRCFLG rmb 1 ; is TRACE enabled? nonzero is on USRADR rmb 2 ; address of the start of USR vectors FORCOL rmb 1 ; bitmap foreground colour BAKCOL rmb 1 ; bitmap background colour WCOLOR rmb 1 ; bitmap working colour ALLCOL rmb 1 ; byte with all pixels set to WCOLOR PMODE rmb 1 ; which PMODE is active ENDGRP rmb 2 ; end of current bitmap graphics page HORBYT rmb 1 ; number of bytes per bitmap row BEGGRP rmb 2 ; start of current bitmap graphics page GRPRAM rmb 1 ; MSB of start of bitmap graphics HORBEG rmb 2 ; horizontal starting coordinate VERBEG rmb 2 ; vertical starting coordinate CSSVAL rmb 1 ; SCREEN's colour set value SETFLG rmb 1 ; doing PSET or PRESET? (nonzero = PSET) HOREND rmb 2 ; horizontal ending coordinate VEREND rmb 2 ; vertical ending coordinate HORDEF rmb 2 ; default horizontal coordinate VERDEF rmb 2 ; default vertical coordinate VCB rmb 2 VCD rmb 2 VCF rmb 2 VD1 rmb 2 VD3 rmb 1 VD4 rmb 1 VD5 rmb 1 VD6 rmb 1 VD7 rmb 1 VD8 rmb 1 VD9 rmb 1 VDA rmb 1 CHGFLG rmb 1 ; flag indicating if graphic data changed TMPSTK rmb 2 ; temporary stack pointer during PAINT OCTAVE rmb 1 ; PLAY octave VOLHI rmb 1 ; PLAY high volume value VOLLOW rmb 1 ; PLAY low volumnevalue NOTELN rmb 1 ; PLAY notelength TEMPO rmb 1 ; PLAY tempo PLYTMR rmb 2 ; PLAY timer DOTVAL rmb 1 ; PLAY dotted note timer scale factor HRMODE equ * ; Coco3 graphics mode DLBAUD rmb 1 ; DLOAD BAUD constant HRWIDTH equ * ; Coco3 text mode TIMOUT rmb 1 ; DLOAD timeout constant ANGLE rmb 1 ; DRAW angle SCALE rmb 1 ; DRAW scale DCOPC rmb 1 ; DSKCON operation code DCDRV rmb 1 ; DSKCON drive number DCTRK rmb 1 ; DSKCON track number DSEC rmb 1 ; DSKCON sector number DCBPT rmb 2 ; DSKCON buffer pointer DCSTA rmb 1 ; DSKCON status FCBTMP rmb 2 ; temp file control block pointer rmb 13 ; *unused* SW3VEC rmb 3 ; SWI3 vector SW2VEC rmb 3 ; SWI2 vector SWIVEC rmb 3 ; SWI vector NMIVEC rmb 3 ; NMI vector IRQVEC rmb 3 ; IRQ vector FRQVEC rmb 3 ; FIRQ vector TIMVAL equ * ; Extended Basic TIMER value (2 bytes only) USRJMP rmb 3 ; jump address for USR function RVSEED rmb 5 ; floating point random number seed CASFLG rmb 1 ; capslock state for keyboard DEBVAL rmb 2 ; keyboar debounce delay (why is this a variable?) EXPJMP rmb 3 ; exponentiation handler COMVEC rmb 10 ; Color Basic's command table rmb 10 ; Extended Basic's command table rmb 10 ; Disk Basic's command table USR0 rmb 20 ; ECB USR jump addresses (extra user command table and unused for Disk Basic) KEYBUF rmb 8 ; keyboard state table POTVAL rmb 4 ; joystick axis values (left vert, left horiz, right vert, right horiz) RVEC0 rmb 3 ; RAM hook: OPEN RVEC1 rmb 3 ; RAM hook: device number check RVEC2 rmb 3 ; RAM hook: set print parameters RVEC3 rmb 3 ; RAM hook: console out RVEC4 rmb 3 ; RAM hook: console in RVEC5 rmb 3 ; RAM hook: input device number check RVEC6 rmb 3 ; RAM hook: output device number check RVEC7 rmb 3 ; RAM hook: close all files RVEC8 rmb 3 ; RAM hook: close current file RVEC9 rmb 3 ; RAM hook: PRINT RVEC10 rmb 3 ; RAM hook: INPUT RVEC11 rmb 3 ; RAM hook: BREAK check RVEC12 rmb 3 ; RAM hook: line input RVEC13 rmb 3 ; RAM hook: terminating line input RVEC14 rmb 3 ; RAM hook: EOF RVEC15 rmb 3 ; RAM hook: expression evaluation RVEC16 rmb 3 ; RAM hook: ERROR handler (on error goto) RVEC17 rmb 3 ; RAM hook: ERROR handler (regular handling) RVEC18 rmb 3 ; RAM hook: RUN RVEC19 rmb 3 ; RAM hook: parse number RVEC20 rmb 3 ; RAM hook: main interpretation loop RVEC21 rmb 3 ; RAM hook: SET/RESET/POINT RVEC22 rmb 3 ; RAM hook: CLS/ECB secondary/RENUM token/GET/PUT RVEC23 rmb 3 ; RAM hook: crunch line RVEC24 rmb 3 ; RAM hook: uncrunch line STRSTK rmb 8*5 ; string stack CFNBUF rmb 9 ; cassette file name buffer CASBUF rmb 256 ; cassette I/O buffer LINHDR rmb 2 ; header for line input (holds line number when editing program) LINBUF rmb LBUFMX+1 ; line input buffer STRBUF rmb 41 ; temporary string buffer VIDRAM rmb 0x200 ; VDG text screen DBUF0 rmb SECLEN ; Main disk I/O buffer DBUF1 rmb SECLEN ; Secondary disk I/O buffer (used for VERIFY) FATBL0 rmb FATLEN ; File allocation table cache for drive 0 FATBL1 rmb FATLEN ; File allocation table cache for drive 1 FATBL2 rmb FATLEN ; File allocation table cache for drive 2 FATBL3 rmb FATLEN ; File allocation table cache for drive 3 FCBV1 rmb 16*2 ; FCB pointers RNBFAD rmb 2 ; start of free random file buffer area FCBADR rmb 2 ; start of file control blocks DNAMBF rmb 8 ; disk file name buffer DEXTBF rmb 3 ; disk file name extension buffer DFLTYP rmb 1 ; disk file type (0=Basic, 1=Data, 2=M/L) DASCFL rmb 1 ; disk file ASCII flag (0=binary, 0xff=ASCII) DRUNFL rmb 1 ; RUN flag (bit 1 set then RUN, bit 0 set then close files) DEFDRV rmb 1 ; default drive number FCBACT rmb 1 ; number of active file control blocks DRESFL rmb 1 ; reset flag - will cause all FCBs to be shut down DLODFL rmb 1 ; load flag - cause a "NEW" on error DMRGFL rmb 1 ; merge flag: nonzero means we're merging DUSRVC rmb 20 ; Disk Basic USR addresses V973 rmb 1 V974 rmb 2 V976 rmb 1 V977 rmb 1 V978 rmb 2 WFATVL rmb 2 ; number of granules allocated to trigger a FAT cache write DFFLEN rmb 2 ; direct access file recrod length DR0TRK rmb 4 ; current track number for each drive NMIFLG rmb 1 ; nonzero means NMI vectoring is enabled DNMIVC rmb 2 ; address to vector to in NMI RDYTMR rmb 1 ; number of ticks before turning off drive motors DRGRAM rmb 1 ; cached value of write-only disk control register DVERFL rmb 1 ; nonzero means write verifies on ATTCTR rmb 1 ; read/write attempt counter DFLBUF equ * ; start of random file area, FCBs, etc. org 0x8000 EXBAS rmb 0x2000 ; Extended Basic ROM area BASIC rmb 0x2000 ; Color Basic ROM area ROMPAK equ * ; external ROM address DOSBAS rmb 0x2000 ; Disk Basic ROM area rmb 0x1e00 ; Super Extended Basic ROM area ; These are the variables used by SECB on the "constant FExx page" which is unaffected by the MMU ; when the FExx bit in INIT0 is set. H.CRSLOC rmb 2 ; current cursor location pointer (hi-res) H.CURSX rmb 1 ; current X coordinate of the cursor (hi-res) H.CURSY rmb 1 ; current Y coordinate of the cursor (hi-res) H.COLUMN rmb 1 ; the number of columns on the screen (hi-res) H.ROW rmb 1 ; the number of rows on the screen (hi-res) H.DISPEN rmb 2 ; pointer to the end of the screen (hi-res) H.CRSATT rmb 1 ; current cursor attributes (hi-res) rmb 1 ; *unused* H.FCOLOR rmb 1 ; foreground colour (hi-res) H.BCOLOR rmb 1 ; background colour (hi-res) H.ONBRK rmb 2 ; ON BRK GOTO line number H.ONERR rmb 2 ; ON ERR GOTO line number H.ERROR rmb 1 ; most recent error number encountered (-1 for no error) H.ONERRS rmb 2 ; line number where ON ERR GOTO was encountered H.ERLINE rmb 2 ; line number where error actually occurred H.ONBRKS rmb 2 ; line number where ON BRK GOTO was encountered H.ERRBRK rmb 1 ; flag for whether we're processing an error or a break event H.PCOUNT rmb 1 ; number of characters in the HPRINT buffer H.PBUF rmb 80 ; HPRINT line buffer (max 80 characters per line) rmb 132 ; *unused* ; This is the set of primary interrupt vectors on the Coco3. These are here so that systems other ; than Basic do not have to rely on low memory remaining constant. Under Basic, these simply bounce ; to the traditional vectors starting at 0x100. INT.FLAG rmb 1 ; interrupt vector validity flag: 0x55 for valid INT.JUMP equ * INT.SWI3 rmb 3 ; SWI3 bounce vector INT.SWI2 rmb 3 ; SWI2 bounce vector INT.FIRQ rmb 3 ; FIRQ bounce vector INT.IRQ rmb 3 ; IRQ bounce vector INT.SWI rmb 3 ; SWI bounce vector INT.NMI rmb 3 ; NMI bounce vector ; This is that start of the I/O page. Everything above here is hardware defined. PIA0 rmb 4 ; PIA0 (keyboard/joystick) rmb 28 ; PIA0 images (due to sloppy-ass decode) DA equ * ; DAC address PIA1 rmb 4 ; PIA1 (misc hardware) rmb 28 ; PIA1 images (due to sloppy-ass decode) DSKREG rmb 1 ; Disk control register rmb 7 ; images of DSKREG due to (sloppy-ass decode) FDCREG rmb 1 ; FDC command/status register rmb 1 ; FDC track register rmb 1 ; FDC sector register rmb 1 ; FDC data register rmb 4 ; mirror of FDCREG rmb 16 ; unused SCS area rmb 32 ; misc hardware area rmb 16 ; *coco3 reserved* INIT0 rmb 1 ; GIME initialization register 0 INIT1 rmb 1 ; GIME initialization register 1 IRQENR rmb 1 ; GIME IRQ enable/status register FIRQENR rmb 1 ; GIME FIRQ enable/status register V.TIMER rmb 2 ; GIME timer setting rmb 2 ; *reserved* VIDEOMOD rmb 1 ; GIME video mode register VIDEORES rmb 1 ; GIME video resolution register V.BORDER rmb 1 ; GIME border colour register rmb 1 ; *reserved* V.SCROLL rmb 1 ; GIME vertical scroll register V.OFFSET rmb 2 ; GIME vertical offset (screen address) register H.OFFSET rmb 1 ; GIME horizontal offset register MMUREG rmb 16 ; GIME MMU registers (two tasks of 8) PALETREG rmb 16 ; GIME palette registers SAMREG equ * ; the SAM registers V0CLR rmb 1 ; SAM video mode bits V0SET rmb 1 V1CLR rmb 1 V1SET rmb 1 V2CLR rmb 1 V2SET rmb 1 F0CLR rmb 1 ; SAM screen address bits F0SET rmb 1 F1CLR rmb 1 F1SET rmb 1 F2CLR rmb 1 F2SET rmb 1 F3CLR rmb 1 F3SET rmb 1 F4CLR rmb 1 F4SET rmb 1 F5CLR rmb 1 F5SET rmb 1 F6CLR rmb 1 F6SET rmb 1 rmb 2 ; *reserved* R0CLR rmb 1 ; SAM R0 bit (address dependent speedup) R0SET rmb 1 R1CLR rmb 1 ; SAM R1 bit (full speedup/coco3 speedup) R1SET rmb 1 rmb 4 ; *reserved* TYCLR rmb 1 ; force ROM mode TYSET rmb 1 ; set RAM mode rmb 18 ; *MPU reserved* SWI3 rmb 2 ; MPU SWI3 vector SWI2 rmb 2 ; MPU SWI2 vector FIRQ rmb 2 ; MPU FIRQ vector IRQ rmb 2 ; MPU IRQ vector SWI rmb 2 ; MPU SWI vector NMI rmb 2 ; MPU NMI vector RESETV rmb 2 ; MPU reset vector