Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-10-03 17:25:03 +02:00
parent 2db77dc027
commit e9e8508c2e
7 changed files with 160 additions and 115 deletions

Binary file not shown.

Binary file not shown.

View File

@ -253,6 +253,7 @@ SYS.GuiOSD.JMP .EQ $E200
*-------------------------------------- *--------------------------------------
K.E.OOM .EQ $FF Out Of Memory Error K.E.OOM .EQ $FF Out Of Memory Error
K.E.OOH .EQ $FE Out Of Handle Error K.E.OOH .EQ $FE Out Of Handle Error
K.E.INVH .EQ $FD Invalid Handle
*-------------------------------------- *--------------------------------------
K.E.NSP .EQ $DD No Such Process Error K.E.NSP .EQ $DD No Such Process Error
*-------------------------------------- *--------------------------------------

View File

@ -113,8 +113,9 @@ Kernel.Init3 sta SETALTZP
jsr PS0.Init jsr PS0.Init
>PUSHBI 0
>LDYAI MSG.Init3 >LDYAI MSG.Init3
>SYSCALL puts >SYSCALL printf
jsr CPU.Init.6502 jsr CPU.Init.6502
jsr CPU.Init.Z80 jsr CPU.Init.Z80
@ -1004,7 +1005,8 @@ MSG.KCREAD.KO .AZ "\nError While Reading Kernel Config File, Using Default.\n"
MSG.Init2.OK .AZ "A2osX[Stage2]:Complete.\n" MSG.Init2.OK .AZ "A2osX[Stage2]:Complete.\n"
*-------------------------------------- *--------------------------------------
SYSSCREEN.TOP .AZ "A2osX 0.92 System Screen" SYSSCREEN.TOP .AZ "A2osX 0.92 System Screen"
MSG.Init3 .AZ "A2osX[Stage3]:Init\r\nPress Ctrl-D for Mantenance Mode." MSG.Init3 .AS "A2osX[Stage3]:Init "
.AZ "*** Press Ctrl-D for Mantenance Mode ***\r\n"
MSG.DEV .AZ "Device Manager..." MSG.DEV .AZ "Device Manager..."
MSG.BLKDEV .AZ " Adding : /DEV/%s\r\n" MSG.BLKDEV .AZ " Adding : /DEV/%s\r\n"
MSG.IRQ .AZ "Interrupt Manager..." MSG.IRQ .AZ "Interrupt Manager..."
@ -1029,9 +1031,9 @@ MSG.6502 .AZ "6502."
MSG.65C02 .AZ "65C02." MSG.65C02 .AZ "65C02."
MSG.65R02 .AZ "65R02." MSG.65R02 .AZ "65R02."
MSG.65816 .AZ "65816." MSG.65816 .AZ "65816."
MSG.CPU.SPEED .AZ "Detecting CPU Speed..." MSG.CPU.SPEED .AZ "Checking CPU Speed..."
MSG.CPU.SPEEDOK .AZ "%d.%02d Mhz.\r\n" MSG.CPU.SPEEDOK .AZ "%d.%02d Mhz.\r\n"
MSG.Z80 .AZ "Detecting Z80 CPU..." MSG.Z80 .AZ "Checking Z80 CPU..."
MSG.Z80.OK .AZ "Detected In Slot %d.\r\n" MSG.Z80.OK .AZ "Detected In Slot %d.\r\n"
MSG.Z80.KO .AZ "Not Detected." MSG.Z80.KO .AZ "Not Detected."
*-------------------------------------- *--------------------------------------

View File

@ -72,11 +72,11 @@ K.Close jsr K.GetMemPtr
jmp (.1,x) jmp (.1,x)
.1 .DA IO.CLOSE.REG .1 .DA IO.CLOSE.REG
.DA STDIO.IOERR DIR .DA IO.CLOSE.DIR
.DA IO.CLOSE.CDEV .DA IO.CLOSE.CDEV
.DA STDIO.IOERR BDEV .DA STDIO.IOERR BDEV
.DA STDIO.IOERR LNK .DA STDIO.IOERR LNK
.DA STDIO.IOERR DSOCK .DA IO.CLOSE.DSOCK
.DA IO.CLOSE.SSOCK .DA IO.CLOSE.SSOCK
.DA IO.CLOSE.PIPE .DA IO.CLOSE.PIPE
@ -85,9 +85,25 @@ K.Close jsr K.GetMemPtr
rts rts
*-------------------------------------- *--------------------------------------
IO.CLOSE.REG IO.CLOSE.REG
IO.CLOSE.DIR
ldy #S.FD.REG.REF
lda (pFD),y
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.FD.REG.IOBUF
lda (pFD),y
beq .8
jmp K.FreeMem
.8 clc
rts
*-------------------------------------- *--------------------------------------
IO.CLOSE.CDEV IO.CLOSE.CDEV
*-------------------------------------- *--------------------------------------
IO.CLOSE.DSOCK
IO.CLOSE.SSOCK IO.CLOSE.SSOCK
*-------------------------------------- *--------------------------------------
IO.CLOSE.PIPE clc IO.CLOSE.PIPE clc
@ -107,8 +123,6 @@ IO.CLOSE.PIPE clc
* CS: A = EC * CS: A = EC
*\-------------------------------------- *\--------------------------------------
K.Read jsr K.GetMemPtr K.Read jsr K.GetMemPtr
bcs K.Write.9
>STYA pFD >STYA pFD
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR >PULLW K.S.IOCTL+S.IOCTL.BUFPTR
@ -141,13 +155,8 @@ IO.Read.I lda (pFD) #S.FD.T
* CS: A = EC * CS: A = EC
*\-------------------------------------- *\--------------------------------------
K.Write jsr K.GetMemPtr K.Write jsr K.GetMemPtr
bcs K.Write.9
>STYA pFD >STYA pFD
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
IO.Write.I lda (pFD) #S.FD.T IO.Write.I lda (pFD) #S.FD.T
tax tax
jmp (.1,x) jmp (.1,x)
@ -171,10 +180,8 @@ IO.WRITE.REG ldx #MLIWRITE
ldy #S.FD.REG.REF ldy #S.FD.REG.REF
lda (pFD),y lda (pFD),y
sta K.MLI.PARAMS+1 sta K.MLI.PARAMS+1
>LDYA K.S.IOCTL+S.IOCTL.BUFPTR >PULLW K.MLI.PARAMS+2
>STYA K.MLI.PARAMS+2 >PULLW K.MLI.PARAMS+4
>LDYA K.S.IOCTL+S.IOCTL.BYTECNT
>STYA K.MLI.PARAMS+4
lda #4 Param Count = 4 for MLIREAD & MLIWRITE lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr GP.MLICall jsr GP.MLICall
@ -186,6 +193,9 @@ IO.READ.CDEV ldx #IOCTL.READ
*-------------------------------------- *--------------------------------------
IO.WRITE.CDEV ldx #IOCTL.WRITE IO.WRITE.CDEV ldx #IOCTL.WRITE
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
jsr K.IOCTL.GetPDRV jsr K.IOCTL.GetPDRV
>LDYAI K.S.IOCTL >LDYAI K.S.IOCTL
@ -207,15 +217,15 @@ IO.READ.SSOCK ldy #S.FD.SOCK.READ
jsr K.GetMemPtr jsr K.GetMemPtr
>STYA .1 >STYA .1
>PUSHW K.S.IOCTL+S.IOCTL.BYTECNT
>PUSHW K.S.IOCTL+S.IOCTL.BUFPTR
ldy #S.FD.SOCK.HSKT ldy #S.FD.SOCK.HSKT
lda (pFD),y lda (pFD),y
.1 jmp $ffff .1 jmp $ffff
*-------------------------------------- *--------------------------------------
IO.READ.PIPE ldy #S.FD.PIPE.S IO.READ.PIPE >PULLW K.S.IOCTL+S.IOCTL.BUFPTR
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
ldy #S.FD.PIPE.S
lda (pFD),y lda (pFD),y
bit #S.FD.PIPE.S.WOpened bit #S.FD.PIPE.S.WOpened
beq .9 Remote PS did not opened yet the pipe beq .9 Remote PS did not opened yet the pipe
@ -236,7 +246,10 @@ IO.READ.PIPE ldy #S.FD.PIPE.S
sec sec
rts rts
*-------------------------------------- *--------------------------------------
IO.WRITE.PIPE ldy #S.FD.PIPE.S IO.WRITE.PIPE >PULLW K.S.IOCTL+S.IOCTL.BUFPTR
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
ldy #S.FD.PIPE.S
lda (pFD),y lda (pFD),y
bit #S.FD.PIPE.S.ROpened bit #S.FD.PIPE.S.ROpened
beq .9 Remote PS did not opened yet the pipe beq .9 Remote PS did not opened yet the pipe

