Kernel 0.9.2

This commit is contained in:
Rémy GIBERT
2018-07-05 17:39:36 +02:00
parent c5c866a92e
commit 2ee872a48b
13 changed files with 222 additions and 128 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -81,6 +81,7 @@ DRV.CS.START cld
.DA CLOSE .DA CLOSE
.DA READ .DA READ
.DA WRITE .DA WRITE
.DA A2osX.BADCALL IRQ
L.DEVSTAT .DA DEVSTAT L.DEVSTAT .DA DEVSTAT
*-------------------------------------- *--------------------------------------
J.CtrlChars .DA ENQ 5 J.CtrlChars .DA ENQ 5

View File

@@ -279,10 +279,7 @@ S.MSTAT .EQ 24
*-------------------------------------- *--------------------------------------
* IOCTL device API * IOCTL device API
*-------------------------------------- *--------------------------------------
* JMP : (A=Device) C.EOF .EQ 4
* DRV : AUXLC entry point
* BLK : ROM Entry point Cn($Cnff)
* PRT : ROM Entry point Cn($Cnff)+3
*-------------------------------------- *--------------------------------------
DEVID.NULL .EQ 0 DEVID.NULL .EQ 0
DEVID.SYS .EQ 2 DEVID.SYS .EQ 2
@@ -390,8 +387,8 @@ S.NODE.DIR .EQ 8
*-------------------------------------- *--------------------------------------
S.NODE.DEV.BUSID .EQ 2 S.NODE.DEV.BUSID .EQ 2
S.NODE.DEV.DEVID .EQ 3 S.NODE.DEV.DEVID .EQ 3
S.NODE.DEV.DRVPTR .EQ 4 word S.NODE.DEV.BUSPTR .EQ 4 word
S.NODE.DEV.ROMPTR .EQ 6 word S.NODE.DEV.DRVPTR .EQ 6 word
S.NODE.DEV.NAME .EQ 8 C-String S.NODE.DEV.NAME .EQ 8 C-String
* *
S.NODE.DEV .EQ 16 S.NODE.DEV .EQ 16

View File

@@ -8,35 +8,24 @@ AUTO 4,1
K.ENV.SIZE .EQ 256 K.ENV.SIZE .EQ 256
K.FLT.MAX .EQ 4 K.FLT.MAX .EQ 4
K.EVT.MAX .EQ 4 K.EVT.MAX .EQ 4
K.DEV.MAX .EQ 32 K.NODE.MAX .EQ 128
K.PS.MAX .EQ 32 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 ZPKERNEL .EQ $0
ZPMEMMGR .EQ $10 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 * AuxMove / XFer
*-------------------------------------- *--------------------------------------
A1L .EQ $3C 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 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 K.IOBuf .EQ $0F00
*-------------------------------------- *--------------------------------------
@@ -149,6 +138,29 @@ Mem.XHiMem .EQ $C000
*-------------------------------------- *--------------------------------------
DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC 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 MAN
SAVE /A2OSX.BUILD/INC/KERNEL.I SAVE /A2OSX.BUILD/INC/KERNEL.I
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@@ -8,6 +8,7 @@ AUTO 6
*$00 - No Error *$00 - No Error
MLI.E.BADCALL .EQ $01 Bad Call Number MLI.E.BADCALL .EQ $01 Bad Call Number
*MLI.E.BADCNT .EQ $04 Bad Parameter Count *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.IRQFULL .EQ $25 Interrupt Table Full
MLI.E.IO .EQ $27 I/O Error MLI.E.IO .EQ $27 I/O Error
MLI.E.NODEV .EQ $28 No Device Connected MLI.E.NODEV .EQ $28 No Device Connected

View File

