Fresh MEDIAs with QTrack seek mod

This commit is contained in:
burniouf 2022-06-12 22:42:22 +02:00
parent aed1c7fc35
commit a06fc41072
25 changed files with 1054 additions and 706 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -58,23 +58,29 @@ BSX.MoveHead sta BSX.TargetQTrack
lda BSX.CurrentQTrack lda BSX.CurrentQTrack
bit #1 bit #1
bne .1 beq .2 we are on 0/4 or 2/4 track
jsr BSX.SeekPhOnY we are on 0/4 or 2/4 track pha
bra .9 no wait, next operation will be phy/plx/Ph0On,y
.1 cmp BSX.TargetQTrack we are on 1/4 or 3/4 cmp BSX.TargetQTrack we are on 1/4 or 3/4 track
bcs .2 if CS, C > T, must move out bcc .1 if CC, C < T, must move in
inc CC: C < T, ON next PH inc CC: C < T, ON next PH
.HS B0 BCS .1 and #6 move in : X = Ph(N)
ora BSX.Slotn0
tax
lda IO.D2.Ph0On,x
.2 dec CS: C > T, ON prev PH pla
sta BSX.CurrentQTrack bcs .2 if CS, C > T, must move out
bra .6 Ph ON to go to 0/4 or 2/4, then wait inc move in : Y = Ph(N+1)
.2 jsr BSX.SeekPhOnY move out: Y = Ph(N)
bra .9 no wait
*-------------------------------------- *--------------------------------------
.3 bcs .4 if CS, C > T, must move out .3 bcs .4 if CS, C > T, must move out
@ -113,12 +119,13 @@ BSX.MoveHead sta BSX.TargetQTrack
jsr BSX.Wait25600usec jsr BSX.Wait25600usec
lda IO.D2.Ph0Off,y bcc .10
bcc .90
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
.90 rts .10 lda IO.D2.Ph0Off,y
rts
*-------------------------------------- *--------------------------------------
BSX.SeekPhOnY and #6 BSX.SeekPhOnY and #6
ora BSX.Slotn0 ora BSX.Slotn0

View File

@ -1,6 +1,25 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF *--------------------------------------
CODE.Init stz ZPCCConst
stz ZPCCConst+1
>LDYAI PCC.FH.CS
>STYA ZPCCCode
>LDYAI 20 char *ARGV[10]
>STYA ZPCCData
clc
.9 rts
*--------------------------------------
CODE.Quit >LDA.G CC.hOutFile
beq .8
>SYSCALL FClose
.8 clc
rts
*-------------------------------------- *--------------------------------------
CODE.Debug ldx #PCC.DEBUG.L CODE.Debug ldx #PCC.DEBUG.L
ldy #0 ldy #0
@ -197,6 +216,37 @@ CODE.PushFromPtr
rts rts
*-------------------------------------- *--------------------------------------
CODE.PushConstP
lda #$A9 LDA #imm
jsr CODE.EmitByte
bcs .9
lda ZPCCConst
jsr CODE.EmitByte
bcs .9
lda #$A2 LDX #imm
jsr CODE.EmitByte
bcs .9
lda ZPCCConst+1
jsr CODE.EmitByte
bcs .9
ldx #PCC.PushConstPAX.L
ldy #0
.1 lda PCC.PushConstPAX,y
jsr CODE.EmitByte
bcs .9
iny
dex
bne .1
clc
.9 rts
*--------------------------------------
CODE.PUSHI pha CODE.PUSHI pha
lda #$A9 LDA #imm lda #$A9 LDA #imm
jsr CODE.EmitByte jsr CODE.EmitByte
@ -266,6 +316,17 @@ CODE.TOABSYX jsr CODE.EmitByte A=opcode : JMP, JSR .....
tya tya
bra CODE.EmitByte bra CODE.EmitByte
*-------------------------------------- *--------------------------------------
CODE.SYSCALL lda #$A2 LDX #imm
jsr CODE.EmitByte
txa
jsr CODE.EmitByte
lda #$20 JSR
jsr CODE.EmitByte
lda #A2osX.SYSCALL
jsr CODE.EmitByte
lda /A2osX.SYSCALL
bra CODE.EmitByte
*--------------------------------------
CODE.FPUCALL lda #$A2 LDX #imm CODE.FPUCALL lda #$A2 LDX #imm
jsr CODE.EmitByte jsr CODE.EmitByte
txa txa
@ -277,22 +338,90 @@ CODE.FPUCALL lda #$A2 LDX #imm
lda /A2osX.FPUCALL lda /A2osX.FPUCALL
bra CODE.EmitByte bra CODE.EmitByte
*-------------------------------------- *--------------------------------------
CODE.SYSCALL lda #$A2 LDX #imm CODE.EmitByte clc if Pass 1...
jsr CODE.EmitByte bit bPass2
bpl .1
phx
phy
tax
>PUSHB.G CC.hOutFile
txa txa
jsr CODE.EmitByte >PUSHA
lda #$20 JSR >SYSCALL fputc
jsr CODE.EmitByte
lda #A2osX.SYSCALL ply
jsr CODE.EmitByte plx
lda /A2osX.SYSCALL
*-------------------------------------- .1 inc ZPCCCode
CODE.EmitByte sta (ZPCCCode)
inc ZPCCCode
bne .8 bne .8
inc ZPCCCode+1 inc ZPCCCode+1
.8 rts CC/CS from fputc
*--------------------------------------
CODE.EmitDATA clc
bit bPass2
bpl .1
phx
phy
tax
>PUSHB.G CC.hOutFile
txa
>PUSHA
>SYSCALL fputc
ply
plx
.1 inc ZPCCConst
bne .8
inc ZPCCConst+1
.8 rts CC/CS from fputc
*--------------------------------------
CODE.CSSelect clc
bit bPass2
bpl .8
>PUSHB.G CC.hOutFile
>PUSHWI 0
lda ZPCCCode+1
sec
sbc #$20
>PUSHA
lda ZPCCCode
>PUSHA
>PUSHBI SEEK.SET
>SYSCALL fseek
.8 rts
*--------------------------------------
CODE.DSSelect clc
bit bPass2
bpl .8
>PUSHB.G CC.hOutFile
>PUSHWI 0
* >PUSHWI 0
* >PUSHBI SEEK.END
lda ZPCCConst
clc
adc PCC.FH+PCC.FH.IDATA
tay
lda ZPCCConst+1
adc PCC.FH+PCC.FH.IDATA+1
sec
sbc #$20
>PUSHYA
>PUSHBI SEEK.SET
>SYSCALL fseek
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
MAN MAN

View File

