Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-07-10 17:33:13 +02:00
parent 4294752153
commit ad49295e8f
13 changed files with 258 additions and 252 deletions

View File

@ -41,7 +41,7 @@ Dev.Detect >LDYA L.MSG.DETECT
>SYSCALL InsDrv
bcs .9
>STYA DEV.NODE+S.NODE.DEV.DRVPTR
>STYA DEV.NODE+S.FD.DEV.DRVPTR
>LDYA L.NODE
>SYSCALL MKNOD
@ -50,7 +50,7 @@ Dev.Detect >LDYA L.MSG.DETECT
CS.END
MSG.DETECT .AZ "Apple IIe/IIc 80 Col Driver.\r\n"
*--------------------------------------
NODE .DA #S.NODE.T.CDEV
NODE .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID

View File

@ -282,7 +282,7 @@ S.MSTAT .EQ 24
C.EOF .EQ 4
*--------------------------------------
DEVID.NULL .EQ 0
DEVID.SYS .EQ 2
DEVID.SYS .EQ 1
*--------------------------------------
IOCTL.STATUS .EQ 0 X,Y = byte count returned
IOCTL.READBLOCK .EQ 2
@ -359,59 +359,59 @@ S.DSTAT.VERSION .EQ 23
*
S.DSTAT .EQ 25
*--------------------------------------
* S.NODE
* S.FD
*--------------------------------------
S.NODE.T .EQ 0
S.NODE.T.REG .EQ 0
S.NODE.T.DIR .EQ 2
S.NODE.T.CDEV .EQ 4
S.NODE.T.BDEV .EQ 6
S.NODE.T.LNK .EQ 8
S.NODE.T.DSOCK .EQ 10
S.NODE.T.SSOCK .EQ 12
S.NODE.T.FIFO .EQ 14
S.NODE.HANDLER .EQ 1 0=KRNL,!0=hLIB (LIBNFS,LIBTCPIP.....)
S.FD.T .EQ 0
S.FD.T.REG .EQ 0
S.FD.T.DIR .EQ 2
S.FD.T.CDEV .EQ 4
S.FD.T.BDEV .EQ 6
S.FD.T.LNK .EQ 8
S.FD.T.DSOCK .EQ 10
S.FD.T.SSOCK .EQ 12
S.FD.T.FIFO .EQ 14
S.FD.HANDLER .EQ 1 0=KRNL,!0=hLIB (LIBNFS,LIBTCPIP.....)
*--------------------------------------
S.NODE.REG.REF .EQ 2
S.NODE.REG.IOBUF .EQ 3
S.FD.REG.REF .EQ 2
S.FD.REG.IOBUF .EQ 3
*
S.NODE.REG .EQ 4
S.FD.REG .EQ 4
*--------------------------------------
S.NODE.DIR.REF .EQ 2
S.NODE.DIR.IOBUF .EQ 3
S.NODE.DIR.EL .EQ 4
S.NODE.DIR.EPB .EQ 5
S.NODE.DIR.FC .EQ 6 word
S.FD.DIR.REF .EQ 2
S.FD.DIR.IOBUF .EQ 3
S.FD.DIR.EL .EQ 4
S.FD.DIR.EPB .EQ 5
S.FD.DIR.FC .EQ 6 word
*
S.NODE.DIR .EQ 8
S.FD.DIR .EQ 8
*--------------------------------------
S.NODE.DEV.BUSID .EQ 2
S.NODE.DEV.DEVID .EQ 3
S.NODE.DEV.BUSPTR .EQ 4 word
S.NODE.DEV.DRVPTR .EQ 6 word
S.NODE.DEV.NAME .EQ 8 C-String
S.FD.DEV.BUSID .EQ 2
S.FD.DEV.DEVID .EQ 3
S.FD.DEV.BUSPTR .EQ 4 word
S.FD.DEV.DRVPTR .EQ 6 word
S.FD.DEV.NAME .EQ 8 C-String
*
S.NODE.DEV .EQ 16
S.FD.DEV .EQ 16
*--------------------------------------
* S.NODE.LNK
* S.FD.LNK
*--------------------------------------
S.NODE.SSOCK.HSKT .EQ 2
S.NODE.SSOCK.OPEN .EQ 3
S.NODE.SSOCK.CLOSE .EQ 4
S.NODE.SSOCK.READ .EQ 5
S.NODE.SSOCK.WRITE .EQ 6
S.NODE.SSOCK.STATUS .EQ 7
S.FD.SSOCK.HSKT .EQ 2
S.FD.SSOCK.OPEN .EQ 3
S.FD.SSOCK.CLOSE .EQ 4
S.FD.SSOCK.READ .EQ 5
S.FD.SSOCK.WRITE .EQ 6
S.FD.SSOCK.STATUS .EQ 7
*
S.NODE.SSOCK .EQ 8
S.FD.SSOCK .EQ 8
*--------------------------------------
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.FD.FIFO.S .EQ 2
S.FD.FIFO.S.Opened .EQ 1
S.FD.FIFO.S.Closed .EQ 2
S.FD.FIFO.hMem .EQ 3
S.FD.FIFO.Tail .EQ 4
S.FD.FIFO.Head .EQ 5
*
S.NODE.FIFO .EQ 6
S.FD.FIFO .EQ 6
*--------------------------------------
* PS STRUCT
*--------------------------------------

