Kernel version 0.9 : Introducing Node API, FIFOs, DEVs, and sockets....

This commit is contained in:
Rémy GIBERT 2016-12-09 17:36:24 +01:00
parent 68c61c225f
commit 53e429b7bd
20 changed files with 1335 additions and 245 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -133,11 +133,11 @@ CS.RUN ldy #bCANCEL
>SYSCALL PStrMatch >SYSCALL PStrMatch
bcs .8 no match, skip.... bcs .8 no match, skip....
.4 ldy #S.STAT.PRODOS.DRIVE .4 ldy #S.STAT.P.DRIVE
lda (ZPPtr2),y ProDOS Device ? lda (ZPPtr2),y ProDOS Device ?
bne .5 bne .5
ldy #S.STAT.PRODOS.TYPE ldy #S.STAT.P.TYPE
lda (ZPPtr2),y lda (ZPPtr2),y
cmp #$0F Directory ? cmp #$0F Directory ?
bne .6 bne .6
@ -169,7 +169,7 @@ CS.RUN.DEV ldy #bLong
lda (pData),y lda (pData),y
bpl CS.RUN.DIR bpl CS.RUN.DIR
ldy #S.STAT.PRODOS.DEVBLOCKS+1 ldy #S.STAT.P.DEVBLOCKS+1
>PUSHB (ZPPtr2),y >PUSHB (ZPPtr2),y
dey dey
>PUSHB (ZPPtr2),y >PUSHB (ZPPtr2),y
@ -178,7 +178,7 @@ CS.RUN.DEV ldy #bLong
dey dey
>PUSHB (ZPPtr2),y >PUSHB (ZPPtr2),y
ldy #S.STAT.PRODOS.DRIVE ldy #S.STAT.P.DRIVE
>PUSHB (ZPPtr2),y >PUSHB (ZPPtr2),y
dey SLOT dey SLOT
>PUSHB (ZPPtr2),y >PUSHB (ZPPtr2),y
@ -300,7 +300,7 @@ CS.RUN.FILE ldy #bLong
lda (ZPPtr2),y lda (ZPPtr2),y
>PUSHA File Mode >PUSHA File Mode
ldy #S.STAT.PRODOS.AUXTYPE+1 ldy #S.STAT.P.AUXTYPE+1
lda (ZPPtr2),y lda (ZPPtr2),y
>PUSHA >PUSHA
dey dey

View File

@ -128,11 +128,11 @@ CS.RUN ldy #bCANCEL
>SYSCALL PStrMatch >SYSCALL PStrMatch
bcs .8 no match, skip.... bcs .8 no match, skip....
.4 ldy #S.STAT.PRODOS.DRIVE .4 ldy #S.STAT.P.DRIVE
lda (ZPPtr2),y ProDOS Device ? lda (ZPPtr2),y ProDOS Device ?
bne .5 bne .5
ldy #S.STAT.PRODOS.TYPE ldy #S.STAT.P.TYPE
lda (ZPPtr2),y lda (ZPPtr2),y
cmp #$0F Directory ? cmp #$0F Directory ?
bne .6 bne .6

View File

@ -139,11 +139,11 @@ CS.RUN ldy #bCANCEL
>SYSCALL PStrMatch >SYSCALL PStrMatch
bcs .8 no match, skip.... bcs .8 no match, skip....
.4 ldy #S.STAT.PRODOS.DRIVE .4 ldy #S.STAT.P.DRIVE
lda (ZPPtr2),y ProDOS Device ? lda (ZPPtr2),y ProDOS Device ?
bne .5 bne .5
ldy #S.STAT.PRODOS.TYPE ldy #S.STAT.P.TYPE
lda (ZPPtr2),y lda (ZPPtr2),y
cmp #$0F Directory ? cmp #$0F Directory ?
bne .6 bne .6

View File

@ -86,7 +86,7 @@ InitSrcDirYA ldx #0
bcs .1 File/DIR does not exists, go extract pattern bcs .1 File/DIR does not exists, go extract pattern
lda STAT+S.STAT.PRODOS.TYPE lda STAT+S.STAT.P.TYPE
cmp #$0f cmp #$0f
beq .5 TYPE=DIR, do not extract wildcard beq .5 TYPE=DIR, do not extract wildcard

View File

