Kernel version 0.9 : Block Device Support, added Smartport

This commit is contained in:
Rémy GIBERT 2017-03-21 17:29:15 +01:00
parent 82b83a26e8
commit 63883ea19d
9 changed files with 137 additions and 90 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -62,12 +62,12 @@ D.STACK.TOP .EQ $03F0 ...Down to $0300
*-------------------------------------- *--------------------------------------
KrnBuf256 .EQ $0C00 Main KrnBuf256 .EQ $0C00 Main
*-------------------------------------- *--------------------------------------
MLICALL.PARAMS .EQ $0D00 Main, $12 bytes min !!!! KrnOut256 .EQ $0D00 Used to return Values to User Space
BLKCALL.PARAMS .EQ $0D20 Max 6 Bytes copied to/from $42->$47 before Firmware call
PRTCALL.PARAMS .EQ $D030 Max 8 bytes for smartport cmdnum $0->$9
KrnSTAT .EQ $0D40 S.STAT = 64b
*-------------------------------------- *--------------------------------------
KrnOut256 .EQ $0E00 Used to return Values to User Space MLICALL.PARAMS .EQ $0E00 Main, $12 bytes min for GetFileInfo
K.S.STAT .EQ MLICALL.PARAMS+$12 S.STAT for internal kernel operations (DIR,FIO)
K.S.DEVSTAT .EQ K.S.STAT+64
K.S.PORTCALL .EQ K.S.DEVSTAT+9
*-------------------------------------- *--------------------------------------
*** Z80 Reserved $0F00-10FF*** *** Z80 Reserved $0F00-10FF***
*-------------------------------------- *--------------------------------------
@ -103,8 +103,6 @@ DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
A2osX.SYSCALL .EQ $BD00 A2osX.SYSCALL .EQ $BD00
A2osX.LIBCALL .EQ $BD03 A2osX.LIBCALL .EQ $BD03
A2osX.MLICALL .EQ $BD06 A2osX.MLICALL .EQ $BD06
A2osX.BLKCALL .EQ $BD09
A2osX.PRTCALL .EQ $BD0C
*-------------------------------------- *--------------------------------------
pCodeJmp .EQ $BD10 pCodeJmp .EQ $BD10
pLibJmp .EQ $BD13 pLibJmp .EQ $BD13

View File

@ -4,6 +4,72 @@ LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*-------------------------------------- *--------------------------------------
* Smartport Driver
*--------------------------------------
A2osX.PrtDrv .DA A2osX.PrtDrv.S STATUS
.DA A2osX.PrtDrv.P BR
.DA A2osX.PrtDrv.P BW
.DA A2osX.PrtDrv.NP FORMAT
.DA A2osX.PrtDrv.P CONTROL
.DA A2osX.PrtDrv.NP INIT
.DA A2osX.PrtDrv.NP OPEN
.DA A2osX.PrtDrv.NP CLOSE
.DA A2osX.PrtDrv.P R
.DA A2osX.PrtDrv.P W
*--------------------------------------
A2osX.PrtDrv.S jsr A2osX.PrtDrv.GetDev
>LDYAI K.S.DEVSTAT
>STYA K.S.PORTCALL+2
lda #3
sta K.S.PORTCALL+3
jsr A2osX.PrtDrv.Go
bcs .9
>LDYAI K.S.DEVSTAT
.9 rts
*--------------------------------------
A2osX.PrtDrv.P jsr A2osX.PrtDrv.GetParam
bra A2osX.PrtDrv.Go
A2osX.PrtDrv.NP jsr A2osX.PrtDrv.GetDev
*--------------------------------------
A2osX.PrtDrv.Go ldy #S.DEV.ROM.JMP
lda (pDev),y
sta .8+1
iny
lda (pDev),y
sta .8+2
.8 jsr $ffff
A2osX.PrtDrv.Go.Cmd
.BS 1
.DA K.S.PORTCALL
rts
*--------------------------------------
A2osX.PrtDrv.GetParam
>STYA ZPDRV Get Ptr To ParamList
jsr A2osX.Blk.GetDev
ldy #7
.1 lda (ZPDRV),y
sta K.S.PORTCALL+2,y
dey
bpl .1
rts
*--------------------------------------
A2osX.PrtDrv.GetDev
txa
asl
sta A2osX.PrtDrv.Go.Cmd
tax
lda A2osX.PrtDrv.Cnt,x
sta K.S.PORTCALL
ldy #S.DEV.DEVID
lda (pDev),y
sta K.S.PORTCALL+1
rts
A2osX.PrtDrv.Cnt
.HS 03030301030101010404
*--------------------------------------
DevMgr.NUL.Code .DA .1 STATUS DevMgr.NUL.Code .DA .1 STATUS
.DA DevMgr.BADCALL READBLOCK .DA DevMgr.BADCALL READBLOCK
.DA DevMgr.BADCALL WRITEBLOCK .DA DevMgr.BADCALL WRITEBLOCK

