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
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
bra .9 no wait, next operation will be phy/plx/Ph0On,y
pha
.1 cmp BSX.TargetQTrack we are on 1/4 or 3/4
bcs .2 if CS, C > T, must move out
cmp BSX.TargetQTrack we are on 1/4 or 3/4 track
bcc .1 if CC, C < T, must move in
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
@ -113,12 +119,13 @@ BSX.MoveHead sta BSX.TargetQTrack
jsr BSX.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .90
bcc .10
lda IO.D2.Ph0Off,x
.90 rts
.10 lda IO.D2.Ph0Off,y
rts
*--------------------------------------
BSX.SeekPhOnY and #6
ora BSX.Slotn0

View File

@ -1,6 +1,25 @@
NEW
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
ldy #0
@ -197,6 +216,37 @@ CODE.PushFromPtr
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
@ -266,6 +316,17 @@ 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
lda #$20 JSR
jsr CODE.EmitByte
lda #A2osX.SYSCALL
jsr CODE.EmitByte
lda /A2osX.SYSCALL
bra CODE.EmitByte
*--------------------------------------
CODE.FPUCALL lda #$A2 LDX #imm
jsr CODE.EmitByte
txa
@ -277,22 +338,90 @@ CODE.FPUCALL lda #$A2 LDX #imm
lda /A2osX.FPUCALL
bra CODE.EmitByte
*--------------------------------------
CODE.SYSCALL lda #$A2 LDX #imm
jsr CODE.EmitByte
CODE.EmitByte clc if Pass 1...
bit bPass2
bpl .1
phx
phy
tax
>PUSHB.G CC.hOutFile
txa
jsr CODE.EmitByte
lda #$20 JSR
jsr CODE.EmitByte
lda #A2osX.SYSCALL
jsr CODE.EmitByte
lda /A2osX.SYSCALL
*--------------------------------------
CODE.EmitByte sta (ZPCCCode)
inc ZPCCCode
>PUSHA
>SYSCALL fputc
ply
plx
.1 inc ZPCCCode
bne .8
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
*--------------------------------------
MAN

View File

