CC, Bugfix in EDIT & STDIO

This commit is contained in:
burniouf 2022-08-20 16:37:37 +02:00
parent 3d98f90fb4
commit fdd4c69416
26 changed files with 2960 additions and 1756 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -22,19 +22,19 @@ BSX.Recalibrate ldy BSX.Slotn0
lda #IO.D2.SeekTimeR lda #IO.D2.SeekTimeR
jsr BSX.Wait100usecA jsr BSX.Wait100usecA
lda #168 lda #160
php
sei
.1 dec .1 dec
dec dec
pha pha
and #6
ora BSX.Slotn0
phy phy
plx plx
tay jsr BSX.SeekPhOnY
lda IO.D2.Ph0On,y
lda #IO.D2.SeekTimeR lda #IO.D2.SeekTimeR
jsr BSX.Wait100usecA jsr BSX.Wait100usecA
@ -51,6 +51,8 @@ BSX.Recalibrate ldy BSX.Slotn0
lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
plp
jmp BSX.Wait25600usec jmp BSX.Wait25600usec
*-------------------------------------- *--------------------------------------
BSX.MoveHead sta BSX.TargetQTrack BSX.MoveHead sta BSX.TargetQTrack
@ -80,7 +82,7 @@ BSX.MoveHead sta BSX.TargetQTrack
.2 jsr BSX.SeekPhOnY move out: Y = Ph(N) .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 .3 bcs .4 if CS, C > T, must move out
@ -119,13 +121,15 @@ BSX.MoveHead sta BSX.TargetQTrack
jsr BSX.Wait25600usec jsr BSX.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .10 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 BSX.SeekPhOnY and #6
ora BSX.Slotn0 ora BSX.Slotn0
@ -139,7 +143,7 @@ BSX.Wait25600usec
BSX.Wait100usecA BSX.Wait100usecA
phx phx
.1 ldx #20 (2) .1 ldx #19 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)

View File

@ -3,283 +3,127 @@ NEW
*-------------------------------------- *--------------------------------------
CODE.Init stz ZPCCConst CODE.Init stz ZPCCConst
stz ZPCCConst+1 stz ZPCCConst+1
stz bInitCode
>LDYAI PCC.FH.CS >LDYAI PCC.FH.CS
>STYA ZPCCCode >STYA ZPCCCode
>LDYAI 20 char *ARGV[10] >LDYAI 20 char *ARGV[10]
>STYA ZPCCData >STYA ZPCCData
lda #'_'
>STA.G CC.CPSPFX+1
lda #'A'
>STA.G CC.CPSID
iny CC.CPSID+1
sta (pData),y
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CODE.Quit >LDA.G CC.hOutFile CODE.Quit >LDA.G CC.hOutFile
beq .8 beq .8
>SYSCALL FClose >SYSCALL FClose
.8 clc .8 clc
rts 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 CODE.nAddLocal eor #$FF
inc inc
CODE.AddLocal pha
lda #$A9 LDA #imm
jsr CODE.EmitByte
pla
jsr CODE.EmitByte
ldx #PCC.ADDLOCAL.L CODE.AddLocal jsr CODE.LDAI
ldy #0 bcs .9
.1 lda PCC.ADDLOCAL,y >LDYA L.PCC.ADDLOCAL
jsr CODE.EmitByte jmp CODE.EmitPCC
iny
dex
bne .1
rts .9 rts
*--------------------------------------
CODE.GetLocal lda #$A9 LDA #imm
jsr CODE.EmitByte
tya
eor #$FF
inc
jsr CODE.EmitByte
ldx #PCC.GETLOCAL.L
ldy #0
.1 lda PCC.GETLOCAL,y
jsr CODE.EmitByte
iny
dex
bne .1
rts
*-------------------------------------- *--------------------------------------
CODE.SetRetValue CODE.SetRetValue
jsr CODE.LDXI jsr CODE.LDXI
bcs .9
ldx #PCC.SETRETVALUE.L >LDYA L.PCC.SetRetValue
ldy #0 jmp CODE.EmitPCC
.1 lda PCC.SETRETVALUE,y .9 rts
jsr CODE.EmitByte
iny
dex
bne .1
rts
*-------------------------------------- *--------------------------------------
CODE.Leave ldx #PCC.LEAVE.L CODE.PUSHAXI pha
ldy #0 txa
jsr CODE.PUSHI
.1 lda PCC.LEAVE,y bcs CODE.LDAXI.RTS
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
pla 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 CODE.PUSHI pha
lda #$A9 LDA #imm lda #$A9 LDA #imm
jsr CODE.EmitByte jsr CODE.EmitByte
bcs CODE.LDAXI.RTS
pla pla
jsr CODE.EmitByte jsr CODE.EmitByte
bcs CODE.LDAXI.RTS
bra CODE.PUSHA bra CODE.PUSHA
*-------------------------------------- *--------------------------------------
CODE.LDYAI pha CODE.LDYAI pha
lda #$A0 LDY #imm lda #$A0 LDY #imm
jsr CODE.EmitByte jsr CODE.EmitByte
bcs CODE.LDAXI.RTS
tya tya
jsr CODE.EmitByte jsr CODE.EmitByte
bcs CODE.LDAXI.RTS
lda #$A9 LDA #imm lda #$A9 LDA #imm
jsr CODE.EmitByte jsr CODE.EmitByte
bcs CODE.LDAXI.RTS
pla pla
jmp CODE.EmitByte 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 CODE.LDXI lda #$A2 LDX #imm
jsr CODE.EmitByte jsr CODE.EmitByte
bcs .9
txa txa
jmp CODE.EmitByte jmp CODE.EmitByte
.9 rts
*-------------------------------------- *--------------------------------------
CODE.LDAI pha CODE.LDAI pha
lda #$A9 LDA #imm lda #$A9 LDA #imm
jsr CODE.EmitByte jsr CODE.EmitByte
bcs .9
pla pla
jmp CODE.EmitByte jmp CODE.EmitByte
.9 plx
rts
*-------------------------------------- *--------------------------------------
CODE.PUSHYA jsr CODE.PUSHA CODE.PUSHYA jsr CODE.PUSHA
lda #$AA TYA lda #$98 TYA
jsr CODE.EmitByte jsr CODE.EmitByte
*-------------------------------------- *--------------------------------------
CODE.PUSHA lda #$C6 DEC zp CODE.PUSHA lda #$C6 DEC zp
@ -315,27 +159,57 @@ CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR .....
tya tya
bra CODE.EmitByte bra CODE.EmitByte
*-------------------------------------- *--------------------------------------
CODE.SYSCALL lda #$A2 LDX #imm CODE.SYSCALL jsr CODE.LDXI
jsr CODE.EmitByte bcs .9
txa
jsr CODE.EmitByte
lda #$20 JSR lda #$20 JSR
jsr CODE.EmitByte jsr CODE.EmitByte
bcs .9
lda #A2osX.SYSCALL lda #A2osX.SYSCALL
jsr CODE.EmitByte jsr CODE.EmitByte
bcs .9
lda /A2osX.SYSCALL lda /A2osX.SYSCALL
bra CODE.EmitByte bra CODE.EmitByte
.9 rts
*-------------------------------------- *--------------------------------------
CODE.FPUCALL lda #$A2 LDX #imm CODE.FPUCALL jsr CODE.LDXI
jsr CODE.EmitByte bcs .9
txa
jsr CODE.EmitByte
lda #$20 JSR lda #$20 JSR
jsr CODE.EmitByte jsr CODE.EmitByte
bcs .9
lda #A2osX.FPUCALL lda #A2osX.FPUCALL
jsr CODE.EmitByte jsr CODE.EmitByte
bcs .9
lda /A2osX.FPUCALL lda /A2osX.FPUCALL
bra CODE.EmitByte 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... CODE.EmitByte clc if Pass 1...
bit bPass2 bit bPass2
@ -344,12 +218,12 @@ CODE.EmitByte clc if Pass 1...
phx phx
phy phy
tax tax
>PUSHB.G CC.hOutFile >PUSHB.G CC.hOutFile
txa txa
>PUSHA >PUSHA
>SYSCALL fputc >SYSCALL fputc
ply ply
plx plx
@ -367,7 +241,7 @@ CODE.EmitDATA clc
phx phx
phy phy
tax tax
>PUSHB.G CC.hOutFile >PUSHB.G CC.hOutFile
txa txa
>PUSHA >PUSHA
@ -385,9 +259,9 @@ CODE.EmitDATA clc
CODE.CSSelect clc CODE.CSSelect clc
bit bPass2 bit bPass2
bpl .8 bpl .8
>PUSHB.G CC.hOutFile >PUSHB.G CC.hOutFile
>PUSHWI 0 >PUSHWZ
lda ZPCCCode+1 lda ZPCCCode+1
sec sec
sbc #$20 sbc #$20
@ -404,8 +278,7 @@ CODE.DSSelect clc
bpl .8 bpl .8
>PUSHB.G CC.hOutFile >PUSHB.G CC.hOutFile
>PUSHWI 0 >PUSHWZ
lda ZPCCConst lda ZPCCConst
clc clc
adc PCC.FH+PCC.FH.IDATA adc PCC.FH+PCC.FH.IDATA

View File

