Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-02-23 21:01:48 +01:00
parent 111c24d7bc
commit 4badc58f2d
36 changed files with 869 additions and 515 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.ADDR.MODES .EQ *
.DA #2,$$"#a"
@ -21,6 +20,6 @@ T.REGISTERS .EQ *
.HS 00
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.6502.A
LOAD USR/SRC/BIN/ASM.T.6502.S
SAVE USR/SRC/BIN/ASM.6502.A
LOAD USR/SRC/BIN/ASM.6502.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.OPCODES .EQ *
ADC .DA ADC.E+1-*
@ -325,6 +324,6 @@ TYA.E .HS 00
.HS 0000
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.6502.O
LOAD USR/SRC/BIN/ASM.T.6502.S
SAVE USR/SRC/BIN/ASM.6502.O
LOAD USR/SRC/BIN/ASM.6502.S
ASM

View File

@ -1,17 +1,16 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OR $0
.TF BIN/ASM.T.Z80
.TF bin/asm.6502
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.T.Z80.O
.INB USR/SRC/BIN/ASM.T.Z80.A
.INB USR/SRC/BIN/ASM.6502.O
.INB USR/SRC/BIN/ASM.6502.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.Z80.S
SAVE USR/SRC/BIN/ASM.6502.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.ADDR.MODES .EQ *
.DA #2,$$"#a"
@ -32,6 +31,6 @@ T.REGISTERS .EQ *
.HS 00
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65816.A
LOAD USR/SRC/BIN/ASM.T.65816.S
SAVE USR/SRC/BIN/ASM.65816.A
LOAD USR/SRC/BIN/ASM.65816.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.OPCODES .EQ *
ADC .DA ADC.E+1-*
@ -532,6 +531,6 @@ XCE.E .HS 00
.HS 0000
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65816.O
LOAD USR/SRC/BIN/ASM.T.65816.S
SAVE USR/SRC/BIN/ASM.65816.O
LOAD USR/SRC/BIN/ASM.65816.S
ASM

View File

@ -1,17 +1,16 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OR $0
.TF BIN/ASM.T.SW16
.TF bin/asm.65816
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.T.SW16.O
.INB USR/SRC/BIN/ASM.T.SW16.A
.INB USR/SRC/BIN/ASM.65816.O
.INB USR/SRC/BIN/ASM.65816.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.SW16.S
SAVE USR/SRC/BIN/ASM.65816.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.ADDR.MODES .EQ *
.DA #2,$$"#a"
@ -23,6 +22,6 @@ T.REGISTERS .EQ *
.HS 00
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65C02.A
LOAD USR/SRC/BIN/ASM.T.65C02.S
SAVE USR/SRC/BIN/ASM.65C02.A
LOAD USR/SRC/BIN/ASM.65C02.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.OPCODES .EQ *
ADC .DA ADC.E+1-*
@ -384,6 +383,6 @@ WAI.E .HS 00
.HS 0000
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65C02.O
LOAD USR/SRC/BIN/ASM.T.65C02.S
SAVE USR/SRC/BIN/ASM.65C02.O
LOAD USR/SRC/BIN/ASM.65C02.S
ASM

View File

@ -1,17 +1,16 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OR $0
.TF BIN/ASM.T.6502
.TF bin/asm.65C02
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.T.6502.O
.INB USR/SRC/BIN/ASM.T.6502.A
.INB USR/SRC/BIN/ASM.65C02.O
.INB USR/SRC/BIN/ASM.65C02.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.6502.S
SAVE USR/SRC/BIN/ASM.65C02.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.ADDR.MODES .EQ *
.DA #2,$$"#a"
@ -24,6 +23,6 @@ T.REGISTERS .EQ *
.HS 00
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65R02.A
LOAD USR/SRC/BIN/ASM.T.65R02.S
SAVE USR/SRC/BIN/ASM.65R02.A
LOAD USR/SRC/BIN/ASM.65R02.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.OPCODES .EQ *
ADC .DA ADC.E+1-*
@ -504,6 +503,6 @@ TYA.E .HS 00
.HS 0000
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65R02.O
LOAD USR/SRC/BIN/ASM.T.65R02.S
SAVE USR/SRC/BIN/ASM.65R02.O
LOAD USR/SRC/BIN/ASM.65R02.S
ASM

View File

@ -1,17 +1,16 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OR $0
.TF BIN/ASM.T.65C02
.TF bin/asm.65R02
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.T.65C02.O
.INB USR/SRC/BIN/ASM.T.65C02.A
.INB USR/SRC/BIN/ASM.65R02.O
.INB USR/SRC/BIN/ASM.65R02.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65C02.S
SAVE USR/SRC/BIN/ASM.65R02.S
ASM

View File

@ -253,8 +253,8 @@ DIR.EQ clc
bcs .9
jsr SYM.Acc2Global
jmp SYM.StoreGlobal
.2
lda (ZPSymbolBuf) PASS#2
.2 lda (ZPSymbolBuf) PASS#2
and #SYMG.F.FWREF
beq .3
@ -345,8 +345,10 @@ DIR.HS jsr SRC.GetNextCharNB
*---------------------------------------
DIR.IN jsr SRC.GetNextCharNB
bcs .9
>LDYA ZPLinePtr
jmp FIO.OpenFile
.9 lda #E.SYNTAX.ERROR
sec
rts
@ -410,15 +412,19 @@ DIR.MA >LDA.G ASM.MA.ON
jsr SRC.GetNextCharNB
beq DIR.OP.SYNERR
>PUSHB.G MAC.hList
>PUSHW ZPLinePtr
>LDA.G MAC.hList
>SYSCALL SListNewKey
bcs .99
>STYA.G MAC.ID
.8 lda #$ff
>STA.G ASM.MA.ON
clc
rts
.9 lda #E.MACRO.INV.DEF
sec
.99 rts
@ -426,7 +432,8 @@ DIR.MA >LDA.G ASM.MA.ON
DIR.OP jsr SRC.GetNextCharNB
bcs DIR.OP.SYNERR
>LDYA ZPLinePtr
jmp FIO.LOAD.ASM.T
jmp FIO.LOAD.CPU
DIR.OP.SYNERR lda #E.SYNTAX.ERROR
sec
rts

View File

@ -18,6 +18,7 @@ EXP.Eval.Missing
lda #E.MISSING.EXP
sec
rts
EXP.Eval >STZ.G EXP.Modifier
>STZ.G EXP.Prefix
>STZ.G EXP.Operator
@ -162,6 +163,7 @@ EXP.EvalOperator
*---------------------------------------
EXP.GetLocal jsr SRC.GetNextChar
bcs .9
jsr SRC.GetDecimal
bcs EXP.EvalExitSYN
lda SRC.ACC+1
@ -173,6 +175,7 @@ EXP.GetLocal jsr SRC.GetNextChar
jsr SYM.GetLocalX
bcc .8
>LDA.G ASM.PASS pass#2?
bne EXP.EvalExitUND
lda #SYMG.F.FWREF Mark ACC as pending
@ -329,7 +332,7 @@ EXP.OP.SUB ldx #0 ARG-ACC->ACC
.8 clc
rts
*---------------------------------------
EXP.OP.MUL
EXP.OP.MUL
*---------------------------------------
EXP.OP.DIV
clc

View File

@ -2,7 +2,7 @@ NEW
AUTO 3,1
*---------------------------------------
FIO.Init >LDYA L.ASM.6502
FIO.LOAD.ASM.T >STYA ZPPtr2
FIO.LOAD.CPU >STYA ZPPtr2
ldy #S.PS.hARGV
lda (pPS),y
@ -11,23 +11,15 @@ FIO.LOAD.ASM.T >STYA ZPPtr2
>STYA ZPPtr1
ldy #$ff
ldx #$ff
.1 iny
inx
lda (ZPPtr1),y
sta ASM.T.FILENAME,x
sta ASM.CPU.FILE,x
bne .1
lda #'.'
sta ASM.T.FILENAME,x
inx
lda #'T'
sta ASM.T.FILENAME,x
inx
lda #'.'
sta ASM.T.FILENAME,x
sta ASM.CPU.FILE,x
ldy #$ff
.2 iny
@ -35,29 +27,34 @@ FIO.LOAD.ASM.T >STYA ZPPtr2
lda (ZPPtr2),y
jsr SRC.IsLetterOrDigit
bcs .3
sta ASM.T.FILENAME,x
sta ASM.CPU.FILE,x
bra .2
.3 stz ASM.T.FILENAME,x
ldy #ASM.T.hMem
lda (pData),y
.3 stz ASM.CPU.FILE,x
>LDA.G ASM.T.hMem
beq .4
>SYSCALL FreeMem
ldy #ASM.T.hMem
lda #0
sta (pData),y
.4 >PUSHW L.ASM.T.FILENAME
>STZ.G ASM.T.hMem
.4 >PUSHW L.MSG.T.FILE
>PUSHW L.ASM.CPU.FILE
>PUSHBI 2
>LDYA L.MSG.T.FILE
jsr OUT.Print
>PUSHWZ Aux type
>PUSHBI 6 S.FI.T.BIN
>PUSHW L.ASM.CPU.FILE
>PUSHBI O.RDONLY
>LDYA L.ASM.T.FILENAME
>PUSHBI S.FI.T.BIN
>PUSHWZ Aux type
>SYSCALL LoadFile
bcs .9
txa
ldy #ASM.T.hMem
sta (pData),y
>STA.G ASM.T.hMem
>SYSCALL GetMemPtr
>STYA ZPPtr1
@ -91,48 +88,52 @@ FIO.LOAD.ASM.T >STYA ZPPtr2
.9 rts
*---------------------------------------
FIO.OpenFile >STYA ZPPtr1
>PUSHW L.MSG.SRC.FILE
>PUSHW ZPPtr1
>PUSHBI 2
>LDYA L.MSG.SRC.FILE
jsr OUT.Print
ldy #SRC.COUNT
lda (pData),y
>LDA.G SRC.COUNT
cmp #IN.MAXDEPTH
bne .1
lda #E.SRC.TOO.MANY.IN
sec
rts
.1 >PUSHW L.FIO.Stat
>LDYA ZPPtr1
.1 >PUSHW ZPPtr1
>PUSHW L.FIO.Stat
>SYSCALL Stat
bcs .99
lda FIO.Stat+S.STAT.P.TYPE
cmp #$04 TXT ?
cmp #S.FI.T.TXT
bne .2
>PUSHWZ
>PUSHBI 4
>PUSHBI O.RDONLY+O.TEXT
ldx #O.RDONLY+O.TEXT
bra .3
.2 cmp #$FA S-C/BAS?
bne .98
ldx #O.RDONLY
.3 >PUSHW ZPPtr1
txa
>PUSHA
>PUSHB FIO.Stat+S.STAT.P.TYPE
>PUSHWZ
>PUSHBI $FA
>PUSHBI O.RDONLY
.3 >LDYA ZPPtr1
>SYSCALL FOpen
bcs .99
pha
ldy #SRC.COUNT
lda (pData),y
>LDA.G SRC.COUNT
clc
adc #SRC.hFILES
tay
pla
sta (pData),y
ldy #SRC.COUNT
lda (pData),y
>LDA.G SRC.COUNT
clc
adc #SRC.hFILETYPES
tay
@ -140,22 +141,21 @@ FIO.OpenFile >STYA ZPPtr1
lda FIO.Stat+S.STAT.P.TYPE
sta (pData),y
ldy #SRC.COUNT
lda (pData),y
inc
sta (pData),y
>INC.G SRC.COUNT
lda #0
>STA.G SRC.LINENUM
iny
sta (pData),y
clc
rts
.98 lda #E.SRC.INV.TYPE
sec
.99 rts
*---------------------------------------
FIO.ReadLine ldy #SRC.COUNT
lda (pData),y
FIO.ReadLine >LDA.G SRC.COUNT
clc
adc #SRC.hFILETYPES-1
tay
@ -258,8 +258,7 @@ FIO.ReadLine ldy #SRC.COUNT
rts
*--------------------------------------
FIO.ReadFromFile
ldy #SRC.COUNT
lda (pData),y
>LDA.G SRC.COUNT
clc
adc #SRC.hFILES-1
tay
@ -267,24 +266,24 @@ FIO.ReadFromFile
>SYSCALL FRead
bcs .9
tax $100 byte transfered ?
tax $100 byte transfered ?
beq .9
lda #E.LINE.TOO.LONG
sec
.9 rts
*---------------------------------------
FIO.FileClose ldy #SRC.COUNT
lda (pData),y
FIO.FileClose >LDA.G SRC.COUNT
beq .8
clc
dec
sta (pData),y
sec
adc #SRC.hFILES-1
tay
lda (pData),y
>SYSCALL fclose
ldy #SRC.COUNT
lda (pData),y
dec
sta (pData),y
.8 clc
rts
*---------------------------------------

