; system.inc
;
; OS constants and macros for the LZ
;
;**************************** MACRO DEFINITIONS *****************************
.macro MBSET mask,addr
.if equal %locate(<:>,addr)-%length(addr)
oim #mask,addr:
.if_false
oim #mask,addr
.endc
.endm mbset
.macro MBCLR mask,addr
.if equal %locate(<:>,addr)-%length(addr)
aim #,addr:
.if_false
aim #,addr
.endc
.endm mbclr
.macro MBTGL mask,addr
.if equal %locate(<:>,addr)-%length(addr)
eim #mask,addr:
.if_false
eim #mask,addr
.endc
.endm
.macro MBTST mask,addr
.if equal %locate(<:>,addr)-%length(addr)
tim #mask,addr:
.if_false
tim #mask,addr
.endc
.endm
$mt equ 0
$mtr0 equ 1
$mtr1 equ 2
$mtr2 equ 4
$mtr3 equ 8
$mtr4 equ 16
$mtr5 equ 32
$mtr6 equ 64
.macro mpshos p0,p1,p2,p3,p4,p5,p6
os bt$pprg
.byte $mt'p0 ! $mt'p1 ! $mt'p2 ! $mt'p3 ! $mt'p4 ! $mt'p5 ! $mt'p6
.endm mpshos
.macro mpsh p0,p1,p2,p3,p4,p5,p6
.extrnw bt_pprg
jsr bt_pprg
.byte $mt'p0 ! $mt'p1 ! $mt'p2 ! $mt'p3 ! $mt'p4 ! $mt'p5 ! $mt'p6
.endm mpsh
.macro mpulos p0,p1,p2,p3,p4,p5,p6
os bt$pprg
.byte ^x80!$mt'p0!$mt'p1!$mt'p2!$mt'p3!$mt'p4!$mt'p5!$mt'p6
.endm mpulos
.macro mpul p0,p1,p2,p3,p4,p5,p6
.extrnw bt_pprg
jsr bt_pprg
.byte ^x80!$mt'p0!$mt'p1!$mt'p2!$mt'p3!$mt'p4!$mt'p5!$mt'p6
.endm mpul
;jsr to zero page
.macro jsrzp addr
jsr addr:
.endm
; UDGS and ICONS
;****************
UDG_CLK0 equ 0
UDG_CLK9 equ 9
UDG_CLKCOLON equ 10
UDG_UNDERSCORE equ 11
ICON_MAIN equ 12
ICON_PROG equ 13
ICON_FILES equ 14
ICON_UTILS equ 15
ICON_ALARM equ 16
ICON_CALC equ 17
ICON_AM equ 18
ICON_PM equ 19
UDG_LDOT equ 20
UDG_HDOT equ 21
UDG_DI_TARROW equ 22
UDG_DI_BARROW equ 23
UDG_DI_BELL equ 24
UDG_DI_WKBOX0 equ 25
UDG_DI_WKBOX1 equ 26
UDG_DI_WKBOX2 equ 27
UDG_DI_WKBOX3 equ 28
ICON_NOTES equ 29
UDG_DI_LCHEVRON equ 30
UDG_DI_RCHEVRON equ 31
; zero page ports
;*****************
POB_DDR2 equ $01
POB_PORT2 equ $03
POB_TCSR1 equ $08 ; timer control status register 1
POW_FRC equ $09 ; free running counter
POW_OCR1 equ $0B ; ouput 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 ; Recieve data register
POB_TDR equ $13 ; Transmit data register
POB_RCR equ $14 ; ram/port 5 control register
POB_PORT5 equ $15
POB_DDR6 equ $16
POB_PORT6 equ $17
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 registers
SCA_LCDDATA equ $0181
SCA_SWITCHOFF equ $01c0 ; switch off
SCA_PULSEENABLE equ $0200 ; pulse enable
SCA_PULSEDISABLE equ $0240 ; pulse disable
SCA_ALARMHIGH equ $0280 ; buzzer
SCA_ALARMLOW equ $02c0
SCA_COUNTERRESET equ $0300 ; counter for kybd + clock
SCA_COUNTERCLOCK equ $0340
SCA_NMIMPU equ $0380 ; enable nmi to processor
SCA_NMICOUNTER equ $03c0 ; enable nmi to counter
SCA_SETMODE1 equ $2a0 ; select mode 1 bit
SCA_SETMODE2 equ $2e0 ; select mode 2 bit
SCA_MODERESET equ $320 ; clear mode bits
SCA_BANKRESET equ $360 ; reset bank counters
SCA_NEXTRAM equ $3a0 ; select next RAM bank
SCA_NEXTROM equ $3e0 ; select next ROM bank
; port 5 bits
;**************
ONCLR equ $80
ACOUT equ $02
LOWBATTERY equ $01
; port 6 bits
;**************
PACON equ $80
CS3 equ $40
CS2 equ $20
CS1 equ $10
OE equ $08
PGM equ $04
MR equ $02
CLK equ $01
; tcsr1 bits
;**************
EOCI1 equ $08
; 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
KY_MLKY equ $04 ; multi-lingual key flag
; pack control delays
;**********************
PACONDEL equ 11520 ; for 50ms delay
;FIX changed from 2304 (10ms) to 1613 (7ms)
VPPONDEL equ 1613 ; for 7ms delay
;ENDFIX
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 ; end of osvars (first free 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 ouput 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
NOTECELL equ 16 ; Notepad cell
DUMYCELL equ 17 ; Dummy cell for spreadsheet
PREALLOC equ 18 ; 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
CY_SWIDTH equ 20 ; LZ screen width
CY_NLINES equ 4 ; 4 lines on LZ screen
TIMEOUT equ 300 ; automatic timeout in 5 mins
BSIZE equ <256+64> ; general purpose buffer size
FSIZE equ 32 ; find buffer size
DELIM equ 9 ; buffer delimiter
KEY_TIME equ $b39F ; 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
K_AC equ 1 ; all/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
K_SHFTEXE equ 14 ; Shift EXE
K_SHFTSPACE equ 15 ; Shift SPACE
#ifdef KYBD_POS200
K_F1 equ 3 ; function keys on POS200
K_F2 equ 4
K_F3 equ 5
#endif
; ctrl chars for dp_emit
;************************
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
D_3R equ 20 ; refresh 3rd line
D_4R equ 21 ; refresh 4th line
D_C3 equ 22 ; clear 3rd line
D_C4 equ 23 ; clear 4th line
D_HD equ 24 ; print high dotted line
D_LD equ 25 ; print low dotted line
D_CE equ 26 ; clear to the end of line
; ctrl chars for ut_disp
;************************
DSP_CN equ 31 ; for centring text in ut$disp
PAKA equ 0 ; Ram data pack
PAKB equ 1 ; First pack slot
PAKC equ 2 ; Second pack slot
PAKD equ 3 ; Top slot
EPROM equ $02 ; clear if ram pack
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 rampack
MK1PAK equ $80 ; set if MARK 1 pak
GENERAL equ $90 ; general record type
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 record type for diary
BLANTYP equ $83 ; block name record type for language
BNOTTYP equ $87 ; block name record type for notepad
FRECTYP equ $91 ; lowest rec. type for named files
NAMELEN equ 8 ; max len of a file name
TLRECT equ <FRECTYP-1> ; record type for find/save
AMSIZE equ 6 ; size of an alarm entry
AMNUM equ 8 ; number of alarm entries
EDITMODE equ 3
LISTMODE equ 4
RUNMODE equ 7
ERAMODE equ 8
SIZEOF_PAKDEF equ 10 ; packtype, packsize, 8 byte id
PTYP equ 0 ; pack type
PSIZ equ 1 ; pack size
PIDS equ 2 ; unique ID string
; Maths constants
PRECISION equ 12 ; working precision for maths.
MANSIZE equ 6 ; size of BCD mantissa
MANBYTES equ 7 ; size of register mantissa
SZREG equ 9 ; size of BCD register
SZBCD equ 8 ; size of BCD number
; offsets from byte 0 (sman[0]) of a BCD number
SMSB equ 5 ; most significant byte
SEXP equ 6 ; exponent
SSGN equ 7 ; sign
; offsets from byte 0 (aman[0]) of a BCD register
AMSB equ 6 ; most significant byte
AEXP equ 7 ; exponent
ASGN equ 8 ; sign
MAXEXP equ 99 ; maximum exponent size
MINEXP equ -99 ; max. negative exponent size
MAXDLEN equ 32 ; max. no. of dec. places
#define AMNUM 8
MAXDLEN equ 32 ; max. dec. places + exponent
; LANGUAGE CONTROL
LANG_ENG equ 0
LANG_FRN equ 1
LANG_GRM equ 2
MLT_PROTECT equ 129
MLT_PASSWORD equ 72
; Text,passwords,paste buffer
MLT_LENGTH equ <MLT_PROTECT+MLT_PASSWORD+65>
; WORLD BASE CITY/COUNTRY
WL_BASE_CITY equ 100
WL_BASE_COUNTRY equ 120
; PASSWORD LENGTH
MAXPASSLEN equ 8