View File

@ -155,13 +155,13 @@ K.MKDir jsr PFT.CheckPathYA
bpl .1 bpl .1
>MLICALL MLICREATE >MLICALL MLICREATE
rts K.MKDir.RTS rts
*/-------------------------------------- */--------------------------------------
* # MkNod * # MkNod
* Create a special or ordinary file. * Create a special or ordinary file.
* (CDEV, BDEV, DSOCKS, SSOCK, PIPE) * (CDEV, BDEV, DSOCKS, SSOCK, PIPE)
* ## C * ## C
* `int mknod(const char *pathname, int mode, hFD fd);` * `hFILE mknod(const char *pathname, int mode, hFD fd);`
* ## ASM * ## ASM
* **In:** * **In:**
* `>PUSHB fd` * `>PUSHB fd`
@ -178,31 +178,14 @@ K.MkNod >STYA ZPPtr1 pathname
>PULLB K.S.STAT+S.STAT.DEV >PULLB K.S.STAT+S.STAT.DEV
jsr K.GetMemPtr jsr K.GetMemPtr
bcs .99 bcs K.MKDir.RTS
>STYA pFD >STYA pFD
ldx #0
.1 lda Nod.Table.hFD,x
beq .2
inx
cpx #K.NOD.MAX
beq .98
.2 lda K.S.STAT+S.STAT.DEV
sta Nod.Table.hFD,x
stx .3+1
>LDYA ZPPtr1 >LDYA ZPPtr1
jsr K.NewStr ldx K.S.STAT+S.STAT.DEV
bcs .99 jsr STDIO.NewHFileYAX
bcs K.MKDir.RTS
txa
.3 ldx #$ff SELF MODIFIED
sta Nod.Table.hPath,x
lda (pFD) #S.FD.T lda (pFD) #S.FD.T
@ -217,10 +200,6 @@ K.MkNod >STYA ZPPtr1 pathname
.DA STAT.MKNOD.DSOCK .DA STAT.MKNOD.DSOCK
.DA STAT.MKNOD.SSOCK .DA STAT.MKNOD.SSOCK
.DA STAT.MKNOD.PIPE .DA STAT.MKNOD.PIPE
.98 lda #K.E.OOH
sec
.99 rts
*-------------------------------------- *--------------------------------------
STAT.MKNOD.CDEV STAT.MKNOD.CDEV
STAT.MKNOD.BDEV STAT.MKNOD.BDEV

View File

@ -965,24 +965,26 @@ K.SScanF.Fwd tya Y=char count parsed
* `>PUSHBI mode` * `>PUSHBI mode`
* + O.RDONLY : if R and !exists -> ERROR * + O.RDONLY : if R and !exists -> ERROR
* + O.WRONLY : if W and !exists -> CREATE * + O.WRONLY : if W and !exists -> CREATE
* + O.TRUNC : Reset Size To 0
* + O.APPEND : Append * + O.APPEND : Append
* + O.TEXT : Open/Append in Text mode * + O.TEXT : Open/Append in Text mode
* + O.CREATE : Create if not exists * + O.CREATE : Create if not exists
* http://man7.org/linux/man-pages/man3/fopen.3.html * TODO: mode="w+,t=TYP,x=AUXTYPE"
* r = O_RDONLY * + r = O_RDONLY
* w = O_WRONLY | O_CREAT | O_TRUNC * + r+ = O_RDWR
* a = O_WRONLY | O_CREAT | O_APPEND * + w = O_WRONLY | O_CREAT | O_TRUNC
* r+ = O_RDWR * + w+ = O_RDWR | O_CREAT | O_TRUNC
* w+ = O_RDWR | O_CREAT | O_TRUNC * + a = O_WRONLY | O_CREAT | O_APPEND
* a+ = O_RDWR | O_CREAT | O_APPEND * + a+ = O_RDWR | O_CREAT | O_APPEND
* * + ,t=123 or t=$ff or t=TXT
* TODO: mode="w+t=TYP,x=AUXTYPE" * + ,x=12345 or x=$ffff
* `>LDYAI filename` * `>LDYAI filename`
* **Out:** * **Out:**
* CC : A = hFILE * CC : A = hFILE
* CS : A = EC * CS : A = EC
*\-------------------------------------- *\--------------------------------------
K.FOpen jsr PFT.CheckPathYA K.FOpen jsr PFT.CheckPathYA
>STYA K.FOpen.PATH
jsr STDIO.SetMLIPathYA jsr STDIO.SetMLIPathYA
>PULLB K.FOpen.MODE >PULLB K.FOpen.MODE
>PULLB K.FOpen.TYPE >PULLB K.FOpen.TYPE
@ -1014,11 +1016,7 @@ K.FOpen.I >MLICALL MLIGETFILEINFO
bcc K.FOpen.10 bcc K.FOpen.10
K.FOpen.9 rts K.FOpen.9 rts
K.FOpen.10 lda #S.FD.REG K.FOpen.10 >LDYAI S.FD.REG
sec
adc K.MLI.PATH
tay
lda #0
ldx #S.MEM.F.INIT0+S.MEM.F.FD ldx #S.MEM.F.INIT0+S.MEM.F.FD
jsr MEM.GetMem.YAX jsr MEM.GetMem.YAX
bcs K.FOpen.9 bcs K.FOpen.9
@ -1026,19 +1024,6 @@ K.FOpen.10 lda #S.FD.REG
>STYA pFD >STYA pFD
stx .8+1 stx .8+1
ldx #0
ldy #S.FD.REG
.1 inx
lda K.MLI.PATH,x
sta (pFD),y
iny
cpx K.MLI.PATH
bne .1
lda #0
sta (pFD),y
* ldy #S.FD.T Done by GetMem0 * ldy #S.FD.T Done by GetMem0
* lda #S.FD.T.REG * lda #S.FD.T.REG
* sta (pFD),y * sta (pFD),y
@ -1076,7 +1061,7 @@ K.FOpen.10 lda #S.FD.REG
.20 lda K.FOpen.MODE .20 lda K.FOpen.MODE
and #O.TEXT Text Mode ? and #O.TEXT Text Mode ?
beq .8 beq .22
lda #$FF lda #$FF
sta K.MLI.PARAMS+2 sta K.MLI.PARAMS+2
@ -1084,17 +1069,21 @@ K.FOpen.10 lda #S.FD.REG
sta K.MLI.PARAMS+3 sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE >MLICALL MLINEWLINE
.8 lda #$ff Self Modified, hFD .22 >LDYA K.FOpen.PATH
clc
rts CC .8 ldx #$ff Self Modified, hFD
jsr STDIO.NewHFileYAX
bcc .80
.98 pha save MLI error .98 pha save MLI error
lda .8+1 lda .8+1
jsr K.FClose jsr K.Close
pla get back MLI error pla get back MLI error
sec sec
rts .80 rts
*-------------------------------------- *--------------------------------------
K.FOpen.PATH .BS 2
K.FOpen.MODE .BS 1 K.FOpen.MODE .BS 1
K.FOpen.TYPE .BS 1 K.FOpen.TYPE .BS 1
K.FOpen.AUXTYPE .BS 2 K.FOpen.AUXTYPE .BS 2
@ -1109,25 +1098,27 @@ K.FOpen.AUXTYPE .BS 2
* **Out:** * **Out:**
*\-------------------------------------- *\--------------------------------------
K.FClose jsr PFT.CheckNodeA K.FClose jsr PFT.CheckNodeA
sta .8+1 sta .8+1 save hFILE
jsr K.GetMemPtr tax
>STYA pFD
ldy #S.FD.REG.REF lda Nod.Table.hPath,x
lda (pFD),y beq .9
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.FD.REG.IOBUF stz Nod.Table.hPath,x
lda (pFD),y jsr K.FreeMem discard filename
beq .8
jsr K.FreeMem .1 lda Nod.Table.hFD,x
jsr K.Close
.8 lda #$ff Self Modified .8 ldx #$ff SELF MODIFIED
jmp K.FreeMem lda Nod.Table.hFD,x
.9 rts
stz Nod.Table.hFD,x
jmp K.FreeMem discard filename
.9 lda #K.E.INVH
sec
rts
*/-------------------------------------- */--------------------------------------
* # FRead * # FRead
* int fread (hFILE stream, void * ptr, int count ); * int fread (hFILE stream, void * ptr, int count );
@ -1141,8 +1132,12 @@ K.FClose jsr PFT.CheckNodeA
* Y,A = Bytes Read * Y,A = Bytes Read
*\-------------------------------------- *\--------------------------------------
K.FRead jsr PFT.CheckNodeA K.FRead jsr PFT.CheckNodeA
ldx #MLIREAD jsr STDIO.GetHFile
bra K.FReadWrite.1 bcs .9
jmp K.Read
.9
*/-------------------------------------- */--------------------------------------
* # FWrite * # FWrite
* Write bytes to file * Write bytes to file
@ -1159,7 +1154,9 @@ K.FRead jsr PFT.CheckNodeA
*\-------------------------------------- *\--------------------------------------
K.FWrite jsr PFT.CheckNodeA K.FWrite jsr PFT.CheckNodeA
ldx #MLIWRITE ldx #MLIWRITE
K.FReadWrite.1 jsr STDIO.GetRefNum K.FReadWrite.1 jsr STDIO.GetHFile
bcs .9
>PULLW K.MLI.PARAMS+2 >PULLW K.MLI.PARAMS+2
>PULLW K.MLI.PARAMS+4 >PULLW K.MLI.PARAMS+4
@ -1177,7 +1174,7 @@ K.FReadWrite.1 jsr STDIO.GetRefNum
* A = hFILE * A = hFILE
*\-------------------------------------- *\--------------------------------------
K.FFlush jsr PFT.CheckNodeA K.FFlush jsr PFT.CheckNodeA
jsr STDIO.GetRefNum jsr STDIO.GetHFile
>MLICALL MLIFLUSH >MLICALL MLIFLUSH
rts rts
*/------------------------------------- */-------------------------------------
@ -1193,7 +1190,7 @@ K.FFlush jsr PFT.CheckNodeA
* `>SYSCALL fseek` * `>SYSCALL fseek`
*\------------------------------------- *\-------------------------------------
K.FSeek jsr PFT.CheckNodeA K.FSeek jsr PFT.CheckNodeA
jsr STDIO.GetRefNum jsr STDIO.GetHFileREG
>PULLA FROM >PULLA FROM
tax tax
>PULLW ZPPtr1 offset LW >PULLW ZPPtr1 offset LW
@ -1262,7 +1259,7 @@ K.FSeek jsr PFT.CheckNodeA
* CS : * CS :
*\-------------------------------------- *\--------------------------------------
K.FEOF jsr PFT.CheckNodeA K.FEOF jsr PFT.CheckNodeA
jsr STDIO.GetRefNum jsr STDIO.GetHFileREG
>MLICALL MLIGETMARK >MLICALL MLIGETMARK
bcs .9 bcs .9
@ -1302,7 +1299,7 @@ K.FEOF.MARK .BS 3
* On stack (long) * On stack (long)
*\-------------------------------------- *\--------------------------------------
K.FTell jsr PFT.CheckNodeA K.FTell jsr PFT.CheckNodeA
jsr STDIO.GetRefNum jsr STDIO.GetHFileREG
>MLICALL MLIGETMARK >MLICALL MLIGETMARK
bcs .9 bcs .9
@ -1356,6 +1353,66 @@ K.Rename jsr PFT.CheckPathYA
>MLICALL MLIRENAME >MLICALL MLIRENAME
rts rts
*-------------------------------------- *--------------------------------------
* Y,A = filepath
* X = hFD
*--------------------------------------
STDIO.NewHFileYAX
pha
stx .4+1 Store hFD
ldx #0
.1 lda Nod.Table.hFD,x
beq .2
inx
cpx #K.NOD.MAX
bne .1
pla
lda #K.E.OOH
* sec
rts
.2 stx .3+1 Store hFILE
pla
jsr K.NewStr
bcs .9
txa
.3 ldx #$ff SELF MODIFIED
sta Nod.Table.hPath,x
.4 lda #$ff SELF MODIFIED
sta Nod.Table.hFD,x
txa hFILE
clc
.9 rts
*--------------------------------------
STDIO.GetHFile tay
lda Dev.Table.hFD,y
beq .9
STDIO.GetHFileREG
tay
lda Dev.Table.hFD,y
beq STDIO.GetHFile.9
jsr K.GetMemPtr
>STYA pFD
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
rts
STDIO.GetHFile.9
lda #K.E.INVH
sec
rts
*--------------------------------------
STDIO.SetMLIPathYA STDIO.SetMLIPathYA
>STYA .1+1 >STYA .1+1
@ -1387,13 +1444,6 @@ STDIO.SetIOBUF >LDYAI 1024 get a ProDOS IOBUF
sta (pFD),y sta (pFD),y
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
STDIO.GetRefNum jsr K.GetMemPtr
>STYA pFD
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
rts
*--------------------------------------
STDIO.IOERR lda #MLI.E.IO STDIO.IOERR lda #MLI.E.IO
sec sec
rts rts