diff options
Diffstat (limited to 'src/mess/drivers/m20.c')
-rw-r--r-- | src/mess/drivers/m20.c | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/src/mess/drivers/m20.c b/src/mess/drivers/m20.c index 652a1b77bbd..5dd4d00503e 100644 --- a/src/mess/drivers/m20.c +++ b/src/mess/drivers/m20.c @@ -47,8 +47,10 @@ E I1 Vectored interrupt error #include "machine/pit8253.h" #include "machine/pic8259.h" #include "formats/m20_dsk.h" +#include "formats/pc_dsk.h" #include "machine/m20_kbd.h" #include "bus/rs232/rs232.h" +#include "machine/m20_8086.h" class m20_state : public driver_device { @@ -64,6 +66,7 @@ public: m_fd1797(*this, "fd1797"), m_floppy0(*this, "fd1797:0:5dd"), m_floppy1(*this, "fd1797:1:5dd"), + m_apb(*this, "apb"), m_p_videoram(*this, "p_videoram"), m_palette(*this, "palette") { @@ -78,6 +81,7 @@ public: required_device<fd1797_t> m_fd1797; required_device<floppy_image_device> m_floppy0; required_device<floppy_image_device> m_floppy1; + optional_device<m20_8086_device> m_apb; required_shared_ptr<UINT16> m_p_videoram; required_device<palette_device> m_palette; @@ -92,6 +96,8 @@ public: DECLARE_WRITE_LINE_MEMBER(tty_clock_tick_w); DECLARE_WRITE_LINE_MEMBER(kbd_clock_tick_w); DECLARE_WRITE_LINE_MEMBER(timer_tick_w); + DECLARE_WRITE_LINE_MEMBER(halt_apb_w); + DECLARE_WRITE_LINE_MEMBER(int_w); private: offs_t m_memsize; @@ -226,7 +232,9 @@ WRITE_LINE_MEMBER( m20_state::timer_tick_w ) * 8253 is programmed in square wave mode, not rate * generator mode. */ - m_maincpu->set_input_line(0, state ? HOLD_LINE /*ASSERT_LINE*/ : CLEAR_LINE); + if(m_apb) + m_apb->nvi_w(state); + m_maincpu->set_input_line(INPUT_LINE_IRQ0, state ? HOLD_LINE /*ASSERT_LINE*/ : CLEAR_LINE); } @@ -714,24 +722,9 @@ static ADDRESS_MAP_START(m20_io, AS_IO, 16, m20_state) AM_RANGE(0x140, 0x143) AM_READWRITE(m20_i8259_r, m20_i8259_w) + AM_RANGE(0x3ffa, 0x3ffd) AM_DEVWRITE("apb", m20_8086_device, handshake_w) ADDRESS_MAP_END -#if 0 -static ADDRESS_MAP_START(m20_apb_mem, AS_PROGRAM, 16, m20_state) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE( 0x00000, 0x007ff ) AM_RAM - AM_RANGE( 0xf0000, 0xf7fff ) AM_RAM //mirrored? - AM_RANGE( 0xfc000, 0xfffff ) AM_ROM AM_REGION("apb_bios",0) -ADDRESS_MAP_END - -static ADDRESS_MAP_START(m20_apb_io, AS_IO, 16, m20_state) - ADDRESS_MAP_UNMAP_HIGH - ADDRESS_MAP_GLOBAL_MASK(0xff) // may not be needed - //0x4060 crtc address - //0x4062 crtc data -ADDRESS_MAP_END -#endif - IRQ_CALLBACK_MEMBER(m20_state::m20_irq_callback) { if (! irqline) @@ -740,6 +733,13 @@ IRQ_CALLBACK_MEMBER(m20_state::m20_irq_callback) return m_i8259->acknowledge(); } +WRITE_LINE_MEMBER(m20_state::int_w) +{ + if(m_apb && !m_apb->halted()) + m_apb->vi_w(state); + m_maincpu->set_input_line(INPUT_LINE_IRQ1, state ? ASSERT_LINE : CLEAR_LINE); +} + void m20_state::machine_start() { install_memory(); @@ -762,6 +762,8 @@ void m20_state::machine_reset() memcpy(RAM, ROM, 8); // we need only the reset vector m_maincpu->reset(); // reset the CPU to ensure it picks up the new vector + if(m_apb) + m_apb->m_8086->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); } @@ -770,7 +772,8 @@ static SLOT_INTERFACE_START( m20_floppies ) SLOT_INTERFACE_END FLOPPY_FORMATS_MEMBER( m20_state::floppy_formats ) - FLOPPY_M20_FORMAT + FLOPPY_M20_FORMAT, + FLOPPY_PC_FORMAT FLOPPY_FORMATS_END static SLOT_INTERFACE_START(keyboard) @@ -790,13 +793,6 @@ static MACHINE_CONFIG_START( m20, m20_state ) MCFG_RAM_DEFAULT_VALUE(0) MCFG_RAM_EXTRA_OPTIONS("128K,192K,224K,256K,384K,512K") -#if 0 - MCFG_CPU_ADD("apb", I8086, MAIN_CLOCK) - MCFG_CPU_PROGRAM_MAP(m20_apb_mem) - MCFG_CPU_IO_MAP(m20_apb_io) - MCFG_DEVICE_DISABLE() -#endif - /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -832,11 +828,13 @@ static MACHINE_CONFIG_START( m20, m20_state ) MCFG_PIT8253_CLK2(1230782) MCFG_PIT8253_OUT2_HANDLER(WRITELINE(m20_state, timer_tick_w)) - MCFG_PIC8259_ADD("i8259", INPUTLINE("maincpu", 1), VCC, NULL) + MCFG_PIC8259_ADD("i8259", WRITELINE(m20_state, int_w), VCC, NULL) MCFG_RS232_PORT_ADD("kbd", keyboard, "m20") MCFG_RS232_RXD_HANDLER(DEVWRITELINE("i8251_1", i8251_device, write_rxd)) + MCFG_DEVICE_ADD("apb", M20_8086, 0) + MCFG_SOFTWARE_LIST_ADD("flop_list","m20") MACHINE_CONFIG_END |