A2osX/BIN/CC.S.CORE.txt

639 lines
9.8 KiB
Plaintext
Raw Normal View History

NEW
AUTO 3,1
*--------------------------------------
CORE.Init lda #SL._
>SYSCALL SListNew
2022-06-12 20:42:22 +00:00
bcs .9
>STA.G CC.hDefines
lda #SL._
>SYSCALL SListNew
2022-06-12 20:42:22 +00:00
bcs .9
>STA.G CC.hTags
lda #SL._
>SYSCALL SListNew
bcs .9
>STA.G CC.hSyms
2022-06-22 06:26:44 +00:00
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPSymBufPtr
txa
>STA.G CC.hSymBuf
2022-01-30 21:47:08 +00:00
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ScopeStk
txa
>STA.G CC.hScopeStk
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA StmtStk
txa
>STA.G CC.hStmtStk
lda #'_'
>STA.G CC.Label
2022-06-22 06:26:44 +00:00
lda #CC.LookupIdx
tay
sta (pData),y
* clc
.9 rts
*--------------------------------------
CORE.Quit jsr FIO.FClose
bne CORE.Quit
2022-06-22 06:26:44 +00:00
>LDA.G CC.hSyms
beq .1
>SYSCALL SListFree
.1 >LDA.G CC.hTags
beq .2
>SYSCALL SListFree
.2 >LDA.G CC.hDefines
beq .4
>SYSCALL SListFree
2022-06-12 20:42:22 +00:00
.4 >LDA.G CC.hDefineBuf
jsr .7
2022-06-12 20:42:22 +00:00
>LDA.G CC.hSymBuf
jsr .7
.5 jsr SYM.LookupFree
bcc .5
2022-06-22 06:26:44 +00:00
>LDA.G CC.hScopeStk
jsr .7
>LDA.G CC.hStmtStk
2022-08-20 14:37:37 +00:00
.7 beq .8
>SYSCALL FreeMem
2022-08-20 14:37:37 +00:00
.8 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
CORE.CompileFile
>SLEEP
2022-01-30 21:47:08 +00:00
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 FIO.FGetS
2022-01-30 21:47:08 +00:00
bcs .9
jsr CORE.CompileLine
bcc CORE.CompileFile
2022-01-30 21:47:08 +00:00
.9 rts
*--------------------------------------
CORE.CompileLine
jsr CC.GetCharNB
bcs .99
2022-08-20 14:37:37 +00:00
cmp #C.CR EOL....
beq .8
2022-08-20 14:37:37 +00:00
cmp #'#' directive ?
bne .1
jmp DIR
2023-01-23 18:33:37 +00:00
.1 bit DirState FALSE state
bmi .8
cmp #'/'
2022-08-20 14:37:37 +00:00
bne .2 comments ...
jmp CORE.Comments
*--------------------------------------
2022-08-20 14:37:37 +00:00
.2 cmp #'}' End of CPStmt ?
beq .5
jsr CORE.CompileStmt
bcs .99
jsr CC.GetCharNB
bcs .98
cmp #'{'
bne .3
jsr CORE.GetNCharNBNL Skip '{'
2022-12-13 06:55:13 +00:00
bcc CORE.CompileLine
2022-08-20 14:37:37 +00:00
.3 cmp #';' End of Stmt ?
bne .4
jsr CORE.GetNCharNBNL Skip ';'
jsr STMT.Stmt.END
bcs .99
jsr CC.GetCharNB
.4 cmp #'}' End of CPStmt ?
bne CORE.CompileLine
.5 jsr CORE.GetNCharNBNL Skip '}'
2022-01-30 21:47:08 +00:00
jsr STMT.CPStmt.END
bcs .99
jsr CC.GetCharNB
bcc .3
.98 lda #E.CSYN
sec
.99 rts
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
.8 clc
rts
2022-08-20 14:37:37 +00:00
*--------------------------------------
* keyword : for, while ....
2022-01-30 21:47:08 +00:00
*--------------------------------------
CORE.CompileStmt
>LDYA L.CC.KW
2022-08-20 14:37:37 +00:00
jsr CC.LookupID
bcs .1 not an internal CC keyword....
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
txa
>STA.G CC.CmdSave
jmp (J.CC.KW,x)
*--------------------------------------
* Declaration : typedef, type var or type func()
2022-08-20 14:37:37 +00:00
*--------------------------------------
.1 >LDYA L.CC.SCSPEC
2022-08-20 14:37:37 +00:00
jsr CC.LookupID
bcs .2
jmp (J.CC.SCSPEC,x)
.2 >LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .3
jmp DECL.X
2022-08-20 14:37:37 +00:00
*--------------------------------------
* Statement : ++var, var=, func();
*--------------------------------------
.3 jmp STMT.Get
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
.99 lda #E.CSYN
2022-01-30 21:47:08 +00:00
sec
2022-08-20 14:37:37 +00:00
.9 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
CORE.Comments jsr CC.GetNextChar TODO : /* ... */
cmp #'/'
2023-01-23 18:33:37 +00:00
beq .8 // skip line.....
cmp #'*'
bne .9 /* ....
.1 jsr CORE.GetNCharNBNL
bcs .9
cmp #'*' ....*/
bne .1
jsr CC.GetNextChar
bcs .9
cmp #'/'
bne .1
jmp CC.GetNextChar
2023-01-23 18:33:37 +00:00
.8 clc
rts
.9 lda #E.CSYN
sec
rts
*--------------------------------------
CORE.SkipLine jsr CC.GetNextChar
bcs .9
cmp #C.CR
bne CORE.SkipLine
clc
.9 rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
CC.LookupID >STYA ZPLookupPtr
jsr CC.GetIDLen
bra CC.Lookup
2022-08-20 14:37:37 +00:00
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
2022-01-30 21:47:08 +00:00
CC.LookupOP >STYA ZPLookupPtr
jsr CC.GetOPLen
CC.Lookup phy Y = len
ldx #0
2022-01-30 21:47:08 +00:00
.1 lda (ZPLookupPtr)
beq .9 Ending 0, not found....
pla
pha Get Back Len
2022-01-30 21:47:08 +00:00
cmp (ZPLookupPtr) Same Len ?
bne .4
tay
2022-01-30 21:47:08 +00:00
.2 lda (ZPLookupPtr),y
.3 dey
cmp (ZPLineBufPtr),y
bne .4
tya
bne .2
pla Found keyword...
2022-01-30 21:47:08 +00:00
jsr CC.SkipA ..advance Ptr to char after it..
2022-01-30 21:47:08 +00:00
lda ZPLookupPtr
sec
2022-01-30 21:47:08 +00:00
adc (ZPLookupPtr)
tay
2022-01-30 21:47:08 +00:00
lda ZPLookupPtr+1
adc #0
clc Y,A = F() def, X = F() index
2022-08-20 14:37:37 +00:00
rts
.4 inx
inx
2022-01-30 21:47:08 +00:00
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1
bra .1
2022-08-20 14:37:37 +00:00
.9 ldx #$FF
pla
sec
rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
CC.ZPLookupPtrAddAp1
sec
2022-01-30 21:47:08 +00:00
adc ZPLookupPtr
sta ZPLookupPtr
bcc .1
2022-01-30 21:47:08 +00:00
inc ZPLookupPtr+1
.1 rts
*--------------------------------------
2022-06-22 06:26:44 +00:00
CC.GetDefine >LDA.G CC.hDefines
2022-01-30 21:47:08 +00:00
jsr CC.SListLookup
bcs .9
2022-06-22 06:26:44 +00:00
>LDYA ZPLineBufPtr
>STYA.G CC.SaveDefine
2022-06-12 20:42:22 +00:00
txa
>STA.G CC.hDefineBuf
2022-06-22 06:26:44 +00:00
>SYSCALL GetMemPtr
>STYA ZPLineBufPtr
.9 rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
CC.SListLookup >PUSHA hSList
>PUSHA ...for SListGetData
>PUSHW ZPLineBufPtr
2022-11-02 06:54:30 +00:00
>PUSHWI 0 ScopeID
2022-08-20 14:37:37 +00:00
>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
*--------------------------------------
2022-01-30 21:47:08 +00:00
* CT Stack
*--------------------------------------
CC.Push ldy StmtPtr
2022-01-30 21:47:08 +00:00
dey
beq .9
sty StmtPtr
sta (StmtStk),y
clc
rts
2022-01-30 21:47:08 +00:00
.9 lda #E.STKOVERFLOW
sec
2022-01-30 21:47:08 +00:00
rts
*--------------------------------------
* ZPLineBufPtr related Subs.....
*--------------------------------------
CC.SkipX txa
CC.SkipA clc
adc ZPLineBufPtr
sta ZPLineBufPtr
bcc .8
2022-01-30 21:47:08 +00:00
inc ZPLineBufPtr+1
2022-01-30 21:47:08 +00:00
.8 rts
*--------------------------------------
CC.GetOPLen ldy #0
2022-01-30 21:47:08 +00:00
.1 iny
lda (ZPLineBufPtr),y
beq .8
2022-01-30 21:47:08 +00:00
jsr CC.IsOPChar
bcc .1
2022-01-30 21:47:08 +00:00
.8 tya
rts
*--------------------------------------
CC.GetIDLen ldy #0
2022-01-30 21:47:08 +00:00
.1 iny
lda (ZPLineBufPtr),y
beq .8
2022-01-30 21:47:08 +00:00
jsr CC.IsLetterOrDigit
bcc .1
2022-01-30 21:47:08 +00:00
.8 tya
rts
*--------------------------------------
CC.GetCharNB jsr CC.GetChar
bcs CORE.GetNCharNB.RTS
2022-01-30 21:47:08 +00:00
jsr CC.CheckCharNB
bcc CORE.GetNCharNB.RTS
2022-01-30 21:47:08 +00:00
*--------------------------------------
CORE.GetNCharNB jsr CC.GetNextChar
bcs CORE.GetNCharNB.RTS
2022-01-30 21:47:08 +00:00
jsr CC.CheckCharNB
bcs CORE.GetNCharNB
CORE.GetNCharNB.RTS
2022-01-30 21:47:08 +00:00
rts
*--------------------------------------
CORE.GetCharNBNL
jsr CC.GetChar
bcs CORE.GetNCharNB.RTS
2022-08-20 14:37:37 +00:00
jsr CC.CheckCharNB
bcs CORE.GetNCharNBNL
2022-08-20 14:37:37 +00:00
cmp #C.CR
clc
bne CORE.GetNCharNB.RTS
2022-08-20 14:37:37 +00:00
jsr FIO.FGetS
bcc CORE.GetCharNBNL
rts
2022-08-20 14:37:37 +00:00
*--------------------------------------
CORE.GetNCharNBNL
jsr CC.GetChar
bcs .9
cmp #C.CR
beq .1
jsr CORE.GetNCharNB
bcs .9
2022-08-20 14:37:37 +00:00
cmp #C.CR
clc
bne .9
.1 jsr FIO.FGetS
bcc CORE.GetCharNBNL
2022-08-20 14:37:37 +00:00
.9 rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
CC.CheckSpace jsr CC.GetChar
bcs .90
2022-01-30 21:47:08 +00:00
cmp #C.SPACE
bne .90
jsr CORE.GetNCharNB
bcc .99
.90 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.CheckCharNB cmp #C.SPACE
beq .9
cmp #C.TAB
beq .9
clc
.9 rts
*--------------------------------------
* https://riptutorial.com/c/example/16255/character-literals
* 'c', '\abefnrtv', '\123', '\xFF'
*--------------------------------------
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
* TODO : \123, \xFF
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
2022-06-12 20:42:22 +00:00
phy
2022-06-12 20:42:22 +00:00
>LDA.G CC.hDefineBuf
beq .1
phx
2022-06-12 20:42:22 +00:00
>SYSCALL FreeMem
2022-06-12 20:42:22 +00:00
>STZ.G CC.hDefineBuf
>LDYA.G CC.SaveDefine
>STYA ZPLineBufPtr
plx
2022-06-12 20:42:22 +00:00
ply
bra CC.GetChar
2022-01-30 21:47:08 +00:00
2022-06-12 20:42:22 +00:00
.1 ply
lda #C.CR
.8 clc
rts
*---------------------------------------
2022-01-30 21:47:08 +00:00
CC.IsEndArg cmp #']'
beq .8
2022-08-20 14:37:37 +00:00
cmp #','
2022-01-30 21:47:08 +00:00
beq .8
2022-08-20 14:37:37 +00:00
cmp #';'
2022-01-30 21:47:08 +00:00
beq .8
cmp #':'
beq .8
2022-01-30 21:47:08 +00:00
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