mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-03 12:06:05 +00:00
612 lines
9.3 KiB
Plaintext
612 lines
9.3 KiB
Plaintext
NEW
|
||
PREFIX
|
||
AUTO 4,1
|
||
*---------------------------------------
|
||
DIR.Reset lda #$80
|
||
ldy #ASM.LI.ON
|
||
sta (pData),y
|
||
|
||
lda #0
|
||
ldy #ASM.LI.CON
|
||
sta (pData),y
|
||
ldy #ASM.LI.MON
|
||
sta (pData),y
|
||
ldy #ASM.LI.XON
|
||
sta (pData),y
|
||
rts
|
||
*---------------------------------------
|
||
DIR.AC clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.AT sec
|
||
.HS 90 BCC
|
||
*---------------------------------------
|
||
DIR.AS clc
|
||
lda #0
|
||
ror
|
||
sta DIR.Byte Save b7 of last char in string
|
||
|
||
jsr SRC.GetNextChar
|
||
bcs .9
|
||
cmp #'-'
|
||
bne .1
|
||
|
||
lda #$40 save b7 status of ALL chars
|
||
tsb DIR.Byte
|
||
|
||
jsr SRC.GetNextChar
|
||
bcs .9
|
||
|
||
.1 sta DIR.Word Save delimiter....
|
||
sta DIR.Word+1 Save also in prev char..
|
||
|
||
.2 jsr SRC.GetNextChar
|
||
bcs .8
|
||
|
||
cmp DIR.Word delimiter ?
|
||
beq .8
|
||
|
||
ldx DIR.Word+1 Get prev char
|
||
sta DIR.Word+1 replace it with new
|
||
txa
|
||
cmp DIR.Word is it the starting delimiter
|
||
beq .2 yes, skip
|
||
|
||
bit DIR.Byte
|
||
bvc .3
|
||
|
||
ora #$80
|
||
|
||
.3 jsr OUT.EmitByte no, emit prev char
|
||
bcc .2
|
||
|
||
.9 lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
rts
|
||
|
||
.8 lda DIR.Word+1 Get prev char
|
||
cmp DIR.Word someone typed .AS "" ?
|
||
beq .88
|
||
|
||
bit DIR.Byte
|
||
bpl .81
|
||
eor #$80
|
||
|
||
.81 jmp OUT.EmitByte
|
||
|
||
.88 clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.AZ jsr DIR.AS
|
||
bcs .9
|
||
|
||
lda #0
|
||
jmp OUT.EmitByte
|
||
.9 rts
|
||
*---------------------------------------
|
||
DIR.BS jsr SRC.GetNextCharNB
|
||
bcs .98
|
||
|
||
jsr EXP.Eval
|
||
bcs .9
|
||
|
||
lda SRC.ACC+3
|
||
ora SRC.ACC+2
|
||
bne .99
|
||
lda SRC.ACC
|
||
eor #$ff
|
||
sta DIR.Word
|
||
lda SRC.ACC+1
|
||
eor #$ff
|
||
sta DIR.Word+1
|
||
|
||
stz DIR.Byte
|
||
|
||
jsr SRC.GetNextChar
|
||
bcs .1
|
||
cmp #' '
|
||
beq .1
|
||
|
||
cmp #','
|
||
bne .98
|
||
jsr EXP.Eval
|
||
bcs .9
|
||
|
||
lda SRC.ACC+3
|
||
ora SRC.ACC+2
|
||
ora SRC.ACC+1
|
||
bne .99
|
||
lda SRC.ACC
|
||
sta DIR.Byte
|
||
|
||
.1 inc DIR.Word
|
||
bne .2
|
||
inc DIR.Word+1
|
||
beq .8
|
||
|
||
.2 lda DIR.Byte
|
||
jsr OUT.EmitByte
|
||
bcc .1
|
||
rts
|
||
|
||
.8 clc
|
||
.9 rts
|
||
|
||
.99 lda #ERR.RANGE
|
||
sec
|
||
rts
|
||
|
||
.98 lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.DA jsr SRC.GetNextCharNB
|
||
bcs .98
|
||
|
||
.1 jsr EXP.Eval
|
||
bcs .9
|
||
|
||
ldx SRC.ACC.SIZE
|
||
bne .10
|
||
|
||
ldx #2
|
||
|
||
.10 ldy #0
|
||
|
||
.2 lda SRC.ACC,y
|
||
jsr OUT.EmitByte
|
||
bcs .9
|
||
|
||
iny
|
||
dex
|
||
bne .2
|
||
|
||
.3 jsr SRC.GetNextChar
|
||
bcs .8
|
||
cmp #' '
|
||
beq .8
|
||
|
||
cmp #','
|
||
bne .98
|
||
jsr SRC.GetNextChar
|
||
bcc .1
|
||
|
||
.98 lda #ERR.SYNTAX.ERROR
|
||
clc
|
||
.9 rts
|
||
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.DO >LDA.G ASM.DO.StackPtr
|
||
inc
|
||
cmp #DO.MAXDEPTH
|
||
bcs .98
|
||
|
||
jsr SRC.GetNextCharNB
|
||
bcs .99
|
||
|
||
jsr EXP.Eval
|
||
bcs .99
|
||
|
||
>INC.G ASM.DO.StackPtr
|
||
* clc ok from bcs .99
|
||
adc #ASM.DO.Stack-1
|
||
tay
|
||
|
||
lda SRC.ACC
|
||
ora SRC.ACC+1
|
||
ora SRC.ACC+2
|
||
ora SRC.ACC+3
|
||
beq .1
|
||
|
||
lda #$ff
|
||
|
||
.1 sta (pData),y
|
||
lda #$FF
|
||
>STA.G ASM.DO.ON
|
||
clc
|
||
rts
|
||
|
||
.98 lda #ERR.TOO.MANY.DO
|
||
sec
|
||
.99 rts
|
||
*---------------------------------------
|
||
DIR.DU >LDA.G ASM.DU.ON
|
||
bmi DIR.DU.ERR
|
||
|
||
lda #$80
|
||
sta (pData),y
|
||
|
||
ldy #ASM.PC.DU
|
||
jsr DIR.SavePC
|
||
|
||
clc
|
||
rts
|
||
|
||
DIR.DU.ERR lda #ERR.INV.DIR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.ED >LDA.G ASM.DU.ON
|
||
bpl DIR.DU.ERR
|
||
|
||
lda #0
|
||
sta (pData),y
|
||
|
||
ldy #ASM.PC.DU
|
||
jsr DIR.RestorePC
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #ERR.INV.DIR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.EL >LDA.G ASM.DO.StackPtr
|
||
beq .9
|
||
|
||
clc
|
||
adc #ASM.DO.Stack-1
|
||
tay
|
||
lda (pData),y
|
||
eor #$ff
|
||
sta (pData),y
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #ERR.ELSE.WITHOUT.DO
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.EM lda #ERR.MACRO.INV.DEF
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.EN clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.EP >LDA.G ASM.PH.ON
|
||
bpl .9
|
||
|
||
lda #0
|
||
sta (pData),y
|
||
|
||
ldy #ASM.PC.PH
|
||
|
||
jsr DIR.RestorePC
|
||
clc
|
||
rts
|
||
|
||
.9 lda #ERR.INV.DIR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.SE sec
|
||
.HS 90 BCC
|
||
*---------------------------------------
|
||
DIR.EQ clc
|
||
|
||
lda (ZPGlobalBuf)
|
||
beq .99
|
||
|
||
ror
|
||
>STA.G OUT.bEquate
|
||
|
||
jsr SRC.GetNextCharNB
|
||
bcs .99
|
||
|
||
jsr EXP.Eval
|
||
bcs .9
|
||
|
||
jsr SYM.Acc2Global
|
||
bcs .9
|
||
|
||
jmp SYM.FlushGlobal
|
||
|
||
.99 lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
.9 rts
|
||
*---------------------------------------
|
||
DIR.FI ldy #ASM.DO.StackPtr
|
||
lda (pData),y
|
||
beq .99
|
||
dec
|
||
sta (pData),y
|
||
bne .1
|
||
|
||
lda #$0
|
||
ldy #ASM.DO.ON
|
||
sta (pData),y
|
||
|
||
.1 clc
|
||
rts
|
||
|
||
.99 lda #ERR.INV.DIR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.HS jsr SRC.GetNextCharNB
|
||
bcs .99
|
||
|
||
jsr SRC.IsDigit16
|
||
bcs .99
|
||
|
||
.1 >STA.G DIR.Byte
|
||
|
||
jsr SRC.GetNextChar
|
||
bcc .2
|
||
|
||
jmp OUT.EmitByte
|
||
|
||
.2 jsr SRC.IsDigit16
|
||
bcc .3
|
||
|
||
cmp #','
|
||
beq .22
|
||
|
||
cmp #'.'
|
||
bne .99
|
||
|
||
.22 >LDA.G DIR.Byte
|
||
jsr OUT.EmitByte
|
||
bcc .5
|
||
rts
|
||
|
||
.3 pha
|
||
>LDA.G DIR.Byte
|
||
asl
|
||
asl
|
||
asl
|
||
asl
|
||
>STA.G DIR.Byte
|
||
|
||
pla
|
||
>ORA.G DIR.Byte
|
||
|
||
|
||
.4 jsr OUT.EmitByte
|
||
bcs .9
|
||
|
||
jsr SRC.GetNextChar
|
||
bcs .8
|
||
cmp #' '
|
||
beq .8
|
||
|
||
jsr SRC.IsDigit16
|
||
bcc .1
|
||
|
||
cmp #','
|
||
beq .5
|
||
|
||
cmp #'.'
|
||
bne .99
|
||
|
||
.5 jsr SRC.GetNextChar
|
||
bcs .99
|
||
jsr SRC.IsDigit16
|
||
bcc .1
|
||
|
||
.99 lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
.9 rts
|
||
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.IN jsr SRC.GetNextCharNB
|
||
bcs .9
|
||
|
||
>LDYA ZPLinePtr
|
||
>SYSCALL RealPath
|
||
|
||
phx
|
||
|
||
jsr FIO.OpenFile
|
||
plx
|
||
php
|
||
pha
|
||
|
||
txa
|
||
>SYSCALL FreeMem
|
||
|
||
pla
|
||
plp
|
||
rts
|
||
|
||
.9 lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.LI jsr SRC.GetNextChar
|
||
bcs .9
|
||
|
||
>LDYA L.T.LI
|
||
jsr SRC.GetKeyword
|
||
bcs .9
|
||
|
||
jsr .7
|
||
|
||
jsr SRC.GetChar
|
||
bcs .8
|
||
|
||
cmp #','
|
||
beq DIR.LI
|
||
cmp #' '
|
||
beq .8
|
||
|
||
.9 lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
rts
|
||
|
||
.7 jmp (J.LI,x)
|
||
|
||
.8 clc
|
||
rts
|
||
|
||
DIR.LI.ON ldy #ASM.LI.ON
|
||
sec
|
||
bra DIR.LI.APPLY
|
||
|
||
DIR.LI.OFF ldy #ASM.LI.ON
|
||
clc
|
||
bra DIR.LI.APPLY
|
||
|
||
DIR.LI.CON ldy #ASM.LI.CON
|
||
sec
|
||
bra DIR.LI.APPLY
|
||
|
||
DIR.LI.COFF ldy #ASM.LI.CON
|
||
clc
|
||
bra DIR.LI.APPLY
|
||
|
||
DIR.LI.MON ldy #ASM.LI.MON
|
||
sec
|
||
bra DIR.LI.APPLY
|
||
|
||
DIR.LI.MOFF ldy #ASM.LI.MON
|
||
clc
|
||
bra DIR.LI.APPLY
|
||
|
||
DIR.LI.XON ldy #ASM.LI.XON
|
||
sec
|
||
bra DIR.LI.APPLY
|
||
|
||
DIR.LI.XOFF ldy #ASM.LI.XON
|
||
clc
|
||
|
||
DIR.LI.APPLY lda #0
|
||
ror
|
||
|
||
sta (pData),y
|
||
rts
|
||
*---------------------------------------
|
||
DIR.MA >LDA.G ASM.MA.ON
|
||
bmi .9
|
||
|
||
>LDA.G ASM.PASS If Pass#2, ignore
|
||
bne .8
|
||
|
||
jsr SRC.GetNextCharNB
|
||
beq DIR.OP.SYNERR
|
||
|
||
jsr SYM.GetName
|
||
bcs .99
|
||
|
||
jsr MAC.New
|
||
|
||
.8 lda #$ff
|
||
>STA.G ASM.MA.ON
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #ERR.MACRO.INV.DEF
|
||
sec
|
||
.99 rts
|
||
*---------------------------------------
|
||
DIR.OP jsr SRC.GetNextCharNB
|
||
bcs DIR.OP.SYNERR
|
||
|
||
>LDYA ZPLinePtr
|
||
jmp FIO.LOAD.ASM.T
|
||
|
||
DIR.OP.SYNERR lda #ERR.SYNTAX.ERROR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.OR jsr SRC.GetNextCharNB
|
||
bcs DIR.OP.SYNERR
|
||
|
||
jsr EXP.Eval
|
||
bcs .9
|
||
|
||
ldy #ASM.PC
|
||
ldx #0
|
||
|
||
.1 lda SRC.ACC,x
|
||
sta (pData),y
|
||
inx
|
||
iny
|
||
cpx #4
|
||
bne .1
|
||
clc
|
||
.9 rts
|
||
*---------------------------------------
|
||
DIR.PG clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.PH >LDA.G ASM.PH.ON
|
||
bmi .9
|
||
|
||
lda #$80
|
||
sta (pData),y
|
||
|
||
ldy #ASM.PC.PH
|
||
jsr DIR.SavePC
|
||
|
||
jmp DIR.OR
|
||
|
||
.9 lda #ERR.INV.DIR
|
||
sec
|
||
rts
|
||
*---------------------------------------
|
||
DIR.TA clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.TF clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.TI clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.US clc
|
||
rts
|
||
*---------------------------------------
|
||
DIR.SavePC ldx #3
|
||
phy
|
||
ldy #ASM.PC+3
|
||
|
||
.1 lda (pData),y
|
||
pha
|
||
dey
|
||
dex
|
||
bpl .1
|
||
|
||
ply
|
||
ldx #3
|
||
|
||
.2 pla
|
||
sta (pData),y
|
||
iny
|
||
dex
|
||
bpl .2
|
||
|
||
rts
|
||
*---------------------------------------
|
||
DIR.RestorePC ldx #3
|
||
|
||
.1 lda (pData),y
|
||
pha
|
||
iny
|
||
dex
|
||
bpl .1
|
||
|
||
ldy #ASM.PC+3
|
||
ldx #3
|
||
|
||
.2 pla
|
||
sta (pData),y
|
||
dey
|
||
dex
|
||
bpl .2
|
||
|
||
rts
|
||
*---------------------------------------
|
||
MAN
|
||
SAVE USR/SRC/BIN/DEV/ASM.S.DIR
|
||
LOAD USR/SRC/BIN/DEV/ASM.S
|
||
ASM
|