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

View File

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

View File

@ -40,7 +40,7 @@ CC.CORE.Init >SYSCALL SListNew
* clc
.9 rts
*--------------------------------------
CC.CORE.Quit jsr CS.RUN.FClose
CC.CORE.Quit jsr CC.FIO.FClose
bne CC.CORE.Quit
ldy ScopeIdx
@ -78,9 +78,11 @@ CC.CORE.Quit jsr CS.RUN.FClose
>LDA.G CC.hStack
.7 beq CC.Quit.RTS
.7 beq .8
>SYSCALL FreeMem
CC.Quit.RTS rts
.8 rts
*--------------------------------------
CC.CompileFile >SLEEP
@ -98,7 +100,7 @@ CC.CompileFile >SLEEP
cmp #3 Ctrl-C
beq .9
.1 jsr CS.RUN.FGetS
.1 jsr CC.FIO.FGetS
bcs .9
jsr CC.CompileLine
@ -114,176 +116,143 @@ CC.CompileFile >SLEEP
.9 rts
*--------------------------------------
CC.CompileLine jsr CC.GetCharNB
bcs CC.Quit.RTS
bcs .9
CC.CompileLine.1
cmp #C.CR empty line....
beq .2
cmp #C.CR EOL....
beq .8
cmp #'/'
bne .3 comments ...
jmp CC.Comments
.2 clc
rts
.3 cmp #'#' directive ?
bne .4
cmp #'#' directive ?
bne .1
jmp CC.DIR
.4 cmp #'}' End of CPStmt ?
bne .10
.1 cmp #'/'
bne .2 comments ...
jmp CC.Comments
.2 cmp #'}' End of CPStmt ?
bne .3
jsr CC.GetNextCharNB Skip '}'
jmp CC.STMT.CPStmt.END
*--------------------------------------
.10 jsr CC.IsLetter
bcc .20
jsr CC.STMT.CPStmt.END
bcs .9
* TODO: PREOPS ++ --.....
bra CC.CompileLine
bcs .29
.3 cmp #';' End of Stmt ?
bne .4
jsr CC.GetNextCharNB Skip ';'
jsr CC.STMT.Stmt.END
bcs .9
bra CC.CompileLine
.4 jsr CC.CompileStmt
bcs .9
bra CC.CompileLine
.8 clc
.9 rts
*--------------------------------------
.20 >LDYA L.CC.TYPEQUAL
* keyword : for, while ....
*--------------------------------------
CC.CompileStmt >LDYA L.CC.KW
jsr CC.LookupID
bcs .50
bcs .10 not an internal CC keyword....
jsr CC.TYPE.Decl
bcs .59
ldx #SYM.SC.STATIC Y,A = Type/Qual
bit bLocalScope
bpl .25
bit #SYM.Q.FUNC someone wants to add a local f() ?
sec
bne .29
ldx #SYM.SC.AUTO
.25 jsr CC.SYM.New Y,A=T/Q, add with undef value...
bcs .29 OOM or DUP
jsr CC.GetCharNB
bcs .69
cmp #';'
beq .28
cmp #'{'
bne .26
jsr CC.GetNextCharNB skip '{'
bcs .69
jmp CC.SYM.StoreF
txa
>STA.G CC.CmdSave
jmp (J.CC.KW,x)
*--------------------------------------
* TODO: AOPS
* Declaration : int var or int func()
*--------------------------------------
.26 cmp #'='
sec
bne .69
*--------------------------------------
jsr CC.GetNextCharNB skip '='
bcs .69
jsr CC.SYM.GetTypeInYA expected T/Q
jsr CC.EXP.Eval
bcs .59
jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var
.29 bcs .9
.28 jsr CC.SYM.Store
bcs .9
bra .68
*--------------------------------------
.21 jsr CC.GetCharNB
bcs .99
cmp #';'
beq .8
cmp #'{'
bne .99
jsr CC.GetNextCharNB skip '{'
bcs .99
jmp CC.CompileLine.1
*--------------------------------------
.50 >LDYA L.CC.KW
.10 >LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .6 not an internal CC keyword....
bcs .6
jsr CC.KW.JMP
.59 bcs .9
bra .8
jmp CC.DECL
*--------------------------------------
.6 jsr CC.SYM.Lookup var= or func() ?
.69 bcs .99
ldy #SYM.Q
lda (ZPLookupSymPtr),y
bit #SYM.Q.FUNC
beq .60
ldy #0 func( ... );
lda #0
jsr CC.F.CallNoRetV
bcs .9
jsr CC.SYM.LookupFree
bra .8
* Statement : ++var, var=, func();
*--------------------------------------
.60 jsr CC.GetCharNB var = ?
bcs .99
cmp #'=' TODO: all AOPS
bne .99
jsr CC.GetNextChar Skip =
bcs .99
jsr CC.SYM.GetTypeInYA
jsr CC.EXP.Eval
bcs .9
jsr CC.SYM.PopValue
bcs .9
jsr CC.SYM.LookupFree
.6 jmp CC.STMT
*--------------------------------------
.68 jsr CC.GetCharNB
cmp #';'
beq .8
.99 lda #E.CSYN
sec
.9 rts
*--------------------------------------
.8 jsr CC.GetNextCharNB Skip ;
bcs .9
CC.CORE.SetVar stz ExpState
cmp #C.CR
beq .80
jsr CC.EXP.POSTOPS var++, var[0]... ?
bcs .99
jmp CC.CompileLine.1
ldx StmtPreOp
jsr CC.EXP.PREOPS apply ++var, ....
bcs .99
jsr CC.GetCharNB
bcs .90
jsr CC.IsEndArg var++; or ++var; ?
bcc .8
jsr CC.LookupAOP var=, var+= ... ?
bcs .90
cpx #0 TOTO : all AOPS
bne *
lda ExpState
bmi .90 VonStack
asl
bmi .7 AinPTR
asl
bmi .6 AonStack
jsr CC.EXP.GetAddr1
bcc .7
.80 clc
rts
*--------------------------------------
CC.Comments jsr CC.GetNextChar
.6 >LDYA L.PCC.PopAddr1
jsr CODE.EmitPCC
bcs .99
.7 ldy #SYM.Q
lda (ZPLookupSymPtr),y
pha
lda (ZPLookupSymPtr)
tay
pla get expected T/Q
jsr CC.EXP.Eval
bcs .99
jsr CC.EXP.GetSymSizeOfInAXC
tay
dey
jsr CODE.LDYI
bcs .99
>LDYA L.PCC.SetValue
jmp CODE.EmitPCC
.8 clc
rts
.90 lda #E.CSYN
sec
.99 rts
**--------------------------------------
CC.Comments jsr CC.GetNextChar TODO : /* ... */
cmp #'/'
bne .90
@ -304,10 +273,32 @@ CC.SkipLine jsr CC.GetNextChar
.9 rts
*--------------------------------------
CC.LookupID >STYA ZPLookupPtr
jsr CC.GetIDLen
bra CC.Lookup
CC.LookupAOP >LDYA L.CC.AOPS
>STYA ZPLookupPtr
ldy #$ff
.1 iny
lda (ZPLineBufPtr),y
sec
beq .9
jsr CC.IsOPChar
bcs .9
cmp #'='
bne .1
iny
.8 tya
bra CC.Lookup
.9 rts
CC.LookupOP >STYA ZPLookupPtr
jsr CC.GetOPLen
@ -342,7 +333,7 @@ CC.Lookup phy Y = len
lda ZPLookupPtr+1
adc #0
clc Y,A = F() def, X = F() index
.8 rts
rts
.4 inx
inx
@ -350,32 +341,11 @@ CC.Lookup phy Y = len
jsr CC.ZPLookupPtrAddAp1
bra .1
.9 pla
.9 ldx #$FF
pla
sec
rts
*--------------------------------------
CC.SListLookup >PUSHA hSList
>PUSHA ...for SListGetData
>PUSHW ZPLineBufPtr
>SYSCALL SListLookup
bcs .99
>PUSHA KeyID.HI
tya
>PUSHA KeyID.LO
jsr CC.SkipX
>PUSHWZ allocate
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
.9 rts Y,A = SymSize, X = hSymBuf
.99 inc pStack discard extra hSList
rts
*--------------------------------------
CC.ZPLookupPtrAddAp1
sec
adc ZPLookupPtr
@ -400,6 +370,28 @@ CC.GetDefine >LDA.G CC.hDefines
.9 rts
*--------------------------------------
CC.SListLookup >PUSHA hSList
>PUSHA ...for SListGetData
>PUSHW ZPLineBufPtr
>SYSCALL SListLookup
bcs .99
>PUSHA KeyID.HI
tya
>PUSHA KeyID.LO
jsr CC.SkipX
>PUSHWZ allocate
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
.9 rts Y,A = SymSize, X = hSymBuf
.99 inc pStack discard extra hSList
rts
*--------------------------------------
* CT Stack
*--------------------------------------
CC.PushTQ ldy #SYM.Q
@ -455,13 +447,19 @@ CC.PopYA ldy CStackPtr
sec
rts
*--------------------------------------
CC.Pop ldy CStackPtr
CC.Pop jsr CC.Get
inc CStackPtr
* clc
.9 rts
*--------------------------------------
CC.Get ldy CStackPtr
beq .9
lda (ZPCCStack),y
inc CStackPtr
clc
rts
@ -521,6 +519,32 @@ CC.GetNextCharNB
CC.GetNextCharNB.RTS
rts
*--------------------------------------
CC.GetCharNBNL jsr CC.GetChar
bcs CC.GetNextCharNB.RTS
jsr CC.CheckCharNB
bcs CC.GetNextCharNBNL
cmp #C.CR
clc
bne CC.GetNextCharNB.RTS
jsr CC.FIO.FGetS
bcs CC.GetNextCharNB.RTS
*--------------------------------------
CC.GetNextCharNBNL
jsr CC.GetNextCharNB
bcs CC.GetNextCharNB.RTS
cmp #C.CR
clc
bne .9
jsr CC.FIO.FGetS
bcc CC.GetNextCharNBNL
.9 rts
*--------------------------------------
CC.CheckSpace jsr CC.GetChar
bcs .90
@ -578,10 +602,10 @@ CC.GetChar lda (ZPLineBufPtr)
CC.IsEndArg cmp #']'
beq .8
cmp #';'
cmp #','
beq .8
cmp #','
cmp #';'
beq .8
cmp #')'

View File

