mirror of
https://github.com/holub/mame
synced 2025-06-27 22:54:42 +03:00
novag6502: WIP sexpert hooked up lcd and some i/o (nw)
This commit is contained in:
parent
03219d9fef
commit
310ff45524
@ -50,7 +50,7 @@
|
|||||||
*MP1604 ? 1981, Hanzawa Twinvader III/Tandy Cosmic Fire Away 3000 (? note: VFD-capable)
|
*MP1604 ? 1981, Hanzawa Twinvader III/Tandy Cosmic Fire Away 3000 (? note: VFD-capable)
|
||||||
@MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152)
|
@MP1801 TMS1700 1981, Tiger Ditto/Tandy Pocket Repeat (model 60-2152)
|
||||||
@MP2105 TMS1370 1979, Gakken/Entex Poker (6005)
|
@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
|
@MP2726 TMS1040 1979, Tomy Break Up
|
||||||
*MP2788 TMS1040? 1980, Bandai Flight Time (? note: VFD-capable)
|
*MP2788 TMS1040? 1980, Bandai Flight Time (? note: VFD-capable)
|
||||||
@MP3005 TMS1730 1989, Tiger Copy Cat (model 7-522)
|
@MP3005 TMS1730 1989, Tiger Copy Cat (model 7-522)
|
||||||
|
@ -24,8 +24,10 @@ Super Constellation Chess Computer (model 844):
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/m6502/m6502.h"
|
#include "cpu/m6502/m6502.h"
|
||||||
|
#include "cpu/m6502/m65c02.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
#include "sound/beep.h"
|
#include "sound/beep.h"
|
||||||
|
#include "video/hd44780.h"
|
||||||
|
|
||||||
// internal artwork
|
// internal artwork
|
||||||
#include "supercon.lh" // clickable
|
#include "supercon.lh" // clickable
|
||||||
@ -38,6 +40,7 @@ public:
|
|||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_beeper(*this, "beeper"),
|
m_beeper(*this, "beeper"),
|
||||||
|
m_lcd(*this, "hd44780"),
|
||||||
m_inp_matrix(*this, "IN.%u", 0),
|
m_inp_matrix(*this, "IN.%u", 0),
|
||||||
m_display_wait(33),
|
m_display_wait(33),
|
||||||
m_display_maxy(1),
|
m_display_maxy(1),
|
||||||
@ -47,13 +50,9 @@ public:
|
|||||||
// devices/pointers
|
// devices/pointers
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
optional_device<beep_device> m_beeper;
|
optional_device<beep_device> m_beeper;
|
||||||
|
optional_device<hd44780_device> m_lcd;
|
||||||
optional_ioport_array<8> m_inp_matrix;
|
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
|
// misc common
|
||||||
uint16_t m_inp_mux; // multiplexed keypad mask
|
uint16_t m_inp_mux; // multiplexed keypad mask
|
||||||
uint16_t m_led_select;
|
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
|
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)
|
uint32_t m_display_cache[0x20]; // (internal use)
|
||||||
uint8_t m_display_decay[0x20][0x20]; // (internal use)
|
uint8_t m_display_decay[0x20][0x20]; // (internal use)
|
||||||
|
|
||||||
|
uint8_t m_lcd_control;
|
||||||
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
TIMER_DEVICE_CALLBACK_MEMBER(display_decay_tick);
|
||||||
void display_update();
|
void display_update();
|
||||||
@ -77,6 +78,25 @@ public:
|
|||||||
void set_display_segmask(uint32_t digits, uint32_t mask);
|
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);
|
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:
|
protected:
|
||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
virtual void machine_reset() override;
|
virtual void machine_reset() override;
|
||||||
@ -96,6 +116,7 @@ void novag6502_state::machine_start()
|
|||||||
m_inp_mux = 0;
|
m_inp_mux = 0;
|
||||||
m_led_select = 0;
|
m_led_select = 0;
|
||||||
m_led_data = 0;
|
m_led_data = 0;
|
||||||
|
m_lcd_control = 0;
|
||||||
|
|
||||||
// register for savestates
|
// register for savestates
|
||||||
save_item(NAME(m_display_maxy));
|
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_inp_mux));
|
||||||
save_item(NAME(m_led_select));
|
save_item(NAME(m_led_select));
|
||||||
save_item(NAME(m_led_data));
|
save_item(NAME(m_led_data));
|
||||||
|
save_item(NAME(m_lcd_control));
|
||||||
}
|
}
|
||||||
|
|
||||||
void novag6502_state::machine_reset()
|
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
|
Address Maps
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
// Super Constellation
|
||||||
|
|
||||||
static ADDRESS_MAP_START( supercon_mem, AS_PROGRAM, 8, novag6502_state )
|
static ADDRESS_MAP_START( supercon_mem, AS_PROGRAM, 8, novag6502_state )
|
||||||
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram")
|
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE("nvram")
|
||||||
AM_RANGE(0x1c00, 0x1c00) AM_WRITENOP // printer/clock?
|
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
|
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
|
Input Ports
|
||||||
@ -380,6 +514,89 @@ static INPUT_PORTS_START( cb_buttons )
|
|||||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||||
INPUT_PORTS_END
|
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 )
|
static INPUT_PORTS_START( supercon )
|
||||||
PORT_INCLUDE( cb_buttons )
|
PORT_INCLUDE( cb_buttons )
|
||||||
|
|
||||||
@ -417,6 +634,51 @@ static INPUT_PORTS_START( supercon )
|
|||||||
INPUT_PORTS_END
|
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
|
Machine Drivers
|
||||||
@ -440,6 +702,42 @@ static MACHINE_CONFIG_START( supercon, novag6502_state )
|
|||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
MACHINE_CONFIG_END
|
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 */
|
/* 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( 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( 1989, sexpertc, 0, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Expert C Chess Computer", MACHINE_SUPPORTS_SAVE )
|
||||||
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( 1988, sexpertb, sexpertc, 0, sexpert, sexpert, novag6502_state, sexpert, "Novag", "Novag Super Expert B Chess Computer", MACHINE_SUPPORTS_SAVE )
|
||||||
|
Loading…
Reference in New Issue
Block a user