3do import from MESS, nw

This commit is contained in:
Angelo Salese 2011-05-04 18:51:52 +00:00
parent c0214df35a
commit 82b5fb6ab1
6 changed files with 1474 additions and 2 deletions

3
.gitattributes vendored
View File

@ -1555,6 +1555,7 @@ src/mame/drivers/1945kiii.c svneol=native#text/plain
src/mame/drivers/20pacgal.c svneol=native#text/plain
src/mame/drivers/2mindril.c svneol=native#text/plain
src/mame/drivers/39in1.c svneol=native#text/plain
src/mame/drivers/3do.c svneol=native#text/plain
src/mame/drivers/40love.c svneol=native#text/plain
src/mame/drivers/4enraya.c svneol=native#text/plain
src/mame/drivers/4roses.c svneol=native#text/plain
@ -2705,6 +2706,7 @@ src/mame/etc/jrcrypt.c svneol=native#text/plain
src/mame/includes/1942.h svneol=native#text/plain
src/mame/includes/1943.h svneol=native#text/plain
src/mame/includes/20pacgal.h svneol=native#text/plain
src/mame/includes/3do.h svneol=native#text/plain
src/mame/includes/40love.h svneol=native#text/plain
src/mame/includes/4enraya.h svneol=native#text/plain
src/mame/includes/8080bw.h svneol=native#text/plain
@ -3535,6 +3537,7 @@ src/mame/layout/videodad.lay svneol=native#text/plain
src/mame/layout/videopin.lay svneol=native#text/plain
src/mame/layout/videopkr.lay svneol=native#text/plain
src/mame/layout/wecleman.lay svneol=native#text/plain
src/mame/machine/3do.c svneol=native#text/plain
src/mame/machine/acitya.c svneol=native#text/plain
src/mame/machine/ajax.c svneol=native#text/plain
src/mame/machine/amiga.c svneol=native#text/plain

231
src/mame/drivers/3do.c Normal file
View File

