From b8e0cf5b29c90efa91f418e220f158e32507689f Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 28 Jul 2021 17:20:00 -0400 Subject: [PATCH] prodos: volume free bitmap printing --- utils/prodos-utils/prodos_volume_bitmap.c | 83 ++++++++++++----------- 1 file changed, 45 insertions(+), 38 deletions(-) diff --git a/utils/prodos-utils/prodos_volume_bitmap.c b/utils/prodos-utils/prodos_volume_bitmap.c index da3f6c15..ba9e874f 100644 --- a/utils/prodos-utils/prodos_volume_bitmap.c +++ b/utils/prodos-utils/prodos_volume_bitmap.c @@ -45,25 +45,20 @@ int prodos_voldir_free_space(struct voldir_t *voldir) { int volblocks; unsigned char temp_block[PRODOS_BYTES_PER_BLOCK]; - unsigned char bitmap[4]; - int i,sectors_free=0; + int i,j,blocks_free=0; volblocks=1+voldir->total_blocks/(PRODOS_BYTES_PER_BLOCK*8); - prodos_read_block(voldir,temp_block,voldir->bit_map_pointer); + for(j=0;jbit_map_pointer); -#if 0 - for(i=0;i>4)&0xf]; - sectors_free+=ones_lookup[bitmap[1]&0xf]; - sectors_free+=ones_lookup[(bitmap[1]>>4)&0xf]; + for(i=0;i>4)&0xf]; + } } -#endif - return sectors_free*PRODOS_BYTES_PER_BLOCK; + + return blocks_free*PRODOS_BYTES_PER_BLOCK; } /* free a sector from the sector bitmap */ @@ -117,34 +112,45 @@ void prodos_voldir_reserve_sector(struct voldir_t *voldir, int track, int sector void prodos_voldir_dump_bitmap(struct voldir_t *voldir) { - int i,j; + int volblocks; + unsigned char temp_block[PRODOS_BYTES_PER_BLOCK]; + int i,j,k; - printf("\nFree sector bitmap:\n"); - printf("\tU=used, .=free\n"); - printf("\tTrack FEDCBA98 76543210\n"); -#if 0 - for(i=0;itotal_blocks/(PRODOS_BYTES_PER_BLOCK*8); + + for(k=0;kbit_map_pointer,k+1,volblocks); + printf("\tU=used, .=free\n"); + printf("\tBlock 01234567 89ABCDEF\n"); + + prodos_read_block(voldir,temp_block,k+voldir->bit_map_pointer); + + for(i=0;i<(512/16);i++) { + printf("\t $%03X: %02X %02X : ",i, + temp_block[(i*2)], + temp_block[(1+i*2)]); + for(j=0;j<8;j++) { + if ((temp_block[i*2]>>(7-j))&0x1) { + printf("."); + } + else { + printf("U"); + } } - else { - printf("U"); + printf(" "); + for(j=0;j<8;j++) { + if ((temp_block[(1+i*2)]>>(7-j))&0x1) { + printf("."); + } + else { + printf("U"); + } } + printf("\n"); } - printf(" "); - for(j=0;j<8;j++) { - if ((vtoc[VTOC_FREE_BITMAPS+(i*4)+1]<