Kernel 0.94+

This commit is contained in:
Rémy GIBERT 2021-04-08 22:30:18 +02:00
parent 83951a71c4
commit 63486817ca
20 changed files with 1953 additions and 217 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

140
BIN/ACOS.S.CODE.txt Normal file
View File

@ -0,0 +1,140 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CODE.PUSHINT32 ldy #3
.1 lda #$A9 LDA #imm
jsr CODE.EmitByte
lda (pStack),y
jsr CODE.EmitByte
jsr CODE.PUSHA
dey
bpl .1
rts
*--------------------------------------
CODE.PULLL2ZPADDR
>LDYA ZPADDR
jsr CODE.LDYAI
ldx #0
.1 lda CCODE.PULLLYA,x
jsr CODE.EmitByte
inx
cpx #CCODE.PULLLYA.LEN
bne .1
rts
*--------------------------------------
CODE.PUSHfZPADDR
>LDYA ZPADDR
CODE.PUSHfYA jsr CODE.LDYAI
ldx #0
.1 lda CCODE.PUSHLYA,x
jsr CODE.EmitByte
inx
cpx #CCODE.PUSHLYA.LEN
bne .1
rts
*--------------------------------------
CODE.LDYAI pha
lda #$A0 LDY #imm
jsr CODE.EmitByte
tya
jsr CODE.EmitByte
lda #$A9 LDA #imm
jsr CODE.EmitByte
pla
jmp CODE.EmitByte
*--------------------------------------
CODE.PUSHA ldx #0
.1 lda CCODE.PUSHA,x
jsr CODE.EmitByte
inx
cpx #CCODE.PUSHA.LEN
bne .1
rts
*--------------------------------------
CODE.PULLA ldx #0
.1 lda CCODE.PULLA,x
jsr CODE.EmitByte
inx
cpx #CCODE.PULLA.LEN
bne .1
rts
*--------------------------------------
CODE.FPRINTSTR ldx #0
.1 lda CCODE.FPRINTSTR,x
jsr CODE.EmitByte
inx
cpx #CCODE.FPRINTSTR.LEN
bne .1
rts
*--------------------------------------
CODE.FPRINTL ldx #0
.1 lda CCODE.FPRINTL,x
jsr CODE.EmitByte
inx
cpx #CCODE.FPRINTL.LEN
bne .1
rts
*--------------------------------------
CODE.FPRINTCR ldx #0
.1 lda CCODE.FPRINTCR,x
jsr CODE.EmitByte
inx
cpx #CCODE.FPRINTCR.LEN
bne .1
rts
*--------------------------------------
CODE.FPUCALL lda #$A2 LDX #imm
jsr CODE.EmitByte
txa
jsr CODE.EmitByte
lda #$20 JSR
jsr CODE.EmitByte
lda #A2osX.FPUCALL
jsr CODE.EmitByte
lda /A2osX.FPUCALL
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
*--------------------------------------
CODE.EmitByte sta (ZPCodeBufPtr)
inc ZPCodeBufPtr
bne .8
inc ZPCodeBufPtr+1
.8 rts
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s.code
LOAD usr/src/bin/acos.s
ASM

463
BIN/ACOS.S.CORE.txt Normal file
View File

@ -0,0 +1,463 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
CORE.Init >LDYAI CODESEG
>SYSCALL GetMem
bcs .9
>STYA ZPCodeBufPtr
txa
>STA.G hCodeBuf
>LDYAI CONSTSEG
>SYSCALL GetMem
bcs .9
>STYA ZPConstBufPtr
txa
>STA.G hConstBuf
>LDYAI DATASEG
>SYSCALL GetMem
bcs .9
>STYA ZPDataBufPtr
txa
>STA.G hDataBuf
>SYSCALL SListNew
bcs .9
>STA.G hLabels
>SYSCALL SListNew
bcs .9
>STA.G hVars
clc
.9 rts
*--------------------------------------
CORE.Quit >LDA.G hConstBuf
beq .1
>SYSCALL FreeMem
.1 >LDA.G hCodeBuf
beq CORE.Cleanup
>SYSCALL FreeMem
*--------------------------------------
CORE.Cleanup >LDA.G hVars
beq .1
>PUSHA
>SYSCALL SListFree
>STZ.G hVars
.1 >LDA.G hLabels
beq .8
>PUSHA
>SYSCALL SListFree
>STZ.G hLabels
.8 clc
CORE.Quit.RTS rts
*--------------------------------------
CORE.Compile jsr CORE.GetChar
bcs CORE.Quit.RTS
cmp #'#'
beq .80 #/bin/acos....
cmp #';'
beq .80 Comment: skip line...
cmp #C.CR
beq .81 Blank line...
jsr CORE.CheckCharNB
bcs .1 CS=SPACE -> go check VAR or KW
jsr CORE.IsLetter LABEL must start with a letter
bcs .99
jsr CORE.CreateLabel
bcs .99
bra .8
*--------------------------------------
.1 jsr CORE.GetNextCharNB skip SPACE(s) or ":"
bcs .99
jsr CORE.IsLetter
bcs .90
>LDYA L.ACOS.KW
jsr CORE.Lookup
bcs .3
jmp (J.ACOS.KW,x)
*--------------------------------------
.3 jsr CORE.CreateOrGetVar
bcs .90
jsr CORE.GetCharNB
bcs .90
cmp #'='
bne .90
jsr CORE.GetNextCharNB skip '='
bcs .90
jsr EXP.Eval
bcs .99
jsr CODE.PULLL2ZPADDR Store Int32 result in DATASEG
*--------------------------------------
.8 jsr CORE.GetCharNB
bcs .99
jsr CORE.IsEndInst
bcc .90
cmp #':'
beq .1
clc
.81 jmp CORE.GetNextChar skip char
.80 jmp CORE.SkipLine
.90 lda #E.CSYN
sec
.99 rts
*--------------------------------------
CORE.Run lda #$60 RTS
sta (ZPCodeBufPtr)
jsr CORE.Cleanup
lda ZPCodeBufPtr
sta ZPPtr1
lda ZPCodeBufPtr+1
sta ZPPtr1+1
>LDA.G hCodeBuf
>SYSCALL GetMemPtr
>STYA ZPCodeBufPtr
lda ZPPtr1
sec
sbc ZPCodeBufPtr
sta ZPPtr2
lda ZPPtr1+1
sbc ZPCodeBufPtr
sta ZPPtr1+2
>PUSHW L.MSG.RUN
>PUSHW ZPPtr1
>PUSHBI 2
>SYSCALL PrintF
* >DEBUG
jmp (ZPCodeBufPtr)
*--------------------------------------
CORE.Lookup >STYA ZPPtr1
ldx #0
.1 ldy #$ff
.2 jsr .7 get next valid char in src text
bcs .3
.20 jsr CORE.ToUpperCase
eor (ZPPtr1),y match table char ?
asl compare only 7 bits
bne .4 no match...get next table keyword
bcc .2 not last char in this keyword
jsr .7 next char in text...
bcc .4 valid....failed
.8 tya Keyword Len
clc
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .80
clc
inc ZPInputBufPtr+1
.80 rts
.3 dey
lda (ZPPtr1),y was last char in this keyword ?
bmi .8
iny
.41 jsr CORE.IncPtr1 skip chars to next keyword
.4 lda (ZPPtr1)
bpl .41
jsr CORE.IncPtr1
.6 inx
inx
lda (ZPPtr1) Array Ending 0, lookup failed
bne .1
.9 sec
rts
.7 iny
lda (ZPInputBufPtr),y Get Src text char...
beq .9 end of text
jmp CORE.IsLetterOrDigit CS=end of valid chars
*--------------------------------------
CORE.IncPtr1 inc ZPPtr1
bne .8
inc ZPPtr1+1
.8 rts
*--------------------------------------
CORE.CreateLabel
>LDA.G hLabels
jsr CORE.NewKey
bcs .9
>PUSHB.G hLabels
>PUSHW ZPSID
>PUSHWI ZPCodeBufPtr
>PUSHWI 2
>SYSCALL SListAddData
.9 rts
*--------------------------------------
CORE.CreateOrGetVar
>LDA.G hVars
jsr CORE.GetAddr
bcc .8
>LDA.G hVars
jsr CORE.NewKey
bcs .9
>PUSHB.G hVars
>PUSHW ZPSID
>PUSHWI ZPDataBufPtr
>PUSHWI 2
>SYSCALL SListAddData
bcs .9
lda ZPDataBufPtr
sta ZPADDR
* clc
adc #4 longint
sta ZPDataBufPtr
lda ZPDataBufPtr+1
sta ZPADDR+1
adc #0
sta ZPDataBufPtr+1
.8
.9 rts
*--------------------------------------
CORE.NewKey >PUSHA
>PUSHW ZPInputBufPtr
>SYSCALL SListNewKey
bcs .9
>STYA ZPSID
txa
* clc
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .1
clc
inc ZPInputBufPtr+1
.1
.9 rts
*--------------------------------------
CORE.GetAddr >PUSHA
>PUSHA for SListGetData
>PUSHW ZPInputBufPtr
>SYSCALL SListLookup
bcs .9
>STYA ZPSID
txa
* clc
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .1
inc ZPInputBufPtr+1
.1 >PUSHW ZPSID
>PUSHWI ZPADDR
>PUSHWI 2 2 bytes
>PUSHWZ From Start
>SYSCALL SListGetData
rts
.9 >PULLA
rts
*--------------------------------------
CORE.ToUpperCase
cmp #'a'
bcc .8
cmp #'z'+1
bcs .8
eor #$20
.8
CORE.ToUpperCase.RTS
rts
*--------------------------------------
CORE.IsAOPSChar ldx #0
.1 cmp ACOS.AOPSChars,x
beq .8
inx
cpx #ACOS.AOPSChars.Cnt
bcc .1
rts
.8 txa
asl
tax
* clc
rts
*--------------------------------------
CORE.IsEndExp cmp #','
beq CORE.ToUpperCase.RTS
cmp #';'
beq CORE.ToUpperCase.RTS
CORE.IsEndInst cmp #':' CS=TRUE
beq .8
cmp #C.CR
beq .8
clc
.8 rts
*---------------------------------------
CORE.IsLetterOrDigit
jsr CORE.IsDigit10
bcc CORE.IsLetterRTS
*---------------------------------------
CORE.IsLetter cmp #'_'
bne .1
clc
rts
.1 cmp #'A'
bcc .9
cmp #'Z'+1
bcc CORE.IsLetterRTS
cmp #'a'
bcc .9
cmp #'z'+1
rts CC if lowercase
.9 sec
CORE.IsLetterRTS
rts
*---------------------------------------
CORE.IsDigit10 cmp #'0'
bcc .9
cmp #'9'+1
rts cc if ok, cs if not
.9 sec
rts
*--------------------------------------
CORE.CheckCharNB
cmp #C.SPACE
beq .9
cmp #C.LF
beq .9
cmp #C.TAB
beq .9
clc
.9 rts
*--------------------------------------
CORE.GetCharNB jsr CORE.GetChar
bcs CORE.GetNextCharNB.RTS
jsr CORE.CheckCharNB
bcc CORE.GetNextCharNB.RTS
*--------------------------------------
CORE.GetNextCharNB
jsr CORE.GetNextChar
bcs CORE.GetNextCharNB.RTS
jsr CORE.CheckCharNB
bcs CORE.GetNextCharNB
CORE.GetNextCharNB.RTS
rts
*--------------------------------------
CORE.SkipLine jsr CORE.GetNextChar
bcs CORE.GetNextCharNB.RTS
cmp #C.CR
bne CORE.SkipLine
*--------------------------------------
CORE.GetNextChar
inc ZPInputBufPtr
bne CORE.GetChar
inc ZPInputBufPtr+1
*--------------------------------------
CORE.GetChar lda (ZPInputBufPtr)
bne .8
lda #MLI.E.EOF
sec
rts
.8 clc
rts
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s.core
LOAD usr/src/bin/acos.s
ASM

