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
This commit is contained in:
Aaron Culliney 2016-10-01 13:03:02 -07:00
parent c4e3dccc38
commit 4bdabcaa9a
2 changed files with 28 additions and 23 deletions

View File

@ -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));

View File

@ -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);