diff --git a/src/mame/drivers/hh_tms1k.cpp b/src/mame/drivers/hh_tms1k.cpp index cc319010241..51b680425c2 100644 --- a/src/mame/drivers/hh_tms1k.cpp +++ b/src/mame/drivers/hh_tms1k.cpp @@ -50,7 +50,7 @@ *MP1604 ? 1981, Hanzawa Twinvader III/Tandy Cosmic Fire Away 3000 (? note: VFD-capable) @MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152) @MP2105 TMS1370 1979, Gakken/Entex Poker (6005) - *MP2139 TMS1370? 1982, Gakken Galaxy Invader 1000 + *MP2139 TMS1370 1982, Gakken Galaxy Invader 1000/Tandy Cosmic 1000 Fire Away @MP2726 TMS1040 1979, Tomy Break Up *MP2788 TMS1040? 1980, Bandai Flight Time (? note: VFD-capable) @MP3005 TMS1730 1989, Tiger Copy Cat (model 7-522) diff --git a/src/mame/drivers/novag6502.cpp b/src/mame/drivers/novag6502.cpp index 1af085bec37..498e99af1ff 100644 --- a/src/mame/drivers/novag6502.cpp +++ b/src/mame/drivers/novag6502.cpp @@ -24,8 +24,10 @@ Super Constellation Chess Computer (model 844): #include "emu.h" #include "cpu/m6502/m6502.h" +#include "cpu/m6502/m65c02.h" #include "machine/nvram.h" #include "sound/beep.h" +#include "video/hd44780.h" // internal artwork #include "supercon.lh" // clickable @@ -38,6 +40,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_beeper(*this, "beeper"), + m_lcd(*this, "hd44780"), m_inp_matrix(*this, "IN.%u", 0), m_display_wait(33), m_display_maxy(1), @@ -47,13 +50,9 @@ public: // devices/pointers required_device m_maincpu; optional_device m_beeper; + optional_device m_lcd; optional_ioport_array<8> m_inp_matrix; - DECLARE_WRITE8_MEMBER(supercon_1e_w); - DECLARE_WRITE8_MEMBER(supercon_1f_w); - DECLARE_READ8_MEMBER(supercon_1e_r); - DECLARE_READ8_MEMBER(supercon_1f_r); - // misc common uint16_t m_inp_mux; // multiplexed keypad mask uint16_t m_led_select; @@ -70,6 +69,8 @@ public: uint16_t m_display_segmask[0x20]; // if not 0, display matrix row is a digit, mask indicates connected segments uint32_t m_display_cache[0x20]; // (internal use) uint8_t m_display_decay[0x20][0x20]; // (internal use) + + uint8_t m_lcd_control; TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick); void display_update(); @@ -77,6 +78,25 @@ public: void set_display_segmask(uint32_t digits, uint32_t mask); void display_matrix(int maxx, int maxy, uint32_t setx, uint32_t sety, bool update = true); + // Super Constellation + DECLARE_WRITE8_MEMBER(supercon_1e_w); + DECLARE_WRITE8_MEMBER(supercon_1f_w); + DECLARE_READ8_MEMBER(supercon_1e_r); + DECLARE_READ8_MEMBER(supercon_1f_r); + + // Super Expert + DECLARE_WRITE8_MEMBER(sexpert_leds_w); + DECLARE_WRITE8_MEMBER(sexpert_mux_w); + DECLARE_WRITE8_MEMBER(sexpert_lcd_control_w); + DECLARE_WRITE8_MEMBER(sexpert_lcd_data_w); + DECLARE_READ8_MEMBER(sexpert_lcd_data_r); + DECLARE_READ8_MEMBER(sexpert_input1_r); + DECLARE_READ8_MEMBER(sexpert_input2_r); + DECLARE_PALETTE_INIT(sexpert); + HD44780_PIXEL_UPDATE(sexpert_pixel_update); + DECLARE_MACHINE_RESET(sexpert); + DECLARE_DRIVER_INIT(sexpert); + protected: virtual void machine_start() override; virtual void machine_reset() override; @@ -96,6 +116,7 @@ void novag6502_state::machine_start() m_inp_mux = 0; m_led_select = 0; m_led_data = 0; + m_lcd_control = 0; // register for savestates save_item(NAME(m_display_maxy)); @@ -110,6 +131,7 @@ void novag6502_state::machine_start() save_item(NAME(m_inp_mux)); save_item(NAME(m_led_select)); save_item(NAME(m_led_data)); + save_item(NAME(m_lcd_control)); } void novag6502_state::machine_reset() @@ -279,10 +301,104 @@ READ8_MEMBER(novag6502_state::supercon_1f_r) +/****************************************************************************** + Super Expert +******************************************************************************/ + +// LCD + +PALETTE_INIT_MEMBER(novag6502_state, sexpert) +{ + palette.set_pen_color(0, rgb_t(138, 146, 148)); // background + palette.set_pen_color(1, rgb_t(92, 83, 88)); // lcd pixel on + palette.set_pen_color(2, rgb_t(131, 136, 139)); // lcd pixel off +} + +HD44780_PIXEL_UPDATE(novag6502_state::sexpert_pixel_update) +{ + // char size is 5x8 + if (x > 4 || y > 7) + return; + + if (line < 2 && pos < 8) + { + // internal: (8+8)*1, external: 1*16 + bitmap.pix16(1 + y, 1 + line*8*6 + pos*6 + x) = state ? 1 : 2; + } +} + +WRITE8_MEMBER(novag6502_state::sexpert_lcd_control_w) +{ + // d0: HD44780 RS + // d1: HD44780 R/W + // d2: HD44780 E + m_lcd_control = data; +} + +WRITE8_MEMBER(novag6502_state::sexpert_lcd_data_w) +{ + if (m_lcd_control & 4 && ~m_lcd_control & 2) + m_lcd->write(space, m_lcd_control & 1, data); +} + +READ8_MEMBER(novag6502_state::sexpert_lcd_data_r) +{ + // unused? + return 0; +} + +// TTL/generic + +WRITE8_MEMBER(novag6502_state::sexpert_leds_w) +{ + // d0-d7: chessboard leds + m_led_data = data; +} + +WRITE8_MEMBER(novag6502_state::sexpert_mux_w) +{ + // d0: rom bankswitch + membank("bank1")->set_entry(data & 1); + + // d3: enable beeper + m_beeper->set_state(data >> 3 & 1); + + // d4-d7: 74145 to input mux/led select + m_inp_mux = 1 << (data >> 4 & 0xf) & 0xff; +} + +READ8_MEMBER(novag6502_state::sexpert_input1_r) +{ + // d0-d7: multiplexed inputs (chessboard squares) + return ~read_inputs(8) & 0xff; +} + +READ8_MEMBER(novag6502_state::sexpert_input2_r) +{ + // d0-d2: printer port + // d5-d7: multiplexed inputs (side panel) + return (read_inputs(8) >> 3 & 0xc0) ^ 0xff; +} + +MACHINE_RESET_MEMBER(novag6502_state, sexpert) +{ + membank("bank1")->set_entry(0); + novag6502_state::machine_reset(); +} + +DRIVER_INIT_MEMBER(novag6502_state, sexpert) +{ + membank("bank1")->configure_entries(0, 2, memregion("maincpu")->base() + 0x8000, 0x8000); +} + + + /****************************************************************************** Address Maps ******************************************************************************/ +// Super Constellation + static ADDRESS_MAP_START( supercon_mem, AS_PROGRAM, 8, novag6502_state ) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x1c00, 0x1c00) AM_WRITENOP // printer/clock? @@ -293,6 +409,24 @@ static ADDRESS_MAP_START( supercon_mem, AS_PROGRAM, 8, novag6502_state ) ADDRESS_MAP_END +// Super Expert + +static ADDRESS_MAP_START( sexpert_mem, AS_PROGRAM, 8, novag6502_state ) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE(0x0000, 0x1fef) AM_RAM // 8KB RAM, but RAM CE pin is deactivated on $1ff0-$1fff + AM_RANGE(0x1ff0, 0x1ff0) AM_READ(sexpert_input1_r) + AM_RANGE(0x1ff1, 0x1ff1) AM_READ(sexpert_input2_r) + AM_RANGE(0x1ff2, 0x1ff2) AM_WRITENOP // printer port + AM_RANGE(0x1ff3, 0x1ff3) AM_WRITENOP // printer port + AM_RANGE(0x1ff4, 0x1ff4) AM_WRITE(sexpert_leds_w) + AM_RANGE(0x1ff5, 0x1ff5) AM_WRITE(sexpert_mux_w) + AM_RANGE(0x1ff6, 0x1ff6) AM_WRITE(sexpert_lcd_control_w) + AM_RANGE(0x1ff7, 0x1ff7) AM_READWRITE(sexpert_lcd_data_r, sexpert_lcd_data_w) + AM_RANGE(0x2000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank1") +ADDRESS_MAP_END + + /****************************************************************************** Input Ports @@ -380,6 +514,89 @@ static INPUT_PORTS_START( cb_buttons ) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor") INPUT_PORTS_END +static INPUT_PORTS_START( cb_magnets ) + PORT_START("IN.0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + + PORT_START("IN.7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_TOGGLE PORT_NAME("Board Sensor") +INPUT_PORTS_END + + static INPUT_PORTS_START( supercon ) PORT_INCLUDE( cb_buttons ) @@ -417,6 +634,51 @@ static INPUT_PORTS_START( supercon ) INPUT_PORTS_END +static INPUT_PORTS_START( sexpert ) + PORT_INCLUDE( cb_magnets ) + + PORT_MODIFY("IN.0") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) + + PORT_MODIFY("IN.1") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) + + PORT_MODIFY("IN.2") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) + + PORT_MODIFY("IN.3") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) + + PORT_MODIFY("IN.4") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) + + PORT_MODIFY("IN.5") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) + + PORT_MODIFY("IN.6") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) + + PORT_MODIFY("IN.7") + PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) + PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) + PORT_BIT(0x400, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) +INPUT_PORTS_END + + /****************************************************************************** Machine Drivers @@ -440,6 +702,42 @@ static MACHINE_CONFIG_START( supercon, novag6502_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END +static MACHINE_CONFIG_START( sexpert, novag6502_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M65C02, XTAL_10MHz/2) + MCFG_CPU_PERIODIC_INT_DRIVER(novag6502_state, irq0_line_hold, XTAL_32_768kHz/128) + MCFG_CPU_PROGRAM_MAP(sexpert_mem) + + MCFG_MACHINE_RESET_OVERRIDE(novag6502_state, sexpert) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", LCD) + MCFG_SCREEN_REFRESH_RATE(60) // arbitrary + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) + MCFG_SCREEN_SIZE(6*16+1, 10) + MCFG_SCREEN_VISIBLE_AREA(0, 6*16, 0, 10-1) + MCFG_SCREEN_UPDATE_DEVICE("hd44780", hd44780_device, screen_update) + MCFG_SCREEN_PALETTE("palette") + MCFG_PALETTE_ADD("palette", 3) + MCFG_PALETTE_INIT_OWNER(novag6502_state, sexpert) + + + MCFG_HD44780_ADD("hd44780") + MCFG_HD44780_LCD_SIZE(2, 8) + MCFG_HD44780_PIXEL_UPDATE_CB(novag6502_state, sexpert_pixel_update) + + //MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", novag6502_state, display_decay_tick, attotime::from_msec(1)) + //MCFG_DEFAULT_LAYOUT(layout_sexpert) + + + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("beeper", BEEP, XTAL_32_768kHz/32) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) +MACHINE_CONFIG_END + /****************************************************************************** @@ -476,5 +774,5 @@ ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ CONS( 1984, supercon, 0, 0, supercon, supercon, driver_device, 0, "Novag", "Super Constellation", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1989, sexpertc, 0, 0, supercon, supercon, driver_device, 0, "Novag", "Novag Super Expert C Chess Computer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) -CONS( 1988, sexpertb, sexpertc, 0, supercon, supercon, driver_device, 0, "Novag", "Novag Super Expert B Chess Computer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +CONS( 1989, sexpertc, 0, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Expert C Chess Computer", MACHINE_SUPPORTS_SAVE ) +CONS( 1988, sexpertb, sexpertc, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Expert B Chess Computer", MACHINE_SUPPORTS_SAVE )