@ -1,14 +1,13 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CC.Init >SYSCALL SListNew
bcs .99
bcs .9
>STA.G CC.hDefines
>SYSCALL SListNew
bcs .99
bcs .9
>STA.G CC.hTags
@ -18,30 +17,6 @@ CC.Init >SYSCALL SListNew
>STA.G CC.hSymbols
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
>SYSCALL GetMem
bcs .9
@ -78,25 +53,19 @@ CC.Quit ldy ScopePtr
>SYSCALL SListFree
.4 lda hDefineBuf
.4 >LDA.G CC.hDefineBuf
jsr .7
>LDA.G CC.hLookupSymBuf
jsr .7
.5 jsr CS.RUN.FClose
bne .5
lda hSymBuf
>LDA.G CC.hSymBuf
jsr .7
>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
>SYSCALL FreeMem
@ -202,7 +171,7 @@ CC.CompileLine.1
jsr CC.SYM.Store
bcs .29
jmp CC.SYM.FreeBuf
jmp CC.SYM.Free
*--------------------------------------
* TODO: AOPS
@ -225,7 +194,7 @@ CC.CompileLine.1
.28 jsr CC.SYM.Store
bcs .9
jsr CC.SYM.FreeBuf
jsr CC.SYM.Free
bra .68
*--------------------------------------
@ -256,7 +225,7 @@ CC.CompileLine.1
.69 bcs .99
ldy #SYM.Q
lda (ZPSymBufPtr),y
lda (ZPLookupSymPtr),y
bit #SYM.Q.FUNC
beq .60
@ -265,7 +234,7 @@ CC.CompileLine.1
jsr CC.F.CallNoRetV
bcs .9
jsr CC.SYM.FreeBufPop
jsr CC.SYM.LookupFree
bra .8
*--------------------------------------
@ -285,7 +254,7 @@ CC.CompileLine.1
jsr CC.SYM.PopValue
bcs .9
jsr CC.SYM.FreeBufPop
jsr CC.SYM.LookupFree
*--------------------------------------
.68 jsr CC.GetCharNB
cmp #';'
@ -383,8 +352,8 @@ CC.SListLookup >PUSHA hSList
>SYSCALL SListLookup
bcs .99
pha save KeyID
phy
* pha save KeyID
* phy
>PUSHA KeyID.HI
tya
@ -398,9 +367,14 @@ CC.SListLookup >PUSHA hSList
>SYSCALL SListGetData
bcs .9
ply
pla X = hSymScope, Y,A = SymID
* clc
>STYA.G CC.LookupSymSize
txa
>STA.G CC.hLookupSymBuf
>SYSCALL GetMemPtr
* clc Y,A = SymPtr, X = hSymBuf
rts
.9 plx
@ -410,88 +384,6 @@ CC.SListLookup >PUSHA hSList
.99 inc pStack
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
sec
adc ZPLookupPtr
@ -501,19 +393,16 @@ CC.ZPLookupPtrAddAp1
inc ZPLookupPtr+1
.1 rts
*--------------------------------------
CC.GetDefine >LDA.G CC.hDefines
jsr CC.SListLookup
bcs .9
stx hDefineBuf
>LDYA ZPLineBufPtr
CC.GetDefine >LDYA ZPLineBufPtr
>STYA.G CC.SaveDefine
txa
>SYSCALL GetMemPtr
>LDA.G CC.hDefines
jsr CC.SListLookup
bcs .9
>STYA ZPLineBufPtr
txa
>STA.G CC.hDefineBuf
.9 rts
*--------------------------------------
@ -667,30 +556,29 @@ CC.GetNextChar inc ZPLineBufPtr
CC.GetChar lda (ZPLineBufPtr)
bne .8
lda hDefineBuf
phy
>LDA.G CC.hDefineBuf
beq .1
stz hDefineBuf
phx
phy
>SYSCALL FreeMem
>STZ.G CC.hDefineBuf
>LDYA.G CC.SaveDefine
>STYA ZPLineBufPtr
ply
plx
ply
bra CC.GetChar
.1 lda #C.CR
.1 ply
lda #C.CR
.8 clc
rts
.9 lda #MLI.E.EOF
sec
.99 rts
*---------------------------------------
CC.IsEndArg cmp #']'
beq .8

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -40,18 +40,34 @@ SYM.SC.AUTO .EQ 2
SYM.SC.REGISTER .EQ 4
SYM.SC.EXTERN .EQ 6
SYM.SC.TYPEDEF .EQ 8
SYM.SC.DEFINE .EQ 10
SYM.SC.TAG .EQ 12
*
SYM.SizeOf .EQ 4
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
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ArgIndex .BS 1
bPass2 .BS 1
ZPCCCode .BS 2
ZPCCConst .BS 2
ZPCCData .BS 2
@ -66,17 +82,12 @@ LocalPtr .BS 1
ScopePtr .BS 1
ScopenCnt .BS 1
ZPSymID .BS 2
hSymScope .BS 1
hSymBuf .BS 1
* .BS 1
* .BS 1
ZPSymSize .BS 2
ZPSymBufPtr .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
ArgIndex .BS 1
hDefineBuf .BS 1
ZPLookupSymPtr .BS 2
ZS.END .ED
*--------------------------------------
@ -104,10 +115,14 @@ CS.START cld
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.USAGE .DA MSG.USAGE
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.TRACE .DA MSG.TRACE
L.MSG.RTSTK .DA MSG.RTSTK
L.MSG.ERROR .DA MSG.ERROR
L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.NOMAIN .DA MSG.NOMAIN
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.LIBC .DA CC.LIBC
L.PCC.FH .DA PCC.FH
.DA 0
*--------------------------------------
* Called once at process creation
@ -243,21 +259,48 @@ CS.RUN >PUSHW L.MSG.GREETINGS
jsr CC.Init
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
bne .9
jsr CS.RUN.FClose
bne CS.RUN.LOOP
bne CS.RUN.CLOOP
*--------------------------------------
jsr CC.MainExec
bcc .8
jsr PrintSummary
bcs .99
>LDYA L.MSG.NOMAIN
>SYSCALL puts
jsr CC.Link
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
sec
rts
@ -266,13 +309,13 @@ CS.RUN.LOOP jsr CC.CompileFile
jsr PrintErrorMsg
pla
sec
rts
.99 rts
*--------------------------------------
CS.RUN.ARGS inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .7
bcs .8
>STYA ZPPtr1
lda (ZPPtr1)
@ -297,18 +340,24 @@ CS.RUN.ARGS inc ArgIndex
sta (pData),y
bra CS.RUN.ARGS
.4 >LDA.G hFilePtr
cmp #hFilePtr
.4 >LDA.G CC.InFileArg
bne .5
lda ArgIndex
>STA.G CC.InFileArg
bra CS.RUN.ARGS
.5 >LDA.G CC.OutFileArg
bne .90
>LDYA ZPPtr1
jsr CS.RUN.FOpen
bcc CS.RUN.ARGS
lda ArgIndex
>STA.G CC.OutFileArg
bra CS.RUN.ARGS
rts
.8 >LDA.G CC.InFileArg
beq .90
.7 >LDA.G hFilePtr
cmp #hFilePtr
>LDA.G CC.OutFileArg
beq .90
clc
@ -322,7 +371,22 @@ CS.RUN.ARGS inc ArgIndex
sec
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 S.FI.T.TXT
>PUSHWZ Aux type
@ -406,10 +470,36 @@ CS.RUN.FClose >LDA.G hFilePtr
.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
*--------------------------------------
CS.QUIT jsr CC.Quit
CS.QUIT jsr CODE.Quit
jsr CC.Quit
>LDA.G hLineBuf
beq .8
@ -458,7 +548,7 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG
>PUSHB LocalPtr
>PUSHW ZPCCStack
>PUSHB CStackPtr
tay
beq .1
@ -471,44 +561,17 @@ PrintDebugMsg >PUSHW L.MSG.DEBUG
.1 >PUSHYA
>PUSHBI 14
lda ScopePtr
sec
sbc #CC.hSymbols
>PUSHA
>PUSHBI 15
>SYSCALL PrintF
>DEBUGOA
>DEBUG
rts
*--------------------------------------
PrintRTStackTrace
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
PrintErrorMsg >LDA.G CC.hDefineBuf
beq .10
>LDYA.G CC.SaveDefine
@ -551,6 +614,78 @@ PrintErrorMsg lda hDefineBuf
>PUSHBI 2
>SYSCALL FPrintF
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.core
@ -562,65 +697,72 @@ PrintErrorMsg lda hDefineBuf
.INB usr/src/bin/cc.s.f
.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
*--------------------------------------
PCC.DEBUG
jsr PrintRTStackTrace
>DEBUG
CS.END
*--------------------------------------
* 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.ENTER
* jsr PrintRTStackTrace
ldx pBase
PCC.SLEEP >SLEEP
PCC.SLEEP.L .EQ *-PCC.SLEEP
*--------------------------------------
PCC.ENTER ldx pBase
phx
clc
adc pStack A = Local Size
sta pBase
* jsr PrintRTStackTrace
* >DEBUG
PCC.ENTER.L .EQ *-PCC.ENTER
*--------------------------------------
PCC.LEAVE
* jsr PrintRTStackTrace
lda pBase
PCC.LEAVE lda pBase
sta pStack
pla
sta pBase
* jsr PrintRTStackTrace
* >DEBUG
rts
PCC.LEAVE.L .EQ *-PCC.LEAVE
*--------------------------------------
PCC.ADDLOCAL
* jsr PrintRTStackTrace
* >DEBUG
clc
PCC.ADDLOCAL clc
adc pStack
sta pStack
* jsr PrintRTStackTrace
* >DEBUG
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
* jsr PrintRTStackTrace
* >DEBUG
.1 >PULLA
sta (pBase),y
iny
@ -629,93 +771,42 @@ PCC.SETRETVALUE ldy #0
PCC.SETRETVALUE.L .EQ *-PCC.SETRETVALUE
*--------------------------------------
PCC.PushXFromYA >STYA ZPPtr1
* jsr PrintRTStackTrace
* >DEBUG
PCC.PushXFromYA >STYA ZS.RT.Ptr1
txa
dec
tay
.1 lda (ZPPtr1),y
.1 lda (ZS.RT.Ptr1),y
>PUSHA
dey
bpl .1
PCC.PushXFromYA.L .EQ *-PCC.PushXFromYA
*--------------------------------------
PCC.PopXToYA >STYA ZPPtr1
* jsr PrintRTStackTrace
* >DEBUG
PCC.PopXToYA >STYA ZS.RT.Ptr1
ldy #0
.1 >PULLA
sta (ZPPtr1),y
sta (ZS.RT.Ptr1),y
iny
dex
bne .1
PCC.PopXToYA.L .EQ *-PCC.PopXToYA
*--------------------------------------
PCC.SetXToYA >STYA ZPPtr1
* jsr PrintRTStackTrace
* >DEBUG
PCC.SetXToYA >STYA ZS.RT.Ptr1
ldy #0
.1 lda (pStack),y
sta (ZPPtr1),y
sta (ZS.RT.Ptr1),y
iny
dex
bne .1
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
.1 ora (pStack)
@ -730,35 +821,153 @@ PCC.Test0X lda #0
PCC.Test0X.L .EQ *-PCC.Test0X
*--------------------------------------
PCC.SETpBASEp1 lda pBase+1
sta ZPPtr1+1
sta ZS.RT.Ptr1+1
PCC.SETpBASEp1.L .EQ *-PCC.SETpBASEp1
*--------------------------------------
PCC.SETpBASEpA clc
adc pBase
sta ZPPtr1
sta ZS.RT.Ptr1
ldy #1
PCC.SETpBASEpA.L .EQ *-PCC.SETpBASEpA
*--------------------------------------
PCC.Deref >PUSHB (ZPPtr1),y
>PUSHB (ZPPtr1)
PCC.Deref.L .EQ *-PCC.Deref
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 ZPPtr1
PCC.PushFromPtr >PULLW ZS.RT.Ptr1
.1 lda (ZPPtr1),y
.1 lda (ZS.RT.Ptr1),y
>PUSHA
dey
bpl .1
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.Cnt .EQ *-CC.OPChars
*--------------------------------------
@ -1151,6 +1360,8 @@ CC.LIBC >PSTR "chtyp"
.DA #2,#2,#FPU.TAN
>PSTR "atan"
.DA #2,#2,#FPU.ATAN
>PSTR "lrintf"
.DA #2,#2,#FPU.QINT
.HS 00
*--------------------------------------
.DUMMY
@ -1166,26 +1377,32 @@ hFiles .BS FILES.MAX
LineCntPtr .BS 1
.BS 1 for inc inc
LineCnts .BS FILES.MAX+2
LineCnts .BS FILES.MAX*2
hLineBuf .BS 1
LineBufPtr .BS 2
CC.CmdSave .BS 1
CC.hDefineBuf .BS 1
CC.hDefines .BS 1
CC.SaveDefine .BS 2
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.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
*--------------------------------------

