Kernel 0.9.1 : ASM rewrite....Macros

This commit is contained in:
Rémy GIBERT 2018-01-29 16:48:07 +00:00
parent 3dc0e991f5
commit ad0d14982f
11 changed files with 253 additions and 127 deletions

View File

@ -293,6 +293,7 @@ Create a new copy of this C-String
## Out:
+ A = Key Length
+ X,Y = KeyID
# SListLookup
@ -313,7 +314,7 @@ Create a new copy of this C-String
+ PUSHW = Data Ptr (KEY+DATA)
## Out:
+ Y,A = Next ID
+ X,Y = Next KeyID
# SListUpdateByID

Binary file not shown.

Binary file not shown.

View File

@ -138,7 +138,7 @@ DIR.ED clc
DIR.EL clc
rts
*---------------------------------------
DIR.EM lda #ERR.INV.MACRO.DEF
DIR.EM lda #ERR.MACRO.INV.DEF
sec
rts
*---------------------------------------
@ -267,7 +267,7 @@ DIR.LI.ON ldy #ASM.LI.ON
bra DIR.LI.APPLY
DIR.LI.OFF ldy #ASM.LI.ON
clc
DIR.LI.APPLY lsr
DIR.LI.APPLY asl
sta (pData),y
clc
@ -277,63 +277,26 @@ DIR.LI.9 lda #ERR.SYNTAX.ERROR
sec
rts
*---------------------------------------
DIR.MA jsr SRC.GetNextCharNB
bcs .9
.1 jsr FIO.ReadLine
bcs .99
jsr SRC.PrintLine
lda SRC.GetChar
beq .1
cmp #'*' Comment?
beq .8
cmp #';' Comment?
beq .8
cmp #' ' no label...go scan dir/opcode
beq .3
DIR.MA >LDA.G MAC.bAdd
bmi .9
.2 jsr SRC.GetNextChar skip label
bcs .8
cmp #' '
bne .2
.3 jsr SRC.GetNextCharNB Scan for an Opcode...
bcs .8
cmp #'.'
>LDA.G ASM.PASS If Pass#2, ignore
bne .8
jsr SRC.GetNextChar
bcs .8
cmp #'E'
bne .8
jsr SRC.GetNextChar
bcs .8
cmp #'M'
bne .8
clc
rts
.8 >LDA.G ASM.PASS If Pass#2, ignore
bne .1
jsr SRC.GetNextCharNB
beq DIR.OP.SYNERR
jsr MAC.Clear
.8 lda #$ff
>STA.G MAC.bAdd
bra .1
clc
rts
.9 lda #ERR.INV.MACRO.DEF
.9 lda #ERR.MACRO.INV.DEF
sec
.99 rts
rts
*---------------------------------------
DIR.OP jsr SRC.GetNextCharNB
beq DIR.OP.SYNERR

View File

@ -35,12 +35,15 @@ FIO.LOAD.ASM.T >STYA ZPPtr2
ldy #$ff
.3 iny
.2 iny
inx
lda (ZPPtr2),y
jsr SRC.IsLetterOrDigit
bcs .3
sta ASM.T.FILENAME,x
bne .3
bra .2
.3 stz ASM.T.FILENAME,x
ldy #ASM.T.hMem
lda (pData),y
beq .4
@ -123,7 +126,7 @@ FIO.OpenFile >STYA ZPPtr1
lda FIO.Stat+S.STAT.P.TYPE
cmp #$04 TXT ?
bne .2
>PUSHWI 0
>PUSHBI 4
>PUSHBI SYS.FOpen.R+SYS.FOpen.T
@ -149,7 +152,6 @@ FIO.OpenFile >STYA ZPPtr1
pla
sta (pData),y
ldy #SRC.COUNT
lda (pData),y
clc
@ -163,6 +165,12 @@ FIO.OpenFile >STYA ZPPtr1
lda (pData),y
inc
sta (pData),y
lda #0
>STA.G SRC.LINENUM
iny
sta (pData),y
clc
rts
@ -181,14 +189,24 @@ FIO.ReadLine >LDYA ZPLineBuf
tay
lda (pData),y
bmi .10
>PUSHW ZPLineBuf
>PUSHWI 256
jsr FIO.ReadFromFile
bcs .19
tya
beq .13
dey
lda #0 replace ending $0D with $00
sta (ZPLineBuf),y
.13 sta (ZPLineBuf),y
>INC.G SRC.LINENUM
bne .19
>INC.G SRC.LINENUM+1
.19 rts
*---------------------------------------
.10 >PUSHW ZPTmpBuf
@ -198,10 +216,12 @@ FIO.ReadLine >LDYA ZPLineBuf
ldy #1
lda (ZPTmpBuf),y
sta SRC.LINENUM
pha
iny
lda (ZPTmpBuf),y
sta SRC.LINENUM+1
>STA.G SRC.LINENUM+1
pla
>STA.G SRC.LINENUM
lda (ZPTmpBuf) LEN
sec

