mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-02 02:31:33 +00:00
Kernel version 0.9 : Block Device Support, added Smartport
This commit is contained in:
parent
82b83a26e8
commit
63883ea19d
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.DEV.po
BIN
A2OSX.DEV.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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...
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user