mirror of
https://github.com/holub/mame
synced 2025-10-07 09:25:34 +03:00
sunkbd: split up HLE into proper type 3, type 4 and type 5, hook up sun3 family keyboard, set default keyboard appropriately for different families [Vas Crabb]
This commit is contained in:
parent
4c68e0924a
commit
e2774ba254
@ -2580,8 +2580,8 @@ end
|
|||||||
|
|
||||||
if (BUSES["SUNKBD"]~=null) then
|
if (BUSES["SUNKBD"]~=null) then
|
||||||
files {
|
files {
|
||||||
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.cpp",
|
MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.h",
|
MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.h",
|
||||||
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.cpp",
|
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.h",
|
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.h",
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
186
src/devices/bus/sunkbd/hlekbd.h
Normal file
186
src/devices/bus/sunkbd/hlekbd.h
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Vas Crabb
|
||||||
|
#ifndef MAME_DEVICES_SUNKBD_SPARCKBD_H
|
||||||
|
#define MAME_DEVICES_SUNKBD_SPARCKBD_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "sunkbd.h"
|
||||||
|
#include "sound/beep.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern device_type const SUN_TYPE3_HLE_KEYBOARD;
|
||||||
|
extern device_type const SUN_TYPE4_HLE_KEYBOARD;
|
||||||
|
extern device_type const SUN_TYPE5_HLE_KEYBOARD;
|
||||||
|
|
||||||
|
|
||||||
|
namespace bus { namespace sunkbd {
|
||||||
|
class hle_device_base : public device_t, public device_serial_interface, public device_sun_keyboard_port_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||||
|
|
||||||
|
virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// constructor/destructor
|
||||||
|
hle_device_base(
|
||||||
|
machine_config const &mconfig,
|
||||||
|
char const *tag,
|
||||||
|
device_t *owner,
|
||||||
|
UINT32 clock);
|
||||||
|
hle_device_base(
|
||||||
|
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 ~hle_device_base() override;
|
||||||
|
|
||||||
|
// device overrides
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||||
|
|
||||||
|
// device_serial_interface overrides
|
||||||
|
virtual void tra_callback() override;
|
||||||
|
virtual void tra_complete() override;
|
||||||
|
virtual void rcv_complete() override;
|
||||||
|
|
||||||
|
required_ioport m_dips;
|
||||||
|
required_ioport m_key_inputs[8];
|
||||||
|
|
||||||
|
private:
|
||||||
|
// device_serial_interface uses 10'000 range
|
||||||
|
enum {
|
||||||
|
SCAN_TIMER_ID = 20'000,
|
||||||
|
CLICK_TIMER_ID
|
||||||
|
};
|
||||||
|
|
||||||
|
// TODO: ensure these don't clash with diagnostic LEDs on host computer
|
||||||
|
enum : int {
|
||||||
|
LED_NUM = 0,
|
||||||
|
LED_COMPOSE,
|
||||||
|
LED_SCROLL,
|
||||||
|
LED_CAPS
|
||||||
|
};
|
||||||
|
|
||||||
|
enum : UINT8 {
|
||||||
|
BEEPER_BELL = 0x01U,
|
||||||
|
BEEPER_CLICK = 0x02U
|
||||||
|
};
|
||||||
|
|
||||||
|
enum : UINT8 {
|
||||||
|
RX_IDLE,
|
||||||
|
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
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual UINT8 ident_byte() = 0;
|
||||||
|
|
||||||
|
void scan_row();
|
||||||
|
void send_byte(UINT8 code);
|
||||||
|
|
||||||
|
emu_timer *m_scan_timer;
|
||||||
|
emu_timer *m_click_timer;
|
||||||
|
required_device<beep_device> m_beeper;
|
||||||
|
|
||||||
|
UINT16 m_current_keys[8];
|
||||||
|
UINT8 m_next_row;
|
||||||
|
|
||||||
|
UINT8 m_fifo[16];
|
||||||
|
UINT8 m_head, m_tail;
|
||||||
|
UINT8 m_empty;
|
||||||
|
|
||||||
|
UINT8 m_rx_state;
|
||||||
|
|
||||||
|
UINT8 m_keyclick;
|
||||||
|
UINT8 m_beeper_state;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class hle_type3_device : public hle_device_base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
hle_type3_device(
|
||||||
|
machine_config const &mconfig,
|
||||||
|
char const *tag,
|
||||||
|
device_t *owner,
|
||||||
|
UINT32 clock);
|
||||||
|
hle_type3_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 ioport_constructor device_input_ports() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual UINT8 ident_byte() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class hle_type4_device : public hle_device_base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
hle_type4_device(
|
||||||
|
machine_config const &mconfig,
|
||||||
|
char const *tag,
|
||||||
|
device_t *owner,
|
||||||
|
UINT32 clock);
|
||||||
|
hle_type4_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 ioport_constructor device_input_ports() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual UINT8 ident_byte() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class hle_type5_device : public hle_device_base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
hle_type5_device(
|
||||||
|
machine_config const &mconfig,
|
||||||
|
char const *tag,
|
||||||
|
device_t *owner,
|
||||||
|
UINT32 clock);
|
||||||
|
hle_type5_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 ioport_constructor device_input_ports() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual UINT8 ident_byte() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
} } // namespace bus::sunkbd
|
||||||
|
|
||||||
|
#endif // MAME_DEVICES_SUNKBD_SPARCKBD_H
|
@ -1,93 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Vas Crabb
|
|
||||||
#ifndef MAME_DEVICES_SUNKBD_SPARCKBD_H
|
|
||||||
#define MAME_DEVICES_SUNKBD_SPARCKBD_H
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "sunkbd.h"
|
|
||||||
#include "sound/beep.h"
|
|
||||||
|
|
||||||
|
|
||||||
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);
|
|
||||||
sparc_keyboard_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 machine_config_constructor device_mconfig_additions() const override;
|
|
||||||
virtual ioport_constructor device_input_ports() const override;
|
|
||||||
|
|
||||||
virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) override;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// device overrides
|
|
||||||
virtual void device_start() override;
|
|
||||||
virtual void device_reset() override;
|
|
||||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
|
||||||
|
|
||||||
// device_serial_interface overrides
|
|
||||||
virtual void tra_callback() override;
|
|
||||||
virtual void tra_complete() override;
|
|
||||||
virtual void rcv_complete() override;
|
|
||||||
|
|
||||||
private:
|
|
||||||
// device_serial_interface uses 10'000 range
|
|
||||||
enum {
|
|
||||||
SCAN_TIMER_ID = 20'000,
|
|
||||||
CLICK_TIMER_ID
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: ensure these don't clash with diagnostic LEDs on host computer
|
|
||||||
enum : int {
|
|
||||||
LED_NUM = 0,
|
|
||||||
LED_COMPOSE,
|
|
||||||
LED_SCROLL,
|
|
||||||
LED_CAPS
|
|
||||||
};
|
|
||||||
|
|
||||||
enum : UINT8 {
|
|
||||||
BEEPER_BELL = 0x01U,
|
|
||||||
BEEPER_CLICK = 0x02U
|
|
||||||
};
|
|
||||||
|
|
||||||
enum : UINT8 {
|
|
||||||
RX_IDLE,
|
|
||||||
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_click_timer;
|
|
||||||
required_ioport m_dips;
|
|
||||||
required_ioport m_key_inputs[8];
|
|
||||||
required_device<beep_device> m_beeper;
|
|
||||||
|
|
||||||
UINT16 m_current_keys[8];
|
|
||||||
UINT8 m_next_row;
|
|
||||||
|
|
||||||
UINT8 m_fifo[16];
|
|
||||||
UINT8 m_head, m_tail;
|
|
||||||
UINT8 m_empty;
|
|
||||||
|
|
||||||
UINT8 m_rx_state;
|
|
||||||
|
|
||||||
UINT8 m_keyclick;
|
|
||||||
UINT8 m_beeper_state;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern const device_type SPARC_KEYBOARD;
|
|
||||||
|
|
||||||
#endif // MAME_DEVICES_SUNKBD_SPARCKBD_H
|
|
@ -87,9 +87,10 @@ device_sun_keyboard_port_interface::~device_sun_keyboard_port_interface()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include "sparckbd.h"
|
#include "hlekbd.h"
|
||||||
|
|
||||||
|
|
||||||
SLOT_INTERFACE_START( default_sun_keyboard_devices )
|
SLOT_INTERFACE_START( default_sun_keyboard_devices )
|
||||||
SLOT_INTERFACE("sparckbd", SPARC_KEYBOARD)
|
SLOT_INTERFACE("type3hle", SUN_TYPE3_HLE_KEYBOARD)
|
||||||
|
SLOT_INTERFACE("type4hle", SUN_TYPE4_HLE_KEYBOARD)
|
||||||
|
SLOT_INTERFACE("type5hle", SUN_TYPE5_HLE_KEYBOARD)
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
|
@ -186,12 +186,14 @@ fefc34a - start of mem_size, which queries ECC registers for each memory board
|
|||||||
#include "machine/bankdev.h"
|
#include "machine/bankdev.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
#include "bus/rs232/rs232.h"
|
#include "bus/rs232/rs232.h"
|
||||||
|
#include "bus/sunkbd/sunkbd.h"
|
||||||
|
|
||||||
#define TIMEKEEPER_TAG "timekpr"
|
#define TIMEKEEPER_TAG "timekpr"
|
||||||
#define SCC1_TAG "scc1"
|
#define SCC1_TAG "scc1"
|
||||||
#define SCC2_TAG "scc2"
|
#define SCC2_TAG "scc2"
|
||||||
#define RS232A_TAG "rs232a"
|
#define RS232A_TAG "rs232a"
|
||||||
#define RS232B_TAG "rs232b"
|
#define RS232B_TAG "rs232b"
|
||||||
|
#define KEYBOARD_TAG "keyboard"
|
||||||
|
|
||||||
// page table entry constants
|
// page table entry constants
|
||||||
#define PM_VALID (0x80000000) // page is valid
|
#define PM_VALID (0x80000000) // page is valid
|
||||||
@ -992,6 +994,11 @@ static MACHINE_CONFIG_START( sun3, sun3_state )
|
|||||||
MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", sun3_state, sun3_timer, attotime::from_hz(100))
|
MCFG_TIMER_DRIVER_ADD_PERIODIC("timer", sun3_state, sun3_timer, attotime::from_hz(100))
|
||||||
|
|
||||||
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
||||||
|
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
|
||||||
|
|
||||||
|
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type3hle")
|
||||||
|
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
||||||
|
|
||||||
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
||||||
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd))
|
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd))
|
||||||
MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd))
|
MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd))
|
||||||
@ -1089,6 +1096,11 @@ static MACHINE_CONFIG_START( sun3_50, sun3_state )
|
|||||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000)
|
MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000)
|
||||||
|
|
||||||
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
||||||
|
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
|
||||||
|
|
||||||
|
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type3hle")
|
||||||
|
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
||||||
|
|
||||||
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
||||||
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd))
|
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(RS232A_TAG, rs232_port_device, write_txd))
|
||||||
MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd))
|
MCFG_Z80SCC_OUT_TXDB_CB(DEVWRITELINE(RS232B_TAG, rs232_port_device, write_txd))
|
||||||
|
@ -1988,7 +1988,7 @@ static MACHINE_CONFIG_START( sun4, sun4_state )
|
|||||||
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
|
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
|
||||||
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
|
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
|
||||||
|
|
||||||
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
|
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type4hle")
|
||||||
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
||||||
|
|
||||||
// RS232 serial ports
|
// RS232 serial ports
|
||||||
@ -2053,7 +2053,7 @@ static MACHINE_CONFIG_START( sun4c, sun4_state )
|
|||||||
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
|
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
|
||||||
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
|
MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
|
||||||
|
|
||||||
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
|
MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "type5hle")
|
||||||
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
||||||
|
|
||||||
// RS232 serial ports
|
// RS232 serial ports
|
||||||
|
Loading…
Reference in New Issue
Block a user