148
BIN/ACOS.S.EXP.txt Normal file
View File

@ -0,0 +1,148 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
* In: A = current CHAR
* Out: CC, longint on stack
*--------------------------------------
EXP.Eval ldx #$FF
stx EXP.AOPS1
stx EXP.AOPS2
.10 jsr CORE.IsLetter
bcc .1 FN or VAR
jsr CORE.IsDigit10
bcs .9
jsr EXP.Int32
bcs .99
bra .5
*--------------------------------------
.1 >LDYA L.ACOS.FN
jsr CORE.Lookup
bcs .3
jsr EXP.FNjmpX
bcs .99
bra .5
*--------------------------------------
.3 jsr EXP.VARLookup
bcs .99
>LDYA EXP.ADDR
jsr CODE.PUSHfYA
*--------------------------------------
.5 jsr CORE.GetCharNB
bcs .7
jsr CORE.IsEndExp
bcs .7
jsr CORE.IsAOPSChar + - * /
bcc .6
>LDYA L.ACOS.AOPS MOD
jsr CORE.Lookup
bcs .9
txa
* clc
adc #ACOS.AOPSChars.Cnt*2
tax
lda EXP.AOPS1
bmi .6
cpx EXP.AOPS1
.6 stx EXP.AOPS1
jsr CORE.GetNextCharNB
bcs .9
jmp .10
.7 ldx EXP.AOPS1
bmi .8
jsr EXP.AOPSjmpX
.8 clc
rts
.9 lda #E.CSYN
.99 rts
*--------------------------------------
EXP.FNjmpX jmp (J.ACOS.FN,x)
EXP.AOPSjmpX jmp (J.ACOS.AOPS,x)
*--------------------------------------
EXP.Int32 >PUSHW ZPInputBufPtr
>PUSHWI ZPInputBufPtr
>PUSHBI 10
>SYSCALL StrToL
bcs .9
jsr CODE.PUSHINT32
>POP 4
clc
.9 rts
*--------------------------------------
EXP.VARLookup >LDA.G hVars
>PUSHA
>PUSHA for SListGetData
>PUSHW ZPInputBufPtr
>SYSCALL SListLookup
bcs .9
>PUSHYA ZPSID
txa
* clc
adc ZPInputBufPtr
sta ZPInputBufPtr
bcc .1
inc ZPInputBufPtr+1
.1 >PUSHWI EXP.ADDR
>PUSHWI 2 2 bytes
>PUSHWZ From Start
>SYSCALL SListGetData
rts
.9 >PULLA
rts
*--------------------------------------
EXP.ADD ldx #FPU.ADD32
jmp CODE.FPUCALL
EXP.SUB ldx #FPU.SUB32
jmp CODE.FPUCALL
EXP.MUL ldx #FPU.IMUL32
jmp CODE.FPUCALL
EXP.DIV ldx #FPU.IDIV32
jmp CODE.FPUCALL
EXP.MOD ldx #FPU.IMOD32
jmp CODE.FPUCALL
*--------------------------------------
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s.exp
LOAD usr/src/bin/acos.s
ASM

31
BIN/ACOS.S.FN.txt Normal file
View File

@ -0,0 +1,31 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
FN.BYTE
FN.CLOCK
FN.DATEd
FN.FLAG
FN.CHRd
FN.INSTR
FN.KEY
FN.LEN
FN.LEFTd
FN.MIDd
FN.PDL
FN.PEEK
FN.RANDOM
FN.RIGHTd
FN.RNDd
FN.STRd
FN.TIMEd
FN.VAL
FN.WHENd
FN.WIDTH
clc
rts
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s.fn
LOAD usr/src/bin/acos.s
ASM

183
BIN/ACOS.S.KW.txt Normal file
View File

