Kernel 0.94.3c (kernel migration step c)

ASM broken
This commit is contained in:
burniouf 2023-07-16 11:09:23 +02:00
parent a417f7aba6
commit 949d7e3b22
13 changed files with 275 additions and 164 deletions

Binary file not shown.

View File

@ -149,10 +149,6 @@ EXP.Eval.Next stz SRC.ACC
bcs EXP.EvalExitSYN
jsr SYM.LookupGlobal
.DO ASMDBG=1
lda #"?"
jsr EXP.DBG
.FIN
bcc EXP.EvalOperator
EXP.EvalExitRTS rts
@ -225,11 +221,6 @@ EXP.EvalOperator
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

View File

@ -287,17 +287,6 @@ OUT.PrintLineErr
>PUSHBI 1
jsr OUT.Print
.DO ASMDBG=1
>PUSHW L.MSG.EQU0+2
>PUSHB (ZPSymbolBuf) flags
>PUSHBI 1
>SYSCALL printf
>LDYA L.MSG.CRLF
>STYA ZPTmpBuf
jsr SYM.Dump.GLP
.FIN
jmp OUT.PrintCR
*---------------------------------------
OUT.PrintLineErrDashA
@ -316,6 +305,12 @@ OUT.PrintLineErrDashA
.8 clc
.9 rts
*---------------------------------------
OUT.PrintWarn1 jsr OUT.PrintLine.1
>LDYA L.MSG.WARN1
>SYSCALL PutS
rts
*---------------------------------------
OUT.Print >SYSCALL PrintF
bcs OUT.Print.RTS
*---------------------------------------

View File

@ -847,23 +847,31 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table
.3 lda (ZPLinePtr),y
beq .6
jsr SRC.IsKeywordLetterUC
bcs .6
iny
cmp (ZPPtr1),y
bne .7
dex
bne .3
lda (ZPLinePtr),y All chars match...
beq .4 End of Line ?
jsr SRC.IsKeywordLetterUC
bcc .7 Additional letters...
.4 lda ZPLinePtr found!
clc
adc (ZPPtr1) skip KW in source line
sta ZPLinePtr
bcc .5
inc ZPLinePtr+1
.5 plx Keyword.ID
clc
rts
@ -874,43 +882,57 @@ SRC.GetKeyword >STYA ZPPtr1 KeyWord table
adc ZPPtr1
sta ZPPtr1
bcc .8
inc ZPPtr1+1
.8 plx Keyword.ID
inx
inx
bra .1
.9 plx
sec
rts
*---------------------------------------
SRC.IsAMReserved
ldx SRC.AM.RESERVED
.1 cmp SRC.AM.RESERVED,x
beq .8
dex
bne .1
sec
rts
.8 clc
rts
*---------------------------------------
SRC.IsMODReserved
ldx SRC.MOD.RESERVED
.1 cmp SRC.MOD.RESERVED,x
beq .8
dex
bne .1
sec
rts
.8 clc
rts
*---------------------------------------
SRC.IsEXPReserved
ldx SRC.EXP.RESERVED
.1 cmp SRC.EXP.RESERVED,x
beq SRC.IsEXPReserved.8
dex
bne .1
sec
rts
SRC.IsEXPReserved.8
@ -918,22 +940,22 @@ SRC.IsEXPReserved.8
rts
*---------------------------------------
SRC.IsKeywordLetterUC
cmp #'.'
beq SRC.IsEXPReserved.8
cmp #'_'
beq SRC.IsEXPReserved.8
cmp #'A'
bcc .9
cmp #'Z'+1
bcc .99
cmp #'a'
bcc .9
cmp #'z'+1
bcs .99
eor #$20
rts CC if lowercase
.9 sec
.99 rts
*---------------------------------------
@ -941,26 +963,41 @@ SRC.IsLetterOrDigit
jsr SRC.IsDigit10
bcc SRC.IsLetterRTS
*---------------------------------------
SRC.IsLetter cmp #'A'
SRC.IsLetter cmp #'_'
beq .8
cmp #'A'
bcc .9
cmp #'Z'+1
bcc SRC.IsLetterRTS
cmp #'a'
bcc .9
cmp #'z'+1
rts CC if lowercase
.8 clc
rts
.9 sec
SRC.IsLetterRTS rts
*---------------------------------------
SRC.IsDigit16 jsr SRC.IsDigit10
bcc .8
cmp #'A'
bcc .9
cmp #'F'+1
bcc .1
cmp #'a'
bcc .9
cmp #'f'+1
bcs .9
@ -968,23 +1005,33 @@ SRC.IsDigit16 jsr SRC.IsDigit10
.1
* clc
sbc #'A'-11 cc so A->10 (11-CC)
clc
.8 and #$0F
rts
.9 sec
rts
*---------------------------------------
SRC.IsDigit10 cmp #'0'
bcc .9
cmp #'9'+1
rts cc if ok, cs if not
.9 sec
rts
*---------------------------------------
SRC.IsDigit8 cmp #'0'
bcc .9
cmp #'7'+1
rts cc if ok, cs if not
.9 sec
rts
*---------------------------------------
@ -1003,15 +1050,18 @@ SRC.SkipXp1 sec
SRC.GetNextCharNB
jsr SRC.GetNextChar
bcs .9
cmp #C.SPACE
beq SRC.GetNextCharNB
clc
.9 rts
*---------------------------------------
SRC.GetNextChar lda (ZPLinePtr)
beq SRC.GetChar.ERR
cmp #$0D
cmp #C.CR
beq SRC.GetChar.ERR
inc ZPLinePtr
@ -1022,7 +1072,7 @@ SRC.GetNextChar lda (ZPLinePtr)
SRC.GetChar lda (ZPLinePtr)
beq SRC.GetChar.ERR
cmp #$0D
cmp #C.CR
beq SRC.GetChar.ERR
clc
@ -1079,7 +1129,12 @@ SRC.GetACCSize lda SRC.ACC.F
and #SYMG.F.FWREF
beq .1
ldx #2
lda SRC.ACC+1
bne .10
jsr OUT.PrintWarn1
.10 ldx #2
rts
.1 ldx SRC.ACC.SIZE

