From 2ee872a48b7beb2050b0dbcc70515b336b7cdcb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 5 Jul 2018 17:39:36 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes DRV/CONSOLE.DRV.S.txt | 1 + INC/A2osX.I.txt | 9 +-- INC/KERNEL.I.txt | 62 ++++++++++------- INC/MLI.ERR.I.txt | 1 + SYS/KERNEL.S.BIN.txt | 39 ++++------- SYS/KERNEL.S.CORE.txt | 2 +- SYS/KERNEL.S.DEV.txt | 12 ++-- SYS/KERNEL.S.DRV.txt | 143 +++++++++++++++++++++++++++++++++------ SYS/KERNEL.S.INIT.txt | 27 +++----- SYS/KERNEL.S.IO.txt | 2 - SYS/KERNEL.S.IRQ.txt | 52 ++++++++------ 13 files changed, 222 insertions(+), 128 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ca9c1216ebd173c268b429048511924bcdb4ba6c..cfd1a010f6de5437ef3f40310bca8115a3b9f298 100644 GIT binary patch delta 10663 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 delta 10358 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 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index f39c00d0fc87b58303e0c78050ecf4d464823014..b05bcafc4c14c567bb6ced419d1104f98c310cc0 100644 GIT binary patch delta 26228 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 R{f6Da_{4uJBi6)={vQH@^Q!;= delta 25076 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 diff --git a/DRV/CONSOLE.DRV.S.txt b/DRV/CONSOLE.DRV.S.txt index 3ddfee64..8d1325ea 100644 --- a/DRV/CONSOLE.DRV.S.txt +++ b/DRV/CONSOLE.DRV.S.txt @@ -81,6 +81,7 @@ DRV.CS.START cld .DA CLOSE .DA READ .DA WRITE + .DA A2osX.BADCALL IRQ L.DEVSTAT .DA DEVSTAT *-------------------------------------- J.CtrlChars .DA ENQ 5 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index dfe549b9..1eab4858 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -279,10 +279,7 @@ S.MSTAT .EQ 24 *-------------------------------------- * IOCTL device API *-------------------------------------- -* JMP : (A=Device) -* DRV : AUXLC entry point -* BLK : ROM Entry point Cn($Cnff) -* PRT : ROM Entry point Cn($Cnff)+3 +C.EOF .EQ 4 *-------------------------------------- DEVID.NULL .EQ 0 DEVID.SYS .EQ 2 @@ -390,8 +387,8 @@ S.NODE.DIR .EQ 8 *-------------------------------------- S.NODE.DEV.BUSID .EQ 2 S.NODE.DEV.DEVID .EQ 3 -S.NODE.DEV.DRVPTR .EQ 4 word -S.NODE.DEV.ROMPTR .EQ 6 word +S.NODE.DEV.BUSPTR .EQ 4 word +S.NODE.DEV.DRVPTR .EQ 6 word S.NODE.DEV.NAME .EQ 8 C-String * S.NODE.DEV .EQ 16 diff --git a/INC/KERNEL.I.txt b/INC/KERNEL.I.txt index ede5c6b0..5ac83d9f 100644 --- a/INC/KERNEL.I.txt +++ b/INC/KERNEL.I.txt @@ -8,35 +8,24 @@ AUTO 4,1 K.ENV.SIZE .EQ 256 K.FLT.MAX .EQ 4 K.EVT.MAX .EQ 4 -K.DEV.MAX .EQ 32 +K.NODE.MAX .EQ 128 K.PS.MAX .EQ 32 *-------------------------------------- -H.BIN.T .EQ 0 -H.BIN.T.DRV65 .EQ $4CD8 6502:cld,jmp abs -H.BIN.T.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x) -H.BIN.T.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x) -*H.BIN.T.LIB80 .EQ $A28D Z80: -*H.BIN.T.BIN80 .EQ $A28D Z80: -H.BIN.JMP .EQ 2 -H.BIN.CPU .EQ 4 -H.BIN.CPU.6502 .EQ $60 -H.BIN.CPU.65C02 .EQ $61 -H.BIN.CPU.65R02 .EQ $62 -H.BIN.CPU.65816 .EQ $63 -*H.BIN.VERSION .EQ 5 -H.BIN.CODE.LEN .EQ 8 -* -H.BIN.DS.SIZE .EQ 10 -H.BIN.SS.SIZE .EQ 12 -H.BIN.ZP.SIZE .EQ 13 -* -H.BIN.EXE.REL.TABLE .EQ 16 -* -H.BIN.DRV.REL.TABLE .EQ 4 -*-------------------------------------- ZPKERNEL .EQ $0 ZPMEMMGR .EQ $10 *-------------------------------------- +ZPPtr1 .EQ ZPKERNEL +ZPPtr2 .EQ ZPKERNEL+2 +ZPPtr3 .EQ ZPKERNEL+4 +ZPPtr4 .EQ ZPKERNEL+6 + +pIOCTL .EQ ZPKERNEL+8 +pDev .EQ ZPKERNEL+10 +pNode .EQ ZPKERNEL+12 +pIOBuf .EQ ZPKERNEL+14 +*-------------------------------------- +SYS.BASL0 .EQ $800 +*-------------------------------------- * AuxMove / XFer *-------------------------------------- A1L .EQ $3C @@ -123,7 +112,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 *-------------------------------------- -Dev.Table .EQ $0E00 K.DEV.MAX*2=32*2=64b +Node.Table .EQ $0E00 K.NODE.MAX*2=128*2=256b *-------------------------------------- K.IOBuf .EQ $0F00 *-------------------------------------- @@ -149,6 +138,29 @@ Mem.XHiMem .EQ $C000 *-------------------------------------- DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC *-------------------------------------- +H.BIN.T .EQ 0 +H.BIN.T.DRV65 .EQ $4CD8 6502:cld,jmp abs +H.BIN.T.LIB65 .EQ $7CD8 6502:cld,jmp (abs,x) +H.BIN.T.BIN65 .EQ $7CD8 6502:cld,jmp (abs,x) +*H.BIN.T.LIB80 .EQ $A28D Z80: +*H.BIN.T.BIN80 .EQ $A28D Z80: +H.BIN.JMP .EQ 2 +H.BIN.CPU .EQ 4 +H.BIN.CPU.6502 .EQ $60 +H.BIN.CPU.65C02 .EQ $61 +H.BIN.CPU.65R02 .EQ $62 +H.BIN.CPU.65816 .EQ $63 +*H.BIN.VERSION .EQ 5 +H.BIN.CODE.LEN .EQ 8 +* +H.BIN.DS.SIZE .EQ 10 +H.BIN.SS.SIZE .EQ 12 +H.BIN.ZP.SIZE .EQ 13 +* +H.BIN.EXE.REL.TABLE .EQ 16 +* +H.BIN.DRV.REL.TABLE .EQ 4 +*-------------------------------------- MAN SAVE /A2OSX.BUILD/INC/KERNEL.I LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/INC/MLI.ERR.I.txt b/INC/MLI.ERR.I.txt index f00ff227..e9d9b7d8 100644 --- a/INC/MLI.ERR.I.txt +++ b/INC/MLI.ERR.I.txt @@ -8,6 +8,7 @@ AUTO 6 *$00 - No Error MLI.E.BADCALL .EQ $01 Bad Call Number *MLI.E.BADCNT .EQ $04 Bad Parameter Count +MLI.E.BADCTL .EQ $21 Invalid Status Code *MLI.E.IRQFULL .EQ $25 Interrupt Table Full MLI.E.IO .EQ $27 I/O Error MLI.E.NODEV .EQ $28 No Device Connected diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index cf561d5e..5571b091 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -80,7 +80,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" jsr BIN.Load Y,A = "/PATH/BIN" bcs .9 - >STYA pDrv + >STYA .3+1 stx .97+1 ldx #$ff @@ -96,7 +96,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" lda #0 adc .2+2 Y,A = ARGS - jsr .88 call Dev.Detect +.3 jsr $ffff SELF MODIFIED, call Dev.Detect bcs .96 jsr .96 Cleanup... @@ -111,9 +111,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" jsr K.FreeMem pla sec - rts - -.88 jmp (pDrv) + rts *-------------------------------------- BIN.FindLIB clc .HS B0 bcs @@ -317,8 +315,8 @@ K.InsDrv >STYA BIN.R.CS.Start sbc /DevMgr.HiMem bcs .9 No More Room to load Driver.... - lda DevMgr.Count - cmp #K.DEV.MAX + lda DevMgr.NodeCount + cmp #K.NODE.MAX bne .10 No Device Handle Left lda #K.E.OOH @@ -345,15 +343,15 @@ K.InsDrv >STYA BIN.R.CS.Start >LDYA BIN.R.End >STYA DevMgr.Free - ldx DevMgr.Count + ldx DevMgr.NodeCount lda DevMgr.Free - sta Dev.Table + sta Node.Table,x inx lda DevMgr.Free+1 - sta Dev.Table + sta Node.Table,x inx - stx DevMgr.Count + stx DevMgr.NodeCount clc rts @@ -547,22 +545,9 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE * Bit 2-1-0 : opcode + @ length *-------------------------------------- * 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F -BIN.65816 .HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3 - .HS B.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3 - .HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3 - .HS 1.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 - .HS 2.2.2.1.2.2.2.2.1.B.1.1.1.B.B.3 +BIN.65816 +* TO DO : Make 2 different tables +* http://axis.llx.com/~nparker/a2/opcodes.html *-------------------------------------- * 65R02 OPCODES *-------------------------------------- diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 7524ac1a..5731465b 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.Count .DA #0 +DevMgr.NodeCount .DA #0 .BS 1 *-------------------------------------- CORE.VBLState .BS 1 diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index c035fbc5..8537f795 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -9,14 +9,14 @@ AUTO 4,1 * CC = OK, CS = ERROR * Y,A = DEVSLOT *\-------------------------------------- -K.GetDevByID cmp DevMgr.Count +K.GetDevByID cmp DevMgr.NodeCount bcs K.GetDev.NODEV tax - lda Dev.Table+1,x + lda Node.Table+1,x beq K.GetDev.NODEV - ldy Dev.Table,x + ldy Node.Table,x * clc @@ -34,9 +34,9 @@ K.GetDevByName >STYA ZPPtr1 ldx #0 - lda Dev.Table+1,x + lda Node.Table+1,x beq .4 - ldy Dev.Table,x + ldy Node.Table,x >STYA ZPPtr2 @@ -68,7 +68,7 @@ K.GetDevByName >STYA ZPPtr1 .4 inx inx - cpx DevMgr.Count + cpx DevMgr.NodeCount bne .1 K.GetDev.NODEV lda #MLI.E.NODEV diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 687b8d5c..c5752c11 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -23,7 +23,7 @@ DRV.DiskII cld .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall - .DA A2osX.BadCall + .DA A2osX.BadCall IRQ *-------------------------------------- DRV.DiskII.S >LDYAI DRV.DiskII.Stat clc @@ -85,7 +85,7 @@ DRV.RamDrive cld .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall - .DA A2osX.BadCall + .DA A2osX.BadCall IRQ *-------------------------------------- DRV.RamDrive.S jsr DRV.BlkDevice.GetCmdAndDevAX jsr GO.ProDOS @@ -134,7 +134,7 @@ DRV.BlkDevice cld .DA A2osX.BadCall .DA A2osX.BadCall .DA A2osX.BadCall - .DA A2osX.BadCall + .DA A2osX.BadCall IRQ *-------------------------------------- DRV.BlkDevice.S jsr DRV.BlkDevice.GetCmdAndDev @@ -158,7 +158,7 @@ DRV.BlkDevice.RW DRV.BlkDevice.F jsr DRV.BlkDevice.GetCmdAndDev DRV.BlkDevice.Go - ldy #S.NODE.DEV.ROMPTR + ldy #S.NODE.DEV.BUSPTR lda (pDev),y sta .8+1 iny @@ -225,6 +225,7 @@ DRV.SmartPort cld .DA DRV.SmartPort.NP CLOSE .DA DRV.SmartPort.P R .DA DRV.SmartPort.P W + .DA A2osX.BADCALL IRQ *-------------------------------------- DRV.SmartPort.S jsr DRV.SmartPort.GetDev >LDYAI K.S.DSTAT @@ -242,7 +243,7 @@ DRV.SmartPort.NP jsr DRV.SmartPort.GetDev *-------------------------------------- DRV.SmartPort.Go - ldy #S.NODE.DEV.ROMPTR + ldy #S.NODE.DEV.BUSPTR lda (pDev),y sta .8+1 iny @@ -278,27 +279,68 @@ DRV.SmartPort.GetDev DRV.SmartPort.Cnt .HS 03030301030101010404 *-------------------------------------- -* NULL DEVICE +* NULL DEVICE +* - OPEN,WRITE,CLOSE always succeed. +* - READ returns EOF. *-------------------------------------- DRV.NULL cld jmp (.1,x) *-------------------------------------- -.1 .DA .2 STATUS +.1 .DA DRV.NULL.STATUS .DA A2osX.BADCALL READBLOCK .DA A2osX.BADCALL WRITEBLOCK .DA A2osX.BADCALL FORMAT .DA A2osX.BADCALL CONTROL .DA A2osX.BADCALL INIT - .DA A2osX.BADCALL OPEN - .DA A2osX.BADCALL CLOSE - .DA A2osX.BADCALL READ - .DA .8 WRITE + .DA DRV.NULL.OPEN + .DA DRV.NULL.CLOSE + .DA DRV.NULL.READ + .DA DRV.NULL.WRITE + .DA A2osX.BADCALL IRQ *-------------------------------------- -.2 >LDYAI .3 -.8 clc +DRV.NULL.STATUS >STYA pIOCTL + + ldy #S.IOCTL.STATCODE + lda (pIOCTL),y + beq .1 + + cmp #S.IOCTL.STATCODE.GETDIB + bne .9 + + ldx #15 + .HS 2C bit abs +.1 ldx #3 + + ldy #S.IOCTL.BUFPTR + lda (pIOCTL),y + sta .3+1 + iny + lda (pIOCTL),y + sta .3+2 + +.2 lda DRV.NULL.DSTAT,x +.3 sta $ffff,x SELF MODIFIED + dex + bpl .2 + + clc + rts + +.9 lda #MLI.E.BADCTL + sec + rts + +DRV.NULL.READ >STYA pIOCTL + + ldx #C.EOF + jmp DRV.READ.X + +DRV.NULL.OPEN +DRV.NULL.WRITE +DRV.NULL.CLOSE clc rts *-------------------------------------- -.3 .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ +DRV.NULL.DSTAT .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ+S.DSTAT.S.OPENED .DA #0,#0,#0 >PSTR "NULL DEVICE" .BS 5 @@ -316,23 +358,24 @@ DRV.SYS cld .DA A2osX.BADCALL FORMAT .DA DRV.SYS.Control .DA A2osX.BADCALL INIT - .DA DRV.SYS.Open - .DA A2osX.BADCALL CLOSE + .DA DRV.SYS.OPEN + .DA DRV.SYS.CLOSE .DA DRV.SYS.Read .DA DRV.SYS.Write + .DA A2osX.BADCALL IRQ *-------------------------------------- .2 >LDYAI .3 clc rts *-------------------------------------- -.3 .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ +.3 .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ+S.DSTAT.S.OPENED .DA #0,#0,#0 >PSTR "A2osX SYS Screen" .DA #S.DSTAT.T.CHAR .DA #0 .DA KVER *-------------------------------------- -DRV.SYS.Open lda #1 +DRV.SYS.Open lda #DEVID.SYS sta A2osX.SCRNDEVS+1 jsr DRV.SYS.Home *-------------------------------------- @@ -343,10 +386,13 @@ DRV.SYS.Control sta SETTEXT sta SETPAGE2 lda #2 sta A2osX.ASCREEN +DRV.SYS.CLOSE clc rts *-------------------------------------- -DRV.SYS.Read lda A2osX.ASCREEN +DRV.SYS.Read >STYA pIOCTL + + lda A2osX.ASCREEN cmp #2 is SYS active? bne .9 @@ -358,14 +404,49 @@ DRV.SYS.Read lda A2osX.ASCREEN and #$7F - clc - rts + tax + jmp DRV.READ.X .9 lda #0 Error = no event sec rts *-------------------------------------- -DRV.SYS.Write phx +DRV.SYS.WRITE >STYA pIOCTL + + ldy #S.IOCTL.BUFPTR + lda (pIOCTL),y + + sta ZPDRV+4 + iny + lda (pIOCTL),y + sta ZPDRV+5 + + ldy #S.IOCTL.BYTECNT + lda (pIOCTL),y + eor #$ff + tax + iny + lda (pIOCTL),y + eor #$ff + tay + +.2 inx + bne .3 + iny + bne .3 + clc + rts + +.3 lda (ZPDRV) + inc ZPDRV+4 + bne .4 + inc ZPDRV+5 + +.4 jsr DRV.SYS.COUT + +.5 bra .2 +*-------------------------------------- +DRV.SYS.COUT phx phy cmp #' ' bcs .7 @@ -537,6 +618,24 @@ DRV.SYS.CV .BS 1 DRV.SYS.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0 DRV.SYS.BASEH .HS 08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B.08.08.09.09.0A.0A.0B.0B *-------------------------------------- +DRV.READ.X ldy #S.IOCTL.BYTECNT + lda #1 + sta (pIOCTL),y + iny + dec + sta (pIOCTL),y + + ldy #S.IOCTL.BUFPTR + lda (pIOCTL),y + sta .1+1 + iny + lda (pIOCTL),y + sta .1+2 + +.1 stx $ffff SELF MODIFIED + clc + rts +*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 72459c58..3c1eadb7 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -2,17 +2,6 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 *-------------------------------------- -ZPPtr1 .EQ ZPKERNEL -ZPPtr2 .EQ ZPKERNEL+2 -ZPPtr3 .EQ ZPKERNEL+4 -ZPPtr4 .EQ ZPKERNEL+6 -pDrv .EQ ZPKERNEL+8 -pDev .EQ ZPKERNEL+10 -pNode .EQ ZPKERNEL+12 -pIOBuf .EQ ZPKERNEL+14 -*-------------------------------------- -SYS.BASL0 .EQ $800 -*-------------------------------------- Kernel.Init sei ldx #$FF txs @@ -809,10 +798,10 @@ DevMgrInit >LDYAI MSG.DEV sta NODE.BDEV+S.NODE.DEV.BUSID lda DEVPTRS,x - sta NODE.BDEV+S.NODE.DEV.ROMPTR + sta NODE.BDEV+S.NODE.DEV.BUSPTR lda DEVPTRS+1,x - sta NODE.BDEV+S.NODE.DEV.ROMPTR+1 + sta NODE.BDEV+S.NODE.DEV.BUSPTR+1 sta ZPPtr1+1 stz ZPPtr1 @@ -894,7 +883,7 @@ DevMgrInit.USR >LDYAI DRV.BlkDevice *-------------------------------------- DevMgrInit.BLK ldy #$ff lda (ZPPtr1),y - sta NODE.BDEV+S.NODE.DEV.ROMPTR + sta NODE.BDEV+S.NODE.DEV.BUSPTR >LDYAI DRV.BlkDevice jmp DevMgrInit.AddDev @@ -904,7 +893,7 @@ DevMgrInit.SP ldy #$ff clc adc #3 Compute smartport entry point sta .1+1 - sta NODE.BDEV+S.NODE.DEV.ROMPTR + sta NODE.BDEV+S.NODE.DEV.BUSPTR lda ZPPtr1+1 sta .1+2 @@ -935,13 +924,13 @@ DevMgrInit.AddDev >LDYAI NODE.BDEV DevMgrInit.AddNode - ldx DevMgr.Count - sta Dev.Table+1,x + ldx DevMgr.NodeCount + sta Node.Table+1,x tya - sta Dev.Table,x + sta Node.Table,x inx inx - stx DevMgr.Count + stx DevMgr.NodeCount clc rts diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 9271bb1c..aba99006 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -6,8 +6,6 @@ IO.SELECT jsr K.GetMemPtr >STYA pNode rts *-------------------------------------- -IO -*-------------------------------------- IO.WRITE lda (pNode) #S.NODE.T tax *-------------------------------------- diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 45b22e1a..8d127484 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 Node.Table lda RDWRITEAUX pha @@ -188,30 +188,44 @@ K.IrqH.Switch inc IRQ.Tick .8 clc exit with V flag set rts *-------------------------------------- -K.IrqH.DEV >LDYAI Dev.Table - >STYA $fe - - ldx DevMgr.Count +K.IrqH.DEV ldx #0 -.1 ldy #S.DEV.S - lda ($fe),y - and #S.DEV.S.IRQ +.1 lda Node.Table+1,x beq .2 - phx - ldx #DEVMGR.IRQ - jsr .88 + sta $ff + lda Node.Table,x + sta $fe + + ldy #S.NODE.DEV.DRVPTR + lda ($fe),y + pha + + 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 + +.10 jsr $ffff SELF MODIFIED + plx bcc .8 CC, IRQ cleared by device -.2 lda $fe - clc - adc #S.DEV - sta $fe - bcc .3 - inc $ff +.2 inx + inx -.3 dex +.3 cpx DevMgr.NodeCount bne .1 sec @@ -219,8 +233,6 @@ K.IrqH.DEV >LDYAI Dev.Table .8 clv clear V (no task switching) rts *-------------------------------------- -.88 jmp ($fe) -*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.IRQ LOAD /A2OSX.SRC/SYS/KERNEL.S