mirror of
https://github.com/holub/mame
synced 2025-04-22 00:11:58 +03:00
New machines added as MACHINE_NOT_WORKING
----------------------------------------- Monomachine MK2 [R. Belmont, tbd] Machinedrum MK2 [R. Belmont, tbd]
This commit is contained in:
parent
34358395d8
commit
8e3dc90e93
@ -1881,6 +1881,11 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/junior.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "elektron")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/elektronmono.cpp",
|
||||
}
|
||||
|
||||
createMESSProjects(_target, _subtarget, "ensoniq")
|
||||
files {
|
||||
MAME_DIR .. "src/mame/drivers/esq1.cpp",
|
||||
|
174
src/mame/drivers/elektronmono.cpp
Normal file
174
src/mame/drivers/elektronmono.cpp
Normal file
@ -0,0 +1,174 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:R. Belmont
|
||||
/***************************************************************************
|
||||
|
||||
elektronmono.cpp - Elektron Machinedrum and Monomachine
|
||||
|
||||
Skeleton driver by R. Belmont
|
||||
|
||||
The Machinedrum and Monomachine are basically the same hardware
|
||||
platform, only the front panel is different. Both have two major
|
||||
hardware revisions with different features (MK 1 and MK 2), and a
|
||||
"+Drive" storage option/upgrade.
|
||||
|
||||
There are also "user waveform" (UW) versions of the Machinedrum MK 1
|
||||
and MK 2, and a keyboard version of the Monomachine MK 1 only. All
|
||||
Monomachine MK 2 units support user waveforms, there's no separate
|
||||
UW version. The firmware covers all models.
|
||||
|
||||
The same circuit boards are used in both Machinedrum and
|
||||
Monomachine, at least in MK 2. I haven't found photos of the top of MK 1
|
||||
circuit boards, so some of the memory configurations are guesses based
|
||||
on firmware code, and may not be accurate.
|
||||
|
||||
MCU: Motorola Coldfire 5206e
|
||||
- Flash memory: 8 Mbyte for Machinedrum UW models and Monomachine MK 2,
|
||||
1 Mbyte for others?
|
||||
- Main memory: 1 Mbyte DRAM for MK 1, 1 MByte SRAM for MK 2
|
||||
- Battery backed "patch" memory: 512 kByte SRAM for Machinedrum MK 1, 1
|
||||
MByte SRAM for others
|
||||
|
||||
DSP: 2x Motorola DSP56303
|
||||
- Memory for each DSP: 3x 64 kbyte SRAM + 3x 256 kbyte for MK 1, 3x 512
|
||||
kbyte SRAM for MK 2
|
||||
- Additional memory for DSP 2 in Machinedrum UW: 3x 512 kbyte DRAM for
|
||||
MK 1, 3x 512 kbyte SRAM for MK 2
|
||||
|
||||
+Drive: Hynix H26M21001CAR 2 Gbyte flash?
|
||||
|
||||
The Coldfire memory map is software definable, and differs between the
|
||||
bootstrap code and the main operating system.
|
||||
|
||||
The +Drive isn't mapped to memory at all. Instead it's accessed through
|
||||
Coldfire port A. It's just a large flash chip connected via a 74 series
|
||||
chip with XOR gates, but I don't understand exactly how communication
|
||||
works. The only one I've seen in a photo is 2 Gbytes, which is curiously
|
||||
large considering it stores 128 snapshots of the patch memory, and 128
|
||||
snapshots of the user waveform memory when applicable. Probably even 512
|
||||
Mbytes would be wasteful.
|
||||
|
||||
Memory map for Coldfire when bootstrap code runs:
|
||||
0-100000: Lower 1 Mbyte of flash memory
|
||||
100000-200000: Patch memory
|
||||
|
||||
Memory map for Coldfire when operating system runs:
|
||||
700000-800000: Patch memory
|
||||
10000000-10800000: Flash memory
|
||||
|
||||
Common memory map for Coldfire:
|
||||
200000-300000: Main memory
|
||||
300000: Coldfire SIM (system integration module - peripherals, etc)
|
||||
500000-500008: DSP 1 Hi08 host registers in order (ICR, CVR, ISR, IVR,
|
||||
0/unused, RXH/TXH, RXM/TXM, RXL/TXL)
|
||||
600000-600008: DSP 2 Hi08
|
||||
1000000-1002000?: Coldfire internal SRAM
|
||||
|
||||
Memory map for flash:
|
||||
0-100000: Firmware (identical to previous reconstructed dump)
|
||||
100000-200000: User waveforms for the factory presets on Machinedrum UW
|
||||
and Monomachine MK 2
|
||||
200000-800000: Probably user waveforms on units without +Drive. Both the
|
||||
units I dumped have factory installed +Drives, and the area is empty
|
||||
except for some markers. Machinedrum UW has a big lookup table near the
|
||||
end as well. Side note: I think there's code in the firmware to recreate
|
||||
markers and lookup tables, so the upper 6 Mbytes may be superfluous for
|
||||
emulation.
|
||||
|
||||
Memory map for MK 1 DSPs:
|
||||
100000-140000: DRAM
|
||||
140000-150000: SRAM
|
||||
180000-200000: Additional DRAM for DSP 2 in Machinedrum UW only
|
||||
|
||||
Memory map for MK 2 DSPs:
|
||||
100000-180000: SRAM
|
||||
180000-200000: Additional SRAM for DSP 2 in Machinedrum UW only
|
||||
|
||||
The DSPs seem to use the ESSI serial interface to communicate, and to
|
||||
interface with the AKM AK4626AVQ audio codec chip. On Machinedrum, DSP 2
|
||||
does the main synthesis (that's why it has additional memory in UW
|
||||
models), and DSP 1 does effects. I haven't looked much at the
|
||||
Monomachine DSP code, but both chips share most of the code, so the work
|
||||
is probably shared in a more symmetrical manner than on the Machinedrum.
|
||||
|
||||
Coldfire peripherals:
|
||||
- UART 1: MIDI
|
||||
- UART 2: Buttons, knobs, LEDs, display
|
||||
- Port A: Bit 0 mirrors bit 2 on MK 2, bit 1 checks SRAM battery charge,
|
||||
bit 2 is used for +Drive address, bit 3 is something about +Drive, bits
|
||||
4-7 is data RX/TX for +Drive.
|
||||
|
||||
Model detection:
|
||||
- MK 2 is detected by writing to port A bit 2 and reading the same value
|
||||
from bit 0. Machinedrum also checks patch SRAM size.
|
||||
- Machinedrum UW is detected by comparing the ID of the flash chip to
|
||||
certain 8 Mbyte chip IDs, and by DSP 2 which checks available memory.
|
||||
- +Drive is detected by communicating with it on port A.
|
||||
- I haven't looked into how the Monomachine keyboard is detected, or how
|
||||
it's connected to the Coldfire.
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/mcf5206e.h"
|
||||
#include "machine/intelfsh.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
class elekmono_state : public driver_device
|
||||
{
|
||||
public:
|
||||
elekmono_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
DECLARE_DRIVER_INIT(elektron);
|
||||
};
|
||||
|
||||
void elekmono_state::machine_start()
|
||||
{
|
||||
}
|
||||
|
||||
void elekmono_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( elektron_map, AS_PROGRAM, 32, elekmono_state )
|
||||
AM_RANGE(0x00000000, 0x000fffff) AM_ROM AM_REGION("maincpu", 0)
|
||||
AM_RANGE(0x00100000, 0x001fffff) AM_RAM // patch memory
|
||||
AM_RANGE(0x00200000, 0x002fffff) AM_RAM // main RAM
|
||||
// 00300000 = Coldfire SIM
|
||||
// 00400000 = DSP1 Hi08 host registers (ICR, CVR, ISR, IVR, unused, RXH/TXH, RXM/TXM, RXL/TXL)
|
||||
// 00500000 = DSP2 Hi08 host registers (same as DSP1)
|
||||
AM_RANGE(0x01000000, 0x01001fff) AM_RAM
|
||||
AM_RANGE(0x10000000, 0x107fffff) AM_ROM AM_REGION("maincpu", 0)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static MACHINE_CONFIG_START( elektron )
|
||||
MCFG_CPU_ADD("maincpu", MCF5206E, XTAL_25_447MHz)
|
||||
MCFG_CPU_PROGRAM_MAP(elektron_map)
|
||||
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static INPUT_PORTS_START( elektron )
|
||||
INPUT_PORTS_END
|
||||
|
||||
ROM_START( monomach )
|
||||
ROM_REGION(0x800000, "maincpu", 0)
|
||||
ROM_LOAD( "elektron_sfx6-60_os1.32b.bin", 0x000000, 0x800000, CRC(f90a8b0e) SHA1(11a37460a5f47fd1a4d911414288690e6e7da605) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( machdrum )
|
||||
ROM_REGION(0x800000, "maincpu", 0)
|
||||
ROM_LOAD( "elektron_sps1-1uw_os1.63.bin", 0x000000, 0x800000, CRC(3d552c99) SHA1(a872a2f3527063673d6ea6d3080c4c62ef0cadc1) )
|
||||
ROM_END
|
||||
|
||||
CONS( 2004, monomach, 0, 0, elektron, elektron, elekmono_state, 0, "Elektron", "Monomachine SFX6 MK2", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
|
||||
CONS( 2007, machdrum, 0, 0, elektron, elektron, elekmono_state, 0, "Elektron", "Machinedrum SPS-1 MK2", MACHINE_NOT_WORKING|MACHINE_NO_SOUND )
|
@ -12039,6 +12039,10 @@ btm2105 // 1985 BT Merlin M2105
|
||||
@source:elekscmp.cpp
|
||||
elekscmp //
|
||||
|
||||
@source:elektronmono.cpp
|
||||
monomach // MK2 (c) 2004 Elektron
|
||||
machdrum // MK2 (c) 2007 Elektron
|
||||
|
||||
@source:elf.cpp
|
||||
elf2 //
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user