@ -0,0 +1,183 @@
NEW
AUTO 3,1
.LIST OFF
*--------------------------------------
KW.ADDINT
KW.APPEND
KW.BYTE
KW.CLEAR
KW.CLOCK
KW.CLOSE
KW.COPY
KW.CREATE
KW.ECHO
KW.EDIT
KW.END
KW.FILL
KW.FLAG
KW.FOR
KW.FREE
KW.GET
KW.GOSUB
clc
rts
*--------------------------------------
KW.GOTO jsr CORE.GetNextCharNB
bcs .90
>LDA.G hLabels
jsr CORE.GetAddr
bcs .99
lda #$4C JMP abs
jsr CODE.EmitByte
lda ZPADDR
jsr CODE.EmitByte
lda ZPADDR+1
jsr CODE.EmitByte
clc
rts
.90 lda #E.CSYN
sec
.99 rts
*--------------------------------------
KW.HOME
KW.IF
KW.INFO
KW.INPUT
KW.KILL
KW.LINK
KW.LOG
KW.MARK
KW.MODEM
KW.MOVE
KW.MSG
KW.NEXT
KW.NIBBLE
KW.NOT
KW.ON
KW.NOCAR
KW.OPEN
KW.POKE
KW.POP
KW.POSITION
clc
rts
*--------------------------------------
KW.PRINT stz hOut reset to hStdOut
* ldy #S.PS.hStdOut
* lda (pPS),y
* sta hOut Default to screen
sec
ror bFlag put ending CR
.10 jsr CORE.GetNextCharNB
bcs .8
jsr CORE.IsEndInst
bcs .8
cmp #'"'
bne .5
ldy #0
.1 jsr CORE.GetNextChar
bcs .90
cmp #'"'
beq .2
sta (ZPConstBufPtr),y
iny
bne .1
.2 lda #0
sta (ZPConstBufPtr),y
iny
phy
>LDYA ZPConstBufPtr
jsr CODE.LDYAI
jsr CODE.FPRINTSTR
pla
clc
adc ZPConstBufPtr
sta ZPConstBufPtr
bcc .3
inc ZPConstBufPtr+1
.3 jsr CORE.GetNextCharNB skip "
bra .70
*--------------------------------------
.5 jsr EXP.Eval
bcs .99
jsr CODE.FPRINTL
.7 jsr CORE.GetCharNB
bcs .8
.70 jsr CORE.IsEndInst
bcs .8
cmp #','
bne .71
* TODO : CR ? or not CR ?
bra .10 go skip
.71 cmp #';'
bne .90
* TODO : PRINT ; ? or not ?
jsr CORE.GetNextCharNB skip ;
stz bFlag
.8 bit bFlag
bpl .80
jsr CODE.FPRINTCR
.80 clc
rts
.90 lda #E.CSYN
sec
.99 rts
*--------------------------------------
KW.PUBLIC
KW.PUSH
KW.RAM
KW.RAM2
KW.READ
KW.READY
KW.RETURN
KW.REWIND
KW.RIPCO
KW.SET
KW.SETINT
KW.TEXT
KW.THEN
KW.TONE
KW.UPDATE
KW.USE
KW.WHENd
KW.WRITE
clc
rts
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s.kw
LOAD usr/src/bin/acos.s
ASM

603
BIN/ACOS.S.txt Normal file
View File