View File

@ -5,16 +5,26 @@ 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 ZPMacroArgBuf
txa
>STA.G MAC.hArgBuf
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPMacroStk
txa
>STA.G MAC.hStk
@ -28,20 +38,131 @@ MAC.Quit >LDA.G MAC.hStk
beq .1
>SYSCALL FreeMem
.1 >LDA.G MAC.hBuf
beq .2
>SYSCALL FreeMem
.2 >LDA.G MAC.hArgBuf
beq .3
>SYSCALL FreeMem
.3 >LDA.G MAC.hList
beq .8
>PUSHA
>SYSCALL SListFree
.8 clc
rts
*---------------------------------------
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
*---------------------------------------
MAC.AddChar tax
>LDA.G ASM.PASS If Pass#2, ignore
>LDA.G ASM.PASS If Pass#2, ignore
bne .8
>LDA.G MAC.BufPtr
tay
txa
@ -52,93 +173,28 @@ MAC.AddChar tax
cmp #C.CR
bne .8
.1 >LDA.G MAC.BufPtr
.1 >PUSHB.G MAC.hList
>PUSHW.G MAC.ID
>PUSHW ZPMacroBuf
>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
>PUSHB.G MAC.hList
>PUSHW ZPLinePtr
>LDA.G MAC.hList
>SYSCALL SListLookup
bcs .90
>STYA ZPPtr1 MAC.ID
txa
* clc
@ -146,42 +202,271 @@ MAC.Exec jsr SRC.GetNextChar skip '>'
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SRC.GetChar
bcs .8
cmp #' '
cmp #C.SPACE
bne .92
jsr SRC.GetNextChar
beq .8 eol..
cmp #' ' some arg...
cmp #C.SPACE 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
.8 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
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
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
rts
*---------------------------------------
MAC.Push >LDA.G MAC.StkPtr
cmp #MA.MAXDEPTH*8
beq .9
stz ZPPtr2
stz ZPPtr2+1 offset = 0
>INC.G MAC.CtxID
>INC.G MAC.Depth
>LDYA ZPLinePtr
>SYSCALL strdup Args
bcs .99
>LDA.G MAC.StkPtr
tay
txa push args
sta (ZPMacroStk),y
iny
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
.9 lda #E.MACRO.TOO.MANY
sec
.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
rts
*---------------------------------------
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
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
sec
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.MAC

View File

