mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
02612740da
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
@ -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
|
95
src/devices/bus/sunkbd/sunkbd.cpp
Normal file
95
src/devices/bus/sunkbd/sunkbd.cpp
Normal 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
|
79
src/devices/bus/sunkbd/sunkbd.h
Normal file
79
src/devices/bus/sunkbd/sunkbd.h
Normal 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
|
@ -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 )
|
||||
|
@ -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) )
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user