From e9e8508c2ec36f83c37313f1ec469c99979e8b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 3 Oct 2018 17:25:03 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 1 + SYS/KERNEL.S.INIT.txt | 10 ++- SYS/KERNEL.S.IO.txt | 49 +++++++---- SYS/KERNEL.S.STAT.txt | 33 ++----- SYS/KERNEL.S.STDIO.txt | 182 +++++++++++++++++++++++++-------------- 7 files changed, 160 insertions(+), 115 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 97093fbb7b7308b4758f1199f6e8210db4d575a6..19ba1f6f5c524567f9d8ef3ae9806829dfc1d387 100644 GIT binary patch delta 9410 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 delta 9638 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 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index dba6107272c1071ea60b149ed06328c9e3e53455..2f7ca395fa806dc67aef7b1a982aa36b4654020c 100644 GIT binary patch delta 21875 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 E4|y>){{R30 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index f7d3b359..5fcb0a49 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -253,6 +253,7 @@ SYS.GuiOSD.JMP .EQ $E200 *-------------------------------------- K.E.OOM .EQ $FF Out Of Memory 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 *-------------------------------------- diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 861b88ca..cf04039c 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -113,8 +113,9 @@ Kernel.Init3 sta SETALTZP jsr PS0.Init + >PUSHBI 0 >LDYAI MSG.Init3 - >SYSCALL puts + >SYSCALL printf jsr CPU.Init.6502 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" *-------------------------------------- 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.BLKDEV .AZ " Adding : /DEV/%s\r\n" MSG.IRQ .AZ "Interrupt Manager..." @@ -1029,9 +1031,9 @@ MSG.6502 .AZ "6502." MSG.65C02 .AZ "65C02." MSG.65R02 .AZ "65R02." 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.Z80 .AZ "Detecting Z80 CPU..." +MSG.Z80 .AZ "Checking Z80 CPU..." MSG.Z80.OK .AZ "Detected In Slot %d.\r\n" MSG.Z80.KO .AZ "Not Detected." *-------------------------------------- diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index e458df6d..ac544648 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -72,11 +72,11 @@ K.Close jsr K.GetMemPtr jmp (.1,x) .1 .DA IO.CLOSE.REG - .DA STDIO.IOERR DIR + .DA IO.CLOSE.DIR .DA IO.CLOSE.CDEV .DA STDIO.IOERR BDEV .DA STDIO.IOERR LNK - .DA STDIO.IOERR DSOCK + .DA IO.CLOSE.DSOCK .DA IO.CLOSE.SSOCK .DA IO.CLOSE.PIPE @@ -85,9 +85,25 @@ K.Close jsr K.GetMemPtr rts *-------------------------------------- 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.DSOCK IO.CLOSE.SSOCK *-------------------------------------- IO.CLOSE.PIPE clc @@ -107,8 +123,6 @@ IO.CLOSE.PIPE clc * CS: A = EC *\-------------------------------------- K.Read jsr K.GetMemPtr - bcs K.Write.9 - >STYA pFD >PULLW K.S.IOCTL+S.IOCTL.BUFPTR @@ -141,13 +155,8 @@ IO.Read.I lda (pFD) #S.FD.T * CS: A = EC *\-------------------------------------- K.Write jsr K.GetMemPtr - bcs K.Write.9 - >STYA pFD - >PULLW K.S.IOCTL+S.IOCTL.BUFPTR - >PULLW K.S.IOCTL+S.IOCTL.BYTECNT - IO.Write.I lda (pFD) #S.FD.T tax jmp (.1,x) @@ -171,10 +180,8 @@ IO.WRITE.REG ldx #MLIWRITE ldy #S.FD.REG.REF lda (pFD),y sta K.MLI.PARAMS+1 - >LDYA K.S.IOCTL+S.IOCTL.BUFPTR - >STYA K.MLI.PARAMS+2 - >LDYA K.S.IOCTL+S.IOCTL.BYTECNT - >STYA K.MLI.PARAMS+4 + >PULLW K.MLI.PARAMS+2 + >PULLW K.MLI.PARAMS+4 lda #4 Param Count = 4 for MLIREAD & MLIWRITE jsr GP.MLICall @@ -186,6 +193,9 @@ IO.READ.CDEV ldx #IOCTL.READ *-------------------------------------- IO.WRITE.CDEV ldx #IOCTL.WRITE + >PULLW K.S.IOCTL+S.IOCTL.BUFPTR + >PULLW K.S.IOCTL+S.IOCTL.BYTECNT + jsr K.IOCTL.GetPDRV >LDYAI K.S.IOCTL @@ -207,15 +217,15 @@ IO.READ.SSOCK ldy #S.FD.SOCK.READ jsr K.GetMemPtr >STYA .1 - >PUSHW K.S.IOCTL+S.IOCTL.BYTECNT - >PUSHW K.S.IOCTL+S.IOCTL.BUFPTR - ldy #S.FD.SOCK.HSKT lda (pFD),y .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 bit #S.FD.PIPE.S.WOpened beq .9 Remote PS did not opened yet the pipe @@ -236,7 +246,10 @@ IO.READ.PIPE ldy #S.FD.PIPE.S sec 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 bit #S.FD.PIPE.S.ROpened beq .9 Remote PS did not opened yet the pipe diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 31271e94..e8400ec5 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -155,13 +155,13 @@ K.MKDir jsr PFT.CheckPathYA bpl .1 >MLICALL MLICREATE - rts +K.MKDir.RTS rts */-------------------------------------- * # MkNod * Create a special or ordinary file. * (CDEV, BDEV, DSOCKS, SSOCK, PIPE) * ## C -* `int mknod(const char *pathname, int mode, hFD fd);` +* `hFILE mknod(const char *pathname, int mode, hFD fd);` * ## ASM * **In:** * `>PUSHB fd` @@ -178,31 +178,14 @@ K.MkNod >STYA ZPPtr1 pathname >PULLB K.S.STAT+S.STAT.DEV jsr K.GetMemPtr - bcs .99 + bcs K.MKDir.RTS >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 - jsr K.NewStr - bcs .99 - - txa - -.3 ldx #$ff SELF MODIFIED - sta Nod.Table.hPath,x + ldx K.S.STAT+S.STAT.DEV + jsr STDIO.NewHFileYAX + bcs K.MKDir.RTS lda (pFD) #S.FD.T @@ -217,10 +200,6 @@ K.MkNod >STYA ZPPtr1 pathname .DA STAT.MKNOD.DSOCK .DA STAT.MKNOD.SSOCK .DA STAT.MKNOD.PIPE - -.98 lda #K.E.OOH - sec -.99 rts *-------------------------------------- STAT.MKNOD.CDEV STAT.MKNOD.BDEV diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index b53c9318..47f1044d 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -965,29 +965,31 @@ K.SScanF.Fwd tya Y=char count parsed * `>PUSHBI mode` * + O.RDONLY : if R and !exists -> ERROR * + O.WRONLY : if W and !exists -> CREATE +* + O.TRUNC : Reset Size To 0 * + O.APPEND : Append * + O.TEXT : Open/Append in Text mode * + O.CREATE : Create if not exists -* http://man7.org/linux/man-pages/man3/fopen.3.html -* r = O_RDONLY -* w = O_WRONLY | O_CREAT | O_TRUNC -* a = O_WRONLY | O_CREAT | O_APPEND -* r+ = O_RDWR -* w+ = O_RDWR | O_CREAT | O_TRUNC -* a+ = O_RDWR | O_CREAT | O_APPEND -* -* TODO: mode="w+t=TYP,x=AUXTYPE" +* TODO: mode="w+,t=TYP,x=AUXTYPE" +* + r = O_RDONLY +* + r+ = O_RDWR +* + w = O_WRONLY | 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 +* + ,t=123 or t=$ff or t=TXT +* + ,x=12345 or x=$ffff * `>LDYAI filename` * **Out:** * CC : A = hFILE * CS : A = EC *\-------------------------------------- K.FOpen jsr PFT.CheckPathYA + >STYA K.FOpen.PATH jsr STDIO.SetMLIPathYA >PULLB K.FOpen.MODE >PULLB K.FOpen.TYPE >PULLW K.FOpen.AUXTYPE - + K.FOpen.I >MLICALL MLIGETFILEINFO bcc K.FOpen.10 Already Exists @@ -1014,31 +1016,14 @@ K.FOpen.I >MLICALL MLIGETFILEINFO bcc K.FOpen.10 K.FOpen.9 rts -K.FOpen.10 lda #S.FD.REG - sec - adc K.MLI.PATH - tay - lda #0 +K.FOpen.10 >LDYAI S.FD.REG ldx #S.MEM.F.INIT0+S.MEM.F.FD jsr MEM.GetMem.YAX bcs K.FOpen.9 >STYA pFD 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 * lda #S.FD.T.REG * sta (pFD),y @@ -1076,25 +1061,29 @@ K.FOpen.10 lda #S.FD.REG .20 lda K.FOpen.MODE and #O.TEXT Text Mode ? - beq .8 + beq .22 lda #$FF sta K.MLI.PARAMS+2 lda #C.CR sta K.MLI.PARAMS+3 - >MLICALL MLINEWLINE - -.8 lda #$ff Self Modified, hFD - clc - rts CC + >MLICALL MLINEWLINE +.22 >LDYA K.FOpen.PATH + +.8 ldx #$ff Self Modified, hFD + + jsr STDIO.NewHFileYAX + bcc .80 + .98 pha save MLI error lda .8+1 - jsr K.FClose + jsr K.Close pla get back MLI error sec - rts +.80 rts *-------------------------------------- +K.FOpen.PATH .BS 2 K.FOpen.MODE .BS 1 K.FOpen.TYPE .BS 1 K.FOpen.AUXTYPE .BS 2 @@ -1109,25 +1098,27 @@ K.FOpen.AUXTYPE .BS 2 * **Out:** *\-------------------------------------- K.FClose jsr PFT.CheckNodeA - sta .8+1 - jsr K.GetMemPtr - >STYA pFD + sta .8+1 save hFILE + tax - ldy #S.FD.REG.REF - lda (pFD),y - beq .1 - sta K.MLI.PARAMS+1 - >MLICALL MLICLOSE + lda Nod.Table.hPath,x + beq .9 -.1 ldy #S.FD.REG.IOBUF - lda (pFD),y - beq .8 + stz Nod.Table.hPath,x + jsr K.FreeMem discard filename - jsr K.FreeMem +.1 lda Nod.Table.hFD,x + jsr K.Close -.8 lda #$ff Self Modified - jmp K.FreeMem -.9 rts +.8 ldx #$ff SELF MODIFIED + lda Nod.Table.hFD,x + + stz Nod.Table.hFD,x + jmp K.FreeMem discard filename + +.9 lda #K.E.INVH + sec + rts */-------------------------------------- * # FRead * int fread (hFILE stream, void * ptr, int count ); @@ -1141,8 +1132,12 @@ K.FClose jsr PFT.CheckNodeA * Y,A = Bytes Read *\-------------------------------------- K.FRead jsr PFT.CheckNodeA - ldx #MLIREAD - bra K.FReadWrite.1 + jsr STDIO.GetHFile + bcs .9 + + jmp K.Read + +.9 */-------------------------------------- * # FWrite * Write bytes to file @@ -1159,7 +1154,9 @@ K.FRead jsr PFT.CheckNodeA *\-------------------------------------- K.FWrite jsr PFT.CheckNodeA 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+4 @@ -1177,7 +1174,7 @@ K.FReadWrite.1 jsr STDIO.GetRefNum * A = hFILE *\-------------------------------------- K.FFlush jsr PFT.CheckNodeA - jsr STDIO.GetRefNum + jsr STDIO.GetHFile >MLICALL MLIFLUSH rts */------------------------------------- @@ -1193,7 +1190,7 @@ K.FFlush jsr PFT.CheckNodeA * `>SYSCALL fseek` *\------------------------------------- K.FSeek jsr PFT.CheckNodeA - jsr STDIO.GetRefNum + jsr STDIO.GetHFileREG >PULLA FROM tax >PULLW ZPPtr1 offset LW @@ -1262,7 +1259,7 @@ K.FSeek jsr PFT.CheckNodeA * CS : *\-------------------------------------- K.FEOF jsr PFT.CheckNodeA - jsr STDIO.GetRefNum + jsr STDIO.GetHFileREG >MLICALL MLIGETMARK bcs .9 @@ -1302,7 +1299,7 @@ K.FEOF.MARK .BS 3 * On stack (long) *\-------------------------------------- K.FTell jsr PFT.CheckNodeA - jsr STDIO.GetRefNum + jsr STDIO.GetHFileREG >MLICALL MLIGETMARK bcs .9 @@ -1356,6 +1353,66 @@ K.Rename jsr PFT.CheckPathYA >MLICALL MLIRENAME 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 >STYA .1+1 @@ -1387,13 +1444,6 @@ STDIO.SetIOBUF >LDYAI 1024 get a ProDOS IOBUF sta (pFD),y .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 sec rts