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