Kernel version 0.9 : Implementing Block Device Support

This commit is contained in:
Rémy GIBERT
2017-03-14 17:47:02 +01:00
parent 99f27d1c23
commit 6324272f4f
6 changed files with 91 additions and 54 deletions

Binary file not shown.

Binary file not shown.

View File

@@ -44,17 +44,14 @@ CS.INIT clc
*-------------------------------------- *--------------------------------------
CS.RUN >LDYA L.MSG0 CS.RUN >LDYA L.MSG0
>SYSCALL CPrintFYA >SYSCALL CPrintFYA
>LDYAI DevMgr.Table
>STYA ZPPTR1
stz DEV.ID stz DEV.ID
.1 lda DEV.ID lda DEV.ID
>SYSCALL GetDevByIDA .1 >SYSCALL GetDevByIDA
bcc .10 bcc .10
jmp .8 jmp .71
.10 >STYA ZPPTR1 .10 >STYA ZPPTR1
@@ -125,16 +122,12 @@ CS.RUN >LDYA L.MSG0
>SYSCALL PutCA >SYSCALL PutCA
lda #10 lda #10
>SYSCALL PutCA >SYSCALL PutCA
inc DEV.ID
lda ZPPTR1
clc
adc #S.DEV
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 jmp .1
.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 .8 lda #0 tell TSKMGR that all done ok, but
.9 sec we do not want to stay in memory .9 sec we do not want to stay in memory

View File

@@ -104,20 +104,23 @@ A2osX.MLICALL1 stx .1
jsr GO.A2osX jsr GO.A2osX
rts rts
*-------------------------------------- *--------------------------------------
* BLKCALL.PARAMS moved to MainZP/LC * BLKCALL.PARAMS
* (To be moved to MainZP/LC For DII)
* $42 Command Number * $42 Command Number
* $43 Unit Number * $43 Unit Number
* $44-$45 Buffer Pointer * $44-$45 Buffer Pointer
* $46-$47 Block Number * $46-$47 Block Number
* X = DEVMGR.cmd
* pDev -> Dev Header
*-------------------------------------- *--------------------------------------
A2osX.BLKCALL1 >STYA .2+1 setup device entry point $Cnxx A2osX.BLKCALL1 >STYA .2+1 setup device entry point $Cnxx
jsr GO.ProDOS jsr GO.ProDOS
ldx #5 ldx #5
.1 lda BLKCALL.PARAMS,x .1 lda BLKCALL.PARAMS,x
sta $42,x setup ZP in main memory for this block device calll sta $42,x setup ZP in main memory for this block device call
dex dex
bpl .1 bpl .1
@@ -126,6 +129,46 @@ A2osX.BLKCALL1 >STYA .2+1 setup device entry point $Cnxx
jsr GO.A2osX jsr GO.A2osX
rts rts
*-------------------------------------- *--------------------------------------
A2osX.DIIDrv txa Status ?
beq .2
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
.DA #0
>PSTR "DISK II 5.25"
.BS 4
.DA #S.DEVSTAT.TYPE.5.25
.DA #0
.DA #0,#9
*--------------------------------------
A2osx.GenStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
.BS 3
>PSTR "Generic Blk Dev"
.BS 1
.DA #S.DEVSTAT.TYPE.HD
.DA #0
.DA #0,#9
*--------------------------------------
* Smartport Call * Smartport Call
*-------------------------------------- *--------------------------------------
A2osX.PRTCALL1 >STYA .1+1 A2osX.PRTCALL1 >STYA .1+1

View File

