Kernel 0.92

This commit is contained in:
Rémy GIBERT 2018-11-16 17:04:20 +01:00
parent 9ec26b7120
commit dce5b027b7
7 changed files with 158 additions and 161 deletions

Binary file not shown.

View File

@ -15,8 +15,7 @@ AUTO 4,1
* A = EC
*\--------------------------------------
K.OpenDir jsr PFT.CheckPathYA
>STYA ZPPtr2
jsr STDIO.SetMLIPathYA For GETFILEINFO,MLIOPEN
bcs .99
>LDYAI S.FD.DIR
jsr K.GetMem0
@ -87,7 +86,7 @@ K.ReadDir.EPB .BS 1
K.ReadDir.EC .BS 2
*--------------------------------------
K.ReadDir jsr PFT.CheckNodeA
jsr STDIO.GetHFile
bcs K.ReadDir.RTS
ldy #S.FD.DIR.REF
lda (pFD),y
@ -97,7 +96,7 @@ K.ReadDir jsr PFT.CheckNodeA
K.ReadDir.NoMore
lda #0
sec CS,A=0 no more entry
rts
K.ReadDir.RTS rts
*--------------------------------------
K.ReadDir.ROOT
ldy #S.FD.DIR.FC did we already returned something ?

View File

@ -31,7 +31,7 @@ K.LoadTxtFile pha
*\--------------------------------------
K.LoadFile clc
ror FIO.bTXT
>DEBUG
jsr K.FOpen
bcc .12
rts
@ -41,7 +41,6 @@ K.LoadFile clc
pha
>PUSHWI K.S.Stat
pla
jsr K.FStat
bcs .11
@ -124,7 +123,8 @@ FIO.Mem .BS 2
* ## RETURN VALUE
*\--------------------------------------
K.ChTyp jsr PFT.CheckPathYA
jsr STDIO.SetMLIPathYA
bcs .99
>PULLB .1+1
>MLICALL MLIGETFILEINFO
bcs .9
@ -133,6 +133,8 @@ K.ChTyp jsr PFT.CheckPathYA
sta K.MLI.PARAMS+S.FI.T
>MLICALL MLISETFILEINFO
.9 rts
.99 >RET 1 discard filetype
*/--------------------------------------
* # ChMod
* **In:**

View File

@ -18,19 +18,14 @@ K.Open.FLAGS .BS 1
K.Open.TYPE .BS 1
K.Open.AUXTYPE .BS 2
*--------------------------------------
K.Open pha
>PULLB K.Open.FLAGS
K.Open >PULLB K.Open.FLAGS
lda #S.FI.T.TXT
sta K.Open.TYPE
stz K.Open.AUXTYPE
stz K.Open.AUXTYPE+1
pla
IO.Open.I jsr STDIO.SetMLIPathYA
ldx #5 $/DEV/
IO.Open.I ldx #5 $/DEV/
cpx K.MLI.PATH
bcs IO.OPEN.REG

View File

@ -23,79 +23,119 @@ K.PFTRemove
* Y,A = PATH (C-String)
* Out :
*--------------------------------------
PFT.CheckPathYA >STYA ZPPtr1
PFT.CheckPathYA stx .71+1 Save SYSCALL #
jsr K.realpath.I realpath in K.Buf256
bcs .9
>LDYAI Flt.Table
>STYA ZPPtr2
>STYA ZPPtr1
.1 lda (ZPPtr2) Get Filter char....
beq .9 End Of Table, Exit
.1 lda (ZPPtr1) Get Filter char....
beq PFT.YAToMLIPATH
ldy #0
.2 lda (ZPPtr2),y
.2 lda (ZPPtr1),y
beq .3 end of filter string....
lda (ZPPtr1),y
lda K.Buf256,y
beq .8
cmp (ZPPtr2),y
cmp (ZPPtr1),y
bne .8
iny
bne .2
.3 lda (ZPPtr1),y
.3 lda K.Buf256,y
cmp #'/'
bne .8
ldy #S.PFT.HANDLER
lda (ZPPtr2),y get hLib
lda (ZPPtr1),y get hLib
jsr K.GetMemPtr
>STYA .7+1
>STYA .72+1
pla discard JSR return @
pla
>LDYA ZPPtr1 restore passed params
.7 jmp $ffff X unmodified
>LDYAI K.Buf256 pass full path to handler
.71 ldx #$ff SELF MODIFIED SYSCALL #
.72 jmp $ffff
.9 rts
.8 lda ZPPtr2
.8 lda ZPPtr1
clc
adc (ZPPtr2) Add STR len
adc (ZPPtr1) Add STR len
adc #S.PFT
sta ZPPtr2
sta ZPPtr1
bcc .1
>LDYAI K.Buf256
*--------------------------------------
PFT.YAToMLIPATH >STYA .1+1
.9 >LDYA ZPPtr1 restore passed params
ldx #0 no filter, prodos path
.1 lda $ffff,x SELF MODIFIED
beq .2
inx
sta K.MLI.PATH,x
cpx #MLI.MAXPATH
bne .1
.2 stx K.MLI.PATH
inx
stz K.MLI.PATH,x Make ending 0 for /dev/xxx path
>LDYAI K.MLI.PATH
>STYA K.MLI.PARAMS+1
clc
rts
*--------------------------------------
* PFT.CheckNodeA
* In :
* PULLB/A = hFILE/hDIR
* A = hFILE
* Out :
*--------------------------------------
PFT.CheckNodeA rts
PFT.CheckNodeA stx .80+1 Save SYSCALL #
sta .81+1 Save hFILE
sta .9+1 save hFILE
jsr K.GetMemPtr X = unmodified
>STYA ZPPtr1
tax
lda Nod.Table.hFD,x
beq .9
jsr K.GetMemPtr
>STYA pFD
ldy #S.FD.HANDLER
lda (ZPPtr1),y
beq .9 Handler is 0, back to kernel....
lda (pFD),y
beq .8 Handler is 0, back to kernel....
jsr K.GetMemPtr
>STYA .1+1
pla discard JSR return @
pla
lda .9+1 restore passed hFILE
ldx .80+1 restore SYSCALL #
lda .81+1 restore passed hFILE
.1 jmp $ffff
.8 lda (pFD) #S.FD.T
bne .80
.9 lda #$ff Self Modified
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
.80 ldx #$ff SELF MODIFIED
.81 lda #$ff SELF MODIFIED
clc
rts
.9 lda #E.INVH
sec
rts
*--------------------------------------
MAN

