Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-08-17 15:03:39 +02:00
parent 93ceb53e04
commit 209c62c8c0
13 changed files with 545 additions and 415 deletions

Binary file not shown.

Binary file not shown.

View File

@ -26,28 +26,39 @@ DIR.AS clc
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 #E.SYNTAX.ERROR
sec
rts
@ -55,20 +66,21 @@ DIR.AS clc
.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.AS.RTS rts
*---------------------------------------
DIR.AZ jsr DIR.AS
bcs .9
bcs DIR.AS.RTS
lda #0
jmp OUT.EmitByte
.9 rts
*---------------------------------------
DIR.BS jsr SRC.GetNextCharNB
bcs .98
@ -173,11 +185,30 @@ DIR.DA jsr SRC.GetNextCharNB
rts
*---------------------------------------
DIR.DO >LDA.G ASM.DO.StackPtr
tay
inc
cmp #DO.MAXDEPTH
bcs .98
tya
beq .1
* clc
adc #ASM.DO.Stack-1
tay
lda (pData),y Previous DO is false?
bne .1
>INC.G ASM.DO.StackPtr yes,stack FALSE
jsr SRC.GetNextCharNB
* clc
adc #ASM.DO.Stack-1
tay
lda #0
bra .8
.1 jsr SRC.GetNextCharNB
bcs .99
jsr EXP.ResetAcc
@ -186,17 +217,17 @@ DIR.DO >LDA.G ASM.DO.StackPtr
bcs .99
>INC.G ASM.DO.StackPtr
* clc ok from bcs .99
* clc
adc #ASM.DO.Stack-1
tay
lda SRC.ACC
ora SRC.ACC+1
ora SRC.ACC+2
ora SRC.ACC+3
beq .1
beq .8
lda #$ff
.1 sta (pData),y
.8 sta (pData),y
clc
rts
@ -207,7 +238,18 @@ DIR.DO >LDA.G ASM.DO.StackPtr
*---------------------------------------
DIR.EL >LDA.G ASM.DO.StackPtr
beq .9
tax
dec
beq .1 no previous DO context
clc
adc #ASM.DO.Stack-1
tay
lda (pData),y
beq .8 previous is FALSE
.1 txa
clc
adc #ASM.DO.Stack-1
tay
@ -215,7 +257,7 @@ DIR.EL >LDA.G ASM.DO.StackPtr
eor #$ff
sta (pData),y
clc
.8 clc
rts
.9 lda #E.ELSE.WITHOUT.DO
@ -264,23 +306,26 @@ DIR.EP >LDA.G ASM.PH.ON
.9
DIR.EP.ILLEGAL lda #E.ILLEGAL.DIR
sec
rts
DIR.EP.RTS rts
*---------------------------------------
DIR.SE sec
.HS 90 BCC
*---------------------------------------
DIR.EQ clc
lda #$ff
>STA.G OUT.bEquate
>LDA.G SYM.BufPtr
beq .9
beq DIR.EP.ILLEGAL not in global symbol context
eor #SYMG
beq .1
bcs .9 .SE not allowed in local/private
bcc .10 in local, skip F update
bcs DIR.EP.ILLEGAL .SE not allowed in local/private
bcc .10 .EQ in local, skip F update
.1 ror A = 0 : SYMG.F.RW
.1 ror A = 0 : CS = SYMG.F.RW
ora #SYMG.F.EQU
sta SRC.ACC.F
@ -288,13 +333,10 @@ DIR.EQ clc
.10 jsr SRC.GetNextCharNB
bcs .9
lda #$ff
>STA.G OUT.bEquate
jsr EXP.ResetAcc
jsr EXP.ResetAccV keep F
jsr EXP.Eval
bcs .9
bcs DIR.EP.RTS
>LDA.G SYM.BufPtr
@ -313,7 +355,13 @@ DIR.EQ clc
clc
rts
.12 jsr SYM.Acc2Global global, update and close
.12 ldy #SYMG-1
.13 lda SRC.ACC.F,y
sta (ZPSymbolBuf),y
dey
bpl .13
>LDA.G ASM.PASS
bne .2
@ -321,20 +369,18 @@ DIR.EQ clc
.2 jmp SYM.UpdateGlobal
.9 rts
.9 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
DIR.FI >LDA.G ASM.DO.StackPtr
beq .99
beq DIR.EP.ILLEGAL
dec
sta (pData),y
clc
rts
.99 lda #E.ILLEGAL.DIR
sec
rts
*---------------------------------------
DIR.HS jsr SRC.GetNextCharNB
bcs .99
@ -681,6 +727,6 @@ DIR.RestorePC ldx #3
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.DIR
LOAD USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s.dir
LOAD usr/src/bin/asm.s
ASM

View File

