mirror of
https://github.com/A2osX/A2osX.git
synced 2025-08-07 11:26:36 +00:00
Kernel version 0.9 : Implementing Block Device Support
This commit is contained in:
BIN
A2OSX.BOOT.po
BIN
A2OSX.BOOT.po
Binary file not shown.
BIN
A2OSX.SRC.po
BIN
A2OSX.SRC.po
Binary file not shown.
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user