View File

@ -174,26 +174,26 @@ K.ReadDirA.ROOT ldy #S.NODE.DIR.FC did we already returned something ?
lda #0 lda #0
rol rol
inc inc
sta KrnSTAT+S.STAT.P.DRIVE sta K.S.STAT+S.STAT.P.DRIVE
pla pla
lsr CC lsr CC
lsr lsr
lsr lsr
lsr lsr
lsr lsr
sta KrnSTAT+S.STAT.P.SLOT sta K.S.STAT+S.STAT.P.SLOT
>LDYAI KrnOut256 >LDYAI KrnOut256
>STYA MLICALL.PARAMS+1 >STYA MLICALL.PARAMS+1
>MLICALL MLIGETFILEINFO >MLICALL MLIGETFILEINFO
sta KrnSTAT+S.STAT.P.DEVSTATUS sta K.S.STAT+S.STAT.P.DEVSTATUS
bcs .80 bcs .80
>LDYA MLICALL.PARAMS+5 AUXTYPE=TOTAL BLOCKS >LDYA MLICALL.PARAMS+5 AUXTYPE=TOTAL BLOCKS
>STYA KrnSTAT+S.STAT.P.DEVBLOCKS >STYA K.S.STAT+S.STAT.P.DEVBLOCKS
>LDYA MLICALL.PARAMS+8 >LDYA MLICALL.PARAMS+8
>STYA KrnSTAT+S.STAT.BLOCKS >STYA K.S.STAT+S.STAT.BLOCKS
.80 jsr K.ReadDirA.ADDSTAT .80 jsr K.ReadDirA.ADDSTAT
@ -454,27 +454,27 @@ K.ReadDirA.ADD..
* ldy #$25 total_blocks * ldy #$25 total_blocks
* lda (ZPPtr3),y * lda (ZPPtr3),y
* sta KrnSTAT+S.STAT.BLOCKS * sta K.S.STAT+S.STAT.BLOCKS
* iny * iny
* lda (ZPPtr3),y * lda (ZPPtr3),y
* sta KrnSTAT+S.STAT.BLOCKS+1 * sta K.S.STAT+S.STAT.BLOCKS+1
*-------------------------------------- *--------------------------------------
K.ReadDirA.ADDD lda #$0F K.ReadDirA.ADDD lda #$0F
sta KrnSTAT+S.STAT.P.TYPE sta K.S.STAT+S.STAT.P.TYPE
lda /S.STAT.MODE.DIR lda /S.STAT.MODE.DIR
sta KrnSTAT+S.STAT.MODE+1 sta K.S.STAT+S.STAT.MODE+1
bra K.ReadDirA.AddAccess bra K.ReadDirA.AddAccess
*-------------------------------------- *--------------------------------------
K.ReadDirA.ADDF lda /S.STAT.MODE.REG K.ReadDirA.ADDF lda /S.STAT.MODE.REG
sta KrnSTAT+S.STAT.MODE+1 sta K.S.STAT+S.STAT.MODE+1
ldx #ADDF.DST-ADDF.SRC ldx #ADDF.DST-ADDF.SRC
.1 ldy ADDF.SRC-1,x .1 ldy ADDF.SRC-1,x
lda (ZPPtr3),y lda (ZPPtr3),y
ldy ADDF.DST-1,x ldy ADDF.DST-1,x
sta KrnSTAT,y sta K.S.STAT,y
dex dex
bpl .1 bpl .1
*-------------------------------------- *--------------------------------------
@ -494,21 +494,21 @@ K.ReadDirA.AddAccess
.HS 89 bit imm to skip txa .HS 89 bit imm to skip txa
.3 txa .3 txa
sta KrnSTAT+S.STAT.MODE sta K.S.STAT+S.STAT.MODE
*-------------------------------------- *--------------------------------------
K.ReadDirA.AddTime K.ReadDirA.AddTime
>PUSHWI KrnSTAT+S.STAT.CTIME >PUSHWI K.S.STAT+S.STAT.CTIME
lda #$18 creation Date/time lda #$18 creation Date/time
jsr K.ReadDirA.ConvertTime jsr K.ReadDirA.ConvertTime
>PUSHWI KrnSTAT+S.STAT.MTIME >PUSHWI K.S.STAT+S.STAT.MTIME
lda #$21 mod Date/time lda #$21 mod Date/time
jsr K.ReadDirA.ConvertTime jsr K.ReadDirA.ConvertTime
*-------------------------------------- *--------------------------------------
K.ReadDirA.AddStat K.ReadDirA.AddStat
ldy #S.STAT-1 ldy #S.STAT-1
.1 lda KrnSTAT,y .1 lda K.S.STAT,y
sta (ZPPtr4),y sta (ZPPtr4),y
dey dey
bpl .1 bpl .1
@ -524,7 +524,7 @@ K.ReadDirA.AddStat
K.ReadDirA.ClrStat K.ReadDirA.ClrStat
ldx #S.STAT-1 ldx #S.STAT-1
.1 stz KrnSTAT,x .1 stz K.S.STAT,x
dex dex
bpl .1 bpl .1
rts rts