@ -25,8 +25,8 @@ OUT.Reset ldx #4
rts
*---------------------------------------
OUT.PrintLineOn
* clc
* rts
clc
rts
>LDA.G ASM.LI.ON
bpl .9
>LDA.G ASM.MA.ON MACRO Mode ?
@ -51,56 +51,68 @@ OUT.PrintLineOn
rts
*---------------------------------------
OUT.PrintLineErr
>STA.G DIR.Byte Save Error code
>STA.G DIR.Byte Save Error code
jsr OUT.PrintLine.1
bcs .9
.1 >PUSHB.G DIR.Byte
.1 >PUSHW L.MSG.ERROR
>PUSHB.G DIR.Byte
>PUSHBI 1
>LDYA L.MSG.ERROR
>SYSCALL printf
ldx ZPLinePtr
cpx ZPLineBuf
beq .4
.3 phx
lda #'-'
>SYSCALL PutChar
plx
bcs .9
dex
cpx ZPLineBuf
bne .3
.4 lda #'^'
phy
>SYSCALL PutChar
ply
bcs .9
.5 jmp OUT.PrintCR
jmp OUT.PrintCR
.9 rts
*---------------------------------------
OUT.PrintLine jsr OUT.PrintLineOn
bcs OUT.Print.RTS
OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
bcs OUT.Print.RTS
>LDA.G SRC.COUNT
.1 dec
bmi .2
beq .2
pha
>LDA.G '>'
lda #'>'
>SYSCALL putchar
pla
bra .1
.2 >PUSHW.G SRC.LINENUM
.2 >PUSHW L.MSG.LINENUM
>PUSHW.G SRC.LINENUM
>PUSHBI 2
>LDYA L.MSG.LINENUM
>SYSCALL printf
>LDA.G MAC.Depth
.3 dec
bmi .4
pha
>LDA.G '>'
lda #'>'
>SYSCALL putchar
pla
bra .3
@ -117,53 +129,64 @@ OUT.Print.RTS rts
*---------------------------------------
OUT.PrintLineOutBuf
>LDA.G OUT.bEquate
bne OUT.PrintLineAcc
>LDA.G OUT.Buf
beq .2
tax
clc
adc #OUT.Buf
tay
.1 >PUSHB (pData),y
dey
dex
bne .1
.2 ldy #OUT.PC+1
>PUSHB (pData),y
dey
>PUSHB (pData),y
bne OUT.PrintLineEQU
>LDA.G OUT.Buf
pha
inc
inc
>PUSHA Byte Count+2 for PC
pla
asl
tax
ldy L.MSG.OUT0,x
lda L.MSG.OUT0+1,x
>SYSCALL printf
rts
*---------------------------------------
OUT.PrintLineAcc
lda SRC.ACC.SIZE
>PUSHB L.MSG.OUT0+1,x
>PUSHB L.MSG.OUT0,x
ldy #OUT.PC+1
>PUSHB (pData),y
dey
>PUSHB (pData),y
pla
beq .2
tax
ldy #0
.1 >PUSHB SRC.ACC,y
iny
ldy #OUT.Buf
pha
.1 iny
>PUSHB (pData),y
dex
bne .1
pla
.2 inc
inc
>PUSHA Byte Count+2 for PC
>SYSCALL printf
rts
*---------------------------------------
OUT.PrintLineEQU
lda SRC.ACC.SIZE
asl
tax
>PUSHB L.MSG.EQU0+1,x
>PUSHB L.MSG.EQU0,x
lda SRC.ACC.SIZE
beq .2
tay
.1 dey
>PUSHB SRC.ACC,y
tya
bne .1
lda SRC.ACC.SIZE
.2 >PUSHA Byte Count
asl
tax
cpx #9
bcs *
ldy L.MSG.EQU0,x
lda L.MSG.EQU0+1,x
>SYSCALL printf
rts
*---------------------------------------
@ -203,12 +226,13 @@ OUT.EmitByte phy
clc
rts
*---------------------------------------
OUT.PrintCR >PUSHBI 0
>LDYA L.MSG.CRLF
OUT.PrintCR >PUSHW L.MSG.CRLF
>PUSHBI 0
>SYSCALL printf
>DEBUG
OUT.PrintCR1 >DEC.G OUT.LineCnt
bne .8
lda #PAGE.LEN
sta (pData),y
* lda #$80

View File

@ -10,99 +10,34 @@ SRC.ParseLine jsr OUT.Reset
beq .8
>LDA.G ASM.DO.StackPtr
beq .1
clc
adc #ASM.DO.Stack-1
tay
lda (pData),y
beq .8
.1 >LDA.G ASM.MA.ON
bmi SRC.ParseLine.MACRO
bpl SRC.ParseLine.LABEL
jmp MAC.Learn
jmp SRC.ParseLine.LABEL
.8 clc
.9 rts
*---------------------------------------
SRC.ParseLine.Macro
>STZ.G MAC.BufPtr
sta (ZPMacroBuf)
lda (ZPLinePtr)
cmp #' ' No label, scan to DIR/OP if any
bne .1
jsr SRC.GetNextCharNB
bcs .8
lda #' ' 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 #' '
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 #' '
bne .4
jsr SRC.GetNextChar
bcs .8
cmp #' '
beq .80 Comments...
pha
lda #' '
jsr MAC.AddChar
pla
bcs .99
.5 jsr MAC.AddChar Store ARG....
bcs .99
jsr SRC.GetNextChar
bcs .80
cmp #' '
bne .5
bra .80 End of Line
.99 SRC.ParseLine.RTS
SRC.ParseLine.RTS
rts
*---------------------------------------
SRC.ParseLine.LABEL
jsr SRC.GetChar
cmp #' ' no label...go scan dir/opcode
cmp #C.SPACE no label...go scan dir/opcode
beq SRC.ParseLine.DirOp
tax save char...
cmp #'.' local symbol?
beq .1
cmp #':' private symbol?
bne .8
>LDA.G MAC.StkPtr
beq SRC.ParseLine.InvLbl
@ -121,8 +56,11 @@ SRC.ParseLine.LABEL
cpx #':'
beq .2
jsr SYM.NewLocalA
bra .3
bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp
.2 jsr SYM.NewPrivateA
.3 bcs SRC.ParseLine.RTS
@ -136,10 +74,13 @@ SRC.ParseLine.DirOp
bcs SRC.ParseLine.Ok
cmp #'.'
bne .5
jsr SRC.GetNextChar
bcs SRC.ParseLine.InvDir
jsr SRC.ParseLine.Dir
bcs SRC.ParseLine.Err
bra SRC.ParseLine.Ok
.5 cmp #'>'
@ -953,9 +894,11 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP
sta SRC.ACC+3 CS if overflow
.9 rts
*---------------------------------------
DEBUG.PSTR >PUSHYA
DEBUG.PSTR pha
>PUSHW L.MSG.PSTR
pla
>PUSHYA
>PUSHBI 2
>LDYA L.MSG.PSTR
>SYSCALL printf
rts
*---------------------------------------

View File