@@ -80,7 +80,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
jsr BIN.Load Y,A = "/PATH/BIN" jsr BIN.Load Y,A = "/PATH/BIN"
bcs .9 bcs .9
>STYA pDrv >STYA .3+1
stx .97+1 stx .97+1
ldx #$ff ldx #$ff
@@ -96,7 +96,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
lda #0 lda #0
adc .2+2 Y,A = ARGS adc .2+2 Y,A = ARGS
jsr .88 call Dev.Detect .3 jsr $ffff SELF MODIFIED, call Dev.Detect
bcs .96 bcs .96
jsr .96 Cleanup... jsr .96 Cleanup...
@@ -111,9 +111,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0"
jsr K.FreeMem jsr K.FreeMem
pla pla
sec sec
rts rts
.88 jmp (pDrv)
*-------------------------------------- *--------------------------------------
BIN.FindLIB clc BIN.FindLIB clc
.HS B0 bcs .HS B0 bcs
@@ -317,8 +315,8 @@ K.InsDrv >STYA BIN.R.CS.Start
sbc /DevMgr.HiMem sbc /DevMgr.HiMem
bcs .9 No More Room to load Driver.... bcs .9 No More Room to load Driver....
lda DevMgr.Count lda DevMgr.NodeCount
cmp #K.DEV.MAX cmp #K.NODE.MAX
bne .10 No Device Handle Left bne .10 No Device Handle Left
lda #K.E.OOH lda #K.E.OOH
@@ -345,15 +343,15 @@ K.InsDrv >STYA BIN.R.CS.Start
>LDYA BIN.R.End >LDYA BIN.R.End
>STYA DevMgr.Free >STYA DevMgr.Free
ldx DevMgr.Count ldx DevMgr.NodeCount
lda DevMgr.Free lda DevMgr.Free
sta Dev.Table sta Node.Table,x
inx inx
lda DevMgr.Free+1 lda DevMgr.Free+1
sta Dev.Table sta Node.Table,x
inx inx
stx DevMgr.Count stx DevMgr.NodeCount
clc clc
rts rts
@@ -547,22 +545,9 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE
* Bit 2-1-0 : opcode + @ length * Bit 2-1-0 : opcode + @ length
*-------------------------------------- *--------------------------------------
* 0.1.2.3.4.5.6.7.8.9.A.B.C.D.E.F * 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 BIN.65816
.HS 2.2.2.1.2.2.2.2.1.B.1.1.B.B.B.3 * TO DO : Make 2 different tables
.HS B.2.2.1.2.2.2.2.1.2.1.1.B.B.B.3 * http://axis.llx.com/~nparker/a2/opcodes.html
.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
*-------------------------------------- *--------------------------------------
* 65R02 OPCODES * 65R02 OPCODES
*-------------------------------------- *--------------------------------------

View File

@@ -525,7 +525,7 @@ CORE.PSResume sei
DevMgr.Stat .DA DevMgr.FreeMem DevMgr.Stat .DA DevMgr.FreeMem
DevMgr.Free .DA DevMgr.FreeMem DevMgr.Free .DA DevMgr.FreeMem
.DA DevMgr.HiMem .DA DevMgr.HiMem
DevMgr.Count .DA #0 DevMgr.NodeCount .DA #0
.BS 1 .BS 1
*-------------------------------------- *--------------------------------------
CORE.VBLState .BS 1 CORE.VBLState .BS 1

View File

@@ -9,14 +9,14 @@ AUTO 4,1
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* Y,A = DEVSLOT * Y,A = DEVSLOT
*\-------------------------------------- *\--------------------------------------
K.GetDevByID cmp DevMgr.Count K.GetDevByID cmp DevMgr.NodeCount
bcs K.GetDev.NODEV bcs K.GetDev.NODEV
tax tax
lda Dev.Table+1,x lda Node.Table+1,x
beq K.GetDev.NODEV beq K.GetDev.NODEV
ldy Dev.Table,x ldy Node.Table,x
* clc * clc
@@ -34,9 +34,9 @@ K.GetDevByName >STYA ZPPtr1
ldx #0 ldx #0
lda Dev.Table+1,x lda Node.Table+1,x
beq .4 beq .4
ldy Dev.Table,x ldy Node.Table,x
>STYA ZPPtr2 >STYA ZPPtr2
@@ -68,7 +68,7 @@ K.GetDevByName >STYA ZPPtr1
.4 inx .4 inx
inx inx
cpx DevMgr.Count cpx DevMgr.NodeCount
bne .1 bne .1
K.GetDev.NODEV lda #MLI.E.NODEV K.GetDev.NODEV lda #MLI.E.NODEV

View File

@@ -23,7 +23,7 @@ DRV.DiskII cld
.DA A2osX.BadCall .DA A2osX.BadCall
.DA A2osX.BadCall .DA A2osX.BadCall
.DA A2osX.BadCall .DA A2osX.BadCall
.DA A2osX.BadCall .DA A2osX.BadCall IRQ
*-------------------------------------- *--------------------------------------
DRV.DiskII.S >LDYAI DRV.DiskII.Stat DRV.DiskII.S >LDYAI DRV.DiskII.Stat
clc clc
@@ -85,7 +85,7 @@ DRV.RamDrive cld
.DA A2osX.BadCall .DA A2osX.BadCall
.DA A2osX.BadCall .DA A2osX.BadCall
.DA A2osX.BadCall .DA A2osX.BadCall
.DA A2osX.BadCall .DA A2osX.BadCall IRQ
*-------------------------------------- *--------------------------------------
DRV.RamDrive.S jsr DRV.BlkDevice.GetCmdAndDevAX DRV.RamDrive.S jsr DRV.BlkDevice.GetCmdAndDevAX
jsr GO.ProDOS 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 .DA A2osX.BadCall
.DA A2osX.BadCall .DA A2osX.BadCall IRQ
*-------------------------------------- *--------------------------------------
DRV.BlkDevice.S jsr DRV.BlkDevice.GetCmdAndDev DRV.BlkDevice.S jsr DRV.BlkDevice.GetCmdAndDev
@@ -158,7 +158,7 @@ DRV.BlkDevice.RW
DRV.BlkDevice.F jsr DRV.BlkDevice.GetCmdAndDev DRV.BlkDevice.F jsr DRV.BlkDevice.GetCmdAndDev
DRV.BlkDevice.Go DRV.BlkDevice.Go
ldy #S.NODE.DEV.ROMPTR ldy #S.NODE.DEV.BUSPTR
lda (pDev),y lda (pDev),y
sta .8+1 sta .8+1
iny iny
@@ -225,6 +225,7 @@ DRV.SmartPort cld
.DA DRV.SmartPort.NP CLOSE .DA DRV.SmartPort.NP CLOSE
.DA DRV.SmartPort.P R .DA DRV.SmartPort.P R
.DA DRV.SmartPort.P W .DA DRV.SmartPort.P W
.DA A2osX.BADCALL IRQ
*-------------------------------------- *--------------------------------------
DRV.SmartPort.S jsr DRV.SmartPort.GetDev DRV.SmartPort.S jsr DRV.SmartPort.GetDev
>LDYAI K.S.DSTAT >LDYAI K.S.DSTAT
@@ -242,7 +243,7 @@ DRV.SmartPort.NP
jsr DRV.SmartPort.GetDev jsr DRV.SmartPort.GetDev
*-------------------------------------- *--------------------------------------
DRV.SmartPort.Go DRV.SmartPort.Go
ldy #S.NODE.DEV.ROMPTR ldy #S.NODE.DEV.BUSPTR
lda (pDev),y lda (pDev),y
sta .8+1 sta .8+1
iny iny
@@ -278,27 +279,68 @@ DRV.SmartPort.GetDev
DRV.SmartPort.Cnt DRV.SmartPort.Cnt
.HS 03030301030101010404 .HS 03030301030101010404
*-------------------------------------- *--------------------------------------
* NULL DEVICE * NULL DEVICE
* - OPEN,WRITE,CLOSE always succeed.
* - READ returns EOF.
*-------------------------------------- *--------------------------------------
DRV.NULL cld DRV.NULL cld
jmp (.1,x) jmp (.1,x)
*-------------------------------------- *--------------------------------------
.1 .DA .2 STATUS .1 .DA DRV.NULL.STATUS
.DA A2osX.BADCALL READBLOCK .DA A2osX.BADCALL READBLOCK
.DA A2osX.BADCALL WRITEBLOCK .DA A2osX.BADCALL WRITEBLOCK
.DA A2osX.BADCALL FORMAT .DA A2osX.BADCALL FORMAT
.DA A2osX.BADCALL CONTROL .DA A2osX.BADCALL CONTROL
.DA A2osX.BADCALL INIT .DA A2osX.BADCALL INIT
.DA A2osX.BADCALL OPEN .DA DRV.NULL.OPEN
.DA A2osX.BADCALL CLOSE .DA DRV.NULL.CLOSE
.DA A2osX.BADCALL READ .DA DRV.NULL.READ
.DA .8 WRITE .DA DRV.NULL.WRITE
.DA A2osX.BADCALL IRQ
*-------------------------------------- *--------------------------------------
.2 >LDYAI .3 DRV.NULL.STATUS >STYA pIOCTL
.8 clc
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 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 .DA #0,#0,#0
>PSTR "NULL DEVICE" >PSTR "NULL DEVICE"
.BS 5 .BS 5
@@ -316,23 +358,24 @@ DRV.SYS cld
.DA A2osX.BADCALL FORMAT .DA A2osX.BADCALL FORMAT
.DA DRV.SYS.Control .DA DRV.SYS.Control
.DA A2osX.BADCALL INIT .DA A2osX.BADCALL INIT
.DA DRV.SYS.Open .DA DRV.SYS.OPEN
.DA A2osX.BADCALL CLOSE .DA DRV.SYS.CLOSE
.DA DRV.SYS.Read .DA DRV.SYS.Read
.DA DRV.SYS.Write .DA DRV.SYS.Write
.DA A2osX.BADCALL IRQ
*-------------------------------------- *--------------------------------------
.2 >LDYAI .3 .2 >LDYAI .3
clc clc
rts 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 .DA #0,#0,#0
>PSTR "A2osX SYS Screen" >PSTR "A2osX SYS Screen"
.DA #S.DSTAT.T.CHAR .DA #S.DSTAT.T.CHAR
.DA #0 .DA #0
.DA KVER .DA KVER
*-------------------------------------- *--------------------------------------
DRV.SYS.Open lda #1 DRV.SYS.Open lda #DEVID.SYS
sta A2osX.SCRNDEVS+1 sta A2osX.SCRNDEVS+1
jsr DRV.SYS.Home jsr DRV.SYS.Home
*-------------------------------------- *--------------------------------------
@@ -343,10 +386,13 @@ DRV.SYS.Control sta SETTEXT
sta SETPAGE2 sta SETPAGE2
lda #2 lda #2
sta A2osX.ASCREEN sta A2osX.ASCREEN
DRV.SYS.CLOSE
clc clc
rts rts
*-------------------------------------- *--------------------------------------
DRV.SYS.Read lda A2osX.ASCREEN DRV.SYS.Read >STYA pIOCTL
lda A2osX.ASCREEN
cmp #2 is SYS active? cmp #2 is SYS active?
bne .9 bne .9
@@ -358,14 +404,49 @@ DRV.SYS.Read lda A2osX.ASCREEN
and #$7F and #$7F
clc tax
rts jmp DRV.READ.X
.9 lda #0 Error = no event .9 lda #0 Error = no event
sec sec
rts 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 phy
cmp #' ' cmp #' '
bcs .7 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.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.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 MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV SAVE /A2OSX.SRC/SYS/KERNEL.S.DRV
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@@ -2,17 +2,6 @@ NEW
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BUILD
AUTO 4,1 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 Kernel.Init sei
ldx #$FF ldx #$FF
txs txs
@@ -809,10 +798,10 @@ DevMgrInit >LDYAI MSG.DEV
sta NODE.BDEV+S.NODE.DEV.BUSID sta NODE.BDEV+S.NODE.DEV.BUSID
lda DEVPTRS,x lda DEVPTRS,x
sta NODE.BDEV+S.NODE.DEV.ROMPTR sta NODE.BDEV+S.NODE.DEV.BUSPTR
lda DEVPTRS+1,x lda DEVPTRS+1,x
sta NODE.BDEV+S.NODE.DEV.ROMPTR+1 sta NODE.BDEV+S.NODE.DEV.BUSPTR+1
sta ZPPtr1+1 sta ZPPtr1+1
stz ZPPtr1 stz ZPPtr1
@@ -894,7 +883,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.ROMPTR sta NODE.BDEV+S.NODE.DEV.BUSPTR
>LDYAI DRV.BlkDevice >LDYAI DRV.BlkDevice
jmp DevMgrInit.AddDev jmp DevMgrInit.AddDev
@@ -904,7 +893,7 @@ 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.ROMPTR sta NODE.BDEV+S.NODE.DEV.BUSPTR
lda ZPPtr1+1 lda ZPPtr1+1
sta .1+2 sta .1+2
@@ -935,13 +924,13 @@ DevMgrInit.AddDev
>LDYAI NODE.BDEV >LDYAI NODE.BDEV
DevMgrInit.AddNode DevMgrInit.AddNode
ldx DevMgr.Count ldx DevMgr.NodeCount
sta Dev.Table+1,x sta Node.Table+1,x
tya tya
sta Dev.Table,x sta Node.Table,x
inx inx
inx inx
stx DevMgr.Count stx DevMgr.NodeCount
clc clc
rts rts