@ -63,6 +63,7 @@ D.STACK.TOP .EQ $03F0 ...Down to $0300
KrnBuf256 .EQ $0C00 Main KrnBuf256 .EQ $0C00 Main
*-------------------------------------- *--------------------------------------
MLICALL.PARAMS .EQ $0D00 Main, $12 bytes min !!!! MLICALL.PARAMS .EQ $0D00 Main, $12 bytes min !!!!
MLICALL.TMPBUF .EQ $0D12 Small buffer (14 bytes) for MLI calls
BLKCALL.PARAMS .EQ $0D20 Max 6 Bytes copied to/from $42->$47 before Firmware call BLKCALL.PARAMS .EQ $0D20 Max 6 Bytes copied to/from $42->$47 before Firmware call
PRTCALL.PARAMS .EQ $D030 Max 8 bytes for smartport cmdnum $0->$9 PRTCALL.PARAMS .EQ $D030 Max 8 bytes for smartport cmdnum $0->$9
KrnSTAT .EQ $0D40 S.STAT KrnSTAT .EQ $0D40 S.STAT
@ -318,24 +319,6 @@ S.MEMSTAT.DH .EQ 20
* *
S.MEMSTAT .EQ 24 S.MEMSTAT .EQ 24
*-------------------------------------- *--------------------------------------
* DEVMGR (old API)
*--------------------------------------
S.DEV.CODE .EQ 0 cld,jmp...
S.DEV.JMP .EQ 2 ...(code,x)
S.DEV.ID .EQ 4
S.DEV.F .EQ 5
S.DEV.F.INUSE .EQ %10000000
S.DEV.F.BUSY .EQ %01000000
S.DEV.F.SHARE .EQ %00100000 Device is shareable
S.DEV.F.IRQ .EQ %00010000 Device is irq driven
S.DEV.F.EVENT .EQ %00001000 Device is event driven
S.DEV.F.COUT .EQ %00000100 Device supports Char OUT
S.DEV.F.BLOCK .EQ %00000010
S.DEV.F.CHAR .EQ %00000001
S.DEV.NAME .EQ 6 5 Bytes : LEN+NUL KBD CON COMx LPTx ETHx
*
S.DEV .EQ 16
*--------------------------------------
S.DEVINFO.TYPE .EQ 0 S.DEVINFO.TYPE .EQ 0
S.DEVINFO.TYPE.CHAR .EQ %00000001 S.DEVINFO.TYPE.CHAR .EQ %00000001
S.DEVINFO.TYPE.XY .EQ %00000010 S.DEVINFO.TYPE.XY .EQ %00000010
@ -376,7 +359,25 @@ DEVMGR.GFX.HLINE .EQ 18
DEVMGR.GFX.VLINE .EQ 20 DEVMGR.GFX.VLINE .EQ 20
DEVMGR.GFX.BITBLT .EQ 22 DEVMGR.GFX.BITBLT .EQ 22
*-------------------------------------- *--------------------------------------
* DEVMGR (new API) = Smartport DIB * DEVMGR (old API)
*--------------------------------------
S.DEV.CODE .EQ 0 cld,jmp...
S.DEV.JMP .EQ 2 ...(code,x)
S.DEV.ID .EQ 4
S.DEV.F .EQ 5
S.DEV.F.INUSE .EQ %10000000
S.DEV.F.BUSY .EQ %01000000
S.DEV.F.SHARE .EQ %00100000 Device is shareable
S.DEV.F.IRQ .EQ %00010000 Device is irq driven
S.DEV.F.EVENT .EQ %00001000 Device is event driven
S.DEV.F.COUT .EQ %00000100 Device supports Char OUT
S.DEV.F.BLOCK .EQ %00000010
S.DEV.F.CHAR .EQ %00000001
S.DEV.NAME .EQ 6 5 Bytes : LEN+NUL KBD CON COMx LPTx ETHx
*
S.DEV .EQ 16
*--------------------------------------
* DEVMGR (new API) = Smartport
*-------------------------------------- *--------------------------------------
* JMP : * JMP :
* DEVID : * DEVID :
@ -385,43 +386,38 @@ DEVMGR.GFX.BITBLT .EQ 22
* XY : X=Slot, Y=Device (<$80) * XY : X=Slot, Y=Device (<$80)
* > $80 : IDs for PIPE,SOCK.... * > $80 : IDs for PIPE,SOCK....
*-------------------------------------- *--------------------------------------
S..DEV.JMP .EQ 0 *S.DEV.JMP .EQ 0
S..DEV.DEVID .EQ 2 *S.DEV.DEVID .EQ 2
S..DEV.FLAGS .EQ 3 *S.DEV.F .EQ 3
S..DEV.FLAGS.IRQ .EQ %10000000 *S.DEV.F.BLOCK .EQ %10000000
S..DEV.FLAGS.TYPE .EQ %00110000 *S.DEV.F.WRITE .EQ %01000000
S..DEV.FLAGS.TYPE.DRV .EQ %00000000 *S.DEV.F.READ .EQ %00100000
S..DEV.FLAGS.TYPE.BLK .EQ %00010000 *S.DEV.F.ONLINE .EQ %00010000
S..DEV.FLAGS.TYPE.SP .EQ %00100000 *S.DEV.F.NOFMT .EQ %00001000
S..DEV.FLAGS.NAMELEN .EQ %00001111 *S.DEV.F.WENABL .EQ %00000100
S..DEV.NAME .EQ 4 *S.DEV.F.IRQ .EQ %00000010
S..DEV .EQ 8 *S.DEV.F.OPENED .EQ %00000001
*S.DEV.NAME .EQ 4
*S.DEV .EQ 8
*-------------------------------------- *--------------------------------------
DEVMGR..STATUS .EQ 0 *DEVMGR..STATUS .EQ 0
DEVMGR..READBLOCK .EQ 1 *DEVMGR..READBLOCK .EQ 1
DEVMGR..READBLOCK .EQ 2 *DEVMGR..WRITEBLOCK .EQ 2
DEVMGR..FORMAT .EQ 3 *DEVMGR..FORMAT .EQ 3
DEVMGR..CONTROL .EQ 4 *DEVMGR..CONTROL .EQ 4
DEVMGR..INIT .EQ 5 *DEVMGR..INIT .EQ 5
DEVMGR..OPEN .EQ 6 *DEVMGR..OPEN .EQ 6
DEVMGR..CLOSE .EQ 7 *DEVMGR..CLOSE .EQ 7
DEVMGR..READ .EQ 8 *DEVMGR..READ .EQ 8
DEVMGR..WRITE .EQ 9 *DEVMGR..WRITE .EQ 9
*-------------------------------------- *--------------------------------------
S.DEVSTAT.S .EQ 0 *S.DEVSTAT.F .EQ 0 same as S.DEV.F.* bitmasks
S.DEVSTAT.S.BLOCK .EQ %10000000 *S.DEVSTAT.SIZE .EQ 1 3 bytes
S.DEVSTAT.S.WRITE .EQ %01000000 *S.DEVSTAT.IDSTRING .EQ 4 1 (LEN) + 16 MAX
S.DEVSTAT.S.READ .EQ %00100000 *S.DEVSTAT.TYPE .EQ 21
S.DEVSTAT.S.ONLINE .EQ %00010000 *S.DEVSTAT.SUBTYPE .EQ 22
S.DEVSTAT.S.NOFMT .EQ %00001000 *S.DEVSTAT.VERSION .EQ 23
S.DEVSTAT.S.WENABL .EQ %00000100
S.DEVSTAT.S.IRQ .EQ %00000010
S.DEVSTAT.S.OPENED .EQ %00000001
S.DEVSTAT.SIZE .EQ 1
S.DEVSTAT.IDSTRING .EQ 4 1 (LEN) + 16 MAX
S.DEVSTAT.TYPE .EQ 21
S.DEVSTAT.SUBTYPE .EQ 22
S.DEVSTAT.VERSION .EQ 23
*-------------------------------------- *--------------------------------------
*-------------------------------------- *--------------------------------------
@ -443,8 +439,11 @@ S.PS.hENV .EQ 6
S.PS.hCMDLINE .EQ 7 S.PS.hCMDLINE .EQ 7
S.PS.UID .EQ 8 S.PS.UID .EQ 8
S.PS.hINDEV .EQ 9 S.PS.hINDEV .EQ 9
S.PS.hStdIn .EQ 9
S.PS.hOUTDEV .EQ 10 S.PS.hOUTDEV .EQ 10
S.PS.hStdOut .EQ 10
S.PS.hERRDEV .EQ 11 S.PS.hERRDEV .EQ 11
S.PS.hStdErr .EQ 11
S.PS.CPID .EQ 12 S.PS.CPID .EQ 12
S.PS.RC .EQ 13 S.PS.RC .EQ 13
S.PS.PC .EQ 14 S.PS.PC .EQ 14
@ -494,6 +493,12 @@ S.TIME.WDAY .EQ 7 1..7
* *
S.TIME .EQ 8 S.TIME .EQ 8
*-------------------------------------- *--------------------------------------
S.PFT.PATH .EQ 0 /dev, /mnt
S.PFT.HANDLER .EQ 16
S.PFT.DATA .EQ 24 8 bytes OPAQUE data for handler
*
S.PFT .EQ 32
*--------------------------------------
* S.STAT * S.STAT
*-------------------------------------- *--------------------------------------
S.STAT.MODE .EQ 0 S.STAT.MODE .EQ 0
@ -510,13 +515,14 @@ S.STAT.MODE.RU .EQ $0100
*S.STAT.MODE.SGID .EQ $0400 *S.STAT.MODE.SGID .EQ $0400
*S.STAT.MODE.SUID .EQ $0800 *S.STAT.MODE.SUID .EQ $0800
S.STAT.MODE.REG .EQ $0000 S.STAT.MODE.REG .EQ $0000
S.STAT.MODE.FIFO .EQ $1000 S.STAT.MODE.DIR .EQ $1000
S.STAT.MODE.CHR .EQ $2000 *S.STAT.MODE.CDEV .EQ $2000
S.STAT.MODE.BLK .EQ $2000 *S.STAT.MODE.BDEV .EQ $3000
S.STAT.MODE.DIR .EQ $4000 *S.STAT.MODE.LNK .EQ $4000
S.STAT.MODE.LNK .EQ $5000 *S.STAT.MODE.DSOCK .EQ $5000
S.STAT.MODE.SOCK .EQ $6000 *S.STAT.MODE.SSOCK .EQ $6000
*S.STAT.MODE.FIFO .EQ $7000
S.STAT.DEV .EQ 2 WORD S.STAT.DEV .EQ 2 WORD
S.STAT.UID .EQ 4 WORD S.STAT.UID .EQ 4 WORD
@ -529,119 +535,56 @@ S.STAT.MTIME .EQ 30 S.TIME
S.STAT.CTIME .EQ 38 S.TIME S.STAT.CTIME .EQ 38 S.TIME
S.STAT.BLOCKS .EQ 46 DWORD S.STAT.BLOCKS .EQ 46 DWORD
S.STAT.BLKSIZE .EQ 50 WORD S.STAT.BLKSIZE .EQ 50 WORD
S.STAT.PRODOS.TYPE .EQ 52 BYTE S.STAT.P.TYPE .EQ 52 BYTE
S.STAT.PRODOS.AUXTYPE .EQ 53 WORD S.STAT.P.AUXTYPE .EQ 53 WORD
S.STAT.PRODOS.SLOT .EQ 55 BYTE S.STAT.P.SLOT .EQ 55 BYTE
S.STAT.PRODOS.DRIVE .EQ 56 BYTE S.STAT.P.DRIVE .EQ 56 BYTE
S.STAT.PRODOS.DEVSTATUS .EQ 57 BYTE S.STAT.P.DEVSTATUS .EQ 57 BYTE
S.STAT.PRODOS.DEVCNFLCT .EQ 58 BYTE *S.STAT.P.DEVCNFLCT .EQ 58 BYTE
S.STAT.PRODOS.DEVBLOCKS .EQ 59 BYTE S.STAT.P.DEVBLOCKS .EQ 59 BYTE
* *
S.STAT .EQ 64 S.STAT .EQ 64
*-------------------------------------- *--------------------------------------
* S.FILE for FOPEN,FREAD...... * S.NODE
*-------------------------------------- *--------------------------------------
S.FILE.HANDLER .EQ 0 0=KRNL,!0=hLIB (LIBNFS,LIBTCPIP.....) S.NODE.HANDLER .EQ 0 0=KRNL,!0=hLIB (LIBNFS,LIBTCPIP.....)
S.FILE.T .EQ 1 S.NODE.T .EQ 1
S.FILE.T.REG .EQ 1 S.NODE.T.REG .EQ 0
S.FILE.T.DIR .EQ 2 S.NODE.T.DIR .EQ 1
S.FILE.T.BDEV .EQ 3 S.NODE.T.CDEV .EQ 2
S.FILE.T.CDEV .EQ 4 S.NODE.T.BDEV .EQ 3
S.FILE.T.LNK .EQ 5 S.NODE.T.LNK .EQ 4
S.FILE.T.DSOCK .EQ 6 S.NODE.T.DSOCK .EQ 5
S.FILE.T.SSOCK .EQ 7 S.NODE.T.SSOCK .EQ 6
S.FILE.T.FIFO .EQ 8 S.NODE.T.FIFO .EQ 7
*-------------------------------------- *--------------------------------------
S.FILE.REG.REF .EQ 2 S.NODE.REG.REF .EQ 2
S.FILE.REG.IOBUF .EQ 3 S.NODE.REG.IOBUF .EQ 3
* *
S.FILE.REG .EQ 4 S.NODE.REG .EQ 4
*-------------------------------------- *--------------------------------------
S.FILE.DIR.REF .EQ 2 S.NODE.DIR.REF .EQ 2
S.FILE.DIR.IOBUF .EQ 3 S.NODE.DIR.IOBUF .EQ 3
S.FILE.DIR.EL .EQ 4 S.NODE.DIR.EL .EQ 4
S.FILE.DIR.EPB .EQ 5 S.NODE.DIR.EPB .EQ 5
S.FILE.DIR.FC .EQ 6 word S.NODE.DIR.FC .EQ 6 word
* *
S.FILE.DIR .EQ 8 S.NODE.DIR .EQ 8
*-------------------------------------- *--------------------------------------
S.FILE.DEV S.NODE.DEV.ID .EQ 2
*--------------------------------------
* S.FILE.LNK
*--------------------------------------
S.FILE.SOCK.SO .EQ 2
S.FILE.SOCK.SO.DEBUG .EQ $01
S.FILE.SOCK.SO.ACCEPTCONN .EQ $02
S.FILE.SOCK.SO.REUSEADDR .EQ $04
S.FILE.SOCK.SO.KEEPALIVE .EQ $08
S.FILE.SOCK.SO.DONTROUTE .EQ $10
S.FILE.SOCK.SO.BROADCAST .EQ $20
S.FILE.SOCK.SO.USELOOPBACK .EQ $40
S.FILE.SOCK.SO.LINGER .EQ $80
S.FILE.SOCK.S .EQ 3
S.FILE.SOCK.S.CLOSED .EQ 0
S.FILE.SOCK.S.LISTEN .EQ 1
S.FILE.SOCK.S.SYNSENT .EQ 2
S.FILE.SOCK.S.SYNRCVD .EQ 3
S.FILE.SOCK.S.ESTBLSH .EQ 4
S.FILE.SOCK.S.CLWAIT .EQ 5
S.FILE.SOCK.S.LASTACK .EQ 6
S.FILE.SOCK.S.FINWT1 .EQ 7
S.FILE.SOCK.S.FINWT2 .EQ 8
S.FILE.SOCK.S.CLOSING .EQ 9
S.FILE.SOCK.S.TIMEWT .EQ 10
S.FILE.SOCK.SRC.ADDR .EQ 4
S.FILE.SOCK.SRC.PORT .EQ 8
S.FILE.SOCK.DST.ADDR .EQ 10
S.FILE.SOCK.DST.PORT .EQ 14
* Listen type Queue
S.FILE.SOCK.LQ.HEAD .EQ 16
S.FILE.SOCK.LQ.TAIL .EQ 17
S.FILE.SOCK.LQ .EQ 18
S.FILE.SOCK.LQ.MAX .EQ 14 14 hSocket
* Datagram type Queue
S.FILE.SOCK.DQ.HEAD .EQ 16
S.FILE.SOCK.DQ.TAIL .EQ 17
S.FILE.SOCK.DQ .EQ 18
S.FILE.SOCK.DQ.MAX .EQ 14 14 hMem (frames)
* Stream type Queue
S.FILE.SOCK.SQ.hInMem .EQ 16
S.FILE.SOCK.SQ.hOutMem .EQ 17
S.FILE.SOCK.SQ.SIZE .EQ 18
S.FILE.SOCK.SQ.HEAD .EQ 20
S.FILE.SOCK.SQ.TAIL .EQ 22
S.FILE.SOCK.SQ.SEQNUM .EQ 24
S.FILE.SOCK.SQ.ACKNUM .EQ 28
* *
S.FILE.SOCK .EQ 32 S.NODE.DEV .EQ 3
*-------------------------------------- *--------------------------------------
S.FILE.FIFO.hMem .EQ 2 * S.NODE.LNK
S.FILE.FIFO.InPtr .EQ 3 *--------------------------------------
S.FILE.FIFO.OutPtr .EQ 4 S.NODE.FIFO.S .EQ 2
S.NODE.FIFO.S.Opened .EQ 1
S.NODE.FIFO.S.Closed .EQ 2
S.NODE.FIFO.hMem .EQ 3
S.NODE.FIFO.Tail .EQ 4
S.NODE.FIFO.Head .EQ 5
* *
S.FILE.FIFO .EQ 5 S.NODE.FIFO .EQ 5
*--------------------------------------
* OLD API: S.DIR for OpenDir,ReadDir,CloseDir
*--------------------------------------
S.DIR.HANDLER .EQ 0
S.DIR.F .EQ 1
S.DIR.F.NOMORE .EQ $80
S.DIR.PRODOS.REF .EQ 2
S.DIR.PRODOS.IOBUF .EQ 3
S.DIR.PRODOS.EL .EQ 4
S.DIR.PRODOS.EPB .EQ 5
S.DIR.PRODOS.FC .EQ 6
*
S.DIR.PRODOS .EQ 8
* no S.DIR
*--------------------------------------
S.PFT.PATH .EQ 0
S.PFT.HANDLER .EQ 23
S.PFT.DATA .EQ 24 8 bytes OPAQUE data for handler
*
S.PFT .EQ 32
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.DEV/INC/A2OSX.I SAVE /A2OSX.DEV/INC/A2OSX.I