@ -0,0 +1,603 @@
NEW
AUTO 3,1
.LIST OFF
.OP 65C02
.OR $2000
.TF bin/acos
*--------------------------------------
CODESEG .EQ 1024
CONSTSEG .EQ 1024
DATASEG .EQ 256
*--------------------------------------
.INB inc/macros.i
.INB inc/a2osx.i
.INB inc/mli.i
.INB inc/mli.e.i
*--------------------------------------
* Zero Page Segment, up to 32 bytes
*--------------------------------------
.DUMMY
.OR ZPBIN
ZS.START
ZPInputBuf .BS 2
ZPInputBufPtr .BS 2
ZPSID .BS 2
ZPADDR .BS 2
ZPPtr1 .BS 2
ZPPtr2 .BS 2
ZPPtr3 .BS 2
hIn .BS 1
hOut .BS 1
ZPCodeBufPtr .BS 2
ZPConstBufPtr .BS 2
ZPDataBufPtr .BS 2
ArgIndex .BS 1
bFlag .BS 1
EXP.ADDR .BS 2
EXP.AOPS1 .BS 1
EXP.AOPS2 .BS 1
EXP.DEPTH .BS 1
.BS 1
ZS.END .ED
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START 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 SegmentSize
.DA #256 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.GREETINGS .DA MSG.GREETINGS
L.MSG.USAGE .DA MSG.USAGE
L.MSG.ECHOCRLF .DA MSG.ECHOCRLF
L.MSG.COMPILING .DA MSG.COMPILING
L.MSG.DEBUG .DA MSG.DEBUG
L.MSG.ERR .DA MSG.ERR
L.MSG.RUN .DA MSG.RUN
L.MSG.STR .DA MSG.STR
L.MSG.INT32 .DA MSG.INT32
*--------------------------------------
L.ACOS.AOPS .DA ACOS.AOPS
J.ACOS.AOPS .DA EXP.ADD
.DA EXP.SUB
.DA EXP.MUL
.DA EXP.DIV
.DA EXP.MOD
L.ACOS.BOPS .DA ACOS.BOPS
L.ACOS.KW .DA ACOS.KW
J.ACOS.KW .DA KW.ADDINT
.DA KW.APPEND
.DA KW.BYTE
.DA KW.CLEAR
.DA KW.CLOCK
.DA KW.CLOSE
.DA KW.COPY
.DA KW.CREATE
.DA KW.ECHO
.DA KW.EDIT
.DA KW.END
.DA KW.FILL
.DA KW.FLAG
.DA KW.FOR
.DA KW.FREE
.DA KW.GET
.DA KW.GOSUB
.DA KW.GOTO
.DA KW.HOME
.DA KW.IF
.DA KW.INFO
.DA KW.INPUT
.DA KW.KILL
.DA KW.LINK
.DA KW.LOG
.DA KW.MARK
.DA KW.MODEM
.DA KW.MOVE
.DA KW.MSG
.DA KW.NEXT
.DA KW.NIBBLE
.DA KW.NOT
.DA KW.ON
.DA KW.NOCAR
.DA KW.OPEN
.DA KW.POKE
.DA KW.POP
.DA KW.POSITION
.DA KW.PRINT
.DA KW.PUBLIC
.DA KW.PUSH
.DA KW.RAM
.DA KW.RAM2
.DA KW.READ
.DA KW.READY
.DA KW.RETURN
.DA KW.REWIND
.DA KW.RIPCO
.DA KW.SET
.DA KW.SETINT
.DA KW.TEXT
.DA KW.THEN
.DA KW.TONE
.DA KW.UPDATE
.DA KW.USE
.DA KW.WHENd
.DA KW.WRITE
*--------------------------------------
L.ACOS.FN .DA ACOS.FN
J.ACOS.FN .DA FN.BYTE
.DA FN.CLOCK
.DA FN.DATEd
.DA FN.FLAG
.DA FN.CHRd
.DA FN.INSTR
.DA FN.KEY
.DA FN.LEN
.DA FN.LEFTd
.DA FN.MIDd
.DA FN.PDL
.DA FN.PEEK
.DA FN.RANDOM
.DA FN.RIGHTd
.DA FN.RNDd
.DA FN.STRd
.DA FN.TIMEd
.DA FN.VAL
.DA FN.WHENd
.DA FN.WIDTH
.DA 0
*--------------------------------------
* Called once at process creation
* Put code for loading LIB here
*--------------------------------------
CS.INIT clc
CS.INIT.RTS rts
*--------------------------------------
* Called until exit with CS
* if RUN exits with CC, RN entered again
*--------------------------------------
CS.RUN >PUSHW L.MSG.GREETINGS
>PUSHW A2osX.KVER
>PUSHBI 2
>SYSCALL PrintF
bcs CS.INIT.RTS
jsr CS.RUN.ARGS
bcs CS.INIT.RTS
jsr CORE.Init
bcs CS.INIT.RTS
>PUSHW L.MSG.COMPILING
>PUSHW ZPPtr2
>PUSHBI 2
>SYSCALL PrintF
bcs CS.INIT.RTS
.1 >SLEEP
>LDA.G bDebug
bpl .2
jsr PrintDebugMsg
.2 >LDA.G bTrace
bpl .3
>LDYA ZPInputBufPtr
jsr PrintTraceMsg
.3 jsr CORE.Compile
bcc .1
cmp #MLI.E.EOF
bne .9
jsr CORE.Run
bcc .8
.9 pha
jsr PrintErrMsg
pla
sec
rts
.8 lda #0 Exit Code = Success
sec
rts
*--------------------------------------
CS.RUN.ARGS inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
bcs .7
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
ldx #OptionVars-OptionList-1
.1 cmp OptionList,x
beq .2
dex
bpl .1
bra .90
.2 ldy OptionVars,x
lda #$ff
sta (pData),y
bra CS.RUN.ARGS
.4 >LDA.G hFileBuf
bne .90
>LDYA ZPPtr1
>STYA ZPPtr2 form printing later
jsr CS.RUN.LoadFile
bcs .9
>STYA ZPInputBuf
>STYA ZPInputBufPtr
txa
>STA.G hFileBuf
bra CS.RUN.ARGS
.7 >LDA.G hFileBuf
beq .90
clc
.9 rts
.90 >PUSHW L.MSG.USAGE
>PUSHBI 0
>SYSCALL PrintF
lda #E.SYN
sec QUIT Process
rts
*--------------------------------------
CS.RUN.LoadFile >SYSCALL LoadTxtFile
bcs .9
phx
txa
>SYSCALL GetMemPtr
plx
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT jsr CORE.Quit
clc
rts
*--------------------------------------
PrintErrMsg >LDA.G hFileBuf
>SYSCALL GetMemPtr
>STYA ZPPtr1
stz ZPPtr2
stz ZPPtr2+1 Line counter
.1 inc ZPPtr2
bne .2
inc ZPPtr2+1
.2 >LDYA ZPPtr1
>STYA ZPPtr3 save line start
.20 lda (ZPPtr1)
beq .4 EoF
inc ZPPtr1
bne .3
inc ZPPtr1+1
.3 cmp #C.CR
bne .20 Scan until EoL
ldx ZPPtr1
cpx ZPInputBufPtr
lda ZPPtr1+1
sbc ZPInputBufPtr+1
bcc .1 not this line....
.4 >LDA.G bTrace
bmi .5
jsr PrintTraceMsg.3
.5 lda ZPPtr3
cmp ZPInputBufPtr
bne .6
lda ZPPtr3+1
cmp ZPInputBufPtr+1
beq .8
.6 >PUSHBI '-'
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL FPutC
inc ZPPtr3
bne .5
inc ZPPtr3+1
bra .5
.8 ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
>PUSHW L.MSG.ERR
>PUSHW ZPPtr2 Line counter
>PUSHBI 2
>SYSCALL FPrintF
rts
*--------------------------------------
PrintDebugMsg >LDYA pStack
>STYA ZPPtr2
>PUSHW L.MSG.DEBUG
>PUSHW ZPPtr2
>PUSHW ZPCodeBufPtr
>PUSHBI 4
>SYSCALL PrintF
rts
*--------------------------------------
PrintTraceMsg >STYA ZPPtr3
PrintTraceMsg.3 >PUSHBI '>'
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL FPutC
ldy #$ff
.1 iny
lda (ZPPtr3),y
beq .8
cmp #C.CR
beq .8
phy
>PUSHA
ldy #S.PS.hStdErr
lda (pPS),y
>SYSCALL FPutC
ply
bra .1
.8 ldy #S.PS.hStdErr
lda (pPS),y
>PUSHA
>PUSHW L.MSG.ECHOCRLF
>PUSHBI 0
>SYSCALL FPrintF
rts
*--------------------------------------
CCODE.PUSHLYA >STYA ZPADDR
ldy #3
.1 lda (ZPADDR),y
>PUSHA
dey
bpl .1
CCODE.PUSHLYA.LEN .EQ *-CCODE.PUSHLYA
*--------------------------------------
CCODE.PULLLYA >STYA ZPADDR
ldy #0
.1 >PULLA
sta (ZPADDR),y
iny
cpy #4
bcc .1
CCODE.PULLLYA.LEN .EQ *-CCODE.PULLLYA
*--------------------------------------
CCODE.PUSHA >PUSHA
CCODE.PUSHA.LEN .EQ *-CCODE.PUSHA
*--------------------------------------
CCODE.PULLA >PULLA
CCODE.PULLA.LEN .EQ *-CCODE.PULLA
*--------------------------------------
CCODE.FPRINTSTR pha
>PUSHW L.MSG.STR
pla
>PUSHA
tya
>PUSHA
>PUSHBI 2
>SYSCALL PrintF
CCODE.FPRINTSTR.LEN .EQ *-CCODE.FPRINTSTR
*--------------------------------------
CCODE.FPRINTL >PUSHW L.MSG.INT32
ldx #4
ldy #5
.1 lda (pStack),y
>PUSHA
dex
bne .1
>PUSHBI 4
>SYSCALL PrintF
>POP 4 Discard long on stack
CCODE.FPRINTL.LEN .EQ *-CCODE.FPRINTL
*--------------------------------------
CCODE.FPRINTCR >PUSHW L.MSG.ECHOCRLF
>PUSHBI 0
>SYSCALL PrintF
CCODE.FPRINTCR.LEN .EQ *-CCODE.FPRINTCR
*--------------------------------------
*--------------------------------------
.INB usr/src/bin/acos.s.code
.INB usr/src/bin/acos.s.core
.INB usr/src/bin/acos.s.exp
.INB usr/src/bin/acos.s.fn
.INB usr/src/bin/acos.s.kw
*--------------------------------------
CS.END
*--------------------------------------
* Initialized DATA
*--------------------------------------
MSG.GREETINGS .AZ "\r\nACOS-Shell %d.%d\r\n\r\n"
MSG.USAGE .AS "Usage : ACOS <option> file\r\n"
.AS " -D : Debug Mode\r\n"
.AS " -T : Trace On"
MSG.ECHOCRLF .AZ "\r\n"
MSG.COMPILING .AZ "Compiling : %s...\r\n"
MSG.DEBUG .AZ "pStack=%H CodePtr=%H\r\n"
MSG.ERR .AZ "-^\r\nLine #%D:"
MSG.RUN .AZ "Success, Code size = %d Bytes\r\nExecuting...\r\n"
MSG.STR .AZ "%s"
MSG.INT32 .AZ "%L"
*--------------------------------------
OptionList .AS "DdTt"
OptionVars .DA #bDebug,#bDebug,#bTrace,#bTrace
*--------------------------------------
ACOS.AOPSChars .AS "+-*/"
ACOS.AOPSChars.Cnt .EQ *-ACOS.AOPSChars
*--------------------------------------
ACOS.AOPS .AT "MOD"
.HS 00
*--------------------------------------
ACOS.BOPS .AT "="
.AT "<>"
.AT "><"
.AT "<"
.AT ">"
.AT "<="
.AT "=<"
.AT ">="
.AT "=>"
.AT "NOT"
.AT "AND"
.AT "OR"
.HS 00
*--------------------------------------
ACOS.KW .AT "ADDINT"
.AT "APPEND"
.AT "BYTE"
.AT "CLEAR"
.AT "CLOCK"
.AT "CLOSE"
.AT "COPY"
.AT "CREATE"
.AT "ECHO"
.AT "EDIT"
.AT "END"
.AT "FILL"
.AT "FLAG"
.AT "FOR"
.AT "FREE"
.AT "GET"
.AT "GOSUB"
.AT "GOTO"
.AT "HOME"
.AT "IF"
.AT "INFO"
.AT "INPUT"
.AT "KILL"
.AT "LINK"
.AT "LOG"
.AT "MARK"
.AT "MODEM"
.AT "MOVE"
.AT "MSG"
.AT "NEXT"
.AT "NIBBLE"
.AT "NOT"
.AT "ON"
.AT "NOCAR"
.AT "OPEN"
.AT "POKE"
.AT "POP"
.AT "POSITION"
.AT "PRINT"
.AT "PUBLIC"
.AT "PUSH"
.AT "RAM"
.AT "RAM2"
.AT "READ"
.AT "READY"
.AT "RETURN"
.AT "REWIND"
.AT "RIPCO"
.AT "SET"
.AT "SETINT"
.AT "TEXT"
.AT "THEN"
.AT "TONE"
.AT "UPDATE"
.AT "USE"
.AT "WHEN$"
.AT "WRITE"
.HS 00
*--------------------------------------
ACOS.FN .AT "BYTE"
.AT "DATE$"
.AT "FLAG"
.AT "CHR$"
.AT "INFO"
.AT "INSTR"
.AT "KEY"
.AT "LEFT$"
.AT "MID$"
.AT "PDL"
.AT "PEEK"
.AT "RANDOM"
.AT "RIGHT$"
.AT "RND$"
.AT "STR$"
.AT "TIME$"
.AT "VAL"
.AT "WHEN$"
.AT "WIDTH"
.HS 00
*--------------------------------------
.DUMMY
.OR 0
DS.START
bDebug .BS 1
bTrace .BS 1
hFileBuf .BS 1
hCodeBuf .BS 1
hConstBuf .BS 1
hDataBuf .BS 1
hLabels .BS 1
hVars .BS 1
DS.END .ED
*--------------------------------------
MAN
SAVE usr/src/bin/acos.s
ASM