View File

@ -20,12 +20,21 @@ SYM.Init lda #SL..+SL._
bcs .9
>STA.G SYM.hList
lda #SL..+SL._
>SYSCALL SListNew
bcs .9
>STA.G FWR.hList
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPSymbolBuf
txa
>STA.G SYM.hBuf
.9 rts
*---------------------------------------
SYM.Quit >LDA.G SYM.hBuf
@ -33,7 +42,12 @@ SYM.Quit >LDA.G SYM.hBuf
>SYSCALL FreeMem
.1 >LDA.G SYM.hList
.1 >LDA.G FWR.hList
beq .2
>SYSCALL SListFree
.2 >LDA.G SYM.hList
beq .8
>SYSCALL SListFree
@ -59,9 +73,7 @@ SYM.NewGlobal >LDA.G ASM.PASS
jsr SRC.SkipX
.1 stz SRC.ACC.F
jsr SYM.PC2Acc
jsr SYM.Acc2Global
stz SRC.ACC.F
lda #SYMG
>STA.G SYM.BufPtr
@ -69,13 +81,10 @@ SYM.NewGlobal >LDA.G ASM.PASS
lda #0
sta (ZPSymbolBuf),y
.DO ASMDBG=1
lda #'1'
>SYSCALL putchar
jsr SYM.Dump.G
jsr OUT.PrintCR
.FIN
clc
jsr SYM.PC2Acc
jsr SYM.Acc2Global
.80 clc
rts
.9 cmp #E.DUPKEY
@ -122,14 +131,7 @@ SYM.GetGlobal >PUSHB.G SYM.hList Pass #2: should be already defined...
sec
rts
.8 .DO ASMDBG=1
lda #'2'
>SYSCALL putchar
jsr SYM.Dump.G
jsr OUT.PrintCR
.FIN
lda #SYMG
.8 lda #SYMG
>STA.G SYM.BufPtr
>STZ.G MAC.CtxID
@ -147,11 +149,18 @@ SYM.LookupGlobal
>PUSHW ZPLinePtr
>PUSHWI 0 ScopeID
>SYSCALL SListLookup
bcs .4
bcc .10
>STYA ZPPtr1 KeyID
>LDA.G ASM.PASS pass#2?
beq .11
jsr SRC.SkipX
lda #E.UNDEF.SYMBOL
sec
rts
.11 jmp SYM.AddFWFef
.10 >STYA ZPPtr1 KeyID
.1 >LDA.G SYM.ID
cmp ZPPtr1
@ -169,47 +178,72 @@ SYM.LookupGlobal
dey
bne .2 Keep ACC.F unchanged
clc
.99 rts
jsr SRC.SkipX
.3 >PUSHB.G SYM.hList
clc
rts
.3 phx
>PUSHB.G SYM.hList
>PUSHW ZPPtr1 KeyID
>PUSHW L.SRC.ACC.SIZE
>PUSHWI SYMG-1 Get only Global value
>PUSHWI 1 Skip SYMG.F
>SYSCALL SListGetData
rts
bcs .90
.4 >LDA.G ASM.PASS pass#2?
bne .9 yes, undefined symbol
jsr SYM.LookupFWFef
bcs .8
* lda #2
* cmp SRC.ACC.SIZE
* beq .8
* sta SRC.ACC.SIZE
lda #SYMG.F.FWREF
tsb SRC.ACC.F
lda #2
sta SRC.ACC.SIZE
.8 plx
jsr SRC.SkipX
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
clc
rts
.9 lda #E.UNDEF.SYMBOL
sec
.90 plx
.9 rts
*---------------------------------------
SYM.AddFWFef jsr SYM.LookupFWFef
bcc .8 Already Defined
>PUSHB.G FWR.hList
>PUSHW ZPLinePtr Pass #1: try to add global...
>PUSHWI 0 ScopeID
>SYSCALL SListNewKey
bcs .9
>STYA.G FWR.ID
jsr SRC.SkipX
>PUSHB.G FWR.hList
>PUSHW.G FWR.ID
>PUSHW ZPSymbolBuf
>PUSHWI 1
>SYSCALL SListAddData
rts
.8 jsr SRC.SkipX
clc
.9 rts
*---------------------------------------
SYM.LookupFWFef >PUSHB.G FWR.hList
>PUSHW ZPLinePtr
>PUSHWI 0 ScopeID
>SYSCALL SListLookup
rts
*---------------------------------------
SYM.StoreGlobal >LDA.G ASM.PASS
@ -230,6 +264,7 @@ SYM.StoreGlobal >LDA.G ASM.PASS
iny Add 1 for \0 after locals/privates
bne .1
inc
.1 >PUSHYA
@ -274,8 +309,17 @@ SYM.PC2Acc ldy #ASM.PC+3
dex
bpl .1
lda #2
sta SRC.ACC.SIZE
ldx #4
.2 lda SRC.ACC-1,x
bne .3
dex
bne .2
inx
.3 stx SRC.ACC.SIZE
rts
*---------------------------------------
@ -651,6 +695,14 @@ SYM.Dump.PushValueY
bpl .1
rts
*---------------------------------------
.DO SYMDBG=1
SYM.Debug >PUSHW L.MSG.SYMDBG
>PUSHW.G SYM.ID
>PUSHBI 2
>SYSCALL PrintF
rts
.FIN
*---------------------------------------
MAN
SAVE usr/src/bin/asm.s.sym