56
INC/SOCKET.I.txt Normal file
View File

@ -0,0 +1,56 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
*--------------------------------------
S.NODE.SOCK.SO .EQ 2
S.NODE.SOCK.SO.DEBUG .EQ $01
S.NODE.SOCK.SO.ACCEPTCONN .EQ $02
S.NODE.SOCK.SO.REUSEADDR .EQ $04
S.NODE.SOCK.SO.KEEPALIVE .EQ $08
S.NODE.SOCK.SO.DONTROUTE .EQ $10
S.NODE.SOCK.SO.BROADCAST .EQ $20
S.NODE.SOCK.SO.USELOOPBACK .EQ $40
S.NODE.SOCK.SO.LINGER .EQ $80
S.NODE.SOCK.S .EQ 3
S.NODE.SOCK.S.CLOSED .EQ 0
S.NODE.SOCK.S.LISTEN .EQ 1
S.NODE.SOCK.S.SYNSENT .EQ 2
S.NODE.SOCK.S.SYNRCVD .EQ 3
S.NODE.SOCK.S.ESTBLSH .EQ 4
S.NODE.SOCK.S.CLWAIT .EQ 5
S.NODE.SOCK.S.LASTACK .EQ 6
S.NODE.SOCK.S.FINWT1 .EQ 7
S.NODE.SOCK.S.FINWT2 .EQ 8
S.NODE.SOCK.S.CLOSING .EQ 9
S.NODE.SOCK.S.TIMEWT .EQ 10
S.NODE.SOCK.SRC.ADDR .EQ 4
S.NODE.SOCK.SRC.PORT .EQ 8
S.NODE.SOCK.DST.ADDR .EQ 10
S.NODE.SOCK.DST.PORT .EQ 14
* Listen type Queue
S.NODE.SOCK.LQ.HEAD .EQ 16
S.NODE.SOCK.LQ.TAIL .EQ 17
S.NODE.SOCK.LQ .EQ 18
S.NODE.SOCK.LQ.MAX .EQ 14 14 hSocket
* Datagram type Queue
S.NODE.SOCK.DQ.HEAD .EQ 16
S.NODE.SOCK.DQ.TAIL .EQ 17
S.NODE.SOCK.DQ .EQ 18
S.NODE.SOCK.DQ.MAX .EQ 14 14 hMem (frames)
* Stream type Queue
S.NODE.SOCK.SQ.hInMem .EQ 16
S.NODE.SOCK.SQ.hOutMem .EQ 17
S.NODE.SOCK.SQ.SIZE .EQ 18
S.NODE.SOCK.SQ.HEAD .EQ 20
S.NODE.SOCK.SQ.TAIL .EQ 22
S.NODE.SOCK.SQ.SEQNUM .EQ 24
S.NODE.SOCK.SQ.ACKNUM .EQ 28
*
S.NODE.SOCK .EQ 32
*--------------------------------------
MAN
SAVE /A2OSX.DEV/INC/SOCKET.I

54
LIB/LIBMATH.S.txt Normal file
View File

@ -0,0 +1,54 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BOOT/LIB/LIBMATH.O
*--------------------------------------
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/APPLESOFT.I
* .INB /A2OSX.DEV/INC/LIBMATH.I
*--------------------------------------
ZPPtr1 .EQ ZPLIB
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA COS
.DA SIN
.DA TAN
.DA 0
*--------------------------------------
COS
*--------------------------------------
SIN
*--------------------------------------
TAN
*--------------------------------------
LIB.LOAD
LIB.UNLOAD clc
rts
*--------------------------------------
*--------------------------------------
MAN
SAVE LIB/LIBMATH.S
ASM

615
LIB/LIBPAK.S.txt Normal file
View File