@@ -146,7 +146,6 @@ DevMgr.SYS .DA DevMgr.SYS.Code
SETMOUSE .EQ $12 Sets mouse mode SETMOUSE .EQ $12 Sets mouse mode
SERVEMOUSE .EQ $13 Services mouse interrupt SERVEMOUSE .EQ $13 Services mouse interrupt
READMOUSE .EQ $14 Reads mouse position READMOUSE .EQ $14 Reads mouse position
INITMOUSE .EQ $19 Resets mouse clamps to default values,sets mouse position to 0,0
*-------------------------------------- *--------------------------------------
IrqMgrInit php IrqMgrInit php
sei sei
@@ -213,10 +212,6 @@ IrqMgrInit php
sta K.IrqMgrVBL.MRM+1 sta K.IrqMgrVBL.MRM+1
bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly
* ldy #INITMOUSE Reset
* jsr GOMOUSE
* bcs *
ldx K.IrqMgrVBL.0n ldx K.IrqMgrVBL.0n
lda $7F8,x lda $7F8,x
@@ -252,7 +247,7 @@ DevMgrInit stz ZPPtr1
lda #$C1 lda #$C1
sta ZPPtr1+1 sta ZPPtr1+1
lda #'1' lda #'1'
sta SP.DEV+5 S1Dy sta DEV.HEADER+5 S1Dy
.1 ldx #SmartPort.SIG-SmartPort.OFS-1 .1 ldx #SmartPort.SIG-SmartPort.OFS-1
@@ -291,7 +286,7 @@ DevMgrInit stz ZPPtr1
tya tya
sta A2osX.SLOTS,x sta A2osX.SLOTS,x
.8 inc SP.DEV+5 .8 inc DEV.HEADER+5
inc ZPPtr1+1 inc ZPPtr1+1
lda ZPPtr1+1 lda ZPPtr1+1
cmp #$C8 cmp #$C8
@@ -306,11 +301,11 @@ DevMgrInit.SP ldy #$ff
adc #3 Compute smartport entry point adc #3 Compute smartport entry point
sta .1+1 sta .1+1
sta .3+1 sta .3+1
sta SP.DEV+S.DEV.JMP sta DEV.HEADER+S.DEV.JMP
lda ZPPtr1+1 lda ZPPtr1+1
sta .1+2 sta .1+2
sta .3+2 sta .3+2
sta SP.DEV+S.DEV.JMP+1 sta DEV.HEADER+S.DEV.JMP+1
.1 jsr $ffff Self Modified .1 jsr $ffff Self Modified
.DA #0 Status .DA #0 Status
@@ -320,23 +315,23 @@ DevMgrInit.SP ldy #$ff
beq .9 no device beq .9 no device
.2 lda #1 .2 lda #1
sta SP.DEV.STATUS+1 sta DEV.HEADER.STATUS+1
lda #'1' lda #'1'
sta SP.DEV+7 SxD1 sta DEV.HEADER+7 SxD1
.3 jsr $ffff Self Modified .3 jsr $ffff Self Modified
.DA #0 Status .DA #0 Status
.DA SP.DEV.STATUS .DA DEV.HEADER.STATUS
bcs .7 bcs .7
lda SP.STATUS2+S.DEVSTAT.S lda SP.STATUS2+S.DEVSTAT.S
sta SP.DEV+S.DEV.S sta DEV.HEADER+S.DEV.S
.7 inc SP.DEV+7 .7 inc DEV.HEADER+7
dec SP.STATUS1 dec SP.STATUS1
bne .3 bne .3
@@ -350,20 +345,28 @@ DevMgrInit.BLK
*-------------------------------------- *--------------------------------------
DevMgrInit.AddDev DevMgrInit.AddDev
lda DevMgr.Count lda DevMgr.Count
cmp #K.DEV.MAX
beq .9
inc DevMgr.Count inc DevMgr.Count
jsr K.GetDevByIDA jsr K.GetDevByIDA
>STYA ZPPtr1 >STYA ZPPtr1
ldy #S.DEV-1 ldy #S.DEV-1
.1 lda SP.DEV,y .1 lda DEV.HEADER,y
sta (ZPPtr1),y sta (ZPPtr1),y
dey dey
bne .1 bne .1
clc
rts rts
.9 lda #DEVMGR.ERROOH
sec
rts
*-------------------------------------- *--------------------------------------
SP.DEV .BS 2 JMP DEV.HEADER .BS 2 JMP
.DA #S.DEV.S.BLOCK S DEV.HEADER.STATUS .DA #S.DEV.S.BLOCK S
>PSTR "S1D1" 5 bytes >PSTR "S1D1" 5 bytes
*-------------------------------------- *--------------------------------------
SmartPort.OFS .HS 07010305 SmartPort.OFS .HS 07010305

View File

