mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +03:00
Fixes/ROMs for Roland stuff (#12555)
* Fixed screen * Added ROMs and GP/LP support * Fixed rom and prints * Leftover * Fix
This commit is contained in:
parent
0a51009b74
commit
81284c68ca
@ -1624,14 +1624,26 @@ if (SOUNDS["XT446"]~=null) then
|
|||||||
end
|
end
|
||||||
|
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
-- Roland sample players
|
-- Roland LP-based sample players
|
||||||
--@src/devices/sound/rolandpcm.h,SOUNDS["ROLANDPCM"] = true
|
--@src/devices/sound/roland_lp.h,SOUNDS["ROLANDLP"] = true
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
|
|
||||||
if (SOUNDS["ROLANDPCM"]~=null) then
|
if (SOUNDS["ROLANDLP"]~=null) then
|
||||||
files {
|
files {
|
||||||
MAME_DIR .. "src/devices/sound/rolandpcm.cpp",
|
MAME_DIR .. "src/devices/sound/roland_lp.cpp",
|
||||||
MAME_DIR .. "src/devices/sound/rolandpcm.h",
|
MAME_DIR .. "src/devices/sound/roland_lp.h",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
---------------------------------------------------
|
||||||
|
-- Roland GP-based sample players
|
||||||
|
--@src/devices/sound/roland_gp.h,SOUNDS["ROLANDGP"] = true
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
if (SOUNDS["ROLANDGP"]~=null) then
|
||||||
|
files {
|
||||||
|
MAME_DIR .. "src/devices/sound/roland_gp.cpp",
|
||||||
|
MAME_DIR .. "src/devices/sound/roland_gp.h",
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
78
src/devices/sound/roland_gp.cpp
Normal file
78
src/devices/sound/roland_gp.cpp
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:giulioz
|
||||||
|
|
||||||
|
// Initial skeleton based on the RE work by nukeykt
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "roland_gp.h"
|
||||||
|
|
||||||
|
// Original chip (GP-2) TODO
|
||||||
|
// DEFINE_DEVICE_TYPE(TC24SC201AF, tc6116_device, "tc24sc201af", "Roland GP TC24SC201AF PCM")
|
||||||
|
|
||||||
|
// Newer chip (GP-4) including bugfixes and H8/500 cpu glue logic
|
||||||
|
DEFINE_DEVICE_TYPE(TC6116, tc6116_device, "tc6116", "Roland GP TC6116 PCM")
|
||||||
|
|
||||||
|
|
||||||
|
tc6116_device::tc6116_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
|
: device_t(mconfig, TC6116, tag, owner, clock)
|
||||||
|
, device_sound_interface(mconfig, *this)
|
||||||
|
, device_rom_interface(mconfig, *this)
|
||||||
|
, m_int_callback(*this)
|
||||||
|
, m_clock(0)
|
||||||
|
, m_rate(0)
|
||||||
|
, m_stream(nullptr)
|
||||||
|
, m_sel_chn(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_start - device-specific startup
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tc6116_device::device_start()
|
||||||
|
{
|
||||||
|
m_clock = clock() / 2;
|
||||||
|
m_rate = m_clock / 512; // usually 32 KHz
|
||||||
|
|
||||||
|
m_stream = stream_alloc(0, 2, m_rate);
|
||||||
|
|
||||||
|
logerror("Roland GP: Clock %u, Rate %u\n", m_clock, m_rate);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_reset - device-specific reset
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tc6116_device::device_reset()
|
||||||
|
{
|
||||||
|
m_int_callback(CLEAR_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// rom_bank_pre_change - refresh the stream if the
|
||||||
|
// ROM banking changes
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tc6116_device::rom_bank_pre_change()
|
||||||
|
{
|
||||||
|
// unused right now
|
||||||
|
m_stream->update();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
u8 tc6116_device::read(offs_t offset)
|
||||||
|
{
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
void tc6116_device::write(offs_t offset, u8 data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// sound_stream_update - handle a stream update
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void tc6116_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||||
|
{
|
||||||
|
}
|
84
src/devices/sound/roland_gp.h
Normal file
84
src/devices/sound/roland_gp.h
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:giulioz
|
||||||
|
#ifndef MAME_SOUND_ROLANDGP_H
|
||||||
|
#define MAME_SOUND_ROLANDGP_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "dirom.h"
|
||||||
|
|
||||||
|
class tc6116_device : public device_t, public device_sound_interface, public device_rom_interface<23>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
tc6116_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
auto int_callback() { return m_int_callback.bind(); }
|
||||||
|
|
||||||
|
u8 read(offs_t offset);
|
||||||
|
void write(offs_t offset, u8 data);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device_t implementation
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
// device_sound_interface implementation
|
||||||
|
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||||
|
|
||||||
|
// device_rom_interface implementation
|
||||||
|
virtual void rom_bank_pre_change() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static constexpr unsigned NUM_CHANNELS = 28;
|
||||||
|
|
||||||
|
struct pcm_channel
|
||||||
|
{
|
||||||
|
pcm_channel() { }
|
||||||
|
|
||||||
|
// registers
|
||||||
|
uint8_t pitch_coarse;
|
||||||
|
uint8_t pitch_fine;
|
||||||
|
uint8_t pan_l;
|
||||||
|
uint8_t pan_r;
|
||||||
|
uint8_t rev_send;
|
||||||
|
uint8_t chorus_send;
|
||||||
|
uint8_t volume1;
|
||||||
|
uint8_t volume1_speed;
|
||||||
|
uint8_t volume2;
|
||||||
|
uint8_t volume2_speed;
|
||||||
|
uint8_t cutoff;
|
||||||
|
uint8_t cutoff_speed;
|
||||||
|
|
||||||
|
bool irq_enable; // 0
|
||||||
|
bool filter_mode; // 1 (0:lpf, 1:hpf)
|
||||||
|
uint8_t resonance_flags; // 8-15
|
||||||
|
|
||||||
|
uint8_t sub_phase_addr; // 0-4
|
||||||
|
bool key; // 5
|
||||||
|
bool alt_loop; // 6
|
||||||
|
bool reverse_play; // 7
|
||||||
|
uint8_t hiaddr; // 8-11
|
||||||
|
uint8_t nibble; // 2-15
|
||||||
|
|
||||||
|
// work variables
|
||||||
|
uint16_t sub_phase_state; // 0-13
|
||||||
|
bool irq_disable; // 14
|
||||||
|
bool alt_loop_state; // 15
|
||||||
|
|
||||||
|
uint16_t volume1_tv;
|
||||||
|
uint16_t volume2_tv;
|
||||||
|
uint16_t cutoff_tv;
|
||||||
|
};
|
||||||
|
|
||||||
|
devcb_write_line m_int_callback;
|
||||||
|
|
||||||
|
uint32_t m_clock; // clock
|
||||||
|
uint32_t m_rate; // sample rate (usually 32000 Hz)
|
||||||
|
sound_stream* m_stream; // stream handle
|
||||||
|
pcm_channel m_chns[NUM_CHANNELS]; // channel memory
|
||||||
|
[[maybe_unused]] uint8_t m_sel_chn; // selected channel
|
||||||
|
};
|
||||||
|
|
||||||
|
DECLARE_DEVICE_TYPE(TC6116, tc6116_device)
|
||||||
|
|
||||||
|
#endif // MAME_SOUND_ROLANDGP_H
|
@ -21,10 +21,10 @@
|
|||||||
// 02/03 - ?? (read after writing to 10/12)
|
// 02/03 - ?? (read after writing to 10/12)
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "rolandpcm.h"
|
#include "roland_lp.h"
|
||||||
|
|
||||||
|
|
||||||
DEFINE_DEVICE_TYPE(MB87419_MB87420, mb87419_mb87420_device, "mb87419_mb87420", "Roland MB87419/MB87420 PCM")
|
DEFINE_DEVICE_TYPE(MB87419_MB87420, mb87419_mb87420_device, "mb87419_mb87420", "Roland LP MB87419/MB87420 PCM")
|
||||||
|
|
||||||
mb87419_mb87420_device::mb87419_mb87420_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
mb87419_mb87420_device::mb87419_mb87420_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
: device_t(mconfig, MB87419_MB87420, tag, owner, clock)
|
: device_t(mconfig, MB87419_MB87420, tag, owner, clock)
|
@ -1,7 +1,7 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Valley Bell
|
// copyright-holders:Valley Bell
|
||||||
#ifndef MAME_SOUND_ROLANDPCM_H
|
#ifndef MAME_SOUND_ROLANDLP_H
|
||||||
#define MAME_SOUND_ROLANDPCM_H
|
#define MAME_SOUND_ROLANDLP_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
@ -66,4 +66,4 @@ private:
|
|||||||
|
|
||||||
DECLARE_DEVICE_TYPE(MB87419_MB87420, mb87419_mb87420_device)
|
DECLARE_DEVICE_TYPE(MB87419_MB87420, mb87419_mb87420_device)
|
||||||
|
|
||||||
#endif // MAME_SOUND_ROLANDPCM_H
|
#endif // MAME_SOUND_ROLANDLP_H
|
@ -5,6 +5,12 @@
|
|||||||
Toshiba T6963C Dot Matrix LCD Controller
|
Toshiba T6963C Dot Matrix LCD Controller
|
||||||
Sharp LM24014H Dot Matrix LCD Unit
|
Sharp LM24014H Dot Matrix LCD Unit
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- cursor
|
||||||
|
- screen peek
|
||||||
|
- screen copy
|
||||||
|
- auto read mode
|
||||||
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -51,6 +57,7 @@ t6963c_device::t6963c_device(const machine_config &mconfig, const char *tag, dev
|
|||||||
, m_font_size(6)
|
, m_font_size(6)
|
||||||
, m_number_cols(40)
|
, m_number_cols(40)
|
||||||
, m_number_lines(8)
|
, m_number_lines(8)
|
||||||
|
, m_read_data(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,6 +96,7 @@ void t6963c_device::device_start()
|
|||||||
save_item(NAME(m_font_size));
|
save_item(NAME(m_font_size));
|
||||||
save_item(NAME(m_number_cols));
|
save_item(NAME(m_number_cols));
|
||||||
save_item(NAME(m_number_lines));
|
save_item(NAME(m_number_lines));
|
||||||
|
save_item(NAME(m_read_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -117,7 +125,7 @@ void t6963c_device::device_reset()
|
|||||||
|
|
||||||
u8 t6963c_device::read(offs_t offset)
|
u8 t6963c_device::read(offs_t offset)
|
||||||
{
|
{
|
||||||
return BIT(offset, 0) ? 0x2b : 0x00;
|
return BIT(offset, 0) ? 0x2b : m_read_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -219,7 +227,7 @@ void t6963c_device::do_command(u8 cmd)
|
|||||||
if (cmd == 0x90)
|
if (cmd == 0x90)
|
||||||
LOG("%s: Display off\n", machine().describe_context());
|
LOG("%s: Display off\n", machine().describe_context());
|
||||||
else
|
else
|
||||||
LOG("%s: Text %s, graphic %s, cursor %s, blink %s\n",
|
LOG("%s: Graphic %s, text %s, cursor %s, blink %s\n",
|
||||||
machine().describe_context(),
|
machine().describe_context(),
|
||||||
BIT(cmd, 3) ? "on" : "off",
|
BIT(cmd, 3) ? "on" : "off",
|
||||||
BIT(cmd, 2) ? "on" : "off",
|
BIT(cmd, 2) ? "on" : "off",
|
||||||
@ -251,6 +259,7 @@ void t6963c_device::do_command(u8 cmd)
|
|||||||
: (cmd & 0x0e) == 0x02 ? "decrement"
|
: (cmd & 0x0e) == 0x02 ? "decrement"
|
||||||
: (cmd & 0x0e) == 0x04 ? "nonvariable"
|
: (cmd & 0x0e) == 0x04 ? "nonvariable"
|
||||||
: "invalid");
|
: "invalid");
|
||||||
|
m_read_data = m_display_ram->read_byte(m_adp);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -327,7 +336,7 @@ uint32_t t6963c_device::screen_update(screen_device &screen, bitmap_ind16 &bitma
|
|||||||
bitmap.fill(0, cliprect);
|
bitmap.fill(0, cliprect);
|
||||||
|
|
||||||
// Text layer
|
// Text layer
|
||||||
if (BIT(m_display_mode, 3))
|
if (BIT(m_display_mode, 2))
|
||||||
{
|
{
|
||||||
offs = m_text_home;
|
offs = m_text_home;
|
||||||
for(int y=0; y<m_number_lines; y++)
|
for(int y=0; y<m_number_lines; y++)
|
||||||
@ -354,7 +363,7 @@ uint32_t t6963c_device::screen_update(screen_device &screen, bitmap_ind16 &bitma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Graphic layer
|
// Graphic layer
|
||||||
if (BIT(m_display_mode, 2))
|
if (BIT(m_display_mode, 3))
|
||||||
{
|
{
|
||||||
offs = m_graphic_home;
|
offs = m_graphic_home;
|
||||||
for(int y=0; y<m_number_lines*8; y++)
|
for(int y=0; y<m_number_lines*8; y++)
|
||||||
|
@ -78,6 +78,7 @@ private:
|
|||||||
u8 m_font_size;
|
u8 m_font_size;
|
||||||
u8 m_number_cols;
|
u8 m_number_cols;
|
||||||
u8 m_number_lines;
|
u8 m_number_lines;
|
||||||
|
u8 m_read_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ======================> lm24014h_device
|
// ======================> lm24014h_device
|
||||||
|
@ -256,7 +256,7 @@ Some routine locations
|
|||||||
#include "cpu/mcs96/i8x9x.h"
|
#include "cpu/mcs96/i8x9x.h"
|
||||||
#include "machine/ram.h"
|
#include "machine/ram.h"
|
||||||
#include "machine/timer.h"
|
#include "machine/timer.h"
|
||||||
#include "sound/rolandpcm.h"
|
#include "sound/roland_lp.h"
|
||||||
#include "video/msm6222b.h"
|
#include "video/msm6222b.h"
|
||||||
#include "bus/generic/slot.h"
|
#include "bus/generic/slot.h"
|
||||||
#include "bus/generic/carts.h"
|
#include "bus/generic/carts.h"
|
||||||
|
@ -122,7 +122,7 @@ ROM_START(d50) // Newer PCB with silkscreen "Roland || D-50, D-550 || MAIN BOARD
|
|||||||
// missing 2.00
|
// missing 2.00
|
||||||
|
|
||||||
ROM_REGION(0x2000, "maincpu", 0)
|
ROM_REGION(0x2000, "maincpu", 0)
|
||||||
ROM_LOAD("d78312g-022_15179266.ic25", 0x0000, 0x2000, NO_DUMP) // 8-digit Roland part number not printed on IC
|
ROM_LOAD("d78312g-022_15179266.ic25", 0x0000, 0x2000, CRC(9564903f) SHA1(f68ed97a06764ee000fe6e9d7b39017165f0efc4)) // 8-digit Roland part number not printed on IC
|
||||||
ROM_COPY("progrom", 0x0000, 0x0000, 0x2000)
|
ROM_COPY("progrom", 0x0000, 0x0000, 0x2000)
|
||||||
|
|
||||||
ROM_REGION(0x80000, "pcm", 0)
|
ROM_REGION(0x80000, "pcm", 0)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#include "cpu/mcs96/i8x9x.h"
|
#include "cpu/mcs96/i8x9x.h"
|
||||||
#include "cpu/mcs96/i8xc196.h"
|
#include "cpu/mcs96/i8xc196.h"
|
||||||
#include "machine/timer.h"
|
#include "machine/timer.h"
|
||||||
#include "sound/rolandpcm.h"
|
#include "sound/roland_lp.h"
|
||||||
#include "video/t6963c.h"
|
#include "video/t6963c.h"
|
||||||
|
|
||||||
#include "emupal.h"
|
#include "emupal.h"
|
||||||
@ -352,12 +352,12 @@ void roland_d70_state::dsp_io_w(offs_t offset, u8 data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
u8 roland_d70_state::tvf_io_r(offs_t offset) {
|
u8 roland_d70_state::tvf_io_r(offs_t offset) {
|
||||||
logerror("tvf read %x\n", offset);
|
logerror("tvf read %04x\n", offset);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void roland_d70_state::tvf_io_w(offs_t offset, u8 data) {
|
void roland_d70_state::tvf_io_w(offs_t offset, u8 data) {
|
||||||
logerror("twf write $x= %x\n", offset, data);
|
logerror("tvf write %04x= %02x\n", offset, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 roland_d70_state::snd_io_r(offs_t offset) {
|
u8 roland_d70_state::snd_io_r(offs_t offset) {
|
||||||
@ -494,11 +494,11 @@ void roland_d70_state::init_d70() {
|
|||||||
u8 *dst = reinterpret_cast<u8 *>(memregion("pcm")->base());
|
u8 *dst = reinterpret_cast<u8 *>(memregion("pcm")->base());
|
||||||
// descramble internal ROMs
|
// descramble internal ROMs
|
||||||
descramble_rom_internal(&dst[0x000000], &src[0x000000]);
|
descramble_rom_internal(&dst[0x000000], &src[0x000000]);
|
||||||
|
descramble_rom_internal(&dst[0x080000], &src[0x080000]);
|
||||||
descramble_rom_internal(&dst[0x100000], &src[0x100000]);
|
descramble_rom_internal(&dst[0x100000], &src[0x100000]);
|
||||||
|
descramble_rom_internal(&dst[0x180000], &src[0x180000]);
|
||||||
descramble_rom_internal(&dst[0x200000], &src[0x200000]);
|
descramble_rom_internal(&dst[0x200000], &src[0x200000]);
|
||||||
descramble_rom_internal(&dst[0x300000], &src[0x300000]);
|
descramble_rom_internal(&dst[0x300000], &src[0x300000]);
|
||||||
descramble_rom_internal(&dst[0x400000], &src[0x400000]);
|
|
||||||
descramble_rom_internal(&dst[0x500000], &src[0x500000]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void roland_d70_state::descramble_rom_internal(u8 *dst, const u8 *src) {
|
void roland_d70_state::descramble_rom_internal(u8 *dst, const u8 *src) {
|
||||||
@ -515,11 +515,11 @@ ROM_START(d70)
|
|||||||
|
|
||||||
ROM_REGION(0x600000, "pcmorg", 0) // ROMs before descrambling
|
ROM_REGION(0x600000, "pcmorg", 0) // ROMs before descrambling
|
||||||
ROM_LOAD("roland_d70_waverom-a.bin", 0x000000, 0x80000, CRC(8e53b2a3) SHA1(4872530870d5079776e80e477febe425dc0ec1df))
|
ROM_LOAD("roland_d70_waverom-a.bin", 0x000000, 0x80000, CRC(8e53b2a3) SHA1(4872530870d5079776e80e477febe425dc0ec1df))
|
||||||
|
ROM_LOAD("roland_d70_waverom-e.bin", 0x080000, 0x80000, CRC(d46cc7a4) SHA1(d378ac89a5963e37f7c157b3c8e71892c334fd7b))
|
||||||
ROM_LOAD("roland_d70_waverom-b.bin", 0x100000, 0x80000, CRC(c8220761) SHA1(49e55fa672020f95fd9c858ceaae94d6db93df7d))
|
ROM_LOAD("roland_d70_waverom-b.bin", 0x100000, 0x80000, CRC(c8220761) SHA1(49e55fa672020f95fd9c858ceaae94d6db93df7d))
|
||||||
|
ROM_LOAD("roland_d70_waverom-f.bin", 0x180000, 0x80000, CRC(d4b01f5e) SHA1(acd867d68e49e5f59f1006ed14a7ca197b6dc4af))
|
||||||
ROM_LOAD("roland_d70_waverom-c.bin", 0x200000, 0x80000, CRC(733c4054) SHA1(9b6b59ab74e5bf838702abb087c408aaa85b7b1f))
|
ROM_LOAD("roland_d70_waverom-c.bin", 0x200000, 0x80000, CRC(733c4054) SHA1(9b6b59ab74e5bf838702abb087c408aaa85b7b1f))
|
||||||
ROM_LOAD("roland_d70_waverom-d.bin", 0x300000, 0x80000, CRC(b6c662d2) SHA1(3fcbcfd0d8d0fa419c710304c12482e2f79a907f))
|
ROM_LOAD("roland_d70_waverom-d.bin", 0x300000, 0x80000, CRC(b6c662d2) SHA1(3fcbcfd0d8d0fa419c710304c12482e2f79a907f))
|
||||||
ROM_LOAD("roland_d70_waverom-e.bin", 0x400000, 0x80000, CRC(d46cc7a4) SHA1(d378ac89a5963e37f7c157b3c8e71892c334fd7b))
|
|
||||||
ROM_LOAD("roland_d70_waverom-f.bin", 0x500000, 0x80000, CRC(d4b01f5e) SHA1(acd867d68e49e5f59f1006ed14a7ca197b6dc4af))
|
|
||||||
ROM_REGION(0x600000, "pcm", ROMREGION_ERASEFF) // ROMs after descrambling
|
ROM_REGION(0x600000, "pcm", ROMREGION_ERASEFF) // ROMs after descrambling
|
||||||
|
|
||||||
ROM_REGION(0x400, "lcd:cgrom", 0)
|
ROM_REGION(0x400, "lcd:cgrom", 0)
|
||||||
|
@ -2,13 +2,15 @@
|
|||||||
// copyright-holders:AJR
|
// copyright-holders:AJR
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
|
||||||
Skeleton driver for Roland JV-80 & JV-880 synthesizers.
|
Skeleton driver for Roland JV-80, JV-880 and related synthesizers.
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
#include "cpu/h8500/h8510.h"
|
||||||
#include "cpu/h8500/h8532.h"
|
#include "cpu/h8500/h8532.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
|
#include "sound/roland_gp.h"
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -19,25 +21,30 @@ public:
|
|||||||
roland_jv80_state(const machine_config &mconfig, device_type type, const char *tag)
|
roland_jv80_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag)
|
: driver_device(mconfig, type, tag)
|
||||||
, m_maincpu(*this, "maincpu")
|
, m_maincpu(*this, "maincpu")
|
||||||
|
, m_pcm(*this, "pcm")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void jv880(machine_config &config);
|
void jv880(machine_config &config);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void mem_map(address_map &map);
|
void jv880_mem_map(address_map &map);
|
||||||
|
|
||||||
required_device<h8532_device> m_maincpu;
|
required_device<h8532_device> m_maincpu;
|
||||||
|
required_device<tc6116_device> m_pcm;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void roland_jv80_state::mem_map(address_map &map)
|
void roland_jv80_state::jv880_mem_map(address_map &map)
|
||||||
{
|
{
|
||||||
map(0x08000, 0x09fff).ram();
|
map(0x00000, 0x07fff).rom().region("maincpu", 0);
|
||||||
|
map(0x08000, 0x0dfff).ram().mirror(0xa0000);
|
||||||
|
map(0x0f000, 0x0f3ff).rw(m_pcm, FUNC(tc6116_device::read), FUNC(tc6116_device::write));
|
||||||
map(0x10000, 0x3ffff).rom().region("progrom", 0x10000);
|
map(0x10000, 0x3ffff).rom().region("progrom", 0x10000);
|
||||||
map(0x40000, 0x4ffff).rom().region("progrom", 0);
|
map(0x40000, 0x4ffff).rom().region("progrom", 0);
|
||||||
map(0xa0000, 0xa7fff).ram();
|
map(0xa0000, 0xbffff).ram();
|
||||||
map(0xe0000, 0xe7fff).ram().share("nvram");
|
map(0xc0000, 0xd7fff).ram().share("nvram");
|
||||||
|
// map(0xe0000, 0xf7fff).ram().share("cardram");
|
||||||
}
|
}
|
||||||
|
|
||||||
static INPUT_PORTS_START(jv880)
|
static INPUT_PORTS_START(jv880)
|
||||||
@ -46,11 +53,61 @@ INPUT_PORTS_END
|
|||||||
void roland_jv80_state::jv880(machine_config &config)
|
void roland_jv80_state::jv880(machine_config &config)
|
||||||
{
|
{
|
||||||
HD6435328(config, m_maincpu, 20_MHz_XTAL);
|
HD6435328(config, m_maincpu, 20_MHz_XTAL);
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &roland_jv80_state::mem_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &roland_jv80_state::jv880_mem_map);
|
||||||
|
|
||||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // LC36256AML-10 (IC18) + CR2032 battery
|
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // LC36256AML-10 (IC18) + CR2032 battery
|
||||||
|
|
||||||
//TC6116(config, "pcm", 23.2_MHz_XTAL);
|
TC6116(config, "pcm", 23.2_MHz_XTAL);
|
||||||
|
}
|
||||||
|
|
||||||
|
class roland_rd500_state : public driver_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
roland_rd500_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
|
: driver_device(mconfig, type, tag)
|
||||||
|
, m_maincpu(*this, "maincpu")
|
||||||
|
, m_pcm(*this, "pcm")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void rd500(machine_config &config);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void rd500_mem_map(address_map &map);
|
||||||
|
|
||||||
|
u8 keyscan_r(offs_t offset);
|
||||||
|
void keyscan_w(offs_t offset, u8 data);
|
||||||
|
|
||||||
|
required_device<h8510_device> m_maincpu;
|
||||||
|
required_device<tc6116_device> m_pcm;
|
||||||
|
};
|
||||||
|
|
||||||
|
void roland_rd500_state::rd500_mem_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x000000, 0x8fffff).rom().region("progrom", 0);
|
||||||
|
map(0x900000, 0x90ffff).ram();
|
||||||
|
map(0xa00000, 0xa0ffff).rw(m_pcm, FUNC(tc6116_device::read), FUNC(tc6116_device::write));
|
||||||
|
map(0xc00000, 0xc0ffff).rw(FUNC(roland_rd500_state::keyscan_r), FUNC(roland_rd500_state::keyscan_w));
|
||||||
|
}
|
||||||
|
|
||||||
|
u8 roland_rd500_state::keyscan_r(offs_t offset)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void roland_rd500_state::keyscan_w(offs_t offset, u8 data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static INPUT_PORTS_START(rd500)
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
void roland_rd500_state::rd500(machine_config &config)
|
||||||
|
{
|
||||||
|
HD6415108(config, m_maincpu, 20_MHz_XTAL);
|
||||||
|
m_maincpu->set_addrmap(AS_PROGRAM, &roland_rd500_state::rd500_mem_map);
|
||||||
|
|
||||||
|
TC6116(config, "pcm", 23.2_MHz_XTAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ROM_START(jv880)
|
ROM_START(jv880)
|
||||||
@ -70,8 +127,20 @@ ROM_START(jv880)
|
|||||||
ROM_LOAD("roland-b_r15209313_lh5375n3.ic25", 0x200000, 0x200000, CRC(d55fcf90) SHA1(963ce75b6668dab377d3a2fd895630a745491be5))
|
ROM_LOAD("roland-b_r15209313_lh5375n3.ic25", 0x200000, 0x200000, CRC(d55fcf90) SHA1(963ce75b6668dab377d3a2fd895630a745491be5))
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START(rd500)
|
||||||
|
ROM_REGION(0x80000, "progrom", 0)
|
||||||
|
ROM_LOAD("rd500_rom.bin", 0x00000, 0x80000, CRC(668fc7e9) SHA1(59e28d3e2190902dd6fd02a9820f96e383781178))
|
||||||
|
|
||||||
|
ROM_REGION(0x400000, "waverom", 0)
|
||||||
|
ROM_LOAD("roland-a_r00342978.ic4", 0x000000, 0x200000, CRC(c885bf4f) SHA1(e14f0f4a8181e09fae7db10130e4ed3cd6bf5a34))
|
||||||
|
ROM_LOAD("roland-b_r00343012.ic5", 0x200000, 0x200000, CRC(ceb02d33) SHA1(9f6969d94598c68902188085d0c91fb8b300d762))
|
||||||
|
ROM_LOAD("roland-c_r00343023.ic6", 0x400000, 0x200000, CRC(f627cdb7) SHA1(7b834fee5db5a7377ec7f66172d0fa3096cefbc9))
|
||||||
|
ROM_LOAD("roland-d_r00343034.ic7", 0x600000, 0x200000, CRC(c06be973) SHA1(2e7ce8a91a6f92648f73d7ff8c1d608f62df9aab))
|
||||||
|
ROM_END
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
//SYST(1992, jv80, 0, 0, jv80, jv80, roland_jv80_state, empty_init, "Roland", "JV-80 Multi Timbral Synthesizer", MACHINE_IS_SKELETON)
|
//SYST(1992, jv80, 0, 0, jv80, jv80, roland_jv80_state, empty_init, "Roland", "JV-80 Multi Timbral Synthesizer", MACHINE_IS_SKELETON)
|
||||||
SYST(1992, jv880, 0, 0, jv880, jv880, roland_jv80_state, empty_init, "Roland", "JV-880 Multi Timbral Synthesizer Module", MACHINE_IS_SKELETON)
|
SYST(1992, jv880, 0, 0, jv880, jv880, roland_jv80_state, empty_init, "Roland", "JV-880 Multi Timbral Synthesizer Module", MACHINE_IS_SKELETON)
|
||||||
|
SYST(1994, rd500, 0, 0, rd500, rd500, roland_rd500_state, empty_init, "Roland", "RD-500 Digital Piano", MACHINE_IS_SKELETON)
|
||||||
|
@ -79,7 +79,7 @@ R8 mkII doesn't seem to store the tone list in the program ROM.
|
|||||||
#include "bus/generic/slot.h"
|
#include "bus/generic/slot.h"
|
||||||
#include "cpu/upd78k/upd78k2.h"
|
#include "cpu/upd78k/upd78k2.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
#include "sound/rolandpcm.h"
|
#include "sound/roland_lp.h"
|
||||||
|
|
||||||
#include "softlist_dev.h"
|
#include "softlist_dev.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/mcs96/i8x9x.h"
|
#include "cpu/mcs96/i8x9x.h"
|
||||||
#include "sound/rolandpcm.h"
|
#include "sound/roland_lp.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user