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
lda (pPs),y
beq .99
beq .90
.1 >INC.G ArgIndex
>SYSCALL GetArg.A
bcs .7
bcc .11
jmp .8
>STYA ZPPtr1
.11 >STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
@ -56,20 +57,24 @@ CS.INIT ldy #S.PS.ARGC
ldy #1
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
beq .3
dex
bne .2
.99 >LDYA L.MSG.USAGE
>SYSCALL PrintF.YA
lda #K.E.SYN
sec
rts
.90 bra .99
.3 ldy OptionVars-1,x
lda #$80
@ -99,18 +104,63 @@ CS.INIT ldy #S.PS.ARGC
>PUSHEA.G VolName
>SYSCALL StrCpy
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
ldx #$ff
ldy #VolName-1
.71 inx
.2 inx
iny
lda BLANK,x
sta (pData),y
bne .71
bne .2
lda A2osX.TIMER16
jsr A2CharAX
@ -147,35 +197,7 @@ CS.INIT ldy #S.PS.ARGC
lda #0
sta (pData),y
.8 >LDYA L.LIBBLKDEV
>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
.8 clc
rts
*--------------------------------------
CS.RUN.BuildCat >LDA.G hDev
@ -210,7 +232,8 @@ CS.RUN.BuildCat >LDA.G hDev
>SYSCALL PrintF.YA
.99 bcs .9
>PUSHW.G SizeInBlocks
jsr .7
>LIBCALL hLIBBLKDEV,LIBBLKDEV.GetProDOSCatSize
bcs .9
@ -221,7 +244,7 @@ CS.RUN.BuildCat >LDA.G hDev
pla
ply
>SYSCALL GetMem0.YA BufferSize
>SYSCALL GetMem0.YA BufferSize
bcs .9
phx
@ -229,11 +252,17 @@ CS.RUN.BuildCat >LDA.G hDev
pla
>STA.G hBuf
>PUSHW.G SizeInBlocks
jsr .7
>PUSHEA.G VolName
>PUSHW.G BlkParams.Ptr
>LIBCALL hLIBBLKDEV,LIBBLKDEV.BuildProDOSCat
.9 rts
.7 >PUSHW.G SizeInBlocks
>PUSHB.G CatSize
>PUSHB.G CatOptions
rts
*--------------------------------------
CS.RUN.WriteCat >PUSHB.G hDev
>PUSHBI DEVMGR.WRITEBLOCK
@ -297,7 +326,9 @@ CS.END
OptionList >PSTR "Ll"
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.ERR .AZ "[%h]\r\n"
MSG.INIT .AZ "Formatting %s (%D Blks),Volname:%s..."
@ -314,6 +345,8 @@ bLL .BS 1
VolName .BS 16
hDev .BS 5
SizeInBlocks .BS 2
CatSize .BS 1
CatOptions .BS 1
BlkCnt .BS 1
BlkParams.Ptr .BS 2
BlkParams.Num .BS 2

View File