@ -0,0 +1,615 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BOOT/LIB/LIBPAK.O
*--------------------------------------
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
*--------------------------------------
S.Pak.SrcPtr .EQ ZPLIB
S.Pak.SrcBlPtr .EQ ZPLIB+2
S.Pak.SrcBlPtrT .EQ ZPLIB+4
S.Pak.DstPtr .EQ ZPLIB+6
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START
.DA 0
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA LIB.LOAD
.DA LIB.UNLOAD
.DA Pak
.DA Unpak
.DA 0
*--------------------------------------
LIB.LOAD
LIB.UNLOAD clc
rts
*--------------------------------------
* UNPACK code as short as possible
* For Self Extract
*--------------------------------------
* File Header :
* SFX :
* - BIN must begin with CLD (QCODE)
* - BIN must be relocatable
* - BIN must overwrite itself
* (well, best way is moving CODE to $200)
*--------------------------------------
* Shunk Header :
* WORD : !Target Length
* USED TO STOP UNPACK
* !!!NO EOF TOKEN!!!
* Short4 : [0..15]
* Short3 : [0..7]
*--------------------------------------
S.PAK.LEN .EQ 0
S.PAK.SHORT4 .EQ 2
S.PAK.SHORT3 .EQ 18
S.PAK .EQ 26
*--------------------------------------
* BITSTREAM :
* 0 = STORE :
* 00 : 1 byte follow (10 bits)
* 01 = 2 + n (4 bits count)
*--------------
* 1 = CMD :
*---SHORT4 --- (3)+4=7 bits --------
* 100 : SHORT4
* xxxx = index in Short4 Table
*---SHORT3 --- (3)+3=6 bits --------
* 101 : SHORT3
* xxx = index in Short3 Table
*--- BACKLINK : (3)+8+5=16 bits ----
* 110 : BackLink
* 9 bits : Offset (LO8,HI1)
* 4 bits : 3 + n (4 bits count) (18 max)
*--- REP : (3)+1, (3)+1+4 =4/8 bits ----
* 111 : REP
* 0 : repeat last byte
* 1 : repeat 2 + n (4 bits count)
*--------------------------------------
* In :
* PULLW = Src PTR
* PULLW = Src LEN
* PULLW = Dst PTR Compressed Buffer
*--------------------------------------
PIPELEN .EQ 18
STATS.SIZE .EQ 0
STATS.BL .EQ 2
STATS.REP .EQ 4
STATS.S3 .EQ 6
STATS.S4 .EQ 8
*--------------------------------------
S.Pak >PULLYA
>STYA S.Pak.Src Init for pass #1
>STYA S.Pak.SrcPtr
>PULLA Get Src Len LO
eor #$ff
sta S.Pak.SrcCnt
sta S.Pak.Cnt Init for pass #1
tax
>PULLA Get Src Len HI
eor #$ff
sta S.Pak.SrcCnt+1
sta S.Pak.Cnt+1 Init for pass #1
tay
>PULLW S.Pak.DstPtr
txa
jsr S.Pak.PutByte
tya
jsr S.Pak.PutByte
ldx #9
.1 stz S.Pak.Stat.Size,x Reset Stats
dex
bpl .1
* PASS #1 : Count occurence for each value...
S.Pak.1 ldx #0
.1 stz S.Pak.CntL,x
stz S.Pak.CntH,x
inx
bne .1
ldy #0
.2 inc S.Pak.Cnt
bne .3
inc S.Pak.Cnt+1
beq .5
.3 lda (S.Pak.SrcPtr),y
tax
inc S.Pak.CntL,x
bne .4
inc S.Pak.CntH,x
.4 iny
bne .2
inc S.Pak.SrcPtr+1
bra .2
* ...Search for Top 24
.5 ldy #23
.6 stz S.Pak.Cnt Init best score to 0
stz S.Pak.Cnt+1
stz S.Pak.Byte
ldx #0
.7 lda S.Pak.CntL,x is it better at X
cmp S.Pak.Cnt
lda S.Pak.CntH,x
sbc S.Pak.Cnt+1
bcs .8 not better
stx S.Pak.Byte
lda S.Pak.CntL,x
sta S.Pak.Cnt
lda S.Pak.CntH,x
sta S.Pak.Cnt+1
.8 inx
bne .7
lda S.Pak.Byte
sta S.Pak.Short,y
stz S.Pak.CntL,x Discard this entry
stz S.Pak.CntH,x
dey
bpl .6
ldx #15
.9 lda S.Pak.Short4,x Store SHORT4 in reverse order
jsr S.Pak.PutByte
dex
bpl .9
ldx #7
.10 lda S.Pak.Short3,x Store SHORT3 in reverse order
jsr S.Pak.PutByte
dex
bpl .10
>LDYAI S.PAK Total Header Size
>STYA S.Pak.Stat.Size
* PASS #2 :
S.Pak.2 >LDYA S.Pak.Src Init for pass #2
>STYA S.Pak.SrcPtr
>STYA S.Pak.SrcBlPtr
>LDYA S.Pak.SrcCnt
>STYA S.Pak.Cnt
lda #8
sta S.Pak.PutBit+1 Initialize properly for first "PutBit" Call
stz S.Pak.Byte
stz S.Pak.PipeLen
S.Pak.2.LOOP ldx S.Pak.PipeLen Always fill Bytes in the PIPE until full
.1 jsr S.Pak.GetByte Load PIPE....
bcs .2 end of Buffer ?
sta S.Pak.Pipe,x
inx
cpx #PIPELEN PIPE Full ?
bne .1
clc
.2 stx S.Pak.PipeLen
txa PIPE empty ....exit
beq .99
* try finding REPeating same bytes.....
S.Pak.2.REP dex
beq S.Pak.2.SHORT Only one char in PIPE...
ldx #0
.1 lda S.Pak.Pipe,x
cmp S.Pak.Pipe+1,x
bne .2
inx
cpx S.Pak.PipeLen
bne .1
.2 dex if one char.....no REP
beq .S.Pak.2.BL
dex if 2, -> REP ONE (not 2)
phx REP 1 + 0 or more....save REP count for later....
jsr S.Pak.2.STORE1 a = byte to store
lda #%11100000
plx
phx
beq .3
ora #%00010000
ldy #4
jsr S.Pak.PutYBits
txa
beq .4 if not REP 2 or more no extra count
ldy #4
jsr S.Pak.PutYBits
.4 pla
clc
adc #2
tay
jsr S.Pak.StripPipe Remove REP bytes from PIPE
ldy #STATS.REP
jsr S.Pak.UpdateStats
jmp S.Pak.2.LOOP
S.Pak.2.BL
* Try finding best matching BackLink between SrcBlPtr and SrcPtr (max 512)
.4 lda S.Pak.SrcPtr
sec
sbc S.Pak.PipeLen
sta S.Pak.Limit setup Limit to SrcPtr-PIPE
lda S.Pak.SrcPtr+1
sbc #0
sta S.Pak.Limit+1
.40 lda S.Pak.SrcBlPtr
sta S.Pak.SrcBlPtrT
lda S.Pak.SrcBlPtr+1
sta S.Pak.SrcBlPtrT+1
.5 txa Get PIPE Len
clc make sure SrcBlPtrT+PIPE < Limit
adc S.Pak.SrcBlPtrT
tay
lda S.Pak.SrcBlPtrT+1
adc #0
cpy S.Pak.Limit
sbc S.Pak.Limit+1
bcc .10 not enough room
txa
dec
tay
.8 lda (S.Pak.SrcBlPtrT),y
cmp S.Pak.Pipe,y
bne .9
dey
bpl .8
* Found a BL at S.Pak.SrcBlPtrT, Store it and remove X bytes from PIPE
phx save BL length
lda #%1100000
ldy #3
jsr S.Pak.PutYBits
lda S.Pak.Limit
sec
sbc S.Pak.SrcBlPtrT
php save C
ldy #8
jsr S.Pak.PutYBits
plp
lda S.Pak.Limit+1
sec
sbc S.Pak.SrcBlPtrT+1
jsr S.Pak.PutBit
ply Get back BL len
phy
jsr S.Pak.StripPipe Remove LEN bytes from PIPE
pla Get back BL len
sec
sbc #3 Adjust Range..3-18 to 0->15
asl
asl
asl
asl
ldy #4 store 4 bits len
jsr S.Pak.PutYBits
ldy #STATS.BL
jsr S.Pak.UpdateStats
jmp S.Pak.2.LOOP
* No match...try starting at next byte
.9 inc S.Pak.SrcBlPtrT
bne .5
inc S.Pak.SrcBlPtrT+1
bra .5
.10 dex reduce PIPE
cpx #2 2 bytes remaining? no need to BL, a BL is 16bits wide.....
bne .40 and start over from BLPtr
* NO Bl Found, STORE
S.Pak.STORE lda S.Pak.Pipe
jsr S.Pak.2.STORE1
ldy #1
jsr S.Pak.StripPipe
jmp S.Pak.2.LOOP
*--------------------------------------
S.Pak.2.STORE1
rts
*--------------------------------------
S.Pak.GetByte inc S.UnPak.Cnt
bne .1
inc S.UnPak.Cnt+1
.1 beq .9
lda (S.Pak.SrcPtr)
pha
inc S.Pak.SrcPtr
bne .2
inc S.Pak.SrcPtr+1
.2 clc
rts
.9 sec
rts
*--------------------------------------
S.Pak.PutYBits asl
jsr S.Pak.PutBit
dey
bne S.Pak.PutYBits
rts
*--------------------------------------
* S.Pak.PutBit (bit in C)
*--------------------------------------
S.Pak.PutBit ldx #$ff
pha
bne .1
lda S.Pak.Byte
jsr S.Pak.PutByte
stz S.Pak.Byte
ldx #8
.1 dex
stx S.Pak.PutBit+1
bcc .8 Nothing to "light up"
lda S.Pak.Byte
lda S.Pak.BitMask,x
sta S.Pak.Byte
.8 pla
rts
*--------------------------------------
S.Pak.PutByte sta (S.UnPak.DstPtr)
inc S.UnPak.DstPtr
bne .1
inc S.UnPak.DstPtr+1
.1 inc S.Pak.Stat.Size
bne .2
inc S.Pak.Stat.Size+1
.2
rts
*--------------------------------------
* Y = count to remove from PIPE
*--------------------------------------
S.Pak.StripPipe ldx S.Pak.PipeLen
beq .9
ldx #0
.1 lda S.Pak.Pipe+1,x
sta S.Pak.Pipe,x
inx
cpx S.Pak.PipeLen
bne .1
dec S.Pak.PipeLen
dey
bne S.Pak.StripPipe
.9 rts
*--------------------------------------
S.Pak.UpdateStats
inc S.Pak.Stat.Size,y
bne .8
inc S.Pak.Stat.Size+1,y
.8 rts
*--------------------------------------
S.Pak.BitMask .HS 0102040810204080
S.Pak.Src .BS 2
S.Pak.SrcCnt .BS 2
S.Pak.Cnt .BS 2
S.Pak.CntL .BS 256
S.Pak.CntH .BS 256
S.Pak.Short4 .BS 16
S.Pak.Short3 .BS 8
S.Pak.Byte .BS 1
S.Pak.Limit .BS 2
S.Pak.PipeLen .BS 1
S.Pak.Pipe .BS 18
*--------------------------------------
S.Pak.Stat.Size .BS 2
S.Pak.Stat.BL .BS 2
S.Pak.Stat.REP .BS 2
S.Pak.Stat.S3 .BS 2
S.Pak.Stat.S4 .BS 2
*--------------------------------------
* S.UnPak
* In :
* PULLW = Src PTR Compressed Buffer
* PULLW = Dst PTR
*--------------------------------------
S.UnPak.SrcPtr .EQ ZPLIB
S.UnPak.DstPtr .EQ ZPLIB+2
S.UnPak.ShrtTbl .EQ ZPLIB+4
S.UnPak.Cnt .EQ ZPLIB+6
*--------------------------------------
S.UnPak >PULLW S.UnPak.SrcPtr
>PULLA Get Dst PTR LO
sec
sbc #1
sta S.UnPak.DstPtr
>PULLA Get Dst PTR HI
sbc #0
sta S.UnPak.DstPtr+1 setup Dst PTR-1
jsr S.UnPak.GetByte Get !LEN for counting up to $0000
sta S.UnPak.Cnt
jsr S.UnPak.GetByte
sta S.UnPak.Cnt+1
>LDYA S.UnPak.SrcPtr Get PTR to Short Table.....
>STYA S.UnPak.ShrtTbl and save it for SHORTx
lda #8
sta S.UnPak.GetBit+1 Initialize properly for first "GetBit" Call
.1 inc S.UnPak.Cnt
bne .2
inc S.UnPak.Cnt+1
beq .99
.2 jsr S.UnPak.GetBit
bcs .4 CMD....
*---- STORE
jsr S.UnPak.GetBit
ldx #1
bcc .3 if CC one byte
jsr S.UnPak.Get4Bits CC
adc #2 range is 2->17
tax
.3 jsr S.UnPak.Get8Bits
jsr S.UnPak.PutByte
dex
bne .3
bra .1
.99 rts
*---- CMD
.4 jsr S.UnPak.GetBit
bcs .6 BACKLINK or REP...
*---- CMD : SHORT
lda #0
ldy #4
jsr S.UnPak.GetBit if CS short3
rol make offset 00000001
asl ....00000010
beq .5
dey if short3, only 3 bits
.5 jsr S.UnPak.GetBit
rol
dey
bne .5
tay if s3, offset is 00010xxx
lda (S.UnPak.ShrtTbl),y if s4, offset is 0000xxxx
jsr S.UnPak.PutByte
bra .1
*---- CMD : BACKLINK or REP
.6 jsr S.UnPak.GetBit
bcs .8 if CS -> REP
*---- CMD : BACKLINK
jsr S.UnPak.Get8Bits get Offset LO, (CC)
eor #$ff !offset LO
adc S.UnPak.DstPtr equiv. SUB offset
sta .7+1 PTR to Backlink LO
lda S.UnPak.DstPtr+1
bcs .61 if ADC sets C, no need to dec HI
dec
.61 jsr S.UnPak.GetBit get Offset HI in C
bcc .62
dec
.62 sta .7+2 PTR to Backlink HI
jsr S.UnPak.Get4Bits CC
adc #3 Backlink are ate least 3 bytes...
tax
ldy #0
.7 lda $ffff,y Self Modified code : PTR to Backlink
jsr S.UnPak.PutByte
iny
dex
bne .7
beq .1
*---- CMD : REP
.8 jsr S.UnPak.GetBit
ldx #1
bcc .9 REP 1
jsr S.UnPak.Get4Bits REP xxxx, CC
adc #2 range is 2->17
tax
.9 lda (S.UnPak.DstPtr) Get Last Byte
jsr S.UnPak.PutByte
dex
bne .9
beq .1
*--------------------------------------
S.UnPak.Get8Bits
ldy #8
.HS 2C bit abs
S.UnPak.Get4Bits
ldy #4
lda #0 make sure to reset A before reading less than 8 bits only
.1 jsr S.UnPak.GetBit and to exit with CC if even if 8 bits read
rol
dey
bne .1
rts always CC
*--------------------------------------
S.UnPak.GetBit ldx #$ff Self Modified code
bne .1
jsr S.UnPak.NxtByte
ldx #8
.1 dex
stx S.UnPak.GetBit+1
pha Don't trash A
lda (S.UnPak.SrcPtr)
and S.UnPak.BitMask,x
cmp #1 if 0:CC, i>0 CS
pla
rts Bit is in C
*--------------------------------------
S.UnPak.GetByte lda (S.UnPak.SrcPtr)
S.UnPak.NxtByte inc S.UnPak.SrcPtr
bne .8
inc S.UnPak.SrcPtr+1
.8 rts
*--------------------------------------
S.UnPak.PutByte inc S.UnPak.DstPtr
bne .8
inc S.UnPak.DstPtr+1
.8 sta (S.UnPak.DstPtr)
rts
*--------------------------------------
S.UnPak.BitMask .HS 8040201008040201
MAN
SAVE LIB/LIBPAK.S
ASM

