mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
New machines marked as NOT_WORKING
---------------------------------- Executive Chess [hap, Sean Riddle]
This commit is contained in:
parent
996ec14b83
commit
69d5d89940
@ -3345,6 +3345,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/saitek_chesstrv.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/saitek_cp2000.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/saitek_delta1.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/saitek_exchess.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/saitek_mark5.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/saitek_prschess.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/saitek_risc2500.cpp",
|
||||
|
@ -593,7 +593,7 @@ void hmcs40_cpu_device::execute_run()
|
||||
debugger_instruction_hook(m_pc);
|
||||
m_icount--;
|
||||
m_op = m_program->read_word(m_pc) & 0x3ff;
|
||||
m_i = bitswap<8>(m_op,7,6,5,4,0,1,2,3) & 0xf; // reversed bit-order for 4-bit immediate param (except for XAMR)
|
||||
m_i = bitswap<4>(m_op,0,1,2,3); // reversed bit-order for 4-bit immediate param (except for XAMR)
|
||||
increment_pc();
|
||||
|
||||
// handle opcode
|
||||
|
@ -669,7 +669,7 @@ void hmcs40_cpu_device::op_p()
|
||||
if (o & 0x100)
|
||||
{
|
||||
// B3 B2 B1 B0 A0 A1 A2 A3
|
||||
m_a = bitswap<8>(o,7,6,5,4,0,1,2,3) & 0xf;
|
||||
m_a = bitswap<4>(o,0,1,2,3);
|
||||
m_b = o >> 4 & 0xf;
|
||||
}
|
||||
if (o & 0x200)
|
||||
|
@ -2,13 +2,16 @@
|
||||
// copyright-holders:hap
|
||||
/*
|
||||
|
||||
Hughes HLCD 0538(A)/0539(A) LCD Driver
|
||||
Hughes HLCD 0538(A)/0539(A) LCD Driver
|
||||
|
||||
0538: 8 rows, 26 columns
|
||||
0539: 0 rows, 34 columns
|
||||
0538: 8 rows, 26 columns
|
||||
0539: 0 rows, 34 columns
|
||||
|
||||
TODO:
|
||||
- the only difference between 0538/0539 is row pins voltage levels?
|
||||
"LCD" pin can be used in 2 modes, either direct drive, or as an oscillator.
|
||||
In latter case, output frequency is approximately 1/RC.
|
||||
|
||||
TODO:
|
||||
- the only difference between 0538/0539 is row pins voltage levels?
|
||||
|
||||
*/
|
||||
|
||||
@ -47,11 +50,10 @@ void hlcd0538_device::device_start()
|
||||
m_write_cols.resolve_safe();
|
||||
m_write_interrupt.resolve_safe();
|
||||
|
||||
// zerofill
|
||||
m_lcd = 0;
|
||||
m_clk = 0;
|
||||
m_data = 0;
|
||||
m_shift = 0;
|
||||
// timer (when LCD pin is oscillator)
|
||||
m_lcd_timer = timer_alloc();
|
||||
attotime period = (clock() != 0) ? attotime::from_hz(2 * clock()) : attotime::never;
|
||||
m_lcd_timer->adjust(period, 0, period);
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_lcd));
|
||||
|
@ -58,11 +58,14 @@ protected:
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override { lcd_w(!m_lcd); }
|
||||
|
||||
int m_lcd; // input pin state
|
||||
int m_clk; // "
|
||||
int m_data; // "
|
||||
u64 m_shift;
|
||||
emu_timer *m_lcd_timer;
|
||||
|
||||
int m_lcd = 0;
|
||||
int m_clk = 0;
|
||||
int m_data = 0;
|
||||
u64 m_shift = 0;
|
||||
|
||||
// callbacks
|
||||
devcb_write64 m_write_cols;
|
||||
|
@ -368,8 +368,8 @@ void cmpchess_state::mk1(machine_config &config)
|
||||
cmpchess(config);
|
||||
|
||||
/* basic machine hardware */
|
||||
m_maincpu->set_clock(2200000); // JS&A version measured 2.18MHz on average
|
||||
subdevice<f3853_device>("smi")->set_clock(2200000);
|
||||
m_maincpu->set_clock(2250000); // JS&A version measured 2.18MHz on average
|
||||
subdevice<f3853_device>("smi")->set_clock(2250000);
|
||||
|
||||
config.set_default_layout(layout_novag_mk1);
|
||||
}
|
||||
|
@ -533,15 +533,15 @@ ROM_END
|
||||
|
||||
ROM_START( feasgla )
|
||||
ROM_REGION( 0x10000, "mainmap", 0 )
|
||||
ROM_LOAD("4,0_8_6", 0x8000, 0x0800, CRC(32784e2d) SHA1(dae060a5c49cc1993a78db293cd80464adfd892d) )
|
||||
ROM_LOAD("4.0_86", 0x8000, 0x0800, CRC(32784e2d) SHA1(dae060a5c49cc1993a78db293cd80464adfd892d) )
|
||||
ROM_CONTINUE( 0x9000, 0x0800 )
|
||||
ROM_CONTINUE( 0x8800, 0x0800 )
|
||||
ROM_CONTINUE( 0x9800, 0x0800 )
|
||||
ROM_LOAD("c_5", 0xc000, 0x0800, CRC(ddb80412) SHA1(b1d9435d9a71b8eb241a2169bfbaa0499f510769) )
|
||||
ROM_LOAD("c5", 0xc000, 0x0800, CRC(ddb80412) SHA1(b1d9435d9a71b8eb241a2169bfbaa0499f510769) )
|
||||
ROM_CONTINUE( 0xd000, 0x0800 )
|
||||
ROM_CONTINUE( 0xc800, 0x0800 )
|
||||
ROM_CONTINUE( 0xd800, 0x0800 )
|
||||
ROM_LOAD("4,0_e_4", 0xe000, 0x0800, CRC(62a5305a) SHA1(a361bd9a54b903d7b0fbacabe55ea5ccbbc1dc51) )
|
||||
ROM_LOAD("4.0_e4", 0xe000, 0x0800, CRC(62a5305a) SHA1(a361bd9a54b903d7b0fbacabe55ea5ccbbc1dc51) )
|
||||
ROM_CONTINUE( 0xf000, 0x0800 )
|
||||
ROM_CONTINUE( 0xe800, 0x0800 )
|
||||
ROM_CONTINUE( 0xf800, 0x0800 )
|
||||
@ -569,15 +569,15 @@ ROM_END
|
||||
|
||||
ROM_START( feasglaa )
|
||||
ROM_REGION( 0x10000, "mainmap", 0 )
|
||||
ROM_LOAD("p6", 0x8000, 0x0800, CRC(2fdddb4f) SHA1(6da0a328a45462f285ae6a0756f97c5a43148f97) )
|
||||
ROM_LOAD("6a", 0x8000, 0x0800, CRC(2fdddb4f) SHA1(6da0a328a45462f285ae6a0756f97c5a43148f97) )
|
||||
ROM_CONTINUE( 0x9000, 0x0800 )
|
||||
ROM_CONTINUE( 0x8800, 0x0800 )
|
||||
ROM_CONTINUE( 0x9800, 0x0800 )
|
||||
ROM_LOAD("p5", 0xc000, 0x0800, CRC(f094e625) SHA1(fef84c6a3da504aac15988ec9af94417e5fedfbd) )
|
||||
ROM_LOAD("5a", 0xc000, 0x0800, CRC(f094e625) SHA1(fef84c6a3da504aac15988ec9af94417e5fedfbd) )
|
||||
ROM_CONTINUE( 0xd000, 0x0800 )
|
||||
ROM_CONTINUE( 0xc800, 0x0800 )
|
||||
ROM_CONTINUE( 0xd800, 0x0800 )
|
||||
ROM_LOAD("p4", 0xe000, 0x0800, CRC(5f6845d1) SHA1(684eb16faf36a49560e5a73b55fd0022dc090e35) )
|
||||
ROM_LOAD("4a", 0xe000, 0x0800, CRC(5f6845d1) SHA1(684eb16faf36a49560e5a73b55fd0022dc090e35) )
|
||||
ROM_CONTINUE( 0xf000, 0x0800 )
|
||||
ROM_CONTINUE( 0xe800, 0x0800 )
|
||||
ROM_CONTINUE( 0xf800, 0x0800 )
|
||||
|
@ -2736,7 +2736,7 @@ WRITE16_MEMBER(einvader2_state::grid_w)
|
||||
READ16_MEMBER(einvader2_state::input_r)
|
||||
{
|
||||
// D13-D15: multiplexed inputs
|
||||
return read_inputs(6) << 13;
|
||||
return read_inputs(3) << 13;
|
||||
}
|
||||
|
||||
// config
|
||||
|
@ -496,16 +496,16 @@ void homerun_state::ganjaja(machine_config &config)
|
||||
|
||||
ROM_START( homerun )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD( "homerun.ic43", 0x00000, 0x20000, CRC(e759e476) SHA1(ad4f356ff26209033320a3e6353e4d4d9beb59c1) )
|
||||
ROM_LOAD( "homerun.ic43", 0x00000, 0x20000, CRC(e759e476) SHA1(ad4f356ff26209033320a3e6353e4d4d9beb59c1) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_LOAD( "homerun.ic60", 0x00000, 0x10000, CRC(69a720d1) SHA1(0f0a4877578f358e9e829ece8c31e23f01adcf83) )
|
||||
ROM_LOAD( "homerun.ic60", 0x00000, 0x10000, CRC(69a720d1) SHA1(0f0a4877578f358e9e829ece8c31e23f01adcf83) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx2", 0 )
|
||||
ROM_LOAD( "homerun.ic120", 0x00000, 0x20000, CRC(52f0709b) SHA1(19e675bcccadb774f60ec5929fc1fb5cf0d3f617) )
|
||||
ROM_LOAD( "homerun.ic120", 0x00000, 0x20000, CRC(52f0709b) SHA1(19e675bcccadb774f60ec5929fc1fb5cf0d3f617) )
|
||||
|
||||
ROM_REGION( 0x08000, "d7756", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "d7756c.ic98", 0x00000, 0x08000, NO_DUMP ) // D7756C built-in rom - very likely the same rom as Moero!! Pro Yakyuu (Black/Red) on Famicom
|
||||
ROM_LOAD( "d7756c_146.ic98", 0x00000, 0x08000, NO_DUMP ) // D7756C built-in rom - same maskrom serial as Moero!! Pro Yakyuu (Black/Red) on Famicom
|
||||
ROM_END
|
||||
|
||||
ROM_START( nhomerun )
|
||||
@ -519,21 +519,21 @@ ROM_START( nhomerun )
|
||||
ROM_LOAD( "2.ic120", 0x00000, 0x20000, CRC(57e9b757) SHA1(8190d690721005407a5b06d13d64e70301d1e925) )
|
||||
|
||||
ROM_REGION( 0x08000, "d7756", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "d7756c.ic98", 0x00000, 0x08000, NO_DUMP )
|
||||
ROM_LOAD( "d7756c_146.ic98", 0x00000, 0x08000, NO_DUMP )
|
||||
ROM_END
|
||||
|
||||
ROM_START( dynashot )
|
||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||
ROM_LOAD( "1.ic43", 0x00000, 0x20000, CRC(bf3c9586) SHA1(439effbda305f5fa265e5897c81dc1447e5d867d) )
|
||||
ROM_LOAD( "1.ic43", 0x00000, 0x20000, CRC(bf3c9586) SHA1(439effbda305f5fa265e5897c81dc1447e5d867d) )
|
||||
|
||||
ROM_REGION( 0x10000, "gfx1", 0 )
|
||||
ROM_LOAD( "3.ic60", 0x00000, 0x10000, CRC(77d6a608) SHA1(a31ff343a5d4d6f20301c030ecc2e252149bcf9d) )
|
||||
ROM_LOAD( "3.ic60", 0x00000, 0x10000, CRC(77d6a608) SHA1(a31ff343a5d4d6f20301c030ecc2e252149bcf9d) )
|
||||
|
||||
ROM_REGION( 0x20000, "gfx2", 0 )
|
||||
ROM_LOAD( "2.ic120", 0x00000, 0x20000, CRC(bedf7b98) SHA1(cb6c5fcaf8df5f5c7636c3c8f79b9dda78e30c2e) )
|
||||
ROM_LOAD( "2.ic120", 0x00000, 0x20000, CRC(bedf7b98) SHA1(cb6c5fcaf8df5f5c7636c3c8f79b9dda78e30c2e) )
|
||||
|
||||
ROM_REGION( 0x08000, "d7756", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "d7756c.ic98", 0x00000, 0x08000, NO_DUMP )
|
||||
ROM_LOAD( "d7756c_146.ic98", 0x00000, 0x08000, NO_DUMP ) // unused?
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -225,7 +225,7 @@ ROM_START( mchess )
|
||||
ROM_LOAD("ins8050-6hwu_n", 0x0000, 0x1000, CRC(de272323) SHA1(9ba323b614504e20b25c86d290c0667f0bbf6c6b) )
|
||||
|
||||
ROM_REGION( 796406, "screen", 0)
|
||||
ROM_LOAD( "mchess.svg", 0, 796406, CRC(795d66e0) SHA1(5f786c00bf33793bfba7065d8e9ec476e02e5c46) )
|
||||
ROM_LOAD("mchess.svg", 0, 796406, CRC(795d66e0) SHA1(5f786c00bf33793bfba7065d8e9ec476e02e5c46) )
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
@ -413,14 +413,14 @@ static INPUT_PORTS_START( microvision )
|
||||
PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(15) PORT_KEYDELTA(15) PORT_CENTERDELTA(0)
|
||||
|
||||
PORT_START("CONF")
|
||||
PORT_CONFNAME( 0x01, 0x01, "Overlay" ) PORT_CHANGED_MEMBER(DEVICE_SELF, microvision_state, conf_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( None ) )
|
||||
PORT_CONFNAME( 0x01, 0x01, "Restrict Buttons" ) PORT_CHANGED_MEMBER(DEVICE_SELF, microvision_state, conf_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ) )
|
||||
PORT_CONFSETTING( 0x01, "Auto" )
|
||||
PORT_CONFNAME( 0x06, 0x04, "Paddle Hardware" ) PORT_CHANGED_MEMBER(DEVICE_SELF, microvision_state, conf_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, DEF_STR( No ) ) // no circuitry on cartridge PCB
|
||||
PORT_CONFSETTING( 0x02, DEF_STR( Yes ) )
|
||||
PORT_CONFSETTING( 0x04, "Auto" )
|
||||
PORT_CONFNAME( 0x18, 0x10, "TMS1100 PLA" ) PORT_CHANGED_MEMBER(DEVICE_SELF, microvision_state, conf_changed, 0)
|
||||
PORT_CONFNAME( 0x18, 0x10, "TMS1100 PLA Type" ) PORT_CHANGED_MEMBER(DEVICE_SELF, microvision_state, conf_changed, 0)
|
||||
PORT_CONFSETTING( 0x00, "0" )
|
||||
PORT_CONFSETTING( 0x08, "1" )
|
||||
PORT_CONFSETTING( 0x10, "Auto" )
|
||||
|
@ -365,7 +365,7 @@ void savant_state::savant(machine_config &config)
|
||||
m_mcu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge));
|
||||
|
||||
F38T56(config, m_psu, 4_MHz_XTAL/2);
|
||||
m_psu->set_int_vector(0x20);
|
||||
m_psu->set_int_vector(0x0020);
|
||||
m_psu->int_req_callback().set_inputline(m_mcu, F8_INPUT_LINE_INT_REQ);
|
||||
m_psu->write_a().set(FUNC(savant_state::lcd_w));
|
||||
m_psu->read_b().set(FUNC(savant_state::input_r));
|
||||
|
@ -191,11 +191,11 @@ INPUT_PORTS_END
|
||||
void chesstrv_state::chesstrv(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
F8(config, m_maincpu, 3000000/2); // Fairchild 3870, measured ~3MHz
|
||||
F8(config, m_maincpu, 4500000/2); // approximation
|
||||
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));
|
||||
f38t56_device &psu(F38T56(config, "psu", 4500000/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));
|
||||
@ -219,7 +219,7 @@ void chesstrv_state::chesstrv(machine_config &config)
|
||||
|
||||
ROM_START( chesstrv )
|
||||
ROM_REGION( 0x0800, "maincpu", 0 )
|
||||
ROM_LOAD("3870-sl90387", 0x0000, 0x0800, CRC(b76214d8) SHA1(7760903a64d9c513eb54c4787f535dabec62eb64) )
|
||||
ROM_LOAD("sl90387", 0x0000, 0x0800, CRC(b76214d8) SHA1(7760903a64d9c513eb54c4787f535dabec62eb64) )
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
@ -220,12 +220,12 @@ INPUT_PORTS_END
|
||||
void cp2000_state::cp2000(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
F8(config, m_maincpu, 2800000); // see driver notes
|
||||
F8(config, m_maincpu, 2750000); // see driver notes
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &cp2000_state::main_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &cp2000_state::main_io);
|
||||
m_maincpu->set_irq_acknowledge_callback("f3853", FUNC(f3853_device::int_acknowledge));
|
||||
|
||||
f3853_device &f3853(F3853(config, "f3853", 2800000));
|
||||
f3853_device &f3853(F3853(config, "f3853", 2750000));
|
||||
f3853.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
|
||||
|
||||
SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS);
|
||||
|
243
src/mame/drivers/saitek_exchess.cpp
Normal file
243
src/mame/drivers/saitek_exchess.cpp
Normal file
@ -0,0 +1,243 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
// thanks-to:Sean Riddle
|
||||
/******************************************************************************
|
||||
|
||||
SciSys Executive Chess, handheld chesscomputer.
|
||||
Also known as Senator Chess in Germany.
|
||||
|
||||
Hardware notes:
|
||||
- Fairchild 3870 MCU (variant with 4KB internal ROM)
|
||||
- 1KB RAM (2*TC5514P)
|
||||
- HLCD0538, HLCD0539, LCD screen
|
||||
|
||||
TODO:
|
||||
- SVG screen
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/f8/f8.h"
|
||||
#include "machine/f3853.h"
|
||||
#include "video/hlcd0538.h"
|
||||
#include "video/pwm.h"
|
||||
|
||||
// internal artwork
|
||||
//#include "saitek_exchess.lh" // clickable
|
||||
|
||||
|
||||
namespace {
|
||||
|
||||
class exchess_state : public driver_device
|
||||
{
|
||||
public:
|
||||
exchess_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_lcd1(*this, "lcd1"),
|
||||
m_lcd2(*this, "lcd2"),
|
||||
m_display(*this, "display"),
|
||||
m_inputs(*this, "IN.%u", 0)
|
||||
{ }
|
||||
|
||||
void exchess(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<hlcd0538_device> m_lcd1;
|
||||
required_device<hlcd0539_device> m_lcd2;
|
||||
required_device<pwm_display_device> m_display;
|
||||
required_ioport_array<3> m_inputs;
|
||||
|
||||
void main_map(address_map &map);
|
||||
void main_io(address_map &map);
|
||||
|
||||
template<int N> void lcd_output_w(u64 data);
|
||||
void lcd_data_w(u8 data);
|
||||
|
||||
u16 ram_address() { return (m_ram_address[1] << 8 | m_ram_address[0]) & 0x3ff; }
|
||||
template<int N> u8 ram_address_r();
|
||||
template<int N> void ram_address_w(u8 data);
|
||||
u8 ram_data_r();
|
||||
void ram_data_w(u8 data);
|
||||
|
||||
std::unique_ptr<u8[]> m_ram;
|
||||
u8 m_ram_address[2] = { 0, 0 };
|
||||
u64 m_lcd_data[2] = { 0, 0 };
|
||||
};
|
||||
|
||||
void exchess_state::machine_start()
|
||||
{
|
||||
m_ram = make_unique_clear<u8[]>(0x400);
|
||||
|
||||
// register for savestates
|
||||
save_pointer(NAME(m_ram), 0x400);
|
||||
save_item(NAME(m_ram_address));
|
||||
save_item(NAME(m_lcd_data));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
I/O
|
||||
******************************************************************************/
|
||||
|
||||
// LCD
|
||||
|
||||
template<int N>
|
||||
void exchess_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)
|
||||
{
|
||||
// P40: HLCD0539 data
|
||||
// P44: HLCD0538 data
|
||||
m_lcd1->data_w(BIT(data, 4));
|
||||
m_lcd2->data_w(BIT(data, 0));
|
||||
|
||||
if (~m_ram_address[1] & 4)
|
||||
{
|
||||
m_lcd1->clk_w(1); m_lcd1->clk_w(0);
|
||||
m_lcd2->clk_w(1); m_lcd2->clk_w(0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 1KB RAM (port-mapped)
|
||||
|
||||
template<int N>
|
||||
void exchess_state::ram_address_w(u8 data)
|
||||
{
|
||||
// P00-P17: RAM A0-A7
|
||||
// P10-P11: RAM A8-A9
|
||||
// P12: RAM CE
|
||||
m_ram_address[N] = data;
|
||||
}
|
||||
|
||||
template<int N>
|
||||
u8 exchess_state::ram_address_r()
|
||||
{
|
||||
u8 data = m_ram_address[N];
|
||||
|
||||
// P13: Enter button
|
||||
return (N) ? data | m_inputs[0]->read() : data;
|
||||
}
|
||||
|
||||
void exchess_state::ram_data_w(u8 data)
|
||||
{
|
||||
if (m_ram_address[1] & 4)
|
||||
m_ram[ram_address()] = data;
|
||||
}
|
||||
|
||||
u8 exchess_state::ram_data_r()
|
||||
{
|
||||
return (m_ram_address[1] & 4) ? m_ram[ram_address()] : 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Address Maps
|
||||
******************************************************************************/
|
||||
|
||||
void exchess_state::main_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0xfff);
|
||||
map(0x0000, 0x0fff).rom();
|
||||
}
|
||||
|
||||
void exchess_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(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
static INPUT_PORTS_START( exchess )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_9)
|
||||
PORT_BIT(0xf7, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8)
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Machine Configs
|
||||
******************************************************************************/
|
||||
|
||||
void exchess_state::exchess(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_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_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_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_interrupt().set("psu", FUNC(f38t56_device::ext_int_w)).invert();
|
||||
|
||||
PWM_DISPLAY(config, m_display).set_size(8, 26+34);
|
||||
//config.set_default_layout(layout_saitek_exchess);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
ROM Definitions
|
||||
******************************************************************************/
|
||||
|
||||
ROM_START( exchess )
|
||||
ROM_REGION( 0x1000, "maincpu", 0 )
|
||||
ROM_LOAD("sl90553", 0x0000, 0x1000, CRC(a61b0c7e) SHA1(a13b11a93f78236223c5c0b9879a93284b7f7525) )
|
||||
ROM_END
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Drivers
|
||||
******************************************************************************/
|
||||
|
||||
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
|
||||
CONS( 1981, exchess, 0, 0, exchess, exchess, exchess_state, empty_init, "SciSys", "Executive Chess", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
|
@ -11,10 +11,10 @@ license:CC0
|
||||
<element name="lcda"><rect><color red="0.22" green="0.2" blue="0.38" /></rect></element> <!-- blue tint -->
|
||||
|
||||
<element name="nothing" defstate="0"><text string=" "/></element>
|
||||
<element name="text_p1"><text string="PADDLE:" align="2"><color red="0.13" green="0.13" blue="0.15" /></text></element>
|
||||
<element name="text_p1"><text string="PADDLE:" align="2"><color red="0.1" green="0.1" blue="0.1" /></text></element>
|
||||
<element name="text_p2" defstate="0">
|
||||
<simplecounter maxstate="999" digits="3" align="1">
|
||||
<color red="0.13" green="0.13" blue="0.15" />
|
||||
<color red="0.1" green="0.1" blue="0.1" />
|
||||
</simplecounter>
|
||||
</element>
|
||||
|
||||
|
@ -35120,6 +35120,9 @@ cp2000 //
|
||||
@source:saitek_delta1.cpp
|
||||
ccdelta1 //
|
||||
|
||||
@source:saitek_exchess.cpp
|
||||
exchess
|
||||
|
||||
@source:saitek_mark5.cpp
|
||||
ccmk5
|
||||
ccmk6
|
||||
|
@ -791,6 +791,7 @@ saitek_chesstrv.cpp
|
||||
saitek_corona.cpp
|
||||
saitek_cp2000.cpp
|
||||
saitek_delta1.cpp
|
||||
saitek_exchess.cpp
|
||||
saitek_mark5.cpp
|
||||
saitek_prschess.cpp
|
||||
saitek_risc2500.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user