(MESS) Mirage: lots of documentation from the schematics, added preliminary LED hookup [R. Belmont]

(MESS) New games added as GAME_NOT_WORKING
------------------------------------------
Yamaha MU-100 [Guru, R. Belmont, O. Galibert]
This commit is contained in:
R. Belmont 2012-12-02 22:11:07 +00:00
parent 52a5317274
commit d73ec8ec79
6 changed files with 266 additions and 63 deletions

2
.gitattributes vendored
View File

@ -6159,6 +6159,7 @@ src/mess/drivers/x1twin.c svneol=native#text/plain
src/mess/drivers/x68k.c svneol=native#text/plain
src/mess/drivers/xerox820.c svneol=native#text/plain
src/mess/drivers/xor100.c svneol=native#text/plain
src/mess/drivers/ymmu100.c svneol=native#text/plain
src/mess/drivers/z100.c svneol=native#text/plain
src/mess/drivers/z1013.c svneol=native#text/plain
src/mess/drivers/z80dev.c svneol=native#text/plain
@ -6468,6 +6469,7 @@ src/mess/layout/mac.lay svneol=native#text/plain
src/mess/layout/mekd2.lay svneol=native#text/plain
src/mess/layout/mephisto.lay svneol=native#text/plain
src/mess/layout/merlin.lay svneol=native#text/plain
src/mess/layout/mirage.lay svneol=native#text/plain
src/mess/layout/mk1.lay svneol=native#text/plain
src/mess/layout/mk14.lay svneol=native#text/plain
src/mess/layout/mk2.lay svneol=native#text/plain

View File

