IMD 1.15: 16/05/2007 8:30:58 SYSSI.MAC مممممممممممممممSCB ءSMSYSS1 MAC€ SYSS1 MACEممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممم title 'System Control Block Definition for CP/M3 BIOS' public @civec, @covec, @aivec, @aovec, @lovec, @bnkbf public @crdma, @crdsk, @vinfo, @resel, @fx, @usrcd public @mltio, @ermde, @erdsk, @media, @bflgs public @date, @hour, @min, @sec, ?erjmp, @mxtpa scb$base equ 0FE00H ; Base of the SCB @CIVEC equ scb$base+22h ; Console Input Redirection ; Vector (word, r/w) @COVEC equ scb$base+24h ; Console Output Redirection ; Vector (word, r/w) @AIVEC equ scb$base+26h ; Auxiliary Input Redirection ; Vector (word, r/w) @AOVEC equ scb$base+28h ; Auxiliary Output Redirection ; Vector (word, r/w) @LOVEC equ scb$base+2Ah ; List Output Redirection ; Vector (word, r/w) @BNKBF equ scb$base+35h ; Address of 128 Byte Buffer ; for Banked BIOS (word, r/o) @CRDMA equ scb$base+3Ch ; Current DMA Address ; (word, r/o) @CRDSK equ scb$base+3Eh ; Current Disk (byte, r/o) @VINFO equ scb$base+3Fh ; BDOS Variable "INFO" ; (word, r/o) @RESEL equ scb$base+41h ; FCB Flag (byte, r/o) @FX equ scb$base+43h ; BDOS Function for Error ; Messages (byte, r/o) @USRCD equ scb$base+44h ; Current User Code (byte, r/o) @MLTIO equ scb$base+4Ah ; Current Multi-Sector Count ; (byte,r/w) @ERMDE equ scb$base+4Bh ; BDOS Error Mode (byte, r/o) @ERDSK equ scb$base+51h ; BDOS Error Disk (byte,r/o) @MEDIA equ scb$base+54h ; Set by BIOS to indicate ; open door (byte,r/w) @BFLGS equ scb$base+57h ; BDOS Message Size Flag (byte,r/o) @DATE equ scb$base+58h ; Date in Days Since 1 Jan 78 ; (word, r/w) @HOUR equ scb$base+5Ah ; Hour in BCD (byte, r/w) @MIN equ scb$base+5Bh ; Minute in BCD (byte, r/w) @SEC equ scb$base+5Ch ; Second in BCD (byte, r/w) ?ERJMP equ scb$base+5Fh ; BDOS Error Message Jump ; (word, r/w) @MXTPA equ scb$base+62h ; Top of User TPA ; (address at 6,7)(word, r/o) end ion for Error ; Messages (byte, r/o) @USRCD equ scb$base+44h ; Current User Code (byte, r/o) @MLTIO equ scb$base+4Ah ; Current Multi-Sector Count ; (byte,r/w) @ERMDE equ scb$base+4Bh ; BDOS Error Mode (byte, r/o) @ERDSK equ scb$base+51h ; BDOS Error Disk (byte,r/o) @MEDIA equ scb$base+54h ; Set by BIOS to indicate ; open door (byte,r/w) @BFLGS equ scb$base+57h ; BDOS Message Size Flag (byte,r/o) @DATE equ scb$base+58h ; Date in Days Since 1 Jan 78 ; (word, r/w) @HOUR equ scb$base+5Ah ; Hour in BCD (byte,  ; ********************************************************* ; * * ; * EXECUTIVE SYSTEXT * ; * * ; ********************************************************* ; I/O PORTS SYS_DTA EQU 00H ;SYSTEM PIA DATA A SYS_CNA EQU 01H ;SYSTEM PIA CONTROL A SYS_DTB EQU 02H ;SYSTEM PIA DATA B SYS_CNB EQU 03H ;SYSTEM PIA CONTROL B TIM_CT0 EQU 04H ;8253 TIMER COUNTER 1 TIM_CT1 EQU 05H ;8253 TIMER COUNTER 2 TIM_CT2 EQU 06H ;8253 TIMER COUNTER 3 TIM_CNL EQU 07H ;8253 TIMER CONTROL REGISTER DSK_CMD EQU 08H ;FLOPPY DISK DISK COMMAND REG (WRITE) DSK_STS EQU DSK_CMD ;STATUS REG (READ) DSK_TRK EQU DSK_CMD+1 ;TRACK REG DSK_SEC EQU DSK_CMD+2 ;SECTOR REG DSK_DAT EQU DSK_CMD+3 ;DATA REG (R/W) SIO_DTA EQU 0CH ;SIO DATA REG A SIO_CNA EQU 0DH ;SIO CONTROL REG A SIO_DTB EQU 0EH ;SIO DATA REG B SIO_CNB EQU 0FH ;SIO CONTROL REG B PAR_DTA EQU 10H ;PARALLEL PORT PIA DATA A PAR_CNA EQU 11H ;CONTROL REGISTER A PAR_DTB EQU 12H ;PARALLEL PORT PIA DATA B PAR_CNB EQU 13H ;CONTROL REGISTER B KEYBD EQU 14H ;KEYBOARD PAGE ;SYSTEM PIA COMMANDS ;DATA A: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ; ROM ENABLE <-+ | | | | | | | ; VIDEO ENABLE <---+ | | | | | | ; BANK 6 ENABLE <------+ | | | | | ; BANK 5 ENABLE <----------+ | | | | ; BANK 4 ENABLE <--------------+ | | | ; BANK 3 ENABLE <------------------+ | | ; BANK 2 ENABLE <----------------------+ | ; BANK 1 ENABLE <--------------------------+ ;DATA B: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ; RI(ACT LOW) <+ | | | | | | | ; DSR(ACT LOW) <---+ | | | | | | ; TX CLOCK SELECT <----+ | | | | | ; RX CLOCK SELECT <--------+ | | | | ; SPEAKER <--------------------+ | | | ; DRIVE B (ACT LOW) <--------------+ | | ; DRIVE A (ACT LOW) <------------------+ | ; DOUBLE DENSITY (ACT LOW) <---------------+ ;DATA DATA_INIT EQU 10000000B ;ENABLE ROM DATB_INIT EQU 00000111B ;DESELECT DRIVES A & B, SINGLE DENSITY ;SPKR OFF ;DIRECTION DIRA_INIT EQU 11111111B ;SELECT ALL LINES AS OUTPUTS DIRB_INIT EQU 00111111B ;SELECT RI & DSR AS INPUTS, REST AS OUTPUTS ;MASKS ROM_BANK EQU 10000000B ;ROM BANK VID_BANK EQU 01000000B ;VIDEO BANK SPEAKER EQU 00001000B ;SPEAKER BIT PAGE ;SYSTEM PIA CONTROL REGISTERS ; +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ; INTERRUPT FLAGS: | | | | | | | | ; A: DMA INTERRUPT | | | | | | | | ; B: REAL TIME CLOCK INTERRUPT <---+ | | | | | | | ; | | | | | | | ; NOT USED  <-------+ | | | | | | ; | | | | | | ; CONTROL 2: | | | | | | ; A: 110 = 64 COLUMNS, 111 = 80 COLUMNS | | | | | | ; B: 110 = 60 HZ, 111 = 50 HZ <---+---+---+ | | | ; | | | ; DDRA: | | | ; A & B: 1 = DATA REGISTER, 0 = DIRECTION REGISTER <--+ | | ; | | ; CONTROL 1: | | ; A: DMA INTERRUPT REQUEST (HW) | | ; B: REAL TIME CLOCK INTERRUPT | | ; | | ; 1 = ACTIVE HIGH <--------------------------------+ | ; 1 = ENABLE <------------------------------------+ ;CONTROL CA_DAT EQU 00110100B ;64 COLUMNS ;ENABLE DATA REG ;DISABLE INTERRUPTS CA_DIR EQU 00110000B ;64 COLUMNS ;ENABLE DIRECTION REG ;DISABLE INTERRUPTS CA_64C EQU 00110101B ;64 COLUMNS ;ENABLE DATA REG ;ENABLE INTERRUPTS CB_DAT EQU 00110110B ;60HZ ;ENABLE DATA REG ;DISABLE INTERRUPTS CB_DIR EQU 00110010B ;60HZ ;ENABLE DIRECTION REG ;DISABLE INTERRUPTS CB_60H EQU 00110111B ;60HZ ;ENABLE DATA REG ;ENABLE INTERRUPTS ;CONTROL MASKS COL_MSK EQU 00001000B ;64/80 COLUMN MASK INT_MSK EQU 00000001B ;INTERRUPT ENABLE MASK PAGE ;SERIAL PORT -- SIO COMMANDS ;SIO WRITE REGISTERS ;WRITE REG 0: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ;CRC RESET CODES: | | | | | | | | ; NULL 0 0 | | | | | | ; RESET RX CRC CHECKER 0 1 | | | | | | ; RESET TX CRC GENERATOR 1 0 | | | | | | ; RESET TX UNDERRUN/EOM LATCH 1 1 | | | | | | ;COMMAND BITS: | | | | | | ; NULL 0 0 0 | | | ; SEND ABORT 0 0 1 | | | ; RESET EXT/STATUS INTERRUPT 0 1 0 | | | ; CHANNEL RESET 0 1 1 | | | ; ENABLE INT ON NEXT RX CHARACTER 1 0 0 | | | ; RESET TX INT PENDING 1 0 1 | | | ; ERROR RESET 1 1 0 | | | ; RETURN FROM INT (CHAN A ONLY) 1 1 1 | | | ;POINTER BITS: | | | ; REGISTER 0 0 0 0 ; REGISTER 1 0 0 1 ; REGISTER 2 0 1 0 ; REGISTER 3 0 1 1 ; REGISTER 4 1 0 0 ; REGISTER 5 1 0 1 ; REGISTER 6 1 1 0 ; REGISTER 7 1 1 1 ;WRITE REG 1: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ;WAIT/READY: | | | | | | | | ; WAIT/READY ENABLE <-+ | | | | | | | ; ~WAIT/READY FUNCTION <--+ | | | | | | ; WAIT/READY ON RX/TX <------+ |  | | | | ;RX INTERRUPT MODE: | | | | | ; RX INTERRUPTS DISABLED 0 0 | | | ; RX INT ON FIRST CHAR 0 1 | | | ; INT ON ALL RX CHARS 1 0 | | | ; INT ON ALL RX CHARS 1 1 | | | ;STATUS AFFECTS VECTOR (CHAN B ONLY) <--------------+ | | ;TX INT ENABLE <---------------------------------------+ | ;EXT INT ENABLE <-------------------------------------------+ PAGE ;WRITE REG 2: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ; | | | | | | | | ;INTERRUPT VECTOR <--------------+---+---+---+---+---+---+---+ ;WRITE REG 3: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ;RECEIVER BITS/CHARACTER: | | | | | | | | ; 5 BITS 0 0 | | | | | | ; 6 BITS 0 1 | | | | | | ; 7 BITS 1 0 | | | | | | ; 8 BITS 1 1 | | | | | | ;AUTO ENABLES <--------------------------+ | | | | | ;ENTER HUNT PHASE (NOT USED) <---------------+ | | | | ;RX CRC ENABLE <---------------------------------+ | | | ;ADDRESS SEARCH MODE (NOT USED) <--------------------+ | | ;SYNC CHAR LOAD INHIBIT (NOT USED) <---------------------+ | ;RX ENABLE <---------------------------------------------+ ;WRITE REG 4: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ;CLOCK MODE: | | | | | | | | ; X1 CLOCK MODE 0 0 | | | | | | ; X16 CLOCK MODE 0 1 | | | | | | ; X32 CLOCK MODE 1 0 | | | | | | ; X64 CLOCK MODE 1 1 | | | | | | ;SYNC MODE: (NOT USED) | | | | | | ; 8 BIT SYNC CHAR 0 0 | | | | ; 16 BIT SYNC CHAR 0 1 | | | | ; SDLC MODE 1 0 | | | | ; EXT SYNC MODE 1 1 | | | | ;STOP BITS: | | | | ; SYNC MODE ENABLE 0 0 | | ; 1 STOP BIT/CHAR 0 1 | | ; 1.5 STOP BITS/CHAR 1 0 | | ; 2 STOP BITS/CHAR 1 1 | | ;PARITY: | | ; PARITY EVEN/ODD <--------------------------------+ | ; PARITY ENABLE <------------------------------------+ PAGE ;WRITE REG 5: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ;  +---+---+---+---+---+---+---+---+ ; | | | | | | | | ;DTR <---------------------------+ | | | | | | | ;TX BITS/CHARACTER: | | | | | | | ; 5 BITS 0 0 | | | | | ; 6 BITS 0 1 | | | | | ; 7 BITS 1 0 | | | | | ; 8 BITS 1 1 | | | | | ;SEND BREAK <--------------------------------+ | | | | ;TX ENABLE <------------------------------------+ | | | ;CRC TYPE (NOT USED) <-------------------------------+ | | ;RTS <---------------------------------------------------+ | ;TX CRC ENABLE <---------------------------------------------+ ;WRITE REG 6: +---+---+---+---+---+---+---+---+ ; (NOT USED) | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ; | | | | | | | | ;TRANSMIT SYNC CHAR <------------+---+---+---+---+---+---+---+ ;WRITE REG 7: +---+---+---+---+---+---+---+---+ ; (NOT USED) | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ; | | | | | | | | ;RECEIVE SYNC CHAR <------------+---+---+---+---+---+---+---+ PAGE ;SIO READ REGISTERS ;READ REG 0: +---+---+---+---+---+---+---+--+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0| ; +---+---+---+---+---+---+---+--+ ; | | | | | | | | ;BREAK/ABORT <----------------+ | | | | | | | ;TX UNDERRUN/EOM <--------------------+ | | | | | | ;CTS <------------------------+ | | | | | ;SYNC/HUNT <----------------------------+ | | | | ;DCD <--------------------------------+ | | | ;TX BUFFER EMPTY <------------------------------------+ | | ;INT PENDING (CHAN A ONLY) <-----------------------------+ | ;RX CHARACTER AVAILABLE <------------------------------------+ ;READ REG 1: +---+---+---+---+---+---+---+--+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0| ; +---+---+---+---+---+---+---+--+ ; | | | | | | | | ;END OF FRAME <-----------------+ | | | | | | | ;CRC/FRAMING ERROR <-----------------+ | | | | | | ;RX OVERRUN ERROR <---------------------+ | | | | | ;PARITY ERROR <-----------------------------+ | | | | ;RESIDUE CODES (NOT USED) <----------------------+---+---+ | ;ALL SENT <---------------------------------------------+ ;READ REG 2: +---+---+---+---+---+---+---+--+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0| ; +---+---+---+---+---+---+---+--+ ; | | | | | | | | ;INTERRUPT VECTOR <--------------+---+---+---+---+---+---+---+ PAGE ;SIO CONTROL CONSTANTS REG0 EQU 00000000B ;SELECT REGISTER 0 REG1 EQU 00000001B ;SELECT REGISTER 1 REG2 EQU 00000010B ;SELECT REGISTER 2 REG3 EQU 00000011B ;SELECT REGISTER 3 REG4 EQU 00000100B ;SELECT REGISTER 4 REG5 EQU 00000101B ;SELECT REGISTER 5 REG6 EQU 00000110B ;SELECT REGISTER 6 REG7 EQU 00000111B ;SELECT REGISTER 7 INT_CNL EQU 00000000B ;INTERRUPT CONTROL (REG 1) ; NO INTERRUPTS RCV_CNL EQU 11100001B ;LOGIC CONTROL (REG 3) ; 8 BITS/CHAR, AUTO ENABLES ON, RX ENABLE, ; SYNC CHAR HUNT INHIBIT DISABLED BAS_CNL EQU 01000100B ;BASIC CONTROL VALUES (REG 4) ; X16 CLOCK, 1 STOP BIT, NO PARITY TX_CNL_A EQU 11101000B ;TRANSMIT CONTROL FOR (REG 5) ; CHANNEL A: DTR ON, 8 BITS/CHAR, RTS OFF TX_CNL_B EQU 11101010B ;TRANSMIT CONTROL FOR (REG 5) ; CHANNEL B: DTR ON, 8 BITS/CHAR, RTS ON SIO_I_IN EQU 00010111B ;COMMAND TO WRITE TO SIO WR1 TO SET: ; INTERRUPT ON ALL RX CHARS (PARITY ; AFFECTS VECTOR) ; STATUS AFFECTS VECTOR ; TX INT. ENABLE ; EXTERNAL INT. ENABLE ;MASKS SI.RRDY EQU 00000001B ;RECEIVE CHAR READY (READ REG 0) SI.TRDY EQU 00000100B ;TRANSMIT BUFFER EMPTY (READ REG 0) PAGE ;8253 TIMER ;CONTROL REG: +---+---+---+---+---+---+---+---+ ; | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ; +---+---+---+---+---+---+---+---+ ; | | | | | | | | ;SELECT COUNTER <----------------+---+ | | | | | | ;READ/LOAD: | | | | | | ; COUNTER LATCHING 0 0 | | | | ; R/L MOST SIGNIFICANT BYTE ONLY 0 1 | | | | ; R/L LEAST SIGNIFICANT BYTE ONLY 1 0 | | | | ; R/L BOTH BYTES 1 1 | | | | ;MODE <------------------------------------------+---+---+ | ;BCD <------------------------------------------------------+ ;CONTROL COUNTA EQU 00110110B ;SELECT COUNTER 0, 2 BYTES, MODE 3 COUNTB EQU 01110110B ;SELECT COUNTER 1, 2 BYTES, MODE 3 ;SETBAUD CODES ; (CODE IS A TABLE OFFSET. TABLE ENTRIES ARE 8253 COUNT VALUES NECCESSARY TO PRODUCE THE DESIRED BAUD RATE) BD1200 EQU 8 ;CODE FOR 1200 BAUD PAGE ;PARALLEL PORT CONSTANTS ;PORT CTL REGISTER CONSTANTS. PA.CDR EQU 00101010B ;TO ADDRESS PORT A DIRECTION PA.CDT EQU 00101110B ;TO ADDRESS PORT A DATA AND SET ;PORT A IN INPUT PROGRAM HANDSHAKE MODE. PB.CDR EQU 00000000B ;TO ADDRESS PORT B DIRECTION PB.CDT EQU 00000100B ;TO ADDRESS PORT B DATA ;DIRECTION REGISTER CONSTANTS PA.DRO EQU 0FFH ;PORT A OUTPUT MODE PA.DRI EQU 00H ;PORT A INPUT MODE PB.DR EQU 0BFH ;PORT B DIRECTION PB.DTO EQU 00000010B ;PORT B DATA FOR OUTPUT PB.DTI EQU 00001011B ;PORT B DATA FOR INPUT PP.ORDY EQU 01000000B ;OUTPUT RDY BIT IN PIB PP.IRDY EQU 10000000B ;INPUT RDY BIT IN PIA CTL REG STRB EQU 00100000B ;STROBE BIT IN PORT B ;PORT MODES PP.OUT EQU 1 PP.IN EQU 2 ;IEEE CONTROL CODES IE_TALK EQU 40H ;MAKE TALKER IE_UTLK EQU 5FH ;MAKE UNTALK IE_LSTN EQU 20H ;MAKE LISTENER IE_ULST EQU 3FH ;MAKE UNLISTEN PAGE ;VIDEO CONSTANTS FWAVM EQU 0C000H ;LVMEM = 128*23 + 80 ;LENGTH OF VIDEO MEMORY ;VIDEND = FWAVM+LVMEM-1 ;END OF VIDEO MEMORY VMROWS EQU 24 ;24 ROWS VMCOLS EQU 80 ;80 COLUMNS RESERVED EQU 0 ;WINDOW 0 IS RESERVED (ALWAYS SET TO FULL SCREEN) ;NVDL = 24 ;LVDIS = 128*NVDL ;LENGTH OF DISPLAY MEMORY ;VFLO = -22 ;FIRST LINE VIDEO OFFSET VLL EQU 128 ;LENGTH OF ONE VIDEO LINE ;VLDL = 64 ;LENGTH OF DISPLAYED CHAR/LINE ;FWASM = FWAVM+VLDL ;STATUS INFO ;NLINE = 24 ;NUMBER OF LINES MODEMSK EQU 0F0H ;MASK VIDEO MODE BITS MODEOFF EQU 1000H ;OFFSET FROM VIDEO CHARACTER ADDRESS TO MODE ADDRESS ;MASKS REVMODE EQU 10000000B ;REVERSE BIT = HIGH BIT OF CHARACTER HAFMODE EQU 10000000B ;HALF INTENSITY BIT = HIGH BIT OF MODE ADDRESS UNDMODE EQU 01000000B ;UNDERLINE BIT BLMODE EQU 00100000B ;BLINK BIT ALTMODE EQU 00010000B ;ALTERNATE CHARACTER SET BIT REV_CUR EQU 10000000B ;REVERSE VIDEO (BLOCK) CURSOR UND_CUR EQU 01000000B ;UNDERLINE CURSOR INV_CUR EQU 00000000B ;INVISIBLE CURSOR BLK_CUR EQU 00100000B ;BLINKING CURSOR PAGE RTC_OFL EQU 18H ;RTC OVERFLOW COUNTER PORT SIXTY_HZ EQU 60 ;DECIMAL 60 HZ (TICKS/SEC) FIFTY_HZ EQU 50 ;50 HZ (TICKS/SEC) SEC_MIN EQU 60H ;BCD SECONDS/MINUTE MIN_HR EQU 60H ;MINUTES/HR HR_DAY EQU 24H ;HOURS/DAY PAGE ;KEYBOARD CONSTANTS KL_LEN EQU 3 ;KEY LIST LENTH KLE_LEN EQU 2 ;KEY LIST ENTRY LENTH KL_USED EQU 7 ;KEYLIST ENTRY USED KY_SRVD EQU 6 ;KEY SERVICED ONCE KROW_M EQU 38H ;ROW NUMBER MASK KCOL_M EQU 7H ;COL NUMBER MASK RPTCTR EQU 1 ;REPEAT COUNT ROW0_M EQU 81H ;MASK FOR ADDRESSING ROW 0 DB_CT EQU 1 ;DEBOUNCE COUNT IRPTCT EQU 24 ;INITIAL REPEAT COUNT (400MS) SRPTCT EQU 3 ;SECOND REPEAT COUNT (100MS) DAB9/17 ;REDUCED TO HALF ORIGINAL VALUE TO ;SPEED REPEAT. TOT_ROW EQU 8 ;TOTAL ROWS TOT_COL EQU 8 CTL_KY EQU 2 ;COLUMN NUMBER OF CTL,ALPHA AND SHIFT KEYS ALPH_KY EQU 3 SHFT_KY EQU 4 PAGE ;BUFFER HANDLING EQUATES MX_CH_BF EQU 10H ;MAX NUMBER OF CHARS IN A BUFFER BF_OV_HD EQU 4 ;NO. BYTES OVERHEAD IN BUFFER D_RT_LEN EQU 6 ;NO OF BYTES IN DEVICE LIST ROOT DATA STRUCTURE NO_DEVS EQU 5 ;NUMBER OF DEVICES NO_BUFS EQU 40 ;NUMBER OF BUFFERS THR_HOLD EQU 4 ;NUMBER OF BUFFERS TO RESERVE FOR HIGH PRIORITY ;DEVICES HI_PRIOR EQU 80H ;HIGH PRIORITY BIT TO INDICATE ;HIGH PRIORITY BUFFERS CAN BE USED PAGE ;CONTROL CHARACTERS CR EQU 0DH ;^M, CR = CARRIAGE RETURN LF EQU 0AH ;^J, LF = LINE FEED CRLF EQU '_'-40H ;^_, CR AND LF BKS EQU 08H ;^H, BACKSPACE CBELL EQU 'G'-40H ;RING THE BELL MCUP EQU 'K'-40H ;MOVE CURSOR UP MCRIGH EQU 'L'-40H ;MOVE CURSOR RIGHT VDWN EQU 'V'-40H ;MOVE CURSOR DOWN VLIN EQU '_'-40H ;NEW LINE (CR,LF) VCLRS EQU 'Z'-40H ;CLEAR AND HOME CURSOR VHOME EQU '^'-40H ;HOME CURSOR ETX EQU 'C' - 40H ;ASCII ETX CHAR ACK EQU 'F' - 40H ;ASCII ACK CHAR XON EQU 'Q' - 40H ;ASCII XON (DC1) CHAR XOFF EQU 'S' - 40H ;ASCII XOFF (DC3) CHAR ;ESCAPE SEQUENCE CHARACTERS ESC EQU 1BH ;^[, ESC = ESCAPE VLOCK EQU '#' ;LOCK KEYBOARD VUNLK EQU '"' ;UNLOCK KEYBOARD VCAD EQU '=' ;CURSOR ADDRESSING VSAD EQU 'S' ;SCREEN ADDRESSING VINC EQU 'Q' ;INSERT CHAR VDELC EQU 'W' ;DELETE CHAR VINL EQU 'E' ;INSERT LINE VDELL EQU 'R' ;DELETE LINE VCEOL EQU 'T' ;CLEAR TO END OF LINE VCEOS EQU 'Y' ;CLEAR TO END OF SCREEN (WINDOW) VSAL EQU 'a' ;START ALTERNATE CHARACTER SET VEAL EQU 'A' ;END VSHI EQU ')' ;START HALF INTENSITY VEHI EQU '(' ;END VSGH EQU 'g' ;START GRAPHICS VEGH EQU 'G' ;END VRON EQU 'b' ;SET REVERSE VIDEO BACKGROUND (BLACK ON WHITE) VROFF EQU 'd' ;CLEAR REVERSE VIDEO BACKGROUND (SET TO WHITE ON BLACK) VCTYP EQU '.' ;CURSOR TYPE DEFINE VSRV EQU 'j' ;START REVERSE VIDEO VERV EQU 'k' ;END REVERSE VIDEO VSUL EQU 'l' ;START UNDERLINE VEUL EQU 'm' ;END UNDERLINE VSBL EQU '^' ;START BLINK VEBL EQU 'q' ;END BLINK EKC EQU '>' ;ENABLE KEY CLICK DKC EQU '<' ;DISABLE KEY CLICK EFKT EQU 'e' ;ENABLE FUNCTION KEY TRANSLATE DFKT EQU 'f' ;DISABLE FUNCTION KEY TRANSLATE VWDEF EQU 'z' ;WINDOW DEFINE VWSET EQU 's' ;WINDOW SET VOFF EQU 'o' ;DEFINE X-Y OFFSET VBACK EQU 'x' ;DEFINE BACKGROUND ATTRIBUTES UNDBIT EQU 00001000B ;UNDERLINE BIT ALTBIT EQU 00010000B ; REVBIT EQU 00000100B ;REVERSE VIDEO BIT BLKBIT EQU 00000010B ;BLINK BIT HAFBIT EQU 00000001B ;HALF INTENSITY BIT PAGE ;BOOT CONSTANTS BOOTADDR EQU 4000H ;BOOT LOAD ADDRESS FOR P-SYSTEM BIOSBANK EQU 00000000B ;BIOS BANK BOOTBANK EQU 00000000B ;BOOT STRAP LOADER BANK TEMPBUF EQU 0CC00H ;TEMPORARY BUFFER IN VIDEO BANK ; USED FOR DMA ADDRESS WHEN BOOTING SYSTEM PROD_CODE EQU 2 ;SHELLY PRODUCT CODE WRITTEN ON BOOT SECTOR PAGE ;INTERRUPT CONSTANTS SIO_I_TBL EQU 0FFE0H ;LOCATION IN RAM OF SIO INTERRUPT VECTOR ;MUST BE IN HIGH RAM AND END IN 0 INTVEC EQU 0FFFEH ;OTHER INTERRUPT'S VECTOR ;INTERRUPT DEVICE NUMBERS KBD_DEV EQU 0 ;KEYBOARD DEVICE NUMBER S_CH_A_I EQU 1 ;DEVICE NUMBER FOR SERIAL CHANNEL A INPUT S_CH_B_I EQU 2 ;DEVICE NUMBER FOR SERIAL CHANNEL B INPUT S_CH_A_O EQU 3 ;DEVICE NUMBER FOR SERIAL CHANNEL A OUTPUT S_CH_B_O EQU 4 ;DEVICE NUMBER FOR SERIAL CHANNEL B OUTPUT PAGE ;ROM'S RAM VALUES ;FLAGS FOR CONSOLE AND FUNCTION KEY TABLE FLAGS SYS_TBL EQU 0 ;USE SYSTEM TABLE APP_TBL EQU 1 ;USE APPLICATION TABLE NO_TBL EQU 2 ;DON'T USE TRANSLATION TABLE (FUNCTION KEY ONLY) PAGE ;TABLE DEFINITION LOCATIONS ;SYSTEM TRACK LOCATIONS KCTRK EQU 2 ;TRACK FOR KEYBOARD AND CHARACTER FONT DEFINITIONS KEYSEC EQU 17 ;SECTOR FOR KEYBOARD DEFINITION CHARSEC EQU 20 ;SECTOR FOR CHARACTER FONT DEFINITION ALTSEC EQU 30 ;SECTOR FOR ALTERNATE CHARACTER FONT DEFINITION ;RAM LOCATIONS RAMTBL EQU 2000H ;KEYBOARD AND CONSOLE TABLE POINTERS CHRFONT EQU 0000H ;CHARACTER FONT RAM LOCATION ALTFONT EQU 800H ;ALTERNATE CHARACTER FONT RAM LOCATION PAGE ;CP/M DEFINITIONS SVER EQU 14 ERSIZE EQU 64 ; DEFAULT = 64K VERSION CVER EQU 22 ;CPM VERSION NUMBER CBIOSV EQU SVER ;CBIOS VERSION NDSKS EQU 2 K EQU 1024 ABTC EQU 'C'-40H ;ABORT CHARACTER ;DRIVE DEFINITIONS LSECB EQU 256 ;LENGTH OF A SECTOR MTRK EQU 40 ;MAXIMUM TRACKS MSEC EQU 10 ;MAXIMUM SECTORS FMTCHR EQU 0E5H ;DATA FORMAT CHAR ;SET CP/M SYMBOLS. IOBYTE EQU 3 CDISK EQU 4 ;CURRENT LOGGED-IN CPM DISK SYS EQU 5 ;CPM MONITOR CALL ADDRESS SYSL EQU SYS+1 ;(LWA OF CP/M) TIMPTR EQU 40H ;POINTS TO WHERE TIME KEPT DBUF EQU 80H ;DEFAULT DISK BUFFER OM.LRAM EQU SYSL SYSR EQU 0 ;RETURN TO SYSTEM SYSDSK EQU CDISK ;CONTAINS CURRENT SYSTEM DISK # SYSDAT EQU 10H ;DATE IN DDMMYY SYSTIM EQU SYSDAT+3 ;TIME IN HHMMSS ORGP EQU 100H ;TRANSIENT PROGRAM ORIGIN ;EOL ;DOES NOT EXIST IN CP/M EOM EQU '$' ;END OF MESSAGE (FOR SYSTEM FUNCTION) EOF EQU 'Z'-40H ;END OF FILE L$PRU EQU 128 ;BYTES PER FLOPPY SECTOR FCB EQU 5CH ;SYSTEM DEFAULT FILE CONTROL BLOCK FCB_NR EQU FCB+32 ;NEXT RECORD = LRN F_EX EQU 12 ;EXTEND FIELD F_S2 EQU 14 ;CPM SYSTEM USAGE **USED WITH 2.0 SIZ FUNCT** F_RC EQU 15 ;RECORD COUNT (0 TO 128) F_NR EQU 32 ;NEXT RECORD ORDINAL IN FCB F_RRF EQU 33 ;R0,R1,R2 (RANDOM FIELD) IN FCB L_FILEN EQU 8 ;LENGTH OF FILE NAME L_FILEX EQU 3 ;LENGTH OF FILENAME SUFFIX L_FCB EQU 36 ;LENGTH OF ENTIRE FCB (COMP WITH 2.0) DMA EQU 80H ;WHERE SECTORS ARE READ TBUFF EQU DMA ;WHERE CCP PUTS COMMAND LINE PAGE ; FIRMWARE RAM DEFINITIONS ;TEMPBUF: = HSTBUF ;* TEMPBUF WILL BE THE SAME AREA AS THE SPACE ; RESERVED FOR KEYBOARD AND CONSOLE TABLES -- ; IT CAN ONLY BE USED BEFORE THESE AREAS ARE INITIALIZED PAGE ; TRUE/FALSE DEFINITIONS FALSE EQU 0 TRUE EQU NOT FALSE ;DEFINED FUNCTION CODES ROMVEC EQU 100H ;START OF ROM VECTOR MONRAM EQU 2000H COMJMP EQU 0FD40H ;COMMON MEMORY JUMP VECTORS (BANKJMP,BANKMOVE,BANKCALL,DMA READ AND WRITE) MRAM EQU 0FD4AH ;HIGH MEMORY AREA FOR VARIABLES USED BY ROM AND BIOS HI_ROUT EQU 0FEF0H ;HIGH MEMORY ROUTINES MOVED FROM ROM TAB EQU 09H ;TAB ERC EQU 7FH ;ILLEGAL KEY @FREQ EQU 4000 ;FREQ OF PROCESSOR SCLFRE EQU @FREQ/22 ;FOR DELAY ROUTINE BAD EQU 0FFH ;ENTRY IN KEYBD TABLE IF KEY IS INVALID BADKEY EQU BAD ; TOG_ALT_SET EQU 0FEH ;ENTRY IN KEYBD TABLE IF KEY IS USED TO ;TOGGLE ALTERNATE CHAR SET KEYTBL EQU 2800H-140H ;KEY CODE LOCATION ROMVER EQU 0FEH ;ROM VERSION NUMBER LOCATION ;COLD BOOT MASKS SP_KEY EQU 00000100B ;LOAD KEYBOARD TRANSLATION CODE FROM DISK SP_CHAR EQU 00000010B ;LOAD CHARACTER FONT FROM DISK SP_ALT EQU 00000001B ;LOAD ALTERNATE CHARACTER FONT FROM DISK PAGE ; ********************************************************* ; * * ; * MACRO DEFINITIONS * ; * * ; ********************************************************* ;ALIGN -- SET ORIGIN TO EVEN BOUNDARY. ALIGN MACRO SIZ,O DS (*%2+(%1)-1)/(%1)*(%1)-*%2 ENDM ;PUSHAL -- PUSH ALL REGISTER PAIRS ON THE STACK PUSHAL MACRO PUSH BC PUSH DE PUSH HL ENDM ;POPALL -- POP ALL REGISTER PAIRS OFF THE STACK POPALL MACRO POP HL POP DE POP BC ENDM ; Endx SYSTEXT PAGE QU BAD ; TOG_ALT_SET EQU 0FEH ;ENTRY IN KEYBD TABLE IF KEY IS USED TO ;TOGGLE ALTERNATE CHAR SET KEYTBL EQU 2800H-140H ;KEY CODE LOCATION ROMVER EQU 0FEH ;ROM VERSION NUMBER LOCATION ;COLD BOOT MASKS SP_KEY EQU 00000100B ;LOAD KEYBOARD TRANSLATION CODE FROM DISK SP_CHAR EQU 00000010B ;LOAD CHARACTER FONT FROM DISK SP_ALT EQU 00000001B ;LOAD AL ممممم ممممم ممممم ممممم ممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممممم ممممم!ممممم"ممممم#ممممم$ممممم%ممممم&ممممم'ممممم