mame/src/mess/drivers/studio2.c

577 lines
23 KiB
C

/*
RCA Studio II
PCB Layout
----------
1809746-S1-E
|----------------------------------------------------------------------------------------------------------|
| |----------------------------| |
| |----------------------------| CA555 7805 |
| SPKR CN1 |
| |
| |-----------| |
| | Output | |
| ROM.4 ROM.3 ROM.2 ROM.1 CDP1822 CDP1822 CDP1822 CDP1822 |TV Module | |
| | | |
| CDP1802 TA10171V1 | | |
| | | |
| | | |
| | | |
| |-----------| |
| |
| CD4042 CD4001 CD4515 |
| |
| CN2 CN3 |
|----------------------------------------------------------------------------------------------------------|
Notes:
All IC's shown.
CDP1802 - RCA CDP1802CE Microprocessor
TA10171V1 - RCA TA10171V1 NTSC Video Display Controller (VDC) (= RCA CDP1861)
CDP1822 - RCA CDP1822NCE 256 x4 RAM (= Mitsubishi M58721P)
ROM.x - RCA CDP1831CE 512 x8 MASKROM. All ROMs are marked 'PROGRAM COPYRIGHT (C) RCA CORP. 1977'
CD4001 - 4001 Quad 2-Input NOR Buffered B Series Gate (4000-series CMOS TTL logic IC)
CD4042 - 4042 Quad Clocked D Latch (4000-series CMOS TTL logic IC)
CD4515 - 4515 4-Bit Latched/4-to-16 Line Decoders (4000-series CMOS TTL logic IC)
CA555 - CA555CG General Purpose Single Bipolar Timer (= NE555)
7805 - Voltage regulator, input 10V-35V, output +5V
SPKR - Loudspeaker, 8 ohms, 0.3 W
CN1 - ROM cartridge connector, 2x22 pins, 0.154" spacing
CN2 - Player A keypad connector, 1x12 pins
CN3 - Player B keypad connector, 1x12 pins
*/
/*
Toshiba Visicom Console (RCA Studio II clone)
Toshiba, 1978
PCB Layout Many resistors/caps
---------- 7.5VDC / transistors in this area
\/ /---|-----/
|------------------------------------------||---|-------| |-----|C|------|
|D235 POT TC4011 CART_SLOT | | | TV Modulator |
|HEATSINK | | | |
| TC4515 TC4049 TC4011 74LS08| | | SW (VHF Ch1) |
|DIODES(x20) 74LS74 74LS73| | | (VHF Ch2) |
|-----------| 3.579545MHz | |
| CDP1802 | POT | |--------------|
|TMM331 | |
| CDP1861 TC5012 TC5012 |
| TC4021 TC4021 | |
| TC5012 \-----/ |
| 2111 2111 2111 74LS74 |
|TC4042 2111 2111 2111 TC4011 |
|-------------------------------------------|
Notes: (all chips shown above)
CDP1802 - RCA CDP1802 CPU (DIP40), clock 1.7897725MHz [3.579545/2]
CDP1861 - RCA CDP1861 Video Controller (DIP24)
VSync - 60.4533Hz \ (measured on pin 6)
HSync - 15.8387kHz /
Clock - 223.721562kHz [3.579545/16] (measured on pin 1)
2111 - NEC D2111AL-4 256 bytes x4 SRAM (DIP18, x6). Total 1.5k
C - Composite Video Output to TV from TV Modulator
TMM331 - Toshiba TMM331AP 2k x8 MASKROM (DIP24)
Pinout (preliminary):
TMM331
|----\/----|
A7 |1 24| VCC
A8 |2 23| D0
A9 |3 22| D1
A10 |4 21| D2
A0 |5 20| D3
A1 |6 19| D4
A2 |7 18| D5
A3 |8 17| D6
A4 |9 16| D7
A5 |10 15| E0 (measured LOW)
A6 |11 14| E1 (NC?)
GND |12 13| E2 (measured LOW)
|----------|
E0 - E2 are Programmable Chip Select Inputs
TMM331 is compatible with AMI S6831A, AMD AM9217,
Intel 2316A/8316A, MOSTEK MK31000, GI RO-3-8316,
NATIONAL/NEC/SYNERTEK 2316A etc
*/
/*
Mustang 9016 Telespiel Computer
PCB Layout
----------
|----------------------------------------------------------------------------------------------------------|
|7805 |----------------------------| CD4069 MC14001 |
| |----------------------------| |
| CN1 |
| |
| ROM.IC13 ROM.IC14 CDP1822 CDP1822 CDP1822 CDP1822 |-----------| |
| | Output | |
| |TV Module? | |
| ROM.IC12 CDP1802 CDP1864 | | |
| CDP1822 | | |
| CD4019 CDP1858 CD4081 CD4069 | | |
| | | |
| CD4515 | | |
| 1.750MHz |-----------| |
| 4.3236MHz |
| |
| |
| |
|----------------------------------------------------------------------------------------------------------|
Notes:
All IC's shown.
CDP1802 - RCA CDP1802CE Microprocessor
CDP1864 - RCA CDP1864CE PAL Video Display Controller (VDC)
CDP1822 - RCA CDP1822NCE 256 x4 RAM (= Mitsubishi M58721P)
ROM.ICx - RCA CDP1833 1k x8 MASKROM. All ROMs are marked 'PROGRAM COPYRIGHT (C) RCA CORP. 1978'
CD4019 - 4019 Quad AND-OR Select Gate (4000-series CMOS TTL logic IC)
CDP1858 - RCA CDP1858E Latch/Decoder - 4-bit
CD4081 - 4081 Quad 2-Input AND Buffered B Series Gate (4000-series CMOS TTL logic IC)
CD4069 - 4069 Hex Buffer, Inverter (4000-series CMOS TTL logic IC)
CD4515 - 4515 4-Bit Latched/4-to-16 Line Decoders (4000-series CMOS TTL logic IC)
7805 - Voltage regulator, input 10V-35V, output +5V
CN1 - ROM cartridge connector, 2x22 pins, 0.154" spacing
*/
/*
RCA Studio II games list
Title Series Dumped
----------------------------------------------------------------------------
Bowling built-in yes
Doodles built-in yes
Freeway built-in yes
Math built-in yes
Patterns built-in yes
Gunfighter/Moonship Battle TV Arcade yes
Space War TV Arcade I yes
Fun with Numbers TV Arcade II no, but Guru has one
Tennis/Squash TV Arcade III yes
Baseball TV Arcade IV yes
Speedway/Tag TV Arcade yes
Blackjack TV Casino I yes
Bingo TV Casino no
Math and Social Studies TV School House I no, but Guru has one
Math Fun TV School House II yes
Biorhythm TV Mystic yes
MPT-02 games list
ID Title Series Dumped
----------------------------------------------------------------------------
MG-201 Bingo no
MG-202 Concentration Match no, but Guru has one
MG-203 Star Wars no, but Guru has one
MG-204 Math Fun School House II no, but Guru has one
MG-205 Pinball no, but Guru has one
MG-206 Biorythm no
MG-207 Tennis/Squash no
MG-208 Fun with Numbers no
MG-209 Computer Quiz School House I no
MG-210 Baseball no
MG-211 Speedway/Tag no
MG-212 Spacewar Intercept no
MG-213 Gun Fight/Moon Ship no
*/
/*
TODO:
- disable ic13/14 when cartridge plugged in
- mpt02 clones' colors
- visicom colors
- NE555 discrete sound
*/
#include "includes/studio2.h"
/* Read/Write Handlers */
WRITE8_MEMBER( studio2_state::keylatch_w )
{
m_keylatch = data & 0x0f;
}
READ8_MEMBER( studio2_state::dispon_r )
{
m_vdc->disp_on_w(1);
m_vdc->disp_on_w(0);
return 0xff;
}
WRITE8_MEMBER( studio2_state::dispon_w )
{
m_vdc->disp_on_w(1);
m_vdc->disp_on_w(0);
}
/* Memory Maps */
static ADDRESS_MAP_START( studio2_map, AS_PROGRAM, 8, studio2_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x07ff) AM_ROM
AM_RANGE(0x0800, 0x09ff) AM_MIRROR(0xf400) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( studio2_io_map, AS_IO, 8, studio2_state )
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x01, 0x01) AM_READ(dispon_r)
AM_RANGE(0x02, 0x02) AM_WRITE(keylatch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( visicom_map, AS_PROGRAM, 8, visicom_state )
AM_RANGE(0x0000, 0x07ff) AM_ROM
AM_RANGE(0x1000, 0x10ff) AM_RAM
AM_RANGE(0x1100, 0x11ff) AM_RAM AM_SHARE("color_ram")
AM_RANGE(0x1300, 0x13ff) AM_RAM AM_SHARE("color_ram1")
ADDRESS_MAP_END
static ADDRESS_MAP_START( visicom_io_map, AS_IO, 8, visicom_state )
AM_RANGE(0x01, 0x01) AM_WRITE(dispon_w)
AM_RANGE(0x02, 0x02) AM_WRITE(keylatch_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( mpt02_map, AS_PROGRAM, 8, mpt02_state )
AM_RANGE(0x0000, 0x07ff) AM_ROM
AM_RANGE(0x0800, 0x09ff) AM_RAM
AM_RANGE(0x0b00, 0x0b3f) AM_RAM AM_SHARE("color_ram")
AM_RANGE(0x0c00, 0x0fff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( mpt02_io_map, AS_IO, 8, mpt02_state )
AM_RANGE(0x01, 0x01) AM_DEVREADWRITE(CDP1864_TAG, cdp1864_device, dispon_r, step_bgcolor_w)
AM_RANGE(0x02, 0x02) AM_WRITE(keylatch_w)
AM_RANGE(0x04, 0x04) AM_DEVREADWRITE(CDP1864_TAG, cdp1864_device, dispoff_r, tone_latch_w)
ADDRESS_MAP_END
/* Input Ports */
INPUT_CHANGED_MEMBER( studio2_state::reset_w )
{
if (oldval && !newval)
{
machine_reset();
}
}
static INPUT_PORTS_START( studio2 )
PORT_START("A")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 0") PORT_CODE(KEYCODE_LALT)
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 1") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 2") PORT_CODE(KEYCODE_W)
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 3") PORT_CODE(KEYCODE_E)
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 4") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 5") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 6") PORT_CODE(KEYCODE_D)
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 7") PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 8") PORT_CODE(KEYCODE_X)
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("A 9") PORT_CODE(KEYCODE_C)
PORT_START("B")
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 0") PORT_CODE(KEYCODE_0_PAD)
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 1") PORT_CODE(KEYCODE_7_PAD)
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 2") PORT_CODE(KEYCODE_8_PAD)
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 3") PORT_CODE(KEYCODE_9_PAD)
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 4") PORT_CODE(KEYCODE_4_PAD)
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 5") PORT_CODE(KEYCODE_5_PAD)
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 6") PORT_CODE(KEYCODE_6_PAD)
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 7") PORT_CODE(KEYCODE_1_PAD)
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 8") PORT_CODE(KEYCODE_2_PAD)
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("B 9") PORT_CODE(KEYCODE_3_PAD)
PORT_START("CLEAR")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Clear") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_CHANGED_MEMBER(DEVICE_SELF, studio2_state, reset_w, 0)
INPUT_PORTS_END
/* Video */
static CDP1861_INTERFACE( studio2_cdp1861_intf )
{
CDP1802_TAG,
SCREEN_TAG,
DEVCB_CPU_INPUT_LINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT),
DEVCB_CPU_INPUT_LINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT),
DEVCB_CPU_INPUT_LINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1)
};
static const rgb_t VISICOM_PALETTE[] =
{
MAKE_RGB(0x00, 0x80, 0x00),
MAKE_RGB(0x00, 0x00, 0xff),
MAKE_RGB(0x00, 0xff, 0x00),
MAKE_RGB(0xff, 0x00, 0x00)
};
READ_LINE_MEMBER( mpt02_state::rdata_r )
{
return BIT(m_color, 0);
}
READ_LINE_MEMBER( mpt02_state::bdata_r )
{
return BIT(m_color, 1);
}
READ_LINE_MEMBER( mpt02_state::gdata_r )
{
return BIT(m_color, 2);
}
static CDP1864_INTERFACE( mpt02_cdp1864_intf )
{
CDP1802_TAG,
SCREEN_TAG,
CDP1864_INTERLACED,
DEVCB_DRIVER_LINE_MEMBER(mpt02_state, rdata_r),
DEVCB_DRIVER_LINE_MEMBER(mpt02_state, bdata_r),
DEVCB_DRIVER_LINE_MEMBER(mpt02_state, gdata_r),
DEVCB_CPU_INPUT_LINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT),
DEVCB_CPU_INPUT_LINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT),
DEVCB_CPU_INPUT_LINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1),
DEVCB_NULL,
RES_K(2.2), // unverified
RES_K(1), // unverified
RES_K(5.1), // unverified
RES_K(4.7) // unverified
};
/* CDP1802 Configuration */
READ_LINE_MEMBER( studio2_state::clear_r )
{
return BIT(m_clear->read(), 0);
}
READ_LINE_MEMBER( studio2_state::ef3_r )
{
return BIT(m_a->read(), m_keylatch);
}
READ_LINE_MEMBER( studio2_state::ef4_r )
{
return BIT(m_b->read(), m_keylatch);
}
WRITE_LINE_MEMBER( studio2_state::q_w )
{
beep_set_state(m_speaker, state);
}
static COSMAC_INTERFACE( studio2_cosmac_intf )
{
DEVCB_LINE_VCC,
DEVCB_DRIVER_LINE_MEMBER(studio2_state, clear_r),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef3_r),
DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef4_r),
DEVCB_DRIVER_LINE_MEMBER(studio2_state, q_w),
DEVCB_NULL,
DEVCB_DEVICE_MEMBER(CDP1861_TAG, cdp1861_device, dma_w),
NULL,
DEVCB_NULL,
DEVCB_NULL
};
WRITE8_MEMBER( mpt02_state::dma_w )
{
UINT8 addr = ((offset & 0xe0) >> 2) | (offset & 0x07);
m_color = m_color_ram[addr];
m_cti->con_w(0); // HACK
m_cti->dma_w(space, offset, data);
}
static COSMAC_INTERFACE( mpt02_cosmac_intf )
{
DEVCB_LINE_VCC,
DEVCB_DRIVER_LINE_MEMBER(studio2_state, clear_r),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef3_r),
DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef4_r),
DEVCB_DRIVER_LINE_MEMBER(studio2_state, q_w),
DEVCB_NULL,
DEVCB_DRIVER_MEMBER(mpt02_state, dma_w),
NULL,
DEVCB_NULL,
DEVCB_NULL
};
/* Machine Initialization */
void studio2_state::machine_start()
{
// register for state saving
save_item(NAME(m_keylatch));
}
void studio2_state::machine_reset()
{
m_vdc->reset();
}
void mpt02_state::machine_reset()
{
m_cti->reset();
}
DEVICE_IMAGE_LOAD_MEMBER( studio2_state, studio2_cart_load )
{
if (image.software_entry() == NULL)
return device_load_st2_cartslot_load(image);
else
{
// WARNING: list code currently assume that cart mapping starts at 0x400.
// the five dumps currently available work like this, but the .st2 format
// allows for more freedom... how was the content of a real cart mapped?
UINT8 *ptr = ((UINT8 *) image.device().machine().root_device().memregion(CDP1802_TAG)->base()) + 0x400;
memcpy(ptr, image.get_software_region("rom"), image.get_software_region_length("rom"));
return IMAGE_INIT_PASS;
}
}
/* Machine Drivers */
static MACHINE_CONFIG_FRAGMENT( studio2_cartslot )
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("st2,bin")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_LOAD(studio2_state,studio2_cart_load)
MCFG_CARTSLOT_INTERFACE("studio2_cart")
/* software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list","studio2")
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( studio2, studio2_state )
/* basic machine hardware */
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, 1760000) /* the real clock is derived from an oscillator circuit */
MCFG_CPU_PROGRAM_MAP(studio2_map)
MCFG_CPU_IO_MAP(studio2_io_map)
MCFG_CPU_CONFIG(studio2_cosmac_intf)
/* video hardware */
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, 1760000)
MCFG_CDP1861_ADD(CDP1861_TAG, 1760000, studio2_cdp1861_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD(BEEPER_TAG, BEEP, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_FRAGMENT_ADD( studio2_cartslot )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( visicom, visicom_state )
/* basic machine hardware */
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, XTAL_3_579545MHz/2)
MCFG_CPU_PROGRAM_MAP(visicom_map)
MCFG_CPU_IO_MAP(visicom_io_map)
MCFG_CPU_CONFIG(studio2_cosmac_intf)
/* video hardware */
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, XTAL_3_579545MHz/2)
MCFG_CDP1861_ADD(CDP1861_TAG, XTAL_3_579545MHz/2/8, studio2_cdp1861_intf)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD(BEEPER_TAG, BEEP, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_FRAGMENT_ADD( studio2_cartslot )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( mpt02, mpt02_state )
/* basic machine hardware */
MCFG_CPU_ADD(CDP1802_TAG, COSMAC, CDP1864_CLOCK)
MCFG_CPU_PROGRAM_MAP(mpt02_map)
MCFG_CPU_IO_MAP(mpt02_io_map)
MCFG_CPU_CONFIG(mpt02_cosmac_intf)
/* video hardware */
MCFG_CDP1864_SCREEN_ADD(SCREEN_TAG, CDP1864_CLOCK)
MCFG_SCREEN_UPDATE_DEVICE(CDP1864_TAG, cdp1864_device, screen_update)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD(BEEPER_TAG, BEEP, 0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
MCFG_CDP1864_ADD(CDP1864_TAG, CDP1864_CLOCK, mpt02_cdp1864_intf)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MCFG_FRAGMENT_ADD( studio2_cartslot )
MACHINE_CONFIG_END
/* ROMs */
ROM_START( studio2 )
ROM_REGION( 0x10000, CDP1802_TAG, 0 )
ROM_LOAD( "84932.ic11", 0x0000, 0x0200, CRC(283b7e65) SHA1(4b6d21cde59712ecb5941ff63d8eb161420b0aac) )
ROM_LOAD( "84933.ic12", 0x0200, 0x0200, CRC(a396b77c) SHA1(023517f67af61790e6916b6c4dbe2d9dc07ae3ff) )
ROM_LOAD( "85456.ic13", 0x0400, 0x0200, CRC(d25cf97f) SHA1(d489f41f1125c76cc8ed9defa82a877ae014ef21) )
ROM_LOAD( "85457.ic14", 0x0600, 0x0200, CRC(74aa724f) SHA1(085832f29e0d2a387c75463d66c54fb6c1e9e72c) )
ROM_END
ROM_START( visicom )
ROM_REGION( 0x10000, CDP1802_TAG, 0 )
ROM_LOAD( "visicom.q003", 0x0000, 0x0800, CRC(23d22074) SHA1(a0a8be23f70621a2bd8010b1134e8a0019075bf1) )
ROM_END
ROM_START( mpt02 )
ROM_REGION( 0x10000, CDP1802_TAG, 0 )
ROM_LOAD( "86676.ic13", 0x0000, 0x0400, CRC(a7d0dd3b) SHA1(e1881ab4d67a5d735dd2c8d7e924e41df6f2aeec) )
ROM_LOAD( "86677b.ic14", 0x0400, 0x0400, CRC(82a2d29e) SHA1(37e02089d611db10bad070d89c8801de41521189) )
ROM_LOAD( "87201.ic12", 0x0c00, 0x0400, CRC(8006a1e3) SHA1(b67612d98231485fce55d604915abd19b6d64eac) )
ROM_END
#define rom_mpt02h rom_mpt02
#define rom_mtc9016 rom_mpt02
#define rom_shmc1200 rom_mpt02
#define rom_cm1200 rom_mpt02
#define rom_apollo80 rom_mpt02
/* Driver Initialization */
TIMER_CALLBACK_MEMBER(studio2_state::setup_beep)
{
device_t *speaker = machine().device(BEEPER_TAG);
beep_set_state(speaker, 0);
beep_set_frequency(speaker, 300);
}
DRIVER_INIT_MEMBER(studio2_state,studio2)
{
machine().scheduler().timer_set(attotime::zero, timer_expired_delegate(FUNC(studio2_state::setup_beep),this));
}
/* Game Drivers */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
CONS( 1977, studio2, 0, 0, studio2, studio2, studio2_state, studio2, "RCA", "Studio II", GAME_SUPPORTS_SAVE )
CONS( 1978, visicom, studio2,0, visicom, studio2, studio2_state, studio2, "Toshiba", "Visicom COM-100 (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
CONS( 1978, mpt02, studio2,0, mpt02, studio2, studio2_state, studio2, "Soundic", "Victory MPT-02 Home TV Programmer (Austria)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
CONS( 1978, mpt02h, studio2,0, mpt02, studio2, studio2_state, studio2, "Hanimex", "MPT-02 Jeu TV Programmable (France)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE)
CONS( 1978, mtc9016, studio2,0, mpt02, studio2, studio2_state, studio2, "Mustang", "9016 Telespiel Computer (Germany)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
CONS( 1978, shmc1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Sheen", "1200 Micro Computer (Australia)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
CONS( 1978, cm1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Conic", "M-1200 (?)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
CONS( 1978, apollo80, studio2,0, mpt02, studio2, studio2_state, studio2, "Academy", "Apollo 80 (Germany)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )