mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
remove novagbase class (nw)
This commit is contained in:
parent
fe0db6545c
commit
7a3eb11ab1
@ -1071,7 +1071,6 @@ function linkProjects_mame_mess(_target, _subtarget)
|
||||
"cccp",
|
||||
"cce",
|
||||
"ccs",
|
||||
"chess",
|
||||
"chessking",
|
||||
"chromatics",
|
||||
"chrysler",
|
||||
@ -1104,6 +1103,7 @@ function linkProjects_mame_mess(_target, _subtarget)
|
||||
"exidy",
|
||||
"fairch",
|
||||
"fairlight",
|
||||
"fidelity",
|
||||
"force",
|
||||
"fujitsu",
|
||||
"funtech",
|
||||
@ -1889,39 +1889,6 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/ccs300.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "chess")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/machine/chessbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/chessbase.h",
|
||||
|
||||
MAME_DIR .. "src/mame/machine/fidelbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/fidelbase.h",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_as12.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_card.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc1.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc10.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc7.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_chesster.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_csc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_dames.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_desdis.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_eag68k.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_elite.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_excel.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_phantom.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc12.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc8.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc9.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_vcc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_vsc.cpp",
|
||||
|
||||
MAME_DIR .. "src/mame/machine/novagbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/novagbase.h",
|
||||
MAME_DIR .. "src/mame/drivers/novag_diablo.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_sexpert.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "chessking")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/cking_master.cpp",
|
||||
@ -2218,6 +2185,33 @@ files {
|
||||
MAME_DIR .. "src/mame/machine/cmi_mkbd.h",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "fidelity")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/machine/chessbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/chessbase.h",
|
||||
MAME_DIR .. "src/mame/machine/fidelbase.cpp",
|
||||
MAME_DIR .. "src/mame/includes/fidelbase.h",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_as12.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_card.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc1.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc10.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_cc7.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_chesster.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_csc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_dames.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_desdis.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_eag68k.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_elite.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_excel.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_phantom.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc12.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc6.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc8.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_sc9.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_vcc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/fidel_vsc.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "force")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/miniforce.cpp",
|
||||
@ -2816,11 +2810,13 @@ createMESSProjects(_target, _subtarget, "novag")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/novag_cforte.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_delta1.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_diablo.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_mk1.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_mk2.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_presto.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_savant.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_scon.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/novag_sexpert.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/ssystem3.cpp",
|
||||
MAME_DIR .. "src/mame/includes/ssystem3.h",
|
||||
MAME_DIR .. "src/mame/video/ssystem3.cpp",
|
||||
|
@ -42,7 +42,7 @@ public:
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_display(*this, "display"),
|
||||
m_board(*this, "board"),
|
||||
m_lcd(*this, "lcd"),
|
||||
m_lcd(*this, "hlcd0538"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_inputs(*this, "IN.%u", 0)
|
||||
{ }
|
||||
|
@ -3,11 +3,9 @@
|
||||
// thanks-to:yoyo_chessboard
|
||||
/******************************************************************************
|
||||
|
||||
* novag_diablo.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
|
||||
Novag Diablo 68000 / Novag Scorpio 68000
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
Novag Diablo 68000 overview:
|
||||
Hardware notes (Diablo):
|
||||
- M68000 @ 16MHz, IPL1 256Hz, IPL2 from ACIA IRQ(always high)
|
||||
- 2*8KB RAM TC5565 battery-backed, 2*32KB hashtable RAM TC55257 3*32KB ROM
|
||||
- HD44780 LCD controller (16x1)
|
||||
@ -19,12 +17,16 @@ Scorpio 68000 hardware is very similar, but with chessboard buttons and side led
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/novagbase.h"
|
||||
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "video/pwm.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/timer.h"
|
||||
#include "sound/beep.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -35,47 +37,122 @@ Scorpio 68000 hardware is very similar, but with chessboard buttons and side led
|
||||
|
||||
namespace {
|
||||
|
||||
class diablo_state : public novagbase_state
|
||||
class diablo_state : public driver_device
|
||||
{
|
||||
public:
|
||||
diablo_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
novagbase_state(mconfig, type, tag),
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_screen(*this, "screen"),
|
||||
m_display(*this, "display"),
|
||||
m_lcd(*this, "hd44780"),
|
||||
m_acia(*this, "acia"),
|
||||
m_rs232(*this, "rs232")
|
||||
m_rs232(*this, "rs232"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_inputs(*this, "IN.%u", 0)
|
||||
{ }
|
||||
|
||||
// machine drivers
|
||||
void diablo68k(machine_config &config);
|
||||
void scorpio68k(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
// devices/pointers
|
||||
required_device<m68000_base_device> m_maincpu;
|
||||
required_device<timer_device> m_irq_on;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<pwm_display_device> m_display;
|
||||
required_device<hd44780_device> m_lcd;
|
||||
required_device<mos6551_device> m_acia;
|
||||
required_device<rs232_port_device> m_rs232;
|
||||
required_device<beep_device> m_beeper;
|
||||
required_ioport_array<8> m_inputs;
|
||||
|
||||
// address maps
|
||||
void diablo68k_map(address_map &map);
|
||||
void scorpio68k_map(address_map &map);
|
||||
|
||||
// periodic interrupts
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||
|
||||
// I/O handlers
|
||||
void update_display();
|
||||
DECLARE_WRITE8_MEMBER(control_w);
|
||||
DECLARE_WRITE8_MEMBER(lcd_data_w);
|
||||
DECLARE_WRITE8_MEMBER(leds_w);
|
||||
DECLARE_READ8_MEMBER(input1_r);
|
||||
DECLARE_READ8_MEMBER(input2_r);
|
||||
|
||||
HD44780_PIXEL_UPDATE(lcd_pixel_update);
|
||||
void lcd_palette(palette_device &palette) const;
|
||||
|
||||
u8 m_inp_mux;
|
||||
u8 m_led_data;
|
||||
u8 m_led_side;
|
||||
u8 m_lcd_control;
|
||||
u8 m_lcd_data;
|
||||
};
|
||||
|
||||
void diablo_state::machine_start()
|
||||
{
|
||||
// zerofill
|
||||
m_inp_mux = 0;
|
||||
m_led_data = 0;
|
||||
m_led_side = 0;
|
||||
m_lcd_control = 0;
|
||||
m_lcd_data = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_inp_mux));
|
||||
save_item(NAME(m_led_data));
|
||||
save_item(NAME(m_led_side));
|
||||
save_item(NAME(m_lcd_control));
|
||||
save_item(NAME(m_lcd_data));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// LCD
|
||||
|
||||
void diablo_state::lcd_palette(palette_device &palette) const
|
||||
{
|
||||
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(diablo_state::lcd_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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TTL
|
||||
|
||||
void diablo_state::update_display()
|
||||
{
|
||||
// update leds (lcd is done separately)
|
||||
u8 led_select = 1 << m_inp_mux;
|
||||
m_display->matrix(led_select, m_led_side << 8 | m_led_data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(diablo_state::control_w)
|
||||
{
|
||||
// d0: HD44780 E
|
||||
@ -88,12 +165,11 @@ WRITE8_MEMBER(diablo_state::control_w)
|
||||
m_beeper->set_state(data >> 7 & 1);
|
||||
|
||||
// d2,d3: side leds(scorpio)
|
||||
u8 leds2 = ~data >> 2 & 3;
|
||||
m_led_side = ~data >> 2 & 3;
|
||||
|
||||
// d4-d6: input mux, led select
|
||||
m_inp_mux = 1 << (data >> 4 & 0x7) & 0xff;
|
||||
display_matrix(8+2, 8, m_led_data | leds2 << 8, m_inp_mux);
|
||||
m_led_data = 0; // ?
|
||||
m_inp_mux = data >> 4 & 7;
|
||||
update_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(diablo_state::lcd_data_w)
|
||||
@ -106,19 +182,20 @@ WRITE8_MEMBER(diablo_state::leds_w)
|
||||
{
|
||||
// d0-d7: chessboard leds
|
||||
m_led_data = data;
|
||||
update_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(diablo_state::input1_r)
|
||||
{
|
||||
// d0-d7: multiplexed inputs (chessboard squares)
|
||||
return ~read_inputs(8) & 0xff;
|
||||
return ~m_inputs[m_inp_mux]->read() & 0xff;
|
||||
}
|
||||
|
||||
READ8_MEMBER(diablo_state::input2_r)
|
||||
{
|
||||
// d0-d2: multiplexed inputs (side panel)
|
||||
// other: ?
|
||||
return ~read_inputs(8) >> 8 & 7;
|
||||
return ~m_inputs[m_inp_mux]->read() >> 8 & 7;
|
||||
}
|
||||
|
||||
|
||||
@ -154,6 +231,170 @@ void diablo_state::scorpio68k_map(address_map &map)
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
INPUT_PORTS_START( generic_cb_buttons )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, 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_START( generic_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( diablo68k_sidepanel )
|
||||
PORT_MODIFY("IN.0")
|
||||
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Go")
|
||||
@ -245,13 +486,13 @@ void diablo_state::diablo68k(machine_config &config)
|
||||
m_screen->set_screen_update("hd44780", FUNC(hd44780_device::screen_update));
|
||||
m_screen->set_palette("palette");
|
||||
|
||||
PALETTE(config, "palette", FUNC(diablo_state::novag_lcd_palette), 3);
|
||||
PALETTE(config, "palette", FUNC(diablo_state::lcd_palette), 3);
|
||||
|
||||
HD44780(config, m_lcd, 0);
|
||||
m_lcd->set_lcd_size(2, 8);
|
||||
m_lcd->set_pixel_update_cb(FUNC(diablo_state::novag_lcd_pixel_update), this);
|
||||
m_lcd->set_pixel_update_cb(FUNC(diablo_state::lcd_pixel_update), this);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(diablo_state::display_decay_tick), attotime::from_msec(1));
|
||||
PWM_DISPLAY(config, m_display).set_size(8, 8+2);
|
||||
config.set_default_layout(layout_novag_diablo68k);
|
||||
|
||||
/* sound hardware */
|
||||
|
@ -5,6 +5,13 @@
|
||||
|
||||
Novag Presto / Novag Octo
|
||||
|
||||
TODO:
|
||||
- controls are too sensitive, is there a bug in the CPU core timer emulation?
|
||||
6MHz: valid (single) button press registered between 307ms and 436ms,
|
||||
12MHz: between 154ms and 218ms, 15MHz: between 123ms and 174ms.
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
Hardware notes (Presto):
|
||||
- NEC D80C49C MCU(serial 186), OSC from LC circuit measured ~6MHz
|
||||
- buzzer, 16+4 LEDs, 8*8 chessboard buttons
|
||||
@ -13,11 +20,6 @@ Octo has a NEC D80C49HC MCU(serial 111), OSC from LC circuit measured ~12MHz
|
||||
The buzzer has a little electronic circuit going on, not sure whatfor.
|
||||
Otherwise, it's identical to Presto. The MCU internal ROM is same too.
|
||||
|
||||
TODO:
|
||||
- controls are too sensitive, is there a bug in the CPU core timer emulation?
|
||||
6MHz: valid (single) button press registered between 307ms and 436ms,
|
||||
12MHz: between 154ms and 218ms, 15MHz: between 123ms and 174ms.
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
|
@ -3,14 +3,14 @@
|
||||
// thanks-to:Berger
|
||||
/******************************************************************************
|
||||
|
||||
* novag_sexpert.cpp, subdriver of machine/novagbase.cpp, machine/chessbase.cpp
|
||||
Novag Super Expert (model 878/887/902) / Novag Super Forte
|
||||
|
||||
TODO:
|
||||
- led handling is correct? The core issue is probably led strobe timing.
|
||||
- sforte lcd_data_w implementation is wrong, especially led handling
|
||||
|
||||
*******************************************************************************
|
||||
|
||||
Novag Super Expert (model 878/887/902) overview:
|
||||
Hardware notes (Super Expert)
|
||||
- 65C02 @ 5MHz or 6MHz (10MHz or 12MHz XTAL)
|
||||
- 8KB RAM battery-backed, 3*32KB ROM
|
||||
- HD44780 LCD controller (16x1)
|
||||
@ -26,12 +26,16 @@ instead of magnet sensors.
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/novagbase.h"
|
||||
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "cpu/m6502/m65c02.h"
|
||||
#include "video/pwm.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/timer.h"
|
||||
#include "sound/beep.h"
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
@ -42,14 +46,23 @@ instead of magnet sensors.
|
||||
|
||||
namespace {
|
||||
|
||||
class sexpert_state : public novagbase_state
|
||||
// Super Expert / shared
|
||||
|
||||
class sexpert_state : public driver_device
|
||||
{
|
||||
public:
|
||||
sexpert_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
novagbase_state(mconfig, type, tag),
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_rombank(*this, "rombank"),
|
||||
m_screen(*this, "screen"),
|
||||
m_display(*this, "display"),
|
||||
m_lcd(*this, "hd44780"),
|
||||
m_acia(*this, "acia"),
|
||||
m_rs232(*this, "rs232")
|
||||
m_rs232(*this, "rs232"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_inputs(*this, "IN.%u", 0)
|
||||
{ }
|
||||
|
||||
// machine drivers
|
||||
@ -61,10 +74,18 @@ public:
|
||||
|
||||
protected:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<timer_device> m_irq_on;
|
||||
required_memory_bank m_rombank;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<pwm_display_device> m_display;
|
||||
required_device<hd44780_device> m_lcd;
|
||||
required_device<mos6551_device> m_acia;
|
||||
required_device<rs232_port_device> m_rs232;
|
||||
required_device<beep_device> m_beeper;
|
||||
required_ioport_array<8> m_inputs;
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
void sexpert_set_cpu_freq();
|
||||
@ -72,15 +93,62 @@ protected:
|
||||
// address maps
|
||||
void sexpert_map(address_map &map);
|
||||
|
||||
// periodic interrupts
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||
|
||||
// I/O handlers
|
||||
void update_display();
|
||||
virtual DECLARE_WRITE8_MEMBER(lcd_control_w);
|
||||
virtual DECLARE_WRITE8_MEMBER(lcd_data_w);
|
||||
DECLARE_WRITE8_MEMBER(leds_w);
|
||||
DECLARE_WRITE8_MEMBER(mux_w);
|
||||
DECLARE_READ8_MEMBER(input1_r);
|
||||
DECLARE_READ8_MEMBER(input2_r);
|
||||
|
||||
HD44780_PIXEL_UPDATE(lcd_pixel_update);
|
||||
void lcd_palette(palette_device &palette) const;
|
||||
|
||||
u8 m_inp_mux;
|
||||
u8 m_led_data;
|
||||
u8 m_lcd_control;
|
||||
u8 m_lcd_data;
|
||||
};
|
||||
|
||||
void sexpert_state::machine_start()
|
||||
{
|
||||
// zerofill
|
||||
m_inp_mux = 0;
|
||||
m_led_data = 0;
|
||||
m_lcd_control = 0;
|
||||
m_lcd_data = 0;
|
||||
|
||||
// register for savestates
|
||||
save_item(NAME(m_inp_mux));
|
||||
save_item(NAME(m_led_data));
|
||||
save_item(NAME(m_lcd_control));
|
||||
save_item(NAME(m_lcd_data));
|
||||
}
|
||||
|
||||
void sexpert_state::sexpert_set_cpu_freq()
|
||||
{
|
||||
// machines were released with either 5MHz or 6MHz CPU
|
||||
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? (12_MHz_XTAL/2) : (10_MHz_XTAL/2));
|
||||
}
|
||||
|
||||
void sexpert_state::machine_reset()
|
||||
{
|
||||
sexpert_set_cpu_freq();
|
||||
m_rombank->set_entry(0);
|
||||
}
|
||||
|
||||
void sexpert_state::init_sexpert()
|
||||
{
|
||||
m_rombank->configure_entries(0, 2, memregion("maincpu")->base() + 0x8000, 0x8000);
|
||||
}
|
||||
|
||||
// Super Forte
|
||||
|
||||
class sforte_state : public sexpert_state
|
||||
{
|
||||
public:
|
||||
@ -100,32 +168,43 @@ private:
|
||||
virtual DECLARE_WRITE8_MEMBER(lcd_data_w) override;
|
||||
};
|
||||
|
||||
void sexpert_state::sexpert_set_cpu_freq()
|
||||
{
|
||||
// machines were released with either 5MHz or 6MHz CPU
|
||||
m_maincpu->set_unscaled_clock((ioport("FAKE")->read() & 1) ? (12_MHz_XTAL/2) : (10_MHz_XTAL/2));
|
||||
}
|
||||
|
||||
void sexpert_state::machine_reset()
|
||||
{
|
||||
novagbase_state::machine_reset();
|
||||
|
||||
sexpert_set_cpu_freq();
|
||||
m_rombank->set_entry(0);
|
||||
}
|
||||
|
||||
void sexpert_state::init_sexpert()
|
||||
{
|
||||
m_rombank->configure_entries(0, 2, memregion("maincpu")->base() + 0x8000, 0x8000);
|
||||
}
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
Devices, I/O
|
||||
******************************************************************************/
|
||||
|
||||
// LCD
|
||||
|
||||
void sexpert_state::lcd_palette(palette_device &palette) const
|
||||
{
|
||||
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(sexpert_state::lcd_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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TTL/generic
|
||||
|
||||
void sexpert_state::update_display()
|
||||
{
|
||||
// update leds (lcd is done separately)
|
||||
m_display->matrix(m_inp_mux, m_led_data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(sexpert_state::lcd_control_w)
|
||||
{
|
||||
// d0: HD44780 RS
|
||||
@ -146,6 +225,7 @@ WRITE8_MEMBER(sexpert_state::leds_w)
|
||||
{
|
||||
// d0-d7: chessboard leds
|
||||
m_led_data = data;
|
||||
update_display();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(sexpert_state::mux_w)
|
||||
@ -158,21 +238,33 @@ WRITE8_MEMBER(sexpert_state::mux_w)
|
||||
|
||||
// d4-d7: 74145 to input mux/led select
|
||||
m_inp_mux = 1 << (data >> 4 & 0xf) & 0xff;
|
||||
display_matrix(8, 8, m_led_data, m_inp_mux);
|
||||
m_led_data = 0; // ?
|
||||
update_display();
|
||||
}
|
||||
|
||||
READ8_MEMBER(sexpert_state::input1_r)
|
||||
{
|
||||
u8 data = 0;
|
||||
|
||||
// d0-d7: multiplexed inputs (chessboard squares)
|
||||
return ~read_inputs(8) & 0xff;
|
||||
for (int i = 0; i < 8; i++)
|
||||
if (BIT(m_inp_mux, i))
|
||||
data |= m_inputs[i]->read();
|
||||
|
||||
return ~data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(sexpert_state::input2_r)
|
||||
{
|
||||
u8 data = 0;
|
||||
|
||||
// d0-d2: printer port
|
||||
|
||||
// d5-d7: multiplexed inputs (side panel)
|
||||
return ~read_inputs(8) >> 3 & 0xe0;
|
||||
for (int i = 0; i < 8; i++)
|
||||
if (BIT(m_inp_mux, i))
|
||||
data |= m_inputs[i]->read() >> 3;
|
||||
|
||||
return ~data & 0xe0;
|
||||
}
|
||||
|
||||
|
||||
@ -183,7 +275,7 @@ WRITE8_MEMBER(sforte_state::lcd_control_w)
|
||||
// d3: rom bankswitch
|
||||
m_rombank->set_entry(data >> 3 & 1);
|
||||
|
||||
// assume same as sexpert
|
||||
// LCD pins: same as sexpert
|
||||
sexpert_state::lcd_control_w(space, offset, data);
|
||||
}
|
||||
|
||||
@ -196,14 +288,14 @@ WRITE8_MEMBER(sforte_state::lcd_data_w)
|
||||
if (~m_lcd_control & 4)
|
||||
{
|
||||
// d5,d6: led data, but not both at same time?
|
||||
if ((data & 0x60) != 0x60)
|
||||
display_matrix(2, 8, data >> 5 & 3, m_inp_mux);
|
||||
m_led_data = ((data & 0x60) != 0x60) ? (data >> 5 & 3) : 0;
|
||||
update_display();
|
||||
|
||||
// d7: enable beeper
|
||||
m_beeper->set_state(data >> 7 & 1);
|
||||
}
|
||||
|
||||
// assume same as sexpert
|
||||
// LCD pins: same as sexpert
|
||||
sexpert_state::lcd_data_w(space, offset, data);
|
||||
}
|
||||
|
||||
@ -244,6 +336,170 @@ void sforte_state::sforte_map(address_map &map)
|
||||
Input Ports
|
||||
******************************************************************************/
|
||||
|
||||
INPUT_PORTS_START( generic_cb_buttons )
|
||||
PORT_START("IN.0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
|
||||
PORT_START("IN.7")
|
||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board Sensor")
|
||||
PORT_BIT(0x40, 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_START( generic_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( sexy_shared )
|
||||
PORT_MODIFY("IN.0")
|
||||
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Go")
|
||||
@ -339,13 +595,13 @@ void sexpert_state::sexpert(machine_config &config)
|
||||
m_screen->set_screen_update("hd44780", FUNC(hd44780_device::screen_update));
|
||||
m_screen->set_palette("palette");
|
||||
|
||||
PALETTE(config, "palette", FUNC(sexpert_state::novag_lcd_palette), 3);
|
||||
PALETTE(config, "palette", FUNC(sexpert_state::lcd_palette), 3);
|
||||
|
||||
HD44780(config, m_lcd, 0);
|
||||
m_lcd->set_lcd_size(2, 8);
|
||||
m_lcd->set_pixel_update_cb(FUNC(sexpert_state::novag_lcd_pixel_update), this);
|
||||
m_lcd->set_pixel_update_cb(FUNC(sexpert_state::lcd_pixel_update), this);
|
||||
|
||||
TIMER(config, "display_decay").configure_periodic(FUNC(sexpert_state::display_decay_tick), attotime::from_msec(1));
|
||||
PWM_DISPLAY(config, m_display).set_size(8, 8);
|
||||
config.set_default_layout(layout_novag_sexpert);
|
||||
|
||||
/* sound hardware */
|
||||
|
@ -1,63 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
*
|
||||
* Novag chess computers base driver
|
||||
* implementation is in machine/novagbase.cpp
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef MAME_INCLUDES_NOVAGBASE_H
|
||||
#define MAME_INCLUDES_NOVAGBASE_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "includes/chessbase.h"
|
||||
|
||||
#include "machine/timer.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/beep.h"
|
||||
#include "video/hd44780.h"
|
||||
#include "emupal.h"
|
||||
|
||||
class novagbase_state : public chessbase_state
|
||||
{
|
||||
public:
|
||||
novagbase_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
chessbase_state(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_irq_on(*this, "irq_on"),
|
||||
m_rombank(*this, "rombank"),
|
||||
m_beeper(*this, "beeper"),
|
||||
m_dac(*this, "dac"),
|
||||
m_lcd(*this, "hd44780")
|
||||
{ }
|
||||
|
||||
// in case reset button is directly tied to maincpu reset pin
|
||||
virtual DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); }
|
||||
|
||||
protected:
|
||||
// devices/pointers
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<timer_device> m_irq_on;
|
||||
optional_memory_bank m_rombank;
|
||||
optional_device<beep_device> m_beeper;
|
||||
optional_device<dac_bit_interface> m_dac;
|
||||
optional_device<hd44780_device> m_lcd;
|
||||
|
||||
// periodic interrupts
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_on) { m_maincpu->set_input_line(Line, ASSERT_LINE); }
|
||||
template<int Line> TIMER_DEVICE_CALLBACK_MEMBER(irq_off) { m_maincpu->set_input_line(Line, CLEAR_LINE); }
|
||||
|
||||
// lcd common
|
||||
HD44780_PIXEL_UPDATE(novag_lcd_pixel_update);
|
||||
void novag_lcd_palette(palette_device &palette) const;
|
||||
u8 m_lcd_control;
|
||||
u8 m_lcd_data;
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_INCLUDES_NOVAGBASE_H
|
@ -1,60 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:hap
|
||||
/******************************************************************************
|
||||
|
||||
Novag chess computers base driver
|
||||
|
||||
TODO:
|
||||
- printer port
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/novagbase.h"
|
||||
|
||||
|
||||
// machine start/reset
|
||||
|
||||
void novagbase_state::machine_start()
|
||||
{
|
||||
chessbase_state::machine_start();
|
||||
|
||||
// zerofill/register for savestates
|
||||
m_lcd_control = 0;
|
||||
m_lcd_data = 0;
|
||||
|
||||
save_item(NAME(m_lcd_control));
|
||||
save_item(NAME(m_lcd_data));
|
||||
}
|
||||
|
||||
void novagbase_state::machine_reset()
|
||||
{
|
||||
chessbase_state::machine_reset();
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Helper Functions
|
||||
***************************************************************************/
|
||||
|
||||
// LCD
|
||||
|
||||
void novagbase_state::novag_lcd_palette(palette_device &palette) const
|
||||
{
|
||||
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(novagbase_state::novag_lcd_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;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user