@@ -137,30 +137,6 @@ bool pc9801_state::fdc_drive_ready_r(upd765a_device *fdc)
137137 return (!floppy0->ready_r () || !floppy1->ready_r ());
138138}
139139
140- uint8_t pc9801_state::fdc_2dd_ctrl_r ()
141- {
142- u8 ret = 0 ;
143-
144- // 2dd BIOS specifically tests if a disk is in any drive
145- // (does not happen on 2HD standalone)
146- ret |= fdc_drive_ready_r (m_fdc_2dd) << 4 ;
147-
148- // popmessage("%d %d %02x", floppy0->ready_r(), floppy1->ready_r(), ret);
149-
150- // TODO: dips et al.
151- return ret | 0x40 ;
152- }
153-
154- void pc9801_state::fdc_2dd_ctrl_w (uint8_t data)
155- {
156- logerror (" %02x ctrl\n " ,data);
157- m_fdc_2dd->reset_w (BIT (data, 7 ));
158-
159- m_fdc_2dd_ctrl = data;
160- m_fdc_2dd->subdevice <floppy_connector>(" 0" )->get_device ()->mon_w (data & 8 ? CLEAR_LINE : ASSERT_LINE);
161- m_fdc_2dd->subdevice <floppy_connector>(" 1" )->get_device ()->mon_w (data & 8 ? CLEAR_LINE : ASSERT_LINE);
162- }
163-
164140u8 pc9801vm_state::ide_ctrl_hack_r ()
165141{
166142 if (!machine ().side_effects_disabled ())
@@ -258,8 +234,8 @@ void pc9801_state::pc9801_io(address_map &map)
258234 map (0x0092 , 0x0092 ).rw (m_fdc_2hd, FUNC (upd765a_device::fifo_r), FUNC (upd765a_device::fifo_w));
259235 map (0x0094 , 0x0094 ).rw (FUNC (pc9801_state::fdc_2hd_ctrl_r), FUNC (pc9801_state::fdc_2hd_ctrl_w));
260236 map (0x00a0 , 0x00af ).rw (FUNC (pc9801_state::pc9801_a0_r), FUNC (pc9801_state::pc9801_a0_w)); // upd7220 bitmap ports / display registers
261- map (0x00c8 , 0x00cb ).m (m_fdc_2dd, FUNC (upd765a_device::map)).umask16 (0x00ff );
262- map (0x00cc , 0x00cc ).rw (FUNC (pc9801_state::fdc_2dd_ctrl_r), FUNC (pc9801_state::fdc_2dd_ctrl_w)); // upd765a 2dd / <undefined>
237+ // map(0x00c8, 0x00cb).m(m_fdc_2dd, FUNC(upd765a_device::map)).umask16(0x00ff);
238+ // map(0x00cc, 0x00cc).rw(FUNC(pc9801_state::fdc_2dd_ctrl_r), FUNC(pc9801_state::fdc_2dd_ctrl_w)); //upd765a 2dd / <undefined>
263239}
264240
265241/* ************************************
@@ -1223,8 +1199,10 @@ void pc9801_state::tc_w(int state)
12231199 case 2 :
12241200 case 3 :
12251201 m_fdc_2hd->tc_w (state);
1226- if (m_fdc_2dd)
1227- m_fdc_2dd->tc_w (state);
1202+ if (m_dack == 3 )
1203+ m_cbus_root->eop_w (3 , state);
1204+ // if(m_fdc_2dd)
1205+ // m_fdc_2dd->tc_w(state);
12281206 break ;
12291207 }
12301208
@@ -1629,18 +1607,6 @@ static void pc9801_floppies(device_slot_interface &device)
16291607 device.option_add (" 35hd" , FLOPPY_35_HD);
16301608}
16311609
1632- void pc9801_state::fdc_2dd_irq (int state)
1633- {
1634- logerror (" IRQ 2DD %d\n " ,state);
1635-
1636- // TODO: does this mask applies to the specific timer irq trigger only?
1637- // (bit 0 of control)
1638- if (m_fdc_2dd_ctrl & 8 )
1639- {
1640- m_pic2->ir2_w (state);
1641- }
1642- }
1643-
16441610void pc9801vm_state::fdc_irq_w (int state)
16451611{
16461612 if (m_fdc_mode & 1 )
@@ -1688,8 +1654,7 @@ MACHINE_START_MEMBER(pc9801_state,pc9801f)
16881654 MACHINE_START_CALL_MEMBER (pc9801_common);
16891655
16901656 m_fdc_2hd->set_rate (500000 );
1691- m_fdc_2dd->set_rate (250000 );
1692- // TODO: set_rpm for m_fdc_2dd?
1657+
16931658 m_sys_type = 0x00 >> 6 ;
16941659}
16951660
@@ -1903,10 +1868,12 @@ void pc9801_state::pc9801_cbus(machine_config &config)
19031868 m_cbus_root->int_cb <1 >().set (" pic8259_master" , FUNC (pic8259_device::ir5_w));
19041869 m_cbus_root->int_cb <2 >().set (" pic8259_master" , FUNC (pic8259_device::ir6_w));
19051870 m_cbus_root->int_cb <3 >().set (" pic8259_slave" , FUNC (pic8259_device::ir1_w));
1906- m_cbus_root->int_cb <4 >().set (" pic8259_slave" , FUNC (pic8259_device::ir3_w));
1871+ m_cbus_root->int_cb <4 >().set (" pic8259_slave" , FUNC (pic8259_device::ir3_w)); // INT42
19071872 m_cbus_root->int_cb <5 >().set (" pic8259_slave" , FUNC (pic8259_device::ir4_w));
19081873 m_cbus_root->int_cb <6 >().set (" pic8259_slave" , FUNC (pic8259_device::ir5_w));
1874+ m_cbus_root->int_cb <7 >().set (" pic8259_slave" , FUNC (pic8259_device::ir2_w)); // INT41
19091875 m_cbus_root->drq_cb <0 >().set (m_dmac, FUNC (am9517a_device::dreq0_w)).invert ();
1876+ m_cbus_root->drq_cb <3 >().set (m_dmac, FUNC (am9517a_device::dreq3_w)).invert ();
19101877}
19111878
19121879void pc9801vm_state::cdrom_headphones (device_t *device)
@@ -1969,6 +1936,9 @@ void pc9801_state::pc9801_common(machine_config &config)
19691936
19701937 m_dmac->in_ior_callback <2 >().set (m_fdc_2hd, FUNC (upd765a_device::dma_r));
19711938 m_dmac->out_iow_callback <2 >().set (m_fdc_2hd, FUNC (upd765a_device::dma_w));
1939+ m_dmac->in_ior_callback <3 >().set ([this ] () { return m_cbus_root->dack_r (3 ); });
1940+ m_dmac->out_iow_callback <3 >().set ([this ] (u8 data) { m_cbus_root->dack_w (3 , data); });
1941+
19721942 m_dmac->out_dack_callback <0 >().set (FUNC (pc9801_state::dack0_w));
19731943 m_dmac->out_dack_callback <1 >().set (FUNC (pc9801_state::dack1_w));
19741944 m_dmac->out_dack_callback <2 >().set (FUNC (pc9801_state::dack2_w));
@@ -2061,17 +2031,8 @@ void pc9801_state::pc9801(machine_config &config)
20612031 MCFG_MACHINE_START_OVERRIDE (pc9801_state, pc9801f)
20622032 MCFG_MACHINE_RESET_OVERRIDE (pc9801_state, pc9801f)
20632033
2064- UPD765A (config, m_fdc_2dd, 8'000'000 , false , true );
2065- m_fdc_2dd->intrq_wr_callback ().set (FUNC (pc9801_state::fdc_2dd_irq));
2066- m_fdc_2dd->drq_wr_callback ().set (m_dmac, FUNC (am9517a_device::dreq3_w)).invert ();
2067- FLOPPY_CONNECTOR (config, " fdc_2dd:0" , pc9801_floppies, " 525dd" , pc9801_state::floppy_formats);
2068- FLOPPY_CONNECTOR (config, " fdc_2dd:1" , pc9801_floppies, " 525dd" , pc9801_state::floppy_formats);
2069-
20702034 UPD1990A (config, m_rtc);
20712035
2072- m_dmac->in_ior_callback <3 >().set (m_fdc_2dd, FUNC (upd765a_device::dma_r));
2073- m_dmac->out_iow_callback <3 >().set (m_fdc_2dd, FUNC (upd765a_device::dma_w));
2074-
20752036 BEEP (config, m_beeper, 2400 ).add_route (ALL_OUTPUTS, " mono" , 0.15 );
20762037 PALETTE (config, m_palette, FUNC (pc9801_state::pc9801_palette), 16 );
20772038
0 commit comments