@ -2,7 +2,7 @@ NEW
AUTO 3,1
*---------------------------------------
* EXP.Modifiers:
* # : 8b,Byte 1
* # : 8b,Byte 1
* / : 8b,Byte 2
* ^ : 8b,Byte 3
* < : 24b,Byte 1,2,3
@ -18,7 +18,7 @@ EXP.Eval.Missing
lda #E.MISSING.EXP
sec
rts
EXP.Eval >STZ.G EXP.Modifier
>STA.G EXP.Prefix
>STA.G EXP.Operator
@ -49,13 +49,13 @@ EXP.Eval.Next stz SRC.ACC
bne .12
>LDA.G MAC.StkPtr
bne .9 illegal OUTSIDE macro
bne .9 illegal INSIDE macro
bra .13
.12 cmp #':'
bne .14
>LDA.G MAC.StkPtr
beq .9 illegal OUTSIDE macro
@ -63,15 +63,15 @@ EXP.Eval.Next stz SRC.ACC
bcs .99
jmp EXP.EvalOperator
.14 cmp #'*'
bne .10
jsr SYM.PC2Acc
jsr SRC.GetNextChar
jmp EXP.EvalOperator
.9 lda #E.INV.LABEL
sec
.99 rts
@ -82,14 +82,14 @@ EXP.Eval.Next stz SRC.ACC
jsr SRC.GetDecimal
bcs EXP.EvalExitRTS
jmp EXP.EvalOperator
.1 cmp #'$' Hex?
bne .2
jsr SRC.GetHex
bcs EXP.EvalExitRTS
jmp EXP.EvalOperator
.2 cmp #'%' binary?
bne .3
@ -99,28 +99,28 @@ EXP.Eval.Next stz SRC.ACC
.3 cmp #'&' octal?
bne .4
jsr SRC.GetOctal
bcs EXP.EvalExitRTS
bra EXP.EvalOperator
.4 cmp #'''
bne .43
jsr SRC.GetNextChar
bcs EXP.EvalExitSYN
jsr EXP.SetAccA
jsr SRC.GetNextChar
bcs EXP.EvalOperator
cmp #'''
beq .44
cmp #','
bne EXP.EvalExitSYN
bra EXP.EvalOperator
.44 jsr SRC.GetNextChar
bra EXP.EvalOperator
@ -129,19 +129,19 @@ EXP.Eval.Next stz SRC.ACC
jsr SRC.GetNextChar
bcs EXP.EvalExitSYN
ora #$80
jsr EXP.SetAccA
jsr SRC.GetNextChar
bcs EXP.EvalOperator
cmp #'"'
beq .45
cmp #','
bne EXP.EvalExitSYN
bra EXP.EvalOperator
.45 jsr SRC.GetNextChar
bra EXP.EvalOperator
@ -149,20 +149,25 @@ EXP.Eval.Next stz SRC.ACC
bcs EXP.EvalExitSYN
jsr SYM.LookupGlobal
.DO ASMDBG=1
bcs *
lda #"?"
jsr EXP.DBG
.FIN
bcc EXP.EvalOperator
EXP.EvalExitRTS rts
EXP.EvalExitOK >LDA.G EXP.Modifier
beq .1
asl
tax
lda #SYMG.F.FWREF
trb SRC.ACC.F
jmp (J.EXP.MOD-2,x)
.1 clc
rts
@ -176,18 +181,26 @@ EXP.EvalExitUND lda #E.UNDEF.SYMBOL
*---------------------------------------
EXP.EvalOperator
>LDA.G EXP.Operator
beq .7
beq .7 no previous OP....
asl
tax
jsr EXP.Compute
lda SRC.ACC.F
ora SRC.ARG.F
and #SYMG.F.FWREF
tsb SRC.ACC.F
jsr EXP.Compute ARG op ACC -> ACC
bcc .7
tax
>LDA.G ASM.PASS
beq .7 Ignore error ...
txa
bcs EXP.EvalExitRTS
rts
.7 jsr SRC.GetChar
bcs EXP.EvalExitOK
@ -199,17 +212,25 @@ EXP.EvalOperator
jsr SRC.IsEXPReserved
bcs EXP.EvalExitSYN
txa
>STA.G EXP.Operator
ldx #4
.8 lda SRC.ACC.SIZE,x
sta SRC.ARG.SIZE,x
ldx #3
.8 lda SRC.ACC,x
sta SRC.ARG,x
dex
bpl .8
lda SRC.ACC.F
sta SRC.ARG.F
.DO ASMDBG=1
lda #'@'
jsr EXP.DBG
.FIN
jmp EXP.Eval.Next0
*---------------------------------------
EXP.GetLocal jsr SRC.GetNextChar
@ -219,30 +240,34 @@ EXP.GetLocal jsr SRC.GetNextChar
bcs EXP.EvalExitSYN
tax
jsr SYM.LookupLocalX
bcc .8
>LDA.G ASM.PASS pass#2?
bne EXP.EvalExitUND
lda #SYMG.F.FWREF
tsb SRC.ACC.F
lda #2
sta SYMG.SIZE
sta SRC.ACC.SIZE
lda #$ff
sta SRC.ACC
sta SRC.ACC+1
clc
rts
.9 lda #E.SYNTAX.ERROR
sec
.8 rts
*---------------------------------------
EXP.MOD.8.3 lda SRC.ACC+2
bra EXP.MOD.8
EXP.MOD.8.2 lda SRC.ACC+1
EXP.MOD.8 sta SRC.ACC
@ -255,16 +280,14 @@ EXP.MOD.8.1 lda #1
EXP.MOD.24 lda #3
sta SRC.ACC.SIZE
clc
rts
rts
EXP.MOD.32 lda #4
sta SRC.ACC.SIZE
clc
rts
rts
*---------------------------------------
EXP.Compute asl
tax
jmp (J.EXP.OP-2,x)
EXP.Compute jmp (J.EXP.OP-2,x)
*---------------------------------------
EXP.OP.EOR ldx #3
@ -327,16 +350,16 @@ EXP.OP.GRT jsr EXP.OP.SUB
*---------------------------------------
EXP.OP.ADD ldx #0 ARG-ACC->ACC
ldy #4
clc
.1 lda SRC.ARG,x
adc SRC.ACC,x
sta SRC.ACC,x
inx
dey
bne .1
bcc .8
lda #E.VAL.TOO.BIG
@ -346,20 +369,20 @@ EXP.OP.SUB ldx #0 ARG-ACC->ACC
ldy #4
sec
.1 lda SRC.ARG,x
sbc SRC.ACC,x
sta SRC.ACC,x
inx
dey
bne .1
bcs .8
lda #E.VAL.TOO.BIG
sec
rts
.8 clc
rts
*---------------------------------------
@ -378,10 +401,10 @@ EXP.OP.DIV >PUSHL SRC.ARG
rts
*---------------------------------------
EXP.ResetAcc stz SRC.ACC.F
lda #2
EXP.ResetAccV lda #2
sta SRC.ACC.SIZE
stz SRC.ACC
stz SRC.ACC+1
stz SRC.ACC+2
@ -396,8 +419,22 @@ EXP.SetAccA sta SRC.ACC
sta SRC.ACC.SIZE
clc
rts
*---------------------------------------
.DO ASMDBG=1
EXP.DBG >SYSCALL putchar
>PUSHW L.MSG.DBG
>PUSHB.G MAC.CtxID
>PUSHL SRC.ARG
>PUSHL SRC.ACC
>PUSHB SRC.ACC.F
>PUSHB SRC.ACC.SIZE
>PUSHBI 11
>SYSCALL PrintF
* >DEBUG
rts
.FIN
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.EXP
LOAD USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s.exp
LOAD usr/src/bin/asm.s
ASM