@ -1,14 +1,13 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
CC.Init >SYSCALL SListNew CC.Init >SYSCALL SListNew
bcs .99 bcs .9
>STA.G CC.hDefines >STA.G CC.hDefines
>SYSCALL SListNew >SYSCALL SListNew
bcs .99 bcs .9
>STA.G CC.hTags >STA.G CC.hTags
@ -18,30 +17,6 @@ CC.Init >SYSCALL SListNew
>STA.G CC.hSymbols >STA.G CC.hSymbols
sty ScopePtr sty ScopePtr
>LDYAI 4096
>SYSCALL GetMem
.99 bcs .9
>STYA ZPCCCode
txa
>STA.G CC.hCode
>LDYAI 1024
>SYSCALL GetMem
bcs .9
>STYA ZPCCConst
txa
>STA.G CC.hConst
>LDYAI 1024
>SYSCALL GetMem
bcs .9
>STYA ZPCCData
txa
>STA.G CC.hData
>LDYAI 256 >LDYAI 256
>SYSCALL GetMem >SYSCALL GetMem
bcs .9 bcs .9
@ -78,25 +53,19 @@ CC.Quit ldy ScopePtr
>SYSCALL SListFree >SYSCALL SListFree
.4 lda hDefineBuf .4 >LDA.G CC.hDefineBuf
jsr .7
>LDA.G CC.hLookupSymBuf
jsr .7 jsr .7
.5 jsr CS.RUN.FClose .5 jsr CS.RUN.FClose
bne .5 bne .5
lda hSymBuf >LDA.G CC.hSymBuf
jsr .7 jsr .7
>LDA.G CC.hStack >LDA.G CC.hStack
jsr .7
>LDA.G CC.hData
jsr .7
>LDA.G CC.hConst
jsr .7
>LDA.G CC.hCode
.7 beq CC.Quit.RTS .7 beq CC.Quit.RTS
>SYSCALL FreeMem >SYSCALL FreeMem
@ -202,7 +171,7 @@ CC.CompileLine.1
jsr CC.SYM.Store jsr CC.SYM.Store
bcs .29 bcs .29
jmp CC.SYM.FreeBuf jmp CC.SYM.Free
*-------------------------------------- *--------------------------------------
* TODO: AOPS * TODO: AOPS
@ -225,7 +194,7 @@ CC.CompileLine.1
.28 jsr CC.SYM.Store .28 jsr CC.SYM.Store
bcs .9 bcs .9
jsr CC.SYM.FreeBuf jsr CC.SYM.Free
bra .68 bra .68
*-------------------------------------- *--------------------------------------
@ -256,7 +225,7 @@ CC.CompileLine.1
.69 bcs .99 .69 bcs .99
ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
bit #SYM.Q.FUNC bit #SYM.Q.FUNC
beq .60 beq .60
@ -265,7 +234,7 @@ CC.CompileLine.1
jsr CC.F.CallNoRetV jsr CC.F.CallNoRetV
bcs .9 bcs .9
jsr CC.SYM.FreeBufPop jsr CC.SYM.LookupFree
bra .8 bra .8
*-------------------------------------- *--------------------------------------
@ -285,7 +254,7 @@ CC.CompileLine.1
jsr CC.SYM.PopValue jsr CC.SYM.PopValue
bcs .9 bcs .9
jsr CC.SYM.FreeBufPop jsr CC.SYM.LookupFree
*-------------------------------------- *--------------------------------------
.68 jsr CC.GetCharNB .68 jsr CC.GetCharNB
cmp #';' cmp #';'
@ -383,8 +352,8 @@ CC.SListLookup >PUSHA hSList
>SYSCALL SListLookup >SYSCALL SListLookup
bcs .99 bcs .99
pha save KeyID * pha save KeyID
phy * phy
>PUSHA KeyID.HI >PUSHA KeyID.HI
tya tya
@ -398,9 +367,14 @@ CC.SListLookup >PUSHA hSList
>SYSCALL SListGetData >SYSCALL SListGetData
bcs .9 bcs .9
ply >STYA.G CC.LookupSymSize
pla X = hSymScope, Y,A = SymID
* clc txa
>STA.G CC.hLookupSymBuf
>SYSCALL GetMemPtr
* clc Y,A = SymPtr, X = hSymBuf
rts rts
.9 plx .9 plx
@ -410,88 +384,6 @@ CC.SListLookup >PUSHA hSList
.99 inc pStack .99 inc pStack
rts rts
*-------------------------------------- *--------------------------------------
* int main(int argc, char *argv[]) ;
*--------------------------------------
CC.MainExec lda #$EEEE
>PUSHA
>PUSHA int ret value
lda #0
>PUSHA
ldy #S.PS.ARGC
lda (pPS),y
>PUSHA push int ARGC (int)
>PUSHW ZPCCConst push int ARGV *char[]
stz ArgIndex
.1 lda ArgIndex
>SYSCALL ArgV
bcs .2
inc ArgIndex
pha
tya
sta (ZPCCConst)
pla
ldy #1
sta (ZPCCConst),y
lda ZPCCConst
* clc
adc #2
sta ZPCCConst
bcc .1
inc ZPCCConst+1
bra .1
.2 >PUSHB.G CC.hSymbols
>PUSHW L.CC.MAIN
>SYSCALL SListLookup
bcs .9
phy
pha
>PUSHB.G CC.hSymbols
pla
>PUSHA
pla
>PUSHA KeyID
>PUSHWZ allocate
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
bcs .9
stx hSymBuf
txa
>SYSCALL GetMemPtr
>STYA ZPSymBufPtr
ldy #SYM.Addr
lda (ZPSymBufPtr),y
sta ZPCCCode
iny
lda (ZPSymBufPtr),y
sta ZPCCCode+1
jsr .7
clc
.9 rts
.7 jmp (ZPCCCode)
*--------------------------------------
CC.ZPLookupPtrAddAp1 CC.ZPLookupPtrAddAp1
sec sec
adc ZPLookupPtr adc ZPLookupPtr
@ -501,19 +393,16 @@ CC.ZPLookupPtrAddAp1
inc ZPLookupPtr+1 inc ZPLookupPtr+1
.1 rts .1 rts
*-------------------------------------- *--------------------------------------
CC.GetDefine >LDA.G CC.hDefines CC.GetDefine >LDYA ZPLineBufPtr
jsr CC.SListLookup
bcs .9
stx hDefineBuf
>LDYA ZPLineBufPtr
>STYA.G CC.SaveDefine >STYA.G CC.SaveDefine
txa >LDA.G CC.hDefines
>SYSCALL GetMemPtr jsr CC.SListLookup
bcs .9
>STYA ZPLineBufPtr >STYA ZPLineBufPtr
txa
>STA.G CC.hDefineBuf
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -667,30 +556,29 @@ CC.GetNextChar inc ZPLineBufPtr
CC.GetChar lda (ZPLineBufPtr) CC.GetChar lda (ZPLineBufPtr)
bne .8 bne .8
lda hDefineBuf phy
>LDA.G CC.hDefineBuf
beq .1 beq .1
stz hDefineBuf
phx phx
phy
>SYSCALL FreeMem >SYSCALL FreeMem
>STZ.G CC.hDefineBuf
>LDYA.G CC.SaveDefine >LDYA.G CC.SaveDefine
>STYA ZPLineBufPtr >STYA ZPLineBufPtr
ply
plx plx
ply
bra CC.GetChar bra CC.GetChar
.1 lda #C.CR .1 ply
lda #C.CR
.8 clc .8 clc
rts rts
.9 lda #MLI.E.EOF
sec
.99 rts
*--------------------------------------- *---------------------------------------
CC.IsEndArg cmp #']' CC.IsEndArg cmp #']'
beq .8 beq .8

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
CC.DECL jsr CC.IsLetter CC.DECL jsr CC.IsLetter
bcs .80 bcs .80
@ -51,7 +50,7 @@ CC.DECL jsr CC.IsLetter
.29 bcs .99 .29 bcs .99
jsr CC.SYM.FreeBuf jsr CC.SYM.Free
clv clv
clc clc

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
CC.DIR jsr CC.GetNextCharNB CC.DIR jsr CC.GetNextCharNB
bcs .99 bcs .99
@ -20,17 +19,22 @@ CC.DIR jsr CC.GetNextCharNB
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CC.DIR.DEFINE jsr CC.CheckSpace CC.DIR.DEFINE clc
bit bPass2
bmi .8
jsr CC.CheckSpace
bcs .99 bcs .99
jsr CC.IsLetter jsr CC.IsLetter
bcs .90 bcs .90
ldx #SYM.SC.DEFINE
>LDA.G CC.hDefines >LDA.G CC.hDefines
jsr CC.SYM.NewKey jsr CC.SYM.NewKey
bcs .99 bcs .99
>STYA ZPSymID >STYA ZPPtr1 SymID
jsr CC.SkipX jsr CC.SkipX
@ -53,7 +57,7 @@ CC.DIR.DEFINE jsr CC.CheckSpace
phy phy
>PUSHB.G CC.hDefines >PUSHB.G CC.hDefines
>PUSHW ZPSymID >PUSHW ZPPtr1 SymID
>PUSHW ZPLineBufPtr >PUSHW ZPLineBufPtr
ply ply
@ -63,7 +67,7 @@ CC.DIR.DEFINE jsr CC.CheckSpace
>SYSCALL SListAddData >SYSCALL SListAddData
bcs .99 bcs .99
jmp CC.SkipLine .8 jmp CC.SkipLine
.90 lda #E.CSYN .90 lda #E.CSYN
sec sec
@ -100,27 +104,37 @@ CC.DIR.INCLUDE lda #0 >STZ.G PathBuf
beq .90 beq .90
cmp ArgIndex cmp ArgIndex
beq .8 beq .4
sta (pData),y sta (pData),y
iny iny
cpy #64 cpy #MLI.MAXPATH
bne .3 bne .3
.90 lda #E.CSYN .90 lda #E.CSYN
sec sec
.99 rts .99 rts
.8 lda #0 .4 phy
jsr CC.GetNextChar skip " or >
ply
lda #0
sta (pData),y terminate string sta (pData),y terminate string
jsr CC.GetNextChar skip " or > dey
lda (pData),y
>LDYA pData cmp #'h'
jsr CS.RUN.FOpen bne .5
bcs .99
bit bPass2
bpl .5
clc
rts rts
.5 >LDYA pData
jmp CS.RUN.FOpen
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE usr/src/bin/cc.s.dir SAVE usr/src/bin/cc.s.dir

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
CC.BOPS.bMUL CC.BOPS.bMUL
CC.BOPS.cMUL CC.BOPS.cMUL

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
* Input: * Input:
* ZPLineBufPtr, Y,A = Expected type/qual * ZPLineBufPtr, Y,A = Expected type/qual
@ -74,7 +73,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
bcs .22 bcs .22
ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
and #SYM.Q.FUNC and #SYM.Q.FUNC
bne .21 bne .21
@ -84,7 +83,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
jsr CC.EXP.Get Check T/Q & Get value on stack jsr CC.EXP.Get Check T/Q & Get value on stack
bcs .29 bcs .29
jsr CC.SYM.FreeBufPop jsr CC.SYM.LookupFree
bra .30 bra .30
*-------------------------------------- *--------------------------------------
@ -95,7 +94,7 @@ CC.EXP.Eval ldx ZPPtr2 local : expected T/Q
>STYA ZPPtr2 store real T/Q >STYA ZPPtr2 store real T/Q
jsr CC.SYM.FreeBufPop jsr CC.SYM.LookupFree
bra .30 bra .30
*-------------------------------------- *--------------------------------------
@ -195,11 +194,11 @@ CC.EXP.CheckGetSymType
ora ZPPtr2+1 ora ZPPtr2+1
bne .1 bne .1
lda (ZPSymBufPtr) lda (ZPLookupSymPtr)
sta ZPPtr2 sta ZPPtr2
ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
sta ZPPtr2+1 sta ZPPtr2+1
clc clc
@ -279,44 +278,46 @@ CC.EXP.BOPS cpy #SYM.T.UINT
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CC.AddContCharP ldy #0 CC.AddContCharP jsr CODE.PushConstP
bcs .99
jsr CODE.DSSelect
bcs .99
ldy #0
.1 jsr CC.GetNextChar .1 jsr CC.GetNextChar
bcs .9 bcs .9
* TODO : add support for \ to next line
cmp #C.CR cmp #C.CR
beq .9 beq .9
cmp #'"' cmp #'"'
beq .2 beq .2
sta (ZPCCConst),y jsr CODE.EmitData
bcs .99
iny iny
bra .1 bra .1
.2 lda #0 .2 lda #0
sta (ZPCCConst),y jsr CODE.EmitData
bcs .99
jsr CODE.CSSelect
bcs .99
lda ZPCCConst+1 Push PTR on stack jsr CC.GetNextChar Skip "
jsr CODE.PUSHI
lda ZPCCConst
jsr CODE.PUSHI
tya
sec
adc ZPCCConst
sta ZPCCConst
bcc .3
inc ZPCCConst+1
.3 jsr CC.GetNextChar Skip "
clc clc
rts rts
.9 lda #E.ESYN .9 lda #E.ESYN
sec sec
rts .99 rts
*-------------------------------------- *--------------------------------------
CC.EXP.GetNum cpy #SYM.T.FLOAT CC.EXP.GetNum cpy #SYM.T.FLOAT
bcc .1 bcc .1
@ -409,7 +410,7 @@ CC.EXP.Get >LDYA L.CC.AOPS
lda ZPPtr2 target T lda ZPPtr2 target T
beq .3 beq .3
lda (ZPSymBufPtr) SYM.T lda (ZPLookupSymPtr) SYM.T
cmp #SYM.T.VOID cmp #SYM.T.VOID
beq .2 beq .2
@ -419,14 +420,14 @@ CC.EXP.Get >LDYA L.CC.AOPS
.2 lda ZPPtr2+1 Q .2 lda ZPPtr2+1 Q
ldy #SYM.Q ldy #SYM.Q
cmp (ZPSymBufPtr),y cmp (ZPLookupSymPtr),y
bne .9 bne .9
.3 lda (ZPSymBufPtr) SYM.T .3 lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T sta ZPPtr2 T
pha pha
ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
sta ZPPtr2+1 Q sta ZPPtr2+1 Q
ply Y,A = T/Q ply Y,A = T/Q
@ -442,7 +443,7 @@ CC.EXP.Get >LDYA L.CC.AOPS
.8 jmp (J.CC.PREOPS,x) .8 jmp (J.CC.PREOPS,x)
*-------------------------------------- *--------------------------------------
CC.EXP.Array ldy #SYM.Q CC.EXP.Array ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
and #SYM.Q.AAARRAY and #SYM.Q.AAARRAY
beq .9 beq .9
@ -477,11 +478,11 @@ CC.EXP.Array ldy #SYM.Q
ldx #FPU.iAdd ldx #FPU.iAdd
jsr CODE.FPUCALL add to base address jsr CODE.FPUCALL add to base address
lda (ZPSymBufPtr) SYM.T lda (ZPLookupSymPtr) SYM.T
pha pha
ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
sec sec
sbc #SYM.Q.ARRAY sbc #SYM.Q.ARRAY
ply ply
@ -497,13 +498,13 @@ CC.EXP.Array ldy #SYM.Q
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CC.EXP.PushAddr ldy #SYM.Addr+1 CC.EXP.PushAddr ldy #SYM.Addr+1
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
bne .7 bne .7
* LOCAL * LOCAL
jsr CODE.PUSHpBASEp1 jsr CODE.PUSHpBASEp1
ldy #SYM.Addr ldy #SYM.Addr
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
eor #$FF eor #$FF
inc inc
jsr CODE.LDAI jsr CODE.LDAI
@ -515,7 +516,7 @@ CC.EXP.PushAddr ldy #SYM.Addr+1
.7 jsr CODE.PUSHI .7 jsr CODE.PUSHI
ldy #SYM.Addr ldy #SYM.Addr
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
jsr CODE.PUSHI jsr CODE.PUSHI
clc clc
@ -523,13 +524,13 @@ CC.EXP.PushAddr ldy #SYM.Addr+1
*-------------------------------------- *--------------------------------------
CC.EXP.PushDeref CC.EXP.PushDeref
ldy #SYM.Addr+1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
bne .7 bne .7
* LOCAL * LOCAL
jsr CODE.SETpBASEp1 jsr CODE.SETpBASEp1
ldy #SYM.Addr ldy #SYM.Addr
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
eor #$FF eor #$FF
inc inc
jsr CODE.LDAI jsr CODE.LDAI
@ -541,13 +542,14 @@ CC.EXP.PushDeref
rts rts
* DATASEG * DATASEG
.7 jsr CODE.LDAI .7 jsr CODE.LDAI
lda #$85 STA zp lda #$85 STA zp
jsr CODE.EmitByte jsr CODE.EmitByte
lda #ZPPtr1+1 lda #ZPPtr1+1
jsr CODE.EmitByte jsr CODE.EmitByte
ldy #SYM.Addr ldy #SYM.Addr
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
jsr CODE.LDAI jsr CODE.LDAI
lda #$85 STA zp lda #$85 STA zp
@ -558,22 +560,22 @@ CC.EXP.PushDeref
jsr CODE.Deref jsr CODE.Deref
clc clc
rts .9 rts
*-------------------------------------- *--------------------------------------
CC.EXP.GetRef ldy #SYM.Addr+1 CC.EXP.GetRef ldy #SYM.Addr+1
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
jsr CODE.PUSHI jsr CODE.PUSHI
ldy #SYM.Addr ldy #SYM.Addr
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
jsr CODE.PUSHI jsr CODE.PUSHI
lda (ZPSymBufPtr) SYM.T lda (ZPLookupSymPtr) SYM.T
sta ZPPtr2 T sta ZPPtr2 T
ldy #SYM.Q ldy #SYM.Q
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
clc clc
adc #SYM.Q.POINTER adc #SYM.Q.POINTER
bcs .9 more than *** bcs .9 more than ***

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
CC.F.Decl stz LocalPtr CC.F.Decl stz LocalPtr
@ -38,9 +37,6 @@ CC.F.Decl stz LocalPtr
jsr CC.IsLetter jsr CC.IsLetter
bcs .2 bcs .2
jsr CC.SYM.Push
bcs .99
>LDYA ZPPtr2 >LDYA ZPPtr2
ldx #SYM.SC.AUTO ldx #SYM.SC.AUTO
jsr CC.SYM.New jsr CC.SYM.New
@ -49,7 +45,7 @@ CC.F.Decl stz LocalPtr
jsr CC.SYM.Store Store f() Args in Local scope jsr CC.SYM.Store Store f() Args in Local scope
bcs .99 bcs .99
jsr CC.SYM.FreeBufPop jsr CC.SYM.Free
bcs .99 bcs .99
jsr CC.GetCharNB jsr CC.GetCharNB
@ -93,12 +89,6 @@ CC.F.Decl stz LocalPtr
.7 cmp #'{' .7 cmp #'{'
bne .9 bne .9
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
dey
ora (ZPSymBufPtr),y
bne .90 Already populated by LINK
>LDYA ZPCCCode f() Code starts HERE >LDYA ZPCCCode f() Code starts HERE
jsr CC.SYM.SetAddrYA jsr CC.SYM.SetAddrYA
@ -108,10 +98,6 @@ CC.F.Decl stz LocalPtr
clc Store f() Declaration / Start Definition clc Store f() Declaration / Start Definition
rts rts
.90 lda #E.REDEF
sec
rts
*-------------------------------------- *--------------------------------------
CC.F.DeclGetTQ lda (ZPLineBufPtr) CC.F.DeclGetTQ lda (ZPLineBufPtr)
cmp #'.' cmp #'.'
@ -167,6 +153,17 @@ CC.F.Def.END jsr CODE.Leave
clc clc
rts rts
*-------------------------------------- *--------------------------------------
CC.F.AddTQ pha
tya
ldy ZPSymSize
sta (ZPSymBufPtr),y
iny
pla
sta (ZPSymBufPtr),y
iny
sty ZPSymSize
rts
*--------------------------------------
* in : ZPSymPtr * in : ZPSymPtr
* Y,A = Expected T/Q * Y,A = Expected T/Q
*-------------------------------------- *--------------------------------------
@ -188,11 +185,10 @@ CC.F.CallRetV sec
ror ZPPtr1+1 bRetV ror ZPPtr1+1 bRetV
bpl .20 no return value on stack bpl .20 no return value on stack
ldy #SYM.Addr+1 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
cmp #2 beq .20 SYS/LIB/FPU call, no ret value space
bcc .20 SYS/FPU call, no ret value space
jsr CC.SYM.GetSymSizeOfInAXC jsr CC.SYM.GetSymSizeOfInAXC
jsr CODE.nAddLocal jsr CODE.nAddLocal
@ -354,7 +350,7 @@ CC.F.Call2 lda ZPPtr2+1
* Return Value : call & put result on stack if in Y,A * Return Value : call & put result on stack if in Y,A
.5 ldy #SYM.Addr+1 .5 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
cmp #2 cmp #2
bcs .8 not a SYS/FPU call...Ret value on stack bcs .8 not a SYS/FPU call...Ret value on stack
@ -377,13 +373,14 @@ CC.F.Call2 lda ZPPtr2+1
rts rts
*-------------------------------------- *--------------------------------------
CC.F.Call3 ldy #SYM.Addr+1 CC.F.Call3 ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
lda (ZPLookupSymPtr),y
beq .9 beq .9
pha pha
dey dey
lda (ZPSymBufPtr),y lda (ZPLookupSymPtr),y
tax tax
ply ply
@ -407,19 +404,23 @@ CC.F.Call3 ldy #SYM.Addr+1
clc clc
rts rts
.9 lda #E.FUNDEF .9 bit bPass2
sec bmi .99
lda #5 leave room for LDX #imm, JSR abs
clc
adc ZPCCConst
sta ZPCCConst
bcc .90
inc ZPCCConst+1
.90 clc
rts rts
*--------------------------------------
CC.F.AddTQ pha .99 lda #E.FUNDEF
tya sec
ldy ZPSymSize
sta (ZPSymBufPtr),y
iny
pla
sta (ZPSymBufPtr),y
iny
sty ZPSymSize
rts rts
*-------------------------------------- *--------------------------------------
CC.F.GetTQ ldy ZPSymSize CC.F.GetTQ ldy ZPSymSize

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
* Built in Keywords * Built in Keywords
*-------------------------------------- *--------------------------------------
@ -49,11 +48,11 @@ CC.KW.IF.END jsr CC.PopYA
>STYA ZPPtr1 set JMP false >STYA ZPPtr1 set JMP false
lda ZPCCCode lda ZPCCCode
sta (ZPPtr1) * sta (ZPPtr1)
ldy #1 ldy #1
lda ZPCCCode+1 lda ZPCCCode+1
sta (ZPPtr1),y * sta (ZPPtr1),y
* clc * clc
@ -85,11 +84,11 @@ CC.KW.WHILE.END jsr CC.PopYA Get JMP false location
jsr CODE.TOABSYX jsr CODE.TOABSYX
lda ZPCCCode lda ZPCCCode
sta (ZPPtr1) * sta (ZPPtr1)
ldy #1 ldy #1
lda ZPCCCode+1 lda ZPCCCode+1
sta (ZPPtr1),y * sta (ZPPtr1),y
clc clc
@ -106,37 +105,40 @@ CC.KW.DO.END
*-------------------------------------- *--------------------------------------
* for (e1;e2;e3) s; * for (e1;e2;e3) s;
* *
* e1; * { <- new scope : allows for(int i=1; ....)
* while (e2) * e1;
* { * loop:
* s; * while (e2)
* cont: * {
* e3; * s;
* cont:
* e3;
* }
* break:
* } * }
* break:
*-------------------------------------- *--------------------------------------
CC.KW.FOR jsr CC.GetCharNB CC.KW.FOR jsr CC.GetCharNB
bcs .19 bcs .9
cmp #'(' cmp #'('
bne .19 bne .9
jsr CC.GetNextCharNB jsr CC.GetNextCharNB
bcs .19 bcs .9
jsr CC.EXP.Eval00 get e1 jsr CC.EXP.Eval00 get e1
bcs .29 bcs .9
jsr CC.KW.StackDiscard jsr CC.KW.StackDiscard
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .19 bcs .9
cmp #';' cmp #';'
bne .19 bne .9
jsr CC.GetNextCharNB skip ';' jsr CC.GetNextCharNB skip ';'
.19 bcs .9 bcs .9
*-------------------------------------- *--------------------------------------
>LDYA ZPCCCode >LDYA ZPCCCode
>STYA ZPPtr2 save LOOP address >STYA ZPPtr2 save LOOP address
@ -187,11 +189,11 @@ CC.KW.FOR jsr CC.GetCharNB
jsr CODE.TOABSYX JMP e2 jsr CODE.TOABSYX JMP e2
lda ZPCCCode setup JSR s; lda ZPCCCode setup JSR s;
sta (ZPPtr3) * sta (ZPPtr3)
lda ZPCCCode+1 lda ZPCCCode+1
ldy #1 ldy #1
sta (ZPPtr3),y * sta (ZPPtr3),y
jmp CC.KW.BEGIN jmp CC.KW.BEGIN
@ -215,11 +217,11 @@ CC.KW.FOR.END lda #$60
>STYA ZPPtr1 get JMP break: location >STYA ZPPtr1 get JMP break: location
lda ZPCCCode lda ZPCCCode
sta (ZPPtr1) * sta (ZPPtr1)
ldy #1 ldy #1
lda ZPCCCode+1 lda ZPCCCode+1
sta (ZPPtr1),y * sta (ZPPtr1),y
clc clc
@ -227,7 +229,15 @@ CC.KW.FOR.END lda #$60
*-------------------------------------- *--------------------------------------
CC.KW.SWITCH CC.KW.SWITCH
CC.KW.CASE CC.KW.CASE
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.BREAK CC.KW.BREAK
lda #E.CSYN
sec
rts
*--------------------------------------
CC.KW.CONTINUE CC.KW.CONTINUE
lda #E.CSYN lda #E.CSYN
sec sec
@ -287,6 +297,7 @@ CC.KW.STRUCT >ENTER 4
jsr CC.GetCharNB jsr CC.GetCharNB
bcs .99 bcs .99
ldx #SYM.SC.TAG
>LDA.G CC.hTags >LDA.G CC.hTags
jsr CC.SYM.NewKey jsr CC.SYM.NewKey
bcs .99 bcs .99