@ -40,7 +40,7 @@ CC.CORE.Init >SYSCALL SListNew
* clc * clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CC.CORE.Quit jsr CS.RUN.FClose CC.CORE.Quit jsr CC.FIO.FClose
bne CC.CORE.Quit bne CC.CORE.Quit
ldy ScopeIdx ldy ScopeIdx
@ -78,9 +78,11 @@ CC.CORE.Quit jsr CS.RUN.FClose
>LDA.G CC.hStack >LDA.G CC.hStack
.7 beq CC.Quit.RTS .7 beq .8
>SYSCALL FreeMem >SYSCALL FreeMem
CC.Quit.RTS rts
.8 rts
*-------------------------------------- *--------------------------------------
CC.CompileFile >SLEEP CC.CompileFile >SLEEP
@ -98,7 +100,7 @@ CC.CompileFile >SLEEP
cmp #3 Ctrl-C cmp #3 Ctrl-C
beq .9 beq .9
.1 jsr CS.RUN.FGetS .1 jsr CC.FIO.FGetS
bcs .9 bcs .9
jsr CC.CompileLine jsr CC.CompileLine
@ -114,176 +116,143 @@ CC.CompileFile >SLEEP
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CC.CompileLine jsr CC.GetCharNB CC.CompileLine jsr CC.GetCharNB
bcs CC.Quit.RTS bcs .9
CC.CompileLine.1 cmp #C.CR EOL....
cmp #C.CR empty line.... beq .8
beq .2
cmp #'/' cmp #'#' directive ?
bne .3 comments ... bne .1
jmp CC.Comments
.2 clc
rts
.3 cmp #'#' directive ?
bne .4
jmp CC.DIR jmp CC.DIR
.4 cmp #'}' End of CPStmt ? .1 cmp #'/'
bne .10 bne .2 comments ...
jmp CC.Comments
.2 cmp #'}' End of CPStmt ?
bne .3
jsr CC.GetNextCharNB Skip '}' jsr CC.GetNextCharNB Skip '}'
jmp CC.STMT.CPStmt.END jsr CC.STMT.CPStmt.END
*-------------------------------------- bcs .9
.10 jsr CC.IsLetter
bcc .20
* 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 jsr CC.LookupID
bcs .50 bcs .10 not an internal CC keyword....
jsr CC.TYPE.Decl txa
bcs .59 >STA.G CC.CmdSave
jmp (J.CC.KW,x)
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
*-------------------------------------- *--------------------------------------
* Declaration : int var or int func()
* TODO: AOPS
*-------------------------------------- *--------------------------------------
.26 cmp #'=' .10 >LDYA L.CC.TYPEQUAL
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
jsr CC.LookupID jsr CC.LookupID
bcs .6 not an internal CC keyword.... bcs .6
jsr CC.KW.JMP jmp CC.DECL
.59 bcs .9
bra .8
*-------------------------------------- *--------------------------------------
.6 jsr CC.SYM.Lookup var= or func() ? * Statement : ++var, var=, 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
*-------------------------------------- *--------------------------------------
.60 jsr CC.GetCharNB var = ? .6 jmp CC.STMT
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
*-------------------------------------- *--------------------------------------
.68 jsr CC.GetCharNB
cmp #';'
beq .8
.99 lda #E.CSYN .99 lda #E.CSYN
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
.8 jsr CC.GetNextCharNB Skip ; CC.CORE.SetVar stz ExpState
bcs .9
cmp #C.CR jsr CC.EXP.POSTOPS var++, var[0]... ?
beq .80 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 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 #'/' cmp #'/'
bne .90 bne .90
@ -304,10 +273,32 @@ CC.SkipLine jsr CC.GetNextChar
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CC.LookupID >STYA ZPLookupPtr CC.LookupID >STYA ZPLookupPtr
jsr CC.GetIDLen jsr CC.GetIDLen
bra CC.Lookup 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 CC.LookupOP >STYA ZPLookupPtr
jsr CC.GetOPLen jsr CC.GetOPLen
@ -342,7 +333,7 @@ CC.Lookup phy Y = len
lda ZPLookupPtr+1 lda ZPLookupPtr+1
adc #0 adc #0
clc Y,A = F() def, X = F() index clc Y,A = F() def, X = F() index
.8 rts rts
.4 inx .4 inx
inx inx
@ -350,32 +341,11 @@ CC.Lookup phy Y = len
jsr CC.ZPLookupPtrAddAp1 jsr CC.ZPLookupPtrAddAp1
bra .1 bra .1
.9 pla .9 ldx #$FF
pla
sec sec
rts 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 CC.ZPLookupPtrAddAp1
sec sec
adc ZPLookupPtr adc ZPLookupPtr
@ -400,6 +370,28 @@ CC.GetDefine >LDA.G CC.hDefines
.9 rts .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 * CT Stack
*-------------------------------------- *--------------------------------------
CC.PushTQ ldy #SYM.Q CC.PushTQ ldy #SYM.Q
@ -455,13 +447,19 @@ CC.PopYA ldy CStackPtr
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.Pop ldy CStackPtr CC.Pop jsr CC.Get
inc CStackPtr
* clc
.9 rts
*--------------------------------------
CC.Get ldy CStackPtr
beq .9 beq .9
lda (ZPCCStack),y lda (ZPCCStack),y
inc CStackPtr
clc clc
rts rts
@ -521,6 +519,32 @@ CC.GetNextCharNB
CC.GetNextCharNB.RTS CC.GetNextCharNB.RTS
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 CC.CheckSpace jsr CC.GetChar
bcs .90 bcs .90
@ -578,10 +602,10 @@ CC.GetChar lda (ZPLineBufPtr)
CC.IsEndArg cmp #']' CC.IsEndArg cmp #']'
beq .8 beq .8
cmp #';' cmp #','
beq .8 beq .8
cmp #',' cmp #';'
beq .8 beq .8
cmp #')' cmp #')'

View File

@ -1,68 +1,69 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
CC.DECL jsr CC.IsLetter * X = type qual
bcs .80 *--------------------------------------
CC.DECL jsr CC.TYPE.Decl
.10 >LDYA L.CC.SCSPEC bcs .9
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
ldx #SYM.SC.STATIC Y,A = Type/Qual ldx #SYM.SC.STATIC Y,A = Type/Qual
bit bLocalScope bit bLocalScope
bpl .21 bpl .25
bit #SYM.Q.FUNC someone wants to add a local f() ? bit #SYM.Q.FUNC someone wants to add a local f() ?
bne .90 sec
bne .29
ldx #SYM.SC.AUTO 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 bcs .99
jsr CC.SYM.Store cmp #';'
bcs .99 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 '=' jsr CC.GetNextCharNB skip '='
bcs .99 bcs .99
jsr CC.SYM.GetTypeInYA expected T/Q jsr CC.SYM.GetTypeInYA expected T/Q
jsr CC.EXP.Eval jsr CC.EXP.Eval
bcs .99 bcs .9
jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var jsr CC.SYM.GetAddr1
.29 bcs .99 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 clc
rts rts
*--------------------------------------
.80 bit #$60 .99 lda #E.CSYN
clc
rts
.90 lda #E.CSYN
sec sec
.99 rts .9 rts
*-------------------------------------- *--------------------------------------
CC.SCSPEC.AUTO CC.SCSPEC.AUTO
CC.SCSPEC.REGISTER CC.SCSPEC.REGISTER
@ -71,9 +72,9 @@ CC.SCSPEC.EXTERN
CC.SCSPEC.TYPEDEF CC.SCSPEC.TYPEDEF
.99 lda #E.CSYN .98 lda #E.CSYN
sec sec
.9 rts .99 rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/cc.s.decl SAVE usr/src/bin/cc.s.decl

View File

@ -134,7 +134,7 @@ CC.DIR.INCLUDE lda #0 >STZ.G PathBuf
rts rts
.5 >LDYA pData .5 >LDYA pData
jmp CS.RUN.FOpen jmp CC.FIO.FOpen
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/cc.s.dir SAVE usr/src/bin/cc.s.dir

View File

@ -10,7 +10,12 @@ NEW
CC.EXP.Eval00 lda #0 CC.EXP.Eval00 lda #0
tay 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 phx
ldx ZPPtr2+1 ldx ZPPtr2+1
phx phx
@ -22,7 +27,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
>STYA ZPPtr2 >STYA ZPPtr2
stz ZPPtr1
stz ZPPtr1+1
lda #$ff no previous OP lda #$ff no previous OP
sta ZPPtr3+1 no PREOPS
pha pha
*-------------------------------------- *--------------------------------------
.10 jsr CC.GetCharNB .10 jsr CC.GetCharNB
@ -60,7 +69,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
.19 jmp CC.EXP.Eval.ESYN .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 bcs .29
jsr CC.IsLetter define, f() or Var ? jsr CC.IsLetter define, f() or Var ?
@ -77,10 +90,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
and #SYM.Q.FUNC and #SYM.Q.FUNC
bne .21 bne .21
jsr CC.EXP.CheckGetSymType jsr CC.EXP.GetVar Check T/Q & Get value on stack
bcs .29
jsr CC.EXP.Get Check T/Q & Get value on stack
bcs .29 bcs .29
jsr CC.SYM.LookupFree jsr CC.SYM.LookupFree
@ -116,7 +126,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
.24 cmp #'"' String literal .24 cmp #'"' String literal
bne CC.EXP.Eval.ESYN bne CC.EXP.Eval.ESYN
jsr CC.AddContCharP jsr CC.EXP.AddConstCharP
.29 bcs CC.EXP.Eval.Err .29 bcs CC.EXP.Eval.Err
*-------------------------------------- *--------------------------------------
.30 jsr CC.GetCharNB .30 jsr CC.GetCharNB
@ -157,6 +167,7 @@ CC.EXP.Eval.End plx any OP on stack ?
bmi CC.EXP.Eval.Exit bmi CC.EXP.Eval.Exit
>LDYA ZPPtr2 Var Type >LDYA ZPPtr2 Var Type
jsr CC.EXP.BOPS jsr CC.EXP.BOPS
bcc CC.EXP.Eval.End bcc CC.EXP.Eval.End
@ -173,7 +184,13 @@ CC.EXP.Eval.Err
bra CC.EXP.Eval.ExitErr bra CC.EXP.Eval.ExitErr
*-------------------------------------- *--------------------------------------
CC.EXP.Eval.Exit CC.EXP.Eval.Exit
lda ZPPtr1+1
ldy ZPPtr1
bne .1
>LDYA ZPPtr2 Type/Qual >LDYA ZPPtr2 Type/Qual
.1 and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
clc clc
CC.EXP.Eval.ExitErr CC.EXP.Eval.ExitErr
@ -187,43 +204,17 @@ CC.EXP.Eval.ExitErr
plx plx
stx ZPPtr2 stx ZPPtr2
rts plx
*-------------------------------------- stx ZPPtr1+1
CC.EXP.CheckGetSymType plx
lda ZPPtr2 stx ZPPtr1
ora ZPPtr2+1
bne .1
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 rts
*-------------------------------------- *--------------------------------------
CC.EXP.Cast jsr CC.TYPE.Decl CC.EXP.Cast jsr CC.TYPE.Decl
bcs .99 bcs .99
>STYA ZPPtr2 >STYA ZPPtr1
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .9 bcs .9
@ -240,20 +231,15 @@ CC.EXP.Cast jsr CC.TYPE.Decl
sec sec
.99 rts .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 * 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 bcs .3
cpy #SYM.T.UCHAR cpy #SYM.T.UCHAR
@ -261,26 +247,16 @@ CC.EXP.BOPS cpy #SYM.T.UINT
cpy #SYM.T.SCHAR cpy #SYM.T.SCHAR
beq .2 beq .2
lda #E.TMISMATCH lda #E.TMISMATCH
sec sec
rts rts
.1 lda J.CC.bBOPS,x .1 >LDYA L.PCC.bBOPS,x
ldy J.CC.bBOPS+1,x jmp CODE.EmitPCC
tax
lda #$20 JSR
jsr CODE.TOABSYX
clc
rts
.2 lda J.CC.cBOPS,x .2 >LDYA L.PCC.bBOPS,x
ldy J.CC.cBOPS+1,x jmp CODE.EmitPCC
tax
lda #$20 JSR
jsr CODE.TOABSYX
clc
rts
.3 txa .3 txa
clc clc
@ -291,9 +267,17 @@ CC.EXP.BOPS cpy #SYM.T.UINT
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CC.AddContCharP jsr CODE.PushConstP CC.EXP.AddConstCharP
lda ZPCCConst
ldx ZPCCConst+1
jsr CODE.LDAXI
bcs .99 bcs .99
>LDYA L.PCC.PushIAddr
jsr CODE.EmitPCC
bcs .99
jsr CODE.DSSelect jsr CODE.DSSelect
bcs .99 bcs .99
@ -312,14 +296,14 @@ CC.AddContCharP jsr CODE.PushConstP
jsr CODE.EmitData jsr CODE.EmitData
bcs .99 bcs .99
iny iny
bra .1 bra .1
.2 lda #0 .2 lda #0
jsr CODE.EmitData jsr CODE.EmitData
bcs .99 bcs .99
jsr CODE.CSSelect jsr CODE.CSSelect
bcs .99 bcs .99
@ -332,6 +316,21 @@ CC.AddContCharP jsr CODE.PushConstP
sec sec
.99 rts .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 CC.EXP.GetNum cpy #SYM.T.FLOAT
bcc .1 bcc .1
@ -394,35 +393,43 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT
* ZPPtr2 = expected T/Q * ZPPtr2 = expected T/Q
* ZPPtr3+1 = PREOPS * ZPPtr3+1 = PREOPS
*-------------------------------------- *--------------------------------------
CC.EXP.Get >LDYA L.CC.AOPS CC.EXP.GetVar stz ExpState
jsr CC.LookupOP
bcs .20
>LDYA ZPPtr2 get expected T/Q jsr CC.EXP.POSTOPS var++, var[0]... ?
jsr CC.EXP.Eval
bcs .99 bcs .99
jsr CC.SYM.SetValue ldx ZPPtr3+1 preop &, * ...
jsr CC.EXP.PREOPS
bcs .99 bcs .99
clc lda ExpState
rts bmi .8 VonStack
*--------------------------------------
.20 >LDYA L.CC.POSTOPS
jsr CC.LookupOP
bcs .1
cpx #4 '[' asl
bne *
jmp CC.EXP.Array bmi .7 AinPTR
*--------------------------------------
.1 ldx ZPPtr3+1 preop
bpl .8
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 beq .3
cmp #SYM.T.VOID
beq .2
lda (ZPLookupSymPtr) SYM.T lda (ZPLookupSymPtr) SYM.T
cmp #SYM.T.VOID cmp #SYM.T.VOID
beq .2 beq .2
@ -435,190 +442,503 @@ CC.EXP.Get >LDYA L.CC.AOPS
ldy #SYM.Q ldy #SYM.Q
cmp (ZPLookupSymPtr),y cmp (ZPLookupSymPtr),y
bne .9 bne .9
clc
rts
.3 lda (ZPLookupSymPtr) SYM.T .3 lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T sta ZPPtr2 T
pha
ldy #SYM.Q ldy #SYM.Q
lda (ZPLookupSymPtr),y lda (ZPLookupSymPtr),y
sta ZPPtr2+1 Q sta ZPPtr2+1 Q
ply Y,A = T/Q
jsr CC.SYM.PushValue
clc clc
.99 rts rts
.9 lda #E.TMISMATCH .9 lda #E.TMISMATCH
sec sec
rts .99 rts
.8 jmp (J.CC.PREOPS,x)
*-------------------------------------- *--------------------------------------
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 lda (ZPLookupSymPtr),y
and #SYM.Q.AAARRAY 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 ldy #SYM.T.SINT
lda #0 lda #0
jsr CC.EXP.Eval jsr CC.EXP.Eval
bcs .99 int16 on stack bcs .9
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .9 bcs .98
cmp #']' cmp #']'
bne .9 bne .98
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
ldy #SYM.Q ldy #SYM.Q
lda (ZPLookupSymPtr),y lda (ZPLookupSymPtr),y
sec sec
sbc #SYM.Q.ARRAY sbc #SYM.Q.ARRAY
ply sta (ZPLookupSymPtr),y
jsr CC.SYM.GetYASizeOfInAXC
jsr CODE.PushFromPtr A = byte count
clc clc
rts rts
.9 lda #E.ESYN .98 lda #E.ESYN
sec 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 .9 rts
*-------------------------------------- *--------------------------------------
CC.EXP.GetRef ldy #SYM.Addr+1 CC.EXP.Struct
lda (ZPLookupSymPtr),y *--------------------------------------
jsr CODE.PUSHI CC.EXP.pStruct lda #E.ESYN
sec
rts
*--------------------------------------
* PREOPS
*--------------------------------------
CC.EXP.PREOPS bmi .8
ldy #SYM.Addr jmp (J.CC.PREOPS,x)
lda (ZPLookupSymPtr),y
jsr CODE.PUSHI
lda (ZPLookupSymPtr) SYM.T .8 clc
rts
sta ZPPtr2 T *--------------------------------------
CC.EXP.Ref ldy #SYM.Q
ldy #SYM.Q
lda (ZPLookupSymPtr),y lda (ZPLookupSymPtr),y
clc clc
adc #SYM.Q.POINTER adc #SYM.Q.POINTER
bcs .9 more than *** 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 * clc
rts rts
.9 lda #E.TMISMATCH .9 lda #E.TMISMATCH
sec 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 clc
rts rts
*--------------------------------------
CC.EXP.IntConst >PUSHW ZPLineBufPtr
>PUSHWI ZPLineBufPtr
>PUSHBI 10
>SYSCALL StrToUL
>PULLA .1 lda #2 pointer
tay ldx #0
>PULLA
inc pStack
inc pStack
sec +1 for hMem Storage
rts rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -7,7 +7,7 @@ CC.F.Decl stz LocalPtr
bcs .99 bcs .99
ldx #$80 CPStmt.fDef state ldx #$80 CPStmt.fDef state
jsr CC.STMT.CPStmt jsr CC.STMT.CPStmt.NEW
bcs .99 bcs .99
jsr CC.SYM.NewScope jsr CC.SYM.NewScope
@ -24,7 +24,7 @@ CC.F.Decl stz LocalPtr
>STYA ZPPtr2 Save T/Q >STYA ZPPtr2 Save T/Q
jsr CC.F.AddTQ jsr CC.SYM.AddWord
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .9 bcs .9
@ -53,9 +53,9 @@ CC.F.Decl stz LocalPtr
*-------------------------------------- *--------------------------------------
.6 ldy #0 .6 ldy #0
lda #0 lda #0
jsr CC.F.AddTQ jsr CC.SYM.AddWord definition End
jsr CC.GetNextCharNB Skip ) jsr CC.GetNextCharNBNL Skip )
bcs .9 bcs .9
cmp #';' cmp #';'
@ -65,8 +65,8 @@ CC.F.Decl stz LocalPtr
lda CStackPtr lda CStackPtr
clc clc
adc #6 adc #8
sta CStackPtr discard this CPStmt sta CStackPtr discard this CPStmt + T/Q
stz LocalPtr reset for DEBUG Message stz LocalPtr reset for DEBUG Message
@ -76,15 +76,25 @@ CC.F.Decl stz LocalPtr
.7 cmp #'{' .7 cmp #'{'
bne .9 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 jsr CC.SYM.SetAddrYA
lda LocalPtr lda LocalPtr
jsr CODE.LDAI A = f() ARGS size jsr CODE.LDAI A = f() ARGS size
jsr CODE.Enter bcs .99
clc Store f() Declaration / Start Definition >LDYA L.PCC.ENTER
rts jmp CODE.EmitPCC Store f() Declaration / Start Definition
*-------------------------------------- *--------------------------------------
CC.F.DeclGetTQ lda (ZPLineBufPtr) CC.F.DeclGetTQ lda (ZPLineBufPtr)
cmp #'.' cmp #'.'
@ -130,7 +140,7 @@ CC.F.DeclGetTQ lda (ZPLineBufPtr)
*-------------------------------------- *--------------------------------------
CC.F.NewArg >LDYA.G CC.SymID CC.F.NewArg >LDYA.G CC.SymID
>STYA.G CC.SymIDSave >STYA.G CC.SymIDSave
>LEA.G CC.ArgBuf >LEA.G CC.ArgBuf
>STYA ZPSymBufPtr >STYA ZPSymBufPtr
@ -145,49 +155,33 @@ CC.F.NewArg >LDYA.G CC.SymID
>LDA.G CC.hSymBuf >LDA.G CC.hSymBuf
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPSymBufPtr >STYA ZPSymBufPtr
>LDYA.G CC.SymIDSave >LDYA.G CC.SymIDSave
>STYA.G CC.SymID >STYA.G CC.SymID
.9 rts .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 T
jsr CC.Pop Q jsr CC.Pop Q
jsr CC.SYM.FreeScope jsr CC.SYM.FreeScope
stz LocalPtr back to global stz LocalPtr back to global
clv pop context
clc clc
rts .9 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
*-------------------------------------- *--------------------------------------
* in : ZPSymPtr * in : ZPSymPtr
* Y,A = Expected T/Q * Y,A = Expected T/Q
*-------------------------------------- *--------------------------------------
CC.F.CallNoRetV clc CC.F.CallNoRetV ldy #0 no expected T/Q
tya
clc
.HS B0 BCS .HS B0 BCS
CC.F.CallRetV sec CC.F.CallRetV sec
@ -204,44 +198,51 @@ CC.F.CallRetV sec
>STYA ZPPtr2 >STYA ZPPtr2
ror ZPPtr1+1 bRetV ror ZPPtr1+1 bRetV
bpl .20 no return value on stack * 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
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 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 lda (ZPLookupSymPtr) no check required
beq .1 no check required sta ZPPtr2
cpy ZPPtr2
bne .24
tax save full Q
lda (ZPLookupSymPtr),y
and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL
cmp ZPPtr2+1 bra .2
.24 bne .91
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 lda #SYM.Def
>STA.G CC.LookupSymPtr >STA.G CC.LookupSymPtr
jsr CC.F.GetTQ get First Arg T/Q jsr CC.F.GetTQ get First Arg T/Q
beq .7 end of list, go check ending ')' beq .7 end of list, go check ending ')'
*--------------------------------------
.3 cpy #SYM.T.VARIADIC .3 cpy #SYM.T.VARIADIC
bne .4 bne .4
@ -253,7 +254,7 @@ CC.F.CallRetV sec
jsr CC.EXP.Eval jsr CC.EXP.Eval
bcs .93 bcs .93
jsr CC.SYM.GetYASizeOfInAXC jsr CC.EXP.GetYASizeOfInAXC
tax save Sizeof in X tax save Sizeof in X
jsr CC.F.GetTQ jsr CC.F.GetTQ
@ -295,7 +296,6 @@ CC.F.CallRetV sec
bne .90 missing arg bne .90 missing arg
lda ZPPtr1 push VARIADIC byte count lda ZPPtr1 push VARIADIC byte count
jsr CODE.PUSHI jsr CODE.PUSHI
.7 jsr CC.GetCharNB .7 jsr CC.GetCharNB
@ -330,8 +330,9 @@ CC.F.CallRetV sec
*-------------------------------------- *--------------------------------------
* X = last var size * X = last var size
*-------------------------------------- *--------------------------------------
CC.F.Call2 lda ZPPtr2+1 CC.F.Call2 ldy #SYM.Q
bit #SYM.Q.FASTCALL lda (ZPLookupSymPtr),y
and #SYM.Q.FASTCALL
beq .1 beq .1
ldy #SYM.Def Get first (only) argument 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 * Return Value : call & put result on stack if in Y,A
.5 ldy #SYM.Addr+1 .5
ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y lda (ZPLookupSymPtr),y
cmp #2 cmp #3
bcs .8 not a SYS/FPU call...Ret value on stack bcs .8 not a SYS/FPU call...Ret value on stack
>LDYA ZPPtr2 function T/Q >LDYA ZPPtr2 function T/Q
jsr CC.TYPE.SizeOf jsr CC.TYPE.SizeOf
cpx #3 cpx #3
@ -384,13 +386,13 @@ CC.F.Call2 lda ZPPtr2+1
dex dex
bne .60 bne .60
jsr CODE.PUSHA push ONE byte one stack jsr CODE.PUSHA push ONE byte on stack
bra .8 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 .8 >LDYA ZPPtr2 T/Q
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -405,50 +407,47 @@ CC.F.Call3 ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y lda (ZPLookupSymPtr),y
tax tax
ply ply Y=HI,X=LO
cpy #1 cpy #1
bne .1 bne .1
jsr CODE.SYSCALL jmp CODE.SYSCALL
clc
rts
.1 cpy #2 .1 cpy #2
bne .2 bne .2
jsr CODE.FPUCALL jmp CODE.FPUCALL
clc
rts
.2 lda #$EA .2 lda #$EA NOP
jsr CODE.EmitByte jsr CODE.EmitByte
lda #$EA bcs .99
lda #$EA NOP
jsr CODE.EmitByte jsr CODE.EmitByte
bcs .99
lda #$20 JSR abs lda #$20 JSR abs
jsr CODE.TOABSYX Y=HI,X=LO jmp CODE.TOABSYX
clc
rts
.9 bit bPass2 .9 bit bPass2
bmi .99 bmi .91
lda #5 leave room for LDX #imm, JSR abs lda #5 leave room for LDX #imm, JSR abs
clc clc
adc ZPCCCode adc ZPCCCode
sta ZPCCCode sta ZPCCCode
bcc .90 bcc .90
inc ZPCCCode+1 inc ZPCCCode+1
.90 clc .90 clc
rts rts
.99 lda #E.FUNDEF .91 lda #E.FUNDEF
sec sec
rts .99 rts
*-------------------------------------- *--------------------------------------
CC.F.GetTQ >LDA.G CC.LookupSymPtr CC.F.GetTQ >LDA.G CC.LookupSymPtr
tay tay

