Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-07-11 17:13:29 +02:00
parent ad49295e8f
commit be83829ab4
15 changed files with 402 additions and 271 deletions

Binary file not shown.

Binary file not shown.

View File

@ -4,8 +4,8 @@ AUTO 4,1
*--------------------------------------
KVER .EQ $5C00 92.0
*--------------------------------------
ZPDRV .EQ $20 32 bytes for DHGR.DRV....
ZPLIB .EQ $40 32 bytes for TCPIPD..
ZPDRV .EQ $20 32 bytes
ZPLIB .EQ $40 32 bytes
*--------------------------------------
* PS Context : 48 bytes MAX
*--------------------------------------
@ -79,11 +79,16 @@ SYS.MKFIFO .EQ $0A
SYS.OpenDir .EQ $10
SYS.ReadDir .EQ $12
SYS.CloseDir .EQ $14
* .EQ $16
* .EQ $18
* .EQ $1A
* .EQ $1C
* .EQ $1E
SYS.Open .EQ $16
SYS.Open.RDONLY .EQ %00000001
SYS.Open.WRONLY .EQ %00000010
SYS.Open.RDWR .EQ %00000011
SYS.Open.APPEND .EQ %00000100
SYS.Open.CREATE .EQ %10000000
SYS.Close .EQ $18
SYS.Read .EQ $1A
SYS.Write .EQ $1C
SYS.IOCTL .EQ $1E
SYS.FPutC .EQ $20
SYS.PutChar .EQ $22
@ -119,7 +124,7 @@ SYS.Rename .EQ $42
SYS.GetDevByID .EQ $48
SYS.GetDevByName .EQ $4A
SYS.GetDevStatus .EQ $4C
SYS.IOCTL .EQ $4E
* .EQ $4E
* .EQ $50
SYS.SScanF .EQ $52
@ -357,30 +362,30 @@ S.DSTAT.ST.DSKSW .EQ $40
S.DSTAT.ST.NOREM .EQ $20
S.DSTAT.VERSION .EQ 23
*
S.DSTAT .EQ 25
S.DSTAT .EQ 25
*--------------------------------------
* S.FD
*--------------------------------------
S.FD.T .EQ 0
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.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.FD.REG.REF .EQ 2
S.FD.REG.REF .EQ 2
S.FD.REG.IOBUF .EQ 3
*
S.FD.REG .EQ 4
*--------------------------------------
S.FD.DIR.REF .EQ 2
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.EPB .EQ 5
S.FD.DIR.FC .EQ 6 word
*
S.FD.DIR .EQ 8
@ -389,7 +394,7 @@ 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.FD.DEV.NAME .EQ 8 C-String
*
S.FD.DEV .EQ 16
*--------------------------------------
@ -402,7 +407,7 @@ S.FD.SSOCK.READ .EQ 5
S.FD.SSOCK.WRITE .EQ 6
S.FD.SSOCK.STATUS .EQ 7
*
S.FD.SSOCK .EQ 8
S.FD.SSOCK .EQ 8
*--------------------------------------
S.FD.FIFO.S .EQ 2
S.FD.FIFO.S.Opened .EQ 1

View File

@ -20,7 +20,7 @@ ZPPtr3 .EQ ZPKERNEL+4
ZPPtr4 .EQ ZPKERNEL+6
pIOCTL .EQ ZPKERNEL+8
pDev .EQ ZPKERNEL+10
*pDev .EQ ZPKERNEL+10
pFD .EQ ZPKERNEL+12
pIOBuf .EQ ZPKERNEL+14
*--------------------------------------
@ -107,10 +107,10 @@ K.STACKTOP .EQ $03ED XFer !!! down to $3E0
*--------------------------------------
* free $0C00->$17FF = $C00 (3072) Aux
*--------------------------------------
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
FD.Table.hMem .EQ $0C00 K.Dev.MAX
FD.Table.F .EQ $0C20 K.Dev.MAX
FD.Table.PTRLO .EQ $0C40 K.Dev.MAX
FD.Table.PTRHI .EQ $0C60 K.Dev.MAX
*--------------------------------------
PS.Table.hMem .EQ $0D00 K.PS.MAX
PS.Table.PID .EQ $0D20 K.PS.MAX

View File

