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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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