Kernel version 0.9 : MEDIA reorganisation, FORMAT Cmd

This commit is contained in:
Rémy GIBERT 2017-03-30 18:11:31 +02:00
parent c20ea8b40f
commit 5284913187
23 changed files with 509 additions and 314 deletions

Binary file not shown.

Binary file not shown.

View File

@ -34,7 +34,11 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBBLKDEV .DA LIBBLKDEV
L.BlkParams.Ptr .DA BlkParams.Ptr
L.MSG.USAGE .DA MSG.USAGE
L.MSG.INIT .DA MSG.INIT
L.MSG.OK .DA MSG.OK
L.MSG.ERR .DA MSG.ERR
.DA 0
*--------------------------------------
CS.INIT >SYSCALL GetArgC
@ -82,27 +86,58 @@ CS.INIT >SYSCALL GetArgC
sta (pData),y
bra .1
.4 lda (pData)
bne .99 Already have a vol name...syntax error
.4 ldy #hDev
lda (pData),y
bne .5 Already have a dev name...go get VolName
lda (ZPPtr1)
cmp #4
bne .99 DevName must be DxDy
>LDYA ZPPtr1
>SYSCALL GetDevByNameYA
bcs .99
txa
ldy #hDev
sta (pData),y
bra .1
.5 lda (ZPPtr1)
cmp #16
bcc .5
lda #15
.5 sta (ZPPtr1)
bcs .99 VolName too long
tay
.6 lda (ZPPtr1),y
sta (pData),y
dey
bne .6
bpl .6
bra .1 success, scan for any other args
.7 lda (pData)
bne .8 Volume name ok
lda A2osX.TIMER16
jsr A2CharAX
sta DefaultVolName+6
stx DefaultVolName+7
lda A2osX.TIMER16+1
jsr A2CharAX
sta DefaultVolName+8
stx DefaultVolName+9
lda A2osX.RANDOM16
jsr A2CharAX
sta DefaultVolName+10
stx DefaultVolName+11
lda A2osX.RANDOM16+1
jsr A2CharAX
sta DefaultVolName+12
stx DefaultVolName+13
ldy DefaultVolName
.71 lda DefaultVolName,y
@ -121,23 +156,113 @@ CS.INIT >SYSCALL GetArgC
clc
rts
*--------------------------------------
CS.RUN ldy #bCANCEL
lda (pData),y
bmi .99
CS.RUN jsr CS.RUN.BuildCat
bcs .9
jsr CS.RUN.WriteCat
bcs .9
.8 clc
rts
.99 lda #0
>LDYA L.MSG.OK
>SYSCALL CPrintFYA
lda #0
sec
rts
.9 pha
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL CPrintFYA
pla
sec
rts
*--------------------------------------
CS.RUN.BuildCat ldy #hDev
lda (pData),y
>SYSCALL GetDevStatusA
bcs .99
>STYA ZPPtr1
ldy #S.DEVSTAT.SIZE
lda (ZPPtr1),y
sta BlockSize
iny
lda (ZPPtr1),y
sta BlockSize+1
ldy #hDev
lda (pData),y
>SYSCALL GetDevByIDA
bcs .99
pha
tya
adc #S.DEV.NAME
sta ZPPtr2
pla
adc /S.DEV.NAME
sta ZPPtr2+1
>PUSHW pData
>PUSHW BlockSize
>PUSHW ZPPtr2
>LDYA L.MSG.INIT
>SYSCALL CPrintFYA
bcs .9
>PUSHW BlockSize
>LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize
.99 bcs .9
stx BlkCnt
>PUSHYA BufferSize
>PUSHBI S.MEM.F.INIT0
>SYSCALL GetMem
bcs .9
>STYA BlkParams.Ptr
txa
ldy #hBuf
sta (pData),y
>PUSHW BlockSize
>PUSHW pData
>PUSHW BlkParams.Ptr
>LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat
.9 rts
*--------------------------------------
CS.RUN.WriteCat stz BlkParams.Num
stz BlkParams.Num+1
ldy #hDev
lda (pData),y
>SYSCALL GetDevByIDA
bcs .9
>STYA pDev
.1 >LDYA L.BlkParams.Ptr
ldx #DEVMGR.WRITEBLOCK
>DEBUG
jsr pDevJmp
bcs .9
inc BlkParams.Ptr+1
inc BlkParams.Ptr+1
inc BlkParams.Num
dec BlkCnt
bne .1
.9 rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.QUIT lda hLIBBLKDEV
CS.QUIT ldy #hBuf
lda (pData),y
beq .1
>SYSCALL FreeMemA
.1 lda hLIBBLKDEV
beq .8
>SYSCALL UnloadLibA
@ -145,6 +270,25 @@ CS.QUIT lda hLIBBLKDEV
.8 clc
rts
*--------------------------------------
A2CharAX pha
lsr
lsr
lsr
lsr
and #$0F
ora #$30
cmp #'9'+1
bcc .1
adc #6
.1 tax
pla
and #$0F
ora #$30
cmp #'9'+1
bcc .8
adc #6
.8 rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "L"
@ -153,19 +297,24 @@ OptionVars .DA #bLL
MSG.USAGE >CSTR "Usage : FORMAT <BLOCKDEV> [VOLUME.NAME]\r\n -L : Low-Level Format\r\n"
MSG.OK >CSTR "[OK]\r\n"
MSG.ERR >CSTR "[%h]\r\n"
MSG.INIT >CSTR "Formatting %S (%D Blks),Volname:%S..."
*--------------------------------------
LIBBLKDEV >PSTR "libblkdev.o"
DefaultVolName >PSTR "BLANK"
DefaultVolName >PSTR "BLANKXXXXXXXX"
ArgCount .BS 1
ArgIndex .BS 1
hLIBBLKDEV .BS 1
BlockSize .BS 2
hBuf .BS 1
BlkCnt .BS 1
BlkParams.Ptr .BS 2
BlkParams.Num .BS 2
*--------------------------------------
.DUMMY
.OR 0
DS.START
VolName .BS 16
DevName .BS 4
bCANCEL .BS 1
hDev .BS 5
bLL .BS 1
DS.END
.ED