View File

@@ -6,8 +6,6 @@ IO.SELECT jsr K.GetMemPtr
>STYA pNode >STYA pNode
rts rts
*-------------------------------------- *--------------------------------------
IO
*--------------------------------------
IO.WRITE lda (pNode) #S.NODE.T IO.WRITE lda (pNode) #S.NODE.T
tax tax
*-------------------------------------- *--------------------------------------

View File

@@ -35,7 +35,7 @@ K.IrqHAuxLC cld
lda RDREADAUX lda RDREADAUX
pha pha
sta CLRREADAUX Make sure we can access Dev.Table sta CLRREADAUX Make sure we can access Node.Table
lda RDWRITEAUX lda RDWRITEAUX
pha pha
@@ -188,30 +188,44 @@ K.IrqH.Switch inc IRQ.Tick
.8 clc exit with V flag set .8 clc exit with V flag set
rts rts
*-------------------------------------- *--------------------------------------
K.IrqH.DEV >LDYAI Dev.Table K.IrqH.DEV ldx #0
>STYA $fe
ldx DevMgr.Count
.1 ldy #S.DEV.S .1 lda Node.Table+1,x
lda ($fe),y
and #S.DEV.S.IRQ
beq .2 beq .2
phx sta $ff
ldx #DEVMGR.IRQ lda Node.Table,x
jsr .88 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 plx
bcc .8 CC, IRQ cleared by device bcc .8 CC, IRQ cleared by device
.2 lda $fe .2 inx
clc inx
adc #S.DEV
sta $fe
bcc .3
inc $ff
.3 dex .3 cpx DevMgr.NodeCount
bne .1 bne .1
sec sec
@@ -219,8 +233,6 @@ K.IrqH.DEV >LDYAI Dev.Table
.8 clv clear V (no task switching) .8 clv clear V (no task switching)
rts rts
*-------------------------------------- *--------------------------------------
.88 jmp ($fe)
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.IRQ SAVE /A2OSX.SRC/SYS/KERNEL.S.IRQ
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S