X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=source%2Fsrc%2Fvm%2Fx1%2Ffloppy.cpp;h=abd24d29c911396b159f9e749f257d575341d58a;hb=2fc1443c0f411167f1b61ff87e13fee36cd5876b;hp=26feecee7acb67b5531b4b23abe5b2d55e18f845;hpb=bc43b8173603462328ae517d0930c299e79c64b7;p=csp-qt%2Fcommon_source_project-fm7.git diff --git a/source/src/vm/x1/floppy.cpp b/source/src/vm/x1/floppy.cpp index 26feecee7..abd24d29c 100644 --- a/source/src/vm/x1/floppy.cpp +++ b/source/src/vm/x1/floppy.cpp @@ -2,6 +2,7 @@ SHARP X1 Emulator 'eX1' SHARP X1twin Emulator 'eX1twin' SHARP X1turbo Emulator 'eX1turbo' + SHARP X1turboZ Emulator 'eX1turboZ' Author : Takeda.Toshiya Date : 2009.03.14- @@ -18,12 +19,14 @@ #define EVENT_MOTOR_ON 0 #define EVENT_MOTOR_OFF 1 +namespace X1 { + void FLOPPY::reset() { register_id = -1; } -void FLOPPY::write_io8(uint32 addr, uint32 data) +void FLOPPY::write_io8(uint32_t addr, uint32_t data) { switch(addr) { case 0xffc: @@ -55,7 +58,7 @@ void FLOPPY::write_io8(uint32 addr, uint32 data) } #ifdef _X1TURBO_FEATURE -uint32 FLOPPY::read_io8(uint32 addr) +uint32_t FLOPPY::read_io8(uint32_t addr) { switch(addr) { case 0xffc: // FM @@ -69,7 +72,11 @@ uint32 FLOPPY::read_io8(uint32 addr) // d_fdc->set_drive_rpm(prev & 3, 360); return 0xff; case 0xfff: // 2D/2DD - d_fdc->set_drive_type(prev & 3, DRIVE_TYPE_2DD); + if(d_fdc->get_media_type(prev & 3) == MEDIA_TYPE_2DD) { + d_fdc->set_drive_type(prev & 3, DRIVE_TYPE_2DD); + } else { + d_fdc->set_drive_type(prev & 3, DRIVE_TYPE_2D); + } // d_fdc->set_drive_rpm(prev & 3, 300); return 0xff; } @@ -89,29 +96,20 @@ void FLOPPY::event_callback(int event_id, int err) register_id = -1; } -#define STATE_VERSION 1 +#define STATE_VERSION 3 -void FLOPPY::save_state(FILEIO* state_fio) +bool FLOPPY::process_state(FILEIO* state_fio, bool loading) { - state_fio->FputUint32(STATE_VERSION); - state_fio->FputInt32(this_device_id); - - state_fio->FputInt32(prev); - state_fio->FputBool(motor_on); - state_fio->FputInt32(register_id); + if(!state_fio->StateCheckUint32(STATE_VERSION)) { + return false; + } + if(!state_fio->StateCheckInt32(this_device_id)) { + return false; + } + state_fio->StateInt32(prev); + state_fio->StateBool(motor_on); + state_fio->StateInt32(register_id); + return true; } -bool FLOPPY::load_state(FILEIO* state_fio) -{ - if(state_fio->FgetUint32() != STATE_VERSION) { - return false; - } - if(state_fio->FgetInt32() != this_device_id) { - return false; - } - prev = state_fio->FgetInt32(); - motor_on = state_fio->FgetBool(); - register_id = state_fio->FgetInt32(); - return true; } -