OSDN Git Service

[VM][General][WIP] Start to merge upstream 2018-10-14.Open branch upstream_20181014 .
[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 namespace MULTI8 {
14
15 void FLOPPY::write_io8(uint32_t addr, uint32_t data)
16 {
17         switch(addr & 0xff) {
18         case 0x72:
19                 // data register + dack
20                 d_fdc->write_dma_io8(addr, data);
21                 break;
22         case 0x73:
23                 // motor on/off
24                 d_fdc->write_signal(SIG_UPD765A_MOTOR, data, 1);
25                 break;
26         case 0x74:
27                 // tc on
28                 d_fdc->write_signal(SIG_UPD765A_TC, 1, 1);
29                 break;
30         }
31 }
32
33 uint32_t FLOPPY::read_io8(uint32_t addr)
34 {
35         switch(addr & 0xff) {
36         case 0x72:
37                 // data register + dack
38                 return d_fdc->read_dma_io8(addr);
39         case 0x73:
40                 return drq ? 0xff : 0x7f;
41         }
42         return 0xff;
43 }
44
45 void FLOPPY::write_signal(int id, uint32_t data, uint32_t mask)
46 {
47         drq = ((data & mask) != 0);
48 }
49
50 #define STATE_VERSION   1
51
52 bool FLOPPY::process_state(FILEIO* state_fio, bool loading)
53 {
54         if(!state_fio->StateCheckUint32(STATE_VERSION)) {
55                 return false;
56         }
57         if(!state_fio->StateCheckInt32(this_device_id)) {
58                 return false;
59         }
60         state_fio->StateValue(drq);
61         return true;
62 }
63
64 }