@ -31,21 +31,27 @@ SYM.Reset >STZ.G SYM.bInGlobal
*---------------------------------------
SYM.Quit >LDA.G SYM.hGlobalBuf
beq .3
>SYSCALL FreeMem
.3 >LDA.G SYM.hList
beq SYM.Quit.8
>PUSHA
>SYSCALL SListFree
SYM.Quit.8 clc
rts
*---------------------------------------
SYM.Dump.End >PUSHW ZPPtr2
SYM.Dump.End >PUSHW L.MSG.SUMMARY
>PUSHW ZPPtr2
>PUSHBI 2
>LDYA L.MSG.SUMMARY
jmp OUT.Print
SYM.Dump.RTS rts
rts
*---------------------------------------
SYM.Dump >LDA.G ASM.LI.ON
bpl SYM.Quit.8
>LDYA L.MSG.SYMBOLS
>SYSCALL puts
@ -55,41 +61,51 @@ SYM.Dump >LDA.G ASM.LI.ON
.1 >LDYA ZPPtr2
>STYA ZPPtr1
>PUSHW ZPTmpBuf
>PUSHB.G SYM.hList
>PUSHW ZPPtr1
>LDA.G SYM.hList
>PUSHW ZPTmpBuf
>SYSCALL SListGetByID
bcs SYM.Dump.End
>STYA ZPPtr2 Save Next ID
>PUSHWZ Start
>PUSHWI $ffff End
>PUSHW ZPSymbolBuf
>PUSHW ZPPtr1 KeyID
>LDA.G SYM.hList
>STYA ZPPtr2 Save Next ID
>PUSHB.G SYM.hList
>PUSHW ZPPtr1 KeyID
>PUSHW ZPSymbolBuf
>PUSHWI $ffff All
>PUSHWZ from Start
>SYSCALL SListGetData
bcs SYM.Dump.RTS
bcs .9
ldy #SYMG.SIZE Get Symbol Size
lda (ZPSymbolBuf),y
tax
beq .3
phx
asl
tax
>PUSHB L.MSG.EQU0+1,x
>PUSHB L.MSG.EQU0,x
plx
phx
.2 iny
lda (ZPSymbolBuf),y
>PUSHA
dex
bne .2
pla Byte Count
asl
tax
.3 >PUSHA
ldy L.MSG.EQU0,x
lda L.MSG.EQU0+1,x
>SYSCALL printf
>PUSHW ZPTmpBuf Label
>PUSHBI 0
>LDYA ZPTmpBuf Label
>SYSCALL printf
lda (ZPSymbolBuf)
@ -100,44 +116,59 @@ SYM.Dump >LDA.G ASM.LI.ON
jsr SYM.Dump.LP
.7 jsr OUT.PrintCR
jmp .1
.9 rts
*---------------------------------------
SYM.Dump.LP ldy #SYMG
.4 lda (ZPSymbolBuf),y
.1 lda (ZPSymbolBuf),y
beq .8
phy
tax ID
iny
ldx #4
.5 iny
lda (ZPSymbolBuf),y MacID
beq .2
>PUSHW L.MSG.LSYMBOL
txa
>PUSHA
>PUSHB (ZPSymbolBuf),y
bra .3
.2 >PUSHW L.MSG.LSYMBOL
txa
>PUSHA
phx
.3 ldx #4
.4 iny
lda (ZPSymbolBuf),y
>PUSHA
dex
bne .5
ply
iny
lda (ZPSymbolBuf),y
tax
beq .55
>PUSHA
.55 dey
lda (ZPSymbolBuf),y
>PUSHA
phy
txa
beq .6
>PUSHBI 6
>LDYA L.MSG.PSYMBOL
bra .66
.6 >PUSHBI 5
>LDYA L.MSG.LSYMBOL
.66 >SYSCALL printf
bne .4
lda #5
plx
beq .5
inc
.5 >PUSHA
>SYSCALL printf
pla
clc
adc #SYML
tay
bra .4
bra .1
.8 rts
*---------------------------------------
SYM.NewOrGetGlobal
@ -147,18 +178,21 @@ SYM.NewOrGetGlobal
SYM.NewGlobal jsr SYM.StoreGlobal
bcs .99
>PUSHW ZPLinePtr Pass #1; try to add global...
>LDA.G SYM.hList
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #1: try to add global...
>SYSCALL SListNewKey
bcs .9 Already Defined
>STYA.G SYM.GlobalID
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SYM.PC2Acc
jsr SYM.Acc2Global
lda #SYMG
>STA.G SYM.GlobalPtr
tay
@ -172,12 +206,13 @@ SYM.NewGlobal jsr SYM.StoreGlobal
* >SYSCALL printf
clc
rts
.9 lda #E.SYMBOL.REDEF
sec
.99 rts
*---------------------------------------
SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined...
>LDA.G SYM.hList
SYM.GetGlobal >PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #2: should be already defined...
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
@ -187,13 +222,15 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined...
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >PUSHWZ Start
>PUSHWI $ffff End
>PUSHW ZPSymbolBuf
.1 >PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>LDA.G SYM.hList
>PUSHW ZPSymbolBuf
>PUSHWI $ffff all
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .99
lda #$ff
>STA.G SYM.bInGlobal
* clc
@ -204,23 +241,27 @@ SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined...
.99 rts
*---------------------------------------
SYM.LookupGlobal
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr
>LDA.G SYM.hList
>SYSCALL SListLookup
bcs .9
>STYA ZPPtr1
txa
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >LDA.G SYM.GlobalID
cmp ZPPtr1
bne .3
iny SYM.GlobalID+1
lda (pData),y
cmp ZPPtr1+1
bne .3
ldy #SYMG-1
.2 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y
@ -230,13 +271,14 @@ SYM.LookupGlobal
clc
rts
.3 >PUSHWZ Start
>PUSHWI SYMG Get only Global value
>PUSHW L.SRC.ACC.F
.3 >PUSHB.G SYM.hList
>PUSHW ZPPtr1
>LDA.G SYM.hList
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG Get only Global value
>PUSHWZ Start
>SYSCALL SListGetData
rts
.9 lda #E.UNDEF.SYMBOL
sec
rts
@ -247,43 +289,49 @@ SYM.StoreGlobal >LDA.G ASM.PASS
>LDA.G SYM.bInGlobal
bpl .8
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>PUSHW ZPSymbolBuf
>LDA.G SYM.GlobalPtr
tay
lda #0
cpy #SYMG
beq .1
lda (ZPSymbolBuf)
ora #SYMG.F.LOCALS
sta (ZPSymbolBuf)
lda #0
sta (ZPSymbolBuf),y
iny
bne .1
inc
.1 >PUSHYA
>PUSHW ZPSymbolBuf
>PUSHW.G SYM.GlobalID
>LDA.G SYM.hList
>SYSCALL SListAddData
bcs .9
lda #0
>STA.G SYM.bInGlobal
>STA.G MAC.CtxID
rts
.8 clc
.9 rts
*---------------------------------------
SYM.UpdateGlobal
>PUSHWI SYMG
>PUSHW L.SRC.ACC.F
>PUSHB.G SYM.hList
>PUSHW.G SYM.GlobalID
>LDA.G SYM.hList
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG
>SYSCALL SListSetData
rts
*---------------------------------------
SYM.PC2Acc ldy #ASM.PC+3
ldx #3
.1 lda (pData),y
sta SRC.ACC,x
dey
@ -317,6 +365,7 @@ SYM.NewLocalA clc
>LDA.G SYM.bInGlobal not in a global label
bpl .91
>LDA.G ASM.PASS Pass #2: should be already defined...
bne .8
@ -326,23 +375,30 @@ SYM.NewLocalA clc
>LDA.G SYM.GlobalPtr
cmp #252 6*42
beq .90
ldy #ASM.PC+4
.1 dey
lda (pData),y
pha
cpy #ASM.PC
bne .1
lda #0
bit ZPPtr1
bpl .11 local, Ctx = 0
>LDA.G MAC.CtxID Get Macro Context ID
.11 pha
>LDA.G SYM.GlobalPtr
tay
txa Get Back ID
sta (ZPSymbolBuf),y
ldx #5 MAC ID + PC (4)
.2 pla
iny
sta (ZPSymbolBuf),y
@ -353,16 +409,20 @@ SYM.NewLocalA clc
lda #0
sta (ZPSymbolBuf),y
tya
* >DEBUG
>STA.G SYM.GlobalPtr
lda (ZPSymbolBuf)
ora #SYMG.F.LOCALS
sta (ZPSymbolBuf)
.8 clc
rts
.91 lda #E.INV.LABEL
sec
rts
.90 lda #E.TOO.MANY.LOCAL
sec
rts
@ -374,10 +434,12 @@ SYM.NewLocalA clc
SYM.GetLocalX lda (ZPSymbolBuf)
and #SYMG.F.LOCALS
beq .9
ldy #SYMG
.1 lda (ZPSymbolBuf),y
beq .9
txa
cmp (ZPSymbolBuf),y
bne .4
@ -390,11 +452,13 @@ SYM.GetLocalX lda (ZPSymbolBuf)
bne .3
ldx #0
.2 iny
lda (ZPSymbolBuf),y
sta SRC.ACC,x
inx
cpx #4
bne .2
lda #2
@ -408,6 +472,7 @@ SYM.GetLocalX lda (ZPSymbolBuf)
adc #SYML
tay
bra .1
.9 lda #E.UNDEF.SYMBOL
sec
rts

