mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-12-22 14:30:29 +00:00
e586eeefeb
Added additional optional debug code. A version of gsh with the memory checking debug code turned on is available as an exe file. Lock and unlock the hash mutual exclusion key in when disposing of the hash table. Allow five digits rather than four when printing the process number in the ps command. Piping the output of a command into a non-executable file no longer causes gsh to hang.
1987 lines
25 KiB
Plaintext
1987 lines
25 KiB
Plaintext
**************************************************************************
|
|
* Macros used by gsh, the GNO shell.
|
|
*
|
|
* Note: text set up for tabs at col 16, 22, 41, 49, 57, 65
|
|
* | | | | | |
|
|
* ^ ^ ^ ^ ^ ^
|
|
**************************************************************************
|
|
|
|
; ------------------
|
|
; GNO/ME subroutine calls
|
|
; ------------------
|
|
|
|
********************
|
|
* dup2
|
|
********************
|
|
MACRO
|
|
&lab dup2 &a1
|
|
&lab ph2 &a1(2)
|
|
ph2 &a1(1)
|
|
case on
|
|
jsl dup2
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* fork
|
|
********************
|
|
MACRO
|
|
&lab fork &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl fork
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* _getpgrp
|
|
********************
|
|
MACRO
|
|
&lab _getpgrp &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl _getpgrp
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* getpid
|
|
********************
|
|
MACRO
|
|
&lab getpid
|
|
&lab case on
|
|
jsl getpid
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* getuid
|
|
********************
|
|
MACRO
|
|
&lab getuid
|
|
&lab case on
|
|
jsl getuid
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* ioctl
|
|
********************
|
|
MACRO
|
|
&lab ioctl &a1
|
|
&lab ph4 &a1(3)
|
|
ph4 &a1(2)
|
|
ph2 &a1(1)
|
|
case on
|
|
jsl ioctl
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* kernstatus
|
|
********************
|
|
MACRO
|
|
&lab kernStatus &a1
|
|
&lab pha
|
|
ldx #$603
|
|
jsl $E10008
|
|
pl2 &a1
|
|
MEND
|
|
|
|
********************
|
|
* kill
|
|
********************
|
|
MACRO
|
|
&lab kill &a1
|
|
&lab ph2 &a1(2)
|
|
ph2 &a1(1)
|
|
case on
|
|
jsl kill
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* kvm_close
|
|
********************
|
|
MACRO
|
|
&lab kvm_close &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl kvm_close
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* kvm_open
|
|
********************
|
|
MACRO
|
|
&lab kvm_open
|
|
&lab case on
|
|
jsl kvm_open
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* kvmgetproc
|
|
********************
|
|
MACRO
|
|
&lab kvmgetproc &a1
|
|
&lab ph2 &a1(2)
|
|
ph4 &a1(1)
|
|
case on
|
|
jsl kvmgetproc
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* kvmnextproc
|
|
********************
|
|
MACRO
|
|
&lab kvmnextproc &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl kvmnextproc
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* pipe
|
|
********************
|
|
MACRO
|
|
&lab pipe &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl pipe
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* screate
|
|
********************
|
|
MACRO
|
|
&lab screate &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl screate
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* sdelete
|
|
********************
|
|
MACRO
|
|
&lab sdelete &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl sdelete
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* screate
|
|
********************
|
|
MACRO
|
|
&lab screate &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl screate
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* sdelete
|
|
********************
|
|
MACRO
|
|
&lab sdelete &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl sdelete
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* setsystemvector
|
|
********************
|
|
MACRO
|
|
&lab setsystemvector &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl setsystemvector
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* settpgrp
|
|
********************
|
|
MACRO
|
|
&lab settpgrp &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl settpgrp
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* sigblock
|
|
********************
|
|
MACRO
|
|
&lab sigblock &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl sigblock
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* signal
|
|
********************
|
|
MACRO
|
|
&lab signal &a1
|
|
&lab ph4 &a1(2)
|
|
ph2 &a1(1)
|
|
case on
|
|
jsl signal
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* sigpause
|
|
********************
|
|
MACRO
|
|
&lab sigpause &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl sigpause
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* sigsetmask
|
|
********************
|
|
MACRO
|
|
&lab sigsetmask &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl sigsetmask
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* ssignal
|
|
********************
|
|
MACRO
|
|
&lab ssignal &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl ssignal
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* swait
|
|
********************
|
|
MACRO
|
|
&lab swait &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl swait
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* tcnewpgrp
|
|
********************
|
|
MACRO
|
|
&lab tcnewpgrp &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl tcnewpgrp
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* tctpgrp
|
|
********************
|
|
MACRO
|
|
&lab tctpgrp &a1
|
|
&lab ph2 &a1(2)
|
|
ph2 &a1(1)
|
|
case on
|
|
jsl tctpgrp
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* tgetent
|
|
********************
|
|
MACRO
|
|
&lab tgetent &a1
|
|
&lab ph4 &a1(2)
|
|
ph4 &a1(1)
|
|
case on
|
|
jsl tgetent
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* tgetstr
|
|
********************
|
|
MACRO
|
|
&lab tgetstr &a1
|
|
&lab ph4 &a1(2)
|
|
ph4 &a1(1)
|
|
case on
|
|
jsl tgetstr
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* tputs
|
|
********************
|
|
MACRO
|
|
&lab tputs &a1
|
|
&lab ph4 &a1(3)
|
|
ph2 &a1(2)
|
|
ph4 &a1(1)
|
|
case on
|
|
jsl tputs
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* wait
|
|
********************
|
|
MACRO
|
|
&lab wait &a1
|
|
&lab ph4 &a1
|
|
case on
|
|
jsl wait
|
|
case off
|
|
MEND
|
|
|
|
; ------------------
|
|
; GS/OS calls
|
|
; ------------------
|
|
|
|
********************
|
|
* Close
|
|
********************
|
|
MACRO
|
|
&lab Close &a1
|
|
&lab gsos $2014,&a1
|
|
mend
|
|
|
|
********************
|
|
* Create
|
|
********************
|
|
MACRO
|
|
&lab Create &a1
|
|
&lab gsos $2001,&a1
|
|
mend
|
|
|
|
********************
|
|
* Destroy
|
|
********************
|
|
MACRO
|
|
&lab Destroy &a1
|
|
&lab gsos $2002,&a1
|
|
mend
|
|
|
|
********************
|
|
* DInfo
|
|
********************
|
|
macro
|
|
&lab DInfo &a1
|
|
&lab gsos $202C,&a1
|
|
mend
|
|
|
|
********************
|
|
* ExpandPath
|
|
********************
|
|
macro
|
|
&lab ExpandPath &a1
|
|
&lab gsos $200E,&a1
|
|
mend
|
|
|
|
********************
|
|
* Flush
|
|
********************
|
|
macro
|
|
&lab Flush &a1
|
|
&lab gsos $2015,&a1
|
|
mend
|
|
|
|
********************
|
|
* GetBootVol
|
|
********************
|
|
macro
|
|
&lab GetBootVol &a1
|
|
&lab gsos $2028,&a1
|
|
mend
|
|
|
|
********************
|
|
* GetDirEntry
|
|
********************
|
|
MACRO
|
|
&lab GetDirEntry &a1
|
|
&lab gsos $201C,&a1
|
|
mend
|
|
|
|
********************
|
|
* GetFileInfo
|
|
********************
|
|
MACRO
|
|
&lab GetFileInfo &a1
|
|
&lab gsos $2006,&a1
|
|
mend
|
|
|
|
********************
|
|
* GetPrefix
|
|
********************
|
|
MACRO
|
|
&lab GetPrefix &a1
|
|
&lab gsos $200A,&a1
|
|
mend
|
|
|
|
********************
|
|
* NewLine
|
|
********************
|
|
MACRO
|
|
&lab NewLine &a1
|
|
&lab gsos $2011,&a1
|
|
mend
|
|
|
|
********************
|
|
* Open
|
|
********************
|
|
MACRO
|
|
&lab Open &a1
|
|
&lab gsos $2010,&a1
|
|
mend
|
|
|
|
********************
|
|
* Quit
|
|
********************
|
|
MACRO
|
|
&lab Quit &a1
|
|
&lab gsos $2029,&a1
|
|
mend
|
|
|
|
********************
|
|
* Read
|
|
********************
|
|
MACRO
|
|
&lab Read &a1
|
|
&lab gsos $2012,&a1
|
|
mend
|
|
|
|
********************
|
|
* SetPrefix
|
|
********************
|
|
MACRO
|
|
&lab SetPrefix &a1
|
|
&lab gsos $2009,&a1
|
|
mend
|
|
|
|
********************
|
|
* Volume
|
|
********************
|
|
macro
|
|
&lab Volume &a1
|
|
&lab gsos $2008,&a1
|
|
mend
|
|
|
|
********************
|
|
* Write
|
|
********************
|
|
MACRO
|
|
&lab Write &a1
|
|
&lab gsos $2013,&a1
|
|
mend
|
|
|
|
********************
|
|
* gsos
|
|
********************
|
|
MACRO
|
|
&lab gsos &a1,&a2
|
|
&lab jsl $E100A8
|
|
dc i2'&a1'
|
|
dc i4'&a2'
|
|
mend
|
|
|
|
; ------------------
|
|
; Shell calls
|
|
; ------------------
|
|
|
|
********************
|
|
* ErrorGS
|
|
********************
|
|
macro
|
|
&l ErrorGS &p
|
|
&l ShellGS $0145,&p
|
|
mend
|
|
|
|
********************
|
|
* ExportGS
|
|
********************
|
|
macro
|
|
&l ExportGS &p
|
|
&l ShellGS $0156,&p
|
|
mend
|
|
|
|
********************
|
|
* InitWildcardGS
|
|
********************
|
|
macro
|
|
&l InitWildcardGS &p
|
|
&l ShellGS $0149,&p
|
|
mend
|
|
|
|
********************
|
|
* NextWildcardGS
|
|
********************
|
|
macro
|
|
&l NextWildcardGS &p
|
|
&l ShellGS $014A,&p
|
|
mend
|
|
|
|
********************
|
|
* PopVariablesGS
|
|
********************
|
|
macro
|
|
&l PopVariablesGS &p
|
|
&l ShellGS $0157,&p
|
|
mend
|
|
|
|
********************
|
|
* PushVariablesGS
|
|
********************
|
|
macro
|
|
&l PushVariablesGS &p
|
|
&l ShellGS $0158,&p
|
|
mend
|
|
|
|
********************
|
|
* ReadIndexedGS
|
|
********************
|
|
macro
|
|
&l ReadIndexedGS &p
|
|
&l ShellGS $0148,&p
|
|
mend
|
|
|
|
********************
|
|
* ReadVariableGS
|
|
********************
|
|
macro
|
|
&l ReadVariableGS &p
|
|
&l ShellGS $014B,&p
|
|
mend
|
|
|
|
********************
|
|
* RedirectGS
|
|
********************
|
|
macro
|
|
&l RedirectGS &p
|
|
&l ShellGS $0150,&p
|
|
mend
|
|
|
|
********************
|
|
* SetLInfoGS
|
|
********************
|
|
macro
|
|
&l SetLInfoGS &p
|
|
&l ShellGS $0142,&p
|
|
mend
|
|
|
|
********************
|
|
* SetGS
|
|
********************
|
|
macro
|
|
&l SetGS &p
|
|
&l ShellGS $0146,&p
|
|
mend
|
|
|
|
********************
|
|
* UnsetVariableGS
|
|
********************
|
|
macro
|
|
&l UnsetVariableGS &p
|
|
&l ShellGS $0155,&p
|
|
mend
|
|
|
|
***********************************************
|
|
* ShellGS: Jump into OS for a shell call
|
|
***********************************************
|
|
MACRO
|
|
&lab ShellGS &a1,&a2
|
|
&lab jsl $E100A8
|
|
dc i2'&a1'
|
|
dc i4'&a2'
|
|
mend
|
|
|
|
; ------------------
|
|
; Debugging
|
|
; ------------------
|
|
|
|
********************
|
|
* setdebug
|
|
********************
|
|
MACRO
|
|
&lab setdebug &a1
|
|
&lab ph2 &a1
|
|
case on
|
|
jsl setdebug
|
|
case off
|
|
MEND
|
|
|
|
********************
|
|
* name
|
|
********************
|
|
MACRO
|
|
&lab name
|
|
&lab anop
|
|
aif DebugSymbols=0,.pastName
|
|
brl pastName&SYSCNT
|
|
dc i'$7771'
|
|
dc i1'L:&lab',c'&lab'
|
|
pastName&SYSCNT anop
|
|
.pastName
|
|
MEND
|
|
|
|
; ------------------
|
|
; Data Structures
|
|
; ------------------
|
|
|
|
*****************************
|
|
* GSStr: GS/OS output string
|
|
*****************************
|
|
MACRO
|
|
&lab GSStr &string
|
|
&lab dc i2'L:&string'
|
|
dc c"&string"
|
|
mend
|
|
|
|
; ------------------
|
|
; Branch
|
|
; ------------------
|
|
|
|
********************
|
|
* if2
|
|
********************
|
|
MACRO
|
|
&lab if2 &var,&rel,&val,&label
|
|
&lab ago .skip
|
|
ble
|
|
bgt
|
|
.skip
|
|
lclc &char1
|
|
lclc &char2
|
|
&char1 amid &var,1,1
|
|
&char2 amid &var,2,1
|
|
aif "&char1"="@",.index
|
|
lda &var
|
|
.cmp
|
|
cmp &val
|
|
ago .branch
|
|
.index
|
|
aif "&char2"="x",.x1
|
|
aif "&char2"="X",.x1
|
|
aif "&char2"="y",.y1
|
|
aif "&char2"="Y",.y1
|
|
ago ^cmp
|
|
.x1
|
|
cpx &val
|
|
ago .branch
|
|
.y1
|
|
cpy &val
|
|
.branch
|
|
&char1 amid &rel,1,1
|
|
aif "&char1"="@",.done
|
|
b&rel &label
|
|
.done
|
|
mend
|
|
|
|
********************
|
|
* bgt
|
|
********************
|
|
MACRO
|
|
&lab bgt &loc
|
|
&lab beq *+4
|
|
bcs &loc
|
|
mend
|
|
|
|
********************
|
|
* ble
|
|
********************
|
|
MACRO
|
|
&lab ble &loc
|
|
&lab bcc &loc
|
|
beq &loc
|
|
mend
|
|
|
|
********************
|
|
* jcc
|
|
********************
|
|
MACRO
|
|
&lab jcc &loc
|
|
&lab bcs *+5
|
|
jmp &loc
|
|
mend
|
|
|
|
********************
|
|
* jcs
|
|
********************
|
|
macro
|
|
&lab jcs &loc
|
|
&lab bcc *+5
|
|
jmp &loc
|
|
mend
|
|
|
|
********************
|
|
* jeq
|
|
********************
|
|
MACRO
|
|
&lab jeq &loc
|
|
&lab bne *+5
|
|
jmp &loc
|
|
mend
|
|
|
|
********************
|
|
* jge
|
|
********************
|
|
MACRO
|
|
&lab jge &loc
|
|
&lab bcc *+5
|
|
jmp &loc
|
|
mend
|
|
|
|
********************
|
|
* jmi
|
|
********************
|
|
macro
|
|
&lab jmi &loc
|
|
&lab bpl *+5
|
|
jmp &loc
|
|
mend
|
|
|
|
********************
|
|
* jne
|
|
********************
|
|
MACRO
|
|
&lab jne &loc
|
|
&lab beq *+5
|
|
jmp &loc
|
|
mend
|
|
|
|
|
|
; ------------------
|
|
; Enter and exit subroutine
|
|
; ------------------
|
|
|
|
********************
|
|
* subroutine
|
|
********************
|
|
MACRO
|
|
&lab subroutine &parms,&work
|
|
&lab anop
|
|
aif c:&work,.a
|
|
lclc &work
|
|
&work setc 0
|
|
.a
|
|
gbla &totallen
|
|
gbla &worklen
|
|
&worklen seta &work
|
|
&totallen seta 0
|
|
aif c:&parms=0,.e
|
|
lclc &len
|
|
lclc &p
|
|
lcla &i
|
|
&i seta c:&parms
|
|
.b
|
|
&p setc &parms(&i)
|
|
&len amid &p,2,1
|
|
aif "&len"=":",.c
|
|
&len amid &p,1,2
|
|
&p amid &p,4,l:&p-3
|
|
ago .d
|
|
.c
|
|
&len amid &p,1,1
|
|
&p amid &p,3,l:&p-2
|
|
.d
|
|
&p equ &totallen+3+&work
|
|
&totallen seta &totallen+&len
|
|
&i seta &i-1
|
|
aif &i,^b
|
|
.e
|
|
tsc
|
|
sec
|
|
sbc #&work
|
|
tcs
|
|
inc a
|
|
phd
|
|
tcd
|
|
phb
|
|
phk
|
|
plb
|
|
mend
|
|
|
|
********************
|
|
* return
|
|
********************
|
|
MACRO
|
|
&lab return &r
|
|
&lab anop
|
|
lclc &len
|
|
aif c:&r,.a
|
|
lclc &r
|
|
&r setc 0
|
|
&len setc 0
|
|
ago .h
|
|
.a
|
|
&len amid &r,2,1
|
|
aif "&len"=":",.b
|
|
&len amid &r,1,2
|
|
&r amid &r,4,l:&r-3
|
|
ago .c
|
|
.b
|
|
&len amid &r,1,1
|
|
&r amid &r,3,l:&r-2
|
|
.c
|
|
aif &len<>2,.d
|
|
ldy &r
|
|
ago .h
|
|
.d
|
|
aif &len<>4,.e
|
|
ldx &r+2
|
|
ldy &r
|
|
ago .h
|
|
.e
|
|
aif &len<>10,.g
|
|
ldy #&r
|
|
ldx #^&r
|
|
ago .h
|
|
.g
|
|
mnote 'Not a valid return length',16
|
|
mexit
|
|
.h
|
|
aif &totallen=0,.i
|
|
lda &worklen+1
|
|
sta &worklen+&totallen+1
|
|
lda &worklen
|
|
sta &worklen+&totallen
|
|
.i
|
|
plb
|
|
pld
|
|
tsc
|
|
clc
|
|
adc #&worklen+&totallen
|
|
tcs
|
|
aif &len=0,.j
|
|
tya
|
|
.j
|
|
rtl
|
|
mend
|
|
|
|
; ------------------
|
|
; Change size of memory or index register access
|
|
; ------------------
|
|
|
|
********************
|
|
* long
|
|
********************
|
|
MACRO
|
|
&lab long &stat
|
|
&lab anop
|
|
lcla &t
|
|
lcla &len
|
|
lclc &ch
|
|
&t seta 0
|
|
&len seta l:&stat
|
|
.a
|
|
aif &len=0,.b
|
|
&ch amid &stat,&len,1
|
|
aif ("&ch"="x").or.("&ch"="y").or.("&ch"="i"),.i
|
|
aif ("&ch"="a").or.("&ch"="m"),.m
|
|
.c
|
|
&len seta &len-1
|
|
ago ^a
|
|
.i
|
|
longi on
|
|
&t seta &t+16
|
|
ago ^c
|
|
.m
|
|
longa on
|
|
&t seta &t+32
|
|
ago ^c
|
|
.b
|
|
aif &t=0,.d
|
|
rep #&t
|
|
.d
|
|
mend
|
|
|
|
********************
|
|
* short
|
|
********************
|
|
MACRO
|
|
&lab short &stat
|
|
&lab anop
|
|
lcla &t
|
|
lcla &len
|
|
lclc &ch
|
|
&t seta 0
|
|
&len seta l:&stat
|
|
.a
|
|
aif &len=0,.b
|
|
&ch amid &stat,&len,1
|
|
aif ("&ch"="x").or.("&ch"="y").or.("&ch"="i"),.i
|
|
aif ("&ch"="a").or.("&ch"="m"),.m
|
|
.c
|
|
&len seta &len-1
|
|
ago ^a
|
|
.i
|
|
longi off
|
|
&t seta &t+16
|
|
ago ^c
|
|
.m
|
|
longa off
|
|
&t seta &t+32
|
|
ago ^c
|
|
.b
|
|
aif &t=0,.d
|
|
sep #&t
|
|
.d
|
|
mend
|
|
|
|
; ------------------
|
|
; Math toolbox calls
|
|
; ------------------
|
|
|
|
********************
|
|
* Dec2Int
|
|
********************
|
|
MACRO
|
|
&lab Dec2Int &a1,&a2
|
|
&lab pha
|
|
ph4 &a1(1)
|
|
ph2 &a1(2)
|
|
ph2 &a1(3)
|
|
Tool $280b
|
|
pl2 &a2
|
|
mend
|
|
|
|
********************
|
|
* Int2Dec
|
|
********************
|
|
MACRO
|
|
&lab Int2Dec &a1
|
|
&lab ph2 &a1(1)
|
|
ph4 &a1(2)
|
|
ph2 &a1(3)
|
|
ph2 &a1(4)
|
|
Tool $260b
|
|
mend
|
|
|
|
********************
|
|
* Int2Hex
|
|
********************
|
|
macro
|
|
&lab Int2Hex &a1
|
|
&lab ph2 &a1(1)
|
|
ph4 &a1(2)
|
|
ph2 &a1(3)
|
|
Tool $220b
|
|
mend
|
|
|
|
********************
|
|
* Long2Dec
|
|
********************
|
|
macro
|
|
&lab Long2Dec &a1
|
|
&lab ph4 &a1(1)
|
|
ph4 &a1(2)
|
|
ph2 &a1(3)
|
|
ph2 &a1(4)
|
|
Tool $270b
|
|
mend
|
|
|
|
********************
|
|
* LongDivide
|
|
********************
|
|
macro
|
|
&lab LongDivide &a1,&a2
|
|
&lab pha
|
|
pha
|
|
pha
|
|
pha
|
|
ph4 &a1(1)
|
|
ph4 &a1(2)
|
|
Tool $0d0b
|
|
pl4 &a2(1)
|
|
pl4 &a2(2)
|
|
mend
|
|
|
|
********************
|
|
* LongMul
|
|
********************
|
|
macro
|
|
&lab LongMul &a1,&a2
|
|
&lab pha
|
|
pha
|
|
pha
|
|
pha
|
|
ph4 &a1(1)
|
|
ph4 &a1(2)
|
|
Tool $0c0b
|
|
pl4 &a2(1)
|
|
pl4 &a2(2)
|
|
mend
|
|
|
|
********************
|
|
* UDivide
|
|
********************
|
|
MACRO
|
|
&lab UDivide &a1,&a2
|
|
&lab pha
|
|
pha
|
|
ph2 &a1(1)
|
|
ph2 &a1(2)
|
|
Tool $0b0b
|
|
pl2 &a2(1)
|
|
pl2 &a2(2)
|
|
mend
|
|
|
|
|
|
; ------------------
|
|
; Memory manager toolbox calls
|
|
; ------------------
|
|
|
|
********************
|
|
* DisposeHandle
|
|
********************
|
|
macro
|
|
&lab DisposeHandle &a1
|
|
&lab ph4 &a1
|
|
tool $1002
|
|
mend
|
|
|
|
********************
|
|
* FindHandle
|
|
********************
|
|
macro
|
|
&lab FindHandle &a1,&a2
|
|
&lab pha
|
|
pha
|
|
ph4 &a1
|
|
tool $1a02
|
|
pl4 &a2
|
|
mend
|
|
|
|
********************
|
|
* NewHandle
|
|
********************
|
|
macro
|
|
&lab NewHandle &a1,&a2
|
|
&lab pha
|
|
pha
|
|
ph4 &a1(1)
|
|
ph2 &a1(2)
|
|
ph2 &a1(3)
|
|
ph4 &a1(4)
|
|
tool $0902
|
|
pl4 &a2
|
|
mend
|
|
|
|
********************
|
|
* PtrToHand
|
|
********************
|
|
macro
|
|
&lab PtrToHand &a1
|
|
&lab ph4 &a1(1)
|
|
ph4 &a1(2)
|
|
ph4 &a1(3)
|
|
tool $2802
|
|
mend
|
|
|
|
|
|
; ------------------
|
|
; Text toolbox calls
|
|
; ------------------
|
|
|
|
********************
|
|
* ErrWriteCString
|
|
********************
|
|
macro
|
|
&lab ErrWriteCString &a1
|
|
&lab ph4 &a1
|
|
Tool $210c
|
|
mend
|
|
|
|
********************
|
|
* ErrWriteLine
|
|
********************
|
|
macro
|
|
&lab ErrWriteLine &a1
|
|
&lab ph4 &a1
|
|
Tool $1b0c
|
|
mend
|
|
|
|
********************
|
|
* ReadLine
|
|
********************
|
|
macro
|
|
&lab ReadLine &a1,&a2
|
|
&lab pha
|
|
ph4 &a1(1)
|
|
ph2 &a1(2)
|
|
ph2 &a1(3)
|
|
ph2 &a1(4)
|
|
Tool $240c
|
|
pl2 &a2
|
|
mend
|
|
|
|
********************
|
|
* SetInGlobals
|
|
********************
|
|
MACRO
|
|
&lab SetInGlobals &a1
|
|
&lab ph2 &a1(1)
|
|
ph2 &a1(2)
|
|
Tool $090c
|
|
mend
|
|
|
|
********************
|
|
* SetInputDevice
|
|
********************
|
|
macro
|
|
&lab SetInputDevice &a1
|
|
&lab ph2 &a1(1)
|
|
ph4 &a1(2)
|
|
Tool $0f0c
|
|
mend
|
|
|
|
********************
|
|
* SetOutputDevice
|
|
********************
|
|
macro
|
|
&lab SetOutputDevice &a1
|
|
&lab ph2 &a1(1)
|
|
ph4 &a1(2)
|
|
Tool $100c
|
|
mend
|
|
|
|
********************
|
|
* WriteChar
|
|
********************
|
|
MACRO
|
|
&lab WriteChar &a1
|
|
&lab ph2 &a1
|
|
Tool $180c
|
|
mend
|
|
|
|
********************
|
|
* WriteCString
|
|
********************
|
|
MACRO
|
|
&lab WriteCString &a1
|
|
&lab ph4 &a1
|
|
Tool $200c
|
|
mend
|
|
|
|
********************
|
|
* WriteString
|
|
********************
|
|
MACRO
|
|
&lab WriteString &a1
|
|
&lab ph4 &a1
|
|
Tool $1c0c
|
|
mend
|
|
|
|
|
|
; ------------------
|
|
; Miscellaneous toolbox calls
|
|
; ------------------
|
|
|
|
********************
|
|
* ReadTimeHex
|
|
********************
|
|
MACRO
|
|
&lab ReadTimeHex &a1
|
|
&lab pha
|
|
pha
|
|
pha
|
|
pha
|
|
tool $0d03
|
|
pl2 &a1(1)
|
|
pl2 &a1(2)
|
|
pl2 &a1(3)
|
|
pl2 &a1(4)
|
|
mend
|
|
|
|
********************
|
|
* tool
|
|
********************
|
|
MACRO
|
|
&lab tool &a1
|
|
&lab ldx #&a1
|
|
jsl $e10000
|
|
mend
|
|
|
|
|
|
; ------------------
|
|
; Math & bit manipulation instructions
|
|
; ------------------
|
|
|
|
********************
|
|
* add2
|
|
********************
|
|
MACRO
|
|
&lab add2 &arg1,&arg2,&dest
|
|
lclc &char
|
|
&lab clc
|
|
&char amid &arg1,1,1
|
|
aif "&char"="@",.at1
|
|
lda &arg1
|
|
ago .add
|
|
.at1
|
|
&char amid &arg1,2,1
|
|
aif "&char"="x",.x1
|
|
aif "&char"="X",.x1
|
|
aif "&char"="y",.y1
|
|
aif "&char"="Y",.y1
|
|
ago .add
|
|
.x1
|
|
txa
|
|
ago .add
|
|
.y1
|
|
tya
|
|
.add
|
|
adc &arg2
|
|
&char amid &dest,1,1
|
|
aif "&char"="@",.at2
|
|
sta &dest
|
|
ago .b
|
|
.at2
|
|
&char amid &dest,2,1
|
|
aif "&char"="x",.x2
|
|
aif "&char"="X",.x2
|
|
aif "&char"="y",.y2
|
|
aif "&char"="Y",.y2
|
|
ago .b
|
|
.x2
|
|
tax
|
|
ago .b
|
|
.y2
|
|
tay
|
|
.b
|
|
mend
|
|
|
|
********************
|
|
* add4
|
|
********************
|
|
MACRO
|
|
&lab add4 &arg1,&arg2,&dest
|
|
&lab anop
|
|
lclc &ch
|
|
&ch amid &arg2,1,1
|
|
clc
|
|
lda &arg1
|
|
adc &arg2
|
|
sta &dest
|
|
lda &arg1+2
|
|
aif "&ch"="#",.a
|
|
adc &arg2+2
|
|
ago .b
|
|
.a
|
|
adc &arg2|-16
|
|
.b
|
|
sta &dest+2
|
|
mend
|
|
|
|
********************
|
|
* and2
|
|
********************
|
|
MACRO
|
|
&lab and2 &arg1,&arg2,&dest
|
|
&lab anop
|
|
lclc &char
|
|
&char amid &arg1,1,1
|
|
aif "&char"="@",.at1
|
|
lda &arg1
|
|
ago .add
|
|
.at1
|
|
&char amid &arg1,2,1
|
|
aif "&char"="x",.x1
|
|
aif "&char"="X",.x1
|
|
aif "&char"="y",.y1
|
|
aif "&char"="Y",.y1
|
|
ago .add
|
|
.x1
|
|
txa
|
|
ago .add
|
|
.y1
|
|
tya
|
|
.add
|
|
and &arg2
|
|
&char amid &dest,1,1
|
|
aif "&char"="@",.at2
|
|
sta &dest
|
|
ago .b
|
|
.at2
|
|
&char amid &dest,2,1
|
|
aif "&char"="x",.x2
|
|
aif "&char"="X",.x2
|
|
aif "&char"="y",.y2
|
|
aif "&char"="Y",.y2
|
|
ago .b
|
|
.x2
|
|
tax
|
|
ago .b
|
|
.y2
|
|
tay
|
|
.b
|
|
mend
|
|
|
|
********************
|
|
* asl2
|
|
********************
|
|
MACRO
|
|
&lab asl2 &a
|
|
&lab asl &a
|
|
asl &a
|
|
mend
|
|
|
|
********************
|
|
* asl3
|
|
********************
|
|
MACRO
|
|
&lab asl3 &a
|
|
&lab asl &a
|
|
asl &a
|
|
asl &a
|
|
mend
|
|
|
|
********************
|
|
* asl4
|
|
********************
|
|
MACRO
|
|
&lab asl4 &a
|
|
&lab asl &a
|
|
asl &a
|
|
asl &a
|
|
asl &a
|
|
mend
|
|
|
|
********************
|
|
* dec2
|
|
********************
|
|
MACRO
|
|
&lab dec2 &a
|
|
&lab dec &a
|
|
dec &a
|
|
mend
|
|
|
|
********************
|
|
* dey2
|
|
********************
|
|
MACRO
|
|
&lab dey2
|
|
&lab dey
|
|
dey
|
|
mend
|
|
|
|
********************
|
|
* dey4
|
|
********************
|
|
MACRO
|
|
&lab dey4
|
|
&lab dey
|
|
dey
|
|
dey
|
|
dey
|
|
MEND
|
|
|
|
********************
|
|
* eor2
|
|
********************
|
|
MACRO
|
|
&lab eor2 &arg1,&arg2,&dest
|
|
&lab anop
|
|
lclc &char
|
|
&char amid &arg1,1,1
|
|
aif "&char"="@",.at1
|
|
lda &arg1
|
|
ago .add
|
|
.at1
|
|
&char amid &arg1,2,1
|
|
aif "&char"="x",.x1
|
|
aif "&char"="X",.x1
|
|
aif "&char"="y",.y1
|
|
aif "&char"="Y",.y1
|
|
ago .add
|
|
.x1
|
|
txa
|
|
ago .add
|
|
.y1
|
|
tya
|
|
.add
|
|
eor &arg2
|
|
&char amid &dest,1,1
|
|
aif "&char"="@",.at2
|
|
sta &dest
|
|
ago .b
|
|
.at2
|
|
&char amid &dest,2,1
|
|
aif "&char"="x",.x2
|
|
aif "&char"="X",.x2
|
|
aif "&char"="y",.y2
|
|
aif "&char"="Y",.y2
|
|
ago .b
|
|
.x2
|
|
tax
|
|
ago .b
|
|
.y2
|
|
tay
|
|
.b
|
|
mend
|
|
|
|
********************
|
|
* inc2
|
|
********************
|
|
macro
|
|
&lab inc2 &a
|
|
&lab inc &a
|
|
inc &a
|
|
mend
|
|
|
|
********************
|
|
* inx2
|
|
********************
|
|
MACRO
|
|
&lab inx2
|
|
&lab inx
|
|
inx
|
|
mend
|
|
|
|
********************
|
|
* inx4
|
|
********************
|
|
macro
|
|
&lab inx4
|
|
&lab inx
|
|
inx
|
|
inx
|
|
inx
|
|
mend
|
|
|
|
********************
|
|
* iny2
|
|
********************
|
|
MACRO
|
|
&lab iny2
|
|
&lab iny
|
|
iny
|
|
mend
|
|
|
|
********************
|
|
* iny4
|
|
********************
|
|
MACRO
|
|
&lab iny4
|
|
&lab iny
|
|
iny
|
|
iny
|
|
iny
|
|
mend
|
|
|
|
********************
|
|
* LD2
|
|
********************
|
|
MACRO
|
|
&lab LD2 &val,&adr
|
|
&lab lcla &count
|
|
lda #&val
|
|
&count seta 1
|
|
.loop
|
|
sta &adr(&count)
|
|
&count seta &count+1
|
|
aif &count>c:&adr,.done
|
|
ago ^loop
|
|
.done
|
|
mend
|
|
|
|
********************
|
|
* LD4
|
|
********************
|
|
MACRO
|
|
&lab LD4 &val,&adr
|
|
&lab lcla &count
|
|
lda #<&val
|
|
&count seta 1
|
|
.loop1
|
|
sta &adr(&count)
|
|
&count seta &count+1
|
|
aif &count>c:&adr,.part2
|
|
ago ^loop1
|
|
.part2
|
|
lda #+(&val)|-16
|
|
&count seta 1
|
|
.loop2
|
|
sta &adr(&count)+2
|
|
&count seta &count+1
|
|
aif &count>c:&adr,.done
|
|
ago ^loop2
|
|
.done
|
|
mend
|
|
|
|
********************
|
|
* lsr2
|
|
********************
|
|
MACRO
|
|
&lab lsr2 &a
|
|
&lab lsr &a
|
|
lsr &a
|
|
mend
|
|
|
|
********************
|
|
* MV2
|
|
********************
|
|
MACRO
|
|
&lab MV2 &src,&adr
|
|
&lab lcla &count
|
|
lda &src
|
|
&count seta 1
|
|
.loop
|
|
sta &adr(&count)
|
|
&count seta &count+1
|
|
aif &count>c:&adr,.done
|
|
ago ^loop
|
|
.done
|
|
mend
|
|
|
|
********************
|
|
* MV4
|
|
********************
|
|
macro
|
|
&lab MV4 &src,&adr
|
|
&lab lcla &count
|
|
lda &src
|
|
&count seta 1
|
|
.loop1
|
|
sta &adr(&count)
|
|
&count seta &count+1
|
|
aif &count>c:&adr,.part2
|
|
ago ^loop1
|
|
.part2
|
|
lda &src+2
|
|
&count seta 1
|
|
.loop2
|
|
sta &adr(&count)+2
|
|
&count seta &count+1
|
|
aif &count>c:&adr,.done
|
|
ago ^loop2
|
|
.done
|
|
mend
|
|
|
|
********************
|
|
* ora2
|
|
********************
|
|
MACRO
|
|
&lab ora2 &arg1,&arg2,&dest
|
|
&lab anop
|
|
lclc &char
|
|
&char amid &arg1,1,1
|
|
aif "&char"="@",.at1
|
|
lda &arg1
|
|
ago .add
|
|
.at1
|
|
&char amid &arg1,2,1
|
|
aif "&char"="x",.x1
|
|
aif "&char"="X",.x1
|
|
aif "&char"="y",.y1
|
|
aif "&char"="Y",.y1
|
|
ago .add
|
|
.x1
|
|
txa
|
|
ago .add
|
|
.y1
|
|
tya
|
|
.add
|
|
ora &arg2
|
|
&char amid &dest,1,1
|
|
aif "&char"="@",.at2
|
|
sta &dest
|
|
ago .b
|
|
.at2
|
|
&char amid &dest,2,1
|
|
aif "&char"="x",.x2
|
|
aif "&char"="X",.x2
|
|
aif "&char"="y",.y2
|
|
aif "&char"="Y",.y2
|
|
ago .b
|
|
.x2
|
|
tax
|
|
ago .b
|
|
.y2
|
|
tay
|
|
.b
|
|
mend
|
|
|
|
********************
|
|
* ph2
|
|
********************
|
|
MACRO
|
|
&lab ph2 &parm
|
|
lclc &char
|
|
&lab anop
|
|
aif c:&parm=0,.done
|
|
&char amid &parm,1,1
|
|
aif "&char"="#",.immediate
|
|
aif "&char"="@",.at
|
|
aif s:longa=1,.chk
|
|
rep #%00100000
|
|
.chk
|
|
aif "&char"<>"{",.absolute
|
|
&char amid &parm,l:&parm,1
|
|
aif "&char"<>"}",.error
|
|
&parm amid &parm,2,l:&parm-2
|
|
lda (&parm)
|
|
pha
|
|
ago .shorten
|
|
.absolute
|
|
lda &parm
|
|
pha
|
|
ago .shorten
|
|
.immediate
|
|
&parm amid &parm,2,l:&parm-1
|
|
pea &parm
|
|
ago .done
|
|
.at
|
|
&char amid &parm,2,1
|
|
ph&char
|
|
.shorten
|
|
aif s:longa=1,.done
|
|
sep #%00100000
|
|
.done
|
|
mexit
|
|
.error
|
|
mnote "Missing closing '}'",16
|
|
mend
|
|
|
|
********************
|
|
* ph4
|
|
********************
|
|
MACRO
|
|
&lab ph4 &parm
|
|
lclc &char
|
|
lclc &char1
|
|
lclc &char2
|
|
&lab anop
|
|
&char amid &parm,1,1
|
|
aif "&char"="#",.immediate
|
|
aif "&char"="@",.at
|
|
aif s:longa=1,.chk1
|
|
rep #%00100000
|
|
.chk1
|
|
aif "&char"<>"{",.chk2
|
|
&char amid &parm,l:&parm,1
|
|
aif "&char"<>"}",.error
|
|
&parm amid &parm,2,l:&parm-2
|
|
ldy #2
|
|
lda (&parm),y
|
|
pha
|
|
lda (&parm)
|
|
pha
|
|
ago .shorten
|
|
.chk2
|
|
aif "&char"<>"[",.absolute
|
|
ldy #2
|
|
lda &parm,y
|
|
pha
|
|
lda &parm
|
|
pha
|
|
ago .shorten
|
|
.absolute
|
|
lda &parm+2
|
|
pha
|
|
lda &parm
|
|
pha
|
|
ago .shorten
|
|
.at
|
|
&char1 amid &parm,2,1
|
|
&char2 setc &char1
|
|
ph&char1
|
|
aif l:&parm<3,.chk2a
|
|
&char2 amid &parm,3,1
|
|
.chk2a
|
|
ph&char2
|
|
ago .shorten
|
|
.immediate
|
|
&parm amid &parm,2,l:&parm-1
|
|
pea +(&parm)|-16
|
|
pea &parm
|
|
ago .done
|
|
.shorten
|
|
aif s:longa=1,.done
|
|
sep #%00100000
|
|
.done
|
|
mexit
|
|
.error
|
|
mnote "Missing closing '}'",16
|
|
mend
|
|
|
|
********************
|
|
* pl2
|
|
********************
|
|
MACRO
|
|
&lab pl2 &parm
|
|
lclc &char
|
|
&lab anop
|
|
aif s:longa=1,.start
|
|
rep #%00100000
|
|
.start
|
|
&char amid &parm,1,1
|
|
aif "&char"="@",.at
|
|
aif "&char"<>"{",.absolute
|
|
&char amid &parm,l:&parm,1
|
|
aif "&char"<>"}",.error
|
|
&parm amid &parm,2,l:&parm-2
|
|
pla
|
|
sta (&parm)
|
|
ago .shorten
|
|
.absolute
|
|
pla
|
|
sta &parm
|
|
ago .shorten
|
|
.at
|
|
&char amid &parm,2,1
|
|
pl&char
|
|
.shorten
|
|
aif s:longa=1,.done
|
|
sep #%00100000
|
|
.done
|
|
mexit
|
|
.error
|
|
mnote "Missing Closing '}'",16
|
|
mend
|
|
|
|
********************
|
|
* pl4
|
|
********************
|
|
macro
|
|
&lab pl4 &parm
|
|
lclc &char
|
|
lclc &char1
|
|
lclc &char2
|
|
&lab anop
|
|
aif s:longa=1,.start
|
|
rep #%00100000
|
|
.start
|
|
&char amid &parm,1,1
|
|
aif "&char"<>"{",.chk
|
|
&char amid &parm,l:&parm,1
|
|
aif "&char"<>"}",.error
|
|
&parm amid &parm,2,l:&parm-2
|
|
pla
|
|
sta (&parm)
|
|
ldy #2
|
|
pla
|
|
sta (&parm),y
|
|
ago .shorten
|
|
.chk
|
|
aif "&char"<>"[",.chk2
|
|
pla
|
|
sta &parm
|
|
ldy #2
|
|
pla
|
|
sta &parm,y
|
|
ago .shorten
|
|
.chk2
|
|
aif "&char"<>"@",.absolute
|
|
&char1 amid &parm,2,1
|
|
&char2 setc &char1
|
|
pl&char1
|
|
aif l:&parm<3,.chk2a
|
|
&char2 amid &parm,3,1
|
|
.chk2a
|
|
pl&char2
|
|
ago .shorten
|
|
.absolute
|
|
pla
|
|
sta &parm
|
|
pla
|
|
sta &parm+2
|
|
.shorten
|
|
aif s:longa=1,.done
|
|
sep #%00100000
|
|
.done
|
|
mexit
|
|
.error
|
|
mnote "Missing closing '}'",16
|
|
mend
|
|
|
|
********************
|
|
* sub2
|
|
********************
|
|
MACRO
|
|
&lab sub2 &arg1,&arg2,&dest
|
|
lclc &char
|
|
&lab sec
|
|
&char amid &arg1,1,1
|
|
aif "&char"="@",.at1
|
|
lda &arg1
|
|
ago .sub
|
|
.at1
|
|
&char amid &arg1,2,1
|
|
aif "&char"="x",.x1
|
|
aif "&char"="X",.x1
|
|
aif "&char"="y",.y1
|
|
aif "&char"="Y",.y1
|
|
ago .sub
|
|
.x1
|
|
txa
|
|
ago .sub
|
|
.y1
|
|
tya
|
|
.sub
|
|
sbc &arg2
|
|
&char amid &dest,1,1
|
|
aif "&char"="@",.at2
|
|
sta &dest
|
|
ago .b
|
|
.at2
|
|
&char amid &dest,2,1
|
|
aif "&char"="x",.x2
|
|
aif "&char"="X",.x2
|
|
aif "&char"="y",.y2
|
|
aif "&char"="Y",.y2
|
|
ago .b
|
|
.x2
|
|
tax
|
|
ago .b
|
|
.y2
|
|
tay
|
|
.b
|
|
mend
|
|
|
|
********************
|
|
* sub4
|
|
********************
|
|
macro
|
|
&lab sub4 &arg1,&arg2,&dest
|
|
&lab anop
|
|
lclc &ch
|
|
&ch amid &arg2,1,1
|
|
sec
|
|
lda &arg1
|
|
sbc &arg2
|
|
sta &dest
|
|
lda &arg1+2
|
|
aif "&ch"="#",.a
|
|
sbc &arg2+2
|
|
ago .b
|
|
.a
|
|
sbc &arg2|-16
|
|
.b
|
|
sta &dest+2
|
|
mend
|
|
|
|
|
|
; ------------------
|
|
; New, experimental macros
|
|
; ------------------
|
|
|
|
********************
|
|
* breakpoint
|
|
********************
|
|
MACRO
|
|
&lab breakpoint &flag
|
|
&lab lda check4debug
|
|
and #$80
|
|
beq *+4
|
|
brk &flag
|
|
MEND
|
|
|
|
|
|
|
|
*****************************************
|
|
* incad: Increment a 4-byte address
|
|
*****************************************
|
|
MACRO
|
|
&lab incad &ptr
|
|
aif "&ptr"="@xa",.at1
|
|
&lab inc &ptr Increment low-order word.
|
|
bne skip&syscnt If rollover,
|
|
inc &ptr+2 increment high-order word.
|
|
ago .done
|
|
.at1 Same for address in X/A registers.
|
|
&lab inc a
|
|
bne skip&syscnt
|
|
inx
|
|
.done
|
|
skip&syscnt anop
|
|
MEND
|
|
|
|
|
|
********************************************************************
|
|
* ~NEW: call ~NEW or DB~NEW, depending upon whether debug is wanted
|
|
********************************************************************
|
|
MACRO
|
|
&lab ~NEW
|
|
&lab anop
|
|
using memglobal
|
|
lock memmutex
|
|
* jsl DB~NEW ; DEBUG VERSION
|
|
jsl ~NEW ; NON-DEBUG VERSION
|
|
unlock memmutex
|
|
MEND
|
|
|
|
|
|
***************************************************************************
|
|
* ~DISPOSE: call ~DISPOSE or DB~DISPOSE, depending upon if debug is wanted
|
|
***************************************************************************
|
|
MACRO
|
|
&lab ~DISPOSE
|
|
&lab anop
|
|
using memglobal
|
|
lock memmutex
|
|
* jsl DB~DISPOSE ; DEBUG VERSION
|
|
jsl ~DISPOSE ; NON-DEBUG VERSION
|
|
unlock memmutex
|
|
MEND
|
|
|
|
; ------------------
|
|
; Mutual Exclusion
|
|
; ------------------
|
|
|
|
********************
|
|
* key
|
|
********************
|
|
MACRO
|
|
&lab key
|
|
&lab dc i2'0'
|
|
MEND
|
|
|
|
********************
|
|
* lock
|
|
********************
|
|
MACRO
|
|
&lab lock &key
|
|
&lab anop
|
|
* jsr DB~CHKBNK ; TEMPORARY DEBUG CODE
|
|
lda #1
|
|
tsb &key
|
|
beq *+6
|
|
cop $7F
|
|
bra *-7
|
|
MEND
|
|
|
|
********************
|
|
* unlock
|
|
********************
|
|
MACRO
|
|
&lab unlock &key
|
|
&lab anop
|
|
* jsr DB~CHKBNK ; TEMPORARY DEBUG CODE
|
|
stz &key
|
|
MEND
|