@ -0,0 +1,231 @@
/***************************************************************************
3do.c
Driver file to handle emulation of the 3DO systems
Hardware descriptions:
Processors:
- 32bit 12.5MHZ RISC CPU (ARM60 - ARM6 core)
- Separate BUS for video refresh updates (VRAM is dual ported)
- Super Fast BUS Speed (50 Megabytes per second)
- Math Co-Processor custom designed by NTG for accelerating fixed-point
matrix operations (_not_ the ARM FPA)
- Multitaking 32-bit operating system
Resolution:
- 640x480 pixel resolution
- 16.7 million colors
Two accelerated video co-processors:
- 25MHZ clock rate (NTSC), 29.5MHZ clock rate (PAL)
- Capable of producing 9-16 million real pixels per second (36-64 Mpix/sec
interpolated), distorted, scaled, rotated and texture mapped.
- able to map a rectangular bitmap onto any arbitrary 4-point polygon.
- texturemap source bitmaps can be 1, 2, 4, 6, 8, or 16 bits per pixel and
are RLE compressed for a maximum combination of both high resolution and
small storage space.
- supports transparency, translucency, and color-shading effects.
Custom 16bit DSP:
- specifically designed for mixing, manipulating, and synthesizing CD quality
sound.
- can decompress sound 2:1 or 4:1 on the fly saving memory and bus bandwidth.
- 25MHz clock rate.
- pipelined CISC architecture
- 16bit register size
- 17 separate 16bit DMA channels to and from system memory.
- on chip instruction SRAM and register memory.
- 20bit internal processing.
- special filtering capable of creating effects such as 3D sound.
Sound:
- 16bit stereo sound
- 44.1 kHz sound sampling rate
- Fully support Dolby(tm) Surround Sound
Memory:
- 2 megabytes of DRAM
- 1 megabyte of VRAM (also capable of holding/executing code and data)
- 1 megabyte of ROM
- 32KB battery backed SRAM
CD-ROM drive:
- 320ms access time
- double speed 300kbps data transfer
- 32KB RAM buffer
Ports:
- 2 expansion ports:
- 1 high-speed 68 pin x 1 AV I/O port (for FMV cartridge)
- 1 high-speed 30 pin x 1 I/O expansion port
- 1 control port, capable of daisy chaining together up to 8 peripherals
Models:
- Panasonic FZ-1 R.E.A.L. 3DO Interactive Multiplayer (Japan, Asia, North America, Europe)
- Panasonic FZ-10 R.E.A.L. 3DO Interactive Multiplayer (Japan, North America, Europe)
- Goldstar 3DO Interactive Multiplayer (South Korea, North America, Europe)
- Goldstar 3DO ALIVE II (South Korea)
- Sanyo TRY 3DO Interactive Multiplayer (Japan)
- Creative 3DO Blaster - PC Card (ISA)
===========================================================================
Part list of Goldstar 3DO Interactive Multiplayer
- X1 = 50.0000 MHz KONY 95-08 50.0000 KCH089C
- X2 = 59.0000 MHz KONY 95-21 59.0000 KCH089C (NTSC would use 49.09MHz)
- IC303 BOB = 3DO BOB ADG 00919-001-IC 517A4611 - 100 pins
- IC1 ANVIL = 3DO Anvil rev4 00745-004-02 521U5L36 - 304 pins
- IC302 DSP = SONY CXD2500BQ 447HE5V - 80 pins
- IC601 ADAC = BB PCM1710U 9436 GG2553 - 28 pins
- X601 16.934MHz = 16.93440 KONY
- IC101/102/103/104 DRAM = Goldstar GM71C4800AJ70 9520 KOREA - 28 pins
- IC105/106/107/108 VRAM = Toshiba TC528267J-70 9513HBK - 40 pins
- IC3 ROM = Goldstar [202M] GM23C8000AFW-325 9524 - 32 pins
- IC4 SRAM = Goldstar GM76C256ALLFW70 - 28 pins
- IC2 ARM = ARM P60ARMCP 9516C - 100 pins
- IC6 = Philips 74HCT14D 974230Q - 14 pins
- IC301 u-COM = MC68HSC 705C8ACFB 3E20T HLAH9446 - 44 pins
***************************************************************************/
#include "emu.h"
#include "includes/3do.h"
#include "imagedev/chd_cd.h"
#include "cpu/arm/arm.h"
#include "cpu/arm7/arm7.h"
#define X2_CLOCK_PAL 59000000
#define X2_CLOCK_NTSC 49090000
#define X601_CLOCK XTAL_16_9344MHz
static ADDRESS_MAP_START( 3do_mem, AS_PROGRAM, 32)
AM_RANGE(0x00000000, 0x001FFFFF) AM_RAMBANK("bank1") AM_BASE_MEMBER(_3do_state,m_dram) /* DRAM */
AM_RANGE(0x00200000, 0x003FFFFF) AM_RAM AM_BASE_MEMBER(_3do_state,m_vram) /* VRAM */
AM_RANGE(0x03000000, 0x030FFFFF) AM_ROMBANK("bank2") /* BIOS */
AM_RANGE(0x03100000, 0x0313FFFF) AM_RAM /* Brooktree? */
AM_RANGE(0x03140000, 0x0315FFFF) AM_READWRITE(_3do_nvarea_r, _3do_nvarea_w) /* NVRAM */
AM_RANGE(0x03180000, 0x031BFFFF) AM_READWRITE(_3do_slow2_r, _3do_slow2_w) /* Slow bus - additional expansion */
AM_RANGE(0x03200000, 0x0320FFFF) AM_READWRITE(_3do_svf_r, _3do_svf_w) /* special vram access1 */
AM_RANGE(0x03300000, 0x033FFFFF) AM_READWRITE(_3do_madam_r, _3do_madam_w) /* address decoder */
AM_RANGE(0x03400000, 0x034FFFFF) AM_READWRITE(_3do_clio_r, _3do_clio_w) /* io controller */
ADDRESS_MAP_END
static INPUT_PORTS_START( 3do )
PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
INPUT_PORTS_END
static MACHINE_RESET( 3do )
{
_3do_state *state = machine.driver_data<_3do_state>();
state->m_maincpu = downcast<legacy_cpu_device*>( machine.device("maincpu") );
memory_set_bankptr(machine, "bank2",machine.region("user1")->base());
/* configure overlay */
memory_configure_bank(machine, "bank1", 0, 1, state->m_dram, 0);
memory_configure_bank(machine, "bank1", 1, 1, machine.region("user1")->base(), 0);
/* start with overlay enabled */
memory_set_bank(machine, "bank1", 1);
_3do_slow2_init(machine);
_3do_madam_init(machine);
_3do_clio_init(machine, downcast<screen_device *>(machine.device("screen")));
}
static MACHINE_CONFIG_START( 3do, _3do_state )
/* Basic machine hardware */
MCFG_CPU_ADD( "maincpu", ARM7_BE, XTAL_50MHz/4 )
MCFG_CPU_PROGRAM_MAP( 3do_mem)
MCFG_MACHINE_RESET( 3do )
// MCFG_VIDEO_START( generic_bitmapped )
MCFG_VIDEO_START( _3do )
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_FORMAT( BITMAP_FORMAT_RGB32 )
MCFG_SCREEN_RAW_PARAMS( X2_CLOCK_NTSC / 2, 1592, 254, 1534, 263, 22, 262 )
// MCFG_SCREEN_UPDATE( generic_bitmapped )
MCFG_SCREEN_UPDATE( _3do )
MCFG_CDROM_ADD( "cdrom" )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( 3do_pal, _3do_state )
/* Basic machine hardware */
MCFG_CPU_ADD("maincpu", ARM7_BE, XTAL_50MHz/4 )
MCFG_CPU_PROGRAM_MAP( 3do_mem)
MCFG_MACHINE_RESET( 3do )
MCFG_VIDEO_START( generic_bitmapped )
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_FORMAT( BITMAP_FORMAT_RGB32 )
MCFG_SCREEN_SIZE( 640, 625 )
MCFG_SCREEN_VISIBLE_AREA( 0, 639, 0, 479 )
MCFG_SCREEN_REFRESH_RATE( 50 )
MCFG_SCREEN_UPDATE( generic_bitmapped )
MCFG_CDROM_ADD( "cdrom" )
MACHINE_CONFIG_END
ROM_START(3do)
ROM_REGION32_BE( 0x100000, "user1", 0 )
ROM_SYSTEM_BIOS( 0, "panafz10", "Panasonic FZ-10 R.E.A.L. 3DO Interactive Multiplayer" )
ROMX_LOAD( "panafz10.bin", 0x000000, 0x100000, CRC(58242cee) SHA1(3c912300775d1ad730dc35757e279c274c0acaad), ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "goldstar", "Goldstar 3DO Interactive Multiplayer v1.01m" )
ROMX_LOAD( "goldstar.bin", 0x000000, 0x100000, CRC(b6f5028b) SHA1(c4a2e5336f77fb5f743de1eea2cda43675ee2de7), ROM_BIOS(2) )
ROM_SYSTEM_BIOS( 2, "panafz1", "Panasonic FZ-1 R.E.A.L. 3DO Interactive Multiplayer" )
ROMX_LOAD( "panafz1.bin", 0x000000, 0x100000, CRC(c8c8ff89) SHA1(34bf189111295f74d7b7dfc1f304d98b8d36325a), ROM_BIOS(3) )
ROM_SYSTEM_BIOS( 3, "gsalive2", "Goldstar 3DO Alive II" )
ROMX_LOAD( "gsalive2.bin", 0x000000, 0x100000, NO_DUMP, ROM_BIOS(4) )
ROM_SYSTEM_BIOS( 4, "sanyotry", "Sanyo TRY 3DO Interactive Multiplayer" )
ROMX_LOAD( "sanyotry.bin", 0x000000, 0x100000, CRC(d5cbc509) SHA1(b01c53da256dde43ffec4ad3fc3adfa8d635e943), ROM_BIOS(5) )
ROM_END
ROM_START(3do_pal)
ROM_REGION32_BE( 0x100000, "user1", 0 )
ROM_SYSTEM_BIOS( 0, "panafz10", "Panasonic FZ-10 R.E.A.L. 3DO Interactive Multiplayer" )
ROMX_LOAD( "panafz10.bin", 0x000000, 0x100000, CRC(58242cee) SHA1(3c912300775d1ad730dc35757e279c274c0acaad), ROM_BIOS(1) )
ROM_SYSTEM_BIOS( 1, "goldstar", "Goldstar 3DO Interactive Multiplayer v1.01m" )
ROMX_LOAD( "goldstar.bin", 0x000000, 0x100000, CRC(b6f5028b) SHA1(c4a2e5336f77fb5f743de1eea2cda43675ee2de7), ROM_BIOS(2) )
ROM_SYSTEM_BIOS( 2, "panafz1", "Panasonic FZ-1 R.E.A.L. 3DO Interactive Multiplayer" )
ROMX_LOAD( "panafz1.bin", 0x000000, 0x100000, CRC(c8c8ff89) SHA1(34bf189111295f74d7b7dfc1f304d98b8d36325a), ROM_BIOS(3) )
ROM_END
/***************************************************************************
Game driver(s)
***************************************************************************/
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
CONS( 1991, 3do, 0, 0, 3do, 3do, 0, "3DO", "3DO (NTSC)", GAME_NOT_WORKING | GAME_NO_SOUND )
CONS( 1991, 3do_pal, 3do, 0, 3do_pal, 3do, 0, "3DO", "3DO (PAL)", GAME_NOT_WORKING | GAME_NO_SOUND )
//TODO: orbatak, Arcade prototype

