chess*: small cleanups

This commit is contained in:
hap 2024-09-08 14:14:38 +02:00
parent 362d732136
commit 7a60bfeba7
17 changed files with 99 additions and 113 deletions

View File

@ -62,7 +62,7 @@ public:
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void machine_reset() override { m_dac->write(0x80); }
private:
// devices/pointers
@ -95,11 +95,6 @@ void chesster_state::machine_start()
save_item(NAME(m_select));
}
void chesster_state::machine_reset()
{
m_dac->write(0x80);
}
/*******************************************************************************

View File

@ -42,7 +42,6 @@ public:
m_inputs(*this, "IN.0")
{ }
// machine configs
void eldorado(machine_config &config);
protected:
@ -57,15 +56,12 @@ private:
required_ioport m_inputs;
bool m_kp_select = false;
u16 m_inp_mux = 0;
u8 m_led_select = 0;
u8 m_inp_mux = 0;
// I/O handlers
void update_display();
void mux_w(u8 data);
u8 mux_r();
void control_w(u8 data);
int t0_r();
u8 input_r();
};
@ -74,7 +70,6 @@ void eldorado_state::machine_start()
// register for savestates
save_item(NAME(m_kp_select));
save_item(NAME(m_inp_mux));
save_item(NAME(m_led_select));
}
@ -83,16 +78,11 @@ void eldorado_state::machine_start()
I/O
*******************************************************************************/
void eldorado_state::update_display()
{
m_display->matrix(m_led_select, m_inp_mux);
}
void eldorado_state::mux_w(u8 data)
{
// D0-D7: input mux, led data
m_inp_mux = ~data;
update_display();
m_display->write_mx(m_inp_mux);
}
u8 eldorado_state::mux_r()
@ -106,24 +96,17 @@ void eldorado_state::control_w(u8 data)
m_dac->write(BIT(~data, 4));
// P25,P26: led select
m_led_select = ~data >> 5 & 3;
update_display();
m_display->write_my(~data >> 5 & 3);
// P27: keypad select
// P27: input mux highest bit (also goes to T0)
m_kp_select = !bool(data & 0x80);
}
int eldorado_state::t0_r()
{
// T0: P27
return m_kp_select ? 0 : 1;
}
u8 eldorado_state::input_r()
{
// P10-P17: multiplexed inputs
u8 data = 0;
// P10-P17: multiplexed inputs
// read chessboard buttons
for (int i = 0; i < 8; i++)
if (BIT(m_inp_mux, i))
@ -168,7 +151,7 @@ void eldorado_state::eldorado(machine_config &config)
m_maincpu->p2_out_cb().set(FUNC(eldorado_state::control_w));
m_maincpu->bus_in_cb().set(FUNC(eldorado_state::mux_r));
m_maincpu->bus_out_cb().set(FUNC(eldorado_state::mux_w));
m_maincpu->t0_in_cb().set(FUNC(eldorado_state::t0_r));
m_maincpu->t0_in_cb().set(m_maincpu, FUNC(mcs48_cpu_device::p2_r)).bit(7);
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess));

View File

