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
*--------------------------------------
MLICALL.PARAMS .EQ $0D00 Main, $12 bytes min !!!!
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 $0D00 Used to return Values to User Space
*--------------------------------------
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***
*--------------------------------------
@ -103,8 +103,6 @@ DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
A2osX.SYSCALL .EQ $BD00
A2osX.LIBCALL .EQ $BD03
A2osX.MLICALL .EQ $BD06
A2osX.BLKCALL .EQ $BD09
A2osX.PRTCALL .EQ $BD0C
*--------------------------------------
pCodeJmp .EQ $BD10
pLibJmp .EQ $BD13

View File

@ -4,6 +4,72 @@ LOMEM $A00
INC 1
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
.DA DevMgr.BADCALL READBLOCK
.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
rol
inc
sta KrnSTAT+S.STAT.P.DRIVE
sta K.S.STAT+S.STAT.P.DRIVE
pla
lsr CC
lsr
lsr
lsr
lsr
sta KrnSTAT+S.STAT.P.SLOT
sta K.S.STAT+S.STAT.P.SLOT
>LDYAI KrnOut256
>STYA MLICALL.PARAMS+1
>MLICALL MLIGETFILEINFO
sta KrnSTAT+S.STAT.P.DEVSTATUS
sta K.S.STAT+S.STAT.P.DEVSTATUS
bcs .80
>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
>STYA KrnSTAT+S.STAT.BLOCKS
>STYA K.S.STAT+S.STAT.BLOCKS
.80 jsr K.ReadDirA.ADDSTAT
@ -454,27 +454,27 @@ K.ReadDirA.ADD..
* ldy #$25 total_blocks
* lda (ZPPtr3),y
* sta KrnSTAT+S.STAT.BLOCKS
* sta K.S.STAT+S.STAT.BLOCKS
* iny
* lda (ZPPtr3),y
* sta KrnSTAT+S.STAT.BLOCKS+1
* sta K.S.STAT+S.STAT.BLOCKS+1
*--------------------------------------
K.ReadDirA.ADDD lda #$0F
sta KrnSTAT+S.STAT.P.TYPE
sta K.S.STAT+S.STAT.P.TYPE
lda /S.STAT.MODE.DIR
sta KrnSTAT+S.STAT.MODE+1
sta K.S.STAT+S.STAT.MODE+1
bra K.ReadDirA.AddAccess
*--------------------------------------
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
.1 ldy ADDF.SRC-1,x
lda (ZPPtr3),y
ldy ADDF.DST-1,x
sta KrnSTAT,y
sta K.S.STAT,y
dex
bpl .1
*--------------------------------------
@ -494,21 +494,21 @@ K.ReadDirA.AddAccess
.HS 89 bit imm to skip txa
.3 txa
sta KrnSTAT+S.STAT.MODE
sta K.S.STAT+S.STAT.MODE
*--------------------------------------
K.ReadDirA.AddTime
>PUSHWI KrnSTAT+S.STAT.CTIME
>PUSHWI K.S.STAT+S.STAT.CTIME
lda #$18 creation Date/time
jsr K.ReadDirA.ConvertTime
>PUSHWI KrnSTAT+S.STAT.MTIME
>PUSHWI K.S.STAT+S.STAT.MTIME
lda #$21 mod Date/time
jsr K.ReadDirA.ConvertTime
*--------------------------------------
K.ReadDirA.AddStat
ldy #S.STAT-1
.1 lda KrnSTAT,y
.1 lda K.S.STAT,y
sta (ZPPtr4),y
dey
bpl .1
@ -524,7 +524,7 @@ K.ReadDirA.AddStat
K.ReadDirA.ClrStat
ldx #S.STAT-1
.1 stz KrnSTAT,x
.1 stz K.S.STAT,x
dex
bpl .1
rts

View File

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

View File