View File

@ -21,7 +21,7 @@ ZPPtr4 .EQ ZPKERNEL+6
pIOCTL .EQ ZPKERNEL+8
pDev .EQ ZPKERNEL+10
pNode .EQ ZPKERNEL+12
pFD .EQ ZPKERNEL+12
pIOBuf .EQ ZPKERNEL+14
*--------------------------------------
SYS.BASL0 .EQ $800
@ -102,22 +102,25 @@ K.STACKTOP .EQ $03ED XFer !!! down to $3E0
*--------------------------------------
*** $3F0-$3FF IRQ Handler.... ***
*--------------------------------------
* Main/Aux $400 -> $7FF : TXT PAGE1 System Screen
* Main/Aux $800 -> $BFF : TXT PAGE2 Console Screen
* Main/Aux $400 -> $7FF : TXT PAGE1 Console Screen
* Main/Aux $800 -> $BFF : TXT PAGE2 System Screen
*--------------------------------------
* free $0C00->$17FF = $C00 (3072) Aux
*--------------------------------------
K.Buf256 .EQ $0C00 Main
Dev.Table.hMem .EQ $0C00 K.Dev.MAX
Dev.Table.F .EQ $0C20 K.Dev.MAX
Dev.Table.PTRLO .EQ $0C40 K.Dev.MAX
Dev.Table.PTRHI .EQ $0C60 K.Dev.MAX
*--------------------------------------
PS.Table.PID .EQ $0D00 K.PS.MAX
PS.Table.hMem .EQ $0D20 K.PS.MAX
PS.Table.hMem .EQ $0D00 K.PS.MAX
PS.Table.PID .EQ $0D20 K.PS.MAX
PS.Table.Stat .EQ $0D40 K.PS.MAX
*--------------------------------------
Evt.Table .EQ $0D60 K.EVT.MAX*S.EVT.SIZE=4*8=32b
*--------------------------------------
Flt.Table .EQ $0D80 K.FLT.MAX*S.FLT.SIZE=4*32=128b
*--------------------------------------
Dev.Table .EQ $0E00 K.Dev.MAX*2=32*2=64b
K.Buf256 .EQ $0E00
*--------------------------------------
K.IOBuf .EQ $0F00
*--------------------------------------

View File

@ -301,17 +301,17 @@ SKT.AcceptA jsr SKT.GetA.I
* A = hFile
*\--------------------------------------
SKT.MkNodA sta .1+1
>LDYAI S.NODE.SSOCK
>LDYAI S.FD.SSOCK
>SYSCALL GetMem0.YA
bcs .9
>STYA ZPTmpPtr1
ldy #S.NODE.T
lda #S.NODE.T.SSOCK
ldy #S.FD.T
lda #S.FD.T.SSOCK
sta (ZPTmpPtr1),y
ldy #S.NODE.SSOCK.HSKT
ldy #S.FD.SSOCK.HSKT
.1 lda #$ff
sta (ZPTmpPtr1),y
@ -325,9 +325,9 @@ SKT.MkNodA sta .1+1
>STYA ZPTmpPtr1
ldy #S.NODE.SSOCK-1
ldy #S.FD.SSOCK-1
.2 lda NODE.SSOCK,y
.2 lda FD.SSOCK,y
sta (ZPTmpPtr1),y
dey
bpl .2

View File

