OSDN Git Service

c68c89820988bfb788d649baa9e630cd151f0236
[csp-qt/common_source_project-fm7.git] / source / src / vm / multi8 / floppy.cpp
1 /*
2         MITSUBISHI Electric MULTI8 Emulator 'EmuLTI8'
3
4         Author : Takeda.Toshiya
5         Date   : 2006.09.17 -
6
7         [ floppy ]
8 */
9
10 #include "floppy.h"
11 #include "../upd765a.h"
12
13 void FLOPPY::write_io8(uint32_t addr, uint32_t data)
14 {
15         switch(addr & 0xff) {
16         case 0x72:
17                 // data register + dack
18                 d_fdc->write_dma_io8(addr, data);
19                 break;
20         case 0x73:
21                 // motor on/off
22                 d_fdc->write_signal(SIG_UPD765A_MOTOR, data, 1);
23                 break;
24         case 0x74:
25                 // tc on
26                 d_fdc->write_signal(SIG_UPD765A_TC, 1, 1);
27                 break;
28         }
29 }
30
31 uint32_t FLOPPY::read_io8(uint32_t addr)
32 {
33         switch(addr & 0xff) {
34         case 0x72:
35                 // data register + dack
36                 return d_fdc->read_dma_io8(addr);
37         case 0x73:
38                 return drq ? 0xff : 0x7f;
39         }
40         return 0xff;
41 }
42
43 void FLOPPY::write_signal(int id, uint32_t data, uint32_t mask)
44 {
45         drq = ((data & mask) != 0);
46 }
47
48 #define STATE_VERSION   1
49
50 #include "../../statesub.h"
51
52 void FLOPPY::decl_state()
53 {
54         enter_decl_state(STATE_VERSION);
55
56         DECL_STATE_ENTRY_BOOL(drq);
57         
58         leave_decl_state();
59 }
60 void FLOPPY::save_state(FILEIO* state_fio)
61 {
62         if(state_entry != NULL) {
63                 state_entry->save_state(state_fio);
64         }
65 //      state_fio->FputUint32(STATE_VERSION);
66 //      state_fio->FputInt32(this_device_id);
67         
68 //      state_fio->FputBool(drq);
69 }
70
71 bool FLOPPY::load_state(FILEIO* state_fio)
72 {
73         bool mb = false;
74         if(state_entry != NULL) {
75                 mb = state_entry->load_state(state_fio);
76         }
77         if(!mb) {
78                 return false;
79         }
80 //      if(state_fio->FgetUint32() != STATE_VERSION) {
81 //              return false;
82 //      }
83 //      if(state_fio->FgetInt32() != this_device_id) {
84 //              return false;
85 //      }
86 //      drq = state_fio->FgetBool();
87         return true;
88 }
89
90 bool FLOPPY::process_state(FILEIO* state_fio, bool loading)
91 {
92         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
93                 return false;
94         }
95         if(!state_fio->StateCheckInt32(this_device_id)) {
96                 return false;
97         }
98         state_fio->StateBool(drq);
99         return true;
100 }