View File

@ -1,10 +1,9 @@
NEW
AUTO 3,1
*---------------------------------------
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/ASM
.TF bin/asm
*---------------------------------------
PAGE.LEN .EQ 23
DO.MAXDEPTH .EQ 8
@ -13,27 +12,29 @@ MA.MAXDEPTH .EQ 8
*---------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.I
.INB INC/MLI.E.I
*---------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPTmpBuf .BS 2
ZPLineBuf .BS 2
ZPLinePtr .BS 2
ZPSymbolBuf .BS 2
ZPMacroBuf .BS 2
ZPMacroStk .BS 2
ZPAMPtr .BS 2
ZPRPtr .BS 2
ZPOpsPtr .BS 2
ZPOpDefPtr .BS 2
ZPMacroStk .BS 2
ZPMacroBuf .BS 2
ZPMacroArgBuf .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZS.END .ED
*---------------------------------------
* Symbols
@ -92,12 +93,12 @@ CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT S.PS.F
.DA #0 S.PS.F.EVENT
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #ZS.END-ZS.START Zero Page Size
.DA #64 ZP
.DA #64 SS
.DA #ZS.END-ZS.START ZP
.DA 0
*--------------------------------------
* Relocation Table
@ -133,7 +134,7 @@ L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
L.MSG.T.FILE .DA MSG.T.FILE
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
L.ASM.6502 .DA ASM.6502
L.ASM.T.FILENAME .DA ASM.T.FILENAME
L.ASM.CPU.FILE .DA ASM.CPU.FILE
L.FIO.Stat .DA FIO.Stat
L.SRC.ACC.F .DA SRC.ACC.F
L.T.DIRECTIVES .DA T.DIRECTIVES
@ -207,14 +208,15 @@ J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/
CS.INIT ldy #S.PS.ARGC
lda (pPs),y
beq .99
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
txa
ldy #SRC.hFILENAME
sta (pData),y
>STA.G SRC.hFILENAME
jsr FIO.Init
bcs .9
@ -223,6 +225,7 @@ CS.INIT ldy #S.PS.ARGC
jsr MAC.Init
bcs .9
jsr OUT.Init
>LDYAI 256
@ -238,10 +241,12 @@ CS.INIT ldy #S.PS.ARGC
>STYA ZPTmpBuf
txa
>STA.G SRC.hTmpBuf
clc
rts
.99 >PUSHBI 0
>LDYA L.MSG.HELP
.99 >PUSHW L.MSG.HELP
>PUSHBI 0
>SYSCALL printf
lda #E.INV.ARGS
sec
@ -259,6 +264,7 @@ CS.RUN ldy #S.PS.hStdIn
cmp #$03 Ctrl-C
beq .99 Abort....beq=CS
cmp #$13 Ctrl-S
bne .11
@ -267,44 +273,58 @@ CS.RUN ldy #S.PS.hStdIn
sta (pData),y
bpl .12
clc
rts
.13 >LDA.G bPause
bpl .11
clc
.99 rts
.11 >STZ.G bPause
.12 >LDA.G SRC.COUNT root file is already opened?
bne .10
>PUSHW L.MSG.PASS
>LDA.G ASM.PASS
inc
>PUSHA
>PUSHBI 1
>LDYA L.MSG.PASS
jsr OUT.Print
ldy #SRC.hFILENAME
lda (pData),y
>LDA.G SRC.hFILENAME
>SYSCALL GetMemPtr
jsr FIO.OpenFile
bcs .99
jsr DIR.Reset
jsr SYM.Reset
jsr MAC.Reset
.10 >LDYA ZPLineBuf
>STYA ZPLinePtr
>LDA.G MAC.StkPtr
beq .20
jsr MAC.ReadLine
.15 jsr MAC.ReadLine
bcc .2
cmp #E.EMPTYKEY
bne .9
>DEC.G MAC.Depth
jsr MAC.Pop
bne .15
.20 jsr FIO.ReadLine
bcc .2
cmp #MLI.E.EOF End Of File?
bne .9
jsr FIO.FileClose
>LDA.G SRC.COUNT end of root file ?
bne .8 no continue back to previous file
@ -317,6 +337,7 @@ CS.RUN ldy #S.PS.hStdIn
sta (pData),y
clc
rts
.1 jsr SYM.Dump
>LDYA L.MSG.END
@ -324,8 +345,10 @@ CS.RUN ldy #S.PS.hStdIn
lda #0 End of assembly, exit with no error
sec
rts
.2 jsr SRC.ParseLine
bcs .9
jsr OUT.PrintLine
.8 clc
rts
@ -346,17 +369,21 @@ CS.QUIT jsr FIO.FileClose
bne CS.QUIT
jsr MAC.Quit
jsr SYM.Quit
>LDA.G ASM.T.hMem
beq .1
>SYSCALL FreeMem
.1 >LDA.G SRC.hFILENAME
beq .2
>SYSCALL FreeMem
.2 >LDA.G SRC.hLineBuf
beq .3
>SYSCALL FreeMem
.3 >LDA.G SRC.hTmpBuf
ldy #ASM.T.hMem
jsr .7
ldy #SRC.hFILENAME
jsr .7
ldy #SRC.hLineBuf
jsr .7
ldy #SRC.hTmpBuf
.7 lda (pData),y
beq .8
>SYSCALL FreeMem
@ -424,9 +451,15 @@ T.LI >PSTR "ON"
>PSTR "XOFF"
.HS 00
*---------------------------------------
ASM..T. .AZ ".T."
SRC.MOD.RESERVED >PSTR "#/^<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/"
SRC.AM.RESERVED >PSTR "[](),"
*---------------------------------------
ASM.6502 .AZ "6502"
MSG.HELP .AZ "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\nUsage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\r\n"
MSG.HELP .AS "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\n"
.AS "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\r\n"
.AS " -L : Override .LIST (C,M,X)OFF\r\n"
.AZ " -T <target file> : Override .TF directive\r\n"
MSG.PASS .AZ "**** Pass:#%d ****"
MSG.SRC.FILE .AZ "**** Reading SRC File:%s"
MSG.OBJ.FILE .AZ "**** Writing OBJ File:%s, Type=%02x"
@ -451,11 +484,8 @@ MSG.PSTR .AS "{%S}"
MSG.CRLF .AZ "\r\n"
MSG.WORD .AZ ">$%H"
MSG.ACC .AZ "%b,%d,%h%h%h%h\r\n"
SRC.MOD.RESERVED >PSTR "#/^<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/"
SRC.AM.RESERVED >PSTR "[](),"
*---------------------------------------
ASM.T.FILENAME .BS 65
ASM.CPU.FILE .BS 65
FIO.Stat .BS S.STAT
@ -532,6 +562,7 @@ MAC.hBuf .BS 1
MAC.BufPtr .BS 1
MAC.hStk .BS 1
MAC.StkPtr .BS 1
MAC.hArgBuf .BS 1
MAC.CtxID .BS 1
MAC.ID .BS 2
MAC.Depth .BS 1

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.ADDR.MODES .EQ *
.DA #2,$$"R0"
@ -58,6 +57,6 @@ T.REGISTERS .EQ *
.HS 00
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.SW16.A
LOAD USR/SRC/BIN/ASM.T.SW16.S
SAVE USR/SRC/BIN/ASM.SW16.A
LOAD USR/SRC/BIN/ASM.SW16.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.OPCODES .EQ *
ADD .DA ADD.E+1-*
@ -337,6 +336,6 @@ SUB.E .HS 00
.HS 0000
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.SW16.O
LOAD USR/SRC/BIN/ASM.T.SW16.S
SAVE USR/SRC/BIN/ASM.SW16.O
LOAD USR/SRC/BIN/ASM.SW16.S
ASM

