diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 97093fbb..19ba1f6f 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index dba61072..2f7ca395 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ 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