173
BIN/CC.S.LINK.txt Normal file
View File

@ -0,0 +1,173 @@
NEW
AUTO 3,1
*--------------------------------------
CC.Link.RTS rts
CC.Link >LDYA L.MSG.LINKING
>SYSCALL Puts
>LDYAI 256
>SYSCALL GetMem
bcs CC.Link.RTS
>STYA ZPSymBufPtr
txa
>STA.G CC.hSymBuf
ldy #0
lda #0
.1 >STYA ZPPtr1 SymID
>PUSHB.G CC.hSymbols
>PUSHW ZPPtr1 SymID
>PUSHW pData
>SYSCALL SListGetByID
bcs .8
>STYA ZPPtr2 NextID
>PUSHB.G CC.hSymbols
>PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr
>PUSHWI $ffff All
>PUSHWZ from Start
>SYSCALL SListGetData
bcs .9
>STYA ZPSymSize
ldy #SYM.Addr+1
lda (ZPSymBufPtr),y
dey
ora (ZPSymBufPtr),y
bne .6
jsr CC.Link.LIBC
bcc .6
jsr CC.Link.Dump
lda #E.FUNDEF
sec
bra .9
.6 >LDA.G bTrace
bpl .7
jsr CC.Link.Dump
bcs .9
.7 >LDYA ZPPtr2
jmp .1
.8 clc
.9 php
pha
jsr CC.SYM.Free
pla
plp
rts
*--------------------------------------
* Input : pData = Symbol
*--------------------------------------
CC.Link.LIBC >LDYA L.CC.LIBC
>STYA ZPLookupPtr
ldy #$ff
.10 iny
lda (pData),y
bne .10
phy Symbol Len
ldx #0
.1 lda (ZPLookupPtr)
beq .9 Ending 0, not found....
pla
pha Get Back Len
cmp (ZPLookupPtr) Same Len ?
bne .4
tay
.2 lda (ZPLookupPtr),y
dey
cmp (pData),y
bne .4
tya
bne .2
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol
ldy #2 Skip LEN
lda (ZPLookupPtr),y
pha
dey
lda (ZPLookupPtr),y
ply
jsr CC.SYM.SetAddrYA
plx
>PUSHB.G CC.hSymbols
>PUSHW ZPPtr1 SymID
>PUSHW ZPSymBufPtr
>PUSHW ZPSymSize
>SYSCALL SListSetData
rts
.4 inx
inx
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\definition
bra .1
.9 plx
sec
rts
*--------------------------------------
CC.Link.Dump >PUSHW L.MSG.LINKING2
>PUSHW pData
>PUSHB (ZPSymBufPtr) SYM.T
ldy #1
>PUSHB (ZPSymBufPtr),y SYM.Q
iny
>PUSHB (ZPSymBufPtr),y SYM.SC
ldy #SYM.SizeOf+1
>PUSHB (ZPSymBufPtr),y
dey
>PUSHB (ZPSymBufPtr),y
ldy #SYM.Addr+1
>PUSHB (ZPSymBufPtr),y
dey
>PUSHB (ZPSymBufPtr),y
>PUSHBI 9
>SYSCALL PrintF
rts
*--------------------------------------
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.link
LOAD usr/src/bin/cc.s
ASM

