; ********************************************************* ; * * ; * MONITOR'S RAM STORAGE DEFINITION * ; * * ; ********************************************************* ;RAMSMON.ASM SUBTTL 'MONITOR RAM STORAGE.' ; BIOS POINTERS ;RTC POINTER CLK_PTR EQU MONRAM ;POINTER TO CURRENT TIME ;DISK CHANGE FLAG POINTER MEDIA EQU CLK_PTR + 2 ;ADDR FOR DISK CHANGE FLAG A_DRIVE EQU MEDIA + 2 ;ADDR FOR DRIVE A DISK CHANGE FLAG B_DRIVE EQU A_DRIVE + 2 ;ADDR FOR DRIVE B DISK CHANGE FLAG ;PROTOCOL HANDLING VARIABLES: ;PROTOCOL MODE FOR SIO CHANNEL A. ;0 = NO PROTOCOL, ;1 = XON/XOFF PROTOCOL AND ;2 = ETX/ACK PROTOCOL. A_PROTCL EQU B_DRIVE + 2 ;PROTOCOL MODE FOR SIO CHANNEL B. ;0 = NO PROTOCOL, ;1 = XON/XOFF PROTOCOL AND ;2 = ETX/ACK PROTOCOL. B_PROTCL EQU A_PROTCL + 1 ; KEYBOARD MASKS: K_MSK_TBL EQU B_PROTCL + 1 ; INITIAL VALUES -- ; 11100011B ;ROW 0 -- STRIP CTRL/ALPHA/SHIFT ; 11111111B ;ROWS 1-6 -- STRIP NOTHING ; 11111111B ; 11111111B ; 11111111B ; 11111111B ; 11111111B ; 11010111B ;ROW 7 -- STRIP ALPHA/INVALID RET ; ; SPECIAL KEY LOCATIONS: ; CT_KEY EQU K_MSK_TBL + 8 ;000_101B ;CTRL: ROW 0, COL 2 AL_KEY EQU CT_KEY + 1 ;111_011B ;ALPHA: ROW 7, COL 3 SH_KEY EQU AL_KEY + 1 ;000_100B ;SHIFT: ROW 0, COL 4 KEYS EQU SH_KEY + 1 ;1ST 64BYTE-NORMAL, 2ND 64-SHIFT ;3RD 64-CONTROL, 4TH 64-ALPA ;5TH 64-CONTROL SHIFT TABLE ; FUNCTION KEY TABLES FKEY_ADR EQU KEYS + 320 ;SPACE RESVERED FOR FUNCTION KEYS ;CONSOLE POINTERS HERTZ EQU FKEY_ADR + 200H ;HERTZ RATE (50 OR 60) CURTYPE EQU HERTZ + 1 ;CURSOR TYPE (3 MSB'S) -- ; (BLOCK, UNDERLINE, BLINK) BACKGND EQU CURTYPE + 1 ;BACKGROUND ATTRIBUTE FLAG KCLICK EQU BACKGND + 1 ;KEY CLICK FLAG ROMCON EQU KCLICK + 1 ;POINTER TO ROM CONSOLE STRUCTURE PAGE ;NON-CONFIGURABLE PORTION ;CONSOLE ;ROM'S CONSOLE TABLE STRUCTURE CONTBLS EQU ROMCON + 2 ;CURRENT TABLE ADDRESS CTBLADDR EQU ROMCON + 2 ;CURRENT TABLE TO BE SEARCHED ;POINTERS TO TABLES ; CTBLADDR + 2 ; BASE TABLE POINTER ; CTBLADDR + 4 ; ESCAPE TABLE POINTER ; CTBLADDR + 6 ; CONTROL TABLE POINTER ; CTBLADDR + 8 ; Y COORDINATE TABLE POINTER ; CTBLADDR + 10 ; X COORDINATE TABLE POINTER ; CTBLADDR + 12 ; WINDOW DEFINE TABLE POINTER ; CTBLADDR + 14 ; FIRST ROW OF WINDOW TABLE POINTER ; CTBLADDR + 16 ; FIRST COLUMN OF WINDOW TABLE POINTER ; CTBLADDR + 18 ; LAST ROW OF WINDOW TABLE POINTER ; CTBLADDR + 20 ; LAST COLUMN OF WINDOW TABLE POINTER ; CTBLADDR + 22 ; WINDOW SET TABLE POINTER ; CTBLADDR + 24 ; CURSOR TYPE TABLE POINTER ; CTBLADDR + 26 ; X-Y OFFSET TABLE POINTER ; CTBLADDR + 28 ; BACKGROUND ATTRIBUTE POINTER ; ;CONSOLE VARIABLES OFFSET EQU CTBLADDR + 30 ;OFFSET FOR X-Y COORDINATES CFLAG EQU OFFSET + 1 ;CONSOLE FLAG CURWIND EQU CFLAG + 1 ;CURRENT WINDOW DEFINITION ;(THESE BYTES MUST STAY TOGETHER) FWAWIND EQU CFLAG + 1 ;FIRST WORD ADDRESS OF WINDOW WINDROWS EQU FWAWIND + 2 ;NUMBER OF ROWS IN WINDOW WINDCOLS EQU WINDROWS + 1 ;NUMBER OF COLUMNS IN WINDOW TEMP EQU WINDCOLS + 1 ;TEMPORARY USED BY SCROLL ROUTINE ;WHILE WINDOW IS BEING DEFINED -- WINDNUM EQU TEMP + 1 ; NUMBER OF WINDOW TEMPFWA EQU WINDNUM + 1 ; NEW FWA TEMPROWS EQU TEMPFWA + 2 ; NEW NUMBER OF ROWS FSTROW EQU TEMPROWS + 1 ; FIRST ROW NUMBER FSTCOL EQU FSTROW + 1 ; FIRST COLUMN NUMBER SCRL_UPF EQU FSTCOL + 1 ;0= SCROL_DOWN, 0FFH= SCROL_UP WINDDEFS EQU SCRL_UPF + 1 ;ALL 16 WINDOW DEFINITIONS PAGE ;MONITOR VARIABLES ;SINCE CP/M CANNOT BOOT OFF B:, THIS CELL IS USED ;TO INVERT THE NAMES OF THE 2 DRIVES: ; =0, ALL NORMAL, A=A:, B=B: ; =1, ALL INVERTED, A=B:, B=A: DSKSWP EQU WINDDEFS + 64 ;DISK VARIABLES RTRY EQU DSKSWP + 1 ;RETRY COUNTER DSTSB EQU RTRY + 1 ;DISK STATUS BYTES NUMSEC EQU DSTSB + 6 ;(1) # OF SECTORS TO R/W R_WCOM EQU NUMSEC + 1 ;(1) # OF SECTORS TO R/W NRETRY EQU R_WCOM + 1 ;INITIAL RETRY COUNTER WP_STS EQU NRETRY + 1 ;WRITE PROTECT STATUS DRV_MSK EQU WP_STS + 1 ;INTERRUPT VARIABLES CUR_I_ST EQU DRV_MSK + 1 ;CELL TO SAVE CURRENT INTERRUPT ;STATE I_POL_BNK EQU CUR_I_ST + 2 ;CELL TO SAVE INTERRUPT POLLING ;ROUTINE'S BANK MASK S_A_FLG EQU I_POL_BNK + 1 ;FLAG SET IF -- ; CH. A TX BUFF EMPTY INT OCCURS ;AND NO CHARS READY S_B_FLG EQU S_A_FLG + 1 ;FLAG SET IF -- ; CH. B TX BUFF EMPTY INT OCCURS ;FUNCTION KEY TABLE POINTERS FKEYFLAG EQU S_B_FLG + 1 ;FLAG TO INDICATE -- ; WHICH TRANSLATION TABLE TO USE ;AND NO CHARS READY ;PARALLEL PORT VARIABLES PIACTL EQU FKEYFLAG + 1 PP.MODE EQU PIACTL + 1 ;IEEE 488 VARIABLES: IE_CHAR EQU PP.MODE + 1 ;KEYBOARD SCAN VARIABLES KEYLCK EQU IE_CHAR + 1 ;ZERO IF LOCKED KEYBOARD KEYLST EQU KEYLCK + 1 FIRSTKEY EQU KEYLST SECONDKEY EQU FIRSTKEY + 2 LASTKEY EQU KEYLST + 4 ;FUNCTION KEY TRANSLATION VARIABLES COUNT EQU KEYLST + 6 ;NUMBER OF KEYS LEFT TO TRANSLATE FPNTR EQU COUNT + 1 ;PNTR TO CURRENT POS IN TRANX TABLE ;RTC VARIABLES LAST_TCK EQU FPNTR + 2 ;LAST VALUE READ FROM -- ; TICK OVERFLOW COUNTER DCHK_FLG EQU LAST_TCK + 1 ;# OF TICKS LEFT BEFORE -- ; DISK CHANGE IS SERVICED SYS_TICKS EQU DCHK_FLG + 1 ;SYSTEM TICK COUNT ;DIAGNOSTICS VARIABLES ERRFLG EQU SYS_TICKS + 1 ;ERROR FLAG PAGE ;REAL TIME CLOCK VARIABLES ;4 BYTES FOR -- ;DAYS (# OF DAYS SINCE JAN 1, 1979) ;HOURS ;MINUTES ROMCLK EQU ERRFLG + 5 ;SECONDS SEKDEL EQU ROMCLK + 1 ;SET FOR SEEK-RESTORE COMMAND IN ROM ;LOWEST 2 BITS ARE SPEED. SIEMENS = 3H, MPI = 0H RDFLAG EQU SEKDEL + 1 ;READ FLAG ; USED TO DESELECT DRIVE WHEN THERE IS NO ACTIVITY ; ON DRIVE FOR N SECONDS. SEE FDSK ROUTINE DACTVE EQU RDFLAG + 1 ;=0 BY FDSK, USED BY UPTIM ;INTERRUPT TABLE INT_TBL EQU DACTVE + 1 ;INTERRUPT HANDLER TABLE ;DMA ;PARALLEL ;SIO TX CHANNEL B ;SIO EXTERNAL/STATUS CHANNEL B ;SIO RX CHANNEL B ;SIO RX CHANNEL B SPECIAL CONDITION ;SIO TX CHANNEL A ;SIO EXTERNAL/STATUS CHANNEL A ;SIO RX CHANNEL A ;SIO RX CHANNEL A SPECIAL CONDITION ;INTELLIGENT KEYBOARD ;REAL TIME CLOCK (TICK) INTERRUPT ;FLOPPY DISK CONTROLLER ;SYSTEM RESET ;------------------------------------------------------------------------------ ; DATA AREAS ;------------------------------------------------------------------------------ ;RESERVE STORAGE FOR DEVICE BUFFER LIST ROOTS ; ** REPT D_RT_LEN*NO_DEVS ;INITIALIZE ALL POINTERS TO 0 D_RT_TBL EQU INT_TBL + 42 ; ** ENDM ; ; FRE_ADDR EQU D_RT_TBL + (D_RT_LEN*NO_DEVS) ;(2 BYTES) FREE LIST ROOT. ; POINTER TO FIRST FREE BUFFER ; IS INITIALIZED TO POINT TO FIRST BUFFER ;(1 BYTE) FREE BUFFER COUNT. ; IS INITIALIZED TO NUMBER OF BUFFERS. ;------------------------------------------------------------------------------ ; BUFFERS FOLLOW. THE FIRST ENTRY IN EACH IS INITIALIZED TO POINT TO ; THE NEXT SO THAT ALL ARE IN THE FREE LIST. ;------------------------------------------------------------------------------ BUFF_ST EQU FRE_ADDR + 3 ;PROTOCOL HANDLING VARIABLES: ;TRANSMIT DISABLE FLAG FOR CHANNEL A. ;000H = TRANSMIT ENABLED AND ;0FFH = TRANSMIT DISABLED BECAUSE OF PROTOCOL A_XMT_OFF EQU BUFF_ST + ((MX_CH_BF + BF_OV_HD) * NO_BUFS) ;TRANSMIT DISABLE FLAG FOR CHANNEL B. ;000H = TRANSMIT ENABLED AND ;0FFH = TRANSMIT DISABLED BECAUSE OF PROTOCOL B_XMT_OFF EQU A_XMT_OFF + 1 ;RESET VARIABLES RSTHLD EQU B_XMT_OFF + 1 ;SET BY INTERRUPT ROUTINE IF -- ; RESET BUTTON IS HELD DOWN. RSTMODE EQU RSTHLD + 1 ;RESET MODE -- ; 0 = BOOT AFTER RESET ; NOT 0 = SYSTEM AFTER RESET