mirror of
https://github.com/holub/mame
synced 2025-06-26 22:29:10 +03:00
577 lines
23 KiB
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 )
|