From 42947521536d841b785bd0b9f663cf6e671f7be6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 9 Jul 2018 17:25:38 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes INC/KERNEL.I.txt | 6 +-- SYS/KERNEL.S.BIN.txt | 12 ++--- SYS/KERNEL.S.CORE.txt | 2 +- SYS/KERNEL.S.DEV.txt | 15 +++---- SYS/KERNEL.S.DRV.txt | 39 +++++------------ SYS/KERNEL.S.INIT.txt | 92 ++++++++++++++++++++++----------------- SYS/KERNEL.S.IO.txt | 2 + SYS/KERNEL.S.IRQ.txt | 8 ++-- SYS/KERNEL.S.STAT.txt | 2 +- SYS/KERNEL.S.txt | 4 +- 12 files changed, 89 insertions(+), 93 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 3ffe52bbd52e15e97ca5316aa823fd08c2694cc1..ccc1869c840f3c4657a4fb753b1b2cf6a7759382 100644 GIT binary patch delta 3405 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 W@@77vnO8LP%4S~G%&R?oqVNBT;g>T2 delta 3299 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 F{{iJ%KUn|( delta 19195 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 3FF : IRQ Vector *-------------------------------------- K.S.STAT .EQ $0300 S.STAT for internal kernel operations -K.S.DSTAT .EQ $0340 S.DSTAT=25 or higher depends on dev type +*K.S.DSTAT .EQ $0340 S.DSTAT=25 or higher depends on dev type K.S.IOCTL .EQ $0360 9 bytes K.MLI.PATH .EQ $0369 64+1 K.MLI.PARAMS .EQ $03AA Main, 18 bytes min for GetFileInfo (ATLK needs MORE!!!...32 max for now) @@ -117,7 +117,7 @@ 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 *-------------------------------------- -Node.Table .EQ $0E00 K.NODE.MAX*2=128*2=256b +Dev.Table .EQ $0E00 K.Dev.MAX*2=32*2=64b *-------------------------------------- K.IOBuf .EQ $0F00 *-------------------------------------- diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 5571b091..afbf757f 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -315,8 +315,8 @@ K.InsDrv >STYA BIN.R.CS.Start sbc /DevMgr.HiMem bcs .9 No More Room to load Driver.... - lda DevMgr.NodeCount - cmp #K.NODE.MAX + lda DevMgr.DevCnt + cmp #K.DEV.MAX bne .10 No Device Handle Left lda #K.E.OOH @@ -343,15 +343,15 @@ K.InsDrv >STYA BIN.R.CS.Start >LDYA BIN.R.End >STYA DevMgr.Free - ldx DevMgr.NodeCount + ldx DevMgr.DevCnt lda DevMgr.Free - sta Node.Table,x + sta Dev.Table,x inx lda DevMgr.Free+1 - sta Node.Table,x + sta Dev.Table,x inx - stx DevMgr.NodeCount + stx DevMgr.DevCnt clc rts diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 5731465b..197fff33 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -525,7 +525,7 @@ CORE.PSResume sei DevMgr.Stat .DA DevMgr.FreeMem DevMgr.Free .DA DevMgr.FreeMem .DA DevMgr.HiMem -DevMgr.NodeCount .DA #0 +DevMgr.DevCnt .DA #0 .BS 1 *-------------------------------------- CORE.VBLState .BS 1 diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 8537f795..954511d2 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -9,14 +9,13 @@ AUTO 4,1 * CC = OK, CS = ERROR * Y,A = DEVSLOT *\-------------------------------------- -K.GetDevByID cmp DevMgr.NodeCount +K.GetDevByID cmp DevMgr.DevCnt bcs K.GetDev.NODEV tax - lda Node.Table+1,x - beq K.GetDev.NODEV - ldy Node.Table,x + lda Dev.Table,x + jmp K.GetMemPtr * clc @@ -34,9 +33,8 @@ K.GetDevByName >STYA ZPPtr1 ldx #0 - lda Node.Table+1,x - beq .4 - ldy Node.Table,x + ldy Dev.Table,x + jsr K.GetMemPtr >STYA ZPPtr2 @@ -67,8 +65,7 @@ K.GetDevByName >STYA ZPPtr1 rts .4 inx - inx - cpx DevMgr.NodeCount + cpx DevMgr.DevCnt bne .1 K.GetDev.NODEV lda #MLI.E.NODEV diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 8d8074ff..163309c2 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -7,19 +7,14 @@ AUTO 4,1 * Y,A = PTR to S.IOCTL *-------------------------------------- DRV.DiskII cld + cpx #IOCTL.FORMAT + bcs .9 >STYA pIOCTL jmp (.1,x) .1 .DA DRV.DiskII.STATUS .DA DRV.BLK READ .DA DRV.BLK WRITE - .DA A2osX.BadCall FORMAT - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall IRQ +.9 jmp A2osX.BadCall *-------------------------------------- DRV.DiskII.STATUS >LDYAI DRV.DiskII.DSTAT @@ -40,19 +35,15 @@ DRV.DiskII.DSTAT * Y,A = PTR to S.IOCTL *-------------------------------------- DRV.RamDrive cld + cpx #IOCTL.CONTROL + bcs .9 >STYA pIOCTL jmp (.1,x) .1 .DA DRV.RamDrive.STATUS .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall IRQ +.9 jmp A2osX.BadCall *-------------------------------------- DRV.RamDrive.STATUS jsr DRV.Blk @@ -78,19 +69,15 @@ DRV.RamDrive.DSTAT * Y,A = PTR to S.IOCTL *-------------------------------------- DRV.BlkDevice cld + cpx #IOCTL.CONTROL + bcs .9 >STYA pIOCTL jmp (.1,x) .1 .DA DRV.BlkDevice.STATUS .DA DRV.BLK READ .DA DRV.BLK WRITE .DA DRV.BLK FORMAT - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall - .DA A2osX.BadCall IRQ +.9 jmp A2osX.BadCall *-------------------------------------- DRV.BlkDevice.STATUS jsr DRV.Blk @@ -273,9 +260,7 @@ DRV.SYS.CLOSE clc rts *-------------------------------------- -DRV.SYS.Read >STYA pIOCTL - - lda A2osX.ASCREEN +DRV.SYS.Read lda A2osX.ASCREEN cmp #2 is SYS active? bne .9 @@ -294,9 +279,7 @@ DRV.SYS.Read >STYA pIOCTL sec rts *-------------------------------------- -DRV.SYS.WRITE >STYA pIOCTL - - ldy #S.IOCTL.BUFPTR +DRV.SYS.WRITE ldy #S.IOCTL.BUFPTR lda (pIOCTL),y sta ZPDRV+4 diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 3c1eadb7..c73df61a 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -135,8 +135,16 @@ Kernel.Init3 sta SETALTZP sta IRQ.InKernel jsr MemMgrInit + + >LDYAI NODE.NULL + jsr DevMgrInit.AddCDev + + >LDYAI NODE.SYS + jsr DevMgrInit.AddCDev + jsr PS0Init bcs * + >LDYAI MSG.Init3 >SYSCALL PrintF @@ -182,6 +190,7 @@ Kernel.Init3 sta SETALTZP >DEBUGOA + >DEBUG jmp CORE.Run .9 >PUSHA @@ -503,12 +512,6 @@ PS0Init ldx #0 >LDYAI K.STACKTOP >STYA pStack - >LDYAI NODE.NULL - jsr DevMgrInit.AddNode - - >LDYAI NODE.SYS - jsr DevMgrInit.AddNode - lda #DEVID.SYS ldy #S.PS.hStdIn @@ -526,24 +529,6 @@ PS0Init ldx #0 *-------------------------------------- DevMgr.SYS.TITLE .AZ "A2osX System Screen" *-------------------------------------- -NODE.NULL .DA #S.NODE.T.CDEV - .DA #0 HANDLER - .DA #0 BUSID - .DA #DEVID.NULL - .DA DRV.NULL - .DA 0 ROMPTR - .AZ "NULL" NAME - .HS 000000 -*-------------------------------------- -NODE.SYS .DA #S.NODE.T.CDEV - .DA #0 HANDLER - .DA #0 BUSID - .DA #DEVID.SYS - .DA DRV.SYS - .DA 0 ROMPTR - .AZ "SYS" NAME - .HS 00000000 -*-------------------------------------- * Setup AuxLC $FFFE->Kernel IRQ Handler * if irq not handled, jmp (S.IrqMgrOldFFFE) *-------------------------------------- @@ -873,20 +858,20 @@ DevMgrInit.DEVCNT .BS 1 *-------------------------------------- DevMgrInit.DII >LDYAI DRV.DiskII - jmp DevMgrInit.AddDev + jmp DevMgrInit.AddBDev *-------------------------------------- DevMgrInit.RAM >LDYAI DRV.RamDrive - jmp DevMgrInit.AddDev + jmp DevMgrInit.AddBDev *-------------------------------------- DevMgrInit.USR >LDYAI DRV.BlkDevice - jmp DevMgrInit.AddDev + jmp DevMgrInit.AddBDev *-------------------------------------- DevMgrInit.BLK ldy #$ff lda (ZPPtr1),y sta NODE.BDEV+S.NODE.DEV.BUSPTR >LDYAI DRV.BlkDevice - jmp DevMgrInit.AddDev + jmp DevMgrInit.AddBDev *-------------------------------------- DevMgrInit.SP ldy #$ff lda (ZPPtr1),y @@ -906,11 +891,11 @@ DevMgrInit.SP ldy #$ff bcs .9 >LDYAI DRV.SmartPort - jsr DevMgrInit.AddDev + jsr DevMgrInit.AddBDev .9 rts *-------------------------------------- -DevMgrInit.AddDev +DevMgrInit.AddBDev >STYA NODE.BDEV+S.NODE.DEV.DRVPTR lda NODE.BDEV+S.NODE.DEV.BUSID @@ -921,16 +906,27 @@ DevMgrInit.AddDev ora #$30 sta NODE.BDEV+S.NODE.DEV.NAME+3 SxDn - >LDYAI NODE.BDEV + >LDYAI DEV.BDEV -DevMgrInit.AddNode - ldx DevMgr.NodeCount - sta Node.Table+1,x - tya - sta Node.Table,x +DevMgrInit.AddCDev + >STYA .1+1 + jsr K.GetMem + >STYA .2+1 + + txa + + ldx DevMgr.DevCnt + sta Dev.Table,x inx - inx - stx DevMgr.NodeCount + stx DevMgr.DevCnt + + ldx #S.NODE.DEV-1 + +.1 lda $ffff,x SELF MODIFIED +.2 sta $ffff,x SELF MODIFIED + dex + bpl .1 + clc rts @@ -938,7 +934,25 @@ DevMgrInit.AddNode sec rts *-------------------------------------- -NODE.BDEV .DA #S.NODE.T.BDEV +DEV.NULL .DA #S.NODE.T.CDEV + .DA #0 HANDLER + .DA #0 BUSID + .DA #DEVID.NULL + .DA DRV.NULL + .DA 0 ROMPTR + .AZ "NULL" NAME + .HS 000000 +*-------------------------------------- +DEV.SYS .DA #S.NODE.T.CDEV + .DA #0 HANDLER + .DA #0 BUSID + .DA #DEVID.SYS + .DA DRV.SYS + .DA 0 ROMPTR + .AZ "SYS" NAME + .HS 00000000 +*-------------------------------------- +DEV.BDEV .DA #S.NODE.T.BDEV .DA #0 HANDLER .DA #0 BUSID .DA #0 DEVID diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index aba99006..4beaf605 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -2,6 +2,8 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 *-------------------------------------- +IO.OPEN +*-------------------------------------- IO.SELECT jsr K.GetMemPtr >STYA pNode rts diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 8d127484..c8f99472 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 Node.Table + sta CLRREADAUX Make sure we can access Dev.Table lda RDWRITEAUX pha @@ -190,11 +190,11 @@ K.IrqH.Switch inc IRQ.Tick *-------------------------------------- K.IrqH.DEV ldx #0 -.1 lda Node.Table+1,x +.1 lda Dev.Table+1,x beq .2 sta $ff - lda Node.Table,x + lda Dev.Table,x sta $fe ldy #S.NODE.DEV.DRVPTR @@ -225,7 +225,7 @@ K.IrqH.DEV ldx #0 .2 inx inx -.3 cpx DevMgr.NodeCount +.3 cpx DevMgr.DevCnt bne .1 sec diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 05d73931..a092f0ae 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -121,7 +121,7 @@ K.MKDir jsr PFT.CheckPathYA * CC = OK, CS = ERROR * A = hFILE *\-------------------------------------- -K.MkNod jsr K.GetDevByName Ptr1=NAME +K.MkNod jsr K.GetDevByName Y,A=NAME bcs .9 >STYA .1+1 stx .2+1 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index e07bc241..c6272bd7 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -19,7 +19,6 @@ AUTO 4,1 .INB /A2OSX.SRC/X.PRINTF.S A2osX.MAIN .PH $1100 .INB /A2OSX.SRC/SYS/KERNEL.S.CORE - .INB /A2OSX.SRC/SYS/KERNEL.S.IO .INB /A2OSX.SRC/SYS/KERNEL.S.DRV .EP A2osX.AUX .PH $0C00 @@ -37,7 +36,6 @@ A2osX.D1 .PH $D000 .INB /A2OSX.SRC/SYS/KERNEL.S.STDLIB .INB /A2OSX.SRC/SYS/KERNEL.S.PFT .INB /A2OSX.SRC/SYS/KERNEL.S.DEV - .INB /A2OSX.SRC/SYS/KERNEL.S.FIO .EP A2osX.D2 .PH $D000 .DA #RRAMWRAMBNK2 @@ -53,6 +51,8 @@ A2osX.E0 .PH $E000 .INB /A2OSX.SRC/SYS/KERNEL.S.JMP .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ .INB /A2OSX.SRC/SYS/KERNEL.S.MEM + .INB /A2OSX.SRC/SYS/KERNEL.S.IO + .INB /A2OSX.SRC/SYS/KERNEL.S.FIO DevMgr.FreeMem .EQ * .EP A2osX.E0.E .EQ *