From 0a0c267939f81e0748f701af3681ad7172b6ebbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sat, 27 Jul 2019 22:51:39 +0200 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes INC/A2osX.I.txt | 4 +- SYS/KERNEL.S.IO.txt | 529 +-------------------------------------- SYS/KERNEL.S.MEM.txt | 33 +++ SYS/KERNEL.S.PIPE.txt | 331 ++++++++++++++++++++++++ SYS/KERNEL.S.STAT.txt | 33 --- SYS/KERNEL.S.STDIO.txt | 42 ++-- SYS/KERNEL.S.UNISTD.txt | 180 +++++++++++++ SYS/KERNEL.S.txt | 2 + 9 files changed, 578 insertions(+), 576 deletions(-) create mode 100644 SYS/KERNEL.S.PIPE.txt create mode 100644 SYS/KERNEL.S.UNISTD.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d108c7067ed6c401f4459b8b1914e252cb089a3c..310524fc4de5a9e3621d7a82f13d7ce1ffe25ad2 100644 GIT binary patch delta 25772 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 delta 26422 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 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index abd97247..f9c94d8e 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -153,8 +153,8 @@ O.TEXT .EQ %01000000 O.CREATE .EQ %10000000 *-------------------------------------- SEEK.SET .EQ $00 -SEEK.CUR .EQ $02 -SEEK.END .EQ $04 +SEEK.CUR .EQ $01 +SEEK.END .EQ $02 *-------------------------------------- * A2osX.SYSCALL Functions Indexes *-------------------------------------- diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 9658d9e9..807850ad 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -1,111 +1,16 @@ NEW AUTO 3,1 -*/-------------------------------------- -* # open -* ## C -* `hFD open(const char *pathname, short int flags);` -* ## ASM -* **In:** -* `>PUSHB flags` -* `>LDYA pathname` -* `>SYSCALL open` -* ## RETURN VALUE -* A = hFD -* REG File created on ProDOS : T=TXT,X=$0000 -*\-------------------------------------- - .DUMMY - .OR ZPTMP+20 9 Bytes -K.Open.FLAGS .BS 1 -K.Open.TYPE .BS 1 -K.Open.AUXTYPE .BS 2 -IO.hDev .BS 1 -IO.hFD .BS 1 -IO.hFILE .BS 1 -IO.Counter .BS 2 - .ED -*-------------------------------------- -K.Open jsr PFT.YAToMLIPATH - >PULLB K.Open.FLAGS - - lda #S.FI.T.TXT - sta K.Open.TYPE - stz K.Open.AUXTYPE - stz K.Open.AUXTYPE+1 - -IO.Open.I ldx #5 /DEV/ - cpx K.MLI.PATH - bcs IO.OPEN.REG - -.1 lda K.MLI.PATH,x - cmp IO.DEVDIR-1,x - bne IO.OPEN.REG - dex - bne .1 -*-------------------------------------- -* /DEV/xxxxxx (CDEV,BDEV,LNK,DSOCK,SSOCK,PIPE) -*-------------------------------------- - >LDYAI K.MLI.PATH+6 skip $/DEV/ - - jsr K.GetDevByName - bcc .7 - - ldx #2 - -.10 lda Nod.Table.hPath-2,x - beq .3 - - jsr K.GetMemPtr - >STYA ZPPtr1 - - ldy #0 - -.2 lda (ZPPtr1),y - iny - cmp K.MLI.PATH,y - bne .3 - cmp #0 end of string ? - bne .2 - - lda Nod.Table.hFD-2,x return hFD - jsr IO.GetPFD - - bra .71 - -.3 inx - cpx #K.NOD.MAX+2 - bne .10 - - lda #MLI.E.NODEV -* sec - rts no OF found - -.7 stx IO.hDev - >STYA pFD - -.71 lda (pFD) #S.FD.T - tax - jmp (.8,x) - -.8 .DA STDIO.IOERR REG - .DA STDIO.IOERR DIR - .DA IO.OPEN.CDEV - .DA IO.OPEN.BDEV - .DA STDIO.IOERR LNK - .DA IO.OPEN.DSOCK - .DA IO.OPEN.SSOCK - .DA IO.OPEN.PIPE - -IO.OPEN.RTS rts + *-------------------------------------- IO.OPEN.REG >MLICALL MLIGETFILEINFO bcc IO.OPEN.REG.E Already Exists - bit K.Open.FLAGS Create if not exists ? + bit IO.Open.FLAGS Create if not exists ? bpl IO.OPEN.RTS No, return MLI error ldx #2 Yes, Create... -.1 lda K.Open.TYPE,x +.1 lda IO.Open.TYPE,x sta K.MLI.PARAMS+4,x File type,Aux type dex bpl .1 @@ -122,7 +27,7 @@ IO.OPEN.REG.E ldx #0 jsr IO.MLI.OPEN bcs IO.OPEN.ERR - lda K.Open.FLAGS + lda IO.Open.FLAGS bit #O.WRONLY beq .20 Write mode ? @@ -141,7 +46,7 @@ IO.OPEN.REG.E ldx #0 >MLICALL MLISETMARK .21 bcs IO.OPEN.ERR -.20 lda K.Open.FLAGS +.20 lda IO.Open.FLAGS and #O.TEXT Text Mode ? beq .8 @@ -153,7 +58,7 @@ IO.OPEN.REG.E ldx #0 bcs IO.OPEN.ERR .8 lda IO.hFD - rts +IO.OPEN.RTS rts IO.OPEN.ERR pha Save Error Code lda IO.hFD @@ -174,39 +79,11 @@ IO.OPEN.BDEV jsr K.IOCTL.GetPDrv .9 rts *-------------------------------------- -IO.OPEN.PIPE ldy #S.FD.PIPE.S - lda (pFD),y - inc - sta (pFD),y -*-------------------------------------- IO.OPEN.DSOCK *-------------------------------------- IO.OPEN.SSOCK lda IO.hFD clc rts -*/-------------------------------------- -* # close -* ## C -* `int close(hFD fd);` -* ## ASM -* **In:** -* `lda fd` -* `>SYSCALL close` -*\-------------------------------------- -K.Close jsr IO.GetPFD - -IO.Close.I lda (pFD) #S.FD.T - tax - jmp (.1,x) - -.1 .DA IO.CLOSE.REG - .DA IO.CLOSE.DIR - .DA IO.CLOSE.CDEV - .DA IO.CLOSE.BDEV - .DA STDIO.IOERR LNK - .DA IO.CLOSE.DSOCK - .DA IO.CLOSE.SSOCK - .DA IO.CLOSE.PIPE *-------------------------------------- IO.CLOSE.REG IO.CLOSE.DIR ldy #S.FD.REG.REF @@ -244,33 +121,6 @@ IO.CLOSE.SSOCK .1 jmp $FFFF SELF MODIFIED *-------------------------------------- -IO.CLOSE.PIPE ldy #S.FD.PIPE.S - - lda (pFD),y - bmi .1 remote PS closed its end - - lda #$80 - sta (pFD),y - clc - rts - -.1 jsr IO.CLOSE.NOD - - ldy #S.FD.PIPE.hMem - - lda (pFD),y - beq .2 - - .DO AUXPIPE=1 - ldx #SYS.FreeStkObj - jsr K.SYSCALL2.AUX - .ELSE - jsr K.FreeMem - .FIN - -.2 lda IO.hFD - jmp K.FreeMem -*-------------------------------------- IO.CLOSE.NOD ldx #2 lda IO.hFD @@ -291,62 +141,6 @@ IO.CLOSE.NOD ldx #2 lda #E.INVH * sec rts -*/-------------------------------------- -* # read -* ## C -* `int read(hFD fd, void *buf, int count);` -* ## ASM -* **In:** -* `>PUSHWI count` -* `>PUSHW buf` -* `lda fd` -* `>SYSCALL read` -* ## RETURN VALUE -* CC: Y,A = bytes read -* CS: A = EC -*\-------------------------------------- -K.Read jsr IO.GetPFD - -IO.Read.I lda (pFD) #S.FD.T - tax - jmp (.1,x) - -.1 .DA IO.READ.REG - .DA STDIO.IOERR DIR - .DA IO.READ.CDEV - .DA STDIO.IOERR BDEV - .DA STDIO.IOERR LNK - .DA STDIO.IOERR DSOCK - .DA IO.READ.SSOCK - .DA IO.READ.PIPE -*/-------------------------------------- -* # write -* ## C -* `int write(hFD fd, const void *buf, int count);` -* ## ASM -* **In:** -* `>PUSHWI count` -* `>PUSHW buf` -* `lda fd` -* `>SYSCALL write` -* ## RETURN VALUE -* CC: Y,A = bytes written -* CS: A = EC -*\-------------------------------------- -K.Write jsr IO.GetPFD - -IO.Write.I lda (pFD) #S.FD.T - tax - jmp (.1,x) - -.1 .DA IO.WRITE.REG - .DA STDIO.IOERR DIR - .DA IO.WRITE.CDEV - .DA STDIO.IOERR BDEV - .DA STDIO.IOERR LNK - .DA STDIO.IOERR DSOCK - .DA IO.WRITE.SSOCK - .DA IO.WRITE.PIPE *-------------------------------------- IO.READ.REG ldx #MLIREAD .HS 2C BIT ABS @@ -399,301 +193,6 @@ IO.READ.SSOCK ldy #S.FD.SSOCK.READ .1 jmp $FFFF SELF MODIFIED *-------------------------------------- -IO.READ.PIPE ldy #S.FD.PIPE.Used+1 - - lda (pFD),y Data ? - dey - ora (pFD),y - bne .10 yes... - - ldy #S.FD.PIPE.S - lda (pFD),y - bpl .11 - - jmp IO.READ.PIPE.EOF Remote PS closed the Pipe - -.11 jmp IO.READ.PIPE.NODATA - -.10 >PULLW .3+1 get buf - - >PULLA get cnt lo - pha - ldy #S.FD.PIPE.Used - cmp (pFD),y - - >PULLA get cnt hi - tax - iny - sbc (pFD),y - pla A,X = cnt - bcc .12 cnt < Used - - lda (pFD),y - tax - dey - lda (pFD),y A,X = Used - -.12 sta .80+1 - stx .81+1 - eor #$ff - sta IO.Counter - - txa - eor #$ff - sta IO.Counter+1 - - ldy #S.FD.PIPE.Free - - clc - lda (pFD),y - adc .80+1 - sta (pFD),y - - iny - - lda (pFD),y - adc .81+1 - sta (pFD),y - - iny #S.FD.PIPE.Used - - sec - lda (pFD),y - sbc .80+1 - sta (pFD),y - - iny - - lda (pFD),y - sbc .81+1 - sta (pFD),y - - ldy #S.FD.PIPE.Size+1 - lda (pFD),y - sta .5+1 Page Count - - ldy #S.FD.PIPE.hMem - lda (pFD),y - - .DO AUXPIPE=1 - ldx #SYS.GetStkObjPtr - jsr K.SYSCALL2.AUX - .ELSE - jsr K.GetMemPtr - .FIN - - sty .2+1 - sta .7+1 Pipe Buffer Base - - ldy #S.FD.PIPE.Tail+1 - clc - adc (pFD),y - sta .2+2 - - dey S.FD.PIPE.Tail - lda (pFD),y - tay - - ldx #0 - -.13 .DO AUXPIPE=1 - sta SETREADAUX - .FIN - -.1 inc IO.Counter - bne .2 - inc IO.Counter+1 - beq .8 - -.2 lda $ffff,y SELF MODIFIED -.3 sta $ffff,x SELF MODIFIED - - inx - bne .4 - - inc .3+2 - -.4 iny - bne .1 - - .DO AUXPIPE=1 - sta CLRREADAUX - .FIN - - ldy #S.FD.PIPE.Tail+1 - lda (pFD),y - inc -.5 cmp #$ff SELF MODIFIED - beq .6 - - sta (pFD),y - inc .2+2 - ldy #0 - bra .13 - -.6 lda #0 - sta (pFD),y - -.7 lda #$ff SELF MODIFIED - sta .2+2 Restore Pipe Buf base - ldy #0 - bra .13 - -.8 .DO AUXPIPE=1 - sta CLRREADAUX - .FIN - tya - ldy #S.FD.PIPE.Tail - sta (pFD),y - -.80 ldy #$ff SELF MODIFIED -.81 lda #$ff Y,A = bytes read - - clc - rts - -IO.READ.PIPE.EOF - lda #MLI.E.EOF - .HS 2C BIT ABS -IO.READ.PIPE.NODATA - lda #E.NODATA - sec - >RET 4 -*-------------------------------------- -* (pStack)+2 count -* (pStack)+0 buf -*-------------------------------------- -IO.WRITE.PIPE ldy #S.FD.PIPE.S - lda (pFD),y - - bmi IO.READ.PIPE.EOF Remote PS closed the Pipe - - ldy #S.FD.PIPE.Free - lda (pFD),y - ldy #2 - sec - sbc (pStack),y - - tax - - ldy #S.FD.PIPE.Free+1 - lda (pFD),y - ldy #3 - sbc (pStack),y - bcc IO.READ.PIPE.NODATA not enough room in PIPE - - ldy #S.FD.PIPE.Free+1 - sta (pFD),y - dey - txa - sta (pFD),y store new Free - - >PULLW .2+1 get dst buf - - >PULLA get cnt lo - sta .80+1 - pha - eor #$ff - sta IO.Counter - pla - ldy #S.FD.PIPE.Used - clc - adc (pFD),y - sta (pFD),y - - >PULLA get cnt hi - sta .81+1 - pha - eor #$ff - sta IO.Counter+1 - pla - iny #S.FD.PIPE.Used+1 - adc (pFD),y - sta (pFD),y - - ldy #S.FD.PIPE.Size+1 - lda (pFD),y - sta .5+1 Page Count - - ldy #S.FD.PIPE.hMem - lda (pFD),y - - .DO AUXPIPE=1 - ldx #SYS.GetStkObjPtr - jsr K.SYSCALL2.AUX - .ELSE - jsr K.GetMemPtr get src buf - .FIN - - sty .3+1 - sta .7+1 Pipe Buffer Base - - ldy #S.FD.PIPE.Head+1 - clc - adc (pFD),y - sta .3+2 - - dey - lda (pFD),y - tay S.FD.PIPE.Head - - ldx #0 - -.10 .DO AUXPIPE=1 - sta SETWRITEAUX - .FIN - -.1 inc IO.Counter - bne .2 - inc IO.Counter+1 - beq .8 - -.2 lda $ffff,x SELF MODIFIED -.3 sta $ffff,y SELF MODIFIED - - inx - bne .4 - - inc .2+2 - -.4 iny - bne .1 - - .DO AUXPIPE=1 - sta CLRWRITEAUX - .FIN - - ldy #S.FD.PIPE.Head+1 - lda (pFD),y - inc -.5 cmp #$ff SELF MODIFIED - beq .6 - - sta (pFD),y - inc .3+2 - ldy #0 - bra .10 - -.6 lda #0 - sta (pFD),y - -.7 lda #$ff SELF MODIFIED - sta .3+2 - ldy #0 - bra .10 - -.8 .DO AUXPIPE=1 - sta CLRWRITEAUX - .FIN - - tya - ldy #S.FD.PIPE.Head - sta (pFD),y - -.80 ldy #$ff SELF MODIFIED -.81 lda #$ff SELF MODIFIED - clc Y,A = bytes written - rts */-------------------------------------- * # IOCTL * ## C @@ -709,10 +208,9 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S K.IOCTL tax lda Dev.Table,x beq K.IOCTL.9 - - sta pFD+1 - lda Dev.Table-1,x - sta pFD + + ldy Dev.Table-1,x + >STYA pFD jsr K.IOCTL.GetPDrv @@ -769,7 +267,7 @@ IO.EOF.REG >MLICALL MLIGETMARK dey bpl .2 -IO.EOF.TRUE lda #$ff + lda #$ff * clc IO.EOF.REG.RTS rts *-------------------------------------- @@ -790,13 +288,6 @@ IO.EOF.SSOCK ldy #S.FD.SSOCK.EOF .1 jmp $FFFF SELF MODIFIED *-------------------------------------- -IO.EOF.PIPE clc - ldy #S.FD.PIPE.Used - lda (pFD),y - iny - ora (pFD),y - beq IO.EOF.TRUE - IO.EOF.FALSE lda #0 * clc rts diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 1987f1cc..c1a7f6c6 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -632,6 +632,39 @@ MEM.GetKrnlBuf pha .99 lda #E.OOM * sec rts +*/-------------------------------------- +* # GetMemStat +* **In:** +* Y,A = Ptr to 24 bytes buffer +* ## RETURN VALUE +* Buffer filled with memory stats +*\-------------------------------------- +K.GetMemStat >STYA ZPPtr1 + + ldy #23 + ldx #7 + +.1 lda DevMgr.Stat,x + sta (ZPPtr1),y + dey + dex + bpl .1 + + sta SETREADAUX + + jsr .2 + + sta CLRREADAUX + +.2 ldx #7 + +.3 lda Mem.Table,x + sta (ZPPtr1),y + dey + dex + bpl .3 + + rts *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.MEM diff --git a/SYS/KERNEL.S.PIPE.txt b/SYS/KERNEL.S.PIPE.txt new file mode 100644 index 00000000..6ad08baa --- /dev/null +++ b/SYS/KERNEL.S.PIPE.txt @@ -0,0 +1,331 @@ +NEW + AUTO 3,1 +*-------------------------------------- +IO.PIPE.SRCBUF .EQ ZPDRV +IO.PIPE.DSTBUF .EQ ZPDRV+2 +IO.PIPE.CNT .EQ ZPDRV+4 +IO.PIPE.BASEH .EQ ZPDRV+6 +IO.PIPE.BUFH .EQ ZPDRV+7 +IO.PIPE.SIZEH .EQ ZPDRV+8 +*-------------------------------------- +IO.OPEN.PIPE ldy #S.FD.PIPE.S + lda (pFD),y + inc + sta (pFD),y + + lda IO.hFD + clc + rts +*-------------------------------------- +IO.CLOSE.PIPE ldy #S.FD.PIPE.S + + lda (pFD),y + bmi .1 remote PS closed its end + + lda #$80 + sta (pFD),y + clc + rts + +.1 jsr IO.CLOSE.NOD + + ldy #S.FD.PIPE.hMem + + lda (pFD),y + beq .2 + + .DO AUXPIPE=1 + ldx #SYS.FreeStkObj + jsr K.SYSCALL2.AUX + .ELSE + jsr K.FreeMem + .FIN + +.2 lda IO.hFD + jmp K.FreeMem +*-------------------------------------- +* (pStack)+2 count +* (pStack)+0 buf +*-------------------------------------- +IO.WRITE.PIPE ldy #S.FD.PIPE.S + lda (pFD),y + + bpl .10 + jmp IO.READ.PIPE.EOF Remote PS closed the Pipe + +.10 ldy #S.FD.PIPE.Free + lda (pFD),y + ldy #2 + cmp (pStack),y + + ldy #S.FD.PIPE.Free+1 + lda (pFD),y + ldy #3 + sbc (pStack),y + bcc IO.READ.PIPE.NODATA not enough room in PIPE + + >PULLW IO.PIPE.SRCBUF + + ldy #S.FD.PIPE.Head+1 + jsr IO.PIPE.GET.BUF + + >STYA IO.PIPE.DSTBUF + + >PULLA get cnt lo + sta IO.PIPE.CNT + eor #$ff + tax + + >PULLA get cnt hi + sta IO.PIPE.CNT+1 + eor #$ff + pha + + ldy #S.FD.PIPE.Head + lda (pFD),y + tay + + .DO AUXPIPE=1 + sta SETWRITEAUX + .FIN + +.1 inx + bne .2 + + pla + inc + beq .8 + + pha + +.2 lda (IO.PIPE.SRCBUF) + sta (IO.PIPE.DSTBUF),y + + inc IO.PIPE.SRCBUF + bne .4 + + inc IO.PIPE.SRCBUF+1 + +.4 iny + bne .1 + + lda IO.PIPE.BUFH + inc + cmp IO.PIPE.SIZEH + beq .6 + + sta IO.PIPE.BUFH + inc IO.PIPE.DSTBUF+1 + bra .1 + +.6 stz IO.PIPE.BUFH + + lda IO.PIPE.BASEH Pipe Buffer Base + sta IO.PIPE.DSTBUF+1 + bra .1 + +.8 .DO AUXPIPE=1 + sta CLRWRITEAUX + .FIN + + tya + ldy #S.FD.PIPE.Head + sta (pFD),y + iny + lda IO.PIPE.BUFH + sta (pFD),y + + ldy #S.FD.PIPE.Free + jsr IO.PIPE.SUB.CNT + + iny #S.FD.PIPE.Used + + jsr IO.PIPE.ADD.CNT + jmp IO.READ.PIPE.EXIT + +IO.READ.PIPE.EOF + lda #MLI.E.EOF + .HS 2C BIT ABS +IO.READ.PIPE.NODATA + lda #E.NODATA + sec + >RET 4 +*-------------------------------------- +IO.READ.PIPE ldy #S.FD.PIPE.Used+1 + + lda (pFD),y Data ? + dey + ora (pFD),y + bne .10 yes... + + ldy #S.FD.PIPE.S + lda (pFD),y + bmi IO.READ.PIPE.EOF Remote PS closed the Pipe + bpl IO.READ.PIPE.NODATA + +.10 >PULLW IO.PIPE.DSTBUF get dest buf + + ldy #S.FD.PIPE.Tail+1 + jsr IO.PIPE.GET.BUF + + >STYA IO.PIPE.SRCBUF + + >PULLA get cnt lo + tax + ldy #S.FD.PIPE.Used + cmp (pFD),y + + >PULLA get cnt hi + pha + iny #S.FD.PIPE.Used+1 + sbc (pFD),y + pla + bcc .12 cnt < Used + + dey + lda (pFD),y + tax + iny + lda (pFD),y X,A = Used + +.12 stx IO.PIPE.CNT + sta IO.PIPE.CNT+1 + + eor #$ff + pha + + txa + eor #$ff + tax + + ldy #S.FD.PIPE.Tail + lda (pFD),y + tay + + .DO AUXPIPE=1 + sta SETREADAUX + .FIN + +.1 inx + bne .2 + + pla + inc + beq .8 + + pha + +.2 lda (IO.PIPE.SRCBUF),y + sta (IO.PIPE.DSTBUF) + + inc IO.PIPE.DSTBUF + bne .4 + + inc IO.PIPE.DSTBUF+1 + +.4 iny + bne .1 + + lda IO.PIPE.BUFH + inc + cmp IO.PIPE.SIZEH + beq .6 + + sta IO.PIPE.BUFH + inc IO.PIPE.SRCBUF+1 + bra .1 + +.6 stz IO.PIPE.BUFH + + lda IO.PIPE.BASEH + sta IO.PIPE.SRCBUF+1 Restore Pipe Buf base + bra .1 + +.8 .DO AUXPIPE=1 + sta CLRREADAUX + .FIN + + tya + ldy #S.FD.PIPE.Tail + sta (pFD),y + iny + lda IO.PIPE.BUFH + sta (pFD),y + + ldy #S.FD.PIPE.Free + jsr IO.PIPE.ADD.CNT + + iny #S.FD.PIPE.Used + + jsr IO.PIPE.SUB.CNT +IO.READ.PIPE.EXIT + >LDYA IO.PIPE.CNT Y,A = bytes written + clc + rts +*-------------------------------------- +IO.PIPE.GET.BUF lda (pFD),y + sta IO.PIPE.BUFH + + ldy #S.FD.PIPE.Size+1 + lda (pFD),y + sta IO.PIPE.SIZEH + + ldy #S.FD.PIPE.hMem + lda (pFD),y + + .DO AUXPIPE=1 + ldx #SYS.GetStkObjPtr + jsr K.SYSCALL2.AUX + .ELSE + jsr K.GetMemPtr get src buf + .FIN + + sta IO.PIPE.BASEH Pipe Buffer Base + +* clc + adc IO.PIPE.BUFH + rts +*-------------------------------------- +IO.PIPE.ADD.CNT clc + lda (pFD),y + adc IO.PIPE.CNT + sta (pFD),y + + iny + + lda (pFD),y + adc IO.PIPE.CNT+1 + sta (pFD),y + rts +*-------------------------------------- +IO.PIPE.SUB.CNT sec + lda (pFD),y + sbc IO.PIPE.CNT + sta (pFD),y + + iny + + lda (pFD),y + sbc IO.PIPE.CNT+1 + sta (pFD),y + rts +*-------------------------------------- +IO.EOF.PIPE clc + ldy #S.FD.PIPE.Used + lda (pFD),y + iny + ora (pFD),y + beq .8 + + lda #0 +* clc + rts + +.8 lda #$ff +* clc + rts +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.PIPE +LOAD USR/SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 3aac5ba5..51765a00 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -1,38 +1,5 @@ NEW AUTO 3,1 -*/-------------------------------------- -* # GetMemStat -* **In:** -* Y,A = Ptr to 24 bytes buffer -* ## RETURN VALUE -* Buffer filled with memory stats -*\-------------------------------------- -K.GetMemStat >STYA ZPPtr1 - - ldy #23 - ldx #7 - -.1 lda DevMgr.Stat,x - sta (ZPPtr1),y - dey - dex - bpl .1 - - sta SETREADAUX - - jsr .2 - - sta CLRREADAUX - -.2 ldx #7 - -.3 lda Mem.Table,x - sta (ZPPtr1),y - dey - dex - bpl .3 - - rts *-------------------------------------- * # ChMod * change permissions of a file diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 6277d9d2..e0edbf28 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -55,7 +55,7 @@ K.FPutC jsr PFT.CheckNodeA >PUSHA >PUSHWI K.IOBuf buf - jsr IO.Write.I + jsr UNISTD.Write bcc K.PutChar.RET1 pop char... tay E.NODATA bpl K.PutChar.RET1 @@ -158,7 +158,7 @@ K.FPutS jsr PFT.CheckNodeA set IO.hFD >PUSHW ZPPtr2 - jsr IO.Write.I + jsr UNISTD.Write bcc K.PutS.RET2 tay bpl K.PutS.RET2 IO Erorr @@ -821,7 +821,7 @@ STDIO.Read.1 lda #0 inc read 1 byte >PUSHA >PUSHWI K.IOBuf - jmp IO.READ.I + jmp UNISTD.READ */-------------------------------------- * # SScanF * Read formatted data from string @@ -995,11 +995,11 @@ K.SScanF.Fwd jmp MEM.AddYToPtr2 Y=char count parsed K.FOpen jsr PFT.CheckPathYA bcs K.FOpen.RET4 - >PULLB K.Open.FLAGS - >PULLB K.Open.TYPE - >PULLW K.Open.AUXTYPE + >PULLB IO.Open.FLAGS + >PULLB IO.Open.TYPE + >PULLW IO.Open.AUXTYPE - jsr IO.Open.I + jsr UNISTD.Open bcs K.FClose.RTS jsr STDIO.NewHFile @@ -1024,7 +1024,7 @@ K.FClose jsr PFT.CheckNodeA sta .1+1 store hFile - jsr IO.Close.I + jsr UNISTD.Close bcs K.FClose.RTS .1 ldx #$ff SELF MODIFIED @@ -1052,7 +1052,7 @@ K.FClose jsr PFT.CheckNodeA K.FRead jsr PFT.CheckNodeA bcs K.FOpen.RET4 - jsr IO.Read.I + jsr UNISTD.Read bcs K.FWrite.9 K.FClose.RTS rts @@ -1073,7 +1073,7 @@ K.FClose.RTS rts K.FWrite jsr PFT.CheckNodeA bcs K.FOpen.RET4 - jsr IO.Write.I + jsr UNISTD.Write bcc K.FWrite.RTS K.FWrite.9 tay @@ -1128,18 +1128,16 @@ K.FSeek jsr PFT.CheckNodeA >PULLA whence tax - >PULLW ZPPtr1 offset LW - >PULLW ZPPtr2 offset HW - cpx #SEEK.END+1 + >PULLL ACC32 + + cpx #SEEK.END + beq .30 bcs .98 - jmp (.1,x) + dex + beq .20 -.1 .DA .10 - .DA .20 - .DA .30 -* SEEK.SET -.10 stz K.MLI.PARAMS+2 + stz K.MLI.PARAMS+2 stz K.MLI.PARAMS+3 stz K.MLI.PARAMS+4 bra .8 @@ -1154,16 +1152,16 @@ K.FSeek jsr PFT.CheckNodeA bcs .9 .8 ldy #0 - ldx #3 3 bytes, 24 bits!!! clc .81 lda K.MLI.PARAMS+2,y - adc ZPPtr1,y + adc ACC32,y sta K.MLI.PARAMS+2,y iny - dex + tya 3 bytes, 24 bits!!! + eor #3 bne .81 bcs .99 Offset out of range! diff --git a/SYS/KERNEL.S.UNISTD.txt b/SYS/KERNEL.S.UNISTD.txt new file mode 100644 index 00000000..d7bc47a7 --- /dev/null +++ b/SYS/KERNEL.S.UNISTD.txt @@ -0,0 +1,180 @@ +NEW + AUTO 3,1 +*/-------------------------------------- +* # open +* ## C +* `hFD open(const char *pathname, short int flags);` +* ## ASM +* **In:** +* `>PUSHB flags` +* `>LDYA pathname` +* `>SYSCALL open` +* ## RETURN VALUE +* A = hFD +* REG File created on ProDOS : T=TXT,X=$0000 +*\-------------------------------------- + .DUMMY + .OR ZPTMP+20 7 Bytes +IO.Open.FLAGS .BS 1 +IO.Open.TYPE .BS 1 +IO.Open.AUXTYPE .BS 2 +IO.hDev .BS 1 +IO.hFD .BS 1 +IO.hFILE .BS 1 + .ED +*-------------------------------------- +K.Open jsr PFT.YAToMLIPATH + >PULLB IO.Open.FLAGS + + lda #S.FI.T.TXT + sta IO.Open.TYPE + stz IO.Open.AUXTYPE + stz IO.Open.AUXTYPE+1 +*-------------------------------------- +UNISTD.Open ldx #5 /DEV/ + cpx K.MLI.PATH + bcs .9 + +.1 lda K.MLI.PATH,x + cmp IO.DEVDIR-1,x + bne .9 + dex + bne .1 +*-------------------------------------- +* /DEV/xxxxxx (CDEV,BDEV,LNK,DSOCK,SSOCK,PIPE) +*-------------------------------------- + >LDYAI K.MLI.PATH+6 skip $/DEV/ + + jsr K.GetDevByName + bcc .7 + + ldx #2 + +.10 lda Nod.Table.hPath-2,x + beq .3 + + jsr K.GetMemPtr + >STYA ZPPtr1 + + ldy #0 + +.2 lda (ZPPtr1),y + iny + cmp K.MLI.PATH,y + bne .3 + cmp #0 end of string ? + bne .2 + + lda Nod.Table.hFD-2,x return hFD + jsr IO.GetPFD + + bra .71 + +.3 inx + cpx #K.NOD.MAX+2 + bne .10 + + lda #MLI.E.NODEV +* sec + rts no OF found + +.7 stx IO.hDev + >STYA pFD + +.71 lda (pFD) #S.FD.T + tax + jmp (.8,x) + +.8 .DA STDIO.IOERR REG + .DA STDIO.IOERR DIR + .DA IO.OPEN.CDEV + .DA IO.OPEN.BDEV + .DA STDIO.IOERR LNK + .DA IO.OPEN.DSOCK + .DA IO.OPEN.SSOCK + .DA IO.OPEN.PIPE +.9 jmp IO.OPEN.REG +*/-------------------------------------- +* # close +* ## C +* `int close(hFD fd);` +* ## ASM +* **In:** +* `lda fd` +* `>SYSCALL close` +*\-------------------------------------- +K.Close jsr IO.GetPFD + +UNISTD.Close lda (pFD) #S.FD.T + tax + jmp (.1,x) + +.1 .DA IO.CLOSE.REG + .DA IO.CLOSE.DIR + .DA IO.CLOSE.CDEV + .DA IO.CLOSE.BDEV + .DA STDIO.IOERR LNK + .DA IO.CLOSE.DSOCK + .DA IO.CLOSE.SSOCK + .DA IO.CLOSE.PIPE +*/-------------------------------------- +* # read +* ## C +* `int read(hFD fd, void *buf, int count);` +* ## ASM +* **In:** +* `>PUSHWI count` +* `>PUSHW buf` +* `lda fd` +* `>SYSCALL read` +* ## RETURN VALUE +* CC: Y,A = bytes read +* CS: A = EC +*\-------------------------------------- +K.Read jsr IO.GetPFD + +UNISTD.Read lda (pFD) #S.FD.T + tax + jmp (.1,x) + +.1 .DA IO.READ.REG + .DA STDIO.IOERR DIR + .DA IO.READ.CDEV + .DA STDIO.IOERR BDEV + .DA STDIO.IOERR LNK + .DA STDIO.IOERR DSOCK + .DA IO.READ.SSOCK + .DA IO.READ.PIPE +*/-------------------------------------- +* # write +* ## C +* `int write(hFD fd, const void *buf, int count);` +* ## ASM +* **In:** +* `>PUSHWI count` +* `>PUSHW buf` +* `lda fd` +* `>SYSCALL write` +* ## RETURN VALUE +* CC: Y,A = bytes written +* CS: A = EC +*\-------------------------------------- +K.Write jsr IO.GetPFD + +UNISTD.Write lda (pFD) #S.FD.T + tax + jmp (.1,x) + +.1 .DA IO.WRITE.REG + .DA STDIO.IOERR DIR + .DA IO.WRITE.CDEV + .DA STDIO.IOERR BDEV + .DA STDIO.IOERR LNK + .DA STDIO.IOERR DSOCK + .DA IO.WRITE.SSOCK + .DA IO.WRITE.PIPE +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.UNISTD +LOAD USR/SRC/SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index bdcc4e22..c4074e09 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -43,6 +43,7 @@ A2osX.D1 .PH $D000 .DA #RRAMWRAMBNK1 .INB USR/SRC/SYS/KERNEL.S.STAT .INB USR/SRC/SYS/KERNEL.S.DIRENT + .INB USR/SRC/SYS/KERNEL.S.UNISTD .INB USR/SRC/SYS/KERNEL.S.STDIO .INB USR/SRC/SYS/KERNEL.S.STDLIB .INB USR/SRC/SYS/KERNEL.S.DEV @@ -68,6 +69,7 @@ A2osX.E0 .PH $E000 .INB USR/SRC/SYS/KERNEL.S.SHARED ********* TMP ***** go to A2osX.D1 .INB USR/SRC/SYS/KERNEL.S.IO + .INB USR/SRC/SYS/KERNEL.S.PIPE ********* TMP ***** go to A2osX.D2 *-------------------------------------- PWD.bDirty .BS 1