View File

@ -14,17 +14,24 @@ AUTO 4,1
* ## RETURN VALUE
*--------------------------------------
K.FStat jsr PFT.CheckNodeA
jsr STDIO.GetHFile
bcs .9
bcs K.FStat.9
tax
lda Nod.Table.hPath,x
jsr K.GetMemPtr
jsr K.Stat.I
jsr PFT.YAToMLIPATH
jsr K.Stat.I
bcs K.Stat.9
jsr STDIO.GetHFileREG.I
bcs K.Stat.BLK2SIZE
lda (pFD) #S.FD.T
bne K.Stat.BLK2SIZE
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
>MLICALL MLIGETEOF
bcs K.Stat.BLK2SIZE
@ -43,7 +50,7 @@ K.FStat jsr PFT.CheckNodeA
* clc
rts
.9 >RET 2 discard statbuf
K.FStat.9 >RET 2 discard statbuf
*/--------------------------------------
* # Stat
* Return information about a file
@ -57,6 +64,8 @@ K.FStat jsr PFT.CheckNodeA
* ## RETURN VALUE
*\--------------------------------------
K.Stat jsr PFT.CheckPathYA
bcs K.FStat.9 go discard statbuf
jsr K.Stat.I
bcs K.Stat.9
K.Stat.BLK2SIZE
@ -85,9 +94,7 @@ K.Stat.BLK2SIZE
* clc
K.Stat.9 rts
K.Stat.I jsr STDIO.SetMLIPathYA
>PULLW ZPPtr1
K.Stat.I >PULLW ZPPtr1 Get StatBuf
>MLICALL MLIGETFILEINFO
bcs .9
@ -140,13 +147,9 @@ K.Stat.DST .DA #S.STAT.P.TYPE
* CS : error
* A = EC
*\-------------------------------------
K.MKDir jsr K.realpath.I
K.MKDir jsr PFT.CheckPathYA
bcs K.MKDir.RTS
>LDYAI K.Buf256
jsr PFT.CheckPathYA
jsr STDIO.SetMLIPathYA
lda #S.FI.A.FULL
sta K.MLI.PARAMS+S.FI.A
lda #S.FI.T.DIR

View File