View File

@ -1,59 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*--------------------------------------
CC.STMT jsr CC.SYM.Lookup var= or func() ?
bcs .80
ldy #SYM.Q
lda (ZPSymBufPtr),y
bit #SYM.Q.FUNC
bne .20
jsr CC.GetCharNB var = ?
bcs .90
* TODO: AOPS
cmp #'='
bne .90
jsr CC.GetNextChar Skip =
bcs .99
jsr CC.SYM.GetTypeInYA
jsr CC.EXP.Eval
bcs .99
jsr CC.SYM.PopValue
bcs .99
jsr CC.SYM.FreeBufPop
clv
clc
rts
.20 ldy #0 func( ... );
lda #0
jsr CC.F.CallNoRetV
bcs .9
jsr CC.SYM.FreeBufPop
clv
clc
rts
.80 bit #$60
clc
rts
.90 lda #E.CSYN
sec
.99 rts
*-------------------------------------- *--------------------------------------
* X = KW.ID * X = KW.ID
*-------------------------------------- *--------------------------------------
@ -88,7 +34,7 @@ CC.STMT.CPStmt.END
jsr CC.Pop Locals jsr CC.Pop Locals
sta LocalPtr sta LocalPtr
txa txa
bmi .5 bmi .5
@ -100,6 +46,8 @@ CC.STMT.CPStmt.END
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CC.CPS.New
*--------------------------------------
MAN MAN
SAVE usr/src/bin/cc.s.stmt SAVE usr/src/bin/cc.s.stmt
LOAD usr/src/bin/cc.s LOAD usr/src/bin/cc.s

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
* Input : ZPLineBufPtr, Y,A = T/Q, X = SC * Input : ZPLineBufPtr, Y,A = T/Q, X = SC
* Output : Y,A = VarID * Output : Y,A = VarID
@ -10,11 +9,10 @@ CC.SYM.New >STYA ZPPtr2 T/Q
ldy ScopePtr ldy ScopePtr
lda (pData),y lda (pData),y
sta hSymScope
jsr CC.SYM.NewKey jsr CC.SYM.NewKey
bcs .9 bcs .9
>STYA ZPSymID Y,A = KeyID >STYA.G CC.SymID Y,A = KeyID
stx ZPPtr3+1 X = KeyLen stx ZPPtr3+1 X = KeyLen
>LDYAI 256 >LDYAI 256
@ -22,22 +20,32 @@ CC.SYM.New >STYA ZPPtr2 T/Q
bcs .9 bcs .9
>STYA ZPSymBufPtr >STYA ZPSymBufPtr
stx hSymBuf txa
>STA.G CC.hSymBuf
>LDYA ZPPtr2 lda ZPPtr2
jsr CC.SYM.SetTypeYA sta (ZPSymBufPtr) #SYM.T
lda ZPPtr3 lda ZPPtr2+1
ldy #SYM.SC ldy #SYM.Q
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
lda #SYM.Def lda ZPPtr3
sta ZPSymSize iny #SYM.SC
sta (ZPSymBufPtr),y
iny
lda #0
.1 sta (ZPSymBufPtr),y
iny
cpy #SYM.Def
bne .1
sty ZPSymSize
stz ZPSymSize+1 stz ZPSymSize+1
ldx ZPPtr3+1 Key Len ldx ZPPtr3+1 Key Len
jsr CC.SYM.Link
jsr CC.SkipX jsr CC.SkipX
jsr CC.GetCharNB jsr CC.GetCharNB
@ -46,7 +54,7 @@ CC.SYM.New >STYA ZPPtr2 T/Q
cmp #'(' cmp #'('
bne CC.SYM.NewV bne CC.SYM.NewV
jmp CC.F.Decl jmp CC.F.Decl
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
@ -166,7 +174,7 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
ldy #SYM.Addr ldy #SYM.Addr
sta (ZPSymBufPtr),y sta (ZPSymBufPtr),y
jsr CC.SYM.GetSymSizeOfInAXC jsr CC.SYM.GetSymSizeOfInAXC
jsr CODE.nAddLocal jsr CODE.nAddLocal
@ -179,87 +187,55 @@ CC.SYM.SetAddrL jsr CC.SYM.GetSymSizeOfInAXC
*-------------------------------------- *--------------------------------------
CC.SYM.NewKey >PUSHA CC.SYM.NewKey >PUSHA
>PUSHW ZPLineBufPtr >PUSHW ZPLineBufPtr
>SYSCALL SListNewKey
* bcs .9
* clc Y,A = KeyID, X = KeyLen bit bPass2
bpl .1
.9 rts txa
*-------------------------------------- bne .1
* Input : ZPLineBufPtr, X = KeyLen
*--------------------------------------
CC.SYM.Link >LDYA L.CC.LIBC
>STYA ZPLookupPtr
phx >SYSCALL SListLookup
lda #0 * clc
ldy #SYM.Addr
sta (ZPSymBufPtr),y
iny
sta (ZPSymBufPtr),y
ldx #0
.1 lda (ZPLookupPtr)
beq .9 Ending 0, not found....
pla
pha Get Back Len
cmp (ZPLookupPtr) Same Len ?
bne .4
tay
.2 lda (ZPLookupPtr),y
dey
cmp (ZPLineBufPtr),y
bne .4
tya
bne .2
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol
ldy #2 Skip LEN
lda (ZPLookupPtr),y
pha
dey
lda (ZPLookupPtr),y
ply
jsr CC.SYM.SetAddrYA
plx
clc
rts rts
.4 inx .1 >SYSCALL SListNewKey
inx
lda (ZPLookupPtr) rts Y,A = KeyID, X = KeyLen
jsr CC.ZPLookupPtrAddAp1 Skip LEN\Symbol
lda (ZPLookupPtr)
jsr CC.ZPLookupPtrAddAp1 Skip LEN\definition
bra .1
.9 plx
sec
rts
*-------------------------------------- *--------------------------------------
CC.SYM.Store >PUSHB hSymScope CC.SYM.Store ldy ScopePtr
>PUSHW ZPSymID lda (pData),y
>PUSHA
>PUSHW.G CC.SymID
>PUSHW ZPSymBufPtr >PUSHW ZPSymBufPtr
>PUSHBI 0 >PUSHW ZPSymSize
>PUSHB ZPSymSize
>SYSCALL SListAddData bit bPass2
bpl .1
bit ScopenCnt
bmi .1
>SYSCALL SListSetData
rts
.1 >SYSCALL SListAddData
rts
*--------------------------------------
CC.SYM.Free >LDA.G CC.hSymBuf
>SYSCALL FreeMem
bcs .99
>STZ.G CC.hSymBuf
rts
.99 >DEBUG
rts rts
*-------------------------------------- *--------------------------------------
CC.SYM.NewScope ldy ScopePtr CC.SYM.NewScope ldy ScopePtr
cpy #CC.hSymbols+SCOPE.MAX-1 cpy #CC.hSymbols+SCOPE.MAX
bcs .9 bcs .9
>SYSCALL SListNew >SYSCALL SListNew
@ -288,12 +264,9 @@ CC.SYM.FreeScope
dec ScopePtr dec ScopePtr
inc ScopenCnt inc ScopenCnt
rts rts
*-------------------------------------- *--------------------------------------
CC.SYM.Lookup jsr CC.SYM.Push CC.SYM.Lookup >PUSHB ScopePtr
bcs .99
>PUSHB ScopePtr
.1 tay .1 tay
lda (pData),y lda (pData),y
@ -302,64 +275,35 @@ CC.SYM.Lookup jsr CC.SYM.Push
lda (pstack) lda (pstack)
cmp #CC.hSymbols cmp #CC.hSymbols
beq .9 CS beq .9
dec dec
sta (pstack) sta (pstack)
bra .1 bra .1
.9 jsr CC.SYM.Pop .9 inc pStack
inc pStack
lda #E.NOKEY lda #E.NOKEY
sec
rts rts
.8 stx hSymBuf .8 inc pStack
>PULLA >STYA ZPLookupSymPtr
tay
lda (pData),y
sta hSymScope
txa
>SYSCALL GetMemPtr
>STYA ZPSymBufPtr
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CC.SYM.Push ldx #7 CC.SYM.LookupFree
>LDA.G CC.hLookupSymBuf
.1 lda ZPSymID,x
jsr CC.Push
bcs .9
dex
bpl .1
.9 rts
*--------------------------------------
CC.SYM.FreeBuf lda hSymBuf
stz hSymBuf
>SYSCALL FreeMem >SYSCALL FreeMem
bcs .99
>STZ.G CC.hLookupSymBuf
rts rts
*--------------------------------------
CC.SYM.FreeBufPop
jsr CC.SYM.FreeBuf .99 >DEBUG
*-------------------------------------- rts
CC.SYM.Pop ldx #0
.1 jsr CC.Pop
bcs .9
sta ZPSymID,x
inx
cpx #8
bne .1
clc
.9 rts
*-------------------------------------- *--------------------------------------
* Y,A = value T/Q * Y,A = value T/Q
*-------------------------------------- *--------------------------------------
@ -525,7 +469,7 @@ CC.SYM.GetAddrInYA
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
pha pha
dey #SYM.Addr dey
lda (ZPSymBufPtr),y lda (ZPSymBufPtr),y
tay tay

