This commit is contained in:
bmcphail 2016-07-20 17:08:28 -04:00
commit 02612740da
11 changed files with 307 additions and 111 deletions

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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) )

View File

@ -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)

View File

@ -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)

View File

@ -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));