131
BIN/CC.S.FIO.txt Normal file
View File

@ -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

View File

@ -3,14 +3,107 @@ NEW
*-------------------------------------- *--------------------------------------
* Built in Keywords * Built in Keywords
*-------------------------------------- *--------------------------------------
CC.KW.JMP txa CC.KW.IF jsr CC.KW.BEGIN
>STA.G CC.CmdSave bcs .99
jmp (J.CC.KW,x)
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 CC.KW.IF.END jsr CC.GetCharNBNL
bcs CC.KW.IF.RTS 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 bcs .9
cmp #'(' cmp #'('
@ -24,10 +117,13 @@ CC.KW.IF jsr CC.GetCharNB
jsr CC.KW.TestZero jsr CC.KW.TestZero
jsr CC.PushCS push place to set JMP false lda #'B'
jsr CC.SYM.LookupA
bcs .99 bcs .99
jsr CC.KW.ZPCCCodeAdd2 lda #$4C emit JMP break:
jsr CODE.TOABSYX
bcs .99
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .99 bcs .99
@ -35,89 +131,44 @@ CC.KW.IF jsr CC.GetCharNB
cmp #')' cmp #')'
bne .9 bne .9
jmp CC.KW.BEGIN jmp CC.KW.STMT
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
.99 .99 rts
CC.KW.IF.RTS 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 bcs .9
>STYA ZPPtr1 set JMP false jsr CC.GetCharNB
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
bcs .9 bcs .9
cmp #'(' cmp #'('
@ -126,12 +177,83 @@ CC.KW.FOR jsr CC.GetCharNB
jsr CC.GetNextCharNB jsr CC.GetNextCharNB
bcs .9 bcs .9
jsr CC.EXP.Eval00 get e1 jsr CC.EXP.Eval00 Any var type
bcs .9 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 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:
* <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 bcs .9
cmp #';' cmp #';'
@ -140,26 +262,29 @@ CC.KW.FOR jsr CC.GetCharNB
jsr CC.GetNextCharNB skip ';' jsr CC.GetNextCharNB skip ';'
bcs .9 bcs .9
*-------------------------------------- *--------------------------------------
>LDYA ZPCCCode lda #'L' LOOP Label
>STYA ZPPtr2 save LOOP address jsr CC.SYM.NewA
bcs .99
jsr CC.EXP.Eval00 get e2 jsr CC.EXP.Eval00 get e2
.29 bcs .99 .29 bcs .99
jsr CC.KW.TestZero jsr CC.KW.TestZero
jsr CC.PushCS push place to set JMP break:
bcs .99 bcs .99
jsr CC.KW.ZPCCCodeAdd2 lda #'B'
jsr CC.SYM.LookupA
bcs .99
lda #$20 emit JSR s; lda #$4C emit JMP break:
jsr CODE.EmitByte jsr CODE.TOABSYX
>LDYA ZPCCCode lda #'S'
>STYA ZPPtr3 save place to set JSR 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 jsr CC.GetCharNB
bcs .9 bcs .9
@ -170,12 +295,14 @@ CC.KW.FOR jsr CC.GetCharNB
jsr CC.GetNextCharNB skip ';' jsr CC.GetNextCharNB skip ';'
bcs .9 bcs .9
*-------------------------------------- *--------------------------------------
jsr CC.PushCS push cont: address lda #'C' CONT Label
jsr CC.SYM.NewA
jsr CC.EXP.Eval00 get e3
bcs .99 bcs .99
jsr CC.KW.StackDiscard jsr CC.STMT get s3
bcs .99
* jsr CC.KW.StackDiscard
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .9 bcs .9
@ -183,19 +310,18 @@ CC.KW.FOR jsr CC.GetCharNB
cmp #')' cmp #')'
bne .9 bne .9
lda #'L'
jsr CC.SYM.LookupA
bcs .99
lda #$4C lda #$4C
ldx ZPPtr2 jsr CODE.TOABSYX emit JMP loop
ldy ZPPtr2+1
jsr CODE.TOABSYX JMP e2
lda ZPCCCode setup JSR s; lda #'S' S Label
* sta (ZPPtr3) jsr CC.SYM.NewA
bcs .99
lda ZPCCCode+1 jmp CC.KW.STMT
ldy #1
* sta (ZPPtr3),y
jmp CC.KW.BEGIN
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
@ -203,43 +329,45 @@ CC.KW.FOR jsr CC.GetCharNB
*-------------------------------------- *--------------------------------------
CC.KW.FOR.END lda #$60 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 lda #'B' define BREAK Label
bcs .9 jsr CC.KW.NewLabel
bcs .99
jsr CC.Pop discard cont: location clv pop context
bcs .9
jsr CC.PopYA .99 rts
bcs .9
>STYA ZPPtr1 get JMP break: location
lda ZPCCCode
* sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
* sta (ZPPtr1),y
clc
.9 rts
*-------------------------------------- *--------------------------------------
CC.KW.SWITCH CC.KW.SWITCH
CC.KW.CASE CC.KW.CASE
CC.KW.DEFAULT
lda #E.CSYN lda #E.CSYN
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.KW.BREAK CC.KW.BREAK lda #'B'
lda #E.CSYN
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP break
jmp CODE.TOABSYX
.9 lda #E.CSYN
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.KW.CONTINUE CC.KW.CONTINUE lda #'C'
lda #E.CSYN
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP cont
jmp CODE.TOABSYX
.9 lda #E.CSYN
sec sec
rts rts
*-------------------------------------- *--------------------------------------
@ -254,7 +382,7 @@ CC.KW.RETURN ldy CStackPtr
tya tya
clc clc
adc #3 skip CPStmt (4 bytes) adc #5 skip CPStmt (6 bytes)
tay tay
bcc .1 bcc .1
@ -265,6 +393,9 @@ CC.KW.RETURN ldy CStackPtr
.7 iny skip bState .7 iny skip bState
iny skip Locals iny skip Locals
iny
iny skip CPSID
iny get SYM.T iny get SYM.T
lda (ZPCCStack),y lda (ZPCCStack),y
@ -281,11 +412,10 @@ CC.KW.RETURN ldy CStackPtr
jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q
tax X = sizeof tax X = sizeof
jsr CODE.SetRetValue jsr CODE.SetRetValue
bcs .99
jsr CODE.Leave >LDYA L.PCC.LEAVE
jmp CODE.EmitPCC
clc
rts
*-------------------------------------- *--------------------------------------
CC.KW.SIZEOF CC.KW.SIZEOF
lda #E.CSYN lda #E.CSYN
@ -321,66 +451,178 @@ CC.KW.STRUCT >ENTER 4
cmp #'}' cmp #'}'
bne .1 bne .1
jsr CC.GetNextCharNB skip } jsr CC.GetNextCharNB skip '}'
clc clc
.99 >LEAVE .99 >LEAVE
rts rts
*-------------------------------------- *--------------------------------------
CC.KW.BEGIN jsr CC.GetNextCharNB CC.KW.BEGIN jsr CC.SYM.NewCPSID
bcs .9 bcs .99
cmp #'{' >LDA.G CC.CPSPFX+3
bne .7
>LDA.G CC.CmdSave
tax
jmp CC.STMT.CPStmt
.7 >LDA.G CC.CmdSave
jsr CC.Push jsr CC.Push
bcs .99 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 jmp CC.Push
.9 lda #E.CSYN .9 lda #E.CSYN
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual CC.KW.NewLabel pha
* Output : CC = true, CS = false
*--------------------------------------
CC.KW.TestZero jsr CC.SYM.GetYASizeOfInAXC
tax
.6 lda #$A2 LDX #imm lda CStackPtr
jsr CODE.EmitByte clc
txa adc #4
jsr CODE.EmitByte tay
ldx #PCC.Test0X.L lda (ZPCCStack),y
ldy #0 pha
.7 lda PCC.Test0X,y
jsr CODE.EmitByte
iny iny
dex lda (ZPCCStack),y
bne .7 ply
>STYA.G CC.CPSPFX+2
clc pla
rts jmp CC.SYM.NewA
*-------------------------------------- *--------------------------------------
CC.KW.ZPCCCodeAdd2 CC.KW.GetLabel pha
lda ZPCCCode
lda CStackPtr
clc clc
adc #2 adc #4
sta ZPCCCode tay
bcc .8
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 .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 * Input : Value on Stack, Y,A = Type/Qual
*-------------------------------------- *--------------------------------------

View File

@ -156,7 +156,43 @@ CC.Link.Dump >PUSHW L.MSG.LINKING2
>SYSCALL PrintF >SYSCALL PrintF
rts 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 MAN
SAVE usr/src/bin/cc.s.link SAVE usr/src/bin/cc.s.link

595
BIN/CC.S.PCC.txt Normal file
View File

@ -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

View File

@ -1,12 +1,57 @@
NEW NEW
AUTO 3,1 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 * X = KW.ID
*-------------------------------------- *--------------------------------------
CC.STMT.CPStmt lda LocalPtr Locals CC.STMT.CPStmt.NEW
>LDA.G CC.CPSID+1
jsr CC.Push jsr CC.Push
bcs .99 bcs .99
>LDA.G CC.CPSID
jsr CC.Push
bcs .99
lda LocalPtr Locals
jsr CC.Push
bcs .99
lda #0 bState lda #0 bState
jsr CC.Push jsr CC.Push
bcs .99 bcs .99
@ -20,33 +65,58 @@ CC.STMT.CPStmt lda LocalPtr Locals
.99 rts .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 CC.STMT.CPStmt.END
jsr CC.Pop jsr CC.Get
bcs .9 bcs CC.STMT.Stmt.RTS
cmp #'}' must be '}' on stack.... cmp #'}' must be '}' on stack....
bne .9 CC.STMT.CPStmt.POP
bne .98
jsr CC.Pop get stacked KW... iny
tax 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 jsr CC.Pop Locals
sta LocalPtr sta LocalPtr
txa .1 clc
bmi .5 rts
*--------------------------------------
.7 tax
bmi .8
jmp (J.CC.KW.END,x) 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 sec
rts .99 rts
*--------------------------------------
CC.CPS.New
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/cc.s.stmt SAVE usr/src/bin/cc.s.stmt

View File

