New systems marked not working

------------------------------
Omar II [hap, Sean Riddle]
This commit is contained in:
hap 2024-01-10 15:48:07 +01:00
parent 2b20c5ef17
commit 0208f44bb8
4 changed files with 154 additions and 46 deletions

View File

@ -44624,6 +44624,7 @@ gammonm2
@source:tryom/omar.cpp @source:tryom/omar.cpp
omar omar
omar2
@source:tvgames/actions_atj2279b.cpp @source:tvgames/actions_atj2279b.cpp
rbitgen rbitgen

View File

@ -1105,10 +1105,9 @@ void kikikai_state::kicknrun(machine_config &config)
void kikikai_state::kikikai(machine_config &config) void kikikai_state::kikikai(machine_config &config)
{ {
base(config); base(config);
add_mcu(config);
m_screen->set_screen_update(FUNC(kikikai_state::screen_update_kikikai)); m_screen->set_screen_update(FUNC(kikikai_state::screen_update_kikikai));
add_mcu(config);
} }

View File

@ -42,6 +42,7 @@ public:
chess_state(const machine_config &mconfig, device_type type, const char *tag) : chess_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_psu(*this, "psu"),
m_display(*this, "display"), m_display(*this, "display"),
m_dac(*this, "dac"), m_dac(*this, "dac"),
m_inputs(*this, "IN.%u", 0) m_inputs(*this, "IN.%u", 0)
@ -55,6 +56,7 @@ protected:
private: private:
// devices/pointers // devices/pointers
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<f38t56_device> m_psu;
required_device<pwm_display_device> m_display; required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac; required_device<dac_bit_interface> m_dac;
required_ioport_array<5> m_inputs; required_ioport_array<5> m_inputs;
@ -183,7 +185,7 @@ void chess_state::main_io(address_map &map)
{ {
map(0x00, 0x00).rw(FUNC(chess_state::p0_r), FUNC(chess_state::p0_w)); map(0x00, 0x00).rw(FUNC(chess_state::p0_r), FUNC(chess_state::p0_w));
map(0x01, 0x01).rw(FUNC(chess_state::p1_r), FUNC(chess_state::p1_w)); map(0x01, 0x01).rw(FUNC(chess_state::p1_r), FUNC(chess_state::p1_w));
map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write)); map(0x04, 0x07).rw(m_psu, FUNC(f38t56_device::read), FUNC(f38t56_device::write));
} }
@ -241,15 +243,15 @@ void chess_state::tchess(machine_config &config)
F8(config, m_maincpu, 4500000/2); // approximation F8(config, m_maincpu, 4500000/2); // approximation
m_maincpu->set_addrmap(AS_PROGRAM, &chess_state::main_map); m_maincpu->set_addrmap(AS_PROGRAM, &chess_state::main_map);
m_maincpu->set_addrmap(AS_IO, &chess_state::main_io); m_maincpu->set_addrmap(AS_IO, &chess_state::main_io);
m_maincpu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge)); m_maincpu->set_irq_acknowledge_callback(m_psu, FUNC(f38t56_device::int_acknowledge));
f38t56_device &psu(F38T56(config, "psu", 4500000/2)); F38T56(config, m_psu, 4500000/2);
psu.set_int_vector(0x20); m_psu->set_int_vector(0x20);
psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ); m_psu->int_req_callback().set_inputline(m_maincpu, F8_INPUT_LINE_INT_REQ);
psu.read_a().set(FUNC(chess_state::p4_r)); m_psu->read_a().set(FUNC(chess_state::p4_r));
psu.write_a().set(FUNC(chess_state::p4_w)); m_psu->write_a().set(FUNC(chess_state::p4_w));
psu.read_b().set(FUNC(chess_state::p5_r)); m_psu->read_b().set(FUNC(chess_state::p5_r));
psu.write_b().set(FUNC(chess_state::p5_w)); m_psu->write_b().set(FUNC(chess_state::p5_w));
// video hardware // video hardware
PWM_DISPLAY(config, m_display).set_size(6, 7); PWM_DISPLAY(config, m_display).set_size(6, 7);
@ -280,5 +282,5 @@ ROM_END
Drivers Drivers
*******************************************************************************/ *******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1981, tchess, 0, 0, tchess, tchess, chess_state, empty_init, "Tryom", "Electronic Chess (Tryom)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) SYST( 1981, tchess, 0, 0, tchess, tchess, chess_state, empty_init, "Tryom", "Electronic Chess (Tryom)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -19,7 +19,10 @@ LED versions: Omar(I), Omar IV, Cardinal Electronic Backgammon
LCD versions: Omar II, Omar III, Omar V, Tandy Computerized Backgammon LCD versions: Omar II, Omar III, Omar V, Tandy Computerized Backgammon
BTANB: BTANB:
- piezo buzzes when you hold down a button - omar piezo buzzes when you hold down a button
TODO:
- add omar2 lcd
*******************************************************************************/ *******************************************************************************/
@ -37,12 +40,15 @@ BTANB:
namespace { namespace {
// Omar I / shared
class omar_state : public driver_device class omar_state : public driver_device
{ {
public: public:
omar_state(const machine_config &mconfig, device_type type, const char *tag) : omar_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag), driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_psu(*this, "psu"),
m_display(*this, "display"), m_display(*this, "display"),
m_dac(*this, "dac"), m_dac(*this, "dac"),
m_inputs(*this, "IN.%u", 0) m_inputs(*this, "IN.%u", 0)
@ -53,9 +59,10 @@ public:
protected: protected:
virtual void machine_start() override; virtual void machine_start() override;
private: protected:
// devices/pointers // devices/pointers
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<f38t56_device> m_psu;
required_device<pwm_display_device> m_display; required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac; required_device<dac_bit_interface> m_dac;
required_ioport_array<5> m_inputs; required_ioport_array<5> m_inputs;
@ -65,53 +72,86 @@ private:
void main_map(address_map &map); void main_map(address_map &map);
void main_io(address_map &map); void main_io(address_map &map);
void p0_w(u8 data); void input1_w(u8 data);
void p1_w(u8 data); void input2_w(u8 data);
void p4_w(u8 data); void input3_w(u8 data);
u8 p4_r(); void input4_w(u8 data);
void p5_w(u8 data); u8 input_r();
virtual void display1_w(u8 data);
virtual void display2_w(u8 data);
}; };
void omar_state::machine_start() void omar_state::machine_start()
{ {
// register for savestates
save_item(NAME(m_inp_mux)); save_item(NAME(m_inp_mux));
} }
// Omar II
class omar2_state : public omar_state
{
public:
omar2_state(const machine_config &mconfig, device_type type, const char *tag) :
omar_state(mconfig, type, tag)
{ }
void omar2(machine_config &config);
protected:
virtual void machine_start() override;
private:
u8 m_lcd_data[4] = { };
virtual void display1_w(u8 data) override;
virtual void display2_w(u8 data) override;
void display3_w(u8 data);
void display4_w(u8 data);
};
void omar2_state::machine_start()
{
omar_state::machine_start();
save_item(NAME(m_lcd_data));
}
/******************************************************************************* /*******************************************************************************
I/O I/O
*******************************************************************************/ *******************************************************************************/
void omar_state::p0_w(u8 data) // common
void omar_state::input1_w(u8 data)
{ {
// P00: input mux part // P00: input mux part
m_inp_mux = (m_inp_mux & ~2) | (data << 1 & 2); m_inp_mux = (m_inp_mux & ~2) | (data << 1 & 2);
// P01-P06: digit select
m_display->write_my(~data >> 1 & 0x3f);
// P07: speaker out // P07: speaker out
m_dac->write(BIT(~data, 7)); m_dac->write(BIT(~data, 7));
} }
void omar_state::p1_w(u8 data) void omar_state::input2_w(u8 data)
{ {
// P10,P12-P17: digit data
m_display->write_mx(bitswap<7>(~data,4,5,7,3,0,6,2));
// P11: input mux part // P11: input mux part
m_inp_mux = (m_inp_mux & ~1) | (data >> 1 & 1); m_inp_mux = (m_inp_mux & ~1) | (data >> 1 & 1);
} }
void omar_state::p4_w(u8 data) void omar_state::input3_w(u8 data)
{ {
// P40,P41: input mux part // P40,P41: input mux part
m_inp_mux = (m_inp_mux & ~0xc) | (data << 2 & 0xc); m_inp_mux = (m_inp_mux & ~0xc) | (data << 2 & 0xc);
} }
u8 omar_state::p4_r() void omar_state::input4_w(u8 data)
{
// P55: input mux part
m_inp_mux = (m_inp_mux & ~0x10) | (data >> 1 & 0x10);
}
u8 omar_state::input_r()
{ {
u8 data = 0; u8 data = 0;
@ -123,10 +163,57 @@ u8 omar_state::p4_r()
return data << 2; return data << 2;
} }
void omar_state::p5_w(u8 data)
// LED version
void omar_state::display1_w(u8 data)
{ {
// P55: input mux part input1_w(data);
m_inp_mux = (m_inp_mux & ~0x10) | (data >> 1 & 0x10);
// P01-P06: digit select
m_display->write_my(~data >> 1 & 0x3f);
}
void omar_state::display2_w(u8 data)
{
input2_w(data);
// P10,P12-P17: digit data
m_display->write_mx(bitswap<7>(~data,4,5,7,3,0,6,2));
}
// LCD version
void omar2_state::display1_w(u8 data)
{
input1_w(data ^ 0x80);
// P01-P06: LCD data
m_lcd_data[0] = (m_lcd_data[0] & 0x80) | (data & 0x7f);
}
void omar2_state::display2_w(u8 data)
{
input2_w(data);
// P10-P17: LCD data
m_lcd_data[1] = data;
}
void omar2_state::display3_w(u8 data)
{
// P40: LCD data
m_lcd_data[0] = (m_lcd_data[0] & 0x7f) | (data << 7 & 0x80);
// P41: 4015 data (4015 Q to LCD)
m_lcd_data[3] = (m_lcd_data[3] << 1) | (BIT(data, 1));
}
void omar2_state::display4_w(u8 data)
{
// P50-P57: LCD data
m_lcd_data[2] = data;
} }
@ -143,9 +230,9 @@ void omar_state::main_map(address_map &map)
void omar_state::main_io(address_map &map) void omar_state::main_io(address_map &map)
{ {
map(0x00, 0x00).w(FUNC(omar_state::p0_w)); map(0x00, 0x00).w(FUNC(omar_state::display1_w));
map(0x01, 0x01).w(FUNC(omar_state::p1_w)); map(0x01, 0x01).w(FUNC(omar_state::display2_w));
map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write)); map(0x04, 0x07).rw(m_psu, FUNC(f38t56_device::read), FUNC(f38t56_device::write));
} }
@ -203,14 +290,14 @@ void omar_state::omar(machine_config &config)
F8(config, m_maincpu, 2700000/2); // approximation F8(config, m_maincpu, 2700000/2); // approximation
m_maincpu->set_addrmap(AS_PROGRAM, &omar_state::main_map); m_maincpu->set_addrmap(AS_PROGRAM, &omar_state::main_map);
m_maincpu->set_addrmap(AS_IO, &omar_state::main_io); m_maincpu->set_addrmap(AS_IO, &omar_state::main_io);
m_maincpu->set_irq_acknowledge_callback("psu", FUNC(f38t56_device::int_acknowledge)); m_maincpu->set_irq_acknowledge_callback(m_psu, FUNC(f38t56_device::int_acknowledge));
f38t56_device &psu(F38T56(config, "psu", 2700000/2)); F38T56(config, m_psu, 2700000/2);
psu.set_int_vector(0x20); m_psu->set_int_vector(0x20);
psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ); m_psu->int_req_callback().set_inputline(m_maincpu, F8_INPUT_LINE_INT_REQ);
psu.read_a().set(FUNC(omar_state::p4_r)); m_psu->read_a().set(FUNC(omar_state::input_r));
psu.write_a().set(FUNC(omar_state::p4_w)); m_psu->write_a().set(FUNC(omar_state::input3_w));
psu.write_b().set(FUNC(omar_state::p5_w)); m_psu->write_b().set(FUNC(omar_state::input4_w));
// video hardware // video hardware
PWM_DISPLAY(config, m_display).set_size(6, 7); PWM_DISPLAY(config, m_display).set_size(6, 7);
@ -222,6 +309,19 @@ void omar_state::omar(machine_config &config)
DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25);
} }
void omar2_state::omar2(machine_config &config)
{
omar(config);
// basic machine hardware
m_psu->write_a().append(FUNC(omar2_state::display3_w));
m_psu->write_b().append(FUNC(omar2_state::display4_w));
// video hardware
PWM_DISPLAY(config.replace(), m_display).set_size(1, 32);
//config.set_default_layout(layout_omar2);
}
/******************************************************************************* /*******************************************************************************
@ -233,6 +333,11 @@ ROM_START( omar )
ROM_LOAD("lom1ar279", 0x0000, 0x0800, CRC(e1bcee50) SHA1(658d6d8a0af3c1672610c651fea7d0289e4703f7) ) // 3870X-0245 ROM_LOAD("lom1ar279", 0x0000, 0x0800, CRC(e1bcee50) SHA1(658d6d8a0af3c1672610c651fea7d0289e4703f7) ) // 3870X-0245
ROM_END ROM_END
ROM_START( omar2 )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD("xom2ar1779", 0x0000, 0x0800, CRC(e0d6a119) SHA1(40e35020f483245bcc82443923763b037498a98d) ) // 3870X-0248
ROM_END
} // anonymous namespace } // anonymous namespace
@ -241,5 +346,6 @@ ROM_END
Drivers Drivers
*******************************************************************************/ *******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
SYST( 1979, omar, 0, 0, omar, omar, omar_state, empty_init, "Tryom", "Omar", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) SYST( 1979, omar, 0, 0, omar, omar, omar_state, empty_init, "Tryom", "Omar I", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1979, omar2, 0, 0, omar2, omar, omar2_state, empty_init, "Tryom", "Omar II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_NOT_WORKING )