mirror of
https://github.com/holub/mame
synced 2025-04-30 03:47:13 +03:00
(MESS) Altos5: floppies added, but not working.
If someone can fix it, please do so. .
This commit is contained in:
parent
dbd2a940eb
commit
9d228aff94
@ -2,6 +2,16 @@
|
|||||||
|
|
||||||
Altos 5-15
|
Altos 5-15
|
||||||
|
|
||||||
|
Boots, terminal works, memory banking works.
|
||||||
|
|
||||||
|
Error when reading floppy disk (record not found)
|
||||||
|
|
||||||
|
ToDo:
|
||||||
|
- DMA has its own memory banking, activated by BUSACK
|
||||||
|
- Get floppy to read the disk (only ones found are .TD0 format)
|
||||||
|
- Find out how to select double density on the fdc
|
||||||
|
- Further work once the floppy is fixed
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -26,7 +36,9 @@ public:
|
|||||||
m_dart(*this, "z80dart"),
|
m_dart(*this, "z80dart"),
|
||||||
m_sio (*this, "z80sio"),
|
m_sio (*this, "z80sio"),
|
||||||
m_ctc (*this, "z80ctc"),
|
m_ctc (*this, "z80ctc"),
|
||||||
m_fdc (*this, "fd1797")
|
m_fdc (*this, "fdc"),
|
||||||
|
m_floppy0(*this, "fdc:0"),
|
||||||
|
m_floppy1(*this, "fdc:1")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(memory_read_byte);
|
DECLARE_READ8_MEMBER(memory_read_byte);
|
||||||
@ -41,12 +53,12 @@ public:
|
|||||||
DECLARE_DRIVER_INIT(altos5);
|
DECLARE_DRIVER_INIT(altos5);
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick);
|
TIMER_DEVICE_CALLBACK_MEMBER(ctc_tick);
|
||||||
DECLARE_WRITE_LINE_MEMBER(ctc_z1_w);
|
DECLARE_WRITE_LINE_MEMBER(ctc_z1_w);
|
||||||
//DECLARE_FLOPPY_FORMATS(floppy_formats);
|
|
||||||
UINT8 m_port08;
|
UINT8 m_port08;
|
||||||
UINT8 m_port09;
|
UINT8 m_port09;
|
||||||
UINT8 *m_p_prom;
|
UINT8 *m_p_prom;
|
||||||
bool m_ipl;
|
bool m_ipl;
|
||||||
bool m_wrpt;
|
void fdc_intrq_w(bool state);
|
||||||
|
void fdc_drq_w(bool state);
|
||||||
UINT8 convert(offs_t offset, bool state);
|
UINT8 convert(offs_t offset, bool state);
|
||||||
void setup_banks();
|
void setup_banks();
|
||||||
virtual void machine_reset();
|
virtual void machine_reset();
|
||||||
@ -57,6 +69,8 @@ public:
|
|||||||
required_device<z80sio0_device> m_sio;
|
required_device<z80sio0_device> m_sio;
|
||||||
required_device<z80ctc_device> m_ctc;
|
required_device<z80ctc_device> m_ctc;
|
||||||
required_device<fd1797_t> m_fdc;
|
required_device<fd1797_t> m_fdc;
|
||||||
|
required_device<floppy_connector> m_floppy0;
|
||||||
|
required_device<floppy_connector> m_floppy1;
|
||||||
};
|
};
|
||||||
|
|
||||||
static ADDRESS_MAP_START(altos5_mem, AS_PROGRAM, 8, altos5_state)
|
static ADDRESS_MAP_START(altos5_mem, AS_PROGRAM, 8, altos5_state)
|
||||||
@ -82,7 +96,7 @@ ADDRESS_MAP_END
|
|||||||
static ADDRESS_MAP_START(altos5_io, AS_IO, 8, altos5_state)
|
static ADDRESS_MAP_START(altos5_io, AS_IO, 8, altos5_state)
|
||||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||||
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY("z80dma", z80dma_r, z80dma_w)
|
AM_RANGE(0x00, 0x03) AM_DEVREADWRITE_LEGACY("z80dma", z80dma_r, z80dma_w)
|
||||||
AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("fd1797", fd1797_t, read, write)
|
AM_RANGE(0x04, 0x07) AM_DEVREADWRITE("fdc", fd1797_t, read, write)
|
||||||
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_0", z80pio_device, read, write)
|
AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("z80pio_0", z80pio_device, read, write)
|
||||||
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write)
|
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE("z80ctc", z80ctc_device, read, write)
|
||||||
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("z80pio_1", z80pio_device, read, write)
|
AM_RANGE(0x10, 0x13) AM_DEVREADWRITE("z80pio_1", z80pio_device, read, write)
|
||||||
@ -162,7 +176,6 @@ void altos5_state::machine_reset()
|
|||||||
{
|
{
|
||||||
m_port08 = 0;
|
m_port08 = 0;
|
||||||
m_port09 = 0;
|
m_port09 = 0;
|
||||||
m_wrpt = 0;
|
|
||||||
m_ipl = 1;
|
m_ipl = 1;
|
||||||
setup_banks();
|
setup_banks();
|
||||||
m_maincpu->reset();
|
m_maincpu->reset();
|
||||||
@ -213,7 +226,7 @@ WRITE8_MEMBER(altos5_state::io_write_byte)
|
|||||||
|
|
||||||
static Z80DMA_INTERFACE( dma_intf )
|
static Z80DMA_INTERFACE( dma_intf )
|
||||||
{
|
{
|
||||||
DEVCB_NULL, //DEVCB_DRIVER_LINE_MEMBER(altos5_state, p8k_dma_irq_w),
|
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_HALT), // actually BUSRQ
|
||||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0),
|
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_IRQ0),
|
||||||
DEVCB_NULL,
|
DEVCB_NULL,
|
||||||
DEVCB_DRIVER_MEMBER(altos5_state, memory_read_byte),
|
DEVCB_DRIVER_MEMBER(altos5_state, memory_read_byte),
|
||||||
@ -272,7 +285,7 @@ d7: IRQ from FDC
|
|||||||
*/
|
*/
|
||||||
READ8_MEMBER( altos5_state::port08_r )
|
READ8_MEMBER( altos5_state::port08_r )
|
||||||
{
|
{
|
||||||
return m_port08 | 0x87;
|
return m_port08 | 0x07;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -284,20 +297,36 @@ READ8_MEMBER( altos5_state::port09_r )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
d4: DDEN (H = double density
|
d4: DDEN (H = double density)
|
||||||
d5: DS (H = drive 2)
|
d5: DS (H = drive 2)
|
||||||
d6: SS (H = side 2)
|
d6: SS (H = side 2)
|
||||||
*/
|
*/
|
||||||
WRITE8_MEMBER( altos5_state::port08_w )
|
WRITE8_MEMBER( altos5_state::port08_w )
|
||||||
{
|
{
|
||||||
m_port08 = data;
|
m_port08 = data;
|
||||||
|
|
||||||
|
floppy_image_device *floppy = NULL;
|
||||||
|
if (BIT(data, 5))
|
||||||
|
floppy = m_floppy1->get_device();
|
||||||
|
else
|
||||||
|
floppy = m_floppy0->get_device();
|
||||||
|
|
||||||
|
m_fdc->set_floppy(floppy);
|
||||||
|
|
||||||
|
if (floppy)
|
||||||
|
{
|
||||||
|
floppy->mon_w(0);
|
||||||
|
floppy->ss_w(BIT(data, 6));
|
||||||
|
//floppy->dden_w(BIT(data, 4)); // no option to specify disk density
|
||||||
|
m_port08 |= (floppy->twosid_r() << 2); // get number of sides
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
d1, 2: Memory Map template selection (0 = diag; 1 = oasis; 2 = mp/m)
|
d1, 2: Memory Map template selection (0 = diag; 1 = oasis; 2 = mp/m)
|
||||||
d3, 4: CPU bank select
|
d3, 4: CPU bank select
|
||||||
d5: H = Write protect of common area
|
d5: H = Write protect of common area
|
||||||
d6, 7: DMA bank select
|
d6, 7: DMA bank select (not emulated)
|
||||||
*/
|
*/
|
||||||
WRITE8_MEMBER( altos5_state::port09_w )
|
WRITE8_MEMBER( altos5_state::port09_w )
|
||||||
{
|
{
|
||||||
@ -382,24 +411,31 @@ static const rs232_port_interface rs232_intf =
|
|||||||
DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, ctsa_w)
|
DEVCB_DEVICE_LINE_MEMBER("z80sio", z80dart_device, ctsa_w)
|
||||||
};
|
};
|
||||||
|
|
||||||
//FLOPPY_FORMATS_MEMBER( altos5_state::floppy_formats )
|
|
||||||
// FLOPPY_ALTOS5_FORMAT
|
|
||||||
//FLOPPY_FORMATS_END
|
|
||||||
|
|
||||||
static SLOT_INTERFACE_START( altos5_floppies )
|
static SLOT_INTERFACE_START( altos5_floppies )
|
||||||
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
|
SLOT_INTERFACE( "525dd", FLOPPY_525_DD )
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
|
|
||||||
|
void altos5_state::fdc_intrq_w(bool state)
|
||||||
|
{
|
||||||
|
m_port08 = (m_port08 & 0x7f) | ((UINT8)(state) << 7);
|
||||||
|
m_pio0->port_a_write(m_port08);
|
||||||
|
}
|
||||||
|
|
||||||
|
void altos5_state::fdc_drq_w(bool state)
|
||||||
|
{
|
||||||
|
// To DMA pin 25 - SDMA
|
||||||
|
}
|
||||||
|
|
||||||
DRIVER_INIT_MEMBER( altos5_state, altos5 )
|
DRIVER_INIT_MEMBER( altos5_state, altos5 )
|
||||||
{
|
{
|
||||||
|
|
||||||
floppy_connector *con = machine().device<floppy_connector>("fd1797:0");
|
floppy_connector *con = machine().device<floppy_connector>("fdc:0");
|
||||||
floppy_image_device *floppy = con ? con->get_device() : 0;
|
floppy_image_device *floppy = con ? con->get_device() : 0;
|
||||||
if (floppy)
|
if (floppy)
|
||||||
{
|
{
|
||||||
m_fdc->set_floppy(floppy);
|
m_fdc->set_floppy(floppy);
|
||||||
//m_fdc->setup_intrq_cb(wd1772_t::line_cb(FUNC(applix_state::fdc_intrq_w), this));
|
m_fdc->setup_intrq_cb(fd1797_t::line_cb(FUNC(altos5_state::fdc_intrq_w), this));
|
||||||
//m_fdc->setup_drq_cb(wd1772_t::line_cb(FUNC(applix_state::fdc_drq_w), this));
|
m_fdc->setup_drq_cb(fd1797_t::line_cb(FUNC(altos5_state::fdc_drq_w), this));
|
||||||
|
|
||||||
floppy->ss_w(0);
|
floppy->ss_w(0);
|
||||||
}
|
}
|
||||||
@ -459,9 +495,9 @@ static MACHINE_CONFIG_START( altos5, altos5_state )
|
|||||||
MCFG_Z80SIO0_ADD("z80sio", XTAL_8MHz / 2, sio_intf )
|
MCFG_Z80SIO0_ADD("z80sio", XTAL_8MHz / 2, sio_intf )
|
||||||
MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, "serial_terminal")
|
MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, "serial_terminal")
|
||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc_tick", altos5_state, ctc_tick, attotime::from_hz(XTAL_8MHz / 4))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("ctc_tick", altos5_state, ctc_tick, attotime::from_hz(XTAL_8MHz / 4))
|
||||||
MCFG_FD1797x_ADD("fd1797", XTAL_8MHz / 4)
|
MCFG_FD1797x_ADD("fdc", XTAL_8MHz / 4)
|
||||||
MCFG_FLOPPY_DRIVE_ADD("fd1797:0", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD("fdc:0", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
|
||||||
MCFG_FLOPPY_DRIVE_ADD("fd1797:1", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
|
MCFG_FLOPPY_DRIVE_ADD("fdc:1", altos5_floppies, "525dd", floppy_image_device::default_floppy_formats)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user