New machines marked as NOT_WORKING

----------------------------------
Hammond GM-1000 GM Sound Module [DBWBP]
Yamaha PSR-16 [DBWBP]
Yamaha PSR-36 [DBWBP]
Yamaha PSR-40 [DBWBP]
Yamaha PSS-680 [DBWBP]
This commit is contained in:
AJR 2021-08-18 16:43:12 -04:00
parent 5c557a1dab
commit 82a7adad6b
8 changed files with 351 additions and 1 deletions

View File

@ -4426,6 +4426,8 @@ files {
MAME_DIR .. "src/mame/drivers/ymmu50.cpp",
MAME_DIR .. "src/mame/drivers/ymmu80.cpp",
MAME_DIR .. "src/mame/drivers/ymmu100.cpp",
MAME_DIR .. "src/mame/drivers/ympsr16.cpp",
MAME_DIR .. "src/mame/drivers/ympsr40.cpp",
MAME_DIR .. "src/mame/drivers/ympsr60.cpp",
MAME_DIR .. "src/mame/drivers/ympsr340.cpp",
MAME_DIR .. "src/mame/drivers/ymsy35.cpp",
@ -4563,6 +4565,7 @@ files {
MAME_DIR .. "src/mame/drivers/gem_rp.cpp",
MAME_DIR .. "src/mame/drivers/gigatron.cpp",
MAME_DIR .. "src/mame/drivers/gimix.cpp",
MAME_DIR .. "src/mame/drivers/gm1000.cpp",
MAME_DIR .. "src/mame/drivers/gnat10.cpp",
MAME_DIR .. "src/mame/drivers/goupil.cpp",
MAME_DIR .. "src/mame/drivers/grfd2301.cpp",

View File

@ -70,6 +70,7 @@ hd44780_device::hd44780_device(const machine_config &mconfig, device_type type,
, m_rw_input(0)
, m_db_input(0)
, m_enabled(false)
, m_function_set_at_any_time(false)
{
}
@ -487,7 +488,7 @@ void hd44780_device::control_write(u8 data)
else if (BIT(m_ir, 5))
{
// function set
if (!m_first_cmd && m_data_len == (BIT(m_ir, 4) ? 8 : 4) && (m_char_size != (BIT(m_ir, 2) ? 10 : 8) || m_num_line != (BIT(m_ir, 3) + 1)))
if (!m_function_set_at_any_time && !m_first_cmd && m_data_len == (BIT(m_ir, 4) ? 8 : 4) && (m_char_size != (BIT(m_ir, 2) ? 10 : 8) || m_num_line != (BIT(m_ir, 3) + 1)))
{
logerror("HD44780: function set cannot be executed after other instructions unless the interface data length is changed\n");
return;

View File

@ -33,6 +33,7 @@ public:
void set_lcd_size(int lines, int chars) { m_lines = lines; m_chars = chars; }
template <typename... T> void set_pixel_update_cb(T &&... args) { m_pixel_update_cb.set(std::forward<T>(args)...); }
void set_busy_factor(float f) { m_busy_factor = f; } // it's a workaround for inaccurate busy flag emulation
void set_function_set_at_any_time(bool v = true) { m_function_set_at_any_time = v; }
// device interface
void write(offs_t offset, u8 data);
@ -135,6 +136,7 @@ private:
bool m_nibble;
int m_charset_type;
u8 m_render_buf[80 * 16];
bool m_function_set_at_any_time;
enum { DDRAM, CGRAM };
};

123
src/mame/drivers/gm1000.cpp Normal file
View File

@ -0,0 +1,123 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/*******************************************************************************
Skeleton driver for Suzuki BH-1000/Hammond GM-1000 sound module.
*******************************************************************************/
#include "emu.h"
//#include "bus/midi/midi.h"
#include "cpu/m37710/m37710.h"
#include "machine/nvram.h"
#include "video/hd44780.h"
#include "emupal.h"
#include "screen.h"
namespace {
class gm1000_state : public driver_device
{
public:
gm1000_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_nvram(*this, "nvram", 0x800, ENDIANNESS_LITTLE)
{
}
void gm1000(machine_config &config);
private:
HD44780_PIXEL_UPDATE(lcd_pixel_update);
void mem_map(address_map &map);
required_device<m37702s1_device> m_maincpu;
memory_share_creator<u8> m_nvram;
};
HD44780_PIXEL_UPDATE(gm1000_state::lcd_pixel_update)
{
if (x < 5 && y < 8 && line < 2 && pos < 24)
bitmap.pix(line * 8 + y, pos * 6 + x) = state;
}
void gm1000_state::mem_map(address_map &map)
{
map(0x000400, 0x000403).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)).umask16(0x00ff);
map(0x004000, 0x007fff).ram();
map(0x008000, 0x03ffff).rom().region("program", 0x8000);
map(0x040000, 0x04ffff).rom().region("program", 0);
map(0x050000, 0x050fff).lrw8(
[this](offs_t offset) { return m_nvram[offset]; }, "nvram_r",
[this](offs_t offset, u8 data) { m_nvram[offset] = data; }, "nvram_w").umask16(0x00ff);
map(0x064000, 0x06efff).ram();
map(0x070002, 0x070005).nopr();
}
static INPUT_PORTS_START(gm1000)
// Keycode assignments are rather arbitrary and do not at all reflect the panel layout
PORT_START("P4")
PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Parameter " UTF8_LEFT)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Parameter " UTF8_RIGHT)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Data " UTF8_LEFT)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Data " UTF8_RIGHT)
PORT_START("P6")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("All Mute")
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("P. Mute")
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("P. Monitor")
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Display")
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_COMMA) PORT_NAME("Part " UTF8_LEFT)
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_STOP) PORT_NAME("Part " UTF8_RIGHT)
PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("Instrument " UTF8_LEFT)
PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("Instrument " UTF8_RIGHT)
INPUT_PORTS_END
void gm1000_state::gm1000(machine_config &config)
{
M37702S1(config, m_maincpu, 4'000'000); // unknown clock; type guessed
m_maincpu->set_addrmap(AS_PROGRAM, &gm1000_state::mem_map);
m_maincpu->p4_in_cb().set_ioport("P4");
m_maincpu->p6_in_cb().set_ioport("P6");
m_maincpu->an0_cb().set_constant(0xc0); // battery voltage
m_maincpu->an2_cb().set_constant(0x80); // ?
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update));
screen.set_size(6*24, 8*2);
screen.set_visarea_full();
screen.set_palette("palette");
screen.set_color(rgb_t::green());
PALETTE(config, "palette", palette_device::MONOCHROME_INVERTED);
hd44780_device &lcdc(HD44780(config, "lcdc", 0));
lcdc.set_lcd_size(2, 24);
lcdc.set_pixel_update_cb(FUNC(gm1000_state::lcd_pixel_update));
lcdc.set_function_set_at_any_time(true);
}
ROM_START(gm1000)
ROM_REGION16_LE(0x40000, "program", 0)
ROM_LOAD16_BYTE("bh1_mgs71a__u6_sysl__v2.1_bf66.u6", 0x00000, 0x20000, CRC(d003880c) SHA1(5cf727c42dd1b903c0048f147b461676e8c35faf)) // MX27C1000-90
ROM_LOAD16_BYTE("bh1_mgs71a__u7_sysh__v2.1_2fac.u7", 0x00001, 0x20000, CRC(989417a1) SHA1(3de4f10a2e7cde5eb93f04bd75db36e194b1d991)) // MX27C1000-90
ROM_REGION(0x800000, "waves", 0) // DIP42 mask ROMs "© SUZUKI 1993"
ROM_LOAD("319-35006_wd06__m531602c-53.u13", 0x000000, 0x200000, NO_DUMP)
ROM_LOAD("319-35007_wd07__m531602c-52.u14", 0x200000, 0x200000, NO_DUMP)
ROM_LOAD("319-35008_wd08__m531602c-54.u15", 0x200000, 0x200000, NO_DUMP)
ROM_LOAD("319-35009_wd09__m531602c-55.u16", 0x200000, 0x200000, NO_DUMP)
ROM_END
} // anonymous namespace
SYST(1994, gm1000, 0, 0, gm1000, gm1000, gm1000_state, empty_init, "Suzuki (Hammond license)", "GM-1000 GM Sound Module", MACHINE_IS_SKELETON)