View File

@ -6,6 +6,7 @@ NEW
.TF bin/asm
*---------------------------------------
ASMDBG .EQ 0
SYMDBG .EQ 0
*---------------------------------------
PAGE.LEN .EQ 23
DO.MAXDEPTH .EQ 8
@ -137,9 +138,13 @@ 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.WARN1 .DA MSG.WARN1
.DO ASMDBG=1
L.MSG.DBG .DA MSG.DBG
.FIN
.DO SYMDBG=1
L.MSG.SYMDBG .DA MSG.SYMDBG
.FIN
L.MSG.SRC.FILE .DA MSG.SRC.FILE
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
L.MSG.CPU.FILE .DA MSG.CPU.FILE
@ -158,7 +163,7 @@ J.DIRECTIVES .DA DIR.AC
.DA DIR.CS
.DA DIR.CZ
.DA DIR.DA
DIR.DO.ID .EQ *-J.DIRECTIVES
DIR.DO.ID .EQ *-J.DIRECTIVES
.DA DIR.DO
.DA DIR.DU
.DA DIR.DU
@ -241,11 +246,11 @@ CS.RUN jsr CS.RUN.ARGS
jsr OUT.Init
bcs .9
.1 >SLEEP
jsr CS.RUN.LOOP
jsr CS.RUN.LOOP
bcc .1
.9 rts
*--------------------------------------
CS.RUN.LOOP ldy #S.PS.hStdIn
@ -356,9 +361,6 @@ CS.RUN.LOOP ldy #S.PS.hStdIn
.9 pha
jsr OUT.PrintLineErr
.DO ASMDBG=1
jsr SYM.Dump.1
.FIN
pla
sec
rts
@ -387,9 +389,22 @@ CS.RUN.ARGS ldy #S.PS.ARGC
>STA.G SRC.hFILENAME
bra .1
.2 ldy #1
.2 ldy #2
lda (ZPPtr2),y
cmp #'L'
bne .90
dey
lda (ZPPtr2),y
cmp #'a'
bcc .20
cmp #'z'+1
bcs .20
eor #$20
.20 cmp #'L'
bne .3
lda #$ff
@ -417,7 +432,7 @@ CS.RUN.ARGS ldy #S.PS.ARGC
.90 >PUSHW L.MSG.HELP
>PUSHBI 0
>SYSCALL PrintF
lda #E.INV.ARGS
sec
.99 rts
@ -564,9 +579,13 @@ MSG.LSYMBOL .CZ " .%d=%h%h%h%h"
MSG.PSYMBOL .CZ " :%d(%d)=%h%h%h%h"
MSG.SUMMARY .CZ "\r\n**** Symbol Table Size : %5D Bytes.\r\n"
MSG.END .CZ "**** End Of Assembly."
MSG.WARN1 .CZ "**** WARN : Unoptimized adressing mode due to forward reference.\r\n"
.DO ASMDBG=1
MSG.DBG .CZ "\r\nCtxID=%d, ARG=%H%H <op> ACC=%H%H -> ACC %b [%h]\r\n"
.FIN
.DO SYMDBG=1
MSG.SYMDBG .CZ "SymID=%H\r\n"
.FIN
*---------------------------------------
ASM.CPU.FILE .BS 65
@ -631,6 +650,9 @@ SYM.hBuf .BS 1
SYM.BufPtr .BS 1
SYM.ID .BS 2
FWR.hList .BS 1
FWR.ID .BS 2
MAC.hList .BS 1
MAC.hBuf .BS 1
MAC.BufPtr .BS 1

