diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index f5283748490..84d0ed09f8f 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1662,8 +1662,6 @@ if (BUSES["RS232"]~=null) then MAME_DIR .. "src/devices/bus/rs232/pty.h", MAME_DIR .. "src/devices/bus/rs232/ser_mouse.cpp", MAME_DIR .. "src/devices/bus/rs232/ser_mouse.h", - MAME_DIR .. "src/devices/bus/rs232/sparckbd.cpp", - MAME_DIR .. "src/devices/bus/rs232/sparckbd.h", MAME_DIR .. "src/devices/bus/rs232/terminal.cpp", MAME_DIR .. "src/devices/bus/rs232/terminal.h", MAME_DIR .. "src/devices/bus/rs232/xvd701.cpp", @@ -2575,6 +2573,20 @@ if (BUSES["ZORRO"]~=null) then } end +--------------------------------------------------- +-- +--@src/devices/bus/sunkbd/sunkbd.h,BUSES["SUNKBD"] = true +--------------------------------------------------- + +if (BUSES["SUNKBD"]~=null) then + files { + MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.cpp", + MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.h", + MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.cpp", + MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.h", + } +end + --------------------------------------------------- -- --@src/devices/bus/ql/exp.h,BUSES["QL"] = true diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 41b1659dca1..44b95bf5615 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -677,6 +677,7 @@ BUSES["SMS_EXP"] = true BUSES["SNES"] = true BUSES["SNES_CTRL"] = true BUSES["SPC1000"] = true +BUSES["SUNKBD"] = true BUSES["SVI_EXPANDER"] = true BUSES["SVI_SLOT"] = true BUSES["TI99PEB"] = true diff --git a/src/devices/bus/rs232/sparckbd.cpp b/src/devices/bus/sunkbd/sparckbd.cpp similarity index 93% rename from src/devices/bus/rs232/sparckbd.cpp rename to 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 ¤t(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 similarity index 78% rename from src/devices/bus/rs232/sparckbd.h rename to 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 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; + + +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(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(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 static devcb_base &set_rxd_handler(device_t &device, Object object) { return downcast(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));