@@ -19,9 +19,9 @@ ZPPtr1 .EQ ZPKERNEL Temp Ptrs for use in very limited scope
ZPPtr2 .EQ ZPKERNEL+2 (could be trashed by any JSR) ZPPtr2 .EQ ZPKERNEL+2 (could be trashed by any JSR)
ZPPtr3 .EQ ZPKERNEL+4 ZPPtr3 .EQ ZPKERNEL+4
ZPPtr4 .EQ ZPKERNEL+6 ZPPtr4 .EQ ZPKERNEL+6
*--------------------------------------
* Kernel Init Stage 2 * Kernel Init Stage 2
*--------------------------------------
sei sei
ldx #$FF init 6502 stack to highest ldx #$FF init 6502 stack to highest
txs txs
@@ -36,9 +36,9 @@ ZPPtr4 .EQ ZPKERNEL+6
jsr Kernel.Init2 jsr Kernel.Init2
>DEBUGOA >DEBUGOA
*--------------------------------------
* Kernel Init Stage 3 * Kernel Init Stage 3
*--------------------------------------
sta SETALTZP sta SETALTZP
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
bit RRAMWRAMBNK1 bit RRAMWRAMBNK1
@@ -49,15 +49,15 @@ ZPPtr4 .EQ ZPKERNEL+6
.INB SYS/KERNEL.S.INIT3 .INB SYS/KERNEL.S.INIT3
*-------------------------------------- *--------------------------------------
* Global Page * Global Page
*--------------------------------------
A2osX.GP .EQ * A2osX.GP .EQ *
.PH $BD00 .PH $BD00
.INB SYS/KERNEL.S.GP .INB SYS/KERNEL.S.GP
.EP .EP
A2osX.GP.END .EQ * A2osX.GP.END .EQ *
*--------------------------------------
* LC AUX $D000 BANK1 API Calls $00-$3E * LC AUX $D000 BANK1 API Calls $00-$3E
*--------------------------------------
A2osX.D001 .EQ * A2osX.D001 .EQ *
.PH $D000 .PH $D000
.DA #RRAMWRAMBNK1 .DA #RRAMWRAMBNK1
@@ -67,14 +67,14 @@ A2osX.D001 .EQ *
.INB SYS/KERNEL.S.TIME .INB SYS/KERNEL.S.TIME
.INB SYS/KERNEL.S.FILE .INB SYS/KERNEL.S.FILE
.INB SYS/KERNEL.S.DIR .INB SYS/KERNEL.S.DIR
*--------------------------------------
.INB SYS/KERNEL.S.PFT .INB SYS/KERNEL.S.PFT
.INB SYS/KERNEL.S.BIN .INB SYS/KERNEL.S.BIN
.EP .EP
A2osX.D001.END .EQ * A2osX.D001.END .EQ *
*--------------------------------------
* LC AUX $D000 BANK2 API Calls $40-$8E * LC AUX $D000 BANK2 API Calls $40-$8E
*--------------------------------------
A2osX.D002 .EQ * A2osX.D002 .EQ *
.PH $D000 .PH $D000
.DA #RRAMWRAMBNK2 .DA #RRAMWRAMBNK2
@@ -84,15 +84,15 @@ A2osX.D002 .EQ *
.INB SYS/KERNEL.S.PS .INB SYS/KERNEL.S.PS
.INB SYS/KERNEL.S.ARG .INB SYS/KERNEL.S.ARG
.INB SYS/KERNEL.S.ENV .INB SYS/KERNEL.S.ENV
*--------------------------------------
.INB SYS/KERNEL.S.RUN .INB SYS/KERNEL.S.RUN
.INB SYS/KERNEL.S.EVT .INB SYS/KERNEL.S.EVT
.INB SYS/KERNEL.S.TSK .INB SYS/KERNEL.S.TSK
.EP .EP
A2osX.D002.END .EQ * A2osX.D002.END .EQ *
*--------------------------------------
* LC AUX $E000 API Calls $80-$FE * LC AUX $E000 API Calls $80-$FE
*--------------------------------------
A2osX.E000 .EQ * A2osX.E000 .EQ *
.PH $E000 .PH $E000
.INB SYS/KERNEL.S.JMP .INB SYS/KERNEL.S.JMP
@@ -111,22 +111,20 @@ PullPtr1Ptr2 clc
bcc .9 bcc .9
>PULLW ZPPtr3 >PULLW ZPPtr3
.9 rts .9 rts
*--------------------------------------
* Make sure KERNEL.S.D01 is the last one * Make sure KERNEL.S.D01 is the last one
*--------------------------------------
.INB SYS/KERNEL.S.D01 .INB SYS/KERNEL.S.D01
.EP .EP
A2osX.E000.END .EQ * A2osX.E000.END .EQ *
*-------------------------------------- *--------------------------------------
* CONTROL SECTION : * CONTROL SECTION :
*--------------------------------------
.LIST ON .LIST ON
*--------------------------------------
A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP A2osX.GP.SIZE .EQ A2osX.GP.END-A2osX.GP
A2osX.D001.SIZE .EQ A2osX.D001.END-A2osX.D001 A2osX.D001.SIZE .EQ A2osX.D001.END-A2osX.D001
A2osX.D002.SIZE .EQ A2osX.D002.END-A2osX.D002 A2osX.D002.SIZE .EQ A2osX.D002.END-A2osX.D002
A2osX.E000.SIZE .EQ A2osX.E000.END-A2osX.E000 A2osX.E000.SIZE .EQ A2osX.E000.END-A2osX.E000
*--------------------------------------
.LIST OFF .LIST OFF
.DO A2osX.GP.SIZE>$1E0 .DO A2osX.GP.SIZE>$1E0
.LIST ON .LIST ON
@@ -143,7 +141,7 @@ A2osX.E000.SIZE .EQ A2osX.E000.END-A2osX.E000
* !!!!!!!!! ERROR:BNK2 too big !!!!!!!! * !!!!!!!!! ERROR:BNK2 too big !!!!!!!!
.LIST OFF .LIST OFF
.FIN .FIN
*--------------------------------------
MAN MAN
SAVE SYS/KERNEL.S SAVE SYS/KERNEL.S
ASM ASM