View File

@ -846,6 +846,8 @@ SYM.LookupLabelA
.99 rts
*--------------------------------------
SYM.LookupFree >LDA.G CC.LookupIdx
beq .9 Never set by CORE.Init
cmp #CC.LookupIdx
beq .9

View File

@ -27,7 +27,7 @@ BLISTX.New sta SLISTX.Opt
lda #0
sta (DBlkPtr)
lda SLISTX.Opt
sta (IBlkPtr)

View File

@ -4,24 +4,19 @@ NEW
* CONTROL SECTION :
.LIST ON
*--------------------------------------
C0 .EQ Mem.MLoMem
C1 .EQ Mem.MHiMem
C2 .EQ Mem.XLoMem
C3 .EQ Mem.XHiMem
*--------------------------------------
C5 .EQ AUX.S
*--------------------------------------
C6 .EQ D1.S
C7 .EQ D2.S
C8 .EQ E0.S
C1 .EQ MAIN.S
C2 .EQ AUX.S
C3 .EQ D1.S
C4 .EQ D2.S
C5 .EQ E0.S
*--------------------------------------
.LIST OFF
.DO Mem.MLoMem>$2000
.DO MAIN.S>$C00
.LIST ON
* ERROR:MAIN too big
.LIST OFF
.FIN
.DO Mem.XLoMem>$2000
.DO AUX.S>$2000
.LIST ON
* ERROR:AUX too big
.LIST OFF