View File

@ -59,7 +59,7 @@ K.FileSearch >PULLW ZPPtr4 ZPPtr1 trashed by ExpandPStrYA
stx KrnBuf256 set string length stx KrnBuf256 set string length
>PUSHWI KrnSTAT >PUSHWI K.S.STAT
>PUSHWI KrnBuf256 >PUSHWI KrnBuf256
jsr K.STAT jsr K.STAT
bcs .1 Failed...retry next path... bcs .1 Failed...retry next path...

View File

@ -114,7 +114,7 @@ A2osX.DIIDrv.S >LDYAI A2osx.DIIStat
clc clc
rts rts
*-------------------------------------- *--------------------------------------
A2osX.DIIDrv.RW jsr A2osX.Prt2Blk A2osX.DIIDrv.RW jsr A2osX.Blk.GetParam
jsr GO.ProDOS jsr GO.ProDOS
jsr $D000 jsr $D000
@ -144,31 +144,30 @@ A2osX.BlkDrv .DA A2osX.BlkDrv.S status
.DA A2osX.DRV.BadCall .DA A2osX.DRV.BadCall
.DA A2osX.DRV.BadCall .DA A2osX.DRV.BadCall
*-------------------------------------- *--------------------------------------
A2osX.BlkDrv.S jsr A2osX.Prt2Blk.NoParam A2osX.BlkDrv.S jsr A2osX.Blk.GetDev
jsr A2osX.BlkDrv.Go jsr A2osX.BlkDrv.Go
bcs * bcs *
stx A2osx.BlkStat+S.DEVSTAT.SIZE stx A2osx.BlkStat+S.DEVSTAT.SIZE
sty A2osx.BlkStat+S.DEVSTAT.SIZE+1 sty A2osx.BlkStat+S.DEVSTAT.SIZE+1
>LDYAI A2osx.BlkStat >LDYAI A2osX.BlkStat
clc clc
rts rts
*-------------------------------------- *--------------------------------------
A2osX.BlkDrv.RW jsr A2osX.Prt2Blk A2osX.BlkDrv.RW jsr A2osX.Blk.GetParam
bra A2osX.BlkDrv.Go bra A2osX.BlkDrv.Go
*-------------------------------------- *--------------------------------------
A2osX.BlkDrv.F jsr A2osX.Prt2Blk.NoParam A2osX.BlkDrv.F jsr A2osX.Blk.GetDev
A2osX.BlkDrv.Go ldy #S.DEV.ROM.JMP A2osX.BlkDrv.Go ldy #S.DEV.ROM.JMP
lda (pDev),y lda (pDev),y
sta .8+1 sta .8+1
iny iny
lda (pDev),y lda (pDev),y
sta .8+2 sta .8+2
.8 jmp $ffff .8 jmp $ffff
*-------------------------------------- *--------------------------------------
A2osx.BlkStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ A2osX.BlkStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
.BS 3 .BS 3
>PSTR "Generic Blk Dev" >PSTR "Generic Blk Dev"
.BS 1 .BS 1
@ -176,18 +175,19 @@ A2osx.BlkStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
.DA #0 .DA #0
.DA #0,#9 .DA #0,#9
*-------------------------------------- *--------------------------------------
A2osX.Prt2Blk >STYA ZPDRV Get Ptr To ParamList A2osX.Blk.GetParam
jsr A2osX.Prt2Blk.NoParam >STYA ZPDRV Get Ptr To ParamList
jsr A2osX.Blk.GetDev
ldy #3 ldy #3
.1 lda (ZPDRV),y .1 lda (ZPDRV),y
sta ($44),y sta $44,y
dey dey
bpl .1 bpl .1
rts rts
*--------------------------------------
A2osX.Prt2Blk.NoParam A2osX.Blk.GetDev
txa txa
asl asl
sta $42 CMD sta $42 CMD
@ -211,23 +211,6 @@ A2osX.Prt2Blk.NoParam
rts rts
*-------------------------------------- *--------------------------------------
* Smartport
*--------------------------------------
*A2osX.PrtDrv >STYA .1+1
* txa
* beq STATUS
* lsr
* sta .2
* tax
* lda A2osX.PRTCALL.Cnt,x
* sta PRTCALL.PARAMS
*.1 jsr $ffff
*.2 .BS 1 CMD
* .DA PRTCALL.PARAMS
* rts
*A2osX.PRTCALL.Cnt
* .HS 03030301030101010404
*--------------------------------------
A2osX.DRV.BadCall A2osX.DRV.BadCall
lda #MLI.ERR.BADCALL lda #MLI.ERR.BADCALL
sec sec

