; system.inc
;
; OS constants and macros for CM/XP
;
; MBSET MACRO
; ===========
;
.MACRO MBSET MASK,ADDR
OIM #MASK,ADDR
.ENDM MBSET
;
; MBCLR MACRO
; ===========
;
.MACRO MBCLR MASK,ADDR
AIM #XFF-,ADDR
.ENDM MBCLR
;
; MBTGL MACRO
; ===========
;
.MACRO MBTGL MASK,ADDR
EIM #MASK,ADDR
.ENDM
;
; MBTST MACRO
; ===========
;
.MACRO MBTST MASK,ADDR
TIM #MASK,ADDR
.ENDM
;
; CONSTANTS USED BY MPSH AND MPUL MACROS
; ======================================
;
$mtr0 equ 1
$mtr1 equ 2
$mtr2 equ 4
$mtr3 equ 8
$mtr4 equ 16
$mtr5 equ 32
$mtr6 equ 64
;
; THE MPSH MACRO
; ==============
;
.MACRO MPSH P0,P1,P2,P3,P4,P5,P6
$MSK EQU 0
.IF NB
$MSK EQU $MSK ! $MT'P0
.IF NB
$MSK EQU $MSK ! $MT'P1
.IF NB
$MSK EQU $MSK ! $MT'P2
.IF NB
$MSK EQU $MSK ! $MT'P3
.IF NB
$MSK EQU $MSK ! $MT'P4
.IF NB
$MSK EQU $MSK ! $MT'P5
.IF NB
$MSK EQU $MSK ! $MT'P6
.ENDC
.ENDC
.ENDC
.ENDC
.ENDC
.ENDC
.ENDC
OS BT$PPRG
FCB $MSK
.ENDM MPSH
;
; THE MPUL MACRO
; ==============
;
.MACRO MPUL P0,P1,P2,P3,P4,P5,P6
$MSK EQU 0
.IF NB
$MSK EQU $MSK ! $MT'P0
.IF NB
$MSK EQU $MSK ! $MT'P1
.IF NB
$MSK EQU $MSK ! $MT'P2
.IF NB
$MSK EQU $MSK ! $MT'P3
.IF NB
$MSK EQU $MSK ! $MT'P4
.IF NB
$MSK EQU $MSK ! $MT'P5
.IF NB
$MSK EQU $MSK ! $MT'P6
.ENDC
.ENDC
.ENDC
.ENDC
.ENDC
.ENDC
.ENDC
OS BT$PPRG
FCB X80 ! $MSK
.ENDM MPUL
;
; ZERO PAGE PORTS
; ===============
;
POB_DDR2 EQU $01 ; PORT 2 DATA DIRECTION REGISTER
POB_PORT2 EQU $03 ; PORT 2 DATA REGISTER
POB_TCSR1 EQU $08 ; TIMER CONTROL STATUS REGISTER 1
POW_FRC EQU $09 ; FREE RUNNING COUNTER
POW_OCR1 EQU $0B ; OUTPUT COMPARE REGISTER 1
POB_TCSR2 EQU $0F ; TIMER 2 CONTROL/STATUS REGISTER
POB_RMCR EQU $10 ; RATE MODE CONTROL REGISTER
POB_TRCSR EQU $11 ; TX/RX CONTROL STATUS REGISTER
POB_RDR EQU $12 ; RECEIVE DATA REGISTER
POB_TDR EQU $13 ; TRANSMIT DATA REGISTER
POB_RCR EQU $14 ; RAM/PORT 5 CONTROL REGISTER
POB_PORT5 EQU $15 ; PORT 5 DATA REGISTER
POB_DDR6 EQU $16 ; PORT 6 DATA DIRECTION REGISTER
POB_PORT6 EQU $17 ; PORT 6 DATA REGISTER
POB_TCSR3 EQU $1B ; TIMER 3 CONTROL/STATUS REGISTER
POB_TCONR EQU $1C ; TIMER CONSTANT REGISTER
;
; SEMI-CUSTOM CHIP ADDRESSES
; ==========================
;
SCA_LCDCONTROL EQU $0180 ; LCD CONTROL REGISTER
SCA_LCDDATA EQU $0181 ; LCD DATA REGISTER
SCA_SWITCHOFF EQU $01C0 ; SWITCH OFF
SCA_PULSEENABLE EQU $0200 ; PULSE ENABLE
SCA_PULSEDISABLE EQU $0240 ; PULSE DISABLE
SCA_ALARMHIGH EQU $0280 ; BUZZER ON
SCA_ALARMLOW EQU $02C0 ; BUZZER OFF
SCA_COUNTERRESET EQU $0300 ; SET COUNTER TO 0
SCA_COUNTERCLOCK EQU $0340 ; CLOCK COUNTER ONCE
SCA_NMIMPU EQU $0380 ; ENABLE NMI TO PROCESSOR
SCA_NMICOUNTER EQU $03C0 ; ENABLE NMI TO COUNTER
;
; PORT 5 BITS
; ===========
;
ONCLR EQU $80 ; ON/CLEAR LINE
ACOUT EQU $02 ; ACOUT LINE
LOWBATTERY EQU $01 ; LOW BATTERY LINE
;
; PORT 6 BITS
; ===========
;
PACON EQU $80 ; PACK VCC ENABLE SIGNAL
CS3 EQU $40 ; CHIP SELECT 3 SIGNAL
CS2 EQU $20 ; CHIP SELECT 2 SIGNAL
CS1 EQU $10 ; CHIP SELECT 1 SIGNAL
OE EQU $08 ; OUTPUT ENABLE SIGNAL
PGM EQU $04 ; PROGRAM SIGNAL
MR EQU $02 ; MASTER RESET SIGNAL
CLK EQU $01 ; CLOCK SIGNAL
;
; TCSR1 BITS
; ==========
;
EOCI1 EQU $08 ; TIMER 1 INTERRUPT ENABLE
;
; KBB_STAT BITS
; =============
;
KY_SHFT EQU $80 ; SHIFT
KY_NUMB EQU $40 ; NUMERIC LOCK
KY_CPNM EQU $02 ; CAPS / NUMB FLAG
KY_CAPS EQU $01 ; CAPS LOCK
;
; PACK CONTROL DELAYS
; ===================
;
PACONDEL EQU 11520 ; FOR 50MS DELAY
VPPONDEL EQU 2304 ; FOR 10MS DELAY
VPPOFFDEL EQU 46080 ; FOR 200MS DELAY
PK_OVERBLOW EQU 5 ; 5*X OVERBLOW
;
; MISCELLANEOUS CONSTANTS
; =======================
;
RAMBASE EQU $2000 ; MACHINE RAM BASE
RAMFREE EQU BTT_RAMF ; FIRST FREE RAM BYTE
MACHINE_STACK EQU $0100 ; SIZE OF MACHINE STACK
MINEVL_STACK EQU $0100 ; MIN. SIZE OF EVALUATOR STACK
ALLCELLS EQU 32 ; NUMBER OF ALLOCATOR CELLS
PERMCELL EQU 0 ; PERMANENT CELL
MENUCELL EQU 1 ; TOP LEVEL MENU CELL
DIRYCELL EQU 2 ; DIARY CELL
TEXTCELL EQU 3 ; LANGUAGE TEXT CELL
SYMBCELL EQU 4 ; SYMBOL TABLE CELL
GLOBCELL EQU 5 ; GLOBAL RECORD CELL
OCODCELL EQU 6 ; QCODE OUTPUT CELL
FSY1CELL EQU 7 ; FIELD NAME SYMBOL TABLE 1
FSY2CELL EQU 8 ; FIELD NAME SYMBOL TABLE 2
FSY3CELL EQU 9 ; FIELD NAME SYMBOL TABLE 3
FSY4CELL EQU 10 ; FIELD NAME SYMBOL TABLE 4
FBF1CELL EQU 11 ; FIELD BUFFER CELL 1
FBF2CELL EQU 12 ; FIELD BUFFER CELL 2
FBF3CELL EQU 13 ; FIELD BUFFER CELL 3
FBF4CELL EQU 14 ; FIELD BUFFER CELL 4
DATACELL EQU 15 ; DATABASE CELL
PREALLOC EQU 16 ; NUMBER OF CELLS TO PREALLOCATE
SWIDTH EQU $10 ; SCREEN WIDTH
CURS_ON EQU $80 ; CURSOR ON FLAG
CURS_OFF EQU $00 ; CURSOR OFF
CURSOR_BLOCK EQU $00 ; CURSOR IN BLOCK FORM
CURSOR_LINE EQU $01 ; CURSOR IN LINE FORM
TIMEOUT EQU 300 ; AUTOMATIC TIMEOUT IN 5 MINS
BSIZE EQU <256+64> ; RTT_BF BUFFER SIZE
FSIZE EQU 32 ; RTT_FF BUFFER SIZE
DELIM EQU 9 ; BUFFER DELIMITER
KEY_TIME EQU $b3dd ; GIVES 50.000MS KEY POLLING
KEY_DELAY EQU 14 ; DELAY BEFORE KEY REPEAT
KEY_REPEAT EQU 0 ; RATE OF KEY REPEAT 0=FASTEST
KEY_CLICK EQU 1 ; LENGTH OF KEY CLICK
TYPEAHEAD EQU 16 ; 16 CHARACTER TYPE AHEAD
HDELAY EQU 4 ; HORIZONTAL SCROLLING DELAY
VDELAY EQU 10 ; VERTICAL SCROLLING DELAY
REGSIZE EQU 32 ; NUMBER OF TABLE REGISTERS
REGBASE EQU <256-REGSIZE> ; FIRST REGISTER NUMBER
STACKSIZE EQU 32 ; TABLE STACK SIZE
;
; SYMBOLIC KEY CODE NAMES
; ========================
;
K_AC EQU 1 ; ON/CLEAR KEY
K_MODE EQU 2 ; MODE KEY
K_UP EQU 3 ; UP ARROW
K_DOWN EQU 4 ; DOWN ARROW
K_LEFT EQU 5 ; LEFT ARROW
K_RGHT EQU 6 ; RIGHT ARROW
K_DELR EQU 7 ; DELETE RIGHT KEY
K_DEL EQU 8 ; DELETE KEY
K_EXE EQU 13 ; EXECUTE KEY
;
; SCREEN DISPLAY CONTROL CODES
; ============================
;
D_BS EQU 8 ; BACK SPACE
D_HT EQU 9 ; NEAREST POSITION MODULO 8
D_LF EQU 10 ; LINE FEED
D_HM EQU 11 ; POSITION CURSOR TOP LEFT
D_FF EQU 12 ; CLEAR ENTIRE DISPLAY
D_CR EQU 13 ; GOTO START OF LINE
D_CT EQU 14 ; CLEAR TOP LINE
D_CB EQU 15 ; CLEAR BOTTOM LINE
D_BL EQU 16 ; BELL
D_RE EQU 17 ; REFRESH BOTH LINES
D_TR EQU 18 ; REFRESH TOP LINE
D_BR EQU 19 ; REFRESH BOTTOM LINE
;
; SLOT SYMBOLIC NAME
; ==================
;
PAKA EQU 0 ; RAM DATA PACK
PAKB EQU 1 ; FIRST PACK SLOT
PAKC EQU 2 ; SECOND PACK SLOT
PAKD EQU 3 ; TOP SLOT
;
; DATAPACK FIRST BYTE BITS
; ========================
;
EPROM EQU $02 ; CLEAR IF RAMPACK
PGCPK EQU $04 ; SET IF PACK WITH PAGE COUNTER
RDWRT EQU $08 ; CLEAR IF PACK WRITE PROTECTED
NOBOOT EQU $10 ; CLEAR IF PACK BOOTABLE
COPYPK EQU $20 ; SET IF PACK COPYABLE
NYIMPL EQU $40 ; CLEAR IF FLASHPACK OR DEBUG RAMPAK
MK1PAK EQU $80 ; SET IF MARK I PACK
;
; FILING SYSTEM
; =============
;
MAXFILE EQU 4 ; MAXIMUM NUMBER OF OPEN FILES
BBODTYP EQU $80 ; BLOCK BODY RECORDS
NAMETYP EQU $81 ; RECORD TYPE FOR FILE NAMES
BDIATYP EQU $82 ; BLOCK NAME TYPE FOR DIARY
BLANTYP EQU $83 ; BLOCK NAME TYPE FOR OPL
FRECTYP EQU $91 ; FIRST FREE RECORD TYPE
NAMELEN EQU 8 ; MAX LEN OF A FILE NAME
TLRECT EQU <FRECTYP-1> ; RECORD TYPE FOR MAIN