View File

@ -56,7 +56,7 @@ FIO.LOAD.CPU >STYA ZPPtr2
>STZ.G ASM.hCPUFILE
.4 >PUSHW L.MSG.T.FILE
.4 >PUSHW L.MSG.CPU.FILE
>PUSHW L.ASM.CPU.FILE
>PUSHBI 2
jsr OUT.Print
@ -309,6 +309,6 @@ FIO.FileClose >LDA.G SRC.Depth
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.FIO
LOAD USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s.fio
LOAD usr/src/bin/asm.s
ASM

View File

@ -224,7 +224,7 @@ MAC.Exec jsr SRC.GetNextChar skip '>'
.8 jmp MAC.Push
.90 lda #E.MACRO.INV
sec
* sec
rts
.92 lda #E.SYNTAX.ERROR
@ -578,6 +578,6 @@ MAC.GetArgX phy
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.MAC
LOAD USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s.mac
LOAD usr/src/bin/asm.s
ASM

View File

@ -12,10 +12,10 @@ OUT.EmitByte phy
>LDA.G ASM.PASS
beq .1
>LDA.G ASM.DU.ON
bmi .1
txa
pha
>PUSHA
@ -23,7 +23,7 @@ OUT.EmitByte phy
>SYSCALL FPutC
plx
bcs .99
.1 >INC.G ASM.PC
bne .2
>INC.G ASM.PC+1
@ -51,10 +51,10 @@ OUT.EmitByte phy
jsr OUT.PrintBuf
plx
bcs .99
ldy #OUT.Buf
lda #0
.4 inc
sta (pData),y
clc
@ -62,12 +62,12 @@ OUT.EmitByte phy
tay
txa
sta (pData),y
.8 clc
.99 plx
ply
rts
rts
*---------------------------------------
OUT.PrintBuf jsr OUT.PrintLineOn
bcs OUT.PrintBufReset
@ -79,39 +79,39 @@ OUT.PrintBuf jsr OUT.PrintLineOn
bcs OUT.PrintBuf.RTS
jsr OUT.PrintCR
bcs OUT.PrintBuf.RTS
OUT.PrintBufReset
>STZ.G OUT.Buf
ldx #4
ldy #ASM.PC
.2 lda (pData),y
pha
iny
dex
bne .2
ldx #4
ldy #OUT.PC+3
.3 pla
sta (pData),y
dey
dex
bne .3
.8 clc
OUT.PrintBuf.RTS
OUT.PrintBuf.RTS
rts
*---------------------------------------
OUT.PrintLine jsr OUT.PrintLineOn
OUT.PrintLine jsr OUT.PrintLineOn
bcs OUT.PrintBuf.RTS
OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
bcs OUT.PrintBuf.RTS
>LDA.G SRC.Depth
.1 dec
@ -122,17 +122,17 @@ OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
>SYSCALL PutChar
pla
bra .1
.2 >PUSHW L.MSG.LINENUM
>PUSHW.G SRC.LINENUM
>PUSHBI 2
>SYSCALL PrintF
>LDA.G MAC.CtxStackPtr
.3 dec
bmi .4
pha
lda #'>'
>SYSCALL PutChar
@ -147,40 +147,40 @@ OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
OUT.PrintLineOutBuf
>LDA.G OUT.bEquate
bne OUT.PrintLineEQU
>LDA.G OUT.Buf
pha
asl
tax
>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 #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
@ -193,14 +193,14 @@ OUT.PrintLineEQU
lda SRC.ACC.SIZE
beq .2
tay
.1 dey
>PUSHB SRC.ACC,y
tya
bne .1
lda SRC.ACC.SIZE
.2 >PUSHA Byte Count
@ -210,46 +210,50 @@ OUT.PrintLineEQU
OUT.PrintLineOn
>LDA.G bListAll
bmi .8
>LDA.G ASM.LI.ON
bpl .9
>LDA.G ASM.MA.ON MACRO Mode ?
bpl .1
bmi .1
>LDA.G ASM.LI.MON
>LDA.G MAC.CtxID within MACRO ?
beq .11
.1 >LDA.G ASM.LI.MON
bpl .9
clc
rts
.1 >LDA.G ASM.DO.StackPtr within a DO/ELSE ?
.11 >LDA.G ASM.DO.StackPtr within a DO/ELSE ?
beq .2
clc
adc #ASM.DO.Stack-1
tay
lda (pData),y TRUE ?
bne .8 yes, print always
>LDA.G ASM.LI.CON FALSE, check CON flag...
lda (pData),y TRUE ?
bne .8 yes, print always
>LDA.G ASM.LI.CON FALSE, check CON flag...
bpl .9
clc
rts
.2
.8 clc
rts
.9 sec
OUT.PrintLineOnRTS
rts
*---------------------------------------
OUT.PrintLineErr
sta DIR.Byte Save Error code
jsr OUT.PrintLine.1
bcs .9
bcs OUT.PrintLineOnRTS
.1 >PUSHW L.MSG.ERROR
>PUSHB DIR.Byte
>PUSHBI 1
@ -263,16 +267,16 @@ OUT.PrintLineErr
>LDA.G SRC.Depth
dec
jsr OUT.PrintLineErrDashA
>LDA.G MAC.CtxStackPtr
jsr OUT.PrintLineErrDashA
lda #'^'
>SYSCALL PutChar
bcs .9
bcs OUT.PrintLineOnRTS
jsr OUT.PrintCR
>PUSHW L.MSG.PASS
>LDA.G ASM.PASS
inc
@ -280,23 +284,32 @@ OUT.PrintLineErr
>PUSHBI 1
jsr OUT.Print
jmp OUT.PrintCR
.DO ASMDBG=1
>PUSHW L.MSG.EQU0+2
>PUSHB (ZPSymbolBuf) flags
>PUSHBI 1
>SYSCALL printf
.9 rts
>LDYA L.MSG.CRLF
>STYA ZPTmpBuf
jsr SYM.Dump.GLP
.FIN
jmp OUT.PrintCR
*---------------------------------------
OUT.PrintLineErrDashA
tax
beq .8
.1 phx
lda #'-'
>SYSCALL PutChar
plx
bcs .9
dex
bne .1
.8 clc
.9 rts
*---------------------------------------
@ -312,13 +325,12 @@ OUT.PrintCR1 >DEC.G OUT.LineCnt
lda #PAGE.LEN
sta (pData),y
* lda #$80
* >STA.G bPause
.8
.8
* clc
OUT.Print.RTS rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.OUT
LOAD USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s.out
LOAD usr/src/bin/asm.s
ASM

