renamed some novag drivers (nw)

This commit is contained in:
hap 2019-07-06 19:30:20 +02:00
parent ac0a72912e
commit d5f741d8a3
8 changed files with 84 additions and 84 deletions

View File

@ -1064,7 +1064,6 @@ function linkProjects_mame_mess(_target, _subtarget)
"be",
"bitcorp",
"bnpo",
"brea",
"bondwell",
"booth",
"camputers",
@ -1087,6 +1086,7 @@ function linkProjects_mame_mess(_target, _subtarget)
"cxg",
"cybiko",
"dai",
"dcs",
"ddr",
"dec",
"dicksmth",
@ -1774,11 +1774,6 @@ files {
MAME_DIR .. "src/mame/video/b2m.cpp",
}
createMESSProjects(_target, _subtarget, "brea")
files {
MAME_DIR .. "src/mame/drivers/intellect02.cpp",
}
createMESSProjects(_target, _subtarget, "bondwell")
files {
MAME_DIR .. "src/mame/drivers/bw12.cpp",
@ -1839,6 +1834,7 @@ files {
MAME_DIR .. "src/mame/includes/c65.h",
MAME_DIR .. "src/mame/drivers/c900.cpp",
MAME_DIR .. "src/mame/drivers/cbm2.cpp",
MAME_DIR .. "src/mame/drivers/chessmate.cpp",
MAME_DIR .. "src/mame/drivers/clcd.cpp",
MAME_DIR .. "src/mame/drivers/pet.cpp",
MAME_DIR .. "src/mame/drivers/plus4.cpp",
@ -1853,6 +1849,7 @@ createMESSProjects(_target, _subtarget, "cccp")
files {
MAME_DIR .. "src/mame/drivers/argo.cpp",
MAME_DIR .. "src/mame/drivers/cm1800.cpp",
MAME_DIR .. "src/mame/drivers/intellect02.cpp",
MAME_DIR .. "src/mame/drivers/lviv.cpp",
MAME_DIR .. "src/mame/includes/lviv.h",
MAME_DIR .. "src/mame/machine/lviv.cpp",
@ -1980,6 +1977,11 @@ files {
MAME_DIR .. "src/mame/video/dai.cpp",
}
createMESSProjects(_target, _subtarget, "dcs")
files {
MAME_DIR .. "src/mame/drivers/compuchess.cpp",
}
createMESSProjects(_target, _subtarget, "ddr")
files {
MAME_DIR .. "src/mame/drivers/ac1.cpp",
@ -2814,10 +2816,7 @@ files {
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",
@ -3070,6 +3069,7 @@ files {
createMESSProjects(_target, _subtarget, "saitek")
files {
MAME_DIR .. "src/mame/drivers/risc2500.cpp",
MAME_DIR .. "src/mame/drivers/saitek_delta1.cpp",
MAME_DIR .. "src/mame/drivers/scisys_chesstrv.cpp",
MAME_DIR .. "src/mame/drivers/scisys_cp2000.cpp",
MAME_DIR .. "src/mame/drivers/stratos.cpp",

View File

@ -541,9 +541,6 @@ INPUT_CHANGED_MEMBER(sensorboard_device::ui_init)
// input_ports - device-specific input ports
//-------------------------------------------------
#undef PORT_CONDITION
#define PORT_CONDITION(a, b, c, d) ;
static INPUT_PORTS_START( sensorboard )
PORT_START("RANK.1")
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CONDITION("BS_CHECK", 1<<16 | 1<<0, EQUALS, 0) PORT_CHANGED_MEMBER(DEVICE_SELF, sensorboard_device, sensor, 0x00) PORT_NAME("Sensor A1")

View File

@ -52,10 +52,10 @@ MOS MPS 6332 005 2179
namespace {
class mk2_state : public driver_device
class chessmate_state : public driver_device
{
public:
mk2_state(const machine_config &mconfig, device_type type, const char *tag) :
chessmate_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_miot(*this, "miot"),
@ -65,7 +65,7 @@ public:
{ }
// machine configs
void mk2(machine_config &config);
void chessmate(machine_config &config);
DECLARE_INPUT_CHANGED_MEMBER(reset_button);
@ -94,7 +94,7 @@ private:
u8 m_led_data;
};
void mk2_state::machine_start()
void chessmate_state::machine_start()
{
// zerofill
m_inp_mux = 0;
@ -107,7 +107,7 @@ void mk2_state::machine_start()
save_item(NAME(m_led_data));
}
INPUT_CHANGED_MEMBER(mk2_state::reset_button)
INPUT_CHANGED_MEMBER(chessmate_state::reset_button)
{
// assume that NEW GAME button is tied to reset pin(s)
m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE);
@ -123,13 +123,13 @@ INPUT_CHANGED_MEMBER(mk2_state::reset_button)
// 6530 ports
void mk2_state::update_display()
void chessmate_state::update_display()
{
m_display->write_row(4, m_led_data);
m_display->matrix_partial(0, 4, 1 << m_inp_mux, m_7seg_data);
}
WRITE8_MEMBER(mk2_state::control_w)
WRITE8_MEMBER(chessmate_state::control_w)
{
// d0-d2: 74145 to input mux/digit select
m_inp_mux = data & 7;
@ -146,13 +146,13 @@ WRITE8_MEMBER(mk2_state::control_w)
m_maincpu->set_input_line(M6502_IRQ_LINE, (data & 0x80) ? CLEAR_LINE : ASSERT_LINE);
}
WRITE8_MEMBER(mk2_state::digit_w)
WRITE8_MEMBER(chessmate_state::digit_w)
{
m_7seg_data = data;
update_display();
}
READ8_MEMBER(mk2_state::input_r)
READ8_MEMBER(chessmate_state::input_r)
{
u8 data = 0;
@ -173,7 +173,7 @@ READ8_MEMBER(mk2_state::input_r)
Address Maps
******************************************************************************/
void mk2_state::main_map(address_map &map)
void chessmate_state::main_map(address_map &map)
{
map.global_mask(0x1fff);
map(0x0000, 0x00ff).mirror(0x100).ram();
@ -189,7 +189,7 @@ void mk2_state::main_map(address_map &map)
Input Ports
******************************************************************************/
static INPUT_PORTS_START( mk2 )
static INPUT_PORTS_START( chessmate )
PORT_START("IN.0")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("F / Skill Level")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("E / Stop Clock")
@ -217,7 +217,7 @@ static INPUT_PORTS_START( mk2 )
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, mk2_state, reset_button, nullptr) PORT_NAME("New Game")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmate_state, reset_button, nullptr) PORT_NAME("New Game")
INPUT_PORTS_END
@ -226,16 +226,16 @@ INPUT_PORTS_END
Machine Configs
******************************************************************************/
void mk2_state::mk2(machine_config &config)
void chessmate_state::chessmate(machine_config &config)
{
/* basic machine hardware */
M6504(config, m_maincpu, 1000000);
m_maincpu->set_addrmap(AS_PROGRAM, &mk2_state::main_map);
m_maincpu->set_addrmap(AS_PROGRAM, &chessmate_state::main_map);
MOS6530(config, m_miot, 1000000);
m_miot->in_pa_callback().set(FUNC(mk2_state::input_r));
m_miot->out_pa_callback().set(FUNC(mk2_state::digit_w));
m_miot->out_pb_callback().set(FUNC(mk2_state::control_w));
m_miot->in_pa_callback().set(FUNC(chessmate_state::input_r));
m_miot->out_pa_callback().set(FUNC(chessmate_state::digit_w));
m_miot->out_pb_callback().set(FUNC(chessmate_state::control_w));
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(4+1, 8);
@ -268,5 +268,5 @@ ROM_END
Drivers
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1979, ccmk2, 0, 0, mk2, mk2, mk2_state, empty_init, "Novag", "Chess Champion: MK II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1979, ccmk2, 0, 0, chessmate, chessmate, chessmate_state, empty_init, "Novag", "Chess Champion: MK II", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -9,6 +9,8 @@ Driver largely rewritten over the years.
TODO:
- cncchess sound is wrong, it should be a long dual-tone alarm sound
- verify CPU speed
- dump/add cmpchess2
BTANB:
- digits may flash briefly after entering a command, eg. the "b" or "P" digit
@ -16,9 +18,10 @@ BTANB:
*******************************************************************************
The MK I was a clone of Data Cash Systems's CompuChess (1977, one of the first
chess computers). The ROM is identical. DCS sued Novag Industries for copyright
infringement and somehow didn't manage to win the case.
Data Cash Systems's CompuChess (1977, one of the first chess computers).
The game underneath is better known as Novag's MK I, it was an unlicensed clone.
The ROM is identical. DCS sued JS&A / Novag Industries for copyright infringement
and somehow didn't manage to win the case.
Unlike CompuChess, MK I was a large success, we can assume that it kickstarted
Novag's chess computer generation. It was also distributed as "Computer Chess"
@ -84,10 +87,10 @@ Fairchild 3850PK CPU @ 2MHz (LC circuit), 3853PK
namespace {
class mk1_state : public driver_device
class compuchess_state : public driver_device
{
public:
mk1_state(const machine_config &mconfig, device_type type, const char *tag) :
compuchess_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_display(*this, "display"),
@ -142,7 +145,7 @@ private:
bool m_blink;
};
void mk1_state::machine_start()
void compuchess_state::machine_start()
{
// zerofill
m_inp_mux = 0;
@ -157,12 +160,12 @@ void mk1_state::machine_start()
save_item(NAME(m_blink));
}
void mk1_state::machine_reset()
void compuchess_state::machine_reset()
{
update_reset(ioport("RESET")->read());
}
void mk1_state::update_reset(ioport_value state)
void compuchess_state::update_reset(ioport_value state)
{
// reset switch is tied to F3850 RESET pin
m_maincpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
@ -178,7 +181,7 @@ void mk1_state::update_reset(ioport_value state)
Devices, I/O
******************************************************************************/
READ8_MEMBER(mk1_state::beeper_r)
READ8_MEMBER(compuchess_state::beeper_r)
{
// cncchess: trigger beeper
if (!machine().side_effects_disabled() && m_beeper != nullptr)
@ -190,7 +193,7 @@ READ8_MEMBER(mk1_state::beeper_r)
return m_maincpu->space(AS_PROGRAM).read_byte(offset);
}
void mk1_state::update_display()
void compuchess_state::update_display()
{
// display panel goes into automated blink mode if DP segment is held high,
// and DP segment itself by default only appears to be active if no other segments are
@ -202,32 +205,32 @@ void mk1_state::update_display()
m_display->matrix(m_digit_select, bstate << 8 | digit_data);
}
WRITE8_MEMBER(mk1_state::digit_data_w)
WRITE8_MEMBER(compuchess_state::digit_data_w)
{
// digit segment data
m_digit_data = data;
update_display();
}
READ8_MEMBER(mk1_state::digit_data_r)
READ8_MEMBER(compuchess_state::digit_data_r)
{
return m_digit_data;
}
WRITE8_MEMBER(mk1_state::digit_select_w)
WRITE8_MEMBER(compuchess_state::digit_select_w)
{
// d0-d3: digit select (active low)
m_digit_select = ~data & 0xf;
update_display();
}
WRITE8_MEMBER(mk1_state::input_w)
WRITE8_MEMBER(compuchess_state::input_w)
{
// input matrix is shared with either digit_data_w, or digit_select_w
m_inp_mux = data;
}
READ8_MEMBER(mk1_state::input_r)
READ8_MEMBER(compuchess_state::input_r)
{
u8 data = m_inp_mux;
@ -250,24 +253,24 @@ READ8_MEMBER(mk1_state::input_r)
Address Maps
******************************************************************************/
void mk1_state::main_map(address_map &map)
void compuchess_state::main_map(address_map &map)
{
map(0x0000, 0x07ff).rom();
map(0x1800, 0x18ff).ram();
map(0x8000, 0xffff).r(FUNC(mk1_state::beeper_r));
map(0x8000, 0xffff).r(FUNC(compuchess_state::beeper_r));
}
void mk1_state::main_io(address_map &map)
void compuchess_state::main_io(address_map &map)
{
map(0x00, 0x00).rw(FUNC(mk1_state::input_r), FUNC(mk1_state::input_digit_data_w));
map(0x01, 0x01).w(FUNC(mk1_state::digit_select_w));
map(0x00, 0x00).rw(FUNC(compuchess_state::input_r), FUNC(compuchess_state::input_digit_data_w));
map(0x01, 0x01).w(FUNC(compuchess_state::digit_select_w));
map(0x0c, 0x0f).rw("smi", FUNC(f3853_device::read), FUNC(f3853_device::write));
}
void mk1_state::cnc_io(address_map &map)
void compuchess_state::cnc_io(address_map &map)
{
map(0x00, 0x00).rw(FUNC(mk1_state::digit_data_r), FUNC(mk1_state::digit_data_w));
map(0x01, 0x01).rw(FUNC(mk1_state::input_r), FUNC(mk1_state::input_digit_select_w));
map(0x00, 0x00).rw(FUNC(compuchess_state::digit_data_r), FUNC(compuchess_state::digit_data_w));
map(0x01, 0x01).rw(FUNC(compuchess_state::input_r), FUNC(compuchess_state::input_digit_select_w));
map(0x0c, 0x0f).rw("smi", FUNC(f3853_device::read), FUNC(f3853_device::write));
}
@ -303,7 +306,7 @@ static INPUT_PORTS_START( cmpchess )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5 / Black Knight")
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset Switch") // L.S. switch on the MK I
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_CHANGED_MEMBER(DEVICE_SELF, compuchess_state, reset_switch, nullptr) PORT_NAME("Reset Switch") // L.S. switch on the MK I
INPUT_PORTS_END
static INPUT_PORTS_START( cncchess )
@ -332,7 +335,7 @@ static INPUT_PORTS_START( cncchess )
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("E / White Queen")
PORT_START("RESET")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, mk1_state, reset_switch, nullptr) PORT_NAME("Reset")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, compuchess_state, reset_switch, nullptr) PORT_NAME("Reset")
INPUT_PORTS_END
@ -341,12 +344,12 @@ INPUT_PORTS_END
Machine Configs
******************************************************************************/
void mk1_state::cmpchess(machine_config &config)
void compuchess_state::cmpchess(machine_config &config)
{
/* basic machine hardware */
F8(config, m_maincpu, 3.579545_MHz_XTAL/2); // Fairchild 3850PK
m_maincpu->set_addrmap(AS_PROGRAM, &mk1_state::main_map);
m_maincpu->set_addrmap(AS_IO, &mk1_state::main_io);
m_maincpu->set_addrmap(AS_PROGRAM, &compuchess_state::main_map);
m_maincpu->set_addrmap(AS_IO, &compuchess_state::main_io);
m_maincpu->set_irq_acknowledge_callback("smi", FUNC(f3853_device::int_acknowledge));
f3853_device &smi(F3853(config, "smi", 3.579545_MHz_XTAL/2));
@ -357,10 +360,10 @@ void mk1_state::cmpchess(machine_config &config)
m_display->set_segmask(0xf, 0xff);
config.set_default_layout(layout_cmpchess);
TIMER(config, "blink_display").configure_periodic(FUNC(mk1_state::blink), attotime::from_msec(250)); // approximation
TIMER(config, "blink_display").configure_periodic(FUNC(compuchess_state::blink), attotime::from_msec(250)); // approximation
}
void mk1_state::mk1(machine_config &config)
void compuchess_state::mk1(machine_config &config)
{
cmpchess(config);
@ -371,12 +374,12 @@ void mk1_state::mk1(machine_config &config)
config.set_default_layout(layout_novag_mk1);
}
void mk1_state::cnc(machine_config &config)
void compuchess_state::cnc(machine_config &config)
{
mk1(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_IO, &mk1_state::cnc_io);
m_maincpu->set_addrmap(AS_IO, &compuchess_state::cnc_io);
config.set_default_layout(layout_cncchess);
@ -384,7 +387,7 @@ void mk1_state::cnc(machine_config &config)
SPEAKER(config, "speaker").front_center();
BEEP(config, m_beeper, 2000); // wrong, see TODO
m_beeper->add_route(ALL_OUTPUTS, "speaker", 0.25);
TIMER(config, "beeper_off").configure_generic(FUNC(mk1_state::beeper_off));
TIMER(config, "beeper_off").configure_generic(FUNC(compuchess_state::beeper_off));
}
@ -417,8 +420,8 @@ ROM_END
Drivers
******************************************************************************/
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1977, cmpchess, 0, 0, cmpchess, cmpchess, mk1_state, empty_init, "Data Cash Systems", "CompuChess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1978, ccmk1, cmpchess, 0, mk1, cmpchess, mk1_state, empty_init, "Novag", "Chess Champion: MK I", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
// YEAR NAME PARENT CMP MACHINE INPUT STATE INIT COMPANY, FULLNAME, FLAGS
CONS( 1977, cmpchess, 0, 0, cmpchess, cmpchess, compuchess_state, empty_init, "Data Cash Systems", "CompuChess", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1978, ccmk1, cmpchess, 0, mk1, cmpchess, compuchess_state, empty_init, "Novag", "Chess Champion: MK I", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, cncchess, 0, 0, cnc, cncchess, mk1_state, empty_init, "Conic", "Computer Chess (Conic)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
CONS( 1979, cncchess, 0, 0, cnc, cncchess, compuchess_state, empty_init, "Conic", "Computer Chess (Conic)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )

View File

@ -21,7 +21,7 @@ Hardware notes:
#include "video/pwm.h"
// internal artwork
#include "novag_delta1.lh" // clickable
#include "saitek_delta1.lh" // clickable
namespace {
@ -218,7 +218,7 @@ void delta1_state::delta1(machine_config &config)
/* video hardware */
PWM_DISPLAY(config, m_display).set_size(4, 7);
m_display->set_segmask(0xf, 0x7f);
config.set_default_layout(layout_novag_delta1);
config.set_default_layout(layout_saitek_delta1);
TIMER(config, "display_blink").configure_periodic(FUNC(delta1_state::blink), attotime::from_msec(250)); // approximation
}

View File

@ -9836,6 +9836,9 @@ chaos //
@source:cheekyms.cpp
cheekyms // 8004 (c) [1980?]
@source:chessmate.cpp
ccmk2 // Chess Champion MK II
@source:chessmst.cpp
chessmst //
chessmsta //
@ -10163,6 +10166,11 @@ compgolfo // (c) 1985 Data East Corporation (Japan)
compis // 1985 Telenova Compis
compis2 // 1985 Telenova Compis
@source:compuchess.cpp
ccmk1 // Chess Champion MK I
cmpchess
cncchess
@source:compucolor.cpp
compclr2 //
@ -30964,21 +30972,10 @@ raiders5t // UPL-85004 (c) 1985 Taito license
cfortea //
cforteb //
@source:novag_delta1.cpp
ccdelta1 //
@source:novag_diablo.cpp
diablo68 //
scorpio68 //
@source:novag_mk1.cpp
ccmk1 // Chess Champion MK I
cmpchess
cncchess
@source:novag_mk2.cpp
ccmk2 // Chess Champion MK II
@source:novag_presto.cpp
nocto //
npresto //
@ -34091,6 +34088,9 @@ safarirj // (c) 1979 Shin Nihon Kikaku (SNK)
@source:sage2.cpp
sage2 //
@source:saitek_delta1.cpp
ccdelta1 //
@source:sam.cpp
24_130 //
24_140 //

View File

@ -140,6 +140,7 @@ cgc7900.cpp
cgenie.cpp
channelf.cpp
chaos.cpp
chessmate.cpp
chessmst.cpp
cit101.cpp
cit220.cpp
@ -155,6 +156,7 @@ codata.cpp
coleco.cpp
compc.cpp
compis.cpp
compuchess.cpp
compucolor.cpp
comquest.cpp
comx35.cpp
@ -541,10 +543,7 @@ ngp.cpp
nokia_3310.cpp
notetaker.cpp
novag_cforte.cpp
novag_delta1.cpp
novag_diablo.cpp
novag_mk1.cpp
novag_mk2.cpp
novag_presto.cpp
novag_savant.cpp
novag_scon.cpp
@ -693,6 +692,7 @@ rz1.cpp
rzone.cpp
sacstate.cpp
sage2.cpp
saitek_delta1.cpp
samcoupe.cpp
sansa_fuze.cpp
sapi1.cpp