Bugfix : flush disk buffer data on initialize

- Fixes disk image corruption issue that was manifesting in testing
    - Out-of-space test(s) now results in a disk image with a correct length byte of 0x20 for the final "JUNK7" file in
      the disk image's VTOC
This commit is contained in:
Aaron Culliney 2015-10-18 11:20:30 -07:00
parent 7a2f919175
commit 41ae0266e2
2 changed files with 16 additions and 15 deletions

View File

@ -461,8 +461,8 @@ static size_t load_track_data(int drive, uint8_t * const out) {
#if CONFORMANT_TRACKS
if (disk6.disk[drive].track_width != NI2_TRACK_SIZE) {
ERRLOG("Invalid dsk image creation...");
expected = 0;
}
expected = 0;
#endif
}
@ -534,6 +534,7 @@ GLUE_C_READ(disk_read_write_byte)
}
if (!disk6.disk[disk6.drive].track_valid) {
assert(!disk6.disk[disk6.drive].track_dirty);
if (!load_track_data(disk6.drive, disk6.disk[disk6.drive].track_image)) {
ERRLOG("OOPS, problem loading track data");
break;
@ -720,6 +721,9 @@ GLUE_C_WRITE(disk_write_latch)
void disk6_init(void) {
disk6_flush(0);
disk6_flush(1);
// load Disk II ROM
memcpy(apple_ii_64k[0] + 0xC600, slot6_rom, 0x100);
@ -844,8 +848,10 @@ const char *disk6_insert(int drive, const char * const raw_file_name, int readon
}
void disk6_flush(int drive) {
if (disk6.disk[drive].track_dirty) {
ERRLOG("FLUSING WHEN DIRTY?!");
LOG("WARNING : flushing previous session for drive (%d)...", drive+1);
save_track_data(disk6.disk[drive].track_image, drive);
}
TEMP_FAILURE_RETRY(fflush(disk6.disk[drive].fp));

View File

@ -628,7 +628,7 @@ TEST test_disk_bytes_savehello_po() {
} while (0)
#define NOSPACE_SHA1 "2EA4D4B9F1C6797E476CD0FE59970CC243263B16"
#define EXPECTED_OOS_DSK_SHA "7A77D1CFD9F02A84E0FE39B7A39FBD4ABF1EB78E"
#define EXPECTED_OOS_DSK_SHA "D5C5A3FFB43F3C55E1C9E4ABD8580322415E9CE0"
TEST test_outofspace_dsk() {
test_setup_boot_disk(BLANK_DSK, 0);
BOOT_TO_DOS();
@ -683,7 +683,7 @@ TEST test_outofspace_dsk() {
PASS();
}
#define EXPECTED_OOS_NIB_SHA "07CEA71514751338996B8EAC9212E5D77813F66A"
#define EXPECTED_OOS_NIB_SHA "8B91A71F6D52E1151D9DB4DB2E2B4B9C2FB5393C"
TEST test_outofspace_nib() {
test_setup_boot_disk(BLANK_NIB, 0);
BOOT_TO_DOS();
@ -738,7 +738,7 @@ TEST test_outofspace_nib() {
PASS();
}
#define EXPECTED_OOS_PO_SHA "32AF41E922E0186590C651DC501B725EC2C520FE"
#define EXPECTED_OOS_PO_SHA "77F0013B9686A26877FD83ECA7E86E55CA3FFC7E"
TEST test_outofspace_po() {
test_setup_boot_disk(BLANK_PO, 0);
BOOT_TO_DOS();
@ -797,10 +797,10 @@ TEST test_outofspace_po() {
#define JUNK_MEM_END_SHA1 "C09B5F8668F061AACEA5765943BD4D743061F701"
#if CONFORMANT_TRACKS
# define EXPECTED_BLOAD_TRACE_DSK_FILE_SIZE 1595253
# define EXPECTED_BLOAD_TRACE_DSK_SHA "8485095E5ED8CEF5D8A177B78A53E3E6A022366D"
# define EXPECTED_BLOAD_TRACE_DSK_SHA "BF8719EE6E4814556957603068C47CC3F78E352C"
#else
# define EXPECTED_BLOAD_TRACE_DSK_FILE_SIZE 1512000
# define EXPECTED_BLOAD_TRACE_DSK_SHA "99B23A0DF5FCAE3ECB494F98ADE938D9FBF9D726"
# define EXPECTED_BLOAD_TRACE_DSK_SHA "F5BE62CEFA89B6B09C0F257D34AD4E0868DA0B4C"
#endif
TEST test_bload_trace_dsk() {
@ -919,7 +919,7 @@ TEST test_bload_trace_dsk() {
}
#define EXPECTED_BLOAD_TRACE_NIB_FILE_SIZE 1664090
#define EXPECTED_BLOAD_TRACE_NIB_SHA "09C6C94B3B7E0EFE13A4C74F72A899CE68A9524F"
#define EXPECTED_BLOAD_TRACE_NIB_SHA "7BDB0624888762D1DA2879E8437B316FEE5D39D6"
TEST test_bload_trace_nib() {
test_setup_boot_disk(BLANK_NIB, 0);
@ -1036,13 +1036,8 @@ TEST test_bload_trace_nib() {
PASS();
}
#if CONFORMANT_TRACKS
# define EXPECTED_BLOAD_TRACE_PO_FILE_SIZE 1595253
# define EXPECTED_BLOAD_TRACE_PO_SHA "8485095E5ED8CEF5D8A177B78A53E3E6A022366D"
#else
# define EXPECTED_BLOAD_TRACE_PO_FILE_SIZE 1512000
# define EXPECTED_BLOAD_TRACE_PO_SHA "99B23A0DF5FCAE3ECB494F98ADE938D9FBF9D726"
#endif
#define EXPECTED_BLOAD_TRACE_PO_FILE_SIZE EXPECTED_BLOAD_TRACE_DSK_FILE_SIZE
#define EXPECTED_BLOAD_TRACE_PO_SHA EXPECTED_BLOAD_TRACE_DSK_SHA
TEST test_bload_trace_po() {
test_setup_boot_disk(BLANK_PO, 0);