16
BIN/ASM.SW16.S.txt Normal file
View File

@ -0,0 +1,16 @@
NEW
AUTO 3,1
.LIST OFF
.OR $0
.TF bin/asm.SW16
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.SW16.O
.INB USR/SRC/BIN/ASM.SW16.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.SW16.S
ASM

View File

@ -1,17 +0,0 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OR $0
.TF BIN/ASM.T.65816
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.T.65816.O
.INB USR/SRC/BIN/ASM.T.65816.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65816.S
ASM

View File

@ -1,17 +0,0 @@
NEW
PREFIX
AUTO 4,1
.LIST OFF
.OR $0
.TF BIN/ASM.T.65R02
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.T.65R02.O
.INB USR/SRC/BIN/ASM.T.65R02.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.65R02.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.ADDR.MODES .EQ *
.DA #6,$$"A,(HL)"
@ -210,6 +209,6 @@ T.REGISTERS .EQ *
.HS 00
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.Z80.A
LOAD USR/SRC/BIN/ASM.T.Z80.S
SAVE USR/SRC/BIN/ASM.Z80.A
LOAD USR/SRC/BIN/ASM.Z80.S
ASM

View File

@ -1,6 +1,5 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*---------------------------------------
T.OPCODES .EQ *
ADC .DA ADC.E+1-*
@ -1078,6 +1077,6 @@ XOR.E .HS 00
.HS 0000
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.T.Z80.O
LOAD USR/SRC/BIN/ASM.T.Z80.S
SAVE USR/SRC/BIN/ASM.Z80.O
LOAD USR/SRC/BIN/ASM.Z80.S
ASM

