Kernel 0.93

This commit is contained in:
Rémy GIBERT 2019-03-19 16:52:08 +00:00
parent 0e2ae89b97
commit 4d8432082a
9 changed files with 157 additions and 191 deletions

Binary file not shown.

View File

@ -287,24 +287,13 @@ DIR.EP >LDA.G ASM.PH.ON
DIR.SE sec DIR.SE sec
.HS 90 BCC .HS 90 BCC
*--------------------------------------- *---------------------------------------
DIR.EQ clc DIR.EQ >LDA.G SYM.bNewGlobal
bpl .99
lda (ZPGlobalBuf)
beq .99
ror
>STA.G OUT.bEquate
jsr SRC.GetNextCharNB jsr SRC.GetNextCharNB
bcs .99 bcs .99
jsr EXP.Eval jmp EXP.Eval
bcs .9
jsr SYM.Acc2Global
bcs .9
jmp SYM.FlushGlobal
.99 lda #ERR.SYNTAX.ERROR .99 lda #ERR.SYNTAX.ERROR
sec sec

View File

@ -185,8 +185,8 @@ OUT.Print1 >DEC.G OUT.LineCnt
lda #20 lda #20
sta (pData),y sta (pData),y
lda #$80 lda #$80
>STA.G bPause >STA.G bPause
.8 rts .8 rts
*--------------------------------------- *---------------------------------------

View File

@ -24,10 +24,16 @@ SRC.ParseLine jsr OUT.Reset
.1 >LDA.G ASM.MA.ON .1 >LDA.G ASM.MA.ON
bmi SRC.ParseLine.MACRO bmi SRC.ParseLine.MACRO
jmp SRC.ParseLine.LABEL jsr SRC.ParseLine.LABEL
bcs .9
>LDA.G SYM.bNewGlobal
bpl .8
jmp SYM.StoreGlobal
.8 clc .8 clc
rts .9 rts
*--------------------------------------- *---------------------------------------
SRC.ParseLine.Macro SRC.ParseLine.Macro
>LDA.G ASM.PASS If Pass#2, ignore >LDA.G ASM.PASS If Pass#2, ignore
@ -136,8 +142,8 @@ SRC.ParseLine.LABEL
cmp #'.' local symbol? cmp #'.' local symbol?
bne .1 bne .1
lda (ZPGlobalBuf) Not relative to Global label... >LDA.G SYM.bNewGlobal Not relative to Global label...
beq SRC.ParseLine.InvLbl bpl SRC.ParseLine.InvLbl
jsr SRC.GetNextChar jsr SRC.GetNextChar
bcs SRC.ParseLine.InvLbl bcs SRC.ParseLine.InvLbl
@ -155,10 +161,7 @@ SRC.ParseLine.LABEL
bcs SRC.ParseLine.RTS bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp bra SRC.ParseLine.DirOp
.1 jsr SYM.FlushGlobal Close & store Previous Global .1 jsr SYM.NewOrGetGlobal
bcs SRC.ParseLine.RTS
jsr SYM.NewOrGetGlobal
bcs SRC.ParseLine.RTS bcs SRC.ParseLine.RTS
*--------------------------------------- *---------------------------------------
SRC.ParseLine.DirOp SRC.ParseLine.DirOp

View File