View File

@ -19,7 +19,7 @@ MAC.Init >SYSCALL SListNew
*---------------------------------------
MAC.Quit >LDA.G MAC.hBuf
beq .1
>SYSCALL FreeMem.A
.1 >LDA.G MAC.hMacros
@ -29,6 +29,35 @@ MAC.Quit >LDA.G MAC.hBuf
.8 clc
rts
*---------------------------------------
MAC.Clear lda #0
tay
.1 sta (ZPMacroBuf),y
iny
bne .1
rts
*---------------------------------------
MAC.AddChar tax
lda (ZPMacroBuf)
cmp #254
beq .9 CS if EQ
inc
sta (ZPMacroBuf)
tay
txa
sta (ZPMacroBuf),y
clc
.9 rts
*---------------------------------------
MAC.Store clc
rts
*---------------------------------------
MAN
SAVE /A2OSX.BUILD/BIN/DEV/ASM.S.MAC
LOAD /A2OSX.BUILD/BIN/DEV/ASM.S

View File

@ -13,7 +13,7 @@ SRC.PrintLine >LDA.G ASM.MACRO.ON
bpl .9
.8 >PUSHW ZPLineBuf
>PUSHW SRC.LINENUM
>PUSHW.G SRC.LINENUM
ldy #ASM.PC+1
>PUSHB (pData),y
dey
@ -53,11 +53,7 @@ SRC.PrintLineErr >PUSHW ZPLineBuf
.9 rts
*---------------------------------------
SRC.ParseLine lda #0
sta (ZPLocalBuf)
>STA.G SYM.bGlobal
jsr SRC.GetChar
SRC.ParseLine jsr SRC.GetChar
bcs .8
cmp #'*' Comment?
@ -65,6 +61,111 @@ SRC.ParseLine lda #0
cmp #';' Comment?
beq .8
>LDA.G MAC.bAdd
bmi SRC.ParseLine.MACRO
jmp SRC.ParseLine.LABEL
.8 clc
rts
SRC.ParseLine.Macro >LDA.G ASM.PASS If Pass#2, ignore
bne .8
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 .99
lda (ZPLinePtr) get back non blank char
bra .2
.1 jsr MAC.AddChar
bcs .99
jsr SRC.GetNextChar
bcs .8
cmp #' '
bne .1
jsr MAC.AddChar
bcs .99
jsr SRC.GetNextCharNB
bcs .8
.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 jsr MAC.Store
bcs SRC.ParseLine.RTS
lda #0
>STA.G MAC.bAdd
.8 clc
rts
.3 lda (ZPLinePtr)
.4 jsr MAC.AddChar
bcs .99
jsr SRC.GetNextChar
bcs .8
cmp #' '
bne .4
jsr SRC.GetNextChar
bcs .8
cmp #' '
beq .8 Comments...
.5 jsr MAC.AddChar Store ARG....
bcs .99
jsr SRC.GetNextChar
bcs .8
cmp #' '
bne .5
lda #0
jsr MAC.AddChar End of Line
clc
rts
.99 lda #ERR.MACRO.TOO.BIG
sec
SRC.ParseLine.RTS rts
*---------------------------------------
SRC.ParseLine.LABEL lda #0
sta (ZPLocalBuf)
>STA.G SYM.bGlobal
jsr SRC.GetChar
cmp #' ' no label...go scan dir/opcode
beq SRC.ParseLine.DirOp
@ -84,12 +185,9 @@ SRC.ParseLine lda #0
beq SRC.ParseLine.InvLbl .0 is not allowed
jsr SYM.AddLocalPC
bcs .9
bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp
.8 clc
.9 rts
.1 lda #$ff
>STA.G SYM.bGlobal
@ -111,10 +209,10 @@ SRC.ParseLine lda #0
.2 jsr SYM.UpdateGlobal
bra SRC.ParseLine.DirOp
.3 jsr SYM.LookupGlobal Pass #2: shoould be already defined...
.3 jsr SYM.LookupGlobal Pass #2: should be already defined...
bcs SRC.ParseLine.Undef
jsr SYM.UpdateGlobal
jsr SYM.UpdateGlobalPC
*---------------------------------------
SRC.ParseLine.DirOp jsr SRC.GetNextCharNB Scan for an Opcode...
@ -133,7 +231,7 @@ SRC.ParseLine.DirOp jsr SRC.GetNextCharNB Scan for an Opcode...
.5 cmp #'>'
bne .6
jsr SRC.ParseLine.Macro
jsr SRC.ParseLine.ExecMacro
bcs SRC.ParseLine.Err
bra SRC.ParseLine.Ok
@ -167,13 +265,9 @@ SRC.ParseLine.Dir >LDYA L.T.DIRECTIVES
jmp (J.DIRECTIVES,x)
*---------------------------------------
SRC.ParseLine.Macro >LDA.G ASM.PASS
bne .1
SRC.ParseLine.ExecMacro
.1
clc
rts
*---------------------------------------

