2 SHARP MZ-800 Emulator 'EmuZ-800'
3 SHARP MZ-1500 Emulator 'EmuZ-1500'
5 Author : Takeda.Toshiya
12 #include "../mb8877.h"
14 #define EVENT_MOTOR_ON 0
15 #define EVENT_MOTOR_OFF 1
17 void FLOPPY::initialize()
22 // always motor on (temporary)
23 // d_fdc->write_signal(SIG_MB8877_MOTOR, 1, 1);
32 void FLOPPY::write_io8(uint32_t addr, uint32_t data)
38 d_fdc->write_signal(SIG_MB8877_DRIVEREG, data, 3);
41 if(!(prev_dc & 0x80) && (data & 0x80)) {
43 if(register_id != -1) {
44 cancel_event(this, register_id);
48 register_event(this, EVENT_MOTOR_ON, 560000, false, ®ister_id);
50 } else if((prev_dc & 0x80) && !(data & 0x80)) {
52 if(register_id != -1) {
53 cancel_event(this, register_id);
57 register_event(this, EVENT_MOTOR_OFF, 1500000, false, ®ister_id);
64 d_fdc->write_signal(SIG_MB8877_SIDEREG, data, 1);
71 irq_enabled = ((data & 1) != 0);
76 void FLOPPY::event_callback(int event_id, int err)
78 if(event_id == EVENT_MOTOR_ON) {
79 d_fdc->write_signal(SIG_MB8877_MOTOR, 1, 1);
81 } else if(event_id == EVENT_MOTOR_OFF) {
82 d_fdc->write_signal(SIG_MB8877_MOTOR, 0, 0);
88 void FLOPPY::write_signal(int id, uint32_t data, uint32_t mask)
90 if(id == SIG_FLOPPY_DRQ) {
91 if(irq_enabled && (data & mask) != 0) {
92 d_cpu->set_intr_line(true, true, 0);
97 #define STATE_VERSION 1
99 bool FLOPPY::process_state(FILEIO* state_fio, bool loading)
101 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
104 if(!state_fio->StateCheckInt32(this_device_id)) {
107 state_fio->StateUint32(prev_dc);
108 state_fio->StateInt32(register_id);
109 state_fio->StateBool(motor_on);
110 state_fio->StateBool(irq_enabled);