@ -112,7 +112,7 @@ L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED
LIB.LOAD ldx RefCount
bne .8
sta NODE.SSOCK+S.NODE.HANDLER
sta FD.SSOCK+S.FD.HANDLER
jsr ARP.CLEAR
jsr DNS.CLEAR
@ -292,14 +292,14 @@ bTextMode .BS 1
HST.SScanF .AZ "%d.%d.%d.%d"
IP.ID .BS 2
IP.CHECKSUM .BS 4
NODE.SSOCK .BS 1 S.NODE.HANDLER
.DA #S.NODE.T.SSOCK
.BS 1 S.NODE.SSOCK.HSKT
.DA #0 S.NODE.SSOCK.OPEN
.DA #0 S.NODE.SSOCK.CLOSE
FD.SSOCK .BS 1 S.FD.HANDLER
.DA #S.FD.T.SSOCK
.BS 1 S.FD.SSOCK.HSKT
.DA #0 S.FD.SSOCK.OPEN
.DA #0 S.FD.SSOCK.CLOSE
.DA #0
.DA #0
.DA #0 S.NODE.SSOCK.STATUS
.DA #0 S.FD.SSOCK.STATUS
*--------------------------------------
MAN
SAVE /A2OSX.SRC/LIB/LIBTCPIP.S

View File

@ -14,8 +14,8 @@ K.GetDevByID cmp DevMgr.DevCnt
tax
lda Dev.Table,x
jmp K.GetMemPtr
ldy Dev.Table.PTRLO,x
lda Dev.Table.PTRHI,x
* clc
@ -33,14 +33,14 @@ K.GetDevByName >STYA ZPPtr1
ldx #0
ldy Dev.Table,x
jsr K.GetMemPtr
ldy Dev.Table.PTRLO,x
lda Dev.Table.PTRHI,x
>STYA ZPPtr2
lda (ZPPtr2)
clc
adc #S.NODE.DEV.NAME
adc #S.FD.DEV.NAME
sta ZPPtr3
ldy #1
lda (ZPPtr2)
@ -78,8 +78,6 @@ K.GetDev.NODEV lda #MLI.E.NODEV
* **Out:**
* Y,A = S.DSTAT
*\--------------------------------------
K.DevClose ldx #IOCTL.CLOSE
.HS 2C BIT ABS
K.GetDevStatus ldx #IOCTL.STATUS
jsr K.GetDevByID
bcs K.IOCTL.9
@ -90,12 +88,12 @@ K.GetDevStatus ldx #IOCTL.STATUS
*/--------------------------------------
* # IOCTL
* ## C
* `int ioctl ( short int id, short int op, void *param);`
* `int ioctl(int fd, unsigned long request, ...);`
* ## ASM
* **In:**
* `PUSHWI param`
* `lda #op`
* `ldy id`
* `lda #request`
* `ldy fd`
* `>SYSCALL IOCTL`
* **Out:**
* Y,A = ...

View File

@ -15,15 +15,15 @@ K.OpenDir jsr PFT.CheckPathYA
>STYA ZPPtr2
jsr STDIO.SetMLIPathYA For GETFILEINFO,MLIOPEN
>LDYAI S.NODE.DIR
>LDYAI S.FD.DIR
jsr K.GetMem0
bcs .99
>STYA ZPPtr1
stx .8+1
ldy #S.NODE.T Done by GetMem0
lda #S.NODE.T.DIR
ldy #S.FD.T Done by GetMem0
lda #S.FD.T.DIR
sta (ZPPtr1),y
ldy #1
@ -44,7 +44,7 @@ K.OpenDir jsr PFT.CheckPathYA
bcs .98
lda K.MLI.PARAMS+5 get ref_num
ldy #S.NODE.DIR.REF
ldy #S.FD.DIR.REF
sta (ZPPtr1),y
.8 lda #$ff Self Modified
@ -83,7 +83,7 @@ K.ReadDir jsr PFT.CheckNodeA
jsr K.GetMemPtr
>STYA ZPPtr1
ldy #S.NODE.DIR.REF
ldy #S.FD.DIR.REF
lda (ZPPtr1),y
beq K.ReadDir.ROOT
jmp K.ReadDir.DIR
@ -94,7 +94,7 @@ K.ReadDir.NoMore
rts
*--------------------------------------
K.ReadDir.ROOT
ldy #S.NODE.DIR.FC did we already returned something ?
ldy #S.FD.DIR.FC did we already returned something ?
lda (ZPPtr1),y
bne K.ReadDir.NoMore
@ -207,7 +207,7 @@ K.ReadDir.ROOT
* lda #0 done by S.MEM.F.INIT0
* sta (ZPPtr4) Ending 0
.5 ldy #S.NODE.DIR.FC
.5 ldy #S.FD.DIR.FC
lda #16
sta (ZPPtr1),y Flag that we returned somthing for next time
@ -239,7 +239,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
>MLICALL MLIREAD Read A block from directory
bcs .98
ldy #S.NODE.DIR.EL Check if first run....
ldy #S.FD.DIR.EL Check if first run....
lda (ZPPtr1),y
bne .2 no, we have all we need....
@ -261,7 +261,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF
sec
.99 rts
.2 ldy #S.NODE.DIR.EL+3
.2 ldy #S.FD.DIR.EL+3
ldx #3
.3 lda (ZPPtr1),y get this session parameters from S.DIR
@ -404,7 +404,7 @@ K.ReadDir.DIR2 jsr K.ReadDir.GetBuf
>STYA ZPPtr1
ldx #3
ldy #S.NODE.DIR.EL+3
ldy #S.FD.DIR.EL+3
.81 lda K.ReadDir.EL,x Store back this session prameters to S.DIR
sta (ZPPtr1),y

