From 23bc243a1b477c345a1baceea0dbba68bb5285da Mon Sep 17 00:00:00 2001 From: tudnai Date: Sat, 6 Jun 2020 21:09:00 -0700 Subject: [PATCH] Disk magnet management moved from mmio.h to disk.c --- src/dev/disk/disk.c | 12 ++++++++++++ src/dev/disk/disk.h | 2 ++ src/dev/mem/mmio.h | 17 +++-------------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/dev/disk/disk.c b/src/dev/disk/disk.c index 25dfa48..e334753 100644 --- a/src/dev/disk/disk.c +++ b/src/dev/disk/disk.c @@ -79,6 +79,18 @@ void disk_phase() { } +void disk_phase_on( uint8_t currentMagnet ) { + disk.phase.magnet |= 1 << currentMagnet; + disk_phase(); +} + + +void disk_phase_off( uint8_t currentMagnet ) { + disk.phase.magnet &= ~(1 << currentMagnet); + disk_phase(); +} + + uint8_t disk_read() { dbgPrintf("io_DISK_READ (S%u)\n", 6); disk.clk_last_access = m6502.clktime; diff --git a/src/dev/disk/disk.h b/src/dev/disk/disk.h index 0208c89..5ea4009 100644 --- a/src/dev/disk/disk.h +++ b/src/dev/disk/disk.h @@ -64,6 +64,8 @@ extern int diskAccelerator_speed; //extern const unsigned long long clk_diskAcceleratorTimeout; extern void disk_phase(void); +extern void disk_phase_on( uint8_t currentMagnet ); +extern void disk_phase_off( uint8_t currentMagnet ); extern uint8_t disk_read(void); diff --git a/src/dev/mem/mmio.h b/src/dev/mem/mmio.h index 482c3b0..63cc3c3 100644 --- a/src/dev/mem/mmio.h +++ b/src/dev/mem/mmio.h @@ -549,8 +549,6 @@ INLINE uint8_t ioRead( uint16_t addr ) { // if (outdev) fprintf(outdev, "ioRead:%04X\n", addr); // printf("ioRead:%04X (PC:%04X)\n", addr, m6502.PC); - uint8_t currentMagnet = 0; - // TODO: This is for checking only, should be either removed or the entire ioRead should based on binary search, whatever is faster if ( addr == io_KBD ) { // clk_6502_per_frm_max = clk_6502_per_frm_max > 32768 ? clk_6502_per_frm_max - 32768 : 0; // ECO Mode! @@ -710,24 +708,15 @@ INLINE uint8_t ioRead( uint16_t addr ) { case (uint8_t)io_DISK_PHASE1_OFF + SLOT6: case (uint8_t)io_DISK_PHASE2_OFF + SLOT6: case (uint8_t)io_DISK_PHASE3_OFF + SLOT6: - currentMagnet = (addr - io_DISK_PHASE0_OFF - SLOT6) / 2; - disk.phase.magnet &= ~(1 << currentMagnet); -// printf("io_DISK_PHASE%u_OFF (S%u, ps:%X) ", currentMagnet, 6, disk.phase.magnet); - - disk_phase(); + disk_phase_off( (addr - io_DISK_PHASE0_OFF - SLOT6) / 2 ); return 0; case (uint8_t)io_DISK_PHASE0_ON + SLOT6: case (uint8_t)io_DISK_PHASE1_ON + SLOT6: case (uint8_t)io_DISK_PHASE2_ON + SLOT6: - case (uint8_t)io_DISK_PHASE3_ON + SLOT6: { - currentMagnet = (addr - io_DISK_PHASE0_ON - SLOT6) / 2; - disk.phase.magnet |= 1 << currentMagnet; -// printf("io_DISK_PHASE%u_ON (S%u, ps:%X) ", currentMagnet, 6, disk.phase.magnet); - - disk_phase(); + case (uint8_t)io_DISK_PHASE3_ON + SLOT6: + disk_phase_on( (addr - io_DISK_PHASE0_ON - SLOT6) / 2 ); return 0; - } case (uint8_t)io_DISK_POWER_OFF + SLOT6: dbgPrintf2("io_DISK_POWER_OFF (S%u)\n", 6);