View File

@ -70,7 +70,7 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO
.9 rts
*--------------------------------------
FS.OPEN.ERR pha Save Error Code
jsr FS.CLOSE.REGDIR
jsr FS.MLICLOSE
ldx IO.hFILE Cleanup what MkFD did
lda hFDs-1,x
@ -106,23 +106,6 @@ FS.OPEN.DIR lda #S.FD.T.DIR
sec
.9 rts
*--------------------------------------
FS.CLOSE.REGDIR ldy #S.FD.REG.REF
lda (pFD),y
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
* bcs FS.RTS
.1 ldy #S.FD.REG.IOBUF
lda (pFD),y
beq .8
jmp K.FreeMem
.8 clc
rts
*--------------------------------------
FS.READ.REG ldx #MLIREAD
.HS 2C BIT ABS
*--------------------------------------
@ -206,6 +189,23 @@ FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF
.9
FS.RTS rts
*--------------------------------------
FS.MLICLOSE ldy #S.FD.REG.REF
lda (pFD),y
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
* bcs FS.RTS
.1 ldy #S.FD.REG.IOBUF
lda (pFD),y
beq .8
jmp K.FreeMem
.8 clc
rts
*--------------------------------------
FS.Stat bit A2osX.FSID
bmi FS.Stat.FX

View File

