A2osX/SYS/KERNEL.S.CHR.txt

203 lines
3.9 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PR#3
PREFIX /A2OSX.SRC
LOMEM $A00
INC 1
AUTO 6
*/--------------------------------------
* #FPutCAY
* Print A (char) to File
* ##In:
* A : char to print
* Y = hFILE
* ##Out:
* CC = success
*\--------------------------------------
K.FPutCAY sta K.PutC.Char
sty K.PutC.Node
tya
phy
bne K.PutCA.1
K.PutCA.8 ply
clc
rts
*/--------------------------------------
* #PutCA
* Print A (char) to StdOut
* ##In:
* A : char to print
* ##Out:
* CC = success
*\--------------------------------------
K.PutCA sta K.PutC.Char
phy
ldy #S.PS.hStdOut
lda (pPs),y
beq K.PutCA.8 NUL
phx
K.PutCA.1 sta K.PutC.Node
jsr K.GetMemPtrA
>STYA pDev
ldy #S.NODE.T
lda (pDev),y
asl
tax
jsr K.PutCA.Jmp
plx
ply
rts
*--------------------------------------
K.PutCA.Jmp jmp (.1,x)
.1 .DA K.PutCA.REG
.DA K.CHR.IOERR DIR
.DA K.PutCA.CDEV
.DA K.CHR.IOERR BDEV
.DA K.CHR.IOERR LNK
.DA K.CHR.IOERR DSOCK
.DA K.PutCA.SSOCK
.DA K.PutCA.FIFO
*--------------------------------------
K.PutCA.REG lda K.PutC.Node
ldy K.PutC.Char
jmp K.FWriteAY
*--------------------------------------
K.PutCA.CDEV ldy #S.NODE.DEV.JMP
lda (pDev),y
sta .1+1
iny
lda (pDev),y
sta .1+2
lda K.PutC.Char
ldx #DEVMGR.WRITE
.1 jmp $ffff
*--------------------------------------
K.PutCA.SSOCK sec
rts
*--------------------------------------
K.PutCA.FIFO ldy #S.NODE.FIFO.S
lda (pDev),y
beq .9 Remote PS did not opened yet the pipe
cmp #S.NODE.FIFO.S.Closed
beq .99 Remote PS closed the Pipe
ldy #S.NODE.FIFO.hMem
lda (pDev),y
jsr K.GetMemPtrA
>STYA .1+2
ldy #S.NODE.FIFO.Head
lda (pDev),y
inc
dey #S.NODE.FIFO.Tail
cmp (pDev),y
beq .9 FIFO is full
iny
sta (pDev),y
tay
lda K.PutC.Char
.1 sta $ffff,y
clc
rts
.9 lda #MLI.ERR.VOLFULL
sec
rts
.99 lda #MLI.ERR.EOF
sec
rts
*--------------------------------------
K.PutC.Char .BS 1
K.PutC.Node .BS 1
*/--------------------------------------
* #FGetCA
* Get char from File
* ##In:
* A = hFILE
* ##Out:
* CC = success
* A = char
*\--------------------------------------
K.FGetCA
*/--------------------------------------
* #GetC
* Get char from StdIn
* ##In:
* none.
* ##Out:
* CC = success
* A = char
*\--------------------------------------
K.GetC ldy #S.PS.hStdIn
lda (pPs),y
sta K.PutC.Node
jsr K.GetMemPtrA
>STYA pDev
ldy #S.NODE.T
lda (pDev),y
asl
tax
jmp (.1,x)
.1 .DA K.GetC.REG
.DA K.CHR.IOERR DIR
.DA K.GetC.CDEV
.DA K.CHR.IOERR BDEV
.DA K.CHR.IOERR LNK
.DA K.CHR.IOERR DSOCK
.DA K.GetC.SSOCK
.DA K.GetC.FIFO
*--------------------------------------
K.GetC.REG
*--------------------------------------
K.GetC.CDEV ldx #DEVMGR.READ
ldy #S.NODE.DEV.JMP
lda (pDev),y
sta .1+1
iny
lda (pDev),y
sta .1+2
.1 jmp $ffff
*--------------------------------------
K.GetC.SSOCK
*--------------------------------------
K.GetC.FIFO
*/--------------------------------------
* #FPutS
* Print String to FILE
* ##In:
* PUSHW : CPtr
* PUSHB : hFILE
* ##Out:
* CC = success
*\--------------------------------------
K.FPutS
*/--------------------------------------
* #PutSYA
* Print String to StdOut
* ##In:
* Y,A : CPtr
* ##Out:
* CC = success
*\--------------------------------------
K.PutSYA
*--------------------------------------
K.FGetS
*--------------------------------------
K.GetSYA
bra *
*--------------------------------------
K.CHR.IOERR lda #MLI.ERR.IO
sec
rts
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.CHR
LOAD SYS/KERNEL.S
ASM