@ -17,7 +17,7 @@ CC.SYM.New >STYA ZPPtr2 T/Q
>PUSHW ZPLineBufPtr >PUSHW ZPLineBufPtr
>SYSCALL SListLookup >SYSCALL SListLookup
bcs .9 bcs CC.SYM.New.9
>STYA.G CC.SymID Y,A = KeyID >STYA.G CC.SymID Y,A = KeyID
@ -29,21 +29,14 @@ CC.SYM.New >STYA ZPPtr2 T/Q
>PUSHWI 65535 all >PUSHWI 65535 all
>PUSHWZ From Start >PUSHWZ From Start
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .9 bcc CC.SYM.New2
jsr CC.GetCharNB CC.SYM.New.9 rts Y,A = SymSize
cmp #'('
bne .8
jmp CC.F.Decl
.8 clc
.9 rts Y,A = SymSize
*-------------------------------------- *--------------------------------------
CC.SYM.New1 ldy ScopeIdx CC.SYM.New1 ldy ScopeIdx
lda (pData),y lda (pData),y
jsr CC.SYM.NewKey jsr CC.SYM.NewKey
bcs .9 bcs CC.SYM.New.9
>STYA.G CC.SymID Y,A = KeyID >STYA.G CC.SymID Y,A = KeyID
@ -71,8 +64,8 @@ CC.SYM.New1 ldy ScopeIdx
tya tya
ldy #SYM.DefSize ldy #SYM.DefSize
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
*--------------------------------------
jsr CC.GetCharNB CC.SYM.New2 jsr CC.GetCharNB
bcs CC.SYM.SetAddr bcs CC.SYM.SetAddr
cmp #'(' cmp #'('
@ -84,45 +77,45 @@ CC.SYM.New1 ldy ScopeIdx
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
jmp CC.F.Decl jmp CC.F.Decl
.9 rts
*-------------------------------------- *--------------------------------------
CC.SYM.NewV cmp #'[' CC.SYM.NewV cmp #'['
bne CC.SYM.SetAddr 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 [ jsr CC.GetNextCharNB Skip [
bcs .99 bcs .99
cmp #']' cmp #']'
bne .3 bne .2
.2 ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
bit #SYM.Q.PPPOINTER and #SYM.Q.PPPOINTER
beq .99 beq .99 [] only allowed for *
and #SYM.Q.AAARRAY >LDYAI 0 set as [0] (deref)
cmp #SYM.Q.AAARRAY jsr CC.SYM.AddWord
bra .3
.2 jsr CC.EXP.IntConst
bcs .99 bcs .99
* ldy #SYM.Q jsr CC.SYM.AddWord
lda (ZPSymBufPtr),y
* clc
adc #SYM.Q.ARRAY
sta (ZPSymBufPtr),y
jsr CC.GetNextCharNB Skip ]
bcs CC.SYM.SetAddr
cmp #'['
beq .2
bra CC.SYM.SetAddr
*--------------------------------------
.3 jsr CC.EXP.IntConst
bcs .9
jsr CC.SYM.SetSizeOf
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .99 bcs .99
@ -130,17 +123,22 @@ CC.SYM.NewV cmp #'['
cmp #']' cmp #']'
bne .99 bne .99
jsr CC.GetNextCharNB Skip ] .3 jsr CC.GetNextCharNB Skip ]
bcs CC.SYM.SetAddr bcs CC.SYM.SetAddr
* cmp #'[' cmp #'['
* bne CC.SYM.SetAddr 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 .99 lda #E.CSYN
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CC.SYM.SetAddr ldy #SYM.Q 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 * clc / sec A,X=Size, CS if pointer
pha
ldy #SYM.Addr ldy #SYM.Addr
lda ZPCCData lda ZPCCData
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
adc ZPCCData
sta ZPCCData
iny iny
lda ZPCCData+1 lda ZPCCData+1
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
pla
clc
adc ZPCCData
sta ZPCCData
txa txa
adc ZPCCData+1 adc ZPCCData+1
sta ZPCCData+1 sta ZPCCData+1
@ -214,6 +216,125 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
sec sec
rts 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 CC.SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr >PUSHW ZPLineBufPtr
>SYSCALL SListNewKey >SYSCALL SListNewKey
@ -223,11 +344,106 @@ CC.SYM.NewKey >PUSHA
.9 rts Y,A = KeyID, X = KeyLen .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 CC.SYM.StoreF >LDA.G CC.hScopes
bit bPass2 bit bPass2
bpl CC.SYM.Store.1 bpl CC.SYM.Store.1
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -332,6 +548,44 @@ CC.SYM.Lookup >LDA.G CC.LookupIdx
* sec * sec
rts 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 CC.SYM.LookupFree
>LDA.G CC.LookupIdx >LDA.G CC.LookupIdx
cmp #CC.LookupIdx cmp #CC.LookupIdx
@ -367,92 +621,35 @@ CC.SYM.LookupFreeAll
clc clc
rts rts
*-------------------------------------- *--------------------------------------
* Y,A = value T/Q * on RT stack : Addr,value
*-------------------------------------- *--------------------------------------
CC.SYM.PushValue CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC
jsr CC.SYM.CheckTypeYA tay
dey
jsr CODE.LDYI
bcs .9 bcs .9
jsr CC.SYM.GetSymSizeOfInAXC >LDYA L.PCC.SetValue
tax jmp CODE.EmitPCC
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.PushXFromYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.PushXFromYA
clc
.9 rts
*--------------------------------------
CC.SYM.PopValue jsr CC.SYM.CheckTypeYA
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.PopXToYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.PopXToYA
clc
.9 rts
*--------------------------------------
CC.SYM.SetValue jsr CC.SYM.CheckTypeYA
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.SetXToYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.SetXToYA
clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
* in : Y,A = T/Q * in : Y,A = T/Q
* out : CC * out : CC
* CS, A = E.TMISMATCH * CS, A = E.TMISMATCH
*-------------------------------------- *--------------------------------------
CC.SYM.CheckTypeYA CC.SYM.CheckTypeYA.OLD
pha pha
tya tya
cmp (ZPSymBufPtr) cmp (ZPSymBufPtr)
bne .9 bne .9
pla 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 clc
rts rts
@ -476,7 +673,7 @@ CC.SYM.GetTypeInYA
*-------------------------------------- *--------------------------------------
* in : Y,A = T/Q * in : Y,A = T/Q
*-------------------------------------- *--------------------------------------
CC.SYM.SetTypeYA CC.SYM.SetTypeYA.OLD
phy phy
ldy #SYM.Q ldy #SYM.Q
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
@ -497,7 +694,16 @@ CC.SYM.GetSymSizeOfInAXC
CC.SYM.GetYASizeOfInAXC CC.SYM.GetYASizeOfInAXC
bit #SYM.Q.PPPOINTER 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 lda CC.TYPESIZE-1,y
ldx #0 ldx #0
@ -505,10 +711,36 @@ CC.SYM.GetYASizeOfInAXC
clc clc
rts rts
.1 lda #2 pointer .2 ldx CC.TYPESIZE-1,y
ldx #0
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 rts
*-------------------------------------- *--------------------------------------
* in/out : A,X,C = size * in/out : A,X,C = size
@ -526,19 +758,6 @@ CC.SYM.SetSizeOf
pla pla
rts 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 CC.SYM.SetAddrYA
phy phy

View File

@ -150,7 +150,7 @@ CC.TYPE sta (pStack) T
.10 jsr CC.IsLetter .10 jsr CC.IsLetter
bcs .8 bcs .8
>LDYA L.CC.FTYPES >LDYA L.CC.FTYPES int fastcall f() ?
jsr CC.LookupID jsr CC.LookupID
bcs .8 next char is an identifier bcs .8 next char is an identifier
@ -163,7 +163,7 @@ CC.TYPE sta (pStack) T
bcs .9 next char is an identifier, ",", "(",")" bcs .9 next char is an identifier, ",", "(",")"
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
* in : Y,A = type/qual * in : Y,A = type/qual
* out : X = size * out : X = size

View File

@ -50,14 +50,6 @@ SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ....
* *
SYM .EQ 10 SYM .EQ 10
*-------------------------------------- *--------------------------------------
CPS.ParentID .EQ 0
CPS.hSYM .EQ 2
*
CPS.Cont .EQ 4
CPS.Break .EQ 6
*
CPS .EQ 8
*--------------------------------------
* Zero Page Segment, up to 32 bytes * Zero Page Segment, up to 32 bytes
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
@ -76,20 +68,22 @@ ZPCCStack .BS 2
ZPLineBufPtr .BS 2 ZPLineBufPtr .BS 2
ZPLookupPtr .BS 2 ZPLookupPtr .BS 2
CStackPtr .BS 1 CStackPtr .BS 1
LocalPtr .BS 1 LocalPtr .BS 1
ScopeIdx .BS 1 ScopeIdx .BS 1
bLocalScope .BS 1 bLocalScope .BS 1
ZPSymBufPtr .BS 2 ZPSymBufPtr .BS 2
* .BS 1
* .BS 1
ZPLookupSymPtr .BS 2 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 ZS.END .ED
*-------------------------------------- *--------------------------------------
* File Header (16 Bytes) * File Header (16 Bytes)
@ -127,50 +121,27 @@ L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.NOMAIN .DA MSG.NOMAIN L.MSG.NOMAIN .DA MSG.NOMAIN
L.ENV.INCLUDE .DA ENV.INCLUDE 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.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 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.DIRS .DA CC.DIRS
L.CC.KW .DA CC.KW 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.SCSPEC .DA CC.SCSPEC
L.CC.TYPEQUAL .DA CC.TYPEQUAL L.CC.TYPEQUAL .DA CC.TYPEQUAL
L.CC.TYPESPEC .DA CC.TYPESPEC L.CC.TYPESPEC .DA CC.TYPESPEC
@ -186,6 +157,7 @@ J.CC.KW .DA CC.KW.IF
.DA CC.KW.FOR .DA CC.KW.FOR
.DA CC.KW.SWITCH .DA CC.KW.SWITCH
.DA CC.KW.CASE .DA CC.KW.CASE
.DA CC.KW.DEFAULT
.DA CC.KW.BREAK .DA CC.KW.BREAK
.DA CC.KW.CONTINUE .DA CC.KW.CONTINUE
.DA CC.KW.RETURN .DA CC.KW.RETURN
@ -224,6 +196,80 @@ J.CC.STYPES .DA CC.TYPE.SCHAR
L.CC.MAIN .DA CC.MAIN L.CC.MAIN .DA CC.MAIN
L.CC.LIBC .DA CC.LIBC L.CC.LIBC .DA CC.LIBC
L.PCC.FH .DA PCC.FH 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 .DA 0
*-------------------------------------- *--------------------------------------
* Called once at process creation * Called once at process creation
@ -263,7 +309,7 @@ CS.RUN >PUSHW L.MSG.GREETINGS
jsr CODE.Init jsr CODE.Init
jsr CS.RUN.FOpen1st jsr CC.FIO.FOpen1st
bcs CS.INIT.RTS bcs CS.INIT.RTS
*-------------------------------------- *--------------------------------------
CS.RUN.CLOOP jsr CC.CompileFile CS.RUN.CLOOP jsr CC.CompileFile
@ -271,7 +317,7 @@ CS.RUN.CLOOP jsr CC.CompileFile
cmp #MLI.E.EOF cmp #MLI.E.EOF
bne .9 bne .9
jsr CS.RUN.FClose jsr CC.FIO.FClose
bne CS.RUN.CLOOP bne CS.RUN.CLOOP
*-------------------------------------- *--------------------------------------
jsr PrintSummary jsr PrintSummary
@ -279,19 +325,19 @@ CS.RUN.CLOOP jsr CC.CompileFile
jsr CC.Link jsr CC.Link
bcs .99 bcs .99
* >DEBUG
jsr CheckMain jsr CC.Link.CheckMain
bcs .99 bcs .99
dec bPass2 dec bPass2
jsr CS.RUN.FCreate jsr CC.FIO.FCreate
bcs .99 bcs .99
jsr CODE.Init jsr CODE.Init
bcs .99 bcs .99
jsr CS.RUN.FOpen1st jsr CC.FIO.FOpen1st
bcs .99 bcs .99
*-------------------------------------- *--------------------------------------
.2 jsr CC.CompileFile .2 jsr CC.CompileFile
@ -299,7 +345,7 @@ CS.RUN.CLOOP jsr CC.CompileFile
cmp #MLI.E.EOF cmp #MLI.E.EOF
bne .9 bne .9
jsr CS.RUN.FClose jsr CC.FIO.FClose
bne .2 bne .2
*-------------------------------------- *--------------------------------------
.8 lda #0 Exit Code = Success .8 lda #0 Exit Code = Success
@ -372,130 +418,6 @@ CS.RUN.ARGS inc ArgIndex
sec sec
rts 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 CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
@ -510,7 +432,9 @@ CS.QUIT jsr CODE.Quit
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
PrintTraceMsg ldy #S.PS.hStdErr PrintTraceMsg
ldy #S.PS.hStdOut
* ldy #S.PS.hStdErr
lda (pPS),y lda (pPS),y
>PUSHA >PUSHA
@ -641,45 +565,8 @@ PrintSummary lda ZPCCCode+1
>PUSHBI 6 >PUSHBI 6
>SYSCALL PrintF >SYSCALL PrintF
* >DEBUG
rts 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.code
.INB usr/src/bin/cc.s.core .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.exp
.INB usr/src/bin/cc.s.sym .INB usr/src/bin/cc.s.sym
.INB usr/src/bin/cc.s.link .INB usr/src/bin/cc.s.link
.INB usr/src/bin/cc.s.exec .INB usr/src/bin/cc.s.fio
*-------------------------------------- *--------------------------------------
CS.END 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.TRACE .AZ "%5D> %s\r\n"
MSG.RTSTK .AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n" MSG.RTSTK .AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
MSG.ERROR .AZ " %s^\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." MSG.NOMAIN .AZ "*** No 'main()' function defined."
*-------------------------------------- *--------------------------------------
ENV.INCLUDE .AZ "INCLUDE"
ENV.LIB .AZ "LIB"
*--------------------------------------
OptionList .AS "DdTt" OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*-------------------------------------- *--------------------------------------
* PCC = Pre Compiled Code ENV.INCLUDE .AZ "INCLUDE"
*-------------------------------------- ENV.LIB .AZ "LIB"
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
*-------------------------------------- *--------------------------------------
CC.OPChars .AS "!~+-*/%=&|^<>[" CC.OPChars .AS "!~+-*/%=&|^<>["
CC.OPChars.Cnt .EQ *-CC.OPChars 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: = += -= *= /= %= <<= >>= &= ^= |= * Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*-------------------------------------- *--------------------------------------
CC.AOPS >PSTR "=" CC.AOPS >PSTR "="
@ -996,6 +625,27 @@ CC.AOPS >PSTR "="
>PSTR "^=" >PSTR "^="
>PSTR "!=" >PSTR "!="
.HS 00 .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 ----- *-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / % * Arithmetic Operators: * / %
* Arithmetic Operators: + - * Arithmetic Operators: + -
@ -1039,12 +689,17 @@ CC.KW >PSTR "if"
>PSTR "for" >PSTR "for"
>PSTR "switch" >PSTR "switch"
>PSTR "case" >PSTR "case"
>PSTR "default"
>PSTR "break" >PSTR "break"
>PSTR "continue" >PSTR "continue"
>PSTR "return" >PSTR "return"
>PSTR "sizeof" >PSTR "sizeof"
>PSTR "struct" >PSTR "struct"
.HS 00 .HS 00
CC.KW2.IF >PSTR "else"
.HS 00
CC.KW2.DO >PSTR "while"
.HS 00
*-------------------------------------- *--------------------------------------
CC.SCSPEC >PSTR "auto" CC.SCSPEC >PSTR "auto"
>PSTR "register" >PSTR "register"
@ -1201,10 +856,10 @@ CC.LIBC >PSTR "chtyp"
.DA #2,#1,#SYS.StrToL .DA #2,#1,#SYS.StrToL
>PSTR "strtoul" >PSTR "strtoul"
.DA #2,#1,#SYS.StrToUL .DA #2,#1,#SYS.StrToUL
* >PSTR "realpath" >PSTR "realpath"
* .DA #2,#1,#0 .DA #2,#1,#SYS.RealPath
* >PSTR "expand" >PSTR "expand"
* .DA #2,#1,#0 .DA #2,#1,#SYS.Expand
>PSTR "strlen" >PSTR "strlen"
.DA #2,#1,#SYS.StrLen .DA #2,#1,#SYS.StrLen
>PSTR "strcpy" >PSTR "strcpy"
@ -1353,6 +1008,8 @@ CC.LIBC >PSTR "chtyp"
>PSTR "lrintf" >PSTR "lrintf"
.DA #2,#2,#FPU.QINT .DA #2,#2,#FPU.QINT
.HS 00 .HS 00
*--------------------------------------
.INB usr/src/bin/cc.s.pcc
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
@ -1387,6 +1044,9 @@ CC.hTags .BS 1
CC.hStack .BS 1 CC.hStack .BS 1
CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals 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.hSymBuf .BS 1
CC.SymID .BS 2 CC.SymID .BS 2