@ -81,25 +81,26 @@ LIB.UNLOAD clc
* Compute space needed for ProDOS Catalog
* ## In :
* PUSHW = DevSize (in 512b blocks)
* PUSHB = Catalog Size (in blocks)
* PUSHB = Options
* ## Out :
* X=BlockCount (max 22)
* Y,A=BufSize (max $4400)
*\--------------------------------------
GetProDOSCatSize
>PULLA
pha
>PULLA
tax
pla A=DevSizeLo
>PULLB VolDirHdr.Options
>PULLB VolDirHdr.CatSize
>PULLW VolDirHdr.TB
GetProDOSCatSizeAX
GetProDOSCatSize.I
lda VolDirHdr.TB Get DevSizeLo
clc for now, no partial bitmap blk to add
tay DevSize is xxxxxxxx00000000 ?
beq .1
sec
.1 txa Get DevSizeHI
.1 lda VolDirHdr.TB+1 Get DevSizeHI
bit #$0f DevSize is xxxx000000000000 ?
beq .2
sec
@ -110,7 +111,9 @@ GetProDOSCatSizeAX
lsr
lsr
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)
asl A = Total pages needed to build catalog.
rts
@ -118,12 +121,14 @@ GetProDOSCatSizeAX
* # BuildProDOSCat
* ## In :
* PUSHW = DevSize (in 512b blocks)
* PUSHB = Catalog Size (in blocks)
* PUSHB = Options
* PUSHW = VolName (PSTR)
* PUSHW = DstBuf (Zero filled)
* Blk0 : ProDOS.BootBlk
* Blk1 : SOS.BootBlk
* Blk2,3,4,5 : Volume Directory
* Blk6.... : Volume Bitmap (4096/Blk)
* Blk2...n : Volume Directory
* Blkn+1.. : Volume Bitmap (4096/Blk)
* max devSize = 65535 -> max 16 Bitmap Blk
* absolute MAX DstBuf size=
* 7 for Disk II(280blk),3.5(1600),3.5HD(2880)
@ -131,6 +136,12 @@ GetProDOSCatSizeAX
*\--------------------------------------
BuildProDOSCat >PULLW ZPPtr1 DstBuf
>PULLW ZPPtr2 VolName
>PULLB VolDirHdr.Options
>PULLB VolDirHdr.CatSize
inc
inc
sta VolDirHdr.BMPtr
>PULLW VolDirHdr.TB
ldx #3
@ -140,7 +151,8 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
dex
bpl .1
* Boot Code
* Blk 0 : ProDOS Boot Code
>LDYA L.ProDOS.Boot
>STYA ZPPtr3
@ -158,11 +170,28 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
dex
bne .2
inc ZPPtr1+1 Skip Blk 2 (SOS boot code)
* Blk 1 : (SOS boot code)
inc ZPPtr1+1
inc ZPPtr1+1
* Directory Blocks
* Blk 2 : First Directory Block
* 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
beq .31
@ -183,38 +212,32 @@ BuildProDOSCat >PULLW ZPPtr1 DstBuf
dey
bpl .4
inc ZPPtr1+1
inc ZPPtr1+1 Blk 3
* Blk 3...n : additional Directory Blocks
lda #3 Actual Block ID
ldy #2 next blk ptr
.41 inc ZPPtr1+1
inc ZPPtr1+1 Next Block
dex
bmi .40
ldy #2
lda #2
dec Previous Blk ID
sta (ZPPtr1)
lda #4
sta (ZPPtr1),y
inc
inc next blk id
phx
plx
bne .42
txa
inc ZPPtr1+1
inc ZPPtr1+1 Blk 4
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
.42 sta (ZPPtr1),y
bra .41
* BitMap Blocks : 0=Used 1=free
lda VolDirHdr.TB
ldx VolDirHdr.TB+1
jsr GetProDOSCatSizeAX X=blk used for boot/dir/bitmap
.40 jsr GetProDOSCatSize.I X=blk used for boot/dir/bitmap
lda VolDirHdr.TB
eor #$ff
@ -412,15 +435,6 @@ DrvSelect pha
rts
*--------------------------------------
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
* 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 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
* Block 2 : First DIR block
*--------------------------------------
VolDirHdr
VolDirHdr.Prev .BS 2 pointer to previous block
VolDirHdr.Next .BS 2 pointer to next block
VolDirHdr.Name .BS 16
.HS 00.00.00.00.00.00.00.00
VolDirHdr.CT .BS 4 Creation time
.HS 01.00.C3.27.0D version/min version/access/EL/EPB
.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.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
SAVE /A2OSX.SRC/LIB/LIBBLKDEV.S
ASM

View File

@ -234,6 +234,7 @@ note : '$VAR' does NOT expand Variable
| CHGRP | In Progress | -C : Continue On Error | 0.9 |
| | | -R : Recurse subdirectories | |
| 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 |
| EDIT | Working | still missing : find/replace | 0.9.1 |
| NSCUTIL | Working | Tool for setting time in NSC/DL1216E | 0.9 |