@ -17,49 +17,27 @@
e800-e803: WD1770 FDC
ec00-ecef: ES5503 "DOC" sound chip
f000-ffff: boot ROM
LED patterns
80
_____
| | 40
04 | 02 |
_____
| | 20
08 | |
_____
10
76543210
PORT A: 111xyzzz
PA4/PA5 are the "enable" for the two LEDs
7seg Display Bits
'0' %11111100 $FC
'1' %01100000 $60
'2' %11011010 $DA
'3' %11110010 $F2
'4' %01100110 $66
'5' %10110110 $B6
'6' %10111110 $BE
'7' %11100000 $E0
'8' %11111110 $FE
'9' %11100110 $E6
'A' %11101110 $EE
'b' %00111110 $3E
'C' %10011100 $9C
'd' %01111010 $7A
'E' %10011110 $9E
'F' %10001110 $8E
'L' %00011100 $1C
'n' %00101010 $2A
'o' %00111010 $3A
'P' %11001110 $CE
'r' %00001010 $0A
'U' %01111100 $7C
'c' %00011010 $1A
'u' %01111000 $38
NMI: IRQ from WD1772
IRQ: DRQ from WD1772 wire-ORed with IRQ from ES5503 wire-ORed with IRQ from VIA6522
FIRQ: IRQ from 6850 UART
LED / switch matrix:
A B C D E F G DP
ROW 0: LOAD UPPER LOAD LOWER SAMPLE UPPER PLAY SEQ LOAD SEQ SAVE SEQ REC SEQ SAMPLE LOWER
ROW 1: 3 6 9 5 8 0 2 Enter
ROW 2: 1 4 7 up arrow PARAM dn arrow VALUE CANCEL
L. AN: SEG A SEG B SEG C SEG D SEG E SEG F SEG G SEG DP (decimal point)
R. AN: SEG A SEG B SEG C SEG D SEG E SEG F SEG G SEG DP
Column number in VIA port A bits 0-2 is converted to discrete lines by a 74LS145.
Port A bit 3 is right anode, bit 4 is left anode
ROW 0 is read on VIA port A bit 5, ROW 1 in port A bit 6, and ROW 2 in port A bit 7.
Keyboard models talk to the R6500 through the VIA shifter: CA2 is handshake, CB1 is shift clock, CB2 is shift data.
This is unconnected on the rackmount version.
***************************************************************************/
@ -74,6 +52,8 @@ PA4/PA5 are the "enable" for the two LEDs
#include "formats/ipf_dsk.h"
#include "sound/es5503.h"
#include "mirage.lh"
class mirage_state : public driver_device
{
public:
@ -105,6 +85,11 @@ public:
DECLARE_READ8_MEMBER(mirage_via_read_cb1);
DECLARE_READ8_MEMBER(mirage_via_read_ca2);
DECLARE_READ8_MEMBER(mirage_via_read_cb2);
DECLARE_WRITE_LINE_MEMBER(acia_irq_w);
UINT8 m_l_segs, m_r_segs;
int m_l_hi, m_r_hi;
};
FLOPPY_FORMATS_MEMBER( mirage_state::floppy_formats )
@ -115,6 +100,11 @@ static SLOT_INTERFACE_START( ensoniq_floppies )
SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
SLOT_INTERFACE_END
WRITE_LINE_MEMBER(mirage_state::acia_irq_w)
{
m_maincpu->set_input_line(M6809_FIRQ_LINE, state ? CLEAR_LINE : ASSERT_LINE);
}
void mirage_state::fdc_intrq_w(bool state)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, state);
@ -122,16 +112,17 @@ void mirage_state::fdc_intrq_w(bool state)
void mirage_state::fdc_drq_w(bool state)
{
m_maincpu->set_input_line(M6809_FIRQ_LINE, state);
m_maincpu->set_input_line(M6809_IRQ_LINE, state);
}
static void mirage_doc_irq(device_t *device, int state)
{
// m_maincpu->set_input_line(M6809_IRQ_LINE, state);
}
static UINT8 mirage_adc_read(device_t *device)
{
return 0x80;
return 0x00;
}
void mirage_state::video_start()
@ -163,9 +154,55 @@ static ADDRESS_MAP_START( mirage_map, AS_PROGRAM, 8, mirage_state )
ADDRESS_MAP_END
// port A: front panel
// bits 0-2: column select from 0-7
// bits 3/4 = right and left LED enable
// bits 5/6/7 keypad rows 0/1/2 return
WRITE8_MEMBER(mirage_state::mirage_via_write_porta)
{
// printf("PORT A: %02x\n", data);
UINT8 seg = data & 7;
static const int segconv[8] =
{
16, 8, 32, 2, 1, 64, 128, 4
};
// printf("PA: %02x (PC=%x)\n", data, m_maincpu->pc());
// left LED selected?
if ((data & 0x10) == 0x10)
{
// if the segment number is lower than last time, we've
// started a new refresh cycle
if ((seg < m_l_hi) || (seg == 0))
{
m_l_segs = segconv[seg];
}
else
{
m_l_segs |= segconv[seg];
}
m_l_hi = seg;
output_set_digit_value(0, m_l_segs);
// printf("L LED: seg %d (hi %d conv %02x, %02x)\n", seg, m_l_hi, segconv[seg], m_l_segs);
}
// right LED selected?
if ((data & 0x08) == 0x08)
{
// if the segment number is lower than last time, we've
// started a new refresh cycle
if ((seg < m_r_hi) || (seg == 0))
{
m_r_segs = segconv[seg];
}
else
{
m_r_segs |= segconv[seg];
}
m_r_hi = seg;
output_set_digit_value(1, m_r_segs);
// printf("R LED: seg %d (hi %d conv %02x, %02x)\n", seg, m_r_hi, segconv[seg], m_r_segs);
}
}
// port B:
@ -197,7 +234,7 @@ READ8_MEMBER(mirage_state::mirage_via_read_porta)
}
// port B:
// bit 6: IN FDC disk loaded
// bit 6: IN FDC disk ready
// bit 5: IN 5503 sync (?)
READ8_MEMBER(mirage_state::mirage_via_read_portb)
{
@ -231,14 +268,14 @@ READ8_MEMBER(mirage_state::mirage_via_read_cb2)
const via6522_interface mirage_via =
{
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_read_porta),
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_read_portb),
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_read_ca1),
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_read_cb1),
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_read_ca2),
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_read_cb2),
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_write_porta),
DEVCB_DRIVER_MEMBER(mirage_state,mirage_via_write_portb),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_read_porta),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_read_portb),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_read_ca1),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_read_cb1),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_read_ca2),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_read_cb2),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_write_porta),
DEVCB_DRIVER_MEMBER(mirage_state, mirage_via_write_portb),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
@ -255,19 +292,14 @@ static ACIA6850_INTERFACE( mirage_acia6850_interface )
DEVCB_NULL, // cts in
DEVCB_NULL, // rts out
DEVCB_NULL, // dcd in
DEVCB_NULL
// DEVCB_CPU_INPUT_LINE("maincpu", M6809_FIRQ_LINE)
DEVCB_DRIVER_LINE_MEMBER(mirage_state, acia_irq_w)
};
static MACHINE_CONFIG_START( mirage, mirage_state )
MCFG_CPU_ADD("maincpu", M6809E, 4000000)
MCFG_CPU_PROGRAM_MAP(mirage_map)
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
MCFG_SCREEN_UPDATE_DRIVER(mirage_state, screen_update_mirage)
MCFG_SCREEN_SIZE(320, 240)
MCFG_SCREEN_VISIBLE_AREA(0, 319, 1, 239)
MCFG_DEFAULT_LAYOUT( layout_mirage )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MCFG_ES5503_ADD("es5503", 7000000, 2, mirage_doc_irq, mirage_adc_read)
@ -305,7 +337,9 @@ DRIVER_INIT_MEMBER(mirage_state,mirage)
floppy->ss_w(0);
}
m_l_hi = m_r_hi = 9;
m_l_segs = m_r_segs = 0;
}
CONS( 1984, enmirage, 0, 0, mirage, mirage, mirage_state, mirage, "Ensoniq", "Ensoniq Mirage", GAME_NOT_WORKING )

