Previous 199869 Revisions Next

r31442 Sunday 27th July, 2014 at 21:14:51 UTC by Sandro Ronco
(MESS) Allow kc85_[2-5] to boot from floppy again.
[src/emu/bus/kc]d004.c d004.h
[src/lib/formats]kc85_dsk.c

trunk/src/emu/bus/kc/d004.c
r31441r31442
5454FLOPPY_FORMATS_END
5555
5656static SLOT_INTERFACE_START( kc_d004_floppies )
57   SLOT_INTERFACE( "525hd", FLOPPY_525_HD )
57   SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
5858SLOT_INTERFACE_END
5959
6060static const z80_daisy_config kc_d004_daisy_chain[] =
r31441r31442
7777
7878   MCFG_UPD765A_ADD(UPD765_TAG, false, false)
7979   MCFG_UPD765_INTRQ_CALLBACK(WRITELINE(kc_d004_device, fdc_irq))
80   MCFG_UPD765_DRQ_CALLBACK(WRITELINE(kc_d004_device, fdc_drq))
81   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", kc_d004_floppies, "525hd", kc_d004_device::floppy_formats)
82   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", kc_d004_floppies, "525hd", kc_d004_device::floppy_formats)
83   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", kc_d004_floppies, "525hd", kc_d004_device::floppy_formats)
84   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", kc_d004_floppies, "525hd", kc_d004_device::floppy_formats)
80   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":0", kc_d004_floppies, "525qd", kc_d004_device::floppy_formats)
81   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":1", kc_d004_floppies, "525qd", kc_d004_device::floppy_formats)
82   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":2", kc_d004_floppies, "525qd", kc_d004_device::floppy_formats)
83   MCFG_FLOPPY_DRIVE_ADD(UPD765_TAG ":3", kc_d004_floppies, "525qd", kc_d004_device::floppy_formats)
8584MACHINE_CONFIG_END
8685
8786static MACHINE_CONFIG_FRAGMENT(kc_d004_gide)
r31441r31442
134133      device_kcexp_interface( mconfig, *this ),
135134      m_cpu(*this, Z80_TAG),
136135      m_fdc(*this, UPD765_TAG),
136      m_floppy0(*this, UPD765_TAG ":0"),
137      m_floppy1(*this, UPD765_TAG ":1"),
138      m_floppy2(*this, UPD765_TAG ":2"),
139      m_floppy3(*this, UPD765_TAG ":3"),
137140      m_koppel_ram(*this, "koppelram")
138141{
139142}
r31441r31442
143146      device_kcexp_interface( mconfig, *this ),
144147      m_cpu(*this, Z80_TAG),
145148      m_fdc(*this, UPD765_TAG),
149      m_floppy0(*this, UPD765_TAG ":0"),
150      m_floppy1(*this, UPD765_TAG ":1"),
151      m_floppy2(*this, UPD765_TAG ":2"),
152      m_floppy3(*this, UPD765_TAG ":3"),
146153      m_koppel_ram(*this, "koppelram")
147154{
148155}
r31441r31442
156163   m_rom  = memregion(Z80_TAG)->base();
157164
158165   m_reset_timer = timer_alloc(TIMER_RESET);
159   m_tc_clear_timer = timer_alloc(TIMER_TC_CLEAR);
160166}
161167
162168//-------------------------------------------------
r31441r31442
167173{
168174   m_rom_base = 0xc000;
169175   m_enabled = m_connected = 0;
170   m_floppy = subdevice<floppy_connector>(UPD765_TAG ":0")->get_device();
176   m_floppy = m_floppy0->get_device();
171177
172178   // hold cpu at reset
173179   m_reset_timer->adjust(attotime::zero);
r31441r31442
202208      case TIMER_RESET:
203209         m_cpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
204210         break;
205      case TIMER_TC_CLEAR:
206         m_fdc->tc_w(false);
207         break;
208211   }
209212}
210213
r31441r31442
316319READ8_MEMBER(kc_d004_device::hw_input_gate_r)
317320{
318321   /*
319
320322       bit 7: DMA Request (DRQ from FDC)
321323       bit 6: Interrupt (INT from FDC)
322324       bit 5: Drive Ready
323325       bit 4: Index pulse from disc
324
325326   */
326327
327   if (m_floppy->ready_r())
328      m_hw_input_gate |= 0x20;
329   else
330      m_hw_input_gate &= ~0x20;
328   UINT8 hw_input_gate = 0x0f;
331329
332   if (m_floppy->idx_r())
333      m_hw_input_gate &= ~0x10;
334   else
335      m_hw_input_gate |= 0x10;
330   if (m_floppy && !m_floppy->idx_r())
331      hw_input_gate |= 0x10;
336332
337   return m_hw_input_gate | 0x0f;
333   if (m_floppy && !m_floppy->ready_r())
334      hw_input_gate |= 0x20;
335
336   if (!m_fdc->get_irq())
337      hw_input_gate |= 0x40;
338
339   if (!m_fdc->get_drq())
340      hw_input_gate |= 0x80;
341
342   return hw_input_gate;
338343}
339344
340345WRITE8_MEMBER(kc_d004_device::fdd_select_w)
341346{
342347   if (data & 0x01)
343      m_floppy = subdevice<floppy_connector>(UPD765_TAG ":0")->get_device();
348      m_floppy = m_floppy0->get_device();
344349   else if (data & 0x02)
345      m_floppy = subdevice<floppy_connector>(UPD765_TAG ":1")->get_device();
350      m_floppy = m_floppy1->get_device();
346351   else if (data & 0x04)
347      m_floppy = subdevice<floppy_connector>(UPD765_TAG ":2")->get_device();
352      m_floppy = m_floppy2->get_device();
348353   else if (data & 0x08)
349      m_floppy = subdevice<floppy_connector>(UPD765_TAG ":3")->get_device();
354      m_floppy = m_floppy3->get_device();
350355   else
351356      m_floppy = NULL;
357
358   if (m_floppy)
359      m_floppy->mon_w(0);
360
352361   m_fdc->set_floppy(m_floppy);
353362}
354363
355364WRITE8_MEMBER(kc_d004_device::hw_terminal_count_w)
356365{
357366   m_fdc->tc_w(true);
358
359   m_tc_clear_timer->adjust(attotime::from_nsec(200));
360367}
361368
362369WRITE_LINE_MEMBER(kc_d004_device::fdc_irq)
363370{
364371   if (state)
365      m_hw_input_gate &= ~0x40;
366   else
367      m_hw_input_gate |= 0x40;
372      m_fdc->tc_w(false);
368373}
369374
370WRITE_LINE_MEMBER(kc_d004_device::fdc_drq)
371{
372   if (state)
373      m_hw_input_gate &= ~0x80;
374   else
375      m_hw_input_gate |= 0x80;
376}
377375
378376
379
380377//**************************************************************************
381378//  D004 Floppy Disk + GIDE Interface
382379//**************************************************************************
trunk/src/emu/bus/kc/d004.h
r31441r31442
5555   DECLARE_WRITE8_MEMBER(hw_terminal_count_w);
5656
5757   DECLARE_WRITE_LINE_MEMBER( fdc_irq );
58   DECLARE_WRITE_LINE_MEMBER( fdc_drq );
5958
6059private:
6160   static const device_timer_id TIMER_RESET = 0;
62   static const device_timer_id TIMER_TC_CLEAR = 1;
6361
6462   required_device<cpu_device> m_cpu;
6563   required_device<upd765a_device> m_fdc;
64   required_device<floppy_connector> m_floppy0;
65   required_device<floppy_connector> m_floppy1;
66   required_device<floppy_connector> m_floppy2;
67   required_device<floppy_connector> m_floppy3;
6668   required_shared_ptr<UINT8>  m_koppel_ram;
6769
6870   // internal state
6971   emu_timer *         m_reset_timer;
70   emu_timer *         m_tc_clear_timer;
7172
7273   UINT8 *             m_rom;
7374   UINT8               m_hw_input_gate;
7475   UINT16              m_rom_base;
7576   UINT8               m_enabled;
7677   UINT8               m_connected;
77   //UINT8               m_active_fdd;
7878
7979   floppy_image_device *m_floppy;
8080};
trunk/src/lib/formats/kc85_dsk.c
r31441r31442
3131}
3232
3333// Unverified gap sizes
34// 640-800K on HD which handles 1.2M, really?
3534const kc85_format::format kc85_format::formats[] = {
3635   {
37      floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
38      1200, // 1us, 360rpm
36      floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
37      2000, // 2us, 300rpm
3938      5, 80, 2,
4039      1024, {},
4140      1, {},
4241      80, 50, 22, 80
4342   },
4443   {
45      floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
46      1200, // 1us, 360rpm
44      floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
45      2000, // 2us, 300rpm
4746      9, 80, 2,
4847      512, {},
4948      1, {},
5049      80, 50, 22, 80
5150   },
5251   {
53      floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
54      1200, // 1us, 360rpm
52      floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
53      2000, // 2us, 300rpm
5554      16, 80, 2,
5655      256, {},
5756      1, {},

Previous 199869 Revisions Next


© 1997-2024 The MAME Team