@ -46,8 +46,7 @@ SYM.Init >SYSCALL SListNew
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SYM.Reset lda #0 SYM.Reset >STZ.G SYM.bNewGlobal
sta (ZPGlobalBuf)
rts rts
*--------------------------------------- *---------------------------------------
SYM.Quit >LDA.G SYM.hLookupBuf SYM.Quit >LDA.G SYM.hLookupBuf
@ -71,8 +70,8 @@ SYM.Quit >LDA.G SYM.hLookupBuf
.8 clc .8 clc
rts rts
*--------------------------------------- *---------------------------------------
SYM.Dump stz ZPLinePtr SYM.Dump stz ZPPtr2
stz ZPLinePtr+1 stz ZPPtr2+1
>LDA.G ASM.LI.ON >LDA.G ASM.LI.ON
bpl .1 bpl .1
@ -81,7 +80,7 @@ SYM.Dump stz ZPLinePtr
>SYSCALL puts >SYSCALL puts
.1 >PUSHW ZPNameBuf .1 >PUSHW ZPNameBuf
>PUSHW ZPLinePtr >PUSHW ZPPtr1
>LDA.G SYM.hGlobalList >LDA.G SYM.hGlobalList
>SYSCALL SListGetByID >SYSCALL SListGetByID
bcc .10 bcc .10
@ -89,10 +88,24 @@ SYM.Dump stz ZPLinePtr
clc clc
rts rts
.10 >STYA ZPLinePtr Save Next ID .10 >STYA ZPPtr2 Save Next ID
>LDA.G ASM.LI.ON >PUSHW ZPNameBuf Label (PString)
bpl .1 >PUSHBI 2
>LDYA L.MSG.PSTR
>SYSCALL printf
bcs .9
>PUSHWI 0 Start
>PUSHWI $ffff End
>PUSHWI 0 Allocate
>PUSHW ZPPtr1
>LDA.G SYM.hGlobalList
>SYSCALL SListGetData
bcs .9
txa
>STA.G hBuf
ldy #SYMG.F Get Symbol Size ldy #SYMG.F Get Symbol Size
lda (ZPGlobalBuf),y lda (ZPGlobalBuf),y
@ -117,11 +130,6 @@ SYM.Dump stz ZPLinePtr
lda L.MSG.EQU0+1,x lda L.MSG.EQU0+1,x
>SYSCALL printf >SYSCALL printf
>PUSHW ZPNameBuf Label (PString)
>PUSHBI 2
>LDYA L.MSG.PSTR
>SYSCALL printf
bcs .9
ldy #SYMG.SIZE ldy #SYMG.SIZE
.4 tya .4 tya
@ -161,43 +169,45 @@ SYM.Dump stz ZPLinePtr
*--------------------------------------- *---------------------------------------
SYM.NewOrGetGlobal SYM.NewOrGetGlobal
>LDA.G ASM.PASS >LDA.G ASM.PASS
bne SYM.GetGlobal Pass #2: should be already defined... bne SYM.GetGlobal
SYM.NewGlobal jsr SYM.LookupGlobal Pass #1; try to add global... SYM.NewGlobal >PUSHW ZPLinePtr Pass #1; try to add global...
bcc .9 Already Defined >LDA.G SYM.hGlobalList
>SYSCALL SListNewKey
jsr SYM.GetName bcs .9 Already Defined
bcs .99 >STYA.G SYM.GlobalID
txa
jsr SYM.PC2Global A=PC Size
lda #SYMG.SIZE
sta (ZPGlobalBuf)
clc
rts
.9 lda #ERR.SYMBOL.REDEF
sec
.99 rts
*---------------------------------------
SYM.GetGlobal >PUSHB.G SYM.hGlobalList
>PUSHW ZPLinePtr
>PUSHW ZPGlobalBuf
>SYSCALL SListLookup
bcs .9
adc ZPLinePtr adc ZPLinePtr
sta ZPLinePtr sta ZPLinePtr
bcc .1 bcc .1
inc ZPLinePtr+1 inc ZPLinePtr+1
clc
.1 tya .1 lda #$ff
>STA.G SYM.GlobalID+1 >STA.G SYM.bNewGlobal
jmp SYM.PC2Acc
.9 lda #ERR.SYMBOL.REDEF
sec
.99 rts
*---------------------------------------
SYM.GetGlobal >PUSHW ZPLinePtr Pass #2: should be already defined...
>LDA.G SYM.hGlobalList
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
txa txa
>STA.G SYM.GlobalID adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1
clc
rts rts
.9 lda #ERR.UNDEF.SYMBOL .9 lda #ERR.UNDEF.SYMBOL
@ -220,107 +230,31 @@ SYM.LookupGlobal
.8 .8
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SYM.FlushGlobal lda (ZPGlobalBuf) SYM.StoreGlobal >LDA.G ASM.PASS
beq .8 bne .8
>LDA.G ASM.PASS
bne .2
>PUSHW ZPNameBuf >PUSHWI 5
>PUSHW ZPGlobalBuf >PUSHW L.SRC.ACC.SIZE
>PUSHW.G SYM.GlobalID >PUSHW.G SYM.GlobalID
>LDA.G SYM.hGlobalList >LDA.G SYM.hGlobalList
>SYSCALL SListAddData >SYSCALL SListAddData
bra .3 bcs .9
.2 >PUSHW ZPGlobalBuf
>PUSHW.G SYM.GlobalID
>LDA.G SYM.hGlobalList
>SYSCALL SListSetData
.3 bcs .9
lda #0
sta (ZPGlobalBuf)
rts rts
.8 clc .8 clc
.9 rts .9 rts
*--------------------------------------- *---------------------------------------
SYM.GetName jsr SRC.GetChar SYM.PC2Acc ldy #ASM.PC+3
bcs .9
ldy #0
.1 jsr SRC.IsLetterOrDigit
bcc .2
cmp #'.'
beq .2
cmp #'_'
bne .8
.2 sta (ZPNameBuf),y
iny
jsr SRC.GetNextChar
bcc .1
.8 lda #0
sta (ZPNameBuf),y
clc
rts
.9 lda #ERR.SYNTAX.ERROR
sec
rts
*---------------------------------------
SYM.PC2Global ldx #4
ldy #ASM.PC
.1 lda (pData),y .1 lda (pData),y
pha sta SRC.ACC,x
iny
dex
bne .1
ldx #4
ldy #SYMG.V+3
.2 pla
sta (ZPGlobalBuf),y
dey dey
dex
bne .2
ldx #4
ldy #ASM.PC+3
.3 lda (ZPGlobalBuf),y
bne .4
dex
dey
bne .3
.4 txa
ldy #SYMG.F
sta (ZPGlobalBuf),y
txa A=PC Size
rts
*---------------------------------------
SYM.Acc2Global ldx #4
ldy #SYMG.F+4
.1 lda SRC.ACC.SIZE,x
sta (ZPGlobalBuf),y
dey
dex
bpl .1 bpl .1
clc lda #4
sta SRC.ACC.SIZE
rts rts
*--------------------------------------- *---------------------------------------
SYM.Lookup2Acc ldy #SYMG.F+4 SYM.Lookup2Acc ldy #SYMG.F+4
@ -346,8 +280,8 @@ SYM.Lookup2Acc ldy #SYMG.F+4
SYM.NewOrGetLocalA SYM.NewOrGetLocalA
tax Save ID tax Save ID
lda (ZPGlobalBuf) not in a global label >LDA.G SYM.bNewGlobal not in a global label
bne .1 bmi .1
lda #ERR.INV.LABEL lda #ERR.INV.LABEL
clc clc

