diff --git a/src/disk.c b/src/disk.c index dcc58c1f..d20c2317 100644 --- a/src/disk.c +++ b/src/disk.c @@ -502,13 +502,13 @@ GLUE_C_READ(disk_read_write_byte) disk6.disk[disk6.drive].track_dirty = true; } else { - if (disk6.motor) { // ??? - if (disk6.motor > 99) { + if (disk6.motor_off) { // ??? + if (disk6.motor_off > 99) { ERRLOG("OOPS, potential disk motor issue"); value = 0x00; break; } else { - disk6.motor++; + disk6.motor_off++; } } @@ -608,13 +608,15 @@ GLUE_C_READ(disk_read_phase) GLUE_C_READ(disk_read_motor_off) { - disk6.motor = 1; + clock_gettime(CLOCK_MONOTONIC, &disk6.motor_time); + disk6.motor_off = 1; return floating_bus_hibit(1, cpu65_cycle_count); } GLUE_C_READ(disk_read_motor_on) { - disk6.motor = 0; + clock_gettime(CLOCK_MONOTONIC, &disk6.motor_time); + disk6.motor_off = 0; return floating_bus_hibit(1, cpu65_cycle_count); } @@ -705,8 +707,9 @@ void disk_io_initialize(unsigned int slot) { void c_init_6(void) { disk6.disk[0].phase = disk6.disk[1].phase = 0; disk6.disk[0].track_valid = disk6.disk[1].track_valid = 0; - disk6.motor = 1; /* motor on */ - disk6.drive = 0; /* first drive active */ + disk6.motor_time = (struct timespec){ 0 }; + disk6.motor_off = 1; + disk6.drive = 0; disk6.ddrw = 0; } diff --git a/src/disk.h b/src/disk.h index a256a7d6..58f16de8 100644 --- a/src/disk.h +++ b/src/disk.h @@ -51,7 +51,8 @@ typedef struct diskette_t { } diskette_t; typedef struct drive_t { - int motor; + struct timespec motor_time; + int motor_off; int drive; int ddrw; int disk_byte; diff --git a/src/meta/debugger.c b/src/meta/debugger.c index 8e0c0de8..bad6c412 100644 --- a/src/meta/debugger.c +++ b/src/meta/debugger.c @@ -1019,7 +1019,7 @@ void show_disk_info() { /* generic information */ sprintf(second_buf[i++], "drive %s", (disk6.drive) ? "B" : "A"); - sprintf(second_buf[i++], "motor %s", (disk6.motor) ? "off" : "on"); + sprintf(second_buf[i++], "motor %s", (disk6.motor_off) ? "off" : "on"); sprintf(second_buf[i++], "%s", (disk6.ddrw) ? "write" : "read"); sprintf(second_buf[i++], "byte = %02X", disk6.disk_byte); if (!disk6.disk[disk6.drive].nibblized)