202
src/mame/includes/3do.h Normal file
View File

@ -0,0 +1,202 @@
/*****************************************************************************
*
* includes/3do.h
*
****************************************************************************/
#ifndef _3DO_H_
#define _3DO_H_
typedef struct {
/* 03180000 - 0318003f - configuration group */
/* 03180040 - 0318007f - diagnostic UART */
UINT8 cg_r_count;
UINT8 cg_w_count;
UINT32 cg_input;
UINT32 cg_output;
} SLOW2;
typedef struct {
UINT32 revision; /* 03300000 */
UINT32 msysbits; /* 03300004 */
UINT32 mctl; /* 03300008 */
UINT32 sltime; /* 0330000c */
UINT32 abortbits; /* 03300020 */
UINT32 privbits; /* 03300024 */
UINT32 statbits; /* 03300028 */
UINT32 diag; /* 03300040 */
UINT32 ccobctl0; /* 03300110 */
UINT32 ppmpc; /* 03300120 */
UINT32 regctl0; /* 03300130 */
UINT32 regctl1; /* 03300134 */
UINT32 regctl2; /* 03300138 */
UINT32 regctl3; /* 0330013c */
UINT32 xyposh; /* 03300140 */
UINT32 xyposl; /* 03300144 */
UINT32 linedxyh; /* 03300148 */
UINT32 linedxyl; /* 0330014c */
UINT32 dxyh; /* 03300150 */
UINT32 dxyl; /* 03300154 */
UINT32 ddxyh; /* 03300158 */
UINT32 ddxyl; /* 0330015c */
UINT32 pip[16]; /* 03300180-033001bc (W); 03300180-033001fc (R) */
UINT32 fence[16]; /* 03300200-0330023c (W); 03300200-0330027c (R) */
UINT32 mmu[64]; /* 03300300-033003fc */
UINT32 dma[32][4]; /* 03300400-033005fc */
UINT32 mult[40]; /* 03300600-0330069c */
UINT32 mult_control; /* 033007f0-033007f4 */
UINT32 mult_status; /* 033007f8 */
} MADAM;
typedef struct {
screen_device *screen;
UINT32 revision; /* 03400000 */
UINT32 csysbits; /* 03400004 */
UINT32 vint0; /* 03400008 */
UINT32 vint1; /* 0340000c */
UINT32 audin; /* 03400020 */
UINT32 audout; /* 03400024 */
UINT32 cstatbits; /* 03400028 */
UINT32 wdog; /* 0340002c */
UINT32 hcnt; /* 03400030 */
UINT32 vcnt; /* 03400034 */
UINT32 seed; /* 03400038 */
UINT32 random; /* 0340004c */
UINT32 irq0; /* 03400040 / 03400044 */
UINT32 irq0_enable; /* 03400048 / 0340004c */
UINT32 mode; /* 03400050 / 03400054 */
UINT32 badbits; /* 03400058 */
UINT32 spare; /* 0340005c */
UINT32 irq1; /* 03400060 / 03400064 */
UINT32 irq1_enable; /* 03400068 / 0340006c */
UINT32 hdelay; /* 03400080 */
UINT32 adbio; /* 03400084 */
UINT32 adbctl; /* 03400088 */
/* Timers */
UINT32 timer0; /* 03400100 */
UINT32 timerback0; /* 03400104 */
UINT32 timer1; /* 03400108 */
UINT32 timerback1; /* 0340010c */
UINT32 timer2; /* 03400110 */
UINT32 timerback2; /* 03400114 */
UINT32 timer3; /* 03400118 */
UINT32 timerback3; /* 0340011c */
UINT32 timer4; /* 03400120 */
UINT32 timerback4; /* 03400124 */
UINT32 timer5; /* 03400128 */
UINT32 timerback5; /* 0340012c */
UINT32 timer6; /* 03400130 */
UINT32 timerback6; /* 03400134 */
UINT32 timer7; /* 03400138 */
UINT32 timerback7; /* 0340013c */
UINT32 timer8; /* 03400140 */
UINT32 timerback8; /* 03400144 */
UINT32 timer9; /* 03400148 */
UINT32 timerback9; /* 0340014c */
UINT32 timer10; /* 03400150 */
UINT32 timerback10; /* 03400154 */
UINT32 timer11; /* 03400158 */
UINT32 timerback11; /* 0340015c */
UINT32 timer12; /* 03400160 */
UINT32 timerback12; /* 03400164 */
UINT32 timer13; /* 03400168 */
UINT32 timerback13; /* 0340016c */
UINT32 timer14; /* 03400170 */
UINT32 timerback14; /* 03400174 */
UINT32 timer15; /* 03400178 */
UINT32 timerback15; /* 0340017c */
UINT32 settm0; /* 03400200 */
UINT32 clrtm0; /* 03400204 */
UINT32 settm1; /* 03400208 */
UINT32 clrtm1; /* 0340020c */
UINT32 slack; /* 03400220 */
/* DMA */
UINT32 dmareqdis; /* 03400308 */
/* Expansion bus */
UINT32 expctl; /* 03400400/03400404 */
UINT32 type0_4; /* 03400408 */
UINT32 dipir1; /* 03400410 */
UINT32 dipir2; /* 03400414 */
/* Bus signals */
UINT32 sel; /* 03400500 - 0340053f */
UINT32 poll; /* 03400540 - 0340057f */
UINT32 cmdstat; /* 03400580 - 034005bf */
UINT32 data; /* 034005c0 - 034005ff */
/* DSPP */
UINT32 semaphore; /* 034017d0 */
UINT32 semaack; /* 034017d4 */
UINT32 dsppdma; /* 034017e0 */
UINT32 dspprst0; /* 034017e4 */
UINT32 dspprst1; /* 034017e8 */
UINT32 dspppc; /* 034017f4 */
UINT32 dsppnr; /* 034017f8 */
UINT32 dsppgw; /* 034017fc */
UINT32 dsppn[0x400]; /* 03401800 - 03401bff DSPP N stack (32bit writes) */
/* 03402000 - 034027ff DSPP N stack (16bit writes) */
UINT32 dsppei[0x100]; /* 03403000 - 034030ff DSPP EI stack (32bit writes) */
/* 03403400 - 034035ff DSPP EI stack (16bit writes) */
UINT32 dsppeo[0x1f]; /* 03403800 - 0340381f DSPP EO stack (32bit reads) */
/* 03403c00 - 03403c3f DSPP EO stack (32bit reads) */
UINT32 dsppclkreload; /* 034039dc / 03403fbc */
/* UNCLE */
UINT32 unclerev; /* 0340c000 */
UINT32 uncle_soft_rev; /* 0340c004 */
UINT32 uncle_addr; /* 0340c008 */
UINT32 uncle_rom; /* 0340c00c */
} CLIO;
typedef struct {
UINT32 sport[512];
UINT32 color;
} SVF;
class _3do_state : public driver_device
{
public:
_3do_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) { }
legacy_cpu_device* m_maincpu;
UINT32 *m_dram;
UINT32 *m_vram;
SLOW2 m_slow2;
MADAM m_madam;
CLIO m_clio;
SVF m_svf;
UINT8 m_video_bits[512];
};
/*----------- defined in machine/3do.c -----------*/
READ32_HANDLER( _3do_nvarea_r );
WRITE32_HANDLER( _3do_nvarea_w );
READ32_HANDLER( _3do_slow2_r );
WRITE32_HANDLER( _3do_slow2_w );
void _3do_slow2_init( running_machine &machine );
READ32_HANDLER( _3do_svf_r );
WRITE32_HANDLER( _3do_svf_w );
READ32_HANDLER( _3do_madam_r );
WRITE32_HANDLER( _3do_madam_w );
void _3do_madam_init( running_machine &machine );
READ32_HANDLER( _3do_clio_r );
WRITE32_HANDLER( _3do_clio_w );
void _3do_clio_init( running_machine &machine, screen_device *screen );
VIDEO_START( _3do );
SCREEN_UPDATE( _3do );
#endif /* _3DO_H_ */

1031
src/mame/machine/3do.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -12268,6 +12268,10 @@ strike
// most are commented out for now, the exceptions being sets which act as the parents to actual MAME drivers
// due to the arcade units being based on stock retail console units.
// 3DO
3do
3do_pal
// Sega Megadrive / Genesis and related systems
// (hardware used by Megatech, Megaplay + many standalone boards)
//genesis // (c)1989 Sega
@ -12322,4 +12326,4 @@ cd32 // (c)1993 Commodore
// GCE Vectrex
// (parent to Spectrum I+)
vectrex // (c)1982 GCE
vectrex // (c)1982 GCE

View File

@ -1613,8 +1613,9 @@ $(MAMEOBJ)/pinball.a: \
#-------------------------------------------------
$(MAMEOBJ)/misc.a: \
$(DRIVERS)/39in1.o \
$(DRIVERS)/1945kiii.o \
$(DRIVERS)/39in1.o \
$(DRIVERS)/3do.o $(MACHINE)/3do.o \
$(DRIVERS)/4enraya.o $(VIDEO)/4enraya.o \
$(DRIVERS)/5clown.o \
$(DRIVERS)/acefruit.o \