231
SBIN/NFSD.S.txt Normal file
View File

@ -0,0 +1,231 @@
PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
.OP 65C02
.OR $2000
.TF /A2OSX.BOOT/SBIN/NFSD
*--------------------------------------
.INB /A2OSX.DEV/INC/MACROS.I
.INB /A2OSX.DEV/INC/A2OSX.I
.INB /A2OSX.DEV/INC/LIBTCPIP.I
*--------------------------------------
TIMEOUT.MAX .EQ 30 30 sec.
*--------------------------------------
ZPIPCfgPtr .EQ ZPBIN
ZPSktPtr .EQ ZPBIN+2
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA 0
.DA CS.END-CS.START Code Length To Relocate
.DA DS.END-DS.START Data Segment to Allocate
.DA 0
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
.DA CS.HOOK
L.LIBTCPIP .DA LIBTCPIP
L.Socket .DA Socket
L.MSG.TCPWAIT .DA MSG.TCPWAIT
L.MSG.INITOK .DA MSG.INITOK
L.MSG.TCPIPERR .DA MSG.TCPIPERR
L.MSG.SKTERR .DA MSG.SKTERR
L.MSG.ABORT .DA MSG.ABORT
L.MSG.INCOMING .DA MSG.INCOMING
.DA 0
*--------------------------------------
CS.INIT >LDYA L.LIBTCPIP
>SYSCALL LoadLibYA
sta hLIBTCPIP
lda (pPs)
ora #S.PS.F.EVENT Now accept events
sta (pPs)
clc
rts
*--------------------------------------
CS.RUN jsr Init.Timeout
>LDYA L.MSG.TCPWAIT
>SYSCALL PSTROutYA
.1 >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ?
bcs .99
>STYA ZPIPCfgPtr
lda (ZPIPCfgPtr) Configured ?
bmi CS.RUN.INIT
>SYSCALL Sleep
jsr Wait.Timeout
bcc .1
.99 >LDYA L.MSG.TCPIPERR
>SYSCALL PSTROutYA
lda #SYSMGR.ERRSYN
sec
rts
CS.RUN.INIT ldx #3
ldy #S.IPCFG.IP+3
.1 lda (ZPIPCfgPtr),y
sta Socket.Src.Addr,x
dey
dex
bpl .1
>PUSHW L.Socket
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.NEW
bcs .9
txa
ldy #hSocket
sta (pData),y
>LDYA L.MSG.INITOK
>SYSCALL PSTROutYA
.11 >SYSCALL Sleep
ldy #bCTRLC
lda (pData),y
bmi .99
bra .11
ldy #hSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.ACCEPTA
bcs .11
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GETA
>STYA ZPSktPtr
ldx #3
ldy #S.SOCKET.DST.ADDR+3
.2 >PUSHB (ZPSktPtr),y
dey
dex
bpl .2
>LDYA L.MSG.INCOMING
>SYSCALL PSTROutYA
bra .11
.9 >LDYA L.MSG.SKTERR
>SYSCALL PSTROutYA
lda #SYSMGR.ERRSYN
sec
rts
.99 >LDYA L.MSG.ABORT
>SYSCALL PSTROutYA
lda #0
sec
rts
*--------------------------------------
CS.DOEVENT lda (pEvent)
bpl .1 is it a TIMER event?
asl One second ?
bpl .9
ldy #TimeOut
lda (pData),y
beq .9
dec
sta (pData),y
sec do not discard TIMER event
rts
.1 bit #S.EVT.F.KEY is it a KEY event?
beq .9
ldy #S.EVT.DATAHI is it an O or SAPPLE key ?
lda (pEvent),y
bne .9
ldy #S.EVT.DATALO
lda (pEvent),y
cmp #$03 Ctrl-C
bne .9
lda #$FF
ldy #bCTRLC
sta (pData),y
clc
rts
.9 sec
rts
*--------------------------------------
CS.QUIT ldy #hSocket
lda (pData),y
>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA
lda hLIBTCPIP
>SYSCALL UnloadLibA
clc
rts
*--------------------------------------
CS.HOOK
*--------------------------------------
Init.Timeout ldy #TimeOut
lda #TIMEOUT.MAX
sta (pData),y
rts
*--------------------------------------
Wait.TimeOut sec
ldy #TimeOut
lda (pData),y
beq .9
ldy #bCTRLC
lda (pData),y
bmi .9
clc
.9 rts
*--------------------------------------
CS.END
*--------------------------------------
LIBTCPIP >PSTR "libtcpip.o"
MSG.TCPWAIT >PSTR "NFSD:Waiting for TCP/IP initializing...\n"
MSG.INITOK >PSTR "NFSD:Init Ok, Listening.\n"
MSG.TCPIPERR >PSTR "NFSD:TCP/IP Not initialized properly\n"
MSG.SKTERR >PSTR "NFSD:Listen Error\n"
MSG.ABORT >PSTR "NFSD:User Aborted\n"
MSG.INCOMING >PSTR "NFSD:Incoming Connection From : %d.%d.%d.%d\n"
hLIBTCPIP .BS 1
*--------------------------------------
Socket .DA #S.SOCKET.SOCK.DGRAM
.DA #S.SOCKET.SO.ACCEPTCONN
.DA #S.SOCKET.STATUS.LISTEN
.BS 1
Socket.Src.Addr .BS 4
Socket.Src.Port .DA 2049
Socket.Dst.Addr .BS 4
Socket.Dst.Port .BS 2
.BS 16
*--------------------------------------
.DUMMY
.OR 0
DS.START
TimeOut .BS 1
bCTRLC .BS 1
hSocket .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE SBIN/NFSD.S
ASM

