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
19 void FLOPPY::initialize()
24 // always motor on (temporary)
25 // d_fdc->write_signal(SIG_MB8877_MOTOR, 1, 1);
34 void FLOPPY::write_io8(uint32_t addr, uint32_t data)
40 d_fdc->write_signal(SIG_MB8877_DRIVEREG, data, 3);
43 if(!(prev_dc & 0x80) && (data & 0x80)) {
45 if(register_id != -1) {
46 cancel_event(this, register_id);
50 register_event(this, EVENT_MOTOR_ON, 560000, false, ®ister_id);
52 } else if((prev_dc & 0x80) && !(data & 0x80)) {
54 if(register_id != -1) {
55 cancel_event(this, register_id);
59 register_event(this, EVENT_MOTOR_OFF, 1500000, false, ®ister_id);
66 d_fdc->write_signal(SIG_MB8877_SIDEREG, data, 1);
73 irq_enabled = ((data & 1) != 0);
78 void FLOPPY::event_callback(int event_id, int err)
80 if(event_id == EVENT_MOTOR_ON) {
81 d_fdc->write_signal(SIG_MB8877_MOTOR, 1, 1);
83 } else if(event_id == EVENT_MOTOR_OFF) {
84 d_fdc->write_signal(SIG_MB8877_MOTOR, 0, 0);
90 void FLOPPY::write_signal(int id, uint32_t data, uint32_t mask)
92 if(id == SIG_FLOPPY_DRQ) {
93 if(irq_enabled && (data & mask) != 0) {
94 d_cpu->set_intr_line(true, true, 0);
99 #define STATE_VERSION 1
101 bool FLOPPY::process_state(FILEIO* state_fio, bool loading)
103 if(!state_fio->StateCheckUint32(STATE_VERSION)) {
106 if(!state_fio->StateCheckInt32(this_device_id)) {
109 state_fio->StateUint32(prev_dc);
110 state_fio->StateInt32(register_id);
111 state_fio->StateBool(motor_on);
112 state_fio->StateBool(irq_enabled);