diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index c32ec514..5d1c07ae 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 4f34ffac..77d2781f 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 53ed8b7c..264c94a3 100644 --- a/BIN/CC.S.CODE.txt +++ b/BIN/CC.S.CODE.txt @@ -4,7 +4,7 @@ NEW CODE.Init stz ZPCCConst stz ZPCCConst+1 - stz bInitCode + >STZ.G CC.bInitCode >LDYAI PCC.FH.CS >STYA ZPCCCode diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index 55be9af4..df343067 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -60,7 +60,7 @@ DECL.X jsr TYPE.GetTQInYA jsr CC.IsLetter bcs .98 -* >DEBUG + .1 clc reuse buffer ldy #SYM.T.SU txa restore Q @@ -105,12 +105,15 @@ DECL.YAC ldx #SYM.SC.STATIC Y,A = Type/Qual bcs .98 cmp #';' - beq .8 - - cmp #'{' bne .26 - jmp CORE.GetNCharNBNL Skip '{' + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.FUNC + beq .28 no initializer...store SYM + + clc function are already stored + rts *-------------------------------------- * Initializer *-------------------------------------- diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index a0bc67fe..db150d66 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -614,7 +614,7 @@ EXP.Idx ldy #SYM.Q jsr EXP.array.getIdx ...int16 on stack... bcs .99 - jsr EXP.GetSymSizeOfInAXC + jsr EXP.GetSymSizeOfInAX cmp #1 bne .1 @@ -675,7 +675,7 @@ EXP.array ldy #SYM.Def .2 jsr EXP.array.getIdx ...int16 on stack... bcs .9 - jsr EXP.GetSymSizeOfInAXC + jsr EXP.GetSymSizeOfInAX jsr CODE.PUSHAXI ...sizeof on stack... bcs .9 @@ -714,7 +714,7 @@ EXP.array ldy #SYM.Def ldx #FPU.wMUL jsr CODE.FPUCALL [][SIZE] * int16 on stack - jsr EXP.GetSymSizeOfInAXC + jsr EXP.GetSymSizeOfInAX jsr CODE.PUSHAXI ...sizeof on stack... bcs .9 @@ -1112,7 +1112,7 @@ EXP.GetAddr2 ldy #SYM.SC .9 rts *-------------------------------------- -EXP.PushValue jsr EXP.GetSymSizeOfInAXC +EXP.PushValue jsr EXP.GetSymSizeOfInAX tay dey bne .1 @@ -1134,9 +1134,9 @@ EXP.PushValue jsr EXP.GetSymSizeOfInAXC .99 rts *-------------------------------------- -* out : A,X,C = size +* out : A,X = size *-------------------------------------- -EXP.GetSymSizeOfInAXC +EXP.GetSymSizeOfInAX ldy #SYM.Q lda (ZPLookupSymPtr),y pha @@ -1144,7 +1144,7 @@ EXP.GetSymSizeOfInAXC tay pla -EXP.GetYASizeOfInAXC +EXP.GetYASizeOfInAX bit #SYM.Q.PPPOINTER+SYM.Q.AAARRAY bne .1 diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index dc05054a..e8e40fed 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -51,13 +51,25 @@ F.Decl ldy #SYM.Q jsr CC.IsLetter bcs .2 - jsr F.NewArg - bcs .99 + jsr F.NewArg will update LocalPtr + bcc .3 + + rts + +.2 >LDYA ZPPtr2 + jsr EXP.GetYASizeOfInAX + clc + adc LocalPtr + sta LocalPtr + bcs .9 + + txa + bne .9 - jsr CC.GetCharNB +.3 jsr CC.GetCharNB bcs .9 -.2 cmp #')' + cmp #')' beq .6 cmp #',' @@ -73,51 +85,40 @@ F.Decl ldy #SYM.Q .6 jsr SYM.Add0000 definition End bcs .99 + ldy #SYM.ArgSize + lda LocalPtr + sta (ZPSymBufPtr),y + jsr CORE.GetNCharNBNL Skip ')' bcs .9 cmp #';' bne .7 - jsr SYM.Update - bcs .99 - jsr SCOPE.Close discard local scope bcs .99 - stz LocalPtr reset for DEBUG Message -* clc - rts + jmp SYM.Update Store this declaration & exit *-------------------------------------- .7 cmp #'{' bne .9 *-------------------------------------- -F.Def bit bInitCode +F.Def >LDA.G CC.bInitCode bmi .1 lda #$60 RTS jsr CODE.EmitByte Close INIT code bcs .99 - dec bInitCode + lda #$FF + >STA.G CC.bInitCode .1 jsr SYM.SetAddrCCode f() Code starts HERE jsr SYM.Update bcs .99 - lda #$ff - >STA.G CC.CmdSave - - jsr STMT.NewCPS00 - bcs .99 - - lda #'F' - jsr SYM.LookupLabelA - bcs .99 - - txa - + lda LocalPtr jsr CODE.LDAI A = f() ARGS size bcs .99 @@ -134,10 +135,10 @@ F.Def.END lda #'X' define EXIT Label jsr CODE.EmitPCC bcs .9 - jsr SCOPE.Close + jsr STMT.Close bcs .9 - - jmp STMT.Close + + jmp SCOPE.Close .9 rts *-------------------------------------- @@ -220,6 +221,8 @@ F.NewArg >LDYA.G CC.SymID jsr SYM.Store bcs .9 + stz LocalFrame DONT ADD TO LOCAL + >LDA.G CC.hSymBuf >SYSCALL GetMemPtr >STYA ZPSymBufPtr @@ -271,13 +274,13 @@ F.CallRetV sec lda #0 Expected T/Q = 0 if VARIADIC tay -* >DEBUG + .4 and #$F0 CONST+VOLATILE+FUNC+FASTCALL -* >DEBUG + jsr EXP.Eval bcs .93 - jsr EXP.GetYASizeOfInAXC + jsr EXP.GetYASizeOfInAX tax save Sizeof in X jsr F.GetTQ diff --git a/BIN/CC.S.FIO.txt b/BIN/CC.S.FIO.txt index c3b036d7..77ba4047 100644 --- a/BIN/CC.S.FIO.txt +++ b/BIN/CC.S.FIO.txt @@ -124,10 +124,10 @@ FIO.FGetS >LDYA.G LineBufPtr >SYSCALL FGetS bcs .9 - >LDA.G bTrace + >LDA.G bVerbose bpl .8 - jsr PrintTraceMsg + jsr PrintVerboseMsg .8 diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index 4c555b56..e074650f 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -3,9 +3,9 @@ NEW *-------------------------------------- * Built in Keywords *-------------------------------------- -KW.IF jsr SCOPE.New +KW.IF jsr STMT.NewCPS00 bcs .99 - + jsr CC.GetCharNB bcs .9 @@ -34,9 +34,6 @@ KW.IF jsr SCOPE.New cmp #')' bne .9 - jsr STMT.NewCPS00 - bcs .99 - jmp STMT.SetCPSType .9 lda #E.CSYN @@ -57,9 +54,6 @@ KW.IF.END jsr CORE.GetCharNBNL jsr SYM.NewLabelA bcs .99 - jsr SCOPE.Close - bcs .99 - jmp STMT.Close rts @@ -94,17 +88,11 @@ KW.ELSE.END lda #'X' define EXIT Label jsr SYM.NewLabelA bcs .99 - jsr SCOPE.Close - bcs .99 + jmp STMT.Close - clv pop context -* clc .99 rts *-------------------------------------- -KW.WHILE jsr SCOPE.New - bcs .99 - - lda #'C' define CONT Label +KW.WHILE lda #'C' define CONT Label jsr SYM.NewLabelA bcs .99 @@ -358,10 +346,10 @@ KW.FOR.END lda #$60 jsr SYM.NewLabelA bcs .99 - jsr SCOPE.Close + jsr STMT.Close bcs .99 - jmp STMT.Close + jmp SCOPE.Close .99 rts *-------------------------------------- @@ -400,7 +388,7 @@ KW.SWITCH jsr CC.GetCharNB jsr CC.Push push CPS.hMEM lda #0 - jsr CC.Push push CPS.Ptr + jsr CC.Push push CPS.MemPtr bcs .99 jsr STMT.NewCPS @@ -446,7 +434,7 @@ KW.SWITCH.END lda #'J' define JMP Label lda CStackPtr clc - adc #CPS.Ptr + adc #CPS.MemPtr tay lda (ZPCCStack),y sta ZPPtr2+1 @@ -538,7 +526,7 @@ KW.CASE ldy CStackPtr lda CStackPtr clc - adc #CPS.Ptr + adc #CPS.MemPtr tay lda (ZPCCStack),y tay @@ -562,7 +550,7 @@ KW.CASE ldy CStackPtr lda CStackPtr clc - adc #CPS.Ptr + adc #CPS.MemPtr tay pla sta (ZPCCStack),y @@ -659,21 +647,23 @@ KW.RETURN ldx ZPLineBufPtr jsr EXP.Eval bcs .99 - jsr SYM.GetYASizeOfInAXC Y,A=T/Q + jsr SYM.GetYASizeOfInAX Y,A=T/Q tax X = sizeof jsr CODE.SetRetValue bcs .99 + jsr SYM.LookupFree + bcs .99 + lda #'X' jsr SYM.LookupLabelA - bcs .9 + bcs .99 lda #$4C emit JMP exit jmp CODE.TOABSYX .9 lda #E.CSYN sec - rts .99 rts *-------------------------------------- @@ -684,7 +674,7 @@ KW.SIZEOF *-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- -KW.TestZero jsr EXP.GetYASizeOfInAXC +KW.TestZero jsr EXP.GetYASizeOfInAX tax cpx #1 bne .1 @@ -708,7 +698,7 @@ KW.TestZero jsr EXP.GetYASizeOfInAXC *-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- -KW.TestnZero jsr EXP.GetYASizeOfInAXC +KW.TestnZero jsr EXP.GetYASizeOfInAX tax cpx #1 bne .1 diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt index eebda2f4..9a1023d4 100644 --- a/BIN/CC.S.LINK.txt +++ b/BIN/CC.S.LINK.txt @@ -26,7 +26,7 @@ CC.Link >LDYA L.MSG.LINKING >SYSCALL SListGetData bcs .99 - >LDA.G bTrace + >LDA.G bVerbose bpl .2 jsr CC.Link.Dump @@ -53,7 +53,7 @@ CC.Link >LDYA L.MSG.LINKING .8 clc rts -.9 >LDA.G bTrace +.9 >LDA.G bVerbose bmi .90 jsr CC.Link.Dump diff --git a/BIN/CC.S.SCOPE.txt b/BIN/CC.S.SCOPE.txt index 70ab211a..56f7c6dd 100644 --- a/BIN/CC.S.SCOPE.txt +++ b/BIN/CC.S.SCOPE.txt @@ -24,11 +24,14 @@ SCOPE.New ldy ScopeIdx dec bLocalScope + stz LocalFrame + .DO _DBG_SCOPE=1 >PUSHW L.MSG.DEBUG.SCIN jsr SCOPE.Push >PUSHB LocalPtr - >PUSHBI 3 + >PUSHB LocalFrame + >PUSHBI 4 >SYSCALL PrintF .FIN @@ -39,11 +42,7 @@ SCOPE.New ldy ScopeIdx sec .99 rts *-------------------------------------- -SCOPE.Close lda #'F' define FRAME SIZE - jsr SYM.NewLabelA - bcs .99 - - .DO _DBG_SCOPE=1 +SCOPE.Close .DO _DBG_SCOPE=1 >PUSHW L.MSG.DEBUG.SCOUT jsr SCOPE.Push .FIN @@ -61,10 +60,11 @@ SCOPE.Close lda #'F' define FRAME SIZE .DO _DBG_SCOPE=1 >PUSHB LocalPtr + >PUSHB LocalFrame jsr SCOPE.Push - >PUSHBI 5 + >PUSHBI 6 >SYSCALL PrintF -* >DEBUG + >DEBUG .FIN clc diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index e742d859..ef2bfcbc 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -145,10 +145,10 @@ STMT.POP.99 rts *-------------------------------------- STMT.CPStmt.END ldy CStackPtr beq STMT.POP.9 - + lda (ZPCCStack),y bpl .1 - + jmp F.Def.END local F context .1 iny @@ -156,38 +156,24 @@ STMT.CPStmt.END ldy CStackPtr cmp #'}' must be '}' on stack.... bne STMT.POP.9 - - jsr SCOPE.Close - bcs STMT.POP.99 *-------------------------------------- STMT.End ldy CStackPtr CPS.KW lda (ZPCCStack),y tax jmp (J.CC.KW.END,x) *-------------------------------------- -STMT.Close ldy CStackPtr - iny - iny CPS.LOCAL - lda (ZPCCStack),y - sta LocalPtr - - lda CStackPtr - clc - adc #CPS - sta CStackPtr - -.8 clc -.99 rts -*-------------------------------------- STMT.NewCPS00 lda #0 - jsr CC.Push + jsr CC.Push CPS.hMEM bcs STMT.NewCPS.RTS - jsr CC.Push + jsr CC.Push CPS.MemPtr bcs STMT.NewCPS.RTS -STMT.NewCPS lda LocalPtr Locals +STMT.NewCPS lda LocalFrame + jsr CC.Push + bcs .99 + lda LocalPtr jsr CC.Push bcs .99 @@ -215,6 +201,15 @@ STMT.SetCPSType jsr CORE.GetNCharNBNL jsr SCOPE.New bcs .99 + lda #'F' + jsr SYM.LookupLabelA + bcs .99 + + txa + + jsr CODE.nAddLocal + bcs .99 + ldx #'}' .1 txa @@ -229,6 +224,38 @@ STMT.SetCPSType jsr CORE.GetNCharNBNL sec .99 rts *-------------------------------------- +STMT.Close ldy CStackPtr CPS.KW + iny CPS.TERM + lda (ZPCCStack),y + cmp #'}' + bne .1 + + lda #'F' define FRAME SIZE + jsr SYM.NewLabelA + bcs .99 + + lda CStackPtr + clc + adc #CPS.LocalPtr + tay + lda (ZPCCStack),y + sta LocalPtr + + iny CPS.LocalFrame + lda (ZPCCStack),y + sta LocalFrame + + jsr SCOPE.Close + bcs .99 + +.1 lda CStackPtr + clc + adc #CPS + sta CStackPtr + +.8 clc +.99 rts +*-------------------------------------- MAN SAVE usr/src/bin/cc.s.stmt LOAD usr/src/bin/cc.s diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index 81c6f9fc..e0516084 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -138,7 +138,7 @@ SYM.SetAddr ldy #SYM.SizeOf ora (ZPSymBufPtr),y bne .1 - jsr SYM.GetSymSizeOfInAXC + jsr SYM.GetSymSizeOfInAX jsr SYM.SetSizeOf .1 ldy #SYM.Q @@ -187,9 +187,9 @@ SYM.SetAddrL ldy #SYM.SizeOf+1 lda LocalPtr tax - + clc - + dey SYM.SizeOf adc (ZPSymBufPtr),y bcs .9 @@ -200,6 +200,13 @@ SYM.SetAddrL ldy #SYM.SizeOf+1 ldy #SYM.Addr sta (ZPSymBufPtr),y + ldy #SYM.SizeOf + lda (ZPSymBufPtr),y + + clc + adc LocalFrame + sta LocalFrame + clc rts @@ -602,9 +609,13 @@ SYM.NewLabelA bit bPass2 cmp #'F' bne .1 - lda LocalPtr + lda LocalFrame ldy #SYM.Addr sta (ZPSymBufPtr),y + + lda #SYM.SC.AUTO + ldy #SYM.SC + sta (ZPSymBufPtr),y bra .2 .1 jsr SYM.SetAddrCCode @@ -623,6 +634,10 @@ SYM.NewLabelA bit bPass2 >PUSHA >SYSCALL SListAddData + .DO _DBG_SYM=1 + bcs .99 + jsr SYM.DEBUG2 + .FIN .99 rts *-------------------------------------- SYM.LookupLabelA @@ -765,7 +780,7 @@ SYM.LookupCheckTQ *-------------------------------------- * on RT stack : Addr,value *-------------------------------------- -SYM.PopValue jsr SYM.GetYASizeOfInAXC +SYM.PopValue jsr SYM.GetYASizeOfInAX tax dex bne .1 @@ -797,9 +812,9 @@ SYM.GetTypeInYA ldy #SYM.Q pla rts *-------------------------------------- -* out : A,X,C = size +* out : A,X = size *-------------------------------------- -SYM.GetSymSizeOfInAXC +SYM.GetSymSizeOfInAX ldy #SYM.Q lda (ZPSymBufPtr),y pha @@ -807,7 +822,7 @@ SYM.GetSymSizeOfInAXC tay pla -SYM.GetYASizeOfInAXC +SYM.GetYASizeOfInAX bit #SYM.Q.PPPOINTER beq .1 @@ -888,7 +903,7 @@ SYM.SetAddrYA phy rts *-------------------------------------- .DO _DBG_SYM=1 -SYM.DEBUG0 >PUSHW L.MSG.DEBUG.SYM0 +SYM.DEBUG0 >PUSHW L.MSG.DEBUG.SYMN >PUSHW.G CC.SymID jsr SCOPE.Push lda (ZPSymBufPtr) @@ -898,17 +913,28 @@ SYM.DEBUG0 >PUSHW L.MSG.DEBUG.SYM0 >PUSHA >PUSHBI 6 >SYSCALL Printf + >DEBUG rts -SYM.DEBUG1 >PUSHW L.MSG.DEBUG.SYM1 +SYM.DEBUG1 >PUSHW L.MSG.DEBUG.SYMU >PUSHW.G CC.SymID - >PUSHBI 2 + lda (ZPSymBufPtr) + >PUSHA + ldy #1 + lda (ZPSymBufPtr),y + >PUSHA + >PUSHBI 4 >SYSCALL Printf rts -SYM.DEBUG2 >PUSHW L.MSG.DEBUG.SYM2 +SYM.DEBUG2 >PUSHW L.MSG.DEBUG.SYMS >PUSHW.G CC.SymID - >PUSHBI 2 + lda (ZPSymBufPtr) + >PUSHA + ldy #1 + lda (ZPSymBufPtr),y + >PUSHA + >PUSHBI 4 >SYSCALL Printf rts .FIN diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 2eab8e41..3598cfb9 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -11,7 +11,7 @@ NEW .INB inc/mli.e.i *-------------------------------------- _DBG_SYM .EQ 0 -_DBG_SCOPE .EQ 1 +_DBG_SCOPE .EQ 0 _DBG_OUT .EQ 0 *-------------------------------------- FILES.MAX .EQ 4 @@ -55,7 +55,7 @@ SYM.SizeOf .EQ 4 SYM.Addr .EQ 6 SYM.BitO .EQ 8 SYM.BitW .EQ 9 -* +SYM.ArgSize .EQ 10 * * SYM.Def .EQ 14 Funtions : fTQ,a1TQ,a2TQ.... @@ -70,13 +70,14 @@ SU.F.BitO .EQ 4 SU.F.BitW .EQ 5 SU.F.Name .EQ 6 *-------------------------------------- -CPS.hMEM .EQ 4 switch/case -CPS.Ptr .EQ 3 -CPS.LOCAL .EQ 2 +CPS.hMEM .EQ 5 switch/case +CPS.MemPtr .EQ 4 +CPS.LocalFrame .EQ 3 +CPS.LocalPtr .EQ 2 CPS.TERM .EQ 1 CPS.KW .EQ 0 * -CPS .EQ 5 +CPS .EQ 6 *-------------------------------------- *-------------------------------------- @@ -100,13 +101,13 @@ ZPLineBufPtr .BS 2 ZPLookupPtr .BS 2 CStackPtr .BS 1 LocalPtr .BS 1 +LocalFrame .BS 1 ScopeIdx .BS 1 -bLocalScope .BS 1 ZPSymBufPtr .BS 2 ZPLookupSymPtr .BS 2 -bInitCode .BS 1 +bLocalScope .BS 1 StmtPreOp .BS 1 ExpState .BS 1 *ExpState.VinYA .EQ $10 @@ -145,9 +146,9 @@ L.MSG.LINKING2 .DA MSG.LINKING2 L.MSG.GENERATING .DA MSG.GENERATING L.MSG.DEBUG .DA MSG.DEBUG .DO _DBG_SYM=1 -L.MSG.DEBUG.SYM0 .DA MSG.DEBUG.SYM0 -L.MSG.DEBUG.SYM1 .DA MSG.DEBUG.SYM1 -L.MSG.DEBUG.SYM2 .DA MSG.DEBUG.SYM2 +L.MSG.DEBUG.SYMN .DA MSG.DEBUG.SYMN +L.MSG.DEBUG.SYMU .DA MSG.DEBUG.SYMU +L.MSG.DEBUG.SYMS .DA MSG.DEBUG.SYMS .FIN .DO _DBG_SCOPE=1 L.MSG.DEBUG.SCIN .DA MSG.DEBUG.SCIN @@ -158,7 +159,7 @@ L.MSG.DEBUG.SCOUT .DA MSG.DEBUG.SCOUT L.MSG.DEBUG.CSOUT .DA MSG.DEBUG.CSOUT L.MSG.DEBUG.OUT .DA MSG.DEBUG.OUT .FIN -L.MSG.TRACE .DA MSG.TRACE +L.MSG.VERBOSE .DA MSG.VERBOSE L.MSG.RTSTK .DA MSG.RTSTK L.MSG.ERROR .DA MSG.ERROR L.MSG.SUMMARY .DA MSG.SUMMARY @@ -532,12 +533,13 @@ CS.QUIT jsr CODE.Quit .8 clc rts *-------------------------------------- -PrintTraceMsg +PrintVerboseMsg .DO _DBG_SCOPE=1 >PUSHW L.MSG.DEBUG.SC jsr SCOPE.Push >PUSHB LocalPtr - >PUSHBI 3 + >PUSHB LocalFrame + >PUSHBI 4 >SYSCALL PrintF * >DEBUG .FIN @@ -547,7 +549,7 @@ PrintTraceMsg lda (pPS),y >PUSHA - >PUSHW L.MSG.TRACE + >PUSHW L.MSG.VERBOSE >LDA.G LineCntPtr inc @@ -612,10 +614,10 @@ PrintErrorMsg >LDA.G CC.hDefineBuf >LDYA.G CC.SaveDefine >STYA ZPLineBufPtr -.10 >LDA.G bTrace +.10 >LDA.G bVerbose bmi .1 - jsr PrintTraceMsg + jsr PrintVerboseMsg .1 lda ZPLineBufPtr @@ -683,8 +685,8 @@ CS.END *-------------------------------------- MSG.GREETINGS .CZ "\r\nA2osX C Compiler %d.%d\r\n\r\n" MSG.USAGE .CS "Usage : CC