@ -12,6 +12,22 @@ K.PrintF.PadL .EQ FAC+4
K.PrintF.PadC .EQ FAC+5
BCDBUF .EQ ARG
*/--------------------------------------
* # PutChar
* Print A (char) to StdOut
* ## C
* `int putchar ( int character );`
* ## ASM
* **In:**
* `lda caracter`
* `>SYSCALL putchar`
* ## RETURN VALUE
* CC = success
*\--------------------------------------
K.PutChar >PUSHA
ldy #S.PS.hStdOut
lda (pPs),y
*/--------------------------------------
* # FPutC
* Print A (char) to hFILE
* ## C
@ -24,36 +40,19 @@ BCDBUF .EQ ARG
* ## RETURN VALUE
* CC = success
*\--------------------------------------
K.FPutC pha
>PULLB K.IOBuf
pla
bra K.PutChar.1
*/--------------------------------------
* # PutChar
* Print A (char) to StdOut
* ## C
* `int putchar ( int character );`
* ## ASM
* **In:**
* `lda caracter`
* `>SYSCALL putchar`
* ## RETURN VALUE
* CC = success
*\--------------------------------------
K.PutChar sta K.IOBuf
ldy #S.PS.hStdOut
lda (pPs),y
K.FPutC jsr PFT.CheckNodeA
bcs K.FPutC.9
K.PutChar.1 jsr STDIO.GetHFile
bcs K.PutS.RTS
>PULLB K.IOBuf
ldy #1
K.PutChar.Y lda #0
K.FPutC.Y lda #0
>PUSHYA
>PUSHWI K.IOBuf
jmp IO.Write.I
K.FPutC.9 >RET 1
*/--------------------------------------
* # PutS
* Write Str to StdOut, appends '\r\n'
@ -70,6 +69,7 @@ K.PutS >PUSHYA
ldy #S.PS.hStdOut
lda (pPs),y
jsr K.FPutS
bcs K.PutS.RTS
@ -79,7 +79,7 @@ K.PutS >PUSHYA
sta K.IOBuf+1
ldy #2
bra K.PutChar.Y
bra K.FPutC.Y
K.PutS.RTS rts
*/--------------------------------------
@ -95,8 +95,8 @@ K.PutS.RTS rts
* ## RETURN VALUE
* CC = success
*\--------------------------------------
K.FPutS jsr STDIO.GetHFile
bcs K.PutS.RTS
K.FPutS jsr PFT.CheckNodeA
bcs .9
>PULLYA Get String
>STYA ZPPtr2 Save Buffer
@ -104,13 +104,14 @@ K.FPutS jsr STDIO.GetHFile
>PUSHYA push len
>PUSHW ZPPtr2 push buffer
jmp IO.Write.I
.9 >RET 2
*/--------------------------------------
* # PrintF/SPrintF/FPrintF
* Prints C-Style String
* ## C
* `int printf ( const char * format, ... );`
* `int sprintf ( char * str, const char * format, ... );`
* `int fprintf ( hFILE stream, const char * format, ... );`
* `int sprintf ( char * str, const char * format, ... );`
* ## ASM
* **In:**
* PrintF : (example is for printing Y,A as integer : format="%I", 2 bytes)
@ -182,8 +183,7 @@ K.PrintF >STYA ZPPtr1 format
ldy #S.PS.hStdOut
lda (pPs),y
K.PrintF.0 jsr STDIO.GetHFile
bcs K.PutS.RTS
K.PrintF.0 sta PrintF.Flush.DEV+1
>LDYAI K.IOBuf
>STYA pIOBuf
@ -666,7 +666,12 @@ PrintF.COut phy
*--------------------------------------
PrintF.Flush >PUSHW PrintF.Cnt
>PUSHWI K.IOBuf
PrintF.Flush.DEV
lda #$ff SELF MODIFIED
jsr PFT.CheckNodeA
bcs .9
jmp IO.Write.I
.9 >RET 4
*--------------------------------------
PrintF.Cnt .BS 2
*/--------------------------------------
@ -687,7 +692,8 @@ PrintF.Cnt .BS 2
* Y,A: s
* CC = success
*\--------------------------------------
K.FGetS pha save hFILE
K.FGetS jsr PFT.CheckNodeA
bcs .90
>PULLW ZPPtr1 s
@ -701,10 +707,6 @@ K.FGetS pha save hFILE
eor #$ff
sta ZPPtr2+1 !n
pla
jsr STDIO.GetHFile
bcs .99
jsr K.GetC.I
bcs .9
@ -732,6 +734,8 @@ K.FGetS pha save hFILE
sta (ZPPtr1)
pla
.99 rts
.90 >RET 4
*/--------------------------------------
* # GetChar
* Get char from StdIn
@ -759,7 +763,7 @@ K.GetChar ldy #S.PS.hStdIn
* CC = success
* A = char
*\--------------------------------------
K.GetC jsr STDIO.GetHFile
K.GetC jsr PFT.CheckNodeA
bcs K.GetC.9
K.GetC.I >PUSHWI 1
@ -970,36 +974,33 @@ K.SScanF.Fwd tya Y=char count parsed
* CC : A = hFILE
* CS : A = EC
*\--------------------------------------
K.FOpen jsr K.realpath.I
bcc .1
>RET 4
.1 >LDYAI K.Buf256
jsr PFT.CheckPathYA
K.FOpen jsr PFT.CheckPathYA
bcs .99
>PULLB K.Open.FLAGS
>PULLB K.Open.TYPE
>PULLW K.Open.AUXTYPE
>LDYAI K.Buf256
jsr IO.Open.I
bcs K.FOpen.RTS
bcs .9
sta .2+1 save hFD
sta .1+1 save hFD
tax
>LDYAI K.Buf256
jsr STDIO.NewHFileYAX
bcc K.FOpen.RTS
bcc .9
pha save MLI error
.2 lda #$ff SELF MODIFIED
.1 lda #$ff SELF MODIFIED
jsr K.Close
pla get back MLI error
sec
K.FOpen.RTS rts
.9 rts
.99 >RET 4
*/--------------------------------------
* # FClose
* Close a file
@ -1042,8 +1043,7 @@ K.FClose.RTS rts
* Y,A = Bytes Read
*\--------------------------------------
K.FRead jsr PFT.CheckNodeA
jsr STDIO.GetHFile
bcs K.FClose.RTS
bcs K.Write.9
jmp IO.Read.I
*/--------------------------------------
@ -1061,10 +1061,10 @@ K.FRead jsr PFT.CheckNodeA
* Y,A = Bytes Written
*\--------------------------------------
K.FWrite jsr PFT.CheckNodeA
jsr STDIO.GetHFile
bcs K.FClose.RTS
bcs K.Write.9
jmp IO.Write.I
K.Write.9 >RET 4
*/--------------------------------------
* # FFlush
* ## C
@ -1075,7 +1075,6 @@ K.FWrite jsr PFT.CheckNodeA
* `>SYSCALL fflush`
*\--------------------------------------
K.FFlush jsr PFT.CheckNodeA
jsr STDIO.GetHFileREG
bcs .9
>MLICALL MLIFLUSH
.9 rts
@ -1092,10 +1091,11 @@ K.FFlush jsr PFT.CheckNodeA
* `>SYSCALL fseek`
*\-------------------------------------
K.FSeek jsr PFT.CheckNodeA
jsr STDIO.GetHFileREG
bcs .9
bcc .11
>RET 6
>PULLA whence
.11 >PULLA whence
tax
>PULLW ZPPtr1 offset LW
>PULLW ZPPtr2 offset HW
@ -1167,7 +1167,6 @@ K.FSeek jsr PFT.CheckNodeA
* CS :
*\--------------------------------------
K.FEOF jsr PFT.CheckNodeA
jsr STDIO.GetHFileREG
bcs .9
>MLICALL MLIGETMARK
@ -1208,7 +1207,7 @@ K.FEOF.MARK .BS 3
* On stack (long)
*\--------------------------------------
K.FTell jsr PFT.CheckNodeA
jsr STDIO.GetHFileREG
bcs .9
>MLICALL MLIGETMARK
bcs .9
@ -1235,9 +1234,10 @@ K.FTell jsr PFT.CheckNodeA
* ## RETURN VALUE
*\--------------------------------------
K.Remove jsr PFT.CheckPathYA
jsr STDIO.SetMLIPathYA
bcs .9
>MLICALL MLIDESTROY
rts
.9 rts
*/--------------------------------------
* # Rename
* Rename a file
@ -1251,7 +1251,8 @@ K.Remove jsr PFT.CheckPathYA
* ## RETURN VALUE
*\--------------------------------------
K.Rename jsr PFT.CheckPathYA
jsr STDIO.SetMLIPathYA
bcs .9
>PULLW .1+1
ldy #0
@ -1269,6 +1270,8 @@ K.Rename jsr PFT.CheckPathYA
>MLICALL MLIRENAME
rts
.9 >RET 2
*--------------------------------------
* Y,A = filepath
* X = hFD
@ -1307,51 +1310,6 @@ STDIO.NewHFileYAX
clc
.9 rts
*--------------------------------------
STDIO.GetHFileREG
jsr STDIO.GetHFile
bcs STDIO.GetHFileREG.9
STDIO.GetHFileREG.I
lda (pFD) #S.FD.T
bne STDIO.GetHFile.9
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
STDIO.GetHFileREG.9
rts
*--------------------------------------
STDIO.GetHFile tay
lda Nod.Table.hFD,y
beq STDIO.GetHFile.9
jsr K.GetMemPtr
>STYA pFD
rts
STDIO.GetHFile.9
lda #E.INVH
sec
rts
*--------------------------------------
STDIO.SetMLIPathYA
>STYA .1+1
ldx #0
.1 lda $ffff,x Self Modified
beq .8
inx
sta K.MLI.PATH,x
cpx #MLI.MAXPATH
bne .1
.8 stx K.MLI.PATH
inx
stz K.MLI.PATH,x Make ending 0 for /dev/xxx path
>LDYAI K.MLI.PATH
>STYA K.MLI.PARAMS+1
rts
*--------------------------------------
STDIO.SetIOBUF >LDYAI 1024 get a ProDOS IOBUF
ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE