A2osX/SYS/KERNEL.S.IO.txt

326 lines
6.7 KiB
Plaintext
Raw Normal View History

NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
2018-07-11 15:13:29 +00:00
*/--------------------------------------
* # open
* ## C
2018-08-27 15:26:01 +00:00
* `hFD open(const char *pathname, int flags);`
2018-07-11 15:13:29 +00:00
* ## ASM
* **In:**
* `>PUSHB flags`
* `>LDYA pathname`
* `>SYSCALL open`
* **Out:**
* A = hFD
* note : if file is created on ProDOS : T=TXT,X=$0000
*\--------------------------------------
K.Open jsr PFT.CheckPathYA check if not /mnt
2018-09-05 15:22:46 +00:00
K.Open.I jsr STDIO.SetMLIPathYA local pathname...
>PULLB K.FOpen.MODE
2018-08-08 15:13:37 +00:00
ldx #5 $/DEV/
2018-07-11 15:13:29 +00:00
cpx K.MLI.PATH
2018-07-12 15:20:39 +00:00
bcs K.Open.REG
2018-07-11 15:13:29 +00:00
.1 lda K.MLI.PATH,x
cmp IO.DEVDIR,x
bne K.Open.REG
dex
bne .1
2018-09-05 15:22:46 +00:00
*--------------------------------------
2018-08-08 15:13:37 +00:00
K.Open.DEV >LDYAI K.MLI.PATH+6 skip $/DEV/
2018-07-11 15:13:29 +00:00
jsr K.GetDevByName
bcs .9
>STYA pFD
2018-08-08 15:13:37 +00:00
stx .1+1 DEVID
2018-07-11 15:13:29 +00:00
2018-09-06 15:36:44 +00:00
jsr K.IOCTL.GetPDrv
2018-07-12 15:20:39 +00:00
2018-08-08 15:13:37 +00:00
.1 lda #$ff SELF MODIFIED pass A=DEVID To Driver
2018-07-12 15:20:39 +00:00
ldx #IOCTL.OPEN
2018-09-06 15:36:44 +00:00
.2 jsr K.IOCTL.pDrvJmp
2018-09-05 15:22:46 +00:00
bcs .9
2018-07-12 15:20:39 +00:00
2018-08-08 15:13:37 +00:00
ldx .1+1
lda Dev.Table.hFD,x
2018-09-05 15:22:46 +00:00
.9 rts
*--------------------------------------
K.Open.REG lda #S.FI.T.TXT
sta K.FOpen.TYPE
stz K.FOpen.AUXTYPE
stz K.FOpen.AUXTYPE+1
jmp K.FOpen.I
2018-08-27 15:26:01 +00:00
*/--------------------------------------
* # close
* ## C
* `int close(hFD fd);`
* ## ASM
* **In:**
* `lda fd`
* `>SYSCALL close`
*\--------------------------------------
2018-07-11 15:13:29 +00:00
K.Close jsr K.GetMemPtr
2018-08-08 15:13:37 +00:00
bcs .9
2018-07-11 15:13:29 +00:00
>STYA pFD
lda (pFD) #S.FD.T
tax
jmp (.1,x)
.1 .DA IO.CLOSE.REG
.DA STDIO.IOERR DIR
.DA IO.CLOSE.CDEV
.DA STDIO.IOERR BDEV
.DA STDIO.IOERR LNK
.DA STDIO.IOERR DSOCK
.DA IO.CLOSE.SSOCK
2018-10-02 15:52:30 +00:00
.DA IO.CLOSE.PIPE
2018-08-08 15:13:37 +00:00
.9 lda #MLI.E.NODEV
sec
rts
2018-07-10 15:33:13 +00:00
*--------------------------------------
2018-07-11 15:13:29 +00:00
IO.CLOSE.REG
2018-07-10 15:33:13 +00:00
*--------------------------------------
2018-07-11 15:13:29 +00:00
IO.CLOSE.CDEV
*--------------------------------------
IO.CLOSE.SSOCK
*--------------------------------------
2018-10-02 15:52:30 +00:00
IO.CLOSE.PIPE clc
2018-07-18 15:30:42 +00:00
rts
*/--------------------------------------
* # read
* ## C
2018-08-27 15:26:01 +00:00
* `int read(hFD fd, void *buf, int count);`
* ## ASM
* **In:**
* `>PUSHWI count`
* `>PUSHW buf`
* `lda fd`
* `>SYSCALL read`
* **Out:**
* CC: Y,A = bytes read
* CS: A = EC
2018-07-18 15:30:42 +00:00
*\--------------------------------------
2018-08-08 15:13:37 +00:00
K.Read jsr K.GetMemPtr
bcs K.Write.9
2018-07-18 15:30:42 +00:00
2018-08-08 15:13:37 +00:00
>STYA pFD
2018-07-18 15:30:42 +00:00
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
2018-07-19 15:33:55 +00:00
IO.Read.I lda (pFD) #S.FD.T
2018-07-18 15:30:42 +00:00
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
2018-10-02 15:52:30 +00:00
.DA IO.READ.PIPE
2018-08-27 15:26:01 +00:00
*/--------------------------------------
* # write
* ## C
* `int write(hFD fd, const void *buf, int count);`
* ## ASM
* **In:**
* `>PUSHWI count`
* `>PUSHW buf`
* `lda fd`
* `>SYSCALL write`
* **Out:**
* CC: Y,A = bytes written
* CS: A = EC
*\--------------------------------------
2018-08-08 15:13:37 +00:00
K.Write jsr K.GetMemPtr
2018-07-13 14:38:24 +00:00
bcs K.Write.9
2018-07-11 15:13:29 +00:00
2018-08-08 15:13:37 +00:00
>STYA pFD
2018-07-13 14:38:24 +00:00
>PULLW K.S.IOCTL+S.IOCTL.BUFPTR
>PULLW K.S.IOCTL+S.IOCTL.BYTECNT
2018-07-19 15:33:55 +00:00
IO.Write.I lda (pFD) #S.FD.T
2018-06-19 05:55:12 +00:00
tax
jmp (.1,x)
2018-07-11 15:13:29 +00:00
2018-06-19 15:08:22 +00:00
.1 .DA IO.WRITE.REG
2018-06-19 05:55:12 +00:00
.DA STDIO.IOERR DIR
2018-06-19 15:08:22 +00:00
.DA IO.WRITE.CDEV
2018-06-19 05:55:12 +00:00
.DA STDIO.IOERR BDEV
.DA STDIO.IOERR LNK
.DA STDIO.IOERR DSOCK
2018-06-19 15:08:22 +00:00
.DA IO.WRITE.SSOCK
2018-10-02 15:52:30 +00:00
.DA IO.WRITE.PIPE
2018-07-18 15:30:42 +00:00
2018-08-08 15:13:37 +00:00
K.Write.9 lda #MLI.E.NODEV
>RET 4
2018-06-19 05:55:12 +00:00
*--------------------------------------
2018-08-08 15:13:37 +00:00
IO.READ.REG ldx #MLIREAD
.HS 2C BIT ABS
2018-07-24 16:00:24 +00:00
*--------------------------------------
2018-08-08 15:13:37 +00:00
IO.WRITE.REG ldx #MLIWRITE
2018-07-10 15:33:13 +00:00
ldy #S.FD.REG.REF
2018-07-24 16:00:24 +00:00
lda (pFD),y
2018-08-08 15:13:37 +00:00
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
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr GP.MLICall
2018-09-06 15:36:44 +00:00
>LDYA K.MLI.PARAMS+6
2018-08-08 15:13:37 +00:00
rts
2018-06-19 05:55:12 +00:00
*--------------------------------------
2018-07-24 16:00:24 +00:00
IO.READ.CDEV ldx #IOCTL.READ
.HS 2C BIT ABS
*--------------------------------------
IO.WRITE.CDEV ldx #IOCTL.WRITE
2018-09-06 15:36:44 +00:00
jsr K.IOCTL.GetPDRV
2018-06-19 05:55:12 +00:00
2018-07-13 14:38:24 +00:00
>LDYAI K.S.IOCTL
2018-07-24 16:00:24 +00:00
2018-09-06 15:36:44 +00:00
.1 jsr K.IOCTL.pDrvJmp
2018-08-27 15:26:01 +00:00
bcs .9
>LDYA K.S.IOCTL+S.IOCTL.BYTECNT
.9 rts
2018-06-19 05:55:12 +00:00
*--------------------------------------
2018-09-28 15:24:44 +00:00
IO.WRITE.SSOCK ldy #S.FD.SOCK.WRITE
2018-07-24 16:00:24 +00:00
.HS 2C BIT ABS
*--------------------------------------
2018-09-28 15:24:44 +00:00
IO.READ.SSOCK ldy #S.FD.SOCK.READ
2018-07-24 16:00:24 +00:00
lda (pFD),y
tax Function Offset in LIB
ldy #S.FD.HANDLER
lda (pFD),y
2018-06-21 15:12:10 +00:00
jsr K.GetMemPtr
2018-06-19 05:55:12 +00:00
>STYA .1
2018-09-18 15:22:51 +00:00
>PUSHW K.S.IOCTL+S.IOCTL.BYTECNT
>PUSHW K.S.IOCTL+S.IOCTL.BUFPTR
2018-09-28 15:24:44 +00:00
ldy #S.FD.SOCK.HSKT
2018-09-18 15:22:51 +00:00
lda (pFD),y
2018-06-19 05:55:12 +00:00
.1 jmp $ffff
*--------------------------------------
2018-10-02 15:52:30 +00:00
IO.READ.PIPE ldy #S.FD.PIPE.S
lda (pFD),y
bit #S.FD.PIPE.S.WOpened
beq .9 Remote PS did not opened yet the pipe
bit #S.FD.PIPE.S.WClosed
beq .99 Remote PS closed the Pipe
ldy #S.FD.PIPE.hMem
lda (pFD),y
jsr K.GetMemPtr
2018-07-24 16:00:24 +00:00
clc
rts
2018-10-02 15:52:30 +00:00
.9 lda #MLI.E.VOLFULL
sec
rts
.99 lda #MLI.E.EOF
sec
rts
2018-07-24 16:00:24 +00:00
*--------------------------------------
2018-10-02 15:52:30 +00:00
IO.WRITE.PIPE ldy #S.FD.PIPE.S
2018-07-10 15:33:13 +00:00
lda (pFD),y
2018-10-02 15:52:30 +00:00
bit #S.FD.PIPE.S.ROpened
2018-06-19 05:55:12 +00:00
beq .9 Remote PS did not opened yet the pipe
2018-10-02 15:52:30 +00:00
bit #S.FD.PIPE.S.RClosed
2018-06-19 05:55:12 +00:00
beq .99 Remote PS closed the Pipe
2018-10-02 15:52:30 +00:00
ldy #S.FD.PIPE.hMem
2018-07-10 15:33:13 +00:00
lda (pFD),y
2018-06-21 15:12:10 +00:00
jsr K.GetMemPtr
2018-06-19 05:55:12 +00:00
>STYA .1+2
2018-10-02 15:52:30 +00:00
ldy #S.FD.PIPE.Head
2018-07-10 15:33:13 +00:00
lda (pFD),y
2018-06-19 05:55:12 +00:00
inc
2018-10-02 15:52:30 +00:00
dey #S.FD.PIPE.Tail
2018-07-10 15:33:13 +00:00
cmp (pFD),y
2018-10-02 15:52:30 +00:00
beq .9 PIPE is full
2018-06-19 05:55:12 +00:00
iny
2018-07-10 15:33:13 +00:00
sta (pFD),y
2018-06-19 05:55:12 +00:00
tay
lda K.IOBuf
.1 sta $ffff,y
clc
rts
.9 lda #MLI.E.VOLFULL
2018-10-02 15:52:30 +00:00
sec
rts
2018-06-19 05:55:12 +00:00
.99 lda #MLI.E.EOF
sec
rts
2018-07-11 15:13:29 +00:00
*/--------------------------------------
* # IOCTL
* ## C
2018-08-08 15:13:37 +00:00
* `int ioctl(short int hFD, int request, void * param );`
2018-07-11 15:13:29 +00:00
* ## ASM
* **In:**
* `PUSHWI param`
2018-07-19 15:33:55 +00:00
* `PUSHBI request`
2018-08-08 15:13:37 +00:00
* `lda hFD`
2018-07-11 15:13:29 +00:00
* `>SYSCALL IOCTL`
* **Out:**
* Y,A = ...
*\--------------------------------------
2018-08-08 15:13:37 +00:00
K.IOCTL jsr K.GetMemPtr
2018-07-19 15:33:55 +00:00
bcs .9
2018-07-11 15:13:29 +00:00
2018-08-08 15:13:37 +00:00
>STYA pFD
2018-09-07 14:12:42 +00:00
jsr K.IOCTL.GetPDrv
2018-09-06 15:36:44 +00:00
2018-07-19 15:33:55 +00:00
>PULLA
tax request
>PULLYA param
2018-09-06 15:36:44 +00:00
jmp (pDRV) SELF MODIFIED x = op
2018-07-11 15:13:29 +00:00
2018-08-08 15:13:37 +00:00
.9 lda #MLI.E.NODEV
>RET 3
2018-09-06 15:36:44 +00:00
*--------------------------------------
K.IOCTL.GetPDrv ldy #S.FD.DEV.DRVPTR
lda (pFD),y
sta pDRV
iny
lda (pFD),y
sta pDRV+1
rts
K.IOCTL.pDrvJmp jmp (pDrv)
2018-07-11 15:13:29 +00:00
*/--------------------------------------
* # pipe
* ## C
* `int pipe(int pipefd[2]);`
* ## ASM
* **In:**
2018-08-08 15:13:37 +00:00
*\--------------------------------------
K.Pipe
.9 sec
2018-07-12 15:20:39 +00:00
rts
2018-07-10 15:33:13 +00:00
*--------------------------------------
2018-07-11 15:13:29 +00:00
IO.DEVDIR >PSTR "/DEV/"
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.IO
LOAD /A2OSX.SRC/SYS/KERNEL.S
ASM