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
omar
omar2
@source:tvgames/actions_atj2279b.cpp
rbitgen

View File

@ -1105,10 +1105,9 @@ void kikikai_state::kicknrun(machine_config &config)
void kikikai_state::kikikai(machine_config &config)
{
base(config);
add_mcu(config);
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) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_psu(*this, "psu"),
m_display(*this, "display"),
m_dac(*this, "dac"),
m_inputs(*this, "IN.%u", 0)
@ -55,6 +56,7 @@ protected:
private:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_device<f38t56_device> m_psu;
required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac;
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(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
m_maincpu->set_addrmap(AS_PROGRAM, &chess_state::main_map);
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));
psu.set_int_vector(0x20);
psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
psu.read_a().set(FUNC(chess_state::p4_r));
psu.write_a().set(FUNC(chess_state::p4_w));
psu.read_b().set(FUNC(chess_state::p5_r));
psu.write_b().set(FUNC(chess_state::p5_w));
F38T56(config, m_psu, 4500000/2);
m_psu->set_int_vector(0x20);
m_psu->int_req_callback().set_inputline(m_maincpu, F8_INPUT_LINE_INT_REQ);
m_psu->read_a().set(FUNC(chess_state::p4_r));
m_psu->write_a().set(FUNC(chess_state::p4_w));
m_psu->read_b().set(FUNC(chess_state::p5_r));
m_psu->write_b().set(FUNC(chess_state::p5_w));
// video hardware
PWM_DISPLAY(config, m_display).set_size(6, 7);

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
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 {
// Omar I / shared
class omar_state : public driver_device
{
public:
omar_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_psu(*this, "psu"),
m_display(*this, "display"),
m_dac(*this, "dac"),
m_inputs(*this, "IN.%u", 0)
@ -53,9 +59,10 @@ public:
protected:
virtual void machine_start() override;
private:
protected:
// devices/pointers
required_device<cpu_device> m_maincpu;
required_device<f38t56_device> m_psu;
required_device<pwm_display_device> m_display;
required_device<dac_bit_interface> m_dac;
required_ioport_array<5> m_inputs;
@ -65,53 +72,86 @@ private:
void main_map(address_map &map);
void main_io(address_map &map);
void p0_w(u8 data);
void p1_w(u8 data);
void p4_w(u8 data);
u8 p4_r();
void p5_w(u8 data);
void input1_w(u8 data);
void input2_w(u8 data);
void input3_w(u8 data);
void input4_w(u8 data);
u8 input_r();
virtual void display1_w(u8 data);
virtual void display2_w(u8 data);
};
void omar_state::machine_start()
{
// register for savestates
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
*******************************************************************************/
void omar_state::p0_w(u8 data)
// common
void omar_state::input1_w(u8 data)
{
// P00: input mux part
m_inp_mux = (m_inp_mux & ~2) | (data << 1 & 2);
// P01-P06: digit select
m_display->write_my(~data >> 1 & 0x3f);
// P07: speaker out
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
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
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;
@ -123,10 +163,57 @@ u8 omar_state::p4_r()
return data << 2;
}
void omar_state::p5_w(u8 data)
// LED version
void omar_state::display1_w(u8 data)
{
// P55: input mux part
m_inp_mux = (m_inp_mux & ~0x10) | (data >> 1 & 0x10);
input1_w(data);
// 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)
{
map(0x00, 0x00).w(FUNC(omar_state::p0_w));
map(0x01, 0x01).w(FUNC(omar_state::p1_w));
map(0x04, 0x07).rw("psu", FUNC(f38t56_device::read), FUNC(f38t56_device::write));
map(0x00, 0x00).w(FUNC(omar_state::display1_w));
map(0x01, 0x01).w(FUNC(omar_state::display2_w));
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
m_maincpu->set_addrmap(AS_PROGRAM, &omar_state::main_map);
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));
psu.set_int_vector(0x20);
psu.int_req_callback().set_inputline("maincpu", F8_INPUT_LINE_INT_REQ);
psu.read_a().set(FUNC(omar_state::p4_r));
psu.write_a().set(FUNC(omar_state::p4_w));
psu.write_b().set(FUNC(omar_state::p5_w));
F38T56(config, m_psu, 2700000/2);
m_psu->set_int_vector(0x20);
m_psu->int_req_callback().set_inputline(m_maincpu, F8_INPUT_LINE_INT_REQ);
m_psu->read_a().set(FUNC(omar_state::input_r));
m_psu->write_a().set(FUNC(omar_state::input3_w));
m_psu->write_b().set(FUNC(omar_state::input4_w));
// video hardware
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);
}
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_END
ROM_START( omar2 )
ROM_REGION( 0x0800, "maincpu", 0 )
ROM_LOAD("xom2ar1779", 0x0000, 0x0800, CRC(e0d6a119) SHA1(40e35020f483245bcc82443923763b037498a98d) ) // 3870X-0248
ROM_END
} // anonymous namespace
@ -242,4 +347,5 @@ ROM_END
*******************************************************************************/
// 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 )