124
src/mess/drivers/ymmu100.c Normal file
View File

@ -0,0 +1,124 @@
/*************************************************************************************
Yamaha MU-100 : 32-voice polyphonic/multitimbral General MIDI/GS/XG tone module
Preliminary driver by R. Belmont
CPU: Hitachi H8S/2655 (HD6432655F), strapped for mode 4 (24-bit address, 16-bit data, no internal ROM)
Sound ASIC: Yamaha XS725A0
RAM: 1 MSM51008 (1 meg * 1 bit = 128KBytes)
I/O ports from service manual:
Port 1:
0 - LCD data, SW data, LED 1
1 - LCD data, SW data, LED 2
2 - LCD data, SW data, LED 3
3 - LCD data, SW data, LED 4
4 - LCD data, SW data, LED 5
5 - LCD data, SW strobe data
6 - LCD data, SW strobe data
7 - LCD data, SW data, LED 6
Port 2:
0 - (out) LCD control RS
1 - (out) LCD control R/W
2 - (out) LCD control E
3 - (out) LCD contrast A
4 - (out) LCD contrast B
5 - (out) LCD contrast C
6 - (out) 1 MHz clock for serial
7 - NC
Port 3:
4 - (out) A/D gain control 1
5 - (out) A/D gain control 2
Port 5:
3 - (out) Reset signal for rotary encoder
Port 6:
1 - NC
2 - (out) PB select (SW1)
3 - (out) PB select (SW2)
4 - (out) reset PB
5 - (out) reset SWP30 (sound chip)
6 - NC
7 - (in) Plug detection for A/D input
Port A:
5 - (in) Off Line Detection
6 - (out) Signal for rotary encoder (REB)
7 - (out) Signal for rotary encoder (REA)
Port F:
0 - (out) LED,SW Strobe data latch
1 - (out) SW data read control
2 - (out) PB select (SW4)
Port G:
0 - (out) PB select (SW3)
Analog input channels:
0 - level input R
2 - level output L
4 - host SW type switch position
6 - battery voltage
7 - model check (GND for MU100)
**************************************************************************************/
#include "emu.h"
#include "cpu/h83002/h8.h"
static INPUT_PORTS_START( mu100 )
INPUT_PORTS_END
class mu100_state : public driver_device
{
public:
mu100_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;
DECLARE_READ8_MEMBER(adc7_r);
};
static ADDRESS_MAP_START( mu100_map, AS_PROGRAM, 16, mu100_state )
AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_REGION("maincpu", 0)
AM_RANGE(0x200000, 0x21ffff) AM_RAM // 128K work RAM
ADDRESS_MAP_END
// model detect. pulled to GND (0) on MU100.
READ8_MEMBER(mu100_state::adc7_r)
{
return 0;
}
static ADDRESS_MAP_START( mu100_iomap, AS_IO, 8, mu100_state )
AM_RANGE(H8_ADC_7_H, H8_ADC_7_L) AM_READ(adc7_r)
ADDRESS_MAP_END
static MACHINE_CONFIG_START( mu100, mu100_state )
MCFG_CPU_ADD( "maincpu", H8S2655, XTAL_16MHz )
MCFG_CPU_PROGRAM_MAP( mu100_map )
MCFG_CPU_IO_MAP( mu100_iomap )
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MACHINE_CONFIG_END
ROM_START( mu100 )
ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "xu50720.ic11", 0x000000, 0x200000, CRC(1126a8a4) SHA1(e90b8bd9d14297da26ba12f4d9a4f2d22cd7d34a) )
ROM_REGION( 0x2800000, "waverom", 0 )
ROM_LOAD32_WORD( "sx518b0.ic34", 0x000000, 0x400000, CRC(2550d44f) SHA1(fd3cce228c7d389a2fde25c808a5b26080588cba) )
ROM_LOAD32_WORD( "sx743b0.ic35", 0x000002, 0x400000, CRC(a9109a6c) SHA1(a67bb49378a38a2d809bd717d286e18bc6496db0) )
ROM_LOAD32_WORD( "xt445a0-828.ic36", 0x800000, 0x1000000, CRC(d4483a43) SHA1(5bfd0762dea8598eda19db20251dac20e31fa02c) )
ROM_LOAD32_WORD( "xt461a0-829.ic37", 0x800002, 0x1000000, CRC(c5af4501) SHA1(1c88de197c36382311053add8b19a5740802cb78) )
ROM_END
CONS( 1997, mu100, 0, 0, mu100, mu100, driver_device, 0, "Yamaha", "MU100", GAME_NOT_WORKING )