View File

@ -129,7 +129,7 @@ Cmd.Exec.EXT ldy #1
>SYSCALL STAT >SYSCALL STAT
bcs .99 bcs .99
lda STAT+S.STAT.PRODOS.TYPE lda STAT+S.STAT.P.TYPE
cmp #$04 TXT File ? cmp #$04 TXT File ?
beq Cmd.Exec.EXT.TXT beq Cmd.Exec.EXT.TXT
cmp #$06 BIN File ? cmp #$06 BIN File ?
@ -283,7 +283,7 @@ Cmd.Exec.CD1 stz UsrBuf256
>SYSCALL STAT >SYSCALL STAT
bcs .9 bcs .9
lda STAT+S.STAT.PRODOS.TYPE lda STAT+S.STAT.P.TYPE
cmp #$0F Directory ? cmp #$0F Directory ?
bne Cmd.Exec.ERRSYN bne Cmd.Exec.ERRSYN

View File

@ -31,7 +31,7 @@ K.LoadEXEYA.1 >PUSHWI KrnBuf256
jsr K.STAT Look for AUXTYPE jsr K.STAT Look for AUXTYPE
bcs .9 bcs .9
>LDYA KrnBuf256+S.STAT.PRODOS.AUXTYPE >LDYA KrnBuf256+S.STAT.P.AUXTYPE
>STYA BIN.Relocate.Start >STYA BIN.Relocate.Start
>PUSHYA Push AUXTYPE >PUSHYA Push AUXTYPE

View File

@ -86,14 +86,16 @@ K.SScanF jsr PullPtr1Ptr2Ptr3
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
K.SScanF.IncPtr1 dex K.SScanF.IncPtr1
dex
beq .1 beq .1
inc ZPQuickPtr1 inc ZPQuickPtr1
bne .1 bne .1
inc ZPQuickPtr1+1 never Zero inc ZPQuickPtr1+1 never Zero
.1 rts .1 rts
*-------------------------------------- *--------------------------------------
K.SScanF.IsDigit cmp #'0' K.SScanF.IsDigit
cmp #'0'
bcc .1 bcc .1
cmp #'9'+1 cmp #'9'+1
bcs .1 bcs .1
@ -496,6 +498,22 @@ K.COutA phx
plx plx
rts rts
*/-------------------------------------- */--------------------------------------
* #FPutCAY
* Print A (char) to File
* ##In:
* A : char to print
* Y = hFILE
* none.
* ##Out:
* CC = success
*\--------------------------------------
K.FPutCAY sta K.PutC.Char
sty K.PutC.Node
tya
bne K.PutCA.1
K.PutCA.8 clc
rts
*/--------------------------------------
* #PutCA * #PutCA
* Print A (char) to StdOut * Print A (char) to StdOut
* ##In: * ##In:
@ -504,10 +522,77 @@ K.COutA phx
* ##Out: * ##Out:
* CC = success * CC = success
*\-------------------------------------- *\--------------------------------------
K.FPutCA K.PutCA sta K.PutC.Char
ldy #S.PS.hStdOut
K.PutCA lda (pPs),y
ldx #DEVMGR..WRITE beq K.PutCA.8 NUL
K.PutCA.1 sta K.PutC.Node
jsr K.GetMemPtrA
>STYA pNode
ldy #S.NODE.T
lda (pNode),y
asl
tax
jmp (K.PutCA.Jmp,x)
*--------------------------------------
K.PutCA.Jmp .DA K.PutCA.REG
.DA K.PutCA.IOERR DIR
.DA K.PutCA.CDEV
.DA K.PutCA.IOERR BDEV
.DA K.PutCA.IOERR LNK
.DA K.PutCA.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
*--------------------------------------
K.PutCA.SSOCK
*--------------------------------------
K.PutCA.FIFO ldy #S.NODE.FIFO.S
lda (pNode),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 (pNode),y
jsr K.GetMemPtrA
>STYA .1+2
ldy #S.NODE.FIFO.Head
lda (pNode),y
inc
iny
cmp (pNode),y
beq .9 FIFO is full
dey
sta (pNode),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.PutCA.IOERR lda #MLI.ERR.IO
sec
rts
*--------------------------------------
K.PutC.Char .BS 1
K.PutC.Node .BS 1
*-------------------------------------- *--------------------------------------
K.FGetC K.FGetC
*-------------------------------------- *--------------------------------------
@ -559,7 +644,7 @@ PRINTDEC lda PADLEN any Len format ?
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
TYPES .AS "-pcbdls" TYPES .AS "-dbclssp"
ACCESS .AS "rwxrwxrwx" ACCESS .AS "rwxrwxrwx"
SIGN .BS 1 SIGN .BS 1
PADLEN .BS 1 PADLEN .BS 1

View File

@ -10,7 +10,7 @@ AUTO 6
* A = DevID * A = DevID
* ##OUT: * ##OUT:
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* Y,A = devslot * Y,A = DEVSLOT
* note: X Unmodified * note: X Unmodified
*\-------------------------------------- *\--------------------------------------
K.GetDevByIDA cmp DevMgr.LastDevID K.GetDevByIDA cmp DevMgr.LastDevID
@ -41,7 +41,7 @@ K.GetDevByIDA cmp DevMgr.LastDevID
* ##OUT: * ##OUT:
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* X = DEVID * X = DEVID
* Y,A = pDev * Y,A = DEVSLOT
*\-------------------------------------- *\--------------------------------------
K.GetDevByNameYA K.GetDevByNameYA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
@ -108,15 +108,33 @@ K.GetDevInfoA jsr K.GetDevByIDA
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* A = hFILE * A = hFILE
*\-------------------------------------- *\--------------------------------------
K.MkNodYA jsr K.GetDevByNameYA K.MkNodYA jsr K.GetDevByNameYA Ptr1=NAME,Ptr2=DEVSLOT
bcs .9 bcs .9
>PUSHWI S.FILE.DEV >PUSHWI S.NODE.DEV
>PUSHBI S.MEM.F.INIT0 >PUSHBI S.MEM.F.INIT0
jsr K.GetMem jsr K.GetMem
bcs bcs .9
>STYA ZPQuickPtr3 Ptr3=S.NODE
ldy #S.DEV.DEVID
lda (ZPQuickPtr2),y
pha
iny #S.DEV.F
lda (ZPQuickPtr2),y
asl CS if Block device
ldy #S.NODE.T
lda #S.NODE.T.CDEV
adc #0 add CS if blok
sta (ZPQuickPtr3),y
iny #S.NODE.DEV.ID
pla
sta (ZPQuickPtr3),y
clc clc
.9 rts .9 rts
*/-------------------------------------- */--------------------------------------
@ -134,7 +152,7 @@ K.MKFIFO >PUSHWI 256
phx save FIFO buffer phx save FIFO buffer
>PUSHWI S.FILE.FIFO >PUSHWI S.NODE.FIFO
>PUSHBI S.MEM.F.INIT0 >PUSHBI S.MEM.F.INIT0
jsr K.GetMem jsr K.GetMem
@ -142,11 +160,11 @@ K.MKFIFO >PUSHWI 256
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #S.FILE.T ldy #S.NODE.T
lda #S.FILE.T.FIFO lda #S.NODE.T.FIFO
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
iny S.FILE.FIFO.hMem iny S.NODE.FIFO.hMem
pla pla
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
txa txa

View File

