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/mmodular.cpp b/src/mame/drivers/mmodular.cpp index 620d206734d..15450bad8a8 100644 --- a/src/mame/drivers/mmodular.cpp +++ b/src/mame/drivers/mmodular.cpp @@ -107,8 +107,6 @@ uint8_t latch2400 = 0; uint8_t diablo68_3c0000 = 0; -uint8_t sfortea_latch = 0; - INPUT_PORTS_EXTERN( chessboard ); @@ -134,10 +132,6 @@ public: uint8_t latch_data; DECLARE_WRITE8_MEMBER(write_polgar_IO); DECLARE_WRITE8_MEMBER(write_LCD_polgar); - DECLARE_READ8_MEMBER(read_1ff1_sfortea); - DECLARE_READ8_MEMBER(read_1ff0_sfortea); - DECLARE_WRITE8_MEMBER(write_latch_sfortea); - DECLARE_WRITE8_MEMBER(write_lcd_IO_sfortea); DECLARE_WRITE8_MEMBER(write_LCD_academy); // DECLARE_WRITE16_MEMBER(diablo68_aciawrite); // DECLARE_READ16_MEMBER(diablo68_aciaread); @@ -181,8 +175,6 @@ public: DECLARE_DRIVER_INIT(polgar); DECLARE_MACHINE_START(polgar); DECLARE_MACHINE_RESET(polgar); - DECLARE_MACHINE_START(sfortea); - DECLARE_MACHINE_RESET(sfortea); DECLARE_MACHINE_START(van32); DECLARE_MACHINE_RESET(van16); DECLARE_MACHINE_RESET(monteciv); @@ -268,69 +260,6 @@ WRITE8_MEMBER(polgar_state::write_LCD_polgar) } -READ8_MEMBER(polgar_state::read_1ff1_sfortea) -{ - uint8_t data; - data = ioport("BUTTONS_SFOR1")->read(); - logerror("1ff0 data %02x\n",data); - return 0; -// return data; -} - -READ8_MEMBER(polgar_state::read_1ff0_sfortea) -{ - uint8_t data; - data = ioport("BUTTONS_SFOR2")->read(); - logerror("1ff0 data %02x\n",data); - return 0; -// return data; - -// static uint8_t temp = 0; -// temp++; -// logerror("read 1ff0 %02x\n",temp); -// printf("read 1ff0 %02x\n",temp); - -// return (0x00); -} - - - -WRITE8_MEMBER(polgar_state::write_latch_sfortea) -{ - sfortea_latch = data; - logerror("latch data %02x\n",data); -// printf("latch data %02x\n",data); - -} - -WRITE8_MEMBER(polgar_state::write_lcd_IO_sfortea) -{ -/* bits -7 -6 paired with 5 -5 -4 -3 irq on off? -2 select HD44780 -1 -0 LCD command/data select -*/ - - - if (BIT(sfortea_latch,2)) - { - if(BIT(sfortea_latch,0)) { - m_lcdc->data_write(space, 0, data); - logerror("LCD DTA = %02x\n",data); - } else { - if (BIT(data,7)) { - if ((data & 0x7f) >= 0x40) data -= 56; // adjust for 16x1 display as 2 sets of 8 - } - m_lcdc->control_write(space, 0, data); - logerror("LCD CMD = %02x\n",data); - } - } -} WRITE8_MEMBER(polgar_state::write_LCD_academy) { @@ -994,11 +923,6 @@ MACHINE_START_MEMBER(polgar_state,polgar) common_chess_start(); } -MACHINE_START_MEMBER(polgar_state,sfortea) -{ - common_chess_start(); -} - MACHINE_START_MEMBER(polgar_state,diablo68) { common_chess_start(); @@ -1018,11 +942,6 @@ MACHINE_RESET_MEMBER(polgar_state,polgar) common_chess_start(); } -MACHINE_RESET_MEMBER(polgar_state,sfortea) -{ - common_chess_start(); -} - MACHINE_RESET_MEMBER(polgar_state,monteciv) { montecivtop = 0; @@ -1074,16 +993,6 @@ static ADDRESS_MAP_START(polgar_mem , AS_PROGRAM, 8, polgar_state ) AM_RANGE( 0x4000, 0xffff ) AM_ROM ADDRESS_MAP_END -static ADDRESS_MAP_START(sfortea_mem , AS_PROGRAM, 8, polgar_state ) - AM_RANGE( 0x0000, 0x1fef ) AM_RAM - AM_RANGE( 0x1ff6, 0x1ff6 ) AM_WRITE(write_latch_sfortea) // IO control - AM_RANGE( 0x1ff7, 0x1ff7 ) AM_WRITE(write_lcd_IO_sfortea) // LCD Char Reg. -// AM_RANGE( 0x1ffc, 0x1fff ) AM_DEVREADWRITE_LEGACY("acia65c51", acia_6551_r,acia_6551_w) - AM_RANGE( 0x1ff1, 0x1ff1 ) AM_READ(read_1ff1_sfortea ) - AM_RANGE( 0x1ff0, 0x1ff0 ) AM_READ(read_1ff0_sfortea ) - AM_RANGE( 0x2000, 0xffff ) AM_ROM -ADDRESS_MAP_END - static ADDRESS_MAP_START(gen32_mem, AS_PROGRAM, 32, polgar_state ) @@ -1499,22 +1408,6 @@ static MACHINE_CONFIG_START( polgar, polgar_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( sfortea, polgar_state ) - MCFG_CPU_ADD("maincpu",M65C02,5000000) - MCFG_CPU_PROGRAM_MAP(sfortea_mem) - MCFG_QUANTUM_TIME(attotime::from_hz(60)) - MCFG_MACHINE_START_OVERRIDE(polgar_state, sfortea ) - MCFG_MACHINE_RESET_OVERRIDE(polgar_state, sfortea ) - MCFG_FRAGMENT_ADD( chess_common ) - - /* acia */ -// MCFG_MOS6551_ADD("acia65c51", XTAL_1_8432MHz, nullptr) - - MCFG_TIMER_DRIVER_ADD_PERIODIC("irq_timer", polgar_state, cause_M6502_irq, attotime::from_hz(600)) - MCFG_TIMER_START_DELAY(attotime::from_hz(60)) - //MCFG_TIMER_DRIVER_ADD_PERIODIC("artwork_timer", polgar_state, mboard_update_artwork, attotime::from_hz(100)) -MACHINE_CONFIG_END - static MACHINE_CONFIG_START( alm32, polgar_state ) MCFG_CPU_ADD("maincpu", M68020, XTAL_12MHz) MCFG_CPU_PROGRAM_MAP(alm32_mem) @@ -1649,13 +1542,6 @@ ROM_START(polgar) ROM_LOAD("polgar.bin", 0x0000, 0x10000, CRC(88d55c0f) SHA1(e86d088ec3ac68deaf90f6b3b97e3e31b1515913)) ROM_END -ROM_START(sfortea) - ROM_REGION(0x18000,"maincpu",0) - ROM_LOAD("sfalo.bin", 0x0000, 0x8000, CRC(86e0230a) SHA1(0d6e18a17e636b8c7292c8f331349d361892d1a8)) - ROM_LOAD("sfahi.bin", 0x8000, 0x8000, CRC(81c02746) SHA1(0bf68b68ade5a3263bead88da0a8965fc71483c1)) - ROM_LOAD("sfabook.bin", 0x10000, 0x8000, CRC(3e42cf7c) SHA1(b2faa36a127e08e5755167a25ed4a07f12d62957)) -ROM_END - ROM_START( alm16 ) ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("alm16eve.bin", 0x00000, 0x10000,CRC(EE5B6EC4) SHA1(30920C1B9E16FFAE576DA5AFA0B56DA59ADA3DBB)) @@ -1667,20 +1553,6 @@ ROM_START( alm32 ) ROM_LOAD("alm32.bin", 0x00000, 0x20000,CRC(38F4B305) SHA1(43459A057FF29248C74D656A036AC325202B9C15)) ROM_END -ROM_START(sforteb) - ROM_REGION(0x18000,"maincpu",0) - ROM_LOAD("forte_b.lo", 0x0000, 0x8000, CRC(48bfe5d6) SHA1(323642686b6d2fb8db2b7d50c6cd431058078ce1)) - ROM_LOAD("forte_b.hi1", 0x8000, 0x8000, CRC(9778ca2c) SHA1(d8b88b9768a1a9171c68cbb0892b817d68d78351)) - ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6)) -ROM_END - -ROM_START(sforteba) - ROM_REGION(0x18000,"maincpu",0) - ROM_LOAD("forte b_l.bin", 0x0000, 0x8000, CRC(e3d194a1) SHA1(80457580d7c57e07895fd14bfdaf14b30952afca)) - ROM_LOAD("forte b_h.bin", 0x8000, 0x8000, CRC(dd824be8) SHA1(cd8666b6b525887f9fc48a730b71ceabcf07f3b9)) - ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, BAD_DUMP CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6)) -ROM_END - ROM_START(academy) ROM_REGION(0x10000,"maincpu",0) ROM_LOAD("acad8000.bin", 0x8000, 0x8000, CRC(a967922b) SHA1(1327903ff89bf96d72c930c400f367ae19e3ec68)) @@ -1699,14 +1571,6 @@ ROM_START(milano) ROM_END -ROM_START(sfortec) - ROM_REGION(0x18000,"maincpu",0) - ROM_LOAD("sfclow.bin", 0x0000, 0x8000, CRC(f040cf30) SHA1(1fc1220b8ed67cdffa3866d230ce001721cf684f)) - ROM_LOAD("sfchi.bin", 0x8000, 0x8000, CRC(0f926b32) SHA1(9c7270ecb3f41dd9172a9a7928e6e04e64b2a340)) - ROM_LOAD("sfcbook.bin", 0x10000, 0x8000, CRC(c6a1419a) SHA1(017a0ffa9aa59438c879624a7ddea2071d1524b8)) -ROM_END - - ROM_START( lyon16 ) ROM_REGION16_BE( 0x20000, "maincpu", 0 ) ROM_LOAD16_BYTE("lyon16ev.bin", 0x00000, 0x10000,CRC(497BD41A) SHA1(3FFEFEEAC694F49997C10D248EC6A7AA932898A4)) @@ -1782,16 +1646,12 @@ DRIVER_INIT_MEMBER(polgar_state,polgar) /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ CONS( 1986, polgar, 0, 0, polgar, polgar, polgar_state, polgar, "Hegener & Glaser", "Mephisto Polgar Schachcomputer", MACHINE_NOT_WORKING | MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK) - CONS( 1987, sfortea, 0, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) CONS( 1988, alm16, van16, 0, alm16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Almeria 68000", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) CONS( 1988, alm32, van16, 0, alm32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Alimera 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) - CONS( 1988, sforteb, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version B)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) - CONS( 1988, sforteba, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version B, alt)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, academy, 0, 0, academy, academy, driver_device, 0, "Hegener & Glaser", "Mephisto Academy Schachcomputer", MACHINE_REQUIRES_ARTWORK|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, megaiv, 0, 0, megaiv, megaiv, driver_device, 0, "Hegener & Glaser", "Mephisto Mega IV Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) CONS( 1989, milano, polgar, 0, milano, polgar, polgar_state, polgar, "Hegener & Glaser", "Mephisto Milano Schachcomputer", MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) //CONS( 1989, montec4, 0, 0, monteciv, monteciv, driver_device, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) - CONS( 1989, sfortec, sfortea, 0, sfortea, sfortea, driver_device, 0, "Novag", "Novag Super Forte Chess Computer (version C)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) CONS( 1990, lyon16, van16, 0, alm16, van16, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Lyon 68000", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) CONS( 1990, lyon32, van16, 0, alm32, van32, driver_device, 0, "Hegener & Glaser Muenchen", "Mephisto Lyon 68020", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) CONS( 1990, monteciv, 0, 0, monteciv, monteciv, driver_device, 0, "Hegener & Glaser", "Mephisto Monte Carlo IV LE Schachcomputer", MACHINE_NOT_WORKING|MACHINE_REQUIRES_ARTWORK | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/novag6502.cpp b/src/mame/drivers/novag6502.cpp index 1af085bec37..831f7303325 100644 --- a/src/mame/drivers/novag6502.cpp +++ b/src/mame/drivers/novag6502.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:hap +// thanks-to:Berger /****************************************************************************** Novag generic 6502 based chess computer driver @@ -24,8 +25,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 +41,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 +51,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 +70,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 +79,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 +117,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 +132,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 +302,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 +410,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 +515,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 +635,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 +703,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 + /****************************************************************************** @@ -453,6 +752,35 @@ ROM_START( supercon ) ROM_END +ROM_START( sfortea ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD("sfalo.bin", 0x0000, 0x8000, CRC(86e0230a) SHA1(0d6e18a17e636b8c7292c8f331349d361892d1a8) ) + ROM_LOAD("sfahi.bin", 0x8000, 0x8000, CRC(81c02746) SHA1(0bf68b68ade5a3263bead88da0a8965fc71483c1) ) + ROM_LOAD("sfabook.bin", 0x10000, 0x8000, CRC(3e42cf7c) SHA1(b2faa36a127e08e5755167a25ed4a07f12d62957) ) +ROM_END + +ROM_START( sforteb ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD("forte_b.lo", 0x0000, 0x8000, CRC(48bfe5d6) SHA1(323642686b6d2fb8db2b7d50c6cd431058078ce1) ) + ROM_LOAD("forte_b.hi1", 0x8000, 0x8000, CRC(9778ca2c) SHA1(d8b88b9768a1a9171c68cbb0892b817d68d78351) ) + ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6) ) +ROM_END + +ROM_START( sforteba ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD("forte b_l.bin", 0x0000, 0x8000, CRC(e3d194a1) SHA1(80457580d7c57e07895fd14bfdaf14b30952afca) ) + ROM_LOAD("forte b_h.bin", 0x8000, 0x8000, CRC(dd824be8) SHA1(cd8666b6b525887f9fc48a730b71ceabcf07f3b9) ) + ROM_LOAD("forte_b.hi0", 0x10000, 0x8000, BAD_DUMP CRC(bb07ad52) SHA1(30cf9005021ab2d7b03facdf2d3588bc94dc68a6) ) +ROM_END + +ROM_START( sfortec ) + ROM_REGION( 0x18000, "maincpu", 0 ) + ROM_LOAD("sfclow.bin", 0x0000, 0x8000, CRC(f040cf30) SHA1(1fc1220b8ed67cdffa3866d230ce001721cf684f) ) + ROM_LOAD("sfchi.bin", 0x8000, 0x8000, CRC(0f926b32) SHA1(9c7270ecb3f41dd9172a9a7928e6e04e64b2a340) ) + ROM_LOAD("sfcbook.bin", 0x10000, 0x8000, CRC(c6a1419a) SHA1(017a0ffa9aa59438c879624a7ddea2071d1524b8) ) +ROM_END + + ROM_START( sexpertc ) ROM_REGION( 0x18000, "maincpu", 0 ) // Version 3.6 of firmware ROM_LOAD("seclow.bin", 0x0000, 0x8000, CRC(5a29105e) SHA1(be37bb29b530dbba847a5e8d27d81b36525e47f7) ) @@ -476,5 +804,10 @@ 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( 1987, sfortea, 0, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Forte Chess Computer (version A)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1988, sforteb, sfortea, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Forte Chess Computer (version B)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1988, sforteba, sfortea, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Forte Chess Computer (version B, alt)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1989, sfortec, sfortea, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Forte Chess Computer (version C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) + +CONS( 1989, sexpertc, 0, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Expert C Chess Computer", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1988, sexpertb, sexpertc, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Expert B Chess Computer", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 70e8696f7c5..871512a52af 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -20497,10 +20497,6 @@ megaiv // 1989 Mephisto Mega IV Schachcomputer milano // 1989 Mephisto Milano Schachcomputer monteciv // 1990 Mephisto Monte Carlo IV LE Schachcomputer polgar // 1986 Mephisto Polgar Schachcomputer -sfortea // 1987 Novag Super Forte A Chess Computer -sforteb // 1988 Novag Super Forte B Chess Computer -sforteba // 1988 Novag Super Forte B Chess Computer (ALT) -sfortec // 1989 Novag Super Forte C Chess Computer van16 // 1991 Mephisto Vancouver 68000 van32 // 1991 Mephisto Vancouver 68020 @@ -29204,6 +29200,10 @@ raiders5t // UPL-85004 (c) 1985 Taito license @source:novag6502.cpp sexpertb // sexpertc // +sfortea // +sforteb // +sforteba // +sfortec // supercon // @source:nsm.cpp