This commit is contained in:
Brad Hughes 2017-01-11 15:19:25 -05:00
commit fecfedd92f
4 changed files with 345 additions and 152 deletions

View File

@ -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)

View File

@ -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 )

View File

@ -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<cpu_device> m_maincpu;
optional_device<beep_device> m_beeper;
optional_device<hd44780_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;
@ -71,12 +71,33 @@ public:
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();
void set_display_size(int maxx, int maxy);
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 )

View File

@ -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