@ -1,68 +1,69 @@
NEW
AUTO 3,1
*--------------------------------------
CC.DECL jsr CC.IsLetter
bcs .80
.10 >LDYA L.CC.SCSPEC
jsr CC.LookupID
bcs .20
* TODO: typedef ....
bcs .90
.20 >LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .80
jsr CC.TYPE.Decl
bcs .99
* X = type qual
*--------------------------------------
CC.DECL jsr CC.TYPE.Decl
bcs .9
ldx #SYM.SC.STATIC Y,A = Type/Qual
bit bLocalScope
bpl .21
bpl .25
bit #SYM.Q.FUNC someone wants to add a local f() ?
bne .90
sec
bne .29
ldx #SYM.SC.AUTO
.21 jsr CC.SYM.New Y,A=T/Q, add with undef value...
.25 jsr CC.SYM.New Y,A=T/Q, add with undef value...
bcs .29 OOM or DUP
.22 jsr CC.GetCharNB
bcs .99
jsr CC.SYM.Store
bcs .99
cmp #';'
beq .28
* TODO: AOPS
cmp #'{'
bne .26
jsr CC.GetNextCharNB skip '{'
bcs .99
jmp CC.SYM.StoreF
*--------------------------------------
* Initializer
*--------------------------------------
.26 cmp #'=' type var = value ?
bne .99
cmp #'='
bne .90
jsr CC.GetNextCharNB skip '='
bcs .99
bcs .99
jsr CC.SYM.GetTypeInYA expected T/Q
jsr CC.EXP.Eval
bcs .99
bcs .9
jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var
.29 bcs .99
jsr CC.SYM.GetAddr1
bcs .9
jsr CC.SYM.SetValue Y,A = T/Q, Set value to this var
.29 bcs .9
.28 jsr CC.SYM.Store
bcs .9
jsr CC.GetCharNB
cmp #';'
bne .99
clv
clc
rts
.80 bit #$60
clc
rts
.90 lda #E.CSYN
*--------------------------------------
.99 lda #E.CSYN
sec
.99 rts
.9 rts
*--------------------------------------
CC.SCSPEC.AUTO
CC.SCSPEC.REGISTER
@ -71,9 +72,9 @@ CC.SCSPEC.EXTERN
CC.SCSPEC.TYPEDEF
.99 lda #E.CSYN
.98 lda #E.CSYN
sec
.9 rts
.99 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.decl

View File

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

View File

@ -10,7 +10,12 @@ NEW
CC.EXP.Eval00 lda #0
tay
CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
CC.EXP.Eval ldx ZPPtr1 local : returned T/Q
phx
ldx ZPPtr1+1
phx
ldx ZPPtr2 local : expected T/Q
phx
ldx ZPPtr2+1
phx
@ -22,7 +27,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
>STYA ZPPtr2
stz ZPPtr1
stz ZPPtr1+1
lda #$ff no previous OP
sta ZPPtr3+1 no PREOPS
pha
*--------------------------------------
.10 jsr CC.GetCharNB
@ -60,7 +69,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
.19 jmp CC.EXP.Eval.ESYN
*--------------------------------------
.20 jsr CC.ExpPreops
.20 >LDYA L.CC.PREOPS
jsr CC.LookupOP
stx ZPPtr3+1
jsr CC.GetCharNB
bcs .29
jsr CC.IsLetter define, f() or Var ?
@ -77,10 +90,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
and #SYM.Q.FUNC
bne .21
jsr CC.EXP.CheckGetSymType
bcs .29
jsr CC.EXP.Get Check T/Q & Get value on stack
jsr CC.EXP.GetVar Check T/Q & Get value on stack
bcs .29
jsr CC.SYM.LookupFree
@ -116,7 +126,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
.24 cmp #'"' String literal
bne CC.EXP.Eval.ESYN
jsr CC.AddContCharP
jsr CC.EXP.AddConstCharP
.29 bcs CC.EXP.Eval.Err
*--------------------------------------
.30 jsr CC.GetCharNB
@ -157,6 +167,7 @@ CC.EXP.Eval.End plx any OP on stack ?
bmi CC.EXP.Eval.Exit
>LDYA ZPPtr2 Var Type
jsr CC.EXP.BOPS
bcc CC.EXP.Eval.End
@ -173,7 +184,13 @@ CC.EXP.Eval.Err
bra CC.EXP.Eval.ExitErr
*--------------------------------------
CC.EXP.Eval.Exit
lda ZPPtr1+1
ldy ZPPtr1
bne .1
>LDYA ZPPtr2 Type/Qual
.1 and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
clc
CC.EXP.Eval.ExitErr
@ -187,43 +204,17 @@ CC.EXP.Eval.ExitErr
plx
stx ZPPtr2
rts
*--------------------------------------
CC.EXP.CheckGetSymType
lda ZPPtr2
ora ZPPtr2+1
bne .1
plx
stx ZPPtr1+1
plx
stx ZPPtr1
lda (ZPLookupSymPtr)
sta ZPPtr2
ldy #SYM.Q
lda (ZPLookupSymPtr),y
sta ZPPtr2+1
clc
rts
.1 lda ZPPtr2
cmp (ZPLookupSymPtr) #SYM.T
bne .9
lda ZPPtr2+1
ldy #SYM.Q
cmp (ZPLookupSymPtr),y
bne .9
clc
rts
.9 lda #E.TMISMATCH
sec
rts
*--------------------------------------
CC.EXP.Cast jsr CC.TYPE.Decl
bcs .99
>STYA ZPPtr2
>STYA ZPPtr1
jsr CC.GetCharNB
bcs .9
@ -240,20 +231,15 @@ CC.EXP.Cast jsr CC.TYPE.Decl
sec
.99 rts
*--------------------------------------
CC.ExpPreops >LDYA L.CC.PREOPS
jsr CC.LookupOP
bcc .8
ldx #$ff
.8 stx ZPPtr3+1
jmp CC.GetCharNB
*--------------------------------------
* Y,A = Type/Qual, X = OP
*--------------------------------------
CC.EXP.BOPS cpy #SYM.T.UINT
CC.EXP.BOPS bit #SYM.Q.PPPOINTER
beq .10
ldy #SYM.T.UINT
bra .3
.10 cpy #SYM.T.UINT
bcs .3
cpy #SYM.T.UCHAR
@ -261,26 +247,16 @@ CC.EXP.BOPS cpy #SYM.T.UINT
cpy #SYM.T.SCHAR
beq .2
lda #E.TMISMATCH
sec
rts
.1 lda J.CC.bBOPS,x
ldy J.CC.bBOPS+1,x
tax
lda #$20 JSR
jsr CODE.TOABSYX
clc
rts
.1 >LDYA L.PCC.bBOPS,x
jmp CODE.EmitPCC
.2 lda J.CC.cBOPS,x
ldy J.CC.cBOPS+1,x
tax
lda #$20 JSR
jsr CODE.TOABSYX
clc
rts
.2 >LDYA L.PCC.bBOPS,x
jmp CODE.EmitPCC
.3 txa
clc
@ -291,9 +267,17 @@ CC.EXP.BOPS cpy #SYM.T.UINT
clc
rts
*--------------------------------------
CC.AddContCharP jsr CODE.PushConstP
CC.EXP.AddConstCharP
lda ZPCCConst
ldx ZPCCConst+1
jsr CODE.LDAXI
bcs .99
>LDYA L.PCC.PushIAddr
jsr CODE.EmitPCC
bcs .99
jsr CODE.DSSelect
bcs .99
@ -312,14 +296,14 @@ CC.AddContCharP jsr CODE.PushConstP
jsr CODE.EmitData
bcs .99
iny
bra .1
.2 lda #0
jsr CODE.EmitData
bcs .99
jsr CODE.CSSelect
bcs .99
@ -332,6 +316,21 @@ CC.AddContCharP jsr CODE.PushConstP
sec
.99 rts
*--------------------------------------
CC.EXP.IntConst >PUSHW ZPLineBufPtr
>PUSHWI ZPLineBufPtr
>PUSHBI 10
>SYSCALL StrToUL
>PULLA
tay
>PULLA
inc pStack
inc pStack
rts
*--------------------------------------
CC.EXP.GetNum cpy #SYM.T.FLOAT
bcc .1
@ -394,35 +393,43 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT
* ZPPtr2 = expected T/Q
* ZPPtr3+1 = PREOPS
*--------------------------------------
CC.EXP.Get >LDYA L.CC.AOPS
jsr CC.LookupOP
bcs .20
CC.EXP.GetVar stz ExpState
>LDYA ZPPtr2 get expected T/Q
jsr CC.EXP.Eval
jsr CC.EXP.POSTOPS var++, var[0]... ?
bcs .99
jsr CC.SYM.SetValue
ldx ZPPtr3+1 preop &, * ...
jsr CC.EXP.PREOPS
bcs .99
clc
rts
*--------------------------------------
.20 >LDYA L.CC.POSTOPS
jsr CC.LookupOP
bcs .1
lda ExpState
bmi .8 VonStack
cpx #4 '['
bne *
asl
jmp CC.EXP.Array
*--------------------------------------
.1 ldx ZPPtr3+1 preop
bpl .8
bmi .7 AinPTR
lda ZPPtr2 target T
asl
bmi .6 AonStack
jsr CC.EXP.GetAddr2
bcs .99
bra .7
.6 >LDYA L.PCC.PopAddr2
jsr CODE.EmitPCC
bcs .99
.7 jsr CC.EXP.PushValue
bcs .99
.8 lda ZPPtr2 target T
beq .3
cmp #SYM.T.VOID
beq .2
lda (ZPLookupSymPtr) SYM.T
cmp #SYM.T.VOID
beq .2
@ -435,190 +442,503 @@ CC.EXP.Get >LDYA L.CC.AOPS
ldy #SYM.Q
cmp (ZPLookupSymPtr),y
bne .9
clc
rts
.3 lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T
pha
ldy #SYM.Q
lda (ZPLookupSymPtr),y
sta ZPPtr2+1 Q
ply Y,A = T/Q
jsr CC.SYM.PushValue
clc
.99 rts
rts
.9 lda #E.TMISMATCH
sec
rts
.8 jmp (J.CC.PREOPS,x)
.99 rts
*--------------------------------------
CC.EXP.Array ldy #SYM.Q
* POSTOPS
*--------------------------------------
CC.EXP.POSTOPS >LDYA L.CC.POSTOPS
jsr CC.LookupOP
bcs .8
jmp (J.CC.POSTOPS,x)
.8 clc
rts
*--------------------------------------
CC.EXP.postinc lda ExpState
bit #ExpState.AinPTR
bne .1
jsr CC.EXP.GetAddr2
bcs .99
lda #ExpState.AinPTR
tsb ExpState
.1 ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER
bne .8
lda (ZPLookupSymPtr) #SYM.T
cmp #SYM.T.FLOAT
bcs .98
tay
lda CC.TYPESIZE-1,y
lsr
bcc .2
>LDYA L.PCC.Inc1
jmp CODE.EmitPCC
.2 lsr
bcc .4
>LDYA L.PCC.Inc2
jmp CODE.EmitPCC
.4 >LDYA L.PCC.Inc4
jmp CODE.EmitPCC
.8
.98 lda #E.ESYN
sec
.99 rts
*--------------------------------------
CC.EXP.postdec lda ExpState
bit #ExpState.AinPTR
bne .1
jsr CC.EXP.GetAddr2
bcs .99
lda #ExpState.AinPTR
tsb ExpState
.1 ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER
bne .8
lda (ZPLookupSymPtr) #SYM.T
cmp #SYM.T.FLOAT
bcs .98
tay
lda CC.TYPESIZE-1,y
lsr
bcc .2
>LDYA L.PCC.Dec1
jmp CODE.EmitPCC
.2 lsr
bcc .4
>LDYA L.PCC.Dec2
jmp CODE.EmitPCC
.4 >LDYA L.PCC.Dec4
jmp CODE.EmitPCC
.8
.98 lda #E.ESYN
sec
.99 rts
*--------------------------------------
CC.EXP.array ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.AAARRAY
beq .9
beq .39
jsr CC.EXP.PushDeref push base address
ldy #SYM.Def
lda (ZPLookupSymPtr),y
iny
ora (ZPLookupSymPtr),y
beq .1
jsr CC.EXP.PushAddr array[int]...
bcc .2
rts
.1 jsr CC.EXP.GetAddr2 array[]...it is a *
bcs .9
>LDYA L.PCC.PushDeref2
jsr CODE.EmitPCC
bcs .9
.2 jsr CC.EXP.array.getIdx ...int16 on stack...
bcs .9
jsr CC.EXP.GetSymSizeOfInAXC
jsr CODE.PUSHAXI ...sizeof on stack...
bcs .9
ldx #FPU.iMUL
jsr CODE.FPUCALL ...sizeof*int16...
bcs .9
ldx #FPU.iAdd
jsr CODE.FPUCALL ...add to base address
bcs .9
.3 jsr CC.GetNextCharNB skip ']'
bcs .98
cmp #'['
bne .8
jsr CC.GetNextCharNB skip '['
bcs .98
ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.AAARRAY
.39 beq .99
jsr CC.EXP.array.getIdx ...int16 on stack...
bcs .9
ldy #SYM.Def+3
lda (ZPLookupSymPtr),y
tax
dey
lda (ZPLookupSymPtr),y
jsr CODE.PUSHAXI [][SIZE] on stack
ldx #FPU.iMUL
jsr CODE.FPUCALL [][SIZE] * int16 on stack
jsr CC.EXP.GetSymSizeOfInAXC
jsr CODE.PUSHAXI ...sizeof on stack...
bcs .9
ldx #FPU.iMUL
jsr CODE.FPUCALL ...sizeof*int16...
ldx #FPU.iAdd
jsr CODE.FPUCALL ...add to base address
bcs .9
jsr CC.GetNextCharNB skip ']'
bcs .98
* TODO : [][][]
.8 lda #ExpState.AonStack
sta ExpState
clc
rts
.98 lda #E.ESYN
sec
rts
.99 lda #E.TMISMATCH
sec
.9 rts
*--------------------------------------
CC.EXP.array.getIdx
ldy #SYM.T.SINT
lda #0
jsr CC.EXP.Eval
bcs .99 int16 on stack
bcs .9
jsr CC.GetCharNB
bcs .9
bcs .98
cmp #']'
bne .9
jsr CC.GetNextCharNB skip ']'
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
pha
txa
jsr CODE.PUSHI
pla
jsr CODE.PUSHI sizeof on stack
ldx #FPU.iMUL
jsr CODE.FPUCALL sizeof*int16
ldx #FPU.iAdd
jsr CODE.FPUCALL add to base address
lda (ZPLookupSymPtr) SYM.T
pha
bne .98
ldy #SYM.Q
lda (ZPLookupSymPtr),y
sec
sbc #SYM.Q.ARRAY
ply
jsr CC.SYM.GetYASizeOfInAXC
jsr CODE.PushFromPtr A = byte count
sta (ZPLookupSymPtr),y
clc
rts
.9 lda #E.ESYN
.98 lda #E.ESYN
sec
.99 rts
*--------------------------------------
CC.EXP.PushAddr ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y
bne .7
* LOCAL
jsr CODE.PUSHpBASEp1
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
eor #$FF
inc
jsr CODE.LDAI
jsr CODE.PUSHpBASEpA
clc
rts
* DATASEG
.7 jsr CODE.PUSHI
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
jsr CODE.PUSHI
clc
rts
*--------------------------------------
CC.EXP.PushDeref
ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y
bne .7
* LOCAL
jsr CODE.SETpBASEp1
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
eor #$FF
inc
jsr CODE.LDAI
jsr CODE.SETpBASEpA
jsr CODE.Deref
clc
rts
* DATASEG
.7 jsr CODE.LDAI
lda #$85 STA zp
jsr CODE.EmitByte
lda #ZS.RT.Ptr1+1
jsr CODE.EmitByte
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
jsr CODE.LDAI
lda #$85 STA zp
jsr CODE.EmitByte
lda #ZS.RT.Ptr1+1
jsr CODE.EmitByte
jsr CODE.Deref
clc
.9 rts
*--------------------------------------
CC.EXP.GetRef ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y
jsr CODE.PUSHI
CC.EXP.Struct
*--------------------------------------
CC.EXP.pStruct lda #E.ESYN
sec
rts
*--------------------------------------
* PREOPS
*--------------------------------------
CC.EXP.PREOPS bmi .8
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
jsr CODE.PUSHI
jmp (J.CC.PREOPS,x)
lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T
ldy #SYM.Q
.8 clc
rts
*--------------------------------------
CC.EXP.Ref ldy #SYM.Q
lda (ZPLookupSymPtr),y
clc
adc #SYM.Q.POINTER
bcs .9 more than ***
sta ZPPtr2+1 Q
sta (ZPLookupSymPtr),y
bit ExpState
bvs .8
jsr CC.EXP.PushAddr
bcs .99
.8 lda #ExpState.VonStack
sta ExpState
* clc Addr on stack
rts
.9 lda #E.TMISMATCH
* sec
.99 rts
*--------------------------------------
CC.EXP.Deref ldy #SYM.Q
lda (ZPLookupSymPtr),y
bit #SYM.Q.PPPOINTER
beq .9
sec
sbc #SYM.Q.POINTER
sta (ZPLookupSymPtr),y
jsr CC.EXP.GetAddr2
bcs .99
>LDYA L.PCC.Deref2
jsr CODE.EmitPCC
bcs .99
lda #ExpState.AinPTR
sta ExpState
* clc
rts
.9 lda #E.TMISMATCH
sec
rts
.99 rts
*--------------------------------------
CC.EXP.GetDeref
CC.EXP.Abs
clc
.99 rts
*--------------------------------------
CC.EXP.negate
clc
.99 rts
*--------------------------------------
CC.EXP.lnot
clc
.99 rts
*--------------------------------------
CC.EXP.bnot
clc
.99 rts
*--------------------------------------
CC.EXP.preinc
clc
.99 rts
*--------------------------------------
CC.EXP.predec
clc
.99 rts
*--------------------------------------
CC.EXP.PushAddr ldy #SYM.SC
lda (ZPLookupSymPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
>LDYA L.PCC.PushLAddrH
jsr CODE.EmitPCC
bcs .9
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.PushLAddrL
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y
tax
dey
lda (ZPLookupSymPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.PushIAddr
jmp CODE.EmitPCC
.2 >LDYA L.PCC.PushUAddr
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.EXP.GetAddr1 ldy #SYM.SC
lda (ZPLookupSymPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.GetLAddr1
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y
tax
dey
lda (ZPLookupSymPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.GetIAddr1
jmp CODE.EmitPCC
.2 >LDYA L.PCC.GetUAddr1
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.EXP.GetAddr2 ldy #SYM.SC
lda (ZPLookupSymPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
ldy #SYM.Addr
lda (ZPLookupSymPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.GetLAddr2
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPLookupSymPtr),y
tax
dey
lda (ZPLookupSymPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPLookupSymPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.GetIAddr2
jmp CODE.EmitPCC
.2 >LDYA L.PCC.GetUAddr2
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.EXP.PushValue
jsr CC.EXP.GetSymSizeOfInAXC
tay
dey
jsr CODE.LDYI
bcs .99
>LDYA L.PCC.PushValue
jmp CODE.EmitPCC
.99 rts
*--------------------------------------
* out : A,X,C = size
*--------------------------------------
CC.EXP.GetSymSizeOfInAXC
ldy #SYM.Q
lda (ZPLookupSymPtr),y
pha
lda (ZPLookupSymPtr) SYM.T
tay
pla
CC.EXP.GetYASizeOfInAXC
bit #SYM.Q.PPPOINTER+SYM.Q.AAARRAY
bne .1
lda CC.TYPESIZE-1,y
ldx #0
clc
rts
*--------------------------------------
CC.EXP.IntConst >PUSHW ZPLineBufPtr
>PUSHWI ZPLineBufPtr
>PUSHBI 10
>SYSCALL StrToUL
>PULLA
tay
>PULLA
inc pStack
inc pStack
.1 lda #2 pointer
ldx #0
sec +1 for hMem Storage
rts
*--------------------------------------
MAN

View File

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

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
*--------------------------------------
CC.KW.JMP txa
>STA.G CC.CmdSave
jmp (J.CC.KW,x)
CC.KW.IF jsr CC.KW.BEGIN
bcs .99
jsr CC.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CC.GetNextCharNB
bcs .9
jsr CC.EXP.Eval00 Any var type
bcs .99
jsr CC.KW.TestZero Y,A=T/Q
lda #'E'
jsr CC.SYM.LookupA
bcs .99
lda #$4C emit JMP else
jsr CODE.TOABSYX
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
jmp CC.KW.STMT
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.WHILE jsr CC.PushCS push cont: for WHILE loop
bcs CC.KW.IF.RTS
CC.KW.IF.END jsr CC.GetCharNBNL
bcs .1
cmp #';'
beq .1
>LDYA L.CC.KW2.IF Check allowed KW for IF....
jsr CC.LookupID
bcc .2
.1 lda #'E' define ELSE Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
rts
*--------------------------------------
CC.KW.IF jsr CC.GetCharNB
.2 lda #'X'
jsr CC.SYM.LookupA
bcs .99
lda #$4C emit JMP exit
jsr CODE.TOABSYX
bcs .99
lda #'E' define ELSE Label
jsr CC.KW.NewLabel
bcs .99
inc CStackPtr pop ; or }
lda #4 replace IF by ELSE keyword
ldy CStackPtr
sta (ZPCCStack),y
jsr CC.KW.STMT
bcs .99
bit .99 set V : DONT pop context
rts
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CC.KW.ELSE lda #E.CSYN illegal
sec
rts
*--------------------------------------
CC.KW.ELSE.END lda #'X' define EXIT Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
.99 rts
*--------------------------------------
CC.KW.WHILE jsr CC.KW.BEGIN
bcs .99
lda #'C' define CONT Label
jsr CC.SYM.NewA
bcs .99
jsr CC.GetCharNB
bcs .9
cmp #'('
@ -24,10 +117,13 @@ CC.KW.IF jsr CC.GetCharNB
jsr CC.KW.TestZero
jsr CC.PushCS push place to set JMP false
lda #'B'
jsr CC.SYM.LookupA
bcs .99
jsr CC.KW.ZPCCCodeAdd2
lda #$4C emit JMP break:
jsr CODE.TOABSYX
bcs .99
jsr CC.GetCharNB
bcs .99
@ -35,89 +131,44 @@ CC.KW.IF jsr CC.GetCharNB
cmp #')'
bne .9
jmp CC.KW.BEGIN
jmp CC.KW.STMT
.9 lda #E.CSYN
sec
.99
CC.KW.IF.RTS rts
.99 rts
*--------------------------------------
CC.KW.IF.END jsr CC.PopYA
CC.KW.WHILE.END lda #'C'
jsr CC.KW.GetLabel
bcs .99
lda #$4C
jsr CODE.TOABSYX emit JMP cont:
bcs .99
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
clv pop context
.99 rts
*--------------------------------------
CC.KW.DO jsr CC.KW.BEGIN
bcs .99
lda #'C' define CONT Label
jsr CC.SYM.NewA
bcs .99
jmp CC.KW.STMT
.99 rts
*--------------------------------------
CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
jsr CC.LookupID
bcs .9
>STYA ZPPtr1 set JMP false
lda ZPCCCode
* sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
* sta (ZPPtr1),y
* clc
.9 rts
*--------------------------------------
CC.KW.ELSE
clc
rts
*--------------------------------------
CC.KW.ELSE.END
clc
rts
*--------------------------------------
CC.KW.WHILE.END jsr CC.PopYA Get JMP false location
bcs .9
>STYA ZPPtr1
jsr CC.PopYA Get cont: address
bcs .9
phy
tay HI byte
plx
lda #$4C JMP cont:
jsr CODE.TOABSYX
lda ZPCCCode
* sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
* sta (ZPPtr1),y
clc
.9 rts
*--------------------------------------
CC.KW.DO
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.DO.END
clc
rts
*--------------------------------------
* for (e1;e2;e3) s;
*
* { <- new scope : allows for(int i=1; ....)
* e1;
* loop:
* while (e2)
* {
* s;
* cont:
* e3;
* }
* break:
* }
*--------------------------------------
CC.KW.FOR jsr CC.GetCharNB
jsr CC.GetCharNB
bcs .9
cmp #'('
@ -126,12 +177,83 @@ CC.KW.FOR jsr CC.GetCharNB
jsr CC.GetNextCharNB
bcs .9
jsr CC.EXP.Eval00 get e1
bcs .9
jsr CC.EXP.Eval00 Any var type
bcs .99
jsr CC.KW.StackDiscard
jsr CC.KW.TestnZero
lda #'C'
jsr CC.KW.GetLabel
bcs .99
lda #$4C emit JMP cont
jsr CODE.TOABSYX
bcs .99
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
jsr CC.GetNextCharNB
bcs .9
clv pop context
clc
rts
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
* for (s1;e2;s3) s;
*
* { <- new scope : allows for(int i=1; ....)
* s1;
* loop:
* while (e2) jmp break:
* {
* s; jsr s:
* cont:
* s3; jmp loop:
* }
* s:
* <s>;
* break:
* }
*--------------------------------------
CC.KW.FOR jsr CC.GetCharNB
bcs .29
cmp #'('
bne .29
jsr CC.KW.BEGIN
bcs .29
jsr CC.GetNextCharNB skip '('
bcs .29
>LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .1
jsr CC.DECL
bcc .2
.19 rts
.1 jsr CC.STMT get s1
bcs .19
* jsr CC.KW.StackDiscard
.2 jsr CC.GetCharNB
bcs .9
cmp #';'
@ -140,26 +262,29 @@ CC.KW.FOR jsr CC.GetCharNB
jsr CC.GetNextCharNB skip ';'
bcs .9
*--------------------------------------
>LDYA ZPCCCode
>STYA ZPPtr2 save LOOP address
lda #'L' LOOP Label
jsr CC.SYM.NewA
bcs .99
jsr CC.EXP.Eval00 get e2
.29 bcs .99
jsr CC.KW.TestZero
jsr CC.PushCS push place to set JMP break:
bcs .99
jsr CC.KW.ZPCCCodeAdd2
lda #'B'
jsr CC.SYM.LookupA
bcs .99
lda #$20 emit JSR s;
jsr CODE.EmitByte
lda #$4C emit JMP break:
jsr CODE.TOABSYX
>LDYA ZPCCCode
>STYA ZPPtr3 save place to set JSR s
lda #'S'
jsr CC.SYM.LookupA
bcs .99
jsr CC.KW.ZPCCCodeAdd2 space for 2-bytes address
lda #$20 emit JSR s:
jsr CODE.TOABSYX
jsr CC.GetCharNB
bcs .9
@ -170,12 +295,14 @@ CC.KW.FOR jsr CC.GetCharNB
jsr CC.GetNextCharNB skip ';'
bcs .9
*--------------------------------------
jsr CC.PushCS push cont: address
jsr CC.EXP.Eval00 get e3
lda #'C' CONT Label
jsr CC.SYM.NewA
bcs .99
jsr CC.KW.StackDiscard
jsr CC.STMT get s3
bcs .99
* jsr CC.KW.StackDiscard
jsr CC.GetCharNB
bcs .9
@ -183,19 +310,18 @@ CC.KW.FOR jsr CC.GetCharNB
cmp #')'
bne .9
lda #'L'
jsr CC.SYM.LookupA
bcs .99
lda #$4C
ldx ZPPtr2
ldy ZPPtr2+1
jsr CODE.TOABSYX JMP e2
jsr CODE.TOABSYX emit JMP loop
lda ZPCCCode setup JSR s;
* sta (ZPPtr3)
lda #'S' S Label
jsr CC.SYM.NewA
bcs .99
lda ZPCCCode+1
ldy #1
* sta (ZPPtr3),y
jmp CC.KW.BEGIN
jmp CC.KW.STMT
.9 lda #E.CSYN
sec
@ -203,43 +329,45 @@ CC.KW.FOR jsr CC.GetCharNB
*--------------------------------------
CC.KW.FOR.END lda #$60
jsr CODE.EmitByte set RTS for JSR s;
jsr CODE.EmitByte set RTS for JSR code;
bcs .99
jsr CC.Pop
bcs .9
lda #'B' define BREAK Label
jsr CC.KW.NewLabel
bcs .99
jsr CC.Pop discard cont: location
bcs .9
clv pop context
jsr CC.PopYA
bcs .9
>STYA ZPPtr1 get JMP break: location
lda ZPCCCode
* sta (ZPPtr1)
ldy #1
lda ZPCCCode+1
* sta (ZPPtr1),y
clc
.9 rts
.99 rts
*--------------------------------------
CC.KW.SWITCH
CC.KW.CASE
CC.KW.DEFAULT
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.BREAK
lda #E.CSYN
CC.KW.BREAK lda #'B'
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP break
jmp CODE.TOABSYX
.9 lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.CONTINUE
lda #E.CSYN
CC.KW.CONTINUE lda #'C'
jsr CC.KW.LookupLabel
bcs .9
lda #$4C emit JMP cont
jmp CODE.TOABSYX
.9 lda #E.CSYN
sec
rts
*--------------------------------------
@ -254,7 +382,7 @@ CC.KW.RETURN ldy CStackPtr
tya
clc
adc #3 skip CPStmt (4 bytes)
adc #5 skip CPStmt (6 bytes)
tay
bcc .1
@ -265,6 +393,9 @@ CC.KW.RETURN ldy CStackPtr
.7 iny skip bState
iny skip Locals
iny
iny skip CPSID
iny get SYM.T
lda (ZPCCStack),y
@ -281,11 +412,10 @@ CC.KW.RETURN ldy CStackPtr
jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q
tax X = sizeof
jsr CODE.SetRetValue
bcs .99
jsr CODE.Leave
clc
rts
>LDYA L.PCC.LEAVE
jmp CODE.EmitPCC
*--------------------------------------
CC.KW.SIZEOF
lda #E.CSYN
@ -321,66 +451,178 @@ CC.KW.STRUCT >ENTER 4
cmp #'}'
bne .1
jsr CC.GetNextCharNB skip }
jsr CC.GetNextCharNB skip '}'
clc
.99 >LEAVE
rts
*--------------------------------------
CC.KW.BEGIN jsr CC.GetNextCharNB
bcs .9
CC.KW.BEGIN jsr CC.SYM.NewCPSID
bcs .99
cmp #'{'
bne .7
>LDA.G CC.CmdSave
tax
jmp CC.STMT.CPStmt
.7 >LDA.G CC.CmdSave
>LDA.G CC.CPSPFX+3
jsr CC.Push
bcs .99
lda #';'
>LDA.G CC.CPSPFX+2
jsr CC.Push
bcs .99
lda LocalPtr Locals
jsr CC.Push
bcs .99
lda #0 bState
jsr CC.Push
bcs .99
>LDA.G CC.CmdSave
jmp CC.Push
.99 rts
*--------------------------------------
CC.KW.STMT jsr CC.GetNextCharNBNL
bcs .9
cmp #'{'
bne .1
jsr CC.GetNextCharNB skip '{'
bcs .99
lda #'}'
jmp CC.Push
.1 lda #';'
jmp CC.Push
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual
* Output : CC = true, CS = false
*--------------------------------------
CC.KW.TestZero jsr CC.SYM.GetYASizeOfInAXC
tax
CC.KW.NewLabel pha
.6 lda #$A2 LDX #imm
jsr CODE.EmitByte
txa
jsr CODE.EmitByte
lda CStackPtr
clc
adc #4
tay
ldx #PCC.Test0X.L
ldy #0
.7 lda PCC.Test0X,y
jsr CODE.EmitByte
lda (ZPCCStack),y
pha
iny
dex
bne .7
lda (ZPCCStack),y
ply
>STYA.G CC.CPSPFX+2
clc
rts
pla
jmp CC.SYM.NewA
*--------------------------------------
CC.KW.ZPCCCodeAdd2
lda ZPCCCode
CC.KW.GetLabel pha
lda CStackPtr
clc
adc #2
sta ZPCCCode
bcc .8
adc #4
tay
inc ZPCCCode+1
lda (ZPCCStack),y
pha
iny
lda (ZPCCStack),y
ply
>STYA.G CC.CPSPFX+2
pla
jmp CC.SYM.LookupA
*--------------------------------------
CC.KW.LookupLabel
pha
ldy CStackPtr
sty ArgIndex
.1 ldy ArgIndex
beq .9
iny skip ; or }
lda (ZPCCStack),y
bmi .9 f()
iny
iny
iny
lda (ZPCCStack),y
pha
iny
lda (ZPCCStack),y
iny
sty ArgIndex
ply
>STYA.G CC.CPSPFX+2
pla
pha
jsr CC.SYM.LookupA
bcs .1
pla
.8 rts
.9 pla
lda #E.CSYN
sec
.99 rts
*--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
CC.KW.TestZero jsr CC.EXP.GetYASizeOfInAXC
tax
cpx #1
bne .1
>LDYA L.PCC.TestZero1
jmp CODE.EmitPCC
.1 cpx #2
bne .2
>LDYA L.PCC.TestZero2
jmp CODE.EmitPCC
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.TestZeroX
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
CC.KW.TestnZero jsr CC.EXP.GetYASizeOfInAXC
tax
cpx #1
bne .1
>LDYA L.PCC.TestnZero1
jmp CODE.EmitPCC
.1 cpx #2
bne .2
>LDYA L.PCC.TestnZero2
jmp CODE.EmitPCC
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.TestnZeroX
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------

View File

@ -156,7 +156,43 @@ CC.Link.Dump >PUSHW L.MSG.LINKING2
>SYSCALL PrintF
rts
*--------------------------------------
CC.Link.CheckMain
>PUSHB.G CC.hScopes
>PUSHW L.CC.MAIN
>SYSCALL SListLookup
bcs .9
>STYA ZPPtr1 SymID
>PUSHB.G CC.hScopes
>PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .99
ldy #SYM.Addr
lda (ZPSymBufPtr),y
iny
ora (ZPSymBufPtr),y
beq .9
lda (ZPSymBufPtr),y
sta PCC.FH+PCC.FH.MAIN+1
dey
lda (ZPSymBufPtr),y
sta PCC.FH+PCC.FH.MAIN
* clc
rts
.9 >LDYA L.MSG.NOMAIN
>SYSCALL puts
lda #E.CSYN
sec
.99 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.link

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
AUTO 3,1
*--------------------------------------
CC.STMT jsr CC.GetCharNB
jsr CC.IsLetter
ldx #$ff
bcc .20
>LDYA L.CC.PREOPS ++var ?
jsr CC.LookupOP
bcs .9
.20 stx StmtPreOp
jsr CC.SYM.Lookup var or func() ?
bcs .99
ldy #SYM.Q
lda (ZPLookupSymPtr),y
bit #SYM.Q.FUNC
beq .60
bit StmtPreOp
bpl .9 ++func ????????
jsr CC.F.CallNoRetV func( ... );
bcs .99
jmp CC.SYM.LookupFree
.60 jsr CC.CORE.SetVar
bcs .99
jmp CC.SYM.LookupFree
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
* X = KW.ID
*--------------------------------------
CC.STMT.CPStmt lda LocalPtr Locals
CC.STMT.CPStmt.NEW
>LDA.G CC.CPSID+1
jsr CC.Push
bcs .99
>LDA.G CC.CPSID
jsr CC.Push
bcs .99
lda LocalPtr Locals
jsr CC.Push
bcs .99
lda #0 bState
jsr CC.Push
bcs .99
@ -20,33 +65,58 @@ CC.STMT.CPStmt lda LocalPtr Locals
.99 rts
*--------------------------------------
CC.STMT.Stmt.END
jsr CC.Get
bcs .8
cmp #'}'
beq .8
cmp #';' must be ';' on stack....
bra CC.STMT.CPStmt.POP
.8 clc
CC.STMT.Stmt.RTS
rts
*--------------------------------------
CC.STMT.CPStmt.END
jsr CC.Pop
bcs .9
jsr CC.Get
bcs CC.STMT.Stmt.RTS
cmp #'}' must be '}' on stack....
bne .9
CC.STMT.CPStmt.POP
bne .98
jsr CC.Pop get stacked KW...
tax
iny
lda (ZPCCStack),y
jsr CC.Pop bState
jsr .7
bcs .99
bvs .1 DONT POP reused context (ELSE....)
lda CStackPtr
* clc
adc #5
sta CStackPtr
jsr CC.Pop Locals
sta LocalPtr
txa
bmi .5
.1 clc
rts
*--------------------------------------
.7 tax
bmi .8
jmp (J.CC.KW.END,x)
.5 jmp CC.F.Def.END
.8 jmp CC.F.Def.END
.9 lda #E.CSYN
.98 lda #E.CSYN
sec
rts
*--------------------------------------
CC.CPS.New
.99 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.stmt

View File

@ -17,7 +17,7 @@ CC.SYM.New >STYA ZPPtr2 T/Q
>PUSHW ZPLineBufPtr
>SYSCALL SListLookup
bcs .9
bcs CC.SYM.New.9
>STYA.G CC.SymID Y,A = KeyID
@ -29,21 +29,14 @@ CC.SYM.New >STYA ZPPtr2 T/Q
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .9
bcc CC.SYM.New2
jsr CC.GetCharNB
cmp #'('
bne .8
jmp CC.F.Decl
.8 clc
.9 rts Y,A = SymSize
CC.SYM.New.9 rts Y,A = SymSize
*--------------------------------------
CC.SYM.New1 ldy ScopeIdx
lda (pData),y
jsr CC.SYM.NewKey
bcs .9
bcs CC.SYM.New.9
>STYA.G CC.SymID Y,A = KeyID
@ -71,8 +64,8 @@ CC.SYM.New1 ldy ScopeIdx
tya
ldy #SYM.DefSize
sta (ZPSymBufPtr),y
jsr CC.GetCharNB
*--------------------------------------
CC.SYM.New2 jsr CC.GetCharNB
bcs CC.SYM.SetAddr
cmp #'('
@ -84,45 +77,45 @@ CC.SYM.New1 ldy ScopeIdx
sta (ZPSymBufPtr),y
jmp CC.F.Decl
.9 rts
*--------------------------------------
CC.SYM.NewV cmp #'['
bne CC.SYM.SetAddr
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #%11001111
sta (ZPSymBufPtr),y
lda #SYM.Def
ldy #SYM.DefSize
sta (ZPSymBufPtr),y
ldy #SYM.Q
.1 lda (ZPSymBufPtr),y
clc
adc #SYM.Q.ARRAY
sta (ZPSymBufPtr),y
jsr CC.GetNextCharNB Skip [
bcs .99
cmp #']'
bne .3
bne .2
.2 ldy #SYM.Q
ldy #SYM.Q
lda (ZPSymBufPtr),y
bit #SYM.Q.PPPOINTER
beq .99
and #SYM.Q.PPPOINTER
beq .99 [] only allowed for *
and #SYM.Q.AAARRAY
cmp #SYM.Q.AAARRAY
>LDYAI 0 set as [0] (deref)
jsr CC.SYM.AddWord
bra .3
.2 jsr CC.EXP.IntConst
bcs .99
* ldy #SYM.Q
lda (ZPSymBufPtr),y
* clc
adc #SYM.Q.ARRAY
sta (ZPSymBufPtr),y
jsr CC.GetNextCharNB Skip ]
bcs CC.SYM.SetAddr
cmp #'['
beq .2
bra CC.SYM.SetAddr
*--------------------------------------
.3 jsr CC.EXP.IntConst
bcs .9
jsr CC.SYM.SetSizeOf
jsr CC.SYM.AddWord
jsr CC.GetCharNB
bcs .99
@ -130,17 +123,22 @@ CC.SYM.NewV cmp #'['
cmp #']'
bne .99
jsr CC.GetNextCharNB Skip ]
.3 jsr CC.GetNextCharNB Skip ]
bcs CC.SYM.SetAddr
* cmp #'['
* bne CC.SYM.SetAddr
cmp #'['
bne CC.SYM.SetAddr
bra CC.SYM.SetAddr
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.AAARRAY
cmp #SYM.Q.AAARRAY
beq .99 already [][][]
bra .1
.99 lda #E.CSYN
sec
.9 rts
*--------------------------------------
CC.SYM.SetAddr ldy #SYM.Q
@ -164,19 +162,23 @@ CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC
* clc / sec A,X=Size, CS if pointer
pha
ldy #SYM.Addr
lda ZPCCData
sta (ZPSymBufPtr),y
adc ZPCCData
sta ZPCCData
iny
lda ZPCCData+1
sta (ZPSymBufPtr),y
pla
clc
adc ZPCCData
sta ZPCCData
txa
adc ZPCCData+1
sta ZPCCData+1
@ -214,6 +216,125 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
sec
rts
*--------------------------------------
CC.SYM.PushAddr ldy #SYM.SC
lda (ZPSymBufPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
>LDYA L.PCC.PushLAddrH
jsr CODE.EmitPCC
bcs .9
ldy #SYM.Addr
lda (ZPSymBufPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.PushLAddrL
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
tax
dey
lda (ZPSymBufPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.PushIAddr
jmp CODE.EmitPCC
.2 >LDYA L.PCC.PushUAddr
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.SYM.GetAddr1 ldy #SYM.SC
lda (ZPSymBufPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
ldy #SYM.Addr
lda (ZPSymBufPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.GetLAddr1
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
tax
dey
lda (ZPSymBufPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.GetIAddr1
jmp CODE.EmitPCC
.2 >LDYA L.PCC.GetUAddr1
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.SYM.GetAddr2 ldy #SYM.SC
lda (ZPSymBufPtr),y
beq .1 SYM.SC.STATIC
* LOCAL
ldy #SYM.Addr
lda (ZPSymBufPtr),y
eor #$FF
inc
jsr CODE.LDAI
bcs .9
>LDYA L.PCC.GetLAddr2
jmp CODE.EmitPCC
* GLOBAL
.1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
tax
dey
lda (ZPSymBufPtr),y
jsr CODE.LDAXI
bcs .9
ldy #SYM.Q
lda (ZPSymBufPtr),y
and #SYM.Q.CONST
beq .2
>LDYA L.PCC.GetIAddr2
jmp CODE.EmitPCC
.2 >LDYA L.PCC.GetUAddr2
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
CC.SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr
>SYSCALL SListNewKey
@ -223,11 +344,106 @@ CC.SYM.NewKey >PUSHA
.9 rts Y,A = KeyID, X = KeyLen
*--------------------------------------
CC.SYM.AddWord pha
phy
ldy #SYM.DefSize
lda (ZPSymBufPtr),y
pha
inc
inc
sta (ZPSymBufPtr),y
ply
pla
sta (ZPSymBufPtr),y
iny
pla
sta (ZPSymBufPtr),y
CC.SYM.AddWord.RTS
rts
*--------------------------------------
CC.SYM.NewCPSID >LDYA.G CC.CPSID
>STYA.G CC.CPSPFX+2
>LDA.G CC.CPSID+1
inc
cmp #'Z'+1
bne .1
dey CC.CPSID
lda (pData),y
inc
cmp #'Z'+1
beq .9
sta (pData),y
lda #'A'
iny CC.CPSID+1
.1 sta (pData),y
clc
rts
.9 lda #E.OOH
* sec
rts
*--------------------------------------
CC.SYM.NewA bit bPass2
bmi .8
>STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
>PUSHB.G CC.hScopes Global Scope
>PUSHEA.G CC.CPSPFX
>SYSCALL SListNewKey
bcs CC.SYM.AddWord.RTS
>STYA.G CC.SymID Y,A = KeyID
lda #SYM.T.VOID
sta (ZPSymBufPtr) #SYM.T
lda #SYM.Q.POINTER
ldy #SYM.Q
sta (ZPSymBufPtr),y
lda #SYM.SC.STATIC
iny #SYM.SC
sta (ZPSymBufPtr),y
iny
lda #0
.1 sta (ZPSymBufPtr),y
iny
cpy #SYM.Def
bne .1
tya
ldy #SYM.DefSize
sta (ZPSymBufPtr),y
>LDYA ZPCCCode
jsr CC.SYM.SetAddrYA
>LDA.G CC.hScopes Global Scope
jmp CC.SYM.Store.1
.8 clc
.99 rts
*--------------------------------------
CC.SYM.StoreF >LDA.G CC.hScopes
bit bPass2
bpl CC.SYM.Store.1
clc
rts
*--------------------------------------
@ -332,6 +548,44 @@ CC.SYM.Lookup >LDA.G CC.LookupIdx
* sec
rts
*--------------------------------------
CC.SYM.LookupA bit bPass2
bmi .1
ldx #0
ldy #0
clc
rts
.1 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
>PUSHB.G CC.hScopes Global Scope
>PUSHEA.G CC.CPSPFX
>SYSCALL SListLookup
bcs .99
>STYA.G CC.SymID Y,A = KeyID
>PUSHB.G CC.hScopes
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .99
ldy #SYM.Addr
lda (ZPSymBufPtr),y
tax
iny
lda (ZPSymBufPtr),y
tay
* clc
.99 rts
*--------------------------------------
CC.SYM.LookupFree
>LDA.G CC.LookupIdx
cmp #CC.LookupIdx
@ -367,92 +621,35 @@ CC.SYM.LookupFreeAll
clc
rts
*--------------------------------------
* Y,A = value T/Q
* on RT stack : Addr,value
*--------------------------------------
CC.SYM.PushValue
jsr CC.SYM.CheckTypeYA
CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC
tay
dey
jsr CODE.LDYI
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
>LDYA L.PCC.SetValue
jmp CODE.EmitPCC
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.PushXFromYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.PushXFromYA
clc
.9 rts
*--------------------------------------
CC.SYM.PopValue jsr CC.SYM.CheckTypeYA
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.PopXToYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.PopXToYA
clc
.9 rts
*--------------------------------------
CC.SYM.SetValue jsr CC.SYM.CheckTypeYA
bcs .9
jsr CC.SYM.GetSymSizeOfInAXC
tax
jsr CODE.LDXI
jsr CC.SYM.GetAddrInYA
beq .1
jsr CODE.LDYAI
jsr CODE.SetXToYA
clc
rts
.1 jsr CODE.GetLocal Y = local address
jsr CODE.SetXToYA
clc
.9 rts
*--------------------------------------
* in : Y,A = T/Q
* out : CC
* CS, A = E.TMISMATCH
*--------------------------------------
CC.SYM.CheckTypeYA
CC.SYM.CheckTypeYA.OLD
pha
tya
cmp (ZPSymBufPtr)
bne .9
pla
phy
ldy #SYM.Q
cmp (ZPSymBufPtr),y
bne .9
ply
ldy #SYM.Q
eor (ZPSymBufPtr),y
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
bne .9
clc
rts
@ -476,7 +673,7 @@ CC.SYM.GetTypeInYA
*--------------------------------------
* in : Y,A = T/Q
*--------------------------------------
CC.SYM.SetTypeYA
CC.SYM.SetTypeYA.OLD
phy
ldy #SYM.Q
sta (ZPSymBufPtr),y
@ -497,7 +694,16 @@ CC.SYM.GetSymSizeOfInAXC
CC.SYM.GetYASizeOfInAXC
bit #SYM.Q.PPPOINTER
bne .1
beq .1
lda #2 pointer
ldx #0
sec +1 for hMem Storage
rts
.1 bit #SYM.Q.AAARRAY
bne .2
lda CC.TYPESIZE-1,y
ldx #0
@ -505,10 +711,36 @@ CC.SYM.GetYASizeOfInAXC
clc
rts
.1 lda #2 pointer
ldx #0
.2 ldx CC.TYPESIZE-1,y
sec +1 for hMem Storage
ldy #SYM.Def
lda (ZPSymBufPtr),y
>PUSHA
iny
lda (ZPSymBufPtr),y
>PUSHA
ldy #1
.3 dex
beq .5
.4 lda (pStack),y
clc
adc (pStack),y
sta (pStack),y
lda (pStack)
adc (pStack)
sta (pStack)
dex
bne .4
.5 >PULLA
tax
>PULLA
clc
rts
*--------------------------------------
* in/out : A,X,C = size
@ -526,19 +758,6 @@ CC.SYM.SetSizeOf
pla
rts
*--------------------------------------
CC.SYM.GetAddrInYA
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
pha
dey
lda (ZPSymBufPtr),y
tay
pla Z if Local
rts
*--------------------------------------
CC.SYM.SetAddrYA
phy

View File

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

View File

@ -50,14 +50,6 @@ SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ....
*
SYM .EQ 10
*--------------------------------------
CPS.ParentID .EQ 0
CPS.hSYM .EQ 2
*
CPS.Cont .EQ 4
CPS.Break .EQ 6
*
CPS .EQ 8
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
@ -76,20 +68,22 @@ ZPCCStack .BS 2
ZPLineBufPtr .BS 2
ZPLookupPtr .BS 2
CStackPtr .BS 1
LocalPtr .BS 1
ScopeIdx .BS 1
bLocalScope .BS 1
ZPSymBufPtr .BS 2
* .BS 1
* .BS 1
ZPLookupSymPtr .BS 2
bInitCode .BS 1
StmtPreOp .BS 1
ExpState .BS 1
*ExpState.VinYA .EQ $10
ExpState.AonStack .EQ $20
ExpState.AinPTR .EQ $40
ExpState.VonStack .EQ $80
ZPState .BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
@ -127,50 +121,27 @@ L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.NOMAIN .DA MSG.NOMAIN
L.ENV.INCLUDE .DA ENV.INCLUDE
*--------------------------------------
L.CC.PREOPS .DA CC.PREOPS
J.CC.PREOPS .DA CC.EXP.GetRef
.DA CC.EXP.GetDeref
L.CC.POSTOPS .DA CC.POSTOPS
L.CC.AOPS .DA CC.AOPS
L.CC.PREOPS .DA CC.PREOPS
J.CC.PREOPS .DA CC.EXP.Ref
.DA CC.EXP.Deref
.DA CC.EXP.Abs
.DA CC.EXP.negate
.DA CC.EXP.lnot
.DA CC.EXP.bnot
.DA CC.EXP.preinc
.DA CC.EXP.predec
L.CC.POSTOPS .DA CC.POSTOPS
J.CC.POSTOPS .DA CC.EXP.postinc
.DA CC.EXP.postdec
.DA CC.EXP.array
.DA CC.EXP.Struct
.DA CC.EXP.pStruct
L.CC.BOPS .DA CC.BOPS
J.CC.bBOPS .DA CC.BOPS.bMUL
.DA CC.BOPS.bDIV
.DA CC.BOPS.bMOD
.DA CC.BOPS.ADD
.DA CC.BOPS.SUB
.DA CC.BOPS.SHL
.DA CC.BOPS.SHR
.DA CC.BOPS.L
.DA CC.BOPS.LE
.DA CC.BOPS.G
.DA CC.BOPS.GE
.DA CC.BOPS.EQ
.DA CC.BOPS.NE
.DA CC.BOPS.AND
.DA CC.BOPS.OR
.DA CC.BOPS.EOR
.DA CC.BOPS.LAND
.DA CC.BOPS.LOR
J.CC.cBOPS .DA CC.BOPS.cMUL
.DA CC.BOPS.cDIV
.DA CC.BOPS.cMOD
.DA CC.BOPS.ADD
.DA CC.BOPS.SUB
.DA CC.BOPS.SHL
.DA CC.BOPS.SHR
.DA CC.BOPS.L
.DA CC.BOPS.LE
.DA CC.BOPS.G
.DA CC.BOPS.GE
.DA CC.BOPS.EQ
.DA CC.BOPS.NE
.DA CC.BOPS.AND
.DA CC.BOPS.OR
.DA CC.BOPS.EOR
.DA CC.BOPS.LAND
.DA CC.BOPS.LOR
L.CC.DIRS .DA CC.DIRS
L.CC.KW .DA CC.KW
L.CC.KW2.IF .DA CC.KW2.IF
L.CC.KW2.DO .DA CC.KW2.DO
L.CC.SCSPEC .DA CC.SCSPEC
L.CC.TYPEQUAL .DA CC.TYPEQUAL
L.CC.TYPESPEC .DA CC.TYPESPEC
@ -186,6 +157,7 @@ J.CC.KW .DA CC.KW.IF
.DA CC.KW.FOR
.DA CC.KW.SWITCH
.DA CC.KW.CASE
.DA CC.KW.DEFAULT
.DA CC.KW.BREAK
.DA CC.KW.CONTINUE
.DA CC.KW.RETURN
@ -224,6 +196,80 @@ J.CC.STYPES .DA CC.TYPE.SCHAR
L.CC.MAIN .DA CC.MAIN
L.CC.LIBC .DA CC.LIBC
L.PCC.FH .DA PCC.FH
*--------------------------------------
L.PCC.DEBUG .DA PCC.DEBUG
L.PCC.SLEEP .DA PCC.SLEEP
L.PCC.ENTER .DA PCC.ENTER
L.PCC.LEAVE .DA PCC.LEAVE
L.PCC.ADDLOCAL .DA PCC.ADDLOCAL
L.PCC.SetRetValue .DA PCC.SetRetValue
L.PCC.TestZero1 .DA PCC.TestZero1
L.PCC.TestZero2 .DA PCC.TestZero2
L.PCC.TestZeroX .DA PCC.TestZeroX
L.PCC.TestnZero1 .DA PCC.TestnZero1
L.PCC.TestnZero2 .DA PCC.TestnZero2
L.PCC.TestnZeroX .DA PCC.TestnZeroX
L.PCC.PushLAddrH .DA PCC.PushLAddrH
L.PCC.PushLAddrL .DA PCC.PushLAddrL
L.PCC.PushIAddr .DA PCC.PushIAddr
L.PCC.PushUAddr .DA PCC.PushUAddr
L.PCC.GetLAddr1 .DA PCC.GetLAddr1
L.PCC.GetIAddr1 .DA PCC.GetIAddr1
L.PCC.GetUAddr1 .DA PCC.GetUAddr1
L.PCC.PopAddr1 .DA PCC.PopAddr1
L.PCC.SetValue .DA PCC.SetValue
L.PCC.GetLAddr2 .DA PCC.GetLAddr2
L.PCC.GetIAddr2 .DA PCC.GetIAddr2
L.PCC.GetUAddr2 .DA PCC.GetUAddr2
L.PCC.PopAddr2 .DA PCC.PopAddr2
L.PCC.Deref2 .DA PCC.Deref2
L.PCC.PushDeref2 .DA PCC.PushDeref2
L.PCC.PushValue .DA PCC.PushValue
L.PCC.Inc1 .DA PCC.Inc1
L.PCC.Inc2 .DA PCC.Inc2
L.PCC.Inc4 .DA PCC.Inc4
L.PCC.Dec1 .DA PCC.Dec1
L.PCC.Dec2 .DA PCC.Dec2
L.PCC.Dec4 .DA PCC.Dec4
*--------------------------------------
L.PCC.bBOPS .DA PCC.BOPS.bMUL
.DA PCC.BOPS.bDIV
.DA PCC.BOPS.bMOD
.DA PCC.BOPS.ADD
.DA PCC.BOPS.SUB
.DA PCC.BOPS.SHL
.DA PCC.BOPS.SHR
.DA PCC.BOPS.L
.DA PCC.BOPS.G
.DA PCC.BOPS.LE
.DA PCC.BOPS.GE
.DA PCC.BOPS.EQ
.DA PCC.BOPS.NE
.DA PCC.BOPS.LAND
.DA PCC.BOPS.AND
.DA PCC.BOPS.LOR
.DA PCC.BOPS.OR
.DA PCC.BOPS.EOR
*--------------------------------------
L.PCC.cBOPS .DA PCC.BOPS.cMUL
.DA PCC.BOPS.cDIV
.DA PCC.BOPS.cMOD
.DA PCC.BOPS.ADD
.DA PCC.BOPS.SUB
.DA PCC.BOPS.SHL
.DA PCC.BOPS.SHR
.DA PCC.BOPS.L
.DA PCC.BOPS.G
.DA PCC.BOPS.LE
.DA PCC.BOPS.GE
.DA PCC.BOPS.EQ
.DA PCC.BOPS.NE
.DA PCC.BOPS.LAND
.DA PCC.BOPS.AND
.DA PCC.BOPS.LOR
.DA PCC.BOPS.OR
.DA PCC.BOPS.EOR
*--------------------------------------
.DA 0
*--------------------------------------
* Called once at process creation
@ -263,7 +309,7 @@ CS.RUN >PUSHW L.MSG.GREETINGS
jsr CODE.Init
jsr CS.RUN.FOpen1st
jsr CC.FIO.FOpen1st
bcs CS.INIT.RTS
*--------------------------------------
CS.RUN.CLOOP jsr CC.CompileFile
@ -271,7 +317,7 @@ CS.RUN.CLOOP jsr CC.CompileFile
cmp #MLI.E.EOF
bne .9
jsr CS.RUN.FClose
jsr CC.FIO.FClose
bne CS.RUN.CLOOP
*--------------------------------------
jsr PrintSummary
@ -279,19 +325,19 @@ CS.RUN.CLOOP jsr CC.CompileFile
jsr CC.Link
bcs .99
jsr CheckMain
* >DEBUG
jsr CC.Link.CheckMain
bcs .99
dec bPass2
jsr CS.RUN.FCreate
jsr CC.FIO.FCreate
bcs .99
jsr CODE.Init
bcs .99
jsr CS.RUN.FOpen1st
jsr CC.FIO.FOpen1st
bcs .99
*--------------------------------------
.2 jsr CC.CompileFile
@ -299,7 +345,7 @@ CS.RUN.CLOOP jsr CC.CompileFile
cmp #MLI.E.EOF
bne .9
jsr CS.RUN.FClose
jsr CC.FIO.FClose
bne .2
*--------------------------------------
.8 lda #0 Exit Code = Success
@ -372,130 +418,6 @@ CS.RUN.ARGS inc ArgIndex
sec
rts
*--------------------------------------
CS.RUN.FOpen1st >LDA.G CC.InFileArg
>SYSCALL ArgV
CS.RUN.FOpen phy
pha
>PUSHW L.MSG.READING
pla
pha
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
pla
ply
>PUSHYA
>PUSHBI O.RDONLY
>PUSHBI S.FI.T.TXT
>PUSHWZ Aux type
>SYSCALL FOpen
bcs .9
tax
>LDA.G hFilePtr
inc
sta (pData),y
tay
txa
sta (pData),y
>LDA.G LineCntPtr
inc
inc
sta (pData),y
tay
lda #0
sta (pData),y
iny
sta (pData),y
.9 rts
*--------------------------------------
CS.RUN.FGetS >LDYA.G LineBufPtr
>STYA ZPLineBufPtr
>LDA.G LineCntPtr
tay
lda (pData),y
inc
sta (pData),y
bne .1
iny
lda (pData),y
inc
sta (pData),y
.1 >LDA.G hFilePtr
tay
lda (pData),y
>PUSHA
>PUSHW ZPLineBufPtr
>PUSHWI 255
>SYSCALL FGetS
bcs .9
>LDA.G bTrace
bpl .8
jsr PrintTraceMsg
.8
.9 rts
*--------------------------------------
CS.RUN.FClose >LDA.G hFilePtr
cmp #hFilePtr
beq .8
tay
lda (pData),y
>SYSCALL FClose
>LDA.G hFilePtr
dec
sta (pData),y
cmp #hFilePtr
beq .8
>LDA.G LineCntPtr
dec
dec
sta (pData),y NZ
.8 rts
*--------------------------------------
CS.RUN.FCreate >LDA.G CC.OutFileArg
>SYSCALL ArgV
>STYA ZPPtr1
>PUSHW L.MSG.GENERATING
>PUSHW ZPPtr1
>PUSHBI 2
>SYSCALL PrintF
>PUSHW ZPPtr1
>PUSHBI O.WRONLY+O.CREATE
>PUSHBI S.FI.T.BIN
>PUSHWI $2000 Aux type
>SYSCALL FOpen
bcs .9
>STA.G CC.hOutFile
>PUSHA A = CC.hOutFile
>PUSHW L.PCC.FH
>PUSHWI PCC.FH.L
>SYSCALL FWrite
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
@ -510,7 +432,9 @@ CS.QUIT jsr CODE.Quit
.8 clc
rts
*--------------------------------------
PrintTraceMsg ldy #S.PS.hStdErr
PrintTraceMsg
ldy #S.PS.hStdOut
* ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
@ -641,45 +565,8 @@ PrintSummary lda ZPCCCode+1
>PUSHBI 6
>SYSCALL PrintF
* >DEBUG
rts
*--------------------------------------
CheckMain >PUSHB.G CC.hScopes
>PUSHW L.CC.MAIN
>SYSCALL SListLookup
bcs .9
>STYA ZPPtr1 SymID
>PUSHB.G CC.hScopes
>PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .99
ldy #SYM.Addr
lda (ZPSymBufPtr),y
iny
ora (ZPSymBufPtr),y
beq .9
lda (ZPSymBufPtr),y
sta PCC.FH+PCC.FH.MAIN+1
dey
lda (ZPSymBufPtr),y
sta PCC.FH+PCC.FH.MAIN
* clc
rts
.9 >LDYA L.MSG.NOMAIN
>SYSCALL puts
lda #E.CSYN
sec
.99 rts
*--------------------------------------
.INB usr/src/bin/cc.s.code
.INB usr/src/bin/cc.s.core
@ -692,7 +579,7 @@ CheckMain >PUSHB.G CC.hScopes
.INB usr/src/bin/cc.s.exp
.INB usr/src/bin/cc.s.sym
.INB usr/src/bin/cc.s.link
.INB usr/src/bin/cc.s.exec
.INB usr/src/bin/cc.s.fio
*--------------------------------------
CS.END
*--------------------------------------
@ -712,276 +599,18 @@ MSG.DEBUG .AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n"
MSG.TRACE .AZ "%5D> %s\r\n"
MSG.RTSTK .AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
MSG.ERROR .AZ " %s^\r\n"
MSG.SUMMARY .AZ "\r\n*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n\r\n"
MSG.SUMMARY .AZ "*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n"
MSG.NOMAIN .AZ "*** No 'main()' function defined."
*--------------------------------------
ENV.INCLUDE .AZ "INCLUDE"
ENV.LIB .AZ "LIB"
*--------------------------------------
OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*--------------------------------------
* PCC = Pre Compiled Code
*--------------------------------------
ZS.RT.Ptr1 .EQ ZPBIN
*--------------------------------------
PCC.FH .PH $2000
PCC.FH.2000 cld
jmp (PCC.FH.JMP,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
PCC.FH.CSSIZE .EQ *-PCC.FH.2000
.DA $FFFF * Code Size (without Constants)
PCC.FH.DSSIZE .EQ *-PCC.FH.2000
.DA $FFFF * Data Size
.DA #256 Stack Size
.DA #2 ZP Size
.DA 0
PCC.FH.JMP .DA PCC.FH.INIT
.DA PCC.FH.RUN
.DA PCC.FH.DOEVENT
.DA PCC.FH.QUIT
PCC.FH.IDATA .EQ *-PCC.FH.2000
.DA $FFFF
.DA 0
PCC.FH.INIT
* TODO : LoadLib code
PCC.FH.QUIT
* TODO : UnloadLib code
PCC.FH.DOEVENT clc
rts
* int main(int argc, char *argv[]) ;
PCC.FH.RUN ldy #S.PS.ARGC
lda (pPS),y
.1 pha
>SYSCALL ArgV
bcs .2
>STYA ZS.RT.Ptr1
pla
pha
asl
tay
lda ZS.RT.Ptr1
sta (pData),y
lda ZS.RT.Ptr1+1
iny
sta (pData),y
pla
inc
bra .1
.2 pla
>PUSHWI 0 returned int
lda #0
>PUSHA
ldy #S.PS.ARGC
lda (pPS),y
>PUSHA int ARGC
>PUSHW pData *char[] ARGV
>DEBUG
PCC.FH.MAIN .EQ *-PCC.FH.2000+1
jsr $FFFF * jsr main
>PULLA
inc pStack pull returned int
sec
rts
PCC.FH.SYSCALL jsr A2osX.SYSCALL
bcc .8
inc pStack
eor #$ff
inc
>PUSHA int -ERROR code...
ldy #1
lda #$FF
sta (pStack),y on stack
rts
.8
PCC.FH.CS .EP
PCC.FH.L .EQ *-PCC.FH
*--------------------------------------
PCC.DEBUG >DEBUG
PCC.DEBUG.L .EQ *-PCC.DEBUG
*--------------------------------------
PCC.SLEEP >SLEEP
PCC.SLEEP.L .EQ *-PCC.SLEEP
*--------------------------------------
PCC.ENTER ldx pBase
phx
clc
adc pStack A = Local Size
sta pBase
PCC.ENTER.L .EQ *-PCC.ENTER
*--------------------------------------
PCC.LEAVE lda pBase
sta pStack
pla
sta pBase
rts
PCC.LEAVE.L .EQ *-PCC.LEAVE
*--------------------------------------
PCC.ADDLOCAL clc
adc pStack
sta pStack
PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL
*--------------------------------------
PCC.GETLOCAL clc
adc pBase
tay
lda pBase+1
PCC.GETLOCAL.L .EQ *-PCC.GETLOCAL
*--------------------------------------
PCC.SETRETVALUE ldy #0
.1 >PULLA
sta (pBase),y
iny
dex
bne .1
PCC.SETRETVALUE.L .EQ *-PCC.SETRETVALUE
*--------------------------------------
PCC.PushXFromYA >STYA ZS.RT.Ptr1
txa
dec
tay
.1 lda (ZS.RT.Ptr1),y
>PUSHA
dey
bpl .1
PCC.PushXFromYA.L .EQ *-PCC.PushXFromYA
*--------------------------------------
PCC.PopXToYA >STYA ZS.RT.Ptr1
ldy #0
.1 >PULLA
sta (ZS.RT.Ptr1),y
iny
dex
bne .1
PCC.PopXToYA.L .EQ *-PCC.PopXToYA
*--------------------------------------
PCC.SetXToYA >STYA ZS.RT.Ptr1
ldy #0
.1 lda (pStack),y
sta (ZS.RT.Ptr1),y
iny
dex
bne .1
PCC.SetXToYA.L .EQ *-PCC.SetXToYA
*--------------------------------------
PCC.Test0X lda #0
.1 ora (pStack)
inc pStack
dex
bne .1
tay
.2 bne .2+5
.HS 4C JMP abs
PCC.Test0X.L .EQ *-PCC.Test0X
*--------------------------------------
PCC.SETpBASEp1 lda pBase+1
sta ZS.RT.Ptr1+1
PCC.SETpBASEp1.L .EQ *-PCC.SETpBASEp1
*--------------------------------------
PCC.SETpBASEpA clc
adc pBase
sta ZS.RT.Ptr1
ldy #1
PCC.SETpBASEpA.L .EQ *-PCC.SETpBASEpA
*--------------------------------------
PCC.Deref >PUSHB (ZS.RT.Ptr1),y
>PUSHB (ZS.RT.Ptr1)
PCC.Deref.L .EQ *-PCC.Deref
*--------------------------------------
PCC.PUSHpBASEp1 >PUSHB pBase+1
PCC.PUSHpBASEp1.L .EQ *-PCC.PUSHpBASEp1
*--------------------------------------
PCC.PUSHpBASEpA clc
adc pBase
>PUSHA
PCC.PUSHpBASEpA.L .EQ *-PCC.PUSHpBASEpA
*--------------------------------------
PCC.PushFromPtr >PULLW ZS.RT.Ptr1
.1 lda (ZS.RT.Ptr1),y
>PUSHA
dey
bpl .1
PCC.PushFromPtr.L .EQ *-PCC.PushFromPtr
*--------------------------------------
PCC.PushConstPAX
clc
adc PCC.FH.2000+PCC.FH.IDATA
tay
txa
adc PCC.FH.2000+PCC.FH.IDATA+1
>PUSHA
tya
>PUSHA
PCC.PushConstPAX.L .EQ *-PCC.PushConstPAX
ENV.INCLUDE .AZ "INCLUDE"
ENV.LIB .AZ "LIB"
*--------------------------------------
CC.OPChars .AS "!~+-*/%=&|^<>["
CC.OPChars.Cnt .EQ *-CC.OPChars
*--------------------------------------
* Pre Operators: & * + - ! ~ ++ --
*--------------------------------------
CC.PREOPS >PSTR "&" ref
>PSTR "*" deref
>PSTR "+" abs
>PSTR "-" change sign
>PSTR "!" logical not
>PSTR "~" bitwise not
>PSTR "++" pre increase
>PSTR "--" pre decrease
.HS 00
*--------------------------------------
* Post Operators: ++ --
*--------------------------------------
CC.POSTOPS >PSTR "++"
>PSTR "--"
>PSTR "["
>PSTR "."
>PSTR "->"
.HS 00
*--------------------------------------
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
*--------------------------------------
CC.AOPS >PSTR "="
@ -996,6 +625,27 @@ CC.AOPS >PSTR "="
>PSTR "^="
>PSTR "!="
.HS 00
*--------------------------------------
* Pre Operators: & * + - ! ~ ++ --
*--------------------------------------
CC.PREOPS >PSTR "&" ref
>PSTR "*" deref
>PSTR "+" abs
>PSTR "-" negate
>PSTR "!" logical not
>PSTR "~" bitwise not
>PSTR "++" pre increase
>PSTR "--" pre decrease
.HS 00
*--------------------------------------
* Post Operators: ++ --
*--------------------------------------
CC.POSTOPS >PSTR "++"
>PSTR "--"
>PSTR "["
>PSTR "."
>PSTR "->"
.HS 00
*-- Binary ---- H to L precedence -----
* Arithmetic Operators: * / %
* Arithmetic Operators: + -
@ -1039,12 +689,17 @@ CC.KW >PSTR "if"
>PSTR "for"
>PSTR "switch"
>PSTR "case"
>PSTR "default"
>PSTR "break"
>PSTR "continue"
>PSTR "return"
>PSTR "sizeof"
>PSTR "struct"
.HS 00
CC.KW2.IF >PSTR "else"
.HS 00
CC.KW2.DO >PSTR "while"
.HS 00
*--------------------------------------
CC.SCSPEC >PSTR "auto"
>PSTR "register"
@ -1201,10 +856,10 @@ CC.LIBC >PSTR "chtyp"
.DA #2,#1,#SYS.StrToL
>PSTR "strtoul"
.DA #2,#1,#SYS.StrToUL
* >PSTR "realpath"
* .DA #2,#1,#0
* >PSTR "expand"
* .DA #2,#1,#0
>PSTR "realpath"
.DA #2,#1,#SYS.RealPath
>PSTR "expand"
.DA #2,#1,#SYS.Expand
>PSTR "strlen"
.DA #2,#1,#SYS.StrLen
>PSTR "strcpy"
@ -1353,6 +1008,8 @@ CC.LIBC >PSTR "chtyp"
>PSTR "lrintf"
.DA #2,#2,#FPU.QINT
.HS 00
*--------------------------------------
.INB usr/src/bin/cc.s.pcc
*--------------------------------------
.DUMMY
.OR 0
@ -1387,6 +1044,9 @@ CC.hTags .BS 1
CC.hStack .BS 1
CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals
CC.CPSID .BS 2 AA
CC.CPSPFX .BS 5 X_id\0
*--------------------------------------
CC.hSymBuf .BS 1
CC.SymID .BS 2

View File

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

View File

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

View File

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

View File

@ -16,7 +16,7 @@ NEW
#define SEEK_END 2
short int fopen(const char*,short int,short int,int);
int fastcall fclose(short int);
short int fastcall fclose(short int);
int fread(short int,void*,int);
int fwrite(short int,const void*,int);

View File

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

View File

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

View File

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

View File

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