diff options
author | 2024-01-10 15:48:07 +0100 | |
---|---|---|
committer | 2024-01-10 15:48:16 +0100 | |
commit | 0208f44bb88f2135d4bd938ce1f9474c313830ff (patch) | |
tree | 895c8b9c09d537fc05d3dae725b1756fd8328e19 /src | |
parent | 2b20c5ef178502b4dcff3101bc3a3efab88ed012 (diff) |
New systems marked not working
------------------------------
Omar II [hap, Sean Riddle]
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/mame.lst | 1 | ||||
-rw-r--r-- | src/mame/taito/kikikai.cpp | 3 | ||||
-rw-r--r-- | src/mame/tryom/chess.cpp | 24 | ||||
-rw-r--r-- | src/mame/tryom/omar.cpp | 172 |
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 ) |