View File

@ -409,17 +409,17 @@ CS.RUN.LL.DISKII
jsr CS.RUN.LL.DISKII.V
bcs .99
jsr CS.RUN.MotorOn
* jsr CS.RUN.MotorOn
lda #20
jsr CS.RUN.Wait
* lda #20
* jsr CS.RUN.Wait
.80
>PUSHB DSSS0000
>LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
* >PUSHB DSSS0000
* >LIBCALL hLIBBLKDEV,LIBBLKDEV.D2Recalibrate
lda #20
jsr CS.RUN.Wait
* lda #20
* jsr CS.RUN.Wait
clc
rts

View File

@ -17,7 +17,16 @@ ArgIndex .BS 1
ArgFile .BS 1
ZPPtr1 .BS 2
bFormatStr .BS 1
bAll .BS 1
bAccess .BS 1
bMod .BS 1
bUID .BS 1
bGID .BS 1
bSize .BS 1
bBlocks .BS 1
bCTime .BS 1
bMTime .BS 1
bATime .BS 1
ZS.END .ED
*--------------------------------------
@ -48,12 +57,15 @@ L.MSG.Mod .DA MSG.Mod
L.MSG.UIDGIDSIZE .DA MSG.UIDGIDSIZE
L.FMT.DateTime .DA FMT.DateTime
L.MSG.CMATimes .DA MSG.CMATimes
L.MSG.D .DA MSG.D
L.MSG.U .DA MSG.U
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN
CS.RUN dec bAll
.1 inc ArgIndex
lda ArgIndex
>SYSCALL ArgV
@ -90,20 +102,104 @@ CS.RUN
>SYSCALL Stat
bcs .9
jsr CS.RUN.DUMP
jsr CS.RUN.CONVERT
bit bAll
bmi .7
jsr CS.RUN.PRINT
bcs .9
bra .8
.7 jsr CS.RUN.DUMP
bcs .9
lda #0
.8 lda #0
sec
.9
CS.RUN.RTS rts
*--------------------------------------
CS.RUN.PRINT bit bAccess
bpl .1
>LDYA.G ATTR
>SYSCALL PutS
bcs CS.RUN.RTS
.1 bit bMod
bpl .2
>LDYA.G MOD
>SYSCALL PutS
bcs CS.RUN.RTS
.2 bit bUID
bpl .3
>PUSHW L.MSG.D
>PUSHW.G StatBuf+S.STAT.UID
>PUSHBI 2
>SYSCALL PrintF
.9 bcs CS.RUN.RTS
.3 bit bGID
bpl .4
>PUSHW L.MSG.D
>PUSHW.G StatBuf+S.STAT.GID
>PUSHBI 2
>SYSCALL PrintF
bcs .9
.4 bit bSize
bpl .5
>PUSHW L.MSG.U
>PUSHL.G StatBuf+S.STAT.SIZE
>PUSHBI 4
>SYSCALL PrintF
bcs CS.RUN.PRINT.RTS
.5 bit bBlocks
bpl CS.RUN.PRINT2
>PUSHW L.MSG.U
>PUSHL.G StatBuf+S.STAT.BLOCKS
>PUSHBI 4
>SYSCALL PrintF
bcs CS.RUN.PRINT.RTS
CS.RUN.PRINT2 bit bCTime
bpl .7
>LDYA.G TIME.Create
>SYSCALL PutS
bcs .9
.7 bit bMTime
bpl .8
>LDYA.G TIME.Mod
>SYSCALL PutS
bcs .9
.8 bit bATime
bpl .9
>LDYA.G TIME.Access
>SYSCALL PutS
.9
CS.RUN.PRINT.RTS
rts
*--------------------------------------
CS.RUN.DUMP lda ArgFile
>SYSCALL ArgV
>PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
bcs CS.RUN.RTS
bcs CS.RUN.PRINT.RTS
>STYA ZPPtr1
phx
@ -114,13 +210,11 @@ CS.RUN.DUMP lda ArgFile
pla
>SYSCALL FreeMem
jsr Access2CSTR
>PUSHW L.MSG.Access
>PUSHEA.G ATTR
>PUSHBI 2
>SYSCALL PrintF
jsr Mod2CSTR
>PUSHW L.MSG.Mod
>PUSHEA.G MOD
>PUSHBI 2
@ -134,10 +228,19 @@ CS.RUN.DUMP lda ArgFile
>PUSHBI 12
>SYSCALL PrintF
jsr CS.RUN.PrintAMCTime
>PUSHW L.MSG.CMATimes
>PUSHEA.G TIME.Create
>PUSHEA.G TIME.Mod
>PUSHEA.G TIME.Access
>PUSHBI 6
>SYSCALL PrintF
rts
*--------------------------------------
CS.RUN.CONVERT jsr Access2CSTR
jsr Mod2CSTR
jmp Times2CSTR
*--------------------------------------
Access2CSTR ldy #S.STAT.P.ACCESS
lda (pData),y
@ -208,8 +311,7 @@ Mod2CSTR ldy #S.STAT.MODE+1
rts
*--------------------------------------
CS.RUN.PrintAMCTime
ldy #TIME.Access-1 Set NODATE as default
Times2CSTR ldy #TIME.Access-1 Set NODATE as default
jsr CS.RUN.PrintAMCTime.NODATE
ldy #TIME.Mod-1 Set NODATE as default
jsr CS.RUN.PrintAMCTime.NODATE
@ -240,13 +342,7 @@ CS.RUN.PrintAMCTime
>PUSHEA.G StatBuf+S.STAT.CTIME
>SYSCALL StrFTime
.8 >PUSHW L.MSG.CMATimes
>PUSHEA.G TIME.Create
>PUSHEA.G TIME.Mod
>PUSHEA.G TIME.Access
>PUSHBI 6
>SYSCALL PrintF
rts
.8 rts
*--------------------------------------
CS.RUN.PrintAMCTime.NODATE
ldx #$ff
@ -273,6 +369,7 @@ CS.RUN.CheckOpt ldy #1
.2 cmp OptionList,x
beq .3
dex
bpl .2
@ -283,13 +380,23 @@ CS.RUN.CheckOpt ldy #1
lda #$ff
sta 0,y
stz bAll
clc
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList .AS "Cc"
OptionVars .DA #bFormatStr,#bFormatStr
OptionList .AS "AaMmUuGgSsBbCcMmLl"
OptionVars .DA #bAccess,#bAccess
.DA #bMod,#bMod
.DA #bUID,#bUID
.DA #bGID,#bGID
.DA #bSize,#bSize
.DA #bBlocks,#bBlocks
.DA #bCTime,#bCTime
.DA #bMTime,#bMTime
.DA #bATime,#bATime
ATTRS .AS "DeReBn----InWrRd"
TYPES .AS "-dbclssp"
ACCESS .AS "xwrxwrxwr"
@ -297,7 +404,16 @@ MSG.NODATE .AZ "<No-Date>"
FMT.DateTime .AZ "%d-%b-%y %H:%M:%S"
*--------------------------------------
MSG.USAGE .AS "Usage : STAT File\r\n"
.AZ " -C : Format\r\n"
.AS " -A : Access Flags\r\n"
.AS " -M : Mod Flags\r\n"
.AS " -U : UID\r\n"
.AS " -G : GID\r\n"
.AS " -S : Size in bytes\r\n"
.AS " -B : Size in blocks\r\n"
.AS " -C : Creation date/time\r\n"
.AS " -M : Modification date/time\r\n"
.AZ " -L : Last access date/time\r\n"
*--------------------------------------
MSG.Filename .AZ "Filename : %s\r\n"
MSG.Access .AZ "Access : %s\r\n"
MSG.Mod .AZ "Mod : %s\r\n"
@ -308,6 +424,8 @@ MSG.UIDGIDSIZE .AS "UID : %10D\r\n"
MSG.CMATimes .AS "Created : %s\r\n"
.AS "Modified : %s\r\n"
.AZ "Accessed : %s\r\n"
MSG.D .AZ "%D\r\n"
MSG.U .AZ "%u\r\n"
*--------------------------------------
.DUMMY
.OR 0

