mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-29 17:50:18 +00:00
Kernel version 0.9 : Block Device Support, Disk II & Generic BLk ok
This commit is contained in:
parent
9a65e64885
commit
82b83a26e8
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.
106
BIN/LSDEV.S.txt
106
BIN/LSDEV.S.txt
@ -35,7 +35,9 @@ CS.START cld
|
||||
.DA CS.QUIT
|
||||
L.MSG0 .DA MSG0
|
||||
L.MSG1 .DA MSG1
|
||||
L.MSG2 .DA MSG2
|
||||
L.MSG2.C .DA MSG2.C
|
||||
L.MSG2.B .DA MSG2.B
|
||||
L.DEV.SIZE .DA DEV.SIZE
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT clc
|
||||
@ -49,49 +51,85 @@ CS.RUN >LDYA L.MSG0
|
||||
lda DEV.ID
|
||||
|
||||
.1 >SYSCALL GetDevByIDA
|
||||
bcc .10
|
||||
jmp .71
|
||||
bcs .7
|
||||
|
||||
.10 >STYA pDev
|
||||
>STYA ZPPTR1
|
||||
|
||||
ldy #S.DEV.DRV.JMP+1
|
||||
>PUSHB (pDev),y
|
||||
jsr DumpHeader
|
||||
|
||||
bcs .9
|
||||
|
||||
lda DEV.ID
|
||||
>SYSCALL GetDevByIDA
|
||||
>STYA pDev
|
||||
|
||||
ldx #DEVMGR.STATUS
|
||||
jsr pDevJmp
|
||||
bcs .6
|
||||
>STYA ZPPTR2
|
||||
|
||||
jsr DumpStatus
|
||||
|
||||
bcs .9
|
||||
|
||||
.6 lda #13
|
||||
>SYSCALL PutCA
|
||||
lda #10
|
||||
>SYSCALL PutCA
|
||||
|
||||
.7 inc DEV.ID
|
||||
lda DEV.ID
|
||||
cmp #K.DEV.MAX
|
||||
bne .1
|
||||
|
||||
.8 lda #0 tell TSKMGR that all done ok, but
|
||||
.9 sec we do not want to stay in memory
|
||||
rts
|
||||
*--------------------------------------
|
||||
DumpHeader ldy #S.DEV.DRV.JMP+1
|
||||
>PUSHB (ZPPTR1),y
|
||||
|
||||
dey
|
||||
>PUSHB (pDev),y
|
||||
>PUSHB (ZPPTR1),y
|
||||
|
||||
lda #S.DEV.NAME
|
||||
clc
|
||||
adc pDev
|
||||
adc ZPPTR1
|
||||
tay
|
||||
|
||||
lda /S.DEV.NAME
|
||||
adc pDev+1
|
||||
adc ZPPTR1+1
|
||||
|
||||
>PUSHYA
|
||||
|
||||
ldy #S.DEV.F
|
||||
>PUSHB (pDev),y
|
||||
>PUSHB (ZPPTR1),y
|
||||
|
||||
ldy #S.DEV.S
|
||||
>PUSHB (pDev),y
|
||||
>PUSHB (ZPPTR1),y
|
||||
sta DEV.S
|
||||
|
||||
>PUSHB DEV.ID
|
||||
|
||||
>LDYA L.MSG1
|
||||
>SYSCALL CPrintFYA
|
||||
bcs .9
|
||||
rts
|
||||
*--------------------------------------
|
||||
DumpStatus bit DEV.S
|
||||
bpl .1
|
||||
|
||||
>LDYA ZPPTR1
|
||||
>STYA pDev
|
||||
ldy #S.DEVSTAT.SIZE
|
||||
lda (ZPPTR2),y
|
||||
sta DEV.SIZE
|
||||
iny
|
||||
lda (ZPPTR2),y
|
||||
sta DEV.SIZE+1
|
||||
iny
|
||||
lda (ZPPTR2),y
|
||||
sta DEV.SIZE+2
|
||||
>PUSHW L.DEV.SIZE
|
||||
|
||||
ldx #DEVMGR.STATUS
|
||||
jsr pDevJmp
|
||||
bcs .7
|
||||
>STYA ZPPTR2
|
||||
|
||||
ldy #S.DEVSTAT.VERSION+1
|
||||
.1 ldy #S.DEVSTAT.VERSION+1
|
||||
>PUSHB (ZPPTR2),y
|
||||
dey
|
||||
>PUSHB (ZPPTR2),y
|
||||
@ -110,23 +148,14 @@ CS.RUN >LDYA L.MSG0
|
||||
dey
|
||||
>PUSHB (ZPPTR2),y
|
||||
|
||||
>LDYA L.MSG2
|
||||
>SYSCALL CPrintFYA
|
||||
bcs .9
|
||||
bit DEV.S
|
||||
bpl .2
|
||||
|
||||
.7 lda #13
|
||||
>SYSCALL PutCA
|
||||
lda #10
|
||||
>SYSCALL PutCA
|
||||
>LDYA L.MSG2.B
|
||||
bra .3
|
||||
.2 >LDYA L.MSG2.C
|
||||
|
||||
.71 inc DEV.ID
|
||||
lda DEV.ID
|
||||
cmp #K.DEV.MAX
|
||||
beq .8
|
||||
jmp .1
|
||||
|
||||
.8 lda #0 tell TSKMGR that all done ok, but
|
||||
.9 sec we do not want to stay in memory
|
||||
.3 >SYSCALL CPrintFYA
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.EVENT sec
|
||||
@ -136,11 +165,14 @@ CS.QUIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.END
|
||||
MSG0 >CSTR "ID Status Flags Name Addr. Typ/Sub IDString Version\r\n"
|
||||
MSG0 >CSTR "ID Status Flags Name Addr. Typ/Sub IDString Version Size (BLK)\r\n"
|
||||
MSG1 >CSTR "%03d %b %b %4S $%H "
|
||||
MSG2 >CSTR "$%h/$%h %16S %03d.%03d"
|
||||
MSG2.B >CSTR "$%h/$%h %16S %03d.%03d %10u"
|
||||
MSG2.C >CSTR "$%h/$%h %16S %03d.%03d n/a"
|
||||
*--------------------------------------
|
||||
DEV.ID .BS 1
|
||||
DEV.S .BS 1
|
||||
DEV.SIZE .BS 4
|
||||
MAN
|
||||
SAVE BIN/LSDEV.S
|
||||
ASM
|
||||
|
@ -28,20 +28,6 @@ AUTO 6
|
||||
* A = Param Count
|
||||
*--------------------------------------
|
||||
jmp A2osX.MLICALL1
|
||||
*--------------------------------------
|
||||
* BLKCALL (AUXLC to MAINLC)
|
||||
* Used by Kernel
|
||||
* In:
|
||||
* Y,A = Ptr To Param Block
|
||||
*--------------------------------------
|
||||
jmp A2osX.BLKCALL1
|
||||
*--------------------------------------
|
||||
* PRTCALL (AUXLC to MAINLC)
|
||||
* Used by Kernel
|
||||
* In:
|
||||
* Y,A = Ptr To Param Block
|
||||
*--------------------------------------
|
||||
jmp A2osX.PRTCALL1
|
||||
*--------------------------------------
|
||||
.BS $BD10-*
|
||||
*--------------------------------------
|
||||
@ -103,53 +89,37 @@ A2osX.MLICALL1 stx .1
|
||||
jsr GO.A2osX
|
||||
rts
|
||||
*--------------------------------------
|
||||
* BLKCALL.PARAMS
|
||||
* (To be moved to MainZP/LC For DII)
|
||||
* A2osX.DIIDrv,A2osX.BlkDrv
|
||||
* X = DEVMGR.cmd
|
||||
* Y,A = PTR to Params
|
||||
* pDev -> Dev Header
|
||||
* $42 Command Number
|
||||
* $43 Unit Number
|
||||
* $44-$45 Buffer Pointer
|
||||
* $46-$47 Block Number
|
||||
* X = DEVMGR.cmd
|
||||
* pDev -> Dev Header
|
||||
*--------------------------------------
|
||||
A2osX.BLKCALL1 >STYA .2+1 setup device entry point $Cnxx
|
||||
|
||||
jsr GO.ProDOS
|
||||
|
||||
ldx #5
|
||||
|
||||
.1 lda BLKCALL.PARAMS,x
|
||||
sta $42,x setup ZP in main memory for this block device call
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
.2 jsr $ffff
|
||||
|
||||
jsr GO.A2osX
|
||||
A2osX.DIIDrv .DA A2osX.DIIDrv.S status
|
||||
.DA A2osX.DIIDrv.RW Read
|
||||
.DA A2osX.DIIDrv.RW Write
|
||||
.DA A2osX.DRV.BadCall Format
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
*--------------------------------------
|
||||
A2osX.DIIDrv.S >LDYAI A2osx.DIIStat
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
A2osX.DIIDrv txa Status ?
|
||||
beq .2
|
||||
A2osX.DIIDrv.RW jsr A2osX.Prt2Blk
|
||||
|
||||
jsr GO.ProDOS
|
||||
|
||||
asl
|
||||
sta $42
|
||||
|
||||
ldx #5
|
||||
|
||||
.1 lda BLKCALL.PARAMS,x
|
||||
sta $42,x setup ZP in main memory for this block device call
|
||||
dex
|
||||
bne .1
|
||||
|
||||
jsr $D000
|
||||
jsr GO.A2osX
|
||||
rts
|
||||
|
||||
.2 >LDYAI A2osx.DIIStat
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
A2osx.DIIStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
|
||||
.DA 280
|
||||
@ -160,7 +130,45 @@ A2osx.DIIStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
|
||||
.DA #0
|
||||
.DA #0,#9
|
||||
*--------------------------------------
|
||||
A2osx.GenStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
|
||||
* Generic Blk Device
|
||||
*--------------------------------------
|
||||
A2osX.BlkDrv .DA A2osX.BlkDrv.S status
|
||||
.DA A2osX.BlkDrv.RW
|
||||
.DA A2osX.BlkDrv.RW
|
||||
.DA A2osX.BlkDrv.F
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
.DA A2osX.DRV.BadCall
|
||||
*--------------------------------------
|
||||
A2osX.BlkDrv.S jsr A2osX.Prt2Blk.NoParam
|
||||
|
||||
jsr A2osX.BlkDrv.Go
|
||||
bcs *
|
||||
stx A2osx.BlkStat+S.DEVSTAT.SIZE
|
||||
sty A2osx.BlkStat+S.DEVSTAT.SIZE+1
|
||||
|
||||
>LDYAI A2osx.BlkStat
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
A2osX.BlkDrv.RW jsr A2osX.Prt2Blk
|
||||
bra A2osX.BlkDrv.Go
|
||||
*--------------------------------------
|
||||
A2osX.BlkDrv.F jsr A2osX.Prt2Blk.NoParam
|
||||
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
|
||||
.BS 3
|
||||
>PSTR "Generic Blk Dev"
|
||||
.BS 1
|
||||
@ -168,21 +176,62 @@ A2osx.GenStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
|
||||
.DA #0
|
||||
.DA #0,#9
|
||||
*--------------------------------------
|
||||
* Smartport Call
|
||||
*--------------------------------------
|
||||
A2osX.PRTCALL1 >STYA .1+1
|
||||
txa
|
||||
lsr
|
||||
sta .2
|
||||
tax
|
||||
lda A2osX.PRTCALL.Cnt,x
|
||||
sta PRTCALL.PARAMS
|
||||
.1 jsr $ffff
|
||||
.2 .BS 1 CMD
|
||||
.DA PRTCALL.PARAMS
|
||||
A2osX.Prt2Blk >STYA ZPDRV Get Ptr To ParamList
|
||||
jsr A2osX.Prt2Blk.NoParam
|
||||
|
||||
ldy #3
|
||||
|
||||
.1 lda (ZPDRV),y
|
||||
sta ($44),y
|
||||
dey
|
||||
bpl .1
|
||||
rts
|
||||
|
||||
A2osX.Prt2Blk.NoParam
|
||||
txa
|
||||
asl
|
||||
sta $42 CMD
|
||||
|
||||
ldy #S.DEV.DEVID Drive 1, or 2
|
||||
lda (pDev),y
|
||||
dec O or 1
|
||||
lsr in Carry
|
||||
php
|
||||
|
||||
ldy #S.DEV.BUSID
|
||||
lda (pDev),y
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
plp
|
||||
ror
|
||||
sta $43 DSSS0000
|
||||
|
||||
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
|
||||
rts
|
||||
A2osX.PRTCALL.Cnt
|
||||
.HS 03030301030101010404
|
||||
*--------------------------------------
|
||||
GO.ProDOS lda $D000 We re coming from AUXLC, saving bank...
|
||||
sta GO.A2osX.BNK+1
|
||||
|
@ -252,10 +252,13 @@ DEVSIG.Value .HS 38180120D6
|
||||
DevMgrInit stz ZPPtr1
|
||||
lda #$C1
|
||||
sta ZPPtr1+1
|
||||
lda #'1'
|
||||
sta DEV.HEADER+S.DEV.NAME+4 S1Dy
|
||||
lda #1
|
||||
sta DEV.HEADER+S.DEV.BUSID
|
||||
|
||||
.1 ldx #SmartPort.SIG-SmartPort.OFS-1
|
||||
.1 lda #1
|
||||
sta DEV.HEADER+S.DEV.DEVID
|
||||
|
||||
ldx #SmartPort.SIG-SmartPort.OFS-1
|
||||
|
||||
.2 ldy SmartPort.OFS,x Check if there is a smartport firmware
|
||||
lda (ZPPtr1),y
|
||||
@ -292,7 +295,7 @@ DevMgrInit stz ZPPtr1
|
||||
tya
|
||||
sta A2osX.SLOTS,x
|
||||
|
||||
.8 inc DEV.HEADER+5
|
||||
.8 inc DEV.HEADER+S.DEV.BUSID
|
||||
inc ZPPtr1+1
|
||||
lda ZPPtr1+1
|
||||
cmp #$C8
|
||||
@ -301,6 +304,28 @@ DevMgrInit stz ZPPtr1
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgrInit.DII >LDYAI A2osX.DIIDrv
|
||||
>STYA DEV.HEADER+S.DEV.DRV.JMP
|
||||
jsr DevMgrInit.AddDev
|
||||
inc DEV.HEADER+S.DEV.DEVID
|
||||
jsr DevMgrInit.AddDev
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgrInit.BLK sta DEV.HEADER+S.DEV.ROM.JMP
|
||||
lda ZPPtr1+1
|
||||
sta DEV.HEADER+S.DEV.ROM.JMP+1
|
||||
|
||||
>LDYAI A2osX.BlkDrv
|
||||
>STYA DEV.HEADER+S.DEV.DRV.JMP
|
||||
|
||||
jsr DevMgrInit.AddDev
|
||||
inc DEV.HEADER+S.DEV.DEVID
|
||||
jsr DevMgrInit.AddDev
|
||||
rts
|
||||
|
||||
DevMgrInit.BLK.JMP
|
||||
jmp (DEV.HEADER+S.DEV.ROM.JMP)
|
||||
*--------------------------------------
|
||||
DevMgrInit.SP ldy #$ff
|
||||
lda (ZPPtr1),y
|
||||
clc
|
||||
@ -341,28 +366,30 @@ DevMgrInit.SP ldy #$ff
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
DevMgrInit.DII >LDYAI A2osX.DIIDrv
|
||||
>STYA DEV.HEADER+S.DEV.ROM.JMP
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgrInit.BLK
|
||||
rts
|
||||
*--------------------------------------
|
||||
DevMgrInit.AddDev
|
||||
lda DevMgr.Count
|
||||
cmp #K.DEV.MAX
|
||||
beq .9
|
||||
|
||||
inc DevMgr.Count
|
||||
jsr K.GetDevByIDA
|
||||
>STYA ZPPtr1
|
||||
>SYSCALL GetDevByIDA
|
||||
>STYA ZPPtr2
|
||||
|
||||
lda DEV.HEADER+S.DEV.BUSID
|
||||
ora #$30
|
||||
sta DEV.HEADER+S.DEV.NAME+2 SnDy
|
||||
|
||||
lda DEV.HEADER+S.DEV.DEVID
|
||||
ora #$30
|
||||
sta DEV.HEADER+S.DEV.NAME+4 SxDn
|
||||
|
||||
ldy #S.DEV-1
|
||||
|
||||
.1 lda DEV.HEADER,y
|
||||
sta (ZPPtr1),y
|
||||
sta (ZPPtr2),y
|
||||
dey
|
||||
bne .1
|
||||
bpl .1
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
@ -394,28 +421,6 @@ SP.DEV.STATUS .DA #3
|
||||
SP.STATUS1 .BS 4
|
||||
SP.STATUS2 .BS S.DEVSTAT
|
||||
*--------------------------------------
|
||||
SP.DRV cld
|
||||
ldy #7
|
||||
lda (pDev),y
|
||||
and #$f
|
||||
sta PRTCALL.PARAMS+1 dev
|
||||
SP.DRV.lo ldy #$ff
|
||||
SP.DRV.hi lda #$ff
|
||||
jmp A2osX.PRTCALL
|
||||
*--------------------------------------
|
||||
DII.DRV cld
|
||||
lda #$ff DSSS0000
|
||||
cpx #DEVMGR.CONTROL
|
||||
bcs .9
|
||||
|
||||
|
||||
|
||||
|
||||
.9 lda #MLI.ERR.BADCALL
|
||||
rts
|
||||
*--------------------------------------
|
||||
BLK.DRV
|
||||
*--------------------------------------
|
||||
EvtMgrInit lda #$A5
|
||||
sta A2osX.TIMER16
|
||||
lda #$9B
|
||||
|
Loading…
Reference in New Issue
Block a user