diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 71d93a61..bf6fd7d7 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index ff4bf5d1..8b1c61f3 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt index badfeb68..dae0d6e5 100644 --- a/BIN/CC.S.CODE.txt +++ b/BIN/CC.S.CODE.txt @@ -2,12 +2,95 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -CODE.PushXFromYA - jsr CODE.LDXYAI +CODE.Debug ldx #PCC.DEBUG.L + ldy #0 +.1 lda PCC.DEBUG,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.Enter ldx #PCC.ENTER.L + ldy #0 + +.1 lda PCC.ENTER,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.nAddLocal eor #$FF + inc + +CODE.AddLocal pha + lda #$A9 LDA #imm + jsr CODE.EmitByte + pla + jsr CODE.EmitByte + + ldx #PCC.ADDLOCAL.L + ldy #0 + +.1 lda PCC.ADDLOCAL,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.GetLocal lda #$A9 LDA #imm + jsr CODE.EmitByte + tya + eor #$FF + inc + jsr CODE.EmitByte + + ldx #PCC.GETLOCAL.L + ldy #0 + +.1 lda PCC.GETLOCAL,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.SetRetValue + jsr CODE.LDXI + + ldx #PCC.SETRETVALUE.L + ldy #0 + +.1 lda PCC.SETRETVALUE,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.Leave ldx #PCC.LEAVE.L + ldy #0 + +.1 lda PCC.LEAVE,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.PushXFromYA ldx #PCC.PushXFromYA.L ldy #0 - + .1 lda PCC.PushXFromYA,y jsr CODE.EmitByte iny @@ -16,11 +99,9 @@ CODE.PushXFromYA rts *-------------------------------------- -CODE.PopXToYA jsr CODE.LDXYAI - - ldx #PCC.PopXToYA.L +CODE.PopXToYA ldx #PCC.PopXToYA.L ldy #0 - + .1 lda PCC.PopXToYA,y jsr CODE.EmitByte iny @@ -29,6 +110,93 @@ CODE.PopXToYA jsr CODE.LDXYAI rts *-------------------------------------- +CODE.SetXToYA ldx #PCC.SetXToYA.L + ldy #0 + +.1 lda PCC.SetXToYA,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.Deref ldx #PCC.Deref.L + ldy #0 + +.1 lda PCC.Deref,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.SETpBASEp1 ldx #PCC.SETpBASEp1.L + ldy #0 + +.1 lda PCC.SETpBASEp1,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.SETpBASEpA ldx #PCC.SETpBASEpA.L + ldy #0 + +.1 lda PCC.SETpBASEpA,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.PUSHpBASEp1 + ldx #PCC.PUSHpBASEp1.L + ldy #0 + +.1 lda PCC.PUSHpBASEp1,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.PUSHpBASEpA + ldx #PCC.PUSHpBASEpA.L + ldy #0 + +.1 lda PCC.PUSHpBASEpA,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- +CODE.PushFromPtr + pha + lda #$A0 LDY #imm + jsr CODE.EmitByte + pla + dec BPL loop + jsr CODE.EmitByte + + ldx #PCC.PushFromPtr.L + ldy #0 + +.1 lda PCC.PushFromPtr,y + jsr CODE.EmitByte + iny + dex + bne .1 + + rts +*-------------------------------------- CODE.PUSHI pha lda #$A9 LDA #imm jsr CODE.EmitByte @@ -36,12 +204,7 @@ CODE.PUSHI pha jsr CODE.EmitByte bra CODE.PUSHA *-------------------------------------- -CODE.LDXYAI pha - - lda #$A2 LDX #imm - jsr CODE.EmitByte - txa - jsr CODE.EmitByte +CODE.LDYAI pha lda #$A0 LDY #imm jsr CODE.EmitByte @@ -50,8 +213,21 @@ CODE.LDXYAI pha lda #$A9 LDA #imm jsr CODE.EmitByte + pla - bra CODE.EmitByte + + jmp CODE.EmitByte +*-------------------------------------- +CODE.LDXI lda #$A2 LDX #imm + jsr CODE.EmitByte + txa + jmp CODE.EmitByte +*-------------------------------------- +CODE.LDAI pha + lda #$A9 LDA #imm + jsr CODE.EmitByte + pla + jmp CODE.EmitByte *-------------------------------------- CODE.PUSHYA jsr CODE.PUSHA lda #$AA TYA @@ -61,7 +237,7 @@ CODE.PUSHA lda #$C6 DEC zp jsr CODE.EmitByte lda #pStack jsr CODE.EmitByte - + lda #$92 STA (zp) jsr CODE.EmitByte lda #pStack @@ -84,15 +260,10 @@ CODE.INCPSTACK lda #$E6 INC zp lda #pStack bra CODE.EmitByte *-------------------------------------- -CODE.JMPYX lda #$4C - bra CODE.JSRYX.1 -*-------------------------------------- -CODE.JSRYX lda #$20 JSR - -CODE.JSRYX.1 jsr CODE.EmitByte - tya - jsr CODE.EmitByte +CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR ..... txa + jsr CODE.EmitByte + tya bra CODE.EmitByte *-------------------------------------- CODE.FPUCALL lda #$A2 LDX #imm diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index 326c7be3..59eae110 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -16,6 +16,7 @@ CC.Init >SYSCALL SListNew bcs .9 >STA.G CC.hSymbols + sty ScopePtr >LDYAI 4096 >SYSCALL GetMem @@ -41,7 +42,7 @@ CC.Init >SYSCALL SListNew txa >STA.G CC.hData - >LDYAI 1024 + >LDYAI 256 >SYSCALL GetMem bcs .9 @@ -49,22 +50,24 @@ CC.Init >SYSCALL SListNew txa >STA.G CC.hStack - >LDYAI 1024 - >SYSCALL GetMem - bcs .9 - - >STYA ZPCCfDecl - txa - >STA.G CC.hfDecl - * clc .9 rts *-------------------------------------- -CC.Quit >LDA.G CC.hSymbols +CC.Quit ldy ScopePtr beq .1 +.10 lda (pData),y + >SYSCALL SListFree + ldy ScopePtr + cpy #CC.hSymbols + beq .1 + + dec ScopePtr + dey + bra .10 + .1 >LDA.G CC.hTags beq .2 @@ -75,13 +78,13 @@ CC.Quit >LDA.G CC.hSymbols >SYSCALL SListFree -.4 lda hDefine +.4 lda hDefineBuf jsr .7 .5 jsr CS.RUN.FClose bne .5 - >LDA.G CC.hfDecl + lda hSymBuf jsr .7 >LDA.G CC.hStack @@ -97,18 +100,50 @@ CC.Quit >LDA.G CC.hSymbols .7 beq CC.Quit.RTS >SYSCALL FreeMem -CC.Quit.RTS rts +CC.Quit.RTS rts *-------------------------------------- -CC.Run jsr CC.GetCharNB +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 CS.RUN.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 CC.Quit.RTS -CC.Run.1 cmp #C.CR empty line.... +CC.CompileLine.1 + cmp #C.CR empty line.... beq .2 cmp #'/' bne .3 comments ... - jmp CC.comments + jmp CC.Comments .2 clc rts @@ -118,18 +153,12 @@ CC.Run.1 cmp #C.CR empty line.... jmp CC.DIR -.4 cmp #'}' End of block ? +.4 cmp #'}' End of CPStmt ? bne .10 - jsr CC.CheckStack must be something on stack.... - bcs CC.Quit.RTS - jsr CC.GetNextCharNB Skip '}' - jsr CC.Pop was expected.... - jsr CC.Pop get stacked Cmd... - tax - jmp (J.CC.KW.END,x) + jmp CC.STMT.CPStmt.END *-------------------------------------- .10 jsr CC.IsLetter bcc .20 @@ -138,48 +167,82 @@ CC.Run.1 cmp #C.CR empty line.... bcs .29 *-------------------------------------- -.20 >LDYA L.CC.TMODS +.20 >LDYA L.CC.TYPEQUAL jsr CC.LookupID bcs .50 - jsr CC.tDecl + jsr CC.TYPE.Decl bcs .59 - >STYA ZPSymType Type/Qual + ldx #SYM.SC.STATIC Y,A = Type/Qual + bit ScopenCnt + bpl .25 - jsr CC.AddSymbol add with undef value... + bit #SYM.Q.FUNC someone wants to add a local f() ? + sec + bne .29 + + ldx #SYM.SC.AUTO + +.25 jsr CC.SYM.New Y,A=T/Q, add with undef value... bcs .29 OOM or DUP - lda ZPSymQual - bit #CC.Q.FUNC - bne .21 - jsr CC.GetCharNB - bcs .27 + bcs .69 cmp #';' - beq .69 + beq .28 - cmp #'=' - bne .99 + cmp #'{' + bne .26 + jsr CC.GetNextCharNB skip '{' + bcs .69 + + jsr CC.SYM.Store + bcs .29 + + jmp CC.SYM.FreeBuf +*-------------------------------------- + +* TODO: AOPS + +*-------------------------------------- +.26 cmp #'=' + sec + bne .69 +*-------------------------------------- jsr CC.GetNextCharNB skip '=' -.27 bcs .99 + bcs .69 - >LDYA ZPSymType expected T/Q - jsr CC.ExpEval - bcs .9 + jsr CC.SYM.GetTypeInYA expected T/Q + jsr CC.EXP.Eval + bcs .59 - jsr CC.SetValue Y,A = T/Q, Set value to this var + jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var .29 bcs .9 - bra .68 - -.21 jsr CC.fDecl +.28 jsr CC.SYM.Store bcs .9 + jsr CC.SYM.FreeBuf + bra .68 *-------------------------------------- +.21 jsr CC.GetCharNB + bcs .99 + + cmp #';' + beq .8 + + cmp #'{' + bne .99 + + jsr CC.GetNextCharNB skip '{' + bcs .99 + + jmp CC.CompileLine.1 +*-------------------------------------- .50 >LDYA L.CC.KW jsr CC.LookupID bcs .6 not an internal CC keyword.... @@ -189,26 +252,25 @@ CC.Run.1 cmp #C.CR empty line.... bra .8 *-------------------------------------- -.6 jsr CC.GetVar var= or func() ? - bcs .99 +.6 jsr CC.SYM.Lookup var= or func() ? +.69 bcs .99 - >STYA ZPSymID - jsr CC.GetSymDef Get Type & qual... - bcs .9 - - lda ZPSymQual - bit #CC.Q.FUNC + ldy #SYM.Q + lda (ZPSymBufPtr),y + bit #SYM.Q.FUNC beq .60 ldy #0 func( ... ); lda #0 - jsr CC.fExecNoRetV + jsr CC.F.CallNoRetV bcs .9 + jsr CC.SYM.FreeBufPop + bra .8 *-------------------------------------- -.60 jsr CC.GetCharNB - bcs .9 +.60 jsr CC.GetCharNB var = ? + bcs .99 cmp #'=' TODO: all AOPS bne .99 @@ -216,16 +278,18 @@ CC.Run.1 cmp #C.CR empty line.... jsr CC.GetNextChar Skip = bcs .99 - >LDYA ZPSymType T/Q - jsr CC.ExpEval + jsr CC.SYM.GetTypeInYA + jsr CC.EXP.Eval bcs .9 - jsr CC.SetValue + jsr CC.SYM.PopValue bcs .9 + jsr CC.SYM.FreeBufPop +*-------------------------------------- .68 jsr CC.GetCharNB cmp #';' -.69 beq .8 + beq .8 .99 lda #E.CSYN sec @@ -237,12 +301,12 @@ CC.Run.1 cmp #C.CR empty line.... cmp #C.CR beq .80 - jmp CC.Run.1 + jmp CC.CompileLine.1 .80 clc rts *-------------------------------------- -CC.comments jsr CC.GetNextChar +CC.Comments jsr CC.GetNextChar cmp #'/' bne .90 @@ -262,27 +326,27 @@ CC.SkipLine jsr CC.GetNextChar .9 rts *-------------------------------------- -CC.LookupID >STYA ZPPtr1 +CC.LookupID >STYA ZPLookupPtr jsr CC.GetIDLen bra CC.Lookup -CC.LookupOP >STYA ZPPtr1 +CC.LookupOP >STYA ZPLookupPtr jsr CC.GetOPLen CC.Lookup phy Y = len ldx #0 -.1 lda (ZPPtr1) +.1 lda (ZPLookupPtr) beq .9 Ending 0, not found.... pla pha Get Back Len - cmp (ZPPtr1) Same Len ? + cmp (ZPLookupPtr) Same Len ? bne .4 tay -.2 lda (ZPPtr1),y +.2 lda (ZPLookupPtr),y .3 dey cmp (ZPLineBufPtr),y @@ -292,43 +356,73 @@ CC.Lookup phy Y = len bne .2 pla Found keyword... - clc - adc ZPLineBufPtr ..advance Ptr to char after it.. - sta ZPLineBufPtr - bcc .31 + jsr CC.SkipA ..advance Ptr to char after it.. - inc ZPLineBufPtr+1 - -.31 lda ZPPtr1 + lda ZPLookupPtr sec - adc (ZPPtr1) + adc (ZPLookupPtr) tay - lda ZPPtr1+1 + lda ZPLookupPtr+1 adc #0 clc Y,A = F() def, X = F() index .8 rts .4 inx inx - lda (ZPPtr1) - jsr CC.ZPPtr1AddAp1 + lda (ZPLookupPtr) + jsr CC.ZPLookupPtrAddAp1 bra .1 .9 pla sec rts *-------------------------------------- +CC.SListLookup >PUSHA hSList + >PUSHA ...for SListGetData + >PUSHW ZPLineBufPtr + >SYSCALL SListLookup + bcs .99 + + pha save KeyID + phy + + >PUSHA KeyID.HI + tya + >PUSHA KeyID.LO + + jsr CC.SkipX + +.1 >PUSHWZ allocate + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + bcs .9 + + ply + pla X = hSymScope, Y,A = SymID +* clc + rts + +.9 plx + plx + rts + +.99 inc pStack + rts +*-------------------------------------- * int main(int argc, char *argv[]) ; *-------------------------------------- -CC.MainExec lda #0 +CC.MainExec lda #$EEEE >PUSHA + >PUSHA int ret value + lda #0 + >PUSHA ldy #S.PS.ARGC lda (pPS),y + >PUSHA push int ARGC (int) - >PUSHA push int ARGC - - >PUSHW ZPCCConst push int ARGV + >PUSHW ZPCCConst push int ARGV *char[] stz ArgIndex @@ -356,673 +450,63 @@ CC.MainExec lda #0 inc ZPCCConst+1 bra .1 -.2 +.2 >PUSHB.G CC.hSymbols - - clc - rts -*-------------------------------------- -CC.ZPPtr1GetNextW - jsr CC.ZPPtr1NextW -*-------------------------------------- -CC.ZPPtr1GetW lda (ZPPtr1) - beq .8 - - pha - - ldy #1 - lda (ZPPtr1),y - ply - -.8 rts -*-------------------------------------- -CC.ZPPtr1NextW jsr .1 - -.1 inc ZPPtr1 - bne .8 - - inc ZPPtr1+1 - -.8 rts -*-------------------------------------- -CC.ZPPtr1AddAp1 - sec - adc ZPPtr1 - sta ZPPtr1 - bcc .1 - - inc ZPPtr1+1 -.1 rts -*-------------------------------------- -* Input : ZPLineBufPtr -* Output : Y,A = VarID -*-------------------------------------- -CC.AddSymbol >PUSHB.G CC.hSymbols - >PUSHW ZPLineBufPtr - >SYSCALL SListNewKey + >PUSHW L.CC.MAIN + >SYSCALL SListLookup bcs .9 - >STYA ZPSymID Y,A = KeyID, X = KeyLen - stx ZPPtr2 - - lda ZPLineBufPtr - sta ZPPtr1 -* clc - adc ZPPtr2 - sta ZPLineBufPtr - - lda ZPLineBufPtr+1 - sta ZPPtr1+1 - adc #0 - sta ZPLineBufPtr+1 - - jsr CC.GetCharNB - bcs .6 - - cmp #'(' - bne .6 - -.7 lda #CC.Q.FUNC - tsb ZPSymQual - - lda ZPCCfDecl - sta ZPSymDefPtr - - lda ZPCCfDecl+1 - sta ZPSymDefPtr+1 - - >LDYA ZPPtr1 - jsr CC.Link - bra .8 - -* lda #E.FUNDEF -* sec -.9 rts -*-------------------------------------- -.6 >LDYA ZPSymType - jsr CC.GetVarSize CS if pointer - stx ZPSymSizeOf - -* clc / sec - - lda ZPCCData - sta ZPSymDataPtr - adc ZPSymSizeOf - sta ZPCCData - - lda ZPCCData+1 - sta ZPSymDataPtr+1 - adc ZPSymSizeOf+1 - sta ZPCCData+1 - - >LDA.G CC.DataSize - clc - adc ZPSymSizeOf - sta (pData),y - bcs .99 - - lda ZPSymQual - and #CC.Q.FUNC - bne .98 - -.8 >PUSHB.G CC.hSymbols - >PUSHW ZPSymID - >PUSHWI ZPSymDef - >PUSHWI SYMDEFSIZE - >SYSCALL SListAddData - rts - -.98 lda #E.CSYN - sec - rts - -.99 lda #E.OOM -* sec - rts -*-------------------------------------- -* ZPSymDataPtr = fDef -*-------------------------------------- -CC.fExecNoRetV clc - .HS B0 BCS -CC.fExecRetV sec - - ldx ZPPtr1 - phx - ldx ZPPtr1+1 local : fdef Ptr - phx - ldx ZPPtr2 local : type - phx - ldx ZPPtr2+1 local : qual - phx - ldx ZPPtr3 local : variadic size - phx - ldx ZPPtr3+1 local : bRetV - phx - - >STYA ZPPtr2 save expected Type/qual - - >LDYA ZPSymDefPtr - bcc .11 - - >LDYA.G CC.VarDefPtr - -.11 >STYA ZPPtr1 - - ror ZPPtr3+1 bRetV - - stz ZPPtr3 Reset VARIADIC byte count - - jsr CC.GetNextCharNB skip '(' - bcs .10 - - jsr CC.ZPPtr1GetW Y,A = f() Return value T/Q - - ldx ZPPtr2 expected T - beq .1 no check required - - cpy ZPPtr2 - bne .91 - - tax save full Q - - and #$fC ignore CC.Q.FUNC,CC.Q.FASTCALL - cmp ZPPtr2+1 - bne .91 - - txa - -.1 >STYA ZPPtr2 save full T/Q for later - - jsr CC.ZPPtr1GetNextW advance to arg list type - beq .7 end of list, go check ending ')' -*-------------------------------------- -.3 cpy #CC.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0 - bne .4 - - ldy #0 - lda #0 - -.4 jsr CC.ExpEval Y,A = 0 if VARIADIC - bcs .93 - - jsr CC.GetVarSize Y,A = Var Type/Qual - - lda (ZPPtr1) - cmp #CC.T.VARIADIC - bne .50 - - txa X=VarSize - - clc make sure pointer only 2 bytes - adc ZPPtr3 - sta ZPPtr3 Add to byte count - bra .5 - -.50 jsr CC.ZPPtr1NextW - -.5 jsr CC.GetCharNB - -.10 bcs .90 - - cmp #',' - bne .6 - - jsr CC.GetNextCharNB Skip ',' - - jsr CC.ZPPtr1GetW - bne .3 Another ARG.... - - bra .90 extra args....error - -.6 cmp #')' - bne .90 - - jsr CC.ZPPtr1GetW - beq .8 no more arg after ')', exit - - cpy #CC.T.VARIADIC - bne .90 missing arg - - lda ZPPtr3 push VARIADIC byte count - - jsr CODE.PUSHI - -.7 jsr CC.GetCharNB - bcs .90 - - cmp #')' - bne .90 - -.8 jsr CC.GetNextCharNB Skip ) - - jsr CC.fExec2 X = LASTVAR sizeof (fastcall) - bra .93 - -.90 lda #E.CSYN - bra .92 - -.91 lda #E.TMISMATCH - -.92 sec - -.93 plx - stx ZPPtr3+1 - plx - stx ZPPtr3 - - plx - stx ZPPtr2+1 - plx - stx ZPPtr2 - - plx - stx ZPPtr1+1 - plx - stx ZPPtr1 - -.99 rts -*-------------------------------------- -* X = last var size -*-------------------------------------- -CC.fExec2 -* >LDYA ZPPtr2 function T/Q -* jsr CC.GetVarSize -* stx ZPPtr1 last var size - - bit ZPPtr3+1 bRetV - bmi .5 - -* NO Return Value : call & discard stack if not in Y,A - - lda ZPPtr2+1 - bit #CC.Q.FASTCALL - beq .1 - -* ldx ZPPtr1 var size - dex - bne .19 - - jsr CODE.PULLA - bra .1 - -.19 jsr CODE.PULLYA - -.1 lda ZPSymDataPtr+1 - beq .9 - - ldy ZPSymDataPtr - >STYA ZPPtr3 - - jsr CC.fExec3 - - >LDYA ZPPtr2 function T/Q - jsr CC.GetVarSize - txa - beq .11 void - - cpx #3 A or Y,A - bcc .11 - -.10 jsr CODE.INCPSTACK - dex - bne .10 - -.11 clc - rts - -.9 lda #E.FUNDEF - sec - rts - -* Return Value : call & put result on stack if in Y,A - -.5 lda ZPPtr2+1 - bit #CC.Q.FASTCALL - beq .6 - -* ldx ZPPtr1 - dex - bne .64 - - jsr CODE.PULLA - bra .6 - -.64 jsr CODE.PULLYA - -.6 >LDA.G CC.VarDataPtr+1 - beq .9 - - sta ZPPtr3+1 - dey - lda (pData),y - sta ZPPtr3 - - jsr CC.fExec3 - - >LDYA ZPPtr2 function T/Q - jsr CC.GetVarSize - cpx #3 - bcs .8 leave on stack - - dex - bne .60 - - jsr CODE.PUSHA push ONE byte one stack - bra .8 - -.60 jsr CODE.PUSHYA push TWO bytes one stack - -.8 >LDYA ZPPtr2 T/Q - and #$FC ignore CC.Q.FUNC+CC.Q.FASTCALL - clc - rts -*-------------------------------------- -CC.fExec3 lda (ZPPtr3) - bne .1 - - ldy #1 - lda (ZPPtr3),y - tax - -* cpx #SYS.FClose -* bne .57 -* >DEBUG -* ldy #0 -*.56 lda PCC.DEBUG,y -* jsr CODE.EmitByte -* iny -* cpy #PCC.DEBUG.L -* bne .56 -*.57 - jsr CODE.SYSCALL - rts - -.1 ldy #1 - lda (ZPPtr3),y - tax - jsr CODE.FPUCALL - - rts -*-------------------------------------- -CC.fDecl >ENTER 2 - - lda #0 - sta (pStack) hLocal - - lda ZPSymType - jsr CC.fDeclAddA - lda ZPSymQual - jsr CC.fDeclAddA - - jsr CC.GetNextCharNB Skip ( - bcs .9 - -.1 cmp #')' - beq .6 - -.2 jsr CC.fDeclGetArg - bcs .99 - - pha - - tya - jsr CC.fDeclAddA - - pla - jsr CC.fDeclAddA - - jsr CC.GetCharNB - bcs .9 - - jsr CC.IsLetter - bcs .5 - -* TODO: AddLocal - -.3 jsr CC.GetNextCharNB - bcs .9 - - jsr CC.IsLetterOrDigit - bcc .3 - - - -.5 cmp #')' - beq .6 - - cmp #',' - bne .9 - - jsr CC.GetNextCharNB Skip , - bcs .9 - - bra .2 - -.6 jsr CC.GetNextCharNB Skip ) - bcs .9 - - cmp #';' - beq .7 - - -* TODO: f() body - - bra .9 -*-------------------------------------- -.7 - -.8 lda #0 - jsr CC.fDeclAddA - - >LDYA ZPSymType T/Q - clc - bra .99 - -.9 lda #E.CSYN - sec - -.99 >LEAVE - rts -*-------------------------------------- -CC.fDeclGetArg lda (ZPLineBufPtr) - cmp #'.' - bne .5 - - ldx #2 - -.1 jsr CC.GetNextChar - bcs .9 - - cmp #'.' - bne .9 - - dex - bne .1 - - jsr CC.GetNextCharNB - bcs .9 - - eor #')' - bne .9 - - ldy #CC.T.VARIADIC Type -* lda #0 Qual -* clc - rts - -.5 >LDYA L.CC.TMODS - jsr CC.LookupID - bcs .9 - - jsr CC.tDecl - bcs .9 - -* Y,A = Type/Qual - - bra .8 - -.9 lda #E.CSYN - sec - -.8 rts -*-------------------------------------- -CC.fDeclAddA sta (ZPCCfDecl) - inc ZPCCfDecl - bne .8 - - inc ZPCCfDecl+1 - -.8 rts -*-------------------------------------- -CC.Link >STYA ZPPtr2 - - >LDYA L.CC.LIBC - >STYA ZPPtr1 - - stz ZPSymDataPtr - stz ZPSymDataPtr+1 - - ldy #0 - -.11 iny - lda (ZPPtr2),y - beq .12 - - jsr CC.IsLetterOrDigit - bcc .11 - -.12 phy Y = len - - ldx #0 - -.1 lda (ZPPtr1) - beq .9 Ending 0, not found.... - - pla - pha Get Back Len - cmp (ZPPtr1) Same Len ? - bne .4 - - tay - -.2 lda (ZPPtr1),y - - dey - cmp (ZPPtr2),y - bne .4 - - tya - bne .2 - - pla Found keyword... - - lda (ZPPtr1) - jsr CC.ZPPtr1AddAp1 Skip LEN\Symbol - - >LDYA ZPPtr1 - iny - bne .5 - - inc Skip LEN - -.5 >STYA ZPSymDataPtr - - clc - rts - -.4 inx - inx - lda (ZPPtr1) - jsr CC.ZPPtr1AddAp1 Skip LEN\Symbol - lda (ZPPtr1) - jsr CC.ZPPtr1AddAp1 Skip LEN\definition - bra .1 - -.9 pla - sec - rts -*-------------------------------------- -CC.tDecl >ENTER 2 - lda #0 - sta (pStack) Type - ldy #1 - sta (pStack),y Qual - - jsr .7 - bcs .99 - - ldy #1 - lda (pStack),y - pha - lda (pStack) - tay Y = Type - pla A = Qual - - clc - -.99 >LEAVE - rts - -.7 jmp (J.CC.TMODS,x) -*-------------------------------------- -CC.NewKey >PUSHA - >PUSHW ZPLineBufPtr - >SYSCALL SListNewKey - bcs .9 - - pha - - txa -* clc - adc ZPLineBufPtr - sta ZPLineBufPtr - bcc .8 - - inc ZPLineBufPtr+1 - clc - -.8 pla Y,A = KeyID, X = KeyLen - -.9 rts -*-------------------------------------- -* Y,A = Type/Qual -*-------------------------------------- -CC.SetValue cpy ZPSymType - bne .99 - - cmp ZPSymQual - bne .99 - - ldx ZPSymSizeOf - >LDYA ZPSymDataPtr - jsr CODE.PopXToYA - - clc - rts - -.99 lda #E.TMISMATCH - sec - rts -*-------------------------------------- -CC.GetDefine >PUSHB.G CC.hDefines - - jsr CC.Get - bcs .9 - - pha phy - >PUSHB.G CC.hDefines - ply - pla - >PUSHYA KeyID + pha - >PUSHWZ Allocate.. - >PUSHWZ len = 0 (string mode) + >PUSHB.G CC.hSymbols + + pla + >PUSHA + pla + >PUSHA KeyID + + >PUSHWZ allocate + >PUSHWI 65535 all >PUSHWZ From Start >SYSCALL SListGetData bcs .9 - stx hDefine + stx hSymBuf + txa + >SYSCALL GetMemPtr + >STYA ZPSymBufPtr + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + sta ZPCCCode + + iny + lda (ZPSymBufPtr),y + sta ZPCCCode+1 + + jsr .7 + + clc +.9 rts + +.7 jmp (ZPCCCode) +*-------------------------------------- +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 + + stx hDefineBuf >LDYA ZPLineBufPtr >STYA.G CC.SaveDefine @@ -1033,68 +517,27 @@ CC.GetDefine >PUSHB.G CC.hDefines .9 rts *-------------------------------------- -CC.GetVar >PUSHB.G CC.hSymbols - -CC.Get >PUSHW ZPLineBufPtr - >SYSCALL SListLookup - bcs .9 - - pha - - txa -* clc - adc ZPLineBufPtr - sta ZPLineBufPtr - bcc .1 - - inc ZPLineBufPtr+1 - clc - -.1 pla Y,A = VarID - -.9 rts +* CT Stack *-------------------------------------- -CC.GetSymDef phy - pha - >PUSHB.G CC.hSymbols +CC.PushTQ ldy #SYM.Q + lda (ZPSymBufPtr),y + jsr CC.Push + bcs CC.Push.RTS - pla - >PUSHA - pla - >PUSHA KeyID - - >PUSHWI ZPSymDef - >PUSHWI 8 8 bytes - >PUSHWZ From Start - >SYSCALL SListGetData - rts -*-------------------------------------- -* Stack -*-------------------------------------- -CC.CheckStack ldy StackPtr - beq .9 - - cmp (ZPCCStack),y - bne .9 - - clc - rts - -.9 lda #E.CSYN - sec - 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 StackPtr +CC.Push ldy CStackPtr dey beq .9 - sty StackPtr + sty CStackPtr sta (ZPCCStack),y clc @@ -1104,12 +547,36 @@ CC.Push ldy StackPtr sec CC.Push.RTS rts *-------------------------------------- -CC.Pop ldy StackPtr +CC.PopYA ldy CStackPtr beq .9 lda (ZPCCStack),y + pha + + iny + beq .90 + + lda (ZPCCStack),y + + iny + sty CStackPtr - inc StackPtr + ply + + clc + rts + +.90 pla +.9 lda #E.STACKERROR + sec + rts +*-------------------------------------- +CC.Pop ldy CStackPtr + beq .9 + + lda (ZPCCStack),y + + inc CStackPtr clc rts @@ -1118,7 +585,17 @@ CC.Pop ldy StackPtr sec rts *-------------------------------------- -* CHAR related Subs..... +* ZPLineBufPtr related Subs..... +*-------------------------------------- +CC.SkipX txa +CC.SkipA clc + adc ZPLineBufPtr + sta ZPLineBufPtr + bcc .8 + + inc ZPLineBufPtr+1 + +.8 rts *-------------------------------------- CC.GetOPLen ldy #0 @@ -1190,10 +667,10 @@ CC.GetNextChar inc ZPLineBufPtr CC.GetChar lda (ZPLineBufPtr) bne .8 - lda hDefine + lda hDefineBuf beq .1 - stz hDefine + stz hDefineBuf phx phy @@ -1205,7 +682,7 @@ CC.GetChar lda (ZPLineBufPtr) ply plx bra CC.GetChar - + .1 lda #C.CR .8 clc @@ -1215,7 +692,23 @@ CC.GetChar lda (ZPLineBufPtr) sec .99 rts *--------------------------------------- -CC.IsEndArg +CC.IsEndArg cmp #']' + beq .8 + + cmp #';' + beq .8 + + cmp #',' + beq .8 + + cmp #')' + beq .8 + + sec + rts + +.8 clc + rts *--------------------------------------- CC.IsOPChar ldx #CC.OPChars.Cnt-1 @@ -1266,21 +759,6 @@ CC.IsDigit10 cmp #'0' .9 sec rts *-------------------------------------- -* in : Y,A = type/qual -* out : X = size -*-------------------------------------- -CC.GetVarSize and #CC.Q.PPPOINTER - bne .2 - - ldx CC.TYPESIZE-1,y - - clc - rts - -.2 ldx #2 pointer - sec +1 for hMem Storage - rts -*-------------------------------------- MAN SAVE usr/src/bin/cc.s.core LOAD usr/src/bin/cc.s diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt new file mode 100644 index 00000000..11252f8c --- /dev/null +++ b/BIN/CC.S.DECL.txt @@ -0,0 +1,10 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +CC.DECL. +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.decl +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.DIR.txt b/BIN/CC.S.DIR.txt index 36c6450c..eeccec48 100644 --- a/BIN/CC.S.DIR.txt +++ b/BIN/CC.S.DIR.txt @@ -27,7 +27,7 @@ CC.DIR.DEFINE jsr CC.CheckSpace bcs .90 >LDA.G CC.hDefines - jsr CC.NewKey + jsr CC.SYM.NewKey bcs .99 >STYA ZPSymID diff --git a/BIN/CC.S.EXEC.txt b/BIN/CC.S.EXEC.txt index 15a62d4f..95ce4a2d 100644 --- a/BIN/CC.S.EXEC.txt +++ b/BIN/CC.S.EXEC.txt @@ -4,27 +4,30 @@ NEW *-------------------------------------- CC.BOPS.bMUL CC.BOPS.cMUL + inc pStack clc rts *-------------------------------------- CC.BOPS.bDIV CC.BOPS.cDIV + inc pStack clc rts *-------------------------------------- CC.BOPS.bMOD CC.BOPS.cMOD + inc pStack clc rts *-------------------------------------- -CC.BOPS.ADD clc +CC.BOPS.ADD clc >PULLA adc (pStack) sta (pStack) clc rts *-------------------------------------- -CC.BOPS.SUB sec +CC.BOPS.SUB sec ldy #1 lda (pStack),y sbc (pStack) @@ -33,56 +36,113 @@ CC.BOPS.SUB sec clc rts *-------------------------------------- -CC.BOPS.SHL lda (pStack) +CC.BOPS.SHL >PULLA tax beq .8 - ldy #1 - lda (pStack),y + lda (pStack) .1 asl dex bne .1 - sta (pStack),y + sta (pStack) -.8 inc pStack - clc - rts +.8 rts *-------------------------------------- -CC.BOPS.SHR lda (pStack) +CC.BOPS.SHR >PULLA tax beq .8 - ldy #1 - lda (pStack),y + lda (pStack) .1 lsr dex bne .1 - sta (pStack),y + sta (pStack) -.8 inc pStack - clc +.8 rts +*-------------------------------------- +CC.BOPS.L >PULLA + cmp (pStack) + bcc .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) rts *-------------------------------------- -CC.BOPS.L -CC.BOPS.G -CC.BOPS.LE -CC.BOPS.GE -CC.BOPS.EQ -CC.BOPS.NE +CC.BOPS.G >PULLA + cmp (pStack) + beq .1 + bcs .8 -CC.BOPS.AND -CC.BOPS.OR -CC.BOPS.EOR +.1 lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) + rts +*-------------------------------------- +CC.BOPS.LE >PULLA + cmp (pStack) + bcc .8 + beq .8 + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) + rts +*-------------------------------------- +CC.BOPS.GE >PULLA + cmp (pStack) + bcs .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) + rts +*-------------------------------------- +CC.BOPS.EQ >PULLA + cmp (pStack) + beq .8 + + lda #0 + sta (pStack) + +.8 rts +*-------------------------------------- +CC.BOPS.NE >PULLA + eor (pStack) + sta (pStack) + rts +*-------------------------------------- CC.BOPS.LAND +CC.BOPS.AND >PULLA + and (pStack) + sta (pStack) + rts +*-------------------------------------- CC.BOPS.LOR - - - clc +CC.BOPS.OR >PULLA + ora (pStack) + sta (pStack) + rts +*-------------------------------------- +CC.BOPS.EOR >PULLA + eor (pStack) + sta (pStack) rts *-------------------------------------- MAN diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index f3436fa8..274c398b 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -6,43 +6,46 @@ NEW * ZPLineBufPtr, Y,A = Expected type/qual * Output: * CS, A = EC -* CC, Y,A = type/qual, Value on Stack +* CC, Y,A = type/qual *-------------------------------------- -CC.ExpEval ldx ZPPtr1 - phx - ldx ZPPtr1+1 local : used by lookup - phx +CC.EXP.Eval00 lda #0 + tay - ldx ZPPtr2 local : expected T/Q +CC.EXP.Eval ldx ZPPtr2 local : expected T/Q phx ldx ZPPtr2+1 phx ldx ZPPtr3 local : BOP phx - - ldx ZPPtr3+1 local : PREOPS + ldx ZPPtr3+1 local : PREOP phx - >STYA ZPPtr2 + >STYA ZPPtr2 lda #$ff no previous OP pha *-------------------------------------- .10 jsr CC.GetCharNB bcs .19 - - jsr CC.ExpPreops - bcs .19 -.11 cmp #'(' + cmp #'(' bne .20 jsr CC.GetNextCharNB skip ( bcs .19 - >LDYA ZPPtr2 expected T/Q - jsr CC.ExpEval + >LDYA L.CC.TYPEQUAL + jsr CC.LookupID + bcs .12 + + jsr CC.EXP.Cast + bcs .19 + + bra .20 +*-------------------------------------- +.12 >LDYA ZPPtr2 expected T/Q + jsr CC.EXP.Eval bcs .19 >STYA ZPPtr2 update T/Q @@ -56,32 +59,44 @@ CC.ExpEval ldx ZPPtr1 jsr CC.GetNextCharNB skip ) bcc .31 -.19 jmp .90 +.19 jmp CC.EXP.Eval.ESYN *-------------------------------------- -.20 jsr CC.IsLetter define, f() or Var ? +.20 jsr CC.ExpPreops + bcs .29 + + jsr CC.IsLetter define, f() or Var ? bcs .22 jsr CC.GetDefine bcc .10 - jsr CC.SymLookup + jsr CC.SYM.Lookup bcs .22 - >LDA.G CC.VarDef+1 qual - and #CC.Q.FUNC + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.FUNC bne .21 - jsr CC.ExpGet Check T/Q & Get value on stack + jsr CC.EXP.CheckGetSymType bcs .29 + jsr CC.EXP.Get Check T/Q & Get value on stack + bcs .29 + + jsr CC.SYM.FreeBufPop + bra .30 *-------------------------------------- .21 >LDYA ZPPtr2 get expected T/Q - jsr CC.fExecRetV + jsr CC.F.CallRetV bcs .29 >STYA ZPPtr2 store real T/Q + + jsr CC.SYM.FreeBufPop + bra .30 *-------------------------------------- .22 jsr CC.IsDigit10 number ? @@ -90,148 +105,181 @@ CC.ExpEval ldx ZPPtr1 ldy ZPPtr2 bne .23 - ldy #CC.T.SINT + ldy #SYM.T.SINT sty ZPPtr2 stz ZPPtr2+1 -.23 jsr CC.GetNumOnStack +.23 jsr CC.EXP.GetNum bcs .29 bra .30 - +*-------------------------------------- .24 cmp #'"' String literal - bne .90 + bne CC.EXP.Eval.ESYN jsr CC.AddContCharP -.29 bcs .99 +.29 bcs CC.EXP.Eval.Err *-------------------------------------- .30 jsr CC.GetCharNB - bcs .90 + bcs CC.EXP.Eval.ESYN -.31 cmp #';' - beq .80 - - cmp #',' - beq .80 - - cmp #')' - beq .80 +.31 jsr CC.IsEndArg , ; ) ? + bcc CC.EXP.Eval.End jsr CC.IsOPChar - bcs .90 + bcs CC.EXP.Eval.ESYN - >LDYA L.CC.BOPS we are at V1 op1 V2 op2... + >LDYA L.CC.BOPS we are at V1 op1 V2 op2... jsr CC.LookupOP - bcs .90 + bcs CC.EXP.Eval.ESYN stx ZPPtr3 save OP(n) -.32 plx get OP(n-1) - bmi .33 $ff.... +.33 plx get OP(n-1) + bmi .38 $ff.... cpx ZPPtr3 - bcc .33 OP(n) has precedence, on stack : V1,V2 + bcc .38 OP(n) has precedence, on stack : V1,V2 >LDYA ZPPtr2 OP(n-1) has precedence... - jsr CC.ExpBops compute V(n-1) V(n) - bcc .32 + jsr CC.EXP.BOPS compute V(n-1) V(n) + bcc .33 - bcs .99 + bcs CC.EXP.Eval.Err -.33 phx push back OP(n-1) +.38 phx push back OP(n-1) lda ZPPtr3 get OP(n) pha push OP(n) on stack jmp .10 go check for next token *-------------------------------------- -.80 plx any OP on stack ? - bmi .88 +CC.EXP.Eval.End plx any OP on stack ? + bmi CC.EXP.Eval.Exit >LDYA ZPPtr2 Var Type - jsr CC.ExpBops - bcc .80 + jsr CC.EXP.BOPS + bcc CC.EXP.Eval.End - bcs .99 + bra CC.EXP.Eval.Err +*-------------------------------------- +CC.EXP.Eval.ESYN + lda #E.ESYN -.90 lda #E.ESYN - -.99 plx - bpl .99 +CC.EXP.Eval.Err + plx + bpl CC.EXP.Eval.Err sec - bra .89 + bra CC.EXP.Eval.ExitErr +*-------------------------------------- +CC.EXP.Eval.Exit + >LDYA ZPPtr2 Type/Qual + clc -.88 clc - - >LDYA ZPPtr2 Type/Qual - -.89 plx +CC.EXP.Eval.ExitErr + plx stx ZPPtr3+1 plx stx ZPPtr3 + plx stx ZPPtr2+1 plx stx ZPPtr2 - plx - stx ZPPtr1+1 - plx - stx ZPPtr1 rts *-------------------------------------- +CC.EXP.CheckGetSymType + lda ZPPtr2 + ora ZPPtr2+1 + bne .1 + + lda (ZPSymBufPtr) + sta ZPPtr2 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + sta ZPPtr2+1 + + clc + rts + +.1 >LDYA ZPPtr2 + jmp CC.SYM.CheckTypeYA +*-------------------------------------- +CC.EXP.Cast jsr CC.TYPE.Decl + bcs .99 + + >STYA ZPPtr2 + + jsr CC.GetCharNB + bcs .9 + + cmp #')' + bne .9 + + jsr CC.GetNextCharNB skip ) + + clc + rts + +.9 lda #E.ESYN + sec +.99 rts +*-------------------------------------- CC.ExpPreops >LDYA L.CC.PREOPS jsr CC.LookupOP bcc .8 - + ldx #$ff .8 stx ZPPtr3+1 - + jmp CC.GetCharNB *-------------------------------------- * Y,A = Type/Qual, X = OP *-------------------------------------- -CC.ExpBops cpy #CC.T.UINT +CC.EXP.BOPS cpy #SYM.T.UINT bcs .3 - cpy #CC.T.UCHAR + cpy #SYM.T.UCHAR beq .1 - cpy #CC.T.SCHAR + cpy #SYM.T.SCHAR beq .2 lda #E.TMISMATCH sec rts -.1 ldy J.CC.bBOPS,x - lda J.CC.bBOPS+1,x +.1 lda J.CC.bBOPS,x + ldy J.CC.bBOPS+1,x tax - jsr CODE.JSRYX + lda #$20 JSR + jsr CODE.TOABSYX clc rts -.2 ldy J.CC.cBOPS,x - lda J.CC.cBOPS+1,x +.2 lda J.CC.cBOPS,x + ldy J.CC.cBOPS+1,x tax - jsr CODE.JSRYX + lda #$20 JSR + jsr CODE.TOABSYX clc rts .3 txa clc - adc CC.Type2FPU-CC.T.UINT,y + adc CC.Type2FPU-SYM.T.UINT,y tax jsr CODE.FPUCALL clc rts *-------------------------------------- -CC.AddContCharP - ldy #0 +CC.AddContCharP ldy #0 .1 jsr CC.GetNextChar bcs .9 @@ -270,8 +318,7 @@ CC.AddContCharP sec rts *-------------------------------------- -CC.GetNumOnStack - cpy #CC.T.FLOAT +CC.EXP.GetNum cpy #SYM.T.FLOAT bcc .1 beq .11 @@ -310,6 +357,11 @@ CC.GetNumOnStack .3 bcs .9 + ldy #1 anticipate 2 bytes if * + lda ZPPtr2+1 + and #SYM.Q.PPPOINTER + bne .5 + ldx ZPPtr2 lda CC.TYPESIZE-1,x @@ -325,96 +377,235 @@ CC.GetNumOnStack * clc .9 rts *-------------------------------------- -CC.SymLookup >PUSHB.G CC.hSymbols - - >PUSHW ZPLineBufPtr - >SYSCALL SListLookup - bcs .9 - - phy - pha - - txa -* clc - adc ZPLineBufPtr - sta ZPLineBufPtr - bcc .1 - - inc ZPLineBufPtr+1 - -.1 >PUSHB.G CC.hSymbols - - pla - >PUSHA - pla - >PUSHA KeyID - - >PUSHEA.G CC.VarDef - >PUSHWI SYMDEFSIZE - >PUSHWZ From Start - >SYSCALL SListGetData -.9 rts -*-------------------------------------- * ZPPtr2 = expected T/Q * ZPPtr3+1 = PREOPS *-------------------------------------- -CC.ExpGet ldx ZPPtr3+1 - bmi CC.ExpGet2 +CC.EXP.Get >LDYA L.CC.AOPS + jsr CC.LookupOP + bcs .20 - jmp (J.CC.PREOPS,x) + >LDYA ZPPtr2 get expected T/Q + jsr CC.EXP.Eval + bcs .99 + + jsr CC.SYM.SetValue + bcs .99 + + clc + rts +*-------------------------------------- +.20 >LDYA L.CC.POSTOPS + jsr CC.LookupOP + bcs .1 + + cpx #4 '[' + bne * + + jmp CC.EXP.Array +*-------------------------------------- +.1 ldx ZPPtr3+1 preop + bpl .8 + + lda ZPPtr2 target T + beq .3 + + lda (ZPSymBufPtr) SYM.T + cmp #SYM.T.VOID + beq .2 + + cmp ZPPtr2 T + bne .9 + +.2 lda ZPPtr2+1 Q + + ldy #SYM.Q + cmp (ZPSymBufPtr),y + bne .9 + +.3 lda (ZPSymBufPtr) SYM.T + sta ZPPtr2 T + pha + ldy #SYM.Q + lda (ZPSymBufPtr),y + sta ZPPtr2+1 Q + ply Y,A = T/Q + + jsr CC.SYM.PushValue + + clc +.99 rts + +.9 lda #E.TMISMATCH + sec + rts + +.8 jmp (J.CC.PREOPS,x) +*-------------------------------------- +CC.EXP.Array ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.AAARRAY + beq .9 + + jsr CC.EXP.PushDeref push base address + + ldy #SYM.T.SINT + lda #0 + + jsr CC.EXP.Eval + bcs .99 int16 on stack + + jsr CC.GetCharNB + bcs .9 + + cmp #']' + bne .9 + + jsr CC.GetNextCharNB skip ']' + bcs .9 + + jsr CC.SYM.GetSymSizeOfInAXC + + pha + txa + jsr CODE.PUSHI + pla + jsr CODE.PUSHI sizeof on stack + + ldx #FPU.iMUL + jsr CODE.FPUCALL sizeof*int16 + + ldx #FPU.iAdd + jsr CODE.FPUCALL add to base address + + lda (ZPSymBufPtr) SYM.T + pha + + ldy #SYM.Q + lda (ZPSymBufPtr),y + sec + sbc #SYM.Q.ARRAY + ply + + jsr CC.SYM.GetYASizeOfInAXC + jsr CODE.PushFromPtr A = byte count + + clc + rts + +.9 lda #E.ESYN + sec +.99 rts +*-------------------------------------- +CC.EXP.PushAddr ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + bne .7 +* LOCAL + jsr CODE.PUSHpBASEp1 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + jsr CODE.PUSHpBASEpA + + clc + rts +* DATASEG +.7 jsr CODE.PUSHI + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + jsr CODE.PUSHI + + clc + rts +*-------------------------------------- +CC.EXP.PushDeref + ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + bne .7 +* LOCAL + jsr CODE.SETpBASEp1 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + jsr CODE.SETpBASEpA + + jsr CODE.Deref -CC.ExpGet.Ref >LDA.G CC.VarDef+5 DataPtr+1 - jsr CODE.PUSHI - >LDA.G CC.VarDef+4 DataPtr - jsr CODE.PUSHI + clc + rts +* DATASEG +.7 jsr CODE.LDAI + lda #$85 STA zp + jsr CODE.EmitByte + lda #ZPPtr1+1 + jsr CODE.EmitByte + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + jsr CODE.LDAI + + lda #$85 STA zp + jsr CODE.EmitByte + lda #ZPPtr1+1 + jsr CODE.EmitByte + + jsr CODE.Deref clc rts +*-------------------------------------- +CC.EXP.GetRef ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + jsr CODE.PUSHI -CC.ExpGet.Deref + ldy #SYM.Addr + lda (ZPSymBufPtr),y + jsr CODE.PUSHI + lda (ZPSymBufPtr) SYM.T + + sta ZPPtr2 T + + ldy #SYM.Q + lda (ZPSymBufPtr),y clc - rts + adc #SYM.Q.POINTER + bcs .9 more than *** - -CC.ExpGet2 lda ZPPtr2 target type - beq .1 - - >LDA.G CC.VarDef Type - cmp #CC.T.VOID - beq .11 - - cmp ZPPtr2 - bne .9 - -.11 lda ZPPtr2+1 qual - >CMP.G CC.VarDef+1 - bne .9 - -.1 >LDA.G CC.VarDef Type - sta ZPPtr2 - pha - iny - lda (pData),y - sta ZPPtr2+1 qual - ply - - jsr CC.GetVarSize X = size - - >LDA.G CC.VarDef+4 DataPtr - pha - iny - lda (pData),y - ply - -.3 jsr CODE.PushXFromYA - clc + sta ZPPtr2+1 Q +* clc rts .9 lda #E.TMISMATCH sec rts *-------------------------------------- +CC.EXP.GetDeref + + clc + rts +*-------------------------------------- +CC.EXP.IntConst >PUSHW ZPLineBufPtr + >PUSHWI ZPLineBufPtr + >PUSHBI 10 + >SYSCALL StrToUL + + >PULLA + tay + + >PULLA + + inc pStack + inc pStack + + rts +*-------------------------------------- MAN SAVE usr/src/bin/cc.s.exp LOAD usr/src/bin/cc.s diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt new file mode 100644 index 00000000..57540cc3 --- /dev/null +++ b/BIN/CC.S.F.txt @@ -0,0 +1,435 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +CC.F.Decl stz LocalPtr + + jsr CC.PushTQ push T/Q for RETURN + bcs .99 + + ldy #SYM.Q + lda #SYM.Q.FUNC + ora (ZPSymBufPtr),y + sta (ZPSymBufPtr),y + + ldx #$80 CPStmt.fDef state + jsr CC.STMT.CPStmt + bcs .99 + + jsr CC.SYM.NewScope + bcs .99 + + jsr CC.GetNextCharNB Skip ( + bcs .9 + + cmp #')' func() + beq .6 +*-------------------------------------- +.1 jsr CC.F.DeclGetTQ + bcs .99 + + >STYA ZPPtr2 Save T/Q + + jsr CC.F.AddTQ + + jsr CC.GetCharNB + bcs .9 + + jsr CC.IsLetter + bcs .2 + + jsr CC.SYM.Push + bcs .99 + + >LDYA ZPPtr2 + ldx #SYM.SC.AUTO + jsr CC.SYM.New + bcs .99 + + jsr CC.SYM.Store Store f() Args in Local scope + bcs .99 + + jsr CC.SYM.FreeBufPop + bcs .99 + + jsr CC.GetCharNB + bcs .9 + +.2 cmp #')' + beq .6 + + cmp #',' + bne .9 + + jsr CC.GetNextCharNB Skip , + bcc .1 + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +.6 ldy #0 + lda #0 + jsr CC.F.AddTQ + + jsr CC.GetNextCharNB Skip ) + bcs .9 + + cmp #';' + bne .7 + + jsr CC.SYM.FreeScope discard local scope + + lda CStackPtr + clc + adc #6 + sta CStackPtr discard this CPStmt + + stz LocalPtr reset for DEBUG Message + + clc + rts +*-------------------------------------- +.7 cmp #'{' + bne .9 + + ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + dey + ora (ZPSymBufPtr),y + bne .90 Already populated by LINK + + >LDYA ZPCCCode f() Code starts HERE + jsr CC.SYM.SetAddrYA + + lda LocalPtr + jsr CODE.LDAI A = f() ARGS size + jsr CODE.Enter + + clc Store f() Declaration / Start Definition + rts + +.90 lda #E.REDEF + sec + rts +*-------------------------------------- +CC.F.DeclGetTQ lda (ZPLineBufPtr) + cmp #'.' + bne .5 + + ldx #2 + +.1 jsr CC.GetNextChar + bcs .9 + + cmp #'.' + bne .9 + + dex + bne .1 + + jsr CC.GetNextCharNB + bcs .9 + + eor #')' + bne .9 + + ldy #SYM.T.VARIADIC Type +* lda #0 Qual +* clc + rts +*-------------------------------------- +.5 >LDYA L.CC.TYPEQUAL + jsr CC.LookupID + bcs .9 + + jsr CC.TYPE.Decl + bcs .9 + +* Y,A = Type/Qual + + bra .8 + +.9 lda #E.CSYN + sec + +.8 rts +*-------------------------------------- +CC.F.Def.END jsr CODE.Leave + + jsr CC.Pop T + jsr CC.Pop Q + + jsr CC.SYM.FreeScope + + stz LocalPtr back to global + + clc + rts +*-------------------------------------- +* in : ZPSymPtr +* Y,A = Expected T/Q +*-------------------------------------- +CC.F.CallNoRetV clc + .HS B0 BCS +CC.F.CallRetV sec + + ldx ZPPtr1 local : variadic size + phx + ldx ZPPtr1+1 local : bRetV + phx + + ldx ZPPtr2 local : expected T + phx + ldx ZPPtr2+1 local : expected Q + phx + + >STYA ZPPtr2 + + ror ZPPtr1+1 bRetV + bpl .20 no return value on stack + + ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + cmp #2 + bcc .20 SYS/FPU call, no ret value space + + jsr CC.SYM.GetSymSizeOfInAXC + jsr CODE.nAddLocal + +.20 stz ZPPtr1 Reset VARIADIC byte count + + jsr CC.GetNextCharNB skip '(' + bcs .10 + + jsr CC.SYM.GetTypeInYA Y,A = f() Return value T/Q + + ldx ZPPtr2 expected T + beq .1 no check required + + cpy ZPPtr2 + bne .91 + + tax save full Q + + and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL + cmp ZPPtr2+1 + bne .91 + + txa + +.1 >STYA ZPPtr2 save full T/Q for later + + lda #SYM.Def + sta ZPSymSize + + jsr CC.F.GetTQ get First Arg T/Q + beq .7 end of list, go check ending ')' +*-------------------------------------- +.3 cpy #SYM.T.VARIADIC + bne .4 + + lda #0 Expected T/Q = 0 if VARIADIC + tay + +.4 jsr CC.EXP.Eval + bcs .93 + + jsr CC.SYM.GetYASizeOfInAXC + tax save Sizeof in X + + jsr CC.F.GetTQ + cpy #SYM.T.VARIADIC + bne .50 if VARIADIC, don't advance to next arg + + txa + clc make sure pointer only 2 bytes + adc ZPPtr1 + sta ZPPtr1 Add to byte count + bra .5 + +.50 inc ZPSymSize + inc ZPSymSize + +.5 jsr CC.GetCharNB + +.10 bcs .90 + + cmp #',' + bne .6 + + jsr CC.GetNextCharNB Skip ',' + + jsr CC.F.GetTQ + bne .3 Another ARG.... + + bra .90 extra args....error + +.6 cmp #')' + bne .90 + + jsr CC.F.GetTQ + beq .8 no more arg after ')', exit + + cpy #SYM.T.VARIADIC + bne .90 missing arg + + lda ZPPtr1 push VARIADIC byte count + + jsr CODE.PUSHI + +.7 jsr CC.GetCharNB + bcs .90 + + cmp #')' + bne .90 + +.8 jsr CC.GetNextCharNB Skip ) + + jsr CC.F.Call2 + bra .93 + +.90 lda #E.CSYN + bra .92 + +.91 lda #E.TMISMATCH + +.92 sec + +.93 plx + stx ZPPtr2+1 + plx + stx ZPPtr2 + + plx + stx ZPPtr1+1 + plx + stx ZPPtr1 + +.99 rts +*-------------------------------------- +* X = last var size +*-------------------------------------- +CC.F.Call2 lda ZPPtr2+1 + bit #SYM.Q.FASTCALL + beq .1 + + ldy #SYM.Def Get first (only) argument + jsr CC.F.GetTQAtY + jsr CC.TYPE.SizeOf + + dex + bne .19 + + jsr CODE.PULLA + bra .1 + +.19 jsr CODE.PULLYA + +.1 jsr CC.F.Call3 + bcs .9 + + bit ZPPtr1+1 bRetV + bmi .5 + +* NO Return Value : call & discard stack if not in Y,A + + >LDYA ZPPtr2 function T/Q + jsr CC.TYPE.SizeOf + txa + beq .11 void + + cpx #3 A or Y,A + bcc .11 + +.10 jsr CODE.INCPSTACK + dex + bne .10 + +.11 clc +.9 rts + +* Return Value : call & put result on stack if in Y,A + +.5 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + cmp #2 + bcs .8 not a SYS/FPU call...Ret value on stack + + >LDYA ZPPtr2 function T/Q + jsr CC.TYPE.SizeOf + cpx #3 + bcs .8 leave on stack + + dex + bne .60 + + jsr CODE.PUSHA push ONE byte one stack + bra .8 + +.60 jsr CODE.PUSHYA push TWO bytes one stack + +.8 >LDYA ZPPtr2 T/Q + and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL + clc + rts +*-------------------------------------- +CC.F.Call3 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + beq .9 + + pha + + dey + lda (ZPSymBufPtr),y + tax + + ply + + cpy #1 + bne .1 + + jsr CODE.SYSCALL + clc + rts + +.1 cpy #2 + bne .2 + + jsr CODE.FPUCALL + clc + rts + +.2 lda #$20 JSR abs + jsr CODE.TOABSYX Y=HI,X=LO + clc + rts + +.9 lda #E.FUNDEF + sec + rts +*-------------------------------------- +CC.F.AddTQ pha + tya + ldy ZPSymSize + sta (ZPSymBufPtr),y + iny + pla + sta (ZPSymBufPtr),y + iny + sty ZPSymSize + rts +*-------------------------------------- +CC.F.GetTQ ldy ZPSymSize + +CC.F.GetTQAtY lda (ZPSymBufPtr),y + pha + iny + lda (ZPSymBufPtr),y + ply + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.f +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index 59b2ce4e..d04847c7 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -8,12 +8,10 @@ CC.KW.JMP txa >STA.G CC.CmdSave jmp (J.CC.KW,x) *-------------------------------------- -CC.WHILE jsr CC.PushCS push Test location for WHILE loop - bcc CC.IF - - rts +CC.KW.WHILE jsr CC.PushCS push cont: for WHILE loop + bcs CC.KW.IF.RTS *-------------------------------------- -CC.IF jsr CC.GetCharNB +CC.KW.IF jsr CC.GetCharNB bcs .9 cmp #'(' @@ -22,12 +20,15 @@ CC.IF jsr CC.GetCharNB jsr CC.GetNextCharNB bcs .9 - ldy #0 Any var type - lda #0 - jsr CC.ExpEval + jsr CC.EXP.Eval00 Any var type bcs .99 - jsr CC.IsValue0 + jsr CC.KW.TestZero + + jsr CC.PushCS push place to set JMP false + bcs .99 + + jsr CC.KW.ZPCCCodeAdd2 jsr CC.GetCharNB bcs .99 @@ -35,44 +36,21 @@ CC.IF jsr CC.GetCharNB cmp #')' bne .9 - jsr CC.GetNextCharNB skip ')' - bcs .9 + jmp CC.KW.BEGIN - jsr CC.PushCS push place to set JMP if false - bcs .99 - - lda ZPCCCode - clc - adc #2 - sta ZPCCCode - bcc .5 - - inc ZPCCCode+1 - -.5 >LDA.G CC.CmdSave - jsr CC.Push push IF / WHILE - bcs .99 - - lda #'}' end block expected - jmp CC.Push - .9 lda #E.CSYN sec -.99 rts +.99 +CC.KW.IF.RTS rts *-------------------------------------- -CC.IF.END jsr CC.Pop - bcs .9 - - sta ZPPtr1 - - jsr CC.Pop +CC.KW.IF.END jsr CC.PopYA bcs .9 - sta ZPPtr1+1 - + >STYA ZPPtr1 set JMP false + lda ZPCCCode sta (ZPPtr1) - + ldy #1 lda ZPCCCode+1 sta (ZPPtr1),y @@ -81,36 +59,34 @@ CC.IF.END jsr CC.Pop .9 rts *-------------------------------------- -CC.ELSE +CC.KW.ELSE clc rts *-------------------------------------- -CC.WHILE.END jsr CC.Pop +CC.KW.ELSE.END + + clc + rts +*-------------------------------------- +CC.KW.WHILE.END jsr CC.PopYA Get JMP false location + bcs .9 + + >STYA ZPPtr1 + + jsr CC.PopYA Get cont: address bcs .9 - sta ZPPtr1 - - jsr CC.Pop - bcs .9 - - sta ZPPtr1+1 - - jsr CC.Pop - bcs .9 - - pha - - jsr CC.Pop - bcs .9 - - tax - ply - jsr CODE.JMPYX + phy + tay HI byte + plx + + lda #$4C JMP cont: + jsr CODE.TOABSYX lda ZPCCCode sta (ZPPtr1) - + ldy #1 lda ZPCCCode+1 sta (ZPPtr1),y @@ -119,25 +95,201 @@ CC.WHILE.END jsr CC.Pop .9 rts *-------------------------------------- -CC.DO -CC.FOR -CC.SWITCH -CC.CASE -CC.BREAK -CC.CONTINUE -CC.SIZEOF -*-------------------------------------- -CC.TYPEDEF lda #E.CSYN +CC.KW.DO + lda #E.CSYN sec rts *-------------------------------------- -CC.STRUCT >ENTER 4 +CC.KW.DO.END + clc + rts +*-------------------------------------- +* for (e1;e2;e3) s; +* +* e1; +* while (e2) +* { +* s; +* cont: +* e3; +* } +* break: +*-------------------------------------- +CC.KW.FOR jsr CC.GetCharNB + bcs .19 + + cmp #'(' + bne .19 + + jsr CC.GetNextCharNB + bcs .19 + + jsr CC.EXP.Eval00 get e1 + bcs .29 + + jsr CC.KW.StackDiscard + + jsr CC.GetCharNB + bcs .19 + + cmp #';' + bne .19 + + jsr CC.GetNextCharNB skip ';' +.19 bcs .9 +*-------------------------------------- + >LDYA ZPCCCode + >STYA ZPPtr2 save LOOP address + + jsr CC.EXP.Eval00 get e2 +.29 bcs .99 + + jsr CC.KW.TestZero + + jsr CC.PushCS push place to set JMP break: + bcs .99 + + jsr CC.KW.ZPCCCodeAdd2 + + lda #$20 emit JSR s; + jsr CODE.EmitByte + + >LDYA ZPCCCode + >STYA ZPPtr3 save place to set JSR s + + jsr CC.KW.ZPCCCodeAdd2 space for 2-bytes address + + jsr CC.GetCharNB + bcs .9 + + cmp #';' + bne .9 + + jsr CC.GetNextCharNB skip ';' + bcs .9 +*-------------------------------------- + jsr CC.PushCS push cont: address + + jsr CC.EXP.Eval00 get e3 + bcs .99 + + jsr CC.KW.StackDiscard + + jsr CC.GetCharNB + bcs .9 + + cmp #')' + bne .9 + + lda #$4C + ldx ZPPtr2 + ldy ZPPtr2+1 + jsr CODE.TOABSYX JMP e2 + + lda ZPCCCode setup JSR s; + sta (ZPPtr3) + + lda ZPCCCode+1 + ldy #1 + sta (ZPPtr3),y + + jmp CC.KW.BEGIN + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +CC.KW.FOR.END lda #$60 + + jsr CODE.EmitByte set RTS for JSR s; + + jsr CC.Pop + bcs .9 + + jsr CC.Pop discard cont: location + bcs .9 + + jsr CC.PopYA + bcs .9 + + >STYA ZPPtr1 get JMP break: location + + lda ZPCCCode + sta (ZPPtr1) + + ldy #1 + lda ZPCCCode+1 + sta (ZPPtr1),y + + clc + +.9 rts +*-------------------------------------- +CC.KW.SWITCH +CC.KW.CASE +CC.KW.BREAK +CC.KW.CONTINUE + lda #E.CSYN + sec + rts +*-------------------------------------- +CC.KW.RETURN ldy CStackPtr + beq .9 + +.1 iny skip ; or } + beq .9 + + lda (ZPCCStack),y + bmi .7 f() + + tya + clc + adc #3 skip CPStmt (4 bytes) + tay + bcc .1 + +.9 lda #E.STACKERROR + sec +.99 rts + +.7 iny skip bState + iny skip Locals + + iny get SYM.T + lda (ZPCCStack),y + + pha + + iny get SYM.Q + lda (ZPCCStack),y + + ply + + jsr CC.EXP.Eval + bcs .99 + + jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q + tax X = sizeof + jsr CODE.SetRetValue + + jsr CODE.Leave + + clc + rts +*-------------------------------------- +CC.KW.SIZEOF +*-------------------------------------- +CC.KW.TYPEDEF lda #E.CSYN + sec + rts +*-------------------------------------- +CC.KW.STRUCT >ENTER 4 jsr CC.GetCharNB bcs .99 >LDA.G CC.hTags - jsr CC.NewKey + jsr CC.SYM.NewKey bcs .99 sta (pStack) Y,A = KeyID @@ -163,21 +315,32 @@ CC.STRUCT >ENTER 4 .99 >LEAVE rts *-------------------------------------- +CC.KW.BEGIN jsr CC.GetNextCharNB + bcs .9 + + cmp #'{' + bne .7 + + >LDA.G CC.CmdSave + tax + jmp CC.STMT.CPStmt + +.7 >LDA.G CC.CmdSave + jsr CC.Push + bcs .99 + + lda #';' + jmp CC.Push + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual * Output : CC = true, CS = false *-------------------------------------- -CC.IsValue0 and #CC.Q.PPPOINTER - beq .2 - - ldx #2 - bra .6 - -.2 cpy #CC.T.FLOAT - bcc .5 char,int,long - - ldx #5 -*-------------------------------------- -.5 jsr CC.GetVarSize +CC.KW.TestZero jsr CC.SYM.GetYASizeOfInAXC + tax .6 lda #$A2 LDX #imm jsr CODE.EmitByte @@ -186,7 +349,7 @@ CC.IsValue0 and #CC.Q.PPPOINTER ldx #PCC.Test0X.L ldy #0 - + .7 lda PCC.Test0X,y jsr CODE.EmitByte iny @@ -196,142 +359,29 @@ CC.IsValue0 and #CC.Q.PPPOINTER clc rts *-------------------------------------- -* Type Declaration keywords -*-------------------------------------- -CC.CONST ldy #1 - - lda (pStack),y - ora #CC.Q.CONST - sta (pStack),y - - jsr CC.CheckSpace - bcs .9 - - >LDYA L.CC.TMODS2 - jsr CC.LookupID - bcs .9 - - jmp (J.CC.TMODS2,x) - -.9 lda #E.CSYN - sec - rts -*-------------------------------------- -CC.SIGNED sec - .HS 90 BCC -*-------------------------------------- -CC.UNSIGNED clc - php - - jsr CC.CheckSpace - bcs .9 - - >LDYA L.CC.TYPES - jsr CC.LookupID - - bcs .9 - - cpx #CC.T.UCHAR - bcc .9 void - - cpx #CC.T.SLONG+1 only char int long allowed - bcs .9 - - plp - bcs .8 - - jmp (J.CC.UTYPES-2,x) - -.8 jmp (J.CC.STYPES-2,x) - -.9 plp - - lda #E.CSYN - sec - rts -*-------------------------------------- -CC.SHORT jsr CC.CheckSpace - bcs .9 - - >LDYA L.CC.TYPES - jsr CC.LookupID - - bcs CC.UCHAR - - cpx #4 only int allowed - beq CC.SCHAR - -.9 lda #E.CSYN - sec - rts -*-------------------------------------- -CC.VOID lda #CC.T.VOID - bra CC.TYPE - -CC.CHAR -CC.UCHAR lda #CC.T.UCHAR - bra CC.TYPE - -CC.SCHAR lda #CC.T.SCHAR - bra CC.TYPE - -CC.UINT lda #CC.T.UINT - bra CC.TYPE - -CC.INT -CC.SINT lda #CC.T.SINT - bra CC.TYPE - -CC.ULONG lda #CC.T.ULONG - bra CC.TYPE - -CC.LONG -CC.SLONG lda #CC.T.SLONG - bra CC.TYPE - -CC.FLOAT lda #CC.T.FLOAT - -CC.TYPE sta (pStack) - - jsr CC.GetCharNB - bcs .9 - - ldy #1 - -.1 cmp #'*' - bne .10 - - lda (pStack),y +CC.KW.ZPCCCodeAdd2 + lda ZPCCCode clc - adc #CC.Q.POINTER - bcs .9 more than *** + adc #2 + sta ZPCCCode + bcc .8 - sta (pStack),y - - jsr CC.GetNextCharNB - bcc .1 - -.9 lda #E.CSYN - sec -.99 rts + inc ZPCCCode+1 -.10 jsr CC.IsLetter - bcs .8 +.8 rts +*-------------------------------------- +* Input : Value on Stack, Y,A = Type/Qual +*-------------------------------------- +CC.KW.StackDiscard - >LDYA L.CC.FTYPES - jsr CC.LookupID - bcs .8 next char is an identifier - - ldy #1 - lda (pStack),y - ora #CC.Q.FUNC+CC.Q.FASTCALL - sta (pStack),y + jsr CC.TYPE.SizeOf + txa + beq .8 void + + jsr CODE.AddLocal - jsr CC.GetNextCharNB - bcs .9 next char is an identifier, ",", "(",")" - .8 clc - rts +.9 rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.kw diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt new file mode 100644 index 00000000..baaf2062 --- /dev/null +++ b/BIN/CC.S.STMT.txt @@ -0,0 +1,53 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +* X = KW.ID +*-------------------------------------- +CC.STMT.CPStmt lda LocalPtr Locals + jsr CC.Push + bcs .99 + + lda #0 bState + jsr CC.Push + bcs .99 + + txa + jsr CC.Push + bcs .99 + + lda #'}' + jmp CC.Push + +.99 rts +*-------------------------------------- +CC.STMT.CPStmt.END + jsr CC.Pop + bcs .9 + + cmp #'}' must be '}' on stack.... + bne .9 + + jsr CC.Pop get stacked KW... + tax + + jsr CC.Pop bState + + jsr CC.Pop Locals + sta LocalPtr + + txa + bmi .5 + + jmp (J.CC.KW.END,x) + +.5 jmp CC.F.Def.END + +.9 lda #E.CSYN + sec + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.stmt +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt new file mode 100644 index 00000000..a56f2956 --- /dev/null +++ b/BIN/CC.S.SYM.txt @@ -0,0 +1,556 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +* Input : ZPLineBufPtr, Y,A = T/Q, X = SC +* Output : Y,A = VarID +*-------------------------------------- +CC.SYM.New >STYA ZPPtr2 T/Q + stx ZPPtr3 SC + + ldy ScopePtr + lda (pData),y + sta hSymScope + jsr CC.SYM.NewKey + bcs .9 + + >STYA ZPSymID Y,A = KeyID, X = KeyLen + + >LDYAI 256 + >SYSCALL GetMem + bcs .9 + + >STYA ZPSymBufPtr + stx hSymBuf + + >LDYA ZPPtr2 + jsr CC.SYM.SetTypeYA + + lda ZPPtr3 + ldy #SYM.SC + sta (ZPSymBufPtr),y + + lda #SYM.Def + sta ZPSymSize + stz ZPSymSize+1 + + jsr CC.GetCharNB + bcs CC.SYM.SetAddr + + cmp #'(' + bne CC.SYM.NewV + + jmp CC.F.Decl + +.9 rts +*-------------------------------------- +CC.SYM.NewV cmp #'[' + bne CC.SYM.SetAddr + + jsr CC.GetNextCharNB Skip [ + bcs .99 + + cmp #']' + bne .3 + +.2 ldy #SYM.Q + lda (ZPSymBufPtr),y + bit #SYM.Q.PPPOINTER + beq .99 + + and #SYM.Q.AAARRAY + cmp #SYM.Q.AAARRAY + bcs .99 + +* ldy #SYM.Q + lda (ZPSymBufPtr),y +* clc + adc #SYM.Q.ARRAY + sta (ZPSymBufPtr),y + + jsr CC.GetNextCharNB Skip ] + bcs CC.SYM.SetAddr + + cmp #'[' + beq .2 + + bra CC.SYM.SetAddr +*-------------------------------------- +.3 jsr CC.EXP.IntConst + bcs .9 + + jsr CC.SYM.SetSizeOf + + jsr CC.GetCharNB + bcs .99 + + cmp #']' + bne .99 + + jsr CC.GetNextCharNB Skip ] + bcs CC.SYM.SetAddr + +* cmp #'[' +* bne CC.SYM.SetAddr + + bra CC.SYM.SetAddr + +.99 lda #E.CSYN + sec + +.9 rts +*-------------------------------------- +CC.SYM.SetAddr ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.FUNC + bne .9 + + ldy #SYM.SC + lda (ZPSymBufPtr),y + beq CC.SYM.SetAddrG SYM.SC.STATIC + + cmp #SYM.SC.AUTO + beq CC.SYM.SetAddrL + +.9 lda #E.TMISMATCH + sec + rts +*-------------------------------------- +CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC + jsr CC.SYM.SetSizeOf + +* clc / sec A,X=Size, CS if pointer + + ldy #SYM.Addr + + lda ZPCCData + sta (ZPSymBufPtr),y + + adc ZPCCData + sta ZPCCData + + iny + + lda ZPCCData+1 + sta (ZPSymBufPtr),y + + txa + adc ZPCCData+1 + sta ZPCCData+1 + + clc + rts +*-------------------------------------- +CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC + jsr CC.SYM.SetSizeOf + + ldy #SYM.SizeOf+1 + lda (ZPSymBufPtr),y + bne .9 + + dey SYM.SizeOf + + lda (ZPSymBufPtr),y + +* clc / sec A,X=Size, CS if pointer + clc + adc LocalPtr + sta LocalPtr + bcs .9 + + ldy #SYM.Addr + sta (ZPSymBufPtr),y + + jsr CC.SYM.GetSymSizeOfInAXC + jsr CODE.nAddLocal + + clc + rts + +.9 lda #E.BUF + sec + rts +*-------------------------------------- +CC.SYM.NewKey >PUSHA + >PUSHW ZPLineBufPtr + >SYSCALL SListNewKey + bcs .9 + + phy + pha + + lda #0 + ldy #SYM.Addr + sta (ZPSymBufPtr),y + iny + sta (ZPSymBufPtr),y + + jsr CC.SYM.Link + + jsr CC.SkipX + + clc + + pla Y,A = KeyID, X = KeyLen + ply + +.9 rts +*-------------------------------------- +* Input : ZPLineBufPtr, X = KeyLen +*-------------------------------------- +CC.SYM.Link >LDYA L.CC.LIBC + >STYA ZPLookupPtr + + phx + + 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 + + dey + cmp (ZPLineBufPtr),y + bne .4 + + tya + bne .2 + + lda (ZPLookupPtr) + jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol + + ldy #2 Skip LEN + lda (ZPLookupPtr),y + pha + dey + lda (ZPLookupPtr),y + ply + + jsr CC.SYM.SetAddrYA + + plx + clc + rts + +.4 inx + inx + + lda (ZPLookupPtr) + jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol + + lda (ZPLookupPtr) + jsr CC.ZPLookupPtrAddAp1 Skip LEN\definition + bra .1 + +.9 plx + sec + rts +*-------------------------------------- +CC.SYM.Store >PUSHB hSymScope + >PUSHW ZPSymID + >PUSHW ZPSymBufPtr + >PUSHBI 0 + >PUSHB ZPSymSize + >SYSCALL SListAddData + rts +*-------------------------------------- +CC.SYM.NewScope ldy ScopePtr + cpy #CC.hSymbols+SCOPE.MAX-1 + bcs .9 + + >SYSCALL SListNew + bcs .99 + + inc ScopePtr + ldy ScopePtr + sta (pData),y + + dec ScopenCnt + clc + rts + +.9 lda #E.OOH + sec +.99 rts +*-------------------------------------- +CC.SYM.FreeScope + ldy ScopePtr + cpy #CC.hSymbols + beq * + + lda (pData),y + >SYSCALL SListFree + + dec ScopePtr + inc ScopenCnt + + rts +*-------------------------------------- +CC.SYM.Lookup jsr CC.SYM.Push + bcs .99 + + >PUSHB ScopePtr + +.1 tay + lda (pData),y + jsr CC.SListLookup + bcc .8 + + lda (pstack) + cmp #CC.hSymbols + beq .9 CS + + dec + sta (pstack) + bra .1 + +.9 jsr CC.SYM.Pop + + inc pStack + + lda #E.NOKEY + rts + +.8 stx hSymBuf + + >PULLA + tay + lda (pData),y + sta hSymScope + + txa + >SYSCALL GetMemPtr + >STYA ZPSymBufPtr + +.99 rts +*-------------------------------------- +CC.SYM.Push ldx #7 + +.1 lda ZPSymID,x + jsr CC.Push + bcs .9 + + dex + bpl .1 + +.9 rts +*-------------------------------------- +CC.SYM.FreeBuf lda hSymBuf + + stz hSymBuf + >SYSCALL FreeMem + rts +*-------------------------------------- +CC.SYM.FreeBufPop + jsr CC.SYM.FreeBuf +*-------------------------------------- +CC.SYM.Pop ldx #0 + +.1 jsr CC.Pop + bcs .9 + + sta ZPSymID,x + inx + cpx #8 + bne .1 + + clc +.9 rts +*-------------------------------------- +* Y,A = value T/Q +*-------------------------------------- +CC.SYM.PushValue + jsr CC.SYM.CheckTypeYA + bcs .9 + + jsr CC.SYM.GetSymSizeOfInAXC + tax + jsr CODE.LDXI + + jsr CC.SYM.GetAddrInYA + beq .1 + + jsr CODE.LDYAI + jsr CODE.PushXFromYA + + clc + rts + +.1 jsr CODE.GetLocal Y = local address + jsr CODE.PushXFromYA + + clc +.9 rts +*-------------------------------------- +CC.SYM.PopValue jsr CC.SYM.CheckTypeYA + bcs .9 + + jsr CC.SYM.GetSymSizeOfInAXC + tax + jsr CODE.LDXI + + jsr CC.SYM.GetAddrInYA + beq .1 + + jsr CODE.LDYAI + jsr CODE.PopXToYA + + clc + rts + +.1 jsr CODE.GetLocal Y = local address + jsr CODE.PopXToYA + + clc +.9 rts +*-------------------------------------- +CC.SYM.SetValue jsr CC.SYM.CheckTypeYA + bcs .9 + + jsr CC.SYM.GetSymSizeOfInAXC + tax + jsr CODE.LDXI + + jsr CC.SYM.GetAddrInYA + beq .1 + + jsr CODE.LDYAI + jsr CODE.SetXToYA + + clc + rts + +.1 jsr CODE.GetLocal Y = local address + jsr CODE.SetXToYA + + clc +.9 rts +*-------------------------------------- +* in : Y,A = T/Q +* out : CC +* CS, A = E.TMISMATCH +*-------------------------------------- +CC.SYM.CheckTypeYA + pha + tya + cmp (ZPSymBufPtr) + bne .9 + + pla + phy + ldy #SYM.Q + cmp (ZPSymBufPtr),y + bne .9 + + ply + + clc + rts + +.9 pla + + lda #E.TMISMATCH + sec + rts +*-------------------------------------- +* out : Y,A = T/Q +*-------------------------------------- +CC.SYM.GetTypeInYA + ldy #SYM.Q + lda (ZPSymBufPtr),y + pha + lda (ZPSymBufPtr) + tay + pla + rts +*-------------------------------------- +* in : Y,A = T/Q +*-------------------------------------- +CC.SYM.SetTypeYA + phy + ldy #SYM.Q + sta (ZPSymBufPtr),y + pla + sta (ZPSymBufPtr) + rts +*-------------------------------------- +* out : A,X,C = size +*-------------------------------------- +CC.SYM.GetSymSizeOfInAXC + ldy #SYM.Q + lda (ZPSymBufPtr),y + pha + lda (ZPSymBufPtr) SYM.T + tay + pla + +CC.SYM.GetYASizeOfInAXC + + bit #SYM.Q.PPPOINTER + bne .1 + + lda CC.TYPESIZE-1,y + ldx #0 + + clc + rts + +.1 lda #2 pointer + ldx #0 + + sec +1 for hMem Storage + rts +*-------------------------------------- +* in/out : A,X,C = size +*-------------------------------------- +CC.SYM.SetSizeOf + ldy #SYM.SizeOf + sta (ZPSymBufPtr),y + + pha + + iny + txa + sta (ZPSymBufPtr),y + + pla + rts +*-------------------------------------- +CC.SYM.GetAddrInYA + ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + pha + + dey #SYM.Addr + lda (ZPSymBufPtr),y + tay + + pla Z if Local + + rts +*-------------------------------------- +CC.SYM.SetAddrYA + phy + + ldy #SYM.Addr+1 + sta (ZPSymBufPtr),y + + pla + + dey + sta (ZPSymBufPtr),y + + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.sym +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.TYPE.txt b/BIN/CC.S.TYPE.txt new file mode 100644 index 00000000..b691bc93 --- /dev/null +++ b/BIN/CC.S.TYPE.txt @@ -0,0 +1,187 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +CC.TYPE.Decl >ENTER 2 + lda #0 + sta (pStack) Type + ldy #1 + sta (pStack),y Qual + + jsr .7 + bcs .99 + + ldy #1 + lda (pStack),y + pha + lda (pStack) + tay Y = Type + pla A = Qual + + clc + +.99 >LEAVE + rts + +.7 jmp (J.CC.TYPEQUAL,x) +*-------------------------------------- +* Type Declaration keywords +*-------------------------------------- +CC.TYPE.CONST lda #SYM.Q.CONST + bra CC.TYPE.VOLATILE.1 +*-------------------------------------- +CC.TYPE.VOLATILE + lda #SYM.Q.VOLATILE +CC.TYPE.VOLATILE.1 + ldy #1 + ora (pStack),y + sta (pStack),y + + jsr CC.CheckSpace + bcs .9 + + >LDYA L.CC.TYPESPEC + jsr CC.LookupID + bcs .9 + + jmp (J.CC.TYPESPEC,x) + +.9 lda #E.CSYN + sec + rts +*-------------------------------------- +CC.TYPE.SIGNED sec + .HS 90 BCC +*-------------------------------------- +CC.TYPE.UNSIGNED + clc + php + + jsr CC.CheckSpace + bcs .9 + + >LDYA L.CC.TYPES + jsr CC.LookupID + + bcs .9 + + cpx #SYM.T.UCHAR + bcc .9 void + + cpx #SYM.T.SLONG+1 only char int long allowed + bcs .9 + + plp + bcs .8 + + jmp (J.CC.UTYPES-2,x) + +.8 jmp (J.CC.STYPES-2,x) + +.9 plp + + lda #E.CSYN + sec + rts +*-------------------------------------- +CC.TYPE.SHORT jsr CC.CheckSpace + bcs .9 + + >LDYA L.CC.TYPES + jsr CC.LookupID + + bcs CC.TYPE.UCHAR + + cpx #4 only int allowed + beq CC.TYPE.SCHAR + +.9 lda #E.CSYN + sec + rts +*-------------------------------------- +CC.TYPE.VOID lda #SYM.T.VOID + bra CC.TYPE + +CC.TYPE.CHAR +CC.TYPE.UCHAR lda #SYM.T.UCHAR + bra CC.TYPE + +CC.TYPE.SCHAR lda #SYM.T.SCHAR + bra CC.TYPE + +CC.TYPE.UINT lda #SYM.T.UINT + bra CC.TYPE + +CC.TYPE.INT +CC.TYPE.SINT lda #SYM.T.SINT + bra CC.TYPE + +CC.TYPE.ULONG lda #SYM.T.ULONG + bra CC.TYPE + +CC.TYPE.LONG +CC.TYPE.SLONG lda #SYM.T.SLONG + bra CC.TYPE + +CC.TYPE.FLOAT lda #SYM.T.FLOAT + +CC.TYPE sta (pStack) T + + jsr CC.GetCharNB + bcs .9 + +.1 cmp #'*' + bne .10 + + ldy #1 Q + lda (pStack),y + clc + adc #SYM.Q.POINTER + bcs .9 more than *** + + sta (pStack),y + + jsr CC.GetNextCharNB + bcc .1 + +.9 lda #E.CSYN + sec +.99 rts + +.10 jsr CC.IsLetter + bcs .8 + + >LDYA L.CC.FTYPES + jsr CC.LookupID + bcs .8 next char is an identifier + + ldy #1 + lda (pStack),y + ora #SYM.Q.FUNC+SYM.Q.FASTCALL + sta (pStack),y + + jsr CC.GetNextCharNB + bcs .9 next char is an identifier, ",", "(",")" + +.8 clc + rts +*-------------------------------------- +* in : Y,A = type/qual +* out : X = size +*-------------------------------------- +CC.TYPE.SizeOf bit #SYM.Q.PPPOINTER + bne .2 + + ldx CC.TYPESIZE-1,y + + clc + rts + +.2 ldx #2 pointer + sec +1 for hMem Storage + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.type +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 0dbfb73f..df1b9f7a 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -11,27 +11,41 @@ NEW .INB inc/mli.e.i *-------------------------------------- FILES.MAX .EQ 4 +SCOPE.MAX .EQ 16 *-------------------------------------- -CC.T.VOID .EQ 1 -CC.T.UCHAR .EQ 2 -CC.T.SCHAR .EQ 3 -CC.T.UINT .EQ 4 -CC.T.SINT .EQ 5 -CC.T.ULONG .EQ 6 -CC.T.SLONG .EQ 7 -CC.T.FLOAT .EQ 8 -CC.T.VARIADIC .EQ $FF -*-------------------------------------- -CC.Q.POINTER .EQ %01000000 -CC.Q.PPOINTER .EQ %10000000 -CC.Q.PPPOINTER .EQ %11000000 -CC.Q.ARRAY .EQ %00010000 -CC.Q.AARRAY .EQ %00100000 -CC.Q.AAARRAY .EQ %00110000 +SYM.T .EQ 0 +SYM.T.VOID .EQ 1 +SYM.T.UCHAR .EQ 2 +SYM.T.SCHAR .EQ 3 +SYM.T.UINT .EQ 4 +SYM.T.SINT .EQ 5 +SYM.T.ULONG .EQ 6 +SYM.T.SLONG .EQ 7 +SYM.T.FLOAT .EQ 8 +SYM.T.VARIADIC .EQ $FF +SYM.Q .EQ 1 +SYM.Q.POINTER .EQ %01000000 +SYM.Q.PPOINTER .EQ %10000000 +SYM.Q.PPPOINTER .EQ %11000000 +SYM.Q.ARRAY .EQ %00010000 +SYM.Q.AARRAY .EQ %00100000 +SYM.Q.AAARRAY .EQ %00110000 +SYM.Q.CONST .EQ %00001000 +SYM.Q.VOLATILE .EQ %00000100 +SYM.Q.FUNC .EQ %00000010 +SYM.Q.FASTCALL .EQ %00000001 +SYM.SC .EQ 2 +SYM.SC.STATIC .EQ 0 +SYM.SC.AUTO .EQ 2 +SYM.SC.REGISTER .EQ 4 +SYM.SC.EXTERN .EQ 6 +SYM.SC.TYPEDEF .EQ 8 * -CC.Q.CONST .EQ %00000100 -CC.Q.FUNC .EQ %00000010 -CC.Q.FASTCALL .EQ %00000001 +SYM.SizeOf .EQ 4 +SYM.Addr .EQ 6 +* .EQ 8 +* +SYM.Def .EQ 10 *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- @@ -43,25 +57,26 @@ ZPCCConst .BS 2 ZPCCData .BS 2 ZPCCStack .BS 2 -ZPCCfDecl .BS 2 ZPLineBufPtr .BS 2 +ZPLookupPtr .BS 2 + +CStackPtr .BS 1 +LocalPtr .BS 1 + +ScopePtr .BS 1 +ScopenCnt .BS 1 + ZPSymID .BS 2 - -hDefine .BS 1 -StackPtr .BS 1 - -ZPSymDef .EQ * -ZPSymType .BS 1 -ZPSymQual .BS 1 -ZPSymSizeOf .BS 2 -ZPSymDataPtr .BS 2 -ZPSymDefPtr .BS 2 -SYMDEFSIZE .EQ *-ZPSymDef +hSymScope .BS 1 +hSymBuf .BS 1 +ZPSymSize .BS 2 +ZPSymBufPtr .BS 2 ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPPtr3 .BS 2 ArgIndex .BS 1 +hDefineBuf .BS 1 ZS.END .ED *-------------------------------------- @@ -74,7 +89,7 @@ CS.START cld .DA #0 S.PS.F.EVENT .DA #0 .DA CS.END-CS.START Code Size (without Constants) - .DA DS.END-DS.START Data SegmentSize + .DA DS.END-DS.START Data Size .DA #256 Stack Size .DA #ZS.END-ZS.START Zero Page Size .DA 0 @@ -91,13 +106,14 @@ L.MSG.USAGE .DA MSG.USAGE L.MSG.COMPILING .DA MSG.COMPILING L.MSG.DEBUG .DA MSG.DEBUG L.MSG.TRACE .DA MSG.TRACE +L.MSG.RTSTK .DA MSG.RTSTK L.MSG.ERROR .DA MSG.ERROR -L.MSG.RUN .DA MSG.RUN +L.MSG.NOMAIN .DA MSG.NOMAIN L.ENV.INCLUDE .DA ENV.INCLUDE *-------------------------------------- L.CC.PREOPS .DA CC.PREOPS -J.CC.PREOPS .DA CC.ExpGet.Ref - .DA CC.ExpGet.Deref +J.CC.PREOPS .DA CC.EXP.GetRef + .DA CC.EXP.GetDeref L.CC.POSTOPS .DA CC.POSTOPS L.CC.AOPS .DA CC.AOPS L.CC.BOPS .DA CC.BOPS @@ -139,45 +155,52 @@ J.CC.cBOPS .DA CC.BOPS.cMUL .DA CC.BOPS.LOR L.CC.DIRS .DA CC.DIRS L.CC.KW .DA CC.KW -L.CC.TMODS .DA CC.TMODS -L.CC.TMODS2 .DA CC.TMODS2 +L.CC.TYPEQUAL .DA CC.TYPEQUAL +L.CC.TYPESPEC .DA CC.TYPESPEC L.CC.TYPES .DA CC.TYPES L.CC.FTYPES .DA CC.FTYPES J.CC.DIRS .DA CC.DIR.DEFINE .DA CC.DIR.INCLUDE -J.CC.KW .DA CC.IF - .DA CC.WHILE - .DA CC.ELSE - .DA CC.DO - .DA CC.FOR - .DA CC.SWITCH - .DA CC.CASE - .DA CC.BREAK - .DA CC.CONTINUE - .DA CC.SIZEOF *-------------------------------------- - .DA CC.TYPEDEF - .DA CC.STRUCT +J.CC.KW .DA CC.KW.IF + .DA CC.KW.WHILE + .DA CC.KW.ELSE + .DA CC.KW.DO + .DA CC.KW.FOR + .DA CC.KW.SWITCH + .DA CC.KW.CASE + .DA CC.KW.BREAK + .DA CC.KW.CONTINUE + .DA CC.KW.RETURN *-------------------------------------- -J.CC.TMODS .DA CC.CONST -J.CC.TMODS2 .DA CC.SIGNED - .DA CC.UNSIGNED - .DA CC.SHORT -J.CC.TYPES .DA CC.VOID - .DA CC.CHAR - .DA CC.INT - .DA CC.LONG - .DA CC.FLOAT -J.CC.UTYPES .DA CC.UCHAR - .DA CC.UINT - .DA CC.ULONG -J.CC.STYPES .DA CC.SCHAR - .DA CC.SINT - .DA CC.SLONG + .DA CC.KW.SIZEOF + .DA CC.KW.TYPEDEF + .DA CC.KW.STRUCT *-------------------------------------- -J.CC.KW.END .DA CC.IF.END - .DA CC.WHILE.END +J.CC.KW.END .DA CC.KW.IF.END + .DA CC.KW.WHILE.END + .DA CC.KW.ELSE.END + .DA CC.KW.DO.END + .DA CC.KW.FOR.END *-------------------------------------- +J.CC.TYPEQUAL .DA CC.TYPE.CONST + .DA CC.TYPE.VOLATILE +J.CC.TYPESPEC .DA CC.TYPE.SIGNED + .DA CC.TYPE.UNSIGNED + .DA CC.TYPE.SHORT +J.CC.TYPES .DA CC.TYPE.VOID + .DA CC.TYPE.CHAR + .DA CC.TYPE.INT + .DA CC.TYPE.LONG + .DA CC.TYPE.FLOAT +J.CC.UTYPES .DA CC.TYPE.UCHAR + .DA CC.TYPE.UINT + .DA CC.TYPE.ULONG +J.CC.STYPES .DA CC.TYPE.SCHAR + .DA CC.TYPE.SINT + .DA CC.TYPE.SLONG +*-------------------------------------- +L.CC.MAIN .DA CC.MAIN L.CC.LIBC .DA CC.LIBC .DA 0 *-------------------------------------- @@ -198,7 +221,7 @@ CS.RUN >PUSHW L.MSG.GREETINGS lda #hFilePtr >STA.G hFilePtr - + lda #LineCntPtr >STA.G LineCntPtr @@ -216,32 +239,19 @@ CS.RUN >PUSHW L.MSG.GREETINGS jsr CC.Init bcs CS.INIT.RTS *-------------------------------------- -CS.RUN.LOOP >SLEEP +CS.RUN.LOOP jsr CC.CompileFile - >LDA.G bDebug - bpl .2 - - jsr PrintDebugMsg - -.2 jsr CS.RUN.FGetS - bcs .4 - - >LDA.G bTrace - bpl .3 - - jsr PrintTraceMsg - -.3 jsr CC.Run - bcc CS.RUN.LOOP -*-------------------------------------- -.4 cmp #MLI.E.EOF + cmp #MLI.E.EOF bne .9 -.7 jsr CS.RUN.FClose + jsr CS.RUN.FClose bne CS.RUN.LOOP +*-------------------------------------- + jsr CC.MainExec + bcc .8 - jsr CS.RUN.EXEC - bcs .9 + >LDYA L.MSG.NOMAIN + >SYSCALL puts .8 lda #0 Exit Code = Success sec @@ -253,15 +263,6 @@ CS.RUN.LOOP >SLEEP sec rts *-------------------------------------- -CS.RUN.EXEC lda #$60 RTS - sta (ZPCCCode) - >DEBUG - >LDA.G CC.hCode - >SYSCALL GetMemPtr - >STYA ZPCCCode - - jmp (ZPCCCode) -*-------------------------------------- CS.RUN.ARGS inc ArgIndex lda ArgIndex @@ -298,7 +299,7 @@ CS.RUN.ARGS inc ArgIndex >LDYA ZPPtr1 jsr CS.RUN.FOpen bcc CS.RUN.ARGS - + rts .7 >LDA.G hFilePtr @@ -331,7 +332,7 @@ CS.RUN.FOpen >PUSHYA tay txa sta (pData),y - + >LDA.G LineCntPtr inc inc @@ -353,7 +354,7 @@ CS.RUN.FGetS >LDYA.G LineBufPtr inc sta (pData),y bne .1 - + iny lda (pData),y inc @@ -367,29 +368,37 @@ CS.RUN.FGetS >LDYA.G LineBufPtr >PUSHW ZPLineBufPtr >PUSHWI 255 >SYSCALL FGetS + bcs .9 - rts + >LDA.G bTrace + bpl .8 + + jsr PrintTraceMsg + +.8 + +.9 rts *-------------------------------------- CS.RUN.FClose >LDA.G hFilePtr cmp #hFilePtr beq .8 - + tay lda (pData),y >SYSCALL FClose - + >LDA.G hFilePtr dec sta (pData),y cmp #hFilePtr beq .8 - + >LDA.G LineCntPtr dec dec sta (pData),y NZ - + .8 rts *-------------------------------------- CS.DOEVENT sec @@ -397,8 +406,32 @@ CS.DOEVENT sec *-------------------------------------- CS.QUIT jsr CC.Quit - - clc + >LDA.G hLineBuf + beq .8 + + >SYSCALL FreeMem + +.8 clc + rts +*-------------------------------------- +PrintTraceMsg ldy #S.PS.hStdErr + lda (pPS),y + >PUSHA + + >PUSHW L.MSG.TRACE + + >LDA.G LineCntPtr + inc + tay + lda (pData),y + >PUSHA + dey + lda (pData),y + >PUSHA + >PUSHW.G LineBufPtr + >PUSHBI 4 + >SYSCALL FPrintF + rts *-------------------------------------- PrintDebugMsg >PUSHW L.MSG.DEBUG @@ -407,6 +440,51 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG >PUSHW ZPCCConst >PUSHW ZPCCData + lda pStack + clc + adc #8 + pha + lda pStack+1 + adc #0 + >PUSHA + pla + >PUSHA + + >PUSHB LocalPtr + + >PUSHW ZPCCStack + + >PUSHB CStackPtr + tay + beq .1 + + lda (ZPCCStack),y + pha + iny + lda (ZPCCStack),y + ply + +.1 >PUSHYA + + >PUSHBI 14 + >SYSCALL PrintF + >DEBUGOA + rts +*-------------------------------------- +PrintRTStackTrace + pha + phx + phy + + >PUSHW L.MSG.RTSTK + >PUSHW pBase + + >PUSHW ZPPtr1 + + ldy #1 + >PUSHB (ZPPtr1),y + >PUSHB (ZPPtr1) + lda pStack clc adc #8 @@ -419,30 +497,13 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG >PUSHBI 8 >SYSCALL PrintF - >DEBUG + + ply + plx + pla rts *-------------------------------------- -PrintTraceMsg ldy #S.PS.hStdErr - lda (pPS),y - >PUSHA - - >PUSHW L.MSG.TRACE - - >LDA.G LineCntPtr - inc - tay - lda (pData),y - >PUSHA - dey - lda (pData),y - >PUSHA - >PUSHW.G LineBufPtr - >PUSHBI 4 - >SYSCALL FPrintF - - rts -*-------------------------------------- -PrintErrorMsg lda hDefine +PrintErrorMsg lda hDefineBuf beq .10 >LDYA.G CC.SaveDefine @@ -489,39 +550,85 @@ PrintErrorMsg lda hDefine .INB usr/src/bin/cc.s.code .INB usr/src/bin/cc.s.core .INB usr/src/bin/cc.s.dir + .INB usr/src/bin/cc.s.decl + .INB usr/src/bin/cc.s.stmt .INB usr/src/bin/cc.s.kw + .INB usr/src/bin/cc.s.type + .INB usr/src/bin/cc.s.f .INB usr/src/bin/cc.s.exp + .INB usr/src/bin/cc.s.sym .INB usr/src/bin/cc.s.exec *-------------------------------------- -CS.END -*-------------------------------------- -* Initialized DATA -*-------------------------------------- -MSG.GREETINGS .AZ "\r\nA2osX C Compiler %d.%d\r\n\r\n" -MSG.USAGE .AS "Usage : CC