View File

@ -1,6 +1,5 @@
NEW NEW
AUTO 3,1 AUTO 3,1
.LIST OFF
*-------------------------------------- *--------------------------------------
CC.TYPE.Decl >ENTER 2 CC.TYPE.Decl >ENTER 2
lda #0 lda #0

View File

@ -40,18 +40,34 @@ SYM.SC.AUTO .EQ 2
SYM.SC.REGISTER .EQ 4 SYM.SC.REGISTER .EQ 4
SYM.SC.EXTERN .EQ 6 SYM.SC.EXTERN .EQ 6
SYM.SC.TYPEDEF .EQ 8 SYM.SC.TYPEDEF .EQ 8
SYM.SC.DEFINE .EQ 10
SYM.SC.TAG .EQ 12
* *
SYM.SizeOf .EQ 4 SYM.SizeOf .EQ 4
SYM.Addr .EQ 6 SYM.Addr .EQ 6
* .EQ 8 SYM.Def .EQ 8
* *
SYM.Def .EQ 10 SYM .EQ 10
*--------------------------------------
CPS.ParentID .EQ 0
CPS.hSYM .EQ 2
*
CPS.Cont .EQ 4
CPS.Break .EQ 6
*
CPS .EQ 8
*-------------------------------------- *--------------------------------------
* Zero Page Segment, up to 32 bytes * Zero Page Segment, up to 32 bytes
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR ZPBIN .OR ZPBIN
ZS.START ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ArgIndex .BS 1
bPass2 .BS 1
ZPCCCode .BS 2 ZPCCCode .BS 2
ZPCCConst .BS 2 ZPCCConst .BS 2
ZPCCData .BS 2 ZPCCData .BS 2
@ -66,17 +82,12 @@ LocalPtr .BS 1
ScopePtr .BS 1 ScopePtr .BS 1
ScopenCnt .BS 1 ScopenCnt .BS 1
ZPSymID .BS 2 * .BS 1
hSymScope .BS 1 * .BS 1
hSymBuf .BS 1
ZPSymSize .BS 2 ZPSymSize .BS 2
ZPSymBufPtr .BS 2 ZPSymBufPtr .BS 2
ZPPtr1 .BS 2 ZPLookupSymPtr .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ArgIndex .BS 1
hDefineBuf .BS 1
ZS.END .ED ZS.END .ED
*-------------------------------------- *--------------------------------------
@ -104,10 +115,14 @@ CS.START cld
L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.COMPILING .DA MSG.COMPILING L.MSG.COMPILING .DA MSG.COMPILING
L.MSG.LINKING .DA MSG.LINKING
L.MSG.LINKING2 .DA MSG.LINKING2
L.MSG.GENERATING .DA MSG.GENERATING
L.MSG.DEBUG .DA MSG.DEBUG L.MSG.DEBUG .DA MSG.DEBUG
L.MSG.TRACE .DA MSG.TRACE L.MSG.TRACE .DA MSG.TRACE
L.MSG.RTSTK .DA MSG.RTSTK L.MSG.RTSTK .DA MSG.RTSTK
L.MSG.ERROR .DA MSG.ERROR L.MSG.ERROR .DA MSG.ERROR
L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.NOMAIN .DA MSG.NOMAIN L.MSG.NOMAIN .DA MSG.NOMAIN
L.ENV.INCLUDE .DA ENV.INCLUDE L.ENV.INCLUDE .DA ENV.INCLUDE
*-------------------------------------- *--------------------------------------
@ -207,6 +222,7 @@ J.CC.STYPES .DA CC.TYPE.SCHAR
*-------------------------------------- *--------------------------------------
L.CC.MAIN .DA CC.MAIN L.CC.MAIN .DA CC.MAIN
L.CC.LIBC .DA CC.LIBC L.CC.LIBC .DA CC.LIBC
L.PCC.FH .DA PCC.FH
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Called once at process creation * Called once at process creation
@ -243,21 +259,48 @@ CS.RUN >PUSHW L.MSG.GREETINGS
jsr CC.Init jsr CC.Init
bcs CS.INIT.RTS bcs CS.INIT.RTS
jsr CODE.Init
jsr CS.RUN.FOpen1st
bcs CS.INIT.RTS
*-------------------------------------- *--------------------------------------
CS.RUN.LOOP jsr CC.CompileFile CS.RUN.CLOOP jsr CC.CompileFile
cmp #MLI.E.EOF cmp #MLI.E.EOF
bne .9 bne .9
jsr CS.RUN.FClose jsr CS.RUN.FClose
bne CS.RUN.LOOP bne CS.RUN.CLOOP
*-------------------------------------- *--------------------------------------
jsr CC.MainExec jsr PrintSummary
bcc .8 bcs .99
>LDYA L.MSG.NOMAIN jsr CC.Link
>SYSCALL puts bcs .99
jsr CheckMain
bcs .99
dec bPass2
jsr CS.RUN.FCreate
bcs .99
jsr CODE.Init
bcs .99
jsr CS.RUN.FOpen1st
bcs .99
*--------------------------------------
.2 jsr CC.CompileFile
cmp #MLI.E.EOF
bne .9
jsr CS.RUN.FClose
bne .2
*--------------------------------------
.8 lda #0 Exit Code = Success .8 lda #0 Exit Code = Success
sec sec
rts rts
@ -266,13 +309,13 @@ CS.RUN.LOOP jsr CC.CompileFile
jsr PrintErrorMsg jsr PrintErrorMsg
pla pla
sec sec
rts .99 rts
*-------------------------------------- *--------------------------------------
CS.RUN.ARGS inc ArgIndex CS.RUN.ARGS inc ArgIndex
lda ArgIndex lda ArgIndex
>SYSCALL ArgV >SYSCALL ArgV
bcs .7 bcs .8
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)
@ -297,18 +340,24 @@ CS.RUN.ARGS inc ArgIndex
sta (pData),y sta (pData),y
bra CS.RUN.ARGS bra CS.RUN.ARGS
.4 >LDA.G hFilePtr .4 >LDA.G CC.InFileArg
cmp #hFilePtr bne .5
lda ArgIndex
>STA.G CC.InFileArg
bra CS.RUN.ARGS
.5 >LDA.G CC.OutFileArg
bne .90 bne .90
>LDYA ZPPtr1 lda ArgIndex
jsr CS.RUN.FOpen >STA.G CC.OutFileArg
bcc CS.RUN.ARGS bra CS.RUN.ARGS
rts .8 >LDA.G CC.InFileArg
beq .90
.7 >LDA.G hFilePtr >LDA.G CC.OutFileArg
cmp #hFilePtr
beq .90 beq .90
clc clc
@ -322,7 +371,22 @@ CS.RUN.ARGS inc ArgIndex
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.FOpen >PUSHYA CS.RUN.FOpen1st >LDA.G CC.InFileArg
>SYSCALL ArgV
CS.RUN.FOpen phy
pha
>PUSHW L.MSG.COMPILING
pla
pha
>PUSHYA
>PUSHBI 2
>SYSCALL PrintF
pla
ply
>PUSHYA
>PUSHBI O.RDONLY >PUSHBI O.RDONLY
>PUSHBI S.FI.T.TXT >PUSHBI S.FI.T.TXT
>PUSHWZ Aux type >PUSHWZ Aux type
@ -406,10 +470,36 @@ CS.RUN.FClose >LDA.G hFilePtr
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
CS.RUN.FCreate >LDA.G CC.OutFileArg
>SYSCALL ArgV
>STYA ZPPtr1
>PUSHW L.MSG.GENERATING
>PUSHW ZPPtr1
>PUSHBI 2
>SYSCALL PrintF
>PUSHW ZPPtr1
>PUSHBI O.WRONLY+O.CREATE
>PUSHBI S.FI.T.BIN
>PUSHWI $2000 Aux type
>SYSCALL FOpen
bcs .9
>STA.G CC.hOutFile
>PUSHA A = CC.hOutFile
>PUSHW L.PCC.FH
>PUSHWI PCC.FH.L
>SYSCALL FWrite
.9 rts
*--------------------------------------
CS.DOEVENT sec CS.DOEVENT sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT jsr CC.Quit CS.QUIT jsr CODE.Quit
jsr CC.Quit
>LDA.G hLineBuf >LDA.G hLineBuf
beq .8 beq .8
@ -458,7 +548,7 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG
>PUSHB LocalPtr >PUSHB LocalPtr
>PUSHW ZPCCStack >PUSHW ZPCCStack
>PUSHB CStackPtr >PUSHB CStackPtr
tay tay
beq .1 beq .1
@ -471,44 +561,17 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG
.1 >PUSHYA .1 >PUSHYA
>PUSHBI 14 lda ScopePtr
sec
sbc #CC.hSymbols
>PUSHA
>PUSHBI 15
>SYSCALL PrintF >SYSCALL PrintF
>DEBUGOA >DEBUG
rts rts
*-------------------------------------- *--------------------------------------
PrintRTStackTrace PrintErrorMsg >LDA.G CC.hDefineBuf
pha
phx
phy
>PUSHW L.MSG.RTSTK
>PUSHW pBase
>PUSHW ZPPtr1
ldy #1
>PUSHB (ZPPtr1),y
>PUSHB (ZPPtr1)
lda pStack
clc
adc #8
pha
lda pStack+1
adc #0
>PUSHA
pla
>PUSHA
>PUSHBI 8
>SYSCALL PrintF
ply
plx
pla
rts
*--------------------------------------
PrintErrorMsg lda hDefineBuf
beq .10 beq .10
>LDYA.G CC.SaveDefine >LDYA.G CC.SaveDefine
@ -551,6 +614,78 @@ PrintErrorMsg lda hDefineBuf
>PUSHBI 2 >PUSHBI 2
>SYSCALL FPrintF >SYSCALL FPrintF
rts rts
*--------------------------------------
PrintSummary lda ZPCCCode+1
sta PCC.FH+PCC.FH.IDATA+1
sec
sbc #$20
sta PCC.FH+PCC.FH.CSSIZE+1
lda ZPCCCode
sta PCC.FH+PCC.FH.CSSIZE
sta PCC.FH+PCC.FH.IDATA
>PUSHW L.MSG.SUMMARY
>PUSHW PCC.FH+PCC.FH.CSSIZE
>PUSHW ZPCCConst
lda ZPCCData+1
>PUSHA
sta PCC.FH+PCC.FH.DSSIZE+1
lda ZPCCData
>PUSHA
sta PCC.FH+PCC.FH.DSSIZE
>PUSHBI 6
>SYSCALL PrintF
rts
*--------------------------------------
CheckMain >PUSHB.G CC.hSymbols
>PUSHW L.CC.MAIN
>SYSCALL SListLookup
bcs .9
>STYA ZPPtr1 SymID
>PUSHB.G CC.hSymbols
>PUSHW ZPPtr1 SymID
>PUSHWZ allocate
>PUSHWI 65535 all
>PUSHWZ From Start
>SYSCALL SListGetData
.9 bcs .99
>STYA ZPPtr2
ldy #SYM.Addr
lda (ZPPtr2),y
iny
ora (ZPPtr2),y
beq .90
lda (ZPPtr2),y
sta PCC.FH+PCC.FH.MAIN+1
dey
lda (ZPPtr2),y
sta PCC.FH+PCC.FH.MAIN
txa
>SYSCALL FreeMem
rts
.90 txa
>SYSCALL FreeMem
.99 >LDYA L.MSG.NOMAIN
>SYSCALL puts
lda #E.CSYN
sec
rts
*-------------------------------------- *--------------------------------------
.INB usr/src/bin/cc.s.code .INB usr/src/bin/cc.s.code
.INB usr/src/bin/cc.s.core .INB usr/src/bin/cc.s.core
@ -562,65 +697,72 @@ PrintErrorMsg lda hDefineBuf
.INB usr/src/bin/cc.s.f .INB usr/src/bin/cc.s.f
.INB usr/src/bin/cc.s.exp .INB usr/src/bin/cc.s.exp
.INB usr/src/bin/cc.s.sym .INB usr/src/bin/cc.s.sym
.INB usr/src/bin/cc.s.link
.INB usr/src/bin/cc.s.exec .INB usr/src/bin/cc.s.exec
*-------------------------------------- *--------------------------------------
PCC.DEBUG CS.END
jsr PrintRTStackTrace *--------------------------------------
>DEBUG * Initialized DATA
*--------------------------------------
MSG.GREETINGS .AZ "\r\nA2osX C Compiler %d.%d\r\n\r\n"
MSG.USAGE .AS "Usage : CC <option> srcfile.c dstfile\r\n"
.AS " -D : Debug Mode\r\n"
.AS " -T : Trace On"
.AZ "\r\n"
MSG.COMPILING .AZ "*** Compiling file: %s\r\n"
MSG.LINKING .AZ "*** Linking..."
MSG.LINKING2 .AZ "*** %18s T=%h, Q=%b, SC=%h, SizeOf=%H, @=%H\r\n"
MSG.GENERATING .AZ "*** Generating: %s\r\n"
MSG.DEBUG .AS "*** pCode=%H, pConst=%H, pData=%H, pStack=%H\r\n"
.AZ " LSP=%h, CSP=%H:%h>%h:%h, ScopePtr=%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.NOMAIN .AZ "*** No 'main()' function defined."
*--------------------------------------
ENV.INCLUDE .AZ "INCLUDE"
ENV.LIB .AZ "LIB"
*--------------------------------------
OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*--------------------------------------
PCC.DEBUG >DEBUG
PCC.DEBUG.L .EQ *-PCC.DEBUG PCC.DEBUG.L .EQ *-PCC.DEBUG
*-------------------------------------- *--------------------------------------
PCC.ENTER PCC.SLEEP >SLEEP
* jsr PrintRTStackTrace PCC.SLEEP.L .EQ *-PCC.SLEEP
*--------------------------------------
ldx pBase PCC.ENTER ldx pBase
phx phx
clc clc
adc pStack A = Local Size adc pStack A = Local Size
sta pBase sta pBase
* jsr PrintRTStackTrace
* >DEBUG
PCC.ENTER.L .EQ *-PCC.ENTER PCC.ENTER.L .EQ *-PCC.ENTER
*-------------------------------------- *--------------------------------------
PCC.LEAVE PCC.LEAVE lda pBase
* jsr PrintRTStackTrace
lda pBase
sta pStack sta pStack
pla pla
sta pBase sta pBase
* jsr PrintRTStackTrace
* >DEBUG
rts rts
PCC.LEAVE.L .EQ *-PCC.LEAVE PCC.LEAVE.L .EQ *-PCC.LEAVE
*-------------------------------------- *--------------------------------------
PCC.ADDLOCAL PCC.ADDLOCAL clc
* jsr PrintRTStackTrace
* >DEBUG
clc
adc pStack adc pStack
sta pStack sta pStack
* jsr PrintRTStackTrace
* >DEBUG
PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL
*-------------------------------------- *--------------------------------------
PCC.GETLOCAL clc PCC.GETLOCAL clc
adc pBase adc pBase
tay tay
lda pBase+1 lda pBase+1
PCC.GETLOCAL.L .EQ *-PCC.GETLOCAL PCC.GETLOCAL.L .EQ *-PCC.GETLOCAL
*-------------------------------------- *--------------------------------------
PCC.SETRETVALUE ldy #0 PCC.SETRETVALUE ldy #0
* jsr PrintRTStackTrace
* >DEBUG
.1 >PULLA .1 >PULLA
sta (pBase),y sta (pBase),y
iny iny
@ -629,93 +771,42 @@ PCC.SETRETVALUE ldy #0
PCC.SETRETVALUE.L .EQ *-PCC.SETRETVALUE PCC.SETRETVALUE.L .EQ *-PCC.SETRETVALUE
*-------------------------------------- *--------------------------------------
PCC.PushXFromYA >STYA ZPPtr1 PCC.PushXFromYA >STYA ZS.RT.Ptr1
* jsr PrintRTStackTrace
* >DEBUG
txa txa
dec dec
tay tay
.1 lda (ZPPtr1),y .1 lda (ZS.RT.Ptr1),y
>PUSHA >PUSHA
dey dey
bpl .1 bpl .1
PCC.PushXFromYA.L .EQ *-PCC.PushXFromYA PCC.PushXFromYA.L .EQ *-PCC.PushXFromYA
*-------------------------------------- *--------------------------------------
PCC.PopXToYA >STYA ZPPtr1 PCC.PopXToYA >STYA ZS.RT.Ptr1
* jsr PrintRTStackTrace
* >DEBUG
ldy #0 ldy #0
.1 >PULLA .1 >PULLA
sta (ZPPtr1),y sta (ZS.RT.Ptr1),y
iny iny
dex dex
bne .1 bne .1
PCC.PopXToYA.L .EQ *-PCC.PopXToYA PCC.PopXToYA.L .EQ *-PCC.PopXToYA
*-------------------------------------- *--------------------------------------
PCC.SetXToYA >STYA ZPPtr1 PCC.SetXToYA >STYA ZS.RT.Ptr1
* jsr PrintRTStackTrace
* >DEBUG
ldy #0 ldy #0
.1 lda (pStack),y .1 lda (pStack),y
sta (ZPPtr1),y sta (ZS.RT.Ptr1),y
iny iny
dex dex
bne .1 bne .1
PCC.SetXToYA.L .EQ *-PCC.SetXToYA PCC.SetXToYA.L .EQ *-PCC.SetXToYA
*-------------------------------------- *--------------------------------------
CS.END
*--------------------------------------
* Initialized DATA
*--------------------------------------
MSG.GREETINGS .AZ "\r\nA2osX C Compiler %d.%d\r\n\r\n"
MSG.USAGE .AS "Usage : CC <option> srcfile\r\n"
.AS " -D : Debug Mode\r\n"
.AS " -T : Trace On"
.AZ "\r\n"
MSG.COMPILING .AZ "***Compiling : %s...\r\n"
MSG.DEBUG .AZ "***pCode=%H, pConst=%H, pData=%H, pStack=%H, LSP=%h, CSP=%H:%h>%h:%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.NOMAIN .AZ "***No 'main()' function defined."
*--------------------------------------
ENV.INCLUDE .AZ "INCLUDE"
ENV.LIB .AZ "LIB"
*--------------------------------------
OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*--------------------------------------
PCC.SLEEP >SLEEP
PCC.SLEEP.L .EQ *-PCC.SLEEP
*--------------------------------------
*PCC.HEADER cld
* jmp (.1,x)
* .DA #$61 6502,Level 1 (65c02)
* .DA #1 BIN Layout Version 1
* .DA #0 S.PS.F.EVENT
* .DA #0
* .DA CS.END-CS.START Code Size (without Constants)
* .DA DS.END-DS.START Data Size
* .DA #256 Stack Size
* .DA #ZS.END-ZS.START Zero Page Size
* .DA 0
*.1 .DA CS.INIT
* .DA CS.RUN
* .DA CS.DOEVENT
* .DA CS.QUIT
*--------------------------------------
PCC.Test0X lda #0 PCC.Test0X lda #0
.1 ora (pStack) .1 ora (pStack)
@ -730,35 +821,153 @@ PCC.Test0X lda #0
PCC.Test0X.L .EQ *-PCC.Test0X PCC.Test0X.L .EQ *-PCC.Test0X
*-------------------------------------- *--------------------------------------
PCC.SETpBASEp1 lda pBase+1 PCC.SETpBASEp1 lda pBase+1
sta ZPPtr1+1 sta ZS.RT.Ptr1+1
PCC.SETpBASEp1.L .EQ *-PCC.SETpBASEp1 PCC.SETpBASEp1.L .EQ *-PCC.SETpBASEp1
*-------------------------------------- *--------------------------------------
PCC.SETpBASEpA clc PCC.SETpBASEpA clc
adc pBase adc pBase
sta ZPPtr1 sta ZS.RT.Ptr1
ldy #1 ldy #1
PCC.SETpBASEpA.L .EQ *-PCC.SETpBASEpA PCC.SETpBASEpA.L .EQ *-PCC.SETpBASEpA
*-------------------------------------- *--------------------------------------
PCC.Deref >PUSHB (ZPPtr1),y PCC.Deref >PUSHB (ZS.RT.Ptr1),y
>PUSHB (ZPPtr1) >PUSHB (ZS.RT.Ptr1)
PCC.Deref.L .EQ *-PCC.Deref
PCC.Deref.L .EQ *-PCC.Deref
*-------------------------------------- *--------------------------------------
PCC.PUSHpBASEp1 >PUSHB pBase+1 PCC.PUSHpBASEp1 >PUSHB pBase+1
PCC.PUSHpBASEp1.L .EQ *-PCC.PUSHpBASEp1 PCC.PUSHpBASEp1.L .EQ *-PCC.PUSHpBASEp1
*-------------------------------------- *--------------------------------------
PCC.PUSHpBASEpA clc PCC.PUSHpBASEpA clc
adc pBase adc pBase
>PUSHA >PUSHA
PCC.PUSHpBASEpA.L .EQ *-PCC.PUSHpBASEpA PCC.PUSHpBASEpA.L .EQ *-PCC.PUSHpBASEpA
*-------------------------------------- *--------------------------------------
PCC.PushFromPtr >PULLW ZPPtr1 PCC.PushFromPtr >PULLW ZS.RT.Ptr1
.1 lda (ZPPtr1),y .1 lda (ZS.RT.Ptr1),y
>PUSHA >PUSHA
dey dey
bpl .1 bpl .1
PCC.PushFromPtr.L .EQ *-PCC.PushFromPtr PCC.PushFromPtr.L .EQ *-PCC.PushFromPtr
*-------------------------------------- *--------------------------------------
PCC.PushConstPAX
clc
adc PCC.FH.IDATA
tay
txa
adc PCC.FH.IDATA+1
>PUSHA
tya
>PUSHA
PCC.PushConstPAX.L .EQ *-PCC.PushConstPAX
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.RT.START
ZS.RT.Ptr1 .BS 2
ZS.RT.END .ED
*--------------------------------------
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 #ZS.RT.END-ZS.RT.START 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
*--------------------------------------
CC.OPChars .AS "!~+-*/%=&|^<>[" CC.OPChars .AS "!~+-*/%=&|^<>["
CC.OPChars.Cnt .EQ *-CC.OPChars CC.OPChars.Cnt .EQ *-CC.OPChars
*-------------------------------------- *--------------------------------------
@ -1151,6 +1360,8 @@ CC.LIBC >PSTR "chtyp"
.DA #2,#2,#FPU.TAN .DA #2,#2,#FPU.TAN
>PSTR "atan" >PSTR "atan"
.DA #2,#2,#FPU.ATAN .DA #2,#2,#FPU.ATAN
>PSTR "lrintf"
.DA #2,#2,#FPU.QINT
.HS 00 .HS 00
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
@ -1166,26 +1377,32 @@ hFiles .BS FILES.MAX
LineCntPtr .BS 1 LineCntPtr .BS 1
.BS 1 for inc inc .BS 1 for inc inc
LineCnts .BS FILES.MAX+2 LineCnts .BS FILES.MAX*2
hLineBuf .BS 1 hLineBuf .BS 1
LineBufPtr .BS 2 LineBufPtr .BS 2
CC.CmdSave .BS 1 CC.CmdSave .BS 1
CC.hDefineBuf .BS 1
CC.hDefines .BS 1 CC.hDefines .BS 1
CC.SaveDefine .BS 2
CC.hTags .BS 1 CC.hTags .BS 1
CC.hSymbols .BS SCOPE.MAX
CC.hCode .BS 1
CC.hConst .BS 1
CC.ConstCnt .BS 2
CC.hData .BS 1
CC.hLocal .BS 1
CC.hStack .BS 1 CC.hStack .BS 1
CC.SaveDefine .BS 2 CC.hSymbols .BS SCOPE.MAX+1 1 Global+ MAX locals
*--------------------------------------
CC.SymID .BS 2
CC.hSymBuf .BS 1
*--------------------------------------
CC.hLookupSymBuf .BS 1
CC.LookupSymSize .BS 2
*--------------------------------------
CC.InFileArg .BS 1
CC.OutFileArg .BS 1
CC.hOutFile .BS 1
DS.END .ED DS.END .ED
*-------------------------------------- *--------------------------------------

View File

@ -1,5 +1,6 @@
NEW NEW
AUTO 3,1 AUTO 3,1
short int tuiInit(); short int tuiInit();
int fastcall tuiClose(short int); int fastcall tuiClose(short int);

View File

@ -1,5 +1,6 @@
NEW NEW
AUTO 3,1 AUTO 3,1
void md5(const char*, char*); void md5(const char*, char*);
short int md5init(); short int md5init();

View File

@ -70,7 +70,7 @@ D2.HeadSelect >PULLB D2.HeadNum
jsr D2.CheckDiskII jsr D2.CheckDiskII
bcs .9 bcs .9
lda D2.HeadNum A = 0/1 lda D2.HeadNum A = 0/1
asl A = 0/2 asl A = 0/2
@ -106,23 +106,29 @@ D2.MoveHead >PULLB D2.TargetQTrack
D2.MoveHead.SEI lda D2.CurrentQTrack D2.MoveHead.SEI lda D2.CurrentQTrack
bit #1 bit #1
bne .1 beq .2 we are on 0/4 or 2/4 track
jsr D2.SeekPhOnY we are on 0/4 or 2/4 track pha
bra .9 no wait, next operation will be phy/plx/Ph0On,y
.1 cmp D2.TargetQTrack we are on 1/4 or 3/4 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 and #6 move in : X = Ph(N)
ora D2.Slotn0
tax
lda IO.D2.Ph0On,x
pla
bcs .2 if CS, C > T, must move out bcs .2 if CS, C > T, must move out
inc CC: C < T, ON next PH inc move in : Y = Ph(N+1)
.HS B0 BCS .2 jsr D2.SeekPhOnY move out: Y = Ph(N)
.2 dec CS: C > T, ON prev PH bra .9 no wait
sta D2.CurrentQTrack
bra .6 Ph ON to go to 0/4 or 2/4, then wait
*-------------------------------------- *--------------------------------------
.3 bcs .4 if CS, C > T, must move out .3 bcs .4 if CS, C > T, must move out
@ -150,7 +156,6 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
.6 jsr D2.SeekPhOnY now X and Y on .6 jsr D2.SeekPhOnY now X and Y on
.8 lda #IO.D2.SeekTimeF .8 lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA ...wait... jsr D2.Wait100usecA ...wait...
.9 lda D2.CurrentQTrack .9 lda D2.CurrentQTrack
@ -161,12 +166,14 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
jsr D2.Wait25600usec jsr D2.Wait25600usec
lda IO.D2.Ph0Off,y bcc .10
bcc .90 clc
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
.90 rts .10 lda IO.D2.Ph0Off,y
rts
*-------------------------------------- *--------------------------------------
D2.SeekPhOnY and #6 D2.SeekPhOnY and #6
ora D2.Slotn0 ora D2.Slotn0