View File

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

View File

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

View File

@ -70,7 +70,7 @@ D2.HeadSelect >PULLB D2.HeadNum
jsr D2.CheckDiskII
bcs .9
lda D2.HeadNum A = 0/1
asl A = 0/2
@ -106,23 +106,29 @@ D2.MoveHead >PULLB D2.TargetQTrack
D2.MoveHead.SEI lda D2.CurrentQTrack
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
bra .9 no wait, next operation will be phy/plx/Ph0On,y
pha
.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
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
sta D2.CurrentQTrack
bra .6 Ph ON to go to 0/4 or 2/4, then wait
bra .9 no wait
*--------------------------------------
.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
.8 lda #IO.D2.SeekTimeF
jsr D2.Wait100usecA ...wait...
.9 lda D2.CurrentQTrack
@ -161,12 +166,14 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
jsr D2.Wait25600usec
lda IO.D2.Ph0Off,y
bcc .90
bcc .10
clc
lda IO.D2.Ph0Off,x
.90 rts
.10 lda IO.D2.Ph0Off,y
rts
*--------------------------------------
D2.SeekPhOnY and #6
ora D2.Slotn0

View File

@ -10,7 +10,7 @@ XCLK.API.RDCLK .EQ $D8F0
*--------------------------------------
XCLK.START php
sei
ldx #XCLK.START2xx.L
ldx #XCLK.START2xx.L-1
.1 lda XCLK.START2xx,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
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
bra .9 no wait, next operation will be phy/plx/Ph0On,y
cmp XRW.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 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
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
sta XRW.CurrentQTrack
bra .6 PhY ON to go to 0/4 or 2/4, then wait
bra .9 no wait
*--------------------------------------
.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
bit #1
bne .5
bit #1 C = xxxxxxx1 ?
bne .5 yes, 2 PhOn required
lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : PhX Off
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
.8 lda XRW.SeekTime
.8 lda #IO.D2.SeekTimeF XRW.SeekTime
jsr XRW.Wait100usecA ...wait...
.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
lda IO.D2.Ph0Off,y
bcc .90
lda IO.D2.Ph0Off,x
bcc .10
clc Exit wit CC (recalibrate)
.90 rts
lda IO.D2.Ph0Off,x
.10 lda IO.D2.Ph0Off,y
rts
*--------------------------------------
XRW.SeekPhOnY and #6
ora A2L

