summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author bmcphail <bmcphail@vcmame.net>2016-07-20 17:08:28 -0400
committer bmcphail <bmcphail@vcmame.net>2016-07-20 17:08:28 -0400
commit02612740daa30a973b9c2de9795590bd9075e31a (patch)
tree13efd1fe8f96baa9e909f305aae066b28c1264b8 /src
parent14d8266655bca73b571415a6ea39d4889447a4bc (diff)
parente78ee1be2e0cfc410d88c75aa85d255529f7eb16 (diff)
Merge branch 'master' of https://github.com/mamedev/mame
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/sunkbd/sparckbd.cpp (renamed from src/devices/bus/rs232/sparckbd.cpp)113
-rw-r--r--src/devices/bus/sunkbd/sparckbd.h (renamed from src/devices/bus/rs232/sparckbd.h)25
-rw-r--r--src/devices/bus/sunkbd/sunkbd.cpp95
-rw-r--r--src/devices/bus/sunkbd/sunkbd.h79
-rw-r--r--src/mame/drivers/fidel6502.cpp22
-rw-r--r--src/mame/drivers/spdodgeb.cpp45
-rw-r--r--src/mame/drivers/sun4.cpp19
-rw-r--r--src/mame/mame.lst1
-rw-r--r--src/mame/video/spdodgeb.cpp2
9 files changed, 292 insertions, 109 deletions
diff --git a/src/devices/bus/rs232/sparckbd.cpp b/src/devices/bus/sunkbd/sparckbd.cpp
index 3df48ba3d61..2e3dcee19e0 100644
--- a/src/devices/bus/rs232/sparckbd.cpp
+++ b/src/devices/bus/sunkbd/sparckbd.cpp
@@ -6,9 +6,8 @@
/*
- TODO: implement keyclick
TODO: determine default keyclick state on real keyboard
- TODO: use 1,200 Baud properly once we work out what's going on with the SCC
+ TODO: scancodes for extra key on international layout
HLE SPARC serial keyboard compatible with Sun Type 4/5/6
@@ -16,7 +15,7 @@
0000 0001 reset (keyboard responds with self test pass/fail)
0000 0010 bell on (480us period)
0000 0011 bell off
- 0000 1010 enable keyclick (5us duration 480us period on make)
+ 0000 1010 enable keyclick (5ms duration 480us period on make)
0000 1011 disable keyclick
0000 1110 ---- lscn LED (1 = on, l = caps lock, s = scroll lock, c = compose, n = num lock)
0000 1111 layout request (keyboard responds with layout response)
@@ -297,9 +296,9 @@ sparc_keyboard_device::sparc_keyboard_device(
char const *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source)
, device_serial_interface(mconfig, *this)
- , device_rs232_port_interface(mconfig, *this)
+ , device_sun_keyboard_port_interface(mconfig, *this)
, m_scan_timer(nullptr)
- , m_tx_delay_timer(nullptr)
+ , m_click_timer(nullptr)
, m_dips(*this, "DIP")
, m_key_inputs{
{ *this, "ROW0" }, { *this, "ROW1" },
@@ -314,6 +313,7 @@ sparc_keyboard_device::sparc_keyboard_device(
, m_tail(0)
, m_empty(0)
, m_rx_state(RX_IDLE)
+ , m_keyclick(0)
, m_beeper_state(0)
{
}
@@ -340,7 +340,7 @@ void sparc_keyboard_device::device_start()
device_serial_interface::register_save_state(machine().save(), this);
m_scan_timer = timer_alloc(SCAN_TIMER_ID);
- m_tx_delay_timer = timer_alloc(TX_DELAY_TIMER_ID);
+ m_click_timer = timer_alloc(CLICK_TIMER_ID);
save_item(NAME(m_current_keys));
save_item(NAME(m_next_row));
@@ -349,6 +349,7 @@ void sparc_keyboard_device::device_start()
save_item(NAME(m_tail));
save_item(NAME(m_empty));
save_item(NAME(m_rx_state));
+ save_item(NAME(m_keyclick));
save_item(NAME(m_beeper_state));
}
@@ -362,20 +363,17 @@ void sparc_keyboard_device::device_reset()
m_head = m_tail = 0;
m_empty = 1;
m_rx_state = RX_IDLE;
+ m_keyclick = 0;
m_beeper_state = 0;
// configure device_serial_interface
- set_data_frame(1, 8, PARITY_NONE, STOP_BITS_1);
- set_rate(1200);
+ set_data_frame(START_BIT_COUNT, DATA_BIT_COUNT, PARITY, STOP_BITS);
+ set_rate(BAUD);
receive_register_reset();
transmit_register_reset();
- // set device_rs232_port_interface lines - note that only RxD is physically present
+ // set device_sun_keyboard_port_interface lines
output_rxd(1);
- output_dcd(0);
- output_dsr(0);
- output_ri(0);
- output_cts(0);
// send reset response
send_byte(0xffU);
@@ -391,7 +389,7 @@ void sparc_keyboard_device::device_reset()
// kick the scan timer
m_scan_timer->adjust(attotime::from_hz(1'200), 0, attotime::from_hz(1'200));
- m_tx_delay_timer->reset();
+ m_click_timer->reset();
}
@@ -403,20 +401,9 @@ void sparc_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, i
scan_row();
break;
- case TX_DELAY_TIMER_ID:
- assert(is_transmit_register_empty());
- assert(!m_empty || (m_head == m_tail));
- assert(m_head < ARRAY_LENGTH(m_fifo));
- assert(m_tail < ARRAY_LENGTH(m_fifo));
-
- if (!m_empty)
- {
- printf("SPARC keyboard: send queued: %02x\n", m_fifo[m_head]);
- fflush(stdout);
- transmit_register_setup(m_fifo[m_head]);
- m_head = (m_head + 1) & 0x0fU;
- m_empty = (m_head == m_tail) ? 1 : 0;
- }
+ case CLICK_TIMER_ID:
+ m_beeper_state &= ~UINT8(BEEPER_CLICK);
+ m_beeper->set_state(m_beeper_state ? 1 : 0);
break;
default:
@@ -433,7 +420,18 @@ void sparc_keyboard_device::tra_callback()
void sparc_keyboard_device::tra_complete()
{
- m_tx_delay_timer->reset(attotime::from_hz(1'200 / 10));
+ assert(!m_empty || (m_head == m_tail));
+ assert(m_head < ARRAY_LENGTH(m_fifo));
+ assert(m_tail < ARRAY_LENGTH(m_fifo));
+
+ if (!m_empty)
+ {
+ printf("SPARC keyboard: send queued: %02x\n", m_fifo[m_head]);
+ fflush(stdout);
+ transmit_register_setup(m_fifo[m_head]);
+ m_head = (m_head + 1) & 0x0fU;
+ m_empty = (m_head == m_tail) ? 1 : 0;
+ }
}
@@ -446,8 +444,6 @@ void sparc_keyboard_device::rcv_complete()
switch (m_rx_state)
{
case RX_LED:
- printf("SPARC keyboard: LED data: %02x\n", code);
- fflush(stdout);
machine().output().set_led_value(LED_NUM, BIT(code, 0));
machine().output().set_led_value(LED_COMPOSE, BIT(code, 1));
machine().output().set_led_value(LED_SCROLL, BIT(code, 2));
@@ -460,58 +456,41 @@ void sparc_keyboard_device::rcv_complete()
case RX_IDLE:
switch (code)
{
- // Reset
- case 0x01U:
- printf("SPARC keyboard: reset\n");
- fflush(stdout);
+ case COMMAND_RESET:
device_reset();
break;
- // Bell on
- case 0x02U:
- printf("SPARC keyboard: bell on\n");
- fflush(stdout);
+ case COMMAND_BELL_ON:
m_beeper_state |= UINT8(BEEPER_BELL);
m_beeper->set_state(m_beeper_state ? 1 : 0);
m_rx_state = RX_IDLE;
break;
- // Bell off
- case 0x03U:
- printf("SPARC keyboard: bell off\n");
- fflush(stdout);
+ case COMMAND_BELL_OFF:
m_beeper_state &= ~UINT8(BEEPER_BELL);
m_beeper->set_state(m_beeper_state ? 1 : 0);
m_rx_state = RX_IDLE;
break;
- // Click on
- case 0x0aU:
- printf("SPARC keyboard: keyclick on\n");
- fflush(stdout);
- logerror("Keyclick on");
+ case COMMAND_CLICK_ON:
+ m_keyclick = 1;
m_rx_state = RX_IDLE;
break;
- // Click off
- case 0x0bU:
- printf("SPARC keyboard: keyclick off\n");
- fflush(stdout);
- logerror("Keyclick off");
+ case COMMAND_CLICK_OFF:
+ m_keyclick = 0;
+ m_click_timer->reset();
+ m_beeper_state &= ~UINT8(BEEPER_CLICK);
+ m_beeper->set_state(m_beeper_state ? 1 : 0);
m_rx_state = RX_IDLE;
break;
- // LED command
- case 0x0eU:
- printf("SPARC keyboard: LED command\n");
- fflush(stdout);
+ case COMMAND_LED:
m_rx_state = RX_LED;
break;
- // Layout command
- case 0x0fU:
- printf("SPARC keyboard: layout command\n");
- fflush(stdout);
+ case COMMAND_LAYOUT:
+ send_byte(0xfeU);
send_byte(UINT8(m_dips->read() & 0x3fU));
m_rx_state = RX_IDLE;
break;
@@ -531,7 +510,7 @@ void sparc_keyboard_device::scan_row()
UINT16 const row(m_key_inputs[m_next_row]->read());
UINT16 &current(m_current_keys[m_next_row]);
- bool keyup(false);
+ bool keydown(false), keyup(false);
for (UINT8 bit = 0; (bit < 16) && (m_empty || (m_head != m_tail)); ++bit)
{
@@ -539,12 +518,20 @@ void sparc_keyboard_device::scan_row()
if ((row ^ current) & mask)
{
UINT8 const make_break((row & mask) ? 0x00U : 0x80U);
+ keydown = keydown || !bool(make_break);
keyup = keyup || bool(make_break);
current = (current & ~mask) | (row & mask);
send_byte(make_break | (m_next_row << 4) | bit);
}
}
+ if (keydown && m_keyclick)
+ {
+ m_beeper_state |= UINT8(BEEPER_CLICK);
+ m_beeper->set_state(m_beeper_state ? 1 : 0);
+ m_click_timer->reset(attotime::from_msec(5));
+ }
+
if (keyup)
{
UINT16 const acc(
@@ -567,7 +554,7 @@ void sparc_keyboard_device::send_byte(UINT8 code)
assert(m_head < ARRAY_LENGTH(m_fifo));
assert(m_tail < ARRAY_LENGTH(m_fifo));
- if (m_empty && is_transmit_register_empty() && (m_tx_delay_timer->remaining() == attotime::never))
+ if (m_empty && is_transmit_register_empty())
{
printf("SPARC keyboard: send immediately: %02x\n", code);
fflush(stdout);
diff --git a/src/devices/bus/rs232/sparckbd.h b/src/devices/bus/sunkbd/sparckbd.h
index a5444415e4f..2f898fd5f8c 100644
--- a/src/devices/bus/rs232/sparckbd.h
+++ b/src/devices/bus/sunkbd/sparckbd.h
@@ -1,15 +1,15 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
-#ifndef MAME_DEVICES_RS232_SPARCKBD_H
-#define MAME_DEVICES_RS232_SPARCKBD_H
+#ifndef MAME_DEVICES_SUNKBD_SPARCKBD_H
+#define MAME_DEVICES_SUNKBD_SPARCKBD_H
#pragma once
-#include "rs232.h"
+#include "sunkbd.h"
#include "sound/beep.h"
-class sparc_keyboard_device : public device_t, public device_serial_interface, public device_rs232_port_interface
+class sparc_keyboard_device : public device_t, public device_serial_interface, public device_sun_keyboard_port_interface
{
public:
sparc_keyboard_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
@@ -35,7 +35,7 @@ private:
// device_serial_interface uses 10'000 range
enum {
SCAN_TIMER_ID = 20'000,
- TX_DELAY_TIMER_ID
+ CLICK_TIMER_ID
};
// TODO: ensure these don't clash with diagnostic LEDs on host computer
@@ -56,11 +56,21 @@ private:
RX_LED
};
+ enum : UINT8 {
+ COMMAND_RESET = 0x01U,
+ COMMAND_BELL_ON = 0x02U,
+ COMMAND_BELL_OFF = 0x03U,
+ COMMAND_CLICK_ON = 0x0aU,
+ COMMAND_CLICK_OFF = 0x0bU,
+ COMMAND_LED = 0x0eU,
+ COMMAND_LAYOUT = 0x0fU
+ };
+
void scan_row();
void send_byte(UINT8 code);
emu_timer *m_scan_timer;
- emu_timer *m_tx_delay_timer;
+ emu_timer *m_click_timer;
required_ioport m_dips;
required_ioport m_key_inputs[8];
required_device<beep_device> m_beeper;
@@ -74,9 +84,10 @@ private:
UINT8 m_rx_state;
+ UINT8 m_keyclick;
UINT8 m_beeper_state;
};
extern const device_type SPARC_KEYBOARD;
-#endif // MAME_DEVICES_RS232_SPARCKBD_H
+#endif // MAME_DEVICES_SUNKBD_SPARCKBD_H
diff --git a/src/devices/bus/sunkbd/sunkbd.cpp b/src/devices/bus/sunkbd/sunkbd.cpp
new file mode 100644
index 00000000000..6e1bfb54f42
--- /dev/null
+++ b/src/devices/bus/sunkbd/sunkbd.cpp
@@ -0,0 +1,95 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+
+#include "sunkbd.h"
+
+
+device_type const SUNKBD_PORT = &device_creator<sun_keyboard_port_device>;
+
+
+int const device_sun_keyboard_port_interface::START_BIT_COUNT;
+int const device_sun_keyboard_port_interface::DATA_BIT_COUNT;
+device_serial_interface::parity_t const device_sun_keyboard_port_interface::PARITY;
+device_serial_interface::stop_bits_t const device_sun_keyboard_port_interface::STOP_BITS;
+int const device_sun_keyboard_port_interface::BAUD;
+
+
+
+sun_keyboard_port_device::sun_keyboard_port_device(
+ machine_config const &mconfig,
+ char const *tag,
+ device_t *owner,
+ UINT32 clock)
+ : sun_keyboard_port_device(mconfig, SUNKBD_PORT, "Sun Keyboard Port", tag, owner, clock, "sunkbd", __FILE__)
+{
+}
+
+
+sun_keyboard_port_device::sun_keyboard_port_device(
+ machine_config const &mconfig,
+ device_type type,
+ char const *name,
+ char const *tag,
+ device_t *owner,
+ UINT32 clock,
+ char const *shortname,
+ char const *source)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
+ , device_slot_interface(mconfig, *this)
+ , m_rxd(0)
+ , m_rxd_handler(*this)
+ , m_dev(nullptr)
+{
+}
+
+
+sun_keyboard_port_device::~sun_keyboard_port_device()
+{
+}
+
+
+void sun_keyboard_port_device::device_config_complete()
+{
+ m_dev = dynamic_cast<device_sun_keyboard_port_interface *>(get_card_device());
+}
+
+
+void sun_keyboard_port_device::device_start()
+{
+ m_rxd_handler.resolve_safe();
+
+ save_item(NAME(m_rxd));
+
+ m_rxd = 1;
+
+ m_rxd_handler(m_rxd);
+}
+
+
+WRITE_LINE_MEMBER( sun_keyboard_port_device::write_txd )
+{
+ if(m_dev)
+ m_dev->input_txd(state);
+}
+
+
+
+device_sun_keyboard_port_interface::device_sun_keyboard_port_interface(machine_config const &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_port(dynamic_cast<sun_keyboard_port_device *>(device.owner()))
+{
+}
+
+
+device_sun_keyboard_port_interface::~device_sun_keyboard_port_interface()
+{
+}
+
+
+
+#include "sparckbd.h"
+
+
+SLOT_INTERFACE_START( default_sun_keyboard_devices )
+ SLOT_INTERFACE("sparckbd", SPARC_KEYBOARD)
+SLOT_INTERFACE_END
diff --git a/src/devices/bus/sunkbd/sunkbd.h b/src/devices/bus/sunkbd/sunkbd.h
new file mode 100644
index 00000000000..006d914dff0
--- /dev/null
+++ b/src/devices/bus/sunkbd/sunkbd.h
@@ -0,0 +1,79 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+#ifndef MAME_DEVICES_SUNKBD_SUNKBD_H
+#define MAME_DEVICES_SUNKBD_SUNKBD_H
+
+#pragma once
+
+#include "emu.h"
+
+
+#define MCFG_SUNKBD_PORT_ADD(tag, slot_intf, def_slot) \
+ MCFG_DEVICE_ADD(tag, SUNKBD_PORT, 0) \
+ MCFG_DEVICE_SLOT_INTERFACE(slot_intf, def_slot, false)
+
+#define MCFG_SUNKBD_RXD_HANDLER(cb) \
+ devcb = &sun_keyboard_port_device::set_rxd_handler(*device, DEVCB_##cb);
+
+
+class device_sun_keyboard_port_interface;
+
+
+class sun_keyboard_port_device : public device_t, public device_slot_interface
+{
+ friend class device_sun_keyboard_port_interface;
+
+public:
+ sun_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
+ sun_keyboard_port_device(machine_config const &mconfig, device_type type, char const *name, char const *tag, device_t *owner, UINT32 clock, char const *shortname, char const *source);
+ virtual ~sun_keyboard_port_device();
+
+ // static configuration helpers
+ template <class Object> static devcb_base &set_rxd_handler(device_t &device, Object object) { return downcast<sun_keyboard_port_device &>(device).m_rxd_handler.set_callback(object); }
+
+ DECLARE_WRITE_LINE_MEMBER( write_txd );
+
+ DECLARE_READ_LINE_MEMBER( rxd_r ) { return m_rxd; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_config_complete() override;
+
+ int m_rxd;
+
+ devcb_write_line m_rxd_handler;
+
+private:
+ device_sun_keyboard_port_interface *m_dev;
+};
+
+
+class device_sun_keyboard_port_interface : public device_slot_card_interface
+{
+ friend class sun_keyboard_port_device;
+
+public:
+ device_sun_keyboard_port_interface(machine_config const &mconfig, device_t &device);
+ virtual ~device_sun_keyboard_port_interface() override;
+
+ virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) { }
+
+ DECLARE_WRITE_LINE_MEMBER( output_rxd ) { m_port->m_rxd = state; m_port->m_rxd_handler(state); }
+
+protected:
+ sun_keyboard_port_device *m_port;
+
+ static constexpr int START_BIT_COUNT = 1;
+ static constexpr int DATA_BIT_COUNT = 8;
+ static constexpr device_serial_interface::parity_t PARITY = device_serial_interface::PARITY_NONE;
+ static constexpr device_serial_interface::stop_bits_t STOP_BITS = device_serial_interface::STOP_BITS_1;
+ static constexpr int BAUD = 1'200;
+};
+
+
+extern device_type const SUNKBD_PORT;
+
+
+SLOT_INTERFACE_EXTERN( default_sun_keyboard_devices );
+
+#endif // MAME_DEVICES_SUNKBD_SUNKBD_H
diff --git a/src/mame/drivers/fidel6502.cpp b/src/mame/drivers/fidel6502.cpp
index 18de1e788c2..49e965f6f0d 100644
--- a/src/mame/drivers/fidel6502.cpp
+++ b/src/mame/drivers/fidel6502.cpp
@@ -191,7 +191,6 @@ PCB photos show only a 3MHz XTAL.
******************************************************************************
-
Sensory Chess Challenger "9" (SC9)
2 versions were available, the newer version was 2MHz and included the Budapest program.
---------------------------------
@@ -819,6 +818,11 @@ static ADDRESS_MAP_START( sc9_map, AS_PROGRAM, 8, fidel6502_state )
AM_RANGE(0xc000, 0xffff) AM_ROM
ADDRESS_MAP_END
+static ADDRESS_MAP_START( sc9b_map, AS_PROGRAM, 8, fidel6502_state )
+ AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x1ff8) AM_READ(sc12_input_r)
+ AM_IMPORT_FROM( sc9_map )
+ADDRESS_MAP_END
+
// SC12/6086
@@ -1357,6 +1361,13 @@ static MACHINE_CONFIG_START( sc9, fidel6502_state )
MCFG_SOFTWARE_LIST_ADD("cart_list", "fidel_scc")
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( sc9b, sc9 )
+
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(sc9b_map)
+MACHINE_CONFIG_END
+
static MACHINE_CONFIG_START( sc12, fidel6502_state )
/* basic machine hardware */
@@ -1553,6 +1564,12 @@ ROM_START( fscc9 )
ROM_LOAD("b31", 0xe000, 0x2000, CRC(cbaf97d7) SHA1(7ed8e68bb74713d9e2ff1d9c037012320b7bfcbf) ) // "
ROM_END
+ROM_START( fscc9b ) // this one came from an overclocked board, let's assume the roms were unmodified
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("b30", 0xc000, 0x2000, CRC(65288753) SHA1(651f5ca5969ddd72a20cbebdec2de83c4bf10650) )
+ ROM_LOAD("b31", 0xe000, 0x2000, CRC(238b092f) SHA1(7ddffc6dba822aee9d8ad6815b23024ed5cdfd26) )
+ROM_END
+
ROM_START( fscc12 )
ROM_REGION( 0x10000, "maincpu", 0 )
@@ -1597,7 +1614,8 @@ CONS( 1983, super9ccsp, super9cc, 0, su9, su9g, driver_device, 0,
CONS( 1983, super9ccg, super9cc, 0, su9, su9g, driver_device, 0, "Fidelity Electronics", "Super 9 Sensory Chess Challenger (German)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1983, super9ccfr, super9cc, 0, su9, su9g, driver_device, 0, "Fidelity Electronics", "Super 9 Sensory Chess Challenger (French)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
-CONS( 1982, fscc9, 0, 0, sc9, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 9", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1982, fscc9, 0, 0, sc9, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 9 (set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+CONS( 1982, fscc9b, fscc9, 0, sc9b, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 9 (set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1984, fscc12, 0, 0, sc12, sc12, driver_device, 0, "Fidelity Electronics", "Sensory Chess Challenger 12-B", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1987, fexcel, 0, 0, fexcel, fexcel, driver_device, 0, "Fidelity Electronics", "Excellence (model 6080/6093)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/drivers/spdodgeb.cpp b/src/mame/drivers/spdodgeb.cpp
index 66dc17c3f38..ca263f17eab 100644
--- a/src/mame/drivers/spdodgeb.cpp
+++ b/src/mame/drivers/spdodgeb.cpp
@@ -262,7 +262,7 @@ static ADDRESS_MAP_START( spdodgeb_sound_map, AS_PROGRAM, 8, spdodgeb_state )
AM_RANGE(0x1000, 0x1000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
AM_RANGE(0x2800, 0x2801) AM_DEVWRITE("ymsnd", ym3812_device, write)
AM_RANGE(0x3800, 0x3807) AM_WRITE(spd_adpcm_w)
- AM_RANGE(0x8000, 0xffff) AM_ROM
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION("audiocpu", 0)
ADDRESS_MAP_END
@@ -374,8 +374,8 @@ static const gfx_layout spritelayout =
};
static GFXDECODE_START( spdodgeb )
- GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0x000, 32 ) /* colors 0x000-0x1ff */
- GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x200, 32 ) /* colors 0x200-0x3ff */
+ GFXDECODE_ENTRY( "text", 0, charlayout, 0x000, 32 ) /* colors 0x000-0x1ff */
+ GFXDECODE_ENTRY( "sprites", 0, spritelayout, 0x200, 32 ) /* colors 0x200-0x3ff */
GFXDECODE_END
@@ -453,22 +453,21 @@ MACHINE_CONFIG_END
ROM_START( spdodgeb )
- ROM_REGION( 0x18000, "maincpu", 0 )
- ROM_LOAD( "22a-04.139", 0x10000, 0x08000, CRC(66071fda) SHA1(4a239295900e6234a2a693321ca821671747a58e) ) /* Two banks */
- ROM_CONTINUE( 0x08000, 0x08000 ) /* Static code */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "22a-04.139", 0x00000, 0x10000, CRC(66071fda) SHA1(4a239295900e6234a2a693321ca821671747a58e) ) /* First 0x8000: Two banks, second 0x8000: Static */
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* audio cpu */
- ROM_LOAD( "22j5-0.33", 0x08000, 0x08000, CRC(c31e264e) SHA1(0828a2094122e3934b784ec9ad7c2b89d91a83bb) )
+ ROM_REGION( 0x08000, "audiocpu", 0 ) /* audio cpu */
+ ROM_LOAD( "22j5-0.33", 0x00000, 0x08000, CRC(c31e264e) SHA1(0828a2094122e3934b784ec9ad7c2b89d91a83bb) )
ROM_REGION( 0x10000, "mcu", 0 ) /* I/O mcu */
/* Not hooked up yet, we need to add HD63701Y0 support to the hd63701 core (with extra io ports, serial ports, and timers). */
ROM_LOAD( "22ja-0.162", 0x0c000, 0x04000, CRC(7162a97b) SHA1(d6d4ee025e73a340428345f08711cd32f9169a8c) )
- ROM_REGION( 0x40000, "gfx1", 0 ) /* text */
+ ROM_REGION( 0x40000, "text", 0 ) /* text */
ROM_LOAD( "22a-4.121", 0x00000, 0x20000, CRC(acc26051) SHA1(445224238cce420990894824d95447e3f63a9ef0) )
ROM_LOAD( "22a-3.107", 0x20000, 0x20000, CRC(10bb800d) SHA1(265a3d67669034d17713b505ef55cd1c90f8d205) )
- ROM_REGION( 0x40000, "gfx2", 0 )
+ ROM_REGION( 0x40000, "sprites", 0 )
ROM_LOAD( "22a-1.2", 0x00000, 0x20000, CRC(3bd1c3ec) SHA1(40f61552ea6f7a81915fe3e13f75dc1dc69da33e) )
ROM_LOAD( "22a-2.35", 0x20000, 0x20000, CRC(409e1be1) SHA1(35a77fc8fe6fc212734e2f452dbde9b8cf696f61) )
@@ -513,22 +512,21 @@ TJ22J2-0.35 /
*/
ROM_START( nkdodge )
- ROM_REGION( 0x18000, "maincpu", 0 )
- ROM_LOAD( "22j4-0.139", 0x10000, 0x08000, CRC(aa674fd8) SHA1(4e8d3e07b54d23b221cb39cf10389bc7a56c4021) ) /* Two banks */
- ROM_CONTINUE( 0x08000, 0x08000 ) /* Static code */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "22j4-0.139", 0x00000, 0x10000, CRC(aa674fd8) SHA1(4e8d3e07b54d23b221cb39cf10389bc7a56c4021) ) /* First 0x8000: Two banks, second 0x8000: Static */
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* audio cpu */
- ROM_LOAD( "22j5-0.33", 0x08000, 0x08000, CRC(c31e264e) SHA1(0828a2094122e3934b784ec9ad7c2b89d91a83bb) )
+ ROM_REGION( 0x08000, "audiocpu", 0 ) /* audio cpu */
+ ROM_LOAD( "22j5-0.33", 0x00000, 0x08000, CRC(c31e264e) SHA1(0828a2094122e3934b784ec9ad7c2b89d91a83bb) )
ROM_REGION( 0x10000, "mcu", 0 ) /* I/O mcu */
/* Not hooked up yet, we need to add HD63701Y0 support to the hd63701 core (with extra io ports, serial ports, and timers). */
ROM_LOAD( "22ja-0.162", 0x0c000, 0x04000, CRC(7162a97b) SHA1(d6d4ee025e73a340428345f08711cd32f9169a8c) )
- ROM_REGION( 0x40000, "gfx1", 0 ) /* text */
+ ROM_REGION( 0x40000, "text", 0 ) /* text */
ROM_LOAD( "tj22j4-0.121", 0x00000, 0x20000, CRC(d2922b3f) SHA1(30ad37f8355c732b545017c2fc56879256b650be) )
ROM_LOAD( "tj22j3-0.107", 0x20000, 0x20000, CRC(79cd1315) SHA1(2d7a877e59f704b10b5f609e60fa565c68f5fdb0) )
- ROM_REGION( 0x40000, "gfx2", 0 )
+ ROM_REGION( 0x40000, "sprites", 0 )
ROM_LOAD( "tj22j1-0.2", 0x00000, 0x20000, CRC(9ed27a8d) SHA1(d80d275bbe91f3e1bd0495a2d7a3be0280a7cda1) )
ROM_LOAD( "tj22j2-0.35", 0x20000, 0x20000, CRC(768934f9) SHA1(922f3154dcfb29c2e5c1bebc53247136160f1229) )
@@ -544,23 +542,22 @@ ROM_END
/* the bootleg just seems to have the gfx roms in a different format, program is identical */
ROM_START( nkdodgeb )
- ROM_REGION( 0x18000, "maincpu", 0 )
- ROM_LOAD( "12.bin", 0x10000, 0x08000, CRC(aa674fd8) SHA1(4e8d3e07b54d23b221cb39cf10389bc7a56c4021) ) /* Two banks */
- ROM_CONTINUE( 0x08000, 0x08000 ) /* Static code */
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "12.bin", 0x00000, 0x10000, CRC(aa674fd8) SHA1(4e8d3e07b54d23b221cb39cf10389bc7a56c4021) ) /* First 0x8000: Two banks, second 0x8000: Static */
- ROM_REGION( 0x10000, "audiocpu", 0 ) /* audio cpu */
- ROM_LOAD( "22j5-0.33", 0x08000, 0x08000, CRC(c31e264e) SHA1(0828a2094122e3934b784ec9ad7c2b89d91a83bb) )
+ ROM_REGION( 0x08000, "audiocpu", 0 ) /* audio cpu */
+ ROM_LOAD( "22j5-0.33", 0x00000, 0x08000, CRC(c31e264e) SHA1(0828a2094122e3934b784ec9ad7c2b89d91a83bb) )
ROM_REGION( 0x10000, "mcu", 0 ) /* I/O mcu */
ROM_LOAD( "63701.bin", 0xc000, 0x4000, NO_DUMP ) /* missing; does this bootleg board use an i/o mcu at all? */
- ROM_REGION( 0x40000, "gfx1", 0 ) /* text */
+ ROM_REGION( 0x40000, "text", 0 ) /* text */
ROM_LOAD( "10.bin", 0x00000, 0x10000, CRC(442326fd) SHA1(e0e9e1dfdca3edd6e2522f55c191b40b81b8eaff) )
ROM_LOAD( "11.bin", 0x10000, 0x10000, CRC(2140b070) SHA1(7a9d89eb6130b1dd21236fefaeb09a29c7f0d208) )
ROM_LOAD( "9.bin", 0x20000, 0x10000, CRC(18660ac1) SHA1(be6a47eea9649d7b9ff8b30a4de643522c9869e6) )
ROM_LOAD( "8.bin", 0x30000, 0x10000, CRC(5caae3c9) SHA1(f81a1c4ce2117d41e81542d417ff3573ea0f5313) )
- ROM_REGION( 0x40000, "gfx2", 0 )
+ ROM_REGION( 0x40000, "sprites", 0 )
ROM_LOAD( "2.bin", 0x00000, 0x10000, CRC(1271583e) SHA1(98a597f2be1abdac6c4de811cfa8a53549bc6904) )
ROM_LOAD( "1.bin", 0x10000, 0x10000, CRC(5ae6cccf) SHA1(6bd385d6559b54c681d05eed2e91bfc2aa3e6844) )
ROM_LOAD( "4.bin", 0x20000, 0x10000, CRC(f5022822) SHA1(fa67b1f70da80365f14776b712df6f656e603fb0) )
diff --git a/src/mame/drivers/sun4.cpp b/src/mame/drivers/sun4.cpp
index 1487420fdb1..e46538582af 100644
--- a/src/mame/drivers/sun4.cpp
+++ b/src/mame/drivers/sun4.cpp
@@ -417,7 +417,7 @@
#include "machine/bankdev.h"
#include "machine/nvram.h"
#include "bus/rs232/rs232.h"
-#include "bus/rs232/sparckbd.h"
+#include "bus/sunkbd/sunkbd.h"
#include "machine/timekpr.h"
#include "machine/upd765.h"
#include "formats/pc_dsk.h"
@@ -485,11 +485,6 @@ const sparc_disassembler::asi_desc_map::value_type sun4c_asi_desc[] = {
{ 0x0d, { nullptr, "Flush Cache (Page)" } },
{ 0x0e, { nullptr, "Flush Cache (Context)" } }
};
-
-// TODO: put this somewhere common when sun4m, sun4d, sun4u, etc. are split out
-SLOT_INTERFACE_START(keyboard_devices)
- SLOT_INTERFACE("keyboard", SPARC_KEYBOARD)
-SLOT_INTERFACE_END
}
enum
@@ -1609,10 +1604,10 @@ static MACHINE_CONFIG_START( sun4, sun4_state )
// Keyboard/mouse
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
- MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, rs232_port_device, write_txd))
+ MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
- MCFG_RS232_PORT_ADD(KEYBOARD_TAG, keyboard_devices, "keyboard")
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
+ MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
+ MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
// RS232 serial ports
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
@@ -1663,10 +1658,10 @@ static MACHINE_CONFIG_START( sun4c, sun4_state )
// Keyboard/mouse
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
- MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, rs232_port_device, write_txd))
+ MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
- MCFG_RS232_PORT_ADD(KEYBOARD_TAG, keyboard_devices, "keyboard")
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
+ MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
+ MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
// RS232 serial ports
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index b5b3ee1e04c..f70dbb87e90 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -12134,6 +12134,7 @@ feasgla // EAS: Elite A/S Challenger (Glasgow program, E
fexcel //
fexcelv //
fscc9 //
+fscc9b //
fscc12 //
reversic //
super9cc // SU9: Super 9 Sensory Chess Challenger (English)
diff --git a/src/mame/video/spdodgeb.cpp b/src/mame/video/spdodgeb.cpp
index 79fdef1cfa6..f2f255c2df8 100644
--- a/src/mame/video/spdodgeb.cpp
+++ b/src/mame/video/spdodgeb.cpp
@@ -72,7 +72,7 @@ void spdodgeb_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(spdodgeb_state::get_bg_tile_info),this),tilemap_mapper_delegate(FUNC(spdodgeb_state::background_scan),this),8,8,64,32);
- membank("mainbank")->configure_entries(0, 2, memregion("maincpu")->base() + 0x10000, 0x4000);
+ membank("mainbank")->configure_entries(0, 2, memregion("maincpu")->base(), 0x4000);
save_item(NAME(m_tile_palbank));
save_item(NAME(m_sprite_palbank));