Kernel 0.9.1 : FORMAT, Added cmd line switch to specify catalog size in block.

allow saving 3 blocks (1,5k) on 5.25 floppies.
This commit is contained in:
Rémy GIBERT 2018-04-19 13:06:21 +01:00
parent df9f1d6ac0
commit 34d6dbf42a
6 changed files with 163 additions and 99 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -41,14 +41,15 @@ L.MSG.ERR .DA MSG.ERR
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.ARGC CS.INIT ldy #S.PS.ARGC
lda (pPs),y lda (pPs),y
beq .99 beq .90
.1 >INC.G ArgIndex .1 >INC.G ArgIndex
>SYSCALL GetArg.A >SYSCALL GetArg.A
bcs .7 bcc .11
jmp .8
>STYA ZPPtr1 .11 >STYA ZPPtr1
lda (ZPPtr1) lda (ZPPtr1)
cmp #'-' cmp #'-'
@ -56,20 +57,24 @@ CS.INIT ldy #S.PS.ARGC
ldy #1 ldy #1
lda (ZPPtr1),y lda (ZPPtr1),y
beq .99 beq .90
ldx OptionList cmp #'0'
bcc .20
cmp #'9'+1
bcs .20
and #$0F
>STA.G CatSize
bra .1
.20 ldx OptionList
.2 cmp OptionList,x .2 cmp OptionList,x
beq .3 beq .3
dex dex
bne .2 bne .2
.90 bra .99
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintF.YA
lda #K.E.SYN
sec
rts
.3 ldy OptionVars-1,x .3 ldy OptionVars-1,x
lda #$80 lda #$80
@ -99,18 +104,63 @@ CS.INIT ldy #S.PS.ARGC
>PUSHEA.G VolName >PUSHEA.G VolName
>SYSCALL StrCpy >SYSCALL StrCpy
jmp .1 success, scan for any other args jmp .1 success, scan for any other args
.8 >LDYA L.LIBBLKDEV
>SYSCALL LoadLib.YA
sta hLIBBLKDEV
.7 >LDA.G VolName * lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc
rts
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintF.YA
lda #K.E.SYN
sec
rts
*--------------------------------------
CS.RUN jsr CS.RUN.InitCat
bcs .9
jsr CS.RUN.BuildCat
bcs .9
jsr CS.RUN.WriteCat
bcs .9
>LDYA L.MSG.OK
>SYSCALL PrintF.YA
lda #0
sec
rts
.9 pha
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL PrintF.YA
pla
sec
rts
*--------------------------------------
CS.RUN.InitCat >LDA.G CatSize
bne .1
lda #4
sta (pData),y
.1 >LDA.G VolName
bne .8 Volume name ok bne .8 Volume name ok
ldx #$ff ldx #$ff
ldy #VolName-1 ldy #VolName-1
.71 inx .2 inx
iny iny
lda BLANK,x lda BLANK,x
sta (pData),y sta (pData),y
bne .71 bne .2
lda A2osX.TIMER16 lda A2osX.TIMER16
jsr A2CharAX jsr A2CharAX
@ -147,35 +197,7 @@ CS.INIT ldy #S.PS.ARGC
lda #0 lda #0
sta (pData),y sta (pData),y
.8 >LDYA L.LIBBLKDEV .8 clc
>SYSCALL LoadLib.YA
sta hLIBBLKDEV
* lda (pPs)
* ora #S.PS.F.EVENT Now accept events
* sta (pPs)
clc
rts
*--------------------------------------
CS.RUN jsr CS.RUN.BuildCat
bcs .9
jsr CS.RUN.WriteCat
bcs .9
>LDYA L.MSG.OK
>SYSCALL PrintF.YA
lda #0
sec
rts
.9 pha
>PUSHA
>LDYA L.MSG.ERR
>SYSCALL PrintF.YA
pla
sec
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.BuildCat >LDA.G hDev CS.RUN.BuildCat >LDA.G hDev
@ -210,7 +232,8 @@ CS.RUN.BuildCat >LDA.G hDev
>SYSCALL PrintF.YA >SYSCALL PrintF.YA
.99 bcs .9 .99 bcs .9
>PUSHW.G SizeInBlocks jsr .7
>LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize >LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize
bcs .9 bcs .9
@ -221,7 +244,7 @@ CS.RUN.BuildCat >LDA.G hDev
pla pla
ply ply
>SYSCALL GetMem0.YA BufferSize >SYSCALL GetMem0.YA BufferSize
bcs .9 bcs .9
phx phx
@ -229,11 +252,17 @@ CS.RUN.BuildCat >LDA.G hDev
pla pla
>STA.G hBuf >STA.G hBuf
>PUSHW.G SizeInBlocks jsr .7
>PUSHEA.G VolName >PUSHEA.G VolName
>PUSHW.G BlkParams.Ptr >PUSHW.G BlkParams.Ptr
>LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat >LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat
.9 rts .9 rts
.7 >PUSHW.G SizeInBlocks
>PUSHB.G CatSize
>PUSHB.G CatOptions
rts
*-------------------------------------- *--------------------------------------
CS.RUN.WriteCat >PUSHB.G hDev CS.RUN.WriteCat >PUSHB.G hDev
>PUSHBI DEVMGR.WRITEBLOCK >PUSHBI DEVMGR.WRITEBLOCK
@ -297,7 +326,9 @@ CS.END
OptionList >PSTR "Ll" OptionList >PSTR "Ll"
OptionVars .DA #bLL,#bLL OptionVars .DA #bLL,#bLL
*-------------------------------------- *--------------------------------------
MSG.USAGE .AZ "Usage : FORMAT <BLOCKDEV> [VOLUME.NAME]\r\n -L : Low-Level Format\r\n" MSG.USAGE .AS "Usage : FORMAT <BLOCKDEV> [VOLUME.NAME]\r\n"
.AS " -L : Low-Level Format\r\n"
.AZ " -1-9 : Catalog Size (Blocks)\r\n"
MSG.OK .AZ "[OK]\r\n" MSG.OK .AZ "[OK]\r\n"
MSG.ERR .AZ "[%h]\r\n" MSG.ERR .AZ "[%h]\r\n"
MSG.INIT .AZ "Formatting %s (%D Blks),Volname:%s..." MSG.INIT .AZ "Formatting %s (%D Blks),Volname:%s..."
@ -314,6 +345,8 @@ bLL .BS 1
VolName .BS 16 VolName .BS 16
hDev .BS 5 hDev .BS 5
SizeInBlocks .BS 2 SizeInBlocks .BS 2
CatSize .BS 1
CatOptions .BS 1
BlkCnt .BS 1 BlkCnt .BS 1
BlkParams.Ptr .BS 2 BlkParams.Ptr .BS 2
BlkParams.Num .BS 2 BlkParams.Num .BS 2

