From 4bdabcaa9a2fbbe79ca74e0d95447b4da7665601 Mon Sep 17 00:00:00 2001 From: Aaron Culliney Date: Sat, 1 Oct 2016 13:03:02 -0700 Subject: [PATCH] Optimize disk6 track switch read/write and improve tracing conformance with AppleWin - No need to read/write if only changed to a "half track" - Fixes one small glitch in boot disk tracing --- src/disk.c | 23 ++++++++++++++--------- src/test/testdisk.c | 28 ++++++++++++++-------------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/src/disk.c b/src/disk.c index 0a17c52d..f6464738 100644 --- a/src/disk.c +++ b/src/disk.c @@ -613,20 +613,25 @@ static void _disk6_phaseChange(uint16_t ea) { } if (direction) { - if (disk6.disk[disk6.drive].track_dirty) { - save_track_data(disk6.drive); - } - disk6.disk[disk6.drive].track_valid = false; - disk6.disk[disk6.drive].phase += direction; + int next_phase = cur_phase + direction; - if (disk6.disk[disk6.drive].phase<0) { - disk6.disk[disk6.drive].phase=0; + if (next_phase < 0) { + next_phase = 0; } - if (disk6.disk[disk6.drive].phase>69) { // AppleWin uses 79 (extra tracks/phases)? - disk6.disk[disk6.drive].phase=69; + if (next_phase > 69) { // AppleWin uses 79 (extra tracks/phases)? + next_phase = 69; } + if ((cur_phase >> 1) != (next_phase >> 1)) { + if (disk6.disk[disk6.drive].track_dirty) { + save_track_data(disk6.drive); + } + disk6.disk[disk6.drive].track_valid = false; + } + + disk6.disk[disk6.drive].phase = next_phase; + #if DISK_TRACING if (test_read_fp) { fprintf(test_read_fp, "NEW TRK:%d\n", (disk6.disk[disk6.drive].phase>>1)); diff --git a/src/test/testdisk.c b/src/test/testdisk.c index a488b59a..ae863c6e 100644 --- a/src/test/testdisk.c +++ b/src/test/testdisk.c @@ -40,11 +40,11 @@ static void testdisk_teardown(void *arg) { // Disk TESTS ... #if CONFORMANT_TRACKS -#define EXPECTED_DISK_TRACE_FILE_SIZE 141350 -#define EXPECTED_DISK_TRACE_SHA "471EB3D01917B1C6EF9F13C5C7BC1ACE4E74C851" +#define EXPECTED_DISK_TRACE_FILE_SIZE 141348 +#define EXPECTED_DISK_TRACE_SHA "8E2415BB7F0A113BFE048FFE0C076AD4B377D22E" #else -#define EXPECTED_DISK_TRACE_FILE_SIZE 134292 -#define EXPECTED_DISK_TRACE_SHA "19C10B594055D88862A35A45301B2E37A2E7E9F4" +#define EXPECTED_DISK_TRACE_FILE_SIZE 134290 +#define EXPECTED_DISK_TRACE_SHA "FA47CC59F0CC7E5B1E938FD54A3BD8DB6C930593" #endif TEST test_boot_disk_bytes() { srandom(0); @@ -91,8 +91,8 @@ TEST test_boot_disk_bytes() { PASS(); } -#define EXPECTED_DISK_TRACE_NIB_FILE_SIZE 147368 -#define EXPECTED_DISK_TRACE_NIB_SHA "1716FE7E79068D85F4EEF3CFEB28EAE8D512E592" +#define EXPECTED_DISK_TRACE_NIB_FILE_SIZE 147366 +#define EXPECTED_DISK_TRACE_NIB_SHA "CE61D709A344778AB8A8DACED5A38D0D40F1E645" TEST test_boot_disk_bytes_nib() { test_setup_boot_disk(BLANK_NIB, 0); srandom(0); @@ -140,11 +140,11 @@ TEST test_boot_disk_bytes_nib() { } #if CONFORMANT_TRACKS -#define EXPECTED_DISK_TRACE_PO_FILE_SIZE 141350 -#define EXPECTED_DISK_TRACE_PO_SHA "6C2170D3AA82F87DD34E177309808199BDCCB018" +#define EXPECTED_DISK_TRACE_PO_FILE_SIZE 141348 +#define EXPECTED_DISK_TRACE_PO_SHA "41C382A0A508F9A7935532ECFB7A1B6D53956A8D" #else -#define EXPECTED_DISK_TRACE_PO_FILE_SIZE 134292 -#define EXPECTED_DISK_TRACE_PO_SHA "9A6DDCB421B369A4BB7ACC5E40D24B0F38F98711" +#define EXPECTED_DISK_TRACE_PO_FILE_SIZE 134290 +#define EXPECTED_DISK_TRACE_PO_SHA "E85D7B357B02942772F46332953E59CAB67D85CD" #endif TEST test_boot_disk_bytes_po() { test_setup_boot_disk(BLANK_PO, 0); @@ -325,10 +325,10 @@ TEST test_savehello_po() { #if CONFORMANT_TRACKS # define EXPECTED_DISKWRITE_TRACE_DSK_FILE_SIZE 85915 -# define EXPECTED_DISKWRITE_TRACE_DSK_SHA "727162AD8C2C475BDFE1DEEDAE068215C50A28D1" +# define EXPECTED_DISKWRITE_TRACE_DSK_SHA "05A9043B09605546F2BCFD31CB2E48C779227D95" #else # define EXPECTED_DISKWRITE_TRACE_DSK_FILE_SIZE 85916 -# define EXPECTED_DISKWRITE_TRACE_DSK_SHA "A8956DFE0E6CDFB5A2A838971FB9CAB9DC0913BB" +# define EXPECTED_DISKWRITE_TRACE_DSK_SHA "06E446C69C4C3522BDEF146B56B0414CA945A588" #endif #define EXPECTED_BSAVE_DSK_SHA "4DC3AEB266692EB5F8C757F36963F8CCC8056AE4" TEST test_disk_bytes_savehello_dsk() { @@ -627,10 +627,10 @@ TEST test_disk_bytes_savehello_po() { #define EXPECTED_OOS_DSK_SHA "D5C5A3FFB43F3C55E1C9E4ABD8580322415E9CE0" #if CONFORMANT_TRACKS # define EXPECTED_OOS_DSK_TRACE_FILE_SIZE 4386397 -# define EXPECTED_OOS_DSK_TRACE_SHA "2451ED08296637220614B1DE2C5AE11AB97ED173" +# define EXPECTED_OOS_DSK_TRACE_SHA "FF60D99539047B76B0B441C5907F0FBE3D0B2FCE" #else # define EXPECTED_OOS_DSK_TRACE_FILE_SIZE 4386354 -# define EXPECTED_OOS_DSK_TRACE_SHA "FB1BFF7D1535D30810EED9FD1D98CC054FB6FB1A" +# define EXPECTED_OOS_DSK_TRACE_SHA "1304191D985B3D3E528FB462D2CF3677584CD2C3" #endif TEST test_outofspace_dsk() { test_setup_boot_disk(BLANK_DSK, 0);