View File

@ -1,11 +1,11 @@
NEW
AUTO 3,1
*--------------------------------------
IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 65 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 55 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 15 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 5 ProDOS.FX increment -> until > 128
IO.D2.SeekTimeR .EQ 48 LIBBLKDEV Recalibration
IO.D2.SeekTimeF .EQ 68 LIBBLKDEV Track Formatter
IO.D2.SeekTimeB .EQ 68 LIBBLKDEV Boot Block
IO.D2.SeekTimeP .EQ 48 ProDOS.FX initial
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
*--------------------------------------
IO.D2.Ph0Off .EQ $C080
IO.D2.Ph0On .EQ $C081

View File

@ -332,18 +332,12 @@ BB.Seek lda BB.HdrTrk get track we're on
bit #1
bne .1
and #6
ora BB.Slotn0
tay
lda IO.D2.Ph0On,y we are on 0/4 or 2/4 track
jsr .10 we are on 0/4 or 2/4 track
lda #1
bra .9 no wait, next operation will be phy/plx/Ph0On,y
* bra .90
.1
* cmp BB.TargetQTrack we are on 1/4 or 3/4
.1 cmp BB.TargetQTrack we are on 1/4 or 3/4
bcs .2 if CS, C > T, must move out
@ -355,7 +349,13 @@ BB.Seek lda BB.HdrTrk get track we're on
sta BB.CurrentQTrack
bra .7 Ph ON to go to 0/4 or 2/4, then wait
bra .6 Ph ON to go to 0/4 or 2/4, then wait
*--------------------------------------
.10 and #6
ora BB.Slotn0
tay
lda IO.D2.Ph0On,y
rts
*--------------------------------------
.3 bcs .4 if CS, C > T, must move out
@ -380,30 +380,32 @@ BB.Seek lda BB.HdrTrk get track we're on
inc CC: C < T, ON next PH
* .HS B0 BCS
*.6 dec CS: C > T, ON prev PH
.6
.7 and #6
ora BB.Slotn0
tay
lda IO.D2.Ph0On,y now X and Y on
.6 jsr .10 now X and Y on
.8 lda #IO.D2.SeekTimeB
.9 jsr BB.Wait100usecA ...wait...
.90 lda BB.CurrentQTrack
lda BB.CurrentQTrack
cmp BB.TargetQTrack
bne .3
lda #0
jsr BB.Wait100usecA
lda IO.D2.Ph0Off,x
txa
bit #2
beq .11
phy
plx
tay
.11 lda IO.D2.Ph0Off,x
* ldx BB.Slotn0
* lda IO.D2.RData,x
lda IO.D2.Ph0Off,y
* lda IO.D2.RData,x
*--------------------------------------
BB.Read ldx BB.Slotn0

View File

@ -59,6 +59,8 @@ D2.Recalibrate >PULLB D2.DrvSlt
lda IO.D2.Ph0Off,y
jsr D2.Wait25600usec
clc
.9 rts
*/--------------------------------------
@ -81,12 +83,11 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
bit #1
bne .1
jsr .10 we are on 0/4 or 2/4 track
jsr D2.SeekPhOnY we are on 0/4 or 2/4 track
* lda #1
* bra .9 no wait, next operation will be phy/plx/Ph0On,y
lda #1
bra .9 no wait, next operation will be phy/plx/Ph0On,y
* bra .90
bra .8
.1 cmp D2.TargetQTrack we are on 1/4 or 3/4
@ -113,10 +114,9 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
sta D2.CurrentQTrack
bit #1
bne .5 we must go to 1/4 or 3/4
bne .5
lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : Off Prev Ph
* lda $C0EC
bra .8 go wait....
.5 phy we must go on 1/4 or 3/4
@ -126,29 +126,41 @@ D2.MoveHead.SEI lda D2.CurrentQTrack
inc CC: C < T, ON next PH
.6 jsr .10 now X and Y on
.6 jsr D2.SeekPhOnY now X and Y on
.8 lda #IO.D2.SeekTimeF
.9 jsr D2.Wait100usecA ...wait...
.90 lda D2.CurrentQTrack
lda D2.CurrentQTrack
cmp D2.TargetQTrack
bne .3
pha
jsr D2.Wait25600usec
lda IO.D2.Ph0Off,x
* lda $C0EC
lda IO.D2.Ph0Off,y
* lda $C0EC
pla
lsr
bcc .90
* txa
* bit #2
* beq .11
* phy
* plx
* tay
*.11
sta IO.D2.Ph0Off,x
ldx D2.Slotn0
lda IO.D2.RData,x
.90 sta IO.D2.Ph0Off,y
* lda IO.D2.RData,x
rts
.10 and #6
D2.SeekPhOnY and #6
ora D2.Slotn0
tay
lda IO.D2.Ph0On,y
* lda $C0EC
rts
*/--------------------------------------
* # D2TrkRead16s

View File

@ -357,8 +357,9 @@ D2.TrkWriter.Start
* bne .10 no chance this happens because mem blocks are $FFF0 aligned....
* inc ZPPtr1+1
*.10
.10 cmp #$80 if CC, it is a sync byte
cmp #$80 if CC, it is a sync byte
ora #$80 make sure Bit7 high
sta IO.D2.WriteMode,x (5) goto write mode

View File

@ -699,7 +699,7 @@ svdevn ldy namptr index to 1st byte of this entry.
clc no errors
rts end of block file manager
*--------------------------------------
XDOS.Create jsr lookfile check for duplicate, get free entry
XDOS.Create jsr XDOS.CheckPath check for duplicate, get free entry
bcc duperr error code may be 'file not found'
tstfnf cmp #MLI.E.FNOTFND 'file not found' is ok

View File

@ -16,7 +16,7 @@ XDOS.FindDirOrVol
.99 rts
*--------------------------------------
XDOS.FindFileOrVol
jsr lookfile
jsr XDOS.CheckPath
bcc moventry
cmp #MLI.E.INVPATH
@ -35,11 +35,11 @@ moventry.CLCRTS
clc
rts
*--------------------------------------
XDOS.FindFile jsr lookfile see if file exists
XDOS.FindFile jsr XDOS.CheckPath see if file exists
bcc moventry
rts
*--------------------------------------
lookfile jsr preproot go find volume
XDOS.CheckPath jsr XDOS.FindVol
bcs fnderr.RTS
bne lookfil0 branch if more than root
@ -51,30 +51,30 @@ lookfile jsr preproot go find volume
ldy #$1F move in id and date info
phantm1 lda (zpt),y
.1 lda (zpt),y
sta d_stor,y
dey
cpy #$17
bne phantm1
bne .1
phantm2 lda rootstuf-$10,y
.2 lda rootstuf-$10,y
sta d_stor,y
dey
cpy #$0F
bne phantm2
bne .2
lda #$D0 fake directory file
sta d_stor
lda gbuf+2 check forward link.
ora gbuf+3 if non-zero, assume full sized directory
bne H37C2 else assume it's the slot 3 /RAM volume
bne .3 else assume it's the slot 3 /RAM volume
lda #$02 so reset eof and blocks_used fields
sta d_eof+1
lda #$01
sta d_usage
H37C2 lda #MLI.E.INVPATH bad path (carry set)
.3 lda #MLI.E.INVPATH bad path (carry set)
rts
*--------------------------------------
errdir lda #MLI.E.BADDIR directory error
@ -301,7 +301,7 @@ L38F8 dec cntent checked all entries in this block?
clc carry should always be clear before
bra L38C1 looking at next.
*--------------------------------------
preproot jsr findvol search vcb's and dev's for spec'd volume
XDOS.FindVol jsr XDOS.FindVolInVCBOrDev
bcs novolume
.DO ACL=1
@ -352,7 +352,8 @@ L395F lda pathbuf,y test for end of name.
clc no errors
novolume rts
*--------------------------------------
findvol lda #$00
XDOS.FindVolInVCBOrDev
lda #$00
ldy preflag use prefix volume name to look up vcb.
bit prfxflg is this a prefixed path?
bpl L396F branch if it is
@ -442,6 +443,7 @@ L39E2 ldx DEVCNT scan look list for devices we need
L39E5 lda loklst,x to search for the requested volume.
bne L39F4 branch if we've a device to look at.
dex
bpl L39E5 look at next one.

