Previous 199869 Revisions Next

r23515 Friday 7th June, 2013 at 12:01:44 UTC by Robbbert
(MESS) Altos5: floppies added, but not working.
If someone can fix it, please do so.
.
[src/mess/drivers]altos5.c

trunk/src/mess/drivers/altos5.c
r23514r23515
22
33    Altos 5-15
44
5    Boots, terminal works, memory banking works.
6
7    Error when reading floppy disk (record not found)
8
9    ToDo:
10    - DMA has its own memory banking, activated by BUSACK
11    - Get floppy to read the disk (only ones found are .TD0 format)
12    - Find out how to select double density on the fdc
13    - Further work once the floppy is fixed
14
515****************************************************************************/
616
717#include "emu.h"
r23514r23515
2636      m_dart(*this, "z80dart"),
2737      m_sio (*this, "z80sio"),
2838      m_ctc (*this, "z80ctc"),
29      m_fdc (*this, "fd1797")
39      m_fdc (*this, "fdc"),
40      m_floppy0(*this, "fdc:0"),
41      m_floppy1(*this, "fdc:1")
3042   { }
3143
3244   DECLARE_READ8_MEMBER(memory_read_byte);
r23514r23515
4153   DECLARE_DRIVER_INIT(altos5);
4254   TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick);
4355   DECLARE_WRITE_LINE_MEMBER(ctc_z1_w);
44   //DECLARE_FLOPPY_FORMATS(floppy_formats);
4556   UINT8 m_port08;
4657   UINT8 m_port09;
4758   UINT8 *m_p_prom;
4859   bool m_ipl;
49   bool m_wrpt;
60   void fdc_intrq_w(bool state);
61   void fdc_drq_w(bool state);
5062   UINT8 convert(offs_t offset, bool state);
5163   void setup_banks();
5264   virtual void machine_reset();
r23514r23515
5769   required_device<z80sio0_device> m_sio;
5870   required_device<z80ctc_device> m_ctc;
5971   required_device<fd1797_t> m_fdc;
72   required_device<floppy_connector> m_floppy0;
73   required_device<floppy_connector> m_floppy1;
6074};
6175
6276static ADDRESS_MAP_START(altos5_mem, AS_PROGRAM, 8, altos5_state)
r23514r23515
8296static ADDRESS_MAP_START(altos5_io, AS_IO, 8, altos5_state)
8397   ADDRESS_MAP_GLOBAL_MASK(0xff)
8498   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY("z80dma", z80dma_r, z80dma_w)
85   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("fd1797", fd1797_t, read, write)
99   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("fdc", fd1797_t, read, write)
86100   AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_0", z80pio_device, read, write)
87101   AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write)
88102   AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("z80pio_1", z80pio_device, read, write)
r23514r23515
162176{
163177   m_port08 = 0;
164178   m_port09 = 0;
165   m_wrpt = 0;
166179   m_ipl = 1;
167180   setup_banks();
168181   m_maincpu->reset();
r23514r23515
213226
214227static Z80DMA_INTERFACE( dma_intf )
215228{
216   DEVCB_NULL, //DEVCB_DRIVER_LINE_MEMBER(altos5_state, p8k_dma_irq_w),
229   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_HALT), // actually BUSRQ
217230   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0),
218231   DEVCB_NULL,
219232   DEVCB_DRIVER_MEMBER(altos5_state, memory_read_byte),
r23514r23515
272285*/
273286READ8_MEMBER( altos5_state::port08_r )
274287{
275   return m_port08 | 0x87;
288   return m_port08 | 0x07;
276289}
277290
278291/*
r23514r23515
284297}
285298
286299/*
287d4: DDEN (H = double density
300d4: DDEN (H = double density)
288301d5: DS (H = drive 2)
289302d6: SS (H = side 2)
290303*/
291304WRITE8_MEMBER( altos5_state::port08_w )
292305{
293306   m_port08 = data;
307
308   floppy_image_device *floppy = NULL;
309   if (BIT(data, 5))
310      floppy = m_floppy1->get_device();
311   else
312      floppy = m_floppy0->get_device();
313
314   m_fdc->set_floppy(floppy);
315
316   if (floppy)
317   {
318      floppy->mon_w(0);
319      floppy->ss_w(BIT(data, 6));
320      //floppy->dden_w(BIT(data, 4)); // no option to specify disk density
321      m_port08 |= (floppy->twosid_r() << 2); // get number of sides
322   }
294323}
295324
296325/*
297326d1, 2: Memory Map template selection (0 = diag; 1 = oasis; 2 = mp/m)
298327d3, 4: CPU bank select
299328d5:    H = Write protect of common area
300d6, 7: DMA bank select
329d6, 7: DMA bank select (not emulated)
301330*/
302331WRITE8_MEMBER( altos5_state::port09_w )
303332{
r23514r23515
382411   DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, ctsa_w)
383412};
384413
385//FLOPPY_FORMATS_MEMBER( altos5_state::floppy_formats )
386//   FLOPPY_ALTOS5_FORMAT
387//FLOPPY_FORMATS_END
388
389414static SLOT_INTERFACE_START( altos5_floppies )
390415   SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
391416SLOT_INTERFACE_END
392417
418void altos5_state::fdc_intrq_w(bool state)
419{
420   m_port08 = (m_port08 & 0x7f) | ((UINT8)(state) << 7);
421   m_pio0->port_a_write(m_port08);
422}
423
424void altos5_state::fdc_drq_w(bool state)
425{
426   // To DMA pin 25 - SDMA
427}
428
393429DRIVER_INIT_MEMBER( altos5_state, altos5 )
394430{
395431
396   floppy_connector *con = machine().device<floppy_connector>("fd1797:0");
432   floppy_connector *con = machine().device<floppy_connector>("fdc:0");
397433   floppy_image_device *floppy = con ? con->get_device() : 0;
398434   if (floppy)
399435   {
400436      m_fdc->set_floppy(floppy);
401      //m_fdc->setup_intrq_cb(wd1772_t::line_cb(FUNC(applix_state::fdc_intrq_w), this));
402      //m_fdc->setup_drq_cb(wd1772_t::line_cb(FUNC(applix_state::fdc_drq_w), this));
437      m_fdc->setup_intrq_cb(fd1797_t::line_cb(FUNC(altos5_state::fdc_intrq_w), this));
438      m_fdc->setup_drq_cb(fd1797_t::line_cb(FUNC(altos5_state::fdc_drq_w), this));
403439
404440      floppy->ss_w(0);
405441   }
r23514r23515
459495   MCFG_Z80SIO0_ADD("z80sio",   XTAL_8MHz / 2, sio_intf )
460496   MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, "serial_terminal")
461497   MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc_tick", altos5_state, ctc_tick, attotime::from_hz(XTAL_8MHz / 4))
462   MCFG_FD1797x_ADD("fd1797", XTAL_8MHz / 4)
463   MCFG_FLOPPY_DRIVE_ADD("fd1797:0", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
464   MCFG_FLOPPY_DRIVE_ADD("fd1797:1", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
498   MCFG_FD1797x_ADD("fdc", XTAL_8MHz / 4)
499   MCFG_FLOPPY_DRIVE_ADD("fdc:0", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
500   MCFG_FLOPPY_DRIVE_ADD("fdc:1", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
465501MACHINE_CONFIG_END
466502
467503

Previous 199869 Revisions Next


© 1997-2024 The MAME Team