View File

@ -104,13 +104,13 @@ DRV.BLK txa
lsr
sta DRV.BLK.PARAMS CMD
ldy #S.NODE.DEV.DEVID Drive 1, or 2
ldy #S.FD.DEV.DEVID Drive 1, or 2
lda (pDev),y
dec O or 1
lsr in Carry
php
ldy #S.NODE.DEV.BUSID
ldy #S.FD.DEV.BUSID
lda (pDev),y
asl
asl
@ -132,12 +132,12 @@ DRV.BLK txa
dex
bpl .1
ldy #S.NODE.DEV.BUSPTR
ldy #S.FD.DEV.BUSPTR
lda (pNode),y
lda (pFD),y
sta .3+1
iny
lda (pNode),y
lda (pFD),y
sta .3+2
jsr GO.ProDOS
@ -169,11 +169,11 @@ DRV.SmartPort cld
lda DRV.SmartPort.Cnt,x
sta DRV.SmartPort.Go.Cmd
ldy #S.NODE.DEV.BUSPTR
lda (pNode),y
ldy #S.FD.DEV.BUSPTR
lda (pFD),y
sta .8+1
iny
lda (pNode),y
lda (pFD),y
sta .8+2
.8 jsr $ffff

View File

@ -2,7 +2,7 @@ NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*--------------------------------------
Kernel.Init sei
Kernel.Init2 sei
ldx #$FF
txs
sta SETALTZP
@ -11,8 +11,8 @@ Kernel.Init sei
stx A2osX.SaveSX
sta CLRALTZP Make sure MAIN ZP is enabled for X.PRINT.F
*--------------------------------------
Kernel.Init2 >LDAXI MSG.Init2
>LDAXI MSG.Init2
jsr PrintFAX
>LDAXI MSG.MAIN
@ -23,7 +23,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>LDYAI CORE.Run
>STYA ZPPtr2
>LDYAI A2osX.MAIN.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
>LDAXI MSG.AUX
@ -48,7 +48,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>LDYAI A2osX.SYSCALL
>STYA ZPPtr2
>LDYAI A2osX.GP.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
sta CLRALTZP
@ -65,7 +65,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>LDYAI $D000
>STYA ZPPtr2
>LDYAI A2osX.D2.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
sta CLRALTZP
@ -82,7 +82,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>LDYAI $D000
>STYA ZPPtr2
>LDYAI A2osX.D1.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
sta CLRALTZP
@ -99,7 +99,7 @@ Kernel.Init2 >LDAXI MSG.Init2
>LDYAI $E000
>STYA ZPPtr2
>LDYAI A2osX.E0.S^$FFFF
>STYA ZPPtr3
jsr Kernel.Move
sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F
@ -136,10 +136,10 @@ Kernel.Init3 sta SETALTZP
jsr MemMgrInit
>LDYAI NODE.NULL
>LDYAI FD.NULL
jsr DevMgrInit.AddCDev
>LDYAI NODE.SYS
>LDYAI FD.SYS
jsr DevMgrInit.AddCDev
jsr PS0Init
@ -219,7 +219,10 @@ IsDigit.9 sec
.EP
Kernel.ZP.S .EQ *-Kernel.ZP
*--------------------------------------
Kernel.Move ldy #0
Kernel.Move >STYA ZPPtr3
ldy #0
.1 inc ZPPtr3
bne .2
inc ZPPtr3+1
@ -233,8 +236,41 @@ Kernel.Move ldy #0
inc ZPPtr1+1
inc ZPPtr2+1
bne .1
.9 rts
*--------------------------------------
KConfigLoad >LDAXI MSG.KCREAD
jsr PrintFAX
jsr MLI
.DA #MLIOPEN
.DA MLIOPEN00
bcs .9
lda MLIOPEN00+5
sta MLIREAD00+1
sta MLICLOSE00+1
jsr MLI
.DA #MLIREAD
.DA MLIREAD00
php
pha
jsr MLI
.DA #MLICLOSE
.DA MLICLOSE00
pla
plp
bcs .9
>LDAXI MSG.KCREAD.OK
jsr PrintFAX
rts
.9 >LDAXI MSG.KCREAD.KO
jsr PrintFAX
rts
*--------------------------------------
CPU.Init >LDAXI MSG.CPU
jsr PrintFAX
@ -399,38 +435,6 @@ DetectZ80 ldx #Z80Code.Size
clc
.9 rts
*--------------------------------------
KConfigLoad >LDAXI MSG.KCREAD
jsr PrintFAX
jsr MLI
.DA #MLIOPEN
.DA MLIOPEN00
bcs .9
lda MLIOPEN00+5
sta MLIREAD00+1
sta MLICLOSE00+1
jsr MLI
.DA #MLIREAD
.DA MLIREAD00
php
pha
jsr MLI
.DA #MLICLOSE
.DA MLICLOSE00
pla
plp
bcs .9
>LDAXI MSG.KCREAD.OK
jsr PrintFAX
rts
.9 >LDAXI MSG.KCREAD.KO
jsr PrintFAX
rts
*--------------------------------------
Z80Code.Start .HS 31FF00 START: LD SP,000FFH Init Stack
.HS 3EFF LD A,0FFH Set Flag
.HS 320D00 LD (FLAG),A
@ -780,13 +784,13 @@ DevMgrInit >LDYAI MSG.DEV
tax 000DSSS0
lsr 0000DSSS
and #$7
sta NODE.BDEV+S.NODE.DEV.BUSID
sta FD.BDEV+S.FD.DEV.BUSID
lda DEVPTRS,x
sta NODE.BDEV+S.NODE.DEV.BUSPTR
sta FD.BDEV+S.FD.DEV.BUSPTR
lda DEVPTRS+1,x
sta NODE.BDEV+S.NODE.DEV.BUSPTR+1
sta FD.BDEV+S.FD.DEV.BUSPTR+1
sta ZPPtr1+1
stz ZPPtr1
@ -794,7 +798,7 @@ DevMgrInit >LDYAI MSG.DEV
plp
lda #0
adc #1 Make DevID 1 or 2
sta NODE.BDEV+S.NODE.DEV.DEVID
sta FD.BDEV+S.FD.DEV.DEVID
lda ZPPtr1+1
@ -832,11 +836,11 @@ DevMgrInit >LDYAI MSG.DEV
lda ZPPtr1 get $Cn
and #$f get $0n
cmp NODE.BDEV+S.NODE.DEV.DEVID same as SSS ?
cmp FD.BDEV+S.FD.DEV.DEVID same as SSS ?
beq .51
inc NODE.BDEV+S.NODE.DEV.DEVID Remapped SP devices....
inc NODE.BDEV+S.NODE.DEV.DEVID Add 2 to DEVID (2 & 3)
inc FD.BDEV+S.FD.DEV.DEVID Remapped SP devices....
inc FD.BDEV+S.FD.DEV.DEVID Add 2 to DEVID (2 & 3)
.51 jsr DevMgrInit.SP
lda #A2osX.S.SP
@ -845,7 +849,7 @@ DevMgrInit >LDYAI MSG.DEV
.6 jsr DevMgrInit.BLK
lda #A2osX.S.BLK
.7 ldx NODE.BDEV+S.NODE.DEV.DEVID
.7 ldx FD.BDEV+S.FD.DEV.DEVID
sta A2osX.S,x
.8 dec DevMgrInit.DEVCNT
@ -868,7 +872,7 @@ DevMgrInit.USR >LDYAI DRV.BlkDevice
*--------------------------------------
DevMgrInit.BLK ldy #$ff
lda (ZPPtr1),y
sta NODE.BDEV+S.NODE.DEV.BUSPTR
sta FD.BDEV+S.FD.DEV.BUSPTR
>LDYAI DRV.BlkDevice
jmp DevMgrInit.AddBDev
@ -878,11 +882,11 @@ DevMgrInit.SP ldy #$ff
clc
adc #3 Compute smartport entry point
sta .1+1
sta NODE.BDEV+S.NODE.DEV.BUSPTR
sta FD.BDEV+S.FD.DEV.BUSPTR
lda ZPPtr1+1
sta .1+2
lda NODE.BDEV+S.NODE.DEV.DEVID
lda FD.BDEV+S.FD.DEV.DEVID
sta SP.DEV.STATUS.DEVID
.1 jsr $ffff Self Modified
@ -890,43 +894,55 @@ DevMgrInit.SP ldy #$ff
.DA SP.DEV.STATUS
bcs .9
ldx SP.DEV.STATUS.DATA+S.DSTAT.S
>LDYAI DRV.SmartPort
jsr DevMgrInit.AddBDev
.9 rts
*--------------------------------------
DevMgrInit.AddBDev
>STYA NODE.BDEV+S.NODE.DEV.DRVPTR
>STYA FD.BDEV+S.FD.DEV.DRVPTR
lda NODE.BDEV+S.NODE.DEV.BUSID
lda FD.BDEV+S.FD.DEV.BUSID
ora #$30
sta NODE.BDEV+S.NODE.DEV.NAME+1 SnDy
sta FD.BDEV+S.FD.DEV.NAME+1 SnDy
lda NODE.BDEV+S.NODE.DEV.DEVID
lda FD.BDEV+S.FD.DEV.DEVID
ora #$30
sta NODE.BDEV+S.NODE.DEV.NAME+3 SxDn
sta FD.BDEV+S.FD.DEV.NAME+3 SxDn
>LDYAI DEV.BDEV
>LDYAI FD.BDEV
DevMgrInit.AddCDev
>STYA .1+1
stx .10+1
>LDYAI S.FD.DEV
jsr K.GetMem
>STYA .2+1
txa
phx
ldx DevMgr.DevCnt
sta Dev.Table,x
inx
stx DevMgr.DevCnt
sta Dev.Table.PTRHI,x
tya
sta Dev.Table.PTRLO,x
pla
sta Dev.Table.hMem,x
.10+1 lda #$ff SELF MODIFIED
sta Dev.Table.F,x
ldx #S.NODE.DEV-1
ldx #S.FD.DEV-1
.1 lda $ffff,x SELF MODIFIED
.2 sta $ffff,x SELF MODIFIED
dex
bpl .1
jsr $ffff
inc DevMgr.DevCnt
clc
rts
@ -934,7 +950,7 @@ DevMgrInit.AddCDev
sec
rts
*--------------------------------------
DEV.NULL .DA #S.NODE.T.CDEV
FD.NULL .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #DEVID.NULL
@ -943,7 +959,7 @@ DEV.NULL .DA #S.NODE.T.CDEV
.AZ "NULL" NAME
.HS 000000
*--------------------------------------
DEV.SYS .DA #S.NODE.T.CDEV
FD.SYS .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #DEVID.SYS
@ -952,7 +968,7 @@ DEV.SYS .DA #S.NODE.T.CDEV
.AZ "SYS" NAME
.HS 00000000
*--------------------------------------
DEV.BDEV .DA #S.NODE.T.BDEV
FD.BDEV .DA #S.FD.T.BDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
@ -968,7 +984,7 @@ SP.DEV.STATUS .DA #3
SP.DEV.STATUS.DEVID
.BS 1
.DA SP.DEV.STATUS.DATA
.DA #3 return DIB
.DA S.IOCTL.STATCODE.GETDIB
SP.DEV.STATUS.DATA
.BS S.DSTAT
*--------------------------------------