View File

@ -22,14 +22,14 @@ NEW
* ^R = Replace... * ^R = Replace...
* ^S = Save * ^S = Save
* ^T = Go To Top of file * ^T = Go To Top of file
******** ^U = FS ******** ^U = FS
* ^V = Paste Block * ^V = Paste Block
* ^W = Erase line * ^W = Erase line
* ^X = Cut Block * ^X = Cut Block
* ^Y = End Of File * ^Y = End Of File
*-------------------------------------- *--------------------------------------
Ctrl.DEL jsr BUF.ComputeCOffset Ctrl.DEL jsr BUF.ComputeCOffset
lda BUF.COffset lda BUF.COffset
ora BUF.COffset+1 No Backspace possible ora BUF.COffset+1 No Backspace possible
beq .8 beq .8
@ -41,7 +41,7 @@ Ctrl.DEL jsr BUF.ComputeCOffset
.8 clc .8 clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
Ctrl.Invalid Ctrl.Invalid
clc clc
Ctrl.Invalid.RTS Ctrl.Invalid.RTS
rts rts
@ -57,18 +57,18 @@ Ctrl.A >STZ.G bUpdateStatus
ldy TmpByte ldy TmpByte
jsr SCRN.GotoXY jsr SCRN.GotoXY
bcs .9 bcs .9
lda (ZPPTR1) lda (ZPPTR1)
beq .8 beq .8
>PUSHW L.MSG.HELPLINE >PUSHW L.MSG.HELPLINE
>PUSHW ZPPTR1 >PUSHW ZPPTR1
>PUSHBI 2 >PUSHBI 2
>SYSCALL PrintF >SYSCALL PrintF
bcs .9 bcs .9
inc TmpByte inc TmpByte
lda (ZPPTR1) lda (ZPPTR1)
sec sec
adc ZPPTR1 adc ZPPTR1
@ -84,15 +84,15 @@ Ctrl.A >STZ.G bUpdateStatus
>PUSHBI 0 >PUSHBI 0
jsr SCRN.LineBufSprintf jsr SCRN.LineBufSprintf
bcs .9 bcs .9
jsr SCRN.LineBufOut jsr SCRN.LineBufOut
bcs .9 bcs .9
jsr GetCh jsr GetCh
bcs .9 bcs .9
jmp SCRN.Repaint jmp SCRN.Repaint
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
Ctrl.C jmp BUF.SelToClipboard Ctrl.C jmp BUF.SelToClipboard
@ -122,7 +122,7 @@ Ctrl.G >LDA.G FileX
lda #0 lda #0
sta (pData),y sta (pData),y
jmp SCRN.UpdateViewPort jmp SCRN.UpdateViewPort
.8 clc .8 clc
@ -165,16 +165,16 @@ Ctrl.TAB jsr BUF.InsertTAB
lda TmpByte lda TmpByte
beq .9 nothing to do beq .9 nothing to do
* clc * clc
>ADC.G FileX >ADC.G FileX
sta (pData),y sta (pData),y
>LDA.G CurX >LDA.G CurX
clc clc
adc TmpByte adc TmpByte
sta (pData),y sta (pData),y
sec sec
>SBC.G ScreenX >SBC.G ScreenX
sec sec
@ -183,19 +183,19 @@ Ctrl.TAB jsr BUF.InsertTAB
jsr SCRN.UpdateCurrentLine jsr SCRN.UpdateCurrentLine
bcs .9 bcs .9
bra .8 bra .8
.1 lda TmpByte .1 lda TmpByte
clc clc
>ADC.G ScreenX >ADC.G ScreenX
sta (pData),y sta (pData),y
jsr SCRN.UpdateViewPort jsr SCRN.UpdateViewPort
.8 jsr SCRN.GotoCurXCurY .8 jsr SCRN.GotoCurXCurY
jmp SCRN.UpdateStatusBar jmp SCRN.UpdateStatusBar
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
Ctrl.LF jsr BUF.GetNextLine Ctrl.LF jsr BUF.GetNextLine
@ -204,7 +204,7 @@ Ctrl.LF jsr BUF.GetNextLine
tya Y = line length tya Y = line length
>CMP.G FileX >CMP.G FileX
bcs .2 bcs .2
sta (pData),y sta (pData),y
.2 >INCW.G FileY .2 >INCW.G FileY
@ -234,7 +234,7 @@ Ctrl.VT >LDA.G FileY+1
bcs .2 bcs .2
sta (pData),y sta (pData),y
.2 >DECW.G FileY .2 >DECW.G FileY
jmp SCRN.UpdateViewPort jmp SCRN.UpdateViewPort
@ -258,22 +258,22 @@ Ctrl.CR lda #C.CR
>STZ.G FileX >STZ.G FileX
>INCW.G FileY >INCW.G FileY
>STZ.G CurX >STZ.G CurX
>LDA.G CurY >LDA.G CurY
>CMP.G ViewPortHm1 >CMP.G ViewPortHm1
bne .1 bne .1
jsr SCRN.LineBufOut Bottom line, CEOL... jsr SCRN.LineBufOut Bottom line, CEOL...
bcs .99 bcs .99
jmp SCRN.UpdateViewPort ...and scroll jmp SCRN.UpdateViewPort ...and scroll
.1 dec .1 dec
>CMP.G ViewPortHm1 >CMP.G ViewPortHm1
beq .6 No scroll needed beq .6 No scroll needed
>PUSHW LineBufPtr >PUSHW LineBufPtr
>PUSHW L.SEQ.SCROLLCURDN >PUSHW L.SEQ.SCROLLCURDN
@ -286,7 +286,7 @@ Ctrl.CR lda #C.CR
>PUSHA >PUSHA
>PUSHBI 2 >PUSHBI 2
jsr SCRN.LineBufSprintf jsr SCRN.LineBufSprintf
.99 bcs .9 .99 bcs .9
>PUSHW LineBufPtr >PUSHW LineBufPtr
@ -321,7 +321,7 @@ Ctrl.O ldy #FileY+1
txa txa
sbc #0 sbc #0
bcc .8 bcc .8
ldy #FileY+1 ldy #FileY+1
sta (pData),y sta (pData),y
dey dey
@ -371,7 +371,7 @@ Ctrl.P ldy #FileY+1
dey dey
pla pla
sta (pData),y sta (pData),y
>LDA.G ViewPortH >LDA.G ViewPortH
clc clc
>ADC.G ScreenY >ADC.G ScreenY
@ -380,7 +380,7 @@ Ctrl.P ldy #FileY+1
lda (pData),y lda (pData),y
adc #0 adc #0
sta (pData),y sta (pData),y
>STZ.G FileX >STZ.G FileX
>STA.G ScreenX >STA.G ScreenX
@ -409,16 +409,16 @@ Ctrl.Y jsr BUF.GetNextLine
>LDA.G FileY+1 >LDA.G FileY+1
sbc #0 sbc #0
bcs .2 bcs .2
>LDA.G FileY >LDA.G FileY
tax tax
lda #0 lda #0
.2 >STA.G ScreenY+1 .2 >STA.G ScreenY+1
dey dey
txa txa
sta (pData),y sta (pData),y
jmp SCRN.UpdateMainAndStatus jmp SCRN.UpdateMainAndStatus
*-------------------------------------- *--------------------------------------
Ctrl.F >LDYA L.DLG.FIND Ctrl.F >LDYA L.DLG.FIND
@ -427,10 +427,10 @@ Ctrl.F >LDYA L.DLG.FIND
cmp #C.CR cmp #C.CR
bne .8 bne .8
.8 jsr DLG.Close .8 jsr DLG.Close
clc clc
rts rts
*-------------------------------------- *--------------------------------------
@ -443,7 +443,7 @@ Ctrl.R clc
*-------------------------------------- *--------------------------------------
Ctrl.Q >LDA.G bUnSaved Ctrl.Q >LDA.G bUnSaved
beq .8 beq .8
>STZ.G bUpdateStatus >STZ.G bUpdateStatus
jsr SCRN.ResetStatusBar jsr SCRN.ResetStatusBar
@ -453,28 +453,28 @@ Ctrl.Q >LDA.G bUnSaved
>PUSHBI 0 >PUSHBI 0
jsr SCRN.LineBufSprintf jsr SCRN.LineBufSprintf
bcs .9 bcs .9
jsr SCRN.LineBufOut jsr SCRN.LineBufOut
bcs .9 bcs .9
.1 jsr GetCh .1 jsr GetCh
bcs .9 bcs .9
cmp #'a cmp #'a
bcc .2 bcc .2
cmp #'z'+1 cmp #'z'+1
bcs .2 bcs .2
eor #$20 eor #$20
.2 cmp #'Y' .2 cmp #'Y'
beq .8 beq .8
cmp #'N' cmp #'N'
beq .80 beq .80
bra .1 bra .1
.8 lda #$ff .8 lda #$ff
>STA.G bExit >STA.G bExit
@ -488,16 +488,16 @@ Ctrl.S >LDYA L.DLG.SAVE
jsr DLG.Run jsr DLG.Run
pha pha
jsr DLG.Close jsr DLG.Close
pla pla
cmp #C.CR cmp #C.CR
bne .8 bne .8
jsr FILE.Save jsr FILE.Save
bcc .1 bcc .1
pha pha
jsr SCRN.ResetStatusBar jsr SCRN.ResetStatusBar
@ -508,22 +508,22 @@ Ctrl.S >LDYA L.DLG.SAVE
bra .2 bra .2
.1 jsr SCRN.ResetStatusBar .1 jsr SCRN.ResetStatusBar
>PUSHW LineBufPtr >PUSHW LineBufPtr
>PUSHW L.MSG.STATUSBAR.S >PUSHW L.MSG.STATUSBAR.S
>LDA.G hFileName >LDA.G hFileName
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>PUSHYA >PUSHYA
>PUSHBI 2 >PUSHBI 2
.2 jsr SCRN.LineBufSprintf .2 jsr SCRN.LineBufSprintf
jsr SCRN.LineBufOut jsr SCRN.LineBufOut
bcs .9 bcs .9
.8 jsr SCRN.UpdateTopBar .8 jsr SCRN.UpdateTopBar
jmp SCRN.GotoCurXCurY jmp SCRN.GotoCurXCurY
.9 rts .9 rts
@ -554,6 +554,7 @@ Ctrl.FS jsr BUF.GetLine
*-------------------------------------- *--------------------------------------
Ctrl.V jsr BUF.InsertClipboard Ctrl.V jsr BUF.InsertClipboard
bcs .9 bcs .9
jsr SCRN.UnSaved jsr SCRN.UnSaved
jmp SCRN.UpdateMainAndStatus jmp SCRN.UpdateMainAndStatus
@ -572,8 +573,10 @@ Ctrl.W jsr BUF.ComputeCOffset Y=line len
ply Get back line len ply Get back line len
clc clc
lda (BufPtr),y lda (BufPtr),y
beq .1 last line \0 ending beq .1 last line \0 ending
sec delete CR sec delete CR
.1 tya .1 tya
adc BUF.LOffset adc BUF.LOffset
@ -592,11 +595,13 @@ Ctrl.X jsr BUF.SelToClipboard
Ctrl.D jsr BUF.DelSel Ctrl.D jsr BUF.DelSel
bcs Ctrl.D.8 bcs Ctrl.D.8
jsr BUF.ResetSel jsr BUF.ResetSel
jsr SCRN.CursorAdjust jsr SCRN.CursorAdjust
jsr SCRN.UpdateViewPort
jsr SCRN.UnSaved will update TopBar jsr SCRN.UnSaved will update TopBar
jmp SCRN.UpdateMainAndStatus jmp SCRN.UpdateMainAndStatus
Ctrl.D.8 clc Ctrl.D.8 clc
rts rts
*-------------------------------------- *--------------------------------------
@ -605,6 +610,7 @@ Ctrl.Z jsr BUF.ComputeCOffset
lda BUF.COffset lda BUF.COffset
eor FileLen eor FileLen
bne .1 bne .1
lda BUF.COffset+1 lda BUF.COffset+1
eor FileLen+1 eor FileLen+1
beq Ctrl.D.8 beq Ctrl.D.8
@ -619,11 +625,11 @@ Ctrl.Z jsr BUF.ComputeCOffset
>CMP.G ViewPortHm1 >CMP.G ViewPortHm1
beq .8 Bottom line, all done beq .8 Bottom line, all done
dec dec
>CMP.G ViewPortHm1 >CMP.G ViewPortHm1
beq .8 No scroll needed beq .8 No scroll needed
>PUSHW L.SEQ.SCROLLCURUP >PUSHW L.SEQ.SCROLLCURUP
>LDA.G CurY >LDA.G CurY
inc inc
@ -638,20 +644,20 @@ Ctrl.Z jsr BUF.ComputeCOffset
jsr SCRN.ResetScrollRgn jsr SCRN.ResetScrollRgn
bcs .9 bcs .9
jsr SCRN.UpdateCurrentLine jsr SCRN.UpdateCurrentLine
bcs .9 bcs .9
jsr SCRN.UpdateLast jsr SCRN.UpdateLast
bcs .9 bcs .9
.8 jsr SCRN.UpdateCurrentLine .8 jsr SCRN.UpdateCurrentLine
bcs .9 bcs .9
.80 jsr SCRN.UnSaved .80 jsr SCRN.UnSaved
jsr SCRN.GotoCurXCurY jsr SCRN.GotoCurXCurY
jmp SCRN.UpdateStatusBar jmp SCRN.UpdateStatusBar
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/edit.s.ctrl SAVE usr/src/bin/edit.s.ctrl

