diff --git a/src/mame/handheld/hh_hmcs40.cpp b/src/mame/handheld/hh_hmcs40.cpp index d583dbdadb4..0910725cadc 100644 --- a/src/mame/handheld/hh_hmcs40.cpp +++ b/src/mame/handheld/hh_hmcs40.cpp @@ -91,7 +91,7 @@ known chips: *A04 HD44868 1984, SciSys Rapier *A07 HD44868 1984, Chess King Pocket Micro Deluxe - *A12 HD44868 1985, SciSys MK 10 / Pocket Chess + *A12 HD44868 1985, SciSys MK 10 / Pocket Chess / Electronic Trio *A14 HD44868 1985, SciSys Kasparov Plus *A16 HD44868 1988, Saitek Pocket Checkers diff --git a/src/mame/layout/saitek_ccompan.lay b/src/mame/layout/saitek_ccompan.lay index b685c4241a4..75e0b273fc7 100644 --- a/src/mame/layout/saitek_ccompan.lay +++ b/src/mame/layout/saitek_ccompan.lay @@ -17,7 +17,7 @@ license:CC0-1.0 - + @@ -578,11 +578,9 @@ license:CC0-1.0 - + - - - + diff --git a/src/mame/layout/saitek_ccompan2.lay b/src/mame/layout/saitek_ccompan2.lay new file mode 100644 index 00000000000..68758955fa8 --- /dev/null +++ b/src/mame/layout/saitek_ccompan2.lay @@ -0,0 +1,599 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/saitek_exchess.lay b/src/mame/layout/saitek_exechess.lay similarity index 99% rename from src/mame/layout/saitek_exchess.lay rename to src/mame/layout/saitek_exechess.lay index 207ecd62fcf..4a368f47db6 100644 --- a/src/mame/layout/saitek_exchess.lay +++ b/src/mame/layout/saitek_exechess.lay @@ -42,6 +42,7 @@ license:CC0-1.0 + diff --git a/src/mame/layout/saitek_expchess.lay b/src/mame/layout/saitek_expchess.lay new file mode 100644 index 00000000000..211ec0a6280 --- /dev/null +++ b/src/mame/layout/saitek_expchess.lay @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index fbb8f438051..4360b462f11 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -38319,6 +38319,10 @@ sage2 @source:saitek/ccompan.cpp ccompan +@source:saitek/ccompan2.cpp +ccompan2 +expchess + @source:saitek/chesstrv.cpp chesstrv chesstrvi @@ -38334,8 +38338,8 @@ cp2000 @source:saitek/delta1.cpp ccdelta1 -@source:saitek/exchess.cpp -exchess +@source:saitek/exechess.cpp +exechess @source:saitek/intchess.cpp intchess diff --git a/src/mame/novag/micro2.cpp b/src/mame/novag/micro2.cpp index 29eedd69220..c78b14108cc 100644 --- a/src/mame/novag/micro2.cpp +++ b/src/mame/novag/micro2.cpp @@ -70,15 +70,13 @@ public: // machine configs void micro2(machine_config &config); - DECLARE_INPUT_CHANGED_MEMBER(cpu_freq) { set_cpu_freq(); } + DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq) { set_cpu_freq(); } protected: virtual void machine_start() override; virtual void machine_reset() override { set_cpu_freq(); } private: - void set_cpu_freq(); - // devices/pointers required_device m_maincpu; required_device m_display; @@ -92,6 +90,8 @@ private: void control_w(u8 data); u8 input_r(); + void set_cpu_freq(); + bool m_kp_select = false; u8 m_inp_mux = 0; u8 m_led_select = 0; @@ -181,7 +181,7 @@ static INPUT_PORTS_START( micro2 ) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Go") PORT_START("FAKE") - PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, micro2_state, cpu_freq, 0) // factory set + PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, micro2_state, change_cpu_freq, 0) // factory set PORT_CONFSETTING( 0x00, "6MHz (original)" ) PORT_CONFSETTING( 0x01, "12MHz (Octo)" ) INPUT_PORTS_END diff --git a/src/mame/saitek/ccompan2.cpp b/src/mame/saitek/ccompan2.cpp new file mode 100644 index 00000000000..2f7d2a92045 --- /dev/null +++ b/src/mame/saitek/ccompan2.cpp @@ -0,0 +1,346 @@ +// license:BSD-3-Clause +// copyright-holders:hap +// thanks-to:Sean Riddle +/******************************************************************************* + +SciSys Chess Companion II family + +The chess engine is LogiChess (ported from Z80 to 6800), by Kaare Danielsen. +CXG Enterprise "S" / Star Chess is probably on similar hardware. + +TODO: +- standby/battery save mode + +******************************************************************************** + +Hardware notes: + +Chess Companion II: +- PCB label: Y01B-01 REV.B +- Hitachi HD6301V1 (0609V171) @ ~3MHz (LC oscillator) +- chessboard buttons, 16+5 leds, piezo + +Explorer Chess: +- slightly different UI (12 buttons instead of 14, but same functionality) +- portable, peg board instead of button board +- rest is same as ccompan2 + +Concord II: +- PCB label: SCISYS ST3 REV.E +- MCU clock frequency is twice higher than Concord +- rest is same as ccompan2, it just has the buttons/status leds at the bottom + instead of at the right + +Explorer Chess and Chess Companion II / Concord are on the same MCU, pin P23 is +either VCC or GND to distinguish between the two. + +0609V171 MCU is used in: +- SciSys Chess Companion II (2 revisions) +- SciSys Olympiade (French) +- SciSys Explorer Chess +- SciSys Concord +- SciSys Concord II +- SciSys Electronic Chess Mark 8 +- Tandy 1650 Portable Sensory Chess (Tandy brand Explorer Chess) +- Tandy 1650 Fast Response Time: Computerized Chess (Tandy brand Concord II) + +*******************************************************************************/ + +#include "emu.h" + +#include "cpu/m6800/m6801.h" +#include "machine/sensorboard.h" +#include "sound/dac.h" +#include "video/pwm.h" + +#include "speaker.h" + +// internal artwork +#include "saitek_ccompan2.lh" +#include "saitek_expchess.lh" + + +namespace { + +class ccompan2_state : public driver_device +{ +public: + ccompan2_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_board(*this, "board"), + m_display(*this, "display"), + m_dac(*this, "dac"), + m_inputs(*this, "IN.%u", 0) + { } + + void ccompan2(machine_config &config); + void expchess(machine_config &config); + + DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq) { set_cpu_freq(); } + +protected: + virtual void machine_start() override; + virtual void machine_reset() override { set_cpu_freq(); } + DECLARE_MACHINE_RESET(expchess) { ; } + +private: + // devices/pointers + required_device m_maincpu; + required_device m_board; + required_device m_display; + required_device m_dac; + required_ioport_array<8+1> m_inputs; + + // address maps + void main_map(address_map &map); + + // I/O handlers + u8 input1_r(); + u8 input2_r(); + void speaker_w(u8 data); + void mux_w(u8 data); + u8 battery_r(); + void led_w(u8 data); + + void set_cpu_freq(); + + u8 m_inp_mux = 0; +}; + +void ccompan2_state::machine_start() +{ + // register for savestates + save_item(NAME(m_inp_mux)); +} + +void ccompan2_state::set_cpu_freq() +{ + // Concord II MCU speed is twice higher + m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? 6000000 : 3000000); +} + + + +/******************************************************************************* + I/O +*******************************************************************************/ + +u8 ccompan2_state::input1_r() +{ + u8 data = 0; + + // P10-P17: read chessboard + for (int i = 0; i < 8; i++) + if (BIT(m_inp_mux, i)) + data |= m_board->read_file(i ^ 7); + + return ~data; +} + +u8 ccompan2_state::input2_r() +{ + u8 data = 0; + + // P21,P22: read buttons + for (int i = 0; i < 8; i++) + if (BIT(m_inp_mux, i)) + data |= m_inputs[i]->read() << 1 & 6; + + // P23: button configuration + data |= m_inputs[8]->read() << 3 & 8; + + return ~data; +} + +void ccompan2_state::speaker_w(u8 data) +{ + // P20: speaker out + m_dac->write(data & 1); +} + +void ccompan2_state::mux_w(u8 data) +{ + // P30-P37: input mux, led data + m_inp_mux = data ^ 0xff; + m_display->write_mx(m_inp_mux); +} + +u8 ccompan2_state::battery_r() +{ + // P40: battery status (only reads it at boot) + return 0; +} + +void ccompan2_state::led_w(u8 data) +{ + // P41-P45: direct leds + // P46,P47: board leds + m_display->write_my(~data >> 1 & 0x7f); +} + + + +/******************************************************************************* + Address Maps +*******************************************************************************/ + +void ccompan2_state::main_map(address_map &map) +{ + map(0x0000, 0x0014).m(m_maincpu, FUNC(hd6301v1_cpu_device::m6801_io)); + map(0x0080, 0x00ff).ram(); // internal + map(0xf000, 0xffff).rom(); +} + + + +/******************************************************************************* + Input Ports +*******************************************************************************/ + +static INPUT_PORTS_START( ccompan2 ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Sound") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("Color") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("Multi Move") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("King") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Queen") + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Rook") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Play") + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Enter Position") + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Knight") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back") + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Pawn") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") + + PORT_START("IN.8") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_CUSTOM) // button config + + PORT_START("FAKE") + PORT_CONFNAME( 0x01, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, ccompan2_state, change_cpu_freq, 0) // factory set + PORT_CONFSETTING( 0x00, "3MHz (original)" ) + PORT_CONFSETTING( 0x01, "6MHz (Concord II)" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( expchess ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Rook") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Bishop") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("White/Black") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Take Back") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("New Game / Clear Board") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("Level / Sound") + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("2nd F") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("Play / PVP") + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Knight") + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Pawn") + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("King") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Queen") + + PORT_START("IN.8") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_CUSTOM) // button config +INPUT_PORTS_END + + + +/******************************************************************************* + Machine Configs +*******************************************************************************/ + +void ccompan2_state::ccompan2(machine_config &config) +{ + // basic machine hardware + HD6301V1(config, m_maincpu, 3000000); // approximation, no XTAL + m_maincpu->set_addrmap(AS_PROGRAM, &ccompan2_state::main_map); + m_maincpu->in_p1_cb().set(FUNC(ccompan2_state::input1_r)); + m_maincpu->in_p2_cb().set(FUNC(ccompan2_state::input2_r)); + m_maincpu->out_p2_cb().set(FUNC(ccompan2_state::speaker_w)); + m_maincpu->out_p3_cb().set(FUNC(ccompan2_state::mux_w)); + m_maincpu->in_p4_cb().set(FUNC(ccompan2_state::battery_r)); + m_maincpu->out_p4_cb().set(FUNC(ccompan2_state::led_w)); + + SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); + m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); + m_board->set_delay(attotime::from_msec(150)); + + // video hardware + PWM_DISPLAY(config, m_display).set_size(5+2, 8); + m_display->set_interpolation(0.25); + config.set_default_layout(layout_saitek_ccompan2); + + // sound hardware + SPEAKER(config, "speaker").front_center(); + DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); +} + +void ccompan2_state::expchess(machine_config &config) +{ + ccompan2(config); + + MCFG_MACHINE_RESET_OVERRIDE(ccompan2_state, expchess) + config.set_default_layout(layout_saitek_expchess); +} + + + +/******************************************************************************* + ROM Definitions +*******************************************************************************/ + +ROM_START( ccompan2 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("1983_te-1_scisys-w_0609v171.u1", 0xf000, 0x1000, CRC(a26632fd) SHA1(fb83dc2476500acaabd949d749e58adca01012ea) ) +ROM_END + +ROM_START( expchess ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD("1983_te-1_scisys-w_0609v171.u1", 0xf000, 0x1000, CRC(a26632fd) SHA1(fb83dc2476500acaabd949d749e58adca01012ea) ) +ROM_END + +} // anonymous namespace + + + +/******************************************************************************* + Drivers +*******************************************************************************/ + +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1983, ccompan2, 0, 0, ccompan2, ccompan2, ccompan2_state, empty_init, "SciSys", "Chess Companion II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1983, expchess, ccompan2, 0, expchess, expchess, ccompan2_state, empty_init, "SciSys", "Explorer Chess", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/saitek/exchess.cpp b/src/mame/saitek/exechess.cpp similarity index 78% rename from src/mame/saitek/exchess.cpp rename to src/mame/saitek/exechess.cpp index 102d9db3490..006e592def6 100644 --- a/src/mame/saitek/exchess.cpp +++ b/src/mame/saitek/exechess.cpp @@ -23,15 +23,15 @@ Hardware notes: #include "screen.h" // internal artwork -#include "saitek_exchess.lh" +#include "saitek_exechess.lh" namespace { -class exchess_state : public driver_device +class exechess_state : public driver_device { public: - exchess_state(const machine_config &mconfig, device_type type, const char *tag) : + exechess_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_lcd1(*this, "lcd1"), @@ -41,7 +41,7 @@ public: m_inputs(*this, "IN.%u", 0) { } - void exchess(machine_config &config); + void exechess(machine_config &config); // battery status indicator is not software controlled DECLARE_INPUT_CHANGED_MEMBER(battery) { m_battery = newval; } @@ -77,7 +77,7 @@ private: u64 m_lcd_data[2] = { }; }; -void exchess_state::machine_start() +void exechess_state::machine_start() { m_battery.resolve(); m_ram = make_unique_clear(0x400); @@ -97,13 +97,13 @@ void exchess_state::machine_start() // LCD template -void exchess_state::lcd_output_w(u64 data) +void exechess_state::lcd_output_w(u64 data) { m_lcd_data[N] = data; m_display->matrix(m_lcd_data[0] & 0xff, m_lcd_data[1] << 26 | m_lcd_data[0] >> 8); } -void exchess_state::lcd_data_w(u8 data) +void exechess_state::lcd_data_w(u8 data) { // P40: HLCD0539 data // P44: HLCD0538 data @@ -121,7 +121,7 @@ void exchess_state::lcd_data_w(u8 data) // 1KB RAM (port-mapped) template -void exchess_state::ram_address_w(u8 data) +void exechess_state::ram_address_w(u8 data) { // P00-P07: RAM A0-A7 // P10-P11: RAM A8-A9 @@ -130,7 +130,7 @@ void exchess_state::ram_address_w(u8 data) } template -u8 exchess_state::ram_address_r() +u8 exechess_state::ram_address_r() { u8 data = m_ram_address[N]; @@ -138,13 +138,13 @@ u8 exchess_state::ram_address_r() return (N) ? data | (m_inputs[0]->read() & 8) : data; } -void exchess_state::ram_data_w(u8 data) +void exechess_state::ram_data_w(u8 data) { if (m_ram_address[1] & 4) m_ram[ram_address()] = data; } -u8 exchess_state::ram_data_r() +u8 exechess_state::ram_data_r() { return (m_ram_address[1] & 4) ? m_ram[ram_address()] : 0; } @@ -155,16 +155,16 @@ u8 exchess_state::ram_data_r() Address Maps *******************************************************************************/ -void exchess_state::main_map(address_map &map) +void exechess_state::main_map(address_map &map) { map.global_mask(0xfff); map(0x0000, 0x0fff).rom(); } -void exchess_state::main_io(address_map &map) +void exechess_state::main_io(address_map &map) { - map(0x00, 0x00).rw(FUNC(exchess_state::ram_address_r<0>), FUNC(exchess_state::ram_address_w<0>)); - map(0x01, 0x01).rw(FUNC(exchess_state::ram_address_r<1>), FUNC(exchess_state::ram_address_w<1>)); + map(0x00, 0x00).rw(FUNC(exechess_state::ram_address_r<0>), FUNC(exechess_state::ram_address_w<0>)); + map(0x01, 0x01).rw(FUNC(exechess_state::ram_address_r<1>), FUNC(exechess_state::ram_address_w<1>)); map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write)); } @@ -174,7 +174,7 @@ void exchess_state::main_io(address_map &map) Input Ports *******************************************************************************/ -static INPUT_PORTS_START( exchess ) +static INPUT_PORTS_START( exechess ) PORT_START("IN.0") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("Enter") PORT_BIT(0xf7, IP_ACTIVE_HIGH, IPT_UNUSED) @@ -199,7 +199,7 @@ static INPUT_PORTS_START( exchess ) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OTHER) // dr PORT_START("IN.3") - PORT_CONFNAME( 0x01, 0x00, "Battery Status" ) PORT_CHANGED_MEMBER(DEVICE_SELF, exchess_state, battery, 0) + PORT_CONFNAME( 0x01, 0x00, "Battery Status" ) PORT_CHANGED_MEMBER(DEVICE_SELF, exechess_state, battery, 0) PORT_CONFSETTING( 0x01, "Low" ) PORT_CONFSETTING( 0x00, DEF_STR( Normal ) ) INPUT_PORTS_END @@ -210,34 +210,34 @@ INPUT_PORTS_END Machine Configs *******************************************************************************/ -void exchess_state::exchess(machine_config &config) +void exechess_state::exechess(machine_config &config) { // basic machine hardware F8(config, m_maincpu, 4500000/2); // measured - m_maincpu->set_addrmap(AS_PROGRAM, &exchess_state::main_map); - m_maincpu->set_addrmap(AS_IO, &exchess_state::main_io); + m_maincpu->set_addrmap(AS_PROGRAM, &exechess_state::main_map); + m_maincpu->set_addrmap(AS_IO, &exechess_state::main_io); m_maincpu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge)); f38t56_device &psu(F38T56(config, "psu", 4500000/2)); psu.set_int_vector(0x0020); psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ); - psu.read_a().set(FUNC(exchess_state::ram_data_r)); - psu.write_a().set(FUNC(exchess_state::ram_data_w)); - psu.write_a().append(FUNC(exchess_state::lcd_data_w)); + psu.read_a().set(FUNC(exechess_state::ram_data_r)); + psu.write_a().set(FUNC(exechess_state::ram_data_w)); + psu.write_a().append(FUNC(exechess_state::lcd_data_w)); psu.read_b().set_ioport("IN.1"); // video hardware HLCD0538(config, m_lcd1, 310); // measured - m_lcd1->write_cols().set(FUNC(exchess_state::lcd_output_w<0>)); + m_lcd1->write_cols().set(FUNC(exechess_state::lcd_output_w<0>)); m_lcd1->write_interrupt().set(m_lcd2, FUNC(hlcd0539_device::lcd_w)); HLCD0539(config, m_lcd2, 0); - m_lcd2->write_cols().set(FUNC(exchess_state::lcd_output_w<1>)); + m_lcd2->write_cols().set(FUNC(exechess_state::lcd_output_w<1>)); m_lcd2->write_interrupt().set("psu", FUNC(f38t56_device::ext_int_w)).invert(); PWM_DISPLAY(config, m_display).set_size(8, 26+34); m_display->set_interpolation(0.2); - config.set_default_layout(layout_saitek_exchess); + config.set_default_layout(layout_saitek_exechess); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); screen.set_refresh_hz(60); @@ -251,12 +251,12 @@ void exchess_state::exchess(machine_config &config) ROM Definitions *******************************************************************************/ -ROM_START( exchess ) +ROM_START( exechess ) ROM_REGION( 0x1000, "maincpu", 0 ) ROM_LOAD("sl90553", 0x0000, 0x1000, CRC(a61b0c7e) SHA1(a13b11a93f78236223c5c0b9879a93284b7f7525) ) ROM_REGION( 852610, "screen", 0 ) - ROM_LOAD("exchess.svg", 0, 852610, CRC(cb36f9d3) SHA1(83be9b5d906d185b7cf6895f50992e7eea390c7a) ) + ROM_LOAD("exechess.svg", 0, 852610, CRC(cb36f9d3) SHA1(83be9b5d906d185b7cf6895f50992e7eea390c7a) ) ROM_END } // anonymous namespace @@ -267,5 +267,5 @@ ROM_END Drivers *******************************************************************************/ -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1981, exchess, 0, 0, exchess, exchess, exchess_state, empty_init, "SciSys", "Executive Chess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1981, exechess, 0, 0, exechess, exechess, exechess_state, empty_init, "SciSys", "Executive Chess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )