	 .XLIST
;******************************************************************************
;
;      MACROS
;
;******************************************************************************

BEGINCOM MACRO SEGNAM
	 .SALL
	 PAGE  57,132
SEGNAM	 SEGMENT 'CODE'
	 ASSUME CS:SEGNAM,DS:SEGNAM,ES:SEGNAM
	 ORG   0100H
O0O0O0O0:
	 ENDM


ENDCOM	 MACRO SEGNAM
SEGNAM	 ENDS
	 END   O0O0O0O0
	 ENDM


@SVC MACRO CALL_NUM, PARM
;;GENERATES AN 'INT CALL_NUM', WITH PARM IN AH
	 IFNB <PARM>
	 MOV   AH,PARM
	 ENDIF
	 INT   CALL_NUM
	 ENDM
;
;
;
@DOS MACRO FUNCTION,PARM
;;GENERATES A DOS FUNCTION CALL WITH PARM IN AL
	 IFNB <PARM>
	 MOV   AL,PARM
	 ENDIF
	 @SVC  21H,FUNCTION
	 ENDM
;
; SEND A MESSAGE
;
@MSG MACRO TXT
	 LOCAL TXTSTR
	 LOCAL NSI
	 IFNB <TXT>
	 JMP   SHORT NSI
TXTSTR	 DB    TXT,13,10,'$'
NSI:	 PUSH  DX		   ;SAVE REG
	 MOV   DX,OFFSET TXTSTR    ;POINT TO STRING
	 @DOS  9		   ;DISPLAY IT
	 POP   DX		   ;RESTORE REG
	 ENDIF
	 ENDM
;
;
;
@DEX MACRO FUNCTION,PARM
;;GENERATES A DOS EXTENSION FUNCTION CALL WITH PARM IN AL VIA INT 15H
	 IFNB <PARM>
	 MOV   AL,PARM
	 ENDIF
	 @SVC  15H,FUNCTION
	 ENDM
;******************************************************************************
;
;  SPECIAL KEYBOARD CHARACTER EQUATES
;
;******************************************************************************
KEYEQ	 MACRO
;
;      ASCII CONTROL CODES
;
$NUL	 EQU   00H		   ;
$SOH	 EQU   01H		   ;^A
$STX	 EQU   02H		   ;^B
$ETX	 EQU   03H		   ;^C
$EOT	 EQU   04H		   ;^D
$ENQ	 EQU   05H		   ;^E
$ACK	 EQU   06H		   ;^F
$BEL	 EQU   07H		   ;BEEP
$BS	 EQU   08H		   ;^H
$HT	 EQU   09H		   ;^I
$LF	 EQU   0AH		   ;LINE FEED
$VT	 EQU   0BH		   ;^K
$FF	 EQU   0CH		   ;^L
$CR	 EQU   0DH		   ;CARRIAGE RETURN
$SO	 EQU   0EH		   ;^N
$SI	 EQU   0FH		   ;^O
$DLE	 EQU   10H		   ;^P
$DC1	 EQU   11H		   ;DEV CTL 1 = ^Q
$DC2	 EQU   12H		   ;DEV CTL 2 = ^R
$DC3	 EQU   13H		   ;DEV CTL 3 = ^S
$DC4	 EQU   14H		   ;DEV CTL 4 = ^T
$NAK	 EQU   15H		   ;^U
$SYN	 EQU   16H		   ;^V
$ETB	 EQU   17H		   ;^W
$CAN	 EQU   18H		   ;^X
$EM	 EQU   19H		   ;^Y
$SUB	 EQU   1AH		   ;^Z
$ESC	 EQU   1BH		   ;
$FS	 EQU   1CH		   ;CURSOR RIGHT
$GS	 EQU   1DH		   ;CURSOR LEFT
$RS	 EQU   1EH		   ;CURSOR UP
$US	 EQU   1FH		   ;CURSOR DOWM
;
; NUMERIC PAD KEYS
;
$HOME	 EQU   71
$CSRUP	 EQU   72
$PGUP	 EQU   73
$CSRL	 EQU   75
$CSRR	 EQU   77
$END	 EQU   79
$CSRDN	 EQU   80
$PGDN	 EQU   81
$INS	 EQU   82
$DEL	 EQU   83
;
; PROGRAM FUNCTION KEYS
;
$PF01	 EQU   3BH		   ;STANDARD PF KEY
$PF02	 EQU   3CH		   ;STANDARD PF KEY
$PF03	 EQU   3DH		   ;STANDARD PF KEY
$PF04	 EQU   3EH		   ;STANDARD PF KEY
$PF05	 EQU   3FH		   ;STANDARD PF KEY
$PF06	 EQU   40H		   ;STANDARD PF KEY
$PF07	 EQU   41H		   ;STANDARD PF KEY
$PF08	 EQU   42H		   ;STANDARD PF KEY
$PF09	 EQU   43H		   ;STANDARD PF KEY
$PF10	 EQU   44H		   ;STANDARD PF KEY
;
; SHIFTED PROGRAM FUNCTION KEYS
;
$SPF01	 EQU   54H		   ;STANDARD PF KEY
$SPF02	 EQU   55H		   ;STANDARD PF KEY
$SPF03	 EQU   56H		   ;STANDARD PF KEY
$SPF04	 EQU   57H		   ;STANDARD PF KEY
$SPF05	 EQU   58H		   ;STANDARD PF KEY
$SPF06	 EQU   59H		   ;STANDARD PF KEY
$SPF07	 EQU   5AH		   ;STANDARD PF KEY
$SPF08	 EQU   5BH		   ;STANDARD PF KEY
$SPF09	 EQU   5CH		   ;STANDARD PF KEY
$SPF10	 EQU   5DH		   ;STANDARD PF KEY
;
; CONTROL PROGRAM FUNCTION KEYS
;
$CPF01	 EQU   5EH		   ;STANDARD PF KEY
$CPF02	 EQU   5FH		   ;STANDARD PF KEY
$CPF03	 EQU   60H		   ;STANDARD PF KEY
$CPF04	 EQU   61H		   ;STANDARD PF KEY
$CPF05	 EQU   62H		   ;STANDARD PF KEY
$CPF06	 EQU   63H		   ;STANDARD PF KEY
$CPF07	 EQU   64H		   ;STANDARD PF KEY
$CPF08	 EQU   65H		   ;STANDARD PF KEY
$CPF09	 EQU   66H		   ;STANDARD PF KEY
$CPF10	 EQU   67H		   ;STANDARD PF KEY
;
; ALTERNATE PROGRAM FUNCTION KEYS
;
$APF01	 EQU   68H		   ;STANDARD PF KEY
$APF02	 EQU   69H		   ;STANDARD PF KEY
$APF03	 EQU   6AH		   ;STANDARD PF KEY
$APF04	 EQU   6BH		   ;STANDARD PF KEY
$APF05	 EQU   6CH		   ;STANDARD PF KEY
$APF06	 EQU   6DH		   ;STANDARD PF KEY
$APF07	 EQU   6EH		   ;STANDARD PF KEY
$APF08	 EQU   6FH		   ;STANDARD PF KEY
$APF09	 EQU   70H		   ;STANDARD PF KEY
$APF10	 EQU   71H		   ;STANDARD PF KEY
	 ENDM
;******************************************************************************
;
;  COMM CARD REGISTER EQUATES EQUATES
;
;******************************************************************************
COMEQ	 MACRO
;
;      INS8250 ACE REGISTERS FOR COMM PORT 1
;
THRCOM1  EQU	3F8H		   ;TRANS HOLDING REGISTER (WRITE)
RBRCOM1  EQU	3F8H		   ;RECEIVER BUFFER REGISTER (READ)
IERCOM1  EQU	3F9H		   ;INTERRUPT ENABLE REGISTER
LCRCOM1  EQU	3FBH		   ;LINE CONTROL REGISTER.
				   ;BIT 7 OF LCR IS "DLAB".  DLAB MUST
				   ;BE ZERO TO ACCESS THR, RBR, IER.
MCRCOM1  EQU	3FCH		   ;MODEM CONTROL REGISTER
LSRCOM1  EQU	3FDH		   ;LINE STATUS REGISTER
MSRCOM1  EQU	3FEH		   ;MODEM STATUS REGISTER
;
;      INS8250 ACE REGISTERS FOR COMM PORT 2
;
THRCOM2  EQU	2F8H		   ;TRANS HOLDING REGISTER (WRITE)
RBRCOM2  EQU	2F8H		   ;RECEIVER BUFFER REGISTER (READ)
IERCOM2  EQU	2F9H		   ;INTERRUPT ENABLE REGISTER
LCRCOM2  EQU	2FBH		   ;LINE CONTROL REGISTER.
				   ;BIT 7 OF LCR IS "DLAB".  DLAB MUST
				   ;BE ZERO TO ACCESS THR, RBR, IER.
