From be83829ab41a0ee3f011319e03649faad138f971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 11 Jul 2018 17:13:29 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/A2osX.I.txt | 39 +++-- INC/KERNEL.I.txt | 10 +- INC/MACROS.I.txt | 23 +++ SYS/KERNEL.S.BIN.txt | 4 +- SYS/KERNEL.S.DEV.txt | 60 ++----- SYS/KERNEL.S.DRV.txt | 4 +- SYS/KERNEL.S.INIT.txt | 345 ++++++++++++++++++++------------------- SYS/KERNEL.S.IO.txt | 138 +++++++++++++++- SYS/KERNEL.S.IRQ.txt | 8 +- SYS/KERNEL.S.JMP.txt | 10 +- SYS/KERNEL.S.STAT.txt | 2 +- SYS/KERNEL.S.STDIO.txt | 29 ++-- X.PRINTF.S.txt | 1 + 15 files changed, 402 insertions(+), 271 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ccc1869c840f3c4657a4fb753b1b2cf6a7759382..5fcb8f1cee3066e597de8fff72399e65ca808c1d 100644 GIT binary patch delta 15296 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 G>i+@S^E+7p diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index b4ae6af55d959ad6a047bb896da224b0214b3745..0082a7864a58b6581a20999ceb025877937437f7 100644 GIT binary patch delta 26336 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 z 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 RqPWaK&loHmf8BQH{{SaCk)i+q diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 569b9eee..9be6279f 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -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 diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index b9692cbc..855cfb31 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -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 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 30876c2a..7e82a371 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -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 *-------------------------------------- diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index afbf757f..54c14dc2 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -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 diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index c61aaa2a..fca31bd6 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -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 diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 7000be8e..59f74d85 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -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 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 61f56d67..5ed16fd9 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -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 diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 2c72c892..9406d219 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -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 diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 3b8f8ad0..d78ef263 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -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 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 62d36c9f..bbda3ef3 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -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 diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index c8dd115f..2265c2ac 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -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 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 9e823533..770f5aff 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -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 diff --git a/X.PRINTF.S.txt b/X.PRINTF.S.txt index 8094d90d..77fa8a7a 100644 --- a/X.PRINTF.S.txt +++ b/X.PRINTF.S.txt @@ -5,6 +5,7 @@ AUTO 4,1 *-------------------------------------- PrintFAX sta PrintFAX.Next+1 stx PrintFAX.Next+2 + pla sta PrintFAX.99+1 pla