View File

@ -42,7 +42,7 @@ XDOS.CloseOne jsr flush1 flush file 1st (including updating bitmap)
* bcs L46B6 branch if errors.
bcc close2
php
pha
jsr close2
@ -62,7 +62,7 @@ close2 ldx fcbptr
jsr XDOS.FindVCBForDevNum get vcb pointer.
dec VCBs+VCB.OFCNT,x indicate one less file open.
L46B4 clc
rts
@ -161,9 +161,9 @@ L4723 lda FCBs+FCB.DEVID,x note: this code depends on the defined
.1 .DO LOWERCASE=1
jsr XDOS.ReadGBufAXDir
.ELSE
jsr XDOS.ReadGBufAX read DIR block with file entry in general buffer.
jsr XDOS.ReadGBufAX read DIR block with file entry in general buffer.
.FIN
L4755 jsr entcalc set up pointer to entry.
jsr moventry move entry to temp entry buffer in
@ -173,7 +173,7 @@ L4755 jsr entcalc set up pointer to entry.
sta d_usage
lda FCBs+FCB.UBLK+1,x
sta d_usage+1
ldy #0 and move in end of file mark whether
L476C lda FCBs+FCB.EOF,x needed or not.
@ -420,7 +420,7 @@ L48C2 lda firstbl,x
lda stortyp get possibly modified storage type
jsr XDOS.SetFCBSType
jsr XDOS.ClrFCBStatus make it look as though position has
jsr dvcbrev nothing allocated, update total blocks
ldy fcbptr in fcb and correct position.
@ -495,40 +495,12 @@ XDOS.NewLine ldy #$02 adjust newline status for open file.
*--------------------------------------
XDOS.GetFileInfo
jsr XDOS.FindFile look for file.
bcc L4988 no error.
bcc .1 no error.
cmp #MLI.E.INVPATH was it a root directory file ?
sec (in case of no match)
bne L49A4 if not, then error.
jsr XDOS.GetFileInfoVol
bcs .9
lda #$F0
sta d_stor for get info, report proper storage type
stz reql force a count of free blocks.
stz reqh
ldx vcbptr
jsr tkfrecnt get a fresh count of free blocks on
ldx vcbptr this volume.
lda VCBs+VCB.FBLK+1,x return total blocks and total in use.
sta reqh 1st transfer 'free' blocks to zpage
lda VCBs+VCB.FBLK,x for later subtraction to determine
sta reql the 'used' count.
lda VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id
sta d_auxid+1 (total block count is considered aux id
pha for the volume)
lda VCBs+VCB.TBLK,x
sta d_auxid
sec subtract and report the number of
sbc reql blocks 'in use'
sta d_usage
pla
sbc reqh
sta d_usage+1
L4988 lda d_stor transfer bytes from internal order to
.1 lda d_stor transfer bytes from internal order to
lsr call spec via 'inftabl' translation
lsr table but first change storage type to
lsr external (low nibble) format.
@ -537,27 +509,29 @@ L4988 lda d_stor transfer bytes from internal order to
ldy #$11 index to last of user's spec table.
L4994 lda inftabl-3,y
.2 lda inftabl-3,y
and #$7F strip bit used by setinfo
tax
lda d_stor,x move directory info to call spec. table
sta (A3L),y
dey
cpy #$03
bcs L4994 if all info bytes moved, retn carry clr
bcs .2 if all info bytes moved, retn carry clr
L49A4 rts
* clc
.9 rts
*--------------------------------------
XDOS.SetFileInfo
jsr XDOS.FindFile get the file to work on.
bcs L49CF if error.
lda bubit see if backup bit can be cleared
eor #$20
and d_attr
and #$20
sta bkbitflg or preserve current...
ldy #$0D init pointer to user supplied list.
L49B9 ldx inftabl-3,y get index to corresponding 'd.' table.
@ -585,35 +559,38 @@ L49D0 ldy #$0B
*--------------------------------------
XDOS.SetFileInfoEx
jsr XDOS.FindFile
bcs L49A4
bcs XDOS.GetFileInfoEx.RTS
ldx #S.FIEX.BLKPTR+2-1
ldy #S.FIEX.BLKPTR+2-1+3
.2 lda (A3L),y
sta d_stor,x
dey
dex
bpl .2
XDOS.SetFileInfoEx.8
XDOS.SetFileInfoEx.8
jmp drevise1
*--------------------------------------
XDOS.GetFileInfoEx
jsr XDOS.FindFileOrVol
jsr XDOS.FindFile
bcc .1
jsr XDOS.GetFileInfoVol
bcs .9
ldx #S.FIEX.BLKPTR+2-1
.1 ldx #S.FIEX.BLKPTR+2-1
ldy #S.FIEX.BLKPTR+2-1+3
.2 lda d_stor,x
sta (A3L),y
dey
dex
bpl .2
ldx #7
ldy #S.FIEX.ACL+7+3
.3 lda h_acl,x
sta (A3L),y
dey
@ -621,6 +598,44 @@ XDOS.GetFileInfoEx
bpl .3
* clc
.9
XDOS.GetFileInfoEx.RTS
rts
*--------------------------------------
XDOS.GetFileInfoVol
cmp #MLI.E.INVPATH was it a root directory file ?
sec (in case of no match)
bne .9 if not, then error.
lda #$F0
sta d_stor for get info, report proper storage type
stz reql force a count of free blocks.
stz reqh
ldx vcbptr
jsr tkfrecnt get a fresh count of free blocks on
ldx vcbptr this volume.
lda VCBs+VCB.FBLK+1,x return total blocks and total in use.
sta reqh 1st transfer 'free' blocks to zpage
lda VCBs+VCB.FBLK,x for later subtraction to determine
sta reql the 'used' count.
lda VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id
sta d_auxid+1 (total block count is considered aux id
pha for the volume)
lda VCBs+VCB.TBLK,x
sta d_auxid
sec subtract and report the number of
sbc reql blocks 'in use'
sta d_usage
pla
sbc reqh
sta d_usage+1
clc
.9 rts
*--------------------------------------
XDOS.ACL jsr XDOS.FindDirOrVol
@ -642,7 +657,7 @@ XDOS.ACL jsr XDOS.FindDirOrVol
dey
dex
bpl .1
.DO LOWERCASE=1
jmp XDOS.WriteGBufDir
.ELSE
@ -650,7 +665,7 @@ XDOS.ACL jsr XDOS.FindDirOrVol
.FIN
.2 ldy #S.FIEX.ACL+7+3
.3 lda gbuf+$14,x
sta (A3L),y
dey
@ -660,7 +675,7 @@ XDOS.ACL jsr XDOS.FindDirOrVol
* clc
.9 rts
*--------------------------------------
XDOS.Rename jsr lookfile look for source (original) file.
XDOS.Rename jsr XDOS.CheckPath look for source (original) file.
bcc XDOS.RenameFileDir if found.
cmp #$40 trying to rename a volume ?
@ -693,7 +708,7 @@ L49FF ldy #0 get newname's length
.1 lda pathbuf,y move new name to vcb.
beq .8
sta VCBs,x
iny next character
inx
@ -759,7 +774,7 @@ L4A72 lda #MLI.E.INVPATH bad pathname error.
L4A74 sec
rts
L4A76 jsr lookfile test for duplicate file name.
L4A76 jsr XDOS.CheckPath test for duplicate file name.
bcs L4A7F branch if file not found, which is ok !!
lda #MLI.E.DUPFILE duplicate name error.

