OSDN Git Service

940894d8608677c2b21146b7a47012dc13315b07
[csp-qt/common_source_project-fm7.git] / source / src / vm / n5200 / floppy.cpp
1 /*
2         NEC N5200 Emulator 'eN5200'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.06.11 -
6
7         [ floppy ]
8 */
9
10 #include "../vm.h"
11 #include "../../emu.h"
12 #include "floppy.h"
13 #include "../i8237.h"
14
15 void FLOPPY::reset()
16 {
17         chgreg = 3;
18 }
19
20 void FLOPPY::write_io8(uint32_t addr, uint32_t data)
21 {
22         switch(addr & 0xffff) {
23         case 0x92:
24         case 0xca:
25 //              if(((addr >> 4) ^ chgreg) & 1) {
26 //                      break;
27 //              }
28                 d_fdc->write_io8(1, data);
29                 break;
30         case 0x94:
31         case 0xcc:
32 //              if(((addr >> 4) ^ chgreg) & 1) {
33 //                      break;
34 //              }
35                 if((ctrlreg ^ data) & 0x10) {
36                         // mode chang
37 //                      fdcstatusreset();
38 //                      fdc_dmaready(0);
39 //                      dmac_check();
40                 }
41                 ctrlreg = data;
42                 break;
43         case 0xbe:
44                 chgreg = data;
45                 break;
46         }
47 }
48
49 uint32_t FLOPPY::read_io8(uint32_t addr)
50 {
51         switch(addr & 0xffff) {
52         case 0x90:
53         case 0xc8:
54 //              if(((addr >> 4) ^ chgreg) & 1) {
55 //                      break;
56 //              }
57                 return d_fdc->read_io8(0);
58         case 0x92:
59         case 0xca:
60 //              if(((addr >> 4) ^ chgreg) & 1) {
61 //                      break;
62 //              }
63                 return d_fdc->read_io8(1);
64         case 0x94:
65         case 0xcc:
66 //              if(((addr >> 4) ^ chgreg) & 1) {
67 //                      break;
68 //              }
69                 return (addr & 0x10) ? 0x40 : 0x70;
70         case 0xbe:
71                 return (chgreg & 3) | 8;
72         }
73         return addr & 0xff;
74 }
75
76 void FLOPPY::write_signal(int id, uint32_t data, uint32_t mask)
77 {
78         static const int dma_ids[2] = { SIG_I8237_CH3, SIG_I8237_CH2 };
79         
80         // drq from fdc
81         d_dma->write_signal(dma_ids[chgreg & 1], data, mask);
82 }
83