View File

@ -0,0 +1,35 @@
<!-- mirage.lay -->
<!-- 2012-12-01: Initial version. [R. Belmont] -->
<mamelayout version="2">
<element name="digit" defstate="0">
<led7seg>
<color red="0.85" green="0.87" blue="0.36" />
</led7seg>
</element>
<element name="background">
<rect>
<bounds left="0" top="0" right="1" bottom="1" />
<color red="0.0" green="0.0" blue="0.0" />
</rect>
</element>
<view name="Default Layout">
<!-- Background -->
<backdrop element="background">
<bounds left="0" top="0" right="42" bottom="28" />
</backdrop>
<!-- LEDs -->
<bezel name="digit0" element="digit">
<bounds left="2" top="0" right="20" bottom="23" />
</bezel>
<bezel name="digit1" element="digit">
<bounds left="22" top="0" right="40" bottom="23" />
</bezel>
</view>
</mamelayout>

View File

@ -332,6 +332,9 @@ neocdz // NeoGeo CDZ
// Philips
cdimono1 // Philips CD-i (Mono-I board)
// Yamaha
mu100 // 1997 MU-100
//***************COMPUTERS**************************************************
// Acorn

View File

@ -405,6 +405,7 @@ DRVLIBS += \
$(MESSOBJ)/wang.a \
$(MESSOBJ)/wavemate.a \
$(MESSOBJ)/xerox.a \
$(MESSOBJ)/yamaha.a \
$(MESSOBJ)/zpa.a \
$(MESSOBJ)/zvt.a \
$(MESSOBJ)/shared.a \
@ -1953,6 +1954,9 @@ $(MESSOBJ)/xerox.a: \
$(MESS_DRIVERS)/xerox820.o \
$(MESS_DRIVERS)/bigbord2.o \
$(MESSOBJ)/yamaha.a: \
$(MESS_DRIVERS)/ymmu100.o \
$(MESSOBJ)/zpa.a: \
$(MESS_DRIVERS)/iq151.o \
$(MESS_MACHINE)/iq151cart.o \
@ -2198,6 +2202,7 @@ $(MESS_DRIVERS)/mekd2.o: $(MESS_LAYOUT)/mekd2.lh
$(MESS_DRIVERS)/mephisto.o: $(MESS_LAYOUT)/mephisto.lh
$(MESS_DRIVERS)/merlin.o: $(MESS_LAYOUT)/merlin.lh
$(MESS_DRIVERS)/mikrolab.o: $(MESS_LAYOUT)/mikrolab.lh
$(MESS_DRIVERS)/mirage.o: $(MESS_LAYOUT)/mirage.lh
$(MESS_DRIVERS)/mk1.o: $(MESS_LAYOUT)/mk1.lh
$(MESS_DRIVERS)/mk14.o: $(MESS_LAYOUT)/mk14.lh
$(MESS_DRIVERS)/mk2.o: $(MESS_LAYOUT)/mk2.lh