@ -18,7 +18,7 @@ K.OpenDirYA jsr PFT.CheckPathYA
>STYA ZPQuickPtr2 >STYA ZPQuickPtr2
>STYA MLICALL.PARAMS+1 For GETFILEINFO,MLIOPEN >STYA MLICALL.PARAMS+1 For GETFILEINFO,MLIOPEN
>PUSHWI S.DIR.PRODOS >PUSHWI S.NODE.DIR
>PUSHBI S.MEM.F.INIT0 >PUSHBI S.MEM.F.INIT0
jsr K.GetMem jsr K.GetMem
bcs .9 bcs .9
@ -51,14 +51,14 @@ K.OpenDirYA jsr PFT.CheckPathYA
>STYA MLICALL.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call >STYA MLICALL.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa txa
ldy #S.DIR.PRODOS.IOBUF ldy #S.NODE.DIR.IOBUF
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
>MLICALL MLIOPEN >MLICALL MLIOPEN
bcs .98 bcs .98
lda MLICALL.PARAMS+5 get ref_num lda MLICALL.PARAMS+5 get ref_num
ldy #S.DIR.PRODOS.REF ldy #S.NODE.DIR.REF
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
.8 lda K.ReadDirA.hDir .8 lda K.ReadDirA.hDir
@ -92,26 +92,26 @@ K.ReadDirA.EL .BS 1
K.ReadDirA.EPB .BS 1 K.ReadDirA.EPB .BS 1
K.ReadDirA.EC .BS 2 K.ReadDirA.EC .BS 2
*-------------------------------------- *--------------------------------------
K.ReadDirA jsr PFT.CheckDirA K.ReadDirA jsr PFT.CheckNodeA
sta K.ReadDirA.hDir sta K.ReadDirA.hDir
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #S.DIR.F ldy #S.NODE.DIR.REF
lda (ZPQuickPtr1),y
and #S.DIR.F.NOMORE
bne .9
ldy #S.DIR.PRODOS.REF
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq K.ReadDirA.ROOT beq K.ReadDirA.ROOT
jmp K.ReadDirA.DIR jmp K.ReadDirA.DIR
.9 lda #0 K.ReadDirA.NoMore
lda #0
sec CS,A=0 no more entry sec CS,A=0 no more entry
rts rts
*-------------------------------------- *--------------------------------------
K.ReadDirA.ROOT stz MLICALL.PARAMS+1 All Volumes K.ReadDirA.ROOT ldy #S.NODE.DIR.FC did we already returned something ?
lda (ZPQuickPtr1),y
bne K.ReadDirA.NoMore
stz MLICALL.PARAMS+1 All Volumes
>LDYAI KrnBuf256 >LDYAI KrnBuf256
>STYA MLICALL.PARAMS+2 >STYA MLICALL.PARAMS+2
@ -182,24 +182,24 @@ K.ReadDirA.ROOT stz MLICALL.PARAMS+1 All Volumes
lda #0 lda #0
rol rol
inc inc
sta KrnSTAT+S.STAT.PRODOS.DRIVE sta KrnSTAT+S.STAT.P.DRIVE
pla pla
lsr CC lsr CC
lsr lsr
lsr lsr
lsr lsr
lsr lsr
sta KrnSTAT+S.STAT.PRODOS.SLOT sta KrnSTAT+S.STAT.P.SLOT
>LDYAI KrnOut256 >LDYAI KrnOut256
>STYA MLICALL.PARAMS+1 >STYA MLICALL.PARAMS+1
>MLICALL MLIGETFILEINFO >MLICALL MLIGETFILEINFO
sta KrnSTAT+S.STAT.PRODOS.DEVSTATUS sta KrnSTAT+S.STAT.P.DEVSTATUS
bcs .80 bcs .80
>LDYA MLICALL.PARAMS+5 AUXTYPE=TOTAL BLOCKS >LDYA MLICALL.PARAMS+5 AUXTYPE=TOTAL BLOCKS
>STYA KrnSTAT+S.STAT.PRODOS.DEVBLOCKS >STYA KrnSTAT+S.STAT.P.DEVBLOCKS
>LDYA MLICALL.PARAMS+8 >LDYA MLICALL.PARAMS+8
>STYA KrnSTAT+S.STAT.BLOCKS >STYA KrnSTAT+S.STAT.BLOCKS
@ -217,9 +217,9 @@ K.ReadDirA.ROOT stz MLICALL.PARAMS+1 All Volumes
* lda #0 done by S.MEM.F.INIT0 * lda #0 done by S.MEM.F.INIT0
* sta (ZPQuickPtr4) Ending 0 * sta (ZPQuickPtr4) Ending 0
ldy #S.DIR.F ldy #S.NODE.DIR.FC
lda #S.DIR.F.NOMORE lda #16
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y Flag that we returned somthing for next time
lda K.ReadDirA.hDIRENT lda K.ReadDirA.hDIRENT
tax tax
@ -252,7 +252,7 @@ K.ReadDirA.DIR sta MLICALL.PARAMS+1 A=#S.DIR.PRODOS.REF
>MLICALL MLIREAD Read A block from directory >MLICALL MLIREAD Read A block from directory
bcs .98 bcs .98
ldy #S.DIR.PRODOS.EL Check if first run.... ldy #S.NODE.DIR.EL Check if first run....
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
bne .2 no, we have all we need.... bne .2 no, we have all we need....
@ -274,7 +274,7 @@ K.ReadDirA.DIR sta MLICALL.PARAMS+1 A=#S.DIR.PRODOS.REF
sec sec
.99 rts .99 rts
.2 ldy #S.DIR.PRODOS.EL+3 .2 ldy #S.NODE.DIR.EL+3
ldx #3 ldx #3
.3 lda (ZPQuickPtr1),y get this session parameters from S.DIR .3 lda (ZPQuickPtr1),y get this session parameters from S.DIR
@ -417,7 +417,7 @@ K.ReadDirA.DIR2 jsr K.ReadDirA.GetBuf
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldx #3 ldx #3
ldy #S.DIR.PRODOS.EL+3 ldy #S.NODE.DIR.EL+3
.81 lda K.ReadDirA.EL,x Store back this session prameters to S.DIR .81 lda K.ReadDirA.EL,x Store back this session prameters to S.DIR
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
@ -468,7 +468,7 @@ K.ReadDirA.ADD..
* sta KrnSTAT+S.STAT.BLOCKS+1 * sta KrnSTAT+S.STAT.BLOCKS+1
*-------------------------------------- *--------------------------------------
K.ReadDirA.ADDD lda #$0F K.ReadDirA.ADDD lda #$0F
sta KrnSTAT+S.STAT.PRODOS.TYPE sta KrnSTAT+S.STAT.P.TYPE
lda /S.STAT.MODE.DIR lda /S.STAT.MODE.DIR
sta KrnSTAT+S.STAT.MODE+1 sta KrnSTAT+S.STAT.MODE+1
@ -569,9 +569,9 @@ K.ReadDirA.ConvertTime
jmp K.PTime2Time Will destroy Ptr1 & Ptr2 !!!! jmp K.PTime2Time Will destroy Ptr1 & Ptr2 !!!!
*-------------------------------------- *--------------------------------------
ADDF.SRC .HS 1013141516171f20 ADDF.SRC .HS 1013141516171f20
ADDF.DST .DA #S.STAT.PRODOS.TYPE,#S.STAT.BLOCKS,#S.STAT.BLOCKS+1 ADDF.DST .DA #S.STAT.P.TYPE,#S.STAT.BLOCKS,#S.STAT.BLOCKS+1
.DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2 .DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2
.DA #S.STAT.PRODOS.AUXTYPE,#S.STAT.PRODOS.AUXTYPE+1 .DA #S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
*/------------------------------------- */-------------------------------------
* #CloseDirA * #CloseDirA
* ##In: * ##In:
@ -579,18 +579,18 @@ ADDF.DST .DA #S.STAT.PRODOS.TYPE,#S.STAT.BLOCKS,#S.STAT.BLOCKS+1
* ##Out: * ##Out:
* none, always succeed. * none, always succeed.
*\------------------------------------- *\-------------------------------------
K.CloseDirA jsr PFT.CheckDirA K.CloseDirA jsr PFT.CheckNodeA
sta K.ReadDirA.hDir sta K.ReadDirA.hDir
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
K.CloseDirA.1 ldy #S.DIR.PRODOS.REF K.CloseDirA.1 ldy #S.NODE.DIR.REF
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .1 beq .1
sta MLICALL.PARAMS+1 sta MLICALL.PARAMS+1
>MLICALL MLICLOSE >MLICALL MLICLOSE
.1 ldy #S.DIR.PRODOS.IOBUF .1 ldy #S.NODE.DIR.IOBUF
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .2 beq .2
jsr K.FreeMemA jsr K.FreeMemA

View File

