mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
New machines marked as NOT_WORKING
---------------------------------- Roland PR-100 Digital Sequencer [AJR, Valley Bell]
This commit is contained in:
parent
1da36f8ce5
commit
daa6c94699
@ -3436,6 +3436,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/roland_jx8p.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/roland_mc50.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/roland_mt32.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/roland_pr100.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/roland_r8.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/roland_ra30.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/roland_s10.cpp",
|
||||
@ -3460,6 +3461,8 @@ files {
|
||||
MAME_DIR .. "src/mame/machine/mb62h195.h",
|
||||
MAME_DIR .. "src/mame/machine/mb63h149.cpp",
|
||||
MAME_DIR .. "src/mame/machine/mb63h149.h",
|
||||
MAME_DIR .. "src/mame/machine/mb87013.cpp",
|
||||
MAME_DIR .. "src/mame/machine/mb87013.h",
|
||||
MAME_DIR .. "src/mame/machine/pg200.cpp",
|
||||
MAME_DIR .. "src/mame/machine/pg200.h",
|
||||
}
|
||||
|
121
src/mame/drivers/roland_pr100.cpp
Normal file
121
src/mame/drivers/roland_pr100.cpp
Normal file
@ -0,0 +1,121 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/*************************************************************************************************
|
||||
|
||||
Skeleton driver for Roland PR-100 MIDI sequencer.
|
||||
|
||||
There are two custom gate arrays: M60012-0105SP on the main board and M6003A-0117SP on the
|
||||
panel board. The main board gate array multiplexes addresses for the four MB81464 DRAMs and
|
||||
decodes all CPU I/O space accesses. It also generates a "metronome" signal which is this
|
||||
device's only audio output. The panel board's gate array is almost entirely controlled by
|
||||
the main gate array, with only the reset and power signals generated independently.
|
||||
|
||||
The LCD unit is a DM0815.
|
||||
|
||||
*************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
//#include "bus/midi/midi.h"
|
||||
#include "cpu/z180/z180.h"
|
||||
#include "machine/eepromser.h"
|
||||
#include "machine/input_merger.h"
|
||||
#include "machine/i8251.h"
|
||||
#include "machine/mb87013.h"
|
||||
|
||||
class roland_pr100_state : public driver_device
|
||||
{
|
||||
public:
|
||||
roland_pr100_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_eeprom(*this, "eeprom")
|
||||
, m_port9x(0)
|
||||
{
|
||||
}
|
||||
|
||||
void pr100(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
private:
|
||||
u8 port9x_r(offs_t offset);
|
||||
void port9x_w(offs_t offset, u8 data);
|
||||
|
||||
void mem_map(address_map &map);
|
||||
void io_map(address_map &map);
|
||||
|
||||
required_device<z180_device> m_maincpu;
|
||||
required_device<eeprom_serial_93cxx_device> m_eeprom;
|
||||
|
||||
u8 m_port9x;
|
||||
};
|
||||
|
||||
void roland_pr100_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_port9x));
|
||||
}
|
||||
|
||||
u8 roland_pr100_state::port9x_r(offs_t offset)
|
||||
{
|
||||
return m_port9x;
|
||||
}
|
||||
|
||||
void roland_pr100_state::port9x_w(offs_t offset, u8 data)
|
||||
{
|
||||
logerror("port%02X = %02X\n", offset + 0x90, data);
|
||||
m_port9x = data;
|
||||
}
|
||||
|
||||
|
||||
void roland_pr100_state::mem_map(address_map &map)
|
||||
{
|
||||
map.global_mask(0x3ffff); // A18 not connected
|
||||
map(0x00000, 0x0ffff).mirror(0x10000).rom().region("program", 0); // CE = A17
|
||||
map(0x20000, 0x3ffff).ram();
|
||||
}
|
||||
|
||||
void roland_pr100_state::io_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x003f).noprw(); // internal
|
||||
map(0x0090, 0x0093).mirror(0xff00).rw(FUNC(roland_pr100_state::port9x_r), FUNC(roland_pr100_state::port9x_w)); // EEPROM I/O?
|
||||
map(0x00a0, 0x00a3).rw("qdc", FUNC(mb87013_device::read), FUNC(mb87013_device::write));
|
||||
}
|
||||
|
||||
|
||||
static INPUT_PORTS_START(pr100)
|
||||
INPUT_PORTS_END
|
||||
|
||||
void roland_pr100_state::pr100(machine_config &config)
|
||||
{
|
||||
HD64180RP(config, m_maincpu, 10_MHz_XTAL); // HD64B180R0P
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &roland_pr100_state::mem_map);
|
||||
m_maincpu->set_addrmap(AS_IO, &roland_pr100_state::io_map);
|
||||
|
||||
mb87013_device &qdc(MB87013(config, "qdc", 6.5_MHz_XTAL));
|
||||
qdc.sio_rd_callback().set("sio", FUNC(i8251_device::read));
|
||||
qdc.sio_wr_callback().set("sio", FUNC(i8251_device::write));
|
||||
qdc.txc_callback().set("sio", FUNC(i8251_device::write_txc));
|
||||
qdc.rxc_callback().set("sio", FUNC(i8251_device::write_rxc));
|
||||
qdc.rxd_callback().set("sio", FUNC(i8251_device::write_rxd));
|
||||
qdc.dsr_callback().set("sio", FUNC(i8251_device::write_dsr));
|
||||
qdc.op4_callback().set("qdc", FUNC(mb87013_device::rts_w));
|
||||
|
||||
i8251_device &sio(I8251(config, "sio", 6.5_MHz_XTAL)); // MB89251
|
||||
sio.dtr_handler().set("qdc", FUNC(mb87013_device::dtr_w));
|
||||
sio.txd_handler().set("qdc", FUNC(mb87013_device::txd_w));
|
||||
sio.rxrdy_handler().set("siodrq", FUNC(input_merger_device::in_w<0>));
|
||||
sio.txrdy_handler().set("siodrq", FUNC(input_merger_device::in_w<0>));
|
||||
sio.write_cts(0);
|
||||
|
||||
INPUT_MERGER_ANY_HIGH(config, "siodrq").output_handler().set_inputline(m_maincpu, Z180_INPUT_LINE_DREQ1); // 74ALS08
|
||||
|
||||
EEPROM_93C46_16BIT(config, m_eeprom); // HY93C46
|
||||
}
|
||||
|
||||
ROM_START(pr100)
|
||||
ROM_REGION(0x10000, "program", 0)
|
||||
ROM_LOAD("roland_mbm27c512-20.ic10", 0x00000, 0x10000, CRC(41160b69) SHA1(11e5fb001dd004a5625d9a75fb1acac4ade614c8))
|
||||
ROM_END
|
||||
|
||||
SYST(1987, pr100, 0, 0, pr100, pr100, roland_pr100_state, empty_init, "Roland", "PR-100 Digital Sequencer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
|
@ -18,6 +18,7 @@
|
||||
#include "machine/i8251.h"
|
||||
#include "machine/mb62h195.h"
|
||||
#include "machine/mb63h149.h"
|
||||
#include "machine/mb87013.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "machine/rescap.h"
|
||||
#include "machine/upd7001.h"
|
||||
@ -32,7 +33,6 @@ public:
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_io(*this, "io")
|
||||
, m_usart(*this, "usart")
|
||||
, m_lcdc(*this, "lcdc")
|
||||
, m_sampler(*this, "sampler")
|
||||
{
|
||||
@ -44,8 +44,6 @@ public:
|
||||
protected:
|
||||
HD44780_PIXEL_UPDATE(lcd_pixel_update);
|
||||
|
||||
u8 qdd_r(offs_t offset);
|
||||
void qdd_w(offs_t offset, u8 data);
|
||||
void lcd_data_w(offs_t offset, u8 data);
|
||||
void led_data_w(offs_t offset, u8 data);
|
||||
u8 sw_scan_r(offs_t offset);
|
||||
@ -60,7 +58,6 @@ protected:
|
||||
|
||||
required_device<mcs51_cpu_device> m_maincpu;
|
||||
required_device<mb62h195_device> m_io;
|
||||
required_device<i8251_device> m_usart;
|
||||
required_device<hd44780_device> m_lcdc;
|
||||
required_device<sa16_base_device> m_sampler;
|
||||
};
|
||||
@ -102,20 +99,6 @@ HD44780_PIXEL_UPDATE(roland_s220_state::lcd_pixel_update)
|
||||
bitmap.pix(line * 8 + y, pos * 6 + x) = state;
|
||||
}
|
||||
|
||||
u8 roland_s10_state::qdd_r(offs_t offset)
|
||||
{
|
||||
if (!BIT(offset, 1))
|
||||
return m_usart->read(offset);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void roland_s10_state::qdd_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (!BIT(offset, 1))
|
||||
m_usart->write(offset, data);
|
||||
}
|
||||
|
||||
void roland_s10_state::lcd_data_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (offset == 0)
|
||||
@ -165,7 +148,7 @@ void roland_s10_state::prog_map(address_map &map)
|
||||
|
||||
void roland_s10_state::mks100_ext_map(address_map &map)
|
||||
{
|
||||
map(0x4000, 0x4003).mirror(0xffc).rw(FUNC(roland_s10_state::qdd_r), FUNC(roland_s10_state::qdd_w));
|
||||
map(0x4000, 0x4003).mirror(0xffc).rw("qddia", FUNC(mb87013_device::read), FUNC(mb87013_device::write));
|
||||
map(0x6000, 0x7fff).ram().share("nvram");
|
||||
map(0x8000, 0x80ff).mirror(0xf00).w(FUNC(roland_s10_state::lcd_data_w));
|
||||
map(0x9000, 0x90ff).mirror(0xf00).w(FUNC(roland_s10_state::led_data_w));
|
||||
@ -184,7 +167,7 @@ void roland_s10_state::s10_ext_map(address_map &map)
|
||||
void roland_s220_state::s220_ext_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0x000f).mirror(0x3ff0).w(FUNC(roland_s220_state::output_control_w));
|
||||
map(0x4000, 0x4003).mirror(0xffc).rw(FUNC(roland_s220_state::qdd_r), FUNC(roland_s220_state::qdd_w));
|
||||
map(0x4000, 0x4003).mirror(0xffc).rw("qddia", FUNC(mb87013_device::read), FUNC(mb87013_device::write));
|
||||
map(0x5000, 0x5000).mirror(0xfff).w(FUNC(roland_s220_state::led_latch1_w));
|
||||
map(0x6000, 0x7fff).ram().share("nvram");
|
||||
map(0x8000, 0x80ff).mirror(0xf00).w(FUNC(roland_s220_state::lcd_data_w));
|
||||
@ -225,9 +208,18 @@ void roland_s10_state::s10(machine_config &config)
|
||||
|
||||
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5564PL-20 + battery
|
||||
|
||||
I8251(config, m_usart, 6.5_MHz_XTAL / 2); // MB89251A
|
||||
i8251_device &usart(I8251(config, "usart", 6.5_MHz_XTAL)); // MB89251A
|
||||
usart.dtr_handler().set("qddia", FUNC(mb87013_device::dtr_w));
|
||||
usart.txd_handler().set("qddia", FUNC(mb87013_device::txd_w));
|
||||
|
||||
//MB87013(config, "qddia", 6.5_MHz_XTAL);
|
||||
mb87013_device &qddia(MB87013(config, "qddia", 6.5_MHz_XTAL));
|
||||
qddia.sio_rd_callback().set("usart", FUNC(i8251_device::read));
|
||||
qddia.sio_wr_callback().set("usart", FUNC(i8251_device::write));
|
||||
qddia.txc_callback().set("usart", FUNC(i8251_device::write_txc));
|
||||
qddia.rxc_callback().set("usart", FUNC(i8251_device::write_rxc));
|
||||
qddia.rxd_callback().set("usart", FUNC(i8251_device::write_rxd));
|
||||
qddia.dsr_callback().set("usart", FUNC(i8251_device::write_dsr));
|
||||
qddia.op4_callback().set("qddia", FUNC(mb87013_device::rts_w));
|
||||
|
||||
mb63h149_device &keyscan(MB63H149(config, "keyscan", 12_MHz_XTAL));
|
||||
keyscan.int_callback().set_inputline(m_maincpu, MCS51_T1_LINE);
|
||||
|
150
src/mame/machine/mb87013.cpp
Normal file
150
src/mame/machine/mb87013.cpp
Normal file
@ -0,0 +1,150 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/***************************************************************************
|
||||
|
||||
Roland MB87013 QD (Quick Disk) Drive Interface Adapter
|
||||
|
||||
This device uses a MB89251 (Intel 8251 compatible USART) to serialize
|
||||
and deserialize the disk data. The two ICs appear to be clocked at the
|
||||
same 6.5 MHz rate, and they have address, data, RD and WR signals in
|
||||
common.
|
||||
|
||||
The OP4 and RTS pins are usually bridged.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "mb87013.h"
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
// device type definition
|
||||
DEFINE_DEVICE_TYPE(MB87013, mb87013_device, "mb87013", "Roland MB87013 QDC")
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// mb87013_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
mb87013_device::mb87013_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, MB87013, tag, owner, clock)
|
||||
, m_sio_rd_callback(*this)
|
||||
, m_sio_wr_callback(*this)
|
||||
, m_txc_callback(*this)
|
||||
, m_rxc_callback(*this)
|
||||
, m_rxd_callback(*this)
|
||||
, m_dsr_callback(*this)
|
||||
, m_op4_callback(*this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_resolve_objects - resolve objects that
|
||||
// may be needed for other devices to set
|
||||
// initial conditions at start time
|
||||
//-------------------------------------------------
|
||||
|
||||
void mb87013_device::device_resolve_objects()
|
||||
{
|
||||
m_sio_rd_callback.resolve_safe(0);
|
||||
m_sio_wr_callback.resolve_safe();
|
||||
m_txc_callback.resolve_safe();
|
||||
m_rxc_callback.resolve_safe();
|
||||
m_rxd_callback.resolve_safe();
|
||||
m_dsr_callback.resolve_safe();
|
||||
m_op4_callback.resolve_safe();
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void mb87013_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void mb87013_device::device_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read - CPU read from QDC/SIO
|
||||
//-------------------------------------------------
|
||||
|
||||
u8 mb87013_device::read(offs_t offset)
|
||||
{
|
||||
if (!BIT(offset, 1))
|
||||
return m_sio_rd_callback(offset);
|
||||
|
||||
// TODO
|
||||
if (BIT(offset, 0))
|
||||
logerror("%s: Reading data from control register or CRC register (LSB)\n", machine().describe_context());
|
||||
else
|
||||
logerror("%s: Reading data from CRC register (MSB)\n", machine().describe_context());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// write - CPU write to QDC/SIO
|
||||
//-------------------------------------------------
|
||||
|
||||
void mb87013_device::write(offs_t offset, u8 data)
|
||||
{
|
||||
if (!BIT(offset, 1))
|
||||
{
|
||||
// TODO: A1 = 0 & A0 = 0 writes data to both devices
|
||||
m_sio_wr_callback(offset, data);
|
||||
return;
|
||||
}
|
||||
|
||||
// TODO
|
||||
if (BIT(offset, 0))
|
||||
logerror("%s: Writing %02X to control register\n", machine().describe_context(), data);
|
||||
else
|
||||
logerror("%s: Writing %02X to data register\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// dtr_w - SIO control line write to enable
|
||||
// MFM modulator
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER(mb87013_device::dtr_w)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// txd_w - SIO line write of data to be MFM
|
||||
// modulated by QDC
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER(mb87013_device::txd_w)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rts_w - line write to enable transfer of
|
||||
// data through RxC and RxD
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE_LINE_MEMBER(mb87013_device::rts_w)
|
||||
{
|
||||
}
|
90
src/mame/machine/mb87013.h
Normal file
90
src/mame/machine/mb87013.h
Normal file
@ -0,0 +1,90 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
/***************************************************************************
|
||||
|
||||
Roland MB87013 QD (Quick Disk) Drive Interface Adapter
|
||||
|
||||
****************************************************************************
|
||||
_____ _____
|
||||
D2 1 |* \_/ | 40 D1
|
||||
D3 2 | | 39 D0
|
||||
D4 3 | | 38 N. C.
|
||||
D5 4 | | 37 RXDA
|
||||
D6 5 | | 36 RXCA
|
||||
D7 6 | | 35 N. C.
|
||||
N. C. 7 | | 34 TXCA
|
||||
A0 8 | | 33 TXDA
|
||||
A1 9 | | 32 INIB
|
||||
Vss 10 | | 31 TST
|
||||
ISCB 11 | MB87013 | 30 VDD
|
||||
RSTB 12 | | 29 OCSB
|
||||
RDB 13 | | 28 INIT
|
||||
WRB 14 | | 27 IP0
|
||||
DTRB 15 | | 26 WRDT
|
||||
RTSB 16 | | 25 WRGA
|
||||
OP4 17 | | 24 RDT
|
||||
OP3 18 | | 23 IP1
|
||||
N. C. 19 | | 22 IP2
|
||||
XTAL 20 |_____________| 21 EXTAL
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef MAME_MACHINE_MB87013_H
|
||||
#define MAME_MACHINE_MB87013_H
|
||||
|
||||
#pragma once
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> mb87013_device
|
||||
|
||||
class mb87013_device : public device_t
|
||||
{
|
||||
public:
|
||||
// device type constructor
|
||||
mb87013_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
static constexpr feature_type unemulated_features() { return feature::DISK; }
|
||||
|
||||
// configuration
|
||||
auto sio_rd_callback() { return m_sio_rd_callback.bind(); }
|
||||
auto sio_wr_callback() { return m_sio_wr_callback.bind(); }
|
||||
auto txc_callback() { return m_txc_callback.bind(); }
|
||||
auto rxc_callback() { return m_rxc_callback.bind(); }
|
||||
auto rxd_callback() { return m_rxd_callback.bind(); }
|
||||
auto dsr_callback() { return m_dsr_callback.bind(); }
|
||||
auto op4_callback() { return m_op4_callback.bind(); }
|
||||
|
||||
// CPU read/write handlers
|
||||
u8 read(offs_t offset);
|
||||
void write(offs_t offset, u8 data);
|
||||
|
||||
// line write handlers
|
||||
DECLARE_WRITE_LINE_MEMBER(dtr_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(txd_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(rts_w);
|
||||
|
||||
protected:
|
||||
// device-specific overrides
|
||||
virtual void device_resolve_objects() override;
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
private:
|
||||
// callback objects
|
||||
devcb_read8 m_sio_rd_callback;
|
||||
devcb_write8 m_sio_wr_callback;
|
||||
devcb_write_line m_txc_callback;
|
||||
devcb_write_line m_rxc_callback;
|
||||
devcb_write_line m_rxd_callback;
|
||||
devcb_write_line m_dsr_callback;
|
||||
devcb_write_line m_op4_callback;
|
||||
};
|
||||
|
||||
|
||||
// device type declaration
|
||||
DECLARE_DEVICE_TYPE(MB87013, mb87013_device)
|
||||
|
||||
#endif // MAME_MACHINE_MB87013_H
|
@ -35913,6 +35913,9 @@ mc50mk2 //
|
||||
cm32l //
|
||||
mt32 //
|
||||
|
||||
@source:roland_pr100.cpp
|
||||
pr100 //
|
||||
|
||||
@source:roland_r8.cpp
|
||||
r8 //
|
||||
r8m //
|
||||
|
@ -858,6 +858,7 @@ roland_jx3p.cpp
|
||||
roland_jx8p.cpp
|
||||
roland_mc50.cpp
|
||||
roland_mt32.cpp
|
||||
roland_pr100.cpp
|
||||
roland_r8.cpp
|
||||
roland_ra30.cpp
|
||||
roland_s10.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user