@ -330,6 +330,29 @@ AUTO 4,1
>PULLA
sta ]1+1
.EM
*--------------------------------------
.MA RET
.DO ]1=1
inc pStack
.FIN
.DO ]1=2
inc pStack
inc pStack
.FIN
.DO ]1=3
inc pStack
inc pStack
inc pStack
.FIN
.DO ]1>3
pha
lda #]1
:1 inc pStack
dec
bne :1
pla
.FIN
.EM
*--------------------------------------
* General WORD Manipulation Macros
*--------------------------------------

View File

@ -345,10 +345,10 @@ K.InsDrv >STYA BIN.R.CS.Start
ldx DevMgr.DevCnt
lda DevMgr.Free
sta Dev.Table,x
sta FD.Table.PTRLO,x
inx
lda DevMgr.Free+1
sta Dev.Table,x
sta FD.Table.PTRHI,x
inx
stx DevMgr.DevCnt

View File

@ -14,8 +14,8 @@ K.GetDevByID cmp DevMgr.DevCnt
tax
ldy Dev.Table.PTRLO,x
lda Dev.Table.PTRHI,x
ldy FD.Table.PTRLO,x
lda FD.Table.PTRHI,x
* clc
@ -27,27 +27,27 @@ K.GetDevByID cmp DevMgr.DevCnt
* **Out:**
* CC = OK, CS = ERROR
* X = DEVID
* Y,A = DEVSLOT
* Y,A = FD
*\--------------------------------------
K.GetDevByName >STYA ZPPtr1
ldx #0
ldy Dev.Table.PTRLO,x
lda Dev.Table.PTRHI,x
.1 ldy FD.Table.PTRLO,x
lda FD.Table.PTRHI,x
>STYA ZPPtr2
lda (ZPPtr2)
lda ZPPtr2
clc
adc #S.FD.DEV.NAME
sta ZPPtr3
ldy #1
lda (ZPPtr2)
lda ZPPtr2+1
adc #0
sta ZPPtr3+1
.1 ldy #$ff
ldy #$ff
.2 iny
lda (ZPPtr1),y
@ -57,9 +57,7 @@ K.GetDevByName >STYA ZPPtr1
ora (ZPPtr3),y Both char are 0 ?
bne .2 no....loop
lda ZPPtr3
and #$F0
tay
ldy ZPPtr2
lda ZPPtr3+1
clc
rts
@ -70,7 +68,7 @@ K.GetDevByName >STYA ZPPtr1
K.GetDev.NODEV lda #MLI.E.NODEV
sec
rts
K.GetDev.9 rts
*/--------------------------------------
* # GetDevStatus
* **In:**
@ -80,41 +78,11 @@ K.GetDev.NODEV lda #MLI.E.NODEV
*\--------------------------------------
K.GetDevStatus ldx #IOCTL.STATUS
jsr K.GetDevByID
bcs K.IOCTL.9
bcs K.GetDev.9
>STYA pDev
>STYA pFD
jmp (pDev)
*/--------------------------------------
* # IOCTL
* ## C
* `int ioctl(int fd, unsigned long request, ...);`
* ## ASM
* **In:**
* `PUSHWI param`
* `lda #request`
* `ldy fd`
* `>SYSCALL IOCTL`
* **Out:**
* Y,A = ...
*\--------------------------------------
K.IOCTL tax op
>PULLB .1+1 param LO
>PULLB .2+1 param HI
tya id
jsr K.GetDevByID
bcs K.IOCTL.9
>STYA pDev
.1 ldy #$ff SELF MODIFIED
.2 lda #$ff SELF MODIFIED
jmp (pDev) x = op
K.IOCTL.9 rts
jmp (pFD)
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.DEV

View File

@ -105,13 +105,13 @@ DRV.BLK txa
sta DRV.BLK.PARAMS CMD
ldy #S.FD.DEV.DEVID Drive 1, or 2
lda (pDev),y
lda (pFD),y
dec O or 1
lsr in Carry
php
ldy #S.FD.DEV.BUSID
lda (pDev),y
lda (pFD),y
asl
asl
asl

View File