View File

@ -241,6 +241,13 @@ BB.FX2.Trk2Qtrk
BB.Trk2Qtrk.RTS rts
*--------------------------------------
BB.FX2.SeekPhOnY
and #6
ora ROM.D2.Slotn0
tay
lda IO.D2.Ph0On,y
rts
*--------------------------------------
BB.FX2.SeekReadD2
jsr BB.FX2.HeadSelect
@ -256,30 +263,27 @@ BB.FX2.SeekReadD2
beq BB.FX2.ReadSectD2
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 cmp BB.TargetQTrack we are on 1/4 or 3/4
.1 and #6 move in : X = Ph(N)
ora ROM.D2.Slotn0
tax
lda IO.D2.Ph0On,x
pla
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 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
.2 jsr BB.FX2.SeekPhOnY move out: Y = Ph(N)
bra .9 Ph ON to go to 0/4 or 2/4, then wait
*--------------------------------------
.3 bcs .4 if CS, C > T, must move out
@ -304,13 +308,12 @@ BB.FX2.SeekReadD2
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
jsr BB.Wait100usecA ...wait...
.9 jsr BB.Wait100usecA ...wait...
.10 lda BB.CurrentQTrack
.9 lda BB.CurrentQTrack
cmp BB.TargetQTrack
bne .3
@ -319,12 +322,11 @@ BB.FX2.SeekReadD2
lda #0
jsr BB.Wait100usecA
lda IO.D2.Ph0Off,y
bcc .11
bcc .10
lda IO.D2.Ph0Off,x
.11
.10 lda IO.D2.Ph0Off,y
*--------------------------------------
BB.FX2.ReadSectD2
ldx ROM.D2.Slotn0