View File

@ -474,13 +474,20 @@ SCRN.ResetStatusBar
*-------------------------------------- *--------------------------------------
SCRN.CursorAdjust SCRN.CursorAdjust
.1 jsr BUF.ComputeCOffset .1 jsr BUF.ComputeCOffset
bcc .8 bcc .2 Y = linelen
>DECW.G FileY
>STZ.G FileX
>DECW.G FileY
* >STZ.G FileX
bra .1 bra .1
.8 rts .2 tya
>CMP.G FileX
bcs .8
>STA.G FileX
.8 clc
rts
*-------------------------------------- *--------------------------------------
SCRN.GotoCurXCurY SCRN.GotoCurXCurY
ldy #CurX ldy #CurX

View File

@ -1,11 +1,11 @@
NEW NEW
AUTO 3,1 AUTO 3,1
*-------------------------------------- *--------------------------------------
IO.D2.SeekTimeR .EQ 42 LIBBLKDEV Recalibration IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 56 LIBBLKDEV Track Formatter IO.D2.SeekTimeF .EQ 75 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 56 LIBBLKDEV Boot Block IO.D2.SeekTimeB .EQ 52 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial IO.D2.SeekTimeP .EQ 32 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 14 ProDOS.FX increment -> until > 128 IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*-------------------------------------- *--------------------------------------
IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0Off .EQ $C080
IO.D2.Ph0On .EQ $C081 IO.D2.Ph0On .EQ $C081

View File

@ -16,7 +16,7 @@ NEW
#define SEEK_END 2 #define SEEK_END 2
short int fopen(const char*,short int,short int,int); 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 fread(short int,void*,int);
int fwrite(short int,const void*,int); int fwrite(short int,const void*,int);

View File

@ -30,19 +30,19 @@ D2.Recalibrate >PULLB D2.DrvSlt
lda #IO.D2.SeekTimeR lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA jsr D2.Wait100usecA
lda #168 41 x 4 Qtracks lda #160 40 x 4 Qtracks
php
sei
.1 dec .1 dec
dec dec
pha pha
and #6
ora D2.Slotn0
phy phy
plx plx
tay jsr D2.SeekPhOnY
lda IO.D2.Ph0On,y
lda #IO.D2.SeekTimeR lda #IO.D2.SeekTimeR
jsr D2.Wait100usecA jsr D2.Wait100usecA
@ -59,9 +59,12 @@ D2.Recalibrate >PULLB D2.DrvSlt
lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
jsr D2.Wait25600usec plp
* clc
jmp D2.Wait25600usec
clc
.9 rts .9 rts
*/-------------------------------------- */--------------------------------------
*\-------------------------------------- *\--------------------------------------
@ -105,30 +108,30 @@ D2.MoveHead >PULLB D2.TargetQTrack
D2.MoveHead.SEI lda D2.CurrentQTrack D2.MoveHead.SEI lda D2.CurrentQTrack
bit #1 bit #1 A = Current QT
beq .2 we are on 0/4 or 2/4 track beq .2 we are on 0/4 or 2/4 track
pha pha
cmp D2.TargetQTrack we are on 1/4 or 3/4 track cmp D2.TargetQTrack we are on 1/4 or 3/4 track
bcc .1 if CC, C < T, must move in bcc .1 if CC, C < T, must move in
inc move out: X = Ph(N+1) inc move out: X = Ph(N+1)
.1 jsr D2.SeekPhOnY move in : X = Ph(N) .1 jsr D2.SeekPhOnY move in : X = Ph(N)
tya tya
tax tax
pla pla
bcs .2 if CS, C > T, must move out bcs .2 if CS, C > T, must move out
inc move in : Y = Ph(N+1) inc move in : Y = Ph(N+1)
.2 jsr D2.SeekPhOnY move out: Y = Ph(N) .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 .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 .6 jsr D2.SeekPhOnY now X and Y on
.8 lda #IO.D2.SeekTimeF .8 lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA ...wait... jsr D2.Wait100usecA ...wait...
.9 lda D2.CurrentQTrack .9 lda D2.CurrentQTrack
@ -166,13 +170,15 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
jsr D2.Wait25600usec jsr D2.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .10 bcc .10
clc
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
clc
.10 lda IO.D2.Ph0Off,y .10 jsr D2.Wait25600usec
rts rts
*-------------------------------------- *--------------------------------------
@ -444,7 +450,7 @@ D2.Wait25600usec
D2.Wait100usecA phx D2.Wait100usecA phx
.1 ldx #20 (2) .1 ldx #19 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)

View File

