A2osX/BIN/ASM.S.MAC.txt

494 lines
7.2 KiB
Plaintext
Raw Normal View History

2018-01-29 07:41:05 +00:00
NEW
2019-09-02 06:09:28 +00:00
AUTO 3,1
2018-01-29 07:41:05 +00:00
*---------------------------------------
MAC.Init >SYSCALL SListNew
bcs .9
2018-01-29 07:41:05 +00:00
2019-03-29 16:21:30 +00:00
>STA.G MAC.hList
2020-02-23 20:01:48 +00:00
>LDYAI 256
2018-07-20 11:51:08 +00:00
>SYSCALL getmem
bcs .9
2020-02-23 20:01:48 +00:00
txa
2019-03-29 16:21:30 +00:00
>STA.G MAC.hBuf
>LDYAI 256
2018-07-20 11:51:08 +00:00
>SYSCALL getmem
bcs .9
2020-02-23 20:01:48 +00:00
>STYA ZPMacroArgBuf
txa
>STA.G MAC.hArgBuf
>LDYAI 256
>SYSCALL getmem
bcs .9
2019-03-29 16:21:30 +00:00
>STYA ZPMacroStk
txa
2019-03-29 16:21:30 +00:00
>STA.G MAC.hStk
2019-10-03 06:25:27 +00:00
.9 rts
2018-01-29 07:41:05 +00:00
*---------------------------------------
2019-03-29 16:21:30 +00:00
MAC.Reset >STZ.G MAC.StkPtr
2019-04-01 06:07:56 +00:00
>STA.G MAC.CtxID
rts
*---------------------------------------
2019-03-29 16:21:30 +00:00
MAC.Quit >LDA.G MAC.hStk
beq .1
2018-01-29 16:48:07 +00:00
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2020-02-23 20:01:48 +00:00
2019-03-29 16:21:30 +00:00
.1 >LDA.G MAC.hBuf
2020-02-23 20:01:48 +00:00
beq .2
>SYSCALL FreeMem
.2 >LDA.G MAC.hArgBuf
beq .3
2018-07-18 15:30:42 +00:00
>SYSCALL FreeMem
2020-02-23 20:01:48 +00:00
2019-03-29 16:21:30 +00:00
.3 >LDA.G MAC.hList
beq .8
2020-02-23 20:01:48 +00:00
>PUSHA
2018-07-24 16:00:24 +00:00
>SYSCALL SListFree
2018-01-29 07:41:05 +00:00
.8 clc
rts
2018-01-29 07:41:05 +00:00
*---------------------------------------
2020-02-23 20:01:48 +00:00
MAC.Learn >LDA.G MAC.hBuf
>SYSCALL GetMemPtr
>STYA ZPMacroBuf
>STZ.G MAC.BufPtr
sta (ZPMacroBuf)
lda (ZPLinePtr)
cmp #C.SPACE No label, scan to DIR/OP if any
bne .1
jsr SRC.GetNextCharNB
bcs .8
lda #C.SPACE Store ONE blank
jsr MAC.AddChar
bcs .90
lda (ZPLinePtr) get back non blank char
bra .2
.1 jsr MAC.AddChar
bcs .99
jsr SRC.GetNextChar
bcs .80
cmp #C.SPACE
bne .1
jsr MAC.AddChar
.90 bcs .99
jsr SRC.GetNextCharNB
bcs .80
.2 cmp #'.' Directive ?
bne .4
ldy #1
lda (ZPLinePtr),y
beq .3
cmp #'E'
beq .21
cmp #'e'
bne .3
.21 iny
lda (ZPLinePtr),y
beq .3
cmp #'M'
beq .22
cmp #'m'
bne .3
.22 >STZ.G ASM.MA.ON
.8 clc
rts
.80 lda #C.CR
jmp MAC.AddChar
.3 lda (ZPLinePtr)
.4 jsr MAC.AddChar
bcs .99
jsr SRC.GetNextChar
bcs .80
cmp #C.SPACE
bne .4
jsr SRC.GetNextChar
bcs .8
cmp #C.SPACE
beq .80 Comments...
pha
lda #C.SPACE
jsr MAC.AddChar
pla
bcs .99
.5 jsr MAC.AddChar Store ARG....
bcs .99
jsr SRC.GetNextChar
bcs .80
cmp #C.SPACE
bne .5
bra .80 End of Line
.99 rts
*---------------------------------------
2019-03-18 16:48:16 +00:00
MAC.AddChar tax
2020-02-23 20:01:48 +00:00
>LDA.G ASM.PASS If Pass#2, ignore
2019-03-22 16:47:33 +00:00
bne .8
2020-02-23 20:01:48 +00:00
2019-03-18 16:48:16 +00:00
>LDA.G MAC.BufPtr
tay
2019-03-18 16:48:16 +00:00
txa
sta (ZPMacroBuf),y
2019-03-18 16:48:16 +00:00
>INC.G MAC.BufPtr
txa
2019-04-01 06:07:56 +00:00
beq .1
cmp #C.CR
bne .8
2020-02-23 20:01:48 +00:00
.1 >PUSHB.G MAC.hList
>PUSHW.G MAC.ID
>PUSHW ZPMacroBuf
>LDA.G MAC.BufPtr
2019-03-18 16:48:16 +00:00
tay
lda #0
>PUSHYA
>SYSCALL SListAddData
rts
2020-02-23 20:01:48 +00:00
.8 clc
2019-04-01 06:07:56 +00:00
rts
*---------------------------------------
MAC.Exec jsr SRC.GetNextChar skip '>'
bcs .90
2020-02-23 20:01:48 +00:00
>PUSHB.G MAC.hList
2019-04-01 06:07:56 +00:00
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs .90
2020-02-23 20:01:48 +00:00
2019-04-01 06:07:56 +00:00
>STYA ZPPtr1 MAC.ID
txa
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
2020-02-23 20:01:48 +00:00
2019-04-01 06:07:56 +00:00
.1 jsr SRC.GetChar
bcs .8
2020-02-23 20:01:48 +00:00
cmp #C.SPACE
2019-04-01 06:07:56 +00:00
bne .92
2020-02-23 20:01:48 +00:00
2019-04-01 06:07:56 +00:00
jsr SRC.GetNextChar
beq .8 eol..
2020-02-23 20:01:48 +00:00
cmp #C.SPACE some arg...
2019-04-01 06:07:56 +00:00
bne .8
2020-02-23 20:01:48 +00:00
2019-04-01 06:07:56 +00:00
.2 jsr SRC.GetNextChar comment....skip
bcc .2
2020-02-23 20:01:48 +00:00
.8 jmp MAC.Push
.90 lda #E.MACRO.INV
sec
rts
.92 lda #E.SYNTAX.ERROR
sec
MAC.Exec.RTS rts
*---------------------------------------
MAC.ReadLine >LDA.G MAC.hBuf
>SYSCALL GetMemPtr
>STYA ZPMacroBuf
jsr MAC.Get ZPMacroArgBuf = args
>PUSHB.G MAC.hList
>PUSHW ZPPtr1 Mac ID
>PUSHW ZPMacroBuf
>PUSHWZ len = 0 (string mode)
>PUSHW ZPPtr2 offset
>SYSCALL SListGetData
bcs MAC.Exec.RTS
pha
tya
sec +1 for CR
adc ZPPtr2
sta ZPPtr2
pla
adc ZPPtr2+1
sta ZPPtr2+1
ldy #0
.1 lda (ZPMacroBuf)
beq .7
inc ZPMacroBuf
bne .2
inc ZPMacroBuf+1
.2 cmp #']'
bne .7
lda (ZPMacroBuf)
beq .9
inc ZPMacroBuf
bne .21
inc ZPMacroBuf+1
.21 cmp #'#'
bne .20
2020-02-24 06:40:06 +00:00
>LDYA ZPMacroBuf
>SYSCALL puts
>DEBUG
2020-02-23 20:01:48 +00:00
jsr MAC.GetArgCnt
ora #$30
bra .7
.20 cmp #'1'
bcc .9
cmp #'9'+1
bcs .9
and #$0f
tax
jsr MAC.GetArgX
bcs .9
.3 lda (ZPPtr1)
sta (ZPLineBuf),y
iny
inc ZPPtr1
bne .4
inc ZPPtr1+1
.4 dex
bne .3
bra .1
.7 sta (ZPLineBuf),y
beq .8
iny
bra .1
.8 jmp MAC.Put
.9 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
MAC.Put >LDA.G MAC.StkPtr
tay
dey
dey skip mac ID
dey
lda ZPPtr2
sta (ZPMacroStk),y
dey
lda ZPPtr2+1
sta (ZPMacroStk),y get offset
2020-02-24 06:40:06 +00:00
clc
2020-02-23 20:01:48 +00:00
rts
*---------------------------------------
MAC.Push >LDA.G MAC.StkPtr
2019-04-01 06:07:56 +00:00
cmp #MA.MAXDEPTH*8
2020-02-23 20:01:48 +00:00
beq .9
2019-04-01 06:07:56 +00:00
stz ZPPtr2
stz ZPPtr2+1 offset = 0
2020-02-23 20:01:48 +00:00
2019-04-01 06:07:56 +00:00
>INC.G MAC.CtxID
>INC.G MAC.Depth
2020-02-23 20:01:48 +00:00
>LDYA ZPLinePtr
>SYSCALL strdup Args
bcs .99
2019-04-01 06:07:56 +00:00
>LDA.G MAC.StkPtr
tay
2020-02-23 20:01:48 +00:00
txa push args
sta (ZPMacroStk),y
iny
lda ZPPtr2+1 push offset
sta (ZPMacroStk),y
iny
lda ZPPtr2
2019-04-01 06:07:56 +00:00
sta (ZPMacroStk),y
2020-02-23 20:01:48 +00:00
2019-04-01 06:07:56 +00:00
iny
2020-02-23 20:01:48 +00:00
lda ZPPtr1+1 push MAC.ID
2019-04-01 06:07:56 +00:00
sta (ZPMacroStk),y
iny
2020-02-23 20:01:48 +00:00
lda ZPPtr1
sta (ZPMacroStk),y
iny
tya
>STA.G MAC.StkPtr
clc
rts
2019-04-01 06:07:56 +00:00
2020-02-23 20:01:48 +00:00
.9 lda #E.MACRO.TOO.MANY
2019-04-01 06:07:56 +00:00
sec
2020-02-23 20:01:48 +00:00
.99 rts
*---------------------------------------
MAC.Pop >LDA.G MAC.StkPtr
dec
dec
dec
dec
dec
sta (pData),y 5 bytes off stack
tay
lda (ZPMacroStk),y
>SYSCALL freemem
>DEC.G MAC.CtxID
>DEC.G MAC.Depth
clc
2019-03-18 16:48:16 +00:00
rts
2020-02-23 20:01:48 +00:00
*---------------------------------------
MAC.Get >LDA.G MAC.StkPtr
tay
dey
lda (ZPMacroStk),y
sta ZPPtr1
dey
lda (ZPMacroStk),y
sta ZPPtr1+1 get mac ID
dey
lda (ZPMacroStk),y
sta ZPPtr2
dey
lda (ZPMacroStk),y
sta ZPPtr2+1 get offset
dey
lda (ZPMacroStk),y
>SYSCALL GetMemPtr
>STYA ZPMacroArgBuf get args
rts
*---------------------------------------
MAC.GetArgCnt phy
ldx #0
ldy #$ff
.1 iny
lda (ZPMacroArgBuf),y
2020-02-24 06:40:06 +00:00
beq .8
cmp #','
bne .1
iny
inx
bra .1
.7 tya
beq .8
2020-02-23 20:01:48 +00:00
2020-02-24 06:40:06 +00:00
inx
.8 txa
2020-02-23 20:01:48 +00:00
ply
clc
rts
*---------------------------------------
MAC.GetArgX phy
>LDYA ZPMacroArgBuf
>STYA ZPPtr1
ldy #$ff
.1 iny
lda (ZPPtr1),y
beq .7
cmp #','
bne .1
.2 dex
beq .7
tya
beq .9
clc
adc ZPPtr1
bcc .7
inc ZPPtr1+1
.7 tya
tax
beq .9
ply
clc
rts
.9 ply
2019-04-01 06:07:56 +00:00
sec
2020-02-23 20:01:48 +00:00
rts
*---------------------------------------
2018-01-29 07:41:05 +00:00
MAN
2019-01-28 07:44:37 +00:00
SAVE USR/SRC/BIN/ASM.S.MAC
LOAD USR/SRC/BIN/ASM.S
2018-01-29 07:41:05 +00:00
ASM