View File

@ -2,13 +2,21 @@ NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*--------------------------------------
IO.OPEN
* int open(const char *pathname, int flags);
*--------------------------------------
IO.SELECT jsr K.GetMemPtr
>STYA pNode
rts
IO.OPEN jsr IO.SELECT
*--------------------------------------
IO.WRITE lda (pNode) #S.NODE.T
* int close(int fd);
*--------------------------------------
IO.CLOSE
*--------------------------------------
* int read(int fd, void *buf, size_t count);
*--------------------------------------
IO.READ
*--------------------------------------
* int write(int fd, const void *buf, size_t count);
*--------------------------------------
IO.WRITE lda (pFD) #S.FD.T
tax
*--------------------------------------
jmp (.1,x)
@ -23,54 +31,54 @@ IO.WRITE lda (pNode) #S.NODE.T
*--------------------------------------
IO.WRITE.REG >PUSHW K.S.IOCTL+S.IOCTL.BUFPTR
>PUSHW K.S.IOCTL+S.IOCTL.BYTECNT
ldy #S.NODE.REG.REF
>PUSHB (pNode),y
ldy #S.FD.REG.REF
>PUSHB (pFD),y
jmp K.FWrite
*--------------------------------------
IO.WRITE.CDEV ldy #S.NODE.DEV.DRVPTR
lda (pNode),y
IO.WRITE.CDEV ldy #S.FD.DEV.DRVPTR
lda (pFD),y
sta .1+1
iny
lda (pNode),y
lda (pFD),y
sta .1+2
lda K.IOBuf
ldx #IOCTL.WRITE
.1 jmp $ffff
*--------------------------------------
IO.WRITE.SSOCK lda (pNode) #S.NODE.HANDLER
IO.WRITE.SSOCK lda (pFD) #S.FD.HANDLER
jsr K.GetMemPtr
>STYA .1
ldy #S.NODE.SSOCK.HSKT
>PUSHB (pNode),y
ldy #S.FD.SSOCK.HSKT
>PUSHB (pFD),y
>PUSHB K.IOBuf
ldy #S.NODE.SSOCK.WRITE
lda (pNode),y
ldy #S.FD.SSOCK.WRITE
lda (pFD),y
tax Function Offset for write
.1 jmp $ffff
*--------------------------------------
IO.WRITE.FIFO ldy #S.NODE.FIFO.S
lda (pNode),y
IO.WRITE.FIFO ldy #S.FD.FIFO.S
lda (pFD),y
beq .9 Remote PS did not opened yet the pipe
cmp #S.NODE.FIFO.S.Closed
cmp #S.FD.FIFO.S.Closed
beq .99 Remote PS closed the Pipe
ldy #S.NODE.FIFO.hMem
lda (pNode),y
ldy #S.FD.FIFO.hMem
lda (pFD),y
jsr K.GetMemPtr
>STYA .1+2
ldy #S.NODE.FIFO.Head
lda (pNode),y
ldy #S.FD.FIFO.Head
lda (pFD),y
inc
dey #S.NODE.FIFO.Tail
cmp (pNode),y
dey #S.FD.FIFO.Tail
cmp (pFD),y
beq .9 FIFO is full
iny
sta (pNode),y
sta (pFD),y
tay
lda K.IOBuf
.1 sta $ffff,y
@ -83,6 +91,10 @@ IO.WRITE.FIFO ldy #S.NODE.FIFO.S
sec
rts
*--------------------------------------
IO.SELECT jsr K.GetMemPtr
>STYA pFD
rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.IO
LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -190,40 +190,31 @@ K.IrqH.Switch inc IRQ.Tick
*--------------------------------------
K.IrqH.DEV ldx #0
.1 lda Dev.Table+1,x
.1 lda Dev.Table.F,x
and #S.DSTAT.S.IRQ
beq .2
sta $ff
lda Dev.Table,x
lda Dev.Table.PTRLO,x
sta $fe
lda Dev.Table.PTRHI,x
sta $ff
ldy #S.NODE.DEV.DRVPTR
ldy #S.FD.DEV.DRVPTR
lda ($fe),y
pha
sta .10+1
iny
lda ($fe),y
sta $ff
pla
sta $fe
ldy #IOCTL.IRQ+4+1
lda ($fe),y
cmp /A2osX.BADCALL
beq .2
sta .10+2
dey
lda ($fe),y
sta .10+1
phx
ldx #IOCTL.IRQ
.10 jsr $ffff SELF MODIFIED
plx
bcc .8 CC, IRQ cleared by device
.2 inx
inx
.3 cpx DevMgr.DevCnt
bne .1

