diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 34df4d18..c346bcb2 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/SH.S.EXP.txt b/BIN/SH.S.EXP.txt index 8418be94..88687ea2 100644 --- a/BIN/SH.S.EXP.txt +++ b/BIN/SH.S.EXP.txt @@ -202,12 +202,16 @@ EXP.TEST.BINARY >LDA.G CORE.Operator lda #$80 >STA.G CORE.Operator -.1 jsr CORE.ArgV.Next +.1 >LDYA ZPArgVBufPrev + >STYA ZPPtr1 + + jsr CORE.ArgV.Next beq .9 - >PUSHW ZPArgVBufPrev + >PUSHW ZPPtr1 >LDYA ZPArgVBufPtr >SYSCALL strcmp + ror CS if != and #$80 eor #$80 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 201148f4..6d408d55 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -4,7 +4,7 @@ AUTO 4,1 *-------------------------------------- K.VER .EQ $5C00 92.0 K.ENV.SIZE .EQ 256 -K.PIPE.SIZE .EQ 256 +K.PIPE.SIZE .EQ 512 *-------------------------------------- K.MEM.ALIGN .EQ 16 K.MEM.nALIGNm1 .EQ $F0 @@ -474,9 +474,11 @@ S.FD.PIPE.S .EQ 2 S.FD.PIPE.S.Opened .EQ %10000000 S.FD.PIPE.hMem .EQ 3 S.FD.PIPE.Tail .EQ 4 -S.FD.PIPE.Head .EQ 5 +S.FD.PIPE.Head .EQ 6 +S.FD.PIPE.Free .EQ 8 +S.FD.PIPE.Used .EQ 10 * -S.FD.PIPE .EQ 6 +S.FD.PIPE .EQ 12 *-------------------------------------- * PS STRUCT *-------------------------------------- diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 63d70c07..9de7b98b 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -445,41 +445,61 @@ IO.READ.PIPE >PULLW .3+1 S.IOCTL.BUFPTR * (pStack)+0 buf * (pStack)+2 count *-------------------------------------- -IO.WRITE.PIPE >PULLW .2+1 S.IOCTL.BUFPTR - >PULLA S.IOCTL.BYTECNT.LO - eor #$ff - sta IO.Counter - >PULLA S.IOCTL.BYTECNT.HI - eor #$ff - sta IO.Counter+1 - - ldy #S.FD.PIPE.S +IO.WRITE.PIPE ldy #S.FD.PIPE.S lda (pFD),y beq .99 Remote PS closed the Pipe + sec + ldy #S.FD.PIPE.Free + lda (pFD),y + ldy #2 + sbc (pStack),y + tax + ldy #S.FD.PIPE.Free+1 + lda (pFD),y + ldy #3 + sbc (pStack),y + + bcc .9 not enough room in PIPE + + ldy #S.FD.PIPE.Free+1 + sta (pFD),y + dey + txa + sta (pFD),y store new Free + + clc + ldy #2 + lda (pStack),y + pha + eor #$ff + sta IO.Counter + pla + ldy #S.FD.PIPE.Used + adc (pFD),y + sta (pFD),y + ldy #3 + lda (pStack),y + pha + eor #$ff + sta IO.Counter+1 + pla + ldy #S.FD.PIPE.Used+1 + adc (pFD),y + sta (pFD),y + + lda (pStack) + sta .2+1 + ldy #1 + lda (pStack),y + sta .2+2 + ldy #S.FD.PIPE.hMem lda (pFD),y jsr K.GetMemPtr >STYA .3+1 ldx #0 - -.1 inc IO.Counter - bne .11 - inc IO.Counter+1 - beq .8 - -.11 ldy #S.FD.PIPE.Head - lda (pFD),y - inc - dey #S.FD.PIPE.Tail - cmp (pFD),y - beq .9 PIPE is full - - iny #S.FD.PIPE.Head - sta (pFD),y - dec - tay .2 lda $ffff,x SELF MODIFIED .3 sta $ffff,y SELF MODIFIED @@ -491,15 +511,15 @@ IO.WRITE.PIPE >PULLW .2+1 S.IOCTL.BUFPTR tay lda #0 Y,A = bytes written clc - rts + >RET 4 -.9 lda #MLI.E.VOLFULL +.9 lda #0 BLOCKING I/O sec rts .99 lda #MLI.E.EOF sec - rts + >RET 4 */-------------------------------------- * # IOCTL * ## C diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 78cf2ac0..66a0966f 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -302,6 +302,13 @@ K.Pipe >LDYAI K.PIPE.SIZE lda #S.FD.PIPE.S.Opened sta (pFD),y + ldy #S.FD.PIPE.Free + lda #K.PIPE.SIZE + sta (pFD),y + iny + lda /K.PIPE.SIZE + sta (pFD),y + iny S.FD.PIPE.hMem .1 lda #$ff Self Modified sta (pFD),y