View File

@ -53,18 +53,29 @@ SYM.Quit >LDA.G SYM.hLocalBuf
.8 clc
rts
*---------------------------------------
SYM.Dump >LDYA L.MSG.SYMBOLS
>SYSCALL PrintF.YA
stz ZPLinePtr
SYM.Dump stz ZPLinePtr
stz ZPLinePtr+1
>LDA.G ASM.LI.ON
bpl .1
>LDYA L.MSG.SYMBOLS
>SYSCALL PrintF.YA
.1 >PUSHB.G SYM.hGlobals
>PUSHW ZPLinePtr
>PUSHW ZPTmpBuf
>SYSCALL SListGetByID
pha
txa
sta ZPLinePtr
tya
sta ZPLinePtr+1
pla
bcs .8
>STYA ZPLinePtr
>LDA.G ASM.LI.ON
bpl .1
>PUSHW ZPTmpBuf Label (PString)
@ -94,25 +105,7 @@ SYM.Dump >LDYA L.MSG.SYMBOLS
.8 clc
rts
*---------------------------------------
SYM.AddGlobalPC ldx #4
ldy #ASM.PC
.1 lda (pData),y
pha
iny
dex
bne .1
ldx #4
ldy #SYM.Global+SYM.V+3
.2 pla
sta (pData),y
dey
dex
bne .2
SYM.AddGlobalPC jsr SYM.PC2Global
lda #SYM.F.RESOLVED
*---------------------------------------
@ -134,14 +127,16 @@ SYM.AddGlobal >STA.G SYM.Global+SYM.F
bcc .1
inc ZPLinePtr+1
clc
.1 tya
.1 clc
.HS B0 BCS
.9 sec
tya
>STA.G SYM.ID+1
dey
txa
sta (pData),y
.9 rts
rts
*---------------------------------------
SYM.LookupGlobal >PUSHB.G SYM.hGlobals
>PUSHW ZPLinePtr
@ -163,6 +158,9 @@ SYM.LookupGlobal >PUSHB.G SYM.hGlobals
.9 rts
*---------------------------------------
SYM.UpdateGlobalPC jsr SYM.PC2Global
bra SYM.UpdateGlobal
*---------------------------------------
SYM.UpdateGlobalAcc ldx #3
ldy #SYM.Global+SYM.V+3
@ -186,6 +184,27 @@ SYM.UpdateGlobal lda #SYM.F.RESOLVED
>SYSCALL SListUpdateByID
rts
*---------------------------------------
SYM.PC2Global ldx #4
ldy #ASM.PC
.1 lda (pData),y
pha
iny
dex
bne .1
ldx #4
ldy #SYM.Global+SYM.V+3
.2 pla
sta (pData),y
dey
dex
bne .2
rts
*---------------------------------------
SYM.AddLocalPC tax Save ID
>LDA.G SYM.LocalIndex