View File

@ -126,9 +126,9 @@ K.MkNod jsr K.GetDevByName Y,A=NAME
>STYA .1+1
stx .2+1
ldy #S.NODE.T
ldy #S.FD.T
lda (pDev),y
cmp #S.NODE.T.CDEV
cmp #S.FD.T.CDEV
bne .99
txa Pass DEV.ID to OPEN
@ -136,22 +136,22 @@ K.MkNod jsr K.GetDevByName Y,A=NAME
.1 jsr $FFFF SELF MODIFIED
bcs .9
>LDYAI S.NODE.DEV
>LDYAI S.FD.DEV
jsr K.GetMem0
bcs .9
>STYA ZPPtr3 Ptr3=S.NODE
>STYA ZPPtr3 Ptr3=S.FD
ldy #S.NODE.T
lda #S.NODE.T.CDEV
ldy #S.FD.T
lda #S.FD.T.CDEV
sta (ZPPtr3),y
ldy #S.NODE.DEV.DEVID
ldy #S.FD.DEV.DEVID
.2 lda #$ff Self Modified
sta (ZPPtr3),y
ldy #S.NODE.DEV.DRVPTR
ldy #S.FD.DEV.DRVPTR
lda .1+1
sta (ZPPtr3),y
@ -180,18 +180,18 @@ K.MKFIFO >LDYAI 256
stx .1+1 save FIFO buffer
>LDYAI S.NODE.FIFO
>LDYAI S.FD.FIFO
jsr K.GetMem0
bcs .9
>STYA ZPPtr1
ldy #S.NODE.T
lda #S.NODE.T.FIFO
ldy #S.FD.T
lda #S.FD.T.FIFO
sta (ZPPtr1),y
iny S.NODE.FIFO.hMem
iny S.FD.FIFO.hMem
.1 lda #$ff Self Modified
sta (ZPPtr1),y
txa

