Skip to content

Commit

Permalink
fixes #4 granule alloc skips fat/dir track
Browse files Browse the repository at this point in the history
  • Loading branch information
mseminatore committed May 8, 2024
1 parent ff8fd4b commit 4530934
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
7 changes: 7 additions & 0 deletions dsk.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,6 +369,13 @@ int dsk_seek_to_granule(DSK_Drive *drv, int granule)
assert(granule >= 0 && granule <= DSK_LAST_GRANULE);

int track = granule / DSK_GRANULES_PER_TRACK;

// skip FAT/DIR track
if (granule >= DSK_DIR_START_GRANULE )
track++;

assert(track != DSK_DIR_TRACK);

int sector = 1 + (granule % DSK_GRANULES_PER_TRACK) * DSK_SECTORS_PER_GRANULE;

return dsk_seek_drive(drv, track, sector);
Expand Down
6 changes: 6 additions & 0 deletions dsk.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#define DSK_FAT_SECTOR 2
#define DSK_DIRECTORY_SECTOR 3
#define DSK_GRANULES_PER_TRACK 2
#define DSK_DIR_START_GRANULE (DSK_DIR_TRACK * DSK_GRANULES_PER_TRACK)
#define DSK_SECTORS_PER_GRANULE (DSK_SECTORS_PER_TRACK / DSK_GRANULES_PER_TRACK)
#define DSK_BYTES_PER_GRANULE (DSK_SECTORS_PER_GRANULE * DSK_BYTES_DATA_PER_SECTOR)
#define DSK_TOTAL_GRANULES ((DSK_NUM_TRACKS - 1) * DSK_GRANULES_PER_TRACK)
Expand Down Expand Up @@ -73,18 +74,21 @@
// offset in DSK to start of track/sector
#define DSK_OFFSET(track, sector) (DSK_TRACK_OFFSET(track) + DSK_SECTOR_OFFSET(sector))

// drive status enum
typedef enum
{
DSK_UNMOUNTED,
DSK_MOUNTED
} DSK_DRIVE_STATUS;

// file modes
typedef enum
{
DSK_MODE_BINARY,
DSK_MODE_ASCII
} DSK_OPEN_MODE;

// DSK file types
typedef enum
{
DSK_TYPE_BASIC,
Expand All @@ -93,11 +97,13 @@ typedef enum
DSK_TYPE_TEXT
} DSK_FILE_TYPE;

// represents a DSK sector
typedef struct
{
char data[DSK_BYTES_DATA_PER_SECTOR];
} DSK_Sector;

// represents a DSK track
typedef struct
{
DSK_Sector sectors[DSK_SECTORS_PER_TRACK];
Expand Down

0 comments on commit 4530934

Please sign in to comment.