@ -58,7 +58,7 @@ K.FOPEN jsr PFT.CheckPathSTK
bcc K.FOPEN.10 bcc K.FOPEN.10
K.FOPEN.9 rts K.FOPEN.9 rts
K.FOPEN.10 >PUSHWI S.FILE.T.REG K.FOPEN.10 >PUSHWI S.NODE.REG
>PUSHBI S.MEM.F.INIT0 >PUSHBI S.MEM.F.INIT0
jsr K.GetMem jsr K.GetMem
bcs K.FOPEN.9 bcs K.FOPEN.9
@ -73,14 +73,14 @@ K.FOPEN.10 >PUSHWI S.FILE.T.REG
>STYA MLICALL.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call >STYA MLICALL.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa txa
ldy #S.FILE.REG.IOBUF ldy #S.NODE.REG.IOBUF
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
>MLICALL MLIOPEN >MLICALL MLIOPEN
bcs .98 bcs .98
lda MLICALL.PARAMS+5 get ref_num lda MLICALL.PARAMS+5 get ref_num
ldy #S.FILE.REG.REF ldy #S.NODE.REG.REF
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
sta MLICALL.PARAMS+1 Next MLI Calls are REF_NUM based sta MLICALL.PARAMS+1 Next MLI Calls are REF_NUM based
@ -115,8 +115,8 @@ K.FOPEN.10 >PUSHWI S.FILE.T.REG
sta MLICALL.PARAMS+3 sta MLICALL.PARAMS+3
>MLICALL MLINEWLINE >MLICALL MLINEWLINE
.30 ldy #S.FILE.T .30 ldy #S.NODE.T
lda #S.FILE.T.REG lda #S.NODE.T.REG
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
lda hFILE lda hFILE
clc clc
@ -139,18 +139,18 @@ hFILE .BS 1
* A = hFILE * A = hFILE
* ##Out : * ##Out :
*\-------------------------------------- *\--------------------------------------
K.FCloseA jsr PFT.CheckFileA K.FCloseA jsr PFT.CheckNodeA
sta hFILE sta hFILE
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
K.FCloseA.1 ldy #S.FILE.REG.REF K.FCloseA.1 ldy #S.NODE.REG.REF
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .1 beq .1
sta MLICALL.PARAMS+1 sta MLICALL.PARAMS+1
>MLICALL MLICLOSE >MLICALL MLICLOSE
.1 ldy #S.FILE.REG.IOBUF .1 ldy #S.NODE.REG.IOBUF
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
beq .2 beq .2
jsr K.FreeMemA jsr K.FreeMemA
@ -159,6 +159,39 @@ K.FCloseA.1 ldy #S.FILE.REG.REF
jsr K.FreeMemA jsr K.FreeMemA
rts rts
*/-------------------------------------- */--------------------------------------
* #FReadA
* Read ONE byte from file
* ##In :
* A = hFILE
* ##Out :
* A = Byte Read
*\--------------------------------------
K.FReadA jsr PFT.CheckNodeA
ldx #MLIREAD
bra K.FReadWrite.0
*/--------------------------------------
* #FWriteAY
* ##In:
* A = hFILE
* Y = char
* #Out:
* Y,A = Bytes Written
*\--------------------------------------
K.FWriteAY jsr PFT.CheckNodeA
sty MLICALL.TMPBUF
ldx #MLIWRITE
K.FReadWrite.0 jsr FILE.SetupPrt1A
>LDYAI MLICALL.TMPBUF
>STYA MLICALL.PARAMS+2
lda #1
sta MLICALL.PARAMS+4
stz MLICALL.PARAMS+5
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr A2osX.MLICALL
bcs .9
lda MLICALL.TMPBUF
.9 rts
*/--------------------------------------
* #FRead * #FRead
* Read bytes from file * Read bytes from file
* ##In : * ##In :
@ -168,9 +201,9 @@ K.FCloseA.1 ldy #S.FILE.REG.REF
* ##Out : * ##Out :
* Y,A = Bytes Read * Y,A = Bytes Read
*\-------------------------------------- *\--------------------------------------
K.FRead jsr PFT.CheckFileSTK K.FRead jsr PFT.CheckNodeSTK
ldx #MLIREAD ldx #MLIREAD
bra K.FRead.1 bra K.FReadWrite.1
*/-------------------------------------- */--------------------------------------
* #FWrite * #FWrite
* ##In: * ##In:
@ -180,15 +213,13 @@ K.FRead jsr PFT.CheckFileSTK
* #Out: * #Out:
* Y,A = Bytes Written * Y,A = Bytes Written
*\-------------------------------------- *\--------------------------------------
K.FWrite jsr PFT.CheckFileSTK K.FWrite jsr PFT.CheckNodeSTK
ldx #MLIWRITE ldx #MLIWRITE
K.FRead.1 >PULLA K.FReadWrite.1 >PULLA
jsr FILE.SetupPrt1A jsr FILE.SetupPrt1A
>PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+4
>PULLW MLICALL.PARAMS+2 >PULLW MLICALL.PARAMS+2
* >MLICALL MLIWRITE
lda #4 Param Count = 4 for MLIREAD & MLIWRITE lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr A2osX.MLICALL jsr A2osX.MLICALL
bcs .9 bcs .9
@ -199,7 +230,7 @@ K.FRead.1 >PULLA
* ##In: * ##In:
* A = hFILE * A = hFILE
*\-------------------------------------- *\--------------------------------------
K.FFlushA jsr PFT.CheckFileA K.FFlushA jsr PFT.CheckNodeA
jsr FILE.SetupPrt1A jsr FILE.SetupPrt1A
>MLICALL MLIFLUSH >MLICALL MLIFLUSH
rts rts
@ -211,7 +242,7 @@ K.FFlushA jsr PFT.CheckFileA
* PUSHB = From * PUSHB = From
* PUSHB = hFILE * PUSHB = hFILE
*\------------------------------------- *\-------------------------------------
K.FSeek jsr PFT.CheckFileSTK K.FSeek jsr PFT.CheckNodeSTK
>PULLA >PULLA
jsr FILE.SetupPrt1A jsr FILE.SetupPrt1A
>PULLB K.FSEEK.FROM >PULLB K.FSEEK.FROM
@ -269,7 +300,7 @@ K.FSEEK.OFFSET .BS 4
* ##Out: * ##Out:
* Y,A,X = Offset * Y,A,X = Offset
*\-------------------------------------- *\--------------------------------------
K.FTellA jsr PFT.CheckFileA K.FTellA jsr PFT.CheckNodeA
K.FTellA.1 jsr FILE.SetupPrt1A K.FTellA.1 jsr FILE.SetupPrt1A
>MLICALL MLIGETMARK >MLICALL MLIGETMARK
bcs .9 bcs .9
@ -286,7 +317,7 @@ K.FTellA.1 jsr FILE.SetupPrt1A
* A !=0 NOT EOF * A !=0 NOT EOF
* CS : * CS :
*\-------------------------------------- *\--------------------------------------
K.FEOFA jsr PFT.CheckFileA K.FEOFA jsr PFT.CheckNodeA
jsr FILE.SetupPrt1A jsr FILE.SetupPrt1A
jsr K.FTELLA.1 jsr K.FTELLA.1
bcs .9 bcs .9
@ -347,7 +378,7 @@ K.Stat jsr PFT.CheckPathSTK
*-------------------------------------- *--------------------------------------
FILE.SetupPrt1A jsr K.GetMemPtrA FILE.SetupPrt1A jsr K.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldy #S.FILE.PRODOS.REF ldy #S.NODE.REG.REF
lda (ZPQuickPtr1),y lda (ZPQuickPtr1),y
sta MLICALL.PARAMS+1 sta MLICALL.PARAMS+1
rts rts
@ -368,7 +399,7 @@ FILE.MLI2STAT
sta (ZPQuickPtr2),y sta (ZPQuickPtr2),y
ldx #2 ldx #2
ldy #S.STAT.PRODOS.TYPE+2 ldy #S.STAT.P.TYPE+2
.3 lda MLICALL.PARAMS+S.FILEINFO.TYPE,x .3 lda MLICALL.PARAMS+S.FILEINFO.TYPE,x
sta (ZPQuickPtr2),y sta (ZPQuickPtr2),y

View File

@ -85,10 +85,9 @@ PFT.CheckPathYA
* PULLB/A = hFILE/hDIR * PULLB/A = hFILE/hDIR
* Out : * Out :
*-------------------------------------- *--------------------------------------
PFT.CheckFileSTK PFT.CheckNodeSTK
lda (pStack) read hFILE on top of stack lda (pStack) read hFILE on top of stack
PFT.CheckFileA PFT.CheckNodeA stx S.PFT.SYSCALL save #SYSCALL
PFT.CheckDirA stx S.PFT.SYSCALL save #SYSCALL
sta S.PFT.hFILE sta S.PFT.hFILE
jsr K.GetMemPtrA X = unmidified jsr K.GetMemPtrA X = unmidified
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1

View File

@ -70,6 +70,27 @@ Prints Pascal/C-Style String
+ CC : success + CC : success
+ CS : I/O error from COut + CS : I/O error from COut
#FPutCAY
Print A (char) to File
##In:
+ A : char to print
+ Y = hFILE
+ none.
##Out:
+ CC = success
#PutCA
Print A (char) to StdOut
##In:
+ A : char to print
+ none.
##Out:
+ CC = success
#GetDevByIDA #GetDevByIDA
##IN: ##IN:
@ -77,7 +98,7 @@ Prints Pascal/C-Style String
##OUT: ##OUT:
+ CC = OK, CS = ERROR + CC = OK, CS = ERROR
+ Y,A = devslot + Y,A = DEVSLOT
+ note: X Unmodified + note: X Unmodified
#GetDevIDByNameYA #GetDevIDByNameYA
@ -88,7 +109,7 @@ Prints Pascal/C-Style String
##OUT: ##OUT:
+ CC = OK, CS = ERROR + CC = OK, CS = ERROR
+ X = DEVID + X = DEVID
+ Y,A = pDev + Y,A = DEVSLOT
#GetDevInfoA #GetDevInfoA
@ -99,6 +120,25 @@ Prints Pascal/C-Style String
+ CC = OK, CS = ERROR + CC = OK, CS = ERROR
+ Y,A = Ptr to S.DEVINFO + Y,A = Ptr to S.DEVINFO
#MkNodYA
return a S.FILE from a given Device
##IN:
+ Y,A=DevName
##OUT:
+ CC = OK, CS = ERROR
+ A = hFILE
#MKFIFO
return a S.FILE to a new FIFO
##IN:
##OUT:
+ CC = OK, CS = ERROR
+ A = hFILE
#OpenDirYA #OpenDirYA
##In: ##In:
@ -207,6 +247,24 @@ Close a file
##Out : ##Out :
#FReadA
Read ONE byte from file
##In :
+ A = hFILE
##Out :
+ A = Byte Read
#FWriteAY
##In:
+ A = hFILE
+ Y = char
#Out:
+ Y,A = Bytes Written
#FRead #FRead
Read bytes from file Read bytes from file