View File

@ -596,7 +596,7 @@ K.GetChar ldy #S.PS.hStdIn
K.GetC jsr K.GetMemPtr
>STYA pDev
ldy #S.NODE.T
ldy #S.FD.T
lda (pDev),y
asl
tax
@ -613,7 +613,7 @@ K.GetC jsr K.GetMemPtr
*--------------------------------------
K.GetC.REG >PUSHWI K.IOBuf
>PUSHWI 1
ldy #S.NODE.REG.REF
ldy #S.FD.REG.REF
>PUSHB (pDev),y
jsr K.FRead
@ -622,7 +622,7 @@ K.GetC.REG >PUSHWI K.IOBuf
.9 rts
*--------------------------------------
K.GetC.CDEV ldx #IOCTL.READ
ldy #S.NODE.DEV.DRVPTR
ldy #S.FD.DEV.DRVPTR
lda (pDev),y
sta .1+1
iny
@ -630,15 +630,15 @@ K.GetC.CDEV ldx #IOCTL.READ
sta .1+2
.1 jmp $ffff
*--------------------------------------
K.GetC.SSOCK lda (pDev) #S.NODE.HANDLER
K.GetC.SSOCK lda (pDev) #S.FD.HANDLER
* jsr K.GetMemPtr
* >STYA .1+1
* ldy #S.NODE.SSOCK.READ
* ldy #S.FD.SSOCK.READ
* lda (pDev),y
* tax Function Offset for READ
* ldy #S.NODE.SSOCK.HSKT
* ldy #S.FD.SSOCK.HSKT
* lda (pDev),y
*.1 jmp $ffff
@ -840,15 +840,15 @@ K.FOpen jsr PFT.CheckPathSTK
bcc K.FOpen.10
K.FOpen.9 rts
K.FOpen.10 >LDYAI S.NODE.REG
K.FOpen.10 >LDYAI S.FD.REG
jsr K.GetMem0
bcs K.FOpen.9
>STYA ZPPtr1
stx .8+1
* ldy #S.NODE.T Done by GetMem0
* lda #S.NODE.T.REG
* ldy #S.FD.T Done by GetMem0
* lda #S.FD.T.REG
* sta (ZPPtr1),y
jsr STDIO.SetIOBUF
@ -858,7 +858,7 @@ K.FOpen.10 >LDYAI S.NODE.REG
bcs .98
lda K.MLI.PARAMS+5 get ref_num
ldy #S.NODE.REG.REF
ldy #S.FD.REG.REF
sta (ZPPtr1),y
sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based
@ -909,48 +909,34 @@ K.FOpen.AUXTYPE .BS 2
*/--------------------------------------
* # FClose
* Close a file
* ## C
* int fclose ( FILE * stream );
* ## ASM
* **In:**
* A = hFILE
* **Out:**
*\--------------------------------------
K.FClose jsr PFT.CheckNodeA
sta K.FClose.8+1
sta .8+1
jsr K.GetMemPtr
>STYA ZPPtr1
ldy #S.NODE.T
lda (ZPPtr1),y
asl
tax
jmp (.1,x)
.1 .DA K.FClose.REG
.DA K.FClose.DIR
.DA K.FClose.CDEV
K.FClose.REG
K.FClose.DIR ldy #S.NODE.REG.REF
ldy #S.FD.REG.REF
lda (ZPPtr1),y
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.NODE.REG.IOBUF
.1 ldy #S.FD.REG.IOBUF
lda (ZPPtr1),y
beq K.FClose.8
beq .8
jsr K.FreeMem
bra K.FClose.8
K.FClose.CDEV ldy #S.NODE.DEV.DEVID
lda (ZPPtr1),y
jsr K.DevClose
bcs K.FClose.9
K.FClose.8 lda #$ff Self Modified
.8 lda #$ff Self Modified
jmp K.FreeMem
K.FClose.9 rts
.9 rts
*/--------------------------------------
* # FRead
* int fread ( void * ptr, int count, FILE * stream );
@ -1197,13 +1183,13 @@ STDIO.SetIOBUF >LDYAI 1024 get a ProDOS IOBUF
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.NODE.REG.IOBUF
ldy #S.FD.REG.IOBUF
sta (ZPPtr1),y
.9 rts
*--------------------------------------
STDIO.GetRefNum jsr K.GetMemPtr
>STYA ZPPtr1
ldy #S.NODE.REG.REF
ldy #S.FD.REG.REF
lda (ZPPtr1),y
sta K.MLI.PARAMS+1
rts