mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +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
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.h",
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/hlekbd.h",
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.cpp",
|
||||
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("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
|
||||
|
@ -186,12 +186,14 @@ fefc34a - start of mem_size, which queries ECC registers for each memory board
|
||||
#include "machine/bankdev.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "bus/sunkbd/sunkbd.h"
|
||||
|
||||
#define TIMEKEEPER_TAG "timekpr"
|
||||
#define SCC1_TAG "scc1"
|
||||
#define SCC2_TAG "scc2"
|
||||
#define RS232A_TAG "rs232a"
|
||||
#define RS232B_TAG "rs232b"
|
||||
#define KEYBOARD_TAG "keyboard"
|
||||
|
||||
// page table entry constants
|
||||
#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_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_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))
|
||||
@ -1089,6 +1096,11 @@ static MACHINE_CONFIG_START( sun3_50, sun3_state )
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x80000000)
|
||||
|
||||
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_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))
|
||||
|
@ -1988,7 +1988,7 @@ static MACHINE_CONFIG_START( sun4, sun4_state )
|
||||
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_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))
|
||||
|
||||
// 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_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))
|
||||
|
||||
// RS232 serial ports
|
||||
|
Loading…
Reference in New Issue
Block a user