View File

@ -54,7 +54,8 @@ ERR.TOO.MANY.DO .EQ $AC
ERR.TOO.MANY.LOCAL .EQ $AD
ERR.MISSING.EXP .EQ $B0
ERR.EXP.SYN.ERROR .EQ $B1
ERR.INV.MACRO.DEF .EQ $E0
ERR.MACRO.INV.DEF .EQ $E0
ERR.MACRO.TOO.BIG .EQ $E1
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
@ -253,7 +254,7 @@ CS.RUN >SYSCALL GetChar
rts
.1 jsr SYM.Dump
>PUSHW ZPLinePtr
>LDYA L.MSG.SUMMARY
>SYSCALL PrintF.YA
@ -261,11 +262,11 @@ CS.RUN >SYSCALL GetChar
.99 sec
rts
.2 jsr SRC.PrintLine
jsr SRC.ParseLine
.2 jsr SRC.ParseLine
bcs .9
jsr SRC.PrintLine
.8 clc
rts
@ -274,7 +275,7 @@ CS.RUN >SYSCALL GetChar
pla
pha
>PUSHA
>PUSHW SRC.LINENUM
>PUSHW.G SRC.LINENUM
>LDYA L.MSG.ERROR
>SYSCALL PrintF.YA
pla
@ -381,7 +382,7 @@ MSG.LINECR >CSTR "%s\r\n"
MSG.ERROR >CSTR "%05D-Error:$%h\r\n"
MSG.SYMBOLS >CSTR "Symbol Table:\r\n"
MSG.GSYMBOL >CSTR "$%h%h%h%h:%S\r\n"
MSG.SUMMARY >CSTR "\r\nEnd Of Assembly.\r\n"
MSG.SUMMARY >CSTR "\r\nSymbol Table Size : %5D Bytes.\r\nEnd Of Assembly.\r\n"
SRC.AM.RESERVED >PSTR "[](),"
SRC.MOD.RESERVED >PSTR "#/<>"
SRC.EXP.RESERVED >PSTR "^!|&<=>+-*/"
@ -394,7 +395,6 @@ FIO.Stat .BS S.STAT
EXP.Operator .BS 1
EXP.Modifier .BS 1
SRC.LINENUM .BS 2
SRC.Keyword.ID .BS 1
SRC.ACC .BS 4
SRC.ACCTMP .BS 4
@ -419,6 +419,7 @@ DST.hFILENAME .BS 1
DST.hREFNUM .BS 1
DST.hBUFFER .BS 1
DST.hFILETYPE .BS 1
SRC.LINENUM .BS 2
ASM.T.hMem .BS 1
@ -449,6 +450,7 @@ SYM.Lookup .BS 6
MAC.hMacros .BS 1
MAC.hBuf .BS 1
MAC.bAdd .BS 1
DS.END .ED
*---------------------------------------

View File

@ -517,7 +517,7 @@ K.SListLookup
* PUSHW = KeyID
* PUSHW = Data Ptr (KEY+DATA)
* ## Out:
* Y,A = Next ID
* X,Y = Next KeyID
*\--------------------------------------
K.SListGetByID
*/--------------------------------------

View File

@ -53,16 +53,16 @@ SLIST.Add jsr SLIST.Search
dex
bne .4
.8 lda #$ff SELF MODIFIED
.8 lda #$ff SELF MODIFIED
clc
.HS B0 BCS
.99 sec
ldx SLIST.ID
ldy SLIST.ID+1
clc
.9 rts
.99 ldx SLIST.ID
ldy SLIST.ID+1
sec
rts
.9 rts
*--------------------------------------
SLIST.Lookup jsr SLIST.Search
@ -120,13 +120,11 @@ SLIST.GetByID jsr SLIST.Select
jsr SLIST.GetNextBlockByte
lda SLIST.IndexOfs
ldy SLIST.BlockOfs
clc
rts
.HS B0 BCS
.9 sec
ldx SLIST.BlockOfs
ldy SLIST.IndexOfs
rts
*--------------------------------------
SLIST.UpdateByID