summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/mame.lst1
-rw-r--r--src/mame/taito/kikikai.cpp3
-rw-r--r--src/mame/tryom/chess.cpp24
-rw-r--r--src/mame/tryom/omar.cpp172
4 files changed, 154 insertions, 46 deletions
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 010aed27cd2..710592a5b08 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -44624,6 +44624,7 @@ gammonm2
@source:tryom/omar.cpp
omar
+omar2
@source:tvgames/actions_atj2279b.cpp
rbitgen
diff --git a/src/mame/taito/kikikai.cpp b/src/mame/taito/kikikai.cpp
index 0a1a6f0f2e1..b4d80789cc1 100644
--- a/src/mame/taito/kikikai.cpp
+++ b/src/mame/taito/kikikai.cpp
@@ -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);
}
diff --git a/src/mame/tryom/chess.cpp b/src/mame/tryom/chess.cpp
index e9c1e99bd3f..fd9fc209402 100644
--- a/src/mame/tryom/chess.cpp
+++ b/src/mame/tryom/chess.cpp
@@ -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);
@@ -280,5 +282,5 @@ ROM_END
Drivers
*******************************************************************************/
-// 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 )
+// 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 )
diff --git a/src/mame/tryom/omar.cpp b/src/mame/tryom/omar.cpp
index 2929b2497e2..ea2a8485dfb 100644
--- a/src/mame/tryom/omar.cpp
+++ b/src/mame/tryom/omar.cpp
@@ -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
@@ -241,5 +346,6 @@ ROM_END
Drivers
*******************************************************************************/
-// 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 )
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS
+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 )