mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
chesstrv: split driver into 2 (nw)
Machines promoted to working ------- Chess Traveler [hap] Boris Diplomat [hap]
This commit is contained in:
parent
aad9f71a09
commit
646d958249
@ -3763,6 +3763,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/acd.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/aceex.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/aci_boris.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/aci_borisdpl.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/adm23.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/adm31.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/akaiax80.cpp",
|
||||
|
@ -9,7 +9,7 @@ low-level ROMC signals.
|
||||
|
||||
F3853: Static memory interface with integrated interrupt controller and timer.
|
||||
|
||||
The timer is a shift register:
|
||||
The timer is an 8-bit linear feedback shift register:
|
||||
Feedback in0 = !((out3 ^ out4) ^ (out5 ^ out7))
|
||||
Interrupts are at 0xfe
|
||||
0xff stops the register (0xfe is never reached)
|
||||
|
@ -21,6 +21,7 @@ your move"(same as Boris Master) instead of "Boris plays black".
|
||||
#include "machine/f3853.h"
|
||||
#include "machine/timer.h"
|
||||
|
||||
// internal artwork
|
||||
#include "aci_boris.lh"
|
||||
|
||||
|
||||
@ -32,15 +33,14 @@ public:
|
||||
boris_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_delay_display(*this, "delay_display_%u", 0),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_delay_display(*this, "delay_display_%u", 0),
|
||||
m_out_digit(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
void boris(machine_config &config);
|
||||
|
||||
// reset switch is tied to MK3850 RESET pin
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_switch);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
@ -48,8 +48,8 @@ protected:
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device_array<timer_device, 8> m_delay_display;
|
||||
required_ioport_array<4> m_inp_matrix;
|
||||
required_device_array<timer_device, 8> m_delay_display;
|
||||
output_finder<8> m_out_digit;
|
||||
|
||||
void main_map(address_map &map);
|
||||
@ -81,6 +81,19 @@ void boris_state::machine_start()
|
||||
save_item(NAME(m_4042));
|
||||
}
|
||||
|
||||
INPUT_CHANGED_MEMBER(boris_state::reset_switch)
|
||||
{
|
||||
// reset switch is tied to MK3850 RESET pin
|
||||
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
|
||||
|
||||
// clear display
|
||||
if (newval)
|
||||
{
|
||||
for (int i = 0; i < 8; i++)
|
||||
m_delay_display[i]->adjust(attotime::zero, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
@ -92,7 +105,7 @@ void boris_state::machine_start()
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(boris_state::delay_display)
|
||||
{
|
||||
// 16 segments via port 1 and 4042 output (latched port 1)
|
||||
u16 mask = (param & 0x10) ? 0xffff : 0;
|
||||
u16 mask = (param & 8) ? 0xffff : 0;
|
||||
m_out_digit[param & 7] = ~(m_4042 << 8 | m_io[1]) & mask;
|
||||
}
|
||||
|
||||
@ -111,12 +124,12 @@ WRITE8_MEMBER(boris_state::mux_w)
|
||||
u8 sel = ~data & 7;
|
||||
if (sel != prev)
|
||||
{
|
||||
// digits are strobed, so on falling edge, delay them going off to prevent flicker
|
||||
// digits are strobed, so on falling edge, delay them going off to prevent flicker or stuck display
|
||||
m_delay_display[prev]->adjust(attotime::from_msec(50), prev);
|
||||
|
||||
// need a short delay on rising edge too, while boris sets up digit segments
|
||||
// (it writes port 1, increments digit, latches port 1, writes port 1 again)
|
||||
m_delay_display[sel]->adjust(attotime::from_usec(50), sel | 0x10);
|
||||
m_delay_display[sel]->adjust(attotime::from_usec(50), sel | 8);
|
||||
}
|
||||
|
||||
// IO03: clock 4042
|
||||
@ -172,7 +185,7 @@ static INPUT_PORTS_START( boris )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G.7")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H.8")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Set / 9")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Set / 9") // labeled just "SET" on 1st version
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE") // clear entry
|
||||
|
||||
PORT_START("IN.1")
|
||||
@ -194,7 +207,7 @@ static INPUT_PORTS_START( boris )
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
|
||||
|
||||
PORT_START("RESET")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_R) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, boris_state, reset_button, nullptr) PORT_NAME("Reset Switch")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_R) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, boris_state, reset_switch, nullptr) PORT_NAME("Reset Switch")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
236
src/mame/drivers/aci_borisdpl.cpp
Normal file
236
src/mame/drivers/aci_borisdpl.cpp
Normal file
@ -0,0 +1,236 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Sandro Ronco, hap
|
||||
// thanks-to:Sean Riddle
|
||||
/******************************************************************************
|
||||
|
||||
Applied Concepts Boris Diplomat
|
||||
|
||||
- F3870 MCU (Motorola SC80265P or Fairchild SL90259)
|
||||
- 256 bytes RAM(2*2112-1)
|
||||
- 8-digit 7seg led panel
|
||||
|
||||
Two versions exists, a blue one(seen with SC80265P) and a brown one(seen with
|
||||
either MCU). The one emulated here is from a brown version with the SC80265P.
|
||||
Motorola SC80265P is a 3870 clone, it's assumed that the program is the same
|
||||
as SL90259.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/f8/f8.h"
|
||||
#include "machine/f3853.h"
|
||||
#include "machine/timer.h"
|
||||
|
||||
// internal artwork
|
||||
#include "aci_borisdpl.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class borisdpl_state : public driver_device
|
||||
{
|
||||
public:
|
||||
borisdpl_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_keypad(*this, "LINE%u", 1U),
|
||||
m_delay_display(*this, "delay_display_%u", 0),
|
||||
m_out_digit(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
void borisdpl(machine_config &config);
|
||||
|
||||
// reset button is tied to MCU RESET pin
|
||||
DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_ioport_array<4> m_keypad;
|
||||
required_device_array<timer_device, 8> m_delay_display;
|
||||
output_finder<8> m_out_digit;
|
||||
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(delay_display);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(digit_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
DECLARE_WRITE8_MEMBER(matrix_w);
|
||||
|
||||
// 256 bytes data RAM accessed via I/O ports
|
||||
DECLARE_READ8_MEMBER(ram_address_r) { return m_ram_address; }
|
||||
DECLARE_WRITE8_MEMBER(ram_address_w) { m_ram_address = data; }
|
||||
DECLARE_READ8_MEMBER(ram_data_r) { return m_ram[m_ram_address]; }
|
||||
DECLARE_WRITE8_MEMBER(ram_data_w) { m_ram[m_ram_address] = data; }
|
||||
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
u8 m_ram_address;
|
||||
u8 m_matrix;
|
||||
};
|
||||
|
||||
void borisdpl_state::machine_start()
|
||||
{
|
||||
// resolve handlers
|
||||
m_out_digit.resolve();
|
||||
|
||||
// zerofill
|
||||
m_ram = make_unique_clear<u8[]>(0x100);
|
||||
m_ram_address = 0;
|
||||
m_matrix = 0;
|
||||
|
||||
// register for savestates
|
||||
save_pointer(NAME(m_ram), 0x100);
|
||||
save_item(NAME(m_ram_address));
|
||||
save_item(NAME(m_matrix));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// F3870 ports
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(borisdpl_state::delay_display)
|
||||
{
|
||||
// clear digits if inactive
|
||||
if (param != (m_matrix & 7))
|
||||
m_out_digit[param] = 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(borisdpl_state::digit_w)
|
||||
{
|
||||
// digit segments, update display here
|
||||
m_out_digit[m_matrix & 7] = ~data & 0x7f;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(borisdpl_state::matrix_w)
|
||||
{
|
||||
// d0-d2: MC14028B to input/digit select
|
||||
// digits are strobed, so on falling edge, delay them going off to prevent flicker or stuck display
|
||||
if ((data & 7) != (m_matrix & 7))
|
||||
m_delay_display[m_matrix & 7]->adjust(attotime::from_msec(20), m_matrix & 7);
|
||||
|
||||
m_matrix = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(borisdpl_state::input_r)
|
||||
{
|
||||
// d4-d7: multiplexed inputs (only one lane can be selected at the same time)
|
||||
u8 data = m_matrix;
|
||||
if ((m_matrix & 7) < 4)
|
||||
data |= m_keypad[m_matrix & 3]->read() << 4;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void borisdpl_state::main_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0x7ff);
|
||||
map(0x0000, 0x07ff).rom();
|
||||
}
|
||||
|
||||
void borisdpl_state::main_io(address_map &map)
|
||||
{
|
||||
map(0x00, 0x00).rw(FUNC(borisdpl_state::input_r), FUNC(borisdpl_state::matrix_w));
|
||||
map(0x01, 0x01).w(FUNC(borisdpl_state::digit_w));
|
||||
map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( borisdpl )
|
||||
PORT_START("LINE1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SPACE) PORT_CODE(KEYCODE_MINUS) PORT_NAME("-")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("B/W") // black/white
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
|
||||
|
||||
PORT_START("LINE2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A.1 / Pawn")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B.2 / Knight")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C.3 / Bishop")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("Rank")
|
||||
|
||||
PORT_START("LINE3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D.4 / Rook")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E.5 / Queen")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F.6 / King")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Time")
|
||||
|
||||
PORT_START("LINE4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G.7")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H.8")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9 / Set")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE") // clear entry
|
||||
|
||||
PORT_START("RESET")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_CHANGED_MEMBER(DEVICE_SELF, borisdpl_state, reset_button, nullptr) PORT_NAME("Reset")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Configs
|
||||
******************************************************************************/
|
||||
|
||||
void borisdpl_state::borisdpl(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
F8(config, m_maincpu, 3000000/2); // frequency approximated from video reference
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &borisdpl_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &borisdpl_state::main_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge));
|
||||
|
||||
f38t56_device &psu(F38T56(config, "psu", 3000000/2));
|
||||
psu.set_int_vector(0x5020);
|
||||
psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
|
||||
psu.read_a().set(FUNC(borisdpl_state::ram_data_r));
|
||||
psu.write_a().set(FUNC(borisdpl_state::ram_data_w));
|
||||
psu.read_b().set(FUNC(borisdpl_state::ram_address_r));
|
||||
psu.write_b().set(FUNC(borisdpl_state::ram_address_w));
|
||||
|
||||
/* video hardware */
|
||||
for (int i = 0; i < 8; i++)
|
||||
TIMER(config, m_delay_display[i]).configure_generic(FUNC(borisdpl_state::delay_display));
|
||||
|
||||
config.set_default_layout(layout_aci_borisdpl);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( borisdpl )
|
||||
ROM_REGION( 0x0800, "maincpu", 0 )
|
||||
ROM_LOAD("007-7024-00_7847.u8", 0x0000, 0x0800, CRC(e20bac03) SHA1(9e17b9d90522371fbf7018926356150f70b9a3b6) )
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1979, borisdpl, 0, 0, borisdpl, borisdpl, borisdpl_state, empty_init, "Applied Concepts", "Boris Diplomat", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
@ -1,8 +1,20 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Sandro Ronco
|
||||
// copyright-holders:Sandro Ronco, hap
|
||||
// thanks-to:Sean Riddle
|
||||
/******************************************************************************
|
||||
|
||||
Acetronic Chess Traveller
|
||||
SciSys Chess Traveler
|
||||
|
||||
- Fairchild 3870 MCU, label SL90387 (does not use the timer or irq at all)
|
||||
- 256 bytes RAM(3539)
|
||||
- 4-digit 7seg led panel
|
||||
|
||||
It was also redistributed by Acetronic as "Chess Traveller"(British spelling there),
|
||||
and by Prinztronic as well, another British brand
|
||||
|
||||
SciSys/Novag's "Chess Champion: Pocket Chess" is assumed to be the same game,
|
||||
with the exception that they added battery low voltage detection to it (rightmost
|
||||
digit DP lights up).
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
@ -10,253 +22,179 @@
|
||||
#include "cpu/f8/f8.h"
|
||||
#include "machine/f3853.h"
|
||||
#include "machine/timer.h"
|
||||
#include "chesstrv.lh"
|
||||
#include "borisdpl.lh"
|
||||
|
||||
class chesstrv_base_state : public driver_device
|
||||
{
|
||||
protected:
|
||||
chesstrv_base_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
{
|
||||
}
|
||||
// internal artwork
|
||||
#include "chesstrv.lh" // clickable
|
||||
|
||||
virtual void machine_start() override;
|
||||
|
||||
DECLARE_READ8_MEMBER(ram_addr_r);
|
||||
DECLARE_WRITE8_MEMBER(ram_addr_w);
|
||||
DECLARE_READ8_MEMBER(ram_r);
|
||||
DECLARE_WRITE8_MEMBER(ram_w);
|
||||
DECLARE_WRITE8_MEMBER(matrix_w);
|
||||
namespace {
|
||||
|
||||
void chesstrv_mem(address_map &map);
|
||||
|
||||
uint8_t m_ram_addr;
|
||||
uint8_t *m_ram;
|
||||
uint8_t m_matrix;
|
||||
required_device<cpu_device> m_maincpu;
|
||||
};
|
||||
|
||||
class chesstrv_state : public chesstrv_base_state
|
||||
class chesstrv_state : public driver_device
|
||||
{
|
||||
public:
|
||||
chesstrv_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: chesstrv_base_state(mconfig, type, tag)
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
, m_keypad(*this, "LINE%u", 1U)
|
||||
{
|
||||
}
|
||||
chesstrv_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_keypad(*this, "LINE%u", 1U),
|
||||
m_delay_display(*this, "delay_display_%u", 0),
|
||||
m_out_digit(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
void chesstrv(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_ioport_array<4> m_keypad;
|
||||
required_device_array<timer_device, 4> m_delay_display;
|
||||
output_finder<4> m_out_digit;
|
||||
|
||||
void chesstrv_mem(address_map &map);
|
||||
void chesstrv_io(address_map &map);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(display_w);
|
||||
DECLARE_READ8_MEMBER(keypad_r);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(delay_display);
|
||||
|
||||
output_finder<4> m_digits;
|
||||
required_ioport_array<4> m_keypad;
|
||||
DECLARE_WRITE8_MEMBER(matrix_w);
|
||||
DECLARE_WRITE8_MEMBER(digit_w);
|
||||
DECLARE_READ8_MEMBER(input_r);
|
||||
|
||||
// 256 bytes data RAM accessed via I/O ports
|
||||
DECLARE_READ8_MEMBER(ram_address_r) { return m_ram_address; }
|
||||
DECLARE_WRITE8_MEMBER(ram_address_w) { m_ram_address = data; }
|
||||
DECLARE_READ8_MEMBER(ram_data_r) { return m_ram[m_ram_address]; }
|
||||
DECLARE_WRITE8_MEMBER(ram_data_w) { m_ram[m_ram_address] = data; }
|
||||
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
u8 m_ram_address;
|
||||
u8 m_matrix;
|
||||
};
|
||||
|
||||
class borisdpl_state : public chesstrv_base_state
|
||||
void chesstrv_state::machine_start()
|
||||
{
|
||||
public:
|
||||
borisdpl_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: chesstrv_base_state(mconfig, type, tag)
|
||||
, m_digits(*this, "digit%u", 0U)
|
||||
, m_keypad(*this, "LINE%u", 1U)
|
||||
{
|
||||
}
|
||||
// resolve handlers
|
||||
m_out_digit.resolve();
|
||||
|
||||
void borisdpl(machine_config &config);
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
private:
|
||||
void borisdpl_io(address_map &map);
|
||||
// zerofill
|
||||
m_ram = make_unique_clear<u8[]>(0x100);
|
||||
m_ram_address = 0;
|
||||
m_matrix = 0;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(display_w);
|
||||
DECLARE_READ8_MEMBER(keypad_r);
|
||||
|
||||
output_finder<8> m_digits;
|
||||
required_ioport_array<4> m_keypad;
|
||||
};
|
||||
|
||||
WRITE8_MEMBER(chesstrv_base_state::ram_addr_w)
|
||||
{
|
||||
m_ram_addr = data;
|
||||
// register for savestates
|
||||
save_pointer(NAME(m_ram), 0x100);
|
||||
save_item(NAME(m_ram_address));
|
||||
save_item(NAME(m_matrix));
|
||||
}
|
||||
|
||||
READ8_MEMBER(chesstrv_base_state::ram_addr_r)
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// F3870 ports
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(chesstrv_state::delay_display)
|
||||
{
|
||||
return m_ram_addr;
|
||||
// clear digits if inactive
|
||||
if (BIT(m_matrix, 3 - param))
|
||||
m_out_digit[param] = 0;
|
||||
}
|
||||
|
||||
READ8_MEMBER(chesstrv_base_state::ram_r)
|
||||
WRITE8_MEMBER(chesstrv_state::digit_w)
|
||||
{
|
||||
return m_ram[m_ram_addr];
|
||||
// digit segments, update display here
|
||||
for (int i = 0; i < 4; i++)
|
||||
if (!BIT(m_matrix, 3 - i))
|
||||
m_out_digit[i] = bitswap<8>(data,0,1,2,3,4,5,6,7) & 0x7f;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chesstrv_base_state::ram_w)
|
||||
WRITE8_MEMBER(chesstrv_state::matrix_w)
|
||||
{
|
||||
m_ram[m_ram_addr] = data;
|
||||
}
|
||||
// d0-d3: input/digit select (active low)
|
||||
// they're strobed, so on rising edge, delay them going off to prevent flicker or stuck display
|
||||
for (int i = 0; i < 4; i++)
|
||||
if (BIT(~m_matrix & data, 3 - i))
|
||||
m_delay_display[i]->adjust(attotime::from_msec(20), i);
|
||||
|
||||
WRITE8_MEMBER(chesstrv_state::display_w)
|
||||
{
|
||||
uint8_t seg_data = bitswap<8>(data,0,1,2,3,4,5,6,7);
|
||||
|
||||
for (int digit = 0; digit < 4; digit++)
|
||||
if (!BIT(m_matrix, 3 - digit))
|
||||
m_digits[digit] = seg_data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(chesstrv_base_state::matrix_w)
|
||||
{
|
||||
m_matrix = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(chesstrv_state::keypad_r)
|
||||
READ8_MEMBER(chesstrv_state::input_r)
|
||||
{
|
||||
uint8_t data = 0;
|
||||
u8 data = m_matrix;
|
||||
|
||||
data |= m_keypad[0]->read();
|
||||
data |= m_keypad[1]->read();
|
||||
data |= m_keypad[2]->read();
|
||||
data |= m_keypad[3]->read();
|
||||
data |= (m_keypad[0]->read() ? 0x10 : 0);
|
||||
data |= (m_keypad[1]->read() ? 0x20 : 0);
|
||||
data |= (m_keypad[2]->read() ? 0x40 : 0);
|
||||
data |= (m_keypad[3]->read() ? 0x80 : 0);
|
||||
// d0-d3: multiplexed inputs from d4-d7
|
||||
for (int i = 0; i < 4; i++)
|
||||
if (BIT(m_matrix, i+4))
|
||||
data |= m_keypad[i]->read();
|
||||
|
||||
// d4-d7: multiplexed inputs from d0-d3
|
||||
for (int i = 0; i < 4; i++)
|
||||
if (m_matrix & m_keypad[i]->read())
|
||||
data |= 1 << (i+4);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(borisdpl_state::display_w)
|
||||
{
|
||||
m_digits[m_matrix & 7] = data ^ 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER(borisdpl_state::keypad_r)
|
||||
{
|
||||
uint8_t data = m_matrix & 0x07;
|
||||
|
||||
switch (m_matrix & 7)
|
||||
{
|
||||
case 0: data |= m_keypad[0]->read(); break;
|
||||
case 1: data |= m_keypad[1]->read(); break;
|
||||
case 2: data |= m_keypad[2]->read(); break;
|
||||
case 3: data |= m_keypad[3]->read(); break;
|
||||
}
|
||||
|
||||
return data | m_matrix;
|
||||
}
|
||||
|
||||
|
||||
void chesstrv_base_state::chesstrv_mem(address_map &map)
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void chesstrv_state::chesstrv_mem(address_map &map)
|
||||
{
|
||||
map.global_mask(0x7ff);
|
||||
map(0x0000, 0x07ff).rom();
|
||||
}
|
||||
|
||||
|
||||
void chesstrv_state::chesstrv_io(address_map &map)
|
||||
{
|
||||
map(0x00, 0x00).rw(FUNC(chesstrv_state::ram_addr_r), FUNC(chesstrv_state::ram_addr_w));
|
||||
map(0x01, 0x01).w(FUNC(chesstrv_state::display_w));
|
||||
map(0x04, 0x04).rw(FUNC(chesstrv_state::ram_r), FUNC(chesstrv_state::ram_w));
|
||||
map(0x05, 0x05).rw(FUNC(chesstrv_state::keypad_r), FUNC(chesstrv_state::matrix_w));
|
||||
}
|
||||
|
||||
void borisdpl_state::borisdpl_io(address_map &map)
|
||||
{
|
||||
map(0x00, 0x00).rw(FUNC(borisdpl_state::keypad_r), FUNC(borisdpl_state::matrix_w));
|
||||
map(0x01, 0x01).w(FUNC(borisdpl_state::display_w));
|
||||
map(0x00, 0x00).rw(FUNC(chesstrv_state::ram_address_r), FUNC(chesstrv_state::ram_address_w));
|
||||
map(0x01, 0x01).w(FUNC(chesstrv_state::digit_w));
|
||||
map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( chesstrv )
|
||||
PORT_START("LINE1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("A 1 / Pawn")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("B 2 / Knight")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("C 3 / Bishop")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("D 4 / Rook")
|
||||
|
||||
PORT_START("LINE2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8)
|
||||
PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("E 5 / Queen")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("F 6 / King")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("G 7 / White")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("H 8 / Black")
|
||||
|
||||
PORT_START("LINE3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("LV") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("FP") PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("EP") PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CB") PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("LV / CS") // level/clear square
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("FP") // find position
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("EP") // enter position
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("CB") // clear board
|
||||
|
||||
PORT_START("LINE4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CE") PORT_CODE(KEYCODE_DEL)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("MM") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE") // clear entry
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("MM") // multi move
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0xf0, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( borisdpl )
|
||||
PORT_START("LINE1")
|
||||
PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("0") PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B/W") PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("ENTER") PORT_CODE(KEYCODE_ENTER)
|
||||
|
||||
PORT_START("LINE2")
|
||||
PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("A1") PORT_CODE(KEYCODE_A) PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("B2") PORT_CODE(KEYCODE_B) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("C3") PORT_CODE(KEYCODE_C) PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("RANK") PORT_CODE(KEYCODE_R)
|
||||
|
||||
PORT_START("LINE3")
|
||||
PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("D4") PORT_CODE(KEYCODE_D) PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("E5") PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("F6") PORT_CODE(KEYCODE_F) PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("TIME") PORT_CODE(KEYCODE_T)
|
||||
|
||||
PORT_START("LINE4")
|
||||
PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("G7") PORT_CODE(KEYCODE_G) PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("H8") PORT_CODE(KEYCODE_H) PORT_CODE(KEYCODE_8)
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("9/SET") PORT_CODE(KEYCODE_S) PORT_CODE(KEYCODE_9)
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("CE") PORT_CODE(KEYCODE_DEL)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
void chesstrv_base_state::machine_start()
|
||||
{
|
||||
m_ram = memregion("ram")->base();
|
||||
|
||||
save_item(NAME(m_ram_addr));
|
||||
save_item(NAME(m_matrix));
|
||||
}
|
||||
|
||||
void chesstrv_state::machine_start()
|
||||
{
|
||||
chesstrv_base_state::machine_start();
|
||||
m_digits.resolve();
|
||||
}
|
||||
|
||||
void borisdpl_state::machine_start()
|
||||
{
|
||||
chesstrv_base_state::machine_start();
|
||||
m_digits.resolve();
|
||||
}
|
||||
/******************************************************************************
|
||||
Machine Configs
|
||||
******************************************************************************/
|
||||
|
||||
void chesstrv_state::chesstrv(machine_config &config)
|
||||
{
|
||||
@ -265,46 +203,37 @@ void chesstrv_state::chesstrv(machine_config &config)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &chesstrv_state::chesstrv_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &chesstrv_state::chesstrv_io);
|
||||
|
||||
f38t56_device &psu(F38T56(config, "psu", 3000000/2));
|
||||
psu.read_a().set(FUNC(chesstrv_state::ram_data_r));
|
||||
psu.write_a().set(FUNC(chesstrv_state::ram_data_w));
|
||||
psu.read_b().set(FUNC(chesstrv_state::input_r));
|
||||
psu.write_b().set(FUNC(chesstrv_state::matrix_w));
|
||||
|
||||
/* video hardware */
|
||||
for (int i = 0; i < 4; i++)
|
||||
TIMER(config, m_delay_display[i]).configure_generic(FUNC(chesstrv_state::delay_display));
|
||||
|
||||
config.set_default_layout(layout_chesstrv);
|
||||
}
|
||||
|
||||
void borisdpl_state::borisdpl(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
F8(config, m_maincpu, 3000000/2); // Motorola SC80265P, frequency approximated from video reference
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &borisdpl_state::chesstrv_mem);
|
||||
m_maincpu->set_addrmap(AS_IO, &borisdpl_state::borisdpl_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge));
|
||||
|
||||
f38t56_device &psu(F38T56(config, "psu", 3000000/2));
|
||||
psu.set_int_vector(0x5020);
|
||||
psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
|
||||
psu.read_a().set(FUNC(borisdpl_state::ram_r));
|
||||
psu.write_a().set(FUNC(borisdpl_state::ram_w));
|
||||
psu.read_b().set(FUNC(borisdpl_state::ram_addr_r));
|
||||
psu.write_b().set(FUNC(borisdpl_state::ram_addr_w));
|
||||
|
||||
/* video hardware */
|
||||
config.set_default_layout(layout_borisdpl);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( chesstrv )
|
||||
ROM_REGION(0x0800, "maincpu", 0)
|
||||
ROM_LOAD("3870-sl90387", 0x0000, 0x0800, CRC(b76214d8) SHA1(7760903a64d9c513eb54c4787f535dabec62eb64))
|
||||
|
||||
ROM_REGION(0x0100, "ram", ROMREGION_ERASE)
|
||||
ROM_REGION( 0x0800, "maincpu", 0 )
|
||||
ROM_LOAD("3870-sl90387", 0x0000, 0x0800, CRC(b76214d8) SHA1(7760903a64d9c513eb54c4787f535dabec62eb64) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( borisdpl )
|
||||
ROM_REGION(0x0800, "maincpu", 0)
|
||||
ROM_LOAD("007-7024-00_7847.u8", 0x0000, 0x0800, CRC(e20bac03) SHA1(9e17b9d90522371fbf7018926356150f70b9a3b6))
|
||||
|
||||
ROM_REGION(0x0100, "ram", ROMREGION_ERASE)
|
||||
ROM_END
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
|
||||
CONS( 1980, chesstrv, 0, 0, chesstrv, chesstrv, chesstrv_state, empty_init, "Acetronic", "Chess Traveller", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
|
||||
CONS( 1979, borisdpl, 0, 0, borisdpl, borisdpl, borisdpl_state, empty_init, "Applied Concepts", "Boris Diplomat", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1980, chesstrv, 0, 0, chesstrv, chesstrv, chesstrv_state, empty_init, "SciSys", "Chess Traveler", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
||||
|
@ -53,8 +53,8 @@ public:
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_keypad(*this, "IN.%u", 0),
|
||||
m_delay_display(*this, "delay_display_%u", 0),
|
||||
m_inp_matrix(*this, "IN.%u", 0),
|
||||
m_out_digit(*this, "digit%u", 0U)
|
||||
{ }
|
||||
|
||||
@ -67,8 +67,8 @@ private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<beep_device> m_beeper;
|
||||
required_ioport_array<10> m_keypad;
|
||||
required_device_array<timer_device, 12> m_delay_display;
|
||||
required_ioport_array<10> m_inp_matrix;
|
||||
output_finder<12> m_out_digit;
|
||||
|
||||
void main_map(address_map &map);
|
||||
@ -127,7 +127,7 @@ void tgm_state::update_display(u16 edge)
|
||||
if (BIT(m_digit_select, i))
|
||||
m_out_digit[i] = m_digit_data;
|
||||
|
||||
// they're strobed, so on falling edge, delay them going off to prevent flicker
|
||||
// they're strobed, so on falling edge, delay them going off to prevent flicker or stuck display
|
||||
// BTANB: some digit segments get stuck after crashing in the GP game, it's not due to the simulated delay here
|
||||
else if (BIT(edge, i))
|
||||
m_delay_display[i]->adjust(attotime::from_msec(20), i);
|
||||
@ -173,7 +173,7 @@ READ8_MEMBER(tgm_state::input_r)
|
||||
// P12,P13: multiplexed inputs
|
||||
for (int i = 0; i < 10; i++)
|
||||
if (m_inp_mux >> i & 1)
|
||||
data |= m_inp_matrix[i]->read();
|
||||
data |= m_keypad[i]->read();
|
||||
|
||||
return data << 2;
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ WRITE8_MEMBER(intel02_state::control_w)
|
||||
if (BIT(data, i))
|
||||
m_led_active |= 1 << i;
|
||||
|
||||
// they're strobed, so on falling edge, delay them going off to prevent flicker
|
||||
// they're strobed, so on falling edge, delay them going off to prevent flicker or stuck display
|
||||
else if (BIT(m_led_select, i))
|
||||
m_delay_display[i]->adjust(attotime::from_msec(10), i);
|
||||
}
|
||||
|
318
src/mame/layout/aci_borisdpl.lay
Normal file
318
src/mame/layout/aci_borisdpl.lay
Normal file
@ -0,0 +1,318 @@
|
||||
<?xml version="1.0"?>
|
||||
<mamelayout version="2">
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="black"><rect><color red="0.17" green="0.15" blue="0.15" /></rect></element>
|
||||
<element name="white"><rect><color red="0.81" green="0.8" blue="0.79" /></rect></element>
|
||||
<element name="disk_black"><disk><color red="0.17" green="0.15" blue="0.15" /></disk></element>
|
||||
<element name="disk_white"><disk><color red="0.81" green="0.8" blue="0.79" /></disk></element>
|
||||
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
|
||||
</element>
|
||||
|
||||
<element name="hl" defstate="0">
|
||||
<text string=" ">
|
||||
<bounds x="0.0" y="0.0" width="1.0" height="1.0" />
|
||||
<color red="0.0" green="0.0" blue="0.0" />
|
||||
</text>
|
||||
<disk state="1">
|
||||
<bounds x="0.12" y="0.12" width="0.76" height="0.76" />
|
||||
<color red="1.0" green="1.0" blue="1.0" />
|
||||
</disk>
|
||||
</element>
|
||||
|
||||
<!-- chess symbols are in 7seg style -->
|
||||
<element name="piece_1">
|
||||
<text string=" ">
|
||||
<bounds x="0" y="0" width="5" height="6" />
|
||||
<color red="0" green="0" blue="0" />
|
||||
</text>
|
||||
<rect>
|
||||
<bounds x="0" y="2.5" width="1" height="2.5" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="4" y="2.5" width="1" height="2.5" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="5" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="piece_2">
|
||||
<text string=" ">
|
||||
<bounds x="0" y="0" width="5" height="6" />
|
||||
<color red="0" green="0" blue="0" />
|
||||
</text>
|
||||
<rect>
|
||||
<bounds x="0" y="0" width="1" height="3" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="4" y="2" width="1" height="3" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="2" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="5" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="piece_3">
|
||||
<text string=" ">
|
||||
<bounds x="0" y="0" width="5" height="6" />
|
||||
<color red="0" green="0" blue="0" />
|
||||
</text>
|
||||
<rect>
|
||||
<bounds x="0" y="0" width="1" height="6" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="4" y="2.5" width="1" height="2.5" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="5" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="piece_4">
|
||||
<text string=" ">
|
||||
<bounds x="0" y="0" width="5" height="6" />
|
||||
<color red="0" green="0" blue="0" />
|
||||
</text>
|
||||
<rect>
|
||||
<bounds x="0" y="2" width="1" height="3" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="4" y="2" width="1" height="3" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="2" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="5" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="piece_5">
|
||||
<text string=" ">
|
||||
<bounds x="0" y="0" width="5" height="6" />
|
||||
<color red="0" green="0" blue="0" />
|
||||
</text>
|
||||
<rect>
|
||||
<bounds x="0" y="0" width="1" height="6" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="4" y="0" width="1" height="6" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="5" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
</element>
|
||||
<element name="piece_6">
|
||||
<text string=" ">
|
||||
<bounds x="0" y="0" width="5" height="6" />
|
||||
<color red="0" green="0" blue="0" />
|
||||
</text>
|
||||
<rect>
|
||||
<bounds x="0" y="0" width="1" height="6" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="4" y="0" width="1" height="6" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="2" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="0" y="5" width="5" height="1" />
|
||||
<color red="0.7" green="0.6" blue="0.4" />
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="text_0">
|
||||
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
|
||||
<text string="0"><color red="0.81" green="0.8" blue="0.79" /></text>
|
||||
</element>
|
||||
<element name="text_1">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="A 1"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_2">
|
||||
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
|
||||
<text string="B 2"><color red="0.81" green="0.8" blue="0.79" /></text>
|
||||
</element>
|
||||
<element name="text_3">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="C 3"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_4">
|
||||
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
|
||||
<text string="D 4"><color red="0.81" green="0.8" blue="0.79" /></text>
|
||||
</element>
|
||||
<element name="text_5">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="E 5"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_6">
|
||||
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
|
||||
<text string="F 6"><color red="0.81" green="0.8" blue="0.79" /></text>
|
||||
</element>
|
||||
<element name="text_7">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="G 7"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_8">
|
||||
<rect><color red="0.17" green="0.15" blue="0.15" /></rect>
|
||||
<text string="H 8"><color red="0.81" green="0.8" blue="0.79" /></text>
|
||||
</element>
|
||||
<element name="text_9a">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="9" align="1"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_9b">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="SET" align="2"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
|
||||
<element name="text_ti">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="TIME"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_bw">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="B/W"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_ra">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="RANK"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_re">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="RESET"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_ce">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="CE"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
<element name="text_en">
|
||||
<rect><color red="0.81" green="0.8" blue="0.79" /></rect>
|
||||
<text string="ENTER"><color red="0.17" green="0.15" blue="0.15" /></text>
|
||||
</element>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="6" right="94" top="2" bottom="64" />
|
||||
|
||||
<bezel name="digit0" element="digit"><bounds x="10" y="4" width="10" height="15" /></bezel>
|
||||
<bezel name="digit1" element="digit"><bounds x="20" y="4" width="10" height="15" /></bezel>
|
||||
<bezel name="digit2" element="digit"><bounds x="30" y="4" width="10" height="15" /></bezel>
|
||||
<bezel name="digit3" element="digit"><bounds x="40" y="4" width="10" height="15" /></bezel>
|
||||
<bezel name="digit4" element="digit"><bounds x="50" y="4" width="10" height="15" /></bezel>
|
||||
<bezel name="digit5" element="digit"><bounds x="60" y="4" width="10" height="15" /></bezel>
|
||||
<bezel name="digit6" element="digit"><bounds x="70" y="4" width="10" height="15" /></bezel>
|
||||
<bezel name="digit7" element="digit"><bounds x="80" y="4" width="10" height="15" /></bezel>
|
||||
|
||||
<bezel element="disk_white"><bounds x="14" y="21" width="2" height="2" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="24" y="21" width="2" height="2" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="34" y="21" width="2" height="2" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="44" y="21" width="2" height="2" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="54" y="21" width="2" height="2" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="64" y="21" width="2" height="2" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="74" y="21" width="2" height="2" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="84" y="21" width="2" height="2" /></bezel>
|
||||
|
||||
<bezel element="black"><bounds x="6" y="25" width="88" height="1" /></bezel>
|
||||
|
||||
<!-- button panel -->
|
||||
|
||||
<bezel element="white"><bounds x="8" y="28" width="84" height="34" /></bezel>
|
||||
<bezel element="black"><bounds x="10" y="30" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="30" y="30" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="50" y="30" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="70" y="30" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="20" y="40" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="40" y="40" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="60" y="40" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="80" y="40" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="10" y="50" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="30" y="50" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="50" y="50" width="10" height="10" /></bezel>
|
||||
<bezel element="black"><bounds x="70" y="50" width="10" height="10" /></bezel>
|
||||
|
||||
<bezel element="text_9a"><bounds x="41.5" y="30.5" width="5" height="4" /></bezel>
|
||||
<bezel element="text_9b"><bounds x="41.5" y="35.5" width="7.5" height="3.5" /></bezel>
|
||||
<bezel element="text_0"><bounds x="50.5" y="31.4" width="9" height="7" /></bezel>
|
||||
<bezel element="white"><bounds x="63.5" y="44.7" width="3" height="0.6" /></bezel>
|
||||
|
||||
<bezel element="text_ti"><bounds x="10.5" y="43.5" width="9" height="3" /></bezel>
|
||||
<bezel element="text_bw"><bounds x="60.5" y="33.5" width="9" height="3" /></bezel>
|
||||
<bezel element="text_re"><bounds x="80.5" y="33.5" width="9" height="3" /></bezel>
|
||||
<bezel element="text_ce"><bounds x="70.5" y="43.5" width="9" height="3" /></bezel>
|
||||
<bezel element="text_ra"><bounds x="60.5" y="53.5" width="9" height="3" /></bezel>
|
||||
<bezel element="text_en"><bounds x="80.5" y="53.5" width="9" height="3" /></bezel>
|
||||
|
||||
<bezel element="text_7"><bounds x="20.5" y="30.5" width="9" height="4" /></bezel>
|
||||
<bezel element="text_8"><bounds x="30.5" y="30.5" width="9" height="4" /></bezel>
|
||||
<bezel element="text_4"><bounds x="20.5" y="40.5" width="9" height="4" /></bezel>
|
||||
<bezel element="text_5"><bounds x="30.5" y="40.5" width="9" height="4" /></bezel>
|
||||
<bezel element="text_6"><bounds x="40.5" y="40.5" width="9" height="4" /></bezel>
|
||||
<bezel element="text_1"><bounds x="20.5" y="50.5" width="9" height="4" /></bezel>
|
||||
<bezel element="text_2"><bounds x="30.5" y="50.5" width="9" height="4" /></bezel>
|
||||
<bezel element="text_3"><bounds x="40.5" y="50.5" width="9" height="4" /></bezel>
|
||||
|
||||
<bezel element="piece_1"><bounds x="23.3" y="55.5" width="3.4" height="4" /></bezel>
|
||||
<bezel element="piece_2"><bounds x="33.3" y="55.5" width="3.4" height="4" /></bezel>
|
||||
<bezel element="piece_3"><bounds x="43.3" y="55.5" width="3.4" height="4" /></bezel>
|
||||
<bezel element="piece_4"><bounds x="23.3" y="45.5" width="3.4" height="4" /></bezel>
|
||||
<bezel element="piece_5"><bounds x="33.3" y="45.5" width="3.4" height="4" /></bezel>
|
||||
<bezel element="piece_6"><bounds x="43.3" y="45.5" width="3.4" height="4" /></bezel>
|
||||
|
||||
<bezel element="disk_black"><bounds x="24.5" y="34.5" width="1" height="1" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="34.5" y="34.5" width="1" height="1" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="24.5" y="44.5" width="1" height="1" /></bezel>
|
||||
<bezel element="disk_black"><bounds x="34.5" y="44.5" width="1" height="1" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="44.5" y="44.5" width="1" height="1" /></bezel>
|
||||
<bezel element="disk_black"><bounds x="24.5" y="54.5" width="1" height="1" /></bezel>
|
||||
<bezel element="disk_white"><bounds x="34.5" y="54.5" width="1" height="1" /></bezel>
|
||||
<bezel element="disk_black"><bounds x="44.5" y="54.5" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel element="hl" inputtag="LINE4" inputmask="0x01"><bounds x="20" y="30" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE4" inputmask="0x02"><bounds x="30" y="30" width="10" height="10" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE4" inputmask="0x04"><bounds x="40" y="30" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE1" inputmask="0x01"><bounds x="50" y="30" width="10" height="10" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE1" inputmask="0x04"><bounds x="60" y="30" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="RESET" inputmask="0x01"><bounds x="80" y="30" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
|
||||
<bezel element="hl" inputtag="LINE3" inputmask="0x08"><bounds x="10" y="40" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE3" inputmask="0x01"><bounds x="20" y="40" width="10" height="10" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE3" inputmask="0x02"><bounds x="30" y="40" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE3" inputmask="0x04"><bounds x="40" y="40" width="10" height="10" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE1" inputmask="0x02"><bounds x="60" y="40" width="10" height="10" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE4" inputmask="0x08"><bounds x="70" y="40" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
|
||||
<bezel element="hl" inputtag="LINE2" inputmask="0x01"><bounds x="20" y="50" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE2" inputmask="0x02"><bounds x="30" y="50" width="10" height="10" /><color alpha="0.2" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE2" inputmask="0x04"><bounds x="40" y="50" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE2" inputmask="0x08"><bounds x="60" y="50" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
<bezel element="hl" inputtag="LINE1" inputmask="0x08"><bounds x="80" y="50" width="10" height="10" /><color alpha="0.4" /></bezel>
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
@ -1,35 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<mamelayout version="2">
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg>
|
||||
<color red="0.75" green="0.0" blue="0.0" />
|
||||
</led7seg>
|
||||
</element>
|
||||
|
||||
<view name="Default Layout">
|
||||
<bezel name="digit0" element="digit">
|
||||
<bounds x="0" y="1" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit1" element="digit">
|
||||
<bounds x="37" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit2" element="digit">
|
||||
<bounds x="74" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit3" element="digit">
|
||||
<bounds x="111" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit4" element="digit">
|
||||
<bounds x="148" y="1" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit5" element="digit">
|
||||
<bounds x="185" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit6" element="digit">
|
||||
<bounds x="222" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit7" element="digit">
|
||||
<bounds x="259" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
</view>
|
||||
</mamelayout>
|
@ -1,23 +1,117 @@
|
||||
<?xml version="1.0"?>
|
||||
<mamelayout version="2">
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg>
|
||||
<color red="0.75" green="0.0" blue="0.0" />
|
||||
</led7seg>
|
||||
|
||||
<!-- define elements -->
|
||||
|
||||
<element name="black"><rect><color red="0.2" green="0.2" blue="0.2" /></rect></element>
|
||||
<element name="white"><rect><color red="0.8" green="0.8" blue="0.8" /></rect></element>
|
||||
|
||||
<element name="button" defstate="0">
|
||||
<rect state="0"><color red="0.8" green="0.8" blue="0.8" /></rect>
|
||||
<rect state="1"><color red="0.6" green="0.6" blue="0.6" /></rect>
|
||||
</element>
|
||||
|
||||
<view name="Default Layout">
|
||||
<bezel name="digit0" element="digit">
|
||||
<bounds x="0" y="1" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit1" element="digit">
|
||||
<bounds x="37" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit2" element="digit">
|
||||
<bounds x="74" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<bezel name="digit3" element="digit">
|
||||
<bounds x="111" y="0" width="25" height="35" />
|
||||
</bezel>
|
||||
<element name="digit" defstate="0">
|
||||
<led7seg><color red="1.0" green="0.1" blue="0.15" /></led7seg>
|
||||
</element>
|
||||
|
||||
<element name="text_l01a"><text string="A" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l01b"><text string="1" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l01c"><text string="[P]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l02a"><text string="B" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l02b"><text string="2" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l02c"><text string="[N]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l03a"><text string="C" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l03b"><text string="3" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l03c"><text string="[B]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l04a"><text string="D" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l04b"><text string="4" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l04c"><text string="[R]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l05a"><text string="E" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l05b"><text string="5" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l05c"><text string="[Q]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l06a"><text string="F" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l06b"><text string="6" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l06c"><text string="[K]"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l07a"><text string="G" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l07b"><text string="7" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l08a"><text string="H" align="1"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l08b"><text string="8" align="2"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
|
||||
<element name="text_l09"><text string="LV / CS"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l10"><text string="FP"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l11"><text string="EP"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l12"><text string="MM"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l13"><text string="CB"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l14"><text string="CE"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
<element name="text_l15"><text string="ENTER"><color red="0.8" green="0.8" blue="0.8" /></text></element>
|
||||
|
||||
|
||||
<!-- build screen -->
|
||||
|
||||
<view name="Internal Layout">
|
||||
<bounds left="-1" right="32" top="20" bottom="39.3" />
|
||||
|
||||
<bezel name="digit0" element="digit"><bounds x="8" y="21" width="3.4" height="5.1" /></bezel>
|
||||
<bezel name="digit1" element="digit"><bounds x="11.4" y="21" width="3.4" height="5.1" /></bezel>
|
||||
<bezel name="digit2" element="digit"><bounds x="16.2" y="21" width="3.4" height="5.1" /></bezel>
|
||||
<bezel name="digit3" element="digit"><bounds x="19.6" y="21" width="3.4" height="5.1" /></bezel>
|
||||
|
||||
<bezel element="black"><bounds x="-1" y="27.2" width="33" height="0.5" /></bezel>
|
||||
|
||||
<!-- button panel -->
|
||||
|
||||
<bezel element="button" inputtag="LINE1" inputmask="0x01"><bounds x="0" y="30" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE1" inputmask="0x02"><bounds x="4" y="30" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE1" inputmask="0x04"><bounds x="8" y="30" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE1" inputmask="0x08"><bounds x="12" y="30" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE2" inputmask="0x01"><bounds x="16" y="30" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE2" inputmask="0x02"><bounds x="20" y="30" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE2" inputmask="0x04"><bounds x="24" y="30" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE2" inputmask="0x08"><bounds x="28" y="30" width="3" height="2.2" /></bezel>
|
||||
|
||||
<bezel element="button" inputtag="LINE3" inputmask="0x01"><bounds x="0" y="35" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE3" inputmask="0x02"><bounds x="4" y="35" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE3" inputmask="0x04"><bounds x="8" y="35" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE4" inputmask="0x04"><bounds x="12" y="35" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE3" inputmask="0x08"><bounds x="16" y="35" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE4" inputmask="0x01"><bounds x="20" y="35" width="3" height="2.2" /></bezel>
|
||||
<bezel element="button" inputtag="LINE4" inputmask="0x02"><bounds x="26" y="35" width="3" height="2.2" /></bezel>
|
||||
|
||||
<bezel element="text_l01a"><bounds x="0.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l01b"><bounds x="0.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l02a"><bounds x="4.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l02b"><bounds x="4.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l03a"><bounds x="8.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l03b"><bounds x="8.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l04a"><bounds x="12.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l04b"><bounds x="12.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l05a"><bounds x="16.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l05b"><bounds x="16.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l06a"><bounds x="20.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l06b"><bounds x="20.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l07a"><bounds x="24.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l07b"><bounds x="24.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l08a"><bounds x="28.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
<bezel element="text_l08b"><bounds x="28.3" y="28.5" width="2.4" height="1.3" /></bezel>
|
||||
|
||||
<bezel element="text_l01c"><bounds x="0" y="32.3" width="3" height="1.3" /></bezel>
|
||||
<bezel element="text_l02c"><bounds x="4" y="32.3" width="3" height="1.3" /></bezel>
|
||||
<bezel element="text_l03c"><bounds x="8" y="32.3" width="3" height="1.3" /></bezel>
|
||||
<bezel element="text_l04c"><bounds x="12" y="32.3" width="3" height="1.3" /></bezel>
|
||||
<bezel element="text_l05c"><bounds x="16" y="32.3" width="3" height="1.3" /></bezel>
|
||||
<bezel element="text_l06c"><bounds x="20" y="32.3" width="3" height="1.3" /></bezel>
|
||||
|
||||
<bezel element="white"><bounds x="25" y="32.55" width="1" height="1" /></bezel>
|
||||
<bezel element="black"><bounds x="29" y="32.55" width="1" height="1" /></bezel>
|
||||
|
||||
<bezel element="text_l09"><bounds x="-1" y="37.3" width="5" height="1.3" /></bezel>
|
||||
<bezel element="text_l10"><bounds x="3" y="37.3" width="5" height="1.3" /></bezel>
|
||||
<bezel element="text_l11"><bounds x="7" y="37.3" width="5" height="1.3" /></bezel>
|
||||
<bezel element="text_l12"><bounds x="11" y="37.3" width="5" height="1.3" /></bezel>
|
||||
<bezel element="text_l13"><bounds x="15" y="37.3" width="5" height="1.3" /></bezel>
|
||||
<bezel element="text_l14"><bounds x="19" y="37.3" width="5" height="1.3" /></bezel>
|
||||
<bezel element="text_l15"><bounds x="25" y="37.3" width="5" height="1.3" /></bezel>
|
||||
|
||||
</view>
|
||||
</mamelayout>
|
||||
|
@ -875,6 +875,9 @@ sp_zigzgm //
|
||||
@source:aci_boris.cpp
|
||||
boris //
|
||||
|
||||
@source:aci_borisdpl.cpp
|
||||
borisdpl //
|
||||
|
||||
@source:acommand.cpp
|
||||
acommand // (c) 1990
|
||||
|
||||
@ -9758,7 +9761,6 @@ chessmsta //
|
||||
chessmstdm //
|
||||
|
||||
@source:chesstrv.cpp
|
||||
borisdpl //
|
||||
chesstrv //
|
||||
|
||||
@source:chexx.cpp
|
||||
|
@ -17,6 +17,7 @@ accomm.cpp
|
||||
acd.cpp
|
||||
aceex.cpp
|
||||
aci_boris.cpp
|
||||
aci_borisdpl.cpp
|
||||
acrnsys1.cpp
|
||||
acrnsys.cpp
|
||||
acvirus.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user