View File

@ -81,7 +81,7 @@ L.ProDOS.Boot .DA ProDOS.Boot
* PUSHW = DevSize (in 512b blocks)
* ## Out :
* X=BlockCount (max 22)
* A=PageCount (max 44)
* Y,A=BufSize (max $4400)
*\--------------------------------------
GetProDOSCatSize
>PULLAX A=DevSizeLo
@ -250,7 +250,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
inc ZPPtr1+1
bra .7
.88 rts
.88 clc
rts
*/--------------------------------------
*\--------------------------------------
D2TrkRNIB
@ -493,7 +494,38 @@ TrkWriter.Start lda D2ReadMode,x
TrkWriter.Size .EQ *-TrkWriter.Start
.EP
*--------------------------------------
ProDOS.Boot .BS 512
ProDOS.Boot .HS 01 38 b0 03 4c 32 a1 86 43 c9 03 08 8a 29 70 4a
.HS 4a 4a 4a 09 c0 85 49 a0 ff 84 48 28 c8 b1 48 d0
.HS 3a b0 0e a9 03 8d 00 08 e6 3d a5 49 48 a9 5b 48
.HS 60 85 40 85 48 a0 63 b1 48 99 94 09 c8 c0 eb d0
.HS f6 a2 06 bc 1d 09 bd 24 09 99 f2 09 bd 2b 09 9d
.HS 7f 0a ca 10 ee a9 09 85 49 a9 86 a0 00 c9 f9 b0
.HS 2f 85 48 84 60 84 4a 84 4c 84 4e 84 47 c8 84 42
.HS c8 84 46 a9 0c 85 61 85 4b 20 12 09 b0 68 e6 61
.HS e6 61 e6 46 a5 46 c9 06 90 ef ad 00 0c 0d 01 0c
.HS d0 6d a9 04 d0 02 a5 4a 18 6d 23 0c a8 90 0d e6
.HS 4b a5 4b 4a b0 06 c9 0a f0 55 a0 04 84 4a ad 02
.HS 09 29 0f a8 b1 4a d9 02 09 d0 db 88 10 f6 29 f0
.HS c9 20 d0 3b a0 10 b1 4a c9 ff d0 33 c8 b1 4a 85
.HS 46 c8 b1 4a 85 47 a9 00 85 4a a0 1e 84 4b 84 61
.HS c8 84 4d 20 12 09 b0 17 e6 61 e6 61 a4 4e e6 4e
.HS b1 4a 85 46 b1 4c 85 47 11 4a d0 e7 4c 00 20 4c
.HS 3f 09 26 50 52 4f 44 4f 53 20 20 20 20 20 20 20
.HS 20 20 a5 60 85 44 a5 61 85 45 6c 48 00 08 1e 24
.HS 3f 45 47 76 f4 d7 d1 b6 4b b4 ac a6 2b 18 60 4c
.HS bc 09 a9 9f 48 a9 ff 48 a9 01 a2 00 4c 79 f4 20
.HS 58 fc a0 1c b9 50 09 99 ae 05 88 10 f7 4c 4d 09
.HS aa aa aa a0 d5 ce c1 c2 cc c5 a0 d4 cf a0 cc cf
.HS c1 c4 a0 d0 d2 cf c4 cf d3 a0 aa aa aa a5 53 29
.HS 03 2a 05 2b aa bd 80 c0 a9 2c a2 11 ca d0 fd e9
.HS 01 d0 f7 a6 2b 60 a5 46 29 07 c9 04 29 03 08 0a
.HS 28 2a 85 3d a5 47 4a a5 46 6a 4a 4a 85 41 0a 85
.HS 51 a5 45 85 27 a6 2b bd 89 c0 20 bc 09 e6 27 e6
.HS 3d e6 3d b0 03 20 bc 09 bc 88 c0 60 a5 40 0a 85
.HS 53 a9 00 85 54 a5 53 85 50 38 e5 51 f0 14 b0 04
.HS e6 53 90 02 c6 53 38 20 6d 09 a5 50 18 20 6f 09
.HS d0 e3 a0 7f 84 52 08 28 38 c6 52 f0 ce 18 08 88
.HS f0 f5 bd 8c c0 10 fb 00 00 00 00 00 00 00 00 00
*--------------------------------------
VolDirHdr .DA 0 pointer to previous block
.DA 3 pointer to next block

View File

@ -146,6 +146,7 @@ note : '$VAR' does NOT expand Variable
| CAT | Working | -A : Show All non printable caracters | 0.9 |
| | | -N : Number all output lines | |
| | | -S : Suppress repeated empty output lines | |
| FORMAT | In Progress | -L : Low-Level Format | 0.9 |
| EDIT | Working | still missing : find/replace | 0.9 |
| NSCUTIL | Working | Tool for setting time in NSC/DL1216E | 0.9 |
| ---- | ------ | ------- | ----- |

View File

@ -46,7 +46,7 @@ A2osX.PrtDrv.Go.Cmd
*--------------------------------------
A2osX.PrtDrv.GetParam
>STYA ZPDRV Get Ptr To ParamList
jsr A2osX.Blk.GetDev
jsr A2osX.Blk.GetCmdAndDev
ldy #7

View File

@ -89,10 +89,10 @@ A2osX.MLICALL1 stx .1
jsr GO.A2osX
rts
*--------------------------------------
* A2osX.DIIDrv,A2osX.BlkDrv
* A2osX.DIIDrv
* X = DEVMGR.cmd
* Y,A = PTR to Params
* pDev -> Dev Header
* pDev -> Dev Header AUX!!!
* $42 Command Number
* $43 Unit Number
* $44-$45 Buffer Pointer
@ -102,21 +102,25 @@ 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
* .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.RW jsr A2osX.Blk.GetParam
A2osX.DIIDrv.RW >STYA A2osX.Blk.GetParam.1+1
jsr A2osX.Blk.GetCmdAndDevAX
jsr GO.ProDOS
stx $42
sta $43
jsr A2osX.Blk.GetParam
jsr $D000
jsr GO.A2osX
rts
@ -130,35 +134,47 @@ A2osx.DIIStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
.DA #0
.DA #0,#9
*--------------------------------------
* Generic Blk Device
* 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
*--------------------------------------
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
* .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.Blk.GetDev
A2osX.BlkDrv.S jsr A2osX.Blk.GetCmdAndDev
jsr A2osX.BlkDrv.Go
bcs *
bcs .9
stx A2osx.BlkStat+S.DEVSTAT.SIZE
sty A2osx.BlkStat+S.DEVSTAT.SIZE+1
>LDYAI A2osX.BlkStat
clc
rts
.9 rts
*--------------------------------------
A2osX.BlkDrv.RW jsr A2osX.Blk.GetParam
A2osX.BlkDrv.RW >STYA A2osX.Blk.GetParam.1+1
jsr A2osX.Blk.GetCmdAndDev
jsr A2osX.Blk.GetParam
bra A2osX.BlkDrv.Go
*--------------------------------------
A2osX.BlkDrv.F jsr A2osX.Blk.GetDev
A2osX.BlkDrv.F jsr A2osX.Blk.GetCmdAndDev
A2osX.BlkDrv.Go ldy #S.DEV.ROM.JMP
lda (pDev),y
sta .8+1
@ -175,21 +191,23 @@ A2osX.BlkStat .DA #S.DEVSTAT.S.BLOCK+S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
.DA #0,#9
*--------------------------------------
A2osX.Blk.GetParam
>STYA ZPDRV Get Ptr To ParamList
jsr A2osX.Blk.GetDev
ldy #3
.1 lda (ZPDRV),y
A2osX.Blk.GetParam.1
lda $ffff,y Self Modified
sta $44,y
dey
bpl .1
bpl A2osX.Blk.GetParam.1
rts
*--------------------------------------
A2osX.Blk.GetDev
A2osX.Blk.GetCmdAndDev
jsr A2osX.Blk.GetCmdAndDevAX
stx $42
sta $43
rts
A2osX.Blk.GetCmdAndDevAX
txa
asl
sta $42 CMD
lsr
tax CMD
ldy #S.DEV.DEVID Drive 1, or 2
lda (pDev),y
@ -205,8 +223,7 @@ A2osX.Blk.GetDev
asl
asl
plp
ror
sta $43 DSSS0000
ror DSSS0000
rts
*--------------------------------------

View File

@ -98,21 +98,17 @@ A2osX.E0 .EQ *
A2osX.E0.SIZE .EQ *-A2osX.E0
* CONTROL SECTION :
.DO A2osX.GP.SIZE>$1E0
.LIST ON
.DO A2osX.GP.SIZE>$1E0
* !!!!!!!!! ERROR:GP too big !!!!!!!!!!
.LIST OFF
.FIN
.DO A2osX.D1.SIZE>$1000
.LIST ON
* !!!!!!!!! ERROR:BNK1 too big !!!!!!!!
.LIST OFF
.FIN
.DO A2osX.D2.SIZE>$1000
.LIST ON
* !!!!!!!!! ERROR:BNK2 too big !!!!!!!!
.LIST OFF
.FIN
.LIST OFF
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S
ASM

View File

@ -8,7 +8,7 @@
## Out :
+ X=BlockCount (max 22)
+ A=PageCount (max 44)
+ Y,A=BufSize (max $4400)
# BuildProDOSCat