; 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