View File

@ -91,8 +91,12 @@ SRC.ParseLine.DirOp
jsr SRC.DoCheck
bcs .1 TRUE, always execute
cpx #12 .DO?
beq .1
cpx #20 .ELSE?
beq .1
cpx #30 .FIN?
bne SRC.ParseLine.Ok
@ -1053,6 +1057,6 @@ SRC.DoCheck sec
.8 rts CS if TRUE
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.SRC
LOAD USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s.src
LOAD usr/src/bin/asm.s
ASM

View File

@ -29,26 +29,26 @@ SYM.Init >SYSCALL SListNew
*---------------------------------------
SYM.Quit >LDA.G SYM.hBuf
beq .1
>SYSCALL FreeMem
.1 >LDA.G SYM.hList
beq .8
>PUSHA
>SYSCALL SListFree
.8 rts
*---------------------------------------
SYM.NewGlobal >LDA.G ASM.PASS
bne SYM.NewGlobal2
bne SYM.GetGlobal
jsr SYM.StoreGlobal Store previous if any
bcs .99
>STZ.G MAC.CtxID
>STA.G MAC.CtxNextID
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #1: try to add global...
>SYSCALL SListNewKey
@ -57,16 +57,14 @@ SYM.NewGlobal >LDA.G ASM.PASS
>STYA.G SYM.ID
txa
* clc
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 jsr SYM.PC2Acc
stz SRC.ACC.F
.1 stz SRC.ACC.F
jsr SYM.PC2Acc
jsr SYM.Acc2Global
lda #SYMG
@ -74,62 +72,76 @@ SYM.NewGlobal >LDA.G ASM.PASS
tay
lda #0
sta (ZPSymbolBuf),y
.DO ASMDBG=1
lda #'1'
>SYSCALL putchar
jsr SYM.Dump.G
jsr OUT.PrintCR
.FIN
clc
rts
.9 lda #E.SYMBOL.REDEF
sec
.99
.9 cmp #E.DUPKEY
bne .99
lda #E.SYMBOL.REDEF
.99
SYM.NewGlobal.RTS
rts
*---------------------------------------
SYM.NewGlobal2 >PUSHB.G SYM.hList Pass #2: should be already defined...
>PUSHW ZPLinePtr
SYM.GetGlobal >PUSHB.G SYM.hList Pass #2: should be already defined...
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs SYM.NewGlobal.RTS
>STYA.G SYM.ID
txa
* clc
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >PUSHB.G SYM.hList Pass #2: Retore full context
.1 >PUSHB.G SYM.hList Pass #2: Restore full context
>PUSHW.G SYM.ID
>PUSHW ZPSymbolBuf
>PUSHWI $ffff all
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .99
* lda (ZPSymbolBuf)
* and #SYMG.F.EQU
* bne .8
* >LDA.G ASM.PC
* ldy #SYMG.V
* cmp (ZPSymbolBuf),y
* bne .7
* >LDA.G ASM.PC+1
* ldy #SYMG.V+1
* cmp (ZPSymbolBuf),y
* beq .8
*.7 lda #E.OUT.OF.SYNC
* sec
* rts
.8 lda #SYMG
lda (ZPSymbolBuf)
and #SYMG.F.EQU
bne .8
>LDA.G ASM.PC
ldy #SYMG.V
cmp (ZPSymbolBuf),y
bne .7
>LDA.G ASM.PC+1
ldy #SYMG.V+1
cmp (ZPSymbolBuf),y
beq .8
.7 lda #E.OUT.OF.SYNC
sec
rts
.8 .DO ASMDBG=1
lda #'2'
>SYSCALL putchar
jsr SYM.Dump.G
jsr OUT.PrintCR
.FIN
lda #SYMG
>STA.G SYM.BufPtr
>STZ.G MAC.CtxID
>STA.G MAC.CtxNextID
clc
rts
@ -142,11 +154,11 @@ SYM.LookupGlobal
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs .4
>STYA ZPPtr1
>STYA ZPPtr1 KeyID
txa
* clc
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
@ -155,26 +167,27 @@ SYM.LookupGlobal
.1 >LDA.G SYM.ID
cmp ZPPtr1
bne .3
iny
lda (pData),y
cmp ZPPtr1+1
bne .3
ldy #SYMG-1
.2 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y
dey
bpl .2
bne .2 Keep ACC.F unchanged
clc
rts
.99 rts
.3 >PUSHB.G SYM.hList
>PUSHW ZPPtr1
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG Get only Global value
>PUSHWZ Start
>PUSHW ZPPtr1 KeyID
>PUSHW L.SRC.ACC.SIZE
>PUSHWI SYMG-1 Get only Global value
>PUSHWI 1 Skip SYMG.F
>SYSCALL SListGetData
rts
@ -185,23 +198,27 @@ SYM.LookupGlobal
tsb SRC.ACC.F
lda #2
sta SYMG.SIZE
sta SRC.ACC.SIZE
lda #$ff
sta SRC.ACC
sta SRC.ACC+1
.5 jsr SRC.GetNextChar
bcs .8
jsr SRC.IsLetterOrDigit
bcc .5
cmp #'.'
beq .5
cmp #'_'
beq .5
.8 clc
rts
.9 lda #E.UNDEF.SYMBOL
sec
rts
@ -211,21 +228,21 @@ SYM.StoreGlobal >LDA.G ASM.PASS
>LDA.G SYM.BufPtr
beq .8
>PUSHB.G SYM.hList
>PUSHW.G SYM.ID
>PUSHW ZPSymbolBuf
>LDA.G SYM.BufPtr
tay
lda #0
cpy #SYMG
beq .1
iny Add 1 for \0 after locals/privates
bne .1
inc
.1 >PUSHYA
>SYSCALL SListAddData
@ -240,31 +257,34 @@ SYM.UpdateGlobal
>PUSHB.G SYM.hList
>PUSHW.G SYM.ID
>PUSHW ZPSymbolBuf
>LDA.G SYM.BufPtr
tay
lda #0
cpy #SYMG
beq .1
iny Add 1 for \0 after locals/privates
bne .1
inc
.1 >PUSHYA
>SYSCALL SListSetData
rts
bcs .9
>STZ.G SYM.BufPtr
.9 rts
*---------------------------------------
SYM.PC2Acc ldy #ASM.PC+3
ldx #3
.1 lda (pData),y
sta SRC.ACC,x
dey
dex
bpl .1
lda #2
sta SRC.ACC.SIZE
@ -280,7 +300,7 @@ SYM.Acc2Global ldy #SYMG-1
rts
*---------------------------------------
SYM.NewLocalA tax Save Local ID
>LDA.G SYM.BufPtr not in a global label
beq .91
@ -296,13 +316,13 @@ SYM.NewLocalA tax Save Local ID
bcs .90
ldy #ASM.PC+4
.1 dey
lda (pData),y
pha
cpy #ASM.PC
bne .1
>LDA.G MAC.CtxID Get Macro Context ID
pha
@ -337,39 +357,39 @@ SYM.NewLocalA tax Save Local ID
.91 lda #E.INV.LABEL
sec
rts
.90 lda #E.TOO.MANY.LOCAL
sec
rts
.9 lda #E.SYMBOL.REDEF
sec
rts
rts
*---------------------------------------
.20 >LDA.G SYM.BufPtr Pass #2: setup SYM.BufPtr in case of .EQ
clc
adc #SYML
sta (pData),y
rts
*---------------------------------------
SYM.LookupLocalX
lda (ZPSymbolBuf)
and #SYMG.F.LOCALS
beq .99
ldy #SYMG
.1 phy
lda (ZPSymbolBuf),y
beq .9
txa
cmp (ZPSymbolBuf),y
bne .3
>LDA.G MAC.CtxID
ply
phy
@ -378,60 +398,57 @@ SYM.LookupLocalX
bne .3
ldx #0
.2 iny
lda (ZPSymbolBuf),y
sta SRC.ACC,x
inx
cpx #4
bne .2
pla
clc
rts
.3 pla
clc
adc #SYML
tay
bra .1
.9 ply
.99 lda #E.UNDEF.SYMBOL
sec
rts
rts
*---------------------------------------
SYM.Dump.End >PUSHW L.MSG.SUMMARY
>PUSHW ZPPtr2
>PUSHBI 2
jmp OUT.Print
SYM.Dump.8 clc
rts
*---------------------------------------
SYM.Dump >LDA.G bListAll
bmi SYM.Dump.1
>LDA.G ASM.LI.ON
bpl SYM.Dump.8
SYM.Dump.1 >LDYA L.MSG.SYMBOLS
>SYSCALL PutS
stz ZPPtr2
stz ZPPtr2+1
.1
* jsr SYM.Dump.DBG
>LDYA ZPPtr2
.1 >LDYA ZPPtr2
>STYA ZPPtr1
>PUSHB.G SYM.hList
>PUSHW ZPPtr1
>PUSHW ZPTmpBuf
>PUSHW ZPTmpBuf
>SYSCALL SListGetByID
bcs SYM.Dump.End
@ -444,16 +461,19 @@ SYM.Dump.1 >LDYA L.MSG.SYMBOLS
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .9
jsr SYM.Dump.GLP
bcc .1
.9 rts
.9 rts
*---------------------------------------
SYM.Dump.GLP jsr SYM.Dump.G
bcs .9
>LDYA ZPTmpBuf Label
>SYSCALL PutS
ldx #5
lda (ZPSymbolBuf)
@ -462,12 +482,12 @@ SYM.Dump.GLP jsr SYM.Dump.G
jsr SYM.Dump.LP
bcs .9
.2 cpx #5 already CR printed ?
beq .8
jmp OUT.PrintCR
.8 clc
.9 rts
*---------------------------------------
@ -475,7 +495,7 @@ SYM.Dump.G ldy #SYMG.SIZE Get Symbol Size
lda (ZPSymbolBuf),y
pha
asl
tax
>PUSHB L.MSG.EQU0+1,x
@ -484,92 +504,89 @@ SYM.Dump.G ldy #SYMG.SIZE Get Symbol Size
pla
pha
tax byte count
clc
adc #SYMG.V
tay
.2 dey
lda (ZPSymbolBuf),y
>PUSHA
dex
bne .2
pla Byte Count
.3 >PUSHA
>SYSCALL PrintF
>LDYA ZPTmpBuf Label
>SYSCALL PutS
>SYSCALL PrintF
rts
*---------------------------------------
SYM.Dump.LP ldy #SYMG
ldx #5
.1 lda (ZPSymbolBuf),y
beq .8
phy
phx
tax ID
iny
lda (ZPSymbolBuf),y MacID
bne .3
>PUSHW L.MSG.LSYMBOL
txa
>PUSHA
jsr SYM.Dump.PushValueY
lda #5
bra .5
.3 >PUSHW L.MSG.PSYMBOL
txa
>PUSHA
>PUSHB (ZPSymbolBuf),y
jsr SYM.Dump.PushValueY
lda #6
.5 >PUSHA
>SYSCALL PrintF
plx
dex
bne .6
jsr OUT.PrintCR
ldx #5
.6 pla
clc
adc #SYML
tay
bra .1
.8 rts
*---------------------------------------
SYM.Dump.PushValueY
ldx #4
iny
iny
iny
iny
.1 lda (ZPSymbolBuf),y
>PUSHA
dey
@ -579,6 +596,6 @@ SYM.Dump.PushValueY
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.SYM
LOAD USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s.sym
LOAD usr/src/bin/asm.s
ASM