MCRCOM2  EQU	2FCH		   ;MODEM CONTROL REGISTER
LSRCOM2  EQU	2FDH		   ;LINE STATUS REGISTER
MSRCOM2  EQU	2FEH		   ;MODEM STATUS REGISTER
	 ENDM



;******************************************************************************
;
;  BIOS LOW CORE AREA DEFINITIONS
;
;******************************************************************************
BIOSM	 MACRO LSTCTL
	 IFB   <LSTCTL>
	 .XLIST
	 ENDIF
	 IFNB  <LSTCTL>
	 .LIST
	 ENDIF
BIOSMEM  SEGMENT AT 0040H

;
;  COMM CARD BASE ADDRESSES
;
RS232_BASE LABEL WORD		   ;OFFICIAL IBM TAG
COM1BASE DW    ?		   ;COMM CARD BASE ADDRESSES
COM2BASE DW    ?
COM3BASE DW    ?
COM4BASE DW    ?
;
;  PRINTER CARD BASE ADDRESSES
;
PRINTER_BASE LABEL WORD 	   ;OFFICIAL IBM TAG
PRT1BASE DW    ?		   ;PRINTER CARD BASE ADDRESSES
PRT2BASE DW    ?
PRT3BASE DW    ?
PRT4BASE DW    ?

EQPFLAG  DW    ?		   ;INSTALLED EQUIPMENT FLAG
MFG_TST  DB    ?
MEMORY_SIZE    DW   ?		   ;MEM SIZE IN K BYTES
MFG_ERR_FLAG   DW   ?		   ;SCRATCHPAD FOR MFG ERROR CODES
;
;  KEYBOARD DATA AREAS
;
KB_FLAG        DB   ?		   ;KEYBOARD FLAG BYTE 1
INS_STATE      EQU  80H 	   ;  INSERT IS ACTIVE
CAPS_STATE     EQU  40H 	   ;  CAPS LOCK IS ACTIVE
NUM_STATE      EQU  20H 	   ;  NUM LOCK IS ACTIVE
SCROLL_STATE   EQU  10H 	   ;  SCROLL LOCK IS ACTIVE
ALT_SHIFT      EQU  08H 	   ;  ALT SHIFT IS DEPRESSED
CTL_SHIFT      EQU  04H 	   ;  CTL SHIFT IS DEPRESSED
LEFT_SHIFT     EQU  02H 	   ;  LEFT SHIFT KEY IS DEPRESSED
RIGHT_SHIFT    EQU  01H 	   ;  RIGHT SHIFT KEY IS DEPRESSED

KB_FLAG_1      DB   ?		   ;SECOND KEYBOARD STATUS BYTE

INS_SHIFT      EQU  80H 	   ;INSERT KEY IS DEPRESSED
CAPS_SHIFT     EQU  40H 	   ;CAPS LOCK KEY IS DEPRESSED
NUM_SHIFT      EQU  20H 	   ;NUM LOCK KEY IS DEPRESSED
SCROLL_SHIFT   EQU  10H 	   ;SCROLL LOCK KEY IS DEPRESSED
HOLD_STATE     EQU  08H 	   ;SUSPEND STATE HAS BEEN TOGGLED

ALT_INPUT      DB   ?		   ;STORAGE FOR ALTERNATE KEYPAD ENTRY
BUFFER_HEAD    DW   ?		   ;POINTER TO KB BUFFER START
BUFFER_TAIL    DW   ?		   ;POINTER TO KB BUFFER END
KB_BUFFER      DW   16 DUP (?)	   ;ROOM FOR 15 ENTRIES
KB_BUFFER_END  LABEL WORD
;
; HEAD = TAIL = EMPTY BUFFER

NUM_KEY        EQU  69		   ;SCAN CODE FOR NUM LOCK KEY
SCROLL_KEY     EQU  70		   ;SCROLL LOCK KEY
ALT_KEY        EQU  56		   ;ALT KEY
CTL_KEY        EQU  29		   ;CONTROL KEY
CAPS_KEY       EQU  58		   ;CAPS LOCK KEY
LEFT_KEY       EQU  42		   ;LEFT SHIFT KEY
RIGHT_KEY      EQU  54		   ;RIGHT SHIFT KEY
INS_KEY        EQU  82		   ;INSERT KEY
DEL_KEY        EQU  83		   ;DELETE KEY

;
;  DISKETTE DATA AREAS
;
SEEK_STATUS    DB   ?		   ;DRIVE RECALIBRATION STATUS
				   ;BIT 3-0 = DRIVE 3-0 NEEDS RECAL BEFORE NEXT
				   ;SEEK IF BIT = 0
