summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/m20.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/m20.c')
-rw-r--r--src/mess/drivers/m20.c50
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