mirror of https://github.com/A2osX/A2osX.git
CC, Bugfix in EDIT & STDIO
This commit is contained in:
parent
3d98f90fb4
commit
fdd4c69416
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -22,19 +22,19 @@ BSX.Recalibrate ldy BSX.Slotn0
|
||||||
lda #IO.D2.SeekTimeR
|
lda #IO.D2.SeekTimeR
|
||||||
jsr BSX.Wait100usecA
|
jsr BSX.Wait100usecA
|
||||||
|
|
||||||
lda #168
|
lda #160
|
||||||
|
|
||||||
|
php
|
||||||
|
sei
|
||||||
|
|
||||||
.1 dec
|
.1 dec
|
||||||
dec
|
dec
|
||||||
|
|
||||||
pha
|
pha
|
||||||
|
|
||||||
and #6
|
|
||||||
ora BSX.Slotn0
|
|
||||||
phy
|
phy
|
||||||
plx
|
plx
|
||||||
tay
|
jsr BSX.SeekPhOnY
|
||||||
lda IO.D2.Ph0On,y
|
|
||||||
|
|
||||||
lda #IO.D2.SeekTimeR
|
lda #IO.D2.SeekTimeR
|
||||||
jsr BSX.Wait100usecA
|
jsr BSX.Wait100usecA
|
||||||
|
@ -51,6 +51,8 @@ BSX.Recalibrate ldy BSX.Slotn0
|
||||||
|
|
||||||
lda IO.D2.Ph0Off,y
|
lda IO.D2.Ph0Off,y
|
||||||
|
|
||||||
|
plp
|
||||||
|
|
||||||
jmp BSX.Wait25600usec
|
jmp BSX.Wait25600usec
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BSX.MoveHead sta BSX.TargetQTrack
|
BSX.MoveHead sta BSX.TargetQTrack
|
||||||
|
@ -80,7 +82,7 @@ BSX.MoveHead sta BSX.TargetQTrack
|
||||||
|
|
||||||
.2 jsr BSX.SeekPhOnY move out: Y = Ph(N)
|
.2 jsr BSX.SeekPhOnY move out: Y = Ph(N)
|
||||||
|
|
||||||
bra .9 no wait
|
bra .9 Ph ON to go to 0/4 or 2/4, no wait
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.3 bcs .4 if CS, C > T, must move out
|
.3 bcs .4 if CS, C > T, must move out
|
||||||
|
|
||||||
|
@ -119,13 +121,15 @@ BSX.MoveHead sta BSX.TargetQTrack
|
||||||
|
|
||||||
jsr BSX.Wait25600usec
|
jsr BSX.Wait25600usec
|
||||||
|
|
||||||
|
lda IO.D2.Ph0Off,y
|
||||||
|
|
||||||
bcc .10
|
bcc .10
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
lda IO.D2.Ph0Off,x
|
lda IO.D2.Ph0Off,x
|
||||||
|
|
||||||
.10 lda IO.D2.Ph0Off,y
|
.10 rts
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BSX.SeekPhOnY and #6
|
BSX.SeekPhOnY and #6
|
||||||
ora BSX.Slotn0
|
ora BSX.Slotn0
|
||||||
|
@ -139,7 +143,7 @@ BSX.Wait25600usec
|
||||||
BSX.Wait100usecA
|
BSX.Wait100usecA
|
||||||
phx
|
phx
|
||||||
|
|
||||||
.1 ldx #20 (2)
|
.1 ldx #19 (2)
|
||||||
|
|
||||||
.2 dex (2)
|
.2 dex (2)
|
||||||
bne .2 (3)
|
bne .2 (3)
|
||||||
|
|
|
@ -4,12 +4,23 @@ NEW
|
||||||
CODE.Init stz ZPCCConst
|
CODE.Init stz ZPCCConst
|
||||||
stz ZPCCConst+1
|
stz ZPCCConst+1
|
||||||
|
|
||||||
|
stz bInitCode
|
||||||
|
|
||||||
>LDYAI PCC.FH.CS
|
>LDYAI PCC.FH.CS
|
||||||
>STYA ZPCCCode
|
>STYA ZPCCCode
|
||||||
|
|
||||||
>LDYAI 20 char *ARGV[10]
|
>LDYAI 20 char *ARGV[10]
|
||||||
>STYA ZPCCData
|
>STYA ZPCCData
|
||||||
|
|
||||||
|
lda #'_'
|
||||||
|
>STA.G CC.CPSPFX+1
|
||||||
|
|
||||||
|
lda #'A'
|
||||||
|
>STA.G CC.CPSID
|
||||||
|
|
||||||
|
iny CC.CPSID+1
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -21,265 +32,98 @@ CODE.Quit >LDA.G CC.hOutFile
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.Debug ldx #PCC.DEBUG.L
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda PCC.DEBUG,y
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CODE.Enter ldx #PCC.ENTER.L
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda PCC.ENTER,y
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CODE.nAddLocal eor #$FF
|
CODE.nAddLocal eor #$FF
|
||||||
inc
|
inc
|
||||||
|
|
||||||
CODE.AddLocal pha
|
CODE.AddLocal jsr CODE.LDAI
|
||||||
lda #$A9 LDA #imm
|
bcs .9
|
||||||
jsr CODE.EmitByte
|
|
||||||
pla
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
|
|
||||||
ldx #PCC.ADDLOCAL.L
|
>LDYA L.PCC.ADDLOCAL
|
||||||
ldy #0
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
.1 lda PCC.ADDLOCAL,y
|
.9 rts
|
||||||
jsr CODE.EmitByte
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CODE.GetLocal lda #$A9 LDA #imm
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
tya
|
|
||||||
eor #$FF
|
|
||||||
inc
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
|
|
||||||
ldx #PCC.GETLOCAL.L
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda PCC.GETLOCAL,y
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.SetRetValue
|
CODE.SetRetValue
|
||||||
jsr CODE.LDXI
|
jsr CODE.LDXI
|
||||||
|
|
||||||
ldx #PCC.SETRETVALUE.L
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda PCC.SETRETVALUE,y
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
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
|
|
||||||
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
|
bcs .9
|
||||||
|
|
||||||
lda ZPCCConst
|
>LDYA L.PCC.SetRetValue
|
||||||
jsr CODE.EmitByte
|
jmp CODE.EmitPCC
|
||||||
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
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CODE.PUSHAXI pha
|
||||||
|
txa
|
||||||
|
jsr CODE.PUSHI
|
||||||
|
bcs CODE.LDAXI.RTS
|
||||||
|
|
||||||
|
pla
|
||||||
|
*--------------------------------------
|
||||||
CODE.PUSHI pha
|
CODE.PUSHI pha
|
||||||
lda #$A9 LDA #imm
|
lda #$A9 LDA #imm
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs CODE.LDAXI.RTS
|
||||||
|
|
||||||
pla
|
pla
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs CODE.LDAXI.RTS
|
||||||
|
|
||||||
bra CODE.PUSHA
|
bra CODE.PUSHA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.LDYAI pha
|
CODE.LDYAI pha
|
||||||
|
|
||||||
lda #$A0 LDY #imm
|
lda #$A0 LDY #imm
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs CODE.LDAXI.RTS
|
||||||
|
|
||||||
tya
|
tya
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs CODE.LDAXI.RTS
|
||||||
|
|
||||||
lda #$A9 LDA #imm
|
lda #$A9 LDA #imm
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs CODE.LDAXI.RTS
|
||||||
|
|
||||||
pla
|
pla
|
||||||
|
|
||||||
jmp CODE.EmitByte
|
jmp CODE.EmitByte
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CODE.LDAXI jsr CODE.LDAI
|
||||||
|
bcc CODE.LDXI
|
||||||
|
|
||||||
|
CODE.LDAXI.RTS rts
|
||||||
|
*--------------------------------------
|
||||||
|
CODE.LDYI lda #$A0 LDY #imm
|
||||||
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
tya
|
||||||
|
jmp CODE.EmitByte
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
CODE.LDXI lda #$A2 LDX #imm
|
CODE.LDXI lda #$A2 LDX #imm
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
txa
|
txa
|
||||||
jmp CODE.EmitByte
|
jmp CODE.EmitByte
|
||||||
|
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.LDAI pha
|
CODE.LDAI pha
|
||||||
lda #$A9 LDA #imm
|
lda #$A9 LDA #imm
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
pla
|
pla
|
||||||
jmp CODE.EmitByte
|
jmp CODE.EmitByte
|
||||||
|
|
||||||
|
.9 plx
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.PUSHYA jsr CODE.PUSHA
|
CODE.PUSHYA jsr CODE.PUSHA
|
||||||
lda #$AA TYA
|
lda #$98 TYA
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.PUSHA lda #$C6 DEC zp
|
CODE.PUSHA lda #$C6 DEC zp
|
||||||
|
@ -315,27 +159,57 @@ CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR .....
|
||||||
tya
|
tya
|
||||||
bra CODE.EmitByte
|
bra CODE.EmitByte
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.SYSCALL lda #$A2 LDX #imm
|
CODE.SYSCALL jsr CODE.LDXI
|
||||||
jsr CODE.EmitByte
|
bcs .9
|
||||||
txa
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
lda #$20 JSR
|
lda #$20 JSR
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
lda #A2osX.SYSCALL
|
lda #A2osX.SYSCALL
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
lda /A2osX.SYSCALL
|
lda /A2osX.SYSCALL
|
||||||
bra CODE.EmitByte
|
bra CODE.EmitByte
|
||||||
|
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.FPUCALL lda #$A2 LDX #imm
|
CODE.FPUCALL jsr CODE.LDXI
|
||||||
jsr CODE.EmitByte
|
bcs .9
|
||||||
txa
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
lda #$20 JSR
|
lda #$20 JSR
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
lda #A2osX.FPUCALL
|
lda #A2osX.FPUCALL
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
lda /A2osX.FPUCALL
|
lda /A2osX.FPUCALL
|
||||||
bra CODE.EmitByte
|
bra CODE.EmitByte
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CODE.DEBUG >LDYA L.PCC.DEBUG
|
||||||
|
*--------------------------------------
|
||||||
|
CODE.EmitPCC >STYA ZPLookupPtr
|
||||||
|
|
||||||
|
lda (ZPLookupPtr)
|
||||||
|
tax
|
||||||
|
dex
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
|
||||||
|
.1 lda (ZPLookupPtr),y
|
||||||
|
jsr CODE.EmitByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
iny
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CODE.EmitByte clc if Pass 1...
|
CODE.EmitByte clc if Pass 1...
|
||||||
bit bPass2
|
bit bPass2
|
||||||
|
@ -387,7 +261,7 @@ CODE.CSSelect clc
|
||||||
bpl .8
|
bpl .8
|
||||||
|
|
||||||
>PUSHB.G CC.hOutFile
|
>PUSHB.G CC.hOutFile
|
||||||
>PUSHWI 0
|
>PUSHWZ
|
||||||
lda ZPCCCode+1
|
lda ZPCCCode+1
|
||||||
sec
|
sec
|
||||||
sbc #$20
|
sbc #$20
|
||||||
|
@ -404,8 +278,7 @@ CODE.DSSelect clc
|
||||||
bpl .8
|
bpl .8
|
||||||
|
|
||||||
>PUSHB.G CC.hOutFile
|
>PUSHB.G CC.hOutFile
|
||||||
>PUSHWI 0
|
>PUSHWZ
|
||||||
|
|
||||||
lda ZPCCConst
|
lda ZPCCConst
|
||||||
clc
|
clc
|
||||||
adc PCC.FH+PCC.FH.IDATA
|
adc PCC.FH+PCC.FH.IDATA
|
||||||
|
|
|
@ -40,7 +40,7 @@ CC.CORE.Init >SYSCALL SListNew
|
||||||
* clc
|
* clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.CORE.Quit jsr CS.RUN.FClose
|
CC.CORE.Quit jsr CC.FIO.FClose
|
||||||
bne CC.CORE.Quit
|
bne CC.CORE.Quit
|
||||||
|
|
||||||
ldy ScopeIdx
|
ldy ScopeIdx
|
||||||
|
@ -78,9 +78,11 @@ CC.CORE.Quit jsr CS.RUN.FClose
|
||||||
|
|
||||||
>LDA.G CC.hStack
|
>LDA.G CC.hStack
|
||||||
|
|
||||||
.7 beq CC.Quit.RTS
|
.7 beq .8
|
||||||
|
|
||||||
>SYSCALL FreeMem
|
>SYSCALL FreeMem
|
||||||
CC.Quit.RTS rts
|
|
||||||
|
.8 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.CompileFile >SLEEP
|
CC.CompileFile >SLEEP
|
||||||
|
|
||||||
|
@ -98,7 +100,7 @@ CC.CompileFile >SLEEP
|
||||||
cmp #3 Ctrl-C
|
cmp #3 Ctrl-C
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
.1 jsr CS.RUN.FGetS
|
.1 jsr CC.FIO.FGetS
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr CC.CompileLine
|
jsr CC.CompileLine
|
||||||
|
@ -114,176 +116,143 @@ CC.CompileFile >SLEEP
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.CompileLine jsr CC.GetCharNB
|
CC.CompileLine jsr CC.GetCharNB
|
||||||
bcs CC.Quit.RTS
|
bcs .9
|
||||||
|
|
||||||
CC.CompileLine.1
|
cmp #C.CR EOL....
|
||||||
cmp #C.CR empty line....
|
beq .8
|
||||||
beq .2
|
|
||||||
|
|
||||||
cmp #'/'
|
cmp #'#' directive ?
|
||||||
bne .3 comments ...
|
bne .1
|
||||||
|
|
||||||
jmp CC.Comments
|
|
||||||
|
|
||||||
.2 clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 cmp #'#' directive ?
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
jmp CC.DIR
|
jmp CC.DIR
|
||||||
|
|
||||||
.4 cmp #'}' End of CPStmt ?
|
.1 cmp #'/'
|
||||||
bne .10
|
bne .2 comments ...
|
||||||
|
|
||||||
|
jmp CC.Comments
|
||||||
|
|
||||||
|
.2 cmp #'}' End of CPStmt ?
|
||||||
|
bne .3
|
||||||
|
|
||||||
jsr CC.GetNextCharNB Skip '}'
|
jsr CC.GetNextCharNB Skip '}'
|
||||||
|
|
||||||
jmp CC.STMT.CPStmt.END
|
jsr CC.STMT.CPStmt.END
|
||||||
*--------------------------------------
|
bcs .9
|
||||||
.10 jsr CC.IsLetter
|
|
||||||
bcc .20
|
|
||||||
|
|
||||||
* TODO: PREOPS ++ --.....
|
bra CC.CompileLine
|
||||||
|
|
||||||
bcs .29
|
.3 cmp #';' End of Stmt ?
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB Skip ';'
|
||||||
|
|
||||||
|
jsr CC.STMT.Stmt.END
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
bra CC.CompileLine
|
||||||
|
|
||||||
|
.4 jsr CC.CompileStmt
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
bra CC.CompileLine
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.20 >LDYA L.CC.TYPEQUAL
|
* keyword : for, while ....
|
||||||
|
*--------------------------------------
|
||||||
|
CC.CompileStmt >LDYA L.CC.KW
|
||||||
jsr CC.LookupID
|
jsr CC.LookupID
|
||||||
bcs .50
|
bcs .10 not an internal CC keyword....
|
||||||
|
|
||||||
jsr CC.TYPE.Decl
|
txa
|
||||||
bcs .59
|
>STA.G CC.CmdSave
|
||||||
|
jmp (J.CC.KW,x)
|
||||||
ldx #SYM.SC.STATIC Y,A = Type/Qual
|
|
||||||
bit bLocalScope
|
|
||||||
bpl .25
|
|
||||||
|
|
||||||
bit #SYM.Q.FUNC someone wants to add a local f() ?
|
|
||||||
sec
|
|
||||||
bne .29
|
|
||||||
|
|
||||||
ldx #SYM.SC.AUTO
|
|
||||||
|
|
||||||
.25 jsr CC.SYM.New Y,A=T/Q, add with undef value...
|
|
||||||
bcs .29 OOM or DUP
|
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
|
||||||
bcs .69
|
|
||||||
|
|
||||||
cmp #';'
|
|
||||||
beq .28
|
|
||||||
|
|
||||||
cmp #'{'
|
|
||||||
bne .26
|
|
||||||
|
|
||||||
jsr CC.GetNextCharNB skip '{'
|
|
||||||
bcs .69
|
|
||||||
|
|
||||||
jmp CC.SYM.StoreF
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* Declaration : int var or int func()
|
||||||
* TODO: AOPS
|
|
||||||
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.26 cmp #'='
|
.10 >LDYA L.CC.TYPEQUAL
|
||||||
sec
|
|
||||||
bne .69
|
|
||||||
*--------------------------------------
|
|
||||||
jsr CC.GetNextCharNB skip '='
|
|
||||||
bcs .69
|
|
||||||
|
|
||||||
jsr CC.SYM.GetTypeInYA expected T/Q
|
|
||||||
jsr CC.EXP.Eval
|
|
||||||
bcs .59
|
|
||||||
|
|
||||||
jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var
|
|
||||||
.29 bcs .9
|
|
||||||
|
|
||||||
.28 jsr CC.SYM.Store
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bra .68
|
|
||||||
*--------------------------------------
|
|
||||||
.21 jsr CC.GetCharNB
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
cmp #';'
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
cmp #'{'
|
|
||||||
bne .99
|
|
||||||
|
|
||||||
jsr CC.GetNextCharNB skip '{'
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
jmp CC.CompileLine.1
|
|
||||||
*--------------------------------------
|
|
||||||
.50 >LDYA L.CC.KW
|
|
||||||
jsr CC.LookupID
|
jsr CC.LookupID
|
||||||
bcs .6 not an internal CC keyword....
|
bcs .6
|
||||||
|
|
||||||
jsr CC.KW.JMP
|
jmp CC.DECL
|
||||||
.59 bcs .9
|
|
||||||
|
|
||||||
bra .8
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.6 jsr CC.SYM.Lookup var= or func() ?
|
* Statement : ++var, var=, func();
|
||||||
.69 bcs .99
|
|
||||||
|
|
||||||
ldy #SYM.Q
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
bit #SYM.Q.FUNC
|
|
||||||
beq .60
|
|
||||||
|
|
||||||
ldy #0 func( ... );
|
|
||||||
lda #0
|
|
||||||
jsr CC.F.CallNoRetV
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.SYM.LookupFree
|
|
||||||
|
|
||||||
bra .8
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.60 jsr CC.GetCharNB var = ?
|
.6 jmp CC.STMT
|
||||||
bcs .99
|
|
||||||
|
|
||||||
cmp #'=' TODO: all AOPS
|
|
||||||
bne .99
|
|
||||||
|
|
||||||
jsr CC.GetNextChar Skip =
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
jsr CC.SYM.GetTypeInYA
|
|
||||||
jsr CC.EXP.Eval
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.SYM.PopValue
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.SYM.LookupFree
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.68 jsr CC.GetCharNB
|
|
||||||
cmp #';'
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.99 lda #E.CSYN
|
.99 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.8 jsr CC.GetNextCharNB Skip ;
|
CC.CORE.SetVar stz ExpState
|
||||||
bcs .9
|
|
||||||
|
|
||||||
cmp #C.CR
|
jsr CC.EXP.POSTOPS var++, var[0]... ?
|
||||||
beq .80
|
bcs .99
|
||||||
|
|
||||||
jmp CC.CompileLine.1
|
ldx StmtPreOp
|
||||||
|
jsr CC.EXP.PREOPS apply ++var, ....
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jsr CC.GetCharNB
|
||||||
|
bcs .90
|
||||||
|
|
||||||
|
jsr CC.IsEndArg var++; or ++var; ?
|
||||||
|
bcc .8
|
||||||
|
|
||||||
|
jsr CC.LookupAOP var=, var+= ... ?
|
||||||
|
bcs .90
|
||||||
|
|
||||||
|
cpx #0 TOTO : all AOPS
|
||||||
|
bne *
|
||||||
|
|
||||||
|
lda ExpState
|
||||||
|
bmi .90 VonStack
|
||||||
|
|
||||||
|
asl
|
||||||
|
|
||||||
|
bmi .7 AinPTR
|
||||||
|
|
||||||
|
asl
|
||||||
|
bmi .6 AonStack
|
||||||
|
|
||||||
|
jsr CC.EXP.GetAddr1
|
||||||
|
bcc .7
|
||||||
|
|
||||||
.80 clc
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
|
||||||
CC.Comments jsr CC.GetNextChar
|
.6 >LDYA L.PCC.PopAddr1
|
||||||
|
jsr CODE.EmitPCC
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
.7 ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
pha
|
||||||
|
lda (ZPLookupSymPtr)
|
||||||
|
tay
|
||||||
|
pla get expected T/Q
|
||||||
|
|
||||||
|
jsr CC.EXP.Eval
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jsr CC.EXP.GetSymSizeOfInAXC
|
||||||
|
tay
|
||||||
|
dey
|
||||||
|
jsr CODE.LDYI
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>LDYA L.PCC.SetValue
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.90 lda #E.CSYN
|
||||||
|
sec
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
**--------------------------------------
|
||||||
|
CC.Comments jsr CC.GetNextChar TODO : /* ... */
|
||||||
cmp #'/'
|
cmp #'/'
|
||||||
bne .90
|
bne .90
|
||||||
|
|
||||||
|
@ -304,10 +273,32 @@ CC.SkipLine jsr CC.GetNextChar
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.LookupID >STYA ZPLookupPtr
|
CC.LookupID >STYA ZPLookupPtr
|
||||||
|
|
||||||
jsr CC.GetIDLen
|
jsr CC.GetIDLen
|
||||||
bra CC.Lookup
|
bra CC.Lookup
|
||||||
|
|
||||||
|
CC.LookupAOP >LDYA L.CC.AOPS
|
||||||
|
>STYA ZPLookupPtr
|
||||||
|
|
||||||
|
ldy #$ff
|
||||||
|
|
||||||
|
.1 iny
|
||||||
|
lda (ZPLineBufPtr),y
|
||||||
|
sec
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
jsr CC.IsOPChar
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
cmp #'='
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
iny
|
||||||
|
|
||||||
|
.8 tya
|
||||||
|
bra CC.Lookup
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
|
||||||
CC.LookupOP >STYA ZPLookupPtr
|
CC.LookupOP >STYA ZPLookupPtr
|
||||||
jsr CC.GetOPLen
|
jsr CC.GetOPLen
|
||||||
|
|
||||||
|
@ -342,7 +333,7 @@ CC.Lookup phy Y = len
|
||||||
lda ZPLookupPtr+1
|
lda ZPLookupPtr+1
|
||||||
adc #0
|
adc #0
|
||||||
clc Y,A = F() def, X = F() index
|
clc Y,A = F() def, X = F() index
|
||||||
.8 rts
|
rts
|
||||||
|
|
||||||
.4 inx
|
.4 inx
|
||||||
inx
|
inx
|
||||||
|
@ -350,32 +341,11 @@ CC.Lookup phy Y = len
|
||||||
jsr CC.ZPLookupPtrAddAp1
|
jsr CC.ZPLookupPtrAddAp1
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.9 pla
|
.9 ldx #$FF
|
||||||
|
pla
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SListLookup >PUSHA hSList
|
|
||||||
>PUSHA ...for SListGetData
|
|
||||||
>PUSHW ZPLineBufPtr
|
|
||||||
>SYSCALL SListLookup
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
>PUSHA KeyID.HI
|
|
||||||
tya
|
|
||||||
>PUSHA KeyID.LO
|
|
||||||
|
|
||||||
jsr CC.SkipX
|
|
||||||
|
|
||||||
>PUSHWZ allocate
|
|
||||||
>PUSHWI 65535 all
|
|
||||||
>PUSHWZ From Start
|
|
||||||
>SYSCALL SListGetData
|
|
||||||
|
|
||||||
.9 rts Y,A = SymSize, X = hSymBuf
|
|
||||||
|
|
||||||
.99 inc pStack discard extra hSList
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.ZPLookupPtrAddAp1
|
CC.ZPLookupPtrAddAp1
|
||||||
sec
|
sec
|
||||||
adc ZPLookupPtr
|
adc ZPLookupPtr
|
||||||
|
@ -400,6 +370,28 @@ CC.GetDefine >LDA.G CC.hDefines
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.SListLookup >PUSHA hSList
|
||||||
|
>PUSHA ...for SListGetData
|
||||||
|
>PUSHW ZPLineBufPtr
|
||||||
|
>SYSCALL SListLookup
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>PUSHA KeyID.HI
|
||||||
|
tya
|
||||||
|
>PUSHA KeyID.LO
|
||||||
|
|
||||||
|
jsr CC.SkipX
|
||||||
|
|
||||||
|
>PUSHWZ allocate
|
||||||
|
>PUSHWI 65535 all
|
||||||
|
>PUSHWZ From Start
|
||||||
|
>SYSCALL SListGetData
|
||||||
|
|
||||||
|
.9 rts Y,A = SymSize, X = hSymBuf
|
||||||
|
|
||||||
|
.99 inc pStack discard extra hSList
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
* CT Stack
|
* CT Stack
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.PushTQ ldy #SYM.Q
|
CC.PushTQ ldy #SYM.Q
|
||||||
|
@ -455,13 +447,19 @@ CC.PopYA ldy CStackPtr
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.Pop ldy CStackPtr
|
CC.Pop jsr CC.Get
|
||||||
|
|
||||||
|
inc CStackPtr
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.Get ldy CStackPtr
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
lda (ZPCCStack),y
|
lda (ZPCCStack),y
|
||||||
|
|
||||||
inc CStackPtr
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -521,6 +519,32 @@ CC.GetNextCharNB
|
||||||
CC.GetNextCharNB.RTS
|
CC.GetNextCharNB.RTS
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.GetCharNBNL jsr CC.GetChar
|
||||||
|
bcs CC.GetNextCharNB.RTS
|
||||||
|
|
||||||
|
jsr CC.CheckCharNB
|
||||||
|
bcs CC.GetNextCharNBNL
|
||||||
|
|
||||||
|
cmp #C.CR
|
||||||
|
clc
|
||||||
|
bne CC.GetNextCharNB.RTS
|
||||||
|
|
||||||
|
jsr CC.FIO.FGetS
|
||||||
|
bcs CC.GetNextCharNB.RTS
|
||||||
|
*--------------------------------------
|
||||||
|
CC.GetNextCharNBNL
|
||||||
|
jsr CC.GetNextCharNB
|
||||||
|
bcs CC.GetNextCharNB.RTS
|
||||||
|
|
||||||
|
cmp #C.CR
|
||||||
|
clc
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
jsr CC.FIO.FGetS
|
||||||
|
bcc CC.GetNextCharNBNL
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
CC.CheckSpace jsr CC.GetChar
|
CC.CheckSpace jsr CC.GetChar
|
||||||
bcs .90
|
bcs .90
|
||||||
|
|
||||||
|
@ -578,10 +602,10 @@ CC.GetChar lda (ZPLineBufPtr)
|
||||||
CC.IsEndArg cmp #']'
|
CC.IsEndArg cmp #']'
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
cmp #';'
|
cmp #','
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
cmp #','
|
cmp #';'
|
||||||
beq .8
|
beq .8
|
||||||
|
|
||||||
cmp #')'
|
cmp #')'
|
||||||
|
|
|
@ -1,68 +1,69 @@
|
||||||
NEW
|
NEW
|
||||||
AUTO 3,1
|
AUTO 3,1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.DECL jsr CC.IsLetter
|
* X = type qual
|
||||||
bcs .80
|
*--------------------------------------
|
||||||
|
CC.DECL jsr CC.TYPE.Decl
|
||||||
.10 >LDYA L.CC.SCSPEC
|
bcs .9
|
||||||
jsr CC.LookupID
|
|
||||||
bcs .20
|
|
||||||
|
|
||||||
* TODO: typedef ....
|
|
||||||
|
|
||||||
bcs .90
|
|
||||||
|
|
||||||
.20 >LDYA L.CC.TYPEQUAL
|
|
||||||
jsr CC.LookupID
|
|
||||||
bcs .80
|
|
||||||
|
|
||||||
jsr CC.TYPE.Decl
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
ldx #SYM.SC.STATIC Y,A = Type/Qual
|
ldx #SYM.SC.STATIC Y,A = Type/Qual
|
||||||
bit bLocalScope
|
bit bLocalScope
|
||||||
bpl .21
|
bpl .25
|
||||||
|
|
||||||
bit #SYM.Q.FUNC someone wants to add a local f() ?
|
bit #SYM.Q.FUNC someone wants to add a local f() ?
|
||||||
bne .90
|
sec
|
||||||
|
bne .29
|
||||||
|
|
||||||
ldx #SYM.SC.AUTO
|
ldx #SYM.SC.AUTO
|
||||||
|
|
||||||
.21 jsr CC.SYM.New Y,A=T/Q, add with undef value...
|
.25 jsr CC.SYM.New Y,A=T/Q, add with undef value...
|
||||||
|
bcs .29 OOM or DUP
|
||||||
|
|
||||||
|
.22 jsr CC.GetCharNB
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CC.SYM.Store
|
cmp #';'
|
||||||
|
beq .28
|
||||||
|
|
||||||
|
cmp #'{'
|
||||||
|
bne .26
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB skip '{'
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
* TODO: AOPS
|
jmp CC.SYM.StoreF
|
||||||
|
*--------------------------------------
|
||||||
cmp #'='
|
* Initializer
|
||||||
bne .90
|
*--------------------------------------
|
||||||
|
.26 cmp #'=' type var = value ?
|
||||||
|
bne .99
|
||||||
|
|
||||||
jsr CC.GetNextCharNB skip '='
|
jsr CC.GetNextCharNB skip '='
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CC.SYM.GetTypeInYA expected T/Q
|
jsr CC.SYM.GetTypeInYA expected T/Q
|
||||||
jsr CC.EXP.Eval
|
jsr CC.EXP.Eval
|
||||||
bcs .99
|
bcs .9
|
||||||
|
|
||||||
jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var
|
jsr CC.SYM.GetAddr1
|
||||||
.29 bcs .99
|
bcs .9
|
||||||
|
|
||||||
|
jsr CC.SYM.SetValue Y,A = T/Q, Set value to this var
|
||||||
|
.29 bcs .9
|
||||||
|
|
||||||
|
.28 jsr CC.SYM.Store
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
jsr CC.GetCharNB
|
||||||
|
cmp #';'
|
||||||
|
bne .99
|
||||||
|
|
||||||
clv
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
*--------------------------------------
|
||||||
.80 bit #$60
|
.99 lda #E.CSYN
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.90 lda #E.CSYN
|
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SCSPEC.AUTO
|
CC.SCSPEC.AUTO
|
||||||
CC.SCSPEC.REGISTER
|
CC.SCSPEC.REGISTER
|
||||||
|
@ -71,9 +72,9 @@ CC.SCSPEC.EXTERN
|
||||||
CC.SCSPEC.TYPEDEF
|
CC.SCSPEC.TYPEDEF
|
||||||
|
|
||||||
|
|
||||||
.99 lda #E.CSYN
|
.98 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
.9 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE usr/src/bin/cc.s.decl
|
SAVE usr/src/bin/cc.s.decl
|
||||||
|
|
|
@ -134,7 +134,7 @@ CC.DIR.INCLUDE lda #0 >STZ.G PathBuf
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.5 >LDYA pData
|
.5 >LDYA pData
|
||||||
jmp CS.RUN.FOpen
|
jmp CC.FIO.FOpen
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE usr/src/bin/cc.s.dir
|
SAVE usr/src/bin/cc.s.dir
|
||||||
|
|
748
BIN/CC.S.EXP.txt
748
BIN/CC.S.EXP.txt
|
@ -10,7 +10,12 @@ NEW
|
||||||
CC.EXP.Eval00 lda #0
|
CC.EXP.Eval00 lda #0
|
||||||
tay
|
tay
|
||||||
|
|
||||||
CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
|
CC.EXP.Eval ldx ZPPtr1 local : returned T/Q
|
||||||
|
phx
|
||||||
|
ldx ZPPtr1+1
|
||||||
|
phx
|
||||||
|
|
||||||
|
ldx ZPPtr2 local : expected T/Q
|
||||||
phx
|
phx
|
||||||
ldx ZPPtr2+1
|
ldx ZPPtr2+1
|
||||||
phx
|
phx
|
||||||
|
@ -22,7 +27,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
|
||||||
|
|
||||||
>STYA ZPPtr2
|
>STYA ZPPtr2
|
||||||
|
|
||||||
|
stz ZPPtr1
|
||||||
|
stz ZPPtr1+1
|
||||||
|
|
||||||
lda #$ff no previous OP
|
lda #$ff no previous OP
|
||||||
|
sta ZPPtr3+1 no PREOPS
|
||||||
pha
|
pha
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.10 jsr CC.GetCharNB
|
.10 jsr CC.GetCharNB
|
||||||
|
@ -60,7 +69,11 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
|
||||||
|
|
||||||
.19 jmp CC.EXP.Eval.ESYN
|
.19 jmp CC.EXP.Eval.ESYN
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.20 jsr CC.ExpPreops
|
.20 >LDYA L.CC.PREOPS
|
||||||
|
jsr CC.LookupOP
|
||||||
|
stx ZPPtr3+1
|
||||||
|
|
||||||
|
jsr CC.GetCharNB
|
||||||
bcs .29
|
bcs .29
|
||||||
|
|
||||||
jsr CC.IsLetter define, f() or Var ?
|
jsr CC.IsLetter define, f() or Var ?
|
||||||
|
@ -77,10 +90,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
|
||||||
and #SYM.Q.FUNC
|
and #SYM.Q.FUNC
|
||||||
bne .21
|
bne .21
|
||||||
|
|
||||||
jsr CC.EXP.CheckGetSymType
|
jsr CC.EXP.GetVar Check T/Q & Get value on stack
|
||||||
bcs .29
|
|
||||||
|
|
||||||
jsr CC.EXP.Get Check T/Q & Get value on stack
|
|
||||||
bcs .29
|
bcs .29
|
||||||
|
|
||||||
jsr CC.SYM.LookupFree
|
jsr CC.SYM.LookupFree
|
||||||
|
@ -116,7 +126,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
|
||||||
.24 cmp #'"' String literal
|
.24 cmp #'"' String literal
|
||||||
bne CC.EXP.Eval.ESYN
|
bne CC.EXP.Eval.ESYN
|
||||||
|
|
||||||
jsr CC.AddContCharP
|
jsr CC.EXP.AddConstCharP
|
||||||
.29 bcs CC.EXP.Eval.Err
|
.29 bcs CC.EXP.Eval.Err
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.30 jsr CC.GetCharNB
|
.30 jsr CC.GetCharNB
|
||||||
|
@ -157,6 +167,7 @@ CC.EXP.Eval.End plx any OP on stack ?
|
||||||
bmi CC.EXP.Eval.Exit
|
bmi CC.EXP.Eval.Exit
|
||||||
|
|
||||||
>LDYA ZPPtr2 Var Type
|
>LDYA ZPPtr2 Var Type
|
||||||
|
|
||||||
jsr CC.EXP.BOPS
|
jsr CC.EXP.BOPS
|
||||||
bcc CC.EXP.Eval.End
|
bcc CC.EXP.Eval.End
|
||||||
|
|
||||||
|
@ -173,7 +184,13 @@ CC.EXP.Eval.Err
|
||||||
bra CC.EXP.Eval.ExitErr
|
bra CC.EXP.Eval.ExitErr
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.EXP.Eval.Exit
|
CC.EXP.Eval.Exit
|
||||||
|
lda ZPPtr1+1
|
||||||
|
ldy ZPPtr1
|
||||||
|
bne .1
|
||||||
|
|
||||||
>LDYA ZPPtr2 Type/Qual
|
>LDYA ZPPtr2 Type/Qual
|
||||||
|
|
||||||
|
.1 and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
|
||||||
clc
|
clc
|
||||||
|
|
||||||
CC.EXP.Eval.ExitErr
|
CC.EXP.Eval.ExitErr
|
||||||
|
@ -187,43 +204,17 @@ CC.EXP.Eval.ExitErr
|
||||||
plx
|
plx
|
||||||
stx ZPPtr2
|
stx ZPPtr2
|
||||||
|
|
||||||
rts
|
plx
|
||||||
*--------------------------------------
|
stx ZPPtr1+1
|
||||||
CC.EXP.CheckGetSymType
|
plx
|
||||||
lda ZPPtr2
|
stx ZPPtr1
|
||||||
ora ZPPtr2+1
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
lda (ZPLookupSymPtr)
|
|
||||||
sta ZPPtr2
|
|
||||||
|
|
||||||
ldy #SYM.Q
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
sta ZPPtr2+1
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 lda ZPPtr2
|
|
||||||
cmp (ZPLookupSymPtr) #SYM.T
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
lda ZPPtr2+1
|
|
||||||
ldy #SYM.Q
|
|
||||||
cmp (ZPLookupSymPtr),y
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 lda #E.TMISMATCH
|
|
||||||
sec
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.EXP.Cast jsr CC.TYPE.Decl
|
CC.EXP.Cast jsr CC.TYPE.Decl
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
>STYA ZPPtr2
|
>STYA ZPPtr1
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
bcs .9
|
bcs .9
|
||||||
|
@ -240,20 +231,15 @@ CC.EXP.Cast jsr CC.TYPE.Decl
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.ExpPreops >LDYA L.CC.PREOPS
|
|
||||||
|
|
||||||
jsr CC.LookupOP
|
|
||||||
bcc .8
|
|
||||||
|
|
||||||
ldx #$ff
|
|
||||||
|
|
||||||
.8 stx ZPPtr3+1
|
|
||||||
|
|
||||||
jmp CC.GetCharNB
|
|
||||||
*--------------------------------------
|
|
||||||
* Y,A = Type/Qual, X = OP
|
* Y,A = Type/Qual, X = OP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.EXP.BOPS cpy #SYM.T.UINT
|
CC.EXP.BOPS bit #SYM.Q.PPPOINTER
|
||||||
|
beq .10
|
||||||
|
|
||||||
|
ldy #SYM.T.UINT
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.10 cpy #SYM.T.UINT
|
||||||
bcs .3
|
bcs .3
|
||||||
|
|
||||||
cpy #SYM.T.UCHAR
|
cpy #SYM.T.UCHAR
|
||||||
|
@ -266,21 +252,11 @@ CC.EXP.BOPS cpy #SYM.T.UINT
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 lda J.CC.bBOPS,x
|
.1 >LDYA L.PCC.bBOPS,x
|
||||||
ldy J.CC.bBOPS+1,x
|
jmp CODE.EmitPCC
|
||||||
tax
|
|
||||||
lda #$20 JSR
|
|
||||||
jsr CODE.TOABSYX
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.2 lda J.CC.cBOPS,x
|
.2 >LDYA L.PCC.bBOPS,x
|
||||||
ldy J.CC.cBOPS+1,x
|
jmp CODE.EmitPCC
|
||||||
tax
|
|
||||||
lda #$20 JSR
|
|
||||||
jsr CODE.TOABSYX
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.3 txa
|
.3 txa
|
||||||
clc
|
clc
|
||||||
|
@ -291,7 +267,15 @@ CC.EXP.BOPS cpy #SYM.T.UINT
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.AddContCharP jsr CODE.PushConstP
|
CC.EXP.AddConstCharP
|
||||||
|
lda ZPCCConst
|
||||||
|
ldx ZPCCConst+1
|
||||||
|
|
||||||
|
jsr CODE.LDAXI
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushIAddr
|
||||||
|
jsr CODE.EmitPCC
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CODE.DSSelect
|
jsr CODE.DSSelect
|
||||||
|
@ -332,6 +316,21 @@ CC.AddContCharP jsr CODE.PushConstP
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.EXP.IntConst >PUSHW ZPLineBufPtr
|
||||||
|
>PUSHWI ZPLineBufPtr
|
||||||
|
>PUSHBI 10
|
||||||
|
>SYSCALL StrToUL
|
||||||
|
|
||||||
|
>PULLA
|
||||||
|
tay
|
||||||
|
|
||||||
|
>PULLA
|
||||||
|
|
||||||
|
inc pStack
|
||||||
|
inc pStack
|
||||||
|
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
CC.EXP.GetNum cpy #SYM.T.FLOAT
|
CC.EXP.GetNum cpy #SYM.T.FLOAT
|
||||||
bcc .1
|
bcc .1
|
||||||
|
|
||||||
|
@ -394,35 +393,43 @@ CC.EXP.GetNum cpy #SYM.T.FLOAT
|
||||||
* ZPPtr2 = expected T/Q
|
* ZPPtr2 = expected T/Q
|
||||||
* ZPPtr3+1 = PREOPS
|
* ZPPtr3+1 = PREOPS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.EXP.Get >LDYA L.CC.AOPS
|
CC.EXP.GetVar stz ExpState
|
||||||
jsr CC.LookupOP
|
|
||||||
bcs .20
|
|
||||||
|
|
||||||
>LDYA ZPPtr2 get expected T/Q
|
jsr CC.EXP.POSTOPS var++, var[0]... ?
|
||||||
jsr CC.EXP.Eval
|
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CC.SYM.SetValue
|
ldx ZPPtr3+1 preop &, * ...
|
||||||
|
jsr CC.EXP.PREOPS
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
clc
|
lda ExpState
|
||||||
rts
|
bmi .8 VonStack
|
||||||
*--------------------------------------
|
|
||||||
.20 >LDYA L.CC.POSTOPS
|
|
||||||
jsr CC.LookupOP
|
|
||||||
bcs .1
|
|
||||||
|
|
||||||
cpx #4 '['
|
asl
|
||||||
bne *
|
|
||||||
|
|
||||||
jmp CC.EXP.Array
|
bmi .7 AinPTR
|
||||||
*--------------------------------------
|
|
||||||
.1 ldx ZPPtr3+1 preop
|
|
||||||
bpl .8
|
|
||||||
|
|
||||||
lda ZPPtr2 target T
|
asl
|
||||||
|
bmi .6 AonStack
|
||||||
|
|
||||||
|
jsr CC.EXP.GetAddr2
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
bra .7
|
||||||
|
|
||||||
|
.6 >LDYA L.PCC.PopAddr2
|
||||||
|
jsr CODE.EmitPCC
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
.7 jsr CC.EXP.PushValue
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
.8 lda ZPPtr2 target T
|
||||||
beq .3
|
beq .3
|
||||||
|
|
||||||
|
cmp #SYM.T.VOID
|
||||||
|
beq .2
|
||||||
|
|
||||||
lda (ZPLookupSymPtr) SYM.T
|
lda (ZPLookupSymPtr) SYM.T
|
||||||
cmp #SYM.T.VOID
|
cmp #SYM.T.VOID
|
||||||
beq .2
|
beq .2
|
||||||
|
@ -436,189 +443,502 @@ CC.EXP.Get >LDYA L.CC.AOPS
|
||||||
cmp (ZPLookupSymPtr),y
|
cmp (ZPLookupSymPtr),y
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
.3 lda (ZPLookupSymPtr) SYM.T
|
.3 lda (ZPLookupSymPtr) SYM.T
|
||||||
sta ZPPtr2 T
|
sta ZPPtr2 T
|
||||||
pha
|
|
||||||
ldy #SYM.Q
|
ldy #SYM.Q
|
||||||
lda (ZPLookupSymPtr),y
|
lda (ZPLookupSymPtr),y
|
||||||
sta ZPPtr2+1 Q
|
sta ZPPtr2+1 Q
|
||||||
ply Y,A = T/Q
|
|
||||||
|
|
||||||
jsr CC.SYM.PushValue
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.99 rts
|
rts
|
||||||
|
|
||||||
.9 lda #E.TMISMATCH
|
.9 lda #E.TMISMATCH
|
||||||
sec
|
sec
|
||||||
rts
|
.99 rts
|
||||||
|
|
||||||
.8 jmp (J.CC.PREOPS,x)
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.EXP.Array ldy #SYM.Q
|
* POSTOPS
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.POSTOPS >LDYA L.CC.POSTOPS
|
||||||
|
jsr CC.LookupOP
|
||||||
|
bcs .8
|
||||||
|
|
||||||
|
jmp (J.CC.POSTOPS,x)
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.postinc lda ExpState
|
||||||
|
bit #ExpState.AinPTR
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
jsr CC.EXP.GetAddr2
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #ExpState.AinPTR
|
||||||
|
tsb ExpState
|
||||||
|
|
||||||
|
.1 ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
lda (ZPLookupSymPtr) #SYM.T
|
||||||
|
cmp #SYM.T.FLOAT
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda CC.TYPESIZE-1,y
|
||||||
|
lsr
|
||||||
|
bcc .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.Inc1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 lsr
|
||||||
|
bcc .4
|
||||||
|
|
||||||
|
>LDYA L.PCC.Inc2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.4 >LDYA L.PCC.Inc4
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
|
||||||
|
.8
|
||||||
|
|
||||||
|
.98 lda #E.ESYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.postdec lda ExpState
|
||||||
|
bit #ExpState.AinPTR
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
jsr CC.EXP.GetAddr2
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #ExpState.AinPTR
|
||||||
|
tsb ExpState
|
||||||
|
|
||||||
|
.1 ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
and #SYM.Q.AAARRAY+SYM.Q.PPPOINTER
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
lda (ZPLookupSymPtr) #SYM.T
|
||||||
|
cmp #SYM.T.FLOAT
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
tay
|
||||||
|
|
||||||
|
lda CC.TYPESIZE-1,y
|
||||||
|
lsr
|
||||||
|
bcc .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.Dec1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 lsr
|
||||||
|
bcc .4
|
||||||
|
|
||||||
|
>LDYA L.PCC.Dec2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.4 >LDYA L.PCC.Dec4
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
|
||||||
|
.8
|
||||||
|
|
||||||
|
.98 lda #E.ESYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.array ldy #SYM.Q
|
||||||
lda (ZPLookupSymPtr),y
|
lda (ZPLookupSymPtr),y
|
||||||
and #SYM.Q.AAARRAY
|
and #SYM.Q.AAARRAY
|
||||||
beq .9
|
beq .39
|
||||||
|
|
||||||
jsr CC.EXP.PushDeref push base address
|
ldy #SYM.Def
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
iny
|
||||||
|
ora (ZPLookupSymPtr),y
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
jsr CC.EXP.PushAddr array[int]...
|
||||||
|
bcc .2
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 jsr CC.EXP.GetAddr2 array[]...it is a *
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushDeref2
|
||||||
|
jsr CODE.EmitPCC
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
.2 jsr CC.EXP.array.getIdx ...int16 on stack...
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
jsr CC.EXP.GetSymSizeOfInAXC
|
||||||
|
jsr CODE.PUSHAXI ...sizeof on stack...
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldx #FPU.iMUL
|
||||||
|
jsr CODE.FPUCALL ...sizeof*int16...
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldx #FPU.iAdd
|
||||||
|
jsr CODE.FPUCALL ...add to base address
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
.3 jsr CC.GetNextCharNB skip ']'
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
cmp #'['
|
||||||
|
bne .8
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB skip '['
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
and #SYM.Q.AAARRAY
|
||||||
|
.39 beq .99
|
||||||
|
|
||||||
|
jsr CC.EXP.array.getIdx ...int16 on stack...
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Def+3
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
tax
|
||||||
|
dey
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
jsr CODE.PUSHAXI [][SIZE] on stack
|
||||||
|
|
||||||
|
ldx #FPU.iMUL
|
||||||
|
jsr CODE.FPUCALL [][SIZE] * int16 on stack
|
||||||
|
|
||||||
|
jsr CC.EXP.GetSymSizeOfInAXC
|
||||||
|
jsr CODE.PUSHAXI ...sizeof on stack...
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldx #FPU.iMUL
|
||||||
|
jsr CODE.FPUCALL ...sizeof*int16...
|
||||||
|
|
||||||
|
ldx #FPU.iAdd
|
||||||
|
jsr CODE.FPUCALL ...add to base address
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB skip ']'
|
||||||
|
bcs .98
|
||||||
|
|
||||||
|
|
||||||
|
* TODO : [][][]
|
||||||
|
|
||||||
|
.8 lda #ExpState.AonStack
|
||||||
|
sta ExpState
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.98 lda #E.ESYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 lda #E.TMISMATCH
|
||||||
|
sec
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.array.getIdx
|
||||||
ldy #SYM.T.SINT
|
ldy #SYM.T.SINT
|
||||||
lda #0
|
lda #0
|
||||||
|
|
||||||
jsr CC.EXP.Eval
|
jsr CC.EXP.Eval
|
||||||
bcs .99 int16 on stack
|
bcs .9
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
bcs .9
|
bcs .98
|
||||||
|
|
||||||
cmp #']'
|
cmp #']'
|
||||||
bne .9
|
bne .98
|
||||||
|
|
||||||
jsr CC.GetNextCharNB skip ']'
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.SYM.GetSymSizeOfInAXC
|
|
||||||
|
|
||||||
pha
|
|
||||||
txa
|
|
||||||
jsr CODE.PUSHI
|
|
||||||
pla
|
|
||||||
jsr CODE.PUSHI sizeof on stack
|
|
||||||
|
|
||||||
ldx #FPU.iMUL
|
|
||||||
jsr CODE.FPUCALL sizeof*int16
|
|
||||||
|
|
||||||
ldx #FPU.iAdd
|
|
||||||
jsr CODE.FPUCALL add to base address
|
|
||||||
|
|
||||||
lda (ZPLookupSymPtr) SYM.T
|
|
||||||
pha
|
|
||||||
|
|
||||||
ldy #SYM.Q
|
ldy #SYM.Q
|
||||||
lda (ZPLookupSymPtr),y
|
lda (ZPLookupSymPtr),y
|
||||||
sec
|
sec
|
||||||
sbc #SYM.Q.ARRAY
|
sbc #SYM.Q.ARRAY
|
||||||
ply
|
sta (ZPLookupSymPtr),y
|
||||||
|
|
||||||
jsr CC.SYM.GetYASizeOfInAXC
|
|
||||||
jsr CODE.PushFromPtr A = byte count
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 lda #E.ESYN
|
.98 lda #E.ESYN
|
||||||
sec
|
sec
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.EXP.PushAddr ldy #SYM.Addr+1
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
bne .7
|
|
||||||
* LOCAL
|
|
||||||
jsr CODE.PUSHpBASEp1
|
|
||||||
|
|
||||||
ldy #SYM.Addr
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
eor #$FF
|
|
||||||
inc
|
|
||||||
jsr CODE.LDAI
|
|
||||||
jsr CODE.PUSHpBASEpA
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
* DATASEG
|
|
||||||
.7 jsr CODE.PUSHI
|
|
||||||
|
|
||||||
ldy #SYM.Addr
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
jsr CODE.PUSHI
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.EXP.PushDeref
|
|
||||||
ldy #SYM.Addr+1
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
bne .7
|
|
||||||
* LOCAL
|
|
||||||
jsr CODE.SETpBASEp1
|
|
||||||
|
|
||||||
ldy #SYM.Addr
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
eor #$FF
|
|
||||||
inc
|
|
||||||
jsr CODE.LDAI
|
|
||||||
jsr CODE.SETpBASEpA
|
|
||||||
|
|
||||||
jsr CODE.Deref
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
* DATASEG
|
|
||||||
.7 jsr CODE.LDAI
|
|
||||||
|
|
||||||
lda #$85 STA zp
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
lda #ZS.RT.Ptr1+1
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
|
|
||||||
ldy #SYM.Addr
|
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
jsr CODE.LDAI
|
|
||||||
|
|
||||||
lda #$85 STA zp
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
lda #ZS.RT.Ptr1+1
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
|
|
||||||
jsr CODE.Deref
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.EXP.GetRef ldy #SYM.Addr+1
|
CC.EXP.Struct
|
||||||
lda (ZPLookupSymPtr),y
|
*--------------------------------------
|
||||||
jsr CODE.PUSHI
|
CC.EXP.pStruct lda #E.ESYN
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
* PREOPS
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.PREOPS bmi .8
|
||||||
|
|
||||||
ldy #SYM.Addr
|
jmp (J.CC.PREOPS,x)
|
||||||
lda (ZPLookupSymPtr),y
|
|
||||||
jsr CODE.PUSHI
|
|
||||||
|
|
||||||
lda (ZPLookupSymPtr) SYM.T
|
.8 clc
|
||||||
|
rts
|
||||||
sta ZPPtr2 T
|
*--------------------------------------
|
||||||
|
CC.EXP.Ref ldy #SYM.Q
|
||||||
ldy #SYM.Q
|
|
||||||
lda (ZPLookupSymPtr),y
|
lda (ZPLookupSymPtr),y
|
||||||
clc
|
clc
|
||||||
adc #SYM.Q.POINTER
|
adc #SYM.Q.POINTER
|
||||||
bcs .9 more than ***
|
bcs .9 more than ***
|
||||||
|
|
||||||
sta ZPPtr2+1 Q
|
sta (ZPLookupSymPtr),y
|
||||||
|
|
||||||
|
bit ExpState
|
||||||
|
bvs .8
|
||||||
|
|
||||||
|
jsr CC.EXP.PushAddr
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
.8 lda #ExpState.VonStack
|
||||||
|
sta ExpState
|
||||||
|
|
||||||
|
* clc Addr on stack
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 lda #E.TMISMATCH
|
||||||
|
* sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.Deref ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
bit #SYM.Q.PPPOINTER
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
sec
|
||||||
|
sbc #SYM.Q.POINTER
|
||||||
|
sta (ZPLookupSymPtr),y
|
||||||
|
|
||||||
|
jsr CC.EXP.GetAddr2
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>LDYA L.PCC.Deref2
|
||||||
|
jsr CODE.EmitPCC
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #ExpState.AinPTR
|
||||||
|
sta ExpState
|
||||||
|
|
||||||
* clc
|
* clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 lda #E.TMISMATCH
|
.9 lda #E.TMISMATCH
|
||||||
sec
|
sec
|
||||||
rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.EXP.GetDeref
|
CC.EXP.Abs
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.negate
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.lnot
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.bnot
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.preinc
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.predec
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.PushAddr ldy #SYM.SC
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
beq .1 SYM.SC.STATIC
|
||||||
|
* LOCAL
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushLAddrH
|
||||||
|
jsr CODE.EmitPCC
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
eor #$FF
|
||||||
|
inc
|
||||||
|
jsr CODE.LDAI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushLAddrL
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
* GLOBAL
|
||||||
|
|
||||||
|
.1 ldy #SYM.Addr+1
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
tax
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
|
||||||
|
jsr CODE.LDAXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
and #SYM.Q.CONST
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushIAddr
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 >LDYA L.PCC.PushUAddr
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.GetAddr1 ldy #SYM.SC
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
beq .1 SYM.SC.STATIC
|
||||||
|
* LOCAL
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
eor #$FF
|
||||||
|
inc
|
||||||
|
jsr CODE.LDAI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetLAddr1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
* GLOBAL
|
||||||
|
|
||||||
|
.1 ldy #SYM.Addr+1
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
tax
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
|
||||||
|
jsr CODE.LDAXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
and #SYM.Q.CONST
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetIAddr1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 >LDYA L.PCC.GetUAddr1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.GetAddr2 ldy #SYM.SC
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
beq .1 SYM.SC.STATIC
|
||||||
|
* LOCAL
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
eor #$FF
|
||||||
|
inc
|
||||||
|
jsr CODE.LDAI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetLAddr2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
* GLOBAL
|
||||||
|
|
||||||
|
.1 ldy #SYM.Addr+1
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
tax
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
|
||||||
|
jsr CODE.LDAXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
and #SYM.Q.CONST
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetIAddr2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 >LDYA L.PCC.GetUAddr2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.PushValue
|
||||||
|
jsr CC.EXP.GetSymSizeOfInAXC
|
||||||
|
tay
|
||||||
|
dey
|
||||||
|
jsr CODE.LDYI
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushValue
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
* out : A,X,C = size
|
||||||
|
*--------------------------------------
|
||||||
|
CC.EXP.GetSymSizeOfInAXC
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
pha
|
||||||
|
lda (ZPLookupSymPtr) SYM.T
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
|
||||||
|
CC.EXP.GetYASizeOfInAXC
|
||||||
|
|
||||||
|
bit #SYM.Q.PPPOINTER+SYM.Q.AAARRAY
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
lda CC.TYPESIZE-1,y
|
||||||
|
ldx #0
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
|
||||||
CC.EXP.IntConst >PUSHW ZPLineBufPtr
|
|
||||||
>PUSHWI ZPLineBufPtr
|
|
||||||
>PUSHBI 10
|
|
||||||
>SYSCALL StrToUL
|
|
||||||
|
|
||||||
>PULLA
|
.1 lda #2 pointer
|
||||||
tay
|
ldx #0
|
||||||
|
|
||||||
>PULLA
|
|
||||||
|
|
||||||
inc pStack
|
|
||||||
inc pStack
|
|
||||||
|
|
||||||
|
sec +1 for hMem Storage
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
|
|
157
BIN/CC.S.F.txt
157
BIN/CC.S.F.txt
|
@ -7,7 +7,7 @@ CC.F.Decl stz LocalPtr
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
ldx #$80 CPStmt.fDef state
|
ldx #$80 CPStmt.fDef state
|
||||||
jsr CC.STMT.CPStmt
|
jsr CC.STMT.CPStmt.NEW
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CC.SYM.NewScope
|
jsr CC.SYM.NewScope
|
||||||
|
@ -24,7 +24,7 @@ CC.F.Decl stz LocalPtr
|
||||||
|
|
||||||
>STYA ZPPtr2 Save T/Q
|
>STYA ZPPtr2 Save T/Q
|
||||||
|
|
||||||
jsr CC.F.AddTQ
|
jsr CC.SYM.AddWord
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
bcs .9
|
bcs .9
|
||||||
|
@ -53,9 +53,9 @@ CC.F.Decl stz LocalPtr
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.6 ldy #0
|
.6 ldy #0
|
||||||
lda #0
|
lda #0
|
||||||
jsr CC.F.AddTQ
|
jsr CC.SYM.AddWord definition End
|
||||||
|
|
||||||
jsr CC.GetNextCharNB Skip )
|
jsr CC.GetNextCharNBNL Skip )
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
cmp #';'
|
cmp #';'
|
||||||
|
@ -65,8 +65,8 @@ CC.F.Decl stz LocalPtr
|
||||||
|
|
||||||
lda CStackPtr
|
lda CStackPtr
|
||||||
clc
|
clc
|
||||||
adc #6
|
adc #8
|
||||||
sta CStackPtr discard this CPStmt
|
sta CStackPtr discard this CPStmt + T/Q
|
||||||
|
|
||||||
stz LocalPtr reset for DEBUG Message
|
stz LocalPtr reset for DEBUG Message
|
||||||
|
|
||||||
|
@ -76,15 +76,25 @@ CC.F.Decl stz LocalPtr
|
||||||
.7 cmp #'{'
|
.7 cmp #'{'
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
>LDYA ZPCCCode f() Code starts HERE
|
bit bInitCode
|
||||||
|
bmi .8
|
||||||
|
|
||||||
|
dec bInitCode
|
||||||
|
|
||||||
|
lda #$60 RTS
|
||||||
|
jsr CODE.EmitByte Close INIT code
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
|
||||||
|
.8 >LDYA ZPCCCode f() Code starts HERE
|
||||||
jsr CC.SYM.SetAddrYA
|
jsr CC.SYM.SetAddrYA
|
||||||
|
|
||||||
lda LocalPtr
|
lda LocalPtr
|
||||||
jsr CODE.LDAI A = f() ARGS size
|
jsr CODE.LDAI A = f() ARGS size
|
||||||
jsr CODE.Enter
|
bcs .99
|
||||||
|
|
||||||
clc Store f() Declaration / Start Definition
|
>LDYA L.PCC.ENTER
|
||||||
rts
|
jmp CODE.EmitPCC Store f() Declaration / Start Definition
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.F.DeclGetTQ lda (ZPLineBufPtr)
|
CC.F.DeclGetTQ lda (ZPLineBufPtr)
|
||||||
cmp #'.'
|
cmp #'.'
|
||||||
|
@ -151,7 +161,9 @@ CC.F.NewArg >LDYA.G CC.SymID
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.F.Def.END jsr CODE.Leave
|
CC.F.Def.END >LDYA L.PCC.LEAVE
|
||||||
|
jsr CODE.EmitPCC
|
||||||
|
bcs .9
|
||||||
|
|
||||||
jsr CC.Pop T
|
jsr CC.Pop T
|
||||||
jsr CC.Pop Q
|
jsr CC.Pop Q
|
||||||
|
@ -160,34 +172,16 @@ CC.F.Def.END jsr CODE.Leave
|
||||||
|
|
||||||
stz LocalPtr back to global
|
stz LocalPtr back to global
|
||||||
|
|
||||||
|
clv pop context
|
||||||
clc
|
clc
|
||||||
rts
|
.9 rts
|
||||||
*--------------------------------------
|
|
||||||
CC.F.AddTQ pha
|
|
||||||
phy
|
|
||||||
|
|
||||||
ldy #SYM.DefSize
|
|
||||||
lda (ZPSymBufPtr),y
|
|
||||||
pha
|
|
||||||
|
|
||||||
inc
|
|
||||||
inc
|
|
||||||
sta (ZPSymBufPtr),y
|
|
||||||
|
|
||||||
ply
|
|
||||||
|
|
||||||
pla
|
|
||||||
sta (ZPSymBufPtr),y
|
|
||||||
iny
|
|
||||||
pla
|
|
||||||
sta (ZPSymBufPtr),y
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* in : ZPSymPtr
|
* in : ZPSymPtr
|
||||||
* Y,A = Expected T/Q
|
* Y,A = Expected T/Q
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.F.CallNoRetV clc
|
CC.F.CallNoRetV ldy #0 no expected T/Q
|
||||||
|
tya
|
||||||
|
clc
|
||||||
.HS B0 BCS
|
.HS B0 BCS
|
||||||
CC.F.CallRetV sec
|
CC.F.CallRetV sec
|
||||||
|
|
||||||
|
@ -204,44 +198,51 @@ CC.F.CallRetV sec
|
||||||
>STYA ZPPtr2
|
>STYA ZPPtr2
|
||||||
|
|
||||||
ror ZPPtr1+1 bRetV
|
ror ZPPtr1+1 bRetV
|
||||||
bpl .20 no return value on stack
|
* bpl .20 no return value on stack
|
||||||
|
|
||||||
ldy #SYM.Addr+1
|
* ldy #SYM.Addr+1
|
||||||
lda (ZPLookupSymPtr),y
|
* lda (ZPLookupSymPtr),y
|
||||||
beq .20 SYS/LIB/FPU call, no ret value space
|
* beq .20 SYS/LIB/FPU call, no ret value space
|
||||||
|
|
||||||
jsr CC.SYM.GetSymSizeOfInAXC
|
jsr CC.EXP.GetSymSizeOfInAXC
|
||||||
jsr CODE.nAddLocal
|
jsr CODE.nAddLocal
|
||||||
|
|
||||||
.20 stz ZPPtr1 Reset VARIADIC byte count
|
.20 jsr CC.GetNextCharNB skip '('
|
||||||
|
|
||||||
jsr CC.GetNextCharNB skip '('
|
|
||||||
bcs .10
|
bcs .10
|
||||||
|
|
||||||
jsr CC.SYM.GetTypeInYA Y,A = f() Return value T/Q
|
ldy #SYM.Q
|
||||||
|
* >DEBUG
|
||||||
|
lda ZPPtr2 expected T
|
||||||
|
bne .1
|
||||||
|
|
||||||
ldx ZPPtr2 expected T
|
lda (ZPLookupSymPtr) no check required
|
||||||
beq .1 no check required
|
sta ZPPtr2
|
||||||
|
|
||||||
cpy ZPPtr2
|
|
||||||
bne .24
|
|
||||||
|
|
||||||
tax save full Q
|
|
||||||
|
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL
|
and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL
|
||||||
cmp ZPPtr2+1
|
bra .2
|
||||||
.24 bne .91
|
|
||||||
|
|
||||||
txa
|
.1 cmp #SYM.T.VOID
|
||||||
|
beq .11
|
||||||
|
|
||||||
.1 >STYA ZPPtr2 save full T/Q for later
|
cmp (ZPLookupSymPtr)
|
||||||
|
bne .91
|
||||||
|
|
||||||
|
.11 lda (ZPLookupSymPtr),y
|
||||||
|
and #$fC ignore SYM.Q.FUNC,SYM.Q.FASTCALL
|
||||||
|
cmp ZPPtr2+1 expected Q
|
||||||
|
bne .91
|
||||||
|
*--------------------------------------
|
||||||
|
.2 sta ZPPtr2+1
|
||||||
|
|
||||||
|
stz ZPPtr1 Reset VARIADIC byte count
|
||||||
|
|
||||||
lda #SYM.Def
|
lda #SYM.Def
|
||||||
>STA.G CC.LookupSymPtr
|
>STA.G CC.LookupSymPtr
|
||||||
|
|
||||||
jsr CC.F.GetTQ get First Arg T/Q
|
jsr CC.F.GetTQ get First Arg T/Q
|
||||||
beq .7 end of list, go check ending ')'
|
beq .7 end of list, go check ending ')'
|
||||||
*--------------------------------------
|
|
||||||
.3 cpy #SYM.T.VARIADIC
|
.3 cpy #SYM.T.VARIADIC
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
|
@ -253,7 +254,7 @@ CC.F.CallRetV sec
|
||||||
jsr CC.EXP.Eval
|
jsr CC.EXP.Eval
|
||||||
bcs .93
|
bcs .93
|
||||||
|
|
||||||
jsr CC.SYM.GetYASizeOfInAXC
|
jsr CC.EXP.GetYASizeOfInAXC
|
||||||
tax save Sizeof in X
|
tax save Sizeof in X
|
||||||
|
|
||||||
jsr CC.F.GetTQ
|
jsr CC.F.GetTQ
|
||||||
|
@ -295,7 +296,6 @@ CC.F.CallRetV sec
|
||||||
bne .90 missing arg
|
bne .90 missing arg
|
||||||
|
|
||||||
lda ZPPtr1 push VARIADIC byte count
|
lda ZPPtr1 push VARIADIC byte count
|
||||||
|
|
||||||
jsr CODE.PUSHI
|
jsr CODE.PUSHI
|
||||||
|
|
||||||
.7 jsr CC.GetCharNB
|
.7 jsr CC.GetCharNB
|
||||||
|
@ -330,8 +330,9 @@ CC.F.CallRetV sec
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* X = last var size
|
* X = last var size
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.F.Call2 lda ZPPtr2+1
|
CC.F.Call2 ldy #SYM.Q
|
||||||
bit #SYM.Q.FASTCALL
|
lda (ZPLookupSymPtr),y
|
||||||
|
and #SYM.Q.FASTCALL
|
||||||
beq .1
|
beq .1
|
||||||
|
|
||||||
ldy #SYM.Def Get first (only) argument
|
ldy #SYM.Def Get first (only) argument
|
||||||
|
@ -371,9 +372,10 @@ CC.F.Call2 lda ZPPtr2+1
|
||||||
|
|
||||||
* Return Value : call & put result on stack if in Y,A
|
* Return Value : call & put result on stack if in Y,A
|
||||||
|
|
||||||
.5 ldy #SYM.Addr+1
|
.5
|
||||||
|
ldy #SYM.Addr+1
|
||||||
lda (ZPLookupSymPtr),y
|
lda (ZPLookupSymPtr),y
|
||||||
cmp #2
|
cmp #3
|
||||||
bcs .8 not a SYS/FPU call...Ret value on stack
|
bcs .8 not a SYS/FPU call...Ret value on stack
|
||||||
|
|
||||||
>LDYA ZPPtr2 function T/Q
|
>LDYA ZPPtr2 function T/Q
|
||||||
|
@ -384,13 +386,13 @@ CC.F.Call2 lda ZPPtr2+1
|
||||||
dex
|
dex
|
||||||
bne .60
|
bne .60
|
||||||
|
|
||||||
jsr CODE.PUSHA push ONE byte one stack
|
jsr CODE.PUSHA push ONE byte on stack
|
||||||
bra .8
|
bra .8
|
||||||
|
|
||||||
.60 jsr CODE.PUSHYA push TWO bytes one stack
|
.60 jsr CODE.PUSHYA push TWO bytes on stack
|
||||||
|
|
||||||
.8 >LDYA ZPPtr2 T/Q
|
.8 >LDYA ZPPtr2 T/Q
|
||||||
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -405,34 +407,31 @@ CC.F.Call3 ldy #SYM.Addr+1
|
||||||
lda (ZPLookupSymPtr),y
|
lda (ZPLookupSymPtr),y
|
||||||
tax
|
tax
|
||||||
|
|
||||||
ply
|
ply Y=HI,X=LO
|
||||||
|
|
||||||
cpy #1
|
cpy #1
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
jsr CODE.SYSCALL
|
jmp CODE.SYSCALL
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 cpy #2
|
.1 cpy #2
|
||||||
bne .2
|
bne .2
|
||||||
|
|
||||||
jsr CODE.FPUCALL
|
jmp CODE.FPUCALL
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.2 lda #$EA
|
.2 lda #$EA NOP
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
lda #$EA
|
bcs .99
|
||||||
|
|
||||||
|
lda #$EA NOP
|
||||||
jsr CODE.EmitByte
|
jsr CODE.EmitByte
|
||||||
|
bcs .99
|
||||||
|
|
||||||
lda #$20 JSR abs
|
lda #$20 JSR abs
|
||||||
jsr CODE.TOABSYX Y=HI,X=LO
|
jmp CODE.TOABSYX
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 bit bPass2
|
.9 bit bPass2
|
||||||
bmi .99
|
bmi .91
|
||||||
|
|
||||||
lda #5 leave room for LDX #imm, JSR abs
|
lda #5 leave room for LDX #imm, JSR abs
|
||||||
clc
|
clc
|
||||||
|
@ -446,9 +445,9 @@ CC.F.Call3 ldy #SYM.Addr+1
|
||||||
.90 clc
|
.90 clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.99 lda #E.FUNDEF
|
.91 lda #E.FUNDEF
|
||||||
sec
|
sec
|
||||||
rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.F.GetTQ >LDA.G CC.LookupSymPtr
|
CC.F.GetTQ >LDA.G CC.LookupSymPtr
|
||||||
tay
|
tay
|
||||||
|
|
|
@ -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
|
596
BIN/CC.S.KW.txt
596
BIN/CC.S.KW.txt
|
@ -3,14 +3,107 @@ NEW
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Built in Keywords
|
* Built in Keywords
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.JMP txa
|
CC.KW.IF jsr CC.KW.BEGIN
|
||||||
>STA.G CC.CmdSave
|
bcs .99
|
||||||
jmp (J.CC.KW,x)
|
|
||||||
|
jsr CC.GetCharNB
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
cmp #'('
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
jsr CC.EXP.Eval00 Any var type
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jsr CC.KW.TestZero Y,A=T/Q
|
||||||
|
|
||||||
|
lda #'E'
|
||||||
|
jsr CC.SYM.LookupA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #$4C emit JMP else
|
||||||
|
jsr CODE.TOABSYX
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jsr CC.GetCharNB
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
cmp #')'
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
jmp CC.KW.STMT
|
||||||
|
|
||||||
|
.9 lda #E.CSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.WHILE jsr CC.PushCS push cont: for WHILE loop
|
CC.KW.IF.END jsr CC.GetCharNBNL
|
||||||
bcs CC.KW.IF.RTS
|
bcs .1
|
||||||
|
|
||||||
|
cmp #';'
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
>LDYA L.CC.KW2.IF Check allowed KW for IF....
|
||||||
|
jsr CC.LookupID
|
||||||
|
bcc .2
|
||||||
|
|
||||||
|
.1 lda #'E' define ELSE Label
|
||||||
|
jsr CC.KW.NewLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
clv pop context
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.IF jsr CC.GetCharNB
|
.2 lda #'X'
|
||||||
|
jsr CC.SYM.LookupA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #$4C emit JMP exit
|
||||||
|
jsr CODE.TOABSYX
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #'E' define ELSE Label
|
||||||
|
jsr CC.KW.NewLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
inc CStackPtr pop ; or }
|
||||||
|
|
||||||
|
lda #4 replace IF by ELSE keyword
|
||||||
|
ldy CStackPtr
|
||||||
|
sta (ZPCCStack),y
|
||||||
|
|
||||||
|
jsr CC.KW.STMT
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
bit .99 set V : DONT pop context
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 lda #E.CSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.ELSE lda #E.CSYN illegal
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.ELSE.END lda #'X' define EXIT Label
|
||||||
|
jsr CC.KW.NewLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
clv pop context
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.WHILE jsr CC.KW.BEGIN
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #'C' define CONT Label
|
||||||
|
jsr CC.SYM.NewA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jsr CC.GetCharNB
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
cmp #'('
|
cmp #'('
|
||||||
|
@ -24,10 +117,13 @@ CC.KW.IF jsr CC.GetCharNB
|
||||||
|
|
||||||
jsr CC.KW.TestZero
|
jsr CC.KW.TestZero
|
||||||
|
|
||||||
jsr CC.PushCS push place to set JMP false
|
lda #'B'
|
||||||
|
jsr CC.SYM.LookupA
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CC.KW.ZPCCCodeAdd2
|
lda #$4C emit JMP break:
|
||||||
|
jsr CODE.TOABSYX
|
||||||
|
bcs .99
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
bcs .99
|
bcs .99
|
||||||
|
@ -35,89 +131,44 @@ CC.KW.IF jsr CC.GetCharNB
|
||||||
cmp #')'
|
cmp #')'
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
jmp CC.KW.BEGIN
|
jmp CC.KW.STMT
|
||||||
|
|
||||||
.9 lda #E.CSYN
|
.9 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
.99
|
.99 rts
|
||||||
CC.KW.IF.RTS rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.IF.END jsr CC.PopYA
|
CC.KW.WHILE.END lda #'C'
|
||||||
|
jsr CC.KW.GetLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #$4C
|
||||||
|
jsr CODE.TOABSYX emit JMP cont:
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #'B' define BREAK Label
|
||||||
|
jsr CC.KW.NewLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
clv pop context
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.DO jsr CC.KW.BEGIN
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #'C' define CONT Label
|
||||||
|
jsr CC.SYM.NewA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jmp CC.KW.STMT
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
|
||||||
|
jsr CC.LookupID
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
>STYA ZPPtr1 set JMP false
|
jsr CC.GetCharNB
|
||||||
|
|
||||||
lda ZPCCCode
|
|
||||||
* sta (ZPPtr1)
|
|
||||||
|
|
||||||
ldy #1
|
|
||||||
lda ZPCCCode+1
|
|
||||||
* sta (ZPPtr1),y
|
|
||||||
|
|
||||||
* clc
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.KW.ELSE
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.KW.ELSE.END
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.KW.WHILE.END jsr CC.PopYA Get JMP false location
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA ZPPtr1
|
|
||||||
|
|
||||||
jsr CC.PopYA Get cont: address
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
phy
|
|
||||||
tay HI byte
|
|
||||||
plx
|
|
||||||
|
|
||||||
lda #$4C JMP cont:
|
|
||||||
jsr CODE.TOABSYX
|
|
||||||
|
|
||||||
lda ZPCCCode
|
|
||||||
* sta (ZPPtr1)
|
|
||||||
|
|
||||||
ldy #1
|
|
||||||
lda ZPCCCode+1
|
|
||||||
* sta (ZPPtr1),y
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.KW.DO
|
|
||||||
lda #E.CSYN
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.KW.DO.END
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
* for (e1;e2;e3) s;
|
|
||||||
*
|
|
||||||
* { <- new scope : allows for(int i=1; ....)
|
|
||||||
* e1;
|
|
||||||
* loop:
|
|
||||||
* while (e2)
|
|
||||||
* {
|
|
||||||
* s;
|
|
||||||
* cont:
|
|
||||||
* e3;
|
|
||||||
* }
|
|
||||||
* break:
|
|
||||||
* }
|
|
||||||
*--------------------------------------
|
|
||||||
CC.KW.FOR jsr CC.GetCharNB
|
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
cmp #'('
|
cmp #'('
|
||||||
|
@ -126,12 +177,83 @@ CC.KW.FOR jsr CC.GetCharNB
|
||||||
jsr CC.GetNextCharNB
|
jsr CC.GetNextCharNB
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr CC.EXP.Eval00 get e1
|
jsr CC.EXP.Eval00 Any var type
|
||||||
bcs .9
|
bcs .99
|
||||||
|
|
||||||
jsr CC.KW.StackDiscard
|
jsr CC.KW.TestnZero
|
||||||
|
|
||||||
|
lda #'C'
|
||||||
|
jsr CC.KW.GetLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #$4C emit JMP cont
|
||||||
|
jsr CODE.TOABSYX
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #'B' define BREAK Label
|
||||||
|
jsr CC.KW.NewLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
cmp #')'
|
||||||
|
bne .9
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
clv pop context
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 lda #E.CSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
* for (s1;e2;s3) s;
|
||||||
|
*
|
||||||
|
* { <- new scope : allows for(int i=1; ....)
|
||||||
|
* s1;
|
||||||
|
* loop:
|
||||||
|
* while (e2) jmp break:
|
||||||
|
* {
|
||||||
|
* s; jsr s:
|
||||||
|
* cont:
|
||||||
|
* s3; jmp loop:
|
||||||
|
* }
|
||||||
|
* s:
|
||||||
|
* <s>;
|
||||||
|
* break:
|
||||||
|
* }
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.FOR jsr CC.GetCharNB
|
||||||
|
bcs .29
|
||||||
|
|
||||||
|
cmp #'('
|
||||||
|
bne .29
|
||||||
|
|
||||||
|
jsr CC.KW.BEGIN
|
||||||
|
bcs .29
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB skip '('
|
||||||
|
bcs .29
|
||||||
|
|
||||||
|
>LDYA L.CC.TYPEQUAL
|
||||||
|
jsr CC.LookupID
|
||||||
|
bcs .1
|
||||||
|
|
||||||
|
jsr CC.DECL
|
||||||
|
bcc .2
|
||||||
|
|
||||||
|
.19 rts
|
||||||
|
|
||||||
|
.1 jsr CC.STMT get s1
|
||||||
|
bcs .19
|
||||||
|
|
||||||
|
* jsr CC.KW.StackDiscard
|
||||||
|
|
||||||
|
.2 jsr CC.GetCharNB
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
cmp #';'
|
cmp #';'
|
||||||
|
@ -140,26 +262,29 @@ CC.KW.FOR jsr CC.GetCharNB
|
||||||
jsr CC.GetNextCharNB skip ';'
|
jsr CC.GetNextCharNB skip ';'
|
||||||
bcs .9
|
bcs .9
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
>LDYA ZPCCCode
|
lda #'L' LOOP Label
|
||||||
>STYA ZPPtr2 save LOOP address
|
jsr CC.SYM.NewA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
jsr CC.EXP.Eval00 get e2
|
jsr CC.EXP.Eval00 get e2
|
||||||
.29 bcs .99
|
.29 bcs .99
|
||||||
|
|
||||||
jsr CC.KW.TestZero
|
jsr CC.KW.TestZero
|
||||||
|
|
||||||
jsr CC.PushCS push place to set JMP break:
|
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CC.KW.ZPCCCodeAdd2
|
lda #'B'
|
||||||
|
jsr CC.SYM.LookupA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
lda #$20 emit JSR s;
|
lda #$4C emit JMP break:
|
||||||
jsr CODE.EmitByte
|
jsr CODE.TOABSYX
|
||||||
|
|
||||||
>LDYA ZPCCCode
|
lda #'S'
|
||||||
>STYA ZPPtr3 save place to set JSR s
|
jsr CC.SYM.LookupA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
jsr CC.KW.ZPCCCodeAdd2 space for 2-bytes address
|
lda #$20 emit JSR s:
|
||||||
|
jsr CODE.TOABSYX
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
bcs .9
|
bcs .9
|
||||||
|
@ -170,12 +295,14 @@ CC.KW.FOR jsr CC.GetCharNB
|
||||||
jsr CC.GetNextCharNB skip ';'
|
jsr CC.GetNextCharNB skip ';'
|
||||||
bcs .9
|
bcs .9
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
jsr CC.PushCS push cont: address
|
lda #'C' CONT Label
|
||||||
|
jsr CC.SYM.NewA
|
||||||
jsr CC.EXP.Eval00 get e3
|
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CC.KW.StackDiscard
|
jsr CC.STMT get s3
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
* jsr CC.KW.StackDiscard
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
bcs .9
|
bcs .9
|
||||||
|
@ -183,19 +310,18 @@ CC.KW.FOR jsr CC.GetCharNB
|
||||||
cmp #')'
|
cmp #')'
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
|
lda #'L'
|
||||||
|
jsr CC.SYM.LookupA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
lda #$4C
|
lda #$4C
|
||||||
ldx ZPPtr2
|
jsr CODE.TOABSYX emit JMP loop
|
||||||
ldy ZPPtr2+1
|
|
||||||
jsr CODE.TOABSYX JMP e2
|
|
||||||
|
|
||||||
lda ZPCCCode setup JSR s;
|
lda #'S' S Label
|
||||||
* sta (ZPPtr3)
|
jsr CC.SYM.NewA
|
||||||
|
bcs .99
|
||||||
|
|
||||||
lda ZPCCCode+1
|
jmp CC.KW.STMT
|
||||||
ldy #1
|
|
||||||
* sta (ZPPtr3),y
|
|
||||||
|
|
||||||
jmp CC.KW.BEGIN
|
|
||||||
|
|
||||||
.9 lda #E.CSYN
|
.9 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
|
@ -203,43 +329,45 @@ CC.KW.FOR jsr CC.GetCharNB
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.FOR.END lda #$60
|
CC.KW.FOR.END lda #$60
|
||||||
|
|
||||||
jsr CODE.EmitByte set RTS for JSR s;
|
jsr CODE.EmitByte set RTS for JSR code;
|
||||||
|
bcs .99
|
||||||
|
|
||||||
jsr CC.Pop
|
lda #'B' define BREAK Label
|
||||||
bcs .9
|
jsr CC.KW.NewLabel
|
||||||
|
bcs .99
|
||||||
|
|
||||||
jsr CC.Pop discard cont: location
|
clv pop context
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.PopYA
|
.99 rts
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA ZPPtr1 get JMP break: location
|
|
||||||
|
|
||||||
lda ZPCCCode
|
|
||||||
* sta (ZPPtr1)
|
|
||||||
|
|
||||||
ldy #1
|
|
||||||
lda ZPCCCode+1
|
|
||||||
* sta (ZPPtr1),y
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.SWITCH
|
CC.KW.SWITCH
|
||||||
CC.KW.CASE
|
CC.KW.CASE
|
||||||
|
CC.KW.DEFAULT
|
||||||
lda #E.CSYN
|
lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.BREAK
|
CC.KW.BREAK lda #'B'
|
||||||
lda #E.CSYN
|
|
||||||
|
jsr CC.KW.LookupLabel
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
lda #$4C emit JMP break
|
||||||
|
jmp CODE.TOABSYX
|
||||||
|
|
||||||
|
.9 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.CONTINUE
|
CC.KW.CONTINUE lda #'C'
|
||||||
lda #E.CSYN
|
|
||||||
|
jsr CC.KW.LookupLabel
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
lda #$4C emit JMP cont
|
||||||
|
jmp CODE.TOABSYX
|
||||||
|
|
||||||
|
.9 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -254,7 +382,7 @@ CC.KW.RETURN ldy CStackPtr
|
||||||
|
|
||||||
tya
|
tya
|
||||||
clc
|
clc
|
||||||
adc #3 skip CPStmt (4 bytes)
|
adc #5 skip CPStmt (6 bytes)
|
||||||
tay
|
tay
|
||||||
bcc .1
|
bcc .1
|
||||||
|
|
||||||
|
@ -265,6 +393,9 @@ CC.KW.RETURN ldy CStackPtr
|
||||||
.7 iny skip bState
|
.7 iny skip bState
|
||||||
iny skip Locals
|
iny skip Locals
|
||||||
|
|
||||||
|
iny
|
||||||
|
iny skip CPSID
|
||||||
|
|
||||||
iny get SYM.T
|
iny get SYM.T
|
||||||
lda (ZPCCStack),y
|
lda (ZPCCStack),y
|
||||||
|
|
||||||
|
@ -281,11 +412,10 @@ CC.KW.RETURN ldy CStackPtr
|
||||||
jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q
|
jsr CC.SYM.GetYASizeOfInAXC Y,A=T/Q
|
||||||
tax X = sizeof
|
tax X = sizeof
|
||||||
jsr CODE.SetRetValue
|
jsr CODE.SetRetValue
|
||||||
|
bcs .99
|
||||||
|
|
||||||
jsr CODE.Leave
|
>LDYA L.PCC.LEAVE
|
||||||
|
jmp CODE.EmitPCC
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.SIZEOF
|
CC.KW.SIZEOF
|
||||||
lda #E.CSYN
|
lda #E.CSYN
|
||||||
|
@ -321,66 +451,178 @@ CC.KW.STRUCT >ENTER 4
|
||||||
cmp #'}'
|
cmp #'}'
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
jsr CC.GetNextCharNB skip }
|
jsr CC.GetNextCharNB skip '}'
|
||||||
|
|
||||||
clc
|
clc
|
||||||
.99 >LEAVE
|
.99 >LEAVE
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.BEGIN jsr CC.GetNextCharNB
|
CC.KW.BEGIN jsr CC.SYM.NewCPSID
|
||||||
bcs .9
|
bcs .99
|
||||||
|
|
||||||
cmp #'{'
|
>LDA.G CC.CPSPFX+3
|
||||||
bne .7
|
|
||||||
|
|
||||||
>LDA.G CC.CmdSave
|
|
||||||
tax
|
|
||||||
jmp CC.STMT.CPStmt
|
|
||||||
|
|
||||||
.7 >LDA.G CC.CmdSave
|
|
||||||
jsr CC.Push
|
jsr CC.Push
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
lda #';'
|
>LDA.G CC.CPSPFX+2
|
||||||
|
jsr CC.Push
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda LocalPtr Locals
|
||||||
|
jsr CC.Push
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #0 bState
|
||||||
|
jsr CC.Push
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>LDA.G CC.CmdSave
|
||||||
|
jmp CC.Push
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.STMT jsr CC.GetNextCharNBNL
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
cmp #'{'
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
jsr CC.GetNextCharNB skip '{'
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda #'}'
|
||||||
|
jmp CC.Push
|
||||||
|
|
||||||
|
.1 lda #';'
|
||||||
jmp CC.Push
|
jmp CC.Push
|
||||||
|
|
||||||
.9 lda #E.CSYN
|
.9 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Input : Value on Stack, Y,A = Type/Qual
|
CC.KW.NewLabel pha
|
||||||
* Output : CC = true, CS = false
|
|
||||||
*--------------------------------------
|
|
||||||
CC.KW.TestZero jsr CC.SYM.GetYASizeOfInAXC
|
|
||||||
tax
|
|
||||||
|
|
||||||
.6 lda #$A2 LDX #imm
|
lda CStackPtr
|
||||||
jsr CODE.EmitByte
|
clc
|
||||||
txa
|
adc #4
|
||||||
jsr CODE.EmitByte
|
tay
|
||||||
|
|
||||||
ldx #PCC.Test0X.L
|
lda (ZPCCStack),y
|
||||||
ldy #0
|
pha
|
||||||
|
|
||||||
.7 lda PCC.Test0X,y
|
|
||||||
jsr CODE.EmitByte
|
|
||||||
iny
|
iny
|
||||||
dex
|
lda (ZPCCStack),y
|
||||||
bne .7
|
ply
|
||||||
|
>STYA.G CC.CPSPFX+2
|
||||||
|
|
||||||
clc
|
pla
|
||||||
rts
|
jmp CC.SYM.NewA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.KW.ZPCCCodeAdd2
|
CC.KW.GetLabel pha
|
||||||
lda ZPCCCode
|
|
||||||
|
lda CStackPtr
|
||||||
clc
|
clc
|
||||||
adc #2
|
adc #4
|
||||||
sta ZPCCCode
|
tay
|
||||||
bcc .8
|
|
||||||
|
|
||||||
inc ZPCCCode+1
|
lda (ZPCCStack),y
|
||||||
|
pha
|
||||||
|
iny
|
||||||
|
lda (ZPCCStack),y
|
||||||
|
ply
|
||||||
|
>STYA.G CC.CPSPFX+2
|
||||||
|
|
||||||
|
pla
|
||||||
|
jmp CC.SYM.LookupA
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.LookupLabel
|
||||||
|
pha
|
||||||
|
|
||||||
|
ldy CStackPtr
|
||||||
|
sty ArgIndex
|
||||||
|
|
||||||
|
.1 ldy ArgIndex
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
iny skip ; or }
|
||||||
|
|
||||||
|
lda (ZPCCStack),y
|
||||||
|
bmi .9 f()
|
||||||
|
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
iny
|
||||||
|
|
||||||
|
lda (ZPCCStack),y
|
||||||
|
pha
|
||||||
|
iny
|
||||||
|
lda (ZPCCStack),y
|
||||||
|
iny
|
||||||
|
|
||||||
|
sty ArgIndex
|
||||||
|
|
||||||
|
ply
|
||||||
|
>STYA.G CC.CPSPFX+2
|
||||||
|
|
||||||
|
pla
|
||||||
|
pha
|
||||||
|
jsr CC.SYM.LookupA
|
||||||
|
bcs .1
|
||||||
|
|
||||||
|
pla
|
||||||
.8 rts
|
.8 rts
|
||||||
|
|
||||||
|
.9 pla
|
||||||
|
lda #E.CSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
|
* Input : Value on Stack, Y,A = Type/Qual
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.TestZero jsr CC.EXP.GetYASizeOfInAXC
|
||||||
|
tax
|
||||||
|
cpx #1
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
>LDYA L.PCC.TestZero1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.1 cpx #2
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.TestZero2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 jsr CODE.LDXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.TestZeroX
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
* Input : Value on Stack, Y,A = Type/Qual
|
||||||
|
*--------------------------------------
|
||||||
|
CC.KW.TestnZero jsr CC.EXP.GetYASizeOfInAXC
|
||||||
|
tax
|
||||||
|
cpx #1
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
>LDYA L.PCC.TestnZero1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.1 cpx #2
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.TestnZero2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 jsr CODE.LDXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.TestnZeroX
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Input : Value on Stack, Y,A = Type/Qual
|
* Input : Value on Stack, Y,A = Type/Qual
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -156,7 +156,43 @@ CC.Link.Dump >PUSHW L.MSG.LINKING2
|
||||||
>SYSCALL PrintF
|
>SYSCALL PrintF
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.Link.CheckMain
|
||||||
|
>PUSHB.G CC.hScopes
|
||||||
|
>PUSHW L.CC.MAIN
|
||||||
|
>SYSCALL SListLookup
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>STYA ZPPtr1 SymID
|
||||||
|
|
||||||
|
>PUSHB.G CC.hScopes
|
||||||
|
>PUSHW ZPPtr1 SymID
|
||||||
|
>PUSHW ZPSymBufPtr
|
||||||
|
>PUSHWI 65535 all
|
||||||
|
>PUSHWZ From Start
|
||||||
|
>SYSCALL SListGetData
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
iny
|
||||||
|
ora (ZPSymBufPtr),y
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
sta PCC.FH+PCC.FH.MAIN+1
|
||||||
|
dey
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
sta PCC.FH+PCC.FH.MAIN
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 >LDYA L.MSG.NOMAIN
|
||||||
|
>SYSCALL puts
|
||||||
|
lda #E.CSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE usr/src/bin/cc.s.link
|
SAVE usr/src/bin/cc.s.link
|
||||||
|
|
|
@ -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
|
|
@ -1,9 +1,54 @@
|
||||||
NEW
|
NEW
|
||||||
AUTO 3,1
|
AUTO 3,1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.STMT jsr CC.GetCharNB
|
||||||
|
jsr CC.IsLetter
|
||||||
|
ldx #$ff
|
||||||
|
bcc .20
|
||||||
|
|
||||||
|
>LDYA L.CC.PREOPS ++var ?
|
||||||
|
jsr CC.LookupOP
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
.20 stx StmtPreOp
|
||||||
|
|
||||||
|
jsr CC.SYM.Lookup var or func() ?
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPLookupSymPtr),y
|
||||||
|
bit #SYM.Q.FUNC
|
||||||
|
beq .60
|
||||||
|
|
||||||
|
bit StmtPreOp
|
||||||
|
bpl .9 ++func ????????
|
||||||
|
|
||||||
|
jsr CC.F.CallNoRetV func( ... );
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jmp CC.SYM.LookupFree
|
||||||
|
|
||||||
|
.60 jsr CC.CORE.SetVar
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
jmp CC.SYM.LookupFree
|
||||||
|
|
||||||
|
.9 lda #E.CSYN
|
||||||
|
sec
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
* X = KW.ID
|
* X = KW.ID
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.STMT.CPStmt lda LocalPtr Locals
|
CC.STMT.CPStmt.NEW
|
||||||
|
>LDA.G CC.CPSID+1
|
||||||
|
jsr CC.Push
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>LDA.G CC.CPSID
|
||||||
|
jsr CC.Push
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
lda LocalPtr Locals
|
||||||
jsr CC.Push
|
jsr CC.Push
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
|
@ -20,33 +65,58 @@ CC.STMT.CPStmt lda LocalPtr Locals
|
||||||
|
|
||||||
.99 rts
|
.99 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.STMT.Stmt.END
|
||||||
|
jsr CC.Get
|
||||||
|
bcs .8
|
||||||
|
|
||||||
|
cmp #'}'
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
cmp #';' must be ';' on stack....
|
||||||
|
bra CC.STMT.CPStmt.POP
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
|
||||||
|
CC.STMT.Stmt.RTS
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
CC.STMT.CPStmt.END
|
CC.STMT.CPStmt.END
|
||||||
jsr CC.Pop
|
jsr CC.Get
|
||||||
bcs .9
|
bcs CC.STMT.Stmt.RTS
|
||||||
|
|
||||||
cmp #'}' must be '}' on stack....
|
cmp #'}' must be '}' on stack....
|
||||||
bne .9
|
CC.STMT.CPStmt.POP
|
||||||
|
bne .98
|
||||||
|
|
||||||
jsr CC.Pop get stacked KW...
|
iny
|
||||||
tax
|
lda (ZPCCStack),y
|
||||||
|
|
||||||
jsr CC.Pop bState
|
jsr .7
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
bvs .1 DONT POP reused context (ELSE....)
|
||||||
|
|
||||||
|
lda CStackPtr
|
||||||
|
* clc
|
||||||
|
adc #5
|
||||||
|
sta CStackPtr
|
||||||
|
|
||||||
jsr CC.Pop Locals
|
jsr CC.Pop Locals
|
||||||
sta LocalPtr
|
sta LocalPtr
|
||||||
|
|
||||||
txa
|
.1 clc
|
||||||
bmi .5
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
.7 tax
|
||||||
|
bmi .8
|
||||||
|
|
||||||
jmp (J.CC.KW.END,x)
|
jmp (J.CC.KW.END,x)
|
||||||
|
|
||||||
.5 jmp CC.F.Def.END
|
.8 jmp CC.F.Def.END
|
||||||
|
|
||||||
.9 lda #E.CSYN
|
.98 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
rts
|
.99 rts
|
||||||
*--------------------------------------
|
|
||||||
CC.CPS.New
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE usr/src/bin/cc.s.stmt
|
SAVE usr/src/bin/cc.s.stmt
|
||||||
|
|
487
BIN/CC.S.SYM.txt
487
BIN/CC.S.SYM.txt
|
@ -17,7 +17,7 @@ CC.SYM.New >STYA ZPPtr2 T/Q
|
||||||
>PUSHW ZPLineBufPtr
|
>PUSHW ZPLineBufPtr
|
||||||
|
|
||||||
>SYSCALL SListLookup
|
>SYSCALL SListLookup
|
||||||
bcs .9
|
bcs CC.SYM.New.9
|
||||||
|
|
||||||
>STYA.G CC.SymID Y,A = KeyID
|
>STYA.G CC.SymID Y,A = KeyID
|
||||||
|
|
||||||
|
@ -29,21 +29,14 @@ CC.SYM.New >STYA ZPPtr2 T/Q
|
||||||
>PUSHWI 65535 all
|
>PUSHWI 65535 all
|
||||||
>PUSHWZ From Start
|
>PUSHWZ From Start
|
||||||
>SYSCALL SListGetData
|
>SYSCALL SListGetData
|
||||||
bcs .9
|
bcc CC.SYM.New2
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
CC.SYM.New.9 rts Y,A = SymSize
|
||||||
cmp #'('
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
jmp CC.F.Decl
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
.9 rts Y,A = SymSize
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SYM.New1 ldy ScopeIdx
|
CC.SYM.New1 ldy ScopeIdx
|
||||||
lda (pData),y
|
lda (pData),y
|
||||||
jsr CC.SYM.NewKey
|
jsr CC.SYM.NewKey
|
||||||
bcs .9
|
bcs CC.SYM.New.9
|
||||||
|
|
||||||
>STYA.G CC.SymID Y,A = KeyID
|
>STYA.G CC.SymID Y,A = KeyID
|
||||||
|
|
||||||
|
@ -71,8 +64,8 @@ CC.SYM.New1 ldy ScopeIdx
|
||||||
tya
|
tya
|
||||||
ldy #SYM.DefSize
|
ldy #SYM.DefSize
|
||||||
sta (ZPSymBufPtr),y
|
sta (ZPSymBufPtr),y
|
||||||
|
*--------------------------------------
|
||||||
jsr CC.GetCharNB
|
CC.SYM.New2 jsr CC.GetCharNB
|
||||||
bcs CC.SYM.SetAddr
|
bcs CC.SYM.SetAddr
|
||||||
|
|
||||||
cmp #'('
|
cmp #'('
|
||||||
|
@ -84,45 +77,45 @@ CC.SYM.New1 ldy ScopeIdx
|
||||||
sta (ZPSymBufPtr),y
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
jmp CC.F.Decl
|
jmp CC.F.Decl
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SYM.NewV cmp #'['
|
CC.SYM.NewV cmp #'['
|
||||||
bne CC.SYM.SetAddr
|
bne CC.SYM.SetAddr
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
and #%11001111
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
lda #SYM.Def
|
||||||
|
ldy #SYM.DefSize
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
|
||||||
|
.1 lda (ZPSymBufPtr),y
|
||||||
|
clc
|
||||||
|
adc #SYM.Q.ARRAY
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
jsr CC.GetNextCharNB Skip [
|
jsr CC.GetNextCharNB Skip [
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
cmp #']'
|
cmp #']'
|
||||||
bne .3
|
bne .2
|
||||||
|
|
||||||
.2 ldy #SYM.Q
|
ldy #SYM.Q
|
||||||
lda (ZPSymBufPtr),y
|
lda (ZPSymBufPtr),y
|
||||||
bit #SYM.Q.PPPOINTER
|
and #SYM.Q.PPPOINTER
|
||||||
beq .99
|
beq .99 [] only allowed for *
|
||||||
|
|
||||||
and #SYM.Q.AAARRAY
|
>LDYAI 0 set as [0] (deref)
|
||||||
cmp #SYM.Q.AAARRAY
|
jsr CC.SYM.AddWord
|
||||||
|
bra .3
|
||||||
|
|
||||||
|
.2 jsr CC.EXP.IntConst
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
* ldy #SYM.Q
|
jsr CC.SYM.AddWord
|
||||||
lda (ZPSymBufPtr),y
|
|
||||||
* clc
|
|
||||||
adc #SYM.Q.ARRAY
|
|
||||||
sta (ZPSymBufPtr),y
|
|
||||||
|
|
||||||
jsr CC.GetNextCharNB Skip ]
|
|
||||||
bcs CC.SYM.SetAddr
|
|
||||||
|
|
||||||
cmp #'['
|
|
||||||
beq .2
|
|
||||||
|
|
||||||
bra CC.SYM.SetAddr
|
|
||||||
*--------------------------------------
|
|
||||||
.3 jsr CC.EXP.IntConst
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.SYM.SetSizeOf
|
|
||||||
|
|
||||||
jsr CC.GetCharNB
|
jsr CC.GetCharNB
|
||||||
bcs .99
|
bcs .99
|
||||||
|
@ -130,17 +123,22 @@ CC.SYM.NewV cmp #'['
|
||||||
cmp #']'
|
cmp #']'
|
||||||
bne .99
|
bne .99
|
||||||
|
|
||||||
jsr CC.GetNextCharNB Skip ]
|
.3 jsr CC.GetNextCharNB Skip ]
|
||||||
bcs CC.SYM.SetAddr
|
bcs CC.SYM.SetAddr
|
||||||
|
|
||||||
* cmp #'['
|
cmp #'['
|
||||||
* bne CC.SYM.SetAddr
|
bne CC.SYM.SetAddr
|
||||||
|
|
||||||
bra CC.SYM.SetAddr
|
ldy #SYM.Q
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
and #SYM.Q.AAARRAY
|
||||||
|
cmp #SYM.Q.AAARRAY
|
||||||
|
beq .99 already [][][]
|
||||||
|
|
||||||
|
bra .1
|
||||||
|
|
||||||
.99 lda #E.CSYN
|
.99 lda #E.CSYN
|
||||||
sec
|
sec
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SYM.SetAddr ldy #SYM.Q
|
CC.SYM.SetAddr ldy #SYM.Q
|
||||||
|
@ -164,19 +162,23 @@ CC.SYM.SetAddrG jsr CC.SYM.GetSymSizeOfInAXC
|
||||||
|
|
||||||
* clc / sec A,X=Size, CS if pointer
|
* clc / sec A,X=Size, CS if pointer
|
||||||
|
|
||||||
|
pha
|
||||||
|
|
||||||
ldy #SYM.Addr
|
ldy #SYM.Addr
|
||||||
|
|
||||||
lda ZPCCData
|
lda ZPCCData
|
||||||
sta (ZPSymBufPtr),y
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
adc ZPCCData
|
|
||||||
sta ZPCCData
|
|
||||||
|
|
||||||
iny
|
iny
|
||||||
|
|
||||||
lda ZPCCData+1
|
lda ZPCCData+1
|
||||||
sta (ZPSymBufPtr),y
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
pla
|
||||||
|
clc
|
||||||
|
adc ZPCCData
|
||||||
|
sta ZPCCData
|
||||||
|
|
||||||
txa
|
txa
|
||||||
adc ZPCCData+1
|
adc ZPCCData+1
|
||||||
sta ZPCCData+1
|
sta ZPCCData+1
|
||||||
|
@ -214,6 +216,125 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.SYM.PushAddr ldy #SYM.SC
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
beq .1 SYM.SC.STATIC
|
||||||
|
* LOCAL
|
||||||
|
>LDYA L.PCC.PushLAddrH
|
||||||
|
jsr CODE.EmitPCC
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
eor #$FF
|
||||||
|
inc
|
||||||
|
jsr CODE.LDAI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushLAddrL
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
* GLOBAL
|
||||||
|
|
||||||
|
.1 ldy #SYM.Addr+1
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
tax
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
jsr CODE.LDAXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
and #SYM.Q.CONST
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.PushIAddr
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 >LDYA L.PCC.PushUAddr
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.SYM.GetAddr1 ldy #SYM.SC
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
beq .1 SYM.SC.STATIC
|
||||||
|
* LOCAL
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
eor #$FF
|
||||||
|
inc
|
||||||
|
jsr CODE.LDAI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetLAddr1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
* GLOBAL
|
||||||
|
|
||||||
|
.1 ldy #SYM.Addr+1
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
tax
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
jsr CODE.LDAXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
and #SYM.Q.CONST
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetIAddr1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 >LDYA L.PCC.GetUAddr1
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.SYM.GetAddr2 ldy #SYM.SC
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
beq .1 SYM.SC.STATIC
|
||||||
|
* LOCAL
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
eor #$FF
|
||||||
|
inc
|
||||||
|
jsr CODE.LDAI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetLAddr2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
* GLOBAL
|
||||||
|
|
||||||
|
.1 ldy #SYM.Addr+1
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
tax
|
||||||
|
|
||||||
|
dey
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
jsr CODE.LDAXI
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #SYM.Q
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
and #SYM.Q.CONST
|
||||||
|
beq .2
|
||||||
|
|
||||||
|
>LDYA L.PCC.GetIAddr2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.2 >LDYA L.PCC.GetUAddr2
|
||||||
|
jmp CODE.EmitPCC
|
||||||
|
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
CC.SYM.NewKey >PUSHA
|
CC.SYM.NewKey >PUSHA
|
||||||
>PUSHW ZPLineBufPtr
|
>PUSHW ZPLineBufPtr
|
||||||
>SYSCALL SListNewKey
|
>SYSCALL SListNewKey
|
||||||
|
@ -223,6 +344,101 @@ CC.SYM.NewKey >PUSHA
|
||||||
|
|
||||||
.9 rts Y,A = KeyID, X = KeyLen
|
.9 rts Y,A = KeyID, X = KeyLen
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.SYM.AddWord pha
|
||||||
|
phy
|
||||||
|
|
||||||
|
ldy #SYM.DefSize
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
pha
|
||||||
|
|
||||||
|
inc
|
||||||
|
inc
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
ply
|
||||||
|
|
||||||
|
pla
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
iny
|
||||||
|
pla
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
CC.SYM.AddWord.RTS
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.SYM.NewCPSID >LDYA.G CC.CPSID
|
||||||
|
>STYA.G CC.CPSPFX+2
|
||||||
|
|
||||||
|
>LDA.G CC.CPSID+1
|
||||||
|
inc
|
||||||
|
cmp #'Z'+1
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
dey CC.CPSID
|
||||||
|
lda (pData),y
|
||||||
|
inc
|
||||||
|
cmp #'Z'+1
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
sta (pData),y
|
||||||
|
|
||||||
|
lda #'A'
|
||||||
|
iny CC.CPSID+1
|
||||||
|
|
||||||
|
.1 sta (pData),y
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.9 lda #E.OOH
|
||||||
|
* sec
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CC.SYM.NewA bit bPass2
|
||||||
|
bmi .8
|
||||||
|
|
||||||
|
>STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
|
||||||
|
|
||||||
|
>PUSHB.G CC.hScopes Global Scope
|
||||||
|
>PUSHEA.G CC.CPSPFX
|
||||||
|
|
||||||
|
>SYSCALL SListNewKey
|
||||||
|
bcs CC.SYM.AddWord.RTS
|
||||||
|
|
||||||
|
>STYA.G CC.SymID Y,A = KeyID
|
||||||
|
|
||||||
|
lda #SYM.T.VOID
|
||||||
|
sta (ZPSymBufPtr) #SYM.T
|
||||||
|
|
||||||
|
lda #SYM.Q.POINTER
|
||||||
|
ldy #SYM.Q
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
lda #SYM.SC.STATIC
|
||||||
|
iny #SYM.SC
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda #0
|
||||||
|
|
||||||
|
.1 sta (ZPSymBufPtr),y
|
||||||
|
iny
|
||||||
|
cpy #SYM.Def
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
tya
|
||||||
|
ldy #SYM.DefSize
|
||||||
|
sta (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
>LDYA ZPCCCode
|
||||||
|
jsr CC.SYM.SetAddrYA
|
||||||
|
|
||||||
|
>LDA.G CC.hScopes Global Scope
|
||||||
|
jmp CC.SYM.Store.1
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
CC.SYM.StoreF >LDA.G CC.hScopes
|
CC.SYM.StoreF >LDA.G CC.hScopes
|
||||||
|
|
||||||
bit bPass2
|
bit bPass2
|
||||||
|
@ -332,6 +548,44 @@ CC.SYM.Lookup >LDA.G CC.LookupIdx
|
||||||
* sec
|
* sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
CC.SYM.LookupA bit bPass2
|
||||||
|
bmi .1
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
ldy #0
|
||||||
|
clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 >STA.G CC.CPSPFX A = "B"reak, "C"ontinue...
|
||||||
|
|
||||||
|
>PUSHB.G CC.hScopes Global Scope
|
||||||
|
>PUSHEA.G CC.CPSPFX
|
||||||
|
>SYSCALL SListLookup
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>STYA.G CC.SymID Y,A = KeyID
|
||||||
|
|
||||||
|
>PUSHB.G CC.hScopes
|
||||||
|
>PUSHW.G CC.SymID
|
||||||
|
>PUSHW ZPSymBufPtr
|
||||||
|
>PUSHWI 65535 all
|
||||||
|
>PUSHWZ From Start
|
||||||
|
>SYSCALL SListGetData
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
ldy #SYM.Addr
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
|
||||||
|
tax
|
||||||
|
|
||||||
|
iny
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
tay
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
|
.99 rts
|
||||||
|
*--------------------------------------
|
||||||
CC.SYM.LookupFree
|
CC.SYM.LookupFree
|
||||||
>LDA.G CC.LookupIdx
|
>LDA.G CC.LookupIdx
|
||||||
cmp #CC.LookupIdx
|
cmp #CC.LookupIdx
|
||||||
|
@ -367,92 +621,35 @@ CC.SYM.LookupFreeAll
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Y,A = value T/Q
|
* on RT stack : Addr,value
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SYM.PushValue
|
CC.SYM.SetValue jsr CC.SYM.GetSymSizeOfInAXC
|
||||||
jsr CC.SYM.CheckTypeYA
|
tay
|
||||||
|
dey
|
||||||
|
jsr CODE.LDYI
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr CC.SYM.GetSymSizeOfInAXC
|
>LDYA L.PCC.SetValue
|
||||||
tax
|
jmp CODE.EmitPCC
|
||||||
jsr CODE.LDXI
|
|
||||||
|
|
||||||
jsr CC.SYM.GetAddrInYA
|
|
||||||
beq .1
|
|
||||||
|
|
||||||
jsr CODE.LDYAI
|
|
||||||
jsr CODE.PushXFromYA
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 jsr CODE.GetLocal Y = local address
|
|
||||||
jsr CODE.PushXFromYA
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.SYM.PopValue jsr CC.SYM.CheckTypeYA
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.SYM.GetSymSizeOfInAXC
|
|
||||||
tax
|
|
||||||
jsr CODE.LDXI
|
|
||||||
|
|
||||||
jsr CC.SYM.GetAddrInYA
|
|
||||||
beq .1
|
|
||||||
|
|
||||||
jsr CODE.LDYAI
|
|
||||||
jsr CODE.PopXToYA
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 jsr CODE.GetLocal Y = local address
|
|
||||||
jsr CODE.PopXToYA
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.SYM.SetValue jsr CC.SYM.CheckTypeYA
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr CC.SYM.GetSymSizeOfInAXC
|
|
||||||
tax
|
|
||||||
jsr CODE.LDXI
|
|
||||||
|
|
||||||
jsr CC.SYM.GetAddrInYA
|
|
||||||
beq .1
|
|
||||||
|
|
||||||
jsr CODE.LDYAI
|
|
||||||
jsr CODE.SetXToYA
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.1 jsr CODE.GetLocal Y = local address
|
|
||||||
jsr CODE.SetXToYA
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* in : Y,A = T/Q
|
* in : Y,A = T/Q
|
||||||
* out : CC
|
* out : CC
|
||||||
* CS, A = E.TMISMATCH
|
* CS, A = E.TMISMATCH
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SYM.CheckTypeYA
|
CC.SYM.CheckTypeYA.OLD
|
||||||
pha
|
pha
|
||||||
tya
|
tya
|
||||||
cmp (ZPSymBufPtr)
|
cmp (ZPSymBufPtr)
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
pla
|
pla
|
||||||
phy
|
|
||||||
ldy #SYM.Q
|
|
||||||
cmp (ZPSymBufPtr),y
|
|
||||||
bne .9
|
|
||||||
|
|
||||||
ply
|
ldy #SYM.Q
|
||||||
|
eor (ZPSymBufPtr),y
|
||||||
|
and #$FC ignore SYM.Q.FUNC+SYM.Q.FASTCALL
|
||||||
|
bne .9
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
@ -476,7 +673,7 @@ CC.SYM.GetTypeInYA
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* in : Y,A = T/Q
|
* in : Y,A = T/Q
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SYM.SetTypeYA
|
CC.SYM.SetTypeYA.OLD
|
||||||
phy
|
phy
|
||||||
ldy #SYM.Q
|
ldy #SYM.Q
|
||||||
sta (ZPSymBufPtr),y
|
sta (ZPSymBufPtr),y
|
||||||
|
@ -497,7 +694,16 @@ CC.SYM.GetSymSizeOfInAXC
|
||||||
CC.SYM.GetYASizeOfInAXC
|
CC.SYM.GetYASizeOfInAXC
|
||||||
|
|
||||||
bit #SYM.Q.PPPOINTER
|
bit #SYM.Q.PPPOINTER
|
||||||
bne .1
|
beq .1
|
||||||
|
|
||||||
|
lda #2 pointer
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
sec +1 for hMem Storage
|
||||||
|
rts
|
||||||
|
|
||||||
|
.1 bit #SYM.Q.AAARRAY
|
||||||
|
bne .2
|
||||||
|
|
||||||
lda CC.TYPESIZE-1,y
|
lda CC.TYPESIZE-1,y
|
||||||
ldx #0
|
ldx #0
|
||||||
|
@ -505,10 +711,36 @@ CC.SYM.GetYASizeOfInAXC
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 lda #2 pointer
|
.2 ldx CC.TYPESIZE-1,y
|
||||||
ldx #0
|
|
||||||
|
|
||||||
sec +1 for hMem Storage
|
ldy #SYM.Def
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
>PUSHA
|
||||||
|
iny
|
||||||
|
lda (ZPSymBufPtr),y
|
||||||
|
>PUSHA
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
|
||||||
|
.3 dex
|
||||||
|
beq .5
|
||||||
|
|
||||||
|
.4 lda (pStack),y
|
||||||
|
clc
|
||||||
|
adc (pStack),y
|
||||||
|
sta (pStack),y
|
||||||
|
|
||||||
|
lda (pStack)
|
||||||
|
adc (pStack)
|
||||||
|
sta (pStack)
|
||||||
|
dex
|
||||||
|
bne .4
|
||||||
|
|
||||||
|
.5 >PULLA
|
||||||
|
tax
|
||||||
|
>PULLA
|
||||||
|
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* in/out : A,X,C = size
|
* in/out : A,X,C = size
|
||||||
|
@ -526,19 +758,6 @@ CC.SYM.SetSizeOf
|
||||||
pla
|
pla
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SYM.GetAddrInYA
|
|
||||||
ldy #SYM.Addr+1
|
|
||||||
lda (ZPSymBufPtr),y
|
|
||||||
pha
|
|
||||||
|
|
||||||
dey
|
|
||||||
lda (ZPSymBufPtr),y
|
|
||||||
tay
|
|
||||||
|
|
||||||
pla Z if Local
|
|
||||||
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CC.SYM.SetAddrYA
|
CC.SYM.SetAddrYA
|
||||||
phy
|
phy
|
||||||
|
|
||||||
|
|
|
@ -150,7 +150,7 @@ CC.TYPE sta (pStack) T
|
||||||
.10 jsr CC.IsLetter
|
.10 jsr CC.IsLetter
|
||||||
bcs .8
|
bcs .8
|
||||||
|
|
||||||
>LDYA L.CC.FTYPES
|
>LDYA L.CC.FTYPES int fastcall f() ?
|
||||||
jsr CC.LookupID
|
jsr CC.LookupID
|
||||||
bcs .8 next char is an identifier
|
bcs .8 next char is an identifier
|
||||||
|
|
||||||
|
|
640
BIN/CC.S.txt
640
BIN/CC.S.txt
|
@ -50,14 +50,6 @@ SYM.Def .EQ 8 Funtions : fTQ,a1TQ,a2TQ....
|
||||||
*
|
*
|
||||||
SYM .EQ 10
|
SYM .EQ 10
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CPS.ParentID .EQ 0
|
|
||||||
CPS.hSYM .EQ 2
|
|
||||||
*
|
|
||||||
CPS.Cont .EQ 4
|
|
||||||
CPS.Break .EQ 6
|
|
||||||
*
|
|
||||||
CPS .EQ 8
|
|
||||||
*--------------------------------------
|
|
||||||
* Zero Page Segment, up to 32 bytes
|
* Zero Page Segment, up to 32 bytes
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
|
@ -76,20 +68,22 @@ ZPCCStack .BS 2
|
||||||
|
|
||||||
ZPLineBufPtr .BS 2
|
ZPLineBufPtr .BS 2
|
||||||
ZPLookupPtr .BS 2
|
ZPLookupPtr .BS 2
|
||||||
|
|
||||||
CStackPtr .BS 1
|
CStackPtr .BS 1
|
||||||
LocalPtr .BS 1
|
LocalPtr .BS 1
|
||||||
|
|
||||||
ScopeIdx .BS 1
|
ScopeIdx .BS 1
|
||||||
bLocalScope .BS 1
|
bLocalScope .BS 1
|
||||||
|
|
||||||
ZPSymBufPtr .BS 2
|
ZPSymBufPtr .BS 2
|
||||||
|
|
||||||
* .BS 1
|
|
||||||
* .BS 1
|
|
||||||
|
|
||||||
ZPLookupSymPtr .BS 2
|
ZPLookupSymPtr .BS 2
|
||||||
|
|
||||||
|
bInitCode .BS 1
|
||||||
|
StmtPreOp .BS 1
|
||||||
|
ExpState .BS 1
|
||||||
|
*ExpState.VinYA .EQ $10
|
||||||
|
ExpState.AonStack .EQ $20
|
||||||
|
ExpState.AinPTR .EQ $40
|
||||||
|
ExpState.VonStack .EQ $80
|
||||||
|
ZPState .BS 1
|
||||||
ZS.END .ED
|
ZS.END .ED
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* File Header (16 Bytes)
|
* File Header (16 Bytes)
|
||||||
|
@ -127,50 +121,27 @@ L.MSG.SUMMARY .DA MSG.SUMMARY
|
||||||
L.MSG.NOMAIN .DA MSG.NOMAIN
|
L.MSG.NOMAIN .DA MSG.NOMAIN
|
||||||
L.ENV.INCLUDE .DA ENV.INCLUDE
|
L.ENV.INCLUDE .DA ENV.INCLUDE
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
L.CC.PREOPS .DA CC.PREOPS
|
|
||||||
J.CC.PREOPS .DA CC.EXP.GetRef
|
|
||||||
.DA CC.EXP.GetDeref
|
|
||||||
L.CC.POSTOPS .DA CC.POSTOPS
|
|
||||||
L.CC.AOPS .DA CC.AOPS
|
L.CC.AOPS .DA CC.AOPS
|
||||||
|
L.CC.PREOPS .DA CC.PREOPS
|
||||||
|
J.CC.PREOPS .DA CC.EXP.Ref
|
||||||
|
.DA CC.EXP.Deref
|
||||||
|
.DA CC.EXP.Abs
|
||||||
|
.DA CC.EXP.negate
|
||||||
|
.DA CC.EXP.lnot
|
||||||
|
.DA CC.EXP.bnot
|
||||||
|
.DA CC.EXP.preinc
|
||||||
|
.DA CC.EXP.predec
|
||||||
|
L.CC.POSTOPS .DA CC.POSTOPS
|
||||||
|
J.CC.POSTOPS .DA CC.EXP.postinc
|
||||||
|
.DA CC.EXP.postdec
|
||||||
|
.DA CC.EXP.array
|
||||||
|
.DA CC.EXP.Struct
|
||||||
|
.DA CC.EXP.pStruct
|
||||||
L.CC.BOPS .DA CC.BOPS
|
L.CC.BOPS .DA CC.BOPS
|
||||||
J.CC.bBOPS .DA CC.BOPS.bMUL
|
|
||||||
.DA CC.BOPS.bDIV
|
|
||||||
.DA CC.BOPS.bMOD
|
|
||||||
.DA CC.BOPS.ADD
|
|
||||||
.DA CC.BOPS.SUB
|
|
||||||
.DA CC.BOPS.SHL
|
|
||||||
.DA CC.BOPS.SHR
|
|
||||||
.DA CC.BOPS.L
|
|
||||||
.DA CC.BOPS.LE
|
|
||||||
.DA CC.BOPS.G
|
|
||||||
.DA CC.BOPS.GE
|
|
||||||
.DA CC.BOPS.EQ
|
|
||||||
.DA CC.BOPS.NE
|
|
||||||
.DA CC.BOPS.AND
|
|
||||||
.DA CC.BOPS.OR
|
|
||||||
.DA CC.BOPS.EOR
|
|
||||||
.DA CC.BOPS.LAND
|
|
||||||
.DA CC.BOPS.LOR
|
|
||||||
J.CC.cBOPS .DA CC.BOPS.cMUL
|
|
||||||
.DA CC.BOPS.cDIV
|
|
||||||
.DA CC.BOPS.cMOD
|
|
||||||
.DA CC.BOPS.ADD
|
|
||||||
.DA CC.BOPS.SUB
|
|
||||||
.DA CC.BOPS.SHL
|
|
||||||
.DA CC.BOPS.SHR
|
|
||||||
.DA CC.BOPS.L
|
|
||||||
.DA CC.BOPS.LE
|
|
||||||
.DA CC.BOPS.G
|
|
||||||
.DA CC.BOPS.GE
|
|
||||||
.DA CC.BOPS.EQ
|
|
||||||
.DA CC.BOPS.NE
|
|
||||||
.DA CC.BOPS.AND
|
|
||||||
.DA CC.BOPS.OR
|
|
||||||
.DA CC.BOPS.EOR
|
|
||||||
.DA CC.BOPS.LAND
|
|
||||||
.DA CC.BOPS.LOR
|
|
||||||
L.CC.DIRS .DA CC.DIRS
|
L.CC.DIRS .DA CC.DIRS
|
||||||
L.CC.KW .DA CC.KW
|
L.CC.KW .DA CC.KW
|
||||||
|
L.CC.KW2.IF .DA CC.KW2.IF
|
||||||
|
L.CC.KW2.DO .DA CC.KW2.DO
|
||||||
L.CC.SCSPEC .DA CC.SCSPEC
|
L.CC.SCSPEC .DA CC.SCSPEC
|
||||||
L.CC.TYPEQUAL .DA CC.TYPEQUAL
|
L.CC.TYPEQUAL .DA CC.TYPEQUAL
|
||||||
L.CC.TYPESPEC .DA CC.TYPESPEC
|
L.CC.TYPESPEC .DA CC.TYPESPEC
|
||||||
|
@ -186,6 +157,7 @@ J.CC.KW .DA CC.KW.IF
|
||||||
.DA CC.KW.FOR
|
.DA CC.KW.FOR
|
||||||
.DA CC.KW.SWITCH
|
.DA CC.KW.SWITCH
|
||||||
.DA CC.KW.CASE
|
.DA CC.KW.CASE
|
||||||
|
.DA CC.KW.DEFAULT
|
||||||
.DA CC.KW.BREAK
|
.DA CC.KW.BREAK
|
||||||
.DA CC.KW.CONTINUE
|
.DA CC.KW.CONTINUE
|
||||||
.DA CC.KW.RETURN
|
.DA CC.KW.RETURN
|
||||||
|
@ -224,6 +196,80 @@ J.CC.STYPES .DA CC.TYPE.SCHAR
|
||||||
L.CC.MAIN .DA CC.MAIN
|
L.CC.MAIN .DA CC.MAIN
|
||||||
L.CC.LIBC .DA CC.LIBC
|
L.CC.LIBC .DA CC.LIBC
|
||||||
L.PCC.FH .DA PCC.FH
|
L.PCC.FH .DA PCC.FH
|
||||||
|
*--------------------------------------
|
||||||
|
L.PCC.DEBUG .DA PCC.DEBUG
|
||||||
|
L.PCC.SLEEP .DA PCC.SLEEP
|
||||||
|
L.PCC.ENTER .DA PCC.ENTER
|
||||||
|
L.PCC.LEAVE .DA PCC.LEAVE
|
||||||
|
L.PCC.ADDLOCAL .DA PCC.ADDLOCAL
|
||||||
|
L.PCC.SetRetValue .DA PCC.SetRetValue
|
||||||
|
L.PCC.TestZero1 .DA PCC.TestZero1
|
||||||
|
L.PCC.TestZero2 .DA PCC.TestZero2
|
||||||
|
L.PCC.TestZeroX .DA PCC.TestZeroX
|
||||||
|
L.PCC.TestnZero1 .DA PCC.TestnZero1
|
||||||
|
L.PCC.TestnZero2 .DA PCC.TestnZero2
|
||||||
|
L.PCC.TestnZeroX .DA PCC.TestnZeroX
|
||||||
|
L.PCC.PushLAddrH .DA PCC.PushLAddrH
|
||||||
|
L.PCC.PushLAddrL .DA PCC.PushLAddrL
|
||||||
|
L.PCC.PushIAddr .DA PCC.PushIAddr
|
||||||
|
L.PCC.PushUAddr .DA PCC.PushUAddr
|
||||||
|
L.PCC.GetLAddr1 .DA PCC.GetLAddr1
|
||||||
|
L.PCC.GetIAddr1 .DA PCC.GetIAddr1
|
||||||
|
L.PCC.GetUAddr1 .DA PCC.GetUAddr1
|
||||||
|
L.PCC.PopAddr1 .DA PCC.PopAddr1
|
||||||
|
L.PCC.SetValue .DA PCC.SetValue
|
||||||
|
L.PCC.GetLAddr2 .DA PCC.GetLAddr2
|
||||||
|
L.PCC.GetIAddr2 .DA PCC.GetIAddr2
|
||||||
|
L.PCC.GetUAddr2 .DA PCC.GetUAddr2
|
||||||
|
L.PCC.PopAddr2 .DA PCC.PopAddr2
|
||||||
|
L.PCC.Deref2 .DA PCC.Deref2
|
||||||
|
L.PCC.PushDeref2 .DA PCC.PushDeref2
|
||||||
|
L.PCC.PushValue .DA PCC.PushValue
|
||||||
|
L.PCC.Inc1 .DA PCC.Inc1
|
||||||
|
L.PCC.Inc2 .DA PCC.Inc2
|
||||||
|
L.PCC.Inc4 .DA PCC.Inc4
|
||||||
|
L.PCC.Dec1 .DA PCC.Dec1
|
||||||
|
L.PCC.Dec2 .DA PCC.Dec2
|
||||||
|
L.PCC.Dec4 .DA PCC.Dec4
|
||||||
|
*--------------------------------------
|
||||||
|
L.PCC.bBOPS .DA PCC.BOPS.bMUL
|
||||||
|
.DA PCC.BOPS.bDIV
|
||||||
|
.DA PCC.BOPS.bMOD
|
||||||
|
.DA PCC.BOPS.ADD
|
||||||
|
.DA PCC.BOPS.SUB
|
||||||
|
.DA PCC.BOPS.SHL
|
||||||
|
.DA PCC.BOPS.SHR
|
||||||
|
.DA PCC.BOPS.L
|
||||||
|
.DA PCC.BOPS.G
|
||||||
|
.DA PCC.BOPS.LE
|
||||||
|
.DA PCC.BOPS.GE
|
||||||
|
.DA PCC.BOPS.EQ
|
||||||
|
.DA PCC.BOPS.NE
|
||||||
|
.DA PCC.BOPS.LAND
|
||||||
|
.DA PCC.BOPS.AND
|
||||||
|
.DA PCC.BOPS.LOR
|
||||||
|
.DA PCC.BOPS.OR
|
||||||
|
.DA PCC.BOPS.EOR
|
||||||
|
*--------------------------------------
|
||||||
|
L.PCC.cBOPS .DA PCC.BOPS.cMUL
|
||||||
|
.DA PCC.BOPS.cDIV
|
||||||
|
.DA PCC.BOPS.cMOD
|
||||||
|
.DA PCC.BOPS.ADD
|
||||||
|
.DA PCC.BOPS.SUB
|
||||||
|
.DA PCC.BOPS.SHL
|
||||||
|
.DA PCC.BOPS.SHR
|
||||||
|
.DA PCC.BOPS.L
|
||||||
|
.DA PCC.BOPS.G
|
||||||
|
.DA PCC.BOPS.LE
|
||||||
|
.DA PCC.BOPS.GE
|
||||||
|
.DA PCC.BOPS.EQ
|
||||||
|
.DA PCC.BOPS.NE
|
||||||
|
.DA PCC.BOPS.LAND
|
||||||
|
.DA PCC.BOPS.AND
|
||||||
|
.DA PCC.BOPS.LOR
|
||||||
|
.DA PCC.BOPS.OR
|
||||||
|
.DA PCC.BOPS.EOR
|
||||||
|
*--------------------------------------
|
||||||
.DA 0
|
.DA 0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Called once at process creation
|
* Called once at process creation
|
||||||
|
@ -263,7 +309,7 @@ CS.RUN >PUSHW L.MSG.GREETINGS
|
||||||
|
|
||||||
jsr CODE.Init
|
jsr CODE.Init
|
||||||
|
|
||||||
jsr CS.RUN.FOpen1st
|
jsr CC.FIO.FOpen1st
|
||||||
bcs CS.INIT.RTS
|
bcs CS.INIT.RTS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.CLOOP jsr CC.CompileFile
|
CS.RUN.CLOOP jsr CC.CompileFile
|
||||||
|
@ -271,7 +317,7 @@ CS.RUN.CLOOP jsr CC.CompileFile
|
||||||
cmp #MLI.E.EOF
|
cmp #MLI.E.EOF
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
jsr CS.RUN.FClose
|
jsr CC.FIO.FClose
|
||||||
bne CS.RUN.CLOOP
|
bne CS.RUN.CLOOP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
jsr PrintSummary
|
jsr PrintSummary
|
||||||
|
@ -279,19 +325,19 @@ CS.RUN.CLOOP jsr CC.CompileFile
|
||||||
|
|
||||||
jsr CC.Link
|
jsr CC.Link
|
||||||
bcs .99
|
bcs .99
|
||||||
|
* >DEBUG
|
||||||
jsr CheckMain
|
jsr CC.Link.CheckMain
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
dec bPass2
|
dec bPass2
|
||||||
|
|
||||||
jsr CS.RUN.FCreate
|
jsr CC.FIO.FCreate
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CODE.Init
|
jsr CODE.Init
|
||||||
bcs .99
|
bcs .99
|
||||||
|
|
||||||
jsr CS.RUN.FOpen1st
|
jsr CC.FIO.FOpen1st
|
||||||
bcs .99
|
bcs .99
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.2 jsr CC.CompileFile
|
.2 jsr CC.CompileFile
|
||||||
|
@ -299,7 +345,7 @@ CS.RUN.CLOOP jsr CC.CompileFile
|
||||||
cmp #MLI.E.EOF
|
cmp #MLI.E.EOF
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
jsr CS.RUN.FClose
|
jsr CC.FIO.FClose
|
||||||
bne .2
|
bne .2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.8 lda #0 Exit Code = Success
|
.8 lda #0 Exit Code = Success
|
||||||
|
@ -372,130 +418,6 @@ CS.RUN.ARGS inc ArgIndex
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.RUN.FOpen1st >LDA.G CC.InFileArg
|
|
||||||
>SYSCALL ArgV
|
|
||||||
|
|
||||||
CS.RUN.FOpen phy
|
|
||||||
pha
|
|
||||||
|
|
||||||
>PUSHW L.MSG.READING
|
|
||||||
pla
|
|
||||||
pha
|
|
||||||
>PUSHYA
|
|
||||||
>PUSHBI 2
|
|
||||||
>SYSCALL PrintF
|
|
||||||
|
|
||||||
pla
|
|
||||||
ply
|
|
||||||
>PUSHYA
|
|
||||||
>PUSHBI O.RDONLY
|
|
||||||
>PUSHBI S.FI.T.TXT
|
|
||||||
>PUSHWZ Aux type
|
|
||||||
>SYSCALL FOpen
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
tax
|
|
||||||
|
|
||||||
>LDA.G hFilePtr
|
|
||||||
inc
|
|
||||||
sta (pData),y
|
|
||||||
tay
|
|
||||||
txa
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
>LDA.G LineCntPtr
|
|
||||||
inc
|
|
||||||
inc
|
|
||||||
sta (pData),y
|
|
||||||
tay
|
|
||||||
lda #0
|
|
||||||
sta (pData),y
|
|
||||||
iny
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CS.RUN.FGetS >LDYA.G LineBufPtr
|
|
||||||
>STYA ZPLineBufPtr
|
|
||||||
|
|
||||||
>LDA.G LineCntPtr
|
|
||||||
tay
|
|
||||||
lda (pData),y
|
|
||||||
inc
|
|
||||||
sta (pData),y
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
iny
|
|
||||||
lda (pData),y
|
|
||||||
inc
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
.1 >LDA.G hFilePtr
|
|
||||||
tay
|
|
||||||
lda (pData),y
|
|
||||||
>PUSHA
|
|
||||||
|
|
||||||
>PUSHW ZPLineBufPtr
|
|
||||||
>PUSHWI 255
|
|
||||||
>SYSCALL FGetS
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>LDA.G bTrace
|
|
||||||
bpl .8
|
|
||||||
|
|
||||||
jsr PrintTraceMsg
|
|
||||||
|
|
||||||
.8
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CS.RUN.FClose >LDA.G hFilePtr
|
|
||||||
cmp #hFilePtr
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
tay
|
|
||||||
lda (pData),y
|
|
||||||
|
|
||||||
>SYSCALL FClose
|
|
||||||
|
|
||||||
>LDA.G hFilePtr
|
|
||||||
dec
|
|
||||||
sta (pData),y
|
|
||||||
cmp #hFilePtr
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
>LDA.G LineCntPtr
|
|
||||||
dec
|
|
||||||
dec
|
|
||||||
sta (pData),y NZ
|
|
||||||
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CS.RUN.FCreate >LDA.G CC.OutFileArg
|
|
||||||
>SYSCALL ArgV
|
|
||||||
>STYA ZPPtr1
|
|
||||||
|
|
||||||
>PUSHW L.MSG.GENERATING
|
|
||||||
>PUSHW ZPPtr1
|
|
||||||
>PUSHBI 2
|
|
||||||
>SYSCALL PrintF
|
|
||||||
|
|
||||||
>PUSHW ZPPtr1
|
|
||||||
>PUSHBI O.WRONLY+O.CREATE
|
|
||||||
>PUSHBI S.FI.T.BIN
|
|
||||||
>PUSHWI $2000 Aux type
|
|
||||||
>SYSCALL FOpen
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STA.G CC.hOutFile
|
|
||||||
|
|
||||||
>PUSHA A = CC.hOutFile
|
|
||||||
>PUSHW L.PCC.FH
|
|
||||||
>PUSHWI PCC.FH.L
|
|
||||||
>SYSCALL FWrite
|
|
||||||
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CS.DOEVENT sec
|
CS.DOEVENT sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -510,7 +432,9 @@ CS.QUIT jsr CODE.Quit
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PrintTraceMsg ldy #S.PS.hStdErr
|
PrintTraceMsg
|
||||||
|
ldy #S.PS.hStdOut
|
||||||
|
* ldy #S.PS.hStdErr
|
||||||
lda (pPS),y
|
lda (pPS),y
|
||||||
>PUSHA
|
>PUSHA
|
||||||
|
|
||||||
|
@ -641,45 +565,8 @@ PrintSummary lda ZPCCCode+1
|
||||||
|
|
||||||
>PUSHBI 6
|
>PUSHBI 6
|
||||||
>SYSCALL PrintF
|
>SYSCALL PrintF
|
||||||
|
* >DEBUG
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
|
||||||
CheckMain >PUSHB.G CC.hScopes
|
|
||||||
|
|
||||||
>PUSHW L.CC.MAIN
|
|
||||||
>SYSCALL SListLookup
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
>STYA ZPPtr1 SymID
|
|
||||||
|
|
||||||
>PUSHB.G CC.hScopes
|
|
||||||
>PUSHW ZPPtr1 SymID
|
|
||||||
>PUSHW ZPSymBufPtr
|
|
||||||
>PUSHWI 65535 all
|
|
||||||
>PUSHWZ From Start
|
|
||||||
>SYSCALL SListGetData
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
ldy #SYM.Addr
|
|
||||||
lda (ZPSymBufPtr),y
|
|
||||||
iny
|
|
||||||
ora (ZPSymBufPtr),y
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
lda (ZPSymBufPtr),y
|
|
||||||
sta PCC.FH+PCC.FH.MAIN+1
|
|
||||||
dey
|
|
||||||
lda (ZPSymBufPtr),y
|
|
||||||
sta PCC.FH+PCC.FH.MAIN
|
|
||||||
|
|
||||||
* clc
|
|
||||||
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 >LDYA L.MSG.NOMAIN
|
|
||||||
>SYSCALL puts
|
|
||||||
lda #E.CSYN
|
|
||||||
sec
|
|
||||||
.99 rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.INB usr/src/bin/cc.s.code
|
.INB usr/src/bin/cc.s.code
|
||||||
.INB usr/src/bin/cc.s.core
|
.INB usr/src/bin/cc.s.core
|
||||||
|
@ -692,7 +579,7 @@ CheckMain >PUSHB.G CC.hScopes
|
||||||
.INB usr/src/bin/cc.s.exp
|
.INB usr/src/bin/cc.s.exp
|
||||||
.INB usr/src/bin/cc.s.sym
|
.INB usr/src/bin/cc.s.sym
|
||||||
.INB usr/src/bin/cc.s.link
|
.INB usr/src/bin/cc.s.link
|
||||||
.INB usr/src/bin/cc.s.exec
|
.INB usr/src/bin/cc.s.fio
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -712,276 +599,18 @@ MSG.DEBUG .AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n"
|
||||||
MSG.TRACE .AZ "%5D> %s\r\n"
|
MSG.TRACE .AZ "%5D> %s\r\n"
|
||||||
MSG.RTSTK .AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
|
MSG.RTSTK .AZ "<pBase=%H, pVar=%H, (pVar)=%H, pStack=%H>\r\n"
|
||||||
MSG.ERROR .AZ " %s^\r\n"
|
MSG.ERROR .AZ " %s^\r\n"
|
||||||
MSG.SUMMARY .AZ "\r\n*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n\r\n"
|
MSG.SUMMARY .AZ "*** Compilation OK : Code size=%5D, iData size=%5D, uData size=%5D\r\n"
|
||||||
MSG.NOMAIN .AZ "*** No 'main()' function defined."
|
MSG.NOMAIN .AZ "*** No 'main()' function defined."
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ENV.INCLUDE .AZ "INCLUDE"
|
|
||||||
ENV.LIB .AZ "LIB"
|
|
||||||
*--------------------------------------
|
|
||||||
OptionList .AS "DdTt"
|
OptionList .AS "DdTt"
|
||||||
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
|
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* PCC = Pre Compiled Code
|
ENV.INCLUDE .AZ "INCLUDE"
|
||||||
*--------------------------------------
|
ENV.LIB .AZ "LIB"
|
||||||
ZS.RT.Ptr1 .EQ ZPBIN
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.FH .PH $2000
|
|
||||||
PCC.FH.2000 cld
|
|
||||||
jmp (PCC.FH.JMP,x)
|
|
||||||
.DA #$61 6502,Level 1 (65c02)
|
|
||||||
.DA #1 BIN Layout Version 1
|
|
||||||
.DA #0 S.PS.F.EVENT
|
|
||||||
.DA #0
|
|
||||||
PCC.FH.CSSIZE .EQ *-PCC.FH.2000
|
|
||||||
.DA $FFFF * Code Size (without Constants)
|
|
||||||
PCC.FH.DSSIZE .EQ *-PCC.FH.2000
|
|
||||||
.DA $FFFF * Data Size
|
|
||||||
.DA #256 Stack Size
|
|
||||||
.DA #2 ZP Size
|
|
||||||
.DA 0
|
|
||||||
|
|
||||||
PCC.FH.JMP .DA PCC.FH.INIT
|
|
||||||
.DA PCC.FH.RUN
|
|
||||||
.DA PCC.FH.DOEVENT
|
|
||||||
.DA PCC.FH.QUIT
|
|
||||||
PCC.FH.IDATA .EQ *-PCC.FH.2000
|
|
||||||
.DA $FFFF
|
|
||||||
.DA 0
|
|
||||||
|
|
||||||
PCC.FH.INIT
|
|
||||||
* TODO : LoadLib code
|
|
||||||
PCC.FH.QUIT
|
|
||||||
* TODO : UnloadLib code
|
|
||||||
PCC.FH.DOEVENT clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
* int main(int argc, char *argv[]) ;
|
|
||||||
|
|
||||||
PCC.FH.RUN ldy #S.PS.ARGC
|
|
||||||
lda (pPS),y
|
|
||||||
|
|
||||||
.1 pha
|
|
||||||
>SYSCALL ArgV
|
|
||||||
bcs .2
|
|
||||||
|
|
||||||
>STYA ZS.RT.Ptr1
|
|
||||||
|
|
||||||
pla
|
|
||||||
pha
|
|
||||||
asl
|
|
||||||
tay
|
|
||||||
|
|
||||||
lda ZS.RT.Ptr1
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
lda ZS.RT.Ptr1+1
|
|
||||||
iny
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
pla
|
|
||||||
inc
|
|
||||||
bra .1
|
|
||||||
|
|
||||||
.2 pla
|
|
||||||
|
|
||||||
>PUSHWI 0 returned int
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
>PUSHA
|
|
||||||
ldy #S.PS.ARGC
|
|
||||||
lda (pPS),y
|
|
||||||
>PUSHA int ARGC
|
|
||||||
>PUSHW pData *char[] ARGV
|
|
||||||
>DEBUG
|
|
||||||
PCC.FH.MAIN .EQ *-PCC.FH.2000+1
|
|
||||||
jsr $FFFF * jsr main
|
|
||||||
>PULLA
|
|
||||||
inc pStack pull returned int
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
PCC.FH.SYSCALL jsr A2osX.SYSCALL
|
|
||||||
bcc .8
|
|
||||||
|
|
||||||
inc pStack
|
|
||||||
eor #$ff
|
|
||||||
inc
|
|
||||||
>PUSHA int -ERROR code...
|
|
||||||
ldy #1
|
|
||||||
lda #$FF
|
|
||||||
sta (pStack),y on stack
|
|
||||||
rts
|
|
||||||
|
|
||||||
.8
|
|
||||||
|
|
||||||
PCC.FH.CS .EP
|
|
||||||
PCC.FH.L .EQ *-PCC.FH
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.DEBUG >DEBUG
|
|
||||||
PCC.DEBUG.L .EQ *-PCC.DEBUG
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.SLEEP >SLEEP
|
|
||||||
PCC.SLEEP.L .EQ *-PCC.SLEEP
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.ENTER ldx pBase
|
|
||||||
phx
|
|
||||||
clc
|
|
||||||
adc pStack A = Local Size
|
|
||||||
sta pBase
|
|
||||||
|
|
||||||
PCC.ENTER.L .EQ *-PCC.ENTER
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.LEAVE lda pBase
|
|
||||||
sta pStack
|
|
||||||
pla
|
|
||||||
sta pBase
|
|
||||||
rts
|
|
||||||
|
|
||||||
PCC.LEAVE.L .EQ *-PCC.LEAVE
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.ADDLOCAL clc
|
|
||||||
adc pStack
|
|
||||||
sta pStack
|
|
||||||
|
|
||||||
PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.GETLOCAL clc
|
|
||||||
adc pBase
|
|
||||||
tay
|
|
||||||
lda pBase+1
|
|
||||||
|
|
||||||
PCC.GETLOCAL.L .EQ *-PCC.GETLOCAL
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.SETRETVALUE ldy #0
|
|
||||||
.1 >PULLA
|
|
||||||
sta (pBase),y
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
PCC.SETRETVALUE.L .EQ *-PCC.SETRETVALUE
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.PushXFromYA >STYA ZS.RT.Ptr1
|
|
||||||
txa
|
|
||||||
dec
|
|
||||||
tay
|
|
||||||
|
|
||||||
.1 lda (ZS.RT.Ptr1),y
|
|
||||||
>PUSHA
|
|
||||||
dey
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
PCC.PushXFromYA.L .EQ *-PCC.PushXFromYA
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.PopXToYA >STYA ZS.RT.Ptr1
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 >PULLA
|
|
||||||
sta (ZS.RT.Ptr1),y
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
PCC.PopXToYA.L .EQ *-PCC.PopXToYA
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.SetXToYA >STYA ZS.RT.Ptr1
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 lda (pStack),y
|
|
||||||
sta (ZS.RT.Ptr1),y
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
PCC.SetXToYA.L .EQ *-PCC.SetXToYA
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.Test0X lda #0
|
|
||||||
|
|
||||||
.1 ora (pStack)
|
|
||||||
inc pStack
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
tay
|
|
||||||
.2 bne .2+5
|
|
||||||
.HS 4C JMP abs
|
|
||||||
|
|
||||||
PCC.Test0X.L .EQ *-PCC.Test0X
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.SETpBASEp1 lda pBase+1
|
|
||||||
sta ZS.RT.Ptr1+1
|
|
||||||
|
|
||||||
PCC.SETpBASEp1.L .EQ *-PCC.SETpBASEp1
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.SETpBASEpA clc
|
|
||||||
adc pBase
|
|
||||||
sta ZS.RT.Ptr1
|
|
||||||
ldy #1
|
|
||||||
|
|
||||||
PCC.SETpBASEpA.L .EQ *-PCC.SETpBASEpA
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.Deref >PUSHB (ZS.RT.Ptr1),y
|
|
||||||
>PUSHB (ZS.RT.Ptr1)
|
|
||||||
|
|
||||||
PCC.Deref.L .EQ *-PCC.Deref
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.PUSHpBASEp1 >PUSHB pBase+1
|
|
||||||
|
|
||||||
PCC.PUSHpBASEp1.L .EQ *-PCC.PUSHpBASEp1
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.PUSHpBASEpA clc
|
|
||||||
adc pBase
|
|
||||||
>PUSHA
|
|
||||||
|
|
||||||
PCC.PUSHpBASEpA.L .EQ *-PCC.PUSHpBASEpA
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.PushFromPtr >PULLW ZS.RT.Ptr1
|
|
||||||
|
|
||||||
.1 lda (ZS.RT.Ptr1),y
|
|
||||||
>PUSHA
|
|
||||||
dey
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
PCC.PushFromPtr.L .EQ *-PCC.PushFromPtr
|
|
||||||
*--------------------------------------
|
|
||||||
PCC.PushConstPAX
|
|
||||||
clc
|
|
||||||
adc PCC.FH.2000+PCC.FH.IDATA
|
|
||||||
tay
|
|
||||||
txa
|
|
||||||
adc PCC.FH.2000+PCC.FH.IDATA+1
|
|
||||||
>PUSHA
|
|
||||||
tya
|
|
||||||
>PUSHA
|
|
||||||
|
|
||||||
PCC.PushConstPAX.L .EQ *-PCC.PushConstPAX
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.OPChars .AS "!~+-*/%=&|^<>["
|
CC.OPChars .AS "!~+-*/%=&|^<>["
|
||||||
CC.OPChars.Cnt .EQ *-CC.OPChars
|
CC.OPChars.Cnt .EQ *-CC.OPChars
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* Pre Operators: & * + - ! ~ ++ --
|
|
||||||
*--------------------------------------
|
|
||||||
CC.PREOPS >PSTR "&" ref
|
|
||||||
>PSTR "*" deref
|
|
||||||
>PSTR "+" abs
|
|
||||||
>PSTR "-" change sign
|
|
||||||
>PSTR "!" logical not
|
|
||||||
>PSTR "~" bitwise not
|
|
||||||
>PSTR "++" pre increase
|
|
||||||
>PSTR "--" pre decrease
|
|
||||||
.HS 00
|
|
||||||
*--------------------------------------
|
|
||||||
* Post Operators: ++ --
|
|
||||||
*--------------------------------------
|
|
||||||
CC.POSTOPS >PSTR "++"
|
|
||||||
>PSTR "--"
|
|
||||||
>PSTR "["
|
|
||||||
>PSTR "."
|
|
||||||
>PSTR "->"
|
|
||||||
.HS 00
|
|
||||||
*--------------------------------------
|
|
||||||
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
|
* Assignment Operators: = += -= *= /= %= <<= >>= &= ^= |=
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.AOPS >PSTR "="
|
CC.AOPS >PSTR "="
|
||||||
|
@ -996,6 +625,27 @@ CC.AOPS >PSTR "="
|
||||||
>PSTR "^="
|
>PSTR "^="
|
||||||
>PSTR "!="
|
>PSTR "!="
|
||||||
.HS 00
|
.HS 00
|
||||||
|
*--------------------------------------
|
||||||
|
* Pre Operators: & * + - ! ~ ++ --
|
||||||
|
*--------------------------------------
|
||||||
|
CC.PREOPS >PSTR "&" ref
|
||||||
|
>PSTR "*" deref
|
||||||
|
>PSTR "+" abs
|
||||||
|
>PSTR "-" negate
|
||||||
|
>PSTR "!" logical not
|
||||||
|
>PSTR "~" bitwise not
|
||||||
|
>PSTR "++" pre increase
|
||||||
|
>PSTR "--" pre decrease
|
||||||
|
.HS 00
|
||||||
|
*--------------------------------------
|
||||||
|
* Post Operators: ++ --
|
||||||
|
*--------------------------------------
|
||||||
|
CC.POSTOPS >PSTR "++"
|
||||||
|
>PSTR "--"
|
||||||
|
>PSTR "["
|
||||||
|
>PSTR "."
|
||||||
|
>PSTR "->"
|
||||||
|
.HS 00
|
||||||
*-- Binary ---- H to L precedence -----
|
*-- Binary ---- H to L precedence -----
|
||||||
* Arithmetic Operators: * / %
|
* Arithmetic Operators: * / %
|
||||||
* Arithmetic Operators: + -
|
* Arithmetic Operators: + -
|
||||||
|
@ -1039,12 +689,17 @@ CC.KW >PSTR "if"
|
||||||
>PSTR "for"
|
>PSTR "for"
|
||||||
>PSTR "switch"
|
>PSTR "switch"
|
||||||
>PSTR "case"
|
>PSTR "case"
|
||||||
|
>PSTR "default"
|
||||||
>PSTR "break"
|
>PSTR "break"
|
||||||
>PSTR "continue"
|
>PSTR "continue"
|
||||||
>PSTR "return"
|
>PSTR "return"
|
||||||
>PSTR "sizeof"
|
>PSTR "sizeof"
|
||||||
>PSTR "struct"
|
>PSTR "struct"
|
||||||
.HS 00
|
.HS 00
|
||||||
|
CC.KW2.IF >PSTR "else"
|
||||||
|
.HS 00
|
||||||
|
CC.KW2.DO >PSTR "while"
|
||||||
|
.HS 00
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.SCSPEC >PSTR "auto"
|
CC.SCSPEC >PSTR "auto"
|
||||||
>PSTR "register"
|
>PSTR "register"
|
||||||
|
@ -1201,10 +856,10 @@ CC.LIBC >PSTR "chtyp"
|
||||||
.DA #2,#1,#SYS.StrToL
|
.DA #2,#1,#SYS.StrToL
|
||||||
>PSTR "strtoul"
|
>PSTR "strtoul"
|
||||||
.DA #2,#1,#SYS.StrToUL
|
.DA #2,#1,#SYS.StrToUL
|
||||||
* >PSTR "realpath"
|
>PSTR "realpath"
|
||||||
* .DA #2,#1,#0
|
.DA #2,#1,#SYS.RealPath
|
||||||
* >PSTR "expand"
|
>PSTR "expand"
|
||||||
* .DA #2,#1,#0
|
.DA #2,#1,#SYS.Expand
|
||||||
>PSTR "strlen"
|
>PSTR "strlen"
|
||||||
.DA #2,#1,#SYS.StrLen
|
.DA #2,#1,#SYS.StrLen
|
||||||
>PSTR "strcpy"
|
>PSTR "strcpy"
|
||||||
|
@ -1353,6 +1008,8 @@ CC.LIBC >PSTR "chtyp"
|
||||||
>PSTR "lrintf"
|
>PSTR "lrintf"
|
||||||
.DA #2,#2,#FPU.QINT
|
.DA #2,#2,#FPU.QINT
|
||||||
.HS 00
|
.HS 00
|
||||||
|
*--------------------------------------
|
||||||
|
.INB usr/src/bin/cc.s.pcc
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
|
@ -1387,6 +1044,9 @@ CC.hTags .BS 1
|
||||||
CC.hStack .BS 1
|
CC.hStack .BS 1
|
||||||
|
|
||||||
CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals
|
CC.hScopes .BS 1+SCOPE.MAX 1 Global+ MAX locals
|
||||||
|
|
||||||
|
CC.CPSID .BS 2 AA
|
||||||
|
CC.CPSPFX .BS 5 X_id\0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CC.hSymBuf .BS 1
|
CC.hSymBuf .BS 1
|
||||||
CC.SymID .BS 2
|
CC.SymID .BS 2
|
||||||
|
|
|
@ -554,6 +554,7 @@ Ctrl.FS jsr BUF.GetLine
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
Ctrl.V jsr BUF.InsertClipboard
|
Ctrl.V jsr BUF.InsertClipboard
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
||||||
jsr SCRN.UnSaved
|
jsr SCRN.UnSaved
|
||||||
jmp SCRN.UpdateMainAndStatus
|
jmp SCRN.UpdateMainAndStatus
|
||||||
|
|
||||||
|
@ -573,7 +574,9 @@ Ctrl.W jsr BUF.ComputeCOffset Y=line len
|
||||||
clc
|
clc
|
||||||
lda (BufPtr),y
|
lda (BufPtr),y
|
||||||
beq .1 last line \0 ending
|
beq .1 last line \0 ending
|
||||||
|
|
||||||
sec delete CR
|
sec delete CR
|
||||||
|
|
||||||
.1 tya
|
.1 tya
|
||||||
|
|
||||||
adc BUF.LOffset
|
adc BUF.LOffset
|
||||||
|
@ -592,8 +595,10 @@ Ctrl.X jsr BUF.SelToClipboard
|
||||||
|
|
||||||
Ctrl.D jsr BUF.DelSel
|
Ctrl.D jsr BUF.DelSel
|
||||||
bcs Ctrl.D.8
|
bcs Ctrl.D.8
|
||||||
|
|
||||||
jsr BUF.ResetSel
|
jsr BUF.ResetSel
|
||||||
jsr SCRN.CursorAdjust
|
jsr SCRN.CursorAdjust
|
||||||
|
jsr SCRN.UpdateViewPort
|
||||||
jsr SCRN.UnSaved will update TopBar
|
jsr SCRN.UnSaved will update TopBar
|
||||||
jmp SCRN.UpdateMainAndStatus
|
jmp SCRN.UpdateMainAndStatus
|
||||||
|
|
||||||
|
@ -605,6 +610,7 @@ Ctrl.Z jsr BUF.ComputeCOffset
|
||||||
lda BUF.COffset
|
lda BUF.COffset
|
||||||
eor FileLen
|
eor FileLen
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
lda BUF.COffset+1
|
lda BUF.COffset+1
|
||||||
eor FileLen+1
|
eor FileLen+1
|
||||||
beq Ctrl.D.8
|
beq Ctrl.D.8
|
||||||
|
|
|
@ -474,13 +474,20 @@ SCRN.ResetStatusBar
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SCRN.CursorAdjust
|
SCRN.CursorAdjust
|
||||||
.1 jsr BUF.ComputeCOffset
|
.1 jsr BUF.ComputeCOffset
|
||||||
bcc .8
|
bcc .2 Y = linelen
|
||||||
>DECW.G FileY
|
|
||||||
>STZ.G FileX
|
|
||||||
|
|
||||||
|
>DECW.G FileY
|
||||||
|
* >STZ.G FileX
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.8 rts
|
.2 tya
|
||||||
|
>CMP.G FileX
|
||||||
|
bcs .8
|
||||||
|
|
||||||
|
>STA.G FileX
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SCRN.GotoCurXCurY
|
SCRN.GotoCurXCurY
|
||||||
ldy #CurX
|
ldy #CurX
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
NEW
|
NEW
|
||||||
AUTO 3,1
|
AUTO 3,1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
IO.D2.SeekTimeR .EQ 42 LIBBLKDEV Recalibration
|
IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration
|
||||||
IO.D2.SeekTimeF .EQ 56 LIBBLKDEV Track Formatter
|
IO.D2.SeekTimeF .EQ 75 LIBBLKDEV Track Formatter
|
||||||
IO.D2.SeekTimeB .EQ 56 LIBBLKDEV Boot Block
|
IO.D2.SeekTimeB .EQ 52 LIBBLKDEV Boot Block
|
||||||
IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial
|
IO.D2.SeekTimeP .EQ 32 ProDOS.FX initial
|
||||||
IO.D2.SeekTimeI .EQ 14 ProDOS.FX increment -> until > 128
|
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
IO.D2.Ph0Off .EQ $C080
|
IO.D2.Ph0Off .EQ $C080
|
||||||
IO.D2.Ph0On .EQ $C081
|
IO.D2.Ph0On .EQ $C081
|
||||||
|
|
|
@ -16,7 +16,7 @@ NEW
|
||||||
#define SEEK_END 2
|
#define SEEK_END 2
|
||||||
|
|
||||||
short int fopen(const char*,short int,short int,int);
|
short int fopen(const char*,short int,short int,int);
|
||||||
int fastcall fclose(short int);
|
short int fastcall fclose(short int);
|
||||||
int fread(short int,void*,int);
|
int fread(short int,void*,int);
|
||||||
int fwrite(short int,const void*,int);
|
int fwrite(short int,const void*,int);
|
||||||
|
|
||||||
|
|
|
@ -30,19 +30,19 @@ D2.Recalibrate >PULLB D2.DrvSlt
|
||||||
lda #IO.D2.SeekTimeR
|
lda #IO.D2.SeekTimeR
|
||||||
jsr D2.Wait100usecA
|
jsr D2.Wait100usecA
|
||||||
|
|
||||||
lda #168 41 x 4 Qtracks
|
lda #160 40 x 4 Qtracks
|
||||||
|
|
||||||
|
php
|
||||||
|
sei
|
||||||
|
|
||||||
.1 dec
|
.1 dec
|
||||||
dec
|
dec
|
||||||
|
|
||||||
pha
|
pha
|
||||||
|
|
||||||
and #6
|
|
||||||
ora D2.Slotn0
|
|
||||||
phy
|
phy
|
||||||
plx
|
plx
|
||||||
tay
|
jsr D2.SeekPhOnY
|
||||||
lda IO.D2.Ph0On,y
|
|
||||||
|
|
||||||
lda #IO.D2.SeekTimeR
|
lda #IO.D2.SeekTimeR
|
||||||
jsr D2.Wait100usecA
|
jsr D2.Wait100usecA
|
||||||
|
@ -59,9 +59,12 @@ D2.Recalibrate >PULLB D2.DrvSlt
|
||||||
|
|
||||||
lda IO.D2.Ph0Off,y
|
lda IO.D2.Ph0Off,y
|
||||||
|
|
||||||
jsr D2.Wait25600usec
|
plp
|
||||||
|
|
||||||
|
* clc
|
||||||
|
|
||||||
|
jmp D2.Wait25600usec
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
|
@ -105,7 +108,7 @@ D2.MoveHead >PULLB D2.TargetQTrack
|
||||||
|
|
||||||
D2.MoveHead.SEI lda D2.CurrentQTrack
|
D2.MoveHead.SEI lda D2.CurrentQTrack
|
||||||
|
|
||||||
bit #1
|
bit #1 A = Current QT
|
||||||
beq .2 we are on 0/4 or 2/4 track
|
beq .2 we are on 0/4 or 2/4 track
|
||||||
|
|
||||||
pha
|
pha
|
||||||
|
@ -128,7 +131,7 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
|
||||||
|
|
||||||
.2 jsr D2.SeekPhOnY move out: Y = Ph(N)
|
.2 jsr D2.SeekPhOnY move out: Y = Ph(N)
|
||||||
|
|
||||||
bra .9 no wait
|
bra .9 Ph ON to go to 0/4 or 2/4, no wait
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.3 bcs .4 if CS, C > T, must move out
|
.3 bcs .4 if CS, C > T, must move out
|
||||||
|
|
||||||
|
@ -156,6 +159,7 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
|
||||||
.6 jsr D2.SeekPhOnY now X and Y on
|
.6 jsr D2.SeekPhOnY now X and Y on
|
||||||
|
|
||||||
.8 lda #IO.D2.SeekTimeF
|
.8 lda #IO.D2.SeekTimeF
|
||||||
|
|
||||||
jsr D2.Wait100usecA ...wait...
|
jsr D2.Wait100usecA ...wait...
|
||||||
|
|
||||||
.9 lda D2.CurrentQTrack
|
.9 lda D2.CurrentQTrack
|
||||||
|
@ -166,13 +170,15 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
|
||||||
|
|
||||||
jsr D2.Wait25600usec
|
jsr D2.Wait25600usec
|
||||||
|
|
||||||
bcc .10
|
lda IO.D2.Ph0Off,y
|
||||||
|
|
||||||
lda IO.D2.Ph0Off,x
|
bcc .10
|
||||||
|
|
||||||
clc
|
clc
|
||||||
|
|
||||||
.10 lda IO.D2.Ph0Off,y
|
lda IO.D2.Ph0Off,x
|
||||||
|
|
||||||
|
.10 jsr D2.Wait25600usec
|
||||||
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -444,7 +450,7 @@ D2.Wait25600usec
|
||||||
|
|
||||||
D2.Wait100usecA phx
|
D2.Wait100usecA phx
|
||||||
|
|
||||||
.1 ldx #20 (2)
|
.1 ldx #19 (2)
|
||||||
|
|
||||||
.2 dex (2)
|
.2 dex (2)
|
||||||
bne .2 (3)
|
bne .2 (3)
|
||||||
|
|
|
@ -207,7 +207,7 @@ XRW.SectorIO bit XRW.bWrite
|
||||||
|
|
||||||
.1 stz XRW.RetryCnt
|
.1 stz XRW.RetryCnt
|
||||||
|
|
||||||
.2 jsr XRW.ReadAddr
|
.2 jsr XRW.ReadAddr (..14)
|
||||||
bcs .3 (2)
|
bcs .3 (2)
|
||||||
|
|
||||||
lda XRW.AddrField.S (4)
|
lda XRW.AddrField.S (4)
|
||||||
|
@ -390,25 +390,26 @@ XRW.TestWP ldx A2L
|
||||||
* writes data from nbuf1 and buf. first nbuf2, high to low then direct
|
* writes data from nbuf1 and buf. first nbuf2, high to low then direct
|
||||||
* from (buf), low to high. assumes 1 usec cycle time. self modified code !!
|
* from (buf), low to high. assumes 1 usec cycle time. self modified code !!
|
||||||
*
|
*
|
||||||
* on entry: x = slotnum times 16
|
* on entry: x = slotnum times 16 (35us since read $DE)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.LIST ON
|
.LIST ON
|
||||||
XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE
|
XRW.Write lda IO.D2.ReadProt,x (4) PREWRITE MODE
|
||||||
.LIST OFF
|
.LIST OFF
|
||||||
bit IO.D2.ReadMode,x (4)
|
lda IO.D2.ReadMode,x (4)
|
||||||
|
|
||||||
|
jsr XRW.Write.RTS (12)
|
||||||
|
|
||||||
|
nop (2)
|
||||||
|
|
||||||
lda #$FF (2)
|
lda #$FF (2)
|
||||||
|
|
||||||
nop (2)
|
|
||||||
nop (2)
|
|
||||||
|
|
||||||
sta IO.D2.WriteMode,x (5) goto write mode
|
sta IO.D2.WriteMode,x (5) goto write mode
|
||||||
ora IO.D2.WShift,x (4)
|
ora IO.D2.WShift,x (4)
|
||||||
|
|
||||||
ldy nbuf2 (4)
|
ldy nbuf2 (4)
|
||||||
sty pcl (3)
|
sty pcl (3)
|
||||||
|
|
||||||
ldy #5 (2)
|
ldy #6 (2)
|
||||||
nop (2)
|
nop (2)
|
||||||
|
|
||||||
.1 pha (3) exact timing.
|
.1 pha (3) exact timing.
|
||||||
|
@ -535,15 +536,12 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
|
||||||
bpl .1 (3) if not.
|
bpl .1 (3) if not.
|
||||||
|
|
||||||
bmi .2 (3)
|
bmi .2 (3)
|
||||||
|
|
||||||
.2 nop (2)
|
.2 nop (2)
|
||||||
|
|
||||||
tya (2) Y = $FF from DEY BMI
|
tya (2) Y = $FF from DEY BMI
|
||||||
jsr wnibl (11..10) write turn off byte.
|
jsr wnibl (11..10) write turn off byte.
|
||||||
|
|
||||||
* jsr XRW.Write.RTS (12)
|
|
||||||
* jsr XRW.Write.RTS (12)
|
|
||||||
* nop (2)
|
|
||||||
|
|
||||||
XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode
|
XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode
|
||||||
lda IO.D2.WShift,x (4) to read mode.
|
lda IO.D2.WShift,x (4) to read mode.
|
||||||
|
|
||||||
|
@ -571,7 +569,7 @@ XRW.Wait100usec lda #1
|
||||||
XRW.Wait100usecA
|
XRW.Wait100usecA
|
||||||
phx
|
phx
|
||||||
|
|
||||||
.1 ldx #20 (2)
|
.1 ldx #17 (2)
|
||||||
|
|
||||||
.2 dex (2)
|
.2 dex (2)
|
||||||
bne .2 (3)
|
bne .2 (3)
|
||||||
|
@ -663,14 +661,13 @@ XRW.ReadAddr ldy #$FC
|
||||||
tay if final checksum non-zero,
|
tay if final checksum non-zero,
|
||||||
bne .99 (2) then error.
|
bne .99 (2) then error.
|
||||||
|
|
||||||
clc (2)
|
|
||||||
|
|
||||||
.9 lda IO.D2.RData,x (4)
|
.9 lda IO.D2.RData,x (4)
|
||||||
bpl .9 (2)
|
bpl .9 (2)
|
||||||
|
|
||||||
eor #$DE (2)
|
eor #$DE (2)
|
||||||
bne .99 (2)
|
bne .99 (2)
|
||||||
|
|
||||||
|
clc (2)
|
||||||
rts (6)
|
rts (6)
|
||||||
|
|
||||||
.99 sec
|
.99 sec
|
||||||
|
@ -765,9 +762,9 @@ XRW.Recalibrate sec
|
||||||
|
|
||||||
ldx XRW.UnitIndex
|
ldx XRW.UnitIndex
|
||||||
|
|
||||||
ldy #41 from 41... (4/4)
|
ldy #40 from 40... (4/4)
|
||||||
lda #0 ....to 0
|
lda #0 ....to 0
|
||||||
sta XRW.D2VolNum-1,x reset volnum for seeking 41 4/4 tracks
|
sta XRW.D2VolNum-1,x reset volnum for seeking 40->0 4/4 tracks
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
|
XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
|
||||||
|
|
||||||
|
@ -802,7 +799,7 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
|
||||||
|
|
||||||
.2 jsr XRW.SeekPhOnY move out: Y = Ph(N)
|
.2 jsr XRW.SeekPhOnY move out: Y = Ph(N)
|
||||||
|
|
||||||
bra .9 no wait
|
bra .9 Ph ON to go to 0/4 or 2/4, no wait
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.3 bcs .4 if CS, C > T, must move out
|
.3 bcs .4 if CS, C > T, must move out
|
||||||
|
|
||||||
|
@ -829,7 +826,8 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
|
||||||
|
|
||||||
.6 jsr XRW.SeekPhOnY now X and Y on
|
.6 jsr XRW.SeekPhOnY now X and Y on
|
||||||
|
|
||||||
.8 lda #IO.D2.SeekTimeF XRW.SeekTime
|
.8 lda XRW.SeekTime
|
||||||
|
|
||||||
jsr XRW.Wait100usecA ...wait...
|
jsr XRW.Wait100usecA ...wait...
|
||||||
|
|
||||||
.9 lda XRW.CurrentQTrack
|
.9 lda XRW.CurrentQTrack
|
||||||
|
@ -840,15 +838,15 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
|
||||||
|
|
||||||
jsr XRW.Wait25600usec
|
jsr XRW.Wait25600usec
|
||||||
|
|
||||||
bcc .10
|
lda IO.D2.Ph0Off,y
|
||||||
|
|
||||||
lda IO.D2.Ph0Off,x
|
bcc .10
|
||||||
|
|
||||||
clc Exit wit CC (recalibrate)
|
clc Exit wit CC (recalibrate)
|
||||||
|
|
||||||
.10 lda IO.D2.Ph0Off,y
|
lda IO.D2.Ph0Off,x
|
||||||
|
|
||||||
rts
|
.10 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
XRW.SeekPhOnY and #6
|
XRW.SeekPhOnY and #6
|
||||||
ora A2L
|
ora A2L
|
||||||
|
|
|
@ -262,14 +262,14 @@ BB.FX2.SeekReadD2
|
||||||
cmp BB.TargetQTrack
|
cmp BB.TargetQTrack
|
||||||
beq BB.FX2.ReadSectD2
|
beq BB.FX2.ReadSectD2
|
||||||
|
|
||||||
bit #1
|
bit #1 A = Current QT
|
||||||
beq .2 we are on 0/4 or 2/4 track
|
beq .2 we are on 0/4 or 2/4 track
|
||||||
|
|
||||||
pha
|
pha
|
||||||
|
|
||||||
bcc .1 if CC, C < T, must move in
|
bcc .1 if CC, C < T, must move in
|
||||||
|
|
||||||
inc
|
inc move out: X = Ph(N+1)
|
||||||
|
|
||||||
.1 jsr BB.FX2.SeekPhOnY move in : X = Ph(N)
|
.1 jsr BB.FX2.SeekPhOnY move in : X = Ph(N)
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ BB.FX2.SeekReadD2
|
||||||
|
|
||||||
.2 jsr BB.FX2.SeekPhOnY move out: Y = Ph(N)
|
.2 jsr BB.FX2.SeekPhOnY move out: Y = Ph(N)
|
||||||
|
|
||||||
bra .9 Ph ON to go to 0/4 or 2/4, then wait
|
bra .9 Ph ON to go to 0/4 or 2/4, no wait
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.3 bcs .4 if CS, C > T, must move out
|
.3 bcs .4 if CS, C > T, must move out
|
||||||
|
|
||||||
|
@ -312,6 +312,7 @@ BB.FX2.SeekReadD2
|
||||||
.6 jsr BB.FX2.SeekPhOnY now X and Y on
|
.6 jsr BB.FX2.SeekPhOnY now X and Y on
|
||||||
|
|
||||||
.8 lda #IO.D2.SeekTimeB
|
.8 lda #IO.D2.SeekTimeB
|
||||||
|
|
||||||
jsr BB.Wait100usecA ...wait...
|
jsr BB.Wait100usecA ...wait...
|
||||||
|
|
||||||
.9 lda BB.CurrentQTrack
|
.9 lda BB.CurrentQTrack
|
||||||
|
@ -323,11 +324,15 @@ BB.FX2.SeekReadD2
|
||||||
lda #0
|
lda #0
|
||||||
jsr BB.Wait100usecA
|
jsr BB.Wait100usecA
|
||||||
|
|
||||||
|
lda IO.D2.Ph0Off,y
|
||||||
|
|
||||||
bcc .10
|
bcc .10
|
||||||
|
|
||||||
|
clc
|
||||||
|
|
||||||
lda IO.D2.Ph0Off,x
|
lda IO.D2.Ph0Off,x
|
||||||
|
|
||||||
.10 lda IO.D2.Ph0Off,y
|
.10
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BB.FX2.ReadSectD2
|
BB.FX2.ReadSectD2
|
||||||
ldx ROM.D2.Slotn0
|
ldx ROM.D2.Slotn0
|
||||||
|
@ -455,7 +460,7 @@ goseek jmp BB.FX2.SeekReadD2
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
BB.Wait100usecA phx (3)
|
BB.Wait100usecA phx (3)
|
||||||
|
|
||||||
.1 ldx #20 (2)
|
.1 ldx #19 (2)
|
||||||
|
|
||||||
.2 dex (2)
|
.2 dex (2)
|
||||||
bne .2 (3)
|
bne .2 (3)
|
||||||
|
|
|
@ -234,6 +234,7 @@ K.FGetS ldy #3
|
||||||
|
|
||||||
inc ZPPtr1
|
inc ZPPtr1
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
inc ZPPtr1+1
|
inc ZPPtr1+1
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
|
@ -262,6 +263,7 @@ K.FGetS ldy #3
|
||||||
|
|
||||||
.8 lda #0
|
.8 lda #0
|
||||||
sta (ZPPtr2) terminate string
|
sta (ZPPtr2) terminate string
|
||||||
|
tay return NULL (TODO: return s)
|
||||||
clc
|
clc
|
||||||
.9 >RET 5
|
.9 >RET 5
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
|
@ -534,15 +536,18 @@ K.FSeek ldy #5
|
||||||
jsr PFT.CheckNodeY
|
jsr PFT.CheckNodeY
|
||||||
bcc .11
|
bcc .11
|
||||||
|
|
||||||
>RET 5
|
>RET 6
|
||||||
|
|
||||||
.11 lda (pFD)
|
.11 >PULLA whence
|
||||||
bne STDIO.IOERR
|
|
||||||
|
|
||||||
>PULLA whence
|
|
||||||
tax
|
tax
|
||||||
|
|
||||||
>PULLL ACC32
|
>PULLL ACC32 offset
|
||||||
|
|
||||||
|
inc pStack discard hFile
|
||||||
|
|
||||||
|
lda (pFD)
|
||||||
|
bne STDIO.IOERR
|
||||||
|
|
||||||
cpx #SEEK.END
|
cpx #SEEK.END
|
||||||
beq .30
|
beq .30
|
||||||
|
|
||||||
|
@ -582,10 +587,13 @@ K.FSeek ldy #5
|
||||||
|
|
||||||
.82 >MLICALL MLISETMARK
|
.82 >MLICALL MLISETMARK
|
||||||
bcc .9
|
bcc .9
|
||||||
|
|
||||||
cmp #MLI.E.BEYEOF
|
cmp #MLI.E.BEYEOF
|
||||||
bne .9
|
bne .9
|
||||||
|
|
||||||
>MLICALL MLISETEOF
|
>MLICALL MLISETEOF
|
||||||
bcc .82
|
bcc .82
|
||||||
|
|
||||||
.9 rts
|
.9 rts
|
||||||
|
|
||||||
.98 lda #E.BADARG
|
.98 lda #E.BADARG
|
||||||
|
|
Loading…
Reference in New Issue