diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 272ca6b3..4bce420c 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 94637169..8ba6098a 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 8eadcff7..b44ae936 100644 Binary files a/.Floppies/ProDOSFX.BOOT.po and b/.Floppies/ProDOSFX.BOOT.po differ diff --git a/BASIC.FX/BASIC.S.XF.txt b/BASIC.FX/BASIC.S.XF.txt index ac0b9766..1ff1506a 100644 --- a/BASIC.FX/BASIC.S.XF.txt +++ b/BASIC.FX/BASIC.S.XF.txt @@ -22,19 +22,19 @@ BSX.Recalibrate ldy BSX.Slotn0 lda #IO.D2.SeekTimeR jsr BSX.Wait100usecA - lda #168 + lda #160 + + php + sei .1 dec dec pha - and #6 - ora BSX.Slotn0 phy plx - tay - lda IO.D2.Ph0On,y + jsr BSX.SeekPhOnY lda #IO.D2.SeekTimeR jsr BSX.Wait100usecA @@ -51,6 +51,8 @@ BSX.Recalibrate ldy BSX.Slotn0 lda IO.D2.Ph0Off,y + plp + jmp BSX.Wait25600usec *-------------------------------------- BSX.MoveHead sta BSX.TargetQTrack @@ -80,7 +82,7 @@ BSX.MoveHead sta BSX.TargetQTrack .2 jsr BSX.SeekPhOnY move out: Y = Ph(N) - bra .9 no wait + bra .9 Ph ON to go to 0/4 or 2/4, no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -119,13 +121,15 @@ BSX.MoveHead sta BSX.TargetQTrack jsr BSX.Wait25600usec + lda IO.D2.Ph0Off,y + bcc .10 - lda IO.D2.Ph0Off,x + clc -.10 lda IO.D2.Ph0Off,y + lda IO.D2.Ph0Off,x - rts +.10 rts *-------------------------------------- BSX.SeekPhOnY and #6 ora BSX.Slotn0 @@ -139,7 +143,7 @@ BSX.Wait25600usec BSX.Wait100usecA phx -.1 ldx #20 (2) +.1 ldx #19 (2) .2 dex (2) bne .2 (3) diff --git a/BIN/CC.S.CODE.txt b/BIN/CC.S.CODE.txt index 8fb6b1f9..0a71d8fb 100644 --- a/BIN/CC.S.CODE.txt +++ b/BIN/CC.S.CODE.txt @@ -3,283 +3,127 @@ NEW *-------------------------------------- CODE.Init stz ZPCCConst stz ZPCCConst+1 - + + stz bInitCode + >LDYAI PCC.FH.CS >STYA ZPCCCode - + >LDYAI 20 char *ARGV[10] >STYA ZPCCData - + + lda #'_' + >STA.G CC.CPSPFX+1 + + lda #'A' + >STA.G CC.CPSID + + iny CC.CPSID+1 + sta (pData),y + clc .9 rts *-------------------------------------- CODE.Quit >LDA.G CC.hOutFile beq .8 - + >SYSCALL FClose .8 clc rts *-------------------------------------- -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 +CODE.AddLocal jsr CODE.LDAI + bcs .9 -.1 lda PCC.ADDLOCAL,y - jsr CODE.EmitByte - iny - dex - bne .1 + >LDYA L.PCC.ADDLOCAL + jmp CODE.EmitPCC - 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 +.9 rts *-------------------------------------- CODE.SetRetValue jsr CODE.LDXI + bcs .9 - ldx #PCC.SETRETVALUE.L - ldy #0 + >LDYA L.PCC.SetRetValue + jmp CODE.EmitPCC -.1 lda PCC.SETRETVALUE,y - jsr CODE.EmitByte - iny - dex - bne .1 - - rts +.9 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 - dex - bne .1 - - rts -*-------------------------------------- -CODE.PopXToYA ldx #PCC.PopXToYA.L - ldy #0 - -.1 lda PCC.PopXToYA,y - jsr CODE.EmitByte - iny - dex - bne .1 - - 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 +CODE.PUSHAXI pha + txa + jsr CODE.PUSHI + bcs CODE.LDAXI.RTS + 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.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 + bcs CODE.LDAXI.RTS + pla jsr CODE.EmitByte + bcs CODE.LDAXI.RTS + bra CODE.PUSHA *-------------------------------------- CODE.LDYAI pha lda #$A0 LDY #imm jsr CODE.EmitByte + bcs CODE.LDAXI.RTS + tya jsr CODE.EmitByte - + bcs CODE.LDAXI.RTS + lda #$A9 LDA #imm jsr CODE.EmitByte - + bcs CODE.LDAXI.RTS + pla jmp CODE.EmitByte *-------------------------------------- +CODE.LDAXI jsr CODE.LDAI + bcc CODE.LDXI + +CODE.LDAXI.RTS rts +*-------------------------------------- +CODE.LDYI lda #$A0 LDY #imm + jsr CODE.EmitByte + bcs .9 + + tya + jmp CODE.EmitByte + +.9 rts +*-------------------------------------- CODE.LDXI lda #$A2 LDX #imm jsr CODE.EmitByte + bcs .9 + txa jmp CODE.EmitByte + +.9 rts *-------------------------------------- CODE.LDAI pha lda #$A9 LDA #imm jsr CODE.EmitByte + bcs .9 + pla jmp CODE.EmitByte + +.9 plx + rts *-------------------------------------- CODE.PUSHYA jsr CODE.PUSHA - lda #$AA TYA + lda #$98 TYA jsr CODE.EmitByte *-------------------------------------- CODE.PUSHA lda #$C6 DEC zp @@ -315,27 +159,57 @@ 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 +CODE.SYSCALL jsr CODE.LDXI + bcs .9 + lda #$20 JSR jsr CODE.EmitByte + bcs .9 + lda #A2osX.SYSCALL jsr CODE.EmitByte + bcs .9 + lda /A2osX.SYSCALL bra CODE.EmitByte + +.9 rts *-------------------------------------- -CODE.FPUCALL lda #$A2 LDX #imm - jsr CODE.EmitByte - txa - jsr CODE.EmitByte +CODE.FPUCALL jsr CODE.LDXI + bcs .9 + lda #$20 JSR jsr CODE.EmitByte + bcs .9 + lda #A2osX.FPUCALL jsr CODE.EmitByte + bcs .9 + lda /A2osX.FPUCALL bra CODE.EmitByte + +.9 rts +*-------------------------------------- +CODE.DEBUG >LDYA L.PCC.DEBUG +*-------------------------------------- +CODE.EmitPCC >STYA ZPLookupPtr + + lda (ZPLookupPtr) + tax + dex + + ldy #1 + +.1 lda (ZPLookupPtr),y + jsr CODE.EmitByte + bcs .9 + + iny + dex + bne .1 + +.9 rts *-------------------------------------- CODE.EmitByte clc if Pass 1... bit bPass2 @@ -344,12 +218,12 @@ CODE.EmitByte clc if Pass 1... phx phy tax - + >PUSHB.G CC.hOutFile txa >PUSHA >SYSCALL fputc - + ply plx @@ -367,7 +241,7 @@ CODE.EmitDATA clc phx phy tax - + >PUSHB.G CC.hOutFile txa >PUSHA @@ -385,9 +259,9 @@ CODE.EmitDATA clc CODE.CSSelect clc bit bPass2 bpl .8 - + >PUSHB.G CC.hOutFile - >PUSHWI 0 + >PUSHWZ lda ZPCCCode+1 sec sbc #$20 @@ -404,8 +278,7 @@ CODE.DSSelect clc bpl .8 >PUSHB.G CC.hOutFile - >PUSHWI 0 - + >PUSHWZ lda ZPCCConst clc adc PCC.FH+PCC.FH.IDATA diff --git a/BIN/CC.S.CORE.txt b/BIN/CC.S.CORE.txt index e7c5871b..72f1b44b 100644 --- a/BIN/CC.S.CORE.txt +++ b/BIN/CC.S.CORE.txt @@ -40,7 +40,7 @@ CC.CORE.Init >SYSCALL SListNew * clc .9 rts *-------------------------------------- -CC.CORE.Quit jsr CS.RUN.FClose +CC.CORE.Quit jsr CC.FIO.FClose bne CC.CORE.Quit ldy ScopeIdx @@ -78,9 +78,11 @@ CC.CORE.Quit jsr CS.RUN.FClose >LDA.G CC.hStack -.7 beq CC.Quit.RTS +.7 beq .8 + >SYSCALL FreeMem -CC.Quit.RTS rts + +.8 rts *-------------------------------------- CC.CompileFile >SLEEP @@ -98,7 +100,7 @@ CC.CompileFile >SLEEP cmp #3 Ctrl-C beq .9 -.1 jsr CS.RUN.FGetS +.1 jsr CC.FIO.FGetS bcs .9 jsr CC.CompileLine @@ -114,176 +116,143 @@ CC.CompileFile >SLEEP .9 rts *-------------------------------------- CC.CompileLine jsr CC.GetCharNB - bcs CC.Quit.RTS + bcs .9 -CC.CompileLine.1 - cmp #C.CR empty line.... - beq .2 + cmp #C.CR EOL.... + beq .8 - cmp #'/' - bne .3 comments ... - - jmp CC.Comments - -.2 clc - rts - -.3 cmp #'#' directive ? - bne .4 + cmp #'#' directive ? + bne .1 jmp CC.DIR -.4 cmp #'}' End of CPStmt ? - bne .10 +.1 cmp #'/' + bne .2 comments ... + + jmp CC.Comments + +.2 cmp #'}' End of CPStmt ? + bne .3 jsr CC.GetNextCharNB Skip '}' - jmp CC.STMT.CPStmt.END -*-------------------------------------- -.10 jsr CC.IsLetter - bcc .20 + jsr CC.STMT.CPStmt.END + bcs .9 -* TODO: PREOPS ++ --..... + bra CC.CompileLine - bcs .29 +.3 cmp #';' End of Stmt ? + bne .4 + + jsr CC.GetNextCharNB Skip ';' + + jsr CC.STMT.Stmt.END + bcs .9 + + bra CC.CompileLine + +.4 jsr CC.CompileStmt + bcs .9 + + bra CC.CompileLine + +.8 clc +.9 rts *-------------------------------------- -.20 >LDYA L.CC.TYPEQUAL +* keyword : for, while .... +*-------------------------------------- +CC.CompileStmt >LDYA L.CC.KW jsr CC.LookupID - bcs .50 + bcs .10 not an internal CC keyword.... - jsr CC.TYPE.Decl - bcs .59 - - ldx #SYM.SC.STATIC Y,A = Type/Qual - bit bLocalScope - bpl .25 - - 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 - - jsr CC.GetCharNB - bcs .69 - - cmp #';' - beq .28 - - cmp #'{' - bne .26 - - jsr CC.GetNextCharNB skip '{' - bcs .69 - - jmp CC.SYM.StoreF + txa + >STA.G CC.CmdSave + jmp (J.CC.KW,x) *-------------------------------------- - -* TODO: AOPS - +* Declaration : int var or int func() *-------------------------------------- -.26 cmp #'=' - sec - bne .69 -*-------------------------------------- - jsr CC.GetNextCharNB skip '=' - bcs .69 - - jsr CC.SYM.GetTypeInYA expected T/Q - jsr CC.EXP.Eval - bcs .59 - - jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var -.29 bcs .9 - -.28 jsr CC.SYM.Store - bcs .9 - - - - 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 +.10 >LDYA L.CC.TYPEQUAL jsr CC.LookupID - bcs .6 not an internal CC keyword.... + bcs .6 - jsr CC.KW.JMP -.59 bcs .9 - - bra .8 + jmp CC.DECL *-------------------------------------- -.6 jsr CC.SYM.Lookup var= or func() ? -.69 bcs .99 - - ldy #SYM.Q - lda (ZPLookupSymPtr),y - bit #SYM.Q.FUNC - beq .60 - - ldy #0 func( ... ); - lda #0 - jsr CC.F.CallNoRetV - bcs .9 - - jsr CC.SYM.LookupFree - - bra .8 +* Statement : ++var, var=, func(); *-------------------------------------- -.60 jsr CC.GetCharNB var = ? - bcs .99 - - cmp #'=' TODO: all AOPS - bne .99 - - jsr CC.GetNextChar Skip = - bcs .99 - - jsr CC.SYM.GetTypeInYA - jsr CC.EXP.Eval - bcs .9 - - jsr CC.SYM.PopValue - bcs .9 - - jsr CC.SYM.LookupFree +.6 jmp CC.STMT *-------------------------------------- -.68 jsr CC.GetCharNB - cmp #';' - beq .8 - .99 lda #E.CSYN sec .9 rts *-------------------------------------- -.8 jsr CC.GetNextCharNB Skip ; - bcs .9 +CC.CORE.SetVar stz ExpState - cmp #C.CR - beq .80 + jsr CC.EXP.POSTOPS var++, var[0]... ? + bcs .99 - jmp CC.CompileLine.1 + ldx StmtPreOp + jsr CC.EXP.PREOPS apply ++var, .... + bcs .99 + + jsr CC.GetCharNB + bcs .90 + + jsr CC.IsEndArg var++; or ++var; ? + bcc .8 + + jsr CC.LookupAOP var=, var+= ... ? + bcs .90 + + cpx #0 TOTO : all AOPS + bne * + + lda ExpState + bmi .90 VonStack + + asl + + bmi .7 AinPTR + + asl + bmi .6 AonStack + + jsr CC.EXP.GetAddr1 + bcc .7 -.80 clc rts -*-------------------------------------- -CC.Comments jsr CC.GetNextChar + +.6 >LDYA L.PCC.PopAddr1 + jsr CODE.EmitPCC + bcs .99 + +.7 ldy #SYM.Q + lda (ZPLookupSymPtr),y + pha + lda (ZPLookupSymPtr) + tay + pla get expected T/Q + + jsr CC.EXP.Eval + bcs .99 + + jsr CC.EXP.GetSymSizeOfInAXC + tay + dey + jsr CODE.LDYI + bcs .99 + + >LDYA L.PCC.SetValue + jmp CODE.EmitPCC + +.8 clc + rts + +.90 lda #E.CSYN + sec + +.99 rts +**-------------------------------------- +CC.Comments jsr CC.GetNextChar TODO : /* ... */ cmp #'/' bne .90 @@ -304,10 +273,32 @@ CC.SkipLine jsr CC.GetNextChar .9 rts *-------------------------------------- CC.LookupID >STYA ZPLookupPtr - jsr CC.GetIDLen bra CC.Lookup +CC.LookupAOP >LDYA L.CC.AOPS + >STYA ZPLookupPtr + + ldy #$ff + +.1 iny + lda (ZPLineBufPtr),y + sec + beq .9 + + jsr CC.IsOPChar + bcs .9 + + cmp #'=' + bne .1 + + iny + +.8 tya + bra CC.Lookup + +.9 rts + CC.LookupOP >STYA ZPLookupPtr jsr CC.GetOPLen @@ -342,7 +333,7 @@ CC.Lookup phy Y = len lda ZPLookupPtr+1 adc #0 clc Y,A = F() def, X = F() index -.8 rts + rts .4 inx inx @@ -350,32 +341,11 @@ CC.Lookup phy Y = len jsr CC.ZPLookupPtrAddAp1 bra .1 -.9 pla +.9 ldx #$FF + pla sec rts *-------------------------------------- -CC.SListLookup >PUSHA hSList - >PUSHA ...for SListGetData - >PUSHW ZPLineBufPtr - >SYSCALL SListLookup - bcs .99 - - >PUSHA KeyID.HI - tya - >PUSHA KeyID.LO - - jsr CC.SkipX - - >PUSHWZ allocate - >PUSHWI 65535 all - >PUSHWZ From Start - >SYSCALL SListGetData - -.9 rts Y,A = SymSize, X = hSymBuf - -.99 inc pStack discard extra hSList - rts -*-------------------------------------- CC.ZPLookupPtrAddAp1 sec adc ZPLookupPtr @@ -400,6 +370,28 @@ CC.GetDefine >LDA.G CC.hDefines .9 rts *-------------------------------------- +CC.SListLookup >PUSHA hSList + >PUSHA ...for SListGetData + >PUSHW ZPLineBufPtr + >SYSCALL SListLookup + bcs .99 + + >PUSHA KeyID.HI + tya + >PUSHA KeyID.LO + + jsr CC.SkipX + + >PUSHWZ allocate + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + +.9 rts Y,A = SymSize, X = hSymBuf + +.99 inc pStack discard extra hSList + rts +*-------------------------------------- * CT Stack *-------------------------------------- CC.PushTQ ldy #SYM.Q @@ -455,13 +447,19 @@ CC.PopYA ldy CStackPtr sec rts *-------------------------------------- -CC.Pop ldy CStackPtr +CC.Pop jsr CC.Get + + inc CStackPtr + +* clc + +.9 rts +*-------------------------------------- +CC.Get ldy CStackPtr beq .9 lda (ZPCCStack),y - inc CStackPtr - clc rts @@ -521,6 +519,32 @@ CC.GetNextCharNB CC.GetNextCharNB.RTS rts *-------------------------------------- +CC.GetCharNBNL jsr CC.GetChar + bcs CC.GetNextCharNB.RTS + + jsr CC.CheckCharNB + bcs CC.GetNextCharNBNL + + cmp #C.CR + clc + bne CC.GetNextCharNB.RTS + + jsr CC.FIO.FGetS + bcs CC.GetNextCharNB.RTS +*-------------------------------------- +CC.GetNextCharNBNL + jsr CC.GetNextCharNB + bcs CC.GetNextCharNB.RTS + + cmp #C.CR + clc + bne .9 + + jsr CC.FIO.FGetS + bcc CC.GetNextCharNBNL + +.9 rts +*-------------------------------------- CC.CheckSpace jsr CC.GetChar bcs .90 @@ -578,10 +602,10 @@ CC.GetChar lda (ZPLineBufPtr) CC.IsEndArg cmp #']' beq .8 - cmp #';' + cmp #',' beq .8 - cmp #',' + cmp #';' beq .8 cmp #')' diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index 8629d30e..9a407789 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -1,68 +1,69 @@ NEW AUTO 3,1 *-------------------------------------- -CC.DECL jsr CC.IsLetter - bcs .80 - -.10 >LDYA L.CC.SCSPEC - jsr CC.LookupID - bcs .20 - -* TODO: typedef .... - - bcs .90 - -.20 >LDYA L.CC.TYPEQUAL - jsr CC.LookupID - bcs .80 - - jsr CC.TYPE.Decl - bcs .99 +* X = type qual +*-------------------------------------- +CC.DECL jsr CC.TYPE.Decl + bcs .9 ldx #SYM.SC.STATIC Y,A = Type/Qual bit bLocalScope - bpl .21 + bpl .25 bit #SYM.Q.FUNC someone wants to add a local f() ? - bne .90 + sec + bne .29 ldx #SYM.SC.AUTO -.21 jsr CC.SYM.New Y,A=T/Q, add with undef value... +.25 jsr CC.SYM.New Y,A=T/Q, add with undef value... + bcs .29 OOM or DUP + +.22 jsr CC.GetCharNB bcs .99 - jsr CC.SYM.Store - bcs .99 + cmp #';' + beq .28 -* TODO: AOPS + cmp #'{' + bne .26 + + jsr CC.GetNextCharNB skip '{' + bcs .99 + + jmp CC.SYM.StoreF +*-------------------------------------- +* Initializer +*-------------------------------------- +.26 cmp #'=' type var = value ? + bne .99 - cmp #'=' - bne .90 - jsr CC.GetNextCharNB skip '=' - bcs .99 - + bcs .99 + jsr CC.SYM.GetTypeInYA expected T/Q jsr CC.EXP.Eval - bcs .99 + bcs .9 - jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var -.29 bcs .99 + jsr CC.SYM.GetAddr1 + bcs .9 + + jsr CC.SYM.SetValue Y,A = T/Q, Set value to this var +.29 bcs .9 +.28 jsr CC.SYM.Store + bcs .9 + + jsr CC.GetCharNB + cmp #';' + bne .99 - - - clv clc rts - -.80 bit #$60 - clc - rts - -.90 lda #E.CSYN +*-------------------------------------- +.99 lda #E.CSYN sec -.99 rts +.9 rts *-------------------------------------- CC.SCSPEC.AUTO CC.SCSPEC.REGISTER @@ -71,9 +72,9 @@ CC.SCSPEC.EXTERN CC.SCSPEC.TYPEDEF -.99 lda #E.CSYN +.98 lda #E.CSYN sec -.9 rts +.99 rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.decl diff --git a/BIN/CC.S.DIR.txt b/BIN/CC.S.DIR.txt index a10cc225..c1c5acd9 100644 --- a/BIN/CC.S.DIR.txt +++ b/BIN/CC.S.DIR.txt @@ -134,7 +134,7 @@ CC.DIR.INCLUDE lda #0 >STZ.G PathBuf rts .5 >LDYA pData - jmp CS.RUN.FOpen + jmp CC.FIO.FOpen *-------------------------------------- MAN SAVE usr/src/bin/cc.s.dir diff --git a/BIN/CC.S.EXP.txt b/BIN/CC.S.EXP.txt index 585abebd..e8a52361 100644 --- a/BIN/CC.S.EXP.txt +++ b/BIN/CC.S.EXP.txt @@ -10,7 +10,12 @@ NEW CC.EXP.Eval00 lda #0 tay -CC.EXP.Eval ldx ZPPtr2 local : expected T/Q +CC.EXP.Eval ldx ZPPtr1 local : returned T/Q + phx + ldx ZPPtr1+1 + phx + + ldx ZPPtr2 local : expected T/Q phx ldx ZPPtr2+1 phx @@ -22,7 +27,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q >STYA ZPPtr2 + stz ZPPtr1 + stz ZPPtr1+1 + lda #$ff no previous OP + sta ZPPtr3+1 no PREOPS pha *-------------------------------------- .10 jsr CC.GetCharNB @@ -60,7 +69,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q .19 jmp CC.EXP.Eval.ESYN *-------------------------------------- -.20 jsr CC.ExpPreops +.20 >LDYA L.CC.PREOPS + jsr CC.LookupOP + stx ZPPtr3+1 + + jsr CC.GetCharNB bcs .29 jsr CC.IsLetter define, f() or Var ? @@ -77,10 +90,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q and #SYM.Q.FUNC bne .21 - jsr CC.EXP.CheckGetSymType - bcs .29 - - jsr CC.EXP.Get Check T/Q & Get value on stack + jsr CC.EXP.GetVar Check T/Q & Get value on stack bcs .29 jsr CC.SYM.LookupFree @@ -116,7 +126,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q .24 cmp #'"' String literal bne CC.EXP.Eval.ESYN - jsr CC.AddContCharP + jsr CC.EXP.AddConstCharP .29 bcs CC.EXP.Eval.Err *-------------------------------------- .30 jsr CC.GetCharNB @@ -157,6 +167,7 @@ CC.EXP.Eval.End plx any OP on stack ? bmi CC.EXP.Eval.Exit >LDYA ZPPtr2 Var Type + jsr CC.EXP.BOPS bcc CC.EXP.Eval.End @@ -173,7 +184,13 @@ CC.EXP.Eval.Err bra CC.EXP.Eval.ExitErr *-------------------------------------- CC.EXP.Eval.Exit + lda ZPPtr1+1 + ldy ZPPtr1 + bne .1 + >LDYA ZPPtr2 Type/Qual + +.1 and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL clc CC.EXP.Eval.ExitErr @@ -187,43 +204,17 @@ CC.EXP.Eval.ExitErr plx stx ZPPtr2 - rts -*-------------------------------------- -CC.EXP.CheckGetSymType - lda ZPPtr2 - ora ZPPtr2+1 - bne .1 + plx + stx ZPPtr1+1 + plx + stx ZPPtr1 - lda (ZPLookupSymPtr) - sta ZPPtr2 - - ldy #SYM.Q - lda (ZPLookupSymPtr),y - sta ZPPtr2+1 - - clc - rts - -.1 lda ZPPtr2 - cmp (ZPLookupSymPtr) #SYM.T - bne .9 - - lda ZPPtr2+1 - ldy #SYM.Q - cmp (ZPLookupSymPtr),y - bne .9 - - clc - rts - -.9 lda #E.TMISMATCH - sec rts *-------------------------------------- CC.EXP.Cast jsr CC.TYPE.Decl bcs .99 - >STYA ZPPtr2 + >STYA ZPPtr1 jsr CC.GetCharNB bcs .9 @@ -240,20 +231,15 @@ CC.EXP.Cast jsr CC.TYPE.Decl 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.EXP.BOPS cpy #SYM.T.UINT +CC.EXP.BOPS bit #SYM.Q.PPPOINTER + beq .10 + + ldy #SYM.T.UINT + bra .3 + +.10 cpy #SYM.T.UINT bcs .3 cpy #SYM.T.UCHAR @@ -261,26 +247,16 @@ CC.EXP.BOPS cpy #SYM.T.UINT cpy #SYM.T.SCHAR beq .2 - + lda #E.TMISMATCH sec rts -.1 lda J.CC.bBOPS,x - ldy J.CC.bBOPS+1,x - tax - lda #$20 JSR - jsr CODE.TOABSYX - clc - rts +.1 >LDYA L.PCC.bBOPS,x + jmp CODE.EmitPCC -.2 lda J.CC.cBOPS,x - ldy J.CC.cBOPS+1,x - tax - lda #$20 JSR - jsr CODE.TOABSYX - clc - rts +.2 >LDYA L.PCC.bBOPS,x + jmp CODE.EmitPCC .3 txa clc @@ -291,9 +267,17 @@ CC.EXP.BOPS cpy #SYM.T.UINT clc rts *-------------------------------------- -CC.AddContCharP jsr CODE.PushConstP +CC.EXP.AddConstCharP + lda ZPCCConst + ldx ZPCCConst+1 + + jsr CODE.LDAXI bcs .99 - + + >LDYA L.PCC.PushIAddr + jsr CODE.EmitPCC + bcs .99 + jsr CODE.DSSelect bcs .99 @@ -312,14 +296,14 @@ CC.AddContCharP jsr CODE.PushConstP jsr CODE.EmitData bcs .99 - + iny bra .1 .2 lda #0 jsr CODE.EmitData bcs .99 - + jsr CODE.CSSelect bcs .99 @@ -332,6 +316,21 @@ CC.AddContCharP jsr CODE.PushConstP sec .99 rts *-------------------------------------- +CC.EXP.IntConst >PUSHW ZPLineBufPtr + >PUSHWI ZPLineBufPtr + >PUSHBI 10 + >SYSCALL StrToUL + + >PULLA + tay + + >PULLA + + inc pStack + inc pStack + + rts +*-------------------------------------- CC.EXP.GetNum cpy #SYM.T.FLOAT bcc .1 @@ -394,35 +393,43 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT * ZPPtr2 = expected T/Q * ZPPtr3+1 = PREOPS *-------------------------------------- -CC.EXP.Get >LDYA L.CC.AOPS - jsr CC.LookupOP - bcs .20 +CC.EXP.GetVar stz ExpState - >LDYA ZPPtr2 get expected T/Q - jsr CC.EXP.Eval + jsr CC.EXP.POSTOPS var++, var[0]... ? bcs .99 - jsr CC.SYM.SetValue + ldx ZPPtr3+1 preop &, * ... + jsr CC.EXP.PREOPS bcs .99 - clc - rts -*-------------------------------------- -.20 >LDYA L.CC.POSTOPS - jsr CC.LookupOP - bcs .1 + lda ExpState + bmi .8 VonStack - cpx #4 '[' - bne * + asl - jmp CC.EXP.Array -*-------------------------------------- -.1 ldx ZPPtr3+1 preop - bpl .8 + bmi .7 AinPTR - lda ZPPtr2 target T + asl + bmi .6 AonStack + + jsr CC.EXP.GetAddr2 + bcs .99 + + bra .7 + +.6 >LDYA L.PCC.PopAddr2 + jsr CODE.EmitPCC + bcs .99 + +.7 jsr CC.EXP.PushValue + bcs .99 + +.8 lda ZPPtr2 target T beq .3 + cmp #SYM.T.VOID + beq .2 + lda (ZPLookupSymPtr) SYM.T cmp #SYM.T.VOID beq .2 @@ -435,190 +442,503 @@ CC.EXP.Get >LDYA L.CC.AOPS ldy #SYM.Q cmp (ZPLookupSymPtr),y bne .9 + + clc + rts .3 lda (ZPLookupSymPtr) SYM.T sta ZPPtr2 T - pha + ldy #SYM.Q lda (ZPLookupSymPtr),y sta ZPPtr2+1 Q - ply Y,A = T/Q - - jsr CC.SYM.PushValue clc -.99 rts + rts .9 lda #E.TMISMATCH sec - rts - -.8 jmp (J.CC.PREOPS,x) +.99 rts *-------------------------------------- -CC.EXP.Array ldy #SYM.Q +* POSTOPS +*-------------------------------------- +CC.EXP.POSTOPS >LDYA L.CC.POSTOPS + jsr CC.LookupOP + bcs .8 + + jmp (J.CC.POSTOPS,x) + +.8 clc + rts +*-------------------------------------- +CC.EXP.postinc lda ExpState + bit #ExpState.AinPTR + bne .1 + + jsr CC.EXP.GetAddr2 + bcs .99 + + lda #ExpState.AinPTR + tsb ExpState + +.1 ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER + bne .8 + + lda (ZPLookupSymPtr) #SYM.T + cmp #SYM.T.FLOAT + bcs .98 + + tay + + lda CC.TYPESIZE-1,y + lsr + bcc .2 + + >LDYA L.PCC.Inc1 + jmp CODE.EmitPCC + +.2 lsr + bcc .4 + + >LDYA L.PCC.Inc2 + jmp CODE.EmitPCC + +.4 >LDYA L.PCC.Inc4 + jmp CODE.EmitPCC + + +.8 + +.98 lda #E.ESYN + sec +.99 rts +*-------------------------------------- +CC.EXP.postdec lda ExpState + bit #ExpState.AinPTR + bne .1 + + jsr CC.EXP.GetAddr2 + bcs .99 + + lda #ExpState.AinPTR + tsb ExpState + +.1 ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER + bne .8 + + lda (ZPLookupSymPtr) #SYM.T + cmp #SYM.T.FLOAT + bcs .98 + + tay + + lda CC.TYPESIZE-1,y + lsr + bcc .2 + + >LDYA L.PCC.Dec1 + jmp CODE.EmitPCC + +.2 lsr + bcc .4 + + >LDYA L.PCC.Dec2 + jmp CODE.EmitPCC + +.4 >LDYA L.PCC.Dec4 + jmp CODE.EmitPCC + + +.8 + +.98 lda #E.ESYN + sec +.99 rts +*-------------------------------------- +CC.EXP.array ldy #SYM.Q lda (ZPLookupSymPtr),y and #SYM.Q.AAARRAY - beq .9 + beq .39 - jsr CC.EXP.PushDeref push base address + ldy #SYM.Def + lda (ZPLookupSymPtr),y + iny + ora (ZPLookupSymPtr),y + beq .1 + jsr CC.EXP.PushAddr array[int]... + bcc .2 + + rts + +.1 jsr CC.EXP.GetAddr2 array[]...it is a * + bcs .9 + + >LDYA L.PCC.PushDeref2 + jsr CODE.EmitPCC + bcs .9 + +.2 jsr CC.EXP.array.getIdx ...int16 on stack... + bcs .9 + + jsr CC.EXP.GetSymSizeOfInAXC + jsr CODE.PUSHAXI ...sizeof on stack... + bcs .9 + + ldx #FPU.iMUL + jsr CODE.FPUCALL ...sizeof*int16... + bcs .9 + + ldx #FPU.iAdd + jsr CODE.FPUCALL ...add to base address + bcs .9 + +.3 jsr CC.GetNextCharNB skip ']' + bcs .98 + + cmp #'[' + bne .8 + + jsr CC.GetNextCharNB skip '[' + bcs .98 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.AAARRAY +.39 beq .99 + + jsr CC.EXP.array.getIdx ...int16 on stack... + bcs .9 + + ldy #SYM.Def+3 + lda (ZPLookupSymPtr),y + tax + dey + lda (ZPLookupSymPtr),y + jsr CODE.PUSHAXI [][SIZE] on stack + + ldx #FPU.iMUL + jsr CODE.FPUCALL [][SIZE] * int16 on stack + + jsr CC.EXP.GetSymSizeOfInAXC + jsr CODE.PUSHAXI ...sizeof on stack... + bcs .9 + + ldx #FPU.iMUL + jsr CODE.FPUCALL ...sizeof*int16... + + ldx #FPU.iAdd + jsr CODE.FPUCALL ...add to base address + bcs .9 + + jsr CC.GetNextCharNB skip ']' + bcs .98 + + +* TODO : [][][] + +.8 lda #ExpState.AonStack + sta ExpState + + clc + rts + +.98 lda #E.ESYN + sec + rts + +.99 lda #E.TMISMATCH + sec +.9 rts +*-------------------------------------- +CC.EXP.array.getIdx ldy #SYM.T.SINT lda #0 jsr CC.EXP.Eval - bcs .99 int16 on stack + bcs .9 jsr CC.GetCharNB - bcs .9 + bcs .98 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 (ZPLookupSymPtr) SYM.T - pha + bne .98 ldy #SYM.Q lda (ZPLookupSymPtr),y sec sbc #SYM.Q.ARRAY - ply - - jsr CC.SYM.GetYASizeOfInAXC - jsr CODE.PushFromPtr A = byte count - + sta (ZPLookupSymPtr),y + clc rts -.9 lda #E.ESYN +.98 lda #E.ESYN sec -.99 rts -*-------------------------------------- -CC.EXP.PushAddr ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - bne .7 -* LOCAL - jsr CODE.PUSHpBASEp1 - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - eor #$FF - inc - jsr CODE.LDAI - jsr CODE.PUSHpBASEpA - - clc - rts -* DATASEG -.7 jsr CODE.PUSHI - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - jsr CODE.PUSHI - - clc - rts -*-------------------------------------- -CC.EXP.PushDeref - ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - bne .7 -* LOCAL - jsr CODE.SETpBASEp1 - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - eor #$FF - inc - jsr CODE.LDAI - jsr CODE.SETpBASEpA - - jsr CODE.Deref - - clc - rts -* DATASEG -.7 jsr CODE.LDAI - - lda #$85 STA zp - jsr CODE.EmitByte - lda #ZS.RT.Ptr1+1 - jsr CODE.EmitByte - - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - jsr CODE.LDAI - - lda #$85 STA zp - jsr CODE.EmitByte - lda #ZS.RT.Ptr1+1 - jsr CODE.EmitByte - - jsr CODE.Deref - - clc .9 rts *-------------------------------------- -CC.EXP.GetRef ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - jsr CODE.PUSHI +CC.EXP.Struct +*-------------------------------------- +CC.EXP.pStruct lda #E.ESYN + sec + rts +*-------------------------------------- +* PREOPS +*-------------------------------------- +CC.EXP.PREOPS bmi .8 - ldy #SYM.Addr - lda (ZPLookupSymPtr),y - jsr CODE.PUSHI + jmp (J.CC.PREOPS,x) - lda (ZPLookupSymPtr) SYM.T - - sta ZPPtr2 T - - ldy #SYM.Q +.8 clc + rts +*-------------------------------------- +CC.EXP.Ref ldy #SYM.Q lda (ZPLookupSymPtr),y clc adc #SYM.Q.POINTER bcs .9 more than *** - sta ZPPtr2+1 Q + sta (ZPLookupSymPtr),y + + bit ExpState + bvs .8 + + jsr CC.EXP.PushAddr + bcs .99 + +.8 lda #ExpState.VonStack + sta ExpState + +* clc Addr on stack + rts + +.9 lda #E.TMISMATCH +* sec +.99 rts +*-------------------------------------- +CC.EXP.Deref ldy #SYM.Q + lda (ZPLookupSymPtr),y + bit #SYM.Q.PPPOINTER + beq .9 + + sec + sbc #SYM.Q.POINTER + sta (ZPLookupSymPtr),y + + jsr CC.EXP.GetAddr2 + bcs .99 + + >LDYA L.PCC.Deref2 + jsr CODE.EmitPCC + bcs .99 + + lda #ExpState.AinPTR + sta ExpState + * clc rts .9 lda #E.TMISMATCH sec - rts +.99 rts *-------------------------------------- -CC.EXP.GetDeref +CC.EXP.Abs + + clc + +.99 rts +*-------------------------------------- +CC.EXP.negate + + clc + +.99 rts +*-------------------------------------- +CC.EXP.lnot + + clc + +.99 rts +*-------------------------------------- +CC.EXP.bnot + + clc + +.99 rts +*-------------------------------------- +CC.EXP.preinc + + clc + +.99 rts +*-------------------------------------- +CC.EXP.predec + + clc + +.99 rts +*-------------------------------------- +CC.EXP.PushAddr ldy #SYM.SC + lda (ZPLookupSymPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + + >LDYA L.PCC.PushLAddrH + jsr CODE.EmitPCC + bcs .9 + + ldy #SYM.Addr + lda (ZPLookupSymPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.PushLAddrL + jmp CODE.EmitPCC + +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPLookupSymPtr),y + tax + + dey + lda (ZPLookupSymPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.PushIAddr + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.PushUAddr + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.EXP.GetAddr1 ldy #SYM.SC + lda (ZPLookupSymPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPLookupSymPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr1 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPLookupSymPtr),y + tax + + dey + lda (ZPLookupSymPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr1 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr1 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.EXP.GetAddr2 ldy #SYM.SC + lda (ZPLookupSymPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPLookupSymPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr2 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPLookupSymPtr),y + tax + + dey + lda (ZPLookupSymPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr2 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr2 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.EXP.PushValue + jsr CC.EXP.GetSymSizeOfInAXC + tay + dey + jsr CODE.LDYI + bcs .99 + + >LDYA L.PCC.PushValue + jmp CODE.EmitPCC + +.99 rts +*-------------------------------------- +* out : A,X,C = size +*-------------------------------------- +CC.EXP.GetSymSizeOfInAXC + ldy #SYM.Q + lda (ZPLookupSymPtr),y + pha + lda (ZPLookupSymPtr) SYM.T + tay + pla + +CC.EXP.GetYASizeOfInAXC + + bit #SYM.Q.PPPOINTER+SYM.Q.AAARRAY + bne .1 + + lda CC.TYPESIZE-1,y + ldx #0 clc rts -*-------------------------------------- -CC.EXP.IntConst >PUSHW ZPLineBufPtr - >PUSHWI ZPLineBufPtr - >PUSHBI 10 - >SYSCALL StrToUL - >PULLA - tay - - >PULLA - - inc pStack - inc pStack +.1 lda #2 pointer + ldx #0 + sec +1 for hMem Storage rts *-------------------------------------- MAN diff --git a/BIN/CC.S.F.txt b/BIN/CC.S.F.txt index ac1afcd6..f3519348 100644 --- a/BIN/CC.S.F.txt +++ b/BIN/CC.S.F.txt @@ -7,7 +7,7 @@ CC.F.Decl stz LocalPtr bcs .99 ldx #$80 CPStmt.fDef state - jsr CC.STMT.CPStmt + jsr CC.STMT.CPStmt.NEW bcs .99 jsr CC.SYM.NewScope @@ -24,7 +24,7 @@ CC.F.Decl stz LocalPtr >STYA ZPPtr2 Save T/Q - jsr CC.F.AddTQ + jsr CC.SYM.AddWord jsr CC.GetCharNB bcs .9 @@ -53,9 +53,9 @@ CC.F.Decl stz LocalPtr *-------------------------------------- .6 ldy #0 lda #0 - jsr CC.F.AddTQ + jsr CC.SYM.AddWord definition End - jsr CC.GetNextCharNB Skip ) + jsr CC.GetNextCharNBNL Skip ) bcs .9 cmp #';' @@ -65,8 +65,8 @@ CC.F.Decl stz LocalPtr lda CStackPtr clc - adc #6 - sta CStackPtr discard this CPStmt + adc #8 + sta CStackPtr discard this CPStmt + T/Q stz LocalPtr reset for DEBUG Message @@ -76,15 +76,25 @@ CC.F.Decl stz LocalPtr .7 cmp #'{' bne .9 - >LDYA ZPCCCode f() Code starts HERE + bit bInitCode + bmi .8 + + dec bInitCode + + lda #$60 RTS + jsr CODE.EmitByte Close INIT code + bcs .99 + + +.8 >LDYA ZPCCCode f() Code starts HERE jsr CC.SYM.SetAddrYA lda LocalPtr jsr CODE.LDAI A = f() ARGS size - jsr CODE.Enter + bcs .99 - clc Store f() Declaration / Start Definition - rts + >LDYA L.PCC.ENTER + jmp CODE.EmitPCC Store f() Declaration / Start Definition *-------------------------------------- CC.F.DeclGetTQ lda (ZPLineBufPtr) cmp #'.' @@ -130,7 +140,7 @@ CC.F.DeclGetTQ lda (ZPLineBufPtr) *-------------------------------------- CC.F.NewArg >LDYA.G CC.SymID >STYA.G CC.SymIDSave - + >LEA.G CC.ArgBuf >STYA ZPSymBufPtr @@ -145,49 +155,33 @@ CC.F.NewArg >LDYA.G CC.SymID >LDA.G CC.hSymBuf >SYSCALL GetMemPtr >STYA ZPSymBufPtr - + >LDYA.G CC.SymIDSave >STYA.G CC.SymID - + .9 rts *-------------------------------------- -CC.F.Def.END jsr CODE.Leave +CC.F.Def.END >LDYA L.PCC.LEAVE + jsr CODE.EmitPCC + bcs .9 jsr CC.Pop T jsr CC.Pop Q jsr CC.SYM.FreeScope - + stz LocalPtr back to global + clv pop context clc - rts -*-------------------------------------- -CC.F.AddTQ pha - phy - - ldy #SYM.DefSize - lda (ZPSymBufPtr),y - pha - - inc - inc - sta (ZPSymBufPtr),y - - ply - - pla - sta (ZPSymBufPtr),y - iny - pla - sta (ZPSymBufPtr),y - - rts +.9 rts *-------------------------------------- * in : ZPSymPtr * Y,A = Expected T/Q *-------------------------------------- -CC.F.CallNoRetV clc +CC.F.CallNoRetV ldy #0 no expected T/Q + tya + clc .HS B0 BCS CC.F.CallRetV sec @@ -204,44 +198,51 @@ CC.F.CallRetV sec >STYA ZPPtr2 ror ZPPtr1+1 bRetV - bpl .20 no return value on stack - - ldy #SYM.Addr+1 - lda (ZPLookupSymPtr),y - beq .20 SYS/LIB/FPU call, no ret value space - - jsr CC.SYM.GetSymSizeOfInAXC - jsr CODE.nAddLocal - -.20 stz ZPPtr1 Reset VARIADIC byte count +* bpl .20 no return value on stack - jsr CC.GetNextCharNB skip '(' +* ldy #SYM.Addr+1 +* lda (ZPLookupSymPtr),y +* beq .20 SYS/LIB/FPU call, no ret value space + + jsr CC.EXP.GetSymSizeOfInAXC + jsr CODE.nAddLocal + +.20 jsr CC.GetNextCharNB skip '(' bcs .10 - jsr CC.SYM.GetTypeInYA Y,A = f() Return value T/Q + ldy #SYM.Q +* >DEBUG + lda ZPPtr2 expected T + bne .1 - ldx ZPPtr2 expected T - beq .1 no check required - - cpy ZPPtr2 - bne .24 - - tax save full Q + lda (ZPLookupSymPtr) no check required + sta ZPPtr2 + lda (ZPLookupSymPtr),y and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL - cmp ZPPtr2+1 -.24 bne .91 + bra .2 - txa +.1 cmp #SYM.T.VOID + beq .11 -.1 >STYA ZPPtr2 save full T/Q for later + cmp (ZPLookupSymPtr) + bne .91 + +.11 lda (ZPLookupSymPtr),y + and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL + cmp ZPPtr2+1 expected Q + bne .91 +*-------------------------------------- +.2 sta ZPPtr2+1 + + stz ZPPtr1 Reset VARIADIC byte count lda #SYM.Def >STA.G CC.LookupSymPtr jsr CC.F.GetTQ get First Arg T/Q beq .7 end of list, go check ending ')' -*-------------------------------------- + .3 cpy #SYM.T.VARIADIC bne .4 @@ -253,7 +254,7 @@ CC.F.CallRetV sec jsr CC.EXP.Eval bcs .93 - jsr CC.SYM.GetYASizeOfInAXC + jsr CC.EXP.GetYASizeOfInAXC tax save Sizeof in X jsr CC.F.GetTQ @@ -295,7 +296,6 @@ CC.F.CallRetV sec bne .90 missing arg lda ZPPtr1 push VARIADIC byte count - jsr CODE.PUSHI .7 jsr CC.GetCharNB @@ -330,8 +330,9 @@ CC.F.CallRetV sec *-------------------------------------- * X = last var size *-------------------------------------- -CC.F.Call2 lda ZPPtr2+1 - bit #SYM.Q.FASTCALL +CC.F.Call2 ldy #SYM.Q + lda (ZPLookupSymPtr),y + and #SYM.Q.FASTCALL beq .1 ldy #SYM.Def Get first (only) argument @@ -371,11 +372,12 @@ CC.F.Call2 lda ZPPtr2+1 * Return Value : call & put result on stack if in Y,A -.5 ldy #SYM.Addr+1 +.5 + ldy #SYM.Addr+1 lda (ZPLookupSymPtr),y - cmp #2 + cmp #3 bcs .8 not a SYS/FPU call...Ret value on stack - + >LDYA ZPPtr2 function T/Q jsr CC.TYPE.SizeOf cpx #3 @@ -384,13 +386,13 @@ CC.F.Call2 lda ZPPtr2+1 dex bne .60 - jsr CODE.PUSHA push ONE byte one stack + jsr CODE.PUSHA push ONE byte on stack bra .8 -.60 jsr CODE.PUSHYA push TWO bytes one stack +.60 jsr CODE.PUSHYA push TWO bytes on stack .8 >LDYA ZPPtr2 T/Q - and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL + clc rts *-------------------------------------- @@ -405,50 +407,47 @@ CC.F.Call3 ldy #SYM.Addr+1 lda (ZPLookupSymPtr),y tax - ply + ply Y=HI,X=LO cpy #1 bne .1 - jsr CODE.SYSCALL - clc - rts + jmp CODE.SYSCALL .1 cpy #2 bne .2 - jsr CODE.FPUCALL - clc - rts + jmp CODE.FPUCALL -.2 lda #$EA +.2 lda #$EA NOP jsr CODE.EmitByte - lda #$EA + bcs .99 + + lda #$EA NOP jsr CODE.EmitByte - + bcs .99 + lda #$20 JSR abs - jsr CODE.TOABSYX Y=HI,X=LO - clc - rts + jmp CODE.TOABSYX .9 bit bPass2 - bmi .99 - + bmi .91 + lda #5 leave room for LDX #imm, JSR abs clc adc ZPCCCode sta ZPCCCode - + bcc .90 - + inc ZPCCCode+1 - + .90 clc rts - -.99 lda #E.FUNDEF + +.91 lda #E.FUNDEF sec - rts +.99 rts *-------------------------------------- CC.F.GetTQ >LDA.G CC.LookupSymPtr tay diff --git a/BIN/CC.S.FIO.txt b/BIN/CC.S.FIO.txt new file mode 100644 index 00000000..bdf9fcfb --- /dev/null +++ b/BIN/CC.S.FIO.txt @@ -0,0 +1,131 @@ +NEW + AUTO 3,1 +*-------------------------------------- +CC.FIO.FOpen1st >LDA.G CC.InFileArg + >SYSCALL ArgV + +CC.FIO.FOpen phy + pha + + >PUSHW L.MSG.READING + pla + pha + >PUSHYA + >PUSHBI 2 + >SYSCALL PrintF + + pla + ply + >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI S.FI.T.TXT + >PUSHWZ Aux type + >SYSCALL FOpen + bcs .9 + + tax + + >LDA.G hFilePtr + inc + sta (pData),y + tay + txa + sta (pData),y + + >LDA.G LineCntPtr + inc + inc + sta (pData),y + tay + lda #0 + sta (pData),y + iny + sta (pData),y + +.9 rts +*-------------------------------------- +CC.FIO.FGetS >LDYA.G LineBufPtr + >STYA ZPLineBufPtr + + >LDA.G LineCntPtr + tay + lda (pData),y + inc + sta (pData),y + bne .1 + + iny + lda (pData),y + inc + sta (pData),y + +.1 >LDA.G hFilePtr + tay + lda (pData),y + >PUSHA + + >PUSHW ZPLineBufPtr + >PUSHWI 255 + >SYSCALL FGetS + bcs .9 + + >LDA.G bTrace + bpl .8 + + jsr PrintTraceMsg + +.8 + +.9 rts +*-------------------------------------- +CC.FIO.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 +*-------------------------------------- +CC.FIO.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 +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.fio +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.KW.txt b/BIN/CC.S.KW.txt index 562647cb..496da9d8 100644 --- a/BIN/CC.S.KW.txt +++ b/BIN/CC.S.KW.txt @@ -3,14 +3,107 @@ NEW *-------------------------------------- * Built in Keywords *-------------------------------------- -CC.KW.JMP txa - >STA.G CC.CmdSave - jmp (J.CC.KW,x) +CC.KW.IF jsr CC.KW.BEGIN + bcs .99 + + jsr CC.GetCharNB + bcs .9 + + cmp #'(' + bne .9 + + jsr CC.GetNextCharNB + bcs .9 + + jsr CC.EXP.Eval00 Any var type + bcs .99 + + jsr CC.KW.TestZero Y,A=T/Q + + lda #'E' + jsr CC.SYM.LookupA + bcs .99 + + lda #$4C emit JMP else + jsr CODE.TOABSYX + bcs .99 + + jsr CC.GetCharNB + bcs .99 + + cmp #')' + bne .9 + + jmp CC.KW.STMT + +.9 lda #E.CSYN + sec +.99 rts *-------------------------------------- -CC.KW.WHILE jsr CC.PushCS push cont: for WHILE loop - bcs CC.KW.IF.RTS +CC.KW.IF.END jsr CC.GetCharNBNL + bcs .1 + + cmp #';' + beq .1 + + >LDYA L.CC.KW2.IF Check allowed KW for IF.... + jsr CC.LookupID + bcc .2 + +.1 lda #'E' define ELSE Label + jsr CC.KW.NewLabel + bcs .99 + + clv pop context + rts *-------------------------------------- -CC.KW.IF jsr CC.GetCharNB +.2 lda #'X' + jsr CC.SYM.LookupA + bcs .99 + + lda #$4C emit JMP exit + jsr CODE.TOABSYX + bcs .99 + + lda #'E' define ELSE Label + jsr CC.KW.NewLabel + bcs .99 + + inc CStackPtr pop ; or } + + lda #4 replace IF by ELSE keyword + ldy CStackPtr + sta (ZPCCStack),y + + jsr CC.KW.STMT + bcs .99 + + bit .99 set V : DONT pop context + rts + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +CC.KW.ELSE lda #E.CSYN illegal + sec + rts +*-------------------------------------- +CC.KW.ELSE.END lda #'X' define EXIT Label + jsr CC.KW.NewLabel + bcs .99 + + clv pop context +.99 rts +*-------------------------------------- +CC.KW.WHILE jsr CC.KW.BEGIN + bcs .99 + + lda #'C' define CONT Label + jsr CC.SYM.NewA + bcs .99 + + jsr CC.GetCharNB bcs .9 cmp #'(' @@ -24,10 +117,13 @@ CC.KW.IF jsr CC.GetCharNB jsr CC.KW.TestZero - jsr CC.PushCS push place to set JMP false + lda #'B' + jsr CC.SYM.LookupA bcs .99 - jsr CC.KW.ZPCCCodeAdd2 + lda #$4C emit JMP break: + jsr CODE.TOABSYX + bcs .99 jsr CC.GetCharNB bcs .99 @@ -35,89 +131,44 @@ CC.KW.IF jsr CC.GetCharNB cmp #')' bne .9 - jmp CC.KW.BEGIN + jmp CC.KW.STMT .9 lda #E.CSYN sec -.99 -CC.KW.IF.RTS rts +.99 rts *-------------------------------------- -CC.KW.IF.END jsr CC.PopYA +CC.KW.WHILE.END lda #'C' + jsr CC.KW.GetLabel + bcs .99 + + lda #$4C + jsr CODE.TOABSYX emit JMP cont: + bcs .99 + + lda #'B' define BREAK Label + jsr CC.KW.NewLabel + bcs .99 + + clv pop context + +.99 rts +*-------------------------------------- +CC.KW.DO jsr CC.KW.BEGIN + bcs .99 + + lda #'C' define CONT Label + jsr CC.SYM.NewA + bcs .99 + + jmp CC.KW.STMT + +.99 rts +*-------------------------------------- +CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO.... + jsr CC.LookupID bcs .9 - >STYA ZPPtr1 set JMP false - - lda ZPCCCode -* sta (ZPPtr1) - - ldy #1 - lda ZPCCCode+1 -* sta (ZPPtr1),y - -* clc - -.9 rts -*-------------------------------------- -CC.KW.ELSE - - clc - rts -*-------------------------------------- -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 - - phy - tay HI byte - plx - - lda #$4C JMP cont: - jsr CODE.TOABSYX - - lda ZPCCCode -* sta (ZPPtr1) - - ldy #1 - lda ZPCCCode+1 -* sta (ZPPtr1),y - - clc - -.9 rts -*-------------------------------------- -CC.KW.DO - lda #E.CSYN - sec - rts -*-------------------------------------- -CC.KW.DO.END - clc - rts -*-------------------------------------- -* for (e1;e2;e3) s; -* -* { <- new scope : allows for(int i=1; ....) -* e1; -* loop: -* while (e2) -* { -* s; -* cont: -* e3; -* } -* break: -* } -*-------------------------------------- -CC.KW.FOR jsr CC.GetCharNB + jsr CC.GetCharNB bcs .9 cmp #'(' @@ -126,12 +177,83 @@ CC.KW.FOR jsr CC.GetCharNB jsr CC.GetNextCharNB bcs .9 - jsr CC.EXP.Eval00 get e1 - bcs .9 + jsr CC.EXP.Eval00 Any var type + bcs .99 - jsr CC.KW.StackDiscard + jsr CC.KW.TestnZero + + lda #'C' + jsr CC.KW.GetLabel + bcs .99 + + lda #$4C emit JMP cont + jsr CODE.TOABSYX + bcs .99 + + lda #'B' define BREAK Label + jsr CC.KW.NewLabel + bcs .99 jsr CC.GetCharNB + bcs .99 + + cmp #')' + bne .9 + + jsr CC.GetNextCharNB + bcs .9 + + clv pop context + clc + rts + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- +* for (s1;e2;s3) s; +* +* { <- new scope : allows for(int i=1; ....) +* s1; +* loop: +* while (e2) jmp break: +* { +* s; jsr s: +* cont: +* s3; jmp loop: +* } +* s: +* ; +* break: +* } +*-------------------------------------- +CC.KW.FOR jsr CC.GetCharNB + bcs .29 + + cmp #'(' + bne .29 + + jsr CC.KW.BEGIN + bcs .29 + + jsr CC.GetNextCharNB skip '(' + bcs .29 + + >LDYA L.CC.TYPEQUAL + jsr CC.LookupID + bcs .1 + + jsr CC.DECL + bcc .2 + +.19 rts + +.1 jsr CC.STMT get s1 + bcs .19 + +* jsr CC.KW.StackDiscard + +.2 jsr CC.GetCharNB bcs .9 cmp #';' @@ -140,26 +262,29 @@ CC.KW.FOR jsr CC.GetCharNB jsr CC.GetNextCharNB skip ';' bcs .9 *-------------------------------------- - >LDYA ZPCCCode - >STYA ZPPtr2 save LOOP address + lda #'L' LOOP Label + jsr CC.SYM.NewA + bcs .99 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 #'B' + jsr CC.SYM.LookupA + bcs .99 - lda #$20 emit JSR s; - jsr CODE.EmitByte + lda #$4C emit JMP break: + jsr CODE.TOABSYX - >LDYA ZPCCCode - >STYA ZPPtr3 save place to set JSR s + lda #'S' + jsr CC.SYM.LookupA + bcs .99 - jsr CC.KW.ZPCCCodeAdd2 space for 2-bytes address + lda #$20 emit JSR s: + jsr CODE.TOABSYX jsr CC.GetCharNB bcs .9 @@ -170,12 +295,14 @@ CC.KW.FOR jsr CC.GetCharNB jsr CC.GetNextCharNB skip ';' bcs .9 *-------------------------------------- - jsr CC.PushCS push cont: address - - jsr CC.EXP.Eval00 get e3 + lda #'C' CONT Label + jsr CC.SYM.NewA bcs .99 - jsr CC.KW.StackDiscard + jsr CC.STMT get s3 + bcs .99 + +* jsr CC.KW.StackDiscard jsr CC.GetCharNB bcs .9 @@ -183,19 +310,18 @@ CC.KW.FOR jsr CC.GetCharNB cmp #')' bne .9 + lda #'L' + jsr CC.SYM.LookupA + bcs .99 + lda #$4C - ldx ZPPtr2 - ldy ZPPtr2+1 - jsr CODE.TOABSYX JMP e2 + jsr CODE.TOABSYX emit JMP loop - lda ZPCCCode setup JSR s; -* sta (ZPPtr3) + lda #'S' S Label + jsr CC.SYM.NewA + bcs .99 - lda ZPCCCode+1 - ldy #1 -* sta (ZPPtr3),y - - jmp CC.KW.BEGIN + jmp CC.KW.STMT .9 lda #E.CSYN sec @@ -203,43 +329,45 @@ CC.KW.FOR jsr CC.GetCharNB *-------------------------------------- CC.KW.FOR.END lda #$60 - jsr CODE.EmitByte set RTS for JSR s; + jsr CODE.EmitByte set RTS for JSR code; + bcs .99 - jsr CC.Pop - bcs .9 + lda #'B' define BREAK Label + jsr CC.KW.NewLabel + bcs .99 - jsr CC.Pop discard cont: location - bcs .9 + clv pop context - 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 +.99 rts *-------------------------------------- CC.KW.SWITCH CC.KW.CASE +CC.KW.DEFAULT lda #E.CSYN sec rts *-------------------------------------- -CC.KW.BREAK - lda #E.CSYN +CC.KW.BREAK lda #'B' + + jsr CC.KW.LookupLabel + bcs .9 + + lda #$4C emit JMP break + jmp CODE.TOABSYX + +.9 lda #E.CSYN sec rts *-------------------------------------- -CC.KW.CONTINUE - lda #E.CSYN +CC.KW.CONTINUE lda #'C' + + jsr CC.KW.LookupLabel + bcs .9 + + lda #$4C emit JMP cont + jmp CODE.TOABSYX + +.9 lda #E.CSYN sec rts *-------------------------------------- @@ -254,7 +382,7 @@ CC.KW.RETURN ldy CStackPtr tya clc - adc #3 skip CPStmt (4 bytes) + adc #5 skip CPStmt (6 bytes) tay bcc .1 @@ -265,6 +393,9 @@ CC.KW.RETURN ldy CStackPtr .7 iny skip bState iny skip Locals + iny + iny skip CPSID + iny get SYM.T lda (ZPCCStack),y @@ -281,11 +412,10 @@ CC.KW.RETURN ldy CStackPtr jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q tax X = sizeof jsr CODE.SetRetValue + bcs .99 - jsr CODE.Leave - - clc - rts + >LDYA L.PCC.LEAVE + jmp CODE.EmitPCC *-------------------------------------- CC.KW.SIZEOF lda #E.CSYN @@ -321,66 +451,178 @@ CC.KW.STRUCT >ENTER 4 cmp #'}' bne .1 - jsr CC.GetNextCharNB skip } + jsr CC.GetNextCharNB skip '}' clc .99 >LEAVE rts *-------------------------------------- -CC.KW.BEGIN jsr CC.GetNextCharNB - bcs .9 +CC.KW.BEGIN jsr CC.SYM.NewCPSID + bcs .99 - cmp #'{' - bne .7 - - >LDA.G CC.CmdSave - tax - jmp CC.STMT.CPStmt - -.7 >LDA.G CC.CmdSave + >LDA.G CC.CPSPFX+3 jsr CC.Push bcs .99 - lda #';' + >LDA.G CC.CPSPFX+2 + jsr CC.Push + bcs .99 + + lda LocalPtr Locals + jsr CC.Push + bcs .99 + + lda #0 bState + jsr CC.Push + bcs .99 + + >LDA.G CC.CmdSave + jmp CC.Push + +.99 rts +*-------------------------------------- +CC.KW.STMT jsr CC.GetNextCharNBNL + bcs .9 + + cmp #'{' + bne .1 + + jsr CC.GetNextCharNB skip '{' + bcs .99 + + lda #'}' + jmp CC.Push + +.1 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.KW.TestZero jsr CC.SYM.GetYASizeOfInAXC - tax +CC.KW.NewLabel pha -.6 lda #$A2 LDX #imm - jsr CODE.EmitByte - txa - jsr CODE.EmitByte + lda CStackPtr + clc + adc #4 + tay - ldx #PCC.Test0X.L - ldy #0 - -.7 lda PCC.Test0X,y - jsr CODE.EmitByte + lda (ZPCCStack),y + pha iny - dex - bne .7 + lda (ZPCCStack),y + ply + >STYA.G CC.CPSPFX+2 - clc - rts + pla + jmp CC.SYM.NewA *-------------------------------------- -CC.KW.ZPCCCodeAdd2 - lda ZPCCCode +CC.KW.GetLabel pha + + lda CStackPtr clc - adc #2 - sta ZPCCCode - bcc .8 + adc #4 + tay - inc ZPCCCode+1 + lda (ZPCCStack),y + pha + iny + lda (ZPCCStack),y + ply + >STYA.G CC.CPSPFX+2 + pla + jmp CC.SYM.LookupA +*-------------------------------------- +CC.KW.LookupLabel + pha + + ldy CStackPtr + sty ArgIndex + +.1 ldy ArgIndex + beq .9 + + iny skip ; or } + + lda (ZPCCStack),y + bmi .9 f() + + iny + iny + iny + + lda (ZPCCStack),y + pha + iny + lda (ZPCCStack),y + iny + + sty ArgIndex + + ply + >STYA.G CC.CPSPFX+2 + + pla + pha + jsr CC.SYM.LookupA + bcs .1 + + pla .8 rts + +.9 pla + lda #E.CSYN + sec +.99 rts +*-------------------------------------- +* Input : Value on Stack, Y,A = Type/Qual +*-------------------------------------- +CC.KW.TestZero jsr CC.EXP.GetYASizeOfInAXC + tax + cpx #1 + bne .1 + + >LDYA L.PCC.TestZero1 + jmp CODE.EmitPCC + +.1 cpx #2 + bne .2 + + >LDYA L.PCC.TestZero2 + jmp CODE.EmitPCC + +.2 jsr CODE.LDXI + bcs .9 + + >LDYA L.PCC.TestZeroX + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +* Input : Value on Stack, Y,A = Type/Qual +*-------------------------------------- +CC.KW.TestnZero jsr CC.EXP.GetYASizeOfInAXC + tax + cpx #1 + bne .1 + + >LDYA L.PCC.TestnZero1 + jmp CODE.EmitPCC + +.1 cpx #2 + bne .2 + + >LDYA L.PCC.TestnZero2 + jmp CODE.EmitPCC + +.2 jsr CODE.LDXI + bcs .9 + + >LDYA L.PCC.TestnZeroX + jmp CODE.EmitPCC + +.9 rts *-------------------------------------- * Input : Value on Stack, Y,A = Type/Qual *-------------------------------------- diff --git a/BIN/CC.S.LINK.txt b/BIN/CC.S.LINK.txt index 171f350b..a289f01c 100644 --- a/BIN/CC.S.LINK.txt +++ b/BIN/CC.S.LINK.txt @@ -156,7 +156,43 @@ CC.Link.Dump >PUSHW L.MSG.LINKING2 >SYSCALL PrintF rts *-------------------------------------- +CC.Link.CheckMain + >PUSHB.G CC.hScopes + >PUSHW L.CC.MAIN + >SYSCALL SListLookup + bcs .9 + >STYA ZPPtr1 SymID + + >PUSHB.G CC.hScopes + >PUSHW ZPPtr1 SymID + >PUSHW ZPSymBufPtr + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + bcs .99 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + iny + ora (ZPSymBufPtr),y + beq .9 + + lda (ZPSymBufPtr),y + sta PCC.FH+PCC.FH.MAIN+1 + dey + lda (ZPSymBufPtr),y + sta PCC.FH+PCC.FH.MAIN + +* clc + + rts + +.9 >LDYA L.MSG.NOMAIN + >SYSCALL puts + lda #E.CSYN + sec +.99 rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.link diff --git a/BIN/CC.S.PCC.txt b/BIN/CC.S.PCC.txt new file mode 100644 index 00000000..c0b94675 --- /dev/null +++ b/BIN/CC.S.PCC.txt @@ -0,0 +1,595 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* PCC = Pre Compiled Code +*-------------------------------------- +ZS.RT.Ptr1 .EQ ZPBIN +ZS.RT.Ptr2 .EQ ZPBIN+2 +*-------------------------------------- +PCC.FH .PH $2000 +PCC.FH.2000 cld + jmp (PCC.FH.JMP,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA #0 S.PS.F.EVENT + .DA #0 +PCC.FH.CSSIZE .EQ *-PCC.FH.2000 + .DA $FFFF * Code Size (without Constants) +PCC.FH.DSSIZE .EQ *-PCC.FH.2000 + .DA $FFFF * Data Size + .DA #256 Stack Size + .DA #4 ZP Size + .DA 0 + +PCC.FH.JMP .DA PCC.FH.INIT + .DA PCC.FH.RUN + .DA PCC.FH.DOEVENT + .DA PCC.FH.QUIT +PCC.FH.IDATA .EQ *-PCC.FH.2000 + .DA $FFFF + .DA 0 + +PCC.FH.INIT +* TODO : LoadLib code +PCC.FH.QUIT +* TODO : UnloadLib code +PCC.FH.DOEVENT clc + rts + +* int main(int argc, char *argv[]) ; + +PCC.FH.RUN lda #0 + +.1 pha + >SYSCALL ArgV + bcs .2 + + >STYA ZS.RT.Ptr1 + + pla + pha + asl + tay + + lda ZS.RT.Ptr1 + sta (pData),y + + lda ZS.RT.Ptr1+1 + iny + sta (pData),y + + pla + inc + bra .1 + +.2 pla + + jsr PCC.FH.CS Execute INIT code + + >PUSHWZ returned int=0 + + lda #0 + >PUSHA + ldy #S.PS.ARGC + lda (pPS),y + >PUSHA int ARGC + >PUSHW pData *char[] ARGV +* >DEBUG +PCC.FH.MAIN .EQ *-PCC.FH.2000+1 + jsr $FFFF * jsr main + >PULLA + inc pStack pull returned int + sec + rts + +*PCC.FH.SYSCALL jsr A2osX.SYSCALL +* bcc .8 + +* inc pStack +* eor #$ff +* inc +* >PUSHA int -ERROR code... +* ldy #1 +* lda #$FF +* sta (pStack),y FFxx on stack + +*.8 + +PCC.FH.CS .EP +PCC.FH.L .EQ *-PCC.FH +*-------------------------------------- +PCC.DEBUG .DA #PCC.DEBUG.L + >DEBUG +PCC.DEBUG.L .EQ *-PCC.DEBUG +*-------------------------------------- +PCC.SLEEP .DA #PCC.SLEEP.L + >SLEEP +PCC.SLEEP.L .EQ *-PCC.SLEEP +*-------------------------------------- +PCC.ENTER .DA #PCC.ENTER.L + ldx pBase + phx + clc + adc pStack A = Local Size + sta pBase + +PCC.ENTER.L .EQ *-PCC.ENTER +*-------------------------------------- +PCC.LEAVE .DA #PCC.LEAVE.L + ldx pBase + stx pStack + plx + stx pBase + rts + +PCC.LEAVE.L .EQ *-PCC.LEAVE +*-------------------------------------- +PCC.ADDLOCAL .DA #PCC.ADDLOCAL.L + clc + adc pStack + sta pStack + +PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL +*-------------------------------------- +PCC.SetRetValue .DA #PCC.SetRetValue.L + + ldy #0 + +.1 >PULLA + sta (pBase),y + iny + dex + bne .1 + +PCC.SetRetValue.L .EQ *-PCC.SetRetValue +*-------------------------------------- +PCC.TestZero1 .DA #PCC.TestZero1.L + >PULLA + tay +.2 bne .2+5 skip JMP abs + +PCC.TestZero1.L .EQ *-PCC.TestZero1 +*-------------------------------------- +PCC.TestZero2 .DA #PCC.TestZero2.L + >PULLA + ora (pStack) + inc pStack + tay +.2 bne .2+5 skip JMP abs + +PCC.TestZero2.L .EQ *-PCC.TestZero2 +*-------------------------------------- +PCC.TestZeroX .DA #PCC.TestZeroX.L + lda #0 + +.1 ora (pStack) + inc pStack + dex + bne .1 + + tay +.2 bne .2+5 skip JMP abs + +PCC.TestZeroX.L .EQ *-PCC.TestZeroX +*-------------------------------------- +PCC.TestnZero1 .DA #PCC.TestnZero1.L + >PULLA + tay +.2 beq .2+5 skip JMP abs + +PCC.TestnZero1.L .EQ *-PCC.TestnZero1 +*-------------------------------------- +PCC.TestnZero2 .DA #PCC.TestnZero2.L + >PULLA + ora (pStack) + inc pStack + tay +.2 beq .2+5 skip JMP abs + +PCC.TestnZero2.L .EQ *-PCC.TestnZero2 +*-------------------------------------- +PCC.TestnZeroX .DA #PCC.TestnZeroX.L + lda #0 + +.1 ora (pStack) + inc pStack + dex + bne .1 + + tay +.2 beq .2+5 skip JMP abs + +PCC.TestnZeroX.L .EQ *-PCC.TestnZeroX +*-------------------------------------- +PCC.PushLAddrH .DA #PCC.PushLAddrH.L + >PUSHB pBase+1 +PCC.PushLAddrH.L .EQ *-PCC.PushLAddrH +*-------------------------------------- +PCC.PushLAddrL .DA #PCC.PushLAddrL.L + clc + adc pBase + >PUSHA +PCC.PushLAddrL.L .EQ *-PCC.PushLAddrL +*-------------------------------------- +PCC.PushIAddr .DA #PCC.PushIAddr.L + clc + adc PCC.FH.2000+PCC.FH.IDATA + dec pStack + >PUSHA + + txa + adc PCC.FH.2000+PCC.FH.IDATA+1 + ldy #1 + sta (pStack),y + +PCC.PushIAddr.L .EQ *-PCC.PushIAddr +*-------------------------------------- +PCC.PushUAddr .DA #PCC.PushUAddr.L + clc + adc pData + dec pStack + >PUSHA + + txa + adc pData+1 + ldy #1 + sta (pStack),y + +PCC.PushUAddr.L .EQ *-PCC.PushUAddr +*-------------------------------------- +PCC.GetLAddr1 .DA #PCC.GetLAddr1.L + clc + adc pBase + sta ZS.RT.Ptr1 + lda pBase+1 + sta ZS.RT.Ptr1+1 + +PCC.GetLAddr1.L .EQ *-PCC.GetLAddr1 +*-------------------------------------- +PCC.GetIAddr1 .DA #PCC.GetIAddr1.L + clc + adc PCC.FH.2000+PCC.FH.IDATA + sta ZS.RT.Ptr1 + txa + adc PCC.FH.2000+PCC.FH.IDATA+1 + sta ZS.RT.Ptr1+1 + +PCC.GetIAddr1.L .EQ *-PCC.GetIAddr1 +*-------------------------------------- +PCC.GetUAddr1 .DA #PCC.GetUAddr1.L + clc + adc pData + sta ZS.RT.Ptr1 + txa + adc pData+1 + sta ZS.RT.Ptr1+1 + +PCC.GetUAddr1.L .EQ *-PCC.GetUAddr1 +*-------------------------------------- +PCC.PopAddr1 .DA #PCC.PopAddr1.L + >PULLA + sta ZS.RT.Ptr1 + >PULLA + sta ZS.RT.Ptr1+1 + +PCC.PopAddr1.L .EQ *-PCC.PopAddr1 +*-------------------------------------- +PCC.SetValue .DA #PCC.SetValue.L +.1 lda (pStack),y + sta (ZS.RT.Ptr1),y + dey + bpl .1 + +PCC.SetValue.L .EQ *-PCC.SetValue +*-------------------------------------- +PCC.GetLAddr2 .DA #PCC.GetLAddr2.L + clc + adc pBase + sta ZS.RT.Ptr2 + lda pBase+1 + sta ZS.RT.Ptr2+1 + +PCC.GetLAddr2.L .EQ *-PCC.GetLAddr2 +*-------------------------------------- +PCC.GetIAddr2 .DA #PCC.GetIAddr2.L + clc + adc PCC.FH.2000+PCC.FH.IDATA + sta ZS.RT.Ptr2 + txa + adc PCC.FH.2000+PCC.FH.IDATA+1 + sta ZS.RT.Ptr2+1 + +PCC.GetIAddr2.L .EQ *-PCC.GetIAddr2 +*-------------------------------------- +PCC.GetUAddr2 .DA #PCC.GetUAddr2.L + clc + adc pData + sta ZS.RT.Ptr2 + txa + adc pData+1 + sta ZS.RT.Ptr2+1 + +PCC.GetUAddr2.L .EQ *-PCC.GetUAddr2 +*-------------------------------------- +PCC.PopAddr2 .DA #PCC.PopAddr2.L + >PULLA + sta ZS.RT.Ptr2 + >PULLA + sta ZS.RT.Ptr2+1 + +PCC.PopAddr2.L .EQ *-PCC.PopAddr2 +*-------------------------------------- +PCC.Deref2 .DA #PCC.Deref2.L + ldy #1 + lda (ZS.RT.Ptr2),y + tay + lda (ZS.RT.Ptr2) + + sta ZS.RT.Ptr2 + sty ZS.RT.Ptr2+1 + +PCC.Deref2.L .EQ *-PCC.Deref2 +*-------------------------------------- +PCC.PushDeref2 .DA #PCC.PushDeref2.L + ldy #1 + >PUSHB (ZS.RT.Ptr2),y + >PUSHB (ZS.RT.Ptr2) + +PCC.PushDeref2.L .EQ *-PCC.PushDeref2 +*-------------------------------------- +PCC.PushValue .DA #PCC.PushValue.L + +.1 lda (ZS.RT.Ptr2),y + >PUSHA + dey + bpl .1 + +PCC.PushValue.L .EQ *-PCC.PushValue +*-------------------------------------- +PCC.Inc1 .DA #PCC.Inc1.L + lda (ZS.RT.Ptr2) + inc + sta (ZS.RT.Ptr2) +PCC.Inc1.L .EQ *-PCC.Inc1 +*-------------------------------------- +PCC.Inc2 .DA #PCC.Inc2.L + lda (ZS.RT.Ptr2) + inc + sta (ZS.RT.Ptr2) + bne .1 + + ldy #1 + lda (ZS.RT.Ptr2),y + inc + sta (ZS.RT.Ptr2),y + +.1 + +PCC.Inc2.L .EQ *-PCC.Inc2 +*-------------------------------------- +PCC.Inc4 .DA #PCC.Inc4.L + lda (ZS.RT.Ptr2) + inc + sta (ZS.RT.Ptr2) + bne .2 + + ldy #1 + +.1 lda (ZS.RT.Ptr2),y + inc + sta (ZS.RT.Ptr2),y + beq .2 + + iny + cpy #4 + bne .1 + +.2 + +PCC.Inc4.L .EQ *-PCC.Inc4 +*-------------------------------------- +PCC.Dec1 .DA #PCC.Dec1.L + lda (ZS.RT.Ptr2) + dec + sta (ZS.RT.Ptr2) +PCC.Dec1.L .EQ *-PCC.Dec1 +*-------------------------------------- +PCC.Dec2 .DA #PCC.Dec2.L + lda (ZS.RT.Ptr2) + php + dec + sta (ZS.RT.Ptr2) + plp + bne .1 + + ldy #1 + lda (ZS.RT.Ptr2),y + dec + sta (ZS.RT.Ptr2),y + +.1 + +PCC.Dec2.L .EQ *-PCC.Dec2 +*-------------------------------------- +PCC.Dec4 .DA #PCC.Dec4.L + lda (ZS.RT.Ptr2) + clc + sbc #0 + sta (ZS.RT.Ptr2) + bcs .2 + + ldy #1 + +.1 lda (ZS.RT.Ptr2),y + sbc #0 + sta (ZS.RT.Ptr2),y + bcs .2 + + iny + cpy #4 + bne .1 + +.2 + +PCC.Dec4.L .EQ *-PCC.Dec4 +*-------------------------------------- +PCC.BOPS.bMUL +*-------------------------------------- +PCC.BOPS.cMUL +*-------------------------------------- +PCC.BOPS.bDIV +*-------------------------------------- +PCC.BOPS.cDIV +*-------------------------------------- +PCC.BOPS.bMOD +*-------------------------------------- +PCC.BOPS.cMOD +*-------------------------------------- +PCC.BOPS.ADD .DA #PCC.BOPS.ADD.L + clc + >PULLA + adc (pStack) + sta (pStack) +PCC.BOPS.ADD.L .EQ *-PCC.BOPS.ADD +*-------------------------------------- +PCC.BOPS.SUB .DA #PCC.BOPS.SUB.L + sec + ldy #1 + lda (pStack),y + sbc (pStack) + sta (pStack),y + inc pStack +PCC.BOPS.SUB.L .EQ *-PCC.BOPS.SUB +*-------------------------------------- +PCC.BOPS.SHL .DA #PCC.BOPS.SHL.L + >PULLA + tax + beq .8 + + lda (pStack) + +.1 asl + dex + bne .1 + + sta (pStack) + +.8 +PCC.BOPS.SHL.L .EQ *-PCC.BOPS.SHL +*-------------------------------------- +PCC.BOPS.SHR .DA #PCC.BOPS.SHR.L + >PULLA + tax + beq .8 + + lda (pStack) + +.1 lsr + dex + bne .1 + + sta (pStack) + +.8 +PCC.BOPS.SHR.L .EQ *-PCC.BOPS.SHR +*-------------------------------------- +PCC.BOPS.L .DA #PCC.BOPS.L.L + >PULLA + cmp (pStack) + bcc .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.L.L .EQ *-PCC.BOPS.L +*-------------------------------------- +PCC.BOPS.G .DA #PCC.BOPS.G.L + >PULLA + cmp (pStack) + beq .1 + bcs .8 + +.1 lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.G.L .EQ *-PCC.BOPS.G +*-------------------------------------- +PCC.BOPS.LE .DA #PCC.BOPS.LE.L + >PULLA + cmp (pStack) + bcc .8 + beq .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.LE.L .EQ *-PCC.BOPS.LE +*-------------------------------------- +PCC.BOPS.GE .DA #PCC.BOPS.GE.L + >PULLA + cmp (pStack) + bcs .8 + + lda #0 + sta (pStack) + rts + +.8 lda #1 + sta (pStack) +PCC.BOPS.GE.L .EQ *-PCC.BOPS.GE +*-------------------------------------- +PCC.BOPS.EQ .DA #PCC.BOPS.EQ.L + >PULLA + cmp (pStack) + beq .1 + + lda #0 + clc + +.1 ror + sta (pStack) + +PCC.BOPS.EQ.L .EQ *-PCC.BOPS.EQ +*-------------------------------------- +PCC.BOPS.NE .DA #PCC.BOPS.NE.L + >PULLA + eor (pStack) + sta (pStack) + +PCC.BOPS.NE.L .EQ *-PCC.BOPS.NE +*-------------------------------------- +PCC.BOPS.LAND +*-------------------------------------- +PCC.BOPS.AND .DA #PCC.BOPS.AND.L + >PULLA + and (pStack) + sta (pStack) +PCC.BOPS.AND.L .EQ *-PCC.BOPS.AND +*-------------------------------------- +PCC.BOPS.LOR +*-------------------------------------- +PCC.BOPS.OR .DA #PCC.BOPS.OR.L + >PULLA + ora (pStack) + sta (pStack) +PCC.BOPS.OR.L .EQ *-PCC.BOPS.OR +*-------------------------------------- +PCC.BOPS.EOR .DA #PCC.BOPS.EOR.L + >PULLA + eor (pStack) + sta (pStack) +PCC.BOPS.EOR.L .EQ *-PCC.BOPS.EOR +*-------------------------------------- +MAN +SAVE usr/src/bin/cc.s.pcc +LOAD usr/src/bin/cc.s +ASM diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index aeb31eb3..c3e550cc 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -1,12 +1,57 @@ NEW AUTO 3,1 *-------------------------------------- +CC.STMT jsr CC.GetCharNB + jsr CC.IsLetter + ldx #$ff + bcc .20 + + >LDYA L.CC.PREOPS ++var ? + jsr CC.LookupOP + bcs .9 + +.20 stx StmtPreOp + + jsr CC.SYM.Lookup var or func() ? + bcs .99 + + ldy #SYM.Q + lda (ZPLookupSymPtr),y + bit #SYM.Q.FUNC + beq .60 + + bit StmtPreOp + bpl .9 ++func ???????? + + jsr CC.F.CallNoRetV func( ... ); + bcs .99 + + jmp CC.SYM.LookupFree + +.60 jsr CC.CORE.SetVar + bcs .99 + + jmp CC.SYM.LookupFree + +.9 lda #E.CSYN + sec +.99 rts +*-------------------------------------- * X = KW.ID *-------------------------------------- -CC.STMT.CPStmt lda LocalPtr Locals +CC.STMT.CPStmt.NEW + >LDA.G CC.CPSID+1 jsr CC.Push bcs .99 - + + >LDA.G CC.CPSID + jsr CC.Push + bcs .99 + + lda LocalPtr Locals + jsr CC.Push + bcs .99 + lda #0 bState jsr CC.Push bcs .99 @@ -20,33 +65,58 @@ CC.STMT.CPStmt lda LocalPtr Locals .99 rts *-------------------------------------- +CC.STMT.Stmt.END + jsr CC.Get + bcs .8 + + cmp #'}' + beq .8 + + cmp #';' must be ';' on stack.... + bra CC.STMT.CPStmt.POP + +.8 clc + +CC.STMT.Stmt.RTS + rts +*-------------------------------------- CC.STMT.CPStmt.END - jsr CC.Pop - bcs .9 + jsr CC.Get + bcs CC.STMT.Stmt.RTS cmp #'}' must be '}' on stack.... - bne .9 +CC.STMT.CPStmt.POP + bne .98 - jsr CC.Pop get stacked KW... - tax + iny + lda (ZPCCStack),y - jsr CC.Pop bState + jsr .7 + bcs .99 + + bvs .1 DONT POP reused context (ELSE....) + + lda CStackPtr +* clc + adc #5 + sta CStackPtr jsr CC.Pop Locals sta LocalPtr - - txa - bmi .5 + +.1 clc + rts +*-------------------------------------- +.7 tax + bmi .8 jmp (J.CC.KW.END,x) -.5 jmp CC.F.Def.END +.8 jmp CC.F.Def.END -.9 lda #E.CSYN +.98 lda #E.CSYN sec - rts -*-------------------------------------- -CC.CPS.New +.99 rts *-------------------------------------- MAN SAVE usr/src/bin/cc.s.stmt diff --git a/BIN/CC.S.SYM.txt b/BIN/CC.S.SYM.txt index 7628e4b0..5a800a49 100644 --- a/BIN/CC.S.SYM.txt +++ b/BIN/CC.S.SYM.txt @@ -17,7 +17,7 @@ CC.SYM.New >STYA ZPPtr2 T/Q >PUSHW ZPLineBufPtr >SYSCALL SListLookup - bcs .9 + bcs CC.SYM.New.9 >STYA.G CC.SymID Y,A = KeyID @@ -29,21 +29,14 @@ CC.SYM.New >STYA ZPPtr2 T/Q >PUSHWI 65535 all >PUSHWZ From Start >SYSCALL SListGetData - bcs .9 + bcc CC.SYM.New2 - jsr CC.GetCharNB - cmp #'(' - bne .8 - - jmp CC.F.Decl - -.8 clc -.9 rts Y,A = SymSize +CC.SYM.New.9 rts Y,A = SymSize *-------------------------------------- CC.SYM.New1 ldy ScopeIdx lda (pData),y jsr CC.SYM.NewKey - bcs .9 + bcs CC.SYM.New.9 >STYA.G CC.SymID Y,A = KeyID @@ -71,8 +64,8 @@ CC.SYM.New1 ldy ScopeIdx tya ldy #SYM.DefSize sta (ZPSymBufPtr),y - - jsr CC.GetCharNB +*-------------------------------------- +CC.SYM.New2 jsr CC.GetCharNB bcs CC.SYM.SetAddr cmp #'(' @@ -84,45 +77,45 @@ CC.SYM.New1 ldy ScopeIdx sta (ZPSymBufPtr),y jmp CC.F.Decl - -.9 rts *-------------------------------------- CC.SYM.NewV cmp #'[' bne CC.SYM.SetAddr + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #%11001111 + sta (ZPSymBufPtr),y + + lda #SYM.Def + ldy #SYM.DefSize + sta (ZPSymBufPtr),y + + ldy #SYM.Q + +.1 lda (ZPSymBufPtr),y + clc + adc #SYM.Q.ARRAY + sta (ZPSymBufPtr),y + jsr CC.GetNextCharNB Skip [ bcs .99 cmp #']' - bne .3 + bne .2 -.2 ldy #SYM.Q + ldy #SYM.Q lda (ZPSymBufPtr),y - bit #SYM.Q.PPPOINTER - beq .99 + and #SYM.Q.PPPOINTER + beq .99 [] only allowed for * - and #SYM.Q.AAARRAY - cmp #SYM.Q.AAARRAY + >LDYAI 0 set as [0] (deref) + jsr CC.SYM.AddWord + bra .3 + +.2 jsr CC.EXP.IntConst 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.SYM.AddWord jsr CC.GetCharNB bcs .99 @@ -130,17 +123,22 @@ CC.SYM.NewV cmp #'[' cmp #']' bne .99 - jsr CC.GetNextCharNB Skip ] +.3 jsr CC.GetNextCharNB Skip ] bcs CC.SYM.SetAddr -* cmp #'[' -* bne CC.SYM.SetAddr + cmp #'[' + bne CC.SYM.SetAddr - bra CC.SYM.SetAddr + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.AAARRAY + cmp #SYM.Q.AAARRAY + beq .99 already [][][] + + bra .1 .99 lda #E.CSYN sec - .9 rts *-------------------------------------- CC.SYM.SetAddr ldy #SYM.Q @@ -164,19 +162,23 @@ CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC * clc / sec A,X=Size, CS if pointer + pha + ldy #SYM.Addr lda ZPCCData sta (ZPSymBufPtr),y - adc ZPCCData - sta ZPCCData - iny lda ZPCCData+1 sta (ZPSymBufPtr),y + pla + clc + adc ZPCCData + sta ZPCCData + txa adc ZPCCData+1 sta ZPCCData+1 @@ -214,6 +216,125 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC sec rts *-------------------------------------- +CC.SYM.PushAddr ldy #SYM.SC + lda (ZPSymBufPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + >LDYA L.PCC.PushLAddrH + jsr CODE.EmitPCC + bcs .9 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.PushLAddrL + jmp CODE.EmitPCC + +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + tax + + dey + lda (ZPSymBufPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.PushIAddr + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.PushUAddr + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.SYM.GetAddr1 ldy #SYM.SC + lda (ZPSymBufPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr1 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + tax + + dey + lda (ZPSymBufPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr1 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr1 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- +CC.SYM.GetAddr2 ldy #SYM.SC + lda (ZPSymBufPtr),y + beq .1 SYM.SC.STATIC +* LOCAL + ldy #SYM.Addr + lda (ZPSymBufPtr),y + eor #$FF + inc + jsr CODE.LDAI + bcs .9 + + >LDYA L.PCC.GetLAddr2 + jmp CODE.EmitPCC +* GLOBAL + +.1 ldy #SYM.Addr+1 + lda (ZPSymBufPtr),y + tax + + dey + lda (ZPSymBufPtr),y + + jsr CODE.LDAXI + bcs .9 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + and #SYM.Q.CONST + beq .2 + + >LDYA L.PCC.GetIAddr2 + jmp CODE.EmitPCC + +.2 >LDYA L.PCC.GetUAddr2 + jmp CODE.EmitPCC + +.9 rts +*-------------------------------------- CC.SYM.NewKey >PUSHA >PUSHW ZPLineBufPtr >SYSCALL SListNewKey @@ -223,11 +344,106 @@ CC.SYM.NewKey >PUSHA .9 rts Y,A = KeyID, X = KeyLen *-------------------------------------- +CC.SYM.AddWord pha + phy + + ldy #SYM.DefSize + lda (ZPSymBufPtr),y + pha + + inc + inc + sta (ZPSymBufPtr),y + + ply + + pla + sta (ZPSymBufPtr),y + iny + pla + sta (ZPSymBufPtr),y +CC.SYM.AddWord.RTS + rts +*-------------------------------------- +CC.SYM.NewCPSID >LDYA.G CC.CPSID + >STYA.G CC.CPSPFX+2 + + >LDA.G CC.CPSID+1 + inc + cmp #'Z'+1 + bne .1 + + dey CC.CPSID + lda (pData),y + inc + cmp #'Z'+1 + beq .9 + + sta (pData),y + + lda #'A' + iny CC.CPSID+1 + +.1 sta (pData),y + + clc + rts + +.9 lda #E.OOH +* sec + rts +*-------------------------------------- +CC.SYM.NewA bit bPass2 + bmi .8 + + >STA.G CC.CPSPFX A = "B"reak, "C"ontinue... + + >PUSHB.G CC.hScopes Global Scope + >PUSHEA.G CC.CPSPFX + + >SYSCALL SListNewKey + bcs CC.SYM.AddWord.RTS + + >STYA.G CC.SymID Y,A = KeyID + + lda #SYM.T.VOID + sta (ZPSymBufPtr) #SYM.T + + lda #SYM.Q.POINTER + ldy #SYM.Q + sta (ZPSymBufPtr),y + + lda #SYM.SC.STATIC + iny #SYM.SC + sta (ZPSymBufPtr),y + + iny + lda #0 + +.1 sta (ZPSymBufPtr),y + iny + cpy #SYM.Def + bne .1 + + tya + ldy #SYM.DefSize + sta (ZPSymBufPtr),y + + >LDYA ZPCCCode + jsr CC.SYM.SetAddrYA + + >LDA.G CC.hScopes Global Scope + jmp CC.SYM.Store.1 + +.8 clc + +.99 rts +*-------------------------------------- CC.SYM.StoreF >LDA.G CC.hScopes bit bPass2 bpl CC.SYM.Store.1 - + clc rts *-------------------------------------- @@ -332,6 +548,44 @@ CC.SYM.Lookup >LDA.G CC.LookupIdx * sec rts *-------------------------------------- +CC.SYM.LookupA bit bPass2 + bmi .1 + + ldx #0 + ldy #0 + clc + rts + +.1 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue... + + >PUSHB.G CC.hScopes Global Scope + >PUSHEA.G CC.CPSPFX + >SYSCALL SListLookup + bcs .99 + + >STYA.G CC.SymID Y,A = KeyID + + >PUSHB.G CC.hScopes + >PUSHW.G CC.SymID + >PUSHW ZPSymBufPtr + >PUSHWI 65535 all + >PUSHWZ From Start + >SYSCALL SListGetData + bcs .99 + + ldy #SYM.Addr + lda (ZPSymBufPtr),y + + tax + + iny + lda (ZPSymBufPtr),y + tay + +* clc + +.99 rts +*-------------------------------------- CC.SYM.LookupFree >LDA.G CC.LookupIdx cmp #CC.LookupIdx @@ -367,92 +621,35 @@ CC.SYM.LookupFreeAll clc rts *-------------------------------------- -* Y,A = value T/Q +* on RT stack : Addr,value *-------------------------------------- -CC.SYM.PushValue - jsr CC.SYM.CheckTypeYA +CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC + tay + dey + jsr CODE.LDYI bcs .9 - jsr CC.SYM.GetSymSizeOfInAXC - tax - jsr CODE.LDXI + >LDYA L.PCC.SetValue + jmp CODE.EmitPCC - 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 +CC.SYM.CheckTypeYA.OLD pha tya cmp (ZPSymBufPtr) bne .9 pla - phy - ldy #SYM.Q - cmp (ZPSymBufPtr),y - bne .9 - ply + ldy #SYM.Q + eor (ZPSymBufPtr),y + and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL + bne .9 clc rts @@ -476,7 +673,7 @@ CC.SYM.GetTypeInYA *-------------------------------------- * in : Y,A = T/Q *-------------------------------------- -CC.SYM.SetTypeYA +CC.SYM.SetTypeYA.OLD phy ldy #SYM.Q sta (ZPSymBufPtr),y @@ -497,7 +694,16 @@ CC.SYM.GetSymSizeOfInAXC CC.SYM.GetYASizeOfInAXC bit #SYM.Q.PPPOINTER - bne .1 + beq .1 + + lda #2 pointer + ldx #0 + + sec +1 for hMem Storage + rts + +.1 bit #SYM.Q.AAARRAY + bne .2 lda CC.TYPESIZE-1,y ldx #0 @@ -505,10 +711,36 @@ CC.SYM.GetYASizeOfInAXC clc rts -.1 lda #2 pointer - ldx #0 +.2 ldx CC.TYPESIZE-1,y - sec +1 for hMem Storage + ldy #SYM.Def + lda (ZPSymBufPtr),y + >PUSHA + iny + lda (ZPSymBufPtr),y + >PUSHA + + ldy #1 + +.3 dex + beq .5 + +.4 lda (pStack),y + clc + adc (pStack),y + sta (pStack),y + + lda (pStack) + adc (pStack) + sta (pStack) + dex + bne .4 + +.5 >PULLA + tax + >PULLA + + clc rts *-------------------------------------- * in/out : A,X,C = size @@ -526,19 +758,6 @@ CC.SYM.SetSizeOf pla rts *-------------------------------------- -CC.SYM.GetAddrInYA - ldy #SYM.Addr+1 - lda (ZPSymBufPtr),y - pha - - dey - lda (ZPSymBufPtr),y - tay - - pla Z if Local - - rts -*-------------------------------------- CC.SYM.SetAddrYA phy diff --git a/BIN/CC.S.TYPE.txt b/BIN/CC.S.TYPE.txt index a3eb2099..d49f7f77 100644 --- a/BIN/CC.S.TYPE.txt +++ b/BIN/CC.S.TYPE.txt @@ -150,7 +150,7 @@ CC.TYPE sta (pStack) T .10 jsr CC.IsLetter bcs .8 - >LDYA L.CC.FTYPES + >LDYA L.CC.FTYPES int fastcall f() ? jsr CC.LookupID bcs .8 next char is an identifier @@ -163,7 +163,7 @@ CC.TYPE sta (pStack) T bcs .9 next char is an identifier, ",", "(",")" .8 clc - rts + rts *-------------------------------------- * in : Y,A = type/qual * out : X = size diff --git a/BIN/CC.S.txt b/BIN/CC.S.txt index 0f87fbac..6c1a8916 100644 --- a/BIN/CC.S.txt +++ b/BIN/CC.S.txt @@ -50,14 +50,6 @@ SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ.... * 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 @@ -76,20 +68,22 @@ ZPCCStack .BS 2 ZPLineBufPtr .BS 2 ZPLookupPtr .BS 2 - CStackPtr .BS 1 LocalPtr .BS 1 - ScopeIdx .BS 1 bLocalScope .BS 1 ZPSymBufPtr .BS 2 - -* .BS 1 -* .BS 1 - ZPLookupSymPtr .BS 2 +bInitCode .BS 1 +StmtPreOp .BS 1 +ExpState .BS 1 +*ExpState.VinYA .EQ $10 +ExpState.AonStack .EQ $20 +ExpState.AinPTR .EQ $40 +ExpState.VonStack .EQ $80 +ZPState .BS 1 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -127,50 +121,27 @@ L.MSG.SUMMARY .DA MSG.SUMMARY L.MSG.NOMAIN .DA MSG.NOMAIN L.ENV.INCLUDE .DA ENV.INCLUDE *-------------------------------------- -L.CC.PREOPS .DA CC.PREOPS -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.PREOPS .DA CC.PREOPS +J.CC.PREOPS .DA CC.EXP.Ref + .DA CC.EXP.Deref + .DA CC.EXP.Abs + .DA CC.EXP.negate + .DA CC.EXP.lnot + .DA CC.EXP.bnot + .DA CC.EXP.preinc + .DA CC.EXP.predec +L.CC.POSTOPS .DA CC.POSTOPS +J.CC.POSTOPS .DA CC.EXP.postinc + .DA CC.EXP.postdec + .DA CC.EXP.array + .DA CC.EXP.Struct + .DA CC.EXP.pStruct L.CC.BOPS .DA CC.BOPS -J.CC.bBOPS .DA CC.BOPS.bMUL - .DA CC.BOPS.bDIV - .DA CC.BOPS.bMOD - .DA CC.BOPS.ADD - .DA CC.BOPS.SUB - .DA CC.BOPS.SHL - .DA CC.BOPS.SHR - .DA CC.BOPS.L - .DA CC.BOPS.LE - .DA CC.BOPS.G - .DA CC.BOPS.GE - .DA CC.BOPS.EQ - .DA CC.BOPS.NE - .DA CC.BOPS.AND - .DA CC.BOPS.OR - .DA CC.BOPS.EOR - .DA CC.BOPS.LAND - .DA CC.BOPS.LOR -J.CC.cBOPS .DA CC.BOPS.cMUL - .DA CC.BOPS.cDIV - .DA CC.BOPS.cMOD - .DA CC.BOPS.ADD - .DA CC.BOPS.SUB - .DA CC.BOPS.SHL - .DA CC.BOPS.SHR - .DA CC.BOPS.L - .DA CC.BOPS.LE - .DA CC.BOPS.G - .DA CC.BOPS.GE - .DA CC.BOPS.EQ - .DA CC.BOPS.NE - .DA CC.BOPS.AND - .DA CC.BOPS.OR - .DA CC.BOPS.EOR - .DA CC.BOPS.LAND - .DA CC.BOPS.LOR L.CC.DIRS .DA CC.DIRS L.CC.KW .DA CC.KW +L.CC.KW2.IF .DA CC.KW2.IF +L.CC.KW2.DO .DA CC.KW2.DO L.CC.SCSPEC .DA CC.SCSPEC L.CC.TYPEQUAL .DA CC.TYPEQUAL L.CC.TYPESPEC .DA CC.TYPESPEC @@ -186,6 +157,7 @@ J.CC.KW .DA CC.KW.IF .DA CC.KW.FOR .DA CC.KW.SWITCH .DA CC.KW.CASE + .DA CC.KW.DEFAULT .DA CC.KW.BREAK .DA CC.KW.CONTINUE .DA CC.KW.RETURN @@ -224,6 +196,80 @@ 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 +*-------------------------------------- +L.PCC.DEBUG .DA PCC.DEBUG +L.PCC.SLEEP .DA PCC.SLEEP +L.PCC.ENTER .DA PCC.ENTER +L.PCC.LEAVE .DA PCC.LEAVE +L.PCC.ADDLOCAL .DA PCC.ADDLOCAL +L.PCC.SetRetValue .DA PCC.SetRetValue +L.PCC.TestZero1 .DA PCC.TestZero1 +L.PCC.TestZero2 .DA PCC.TestZero2 +L.PCC.TestZeroX .DA PCC.TestZeroX +L.PCC.TestnZero1 .DA PCC.TestnZero1 +L.PCC.TestnZero2 .DA PCC.TestnZero2 +L.PCC.TestnZeroX .DA PCC.TestnZeroX +L.PCC.PushLAddrH .DA PCC.PushLAddrH +L.PCC.PushLAddrL .DA PCC.PushLAddrL +L.PCC.PushIAddr .DA PCC.PushIAddr +L.PCC.PushUAddr .DA PCC.PushUAddr +L.PCC.GetLAddr1 .DA PCC.GetLAddr1 +L.PCC.GetIAddr1 .DA PCC.GetIAddr1 +L.PCC.GetUAddr1 .DA PCC.GetUAddr1 +L.PCC.PopAddr1 .DA PCC.PopAddr1 +L.PCC.SetValue .DA PCC.SetValue +L.PCC.GetLAddr2 .DA PCC.GetLAddr2 +L.PCC.GetIAddr2 .DA PCC.GetIAddr2 +L.PCC.GetUAddr2 .DA PCC.GetUAddr2 +L.PCC.PopAddr2 .DA PCC.PopAddr2 +L.PCC.Deref2 .DA PCC.Deref2 +L.PCC.PushDeref2 .DA PCC.PushDeref2 +L.PCC.PushValue .DA PCC.PushValue +L.PCC.Inc1 .DA PCC.Inc1 +L.PCC.Inc2 .DA PCC.Inc2 +L.PCC.Inc4 .DA PCC.Inc4 +L.PCC.Dec1 .DA PCC.Dec1 +L.PCC.Dec2 .DA PCC.Dec2 +L.PCC.Dec4 .DA PCC.Dec4 +*-------------------------------------- +L.PCC.bBOPS .DA PCC.BOPS.bMUL + .DA PCC.BOPS.bDIV + .DA PCC.BOPS.bMOD + .DA PCC.BOPS.ADD + .DA PCC.BOPS.SUB + .DA PCC.BOPS.SHL + .DA PCC.BOPS.SHR + .DA PCC.BOPS.L + .DA PCC.BOPS.G + .DA PCC.BOPS.LE + .DA PCC.BOPS.GE + .DA PCC.BOPS.EQ + .DA PCC.BOPS.NE + .DA PCC.BOPS.LAND + .DA PCC.BOPS.AND + .DA PCC.BOPS.LOR + .DA PCC.BOPS.OR + .DA PCC.BOPS.EOR +*-------------------------------------- +L.PCC.cBOPS .DA PCC.BOPS.cMUL + .DA PCC.BOPS.cDIV + .DA PCC.BOPS.cMOD + .DA PCC.BOPS.ADD + .DA PCC.BOPS.SUB + .DA PCC.BOPS.SHL + .DA PCC.BOPS.SHR + .DA PCC.BOPS.L + .DA PCC.BOPS.G + .DA PCC.BOPS.LE + .DA PCC.BOPS.GE + .DA PCC.BOPS.EQ + .DA PCC.BOPS.NE + .DA PCC.BOPS.LAND + .DA PCC.BOPS.AND + .DA PCC.BOPS.LOR + .DA PCC.BOPS.OR + .DA PCC.BOPS.EOR +*-------------------------------------- .DA 0 *-------------------------------------- * Called once at process creation @@ -263,7 +309,7 @@ CS.RUN >PUSHW L.MSG.GREETINGS jsr CODE.Init - jsr CS.RUN.FOpen1st + jsr CC.FIO.FOpen1st bcs CS.INIT.RTS *-------------------------------------- CS.RUN.CLOOP jsr CC.CompileFile @@ -271,7 +317,7 @@ CS.RUN.CLOOP jsr CC.CompileFile cmp #MLI.E.EOF bne .9 - jsr CS.RUN.FClose + jsr CC.FIO.FClose bne CS.RUN.CLOOP *-------------------------------------- jsr PrintSummary @@ -279,19 +325,19 @@ CS.RUN.CLOOP jsr CC.CompileFile jsr CC.Link bcs .99 - - jsr CheckMain +* >DEBUG + jsr CC.Link.CheckMain bcs .99 dec bPass2 - jsr CS.RUN.FCreate + jsr CC.FIO.FCreate bcs .99 jsr CODE.Init bcs .99 - jsr CS.RUN.FOpen1st + jsr CC.FIO.FOpen1st bcs .99 *-------------------------------------- .2 jsr CC.CompileFile @@ -299,7 +345,7 @@ CS.RUN.CLOOP jsr CC.CompileFile cmp #MLI.E.EOF bne .9 - jsr CS.RUN.FClose + jsr CC.FIO.FClose bne .2 *-------------------------------------- .8 lda #0 Exit Code = Success @@ -372,130 +418,6 @@ CS.RUN.ARGS inc ArgIndex sec rts *-------------------------------------- -CS.RUN.FOpen1st >LDA.G CC.InFileArg - >SYSCALL ArgV - -CS.RUN.FOpen phy - pha - - >PUSHW L.MSG.READING - pla - pha - >PUSHYA - >PUSHBI 2 - >SYSCALL PrintF - - pla - ply - >PUSHYA - >PUSHBI O.RDONLY - >PUSHBI S.FI.T.TXT - >PUSHWZ Aux type - >SYSCALL FOpen - bcs .9 - - tax - - >LDA.G hFilePtr - inc - sta (pData),y - tay - txa - sta (pData),y - - >LDA.G LineCntPtr - inc - inc - sta (pData),y - tay - lda #0 - sta (pData),y - iny - sta (pData),y - -.9 rts -*-------------------------------------- -CS.RUN.FGetS >LDYA.G LineBufPtr - >STYA ZPLineBufPtr - - >LDA.G LineCntPtr - tay - lda (pData),y - inc - sta (pData),y - bne .1 - - iny - lda (pData),y - inc - sta (pData),y - -.1 >LDA.G hFilePtr - tay - lda (pData),y - >PUSHA - - >PUSHW ZPLineBufPtr - >PUSHWI 255 - >SYSCALL FGetS - bcs .9 - - >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.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 *-------------------------------------- @@ -510,7 +432,9 @@ CS.QUIT jsr CODE.Quit .8 clc rts *-------------------------------------- -PrintTraceMsg ldy #S.PS.hStdErr +PrintTraceMsg + ldy #S.PS.hStdOut +* ldy #S.PS.hStdErr lda (pPS),y >PUSHA @@ -641,45 +565,8 @@ PrintSummary lda ZPCCCode+1 >PUSHBI 6 >SYSCALL PrintF +* >DEBUG rts -*-------------------------------------- -CheckMain >PUSHB.G CC.hScopes - - >PUSHW L.CC.MAIN - >SYSCALL SListLookup - bcs .9 - - >STYA ZPPtr1 SymID - - >PUSHB.G CC.hScopes - >PUSHW ZPPtr1 SymID - >PUSHW ZPSymBufPtr - >PUSHWI 65535 all - >PUSHWZ From Start - >SYSCALL SListGetData - bcs .99 - - ldy #SYM.Addr - lda (ZPSymBufPtr),y - iny - ora (ZPSymBufPtr),y - beq .9 - - lda (ZPSymBufPtr),y - sta PCC.FH+PCC.FH.MAIN+1 - dey - lda (ZPSymBufPtr),y - sta PCC.FH+PCC.FH.MAIN - -* clc - - rts - -.9 >LDYA L.MSG.NOMAIN - >SYSCALL puts - lda #E.CSYN - sec -.99 rts *-------------------------------------- .INB usr/src/bin/cc.s.code .INB usr/src/bin/cc.s.core @@ -692,7 +579,7 @@ CheckMain >PUSHB.G CC.hScopes .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 + .INB usr/src/bin/cc.s.fio *-------------------------------------- CS.END *-------------------------------------- @@ -712,276 +599,18 @@ MSG.DEBUG .AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n" MSG.TRACE .AZ "%5D> %s\r\n" MSG.RTSTK .AZ "\r\n" MSG.ERROR .AZ " %s^\r\n" -MSG.SUMMARY .AZ "\r\n*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n\r\n" +MSG.SUMMARY .AZ "*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n" MSG.NOMAIN .AZ "*** No 'main()' function defined." *-------------------------------------- -ENV.INCLUDE .AZ "INCLUDE" -ENV.LIB .AZ "LIB" -*-------------------------------------- OptionList .AS "DdTt" OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace *-------------------------------------- -* PCC = Pre Compiled Code -*-------------------------------------- -ZS.RT.Ptr1 .EQ ZPBIN -*-------------------------------------- -PCC.FH .PH $2000 -PCC.FH.2000 cld - jmp (PCC.FH.JMP,x) - .DA #$61 6502,Level 1 (65c02) - .DA #1 BIN Layout Version 1 - .DA #0 S.PS.F.EVENT - .DA #0 -PCC.FH.CSSIZE .EQ *-PCC.FH.2000 - .DA $FFFF * Code Size (without Constants) -PCC.FH.DSSIZE .EQ *-PCC.FH.2000 - .DA $FFFF * Data Size - .DA #256 Stack Size - .DA #2 ZP Size - .DA 0 - -PCC.FH.JMP .DA PCC.FH.INIT - .DA PCC.FH.RUN - .DA PCC.FH.DOEVENT - .DA PCC.FH.QUIT -PCC.FH.IDATA .EQ *-PCC.FH.2000 - .DA $FFFF - .DA 0 - -PCC.FH.INIT -* TODO : LoadLib code -PCC.FH.QUIT -* TODO : UnloadLib code -PCC.FH.DOEVENT clc - rts - -* int main(int argc, char *argv[]) ; - -PCC.FH.RUN ldy #S.PS.ARGC - lda (pPS),y - -.1 pha - >SYSCALL ArgV - bcs .2 - - >STYA ZS.RT.Ptr1 - - pla - pha - asl - tay - - lda ZS.RT.Ptr1 - sta (pData),y - - lda ZS.RT.Ptr1+1 - iny - sta (pData),y - - pla - inc - bra .1 - -.2 pla - - >PUSHWI 0 returned int - - lda #0 - >PUSHA - ldy #S.PS.ARGC - lda (pPS),y - >PUSHA int ARGC - >PUSHW pData *char[] ARGV - >DEBUG -PCC.FH.MAIN .EQ *-PCC.FH.2000+1 - jsr $FFFF * jsr main - >PULLA - inc pStack pull returned int - sec - rts - -PCC.FH.SYSCALL jsr A2osX.SYSCALL - bcc .8 - - inc pStack - eor #$ff - inc - >PUSHA int -ERROR code... - ldy #1 - lda #$FF - sta (pStack),y on stack - rts - -.8 - -PCC.FH.CS .EP -PCC.FH.L .EQ *-PCC.FH -*-------------------------------------- -PCC.DEBUG >DEBUG -PCC.DEBUG.L .EQ *-PCC.DEBUG -*-------------------------------------- -PCC.SLEEP >SLEEP -PCC.SLEEP.L .EQ *-PCC.SLEEP -*-------------------------------------- -PCC.ENTER ldx pBase - phx - clc - adc pStack A = Local Size - sta pBase - -PCC.ENTER.L .EQ *-PCC.ENTER -*-------------------------------------- -PCC.LEAVE lda pBase - sta pStack - pla - sta pBase - rts - -PCC.LEAVE.L .EQ *-PCC.LEAVE -*-------------------------------------- -PCC.ADDLOCAL clc - adc pStack - sta pStack - -PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL -*-------------------------------------- -PCC.GETLOCAL clc - adc pBase - tay - lda pBase+1 - -PCC.GETLOCAL.L .EQ *-PCC.GETLOCAL -*-------------------------------------- -PCC.SETRETVALUE ldy #0 -.1 >PULLA - sta (pBase),y - iny - dex - bne .1 - -PCC.SETRETVALUE.L .EQ *-PCC.SETRETVALUE -*-------------------------------------- -PCC.PushXFromYA >STYA ZS.RT.Ptr1 - txa - dec - tay - -.1 lda (ZS.RT.Ptr1),y - >PUSHA - dey - bpl .1 - -PCC.PushXFromYA.L .EQ *-PCC.PushXFromYA -*-------------------------------------- -PCC.PopXToYA >STYA ZS.RT.Ptr1 - - ldy #0 - -.1 >PULLA - sta (ZS.RT.Ptr1),y - iny - dex - bne .1 - -PCC.PopXToYA.L .EQ *-PCC.PopXToYA -*-------------------------------------- -PCC.SetXToYA >STYA ZS.RT.Ptr1 - - ldy #0 - -.1 lda (pStack),y - sta (ZS.RT.Ptr1),y - iny - dex - bne .1 - -PCC.SetXToYA.L .EQ *-PCC.SetXToYA -*-------------------------------------- -PCC.Test0X lda #0 - -.1 ora (pStack) - inc pStack - dex - bne .1 - - tay -.2 bne .2+5 - .HS 4C JMP abs - -PCC.Test0X.L .EQ *-PCC.Test0X -*-------------------------------------- -PCC.SETpBASEp1 lda pBase+1 - sta ZS.RT.Ptr1+1 - -PCC.SETpBASEp1.L .EQ *-PCC.SETpBASEp1 -*-------------------------------------- -PCC.SETpBASEpA clc - adc pBase - sta ZS.RT.Ptr1 - ldy #1 - -PCC.SETpBASEpA.L .EQ *-PCC.SETpBASEpA -*-------------------------------------- -PCC.Deref >PUSHB (ZS.RT.Ptr1),y - >PUSHB (ZS.RT.Ptr1) - -PCC.Deref.L .EQ *-PCC.Deref -*-------------------------------------- -PCC.PUSHpBASEp1 >PUSHB pBase+1 - -PCC.PUSHpBASEp1.L .EQ *-PCC.PUSHpBASEp1 -*-------------------------------------- -PCC.PUSHpBASEpA clc - adc pBase - >PUSHA - -PCC.PUSHpBASEpA.L .EQ *-PCC.PUSHpBASEpA -*-------------------------------------- -PCC.PushFromPtr >PULLW ZS.RT.Ptr1 - -.1 lda (ZS.RT.Ptr1),y - >PUSHA - dey - bpl .1 - -PCC.PushFromPtr.L .EQ *-PCC.PushFromPtr -*-------------------------------------- -PCC.PushConstPAX - clc - adc PCC.FH.2000+PCC.FH.IDATA - tay - txa - adc PCC.FH.2000+PCC.FH.IDATA+1 - >PUSHA - tya - >PUSHA - -PCC.PushConstPAX.L .EQ *-PCC.PushConstPAX +ENV.INCLUDE .AZ "INCLUDE" +ENV.LIB .AZ "LIB" *-------------------------------------- CC.OPChars .AS "!~+-*/%=&|^<>[" CC.OPChars.Cnt .EQ *-CC.OPChars *-------------------------------------- -* Pre Operators: & * + - ! ~ ++ -- -*-------------------------------------- -CC.PREOPS >PSTR "&" ref - >PSTR "*" deref - >PSTR "+" abs - >PSTR "-" change sign - >PSTR "!" logical not - >PSTR "~" bitwise not - >PSTR "++" pre increase - >PSTR "--" pre decrease - .HS 00 -*-------------------------------------- -* Post Operators: ++ -- -*-------------------------------------- -CC.POSTOPS >PSTR "++" - >PSTR "--" - >PSTR "[" - >PSTR "." - >PSTR "->" - .HS 00 -*-------------------------------------- * Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |= *-------------------------------------- CC.AOPS >PSTR "=" @@ -996,6 +625,27 @@ CC.AOPS >PSTR "=" >PSTR "^=" >PSTR "!=" .HS 00 +*-------------------------------------- +* Pre Operators: & * + - ! ~ ++ -- +*-------------------------------------- +CC.PREOPS >PSTR "&" ref + >PSTR "*" deref + >PSTR "+" abs + >PSTR "-" negate + >PSTR "!" logical not + >PSTR "~" bitwise not + >PSTR "++" pre increase + >PSTR "--" pre decrease + .HS 00 +*-------------------------------------- +* Post Operators: ++ -- +*-------------------------------------- +CC.POSTOPS >PSTR "++" + >PSTR "--" + >PSTR "[" + >PSTR "." + >PSTR "->" + .HS 00 *-- Binary ---- H to L precedence ----- * Arithmetic Operators: * / % * Arithmetic Operators: + - @@ -1039,12 +689,17 @@ CC.KW >PSTR "if" >PSTR "for" >PSTR "switch" >PSTR "case" + >PSTR "default" >PSTR "break" >PSTR "continue" >PSTR "return" >PSTR "sizeof" >PSTR "struct" .HS 00 +CC.KW2.IF >PSTR "else" + .HS 00 +CC.KW2.DO >PSTR "while" + .HS 00 *-------------------------------------- CC.SCSPEC >PSTR "auto" >PSTR "register" @@ -1201,10 +856,10 @@ CC.LIBC >PSTR "chtyp" .DA #2,#1,#SYS.StrToL >PSTR "strtoul" .DA #2,#1,#SYS.StrToUL -* >PSTR "realpath" -* .DA #2,#1,#0 -* >PSTR "expand" -* .DA #2,#1,#0 + >PSTR "realpath" + .DA #2,#1,#SYS.RealPath + >PSTR "expand" + .DA #2,#1,#SYS.Expand >PSTR "strlen" .DA #2,#1,#SYS.StrLen >PSTR "strcpy" @@ -1353,6 +1008,8 @@ CC.LIBC >PSTR "chtyp" >PSTR "lrintf" .DA #2,#2,#FPU.QINT .HS 00 +*-------------------------------------- + .INB usr/src/bin/cc.s.pcc *-------------------------------------- .DUMMY .OR 0 @@ -1387,6 +1044,9 @@ CC.hTags .BS 1 CC.hStack .BS 1 CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals + +CC.CPSID .BS 2 AA +CC.CPSPFX .BS 5 X_id\0 *-------------------------------------- CC.hSymBuf .BS 1 CC.SymID .BS 2 diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt index 38552546..af9675fe 100644 --- a/BIN/EDIT.S.CTRL.txt +++ b/BIN/EDIT.S.CTRL.txt @@ -22,14 +22,14 @@ NEW * ^R = Replace... * ^S = Save * ^T = Go To Top of file -******** ^U = FS +******** ^U = FS * ^V = Paste Block * ^W = Erase line * ^X = Cut Block * ^Y = End Of File *-------------------------------------- Ctrl.DEL jsr BUF.ComputeCOffset - + lda BUF.COffset ora BUF.COffset+1 No Backspace possible beq .8 @@ -41,7 +41,7 @@ Ctrl.DEL jsr BUF.ComputeCOffset .8 clc .9 rts *-------------------------------------- -Ctrl.Invalid +Ctrl.Invalid clc Ctrl.Invalid.RTS rts @@ -57,18 +57,18 @@ Ctrl.A >STZ.G bUpdateStatus ldy TmpByte jsr SCRN.GotoXY bcs .9 - + lda (ZPPTR1) beq .8 - + >PUSHW L.MSG.HELPLINE >PUSHW ZPPTR1 >PUSHBI 2 >SYSCALL PrintF bcs .9 - + inc TmpByte - + lda (ZPPTR1) sec adc ZPPTR1 @@ -84,15 +84,15 @@ Ctrl.A >STZ.G bUpdateStatus >PUSHBI 0 jsr SCRN.LineBufSprintf bcs .9 - + jsr SCRN.LineBufOut bcs .9 jsr GetCh bcs .9 - + jmp SCRN.Repaint - + .9 rts *-------------------------------------- Ctrl.C jmp BUF.SelToClipboard @@ -122,7 +122,7 @@ Ctrl.G >LDA.G FileX lda #0 sta (pData),y - + jmp SCRN.UpdateViewPort .8 clc @@ -165,16 +165,16 @@ Ctrl.TAB jsr BUF.InsertTAB lda TmpByte beq .9 nothing to do - + * clc >ADC.G FileX sta (pData),y - + >LDA.G CurX clc adc TmpByte sta (pData),y - + sec >SBC.G ScreenX sec @@ -183,19 +183,19 @@ Ctrl.TAB jsr BUF.InsertTAB jsr SCRN.UpdateCurrentLine bcs .9 - + bra .8 - + .1 lda TmpByte clc >ADC.G ScreenX sta (pData),y jsr SCRN.UpdateViewPort - -.8 jsr SCRN.GotoCurXCurY + +.8 jsr SCRN.GotoCurXCurY jmp SCRN.UpdateStatusBar - + .9 rts *-------------------------------------- Ctrl.LF jsr BUF.GetNextLine @@ -204,7 +204,7 @@ Ctrl.LF jsr BUF.GetNextLine tya Y = line length >CMP.G FileX bcs .2 - + sta (pData),y .2 >INCW.G FileY @@ -234,7 +234,7 @@ Ctrl.VT >LDA.G FileY+1 bcs .2 sta (pData),y - + .2 >DECW.G FileY jmp SCRN.UpdateViewPort @@ -258,22 +258,22 @@ Ctrl.CR lda #C.CR >STZ.G FileX >INCW.G FileY - + >STZ.G CurX >LDA.G CurY >CMP.G ViewPortHm1 bne .1 - + jsr SCRN.LineBufOut Bottom line, CEOL... bcs .99 jmp SCRN.UpdateViewPort ...and scroll - + .1 dec >CMP.G ViewPortHm1 beq .6 No scroll needed - + >PUSHW LineBufPtr >PUSHW L.SEQ.SCROLLCURDN @@ -286,7 +286,7 @@ Ctrl.CR lda #C.CR >PUSHA >PUSHBI 2 jsr SCRN.LineBufSprintf - + .99 bcs .9 >PUSHW LineBufPtr @@ -321,7 +321,7 @@ Ctrl.O ldy #FileY+1 txa sbc #0 bcc .8 - + ldy #FileY+1 sta (pData),y dey @@ -371,7 +371,7 @@ Ctrl.P ldy #FileY+1 dey pla sta (pData),y - + >LDA.G ViewPortH clc >ADC.G ScreenY @@ -380,7 +380,7 @@ Ctrl.P ldy #FileY+1 lda (pData),y adc #0 sta (pData),y - + >STZ.G FileX >STA.G ScreenX @@ -409,16 +409,16 @@ Ctrl.Y jsr BUF.GetNextLine >LDA.G FileY+1 sbc #0 bcs .2 - + >LDA.G FileY tax lda #0 - + .2 >STA.G ScreenY+1 dey txa sta (pData),y - + jmp SCRN.UpdateMainAndStatus *-------------------------------------- Ctrl.F >LDYA L.DLG.FIND @@ -427,10 +427,10 @@ Ctrl.F >LDYA L.DLG.FIND cmp #C.CR bne .8 - + .8 jsr DLG.Close - + clc rts *-------------------------------------- @@ -443,7 +443,7 @@ Ctrl.R clc *-------------------------------------- Ctrl.Q >LDA.G bUnSaved beq .8 - + >STZ.G bUpdateStatus jsr SCRN.ResetStatusBar @@ -453,28 +453,28 @@ Ctrl.Q >LDA.G bUnSaved >PUSHBI 0 jsr SCRN.LineBufSprintf bcs .9 - + jsr SCRN.LineBufOut bcs .9 .1 jsr GetCh bcs .9 - + cmp #'a bcc .2 cmp #'z'+1 bcs .2 - + eor #$20 - + .2 cmp #'Y' beq .8 - + cmp #'N' beq .80 - + bra .1 - + .8 lda #$ff >STA.G bExit @@ -488,16 +488,16 @@ Ctrl.S >LDYA L.DLG.SAVE jsr DLG.Run pha - + jsr DLG.Close - + pla cmp #C.CR bne .8 - + jsr FILE.Save bcc .1 - + pha jsr SCRN.ResetStatusBar @@ -508,22 +508,22 @@ Ctrl.S >LDYA L.DLG.SAVE bra .2 .1 jsr SCRN.ResetStatusBar - + >PUSHW LineBufPtr >PUSHW L.MSG.STATUSBAR.S >LDA.G hFileName >SYSCALL GetMemPtr >PUSHYA - + >PUSHBI 2 - + .2 jsr SCRN.LineBufSprintf jsr SCRN.LineBufOut bcs .9 .8 jsr SCRN.UpdateTopBar - + jmp SCRN.GotoCurXCurY .9 rts @@ -554,6 +554,7 @@ Ctrl.FS jsr BUF.GetLine *-------------------------------------- Ctrl.V jsr BUF.InsertClipboard bcs .9 + jsr SCRN.UnSaved jmp SCRN.UpdateMainAndStatus @@ -572,8 +573,10 @@ Ctrl.W jsr BUF.ComputeCOffset Y=line len ply Get back line len clc lda (BufPtr),y - beq .1 last line \0 ending + beq .1 last line \0 ending + sec delete CR + .1 tya adc BUF.LOffset @@ -592,11 +595,13 @@ Ctrl.X jsr BUF.SelToClipboard Ctrl.D jsr BUF.DelSel bcs Ctrl.D.8 + jsr BUF.ResetSel jsr SCRN.CursorAdjust + jsr SCRN.UpdateViewPort jsr SCRN.UnSaved will update TopBar jmp SCRN.UpdateMainAndStatus - + Ctrl.D.8 clc rts *-------------------------------------- @@ -605,6 +610,7 @@ Ctrl.Z jsr BUF.ComputeCOffset lda BUF.COffset eor FileLen bne .1 + lda BUF.COffset+1 eor FileLen+1 beq Ctrl.D.8 @@ -619,11 +625,11 @@ Ctrl.Z jsr BUF.ComputeCOffset >CMP.G ViewPortHm1 beq .8 Bottom line, all done - + dec >CMP.G ViewPortHm1 beq .8 No scroll needed - + >PUSHW L.SEQ.SCROLLCURUP >LDA.G CurY inc @@ -638,20 +644,20 @@ Ctrl.Z jsr BUF.ComputeCOffset jsr SCRN.ResetScrollRgn bcs .9 - + jsr SCRN.UpdateCurrentLine bcs .9 jsr SCRN.UpdateLast bcs .9 - + .8 jsr SCRN.UpdateCurrentLine bcs .9 .80 jsr SCRN.UnSaved jsr SCRN.GotoCurXCurY jmp SCRN.UpdateStatusBar -.9 rts +.9 rts *-------------------------------------- MAN SAVE usr/src/bin/edit.s.ctrl diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt index a17ee051..04784420 100644 --- a/BIN/EDIT.S.SCRN.txt +++ b/BIN/EDIT.S.SCRN.txt @@ -474,13 +474,20 @@ SCRN.ResetStatusBar *-------------------------------------- SCRN.CursorAdjust .1 jsr BUF.ComputeCOffset - bcc .8 - >DECW.G FileY - >STZ.G FileX + bcc .2 Y = linelen + >DECW.G FileY +* >STZ.G FileX bra .1 -.8 rts +.2 tya + >CMP.G FileX + bcs .8 + + >STA.G FileX + +.8 clc + rts *-------------------------------------- SCRN.GotoCurXCurY ldy #CurX diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index 944c89bd..3061674f 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -1,11 +1,11 @@ NEW AUTO 3,1 *-------------------------------------- -IO.D2.SeekTimeR .EQ 42 LIBBLKDEV Recalibration -IO.D2.SeekTimeF .EQ 56 LIBBLKDEV Track Formatter -IO.D2.SeekTimeB .EQ 56 LIBBLKDEV Boot Block -IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial -IO.D2.SeekTimeI .EQ 14 ProDOS.FX increment -> until > 128 +IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration +IO.D2.SeekTimeF .EQ 75 LIBBLKDEV Track Formatter +IO.D2.SeekTimeB .EQ 52 LIBBLKDEV Boot Block +IO.D2.SeekTimeP .EQ 32 ProDOS.FX initial +IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 *-------------------------------------- IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0On .EQ $C081 diff --git a/INCLUDE/stdio.h.txt b/INCLUDE/stdio.h.txt index 044d4b7f..0d9d280e 100644 --- a/INCLUDE/stdio.h.txt +++ b/INCLUDE/stdio.h.txt @@ -16,7 +16,7 @@ NEW #define SEEK_END 2 short int fopen(const char*,short int,short int,int); -int fastcall fclose(short int); +short int fastcall fclose(short int); int fread(short int,void*,int); int fwrite(short int,const void*,int); diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index 55dab790..2923d8a7 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -30,19 +30,19 @@ D2.Recalibrate >PULLB D2.DrvSlt lda #IO.D2.SeekTimeR jsr D2.Wait100usecA - lda #168 41 x 4 Qtracks + lda #160 40 x 4 Qtracks + + php + sei .1 dec dec pha - and #6 - ora D2.Slotn0 phy plx - tay - lda IO.D2.Ph0On,y + jsr D2.SeekPhOnY lda #IO.D2.SeekTimeR jsr D2.Wait100usecA @@ -59,9 +59,12 @@ D2.Recalibrate >PULLB D2.DrvSlt lda IO.D2.Ph0Off,y - jsr D2.Wait25600usec + plp + +* clc + + jmp D2.Wait25600usec - clc .9 rts */-------------------------------------- *\-------------------------------------- @@ -105,30 +108,30 @@ D2.MoveHead >PULLB D2.TargetQTrack D2.MoveHead.SEI lda D2.CurrentQTrack - bit #1 + bit #1 A = Current QT beq .2 we are on 0/4 or 2/4 track pha cmp D2.TargetQTrack we are on 1/4 or 3/4 track bcc .1 if CC, C < T, must move in - + inc move out: X = Ph(N+1) - + .1 jsr D2.SeekPhOnY move in : X = Ph(N) tya tax pla - + bcs .2 if CS, C > T, must move out inc move in : Y = Ph(N+1) .2 jsr D2.SeekPhOnY move out: Y = Ph(N) - bra .9 no wait + bra .9 Ph ON to go to 0/4 or 2/4, no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -156,6 +159,7 @@ D2.MoveHead.SEI lda D2.CurrentQTrack .6 jsr D2.SeekPhOnY now X and Y on .8 lda #IO.D2.SeekTimeF + jsr D2.Wait100usecA ...wait... .9 lda D2.CurrentQTrack @@ -166,13 +170,15 @@ D2.MoveHead.SEI lda D2.CurrentQTrack jsr D2.Wait25600usec + lda IO.D2.Ph0Off,y + bcc .10 + + clc lda IO.D2.Ph0Off,x - - clc -.10 lda IO.D2.Ph0Off,y +.10 jsr D2.Wait25600usec rts *-------------------------------------- @@ -444,7 +450,7 @@ D2.Wait25600usec D2.Wait100usecA phx -.1 ldx #20 (2) +.1 ldx #19 (2) .2 dex (2) bne .2 (3) diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 3b152c90..780292cf 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -54,7 +54,7 @@ XRW.START cld $D8 to flag language card bank 1 (main) *-------------------------------------- XRW.Blk2TS lda bloknml sta XRW.ReqTrack - + and #7 cmp #4 php @@ -63,9 +63,9 @@ XRW.Blk2TS lda bloknml plp rol sta XRW.ReqSector - + lda bloknml+1 - + ldx #3 .1 lsr @@ -165,7 +165,7 @@ XRW.Cmd lda A4L get command # jsr XRW.Recalibrate bcc .3 - + bcs XRW.E.IO .4 inc buf+1 @@ -207,7 +207,7 @@ XRW.SectorIO bit XRW.bWrite .1 stz XRW.RetryCnt -.2 jsr XRW.ReadAddr +.2 jsr XRW.ReadAddr (..14) bcs .3 (2) lda XRW.AddrField.S (4) @@ -390,17 +390,18 @@ XRW.TestWP ldx A2L * writes data from nbuf1 and buf. first nbuf2, high to low then direct * from (buf), low to high. assumes 1 usec cycle time. self modified code !! * -* on entry: x = slotnum times 16 +* on entry: x = slotnum times 16 (35us since read $DE) *-------------------------------------- .LIST ON -XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE +XRW.Write lda IO.D2.ReadProt,x (4) PREWRITE MODE .LIST OFF - bit IO.D2.ReadMode,x (4) - - lda #$FF (2) + lda IO.D2.ReadMode,x (4) + + jsr XRW.Write.RTS (12) nop (2) - nop (2) + + lda #$FF (2) sta IO.D2.WriteMode,x (5) goto write mode ora IO.D2.WShift,x (4) @@ -408,7 +409,7 @@ XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE ldy nbuf2 (4) sty pcl (3) - ldy #5 (2) + ldy #6 (2) nop (2) .1 pha (3) exact timing. @@ -535,15 +536,12 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib bpl .1 (3) if not. bmi .2 (3) + .2 nop (2) tya (2) Y = $FF from DEY BMI jsr wnibl (11..10) write turn off byte. -* jsr XRW.Write.RTS (12) -* jsr XRW.Write.RTS (12) -* nop (2) - XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode lda IO.D2.WShift,x (4) to read mode. @@ -567,11 +565,11 @@ XRW.Wait25600usec .HS 2C BIT ABS XRW.Wait100usec lda #1 - + XRW.Wait100usecA phx -.1 ldx #20 (2) +.1 ldx #17 (2) .2 dex (2) bne .2 (3) @@ -663,14 +661,13 @@ XRW.ReadAddr ldy #$FC tay if final checksum non-zero, bne .99 (2) then error. - clc (2) - .9 lda IO.D2.RData,x (4) bpl .9 (2) eor #$DE (2) bne .99 (2) + clc (2) rts (6) .99 sec @@ -692,7 +689,7 @@ XRW.TrackSelect lda #2 jsr XRW.Recalibrate bcc .1 - + rts *-------------------------------------- .4 ldx XRW.UnitIndex @@ -713,15 +710,15 @@ XRW.TrackSelect lda #2 lda XRW.ReqTrack and #1 - + rol A = 0/2 - + ora A2L tay y = n0/n2 - + lda IO.D2.Ph0On,y lda IO.D2.Ph0On+4,y - + jsr XRW.Wait100usec lda IO.D2.Ph0Off,y @@ -748,7 +745,7 @@ XRW.TrackSelect lda #2 sta XRW.SeekTime sta XRW.D2SeekTime-1,x - + .7 ldy XRW.D2Trk-1,x From actual Pos... lda XRW.ReqTrack ....to Req jsr XRW.SeekYA X = XRW.UnitIndex @@ -762,12 +759,12 @@ XRW.TrackSelect.RTS XRW.Recalibrate sec dec XRW.RecalibrateCnt beq XRW.TrackSelect.RTS - + ldx XRW.UnitIndex - ldy #41 from 41... (4/4) + ldy #40 from 40... (4/4) lda #0 ....to 0 - sta XRW.D2VolNum-1,x reset volnum for seeking 41 4/4 tracks + sta XRW.D2VolNum-1,x reset volnum for seeking 40->0 4/4 tracks *-------------------------------------- XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end @@ -802,7 +799,7 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end .2 jsr XRW.SeekPhOnY move out: Y = Ph(N) - bra .9 no wait + bra .9 Ph ON to go to 0/4 or 2/4, no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -819,17 +816,18 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : PhX Off bra .8 go wait.... - + .5 phy we must go on 1/4 or 3/4 plx Y already ON, -> X for Ph0Off,x - + bcs .6 if CS, C > T, must move out inc CC: C < T, ON next PH .6 jsr XRW.SeekPhOnY now X and Y on -.8 lda #IO.D2.SeekTimeF XRW.SeekTime +.8 lda XRW.SeekTime + jsr XRW.Wait100usecA ...wait... .9 lda XRW.CurrentQTrack @@ -837,18 +835,18 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end bne .3 lsr CS if X,Y on - + jsr XRW.Wait25600usec + lda IO.D2.Ph0Off,y + bcc .10 - lda IO.D2.Ph0Off,x - clc Exit wit CC (recalibrate) - -.10 lda IO.D2.Ph0Off,y - rts + lda IO.D2.Ph0Off,x + +.10 rts *-------------------------------------- XRW.SeekPhOnY and #6 ora A2L @@ -857,7 +855,7 @@ XRW.SeekPhOnY and #6 rts *-------------------------------------- * In: -* A = Logical Track 0 -> 159, +* A = Logical Track 0 -> 159, * X = XRW.UnitIndex * D2VolNum : d0000sss * Out: @@ -872,8 +870,8 @@ XRW.Trk2Qtrk sta pch asl asl rts - -.1 bpl .2 + +.1 bpl .2 cmp #$85 bcs .10 > 192 ? must be a buggy 254 @@ -882,16 +880,16 @@ XRW.Trk2Qtrk sta pch .2 phx and #%00000111 stepping tax - + lda #0 clc - + .3 adc pch dex bne .3 - + plx - + .8 rts *-------------------------------------- * preniblize subroutine (16 sector format) diff --git a/SHARED/X.BB.FX2.S.txt b/SHARED/X.BB.FX2.S.txt index 49a8d9be..d837fd70 100644 --- a/SHARED/X.BB.FX2.S.txt +++ b/SHARED/X.BB.FX2.S.txt @@ -262,29 +262,29 @@ BB.FX2.SeekReadD2 cmp BB.TargetQTrack beq BB.FX2.ReadSectD2 - bit #1 + bit #1 A = Current QT beq .2 we are on 0/4 or 2/4 track - + pha bcc .1 if CC, C < T, must move in - - inc -.1 jsr BB.FX2.SeekPhOnY move in : X = Ph(N) - + inc move out: X = Ph(N+1) + +.1 jsr BB.FX2.SeekPhOnY move in : X = Ph(N) + tya tax - + pla - + bcs .2 if CS, C > T, must move out inc move in : Y = Ph(N+1) .2 jsr BB.FX2.SeekPhOnY move out: Y = Ph(N) - bra .9 Ph ON to go to 0/4 or 2/4, then wait + bra .9 Ph ON to go to 0/4 or 2/4, no wait *-------------------------------------- .3 bcs .4 if CS, C > T, must move out @@ -312,6 +312,7 @@ BB.FX2.SeekReadD2 .6 jsr BB.FX2.SeekPhOnY now X and Y on .8 lda #IO.D2.SeekTimeB + jsr BB.Wait100usecA ...wait... .9 lda BB.CurrentQTrack @@ -323,11 +324,15 @@ BB.FX2.SeekReadD2 lda #0 jsr BB.Wait100usecA + lda IO.D2.Ph0Off,y + bcc .10 + clc + lda IO.D2.Ph0Off,x -.10 lda IO.D2.Ph0Off,y +.10 *-------------------------------------- BB.FX2.ReadSectD2 ldx ROM.D2.Slotn0 @@ -455,7 +460,7 @@ goseek jmp BB.FX2.SeekReadD2 *-------------------------------------- BB.Wait100usecA phx (3) -.1 ldx #20 (2) +.1 ldx #19 (2) .2 dex (2) bne .2 (3) diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 3f7a4d75..a087ef50 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -234,6 +234,7 @@ K.FGetS ldy #3 inc ZPPtr1 bne .4 + inc ZPPtr1+1 bne .4 @@ -262,6 +263,7 @@ K.FGetS ldy #3 .8 lda #0 sta (ZPPtr2) terminate string + tay return NULL (TODO: return s) clc .9 >RET 5 */-------------------------------------- @@ -372,23 +374,23 @@ K.FOpen jsr PFT.CheckPath4 bcs K.FOpen.99 ldx IO.hFILE - + lda (pFD) bne K.FOpen.8 - + K.FOpen.REGDIR >LDYAI K.Buf256 - >SYSCALL2 StrDup + >SYSCALL2 StrDup bcs K.FOpen.90 - + txa ldx IO.hFILE sta hFDs.hName-1,x - + K.FOpen.8 inc hFDs.oCnt-1,x txa -* clc +* clc rts - + K.FOpen.90 pha jsr UNISTD.Close pla @@ -416,31 +418,31 @@ K.FClose jsr PFT.CheckNodeA ldx IO.hFILE dec hFDs.oCnt-1,x bne .8 - + lda hFDs.hName-1,x its a DEV, don't clear FD beq .8 stz hFDs.hName-1,x jsr K.FreeMem - + lda (pFD) tay - + ldx IO.hFILE lda hFDs-1,x beq .8 - + stz hFDs-1,x - + cpy #S.FD.T.DSOCK SOCKS will free FDs beq .8 - + cpy #S.FD.T.SSOCK beq .8 jmp K.FreeMem - + .8 clc rts */-------------------------------------- @@ -534,15 +536,18 @@ K.FSeek ldy #5 jsr PFT.CheckNodeY bcc .11 - >RET 5 + >RET 6 -.11 lda (pFD) - bne STDIO.IOERR - - >PULLA whence +.11 >PULLA whence tax - >PULLL ACC32 + >PULLL ACC32 offset + + inc pStack discard hFile + + lda (pFD) + bne STDIO.IOERR + cpx #SEEK.END beq .30 @@ -582,10 +587,13 @@ K.FSeek ldy #5 .82 >MLICALL MLISETMARK bcc .9 + cmp #MLI.E.BEYEOF bne .9 + >MLICALL MLISETEOF bcc .82 + .9 rts .98 lda #E.BADARG