View File

@ -10,7 +10,7 @@ XCLK.API.RDCLK .EQ $D8F0
*-------------------------------------- *--------------------------------------
XCLK.START php XCLK.START php
sei sei
ldx #XCLK.START2xx.L ldx #XCLK.START2xx.L-1
.1 lda XCLK.START2xx,X .1 lda XCLK.START2xx,X
sta XCLK.CODE2xx,X sta XCLK.CODE2xx,X

View File

@ -777,23 +777,29 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
sta XRW.CurrentQTrack sta XRW.CurrentQTrack
bit #1 A = Current QT bit #1 A = Current QT
bne .1 beq .2 we are on 0/4 or 2/4 track
pha
jsr XRW.SeekPhOnY we are on 0/4 or 2/4 track : PhY on cmp XRW.TargetQTrack we are on 1/4 or 3/4 track
bra .9 no wait, next operation will be phy/plx/Ph0On,y bcc .1 if CC, C < T, must move in
inc move out: X = Ph(N+1)
.1 and #6 move in : X = Ph(N)
ora A2L
tax
lda IO.D2.Ph0On,x
pla
.1 cmp XRW.TargetQTrack we are on 1/4 or 3/4
bcs .2 if CS, C > T, must move out bcs .2 if CS, C > T, must move out
inc CC: C < T, ON next PH inc move in : Y = Ph(N+1)
.HS B0 BCS .2 jsr XRW.SeekPhOnY move out: Y = Ph(N)
.2 dec CS: C > T, ON prev PH bra .9 no wait
sta XRW.CurrentQTrack
bra .6 PhY ON to go to 0/4 or 2/4, then wait
*-------------------------------------- *--------------------------------------
.3 bcs .4 if CS, C > T, must move out .3 bcs .4 if CS, C > T, must move out
@ -805,8 +811,8 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
sta XRW.CurrentQTrack sta XRW.CurrentQTrack
bit #1 bit #1 C = xxxxxxx1 ?
bne .5 bne .5 yes, 2 PhOn required
lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : PhX Off lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : PhX Off
bra .8 go wait.... bra .8 go wait....
@ -820,8 +826,7 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
.6 jsr XRW.SeekPhOnY now X and Y on .6 jsr XRW.SeekPhOnY now X and Y on
.8 lda XRW.SeekTime .8 lda #IO.D2.SeekTimeF XRW.SeekTime
jsr XRW.Wait100usecA ...wait... jsr XRW.Wait100usecA ...wait...
.9 lda XRW.CurrentQTrack .9 lda XRW.CurrentQTrack
@ -832,13 +837,14 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
jsr XRW.Wait25600usec jsr XRW.Wait25600usec
lda IO.D2.Ph0Off,y bcc .10
bcc .90
lda IO.D2.Ph0Off,x
clc Exit wit CC (recalibrate) clc Exit wit CC (recalibrate)
.90 rts lda IO.D2.Ph0Off,x
.10 lda IO.D2.Ph0Off,y
rts
*-------------------------------------- *--------------------------------------
XRW.SeekPhOnY and #6 XRW.SeekPhOnY and #6
ora A2L ora A2L

