summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/sega8/rom.cpp1
-rw-r--r--src/devices/bus/sms_ctrl/multitap.cpp2
-rw-r--r--src/devices/cpu/mn10200/mn10200.cpp10
-rw-r--r--src/devices/cpu/mn10200/mn10200.h1
-rw-r--r--src/emu/ioport.cpp90
-rw-r--r--src/mame/drivers/cm1800.cpp18
-rw-r--r--src/mame/drivers/cninja.cpp8
-rw-r--r--src/mame/drivers/deco32.cpp6
-rw-r--r--src/mame/drivers/dsb46.cpp77
-rw-r--r--src/mame/drivers/jade.cpp4
-rw-r--r--src/mame/drivers/mits680b.cpp79
-rw-r--r--src/mame/drivers/namcos22.cpp18
-rw-r--r--src/mame/drivers/pm68k.cpp23
-rw-r--r--src/mame/drivers/sms.cpp6
-rw-r--r--src/mame/drivers/systec.cpp67
-rw-r--r--src/mame/drivers/zsbc3.cpp64
-rw-r--r--src/mame/machine/deco_irq.cpp131
-rw-r--r--src/mame/machine/deco_irq.h15
-rw-r--r--src/mame/machine/sms.cpp4
-rw-r--r--src/mame/video/model2rd.hxx12
20 files changed, 326 insertions, 310 deletions
diff --git a/src/devices/bus/sega8/rom.cpp b/src/devices/bus/sega8/rom.cpp
index 6057b23aa97..9006cc1f013 100644
--- a/src/devices/bus/sega8/rom.cpp
+++ b/src/devices/bus/sega8/rom.cpp
@@ -250,6 +250,7 @@ void sega8_4pak_device::device_start()
void sega8_4pak_device::device_reset()
{
memset(m_reg, 0, sizeof(m_reg));
+ memset(m_rom_bank_base, 0, sizeof(m_rom_bank_base));
}
diff --git a/src/devices/bus/sms_ctrl/multitap.cpp b/src/devices/bus/sms_ctrl/multitap.cpp
index 8adbb39fa13..d0d4e6e7293 100644
--- a/src/devices/bus/sms_ctrl/multitap.cpp
+++ b/src/devices/bus/sms_ctrl/multitap.cpp
@@ -17,7 +17,7 @@
// DEVICE DEFINITIONS
//**************************************************************************
-DEFINE_DEVICE_TYPE(SMS_MULTITAP, sms_multitap_device, "sms_multitap", "Sega SMS Multitap")
+DEFINE_DEVICE_TYPE(SMS_MULTITAP, sms_multitap_device, "sms_multitap", "Furrtek SMS Multitap")
//**************************************************************************
diff --git a/src/devices/cpu/mn10200/mn10200.cpp b/src/devices/cpu/mn10200/mn10200.cpp
index def87ca557f..59407b507ca 100644
--- a/src/devices/cpu/mn10200/mn10200.cpp
+++ b/src/devices/cpu/mn10200/mn10200.cpp
@@ -208,10 +208,12 @@ void mn10200_device::device_start()
m_serial[i].ctrll = 0;
m_serial[i].ctrlh = 0;
m_serial[i].buf = 0;
+ m_serial[i].recv = 0;
save_item(NAME(m_serial[i].ctrll), i);
save_item(NAME(m_serial[i].ctrlh), i);
save_item(NAME(m_serial[i].buf), i);
+ save_item(NAME(m_serial[i].recv), i);
}
// ports
@@ -2153,13 +2155,13 @@ READ8_MEMBER(mn10200_device::io_control_r)
case 0x181: case 0x191:
return m_serial[(offset-0x180) >> 4].ctrlh;
- case 0x182:
+ case 0x182: //case 0x192:
{
- static int zz;
- return zz++;
+ int ser = (offset-0x180) >> 4;
+ return m_serial[ser].recv++;
}
- case 0x183:
+ case 0x183: //case 0x193:
return 0x10;
// 8-bit timers
diff --git a/src/devices/cpu/mn10200/mn10200.h b/src/devices/cpu/mn10200/mn10200.h
index 221625a60e3..307b0b4b6a9 100644
--- a/src/devices/cpu/mn10200/mn10200.h
+++ b/src/devices/cpu/mn10200/mn10200.h
@@ -162,6 +162,7 @@ private:
uint8_t ctrll;
uint8_t ctrlh;
uint8_t buf;
+ uint8_t recv;
} m_serial[2];
// ports
diff --git a/src/emu/ioport.cpp b/src/emu/ioport.cpp
index eae5a94faa0..bf241f30b57 100644
--- a/src/emu/ioport.cpp
+++ b/src/emu/ioport.cpp
@@ -779,51 +779,51 @@ std::string ioport_field::key_name(int which) const
// attempt to get the string from the character info table
switch (ch)
{
- case 8: return "Backspace";
- case 9: return "Tab";
- case 12: return "Clear";
- case 13: return "Enter";
- case 27: return "Esc";
- case 32: return "Space";
- case UCHAR_SHIFT_1: return "Shift";
- case UCHAR_SHIFT_2: return "Ctrl";
- case UCHAR_MAMEKEY(ESC): return "Esc";
- case UCHAR_MAMEKEY(INSERT): return "Insert";
- case UCHAR_MAMEKEY(DEL): return "Delete";
- case UCHAR_MAMEKEY(HOME): return "Home";
- case UCHAR_MAMEKEY(END): return "End";
- case UCHAR_MAMEKEY(PGUP): return "Page Up";
- case UCHAR_MAMEKEY(PGDN): return "Page Down";
- case UCHAR_MAMEKEY(LEFT): return "Cursor Left";
- case UCHAR_MAMEKEY(RIGHT): return "Cursor Right";
- case UCHAR_MAMEKEY(UP): return "Cursor Up";
- case UCHAR_MAMEKEY(DOWN): return "Cursor Down";
- case UCHAR_MAMEKEY(SLASH_PAD): return "Keypad /";
- case UCHAR_MAMEKEY(ASTERISK): return "Keypad *";
- case UCHAR_MAMEKEY(MINUS_PAD): return "Keypad -";
- case UCHAR_MAMEKEY(PLUS_PAD): return "Keypad +";
- case UCHAR_MAMEKEY(DEL_PAD): return "Keypad .";
- case UCHAR_MAMEKEY(ENTER_PAD): return "Keypad Enter";
- case UCHAR_MAMEKEY(BS_PAD): return "Keypad Backspace";
- case UCHAR_MAMEKEY(TAB_PAD): return "Keypad Tab";
- case UCHAR_MAMEKEY(00_PAD): return "Keypad 00";
- case UCHAR_MAMEKEY(000_PAD): return "Keypad 000";
- case UCHAR_MAMEKEY(PRTSCR): return "Print Screen";
- case UCHAR_MAMEKEY(PAUSE): return "Pause";
- case UCHAR_MAMEKEY(LSHIFT): return "Left Shift";
- case UCHAR_MAMEKEY(RSHIFT): return "Right Shift";
- case UCHAR_MAMEKEY(LCONTROL): return "Left Ctrl";
- case UCHAR_MAMEKEY(RCONTROL): return "Right Ctrl";
- case UCHAR_MAMEKEY(LALT): return "Left Alt";
- case UCHAR_MAMEKEY(RALT): return "Right Alt";
- case UCHAR_MAMEKEY(SCRLOCK): return "Scroll Lock";
- case UCHAR_MAMEKEY(NUMLOCK): return "Num Lock";
- case UCHAR_MAMEKEY(CAPSLOCK): return "Caps Lock";
- case UCHAR_MAMEKEY(LWIN): return "Left Win";
- case UCHAR_MAMEKEY(RWIN): return "Right Win";
- case UCHAR_MAMEKEY(MENU): return "Menu";
- case UCHAR_MAMEKEY(CANCEL): return "Break";
- default: break;
+ case 8: return "Backspace";
+ case 9: return "Tab";
+ case 12: return "Clear";
+ case 13: return "Enter";
+ case 27: return "Esc";
+ case 32: return "Space";
+ case UCHAR_SHIFT_1: return "Shift";
+ case UCHAR_SHIFT_2: return "Ctrl";
+ case UCHAR_MAMEKEY(ESC): return "Esc";
+ case UCHAR_MAMEKEY(INSERT): return "Insert";
+ case UCHAR_MAMEKEY(DEL): return "Delete";
+ case UCHAR_MAMEKEY(HOME): return "Home";
+ case UCHAR_MAMEKEY(END): return "End";
+ case UCHAR_MAMEKEY(PGUP): return "Page Up";
+ case UCHAR_MAMEKEY(PGDN): return "Page Down";
+ case UCHAR_MAMEKEY(LEFT): return "Cursor Left";
+ case UCHAR_MAMEKEY(RIGHT): return "Cursor Right";
+ case UCHAR_MAMEKEY(UP): return "Cursor Up";
+ case UCHAR_MAMEKEY(DOWN): return "Cursor Down";
+ case UCHAR_MAMEKEY(SLASH_PAD): return "Keypad /";
+ case UCHAR_MAMEKEY(ASTERISK): return "Keypad *";
+ case UCHAR_MAMEKEY(MINUS_PAD): return "Keypad -";
+ case UCHAR_MAMEKEY(PLUS_PAD): return "Keypad +";
+ case UCHAR_MAMEKEY(DEL_PAD): return "Keypad .";
+ case UCHAR_MAMEKEY(ENTER_PAD): return "Keypad Enter";
+ case UCHAR_MAMEKEY(BS_PAD): return "Keypad Backspace";
+ case UCHAR_MAMEKEY(TAB_PAD): return "Keypad Tab";
+ case UCHAR_MAMEKEY(00_PAD): return "Keypad 00";
+ case UCHAR_MAMEKEY(000_PAD): return "Keypad 000";
+ case UCHAR_MAMEKEY(PRTSCR): return "Print Screen";
+ case UCHAR_MAMEKEY(PAUSE): return "Pause";
+ case UCHAR_MAMEKEY(LSHIFT): return "Left Shift";
+ case UCHAR_MAMEKEY(RSHIFT): return "Right Shift";
+ case UCHAR_MAMEKEY(LCONTROL): return "Left Ctrl";
+ case UCHAR_MAMEKEY(RCONTROL): return "Right Ctrl";
+ case UCHAR_MAMEKEY(LALT): return "Left Alt";
+ case UCHAR_MAMEKEY(RALT): return "Right Alt";
+ case UCHAR_MAMEKEY(SCRLOCK): return "Scroll Lock";
+ case UCHAR_MAMEKEY(NUMLOCK): return "Num Lock";
+ case UCHAR_MAMEKEY(CAPSLOCK): return "Caps Lock";
+ case UCHAR_MAMEKEY(LWIN): return "Left Win";
+ case UCHAR_MAMEKEY(RWIN): return "Right Win";
+ case UCHAR_MAMEKEY(MENU): return "Menu";
+ case UCHAR_MAMEKEY(CANCEL): return "Break";
+ default: break;
}
// handle function keys
diff --git a/src/mame/drivers/cm1800.cpp b/src/mame/drivers/cm1800.cpp
index 621b45de5bc..10d8b700a24 100644
--- a/src/mame/drivers/cm1800.cpp
+++ b/src/mame/drivers/cm1800.cpp
@@ -37,23 +37,21 @@ to be a save command.
#include "cpu/i8085/i8085.h"
#include "machine/terminal.h"
-#define TERMINAL_TAG "terminal"
class cm1800_state : public driver_device
{
public:
cm1800_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_terminal(*this, TERMINAL_TAG)
+ , m_terminal(*this, "terminal")
, m_maincpu(*this, "maincpu")
- {
- }
+ { }
DECLARE_READ8_MEMBER( term_status_r );
DECLARE_READ8_MEMBER( term_r );
void kbd_put(u8 data);
-protected:
+private:
virtual void machine_reset() override;
uint8_t m_term_data;
@@ -81,14 +79,15 @@ void cm1800_state::kbd_put(u8 data)
static ADDRESS_MAP_START(cm1800_mem, AS_PROGRAM, 8, cm1800_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE( 0x0000, 0x07ff ) AM_ROM
+ AM_RANGE( 0x0000, 0x07ff ) AM_ROM AM_REGION("roms", 0)
AM_RANGE( 0x0800, 0xffff ) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( cm1800_io , AS_IO, 8, cm1800_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00, 0x00) AM_READ(term_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write)
+ AM_RANGE(0x00, 0x00) AM_READ(term_r) AM_DEVWRITE("terminal", generic_terminal_device, write)
AM_RANGE(0x01, 0x01) AM_READ(term_status_r)
+ AM_RANGE(0x03, 0x03) // unknown uart, initialisation bytes 08 then 48, so not 6551.
ADDRESS_MAP_END
/* Input ports */
@@ -106,15 +105,14 @@ static MACHINE_CONFIG_START( cm1800 )
MCFG_CPU_PROGRAM_MAP(cm1800_mem)
MCFG_CPU_IO_MAP(cm1800_io)
-
/* video hardware */
- MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
+ MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(cm1800_state, kbd_put))
MACHINE_CONFIG_END
/* ROM definition */
ROM_START( cm1800 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x800, "roms", ROMREGION_ERASEFF )
ROM_LOAD( "cm1800.rom", 0x0000, 0x0800, CRC(85d71d25) SHA1(42dc87d2eddc2906fa26d35db88a2e29d50fb481) )
ROM_END
diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp
index 2bbd743b187..6790570ad9a 100644
--- a/src/mame/drivers/cninja.cpp
+++ b/src/mame/drivers/cninja.cpp
@@ -122,7 +122,7 @@ static ADDRESS_MAP_START( cninja_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x15e000, 0x15e7ff) AM_RAM AM_SHARE("pf4_rowscroll")
AM_RANGE(0x184000, 0x187fff) AM_RAM AM_SHARE("ram")
- AM_RANGE(0x190000, 0x190007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x190000, 0x190007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x1a4000, 0x1a47ff) AM_RAM AM_SHARE("spriteram") /* Sprites */
@@ -158,7 +158,7 @@ static ADDRESS_MAP_START( cninjabl_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x180000, 0x187fff) AM_RAM // more ram on bootleg?
- AM_RANGE(0x190000, 0x190007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x190000, 0x190007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x19c000, 0x19dfff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x1b4000, 0x1b4001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */
@@ -230,7 +230,7 @@ static ADDRESS_MAP_START( edrandy_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x1a0000, 0x1a3fff) AM_READWRITE(sshangha_protection_region_8_146_r,sshangha_protection_region_8_146_w)
- AM_RANGE(0x1a4000, 0x1a4007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x1a4000, 0x1a4007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x1ac000, 0x1ac001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */
AM_RANGE(0x1bc000, 0x1bc7ff) AM_RAM AM_SHARE("spriteram") /* Sprites */
AM_RANGE(0x1bc800, 0x1bcfff) AM_WRITENOP /* Another bug in game code? Sprite list can overrun. Doesn't seem to mirror */
@@ -261,7 +261,7 @@ static ADDRESS_MAP_START( robocop2_map, AS_PROGRAM, 16, cninja_state )
AM_RANGE(0x198000, 0x198001) AM_DEVWRITE("spriteram", buffered_spriteram16_device, write) /* DMA flag */
AM_RANGE(0x1a8000, 0x1a9fff) AM_RAM_DEVWRITE("deco_common", decocomn_device, nonbuffered_palette_w) AM_SHARE("paletteram")
- AM_RANGE(0x1b0000, 0x1b0007) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x00ff)
+ AM_RANGE(0x1b0000, 0x1b0007) AM_DEVICE8("irq", deco_irq_device, map, 0x00ff)
AM_RANGE(0x1b8000, 0x1bbfff) AM_RAM AM_SHARE("ram") /* Main ram */
AM_RANGE(0x1f0000, 0x1f0001) AM_DEVWRITE("deco_common", decocomn_device, priority_w)
AM_RANGE(0x1f8000, 0x1f8001) AM_READ_PORT("DSW3") /* Dipswitch #3 */
diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp
index 88404a9805f..844937b2fce 100644
--- a/src/mame/drivers/deco32.cpp
+++ b/src/mame/drivers/deco32.cpp
@@ -746,7 +746,7 @@ static ADDRESS_MAP_START( captaven_map, AS_PROGRAM, 32, deco32_state )
AM_RANGE(0x128000, 0x12ffff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff)
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(nonbuffered_palette_w) AM_SHARE("paletteram") /* Palette RAM */
- AM_RANGE(0x148000, 0x14800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff)
+ AM_RANGE(0x148000, 0x14800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x160000, 0x167fff) AM_RAM /* Extra work RAM */
AM_RANGE(0x168000, 0x168003) AM_READ(captaven_soundcpu_r)
@@ -903,7 +903,7 @@ static ADDRESS_MAP_START( dragngun_map, AS_PROGRAM, 32, dragngun_state )
AM_RANGE(0x0120000, 0x0127fff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff)
// AM_RANGE(0x01204c0, 0x01204c3) AM_WRITE(sound_w)
- AM_RANGE(0x0128000, 0x012800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff)
+ AM_RANGE(0x0128000, 0x012800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x0130000, 0x0131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x0138000, 0x0138003) AM_NOP /* Palette dma complete in bit 0x8? ack? return 0 else tight loop */
AM_RANGE(0x0138008, 0x013800b) AM_WRITE(palette_dma_w)
@@ -965,7 +965,7 @@ static ADDRESS_MAP_START( lockload_map, AS_PROGRAM, 32, dragngun_state )
// AM_RANGE(0x1204c0, 0x1204c3) AM_WRITE(sound_w)
AM_RANGE(0x120000, 0x127fff) AM_READWRITE16(dg_protection_region_0_146_r, dg_protection_region_0_146_w, 0x0000ffff)
- AM_RANGE(0x128000, 0x12800f) AM_DEVREADWRITE8("irq", deco_irq_device, read, write, 0x000000ff)
+ AM_RANGE(0x128000, 0x12800f) AM_DEVICE8("irq", deco_irq_device, map, 0x000000ff)
AM_RANGE(0x130000, 0x131fff) AM_RAM_WRITE(buffered_palette_w) AM_SHARE("paletteram")
AM_RANGE(0x138000, 0x138003) AM_READONLY AM_WRITENOP //palette dma complete in bit 0x8? ack? return 0 else tight loop
diff --git a/src/mame/drivers/dsb46.cpp b/src/mame/drivers/dsb46.cpp
index 4b665f66fd9..7e40b29a3f1 100644
--- a/src/mame/drivers/dsb46.cpp
+++ b/src/mame/drivers/dsb46.cpp
@@ -6,6 +6,15 @@
2013-07-31 Connected to terminal [Robbbert]
2016-07-11 After 10 seconds the monitor program will start [Robbbert]
+Commands: (no spaces allowed)
+B - Boot the disk
+D - Dump memory to screen
+F - Fill Memory
+G - Go To
+H - Help
+P - Alter port values
+S - Alter memory
+
The photos show 3 boards:
- A scsi board (all 74-series TTL)
@@ -21,7 +30,11 @@ Both roms contain Z80 code.
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "machine/terminal.h"
+#include "cpu/z80/z80daisy.h"
+#include "machine/z80ctc.h"
+#include "machine/z80sio.h"
+#include "machine/clock.h"
+#include "bus/rs232/rs232.h"
class dsb46_state : public driver_device
@@ -30,20 +43,17 @@ public:
dsb46_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- , m_terminal(*this, "terminal")
- {
- }
+ , m_sio(*this, "sio")
+ { }
- DECLARE_READ8_MEMBER(port00_r);
- DECLARE_READ8_MEMBER(port01_r);
- void kbd_put(u8 data);
+ DECLARE_WRITE_LINE_MEMBER(clock_tick);
DECLARE_WRITE8_MEMBER(port1a_w);
DECLARE_DRIVER_INIT(dsb46);
DECLARE_MACHINE_RESET(dsb46);
+
private:
- uint8_t m_term_data;
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
+ required_device<z80sio_device> m_sio;
};
static ADDRESS_MAP_START( dsb46_mem, AS_PROGRAM, 8, dsb46_state )
@@ -54,13 +64,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( dsb46_io, AS_IO, 8, dsb46_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x00, 0x00) AM_READ(port00_r) AM_DEVWRITE("terminal", generic_terminal_device, write)
- AM_RANGE(0x01, 0x01) AM_READ(port01_r)
+ AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("sio", z80sio_device, ba_cd_r, ba_cd_w)
+ AM_RANGE(0x08, 0x0b) AM_DEVREADWRITE("ctc1", z80ctc_device, read, write)
AM_RANGE(0x1a, 0x1a) AM_WRITE(port1a_w)
- //AM_RANGE(0x00, 0x01) uartch1
- //AM_RANGE(0x02, 0x03) uartch2
- //AM_RANGE(0x08, 0x08) ??
- //AM_RANGE(0x0a, 0x0b) ??
//AM_RANGE(0x10, 0x10) disk related
//AM_RANGE(0x14, 0x14) ??
//AM_RANGE(0x18, 0x18) ??
@@ -83,7 +89,6 @@ MACHINE_RESET_MEMBER( dsb46_state,dsb46 )
{
membank("read")->set_entry(0);
membank("write")->set_entry(0);
- m_term_data = 0;
m_maincpu->reset();
}
@@ -92,33 +97,47 @@ WRITE8_MEMBER( dsb46_state::port1a_w )
membank("read")->set_entry(data & 1);
}
-READ8_MEMBER( dsb46_state::port01_r )
+// source of baud frequency is unknown, so we invent a clock
+WRITE_LINE_MEMBER( dsb46_state::clock_tick )
{
- return (m_term_data) ? 5 : 4;
+ m_sio->txca_w(state);
+ m_sio->rxca_w(state);
}
-READ8_MEMBER( dsb46_state::port00_r )
+static const z80_daisy_config daisy_chain[] =
{
- uint8_t ret = m_term_data;
- m_term_data = 0;
- return ret;
-}
+ { "ctc1" },
+ { "sio" },
+ { nullptr }
+};
-void dsb46_state::kbd_put(u8 data)
-{
- m_term_data = data;
-}
static MACHINE_CONFIG_START( dsb46 )
// basic machine hardware
MCFG_CPU_ADD("maincpu", Z80, 4000000)
MCFG_CPU_PROGRAM_MAP(dsb46_mem)
MCFG_CPU_IO_MAP(dsb46_io)
+ MCFG_Z80_DAISY_CHAIN(daisy_chain)
+
MCFG_MACHINE_RESET_OVERRIDE(dsb46_state, dsb46)
/* video hardware */
- MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(dsb46_state, kbd_put))
+ MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(dsb46_state, clock_tick))
+
+ /* Devices */
+ MCFG_Z80SIO_ADD("sio", XTAL_4MHz, 0, 0, 0, 0)
+ MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
+
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w))
+
+ MCFG_DEVICE_ADD("ctc1", Z80CTC, XTAL_4MHz)
+ MCFG_Z80CTC_INTR_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MACHINE_CONFIG_END
ROM_START( dsb46 )
diff --git a/src/mame/drivers/jade.cpp b/src/mame/drivers/jade.cpp
index e59d2e2ffa4..73dbe093cff 100644
--- a/src/mame/drivers/jade.cpp
+++ b/src/mame/drivers/jade.cpp
@@ -73,12 +73,12 @@ static MACHINE_CONFIG_START( jade )
MCFG_CPU_PROGRAM_MAP(jade_mem)
MCFG_CPU_IO_MAP(jade_io)
- MCFG_DEVICE_ADD("siot_clock", CLOCK, 153600)
+ MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600)
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(jade_state, clock_tick))
/* Devices */
MCFG_Z80SIO_ADD("sio", XTAL_4MHz, 0, 0, 0, 0)
- //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // interrupts not programmed by default
+ //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set
MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
diff --git a/src/mame/drivers/mits680b.cpp b/src/mame/drivers/mits680b.cpp
index cd3c008ab58..9511b933d46 100644
--- a/src/mame/drivers/mits680b.cpp
+++ b/src/mame/drivers/mits680b.cpp
@@ -2,11 +2,10 @@
// copyright-holders:Miodrag Milanovic, Robbbert
/***************************************************************************
- MITS Altair 680b
+MITS Altair 680b
- 03/12/2009 Skeleton driver.
-
- 08/June/2011 connected to a terminal
+2009-12-03 Skeleton driver.
+2011-06-08 Connected to a terminal
Monitor Commands:
J
@@ -17,39 +16,34 @@ P this does a rti and causes a momentary crash. Weird.
ToDo:
-- Hook ACIA back up, when there is some way to use it.
****************************************************************************/
#include "emu.h"
#include "cpu/m6800/m6800.h"
-#include "machine/mos6551.h"
-#include "machine/terminal.h"
+#include "machine/6850acia.h"
+#include "bus/rs232/rs232.h"
+#include "machine/clock.h"
-#define TERMINAL_TAG "terminal"
class mits680b_state : public driver_device
{
public:
mits680b_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_terminal(*this, TERMINAL_TAG)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_acia(*this, "acia")
{
}
- DECLARE_READ8_MEMBER(terminal_status_r);
- DECLARE_READ8_MEMBER(terminal_r);
DECLARE_READ8_MEMBER(status_check_r);
- void kbd_put(u8 data);
+ DECLARE_WRITE_LINE_MEMBER(clock_tick);
-protected:
+private:
virtual void machine_reset() override;
-
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
- uint8_t m_term_data;
+ required_device<acia6850_device> m_acia;
};
READ8_MEMBER( mits680b_state::status_check_r )
@@ -57,27 +51,20 @@ READ8_MEMBER( mits680b_state::status_check_r )
return 0; // crashes at start if bit 7 high
}
-READ8_MEMBER( mits680b_state::terminal_status_r )
-{
- return (m_term_data) ? 3 : 2;
-}
-
-READ8_MEMBER( mits680b_state::terminal_r )
+WRITE_LINE_MEMBER( mits680b_state::clock_tick )
{
- uint8_t ret = m_term_data;
- m_term_data = 0;
- return ret;
+ m_acia->write_txc(state);
+ m_acia->write_rxc(state);
}
static ADDRESS_MAP_START(mits680b_mem, AS_PROGRAM, 8, mits680b_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE( 0x0000, 0x03ff ) AM_RAM // 1024 bytes RAM
- //AM_RANGE( 0xf000, 0xf003 ) AM_DEVREADWRITE("acia", mos6551_device, read, write )
- AM_RANGE( 0xf000, 0xf000 ) AM_READ(terminal_status_r)
- AM_RANGE( 0xf001, 0xf001 ) AM_READ(terminal_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write)
- AM_RANGE( 0xf002, 0xf002 ) AM_READ(status_check_r)
- AM_RANGE( 0xff00, 0xffff ) AM_ROM
+ AM_RANGE(0x0000, 0x03ff) AM_RAM // 1024 bytes RAM
+ AM_RANGE(0xf000, 0xf000) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w)
+ AM_RANGE(0xf001, 0xf001) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w)
+ AM_RANGE(0xf002, 0xf002) AM_READ(status_check_r)
+ AM_RANGE(0xff00, 0xffff) AM_ROM AM_REGION("roms", 0)
ADDRESS_MAP_END
/* Input ports */
@@ -87,31 +74,29 @@ INPUT_PORTS_END
void mits680b_state::machine_reset()
{
- m_term_data = 0;
-}
-
-void mits680b_state::kbd_put(u8 data)
-{
- m_term_data = data;
}
static MACHINE_CONFIG_START( mits680b )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu",M6800, XTAL_1MHz / 2)
+ MCFG_CPU_ADD("maincpu", M6800, XTAL_1MHz / 2)
MCFG_CPU_PROGRAM_MAP(mits680b_mem)
- /* video hardware */
- MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(mits680b_state, kbd_put))
+ MCFG_DEVICE_ADD("acia", ACIA6850, 0)
+ MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts))
+
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
- /* acia */
- //MCFG_ACIA6551_ADD("acia")
+ MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(mits680b_state, clock_tick))
MACHINE_CONFIG_END
/* ROM definition */
ROM_START( mits680b )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "mits680b.bin", 0xff00, 0x0100, CRC(397e717f) SHA1(257d3eb1343b8611dc05455aeed33615d581f29c))
+ ROM_REGION( 0x100, "roms", ROMREGION_ERASEFF )
+ ROM_LOAD( "mits680b.bin", 0x0000, 0x0100, CRC(397e717f) SHA1(257d3eb1343b8611dc05455aeed33615d581f29c))
ROM_END
/* Driver */
diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp
index 3c374671407..e79cfcf0514 100644
--- a/src/mame/drivers/namcos22.cpp
+++ b/src/mame/drivers/namcos22.cpp
@@ -5660,21 +5660,21 @@ GAME( 1994, cybrcomm, 0, cybrcomm, cybrcomm, namcos22_state, cybrcomm,
GAME( 1995, raveracw, 0, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV2, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 07/16/95
GAME( 1995, raveracj, raveracw, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1 Ver.B, Japan)" , MACHINE_IMPERFECT_GRAPHICS ) // 07/16/95
GAME( 1995, raveracja, raveracw, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1, Japan)" , MACHINE_IMPERFECT_GRAPHICS ) // 06/29/95
-GAME( 1994, acedrvrw, 0, namcos22, acedrvr, namcos22_state, acedrvr, ROT0, "Namco", "Ace Driver: Racing Evolution (Rev. AD2)", MACHINE_IMPERFECT_GRAPHICS ) // 94/10/20 16:22:25
-GAME( 1996, victlapw, 0, namcos22, victlap, namcos22_state, victlap, ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV2)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/02/13 17:50:06
+GAME( 1994, acedrvrw, 0, namcos22, acedrvr, namcos22_state, acedrvr, ROT0, "Namco", "Ace Driver: Racing Evolution (Rev. AD2, World)", MACHINE_IMPERFECT_GRAPHICS ) // 94/10/20 16:22:25
+GAME( 1996, victlapw, 0, namcos22, victlap, namcos22_state, victlap, ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV2, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/02/13 17:50:06
/* Super System22 games */
-GAME( 1994, alpinerd, 0, alpine, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D)" , MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1994, alpinerc, alpinerd, alpine, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C)" , MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1994, alpinerd, 0, alpine, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D, World)" , MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1994, alpinerc, alpinerd, alpine, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C, World)" , MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, airco22b, 0, airco22b, airco22, namcos22_state, airco22, ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // various problems
GAME( 1995, cybrcycc, 0, cybrcycc, cybrcycc, namcos22_state, cybrcyc, ROT0, "Namco", "Cyber Cycles (Rev. CB2 Ver.C, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 95/04/04
GAME( 1995, dirtdash, 0, dirtdash, dirtdash, namcos22_state, dirtdash, ROT0, "Namco", "Dirt Dash (Rev. DT2, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 95/12/20 20:01:56
GAME( 1995, timecris, 0, timecris, timecris, namcos22_state, timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.B, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/04/02 18:48:00
GAME( 1995, timecrisa,timecris, timecris, timecris, namcos22_state, timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.A, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/01/08 18:56:09
-GAME( 1996, propcycl, 0, propcycl, propcycl, namcos22_state, propcycl, ROT0, "Namco", "Prop Cycle (Rev. PR2 Ver.A)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13
-GAME( 1996, alpinesa, 0, alpinesa, alpiner, namcos22_state, alpinesa, ROT0, "Namco", "Alpine Surfer (Rev. AF2 Ver.A)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 96/07/01 15:19:23. major gfx problems, slave dsp?
+GAME( 1996, propcycl, 0, propcycl, propcycl, namcos22_state, propcycl, ROT0, "Namco", "Prop Cycle (Rev. PR2 Ver.A, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13
+GAME( 1996, alpinesa, 0, alpinesa, alpiner, namcos22_state, alpinesa, ROT0, "Namco", "Alpine Surfer (Rev. AF2 Ver.A, World)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 96/07/01 15:19:23. major gfx problems, slave dsp?
GAME( 1996, tokyowar, 0, tokyowar, tokyowar, namcos22_state, tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW2 Ver.A, World)" , MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 96/09/03 14:08:47. near-invincible tanks, maybe related to timecris helicopter bug?
-GAME( 1996, aquajet, 0, cybrcycc, aquajet, namcos22_state, aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30
-GAME( 1996, alpinr2b, 0, alpine, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.B)" , MACHINE_IMPERFECT_GRAPHICS ) // 97/01/10 17:10:59
-GAME( 1996, alpinr2a, alpinr2b, alpine, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.A)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/12/06 13:45:05
+GAME( 1996, aquajet, 0, cybrcycc, aquajet, namcos22_state, aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30
+GAME( 1996, alpinr2b, 0, alpine, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.B, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 97/01/10 17:10:59
+GAME( 1996, alpinr2a, alpinr2b, alpine, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.A, World)" , MACHINE_IMPERFECT_GRAPHICS ) // 96/12/06 13:45:05
GAME( 1996, adillor, 0, adillor, adillor, namcos22_state, adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A, Japan)" , MACHINE_IMPERFECT_GRAPHICS ) // 97/04/07 19:19:41
diff --git a/src/mame/drivers/pm68k.cpp b/src/mame/drivers/pm68k.cpp
index fb1c6721970..570f6e59770 100644
--- a/src/mame/drivers/pm68k.cpp
+++ b/src/mame/drivers/pm68k.cpp
@@ -14,22 +14,21 @@ Status: Boots into monitor, some commands work, some freeze.
#include "cpu/m68000/m68000.h"
#include "machine/terminal.h"
-#define TERMINAL_TAG "terminal"
class pm68k_state : public driver_device
{
public:
pm68k_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_p_base(*this, "rambase"),
- m_maincpu(*this, "maincpu"),
- m_terminal(*this, TERMINAL_TAG)
- {
- }
+ : driver_device(mconfig, type, tag)
+ , m_p_base(*this, "rambase")
+ , m_maincpu(*this, "maincpu")
+ , m_terminal(*this, "terminal")
+ { }
void kbd_put(u8 data);
DECLARE_READ16_MEMBER(keyin_r);
DECLARE_READ16_MEMBER(status_r);
+
private:
uint8_t m_term_data;
virtual void machine_reset() override;
@@ -55,8 +54,8 @@ static ADDRESS_MAP_START(pm68k_mem, AS_PROGRAM, 16, pm68k_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xffffff)
AM_RANGE(0x000000, 0x1fffff) AM_RAM AM_SHARE("rambase")
- AM_RANGE(0x200000, 0x205fff) AM_ROM AM_REGION("maincpu", 0)
- AM_RANGE(0x600000, 0x600001) AM_READ(keyin_r) AM_DEVWRITE8(TERMINAL_TAG, generic_terminal_device, write, 0xff00)
+ AM_RANGE(0x200000, 0x205fff) AM_ROM AM_REGION("roms", 0)
+ AM_RANGE(0x600000, 0x600001) AM_READ(keyin_r) AM_DEVWRITE8("terminal", generic_terminal_device, write, 0xff00)
AM_RANGE(0x600002, 0x600003) AM_READ(status_r)
ADDRESS_MAP_END
@@ -68,7 +67,7 @@ INPUT_PORTS_END
void pm68k_state::machine_reset()
{
- uint8_t* ROM = memregion("maincpu")->base();
+ uint8_t* ROM = memregion("roms")->base();
memcpy(m_p_base, ROM, 8);
m_maincpu->reset();
}
@@ -84,13 +83,13 @@ static MACHINE_CONFIG_START( pm68k )
MCFG_CPU_PROGRAM_MAP(pm68k_mem)
/* video hardware */
- MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
+ MCFG_DEVICE_ADD("terminal", GENERIC_TERMINAL, 0)
MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(pm68k_state, kbd_put))
MACHINE_CONFIG_END
/* ROM definition */
ROM_START( pm68k )
- ROM_REGION16_BE(0x6000, "maincpu", 0)
+ ROM_REGION16_BE(0x6000, "roms", 0)
ROM_LOAD16_BYTE("u103", 0x00000, 0x1000, CRC(86d32d6c) SHA1(ce9c54b62c64c37ae9106fb06b8a2b2152d1ddf6) )
ROM_LOAD16_BYTE("u101", 0x00001, 0x1000, CRC(66607e54) SHA1(06f380fdeba13dc3aee826dd166f4bd3031febb9) )
ROM_LOAD16_BYTE("u104", 0x02000, 0x2000, CRC(ccd2ba4d) SHA1(5cdcf875e136aa9af5f150e0102cd209c496885e) )
diff --git a/src/mame/drivers/sms.cpp b/src/mame/drivers/sms.cpp
index 70aae875a66..66d33a1ac8f 100644
--- a/src/mame/drivers/sms.cpp
+++ b/src/mame/drivers/sms.cpp
@@ -279,7 +279,7 @@ static ADDRESS_MAP_START( sms_mem, AS_PROGRAM, 8, sms_state )
AM_RANGE(0x0000, 0x3fff) AM_READ(read_0000)
AM_RANGE(0x4000, 0x7fff) AM_READ(read_4000)
AM_RANGE(0x8000, 0xbfff) AM_READ(read_8000)
- AM_RANGE(0xc000, 0xfff7) AM_READWRITE(read_ram, write_ram)
+ AM_RANGE(0xc000, 0xfffb) AM_READWRITE(read_ram, write_ram)
AM_RANGE(0xfffc, 0xffff) AM_READWRITE(sms_mapper_r, sms_mapper_w) /* Bankswitch control */
ADDRESS_MAP_END
@@ -1109,8 +1109,8 @@ ROM_START(gamegear)
ROM_FILL(0x0000, 0x4000, 0x00)
ROM_REGION(0x0400, "user1", 0)
- ROM_SYSTEM_BIOS( 0, "none", "No BIOS" ) /* gamegear */
- ROM_SYSTEM_BIOS( 1, "majesco", "Majesco BIOS" ) /* gamg */
+ ROM_SYSTEM_BIOS( 0, "none", "No BIOS" )
+ ROM_SYSTEM_BIOS( 1, "majesco", "Majesco BIOS" )
ROMX_LOAD("majbios.rom", 0x0000, 0x0400, CRC(0ebea9d4) SHA1(914aa165e3d879f060be77870d345b60cfeb4ede), ROM_BIOS(2))
ROM_END
diff --git a/src/mame/drivers/systec.cpp b/src/mame/drivers/systec.cpp
index ce953e3c230..5cf5599b301 100644
--- a/src/mame/drivers/systec.cpp
+++ b/src/mame/drivers/systec.cpp
@@ -35,46 +35,28 @@
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "machine/terminal.h"
+#include "machine/z80sio.h"
+#include "machine/clock.h"
+#include "bus/rs232/rs232.h"
-#define TERMINAL_TAG "terminal"
class systec_state : public driver_device
{
public:
systec_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_terminal(*this, TERMINAL_TAG)
- {
- }
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_sio(*this, "sio")
+ { }
+ DECLARE_WRITE_LINE_MEMBER(clock_tick);
+
+private:
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
- DECLARE_READ8_MEMBER(systec_c4_r);
- DECLARE_READ8_MEMBER(systec_c6_r);
- void kbd_put(u8 data);
- uint8_t m_term_data;
+ required_device<z80sio_device> m_sio;
virtual void machine_reset() override;
};
-READ8_MEMBER( systec_state::systec_c4_r )
-{
- uint8_t ret = m_term_data;
- m_term_data = 0;
- return ret;
-}
-
-READ8_MEMBER( systec_state::systec_c6_r )
-{
- return 0x04 | (m_term_data ? 1 : 0);
-}
-
-void systec_state::kbd_put(u8 data)
-{
- m_term_data = data;
-}
-
static ADDRESS_MAP_START(systec_mem, AS_PROGRAM, 8, systec_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0xffff) AM_RAM AM_REGION("maincpu", 0)
@@ -82,8 +64,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(systec_io, AS_IO, 8, systec_state)
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0xc4, 0xc4) AM_READ(systec_c4_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write)
- AM_RANGE(0xc6, 0xc6) AM_READ(systec_c6_r)
+ AM_RANGE(0x68, 0x6b) // fdc?
+ AM_RANGE(0x6c, 0x6c) // motor control?
+ AM_RANGE(0xc4, 0xc7) AM_DEVREADWRITE("sio", z80sio_device, cd_ba_r, cd_ba_w)
ADDRESS_MAP_END
/* Input ports */
@@ -97,16 +80,32 @@ void systec_state::machine_reset()
memcpy(m_p_maincpu, m_p_roms, 0x2000);
}
+// source of baud frequency is unknown, so we invent a clock
+WRITE_LINE_MEMBER( systec_state::clock_tick )
+{
+ m_sio->txca_w(state);
+ m_sio->rxca_w(state);
+}
+
static MACHINE_CONFIG_START( systec )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, XTAL_16MHz / 4)
MCFG_CPU_PROGRAM_MAP(systec_mem)
MCFG_CPU_IO_MAP(systec_io)
+ MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(systec_state, clock_tick))
+
+ /* Devices */
+ MCFG_Z80SIO_ADD("sio", XTAL_4MHz, 0, 0, 0, 0)
+ //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
- /* video hardware */
- MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(systec_state, kbd_put))
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w))
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/zsbc3.cpp b/src/mame/drivers/zsbc3.cpp
index 4f2ad18238b..3060d52c07e 100644
--- a/src/mame/drivers/zsbc3.cpp
+++ b/src/mame/drivers/zsbc3.cpp
@@ -36,44 +36,30 @@
#include "emu.h"
#include "cpu/z80/z80.h"
-#include "machine/terminal.h"
+#include "machine/z80sio.h"
+#include "machine/z80pio.h"
+#include "machine/clock.h"
+#include "bus/rs232/rs232.h"
-#define TERMINAL_TAG "terminal"
class zsbc3_state : public driver_device
{
public:
zsbc3_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_terminal(*this, TERMINAL_TAG)
- {
- }
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_sio(*this, "sio")
+ { }
- DECLARE_READ8_MEMBER(zsbc3_28_r);
- DECLARE_READ8_MEMBER(zsbc3_2a_r);
- void kbd_put(u8 data);
+ DECLARE_WRITE_LINE_MEMBER(clock_tick);
private:
- uint8_t m_term_data;
virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
- required_device<generic_terminal_device> m_terminal;
+ required_device<z80sio_device> m_sio;
};
-READ8_MEMBER( zsbc3_state::zsbc3_28_r )
-{
- uint8_t ret = m_term_data;
- m_term_data = 0;
- return ret;
-}
-
-READ8_MEMBER( zsbc3_state::zsbc3_2a_r )
-{
- return (m_term_data) ? 5 : 4;
-}
-
static ADDRESS_MAP_START(zsbc3_mem, AS_PROGRAM, 8, zsbc3_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE( 0x0000, 0x07ff ) AM_ROM
@@ -83,8 +69,10 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START(zsbc3_io, AS_IO, 8, zsbc3_state)
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x28, 0x28) AM_READ(zsbc3_28_r) AM_DEVWRITE(TERMINAL_TAG, generic_terminal_device, write)
- AM_RANGE(0x2a, 0x2a) AM_READ(zsbc3_2a_r)
+ AM_RANGE(0x08, 0x0b) //AM_DEVREADWRITE("pio", z80pio_device, read, write) // the control bytes appear to be for a PIO
+ AM_RANGE(0x28, 0x2b) AM_DEVREADWRITE("sio", z80sio_device, cd_ba_r, cd_ba_w)
+ AM_RANGE(0x30, 0x30) // unknown device, init bytes = 45, 0D
+ AM_RANGE(0x38, 0x38) // unknown device, init byte = C3
ADDRESS_MAP_END
/* Input ports */
@@ -96,9 +84,11 @@ void zsbc3_state::machine_reset()
{
}
-void zsbc3_state::kbd_put(u8 data)
+// source of baud frequency is unknown, so we invent a clock
+WRITE_LINE_MEMBER( zsbc3_state::clock_tick )
{
- m_term_data = data;
+ m_sio->txca_w(state);
+ m_sio->rxca_w(state);
}
@@ -109,8 +99,22 @@ static MACHINE_CONFIG_START( zsbc3 )
MCFG_CPU_IO_MAP(zsbc3_io)
/* video hardware */
- MCFG_DEVICE_ADD(TERMINAL_TAG, GENERIC_TERMINAL, 0)
- MCFG_GENERIC_TERMINAL_KEYBOARD_CB(PUT(zsbc3_state, kbd_put))
+ MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600)
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(zsbc3_state, clock_tick))
+
+ /* Devices */
+ MCFG_Z80SIO_ADD("sio", XTAL_16MHz / 4, 0, 0, 0, 0)
+ //MCFG_Z80SIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) // no evidence of a daisy chain because IM2 is not set
+ MCFG_Z80SIO_OUT_TXDA_CB(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_Z80SIO_OUT_DTRA_CB(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
+ MCFG_Z80SIO_OUT_RTSA_CB(DEVWRITELINE("rs232", rs232_port_device, write_rts))
+
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("sio", z80sio_device, rxa_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("sio", z80sio_device, ctsa_w))
+
+ MCFG_DEVICE_ADD("pio", Z80PIO, XTAL_16MHz / 4)
+ //MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0))
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mame/machine/deco_irq.cpp b/src/mame/machine/deco_irq.cpp
index 3724f493813..b9d04aa2797 100644
--- a/src/mame/machine/deco_irq.cpp
+++ b/src/mame/machine/deco_irq.cpp
@@ -10,7 +10,6 @@
***************************************************************************/
#include "emu.h"
-#include "screen.h"
#include "deco_irq.h"
@@ -141,82 +140,77 @@ TIMER_CALLBACK_MEMBER( deco_irq_device::scanline_callback )
// INTERFACE
//**************************************************************************
-READ8_MEMBER( deco_irq_device::read )
+DEVICE_ADDRESS_MAP_START(map, 8, deco_irq_device)
+ AM_RANGE(0x0, 0x0) AM_WRITE(control_w)
+ AM_RANGE(0x1, 0x1) AM_READWRITE(scanline_r, scanline_w)
+ AM_RANGE(0x2, 0x2) AM_READWRITE(raster_irq_ack_r, vblank_irq_ack_w)
+ AM_RANGE(0x3, 0x3) AM_READ(status_r)
+ADDRESS_MAP_END
+
+WRITE8_MEMBER( deco_irq_device::control_w )
{
- switch (offset)
- {
- case 1:
- return m_raster_irq_scanline;
-
- case 2:
- m_raster_irq = false;
- m_raster1_irq_cb(CLEAR_LINE);
- m_raster2_irq_cb(CLEAR_LINE);
- return 0xff;
-
- case 3:
- uint8_t data = 0;
-
- // 7------- unknown
- // -6------ lightgun irq
- // --5----- raster irq
- // ---4---- vblank irq
- // ----32-- unknown
- // ------1- vblank
- // -------0 hblank?
-
- data |= 1 << 7;
- data |= (m_lightgun_irq ? 1 : 0) << 6;
- data |= (m_raster_irq ? 1 : 0) << 5;
- data |= (m_vblank_irq ? 1 : 0) << 4;
- data |= 0 << 3;
- data |= 0 << 2;
- data |= m_screen->vblank() << 1;
-// data |= (m_screen->hblank() & m_screen->vblank()) << 0;
- data |= m_screen->hblank() << 0;
-
- return data;
- }
+ // 765----- unused?
+ // ---4---- raster irq target
+ // ----3--- unused?
+ // -----2-- unknown
+ // ------1- raster irq mask
+ // -------0 unused?
+
+ m_raster_irq_target = BIT(data, 4);
+ m_raster_irq_masked = bool(BIT(data, 1));
+
+ if (m_raster_irq_masked)
+ raster_irq_ack_r(space, 0);
+}
- logerror("Read from invalid offset %x\n", offset);
- return 0xff;
+READ8_MEMBER( deco_irq_device::scanline_r )
+{
+ return m_raster_irq_scanline;
}
-WRITE8_MEMBER( deco_irq_device::write )
+WRITE8_MEMBER( deco_irq_device::scanline_w )
{
- switch (offset)
- {
- case 0:
- // 765----- unused?
- // ---4---- raster irq target
- // ----3--- unused?
- // -----2-- unknown
- // ------1- raster irq mask
- // -------0 unused?
-
- m_raster_irq_target = BIT(data, 4);
- m_raster_irq_masked = bool(BIT(data, 1));
-
- if (m_raster_irq_masked)
- {
- m_raster_irq = false;
- m_raster1_irq_cb(CLEAR_LINE);
- m_raster2_irq_cb(CLEAR_LINE);
- }
+ m_raster_irq_scanline = data;
+}
- return;
+READ8_MEMBER( deco_irq_device::raster_irq_ack_r )
+{
+ m_raster_irq = false;
+ m_raster1_irq_cb(CLEAR_LINE);
+ m_raster2_irq_cb(CLEAR_LINE);
- case 1:
- m_raster_irq_scanline = data;
- return;
+ return 0xff;
+}
- case 2:
- m_vblank_irq = false;
- m_vblank_irq_cb(CLEAR_LINE);
- return;
- }
+WRITE8_MEMBER( deco_irq_device::vblank_irq_ack_w )
+{
+ m_vblank_irq = false;
+ m_vblank_irq_cb(CLEAR_LINE);
+}
- logerror("Write %02x to invalid offset %x\n", data, offset);
+READ8_MEMBER( deco_irq_device::status_r )
+{
+ uint8_t data = 0;
+
+ // 7------- unknown
+ // -6------ lightgun irq
+ // --5----- raster irq
+ // ---4---- vblank irq
+ // ----32-- unknown
+ // ------1- vblank
+ // -------0 hblank?
+
+ data |= 1 << 7;
+ data |= (m_lightgun_irq ? 1 : 0) << 6;
+ data |= (m_raster_irq ? 1 : 0) << 5;
+ data |= (m_vblank_irq ? 1 : 0) << 4;
+ data |= 0 << 3;
+ data |= 0 << 2;
+ data |= m_screen->vblank() << 1;
+// data |= (m_screen->hblank() & m_screen->vblank()) << 0;
+ data |= m_screen->hblank() << 0;
+
+ return data;
}
WRITE_LINE_MEMBER( deco_irq_device::lightgun1_trigger_w )
@@ -236,4 +230,3 @@ WRITE_LINE_MEMBER( deco_irq_device::lightgun_irq_ack_w )
m_lightgun_irq = false;
m_lightgun_irq_cb(CLEAR_LINE);
}
-
diff --git a/src/mame/machine/deco_irq.h b/src/mame/machine/deco_irq.h
index d8b4138a5b4..69a319dba81 100644
--- a/src/mame/machine/deco_irq.h
+++ b/src/mame/machine/deco_irq.h
@@ -11,6 +11,8 @@
#pragma once
+#include "screen.h"
+
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
@@ -59,7 +61,6 @@ public:
template <class Object> static devcb_base &set_lightgun_irq_callback(device_t &device, Object &&cb)
{ return downcast<deco_irq_device &>(device).m_lightgun_irq_cb.set_callback(std::forward<Object>(cb)); }
-
template <class Object> static devcb_base &set_raster1_irq_callback(device_t &device, Object &&cb)
{ return downcast<deco_irq_device &>(device).m_raster1_irq_cb.set_callback(std::forward<Object>(cb)); }
@@ -69,14 +70,19 @@ public:
template <class Object> static devcb_base &set_vblank_irq_callback(device_t &device, Object &&cb)
{ return downcast<deco_irq_device &>(device).m_vblank_irq_cb.set_callback(std::forward<Object>(cb)); }
-
// static configuration
static void set_screen_tag(device_t &device, const char *tag);
TIMER_CALLBACK_MEMBER(scanline_callback);
- DECLARE_READ8_MEMBER(read);
- DECLARE_WRITE8_MEMBER(write);
+ DECLARE_ADDRESS_MAP(map, 8);
+
+ DECLARE_WRITE8_MEMBER(control_w);
+ DECLARE_READ8_MEMBER(scanline_r);
+ DECLARE_WRITE8_MEMBER(scanline_w);
+ DECLARE_READ8_MEMBER(raster_irq_ack_r);
+ DECLARE_WRITE8_MEMBER(vblank_irq_ack_w);
+ DECLARE_READ8_MEMBER(status_r);
DECLARE_WRITE_LINE_MEMBER(lightgun1_trigger_w);
DECLARE_WRITE_LINE_MEMBER(lightgun2_trigger_w);
@@ -118,4 +124,5 @@ private:
// device type definition
DECLARE_DEVICE_TYPE(DECO_IRQ, deco_irq_device)
+
#endif // MAME_MACHINE_DECO_IRQ_H
diff --git a/src/mame/machine/sms.cpp b/src/mame/machine/sms.cpp
index 93f24511f7c..e6178e045ec 100644
--- a/src/mame/machine/sms.cpp
+++ b/src/mame/machine/sms.cpp
@@ -331,7 +331,7 @@ READ8_MEMBER(sms_state::sms_input_port_dc_r)
else
{
// Return if the I/O chip is disabled (1). This check isn't performed
- // for the Game Gear because has no effect on it (even in SMS mode?).
+ // for the Game Gear because has no effect on it, even in SMS mode.
if (m_mem_ctrl_reg & IO_CHIP)
return 0xff;
}
@@ -376,7 +376,7 @@ READ8_MEMBER(sms_state::sms_input_port_dd_r)
else
{
// Return if the I/O chip is disabled (1). This check isn't performed
- // for the Game Gear because has no effect on it (even in SMS mode?).
+ // for the Game Gear because has no effect on it, even in SMS mode.
if (m_mem_ctrl_reg & IO_CHIP)
return 0xff;
}
diff --git a/src/mame/video/model2rd.hxx b/src/mame/video/model2rd.hxx
index 7f2754b4d21..22d9107fc56 100644
--- a/src/mame/video/model2rd.hxx
+++ b/src/mame/video/model2rd.hxx
@@ -79,8 +79,12 @@ void MODEL2_FUNC_NAME(int32_t scanline, const extent_t& extent, const m2_poly_ex
return;
#else
- luma = lumaram[BYTE_XOR_LE(lumabase + (0xf << 3))] & 0x3F;
+ luma = lumaram[BYTE_XOR_LE(lumabase + (0xf << 3))];
+ // fix luma overflow
+ if(luma > 0x3f)
+ luma = 0x3f;
+
color = state->m_palram[BYTE_XOR_LE(color + 0x1000)] & 0x7fff;
colortable_r += ((color >> 0) & 0x1f) << 8;
@@ -177,7 +181,11 @@ void MODEL2_FUNC_NAME(int32_t scanline, const extent_t& extent, const m2_poly_ex
if ( t == 0x0f )
continue;
#endif
- luma = lumaram[BYTE_XOR_LE(lumabase + (t << 3))] & 0x3f;
+ luma = lumaram[BYTE_XOR_LE(lumabase + (t << 3))];
+
+ // Virtua Striker sets up a luma of 0x40 for flags, fix here.
+ if(luma > 0x3f)
+ luma = 0x3f;
/* we have the 6 bits of luma information along with 5 bits per color component */
/* now build and index into the master color lookup table and extract the raw RGB values */