A2osX/BIN/ASM.S.MAC.txt

190 lines
3.4 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*---------------------------------------
MAC.Init >SYSCALL SListNew
bcs .9
>STA.G MAC.hList
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPMacroBuf
txa
>STA.G MAC.hBuf
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPMacroStk
txa
>STA.G MAC.hStk
.9 rts
*---------------------------------------
MAC.Reset >STZ.G MAC.StkPtr
>STA.G MAC.CtxID
rts
*---------------------------------------
MAC.Quit >LDA.G MAC.hStk
beq .1
>SYSCALL FreeMem
.1 >LDA.G MAC.hBuf
beq .3
>SYSCALL FreeMem
.3 >LDA.G MAC.hList
beq .8
>SYSCALL SListFree
.8 clc
rts
*---------------------------------------
MAC.AddChar tax
>LDA.G ASM.PASS If Pass#2, ignore
bne .8
>LDA.G MAC.BufPtr
tay
txa
sta (ZPMacroBuf),y
>INC.G MAC.BufPtr
txa
beq .1
cmp #C.CR
bne .8
.1 >LDA.G MAC.BufPtr
tay
lda #0
>PUSHYA
>PUSHW ZPMacroBuf
>PUSHW.G MAC.ID
>LDA.G MAC.hList
>SYSCALL SListAddData
rts
.8 clc
MAC.AddChar.RTS rts
*---------------------------------------
MAC.ReadLine >LDA.G MAC.StkPtr
tay
dey
lda (ZPMacroStk),y
sta ZPPtr1
dey
lda (ZPMacroStk),y
sta ZPPtr1+1 pop mac ID
dey
lda (ZPMacroStk),y
sta ZPPtr2
dey
lda (ZPMacroStk),y
sta ZPPtr2+1 pop offset
dey
lda (ZPMacroStk),y
sta ZPMacroBuf
dey
lda (ZPMacroStk),y
sta ZPMacroBuf+1 pop args
tya
>STA.G MAC.StkPtr
>PUSHW ZPPtr2 offset
>PUSHWZ len = 0 (string mode)
>PUSHW ZPLineBuf
>PUSHW ZPPtr1 Mac ID
>LDA.G MAC.hList
>SYSCALL SListGetData
bcs MAC.AddChar.RTS
pha
tya
* clc
adc ZPPtr2
sta ZPPtr2
pla
adc ZPPtr2+1
sta ZPPtr2+1
>LDYA ZPMacroBuf
>SYSCALL puts
>LDA.G MAC.StkPtr
tay
lda ZPLinePtr+1 push args
sta (ZPMacroStk),y
iny
lda ZPLinePtr
sta (ZPMacroStk),y
iny
*---------------------------------------
MAC.Push lda ZPPtr2+1 push offset
sta (ZPMacroStk),y
iny
lda ZPPtr2
sta (ZPMacroStk),y
iny
lda ZPPtr1+1 push MAC.ID
sta (ZPMacroStk),y
iny
lda ZPPtr1
sta (ZPMacroStk),y
iny
tya
>STA.G MAC.StkPtr
clc
rts
*---------------------------------------
MAC.Exec jsr SRC.GetNextChar skip '>'
bcs .90
>PUSHW ZPLinePtr
>LDA.G MAC.hList
>SYSCALL SListLookup
bcs .90
>STYA ZPPtr1 MAC.ID
txa
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SRC.GetChar
bcs .8
cmp #' '
bne .92
jsr SRC.GetNextChar
beq .8 eol..
cmp #' ' some arg...
bne .8
.2 jsr SRC.GetNextChar comment....skip
bcc .2
.8 >LDA.G MAC.StkPtr
cmp #MA.MAXDEPTH*8
beq .91
stz ZPPtr2
stz ZPPtr2+1 offset = 0
>INC.G MAC.CtxID
>INC.G MAC.Depth
>LDA.G MAC.StkPtr
tay
lda ZPLinePtr+1 push args
sta (ZPMacroStk),y
iny
lda ZPLinePtr
sta (ZPMacroStk),y
iny
jmp MAC.Push
.90 lda #E.MACRO.INV
sec
rts
.91 lda #E.MACRO.TOO.MANY
sec
rts
.92 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.MAC
LOAD USR/SRC/BIN/ASM.S
ASM