@ -167,6 +167,12 @@ protected:
void ppi_portc_w(u8 data);
};
/*******************************************************************************
Initialization
*******************************************************************************/
void elite_state::machine_start()
{
fidel_clockdiv_state::machine_start();

View File

@ -27,12 +27,12 @@ and one for MCS48. A12 is forced high or low to select the bank.
#include "emu.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "cpu/z8/z8.h"
#include "machine/sensorboard.h"
#include "sound/dac.h"
#include "video/pwm.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
#include "softlist_dev.h"
#include "speaker.h"
@ -55,7 +55,6 @@ public:
m_inputs(*this, "IN.0")
{ }
// machine configs
void msc(machine_config &config);
protected:
@ -72,18 +71,13 @@ private:
u8 m_led_select = 0;
u16 m_inp_mux = 0;
// address maps
void main_map(address_map &map);
// I/O handlers
void update_display();
void mux_w(u8 data);
void control_w(u8 data);
u8 rom_r(offs_t offset);
u8 read_inputs();
u8 input_hi_r();
u8 input_lo_r();
u8 input_r();
};
void msc_state::machine_start()
@ -113,18 +107,20 @@ void msc_state::mux_w(u8 data)
void msc_state::control_w(u8 data)
{
// P37: input mux highest bit
// P35,P36: led select
m_inp_mux = (m_inp_mux & 0xff) | (data << 1 & 0x100);
m_led_select = ~data >> 5 & 3;
update_display();
// P34: speaker out
m_dac->write(BIT(~data, 4));
// P35,P36: led select
m_led_select = ~data >> 5 & 3;
// P37: input mux highest bit, led data
m_inp_mux = (m_inp_mux & 0xff) | (data << 1 & 0x100);
update_display();
}
u8 msc_state::read_inputs()
u8 msc_state::input_r()
{
// P30-P33,P04-P07: multiplexed inputs
u8 data = 0;
// read chessboard sensors
@ -139,18 +135,6 @@ u8 msc_state::read_inputs()
return bitswap<8>(~data,0,1,2,3,4,5,6,7);
}
u8 msc_state::input_hi_r()
{
// P04-P07: multiplexed inputs high
return read_inputs() | 0x0f;
}
u8 msc_state::input_lo_r()
{
// P30-P33: multiplexed inputs low
return read_inputs() | 0xf0;
}
/*******************************************************************************
@ -191,9 +175,11 @@ void msc_state::msc(machine_config &config)
// basic machine hardware
Z8601(config, m_maincpu, 8_MHz_XTAL);
m_maincpu->set_addrmap(AS_PROGRAM, &msc_state::main_map);
m_maincpu->p0_in_cb().set(FUNC(msc_state::input_hi_r));
m_maincpu->p0_in_cb().set(FUNC(msc_state::input_r)).mask(0xf0);
m_maincpu->p0_in_cb().append_constant(0x0f).mask(0x0f);
m_maincpu->p2_out_cb().set(FUNC(msc_state::mux_w));
m_maincpu->p3_in_cb().set(FUNC(msc_state::input_lo_r));
m_maincpu->p3_in_cb().set(FUNC(msc_state::input_r)).mask(0x0f);
m_maincpu->p3_in_cb().append_constant(0xf0).mask(0xf0);
m_maincpu->p3_out_cb().set(FUNC(msc_state::control_w));
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);

View File

@ -197,11 +197,12 @@ void sc6_state::mux_w(u8 data)
// P24-P27: 7442 A-D (or 74145)
// 7442 0-8: input mux, led data
m_inp_mux = data >> 4 & 0xf;
m_display->write_mx(1 << m_inp_mux);
u16 sel = 1 << m_inp_mux;
m_display->write_mx(sel);
// 7442 9: speaker out
if (m_dac != nullptr)
m_dac->write(BIT(1 << m_inp_mux, 9));
m_dac->write(BIT(sel, 9));
}
void sc6_state::select_w(u8 data)

View File

@ -94,19 +94,21 @@ void scc_state::control_w(offs_t offset, u8 data)
u8 mask = 1 << (offset & 7);
m_led_data = (m_led_data & ~mask) | ((data & 0x80) ? mask : 0);
// d0-d3: led select, input mux (row 9 is speaker out)
// d0-d3: 7442 to led select, input mux
// d4: corner led(direct)
m_inp_mux = data & 0xf;
u16 sel = 1 << m_inp_mux;
m_dac->write(BIT(sel, 9));
m_display->matrix((sel & 0xff) | (data << 4 & 0x100), m_led_data);
// 7442 9: speaker out
m_dac->write(BIT(sel, 9));
}
u8 scc_state::input_r()
{
// d0-d7: multiplexed inputs (active low)
u8 data = 0;
// d0-d7: multiplexed inputs (active low)
// read chessboard sensors
if (m_inp_mux < 8)
data = m_board->read_file(m_inp_mux);

View File

@ -102,7 +102,6 @@ protected:
void sc9d_map(address_map &map);
// I/O handlers
void update_display();
void control_w(u8 data);
void led_w(offs_t offset, u8 data);
u8 input_r();
@ -129,21 +128,16 @@ INPUT_CHANGED_MEMBER(sc9_state::sc9c_change_cpu_freq)
I/O
*******************************************************************************/
void sc9_state::update_display()
{
// 8*8 chessboard leds + 1 corner led
m_display->matrix(1 << m_inp_mux, m_led_data);
}
void sc9_state::control_w(u8 data)
{
// d0-d3: 74245 P0-P3
// 74245 Q0-Q8: input mux, led select
m_inp_mux = data & 0xf;
update_display();
u16 sel = 1 << m_inp_mux;
m_display->write_my(sel);
// 74245 Q9: speaker out
m_dac->write(BIT(1 << m_inp_mux, 9));
m_dac->write(BIT(sel, 9));
// d4,d5: ?
// d6,d7: N/C
@ -153,14 +147,14 @@ void sc9_state::led_w(offs_t offset, u8 data)
{
// a0-a2,d0: led data via NE591N
m_led_data = (m_led_data & ~(1 << offset)) | ((data & 1) << offset);
update_display();
m_display->write_mx(m_led_data);
}
u8 sc9_state::input_r()
{
// d0-d7: multiplexed inputs (active low)
u8 data = 0;
// d0-d7: multiplexed inputs (active low)
// read chessboard sensors
if (m_inp_mux < 8)
data = m_board->read_file(m_inp_mux);

View File

@ -142,6 +142,12 @@ private:
u8 input2_r();
};
/*******************************************************************************
Initialization
*******************************************************************************/
void const_state::machine_start()
{
// register for savestates

View File

@ -105,9 +105,9 @@ void micro_state::input_w(u8 data)
u8 micro_state::input_r()
{
// P10-P17: multiplexed inputs
u8 data = 0;
// P10-P17: multiplexed inputs
// read chessboard
u8 cb_mux = (m_inp_mux << 2) | (m_control >> 5 & 3);
cb_mux = bitswap<8>(cb_mux,4,5,6,7,1,0,3,2);

View File

@ -90,10 +90,8 @@ private:
bool m_kp_select = false;
u8 m_inp_mux = 0;
u8 m_led_select = 0;
// I/O handlers
void update_display();
void mux_w(u8 data);
void control_w(u8 data);
u8 input_r();
@ -101,12 +99,17 @@ private:
void set_cpu_freq();
};
/*******************************************************************************
Initialization
*******************************************************************************/
void micro2_state::machine_start()
{
// register for savestates
save_item(NAME(m_kp_select));
save_item(NAME(m_inp_mux));
save_item(NAME(m_led_select));
}
void micro2_state::set_cpu_freq()
@ -124,18 +127,11 @@ void micro2_state::set_cpu_freq()
I/O
*******************************************************************************/
// MCU ports/generic
void micro2_state::update_display()
{
m_display->matrix(m_led_select, m_inp_mux);
}
void micro2_state::mux_w(u8 data)
{
// D0-D7: input mux, led data
m_inp_mux = ~data;
update_display();
m_display->write_mx(m_inp_mux);
}
void micro2_state::control_w(u8 data)
@ -147,15 +143,14 @@ void micro2_state::control_w(u8 data)
m_dac->write(BIT(data, 2) & BIT(~data, 3));
// P24-P26: led select
m_led_select = ~data >> 4 & 7;
update_display();
m_display->write_my(~data >> 4 & 7);
}
u8 micro2_state::input_r()
{
// P10-P17: multiplexed inputs
u8 data = 0;
// P10-P17: multiplexed inputs
// read chessboard buttons
for (int i = 0; i < 8; i++)
if (BIT(m_inp_mux, i))

View File

@ -116,6 +116,12 @@ private:
void p6_w(u8 data);
};
/*******************************************************************************
Initialization
*******************************************************************************/
void blitz_state::machine_start()
{
m_out_lcd.resolve();

View File

@ -29,13 +29,13 @@ different compared to Stratos/Turbo King.
namespace {
// note: sub-class of saitek_stratos_state (see stratos.h, stratos.cpp)
// note: sub-class of stratos_base_state (see stratos.h, stratos.cpp)
class corona_state : public saitek_stratos_state
class corona_state : public stratos_base_state
{
public:
corona_state(const machine_config &mconfig, device_type type, const char *tag) :
saitek_stratos_state(mconfig, type, tag),
stratos_base_state(mconfig, type, tag),
m_rombank(*this, "rombank"),
m_board(*this, "board"),
m_dac(*this, "dac"),
@ -81,7 +81,7 @@ private:
void corona_state::machine_start()
{
saitek_stratos_state::machine_start();
stratos_base_state::machine_start();
// register for savestates
save_item(NAME(m_control1));
@ -94,7 +94,7 @@ void corona_state::machine_start()
void corona_state::machine_reset()
{
saitek_stratos_state::machine_reset();
stratos_base_state::machine_reset();
m_control2 = 0;
m_rombank.select(0);

View File

@ -166,6 +166,12 @@ private:
void p5_w(u8 data);
};
/*******************************************************************************
Initialization
*******************************************************************************/
void gk2000_state::machine_start()
{
m_out_lcd.resolve();

View File

@ -133,6 +133,12 @@ private:
void write_lcd(int state);
};
/*******************************************************************************
Initialization
*******************************************************************************/
void mark5_state::machine_start()
{
m_out_x.resolve();

View File

@ -69,11 +69,11 @@ is engine version C.
#include "saitek_tking.lh"
class stratos_state : public saitek_stratos_state
class stratos_state : public stratos_base_state
{
public:
stratos_state(const machine_config &mconfig, device_type type, const char *tag) :
saitek_stratos_state(mconfig, type, tag),
stratos_base_state(mconfig, type, tag),
m_banked_nvram(*this, "nvram.u7", 0x2000, ENDIANNESS_LITTLE),
m_nvrambank(*this, "nvrambank"),
m_rombank(*this, "rombank"),
@ -123,9 +123,9 @@ private:
};
// saitek_stratos_state
// stratos_base_state
void saitek_stratos_state::machine_start()
void stratos_base_state::machine_start()
{
// resolve handlers
m_out_digit.resolve();
@ -139,7 +139,7 @@ void saitek_stratos_state::machine_start()
save_item(NAME(m_lcd_data));
}
void saitek_stratos_state::machine_reset()
void stratos_base_state::machine_reset()
{
m_power = true;
m_lcd_ready = false;
@ -147,7 +147,7 @@ void saitek_stratos_state::machine_reset()
clear_lcd();
}
INPUT_CHANGED_MEMBER(saitek_stratos_state::change_cpu_freq)
INPUT_CHANGED_MEMBER(stratos_base_state::change_cpu_freq)
{
// known officially* released CPU speeds: 5MHz, 5.626MHz, 5.67MHz
// *not including reseller overclocks, user mods, or the "Turbo Kit"
@ -160,7 +160,7 @@ INPUT_CHANGED_MEMBER(saitek_stratos_state::change_cpu_freq)
void stratos_state::machine_start()
{
saitek_stratos_state::machine_start();
stratos_base_state::machine_start();
// init banks
m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x8000);
@ -174,7 +174,7 @@ void stratos_state::machine_start()
void stratos_state::machine_reset()
{
saitek_stratos_state::machine_reset();
stratos_base_state::machine_reset();
m_control = 0;
m_rombank->set_entry(0);
@ -189,7 +189,7 @@ void stratos_state::machine_reset()
// soft power on/off
INPUT_CHANGED_MEMBER(saitek_stratos_state::go_button)
INPUT_CHANGED_MEMBER(stratos_base_state::go_button)
{
if (newval && !m_power)
{
@ -198,7 +198,7 @@ INPUT_CHANGED_MEMBER(saitek_stratos_state::go_button)
}
}
void saitek_stratos_state::power_off()
void stratos_base_state::power_off()
{
m_power = false;
m_maincpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
@ -212,7 +212,7 @@ void saitek_stratos_state::power_off()
// LCD HLE
void saitek_stratos_state::update_lcd()
void stratos_base_state::update_lcd()
{
// output individual segments
for (int i = 0; i < 0x40; i++)
@ -230,7 +230,7 @@ void saitek_stratos_state::update_lcd()
m_out_digit[i + 5] = (m_lcd_data[0x11 + i * 2] << 4 | m_lcd_data[0x11 + i * 2 + 1]) & 0x7f;
}
void saitek_stratos_state::lcd_data_w(u8 data)
void stratos_base_state::lcd_data_w(u8 data)
{
// d0-d3: lcd data
// d4-d7: unused?
@ -418,10 +418,10 @@ INPUT_PORTS_START( saitek_stratos )
PORT_CONFSETTING( 0x01, DEF_STR( Normal ) )
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, go_button, 0) PORT_NAME("Go")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_base_state, go_button, 0) PORT_NAME("Go")
PORT_START("CPU")
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, change_cpu_freq, 0) // factory set
PORT_CONFNAME( 0x03, 0x00, "CPU Frequency" ) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_base_state, change_cpu_freq, 0) // factory set
PORT_CONFSETTING( 0x00, "5MHz" )
PORT_CONFSETTING( 0x01, "5.626MHz" )
PORT_CONFSETTING( 0x02, "5.67MHz" )
@ -468,7 +468,7 @@ static INPUT_PORTS_START( tking ) // same buttons, but different locations
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Normal")
PORT_MODIFY("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF, saitek_stratos_state, go_button, 0) PORT_NAME("Go")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_CHANGED_MEMBER(DEVICE_SELF, stratos_base_state, go_button, 0) PORT_NAME("Go")
INPUT_PORTS_END
static INPUT_PORTS_START( tking2 )

View File

@ -17,10 +17,10 @@
#include <algorithm>
class saitek_stratos_state : public driver_device
class stratos_base_state : public driver_device
{
public:
saitek_stratos_state(const machine_config &mconfig, device_type type, const char *tag) :
stratos_base_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_display(*this, "display"),

View File

@ -13,7 +13,7 @@ TODO:
- where does the interrupt come from?
- Debut-M is an updated version? Or is it the same program as Debut with a redesigned case?
********************************************************************************
================================================================================
Hardware notes:
- КР1810ВМ86 (i8086 clone), 16200K XTAL