View File

@ -81,25 +81,26 @@ LIB.UNLOAD clc
* Compute space needed for ProDOS Catalog * Compute space needed for ProDOS Catalog
* ## In : * ## In :
* PUSHW = DevSize (in 512b blocks) * PUSHW = DevSize (in 512b blocks)
* PUSHB = Catalog Size (in blocks)
* PUSHB = Options
* ## Out : * ## Out :
* X=BlockCount (max 22) * X=BlockCount (max 22)
* Y,A=BufSize (max $4400) * Y,A=BufSize (max $4400)
*\-------------------------------------- *\--------------------------------------
GetProDOSCatSize GetProDOSCatSize
>PULLA >PULLB VolDirHdr.Options
pha >PULLB VolDirHdr.CatSize
>PULLA >PULLW VolDirHdr.TB
tax
pla A=DevSizeLo
GetProDOSCatSizeAX GetProDOSCatSize.I
lda VolDirHdr.TB Get DevSizeLo
clc for now, no partial bitmap blk to add clc for now, no partial bitmap blk to add
tay DevSize is xxxxxxxx00000000 ? tay DevSize is xxxxxxxx00000000 ?
beq .1 beq .1
sec sec
.1 txa Get DevSizeHI .1 lda VolDirHdr.TB+1 Get DevSizeHI
bit #$0f DevSize is xxxx000000000000 ? bit #$0f DevSize is xxxx000000000000 ?
beq .2 beq .2
sec sec
@ -110,7 +111,9 @@ GetProDOSCatSizeAX
lsr lsr
lsr lsr
plp plp
adc #6 at least, 1(ProDOS)+1(SOS)+4(VolDir) inc +1 (ProDOS)
inc +1 (SOS)
adc VolDirHdr.CatSize +x (VolDir)
tax X = Total blocks needed for header (used) tax X = Total blocks needed for header (used)
asl A = Total pages needed to build catalog. asl A = Total pages needed to build catalog.
rts rts
@ -118,12 +121,14 @@ GetProDOSCatSizeAX
* # BuildProDOSCat * # BuildProDOSCat
* ## In : * ## In :
* PUSHW = DevSize (in 512b blocks) * PUSHW = DevSize (in 512b blocks)
* PUSHB = Catalog Size (in blocks)
* PUSHB = Options
* PUSHW = VolName (PSTR) * PUSHW = VolName (PSTR)
* PUSHW = DstBuf (Zero filled) * PUSHW = DstBuf (Zero filled)
* Blk0 : ProDOS.BootBlk * Blk0 : ProDOS.BootBlk
* Blk1 : SOS.BootBlk * Blk1 : SOS.BootBlk
* Blk2,3,4,5 : Volume Directory * Blk2...n : Volume Directory
* Blk6.... : Volume Bitmap (4096/Blk) * Blkn+1.. : Volume Bitmap (4096/Blk)
* max devSize = 65535 -> max 16 Bitmap Blk * max devSize = 65535 -> max 16 Bitmap Blk
* absolute MAX DstBuf size= * absolute MAX DstBuf size=
* 7 for Disk II(280blk),3.5(1600),3.5HD(2880) * 7 for Disk II(280blk),3.5(1600),3.5HD(2880)
@ -131,6 +136,12 @@ GetProDOSCatSizeAX
*\-------------------------------------- *\--------------------------------------
BuildProDOSCat >PULLW ZPPtr1 DstBuf BuildProDOSCat >PULLW ZPPtr1 DstBuf
>PULLW ZPPtr2 VolName >PULLW ZPPtr2 VolName
>PULLB VolDirHdr.Options
>PULLB VolDirHdr.CatSize
inc
inc
sta VolDirHdr.BMPtr
>PULLW VolDirHdr.TB >PULLW VolDirHdr.TB
ldx #3 ldx #3
@ -140,7 +151,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
dex dex
bpl .1 bpl .1
* Boot Code * Blk 0 : ProDOS Boot Code
>LDYA L.ProDOS.Boot >LDYA L.ProDOS.Boot
>STYA ZPPtr3 >STYA ZPPtr3
@ -158,11 +170,28 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
dex dex
bne .2 bne .2
inc ZPPtr1+1 Skip Blk 2 (SOS boot code) * Blk 1 : (SOS boot code)
inc ZPPtr1+1
inc ZPPtr1+1 inc ZPPtr1+1
* Directory Blocks * Blk 2 : First Directory Block
* ldy #0 * ldy #0
stz VolDirHdr.Prev
* stz VolDirHdr.Prev+1 always 0
lda #3 next block
ldx VolDirHdr.CatSize
dex
bne .30
txa
.30 sta VolDirHdr.next
* stz VolDirHdr.next+1
.3 lda (ZPPtr2),y .3 lda (ZPPtr2),y
beq .31 beq .31
@ -183,38 +212,32 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
dey dey
bpl .4 bpl .4
inc ZPPtr1+1 * Blk 3...n : additional Directory Blocks
inc ZPPtr1+1 Blk 3
lda #3 Actual Block ID
ldy #2 next blk ptr
.41 inc ZPPtr1+1
inc ZPPtr1+1 Next Block
dex
bmi .40
ldy #2 dec Previous Blk ID
lda #2
sta (ZPPtr1) sta (ZPPtr1)
lda #4 inc
sta (ZPPtr1),y inc next blk id
phx
plx
bne .42
txa
inc ZPPtr1+1 .42 sta (ZPPtr1),y
inc ZPPtr1+1 Blk 4 bra .41
lda #3
sta (ZPPtr1)
lda #5
sta (ZPPtr1),y
inc ZPPtr1+1
inc ZPPtr1+1 Blk 5
lda #4
sta (ZPPtr1)
inc ZPPtr1+1
inc ZPPtr1+1 Blk 6
* BitMap Blocks : 0=Used 1=free * BitMap Blocks : 0=Used 1=free
lda VolDirHdr.TB .40 jsr GetProDOSCatSize.I X=blk used for boot/dir/bitmap
ldx VolDirHdr.TB+1
jsr GetProDOSCatSizeAX X=blk used for boot/dir/bitmap
lda VolDirHdr.TB lda VolDirHdr.TB
eor #$ff eor #$ff
@ -412,15 +435,6 @@ DrvSelect pha
rts rts
*-------------------------------------- *--------------------------------------
CS.END CS.END
DiskII.OFS .HS 010305FF
DiskII.SIG .HS 20000300
DrvSlt .BS 1
TrkNum .BS 1
*--------------------------------------
Status .BS 1
DrvSltInUse .BS 1
Count .BS 2
*-------------------------------------- *--------------------------------------
* TrkWriter * TrkWriter
* X = Slot Cn * X = Slot Cn
@ -527,17 +541,33 @@ ProDOS.Boot .HS 01.38.b0.03.4c.32.a1.86.43.c9.03.08.8a.29.70.4a
.HS d0.e3.a0.7f.84.52.08.28.38.c6.52.f0.ce.18.08.88 .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 .HS f0.f5.bd.8c.c0.10.fb.00.00.00.00.00.00.00.00.00
*-------------------------------------- *--------------------------------------
VolDirHdr .DA 0 pointer to previous block * Block 2 : First DIR block
.DA 3 pointer to next block *--------------------------------------
VolDirHdr
VolDirHdr.Prev .BS 2 pointer to previous block
VolDirHdr.Next .BS 2 pointer to next block
VolDirHdr.Name .BS 16 VolDirHdr.Name .BS 16
.HS 00.00.00.00.00.00.00.00 .HS 00.00.00.00.00.00.00.00
VolDirHdr.CT .BS 4 Creation time VolDirHdr.CT .BS 4 Creation time
.HS 01.00.C3.27.0D version/min version/access/EL/EPB .HS 01.00.C3.27.0D version/min version/access/EL/EPB
.DA 0 File Count=0 (only VDH) .DA 0 File Count=0 (only VDH)
.DA 6 bitmap pointer (Block 2..5 are Volume directory) VolDirHdr.BMPtr .BS 2 bitmap pointer (Block 2..n are Volume directory)
VolDirHdr.TB .BS 2 Total Blocks VolDirHdr.TB .BS 2 Total Blocks
VolDirHdr.size .EQ *-VolDirHdr VolDirHdr.size .EQ *-VolDirHdr
*-------------------------------------- *--------------------------------------
VolDirHdr.Options .BS 1
VolDirHdr.CatSize .BS 1
*--------------------------------------
DiskII.OFS .HS 010305FF
DiskII.SIG .HS 20000300
DrvSlt .BS 1
TrkNum .BS 1
*--------------------------------------
Status .BS 1
DrvSltInUse .BS 1
Count .BS 2
*--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/LIB/LIBBLKDEV.S SAVE /A2OSX.SRC/LIB/LIBBLKDEV.S
ASM ASM

View File

@ -234,6 +234,7 @@ note : '$VAR' does NOT expand Variable
| CHGRP | In Progress | -C : Continue On Error | 0.9 | | CHGRP | In Progress | -C : Continue On Error | 0.9 |
| | | -R : Recurse subdirectories | | | | | -R : Recurse subdirectories | |
| FORMAT | In Progress | -L : Low-Level Format | 0.9.1 | | FORMAT | In Progress | -L : Low-Level Format | 0.9.1 |
| | | -1..9 : Catalog Size (block count) | |
| MD5 | In Progress | -D : String Input | 0.9.1 | | MD5 | In Progress | -D : String Input | 0.9.1 |
| EDIT | Working | still missing : find/replace | 0.9.1 | | EDIT | Working | still missing : find/replace | 0.9.1 |
| NSCUTIL | Working | Tool for setting time in NSC/DL1216E | 0.9 | | NSCUTIL | Working | Tool for setting time in NSC/DL1216E | 0.9 |