@ -84,7 +84,7 @@ SLISTX.GetData jsr SLISTX.Select
.3 bit SLISTX.bStr
bmi .4 String mode : until CR
inc SLISTX.nBufCnt
bne .4
@ -126,7 +126,7 @@ SLISTX.AddData jsr SLISTX.Select
jsr SLISTX.SkipKey
jsr SLISTX.CheckLen
ldy iByte
lda (DBlkPtr),y
pha
@ -156,20 +156,20 @@ SLISTX.AddData jsr SLISTX.Select
sta ZPSListDataLen+1
sec
.1 inc ZPSListDataLen
bne .2
inc ZPSListDataLen+1
beq .8
.2 jsr SHARED.FORPNTgn
bcc .3
jsr BLISTX.SetBlkByte override ending 0, already allocated
clc
bra .1
.3 jsr BLISTX.AddByte
bcc .1
rts
@ -198,13 +198,13 @@ SLISTX.SetData jsr SLISTX.Select
txa
eor #$ff
sta SLISTX.nDataCnt+1
.1 inc SLISTX.nDataCnt
bne .2
inc SLISTX.nDataCnt+1
beq .8
.2 jsr SHARED.FORPNTgn
jsr BLISTX.SetBlkByte
bra .1
@ -222,27 +222,29 @@ SLISTX.CheckLen lda ZPSListDataLen
tax ldx #0
tay ldy #0
lda FORPNT+1
pha
.1 jsr SHARED.FORPNTgY
beq .2
iny
bne .1
inc FORPNT+1
inx
bra .1
.2 iny add Ending \0
bne .3
inx
.3 sty ZPSListDataLen
stx ZPSListDataLen+1
pla
sta FORPNT+1
@ -253,23 +255,23 @@ SLISTX.GetByID jsr SLISTX.Select
jsr BLISTX.GetNByte
tax
beq .9
ldy #0
.1 phy
jsr BLISTX.GetNByte
ply
jsr SHARED.FORPNTpn
iny
dex
bne .1
txa lda #0
jsr SHARED.FORPNTpn ending \0
jsr BLISTX.GetNByte ScopeID lo
jsr SHARED.FORPNTpn
@ -290,7 +292,7 @@ SLISTX.NewKey jsr SLISTX.Lookup
>LDYA KeyID
>STYA SLISTX.KeyID End of list
lda SLISTX.KeyLen
jsr BLISTX.SetBlkByte override ending 0, already allocated
@ -323,9 +325,9 @@ SLISTX.NewKey jsr SLISTX.Lookup
lda #0 Ending Len = 0
jsr BLISTX.AddByte
bcc SLISTX.8
rts
.99 lda #E.DUPKEY
sec
.9 rts
@ -338,9 +340,9 @@ SLISTX.8 >LDYA SLISTX.KeyID
SLISTX.Lookup jsr K.GetMemPtr
>STYA IBlkPtr
lda (IBlkPtr)
lda (IBlkPtr)
sta SLISTX.Opt
stz iByte
ldy #1
@ -358,19 +360,19 @@ SLISTX.Lookup jsr K.GetMemPtr
jsr SLISTX.IsIDValid
bcc .1
.2 sty SLISTX.KeyLen
.3 >LDYA KeyID
>STYA SLISTX.KeyID
ldy iByte
lda (DBlkPtr),y
beq .9
cmp SLISTX.KeyLen
bne .6
jsr BLISTX.GetNByte Skip Len
ldy #0
@ -379,9 +381,9 @@ SLISTX.Lookup jsr K.GetMemPtr
jsr BLISTX.GetNByte
sta .5+1
ply
jsr SHARED.TXTPTRgY
.5 cmp #$ff SELF MODIFIED
bne .6
@ -392,15 +394,15 @@ SLISTX.Lookup jsr K.GetMemPtr
jsr SLISTX.GetDataLen Get Scope
cmp FORPNT+1
bne .6
lda FORPNT
cmp SLISTX.DataLen
beq SLISTX.8
.6 >LDYA SLISTX.KeyID
jsr SLISTX.Select.I move back...
jsr SLISTX.SkipKey
jsr SLISTX.SkipKey
jsr SLISTX.SkipData
bra .3
@ -439,7 +441,7 @@ SLISTX.SkipKey ldy iByte
.8 rts
*--------------------------------------
SLISTX.SkipData jsr SLISTX.GetDataLen
lda SLISTX.DataLen
ldx SLISTX.DataLen+1
SLISTX.SkipDataAX
@ -464,20 +466,20 @@ SLISTX.GetDataLen
rts
*--------------------------------------
SLISTX.IsIDValid
bit SLISTX.Opt
bit SLISTX.Opt SL..
bpl .2
cmp #'.'
beq .8
.1 bit SLISTX.Opt
.1 bit SLISTX.Opt SL._
.2 bvc .3
cmp #'_'
beq .8
.3 jmp SHARED.IsDigitOrL
.8 clc
rts
*--------------------------------------

View File

@ -70,8 +70,8 @@ UNISTD.Close lda (pFD) #S.FD.T
tax
jmp (.1,x)
.1 .DA FS.CLOSE.REGDIR
.DA FS.CLOSE.REGDIR
.1 .DA FS.MLICLOSE
.DA FS.MLICLOSE
.DA DEV.CLOSE
.DA DEV.CLOSE
.DA STDIO.IOERR LNK

View File

@ -39,9 +39,6 @@ MAIN.B .PH $1000
.INB usr/src/sys/kernel.s.pft
.INB usr/src/sys/kernel.s.fs
.INB usr/src/sys/kernel.s.mathf
.LIST ON
MAIN.E .EQ *
.LIST OFF
.EP
MAIN.S .EQ *-MAIN.B