diff --git a/src/mame/layout/novag_diablo68k.lay b/src/mame/layout/novag_diablo68.lay similarity index 100% rename from src/mame/layout/novag_diablo68k.lay rename to src/mame/layout/novag_diablo68.lay diff --git a/src/mame/layout/novag_scorpio68k.lay b/src/mame/layout/novag_scorpio68.lay similarity index 97% rename from src/mame/layout/novag_scorpio68k.lay rename to src/mame/layout/novag_scorpio68.lay index 67e75428e56..a5692b2876e 100644 --- a/src/mame/layout/novag_scorpio68k.lay +++ b/src/mame/layout/novag_scorpio68.lay @@ -504,23 +504,23 @@ authors:hap - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + diff --git a/src/mame/novag/cexpert.cpp b/src/mame/novag/cexpert.cpp index bc6b3ff2662..5226fcfad37 100644 --- a/src/mame/novag/cexpert.cpp +++ b/src/mame/novag/cexpert.cpp @@ -50,7 +50,6 @@ public: m_inputs(*this, "IN.%u", 0) { } - // machine configs void cexpert(machine_config &config); DECLARE_INPUT_CHANGED_MEMBER(change_cpu_freq); @@ -67,13 +66,10 @@ private: required_ioport_array<8> m_inputs; u8 m_inp_mux = 0; - u8 m_led_select = 0; - // address maps void main_map(address_map &map); // I/O handlers - void update_display(); void mux_w(u8 data); void control_w(u8 data); u8 input1_r(); @@ -82,9 +78,7 @@ private: void cexpert_state::machine_start() { - // register for savestates save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_select)); } INPUT_CHANGED_MEMBER(cexpert_state::change_cpu_freq) @@ -99,16 +93,11 @@ INPUT_CHANGED_MEMBER(cexpert_state::change_cpu_freq) I/O *******************************************************************************/ -void cexpert_state::update_display() -{ - m_display->matrix(1 << m_led_select, m_inp_mux); -} - void cexpert_state::mux_w(u8 data) { // d0-d7: input mux, led data m_inp_mux = data; - update_display(); + m_display->write_mx(data); } void cexpert_state::control_w(u8 data) @@ -116,11 +105,11 @@ void cexpert_state::control_w(u8 data) // d0-d2: clock/printer? // d3: enable beeper - m_beeper->set_state(data >> 3 & 1); + m_beeper->set_state(BIT(data, 3)); // d4-d7: 74145 to led select - m_led_select = data >> 4 & 0xf; - update_display(); + u8 sel = data >> 4 & 0xf; + m_display->write_my(1 << sel); } u8 cexpert_state::input1_r() @@ -145,7 +134,6 @@ u8 cexpert_state::input2_r() data |= m_inputs[i]->read() << 6; // other: ? - return ~data; } diff --git a/src/mame/novag/cforte.cpp b/src/mame/novag/cforte.cpp index d73742a7360..8e7289474fa 100644 --- a/src/mame/novag/cforte.cpp +++ b/src/mame/novag/cforte.cpp @@ -93,7 +93,7 @@ void cforte_state::machine_start() I/O *******************************************************************************/ -// HLCD0538 +// LCD void cforte_state::lcd_output_w(u64 data) { @@ -115,7 +115,7 @@ void cforte_state::lcd_output_w(u64 data) } -// TTL/generic +// misc void cforte_state::update_display() { @@ -135,9 +135,9 @@ void cforte_state::control_w(u8 data) // d0: HLCD0538 data in // d1: HLCD0538 clk // d2: HLCD0538 lcd - m_lcd->data_w(data & 1); - m_lcd->clk_w(data >> 1 & 1); - m_lcd->lcd_w(data >> 2 & 1); + m_lcd->data_w(BIT(data, 0)); + m_lcd->clk_w(BIT(data, 1)); + m_lcd->lcd_w(BIT(data, 2)); // d3: ? (goes high at power-off NMI) @@ -146,7 +146,7 @@ void cforte_state::control_w(u8 data) update_display(); // d7: enable beeper - m_beeper->set_state(data >> 7 & 1); + m_beeper->set_state(BIT(data, 7)); } u8 cforte_state::input1_r() @@ -171,7 +171,6 @@ u8 cforte_state::input2_r() data |= m_inputs[i]->read() << 6; // other: ? - return ~data; } diff --git a/src/mame/novag/const.cpp b/src/mame/novag/const.cpp index 5b7220376eb..04c89420f69 100644 --- a/src/mame/novag/const.cpp +++ b/src/mame/novag/const.cpp @@ -129,7 +129,6 @@ private: bool m_power = false; u8 m_inp_mux = 0; - u8 m_led_select = 0; // address maps void const_map(address_map &map); @@ -137,7 +136,6 @@ private: void sconst_map(address_map &map); // I/O handlers - void update_display(); void mux_w(u8 data); void control_w(u8 data); u8 input1_r(); @@ -149,7 +147,6 @@ void const_state::machine_start() // register for savestates save_item(NAME(m_power)); save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_select)); } INPUT_CHANGED_MEMBER(const_state::power_off) @@ -175,28 +172,23 @@ void const_state::init_const() I/O *******************************************************************************/ -void const_state::update_display() -{ - m_display->matrix(m_led_select, m_inp_mux); -} - void const_state::mux_w(u8 data) { // d0-d7: input mux, led data m_inp_mux = data; - update_display(); + m_display->write_mx(data); } void const_state::control_w(u8 data) { // d0-d2: ? // d3: ? (goes high at power-off NMI) + // d4-d6: select led row - m_led_select = data >> 4 & 7; - update_display(); + m_display->write_my(data >> 4 & 7); // d7: enable beeper - m_beeper->set_state(data >> 7 & 1); + m_beeper->set_state(BIT(data, 7)); } u8 const_state::input1_r() diff --git a/src/mame/novag/diablo.cpp b/src/mame/novag/diablo.cpp index b3ed217d746..b97c7f0cd31 100644 --- a/src/mame/novag/diablo.cpp +++ b/src/mame/novag/diablo.cpp @@ -35,8 +35,8 @@ Scorpio 68000 hardware is very similar, but with chessboard buttons and side led #include "speaker.h" // internal artwork -#include "novag_diablo68k.lh" -#include "novag_scorpio68k.lh" +#include "novag_diablo68.lh" +#include "novag_scorpio68.lh" namespace { @@ -58,8 +58,8 @@ public: { } // machine configs - void diablo68k(machine_config &config); - void scorpio68k(machine_config &config); + void diablo68(machine_config &config); + void scorpio68(machine_config &config); protected: virtual void machine_start() override; @@ -77,18 +77,16 @@ private: required_ioport_array<8> m_inputs; u8 m_inp_mux = 0; - u8 m_led_data = 0; - u8 m_led_side = 0; u8 m_lcd_control = 0; u8 m_lcd_data = 0; // address maps - void diablo68k_map(address_map &map); - void scorpio68k_map(address_map &map); + void diablo68_map(address_map &map); + void scorpio68_map(address_map &map); // I/O handlers - void update_display(); void control_w(u8 data); + void control2_w(u8 data); void lcd_data_w(u8 data); void leds_w(u8 data); u8 input1_r(); @@ -102,8 +100,6 @@ void diablo_state::machine_start() { // register for savestates save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_data)); - save_item(NAME(m_led_side)); save_item(NAME(m_lcd_control)); save_item(NAME(m_lcd_data)); } @@ -137,14 +133,7 @@ HD44780_PIXEL_UPDATE(diablo_state::lcd_pixel_update) } -// TTL - -void diablo_state::update_display() -{ - // update leds (lcd is done separately) - u8 led_select = 1 << m_inp_mux; - m_display->matrix(led_select, m_led_side << 8 | m_led_data); -} +// misc void diablo_state::control_w(u8 data) { @@ -155,14 +144,19 @@ void diablo_state::control_w(u8 data) m_lcd_control = data & 3; // d7: enable beeper - m_beeper->set_state(data >> 7 & 1); - - // d2,d3: side leds(scorpio) - m_led_side = ~data >> 2 & 3; + m_beeper->set_state(BIT(data, 7)); // d4-d6: input mux, led select m_inp_mux = data >> 4 & 7; - update_display(); + m_display->write_my(1 << m_inp_mux); +} + +void diablo_state::control2_w(u8 data) +{ + control_w(data); + + // d2,d3: side leds (scorpio68) + m_display->write_mx(~data >> 2 & 3); } void diablo_state::lcd_data_w(u8 data) @@ -173,9 +167,8 @@ void diablo_state::lcd_data_w(u8 data) void diablo_state::leds_w(u8 data) { - // d0-d7: chessboard leds - m_led_data = data; - update_display(); + // d0-d7: chessboard leds (diablo68) + m_display->write_mx(data); } u8 diablo_state::input1_r() @@ -197,7 +190,7 @@ u8 diablo_state::input2_r() Address Maps *******************************************************************************/ -void diablo_state::diablo68k_map(address_map &map) +void diablo_state::diablo68_map(address_map &map) { map(0x000000, 0x00ffff).rom(); map(0x200000, 0x20ffff).rom().region("maincpu", 0x10000); @@ -211,10 +204,10 @@ void diablo_state::diablo68k_map(address_map &map) map(0xff8000, 0xffbfff).ram().share("nvram"); } -void diablo_state::scorpio68k_map(address_map &map) +void diablo_state::scorpio68_map(address_map &map) { - diablo68k_map(map); - map(0x380000, 0x380000).w(FUNC(diablo_state::control_w)); + diablo68_map(map); + map(0x380000, 0x380000).w(FUNC(diablo_state::control2_w)); map(0x3c0000, 0x3c0001).nopw(); } @@ -224,7 +217,7 @@ void diablo_state::scorpio68k_map(address_map &map) Input Ports *******************************************************************************/ -static INPUT_PORTS_START( diablo68k ) +static INPUT_PORTS_START( diablo68 ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Go") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Take Back / Analyze Games") @@ -272,12 +265,12 @@ INPUT_PORTS_END Machine Configs *******************************************************************************/ -void diablo_state::diablo68k(machine_config &config) +void diablo_state::diablo68(machine_config &config) { // basic machine hardware M68000(config, m_maincpu, 16_MHz_XTAL); m_maincpu->set_interrupt_mixer(false); - m_maincpu->set_addrmap(AS_PROGRAM, &diablo_state::diablo68k_map); + m_maincpu->set_addrmap(AS_PROGRAM, &diablo_state::diablo68_map); auto &irq_clock(CLOCK(config, "irq_clock", 32.768_kHz_XTAL/128)); // 256Hz irq_clock.set_pulse_width(attotime::from_nsec(1380)); // active for 1.38us @@ -305,8 +298,8 @@ void diablo_state::diablo68k(machine_config &config) m_lcd->set_lcd_size(2, 8); m_lcd->set_pixel_update_cb(FUNC(diablo_state::lcd_pixel_update)); - PWM_DISPLAY(config, m_display).set_size(8, 8+2); - config.set_default_layout(layout_novag_diablo68k); + PWM_DISPLAY(config, m_display).set_size(8, 8); + config.set_default_layout(layout_novag_diablo68); // sound hardware SPEAKER(config, "mono").front_center(); @@ -325,17 +318,18 @@ void diablo_state::diablo68k(machine_config &config) m_rs232->dsr_handler().set("acia", FUNC(mos6551_device::write_dsr)); } -void diablo_state::scorpio68k(machine_config &config) +void diablo_state::scorpio68(machine_config &config) { - diablo68k(config); + diablo68(config); // basic machine hardware - m_maincpu->set_addrmap(AS_PROGRAM, &diablo_state::scorpio68k_map); + m_maincpu->set_addrmap(AS_PROGRAM, &diablo_state::scorpio68_map); m_board->set_type(sensorboard_device::BUTTONS); m_board->set_delay(attotime::from_msec(150)); - config.set_default_layout(layout_novag_scorpio68k); + m_display->set_width(2); + config.set_default_layout(layout_novag_scorpio68); } @@ -381,9 +375,9 @@ ROM_END Drivers *******************************************************************************/ -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1991, diablo68, 0, 0, diablo68k, diablo68k, diablo_state, empty_init, "Novag Industries", "Diablo 68000 (set 1)", MACHINE_SUPPORTS_SAVE ) -SYST( 1991, diablo68a, diablo68, 0, diablo68k, diablo68k, diablo_state, empty_init, "Novag Industries", "Diablo 68000 (set 2)", MACHINE_SUPPORTS_SAVE ) -SYST( 1991, diablo68b, diablo68, 0, diablo68k, diablo68k, diablo_state, empty_init, "Novag Industries", "Diablo 68000 (set 3)", MACHINE_SUPPORTS_SAVE ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1991, diablo68, 0, 0, diablo68, diablo68, diablo_state, empty_init, "Novag Industries", "Diablo 68000 (set 1)", MACHINE_SUPPORTS_SAVE ) +SYST( 1991, diablo68a, diablo68, 0, diablo68, diablo68, diablo_state, empty_init, "Novag Industries", "Diablo 68000 (set 2)", MACHINE_SUPPORTS_SAVE ) +SYST( 1991, diablo68b, diablo68, 0, diablo68, diablo68, diablo_state, empty_init, "Novag Industries", "Diablo 68000 (set 3)", MACHINE_SUPPORTS_SAVE ) -SYST( 1991, scorpio68, 0, 0, scorpio68k, diablo68k, diablo_state, empty_init, "Novag Industries", "Scorpio 68000", MACHINE_SUPPORTS_SAVE ) +SYST( 1991, scorpio68, 0, 0, scorpio68, diablo68, diablo_state, empty_init, "Novag Industries", "Scorpio 68000", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/novag/sexpert.cpp b/src/mame/novag/sexpert.cpp index d37e3a1dfbe..c1c92842530 100644 --- a/src/mame/novag/sexpert.cpp +++ b/src/mame/novag/sexpert.cpp @@ -103,7 +103,6 @@ protected: required_ioport_array<8> m_inputs; u8 m_inp_mux = 0; - u8 m_led_data = 0; u8 m_lcd_control = 0; u8 m_lcd_data = 0; @@ -111,7 +110,6 @@ protected: void sexpert_map(address_map &map); // I/O handlers - void update_display(); virtual void lcd_control_w(u8 data); virtual void lcd_data_w(u8 data); void leds_w(u8 data); @@ -127,7 +125,6 @@ void sexpert_state::machine_start() { // register for savestates save_item(NAME(m_inp_mux)); - save_item(NAME(m_led_data)); save_item(NAME(m_lcd_control)); save_item(NAME(m_lcd_data)); } @@ -213,13 +210,7 @@ HD44780_PIXEL_UPDATE(sexpert_state::lcd_pixel_update) } -// TTL/generic - -void sexpert_state::update_display() -{ - // update leds (lcd is done separately) - m_display->matrix(m_inp_mux, m_led_data); -} +// common void sexpert_state::lcd_control_w(u8 data) { @@ -240,8 +231,7 @@ void sexpert_state::lcd_data_w(u8 data) void sexpert_state::leds_w(u8 data) { // d0-d7: chessboard leds - m_led_data = data; - update_display(); + m_display->write_mx(data); } void sexpert_state::mux_w(u8 data) @@ -250,11 +240,11 @@ void sexpert_state::mux_w(u8 data) m_rombank->set_entry(data & 1); // d3: enable beeper - m_beeper->set_state(data >> 3 & 1); + m_beeper->set_state(BIT(data, 3)); // d4-d7: 74145 to input mux/led select m_inp_mux = 1 << (data >> 4 & 0xf) & 0xff; - update_display(); + m_display->write_my(m_inp_mux); } u8 sexpert_state::input1_r() @@ -301,10 +291,10 @@ void sforte_state::lcd_data_w(u8 data) // d0-d2: 74145 to input mux/led select // 74145 D from lcd control d2 (HD44780 E) m_inp_mux = 1 << ((m_lcd_control << 1 & 8) | (data & 7)); + m_display->write_my(m_inp_mux); // d5,d6: led data - m_led_data = ~data >> 5 & 3; - update_display(); + m_display->write_mx(~data >> 5 & 3); // d7: enable beeper // capacitor for noise filter (sound glitches otherwise) @@ -341,10 +331,7 @@ void sexpert_state::sexpert_map(address_map &map) void sforte_state::sforte_map(address_map &map) { sexpert_map(map); - map(0x1ff4, 0x1ff4).nopw(); - map(0x1ff5, 0x1ff5).nopw(); - map(0x1ff6, 0x1ff6).w(FUNC(sforte_state::lcd_control_w)); - map(0x1ff7, 0x1ff7).w(FUNC(sforte_state::lcd_data_w)); + map(0x1ff4, 0x1ff5).nopw(); } @@ -483,6 +470,7 @@ void sforte_state::sforte(machine_config &config) m_board->set_type(sensorboard_device::BUTTONS); + m_display->set_width(2); config.set_default_layout(layout_novag_sforte); }