View File

@ -241,6 +241,13 @@ BB.FX2.Trk2Qtrk
BB.Trk2Qtrk.RTS rts BB.Trk2Qtrk.RTS rts
*-------------------------------------- *--------------------------------------
BB.FX2.SeekPhOnY
and #6
ora ROM.D2.Slotn0
tay
lda IO.D2.Ph0On,y
rts
*--------------------------------------
BB.FX2.SeekReadD2 BB.FX2.SeekReadD2
jsr BB.FX2.HeadSelect jsr BB.FX2.HeadSelect
@ -256,30 +263,27 @@ BB.FX2.SeekReadD2
beq BB.FX2.ReadSectD2 beq BB.FX2.ReadSectD2
bit #1 bit #1
bne .1 beq .2 we are on 0/4 or 2/4 track
pha
jsr .20 we are on 0/4 or 2/4 track bcc .1 if CC, C < T, must move in
inc
bra .10 no wait, next operation will be phy/plx/Ph0On,y .1 and #6 move in : X = Ph(N)
ora ROM.D2.Slotn0
.1 cmp BB.TargetQTrack we are on 1/4 or 3/4 tax
lda IO.D2.Ph0On,x
pla
bcs .2 if CS, C > T, must move out bcs .2 if CS, C > T, must move out
inc CC: C < T, ON next PH inc move in : Y = Ph(N+1)
.HS B0 BCS .2 jsr BB.FX2.SeekPhOnY move out: Y = Ph(N)
bra .9 Ph ON to go to 0/4 or 2/4, then wait
.2 dec CS: C > T, ON prev PH
sta BB.CurrentQTrack
bra .6 Ph ON to go to 0/4 or 2/4, then wait
*--------------------------------------
.20 and #6
ora ROM.D2.Slotn0
tay
lda IO.D2.Ph0On,y
rts
*-------------------------------------- *--------------------------------------
.3 bcs .4 if CS, C > T, must move out .3 bcs .4 if CS, C > T, must move out
@ -304,13 +308,12 @@ BB.FX2.SeekReadD2
inc CC: C < T, ON next PH inc CC: C < T, ON next PH
.6 jsr .20 now X and Y on .6 jsr BB.FX2.SeekPhOnY now X and Y on
.8 lda #IO.D2.SeekTimeB .8 lda #IO.D2.SeekTimeB
jsr BB.Wait100usecA ...wait...
.9 jsr BB.Wait100usecA ...wait... .9 lda BB.CurrentQTrack
.10 lda BB.CurrentQTrack
cmp BB.TargetQTrack cmp BB.TargetQTrack
bne .3 bne .3
@ -319,12 +322,11 @@ BB.FX2.SeekReadD2
lda #0 lda #0
jsr BB.Wait100usecA jsr BB.Wait100usecA
lda IO.D2.Ph0Off,y bcc .10
bcc .11
lda IO.D2.Ph0Off,x lda IO.D2.Ph0Off,x
.11 .10 lda IO.D2.Ph0Off,y
*-------------------------------------- *--------------------------------------
BB.FX2.ReadSectD2 BB.FX2.ReadSectD2
ldx ROM.D2.Slotn0 ldx ROM.D2.Slotn0