View File

@ -52,8 +52,7 @@ XRW.START cld $D8 to flag language card bank 1 (main)
lda XRW.montimeh
bne .1
*--------------------------------------
XRW.Blk2TS
lda bloknml
XRW.Blk2TS lda bloknml
sta XRW.ReqTrack
and #7
@ -73,28 +72,6 @@ XRW.Blk2TS
ror XRW.ReqTrack
dex
bne .1
* lda bloknml
* ldx bloknml+1
* stx XRW.ReqTrack calculate block's track and sector.
* ldy #$05
*.1 asl
* rol XRW.ReqTrack
* dey
* bne .1
* asl
* bcc .2
* ora #$10 adjust for upper 4 bits of track
*.2 lsr
* lsr
* lsr
* lsr
* sta XRW.ReqSector
*--------------------------------------
ldx A2L
jsr XRW.ReadMode
@ -422,7 +399,7 @@ XRW.Write bit IO.D2.ReadProt,x (4) PREWRITE MODE
bit IO.D2.ReadMode,x (4)
lda #$FF (2)
* nop (2)
nop (2)
sta IO.D2.WriteMode,x (5) goto write mode
ora IO.D2.WShift,x (4)
@ -557,12 +534,12 @@ wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib
bmi .2 (3)
.2 nop (2)
lda #$FF (2)
tya (2) Y = $FF from DEY BMI
jsr wnibl (6+9,6) write turn off byte.
jsr XRW.Write.RTS (12)
jsr XRW.Write.RTS (12)
nop (2)
* jsr XRW.Write.RTS (12)
* jsr XRW.Write.RTS (12)
* nop (2)
XRW.ReadMode lda IO.D2.ReadMode,x (4) out of write mode
lda IO.D2.WShift,x (4) to read mode.
@ -740,7 +717,7 @@ XRW.TrackSelect lda #2
rol A = 0/2
ora A2L
tay x = n0/n2
tay y = n0/n2
lda IO.D2.Ph0On,y
lda IO.D2.Ph0On+4,y
@ -766,12 +743,11 @@ XRW.TrackSelect lda #2
bne .7
.6 lda XRW.SeekTime
bmi .7 seektime already > 128
clc
adc #IO.D2.SeekTimeI
sta XRW.SeekTime
bmi .7 seektime > 128
sta XRW.SeekTime
sta XRW.D2SeekTime-1,x
.7 ldy XRW.D2Trk-1,x From actual Pos...
@ -780,7 +756,22 @@ XRW.TrackSelect lda #2
bra .3
.8 clc
.8
* jsr XRW.Trk2Qtrk
* pha
* jsr XRW.SeekPhOnY
* pla
* phy
* plx
* inc
* jsr XRW.SeekPhOnY
* lda #50
* jsr XRW.Wait100usecA
* jsr XRW.SeekPhOff
clc
XRW.TrackSelect.RTS
rts
*--------------------------------------
@ -804,20 +795,14 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
jsr XRW.Trk2Qtrk
sta XRW.CurrentQTrack
* cmp XRW.TargetQTrack
* bcs .88
* >DEBUG
*.88
bit #1 A = Current QT
bne .1
jsr .10 we are on 0/4 or 2/4 track : PhY on
jsr XRW.SeekPhOnY we are on 0/4 or 2/4 track : PhY on
* lda #1
* bra .9 no wait, next operation will be phy/plx/Ph0On,y
bra .90
bra .8
.1 cmp XRW.TargetQTrack we are on 1/4 or 3/4
@ -844,10 +829,9 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
sta XRW.CurrentQTrack
bit #1
bne .5 we must go to 1/4 or 3/4
bne .5
lda IO.D2.Ph0Off,x we must go to 0/4 or 2/4 : PhX Off
* lda $C0EC
bra .8 go wait....
.5 phy we must go on 1/4 or 3/4
@ -857,30 +841,43 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end
inc CC: C < T, ON next PH
.6 jsr .10 now X and Y on
.6 jsr XRW.SeekPhOnY now X and Y on
.8 lda XRW.SeekTime
.9 jsr XRW.Wait100usecA ...wait...
.90 lda XRW.CurrentQTrack
lda XRW.CurrentQTrack
cmp XRW.TargetQTrack
bne .3
pha
jsr XRW.Wait25600usec
pla
lsr
bcc .90
*XRW.SeekPhOff
* txa
* bit #2
* beq .11
* phy
* plx
* tay
*.11
sta IO.D2.Ph0Off,x
ldx A2L
lda IO.D2.RData,x
.90 sta IO.D2.Ph0Off,y
* lda IO.D2.RData,x
lda IO.D2.Ph0Off,x
* lda $C0EC
lda IO.D2.Ph0Off,y
* lda $C0EC
clc Exit wit CC (recalibrate)
rts
.10 and #6
XRW.SeekPhOnY and #6
ora A2L
tay
lda IO.D2.Ph0On,y
* lda $C0EC
rts
*--------------------------------------
* A = 0 -> 159, X = XRW.UnitIndex

View File

@ -247,28 +247,49 @@ FS.Stat.FX >MLICALL MLIGETFILEINFOEX
*--------------------------------------
FS.DirEnt2Stat jsr FS.ClrStat
lda (ZPPtr3)
and #$F0
cmp #$D0 Vol Hdr, Dir Hdr or Dir ?
bcc .1
ldx #FS.DirEnt.Cnt
lda /S.STAT.MODE.DIR
sta K.S.STAT+S.STAT.MODE+1
.1 ldx #FS.DirEnt.Cnt
.2 ldy FS.DirEnt.Src-1,x
.1 ldy FS.DirEnt.Src-1,x
lda (ZPPtr3),y
ldy FS.Stat.Dst-1,x
sta K.S.STAT,y
dex
bne .2
bne .1
ldy #S.FIEX.ACCESS
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.P.ACCESS
ldy #S.FIEX.ACL
lda (ZPPtr3)
and #$F0
cmp #$D0 Dir Hdr or Dir ?
bcc .3
cmp #$F0 Vol Hdr ?
bne .2
stz K.S.STAT+S.STAT.SIZE
ldy #S.FIEX.AUXTYPE
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.BLOCKS
asl
sta K.S.STAT+S.STAT.SIZE+1
iny
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.BLOCKS+1
rol
sta K.S.STAT+S.STAT.SIZE+2
lda #0
rol K.S.STAT+S.STAT.SIZE+3
.2 lda /S.STAT.MODE.DIR
tsb K.S.STAT+S.STAT.MODE+1
.3 ldy #S.FIEX.ACL
lda (ZPPtr3),y
cmp #$57
bne .7
@ -294,18 +315,7 @@ FS.DirEnt2Stat jsr FS.ClrStat
lda #S.FIEX.MTIME
ldx #K.S.STAT+S.STAT.MTIME
jmp FS.PTime2StatAX
*--------------------------------------
FS.ClrStat ldx #S.STAT-1
.1 stz K.S.STAT,x
dex
bpl .1
lda A2osX.FSID
sta K.S.STAT+S.STAT.FSID
rts
* jmp FS.PTime2StatAX
*--------------------------------------
FS.PTime2StatAX clc
adc ZPPtr3
@ -324,6 +334,17 @@ FS.PTime2StatYAX
rts
*--------------------------------------
FS.ClrStat ldx #S.STAT-1
.1 stz K.S.STAT,x
dex
bpl .1
lda A2osX.FSID
sta K.S.STAT+S.STAT.FSID
rts
*--------------------------------------
FS.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1
.DA #S.FI.UBLKS,#S.FI.UBLKS+1
FS.GFI.Cnt .EQ *-FS.GFI.Src