diff --git a/.Floppies/A2OSX.BOOTHD.woz b/.Floppies/A2OSX.BOOTHD.woz index 8e3a71ae..e69de29b 100644 Binary files a/.Floppies/A2OSX.BOOTHD.woz and b/.Floppies/A2OSX.BOOTHD.woz differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 938b46f0..93f74b32 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 a4d1e536..3cd64264 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po index 1b98eba0..61c2e677 100644 Binary files a/.Floppies/ProDOSFX.BOOT.po and b/.Floppies/ProDOSFX.BOOT.po differ diff --git a/.Floppies/ProDOSFX.BOOTHD.woz b/.Floppies/ProDOSFX.BOOTHD.woz new file mode 100644 index 00000000..213b4c45 Binary files /dev/null and b/.Floppies/ProDOSFX.BOOTHD.woz differ diff --git a/BASIC.FX/BASIC.S.XF.txt b/BASIC.FX/BASIC.S.XF.txt index c279d1aa..6dfa1c84 100644 --- a/BASIC.FX/BASIC.S.XF.txt +++ b/BASIC.FX/BASIC.S.XF.txt @@ -58,23 +58,29 @@ BSX.MoveHead sta BSX.TargetQTrack lda BSX.CurrentQTrack bit #1 - bne .1 + beq .2 we are on 0/4 or 2/4 track - jsr BSX.SeekPhOnY we are on 0/4 or 2/4 track - bra .9 no wait, next operation will be phy/plx/Ph0On,y + pha -.1 cmp BSX.TargetQTrack we are on 1/4 or 3/4 - bcs .2 if CS, C > T, must move out + cmp BSX.TargetQTrack we are on 1/4 or 3/4 track + bcc .1 if CC, C < T, must move in inc CC: C < T, ON next PH - .HS B0 BCS +.1 and #6 move in : X = Ph(N) + ora BSX.Slotn0 + tax + lda IO.D2.Ph0On,x -.2 dec CS: C > T, ON prev PH + pla - sta BSX.CurrentQTrack + bcs .2 if CS, C > T, must move out - bra .6 Ph ON to go to 0/4 or 2/4, then wait + inc move in : Y = Ph(N+1) + +.2 jsr BSX.SeekPhOnY move out: Y = Ph(N) + + bra .9 no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -113,12 +119,13 @@ BSX.MoveHead sta BSX.TargetQTrack jsr BSX.Wait25600usec - lda IO.D2.Ph0Off,y - bcc .90 + bcc .10 lda IO.D2.Ph0Off,x -.90 rts +.10 lda IO.D2.Ph0Off,y + + rts *-------------------------------------- BSX.SeekPhOnY and #6 ora BSX.Slotn0 diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt index dae0d6e5..b9933550 100644 --- a/BIN/CC.S.CODE.txt +++ b/BIN/CC.S.CODE.txt @@ -1,6 +1,25 @@ NEW AUTO 3,1 - .LIST OFF +*-------------------------------------- +CODE.Init stz ZPCCConst + stz ZPCCConst+1 + + >LDYAI PCC.FH.CS + >STYA ZPCCCode + + >LDYAI 20 char *ARGV[10] + >STYA ZPCCData + + clc +.9 rts +*-------------------------------------- +CODE.Quit >LDA.G CC.hOutFile + beq .8 + + >SYSCALL FClose + +.8 clc + rts *-------------------------------------- CODE.Debug ldx #PCC.DEBUG.L ldy #0 @@ -197,6 +216,37 @@ CODE.PushFromPtr rts *-------------------------------------- +CODE.PushConstP + lda #$A9 LDA #imm + jsr CODE.EmitByte + bcs .9 + + lda ZPCCConst + jsr CODE.EmitByte + bcs .9 + + lda #$A2 LDX #imm + jsr CODE.EmitByte + bcs .9 + + lda ZPCCConst+1 + jsr CODE.EmitByte + bcs .9 + + ldx #PCC.PushConstPAX.L + ldy #0 + +.1 lda PCC.PushConstPAX,y + jsr CODE.EmitByte + bcs .9 + + iny + dex + bne .1 + + clc +.9 rts +*-------------------------------------- CODE.PUSHI pha lda #$A9 LDA #imm jsr CODE.EmitByte @@ -266,6 +316,17 @@ CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR ..... tya bra CODE.EmitByte *-------------------------------------- +CODE.SYSCALL lda #$A2 LDX #imm + jsr CODE.EmitByte + txa + jsr CODE.EmitByte + lda #$20 JSR + jsr CODE.EmitByte + lda #A2osX.SYSCALL + jsr CODE.EmitByte + lda /A2osX.SYSCALL + bra CODE.EmitByte +*-------------------------------------- CODE.FPUCALL lda #$A2 LDX #imm jsr CODE.EmitByte txa @@ -277,22 +338,90 @@ CODE.FPUCALL lda #$A2 LDX #imm lda /A2osX.FPUCALL bra CODE.EmitByte *-------------------------------------- -CODE.SYSCALL lda #$A2 LDX #imm - jsr CODE.EmitByte +CODE.EmitByte clc if Pass 1... + bit bPass2 + bpl .1 + + phx + phy + tax + + >PUSHB.G CC.hOutFile txa - jsr CODE.EmitByte - lda #$20 JSR - jsr CODE.EmitByte - lda #A2osX.SYSCALL - jsr CODE.EmitByte - lda /A2osX.SYSCALL -*-------------------------------------- -CODE.EmitByte sta (ZPCCCode) - inc ZPCCCode + >PUSHA + >SYSCALL fputc + + ply + plx + +.1 inc ZPCCCode bne .8 inc ZPCCCode+1 +.8 rts CC/CS from fputc +*-------------------------------------- +CODE.EmitDATA clc + bit bPass2 + bpl .1 + + phx + phy + tax + + >PUSHB.G CC.hOutFile + txa + >PUSHA + >SYSCALL fputc + ply + plx + +.1 inc ZPCCConst + bne .8 + + inc ZPCCConst+1 + +.8 rts CC/CS from fputc +*-------------------------------------- +CODE.CSSelect clc + bit bPass2 + bpl .8 + + >PUSHB.G CC.hOutFile + >PUSHWI 0 + lda ZPCCCode+1 + sec + sbc #$20 + >PUSHA + lda ZPCCCode + >PUSHA + >PUSHBI SEEK.SET + >SYSCALL fseek + +.8 rts +*-------------------------------------- +CODE.DSSelect clc + bit bPass2 + bpl .8 + + >PUSHB.G CC.hOutFile + >PUSHWI 0 +* >PUSHWI 0 +* >PUSHBI SEEK.END + + lda ZPCCConst + clc + adc PCC.FH+PCC.FH.IDATA + tay + lda ZPCCConst+1 + adc PCC.FH+PCC.FH.IDATA+1 + sec + sbc #$20 + >PUSHYA + >PUSHBI SEEK.SET + + >SYSCALL fseek + .8 rts *-------------------------------------- MAN diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index 59eae110..ea79dea8 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -1,14 +1,13 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- CC.Init >SYSCALL SListNew - bcs .99 + bcs .9 >STA.G CC.hDefines >SYSCALL SListNew - bcs .99 + bcs .9 >STA.G CC.hTags @@ -18,30 +17,6 @@ CC.Init >SYSCALL SListNew >STA.G CC.hSymbols sty ScopePtr - >LDYAI 4096 - >SYSCALL GetMem -.99 bcs .9 - - >STYA ZPCCCode - txa - >STA.G CC.hCode - - >LDYAI 1024 - >SYSCALL GetMem - bcs .9 - - >STYA ZPCCConst - txa - >STA.G CC.hConst - - >LDYAI 1024 - >SYSCALL GetMem - bcs .9 - - >STYA ZPCCData - txa - >STA.G CC.hData - >LDYAI 256 >SYSCALL GetMem bcs .9 @@ -78,25 +53,19 @@ CC.Quit ldy ScopePtr >SYSCALL SListFree -.4 lda hDefineBuf +.4 >LDA.G CC.hDefineBuf + jsr .7 + + >LDA.G CC.hLookupSymBuf jsr .7 .5 jsr CS.RUN.FClose bne .5 - lda hSymBuf + >LDA.G CC.hSymBuf jsr .7 >LDA.G CC.hStack - jsr .7 - - >LDA.G CC.hData - jsr .7 - - >LDA.G CC.hConst - jsr .7 - - >LDA.G CC.hCode .7 beq CC.Quit.RTS >SYSCALL FreeMem @@ -202,7 +171,7 @@ CC.CompileLine.1 jsr CC.SYM.Store bcs .29 - jmp CC.SYM.FreeBuf + jmp CC.SYM.Free *-------------------------------------- * TODO: AOPS @@ -225,7 +194,7 @@ CC.CompileLine.1 .28 jsr CC.SYM.Store bcs .9 - jsr CC.SYM.FreeBuf + jsr CC.SYM.Free bra .68 *-------------------------------------- @@ -256,7 +225,7 @@ CC.CompileLine.1 .69 bcs .99 ldy #SYM.Q - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y bit #SYM.Q.FUNC beq .60 @@ -265,7 +234,7 @@ CC.CompileLine.1 jsr CC.F.CallNoRetV bcs .9 - jsr CC.SYM.FreeBufPop + jsr CC.SYM.LookupFree bra .8 *-------------------------------------- @@ -285,7 +254,7 @@ CC.CompileLine.1 jsr CC.SYM.PopValue bcs .9 - jsr CC.SYM.FreeBufPop + jsr CC.SYM.LookupFree *-------------------------------------- .68 jsr CC.GetCharNB cmp #';' @@ -383,8 +352,8 @@ CC.SListLookup >PUSHA hSList >SYSCALL SListLookup bcs .99 - pha save KeyID - phy +* pha save KeyID +* phy >PUSHA KeyID.HI tya @@ -398,9 +367,14 @@ CC.SListLookup >PUSHA hSList >SYSCALL SListGetData bcs .9 - ply - pla X = hSymScope, Y,A = SymID -* clc + >STYA.G CC.LookupSymSize + + txa + >STA.G CC.hLookupSymBuf + >SYSCALL GetMemPtr + +* clc Y,A = SymPtr, X = hSymBuf + rts .9 plx @@ -410,88 +384,6 @@ CC.SListLookup >PUSHA hSList .99 inc pStack rts *-------------------------------------- -* int main(int argc, char *argv[]) ; -*-------------------------------------- -CC.MainExec lda #$EEEE - >PUSHA - >PUSHA int ret value - - lda #0 - >PUSHA - ldy #S.PS.ARGC - lda (pPS),y - >PUSHA push int ARGC (int) - - >PUSHW ZPCCConst push int ARGV *char[] - - stz ArgIndex - -.1 lda ArgIndex - >SYSCALL ArgV - bcs .2 - - inc ArgIndex - - pha - tya - - sta (ZPCCConst) - pla - - ldy #1 - sta (ZPCCConst),y - - lda ZPCCConst -* clc - adc #2 - sta ZPCCConst - bcc .1 - - inc ZPCCConst+1 - bra .1 - -.2 >PUSHB.G CC.hSymbols - - >PUSHW L.CC.MAIN - >SYSCALL SListLookup - bcs .9 - - phy - pha - - >PUSHB.G CC.hSymbols - - pla - >PUSHA - pla - >PUSHA KeyID - - >PUSHWZ allocate - >PUSHWI 65535 all - >PUSHWZ From Start - >SYSCALL SListGetData - bcs .9 - - 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 @@ -501,19 +393,16 @@ CC.ZPLookupPtrAddAp1 inc ZPLookupPtr+1 .1 rts *-------------------------------------- -CC.GetDefine >LDA.G CC.hDefines - - jsr CC.SListLookup - bcs .9 - - stx hDefineBuf - - >LDYA ZPLineBufPtr +CC.GetDefine >LDYA ZPLineBufPtr >STYA.G CC.SaveDefine - txa - >SYSCALL GetMemPtr + >LDA.G CC.hDefines + jsr CC.SListLookup + bcs .9 + >STYA ZPLineBufPtr + txa + >STA.G CC.hDefineBuf .9 rts *-------------------------------------- @@ -667,30 +556,29 @@ CC.GetNextChar inc ZPLineBufPtr CC.GetChar lda (ZPLineBufPtr) bne .8 - lda hDefineBuf + phy + + >LDA.G CC.hDefineBuf beq .1 - stz hDefineBuf - phx - phy + >SYSCALL FreeMem + >STZ.G CC.hDefineBuf + >LDYA.G CC.SaveDefine >STYA ZPLineBufPtr - ply plx + ply bra CC.GetChar -.1 lda #C.CR +.1 ply + lda #C.CR .8 clc rts - -.9 lda #MLI.E.EOF - sec -.99 rts *--------------------------------------- CC.IsEndArg cmp #']' beq .8 diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index c5c856a5..b661684e 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- CC.DECL jsr CC.IsLetter bcs .80 @@ -51,7 +50,7 @@ CC.DECL jsr CC.IsLetter .29 bcs .99 - jsr CC.SYM.FreeBuf + jsr CC.SYM.Free clv clc diff --git a/BIN/CC.S.DIR.txt b/BIN/CC.S.DIR.txt index b9ee019a..a10cc225 100644 --- a/BIN/CC.S.DIR.txt +++ b/BIN/CC.S.DIR.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- CC.DIR jsr CC.GetNextCharNB bcs .99 @@ -20,17 +19,22 @@ CC.DIR jsr CC.GetNextCharNB sec .99 rts *-------------------------------------- -CC.DIR.DEFINE jsr CC.CheckSpace +CC.DIR.DEFINE clc + bit bPass2 + bmi .8 + + jsr CC.CheckSpace bcs .99 jsr CC.IsLetter bcs .90 + ldx #SYM.SC.DEFINE >LDA.G CC.hDefines jsr CC.SYM.NewKey bcs .99 - >STYA ZPSymID + >STYA ZPPtr1 SymID jsr CC.SkipX @@ -53,7 +57,7 @@ CC.DIR.DEFINE jsr CC.CheckSpace phy >PUSHB.G CC.hDefines - >PUSHW ZPSymID + >PUSHW ZPPtr1 SymID >PUSHW ZPLineBufPtr ply @@ -63,7 +67,7 @@ CC.DIR.DEFINE jsr CC.CheckSpace >SYSCALL SListAddData bcs .99 - jmp CC.SkipLine +.8 jmp CC.SkipLine .90 lda #E.CSYN sec @@ -100,27 +104,37 @@ CC.DIR.INCLUDE lda #0 >STZ.G PathBuf beq .90 cmp ArgIndex - beq .8 + beq .4 sta (pData),y iny - cpy #64 + cpy #MLI.MAXPATH bne .3 .90 lda #E.CSYN sec .99 rts -.8 lda #0 +.4 phy + jsr CC.GetNextChar skip " or > + ply + + lda #0 sta (pData),y terminate string - jsr CC.GetNextChar skip " or > - - >LDYA pData - jsr CS.RUN.FOpen - bcs .99 + dey + lda (pData),y + cmp #'h' + bne .5 + bit bPass2 + bpl .5 + + clc rts + +.5 >LDYA pData + jmp CS.RUN.FOpen *-------------------------------------- MAN SAVE usr/src/bin/cc.s.dir diff --git a/BIN/CC.S.EXEC.txt b/BIN/CC.S.EXEC.txt index 95ce4a2d..e5acec3b 100644 --- a/BIN/CC.S.EXEC.txt +++ b/BIN/CC.S.EXEC.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- CC.BOPS.bMUL CC.BOPS.cMUL diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index 274c398b..455ed560 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- * Input: * ZPLineBufPtr, Y,A = Expected type/qual @@ -74,7 +73,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q bcs .22 ldy #SYM.Q - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y and #SYM.Q.FUNC bne .21 @@ -84,7 +83,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q jsr CC.EXP.Get Check T/Q & Get value on stack bcs .29 - jsr CC.SYM.FreeBufPop + jsr CC.SYM.LookupFree bra .30 *-------------------------------------- @@ -95,7 +94,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q >STYA ZPPtr2 store real T/Q - jsr CC.SYM.FreeBufPop + jsr CC.SYM.LookupFree bra .30 *-------------------------------------- @@ -195,11 +194,11 @@ CC.EXP.CheckGetSymType ora ZPPtr2+1 bne .1 - lda (ZPSymBufPtr) + lda (ZPLookupSymPtr) sta ZPPtr2 ldy #SYM.Q - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y sta ZPPtr2+1 clc @@ -279,44 +278,46 @@ CC.EXP.BOPS cpy #SYM.T.UINT clc rts *-------------------------------------- -CC.AddContCharP ldy #0 +CC.AddContCharP jsr CODE.PushConstP + bcs .99 + + jsr CODE.DSSelect + bcs .99 + + ldy #0 .1 jsr CC.GetNextChar bcs .9 +* TODO : add support for \ to next line + cmp #C.CR beq .9 cmp #'"' beq .2 - sta (ZPCCConst),y + jsr CODE.EmitData + bcs .99 + iny bra .1 .2 lda #0 - sta (ZPCCConst),y + jsr CODE.EmitData + bcs .99 + + jsr CODE.CSSelect + bcs .99 - lda ZPCCConst+1 Push PTR on stack - jsr CODE.PUSHI - lda ZPCCConst - jsr CODE.PUSHI - - tya - sec - adc ZPCCConst - sta ZPCCConst - bcc .3 - - inc ZPCCConst+1 -.3 jsr CC.GetNextChar Skip " + jsr CC.GetNextChar Skip " clc rts .9 lda #E.ESYN sec - rts +.99 rts *-------------------------------------- CC.EXP.GetNum cpy #SYM.T.FLOAT bcc .1 @@ -409,7 +410,7 @@ CC.EXP.Get >LDYA L.CC.AOPS lda ZPPtr2 target T beq .3 - lda (ZPSymBufPtr) SYM.T + lda (ZPLookupSymPtr) SYM.T cmp #SYM.T.VOID beq .2 @@ -419,14 +420,14 @@ CC.EXP.Get >LDYA L.CC.AOPS .2 lda ZPPtr2+1 Q ldy #SYM.Q - cmp (ZPSymBufPtr),y + cmp (ZPLookupSymPtr),y bne .9 -.3 lda (ZPSymBufPtr) SYM.T +.3 lda (ZPLookupSymPtr) SYM.T sta ZPPtr2 T pha ldy #SYM.Q - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y sta ZPPtr2+1 Q ply Y,A = T/Q @@ -442,7 +443,7 @@ CC.EXP.Get >LDYA L.CC.AOPS .8 jmp (J.CC.PREOPS,x) *-------------------------------------- CC.EXP.Array ldy #SYM.Q - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y and #SYM.Q.AAARRAY beq .9 @@ -477,11 +478,11 @@ CC.EXP.Array ldy #SYM.Q ldx #FPU.iAdd jsr CODE.FPUCALL add to base address - lda (ZPSymBufPtr) SYM.T + lda (ZPLookupSymPtr) SYM.T pha ldy #SYM.Q - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y sec sbc #SYM.Q.ARRAY ply @@ -497,13 +498,13 @@ CC.EXP.Array ldy #SYM.Q .99 rts *-------------------------------------- CC.EXP.PushAddr ldy #SYM.Addr+1 - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y bne .7 * LOCAL jsr CODE.PUSHpBASEp1 ldy #SYM.Addr - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y eor #$FF inc jsr CODE.LDAI @@ -515,7 +516,7 @@ CC.EXP.PushAddr ldy #SYM.Addr+1 .7 jsr CODE.PUSHI ldy #SYM.Addr - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y jsr CODE.PUSHI clc @@ -523,13 +524,13 @@ CC.EXP.PushAddr ldy #SYM.Addr+1 *-------------------------------------- CC.EXP.PushDeref ldy #SYM.Addr+1 - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y bne .7 * LOCAL jsr CODE.SETpBASEp1 ldy #SYM.Addr - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y eor #$FF inc jsr CODE.LDAI @@ -541,13 +542,14 @@ CC.EXP.PushDeref 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 + lda (ZPLookupSymPtr),y jsr CODE.LDAI lda #$85 STA zp @@ -558,22 +560,22 @@ CC.EXP.PushDeref jsr CODE.Deref clc - rts +.9 rts *-------------------------------------- CC.EXP.GetRef ldy #SYM.Addr+1 - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y jsr CODE.PUSHI ldy #SYM.Addr - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y jsr CODE.PUSHI - lda (ZPSymBufPtr) SYM.T + lda (ZPLookupSymPtr) SYM.T sta ZPPtr2 T ldy #SYM.Q - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y clc adc #SYM.Q.POINTER bcs .9 more than *** diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index ab2dce82..d8e5be10 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- CC.F.Decl stz LocalPtr @@ -38,9 +37,6 @@ CC.F.Decl stz LocalPtr jsr CC.IsLetter bcs .2 - jsr CC.SYM.Push - bcs .99 - >LDYA ZPPtr2 ldx #SYM.SC.AUTO jsr CC.SYM.New @@ -49,7 +45,7 @@ CC.F.Decl stz LocalPtr jsr CC.SYM.Store Store f() Args in Local scope bcs .99 - jsr CC.SYM.FreeBufPop + jsr CC.SYM.Free bcs .99 jsr CC.GetCharNB @@ -93,12 +89,6 @@ CC.F.Decl stz LocalPtr .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 @@ -108,10 +98,6 @@ CC.F.Decl stz LocalPtr clc Store f() Declaration / Start Definition rts - -.90 lda #E.REDEF - sec - rts *-------------------------------------- CC.F.DeclGetTQ lda (ZPLineBufPtr) cmp #'.' @@ -167,6 +153,17 @@ CC.F.Def.END jsr CODE.Leave clc rts *-------------------------------------- +CC.F.AddTQ pha + tya + ldy ZPSymSize + sta (ZPSymBufPtr),y + iny + pla + sta (ZPSymBufPtr),y + iny + sty ZPSymSize + rts +*-------------------------------------- * in : ZPSymPtr * Y,A = Expected T/Q *-------------------------------------- @@ -188,11 +185,10 @@ CC.F.CallRetV sec 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 + beq .20 SYS/LIB/FPU call, no ret value space jsr CC.SYM.GetSymSizeOfInAXC jsr CODE.nAddLocal @@ -354,7 +350,7 @@ CC.F.Call2 lda ZPPtr2+1 * Return Value : call & put result on stack if in Y,A .5 ldy #SYM.Addr+1 - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y cmp #2 bcs .8 not a SYS/FPU call...Ret value on stack @@ -377,13 +373,14 @@ CC.F.Call2 lda ZPPtr2+1 rts *-------------------------------------- CC.F.Call3 ldy #SYM.Addr+1 - lda (ZPSymBufPtr),y + + lda (ZPLookupSymPtr),y beq .9 pha dey - lda (ZPSymBufPtr),y + lda (ZPLookupSymPtr),y tax ply @@ -407,19 +404,23 @@ CC.F.Call3 ldy #SYM.Addr+1 clc rts -.9 lda #E.FUNDEF - sec +.9 bit bPass2 + bmi .99 + + lda #5 leave room for LDX #imm, JSR abs + clc + adc ZPCCConst + sta ZPCCConst + + bcc .90 + + inc ZPCCConst+1 + +.90 clc rts -*-------------------------------------- -CC.F.AddTQ pha - tya - ldy ZPSymSize - sta (ZPSymBufPtr),y - iny - pla - sta (ZPSymBufPtr),y - iny - sty ZPSymSize + +.99 lda #E.FUNDEF + sec rts *-------------------------------------- CC.F.GetTQ ldy ZPSymSize diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index 66815276..c5e9049e 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- * Built in Keywords *-------------------------------------- @@ -49,11 +48,11 @@ CC.KW.IF.END jsr CC.PopYA >STYA ZPPtr1 set JMP false lda ZPCCCode - sta (ZPPtr1) +* sta (ZPPtr1) ldy #1 lda ZPCCCode+1 - sta (ZPPtr1),y +* sta (ZPPtr1),y * clc @@ -85,11 +84,11 @@ CC.KW.WHILE.END jsr CC.PopYA Get JMP false location jsr CODE.TOABSYX lda ZPCCCode - sta (ZPPtr1) +* sta (ZPPtr1) ldy #1 lda ZPCCCode+1 - sta (ZPPtr1),y +* sta (ZPPtr1),y clc @@ -106,37 +105,40 @@ CC.KW.DO.END *-------------------------------------- * for (e1;e2;e3) s; * -* e1; -* while (e2) -* { -* s; -* cont: -* e3; +* { <- new scope : allows for(int i=1; ....) +* e1; +* loop: +* while (e2) +* { +* s; +* cont: +* e3; +* } +* break: * } -* break: *-------------------------------------- CC.KW.FOR jsr CC.GetCharNB - bcs .19 + bcs .9 cmp #'(' - bne .19 + bne .9 jsr CC.GetNextCharNB - bcs .19 + bcs .9 jsr CC.EXP.Eval00 get e1 - bcs .29 + bcs .9 jsr CC.KW.StackDiscard jsr CC.GetCharNB - bcs .19 + bcs .9 cmp #';' - bne .19 + bne .9 jsr CC.GetNextCharNB skip ';' -.19 bcs .9 + bcs .9 *-------------------------------------- >LDYA ZPCCCode >STYA ZPPtr2 save LOOP address @@ -187,11 +189,11 @@ CC.KW.FOR jsr CC.GetCharNB jsr CODE.TOABSYX JMP e2 lda ZPCCCode setup JSR s; - sta (ZPPtr3) +* sta (ZPPtr3) lda ZPCCCode+1 ldy #1 - sta (ZPPtr3),y +* sta (ZPPtr3),y jmp CC.KW.BEGIN @@ -215,11 +217,11 @@ CC.KW.FOR.END lda #$60 >STYA ZPPtr1 get JMP break: location lda ZPCCCode - sta (ZPPtr1) +* sta (ZPPtr1) ldy #1 lda ZPCCCode+1 - sta (ZPPtr1),y +* sta (ZPPtr1),y clc @@ -227,7 +229,15 @@ CC.KW.FOR.END lda #$60 *-------------------------------------- CC.KW.SWITCH CC.KW.CASE + lda #E.CSYN + sec + rts +*-------------------------------------- CC.KW.BREAK + lda #E.CSYN + sec + rts +*-------------------------------------- CC.KW.CONTINUE lda #E.CSYN sec @@ -287,6 +297,7 @@ CC.KW.STRUCT >ENTER 4 jsr CC.GetCharNB bcs .99 + ldx #SYM.SC.TAG >LDA.G CC.hTags jsr CC.SYM.NewKey bcs .99 diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt new file mode 100644 index 00000000..7ec6aed9 --- /dev/null +++ b/BIN/CC.S.LINK.txt @@ -0,0 +1,173 @@ +NEW + AUTO 3,1 +*-------------------------------------- +CC.Link.RTS rts + +CC.Link >LDYA L.MSG.LINKING + >SYSCALL Puts + + >LDYAI 256 + >SYSCALL GetMem + bcs CC.Link.RTS + + >STYA ZPSymBufPtr + txa + >STA.G CC.hSymBuf + + ldy #0 + lda #0 + +.1 >STYA ZPPtr1 SymID + + >PUSHB.G CC.hSymbols + >PUSHW ZPPtr1 SymID + >PUSHW pData + + >SYSCALL SListGetByID + bcs .8 + + >STYA ZPPtr2 NextID + + >PUSHB.G CC.hSymbols + >PUSHW ZPPtr1 SymID + >PUSHW ZPSymBufPtr + >PUSHWI $ffff All + >PUSHWZ from Start + >SYSCALL SListGetData + bcs .9 + + >STYA ZPSymSize + + ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + dey + ora (ZPSymBufPtr),y + bne .6 + + jsr CC.Link.LIBC + bcc .6 + + jsr CC.Link.Dump + lda #E.FUNDEF + sec + bra .9 + +.6 >LDA.G bTrace + bpl .7 + + jsr CC.Link.Dump + bcs .9 + +.7 >LDYA ZPPtr2 + jmp .1 + +.8 clc + +.9 php + pha + jsr CC.SYM.Free + pla + plp + + rts +*-------------------------------------- +* Input : pData = Symbol +*-------------------------------------- +CC.Link.LIBC >LDYA L.CC.LIBC + >STYA ZPLookupPtr + + ldy #$ff + +.10 iny + lda (pData),y + bne .10 + + phy Symbol Len + + ldx #0 + +.1 lda (ZPLookupPtr) + beq .9 Ending 0, not found.... + + pla + pha Get Back Len + cmp (ZPLookupPtr) Same Len ? + bne .4 + + tay + +.2 lda (ZPLookupPtr),y + + dey + cmp (pData),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 + + >PUSHB.G CC.hSymbols + >PUSHW ZPPtr1 SymID + >PUSHW ZPSymBufPtr + >PUSHW ZPSymSize + >SYSCALL SListSetData + 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.Link.Dump >PUSHW L.MSG.LINKING2 + >PUSHW pData + + >PUSHB (ZPSymBufPtr) SYM.T + + ldy #1 + >PUSHB (ZPSymBufPtr),y SYM.Q + + iny + >PUSHB (ZPSymBufPtr),y SYM.SC + + ldy #SYM.SizeOf+1 + >PUSHB (ZPSymBufPtr),y + dey + >PUSHB (ZPSymBufPtr),y + + ldy #SYM.Addr+1 + >PUSHB (ZPSymBufPtr),y + dey + >PUSHB (ZPSymBufPtr),y + + >PUSHBI 9 + >SYSCALL PrintF + rts +*-------------------------------------- + +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.link +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index 2783a988..aeb31eb3 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -1,59 +1,5 @@ NEW AUTO 3,1 - .LIST OFF -*-------------------------------------- -CC.STMT jsr CC.SYM.Lookup var= or func() ? - bcs .80 - - ldy #SYM.Q - lda (ZPSymBufPtr),y - bit #SYM.Q.FUNC - bne .20 - - jsr CC.GetCharNB var = ? - bcs .90 - -* TODO: AOPS - - cmp #'=' - bne .90 - - jsr CC.GetNextChar Skip = - bcs .99 - - jsr CC.SYM.GetTypeInYA - jsr CC.EXP.Eval - bcs .99 - - jsr CC.SYM.PopValue - bcs .99 - - jsr CC.SYM.FreeBufPop - - - clv - clc - rts - - -.20 ldy #0 func( ... ); - lda #0 - jsr CC.F.CallNoRetV - bcs .9 - - jsr CC.SYM.FreeBufPop - - clv - clc - rts - -.80 bit #$60 - clc - rts - -.90 lda #E.CSYN - sec -.99 rts *-------------------------------------- * X = KW.ID *-------------------------------------- @@ -88,7 +34,7 @@ CC.STMT.CPStmt.END jsr CC.Pop Locals sta LocalPtr - + txa bmi .5 @@ -100,6 +46,8 @@ CC.STMT.CPStmt.END sec rts *-------------------------------------- +CC.CPS.New +*-------------------------------------- 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 b0999ccb..6f7a1335 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- * Input : ZPLineBufPtr, Y,A = T/Q, X = SC * Output : Y,A = VarID @@ -10,11 +9,10 @@ CC.SYM.New >STYA ZPPtr2 T/Q ldy ScopePtr lda (pData),y - sta hSymScope jsr CC.SYM.NewKey bcs .9 - >STYA ZPSymID Y,A = KeyID + >STYA.G CC.SymID Y,A = KeyID stx ZPPtr3+1 X = KeyLen >LDYAI 256 @@ -22,22 +20,32 @@ CC.SYM.New >STYA ZPPtr2 T/Q bcs .9 >STYA ZPSymBufPtr - stx hSymBuf + txa + >STA.G CC.hSymBuf - >LDYA ZPPtr2 - jsr CC.SYM.SetTypeYA + lda ZPPtr2 + sta (ZPSymBufPtr) #SYM.T - lda ZPPtr3 - ldy #SYM.SC + lda ZPPtr2+1 + ldy #SYM.Q sta (ZPSymBufPtr),y - lda #SYM.Def - sta ZPSymSize + lda ZPPtr3 + iny #SYM.SC + sta (ZPSymBufPtr),y + + iny + lda #0 + +.1 sta (ZPSymBufPtr),y + iny + cpy #SYM.Def + bne .1 + + sty ZPSymSize stz ZPSymSize+1 ldx ZPPtr3+1 Key Len - jsr CC.SYM.Link - jsr CC.SkipX jsr CC.GetCharNB @@ -46,7 +54,7 @@ CC.SYM.New >STYA ZPPtr2 T/Q cmp #'(' bne CC.SYM.NewV - jmp CC.F.Decl + jmp CC.F.Decl .9 rts *-------------------------------------- @@ -166,7 +174,7 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC ldy #SYM.Addr sta (ZPSymBufPtr),y - + jsr CC.SYM.GetSymSizeOfInAXC jsr CODE.nAddLocal @@ -179,87 +187,55 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC *-------------------------------------- CC.SYM.NewKey >PUSHA >PUSHW ZPLineBufPtr - >SYSCALL SListNewKey -* bcs .9 -* clc Y,A = KeyID, X = KeyLen + bit bPass2 + bpl .1 -.9 rts -*-------------------------------------- -* Input : ZPLineBufPtr, X = KeyLen -*-------------------------------------- -CC.SYM.Link >LDYA L.CC.LIBC - >STYA ZPLookupPtr + txa + bne .1 - phx + >SYSCALL SListLookup - lda #0 - ldy #SYM.Addr - sta (ZPSymBufPtr),y - iny - sta (ZPSymBufPtr),y +* clc - 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 +.1 >SYSCALL SListNewKey - lda (ZPLookupPtr) - jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol - - lda (ZPLookupPtr) - jsr CC.ZPLookupPtrAddAp1 Skip LEN\definition - bra .1 - -.9 plx - sec - rts + rts Y,A = KeyID, X = KeyLen *-------------------------------------- -CC.SYM.Store >PUSHB hSymScope - >PUSHW ZPSymID +CC.SYM.Store ldy ScopePtr + lda (pData),y + >PUSHA + >PUSHW.G CC.SymID >PUSHW ZPSymBufPtr - >PUSHBI 0 - >PUSHB ZPSymSize - >SYSCALL SListAddData + >PUSHW ZPSymSize + + bit bPass2 + bpl .1 + + bit ScopenCnt + bmi .1 + + >SYSCALL SListSetData + rts + +.1 >SYSCALL SListAddData + + rts +*-------------------------------------- +CC.SYM.Free >LDA.G CC.hSymBuf + >SYSCALL FreeMem + bcs .99 + + >STZ.G CC.hSymBuf + rts + +.99 >DEBUG rts *-------------------------------------- CC.SYM.NewScope ldy ScopePtr - cpy #CC.hSymbols+SCOPE.MAX-1 + cpy #CC.hSymbols+SCOPE.MAX bcs .9 >SYSCALL SListNew @@ -288,12 +264,9 @@ CC.SYM.FreeScope dec ScopePtr inc ScopenCnt - rts + rts *-------------------------------------- -CC.SYM.Lookup jsr CC.SYM.Push - bcs .99 - - >PUSHB ScopePtr +CC.SYM.Lookup >PUSHB ScopePtr .1 tay lda (pData),y @@ -302,64 +275,35 @@ CC.SYM.Lookup jsr CC.SYM.Push lda (pstack) cmp #CC.hSymbols - beq .9 CS + beq .9 dec sta (pstack) bra .1 -.9 jsr CC.SYM.Pop - - inc pStack +.9 inc pStack lda #E.NOKEY + sec rts -.8 stx hSymBuf - - >PULLA - tay - lda (pData),y - sta hSymScope - - txa - >SYSCALL GetMemPtr - >STYA ZPSymBufPtr +.8 inc pStack + + >STYA ZPLookupSymPtr .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 +CC.SYM.LookupFree + >LDA.G CC.hLookupSymBuf >SYSCALL FreeMem + bcs .99 + + >STZ.G CC.hLookupSymBuf 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 + + +.99 >DEBUG + rts *-------------------------------------- * Y,A = value T/Q *-------------------------------------- @@ -525,7 +469,7 @@ CC.SYM.GetAddrInYA lda (ZPSymBufPtr),y pha - dey #SYM.Addr + dey lda (ZPSymBufPtr),y tay diff --git a/BIN/CC.S.TYPE.txt b/BIN/CC.S.TYPE.txt index b691bc93..a3eb2099 100644 --- a/BIN/CC.S.TYPE.txt +++ b/BIN/CC.S.TYPE.txt @@ -1,6 +1,5 @@ NEW AUTO 3,1 - .LIST OFF *-------------------------------------- CC.TYPE.Decl >ENTER 2 lda #0 diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 6285504a..ad77065a 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -40,18 +40,34 @@ SYM.SC.AUTO .EQ 2 SYM.SC.REGISTER .EQ 4 SYM.SC.EXTERN .EQ 6 SYM.SC.TYPEDEF .EQ 8 +SYM.SC.DEFINE .EQ 10 +SYM.SC.TAG .EQ 12 * SYM.SizeOf .EQ 4 SYM.Addr .EQ 6 -* .EQ 8 +SYM.Def .EQ 8 * -SYM.Def .EQ 10 +SYM .EQ 10 +*-------------------------------------- +CPS.ParentID .EQ 0 +CPS.hSYM .EQ 2 +* +CPS.Cont .EQ 4 +CPS.Break .EQ 6 +* +CPS .EQ 8 *-------------------------------------- * Zero Page Segment, up to 32 bytes *-------------------------------------- .DUMMY .OR ZPBIN ZS.START +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZPPtr3 .BS 2 +ArgIndex .BS 1 +bPass2 .BS 1 + ZPCCCode .BS 2 ZPCCConst .BS 2 ZPCCData .BS 2 @@ -66,17 +82,12 @@ LocalPtr .BS 1 ScopePtr .BS 1 ScopenCnt .BS 1 -ZPSymID .BS 2 -hSymScope .BS 1 -hSymBuf .BS 1 +* .BS 1 +* .BS 1 ZPSymSize .BS 2 ZPSymBufPtr .BS 2 -ZPPtr1 .BS 2 -ZPPtr2 .BS 2 -ZPPtr3 .BS 2 -ArgIndex .BS 1 -hDefineBuf .BS 1 +ZPLookupSymPtr .BS 2 ZS.END .ED *-------------------------------------- @@ -104,10 +115,14 @@ CS.START cld L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.USAGE .DA MSG.USAGE L.MSG.COMPILING .DA MSG.COMPILING +L.MSG.LINKING .DA MSG.LINKING +L.MSG.LINKING2 .DA MSG.LINKING2 +L.MSG.GENERATING .DA MSG.GENERATING 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.SUMMARY .DA MSG.SUMMARY L.MSG.NOMAIN .DA MSG.NOMAIN L.ENV.INCLUDE .DA ENV.INCLUDE *-------------------------------------- @@ -207,6 +222,7 @@ J.CC.STYPES .DA CC.TYPE.SCHAR *-------------------------------------- L.CC.MAIN .DA CC.MAIN L.CC.LIBC .DA CC.LIBC +L.PCC.FH .DA PCC.FH .DA 0 *-------------------------------------- * Called once at process creation @@ -243,21 +259,48 @@ CS.RUN >PUSHW L.MSG.GREETINGS jsr CC.Init bcs CS.INIT.RTS + + jsr CODE.Init + + jsr CS.RUN.FOpen1st + bcs CS.INIT.RTS *-------------------------------------- -CS.RUN.LOOP jsr CC.CompileFile +CS.RUN.CLOOP jsr CC.CompileFile cmp #MLI.E.EOF bne .9 jsr CS.RUN.FClose - bne CS.RUN.LOOP + bne CS.RUN.CLOOP *-------------------------------------- - jsr CC.MainExec - bcc .8 + jsr PrintSummary + bcs .99 - >LDYA L.MSG.NOMAIN - >SYSCALL puts + jsr CC.Link + bcs .99 + jsr CheckMain + bcs .99 + + dec bPass2 + + jsr CS.RUN.FCreate + bcs .99 + + jsr CODE.Init + bcs .99 + + jsr CS.RUN.FOpen1st + bcs .99 +*-------------------------------------- +.2 jsr CC.CompileFile + + cmp #MLI.E.EOF + bne .9 + + jsr CS.RUN.FClose + bne .2 +*-------------------------------------- .8 lda #0 Exit Code = Success sec rts @@ -266,13 +309,13 @@ CS.RUN.LOOP jsr CC.CompileFile jsr PrintErrorMsg pla sec - rts +.99 rts *-------------------------------------- CS.RUN.ARGS inc ArgIndex lda ArgIndex >SYSCALL ArgV - bcs .7 + bcs .8 >STYA ZPPtr1 lda (ZPPtr1) @@ -297,18 +340,24 @@ CS.RUN.ARGS inc ArgIndex sta (pData),y bra CS.RUN.ARGS -.4 >LDA.G hFilePtr - cmp #hFilePtr +.4 >LDA.G CC.InFileArg + bne .5 + + lda ArgIndex + >STA.G CC.InFileArg + bra CS.RUN.ARGS + +.5 >LDA.G CC.OutFileArg bne .90 - >LDYA ZPPtr1 - jsr CS.RUN.FOpen - bcc CS.RUN.ARGS + lda ArgIndex + >STA.G CC.OutFileArg + bra CS.RUN.ARGS - rts +.8 >LDA.G CC.InFileArg + beq .90 -.7 >LDA.G hFilePtr - cmp #hFilePtr + >LDA.G CC.OutFileArg beq .90 clc @@ -322,7 +371,22 @@ CS.RUN.ARGS inc ArgIndex sec rts *-------------------------------------- -CS.RUN.FOpen >PUSHYA +CS.RUN.FOpen1st >LDA.G CC.InFileArg + >SYSCALL ArgV + +CS.RUN.FOpen phy + pha + + >PUSHW L.MSG.COMPILING + pla + pha + >PUSHYA + >PUSHBI 2 + >SYSCALL PrintF + + pla + ply + >PUSHYA >PUSHBI O.RDONLY >PUSHBI S.FI.T.TXT >PUSHWZ Aux type @@ -406,10 +470,36 @@ CS.RUN.FClose >LDA.G hFilePtr .8 rts *-------------------------------------- +CS.RUN.FCreate >LDA.G CC.OutFileArg + >SYSCALL ArgV + >STYA ZPPtr1 + + >PUSHW L.MSG.GENERATING + >PUSHW ZPPtr1 + >PUSHBI 2 + >SYSCALL PrintF + + >PUSHW ZPPtr1 + >PUSHBI O.WRONLY+O.CREATE + >PUSHBI S.FI.T.BIN + >PUSHWI $2000 Aux type + >SYSCALL FOpen + bcs .9 + + >STA.G CC.hOutFile + + >PUSHA A = CC.hOutFile + >PUSHW L.PCC.FH + >PUSHWI PCC.FH.L + >SYSCALL FWrite + +.9 rts +*-------------------------------------- CS.DOEVENT sec rts *-------------------------------------- -CS.QUIT jsr CC.Quit +CS.QUIT jsr CODE.Quit + jsr CC.Quit >LDA.G hLineBuf beq .8 @@ -458,7 +548,7 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG >PUSHB LocalPtr >PUSHW ZPCCStack - + >PUSHB CStackPtr tay beq .1 @@ -471,44 +561,17 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG .1 >PUSHYA - >PUSHBI 14 + lda ScopePtr + sec + sbc #CC.hSymbols + >PUSHA + + >PUSHBI 15 >SYSCALL PrintF - >DEBUGOA + >DEBUG 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 - pha - lda pStack+1 - adc #0 - >PUSHA - pla - >PUSHA - - >PUSHBI 8 - >SYSCALL PrintF - - ply - plx - pla - rts -*-------------------------------------- -PrintErrorMsg lda hDefineBuf +PrintErrorMsg >LDA.G CC.hDefineBuf beq .10 >LDYA.G CC.SaveDefine @@ -551,6 +614,78 @@ PrintErrorMsg lda hDefineBuf >PUSHBI 2 >SYSCALL FPrintF rts +*-------------------------------------- +PrintSummary lda ZPCCCode+1 + sta PCC.FH+PCC.FH.IDATA+1 + sec + sbc #$20 + sta PCC.FH+PCC.FH.CSSIZE+1 + + lda ZPCCCode + sta PCC.FH+PCC.FH.CSSIZE + sta PCC.FH+PCC.FH.IDATA + + >PUSHW L.MSG.SUMMARY + + >PUSHW PCC.FH+PCC.FH.CSSIZE + + >PUSHW ZPCCConst + + lda ZPCCData+1 + >PUSHA + sta PCC.FH+PCC.FH.DSSIZE+1 + lda ZPCCData + >PUSHA + sta PCC.FH+PCC.FH.DSSIZE + + >PUSHBI 6 + >SYSCALL PrintF + rts +*-------------------------------------- +CheckMain >PUSHB.G CC.hSymbols + + >PUSHW L.CC.MAIN + >SYSCALL SListLookup + bcs .9 + + >STYA ZPPtr1 SymID + + >PUSHB.G CC.hSymbols + + >PUSHW ZPPtr1 SymID + >PUSHWZ allocate + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData +.9 bcs .99 + + >STYA ZPPtr2 + + ldy #SYM.Addr + lda (ZPPtr2),y + iny + ora (ZPPtr2),y + beq .90 + + lda (ZPPtr2),y + sta PCC.FH+PCC.FH.MAIN+1 + dey + lda (ZPPtr2),y + sta PCC.FH+PCC.FH.MAIN + + txa + >SYSCALL FreeMem + + rts + +.90 txa + >SYSCALL FreeMem + +.99 >LDYA L.MSG.NOMAIN + >SYSCALL puts + lda #E.CSYN + sec + rts *-------------------------------------- .INB usr/src/bin/cc.s.code .INB usr/src/bin/cc.s.core @@ -562,65 +697,72 @@ PrintErrorMsg lda hDefineBuf .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.link .INB usr/src/bin/cc.s.exec *-------------------------------------- -PCC.DEBUG - jsr PrintRTStackTrace - >DEBUG +CS.END +*-------------------------------------- +* Initialized DATA +*-------------------------------------- +MSG.GREETINGS .AZ "\r\nA2osX C Compiler %d.%d\r\n\r\n" +MSG.USAGE .AS "Usage : CC