INT_FLAG       EQU  80H 	   ;INTERRUPT OCCURANCE FLAG

MOTOR_STATUS   DB   ?		   ;STATUS OF DRIVE MOTORS
				   ;BIT 3-0 = DRIVE 3-0 MOTOR RUNNING
				   ;BIT 7 = WRITE OPERATION, DELAY REQUIRED
MOTOR_COUNT    DB   ?		   ;TIME OUT COUNT FOR DRIVE MOTOR TURN OFF
MOTOR_WAIT     EQU  37		   ;2 SECOND DELAY (@ 18.2 INTS/SEC)
DISKETTE_STATUS DB  ?		   ;RETURN CODE STATUS BYTE
TIME_OUT       EQU  80H 	   ;  ATTACHMENT FAILED TO RESPOND
BAD_SEEK       EQU  40H 	   ;  SEEK OPS FAILED
BAD_NEC        EQU  20H 	   ;  NEC CONTROLLER FAILED
BAD_CRC        EQU  10H 	   ;  CRC ERROR ON DISK READ
DMA_BOUNDARY   EQU  09H 	   ;  ATTEMPT DMA ACROSS 64K BOUNDARY
BAD_DMA        EQU  08H 	   ;  DMA OVERRUN
RECORD_NOT_FND EQU  04H 	   ;  REQUESTED SECTOR NOT FOUND
WRITE_PROTECT  EQU  03H 	   ;  WRITE ATTEMPT ON PROT DISK
BAD_ADDR_MARK  EQU  02H 	   ;  ADDRESS MARK NOT FOUND
BAD_CMD        EQU  01H 	   ;  BAD COMMAND PASSED TO DISKETTE I/O

NEC_STATUS     DB   7 DUP (?)	   ;STATUS BYTES FROM NEC
;
; VIDEO DISPLAY DATA AREA
;
CRT_MODE       DB   ?		   ;CURRENT CRT MODE
CRT_COLS       DW   ?		   ;# COLUMNS ON CRT
CRT_LEN        DW   ?		   ;LENGTH OF REGEN IN BYTES
CRT_START      DW   ?		   ;STARTING ADDRESS IN REGEN BUFFER
CURSOR_POSN    DW   8 DUP (?)	   ;CURSOR POSITION FOR EACH OF 8 PAGES
CURSOR_MODE    DW   ?		   ;CURRENT CURSOR MODE SETTING
ACTIVE_PAGE    DB   ?		   ;CURRENT ACTIVE PAGE
ADDR_6845      DW   ?		   ;I/O ADDRESS BASE FOR DISPLAY CARD
CRT_MODE_SET   DB   ?		   ;CURRENT SETTING OF THE 3X8 REGISTER
CRT_PALETTE    DB   ?		   ;CURRENT PALETTE SETTING - COLOR CARD
;
;  POST DATA AREA
;
IO_ROM_INIT    DW   ?		   ;POINTER TO OPTIONAL ROM INIT ROUTINE
IO_ROM_SEG     DW   ?		   ;IO ROM SEGMENT
INTR_FLAG      DB   ?		   ;FLAG TO INDICATE INTERRUPT OCCURED
;
;  TIMER DATA AREA
;
TIMER_LOW      DW   ?		   ;LOW WORD OF TIMER COUNT
TIMER_HIGH     DW   ?		   ;HI WORD OF TIMER COUNT
TIMER_OFL      DB   ?		   ;TIMER HAS OVERFLOWED SINCE LAST READ
;
;  SYSTEM DATA AREA
;
BIOS_BREAK     DB   ?		   ;BIT 7 = 1 IF BREAK KEY HIT
RESET_FLAG     DW   ?		   ;= 1234H IF KB RESET IN PROGRESS
;
;  FIXED DISK DATA AREAS
;
	       DW   ?
	       DW   ?
;
;  PRINTER AND RS232 TIME OUT VALUES
;
PRINT_TIM_OUT  DB   4 DUP (?)	   ;TIME OUT VALUES FOR EACH PRINTER
RS232_TIM_OUT  DB   4 DUP (?)	   ;TIME OUT VALUES FOR EACH COMM CARD
;
;  ADDITIONAL KEYBOARD DATA AREA
;
BUFFER_START   DW   ?
BUFFER_END     DW   ?
BIOSMEM  ENDS
	 .LIST
	 ENDM
;
;  END OF MACRO LIBRARY
;
	 .LIST