@ -12,9 +12,67 @@ Kernel.Init2 sei
sta CLRALTZP Make sure MAIN ZP is enabled for X.PRINT.F
ldx #0
ldy #0
.2 lda SYSSCREEN.TOP,y
beq .3
cmp #$40
bcc .10
cmp #$5F
bcs .10
and #$3F
.10 sta SETWRITEAUX
sta SYS.BASL0,x
sta CLRWRITEAUX
iny
lda SYSSCREEN.TOP,y
beq .5
cmp #$40
bcc .11
cmp #$5F
bcs .11
and #$3F
.11 sta SYS.BASL0,x
iny
inx
bra .2
.3 lda #$20
.4 sta SETWRITEAUX
sta SYS.BASL0,x
sta CLRWRITEAUX
.5 lda #$20
sta SYS.BASL0,x
inx
cpx #40
bne .4
>LDAXI MSG.Init2
jsr PrintFAX
sta CLRALTZP
ldx #Kernel.ZP.S-1
.1 lda Kernel.ZP,x
sta CHARGET,x
dex
bpl .1
sta CLRALTZP
>LDAXI MSG.MAIN
jsr PrintFAX
@ -123,31 +181,15 @@ Kernel.Init2 sei
Kernel.Init3 sta SETALTZP
bit RRAMWRAMBNK1
bit RRAMWRAMBNK1
ldx #Kernel.ZP.S-1
.1 lda Kernel.ZP,x
sta CHARGET,x
dex
bpl .1
lda #$ff Make sure we are in Kernel Mode during setup
sta IRQ.InKernel
>LDAXI MSG.Init3
jsr PrintFAX
>DEBUG
jsr MemMgrInit
>LDYAI FD.NULL
jsr DevMgrInit.AddCDev
>LDYAI FD.SYS
jsr DevMgrInit.AddCDev
jsr PS0Init
bcs *
>LDYAI MSG.Init3
>SYSCALL PrintF
jsr DevMgrInit
bcs *
@ -163,6 +205,8 @@ Kernel.Init3 sta SETALTZP
jsr TskMgrInit
bcs *
jsr PS0Init
ldy #S.PS.hPREFIX
lda (pPs),y
>SYSCALL GetMemPtr
@ -190,7 +234,6 @@ Kernel.Init3 sta SETALTZP
>DEBUGOA
>DEBUG
jmp CORE.Run
.9 >PUSHA
@ -198,27 +241,6 @@ Kernel.Init3 sta SETALTZP
>SYSCALL PrintF
bra * No need to discard Expanded CMDLINE
*--------------------------------------
* Modified CHARGET/CHARGOT for ROM CALL
* CHRGET .EQ $B1 - C8
*--------------------------------------
Kernel.ZP .PH $B1
CHARGET inc TXTPTR
bne CHARGOT
inc TXTPTR+1
CHARGOT lda $ffff
beq IsDigit.9
IsDigit cmp #'0'
bcc IsDigit.9
cmp #'9'+1
rts
IsDigit.9 sec
rts
.EP
Kernel.ZP.S .EQ *-Kernel.ZP
*--------------------------------------
Kernel.Move >STYA ZPPtr3
ldy #0
@ -435,14 +457,6 @@ DetectZ80 ldx #Z80Code.Size
clc
.9 rts
*--------------------------------------
Z80Code.Start .HS 31FF00 START: LD SP,000FFH Init Stack
.HS 3EFF LD A,0FFH Set Flag
.HS 320D00 LD (FLAG),A
.HS 3200E1 LD (0E100H),A Back to 6502
.HS 18F3 JR START Loop
.HS 00 FLAG: .DB 0
Z80Code.Size .EQ *-Z80Code.Start
*--------------------------------------
MemMgrInit >LDYAI Mem.MHiMem
>STYA Mem.HiMem
>STYA Mem.Free
@ -463,76 +477,6 @@ MemMgrInit >LDYAI Mem.MHiMem
rts
*--------------------------------------
PS0Init ldx #0
ldy #0
.2 lda DevMgr.SYS.TITLE,y
beq .3
cmp #$40
bcc .10
cmp #$5F
bcs .10
and #$3F
.10 sta SETWRITEAUX
sta SYS.BASL0,x
sta CLRWRITEAUX
iny
lda DevMgr.SYS.TITLE,y
beq .5
cmp #$40
bcc .11
cmp #$5F
bcs .11
and #$3F
.11 sta SYS.BASL0,x
iny
inx
bra .2
.3 lda #$20
.4 sta SETWRITEAUX
sta SYS.BASL0,x
sta CLRWRITEAUX
.5 lda #$20
sta SYS.BASL0,x
inx
cpx #40
bne .4
>LDYAI CORE.S.PS0 Select Process 0 (Kernel)
>STYA pPs
>LDYAI K.STACKTOP
>STYA pStack
lda #DEVID.SYS
ldy #S.PS.hStdIn
sta (pPs),y
sta CORE.S.PS0+S.PS.hStdIn
iny #S.PS.hStdOut
sta (pPs),y
sta CORE.S.PS0+S.PS.hStdOut
iny #S.PS.hStdErr
sta (pPs),y
sta CORE.S.PS0+S.PS.hStdErr
clc
.9 rts
*--------------------------------------
DevMgr.SYS.TITLE .AZ "A2osX System Screen"
*--------------------------------------
* Setup AuxLC $FFFE->Kernel IRQ Handler
* if irq not handled, jmp (S.IrqMgrOldFFFE)
*--------------------------------------
@ -658,9 +602,6 @@ IrqMgrInit.TClock
clc
rts
TClock.SIG .HS 0878282c58ff700538b00118b8087848
.HS 8a489848adffcf201ac86868ba8df807
*--------------------------------------
IrqMgrInit.Mouse
stz ZPPtr1 Try finding a Mouse Card...
@ -744,9 +685,6 @@ IrqMgrInit.Mouse
ldy IRQ.VBL.n0
.11 jmp $ffff SELF MODIFIED
Mouse.OFS .HS 05070B0CFB
Mouse.SIG .HS 38180120D6
*--------------------------------------
IrqMgrInit.HZ2Tick
ldx #50
@ -765,6 +703,12 @@ IrqMgrInit.HZ2Tick
DevMgrInit >LDYAI MSG.DEV
>SYSCALL PrintF
>LDYAI FD.NULL
jsr DevMgrInit.AddCDev
>LDYAI FD.SYS
jsr DevMgrInit.AddCDev
lda DEVCNT
sta DevMgrInit.DEVCNT
@ -924,13 +868,14 @@ DevMgrInit.AddCDev
phx
ldx DevMgr.DevCnt
sta Dev.Table.PTRHI,x
sta FD.Table.PTRHI,x
tya
sta Dev.Table.PTRLO,x
sta FD.Table.PTRLO,x
pla
sta Dev.Table.hMem,x
.10+1 lda #$ff SELF MODIFIED
sta Dev.Table.F,x
sta FD.Table.hMem,x
.10 lda #$ff SELF MODIFIED
sta FD.Table.F,x
ldx #S.FD.DEV-1
@ -950,44 +895,6 @@ DevMgrInit.AddCDev
sec
rts
*--------------------------------------
FD.NULL .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #DEVID.NULL
.DA DRV.NULL
.DA 0 ROMPTR
.AZ "NULL" NAME
.HS 000000
*--------------------------------------
FD.SYS .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #DEVID.SYS
.DA DRV.SYS
.DA 0 ROMPTR
.AZ "SYS" NAME
.HS 00000000
*--------------------------------------
FD.BDEV .DA #S.FD.T.BDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.BS 2 DRVPTR
.BS 2 ROMPTR
.AZ "S1D1" NAME
.HS 000000
*--------------------------------------
SmartPort.OFS .HS 010305
SmartPort.SIG .HS 200003
*--------------------------------------
SP.DEV.STATUS .DA #3
SP.DEV.STATUS.DEVID
.BS 1
.DA SP.DEV.STATUS.DATA
.DA S.IOCTL.STATCODE.GETDIB
SP.DEV.STATUS.DATA
.BS S.DSTAT
*--------------------------------------
EvtMgrInit >LDYAI MSG.EVT
>SYSCALL printf
lda #$A5
@ -1060,7 +967,67 @@ TskMgrInit >LDYAI MSG.TSK
>SYSCALL PutEnv
.9 rts
*--------------------------------------
MSG.Init2 .AZ "A2osX[Stage2]:Init\nInstalling KERNEL...\n"
PS0Init >LDYAI CORE.S.PS0 Select Process 0 (Kernel)
>STYA pPs
>LDYAI K.STACKTOP
>STYA pStack
>PUSHBI 0
>LDYAI DEV.SYS
>SYSCALL open
ldy #S.PS.hStdIn
sta (pPs),y
sta CORE.S.PS0+S.PS.hStdIn
iny #S.PS.hStdOut
sta (pPs),y
sta CORE.S.PS0+S.PS.hStdOut
iny #S.PS.hStdErr
sta (pPs),y
sta CORE.S.PS0+S.PS.hStdErr
clc
.9 rts
*--------------------------------------
* Modified CHARGET/CHARGOT for ROM CALL
* CHRGET .EQ $B1 - C8
*--------------------------------------
Kernel.ZP .PH $B1
CHARGET inc TXTPTR
bne CHARGOT
inc TXTPTR+1
CHARGOT lda $ffff
beq IsDigit.9
IsDigit cmp #'0'
bcc IsDigit.9
cmp #'9'+1
rts
IsDigit.9 sec
rts
.EP
Kernel.ZP.S .EQ *-Kernel.ZP
*--------------------------------------
Z80Code.Start .HS 31FF00 START: LD SP,000FFH Init Stack
.HS 3EFF LD A,0FFH Set Flag
.HS 320D00 LD (FLAG),A
.HS 3200E1 LD (0E100H),A Back to 6502
.HS 18F3 JR START Loop
.HS 00 FLAG: .DB 0
Z80Code.Size .EQ *-Z80Code.Start
*--------------------------------------
Mouse.OFS .HS 05070B0CFB
Mouse.SIG .HS 38180120D6
*--------------------------------------
TClock.SIG .HS 0878282c58ff700538b00118b8087848
.HS 8a489848adffcf201ac86868ba8df807
*--------------------------------------
SYSSCREEN.TOP .AZ "A2osX System Screen"
MSG.Init2 .AZ "A2osX[Stage2]:Init\n"
MSG.ZP .AZ "Installing KERNEL...\n - $0000 ZP...\n"
MSG.MAIN .AZ " - $1100 Main...\n"
MSG.AUX .AZ " - $0C00 Aux...\n"
MSG.GP .AZ " - $BD00 Global Page...\n"
@ -1106,7 +1073,7 @@ MSG.KCREAD .AZ "Reading Kernel Config File..."
MSG.KCREAD.OK .AZ "OK\n"
MSG.KCREAD.KO .AZ "\nError While Reading Kernel Config File, Using Default.\n"
*--------------------------------------
DEV.SYS .AZ "SYS"
DEV.SYS .AZ "/DEV/SYS"
I.ENV.A2osX .AZ "A2OSX"
I.ENV.PATH .AZ "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
I.ENV.LIB .AZ "LIB=${A2OSX}LIB/"
@ -1128,6 +1095,44 @@ MLIREAD00 .DA #4
MLICLOSE00 .DA #1
.BS 1
*--------------------------------------
FD.NULL .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #DEVID.NULL
.DA DRV.NULL
.DA 0 ROMPTR
.AZ "NULL" NAME
.HS 000000
*--------------------------------------
FD.SYS .DA #S.FD.T.CDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #DEVID.SYS
.DA DRV.SYS
.DA 0 ROMPTR
.AZ "SYS" NAME
.HS 00000000
*--------------------------------------
FD.BDEV .DA #S.FD.T.BDEV
.DA #0 HANDLER
.DA #0 BUSID
.DA #0 DEVID
.BS 2 DRVPTR
.BS 2 ROMPTR
.AZ "S1D1" NAME
.HS 000000
*--------------------------------------
SmartPort.OFS .HS 010305
SmartPort.SIG .HS 200003
*--------------------------------------
SP.DEV.STATUS .DA #3
SP.DEV.STATUS.DEVID
.BS 1
.DA SP.DEV.STATUS.DATA
.DA S.IOCTL.STATCODE.GETDIB
SP.DEV.STATUS.DATA
.BS S.DSTAT
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.INIT
LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -1,25 +1,89 @@
NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*--------------------------------------
* int open(const char *pathname, int flags);
*--------------------------------------
IO.OPEN jsr IO.SELECT
*/--------------------------------------
* # open
* ## C
* `int open(const char *pathname, int flags);`
* ## ASM
* **In:**
* `>PUSHB flags`
* `>LDYA pathname`
* `>SYSCALL open`
* **Out:**
* A = hFD
* note : if file is created on ProDOS : T=TXT,X=$0000
*\--------------------------------------
K.Open jsr PFT.CheckPathYA check if not /mnt
K.Open.I jsr IO.SetMLIPathYA local pathname...
ldx #5 /DEV/
cpx K.MLI.PATH
bcc K.Open.REG
.1 lda K.MLI.PATH,x
cmp IO.DEVDIR,x
bne K.Open.REG
dex
bne .1
K.Open.DEV ldy #K.MLI.PATH+5 skip /DEV/
lda /K.MLI.PATH+5
jsr K.GetDevByName
bcs .9
>STYA pFD
.9 >RET 1
K.Open.REG >LDYAI K.MLI.PATH
>STYA K.MLI.PARAMS+1
sta K.S.IOCTL
*--------------------------------------
* int close(int fd);
*--------------------------------------
IO.CLOSE
K.Close jsr K.GetMemPtr
>STYA pFD
lda (pFD) #S.FD.T
tax
jmp (.1,x)
.1 .DA IO.CLOSE.REG
.DA STDIO.IOERR DIR
.DA IO.CLOSE.CDEV
.DA STDIO.IOERR BDEV
.DA STDIO.IOERR LNK
.DA STDIO.IOERR DSOCK
.DA IO.CLOSE.SSOCK
.DA IO.CLOSE.FIFO
*--------------------------------------
IO.CLOSE.REG
*--------------------------------------
IO.CLOSE.CDEV
*--------------------------------------
IO.CLOSE.SSOCK
*--------------------------------------
IO.CLOSE.FIFO
*--------------------------------------
* int read(int fd, void *buf, size_t count);
*--------------------------------------
IO.READ
K.Read
*--------------------------------------
* int write(int fd, const void *buf, size_t count);
*--------------------------------------
IO.WRITE lda (pFD) #S.FD.T
K.Write jsr K.GetMemPtr
>STYA pFD
lda (pFD) #S.FD.T
tax
*--------------------------------------
jmp (.1,x)
.1 .DA IO.WRITE.REG
.DA STDIO.IOERR DIR
.DA IO.WRITE.CDEV
@ -90,11 +154,67 @@ IO.WRITE.FIFO ldy #S.FD.FIFO.S
.99 lda #MLI.E.EOF
sec
rts
*--------------------------------------
*/--------------------------------------
* # IOCTL
* ## C
* `int ioctl(int fd, unsigned long request, void * param );`
* ## ASM
* **In:**
* `PUSHWI param`
* `lda #request`
* `ldy fd`
* `>SYSCALL IOCTL`
* **Out:**
* Y,A = ...
*\--------------------------------------
K.IOCTL tax op
>PULLB .1+1 param LO
>PULLB .2+1 param HI
tya id
jsr K.GetDevByID
bcs K.IOCTL.9
>STYA pFD
.1 ldy #$ff SELF MODIFIED
.2 lda #$ff SELF MODIFIED
jmp (pFD) x = op
K.IOCTL.9 rts
*/--------------------------------------
* # pipe
* ## C
* `int pipe(int pipefd[2]);`
* ## ASM
* **In:**
*\--------------------------------------
IO.SELECT jsr K.GetMemPtr
>STYA pFD
rts
*--------------------------------------
IO.PullMLIPath >PULLYA
IO.SetMLIPathYA >STYA .1+1
ldx #0
.1 lda $ffff,x Self Modified
beq .8
inx
sta K.MLI.PATH,x
cpx #MLI.MAXPATH
bne .1
.8 stx K.MLI.PATH
inx
stz K.MLI.PATH,x
rts
*--------------------------------------
IO.DEVDIR >PSTR "/DEV/"
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.IO
LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -35,7 +35,7 @@ K.IrqHAuxLC cld
lda RDREADAUX
pha
sta CLRREADAUX Make sure we can access Dev.Table
sta CLRREADAUX Make sure we can access FD.Table
lda RDWRITEAUX
pha
@ -190,13 +190,13 @@ K.IrqH.Switch inc IRQ.Tick
*--------------------------------------
K.IrqH.DEV ldx #0
.1 lda Dev.Table.F,x
.1 lda FD.Table.F,x
and #S.DSTAT.S.IRQ
beq .2
lda Dev.Table.PTRLO,x
lda FD.Table.PTRLO,x
sta $fe
lda Dev.Table.PTRHI,x
lda FD.Table.PTRHI,x
sta $ff
ldy #S.FD.DEV.DRVPTR

View File

@ -18,11 +18,11 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.OpenDir $10
.DA K.ReadDir
.DA K.CloseDir
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA K.Open
.DA K.Close
.DA K.Read
.DA K.Write
.DA K.IOCTL
.DA K.FPutC $20
.DA K.PutChar

View File

@ -127,7 +127,7 @@ K.MkNod jsr K.GetDevByName Y,A=NAME
stx .2+1
ldy #S.FD.T
lda (pDev),y
lda (pFD),y
cmp #S.FD.T.CDEV
bne .99

View File

@ -40,7 +40,7 @@ K.PutChar.X >LDYAI K.IOBuf
>STYA K.S.IOCTL+S.IOCTL.BUFPTR
stx K.S.IOCTL+S.IOCTL.BYTECNT
stz K.S.IOCTL+S.IOCTL.BYTECNT+1
jmp IO.WRITE
jmp K.WRITE
*/--------------------------------------
* # PutS
* Write Str to StdOut, appends '\r\n'
@ -98,7 +98,7 @@ K.FPutS.I jsr IO.SELECT
.2 sty K.S.IOCTL+S.IOCTL.BYTECNT
stx K.S.IOCTL+S.IOCTL.BYTECNT+1
jmp IO.WRITE
jmp K.WRITE
*/--------------------------------------
* # PrintF/SPrintF/FPrintF
* Prints C-Style String
@ -594,10 +594,10 @@ K.GetChar ldy #S.PS.hStdIn
* A = char
*\--------------------------------------
K.GetC jsr K.GetMemPtr
>STYA pDev
>STYA pFD
ldy #S.FD.T
lda (pDev),y
lda (pFD),y
asl
tax
jmp (.1,x)
@ -614,7 +614,7 @@ K.GetC jsr K.GetMemPtr
K.GetC.REG >PUSHWI K.IOBuf
>PUSHWI 1
ldy #S.FD.REG.REF
>PUSHB (pDev),y
>PUSHB (pFD),y
jsr K.FRead
bcs .9
@ -623,23 +623,23 @@ K.GetC.REG >PUSHWI K.IOBuf
*--------------------------------------
K.GetC.CDEV ldx #IOCTL.READ
ldy #S.FD.DEV.DRVPTR
lda (pDev),y
lda (pFD),y
sta .1+1
iny
lda (pDev),y
lda (pFD),y
sta .1+2
.1 jmp $ffff
*--------------------------------------
K.GetC.SSOCK lda (pDev) #S.FD.HANDLER
K.GetC.SSOCK lda (pFD) #S.FD.HANDLER
* jsr K.GetMemPtr
* >STYA .1+1
* ldy #S.FD.SSOCK.READ
* lda (pDev),y
* lda (pFD),y
* tax Function Offset for READ
* ldy #S.FD.SSOCK.HSKT
* lda (pDev),y
* lda (pFD),y
*.1 jmp $ffff
*--------------------------------------
@ -803,6 +803,15 @@ K.SScanF.GetVAL tya Y=char count parsed
* + SYS.FOpen.A : Append
* + SYS.FOpen.T : Open/Append in Text mode
* + SYS.FOpen.X : Create if not exists
* http://man7.org/linux/man-pages/man3/fopen.3.html
* r = O_RDONLY
* w = O_WRONLY | O_CREAT | O_TRUNC
* a = O_WRONLY | O_CREAT | O_APPEND
* r+ = O_RDWR
* w+ = O_RDWR | O_CREAT | O_TRUNC
* a+ = O_RDWR | O_CREAT | O_APPEND
*
* TODO: mode="w+t=TYP,x=AUXTYPE"
* `>LDYAI filename`
* **Out:**
* CC : A = hFILE

View File

@ -5,6 +5,7 @@ AUTO 4,1
*--------------------------------------
PrintFAX sta PrintFAX.Next+1
stx PrintFAX.Next+2
pla
sta PrintFAX.99+1
pla