16
BIN/ASM.Z80.S.txt Normal file
View File

@ -0,0 +1,16 @@
NEW
AUTO 3,1
.LIST OFF
.OR $0
.TF bin/asm.Z80
*---------------------------------------
.DA T.ADDR.MODES
.DA T.REGISTERS
.DA T.OPCODES
*---------------------------------------
.INB USR/SRC/BIN/ASM.Z80.O
.INB USR/SRC/BIN/ASM.Z80.A
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.Z80.S
ASM

View File

@ -44,8 +44,8 @@ CSH.Init >SYSCALL SListNew
lda #0
>STA.G CSH.ConstPtr
>STA.G CSH.StackPtr
sta (ZPCSHConst)
sta (ZPCSHStack)
* sta (ZPCSHConst)
* sta (ZPCSHStack)
* >DEC.G bTrace
* >DEC.G bDebug
@ -217,7 +217,8 @@ CSH.DIR.DEFINE jsr CSH.CheckSpace
jsr CSH.IsLetter
bcs .90
jsr CSH.AddDefine
>LDA.G CSH.hDefines
jsr CSH.NewKey
bcs .99
>STYA ZPVarID
@ -360,13 +361,18 @@ CSH.SIZEOF
sec
rts
*--------------------------------------
CSH.STRUCT jsr CSH.GetCharNB
CSH.STRUCT >ENTER 4
jsr CSH.GetCharNB
bcs .99
>LDA.G CSH.hTags
jsr CSH.NewKey
bcs .99
sta (pStack)
jsr CSH.GetNextCharNB
bcs .99
cmp #'{'
@ -380,7 +386,8 @@ CSH.STRUCT jsr CSH.GetCharNB
jsr CSH.GetNextCharNB skip }
clc
.99 rts
.99 >LEAVE
rts
*--------------------------------------
* Built in Types
*--------------------------------------
@ -725,9 +732,7 @@ CSH.ExpEval ldx ZPPtr1
lda ZPPtr2+1 get OP(n)
pha push OP(n) on stack
jsr CSH.GetCharNB
bcs .90
jmp .11 go check for next token
jmp .10 go check for next token
*--------------------------------------
.80 plx any OP on stack ?
bmi .88
@ -930,12 +935,6 @@ CSH.GetNumOnStack
* Input : ZPFileBufPtr
* Output : Y,A = VarID
*--------------------------------------
CSH.AddDefine >LDA.G CSH.hDefines
jsr CSH.NewKey
bcs .9
.9 rts
CSH.AddVar >LDA.G CSH.hSymbols
jsr CSH.NewKey
bcs .9

View File

@ -1,10 +1,9 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/MKDIR
.TF bin/mkdir
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I

View File

@ -28,13 +28,14 @@ CORE.PSCount .EQ $D1
pPs .EQ $D2
pEvent .EQ $D4
* .EQ $D6
*--------------------------------------
* PS Context : 40 bytes MAX
*--------------------------------------
pCode .EQ $D8
pData .EQ $DA
pStack .EQ $DC
pLocal .EQ $DE 8 Bytes
pBase .EQ $DE 8 Bytes
ZPBIN .EQ $E0 32 bytes
ZPBIN.SIZE .EQ 32

View File

@ -447,6 +447,23 @@ FPU.FOUT .EQ 58 PrintF
cpy #5
bne :1
.EM
*--------------------------------------
.MA ENTER
>PUSHB pBase
lda pStack
sta pBase
sec
sbc #]1
sta pStack
.EM
*--------------------------------------
.MA LEAVE
pha
lda pStack
sta pBase
>PULLB pBase
pla
.EM
*--------------------------------------
.MA POP
.DO ]1=1

View File

@ -107,7 +107,7 @@ Kernel.Init3 sta SETALTZP
sta CORE.PSCount
>LDYAI K.STACKTOP
>STYA pStack
sta pLocal+1
sta pBase+1
>PUSHWI FD.NULL
>PUSHWI FD.NULL.NAME

View File

@ -1,13 +1,12 @@
NEW
PREFIX
AUTO 4,1
AUTO 3,1
*--------------------------------------
Z80.pPs .EQ pPs+0F000H
Z80.pCode .EQ pCode+0F000H
Z80.pData .EQ pData+0F000H
Z80.pStack .EQ pStack+0F000H
Z80.pLocal .EQ pLocal+0F000H
Z80.pBase .EQ pBase+0F000H
*--------------------------------------
Z80.6502P.N .EQ %10000000
Z80.6502P.V .EQ %01000000