View File

@ -9,6 +9,9 @@ AUTO 4,1
.INB INC/MACROS.I .INB INC/MACROS.I
.INB INC/A2OSX.I .INB INC/A2OSX.I
*--------------------------------------- *---------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .EQ ZPBIN ZPPtr1 .EQ ZPBIN
ZPPtr2 .EQ ZPBIN+2 ZPPtr2 .EQ ZPBIN+2
@ -27,6 +30,7 @@ ZPOpsPtr .EQ ZPBIN+22
ZPOpDefPtr .EQ ZPBIN+24 ZPOpDefPtr .EQ ZPBIN+24
ZPTmpBuf .EQ ZPBIN+26 ZPTmpBuf .EQ ZPBIN+26
ZS.END .ED
*--------------------------------------- *---------------------------------------
* Symbols * Symbols
*--------------------------------------- *---------------------------------------
@ -97,8 +101,8 @@ CS.START cld
.DA #0 .DA #0
.DA CS.END-CS.START CS .DA CS.END-CS.START CS
.DA DS.END-DS.START DS .DA DS.END-DS.START DS
.DA #0 SS .DA #ZS.END-ZS.START Zero Page Size
.DA #32 ZP .DA #64 ZP
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -133,6 +137,7 @@ L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
L.ASM.6502 .DA ASM.6502 L.ASM.6502 .DA ASM.6502
L.ASM.T.FILENAME .DA ASM.T.FILENAME L.ASM.T.FILENAME .DA ASM.T.FILENAME
L.FIO.Stat .DA FIO.Stat L.FIO.Stat .DA FIO.Stat
L.SRC.ACC.SIZE .DA SRC.ACC.SIZE
L.T.DIRECTIVES .DA T.DIRECTIVES L.T.DIRECTIVES .DA T.DIRECTIVES
J.DIRECTIVES .DA DIR.AC J.DIRECTIVES .DA DIR.AC
.DA DIR.AS .DA DIR.AS
@ -313,9 +318,6 @@ CS.RUN ldy #S.PS.hStdIn
lda (pData),y lda (pData),y
bne .8 no continue back to previous file bne .8 no continue back to previous file
jsr SYM.FlushGlobal Store last Symbol, if any....
bcs .9
>LDA.G ASM.PASS End of pass #2 ?? >LDA.G ASM.PASS End of pass #2 ??
bne .1 bne .1
inc inc
@ -324,6 +326,7 @@ CS.RUN ldy #S.PS.hStdIn
rts rts
.1 jsr SYM.Dump .1 jsr SYM.Dump
>PUSHW ZPLinePtr >PUSHW ZPLinePtr
>PUSHBI 2 >PUSHBI 2
>LDYA L.MSG.SUMMARY >LDYA L.MSG.SUMMARY
@ -444,10 +447,10 @@ T.LI >PSTR "ON"
ASM..T. .AZ ".T." ASM..T. .AZ ".T."
ASM.6502 .AZ "6502" 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 .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.PASS .AZ "*** Pass:#%d\r\n" MSG.PASS .AZ "**** Pass:#%d\r\n"
MSG.SRC.FILE .AZ "*** Reading SRC File:%s\r\n" MSG.SRC.FILE .AZ "**** Reading SRC File:%s\r\n"
MSG.OBJ.FILE .AZ "*** Writing OBJ File:%s, Type=%02x\r\n" MSG.OBJ.FILE .AZ "**** Writing OBJ File:%s, Type=%02x\r\n"
MSG.T.FILE .AZ "*** Loading CPU File:%s\r\n" MSG.T.FILE .AZ "**** Loading CPU File:%s\r\n"
MSG.OUT0 .AZ "%H- " MSG.OUT0 .AZ "%H- "
MSG.OUT1 .AZ "%H-%h " MSG.OUT1 .AZ "%H-%h "
MSG.OUT2 .AZ "%H-%h %h " MSG.OUT2 .AZ "%H-%h %h "
@ -538,8 +541,10 @@ SYM.hGlobalList .BS 1
SYM.hNameBuf .BS 1 SYM.hNameBuf .BS 1
SYM.hGlobalBuf .BS 1 SYM.hGlobalBuf .BS 1
SYM.GlobalID .BS 2 SYM.GlobalID .BS 2
SYM.bNewGlobal .BS 1
SYM.hLookupBuf .BS 1 SYM.hLookupBuf .BS 1
SYM.hBuf .BS 1
SYM.LocalID .BS 2 SYM.LocalID .BS 2

