OSDN Git Service

[General] Convert sourcecode's CRLF format: DOS(WINDOWS) to Unix, to apply patches...
[csp-qt/common_source_project-fm7.git] / source / src / vm / j3100 / floppy.cpp
1 /*
2         TOSHIBA J-3100GT Emulator 'eJ-3100GT'
3         TOSHIBA J-3100SL Emulator 'eJ-3100SL'
4
5         Author : Takeda.Toshiya
6         Date   : 2011.08.16-
7
8         [ diskette i/f ]
9 */
10
11 #include "floppy.h"
12 #include "../disk.h"
13 #include "../upd765a.h"
14
15 void FLOPPY::initialize()
16 {
17         ctrl_reg = 0;
18 }
19
20 void FLOPPY::reset()
21 {
22         for(int i = 0; i < 4; i++) {
23                 d_fdc->set_drive_type(i, DRIVE_TYPE_2HD);
24         }
25 }
26
27 void FLOPPY::write_io8(uint32 addr, uint32 data)
28 {
29         switch(addr) {
30         case 0x3f2:
31                 // bit0-1: select drive
32                 d_fdc->write_signal(SIG_UPD765A_DRVSEL, data, 3);
33                 // bit3: reset fdc
34                 if((ctrl_reg & 4) && !(data & 4)) {
35                         d_fdc->reset();
36                 }
37                 // bit3: enable irq/drq
38                 d_fdc->write_signal(SIG_UPD765A_IRQ_MASK, !data, 8);
39                 d_fdc->write_signal(SIG_UPD765A_DRQ_MASK, !data, 8);
40                 // bit4: fdd #a motor
41                 // bit5: fdd #b motor
42                 ctrl_reg = data;
43                 break;
44         case 0x3f7:
45                 switch(data & 3) {
46                 case 0: // 500kbps (2hd)
47                         d_fdc->set_drive_type(ctrl_reg & 3, DRIVE_TYPE_2HD);
48                         break;
49                 case 1: // 300kbps (2dd)
50                 case 2: // 250kbps (2dd)
51                         d_fdc->set_drive_type(ctrl_reg & 3, DRIVE_TYPE_2DD);
52                         break;
53                 }
54                 break;
55         }
56 }
57
58 uint32 FLOPPY::read_io8(uint32 addr)
59 {
60         switch(addr) {
61         case 0x3f7:
62                 // bit7: 1=ejected
63                 return d_fdc->disk_ejected(ctrl_reg & 3) ? 0x8f : 0x0f;
64         }
65         return 0xff;
66 }
67