View File

@ -5,15 +5,17 @@ NEW
.OR $2000
.TF bin/asm
*---------------------------------------
ASMDBG .EQ 0
*---------------------------------------
PAGE.LEN .EQ 23
DO.MAXDEPTH .EQ 8
IN.MAXDEPTH .EQ 4
MA.MAXDEPTH .EQ 8
*---------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.I
.INB INC/MLI.E.I
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
*---------------------------------------
.DUMMY
.OR ZPBIN
@ -29,7 +31,7 @@ ZPOpsPtr .BS 2
ZPOpDefPtr .BS 2
ZPMacroStk .BS 2
ZPMacroBuf .BS 2
ZPMacroBuf .BS 2
ZPMacroArgBuf .BS 2
ZPMacroArgCnt .BS 1
@ -113,7 +115,7 @@ CS.START cld
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.HELP .DA MSG.HELP
L.MSG.CRLF .DA MSG.CRLF
@ -134,33 +136,35 @@ L.MSG.LSYMBOL .DA MSG.LSYMBOL
L.MSG.PSYMBOL .DA MSG.PSYMBOL
L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.END .DA MSG.END
L.MSG.DEBUG .DA MSG.DEBUG
.DO ASMDBG=1
L.MSG.DBG .DA MSG.DBG
.FIN
L.MSG.SRC.FILE .DA MSG.SRC.FILE
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
L.MSG.T.FILE .DA MSG.T.FILE
L.MSG.CPU.FILE .DA MSG.CPU.FILE
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
L.ASM.6502 .DA ASM.6502
L.ASM.CPU.FILE .DA ASM.CPU.FILE
L.SRC.ACC.F .DA SRC.ACC.F
L.SRC.ACC.SIZE .DA SRC.ACC.SIZE
L.SRC.ACC .DA SRC.ACC
L.SRC.ARG .DA SRC.ARG
L.T.DIRECTIVES .DA T.DIRECTIVES
J.DIRECTIVES .DA DIR.AC
J.DIRECTIVES .DA DIR.AC 0
.DA DIR.AS
.DA DIR.AT
.DA DIR.AZ
.DA DIR.BS
.DA DIR.DA
.DA DIR.DO
.DA DIR.DO 12
.DA DIR.DU
.DA DIR.DU
.DA DIR.ED
.DA DIR.EL
.DA DIR.EL 20
.DA DIR.EM
.DA DIR.EN
.DA DIR.EP
.DA DIR.EQ
.DA DIR.FI
.DA DIR.FI 30
.DA DIR.HS
.DA DIR.IN
.DA DIR.IN
@ -209,12 +213,15 @@ J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/
.DA EXP.OP.ADD
.DA EXP.OP.SUB
.DA EXP.OP.MUL
.DA EXP.OP.DIV
.DA EXP.OP.DIV
.DA 0
*---------------------------------------
CS.INIT jsr CS.RUN.ARGS
bcs .99
CS.INIT clc
rts
*--------------------------------------
CS.RUN jsr CS.RUN.ARGS
bcs .9
jsr FIO.Init
bcs .9
@ -224,71 +231,16 @@ CS.INIT jsr CS.RUN.ARGS
jsr MAC.Init
bcs .9
jmp OUT.Init
jsr OUT.Init
bcs .9
.1 >SLEEP
jsr CS.RUN.LOOP
bcc .1
.99 pha
>PUSHW L.MSG.HELP
>PUSHBI 0
>SYSCALL PrintF
pla
sec
.9 rts
*--------------------------------------
CS.RUN.ARGS ldy #S.PS.ARGC
lda (pPS),y
beq .90
.1 inc ZPPtr1
lda ZPPtr1
>SYSCALL ArgV
bcs .8
>STYA ZPPtr2
lda (ZPPtr2)
cmp #'-'
beq .2
>PUSHW ZPPtr2
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs .99
txa
>STA.G SRC.hFILENAME
bra .1
.2 ldy #1
lda (ZPPtr2),y
cmp #'L'
bne .3
lda #$ff
>STA.G bListAll
bra .1
.3 cmp #'T'
bne .90
inc ZPPtr1
lda ZPPtr1
>SYSCALL ArgV
bcs .90
lda ZPPtr1
>STA.G ArgDstFile
bra .1
.8 >LDA.G SRC.hFILENAME
beq .90
clc
rts
.90 lda #E.INV.ARGS
sec
.99 rts
*--------------------------------------
CS.RUN ldy #S.PS.hStdIn
CS.RUN.LOOP ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL FEOF
bcs .99
@ -297,7 +249,7 @@ CS.RUN ldy #S.PS.hStdIn
>SYSCALL GetChar
bcs .99
cmp #$03 Ctrl-C
beq .99 Abort....beq=CS
@ -307,9 +259,9 @@ CS.RUN ldy #S.PS.hStdIn
>LDA.G bPause
eor #$ff
sta (pData),y
bpl .12
clc
rts
@ -322,15 +274,15 @@ CS.RUN ldy #S.PS.hStdIn
.11 >STZ.G bPause
.12 >LDA.G SRC.Depth root file is already opened?
bne .10
bne .10
>PUSHW L.MSG.PASS
>LDA.G ASM.PASS
inc
>PUSHA
>PUSHBI 1
jsr OUT.Print
>LDA.G SRC.hFILENAME
>SYSCALL GetMemPtr
jsr FIO.OpenFile
@ -340,35 +292,35 @@ CS.RUN ldy #S.PS.hStdIn
>STZ.G MAC.StkPtr
>STZ.G SYM.BufPtr
.10 >LDYA ZPLineBuf
>STYA ZPLinePtr
>LDA.G MAC.StkPtr
beq .20
.15 jsr MAC.ReadLine
bcc .2
cmp #E.EMPTYKEY
bne .9
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.Depth end of root file ?
bne .8 no continue back to previous file
jsr SYM.StoreGlobal Make sure last Global flushed
bcs .9
>LDA.G ASM.PASS End of pass #2 ??
bne .1
inc
@ -382,12 +334,12 @@ CS.RUN ldy #S.PS.hStdIn
>LDYA L.MSG.END
>SYSCALL PutS
lda #0 End of assembly, exit with no error
sec
sec
rts
.2 jsr SRC.ParseLine
bcs .9
jsr OUT.PrintLine
.8 clc
@ -399,52 +351,110 @@ CS.RUN ldy #S.PS.hStdIn
sec
rts
*--------------------------------------
CS.RUN.ARGS ldy #S.PS.ARGC
lda (pPS),y
beq .90
.1 inc ZPPtr1
lda ZPPtr1
>SYSCALL ArgV
bcs .8
>STYA ZPPtr2
lda (ZPPtr2)
cmp #'-'
beq .2
>PUSHW ZPPtr2
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs .99
txa
>STA.G SRC.hFILENAME
bra .1
.2 ldy #1
lda (ZPPtr2),y
cmp #'L'
bne .3
lda #$ff
>STA.G bListAll
bra .1
.3 cmp #'T'
bne .90
inc ZPPtr1
lda ZPPtr1
>SYSCALL ArgV
bcs .90
lda ZPPtr1
>STA.G ArgDstFile
bra .1
.8 >LDA.G SRC.hFILENAME
beq .90
clc
rts
.90 >PUSHW L.MSG.HELP
>PUSHBI 0
>SYSCALL PrintF
lda #E.INV.ARGS
sec
.99 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT >LDA.G SRC.Depth
beq .1
jsr FIO.FileClose
bra CS.QUIT
bra CS.QUIT
.1 >LDA.G DST.hREFNUM
beq .2
>SYSCALL FClose
.2 jsr MAC.Quit
jsr SYM.Quit
ldy #ASM.hCPUFILE
jsr .7
ldy #SRC.hFILENAME
jsr .7
ldy #DST.hFILENAME
jsr .7
ldy #SRC.hLineBuf
jsr .7
ldy #SRC.hTmpBuf
.7 lda (pData),y
beq .8
>SYSCALL FreeMem
.8 clc
rts
*---------------------------------------
.INB USR/SRC/BIN/ASM.S.DIR
.INB USR/SRC/BIN/ASM.S.EXP
.INB USR/SRC/BIN/ASM.S.FIO
.INB USR/SRC/BIN/ASM.S.MAC
.INB USR/SRC/BIN/ASM.S.OUT
.INB USR/SRC/BIN/ASM.S.SRC
.INB USR/SRC/BIN/ASM.S.SYM
.INB usr/src/bin/asm.s.dir
.INB usr/src/bin/asm.s.exp
.INB usr/src/bin/asm.s.fio
.INB usr/src/bin/asm.s.mac
.INB usr/src/bin/asm.s.out
.INB usr/src/bin/asm.s.src
.INB usr/src/bin/asm.s.sym
*---------------------------------------
CS.END
T.DIRECTIVES >PSTR "AC"
@ -514,7 +524,7 @@ MSG.CRLF .AZ "\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"
MSG.T.FILE .AZ "**** Loading CPU File:%s"
MSG.CPU.FILE .AZ "**** Loading CPU File:%s"
MSG.OUT0 .AZ "%H- "
MSG.OUT1 .AZ "%H-%h "
MSG.OUT2 .AZ "%H-%h %h "
@ -531,15 +541,16 @@ MSG.LSYMBOL .AZ " .%d=%h%h%h%h"
MSG.PSYMBOL .AZ " :%d(%d)=%h%h%h%h"
MSG.SUMMARY .AZ "\r\n**** Symbol Table Size : %5D Bytes.\r\n"
MSG.END .AZ "**** End Of Assembly."
MSG.DEBUG .AZ "PC=%h%h%h%h, ACC=%h%h%h%h [%h] F:%b ARG=%h%h%h%h [%h]\r\n"
.DO ASMDBG=1
MSG.DBG .AZ "\r\nCtxID=%d, ARG=%H%H <op> ACC=%H%H -> ACC %b [%h]\r\n"
.FIN
*---------------------------------------
ASM.CPU.FILE .BS 65
SRC.ACC.F .BS 1
SRC.ACC.SIZE .BS 1
SRC.ACC .BS 4
SRC.ARG.SIZE .BS 1
SRC.ARG.F .BS 1
SRC.ARG .BS 4
SRC.ACCTMP .BS 4
@ -547,7 +558,7 @@ SRC.AM.StrBuf .BS 32
*--------------------------------------
.DUMMY
.OR 0
DS.START
DS.START
bPause .BS 1
bListAll .BS 1
ArgDstFile .BS 1
@ -622,5 +633,5 @@ DS.END .ED
.FIN
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S
SAVE usr/src/bin/asm.s
ASM