View File

@ -113,8 +113,16 @@ CS.INIT
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN >SYSCALL GetChar CS.RUN ldy #S.PS.hStdIn
bcs .10 no char lda (pPS),y
>SYSCALL feof
bcs .99
tay
beq .10
>SYSCALL GetChar
bcs .99
cmp #$03 Ctrl-C cmp #$03 Ctrl-C
beq .92 Abort.... beq .92 Abort....
@ -268,7 +276,7 @@ GetHexFileType ldy #$ff
.10 iny .10 iny
lda (ZPPtr1),y lda (ZPPtr1),y
bne .10 bne .10
cpy #3 cpy #3
bne .9 bne .9
@ -276,25 +284,21 @@ GetHexFileType ldy #$ff
cmp #'0' cmp #'0'
bne .1 bne .1
iny ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'0' jsr IsDigit16
bcc .9
cmp #'9'+1
bcs .9 bcs .9
asl asl
asl asl
asl asl
asl asl
>STA.G HexFileType >STA.G HexFileType
iny
ldy #2
lda (ZPPtr1),y lda (ZPPtr1),y
cmp #'0' jsr IsDigit16
bcc .9
cmp #'9'+1
bcs .9 bcs .9
and #$0F
>ORA.G HexFileType >ORA.G HexFileType
sta (pData),y sta (pData),y
clc clc
@ -334,6 +338,34 @@ GetHexFileType ldy #$ff
cpx #PRODOS.FT.COUNT cpx #PRODOS.FT.COUNT
bne .2 bne .2
.9 sec
rts
*---------------------------------------
IsDigit16 cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'F'+1
bcc .1
cmp #'a'
bcc .9
cmp #'f'+1
bcs .9
eor #$20
.1
* clc
sbc #'A'-11 cc so A->10 (11-CC)
clc
.8 and #$0F
rts
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------

View File

@ -240,6 +240,7 @@ SLIST.NewKey jsr SLIST.Search
bcs .9 bcs .9
>LDYA ZPSListKeyID >LDYA ZPSListKeyID
ldx SLIST.KeyLen
clc clc
rts rts

View File

@ -100,38 +100,40 @@ DRV.TERM.STATUS jsr DRV.TERM.GetIOCTLBufCntDCB
sec sec
rts rts
*-------------------------------------- *--------------------------------------
DRV.TERM.OPEN ldx #0 DEV.ID in A DRV.TERM.OPEN tax DEV.ID in A
.1 ldy A2osX.SCRNDEVS,x jsr DRV.TERM.GetDCB
beq .2
ldy #S.DCB.TTY.STATUS
lda (ZPDCBPtr),y
bit #S.DIB.S.OPENED
beq .1
lda #MLI.E.OPEN
sec
rts
.1 txa
ldx #0
.2 ldy A2osX.SCRNDEVS,x
beq .3
inx inx
cpx #K.SCR.MAX cpx #K.SCR.MAX
bne .1 bne .2
lda #E.OOH lda #E.OOH
sec sec
rts rts
.9 lda #MLI.E.OPEN .3 sta A2osX.SCRNDEVS,x
sec
rts
.2 sta A2osX.SCRNDEVS,x
pha
jsr DRV.TERM.GetDCB
pla
ldy #S.DCB.TTY.DEVID ldy #S.DCB.TTY.DEVID
sta (ZPDCBPtr),y sta (ZPDCBPtr),y
ldy #S.DCB.TTY.STATUS ldy #S.DCB.TTY.STATUS
lda (ZPDCBPtr),y lda (ZPDCBPtr),y
bit #S.DIB.S.OPENED
bne .9
ora #S.DIB.S.OPENED ora #S.DIB.S.OPENED
ora DRV.TERM.DIB+S.DIB.S ora DRV.TERM.DIB+S.DIB.S
sta (ZPDCBPtr),y sta (ZPDCBPtr),y