View File

@ -0,0 +1,143 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/*******************************************************************************
Skeleton driver for Yamaha PSR-16 & related keyboards.
These are based on the YM3420AD or YM3420BF "CPU and FM Tone Generator",
a 65C02-based SoC which includes 256 bytes of internal RAM, 16 KB of
internal ROM (enabled only on PSR-36?), a MIDI UART and a DAC.
*******************************************************************************/
#include "emu.h"
//#include "bus/midi/midi.h"
#include "cpu/m6502/m65c02.h"
namespace {
class yamaha_psr16_state : public driver_device
{
public:
yamaha_psr16_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
{
}
void psr16(machine_config &config);
void psr36(machine_config &config);
void pss680(machine_config &config);
private:
u8 busy_r();
void common_map(address_map &map);
void psr16_map(address_map &map);
void psr36_map(address_map &map);
void pss680_map(address_map &map);
required_device<cpu_device> m_maincpu;
};
u8 yamaha_psr16_state::busy_r()
{
// Code waits for bit 7 of $0200 to go low before writing to $02XX
return 0;
}
void yamaha_psr16_state::common_map(address_map &map)
{
map(0x0000, 0x00ff).mirror(0x100).ram();
map(0x0200, 0x0200).r(FUNC(yamaha_psr16_state::busy_r));
map(0x0310, 0x0312).nopw();
map(0x0318, 0x0318).nopr();
map(0x0319, 0x031a).nopw();
map(0x031b, 0x031b).nopr();
map(0x0327, 0x0327).nopw();
}
void yamaha_psr16_state::psr16_map(address_map &map)
{
common_map(map);
map(0xc000, 0xffff).rom().region("program", 0);
}
void yamaha_psr16_state::psr36_map(address_map &map)
{
common_map(map);
map(0x2000, 0x27ff).ram();
map(0x4000, 0x7fff).rom().region("program", 0x4000);
map(0x8000, 0xbfff).rom().region("program", 0);
map(0xc000, 0xffff).rom().region("maincpu", 0);
}
void yamaha_psr16_state::pss680_map(address_map &map)
{
common_map(map);
map(0x1800, 0x1802).nopw();
map(0x1810, 0x1811).nopr();
map(0x2000, 0x3fff).ram();
map(0x4000, 0x7fff).rom().region("program", 0x8000);
map(0x8000, 0xffff).rom().region("program", 0);
}
static INPUT_PORTS_START(psr16)
INPUT_PORTS_END
void yamaha_psr16_state::psr16(machine_config &config)
{
M65C02(config, m_maincpu, 2'000'000);
m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_psr16_state::psr16_map);
}
void yamaha_psr16_state::psr36(machine_config &config)
{
psr16(config);
m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_psr16_state::psr36_map);
}
void yamaha_psr16_state::pss680(machine_config &config)
{
psr16(config);
m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_psr16_state::pss680_map);
}
ROM_START(psr16)
ROM_REGION(0x4000, "program", 0)
ROM_LOAD("yamaha_xe988a0_7247-h001.bin", 0x0000, 0x4000, CRC(20c5c0b2) SHA1(d7a066b680b7d4cfded62d4d50808c21784774d0)) // 28-pin mask ROM
ROM_END
ROM_START(psr36)
ROM_REGION(0x4000, "maincpu", 0)
ROM_LOAD("ym3420bf_internal.bin", 0x0000, 0x4000, NO_DUMP)
ROM_FILL(0x3ffa, 1, 0x07)
ROM_FILL(0x3ffb, 1, 0x40)
ROM_FILL(0x3ffc, 1, 0x00)
ROM_FILL(0x3ffd, 1, 0x40)
ROM_FILL(0x3ffe, 1, 0x04)
ROM_FILL(0x3fff, 1, 0x40)
ROM_REGION(0x20000, "program", 0)
ROM_LOAD("yamaha_xe137c0_7247-h005.bin", 0x00000, 0x20000, CRC(b9566cd5) SHA1(e35979299de2442d62e039d45b54bf77e9571f49)) // 28-pin mask ROM (second 32K is copy of first 32K; last half is all zero fill)
ROM_REGION(0x20000, "waves", 0)
ROM_LOAD("yamaha_xe137b0_4881-7554.bin", 0x00000, 0x20000, CRC(6fe1382e) SHA1(82320d0a6c14825d790c0d67263786f767b7c318)) // 28-pin mask ROM (drum samples)
ROM_END
ROM_START(pss680)
ROM_REGION(0x40000, "program", 0)
ROM_LOAD("yamaha_xe416d0-093.bin", 0x00000, 0x40000, CRC(150d1392) SHA1(d578324cfae73cd5f6c628eb3044be07684bc5d0)) // 32-pin mask ROM
ROM_REGION(0x40000, "waves", 0)
ROM_LOAD("yamaha_xe405b0-070.bin", 0x00000, 0x40000, CRC(53336c52) SHA1(6bcad44fc93cfa5cd603cf24adfd736a911d3509)) // 32-pin mask ROM
ROM_END
} // anonymous namespace
SYST(1988, psr16, 0, 0, psr16, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSR-16", MACHINE_IS_SKELETON)
SYST(1988, psr36, 0, 0, psr36, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSR-36", MACHINE_IS_SKELETON)
SYST(1988, pss680, 0, 0, pss680, psr16, yamaha_psr16_state, empty_init, "Yamaha", "PSS-680", MACHINE_IS_SKELETON)

View File

@ -0,0 +1,64 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/*******************************************************************************
Skeleton driver for Yamaha PSR-40 PortaSound keyboard.
*******************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/i8255.h"
#include "machine/nvram.h"
namespace {
class yamaha_psr40_state : public driver_device
{
public:
yamaha_psr40_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
{
}
void psr40(machine_config &config);
private:
void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
};
void yamaha_psr40_state::mem_map(address_map &map)
{
map(0x0000, 0x7fff).rom().region("program", 0);
map(0x8000, 0x87ff).mirror(0x1800).ram().share("nvram");
//map(0xa000, 0xa01f).mirror(0x1fe0).rw("ge7", FUNC(ig10771_device::read), FUNC(ig10771_device::write));
map(0xa01e, 0xa01f).nopr();
map(0xc000, 0xc003).mirror(0x1ffc).rw("ppi", FUNC(i8255_device::read), FUNC(i8255_device::write));
}
static INPUT_PORTS_START(psr40)
INPUT_PORTS_END
void yamaha_psr40_state::psr40(machine_config &config)
{
Z80(config, m_maincpu, 4'000'000); // unknown clock
m_maincpu->set_addrmap(AS_PROGRAM, &yamaha_psr40_state::mem_map);
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5517APL + battery?
I8255(config, "ppi");
}
ROM_START(psr40)
ROM_REGION(0x8000, "program", 0)
ROM_LOAD("yamaha_xa004a0_6133-7836.ic4", 0x0000, 0x8000, CRC(7ac4a729) SHA1(e792aabe816d8c46bcc683f0e9220ca50c0faaac)) // 28-pin custom-marked ROM
ROM_END
} // anonymous namespace
SYST(1985, psr40, 0, 0, psr40, psr40, yamaha_psr40_state, empty_init, "Yamaha", "PSR-40", MACHINE_IS_SKELETON)

View File

@ -15325,6 +15325,9 @@ nfsug // Need For Speed: Underground Install (2 Discs)
@source:gluck2.cpp
gluck2 // 1992 Yung Yu / CYE
@source:gm1000.cpp
gm1000 //
@source:gmaster.cpp
gmaster // Hartung Gamemaster
@ -43448,6 +43451,14 @@ mu100 // 1997 MU-100
mu100r // 1997 MU-100 Rackable version
mu100b // 1998 MU-100B
@source:ympsr16.cpp
psr16 // 1988 PSR-16
psr36 // 1988 PSR-36
pss680 // 1988 PSS-680
@source:ympsr40.cpp
psr40 // 1985 PSR-40
@source:ympsr60.cpp
psr60 // 1985 PSR-60
psr70 // 1985 PSR-70

View File

@ -371,6 +371,7 @@ gimix.cpp
gizmondo.cpp
gkidabc.cpp
glcx.cpp
gm1000.cpp
gmaster.cpp
gnat10.cpp
goupil.cpp
@ -1194,6 +1195,8 @@ ymmu100.cpp
ymmu5.cpp
ymmu50.cpp
ymmu80.cpp
ympsr16.cpp
ympsr40.cpp
ympsr60.cpp
ympsr340.cpp
ymsy35.cpp