mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-08 14:07:34 +00:00
9e960a234e
KERNEL: modification for Softcard //e (may help...or not) KERNEL: bugfix for VS/VE drive detetcion and report on KCONFIG CC: some progress on STRUCT & UNION SHARED/PrintF: removed support for /n..... (now in S-C MASM3.1 & A2osX-ASM)
649 lines
10 KiB
Plaintext
649 lines
10 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
*--------------------------------------
|
||
CORE.Init lda #SL._
|
||
>SYSCALL SListNew
|
||
bcs .9
|
||
|
||
>STA.G CC.hDefines
|
||
|
||
lda #SL._
|
||
>SYSCALL SListNew
|
||
bcs .9
|
||
|
||
>STA.G CC.hTags
|
||
|
||
lda #SL._
|
||
>SYSCALL SListNew
|
||
bcs .9
|
||
|
||
>STA.G CC.hScopes
|
||
sty ScopeIdx
|
||
|
||
>LDYAI 256
|
||
>SYSCALL GetMem
|
||
bcs .9
|
||
|
||
>STYA ZPSymBufPtr
|
||
txa
|
||
>STA.G CC.hSymBuf
|
||
|
||
>LDYAI 256
|
||
>SYSCALL GetMem
|
||
bcs .9
|
||
|
||
>STYA ZPCCStack
|
||
txa
|
||
>STA.G CC.hStack
|
||
|
||
lda #CC.LookupIdx
|
||
tay
|
||
sta (pData),y
|
||
|
||
* clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
CORE.Quit jsr CC.FIO.FClose
|
||
bne CORE.Quit
|
||
|
||
ldy ScopeIdx
|
||
beq .1
|
||
|
||
.10 lda (pData),y
|
||
|
||
>SYSCALL SListFree
|
||
|
||
ldy ScopeIdx
|
||
cpy #CC.hScopes
|
||
beq .1
|
||
|
||
dec ScopeIdx
|
||
dey
|
||
bra .10
|
||
|
||
.1 >LDA.G CC.hTags
|
||
beq .2
|
||
|
||
>SYSCALL SListFree
|
||
|
||
.2 >LDA.G CC.hDefines
|
||
beq .4
|
||
|
||
>SYSCALL SListFree
|
||
|
||
.4 >LDA.G CC.hDefineBuf
|
||
jsr .7
|
||
|
||
>LDA.G CC.hSymBuf
|
||
jsr .7
|
||
|
||
.5 jsr CC.SYM.LookupFree
|
||
bcc .5
|
||
|
||
>LDA.G CC.hStack
|
||
|
||
.7 beq .8
|
||
|
||
>SYSCALL FreeMem
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
CC.CompileFile >SLEEP
|
||
|
||
ldy #S.PS.hStdIn
|
||
lda (pPS),y
|
||
>SYSCALL FEOF
|
||
bcs .9
|
||
|
||
tay
|
||
bne .1
|
||
|
||
>SYSCALL GetChar
|
||
bcs .9 I/O err
|
||
|
||
cmp #3 Ctrl-C
|
||
beq .9
|
||
|
||
.1 jsr CC.FIO.FGetS
|
||
bcs .9
|
||
|
||
jsr CC.CompileLine
|
||
bcs .9
|
||
|
||
>LDA.G bDebug
|
||
bpl CC.CompileFile
|
||
|
||
jsr PrintDebugMsg
|
||
|
||
bra CC.CompileFile
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.CompileLine jsr CC.GetCharNB
|
||
bcs .9
|
||
|
||
cmp #C.CR EOL....
|
||
beq .8
|
||
|
||
cmp #'#' directive ?
|
||
bne .1
|
||
|
||
jmp CC.DIR
|
||
|
||
.1 cmp #'/'
|
||
bne .2 comments ...
|
||
|
||
jmp CC.Comments
|
||
|
||
.2 cmp #'}' End of CPStmt ?
|
||
bne .3
|
||
|
||
jsr CC.GetNextCharNB Skip '}'
|
||
|
||
jsr CC.STMT.CPStmt.END
|
||
bcs .9
|
||
|
||
bra CC.CompileLine
|
||
|
||
.3 cmp #';' End of Stmt ?
|
||
bne .4
|
||
|
||
jsr CC.GetNextCharNB Skip ';'
|
||
|
||
jsr CC.STMT.Stmt.END
|
||
bcs .9
|
||
|
||
bra CC.CompileLine
|
||
|
||
.4 jsr CC.CompileStmt
|
||
bcs .9
|
||
|
||
bra CC.CompileLine
|
||
|
||
.8 clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
* keyword : for, while ....
|
||
*--------------------------------------
|
||
CC.CompileStmt >LDYA L.CC.KW
|
||
jsr CC.LookupID
|
||
bcs .1 not an internal CC keyword....
|
||
|
||
txa
|
||
>STA.G CC.CmdSave
|
||
jmp (J.CC.KW,x)
|
||
*--------------------------------------
|
||
* Declaration : typedef, type var or type func()
|
||
*--------------------------------------
|
||
.1 >LDYA L.CC.SCSPEC
|
||
jsr CC.LookupID
|
||
bcs .2
|
||
|
||
jmp (J.CC.SCSPEC,x)
|
||
|
||
.2 >LDYA L.CC.TYPEQUAL
|
||
jsr CC.LookupID
|
||
bcs .3
|
||
|
||
jmp CC.DECL
|
||
*--------------------------------------
|
||
* Statement : ++var, var=, func();
|
||
*--------------------------------------
|
||
.3 jmp CC.STMT
|
||
*--------------------------------------
|
||
.99 lda #E.CSYN
|
||
sec
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.Comments jsr CC.GetNextChar TODO : /* ... */
|
||
cmp #'/'
|
||
bne .90
|
||
|
||
jmp CC.SkipLine skip line.....
|
||
|
||
.90 lda #E.CSYN
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CC.SkipLine jsr CC.GetNextChar
|
||
bcs .9
|
||
|
||
cmp #C.CR
|
||
bne CC.SkipLine
|
||
|
||
clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.LookupID >STYA ZPLookupPtr
|
||
jsr CC.GetIDLen
|
||
bra CC.Lookup
|
||
|
||
CC.LookupAOP >LDYA L.CC.AOPS
|
||
>STYA ZPLookupPtr
|
||
|
||
ldy #$ff
|
||
|
||
.1 iny
|
||
lda (ZPLineBufPtr),y
|
||
sec
|
||
beq .9
|
||
|
||
jsr CC.IsOPChar
|
||
bcs .9
|
||
|
||
cmp #'='
|
||
bne .1
|
||
|
||
iny
|
||
|
||
.8 tya
|
||
bra CC.Lookup
|
||
|
||
.9 rts
|
||
|
||
CC.LookupOP >STYA ZPLookupPtr
|
||
jsr CC.GetOPLen
|
||
|
||
CC.Lookup phy Y = len
|
||
ldx #0
|
||
|
||
.1 lda (ZPLookupPtr)
|
||
beq .9 Ending 0, not found....
|
||
|
||
pla
|
||
pha Get Back Len
|
||
cmp (ZPLookupPtr) Same Len ?
|
||
bne .4
|
||
|
||
tay
|
||
.2 lda (ZPLookupPtr),y
|
||
|
||
.3 dey
|
||
cmp (ZPLineBufPtr),y
|
||
bne .4
|
||
|
||
tya
|
||
bne .2
|
||
|
||
pla Found keyword...
|
||
jsr CC.SkipA ..advance Ptr to char after it..
|
||
|
||
lda ZPLookupPtr
|
||
sec
|
||
adc (ZPLookupPtr)
|
||
tay
|
||
lda ZPLookupPtr+1
|
||
adc #0
|
||
clc Y,A = F() def, X = F() index
|
||
rts
|
||
|
||
.4 inx
|
||
inx
|
||
lda (ZPLookupPtr)
|
||
jsr CC.ZPLookupPtrAddAp1
|
||
bra .1
|
||
|
||
.9 ldx #$FF
|
||
pla
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CC.ZPLookupPtrAddAp1
|
||
sec
|
||
adc ZPLookupPtr
|
||
sta ZPLookupPtr
|
||
bcc .1
|
||
|
||
inc ZPLookupPtr+1
|
||
.1 rts
|
||
*--------------------------------------
|
||
CC.GetDefine >LDA.G CC.hDefines
|
||
jsr CC.SListLookup
|
||
bcs .9
|
||
|
||
>LDYA ZPLineBufPtr
|
||
>STYA.G CC.SaveDefine
|
||
|
||
txa
|
||
>STA.G CC.hDefineBuf
|
||
|
||
>SYSCALL GetMemPtr
|
||
>STYA ZPLineBufPtr
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.SListLookup >PUSHA hSList
|
||
>PUSHA ...for SListGetData
|
||
>PUSHW ZPLineBufPtr
|
||
>SYSCALL SListLookup
|
||
bcs .99
|
||
|
||
>PUSHA KeyID.HI
|
||
tya
|
||
>PUSHA KeyID.LO
|
||
|
||
jsr CC.SkipX
|
||
|
||
>PUSHWZ allocate
|
||
>PUSHWI 65535 all
|
||
>PUSHWZ From Start
|
||
>SYSCALL SListGetData
|
||
|
||
.9 rts Y,A = SymSize, X = hSymBuf
|
||
|
||
.99 inc pStack discard extra hSList
|
||
rts
|
||
*--------------------------------------
|
||
* CT Stack
|
||
*--------------------------------------
|
||
CC.PushTQ ldy #SYM.Q
|
||
lda (ZPSymBufPtr),y
|
||
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
|
||
jsr CC.Push
|
||
bcs CC.Push.RTS
|
||
|
||
lda (ZPSymBufPtr) SYM.T
|
||
bra CC.Push
|
||
*--------------------------------------
|
||
CC.PushCS lda ZPCCCode+1
|
||
jsr CC.Push
|
||
bcs CC.Push.RTS
|
||
|
||
lda ZPCCCode
|
||
*--------------------------------------
|
||
CC.Push ldy CStackPtr
|
||
dey
|
||
beq .9
|
||
|
||
sty CStackPtr
|
||
|
||
sta (ZPCCStack),y
|
||
clc
|
||
rts
|
||
|
||
.9 lda #E.STKOVERFLOW
|
||
sec
|
||
CC.Push.RTS rts
|
||
*--------------------------------------
|
||
CC.PopYA ldy CStackPtr
|
||
beq .9
|
||
|
||
lda (ZPCCStack),y
|
||
pha
|
||
|
||
iny
|
||
beq .90
|
||
|
||
lda (ZPCCStack),y
|
||
|
||
iny
|
||
sty CStackPtr
|
||
|
||
ply
|
||
|
||
clc
|
||
rts
|
||
|
||
.90 pla
|
||
.9 lda #E.STACKERROR
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CC.Pop jsr CC.Get
|
||
|
||
inc CStackPtr
|
||
|
||
* clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.Get ldy CStackPtr
|
||
beq .9
|
||
|
||
lda (ZPCCStack),y
|
||
|
||
clc
|
||
rts
|
||
|
||
.9 lda #E.STACKERROR
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
* ZPLineBufPtr related Subs.....
|
||
*--------------------------------------
|
||
CC.SkipX txa
|
||
CC.SkipA clc
|
||
adc ZPLineBufPtr
|
||
sta ZPLineBufPtr
|
||
bcc .8
|
||
|
||
inc ZPLineBufPtr+1
|
||
|
||
.8 rts
|
||
*--------------------------------------
|
||
CC.GetOPLen ldy #0
|
||
|
||
.1 iny
|
||
lda (ZPLineBufPtr),y
|
||
beq .8
|
||
|
||
jsr CC.IsOPChar
|
||
bcc .1
|
||
|
||
.8 tya
|
||
rts
|
||
*--------------------------------------
|
||
CC.GetIDLen ldy #0
|
||
|
||
.1 iny
|
||
lda (ZPLineBufPtr),y
|
||
beq .8
|
||
|
||
jsr CC.IsLetterOrDigit
|
||
bcc .1
|
||
|
||
.8 tya
|
||
rts
|
||
*--------------------------------------
|
||
CC.GetCharNB jsr CC.GetChar
|
||
bcs CC.GetNextCharNB.RTS
|
||
|
||
jsr CC.CheckCharNB
|
||
bcc CC.GetNextCharNB.RTS
|
||
*--------------------------------------
|
||
CC.GetNextCharNB
|
||
jsr CC.GetNextChar
|
||
bcs CC.GetNextCharNB.RTS
|
||
|
||
jsr CC.CheckCharNB
|
||
bcs CC.GetNextCharNB
|
||
|
||
CC.GetNextCharNB.RTS
|
||
rts
|
||
*--------------------------------------
|
||
CC.GetCharNBNL jsr CC.GetChar
|
||
bcs CC.GetNextCharNB.RTS
|
||
|
||
jsr CC.CheckCharNB
|
||
bcs CC.GetNextCharNBNL
|
||
|
||
cmp #C.CR
|
||
clc
|
||
bne CC.GetNextCharNB.RTS
|
||
|
||
jsr CC.FIO.FGetS
|
||
bcs CC.GetNextCharNB.RTS
|
||
*--------------------------------------
|
||
CC.GetNextCharNBNL
|
||
jsr CC.GetNextCharNB
|
||
bcs CC.GetNextCharNB.RTS
|
||
|
||
cmp #C.CR
|
||
clc
|
||
bne .9
|
||
|
||
jsr CC.FIO.FGetS
|
||
bcc CC.GetNextCharNBNL
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.CheckSpace jsr CC.GetChar
|
||
bcs .90
|
||
|
||
cmp #C.SPACE
|
||
bne .90
|
||
|
||
jsr CC.GetNextCharNB
|
||
bcc .99
|
||
|
||
.90 lda #E.CSYN
|
||
sec
|
||
.99 rts
|
||
*--------------------------------------
|
||
CC.CheckCharNB cmp #C.SPACE
|
||
beq .9
|
||
|
||
cmp #C.TAB
|
||
beq .9
|
||
|
||
clc
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.GetNextCharEsc
|
||
jsr CC.GetNextChar
|
||
bcs .9
|
||
|
||
cmp #'\'
|
||
bne .8
|
||
|
||
jsr CC.GetNextChar
|
||
bcs .8
|
||
|
||
ldx #CC.EscChars.Cnt-1
|
||
|
||
.1 cmp CC.EscChars,x
|
||
beq .6
|
||
|
||
dex
|
||
bpl .1
|
||
|
||
sec
|
||
rts
|
||
|
||
.6 lda CC.EscCodes,x
|
||
bit .9
|
||
clc
|
||
rts
|
||
|
||
.8 clc
|
||
clv
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.GetNextChar inc ZPLineBufPtr
|
||
bne CC.GetChar
|
||
|
||
inc ZPLineBufPtr+1
|
||
*--------------------------------------
|
||
CC.GetChar lda (ZPLineBufPtr)
|
||
bne .8
|
||
|
||
phy
|
||
|
||
>LDA.G CC.hDefineBuf
|
||
beq .1
|
||
|
||
phx
|
||
|
||
>SYSCALL FreeMem
|
||
|
||
>STZ.G CC.hDefineBuf
|
||
|
||
>LDYA.G CC.SaveDefine
|
||
>STYA ZPLineBufPtr
|
||
|
||
plx
|
||
ply
|
||
bra CC.GetChar
|
||
|
||
.1 ply
|
||
lda #C.CR
|
||
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
CC.IsEndArg cmp #']'
|
||
beq .8
|
||
|
||
cmp #','
|
||
beq .8
|
||
|
||
cmp #';'
|
||
beq .8
|
||
|
||
cmp #':'
|
||
beq .8
|
||
|
||
cmp #')'
|
||
beq .8
|
||
|
||
sec
|
||
rts
|
||
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
CC.IsOPChar ldx #CC.OPChars.Cnt-1
|
||
|
||
.1 cmp CC.OPChars,x
|
||
beq .8
|
||
|
||
dex
|
||
bpl .1
|
||
|
||
sec
|
||
rts
|
||
|
||
.8 clc
|
||
rts
|
||
*---------------------------------------
|
||
CC.IsLetterOrDigit
|
||
jsr CC.IsDigit10
|
||
bcc CC.IsLetterRTS
|
||
*---------------------------------------
|
||
CC.IsLetter cmp #'_'
|
||
bne .1
|
||
|
||
clc
|
||
rts
|
||
|
||
.1 cmp #'A'
|
||
bcc .9
|
||
|
||
cmp #'Z'+1
|
||
bcc CC.IsLetterRTS
|
||
|
||
cmp #'a'
|
||
bcc .9
|
||
|
||
cmp #'z'+1
|
||
|
||
rts CC if lowercase
|
||
|
||
.9 sec
|
||
CC.IsLetterRTS rts
|
||
*---------------------------------------
|
||
CC.IsDigit10 cmp #'0'
|
||
bcc .9
|
||
|
||
cmp #'9'+1
|
||
rts cc if ok, cs if not
|
||
|
||
.9 sec
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/bin/cc.s.core
|
||
LOAD usr/src/bin/cc.s
|
||
ASM
|