View File

@ -5,10 +5,10 @@ NEW
.OR $2000
.TF bin/ping
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/ETH.I
.INB INC/LIBTCPIP.I
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/eth.i
.INB inc/libtcpip.i
*--------------------------------------
TIMEOUT.MAX .EQ 100 10 sec.
*--------------------------------------
@ -111,15 +111,15 @@ CS.RUN.IPOK inc ArgIndex
bra CS.RUN.IPOK
.1 lda #TIMEOUT.MAX
sta Timeout
sta TimeOut
.2 >PUSHEA.G SA.REMOTE+S.SOCKADDR.ADDR
>PUSHW ZPTmpPtr
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GETBYNAME
>LIBCALL hLIBTCPIP,LIBTCPIP.HST.GetByName
bcc .3
>SLEEP
lda Timeout
lda TimeOut
bne .2
>PUSHW L.MSG.UNKNOWN
@ -179,13 +179,13 @@ CS.RUN.OPENSKT ldx #3
dex
bpl .2
lda A2OSX.RANDOM16
lda A2osX.RANDOM16
eor A2osX.TIMER16+1
>STA.G SA.LOCAL+S.SOCKADDR.PORT
>STA.G SA.REMOTE+S.SOCKADDR.PORT
sta Identifier
lda A2OSX.RANDOM16+1
lda A2osX.RANDOM16+1
eor A2osX.TIMER16
>STA.G SA.LOCAL+S.SOCKADDR.PORT+1
>STA.G SA.REMOTE+S.SOCKADDR.PORT+1
@ -193,7 +193,7 @@ CS.RUN.OPENSKT ldx #3
>PUSHBI S.IP.PROTOCOL.ICMP
lda #S.SOCKET.T.RAW
>LIBCALL hLIBTCPIP,LIBTCPIP.socket
>LIBCALL hLIBTCPIP,LIBTCPIP.Socket
bcs .9
sta hSocket
@ -240,11 +240,11 @@ CS.RUN.SEND.ECHO
>PUSHW pData
lda hSocket
>LIBCALL hLIBTCPIP,LIBTCPIP.send
>LIBCALL hLIBTCPIP,LIBTCPIP.Send
bcs CS.RUN.ERR
lda #TIMEOUT.MAX
sta Timeout
sta TimeOut
CS.RUN.WAIT.REPLY
>SLEEP
ldy #S.PS.hStdIn
@ -264,7 +264,7 @@ CS.RUN.WAIT.REPLY
>LIBCALL hLIBTCPIP,LIBTCPIP.Recv
bcc .2
lda Timeout
lda TimeOut
bne CS.RUN.WAIT.REPLY
jsr CS.Print.UNREACH
@ -419,5 +419,5 @@ SA.REMOTE .BS S.SOCKADDR
DS.END .ED
*--------------------------------------
MAN
SAVE USR/SRC/BIN/PING.S
SAVE usr/src/bin/ping.s
ASM

View File

@ -458,6 +458,9 @@ CS.QUIT jsr CORE.FUNCRESET
.1 ldy #CL.hCLBuf
jsr .7
.2 jsr CMD.POPD
bcc .2
ldy #CORE.hArgVBuf
.7 lda (pData),y

View File

@ -41,7 +41,7 @@ SLISTX.SListGetData
lda FORPNT
ora FORPNT+1
bne .12
bne .12 buffer provided
>LDYA SLIST.DataLen
@ -76,7 +76,7 @@ SLISTX.SListGetData
.2 inc SLIST.nDataCnt
bne .3
inc SLIST.nDataCnt+1
beq .81
beq .80
.3 bit SLIST.bStringMode
bmi .4 String mode : until CR