View File

@ -134,16 +134,14 @@ DevMgr.NUL cld
jmp (DevMgr.NUL.Code,x) jmp (DevMgr.NUL.Code,x)
.DA #S.DEV.S.WRITE+S.DEV.S.READ+S.DEV.S.OPENED .DA #S.DEV.S.WRITE+S.DEV.S.READ+S.DEV.S.OPENED
.BS 6 .BS 6
.DA #3 >PSTR "NUL" NAME
.AS "NUL" NAME
.HS 00 NAME must Be 4 bytes long .HS 00 NAME must Be 4 bytes long
*-------------------------------------- *--------------------------------------
DevMgr.SYS cld DevMgr.SYS cld
jmp (DevMgr.SYS.Code,x) jmp (DevMgr.SYS.Code,x)
.DA #S.DEV.S.WRITE+S.DEV.S.READ .DA #S.DEV.S.WRITE+S.DEV.S.READ
.BS 6 .BS 6
.DA #3 >PSTR "SYS" NAME
.AS "SYS" NAME
.HS 00 NAME must Be 4 bytes long .HS 00 NAME must Be 4 bytes long
*-------------------------------------- *--------------------------------------
* Setup AuxLC $FFFE->Kernel IRQ Handler * Setup AuxLC $FFFE->Kernel IRQ Handler
@ -263,30 +261,31 @@ DevMgrInit stz ZPPtr1
.2 ldy SmartPort.OFS,x Check if there is a smartport firmware .2 ldy SmartPort.OFS,x Check if there is a smartport firmware
lda (ZPPtr1),y lda (ZPPtr1),y
cmp SmartPort.SIG,x cmp SmartPort.SIG,x
bne .3 not a smartport... bne .8 not a Disk Controller...
dex dex
bpl .2 bpl .2
*SmartPort!!!
jsr DevMgrInit.SP
ldy #A2osX.SLOTS.SP
bra .7
* Disk II, or Block device ?
.3 dex if x=0, only first SIG byte failed
bpl .8
ldy #$ff ldy #$ff
lda (ZPPtr1),y lda (ZPPtr1),y
bne .4 $0, Disk II, 16sect bne .3 $0, Disk II, 16sect
jsr DevMgrInit.DII jsr DevMgrInit.DII
ldy #A2osX.SLOTS.DII ldy #A2osX.SLOTS.DII
bra .7 bra .7
.4 inc .3 inc
beq .7 $ff, Disk II, 13sect, ignore beq .7 $ff, Disk II 13 Sect, ingnore
dec dec
* Block device
jsr DevMgrInit.BLK ldy #7
lda (ZPPtr1),y
bne .4 $Cn07=00 : smartport
jsr DevMgrInit.SP
ldy #A2osX.SLOTS.SP
bra .7
.4 jsr DevMgrInit.BLK
ldy #A2osX.SLOTS.BLK ldy #A2osX.SLOTS.BLK
.7 lda ZPPtr1+1 .7 lda ZPPtr1+1
@ -342,26 +341,24 @@ DevMgrInit.SP ldy #$ff
.DA #0 Status .DA #0 Status
.DA SP.CTRL.STATUS .DA SP.CTRL.STATUS
bcs .9 bcs .9
lda SP.STATUS1 lda SP.CTRL.STATUS.DATA
beq .9 no device beq .9 no device
.2 lda #'1' .2 lda #'1'
sta DEV.HEADER+S.DEV.NAME+2 SxD1 sta DEV.HEADER+S.DEV.DEVID
sta SP.DEV.STATUS.DEVID
.3 jsr $ffff Self Modified .3 jsr $ffff Self Modified
.DA #0 Status .DA #0 Status
.DA DEV.HEADER+S.DEV.S .DA SP.DEV.STATUS
bcs .7 bcs .7
lda SP.STATUS2+S.DEVSTAT.S lda SP.DEV.STATUS.DATA+S.DEVSTAT.S
sta DEV.HEADER+S.DEV.S sta DEV.HEADER+S.DEV.S
jsr DevMgrInit.AddDev
.7 inc DEV.HEADER+S.DEV.DEVID
dec SP.CTRL.STATUS.DATA
.7 inc DEV.HEADER+7
dec SP.STATUS1
bne .3 bne .3
.9 rts .9 rts
@ -407,19 +404,22 @@ DEV.HEADER clc
.BS 1 .BS 1
>PSTR "S1D1" 5 bytes >PSTR "S1D1" 5 bytes
*-------------------------------------- *--------------------------------------
SmartPort.OFS .HS 07010305 SmartPort.OFS .HS 010305
SmartPort.SIG .HS 00200003 SmartPort.SIG .HS 200003
*-------------------------------------- *--------------------------------------
SP.CTRL.STATUS .DA #3 SP.CTRL.STATUS .DA #3
.DA #0 .DA #0
.DA SP.STATUS1 .DA SP.CTRL.STATUS.DATA
.DA #0 return S only .DA #0
SP.CTRL.STATUS.DATA
.BS 8 DevCnt
SP.DEV.STATUS .DA #3 SP.DEV.STATUS .DA #3
SP.DEV.STATUS.DEVID
.BS 1 .BS 1
.DA SP.STATUS2 .DA SP.DEV.STATUS.DATA
.DA #3 return DIB .DA #3 return DIB
SP.STATUS1 .BS 4 SP.DEV.STATUS.DATA
SP.STATUS2 .BS S.DEVSTAT .BS S.DEVSTAT
*-------------------------------------- *--------------------------------------
EvtMgrInit lda #$A5 EvtMgrInit lda #$A5
sta A2osX.TIMER16 sta A2osX.TIMER16