@ -54,7 +54,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
*-------------------------------------- *--------------------------------------
XRW.Blk2TS lda bloknml XRW.Blk2TS lda bloknml
sta XRW.ReqTrack sta XRW.ReqTrack
and #7 and #7
cmp #4 cmp #4
php php
@ -63,9 +63,9 @@ XRW.Blk2TS lda bloknml
plp plp
rol rol
sta XRW.ReqSector sta XRW.ReqSector
lda bloknml+1 lda bloknml+1
ldx #3 ldx #3
.1 lsr .1 lsr
@ -165,7 +165,7 @@ XRW.Cmd lda A4L get command #
jsr XRW.Recalibrate jsr XRW.Recalibrate
bcc .3 bcc .3
bcs XRW.E.IO bcs XRW.E.IO
.4 inc buf+1 .4 inc buf+1
@ -207,7 +207,7 @@ XRW.SectorIO bit XRW.bWrite
.1 stz XRW.RetryCnt .1 stz XRW.RetryCnt
.2 jsr XRW.ReadAddr .2 jsr XRW.ReadAddr (..14)
bcs .3 (2) bcs .3 (2)
lda XRW.AddrField.S (4) 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 * 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 !! * 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 .LIST ON
XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE XRW.Write lda IO.D2.ReadProt,x (4) PREWRITE MODE
.LIST OFF .LIST OFF
bit IO.D2.ReadMode,x (4) lda IO.D2.ReadMode,x (4)
lda #$FF (2) jsr XRW.Write.RTS (12)
nop (2) nop (2)
nop (2)
lda #$FF (2)
sta IO.D2.WriteMode,x (5) goto write mode sta IO.D2.WriteMode,x (5) goto write mode
ora IO.D2.WShift,x (4) ora IO.D2.WShift,x (4)
@ -408,7 +409,7 @@ XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE
ldy nbuf2 (4) ldy nbuf2 (4)
sty pcl (3) sty pcl (3)
ldy #5 (2) ldy #6 (2)
nop (2) nop (2)
.1 pha (3) exact timing. .1 pha (3) exact timing.
@ -535,15 +536,12 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
bpl .1 (3) if not. bpl .1 (3) if not.
bmi .2 (3) bmi .2 (3)
.2 nop (2) .2 nop (2)
tya (2) Y = $FF from DEY BMI tya (2) Y = $FF from DEY BMI
jsr wnibl (11..10) write turn off byte. 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 XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode
lda IO.D2.WShift,x (4) to read mode. lda IO.D2.WShift,x (4) to read mode.
@ -567,11 +565,11 @@ XRW.Wait25600usec
.HS 2C BIT ABS .HS 2C BIT ABS
XRW.Wait100usec lda #1 XRW.Wait100usec lda #1
XRW.Wait100usecA XRW.Wait100usecA
phx phx
.1 ldx #20 (2) .1 ldx #17 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)
@ -663,14 +661,13 @@ XRW.ReadAddr ldy #$FC
tay if final checksum non-zero, tay if final checksum non-zero,
bne .99 (2) then error. bne .99 (2) then error.
clc (2)
.9 lda IO.D2.RData,x (4) .9 lda IO.D2.RData,x (4)
bpl .9 (2) bpl .9 (2)
eor #$DE (2) eor #$DE (2)
bne .99 (2) bne .99 (2)
clc (2)
rts (6) rts (6)
.99 sec .99 sec
@ -692,7 +689,7 @@ XRW.TrackSelect lda #2
jsr XRW.Recalibrate jsr XRW.Recalibrate
bcc .1 bcc .1
rts rts
*-------------------------------------- *--------------------------------------
.4 ldx XRW.UnitIndex .4 ldx XRW.UnitIndex
@ -713,15 +710,15 @@ XRW.TrackSelect lda #2
lda XRW.ReqTrack lda XRW.ReqTrack
and #1 and #1
rol A = 0/2 rol A = 0/2
ora A2L ora A2L
tay y = n0/n2 tay y = n0/n2
lda IO.D2.Ph0On,y lda IO.D2.Ph0On,y
lda IO.D2.Ph0On+4,y lda IO.D2.Ph0On+4,y
jsr XRW.Wait100usec jsr XRW.Wait100usec
lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off,y
@ -748,7 +745,7 @@ XRW.TrackSelect lda #2
sta XRW.SeekTime sta XRW.SeekTime
sta XRW.D2SeekTime-1,x sta XRW.D2SeekTime-1,x
.7 ldy XRW.D2Trk-1,x From actual Pos... .7 ldy XRW.D2Trk-1,x From actual Pos...
lda XRW.ReqTrack ....to Req lda XRW.ReqTrack ....to Req
jsr XRW.SeekYA X = XRW.UnitIndex jsr XRW.SeekYA X = XRW.UnitIndex
@ -762,12 +759,12 @@ XRW.TrackSelect.RTS
XRW.Recalibrate sec XRW.Recalibrate sec
dec XRW.RecalibrateCnt dec XRW.RecalibrateCnt
beq XRW.TrackSelect.RTS beq XRW.TrackSelect.RTS
ldx XRW.UnitIndex ldx XRW.UnitIndex
ldy #41 from 41... (4/4) ldy #40 from 40... (4/4)
lda #0 ....to 0 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 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) .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 .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 lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : PhX Off
bra .8 go wait.... bra .8 go wait....
.5 phy we must go on 1/4 or 3/4 .5 phy we must go on 1/4 or 3/4
plx Y already ON, -> X for Ph0Off,x plx Y already ON, -> X for Ph0Off,x
bcs .6 if CS, C > T, must move out bcs .6 if CS, C > T, must move out
inc CC: C < T, ON next PH inc CC: C < T, ON next PH
.6 jsr XRW.SeekPhOnY now X and Y on .6 jsr XRW.SeekPhOnY now X and Y on
.8 lda #IO.D2.SeekTimeF XRW.SeekTime .8 lda XRW.SeekTime
jsr XRW.Wait100usecA ...wait... jsr XRW.Wait100usecA ...wait...
.9 lda XRW.CurrentQTrack .9 lda XRW.CurrentQTrack
@ -837,18 +835,18 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
bne .3 bne .3
lsr CS if X,Y on lsr CS if X,Y on
jsr XRW.Wait25600usec jsr XRW.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .10 bcc .10
lda IO.D2.Ph0Off,x
clc Exit wit CC (recalibrate) clc Exit wit CC (recalibrate)
.10 lda IO.D2.Ph0Off,y
rts lda IO.D2.Ph0Off,x
.10 rts
*-------------------------------------- *--------------------------------------
XRW.SeekPhOnY and #6 XRW.SeekPhOnY and #6
ora A2L ora A2L
@ -857,7 +855,7 @@ XRW.SeekPhOnY and #6
rts rts
*-------------------------------------- *--------------------------------------
* In: * In:
* A = Logical Track 0 -> 159, * A = Logical Track 0 -> 159,
* X = XRW.UnitIndex * X = XRW.UnitIndex
* D2VolNum : d0000sss * D2VolNum : d0000sss
* Out: * Out:
@ -872,8 +870,8 @@ XRW.Trk2Qtrk sta pch
asl asl
asl asl
rts rts
.1 bpl .2 .1 bpl .2
cmp #$85 cmp #$85
bcs .10 > 192 ? must be a buggy 254 bcs .10 > 192 ? must be a buggy 254
@ -882,16 +880,16 @@ XRW.Trk2Qtrk sta pch
.2 phx .2 phx
and #%00000111 stepping and #%00000111 stepping
tax tax
lda #0 lda #0
clc clc
.3 adc pch .3 adc pch
dex dex
bne .3 bne .3
plx plx
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
* preniblize subroutine (16 sector format) * preniblize subroutine (16 sector format)

View File

@ -262,29 +262,29 @@ BB.FX2.SeekReadD2
cmp BB.TargetQTrack cmp BB.TargetQTrack
beq BB.FX2.ReadSectD2 beq BB.FX2.ReadSectD2
bit #1 bit #1 A = Current QT
beq .2 we are on 0/4 or 2/4 track beq .2 we are on 0/4 or 2/4 track
pha pha
bcc .1 if CC, C < T, must move in 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 tya
tax tax
pla pla
bcs .2 if CS, C > T, must move out bcs .2 if CS, C > T, must move out
inc move in : Y = Ph(N+1) inc move in : Y = Ph(N+1)
.2 jsr BB.FX2.SeekPhOnY move out: Y = Ph(N) .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 .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 .6 jsr BB.FX2.SeekPhOnY now X and Y on
.8 lda #IO.D2.SeekTimeB .8 lda #IO.D2.SeekTimeB
jsr BB.Wait100usecA ...wait... jsr BB.Wait100usecA ...wait...
.9 lda BB.CurrentQTrack .9 lda BB.CurrentQTrack
@ -323,11 +324,15 @@ BB.FX2.SeekReadD2
lda #0 lda #0
jsr BB.Wait100usecA jsr BB.Wait100usecA
lda IO.D2.Ph0Off,y
bcc .10 bcc .10
clc
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
.10 lda IO.D2.Ph0Off,y .10
*-------------------------------------- *--------------------------------------
BB.FX2.ReadSectD2 BB.FX2.ReadSectD2
ldx ROM.D2.Slotn0 ldx ROM.D2.Slotn0
@ -455,7 +460,7 @@ goseek jmp BB.FX2.SeekReadD2
*-------------------------------------- *--------------------------------------
BB.Wait100usecA phx (3) BB.Wait100usecA phx (3)
.1 ldx #20 (2) .1 ldx #19 (2)
.2 dex (2) .2 dex (2)
bne .2 (3) bne .2 (3)

View File

@ -234,6 +234,7 @@ K.FGetS ldy #3
inc ZPPtr1 inc ZPPtr1
bne .4 bne .4
inc ZPPtr1+1 inc ZPPtr1+1
bne .4 bne .4
@ -262,6 +263,7 @@ K.FGetS ldy #3
.8 lda #0 .8 lda #0
sta (ZPPtr2) terminate string sta (ZPPtr2) terminate string
tay return NULL (TODO: return s)
clc clc
.9 >RET 5 .9 >RET 5
*/-------------------------------------- */--------------------------------------
@ -372,23 +374,23 @@ K.FOpen jsr PFT.CheckPath4
bcs K.FOpen.99 bcs K.FOpen.99
ldx IO.hFILE ldx IO.hFILE
lda (pFD) lda (pFD)
bne K.FOpen.8 bne K.FOpen.8
K.FOpen.REGDIR >LDYAI K.Buf256 K.FOpen.REGDIR >LDYAI K.Buf256
>SYSCALL2 StrDup >SYSCALL2 StrDup
bcs K.FOpen.90 bcs K.FOpen.90
txa txa
ldx IO.hFILE ldx IO.hFILE
sta hFDs.hName-1,x sta hFDs.hName-1,x
K.FOpen.8 inc hFDs.oCnt-1,x K.FOpen.8 inc hFDs.oCnt-1,x
txa txa
* clc * clc
rts rts
K.FOpen.90 pha K.FOpen.90 pha
jsr UNISTD.Close jsr UNISTD.Close
pla pla
@ -416,31 +418,31 @@ K.FClose jsr PFT.CheckNodeA
ldx IO.hFILE ldx IO.hFILE
dec hFDs.oCnt-1,x dec hFDs.oCnt-1,x
bne .8 bne .8
lda hFDs.hName-1,x its a DEV, don't clear FD lda hFDs.hName-1,x its a DEV, don't clear FD
beq .8 beq .8
stz hFDs.hName-1,x stz hFDs.hName-1,x
jsr K.FreeMem jsr K.FreeMem
lda (pFD) lda (pFD)
tay tay
ldx IO.hFILE ldx IO.hFILE
lda hFDs-1,x lda hFDs-1,x
beq .8 beq .8
stz hFDs-1,x stz hFDs-1,x
cpy #S.FD.T.DSOCK SOCKS will free FDs cpy #S.FD.T.DSOCK SOCKS will free FDs
beq .8 beq .8
cpy #S.FD.T.SSOCK cpy #S.FD.T.SSOCK
beq .8 beq .8
jmp K.FreeMem jmp K.FreeMem
.8 clc .8 clc
rts rts
*/-------------------------------------- */--------------------------------------
@ -534,15 +536,18 @@ K.FSeek ldy #5
jsr PFT.CheckNodeY jsr PFT.CheckNodeY
bcc .11 bcc .11
>RET 5 >RET 6
.11 lda (pFD) .11 >PULLA whence
bne STDIO.IOERR
>PULLA whence
tax tax
>PULLL ACC32 >PULLL ACC32 offset
inc pStack discard hFile
lda (pFD)
bne STDIO.IOERR
cpx #SEEK.END cpx #SEEK.END
beq .30 beq .30
@ -582,10 +587,13 @@ K.FSeek ldy #5
.82 >MLICALL MLISETMARK .82 >MLICALL MLISETMARK
bcc .9 bcc .9
cmp #MLI.E.BEYEOF cmp #MLI.E.BEYEOF
bne .9 bne .9
>MLICALL MLISETEOF >MLICALL MLISETEOF
bcc .82 bcc .82
.9 rts .9 rts
.98 lda #E.BADARG .98 lda #E.BADARG