@ -114,7 +114,7 @@ A2osX.DIIDrv.S >LDYAI A2osx.DIIStat
clc
rts
*--------------------------------------
A2osX.DIIDrv.RW jsr A2osX.Prt2Blk
A2osX.DIIDrv.RW jsr A2osX.Blk.GetParam
jsr GO.ProDOS
jsr $D000
@ -144,31 +144,30 @@ A2osX.BlkDrv .DA A2osX.BlkDrv.S status
.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
bcs *
stx A2osx.BlkStat+S.DEVSTAT.SIZE
sty A2osx.BlkStat+S.DEVSTAT.SIZE+1
>LDYAI A2osx.BlkStat
>LDYAI A2osX.BlkStat
clc
rts
*--------------------------------------
A2osX.BlkDrv.RW jsr A2osX.Prt2Blk
A2osX.BlkDrv.RW jsr A2osX.Blk.GetParam
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
lda (pDev),y
sta .8+1
iny
lda (pDev),y
sta .8+2
.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
>PSTR "Generic Blk Dev"
.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,#9
*--------------------------------------
A2osX.Prt2Blk >STYA ZPDRV Get Ptr To ParamList
jsr A2osX.Prt2Blk.NoParam
A2osX.Blk.GetParam
>STYA ZPDRV Get Ptr To ParamList
jsr A2osX.Blk.GetDev
ldy #3
.1 lda (ZPDRV),y
sta ($44),y
sta $44,y
dey
bpl .1
rts
A2osX.Prt2Blk.NoParam
*--------------------------------------
A2osX.Blk.GetDev
txa
asl
sta $42 CMD
@ -211,23 +211,6 @@ A2osX.Prt2Blk.NoParam
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
lda #MLI.ERR.BADCALL
sec

View File

@ -134,16 +134,14 @@ DevMgr.NUL cld
jmp (DevMgr.NUL.Code,x)
.DA #S.DEV.S.WRITE+S.DEV.S.READ+S.DEV.S.OPENED
.BS 6
.DA #3
.AS "NUL" NAME
>PSTR "NUL" NAME
.HS 00 NAME must Be 4 bytes long
*--------------------------------------
DevMgr.SYS cld
jmp (DevMgr.SYS.Code,x)
.DA #S.DEV.S.WRITE+S.DEV.S.READ
.BS 6
.DA #3
.AS "SYS" NAME
>PSTR "SYS" NAME
.HS 00 NAME must Be 4 bytes long
*--------------------------------------
* 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
lda (ZPPtr1),y
cmp SmartPort.SIG,x
bne .3 not a smartport...
bne .8 not a Disk Controller...
dex
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
lda (ZPPtr1),y
bne .4 $0, Disk II, 16sect
bne .3 $0, Disk II, 16sect
jsr DevMgrInit.DII
ldy #A2osX.SLOTS.DII
bra .7
.4 inc
beq .7 $ff, Disk II, 13sect, ignore
.3 inc
beq .7 $ff, Disk II 13 Sect, ingnore
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
.7 lda ZPPtr1+1
@ -342,26 +341,24 @@ DevMgrInit.SP ldy #$ff
.DA #0 Status
.DA SP.CTRL.STATUS
bcs .9
lda SP.STATUS1
lda SP.CTRL.STATUS.DATA
beq .9 no device
.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
.DA #0 Status
.DA DEV.HEADER+S.DEV.S
.DA SP.DEV.STATUS
bcs .7
lda SP.STATUS2+S.DEVSTAT.S
lda SP.DEV.STATUS.DATA+S.DEVSTAT.S
sta DEV.HEADER+S.DEV.S
jsr DevMgrInit.AddDev
.7 inc DEV.HEADER+7
dec SP.STATUS1
.7 inc DEV.HEADER+S.DEV.DEVID
dec SP.CTRL.STATUS.DATA
bne .3
.9 rts
@ -407,19 +404,22 @@ DEV.HEADER clc
.BS 1
>PSTR "S1D1" 5 bytes
*--------------------------------------
SmartPort.OFS .HS 07010305
SmartPort.SIG .HS 00200003
SmartPort.OFS .HS 010305
SmartPort.SIG .HS 200003
*--------------------------------------
SP.CTRL.STATUS .DA #3
.DA #0
.DA SP.STATUS1
.DA #0 return S only
.DA SP.CTRL.STATUS.DATA
.DA #0
SP.CTRL.STATUS.DATA
.BS 8 DevCnt
SP.DEV.STATUS .DA #3
SP.DEV.STATUS.DEVID
.BS 1
.DA SP.STATUS2
.DA SP.DEV.STATUS.DATA
.DA #3 return DIB
SP.STATUS1 .BS 4
SP.STATUS2 .BS S.DEVSTAT
SP.DEV.STATUS.DATA
.BS S.DEVSTAT
*--------------------------------------
EvtMgrInit lda #$A5
sta A2osX.TIMER16