- added MESS PC-Engine emulatation
- added Blazing Lazers (working)
- added Paranoia (non-working due to lack of jamma interface 
emulation)
- fixed MAME debug build under VC2003

Please co-credit Charles MacDonald & Mr. Do for Blazing Lazers.

Note to Nathan: video/vdc.* re taken as-is from MESS, for the 
machine stuff I extracted common code (to be shared by MAME and 
MESS) and created machine/pcecommn.*
This commit is contained in:
davidhay 2008-01-10 22:34:51 +00:00
parent d194ca43eb
commit 47cf2c7874
12 changed files with 1702 additions and 2 deletions

6
.gitattributes vendored
View File

@ -1727,6 +1727,7 @@ src/mame/drivers/pandoras.c svneol=native#text/plain
src/mame/drivers/pangofun.c svneol=native#text/plain
src/mame/drivers/panicr.c svneol=native#text/plain
src/mame/drivers/paradise.c svneol=native#text/plain
src/mame/drivers/paranoia.c svneol=native#text/plain
src/mame/drivers/parodius.c svneol=native#text/plain
src/mame/drivers/pasha2.c svneol=native#text/plain
src/mame/drivers/pass.c svneol=native#text/plain
@ -2025,6 +2026,7 @@ src/mame/drivers/twin16.c svneol=native#text/plain
src/mame/drivers/twincobr.c svneol=native#text/plain
src/mame/drivers/twins.c svneol=native#text/plain
src/mame/drivers/tx1.c svneol=native#text/plain
src/mame/drivers/uapce.c svneol=native#text/plain
src/mame/drivers/ultraman.c svneol=native#text/plain
src/mame/drivers/ultratnk.c svneol=native#text/plain
src/mame/drivers/ultrsprt.c svneol=native#text/plain
@ -2477,6 +2479,8 @@ src/mame/machine/nmk112.h svneol=native#text/plain
src/mame/machine/nycaptor.c svneol=native#text/plain
src/mame/machine/opwolf.c svneol=native#text/plain
src/mame/machine/pacplus.c svneol=native#text/plain
src/mame/machine/pcecommn.c svneol=native#text/plain
src/mame/machine/pcecommn.h svneol=native#text/plain
src/mame/machine/pckeybrd.c svneol=native#text/plain
src/mame/machine/pckeybrd.h svneol=native#text/plain
src/mame/machine/pcshare.c svneol=native#text/plain
@ -3206,6 +3210,8 @@ src/mame/video/usgames.c svneol=native#text/plain
src/mame/video/vaportra.c svneol=native#text/plain
src/mame/video/vastar.c svneol=native#text/plain
src/mame/video/vball.c svneol=native#text/plain
src/mame/video/vdc.c svneol=native#text/plain
src/mame/video/vdc.h svneol=native#text/plain
src/mame/video/vendetta.c svneol=native#text/plain
src/mame/video/vertigo.c svneol=native#text/plain
src/mame/video/vicdual.c svneol=native#text/plain

188
src/mame/drivers/paranoia.c Normal file
View File

@ -0,0 +1,188 @@
/****************************************************************************
Paranoia
Driver by Mariusz Wojcieszek
Notes:
- jamma interface is not emulated, hence the game is marked as 'not working'
- rom mapping, memory maps and clocks for jamma interface cpus are probably not correct
Paranoia by Naxat Soft 1990
CPU Z84C00A85 (Z80A CPU)
Xtal : 18.000 Mhz
Ram : GM76C28A (Goldstar)
Ram : 2x W2416K-70 (Winbond)
Else :
Winbond WF19054
Sound : Nec D8085AHC + Nec D8155HC
This board has also :
HuC6260A (Hudson)
HuC6270 (Hudson)
HuC6280A (Hudson)
2x HSRM2564LM12
1x HSRM2564LM10
****************************************************************************/
#include "driver.h"
#include "machine/pcecommn.h"
#include "video/vdc.h"
#include "cpu/h6280/h6280.h"
#include "sound/c6280.h"
static INPUT_PORTS_START( paranoia )
PORT_START_TAG( "IN" )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* button I */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* button II */
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* select */
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) /* run */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
INPUT_PORTS_END
static ADDRESS_MAP_START( pce_mem , ADDRESS_SPACE_PROGRAM, 8)
AM_RANGE( 0x000000, 0x03FFFF) AM_ROM
AM_RANGE( 0x1F0000, 0x1F1FFF) AM_RAM AM_MIRROR(0x6000) AM_BASE( &pce_user_ram )
AM_RANGE( 0x1FE000, 0x1FE3FF) AM_READWRITE( vdc_0_r, vdc_0_w )
AM_RANGE( 0x1FE400, 0x1FE7FF) AM_READWRITE( vce_r, vce_w )
AM_RANGE( 0x1FE800, 0x1FEBFF) AM_READWRITE( C6280_r, C6280_0_w )
AM_RANGE( 0x1FEC00, 0x1FEFFF) AM_READWRITE( H6280_timer_r, H6280_timer_w )
AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE( pce_joystick_r, pce_joystick_w )
AM_RANGE( 0x1FF400, 0x1FF7FF) AM_READWRITE( H6280_irq_status_r, H6280_irq_status_w )
ADDRESS_MAP_END
static ADDRESS_MAP_START( pce_io , ADDRESS_SPACE_IO, 8)
AM_RANGE( 0x00, 0x03) AM_READWRITE( vdc_0_r, vdc_0_w )
ADDRESS_MAP_END
static WRITE8_HANDLER( paranoia_8085_d000_w )
{
//logerror( "D000 (8085) write %02x\n", data );
}
static WRITE8_HANDLER( paranoia_8085_8155_w )
{
switch( offset )
{
case 0: logerror( "8155 Command register write %x, timer command = %x, interrupt enable = %x, ports = %x\n", data, (data >> 6) & 3, (data >> 4) & 3, data & 0xf ); break;
case 1: logerror( "8155 I/O Port A write %x\n", data ); break;
case 2: logerror( "8155 I/O Port B write %x\n", data ); break;
case 3: logerror( "8155 I/O Port C (or control) write %x\n", data ); break;
case 4: logerror( "8155 Timer low 8 bits write %x\n", data ); break;
case 5: logerror( "8155 Timer high 6 bits write %x, timer mode %x\n", data & 0x3f, (data >> 6) & 3); break;
}
}
ADDRESS_MAP_START(paranoia_8085_map, ADDRESS_SPACE_PROGRAM, 8)
AM_RANGE( 0x0000, 0x7fff) AM_ROM
AM_RANGE( 0x8000, 0x80ff) AM_RAM
AM_RANGE( 0x8100, 0x8105) AM_WRITE( paranoia_8085_8155_w )
AM_RANGE( 0xd000, 0xd000) AM_WRITE( paranoia_8085_d000_w )
AM_RANGE( 0xe000, 0xe1ff) AM_RAM
ADDRESS_MAP_END
ADDRESS_MAP_START(paranoia_8085_io_map, ADDRESS_SPACE_IO, 8)
ADDRESS_MAP_END
ADDRESS_MAP_START(paranoia_z80_map, ADDRESS_SPACE_PROGRAM, 8)
AM_RANGE( 0x0000, 0x3fff) AM_ROM
AM_RANGE( 0x6000, 0x67ff) AM_RAM
AM_RANGE( 0x7000, 0x73ff) AM_RAM
ADDRESS_MAP_END
static READ8_HANDLER(paranoia_z80_io_01_r)
{
return 0;
}
static READ8_HANDLER(paranoia_z80_io_02_r)
{
return 0;
}
static WRITE8_HANDLER(paranoia_z80_io_17_w)
{
}
static WRITE8_HANDLER(paranoia_z80_io_37_w)
{
}
ADDRESS_MAP_START(paranoia_z80_io_map, ADDRESS_SPACE_IO, 8)
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
AM_RANGE( 0x01, 0x01 ) AM_READ( paranoia_z80_io_01_r )
AM_RANGE( 0x02, 0x02 ) AM_READ( paranoia_z80_io_02_r )
AM_RANGE( 0x17, 0x17 ) AM_WRITE( paranoia_z80_io_17_w )
AM_RANGE( 0x37, 0x37 ) AM_WRITE( paranoia_z80_io_37_w )
ADDRESS_MAP_END
static MACHINE_DRIVER_START( paranoia )
/* basic machine hardware */
MDRV_CPU_ADD(H6280, PCE_MAIN_CLOCK/3)
MDRV_CPU_PROGRAM_MAP(pce_mem, 0)
MDRV_CPU_IO_MAP(pce_io, 0)
MDRV_CPU_VBLANK_INT(pce_interrupt, VDC_LPF)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION)
MDRV_INTERLEAVE(1)
MDRV_CPU_ADD(8085A, 18000000/6)
MDRV_CPU_PROGRAM_MAP(paranoia_8085_map,0)
MDRV_CPU_IO_MAP(paranoia_8085_io_map,0)
MDRV_CPU_ADD(Z80, 18000000/6)
MDRV_CPU_PROGRAM_MAP(paranoia_z80_map,0)
MDRV_CPU_IO_MAP(paranoia_z80_io_map,0)
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_ADD("main",0)
MDRV_SCREEN_RAW_PARAMS(PCE_MAIN_CLOCK/2, VDC_WPF, 70, 70 + 512 + 32, VDC_LPF, 14, 14+242)
/* MDRV_GFXDECODE( pce_gfxdecodeinfo ) */
MDRV_PALETTE_LENGTH(1024)
MDRV_PALETTE_INIT( vce )
MDRV_COLORTABLE_LENGTH(1024)
MDRV_VIDEO_START( pce )
MDRV_VIDEO_UPDATE( pce )
MDRV_SPEAKER_STANDARD_STEREO("left","right")
MDRV_SOUND_ADD(C6280, PCE_MAIN_CLOCK/6)
MDRV_SOUND_ROUTE(0, "left", 1.00)
MDRV_SOUND_ROUTE(1, "right", 1.00)
MACHINE_DRIVER_END
ROM_START(paranoia)
ROM_REGION( 0x40000, REGION_CPU1, 0 )
ROM_LOAD( "5.201", 0x00000, 0x40000, CRC(9893e0e6) SHA1(b3097e7f163e4a067cf32f290e59657a8b5e271b) )
ROM_REGION( 0x8000, REGION_CPU2, 0 )
ROM_LOAD( "6.29", 0x0000, 0x8000, CRC(5517532e) SHA1(df8f1621abf1f0c65d86d406cd79d97ec233c378) )
ROM_REGION( 0x20000, REGION_CPU3, 0 )
ROM_LOAD( "1.319", 0x00000, 0x8000, CRC(ef9f85d8) SHA1(951239042b56cd256daf1965ead2949e2bddcd8b) )
ROM_LOAD( "2.318", 0x08000, 0x8000, CRC(a35fccca) SHA1(d50e9044a97fe77f31e3198bb6759ba451359069) )
ROM_LOAD( "3.317", 0x10000, 0x8000, CRC(e3e48ec1) SHA1(299820d0e4fb2fd947c7a52f1c49e2e4d0dd050a) )
ROM_LOAD( "4.352", 0x18000, 0x8000, CRC(11297fed) SHA1(17a294e65ba1c4806307602dee4c7c627ad1fcfd) )
ROM_END
static DRIVER_INIT(paranoia)
{
driver_init_pce(machine);
};
GAME( 1990, paranoia, 0, paranoia, paranoia, paranoia, ROT0, "Naxat Soft", "Paranoia", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )

View File

@ -242,6 +242,7 @@ DRIVER_INIT(elandore);
DRIVER_INIT(rsgun);
DRIVER_INIT(ffreveng);
DRIVER_INIT(decathlt);
DRIVER_INIT(nameclv3);
/**************************************************************************************/
/*to be added into a stv Header file,remember to remove all the static...*/
@ -3853,7 +3854,7 @@ GAME( 1995, suikoenb, stvbios, stv, stv, suikoenb, ROT0, "Data East",
GAME( 1996, vfkids, stvbios, stv, stv, ic13, ROT0, "Sega", "Virtua Fighter Kids (JUET 960319 V0.000)", GAME_IMPERFECT_SOUND )
GAME( 1997, winterht, stvbios, stv, stv, winterht, ROT0, "Sega", "Winter Heat (JUET 971012 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1997, znpwfv, stvbios, stv, stv, znpwfv, ROT0, "Sega", "Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
GAME( 1997, nclubv3, stvbios, stv, stv, stv, ROT0, "Sega", "Name Club Ver.3", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // seems to work, although it could do with speedups, and the printer isn't emulated..
GAME( 1997, nclubv3, stvbios, stv, stv, nameclv3, ROT0, "Sega", "Name Club Ver.3 (J 970723 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // seems to work, although it could do with speedups, and the printer isn't emulated..
/* Almost */
GAME( 1997, vmahjong, stvbios, stv, stvmp,stv, ROT0, "Micronet", "Virtual Mahjong (J 961214 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )

View File

@ -1404,3 +1404,23 @@ DRIVER_INIT(decathlt)
install_decathlt_protection();
driver_init_ic13(machine);
}
static READ32_HANDLER( nameclv3_speedup_r )
{
if (activecpu_get_pc()==0x601eb4e) cpu_spinuntil_time(ATTOTIME_IN_USEC(30));
return stv_workram_h[0x0452c0/4];
}
static void nameclv3_slave_speedup( UINT32 data )
{
if ( activecpu_get_pc() == 0x0602B810 )
if ( (data & 0x00800000) == 0 )
cpunum_spinuntil_trigger(1, 1000);
}
DRIVER_INIT(nameclv3)
{
memory_install_read32_handler(0, ADDRESS_SPACE_PROGRAM, 0x60452c0, 0x60452c3, 0, 0, nameclv3_speedup_r );
cpunum_set_info_fct(1, CPUINFO_PTR_SH2_FTCSR_READ_CALLBACK, (genf*)nameclv3_slave_speedup );
driver_init_stv(machine);
}

230
src/mame/drivers/uapce.c Normal file
View File

@ -0,0 +1,230 @@
/*
United Amusement PC-Engine based hardware
Driver by Mariusz Wojcieszek
Thanks for Charles MacDonald for hardware docs
Overview
The system consists of a stock PC-Engine console, JAMMA interface board,
and several cables to connect certain pins from the PCE backplane connector
and pad connector to the interface board.
History
In 1989 United Amusement (a large operator of arcades in the US at that
time) developed a JAMMA interface for the PC-Engine with NEC's blessing. NEC
pulled funding for the project before mass production began, and it never
took off.
Driver notes:
- game time is controlled using software loop - with current clock it takes lots
of time until credit expires. Should Z80 clock be raised?
- tone played by jamma if board is not emulated
*/
#include "driver.h"
#include "machine/pcecommn.h"
#include "video/vdc.h"
#include "cpu/h6280/h6280.h"
#include "sound/c6280.h"
static UINT8 jamma_if_control_latch = 0;
static WRITE8_HANDLER( jamma_if_control_latch_w )
{
UINT8 diff = data ^ jamma_if_control_latch;
jamma_if_control_latch = data;
sound_global_enable( (data >> 7) & 1 );
if ( diff & 0x40 )
{
cpunum_set_input_line(0, INPUT_LINE_RESET, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
}
// bit 3 - enable 752 Hz (D-3) square wave output
logerror( "Writing control latch with %02X\n", data );
};
static READ8_HANDLER( jamma_if_control_latch_r )
{
return jamma_if_control_latch & 0x08;
};
static READ8_HANDLER( jamma_if_read_dsw )
{
UINT8 dsw_val;
dsw_val = readinputportbytag( "DSW" );
if ( BIT( offset, 7 ) == 0 )
{
dsw_val >>= 7;
}
else if ( BIT( offset, 6 ) == 0 )
{
dsw_val >>= 6;
}
else if ( BIT( offset, 5 ) == 0 )
{
dsw_val >>= 5;
}
else if ( BIT( offset, 4 ) == 0 )
{
dsw_val >>= 4;
}
else if ( BIT( offset, 3 ) == 0 )
{
dsw_val >>= 3;
}
else if ( BIT( offset, 2 ) == 0 )
{
dsw_val >>= 2;
}
else if ( BIT( offset, 1 ) == 0 )
{
dsw_val >>= 1;
}
else if ( BIT( offset, 0 ) == 0 )
{
dsw_val >>= 0;
}
return dsw_val & 1;
};
static UINT8 jamma_if_read_joystick( void )
{
if ( jamma_if_control_latch & 0x10 )
{
return readinputportbytag( "IN" );
}
else
{
return readinputportbytag( "IN" ) | 0x08;
}
};
static MACHINE_RESET( uapce )
{
pce_set_joystick_readinputport_callback( jamma_if_read_joystick );
jamma_if_control_latch = 0;
};
ADDRESS_MAP_START( z80_map, ADDRESS_SPACE_PROGRAM, 8)
AM_RANGE( 0x0000, 0x07FF) AM_ROM
AM_RANGE( 0x0800, 0x0FFF) AM_RAM
AM_RANGE( 0x1000, 0x17FF) AM_WRITE( jamma_if_control_latch_w )
AM_RANGE( 0x1800, 0x1FFF) AM_READ( jamma_if_read_dsw )
AM_RANGE( 0x2000, 0x27FF) AM_READ( port_tag_to_handler8( "COIN" ) )
AM_RANGE( 0x2800, 0x2FFF) AM_READ( jamma_if_control_latch_r )
ADDRESS_MAP_END
static INPUT_PORTS_START( uapce )
PORT_START_TAG( "IN" )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) /* button I */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* button II */
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) /* select */
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) /* run */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_START_TAG( "DSW" )
PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x04, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x05, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x06, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x03, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 1C_3C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_4C ) )
PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) )
PORT_DIPNAME( 0x38, 0x00, "Game timer (?)" )
PORT_DIPSETTING( 0x00, "Game timer setting 1" )
PORT_DIPSETTING( 0x08, "Game timer setting 2" )
PORT_DIPSETTING( 0x10, "Game timer setting 3" )
PORT_DIPSETTING( 0x18, "Game timer setting 4" )
PORT_DIPSETTING( 0x20, "Game timer setting 5" )
PORT_DIPSETTING( 0x28, "Game timer setting 6" )
PORT_DIPSETTING( 0x30, "Game timer setting 7" )
PORT_DIPSETTING( 0x38, "Game timer setting 8" )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START_TAG( "COIN" )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1)
INPUT_PORTS_END
static ADDRESS_MAP_START( pce_mem , ADDRESS_SPACE_PROGRAM, 8)
AM_RANGE( 0x000000, 0x09FFFF) AM_ROM
AM_RANGE( 0x1F0000, 0x1F1FFF) AM_RAM AM_MIRROR(0x6000) AM_BASE( &pce_user_ram )
AM_RANGE( 0x1FE000, 0x1FE3FF) AM_READWRITE( vdc_0_r, vdc_0_w )
AM_RANGE( 0x1FE400, 0x1FE7FF) AM_READWRITE( vce_r, vce_w )
AM_RANGE( 0x1FE800, 0x1FEBFF) AM_READWRITE( C6280_r, C6280_0_w )
AM_RANGE( 0x1FEC00, 0x1FEFFF) AM_READWRITE( H6280_timer_r, H6280_timer_w )
AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE( pce_joystick_r, pce_joystick_w )
AM_RANGE( 0x1FF400, 0x1FF7FF) AM_READWRITE( H6280_irq_status_r, H6280_irq_status_w )
ADDRESS_MAP_END
static ADDRESS_MAP_START( pce_io , ADDRESS_SPACE_IO, 8)
AM_RANGE( 0x00, 0x03) AM_READWRITE( vdc_0_r, vdc_0_w )
ADDRESS_MAP_END
static MACHINE_DRIVER_START( uapce )
/* basic machine hardware */
MDRV_CPU_ADD(H6280, PCE_MAIN_CLOCK/3)
MDRV_CPU_PROGRAM_MAP(pce_mem, 0)
MDRV_CPU_IO_MAP(pce_io, 0)
MDRV_CPU_VBLANK_INT(pce_interrupt, VDC_LPF)
MDRV_CPU_ADD(Z80, 1400000)
MDRV_CPU_PROGRAM_MAP(z80_map, 0)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION)
MDRV_INTERLEAVE(1)
MDRV_MACHINE_RESET( uapce )
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_ADD("main",0)
MDRV_SCREEN_RAW_PARAMS(PCE_MAIN_CLOCK/2, VDC_WPF, 70, 70 + 512 + 32, VDC_LPF, 14, 14+242)
/* MDRV_GFXDECODE( pce_gfxdecodeinfo ) */
MDRV_PALETTE_LENGTH(1024)
MDRV_PALETTE_INIT( vce )
MDRV_COLORTABLE_LENGTH(1024)
MDRV_VIDEO_START( pce )
MDRV_VIDEO_UPDATE( pce )
MDRV_SPEAKER_STANDARD_STEREO("left","right")
MDRV_SOUND_ADD(C6280, PCE_MAIN_CLOCK/6)
MDRV_SOUND_ROUTE(0, "left", 1.00)
MDRV_SOUND_ROUTE(1, "right", 1.00)
MACHINE_DRIVER_END
ROM_START(blazlaz)
ROM_REGION( 0x0a0000, REGION_CPU1, 0 )
ROM_LOAD( "ic1.bin", 0x000000, 0x020000, CRC(c86d44fe) SHA1(070512918e4d305db48bbda374eaff2d121909c5) )
ROM_LOAD( "ic2.bin", 0x020000, 0x020000, CRC(fb813309) SHA1(60d1ea45717a04d776b6837377467e81431f9bc6) )
ROM_LOAD( "ic3.bin", 0x080000, 0x020000, CRC(d30a2ecf) SHA1(8328b303e2ffeb694b472719e59044d41471725f) )
ROM_REGION( 0x800, REGION_CPU2, 0 )
ROM_LOAD( "u1.bin", 0x0000, 0x800, CRC(f5e538a9) SHA1(19ac9525c9ad6bea1789cc9e63cdb7fe949867d9) )
ROM_END
static DRIVER_INIT(uapce)
{
driver_init_pce(machine);
};
GAME( 1989, blazlaz, 0, uapce, uapce, uapce, ROT0, "Hudson Soft", "Blazing Lazers", GAME_IMPERFECT_SOUND )

View File

@ -0,0 +1,73 @@
#include "driver.h"
#include "machine/pcecommn.h"
#include "video/vdc.h"
#include "cpu/h6280/h6280.h"
/* system RAM */
unsigned char *pce_user_ram; /* scratch RAM at F8 */
struct pce_struct pce;
/* joystick related data*/
#define JOY_CLOCK 0x01
#define JOY_RESET 0x02
static int joystick_port_select; /* internal index of joystick ports */
static int joystick_data_select; /* which nibble of joystick data we want */
static UINT8 (*pce_joystick_readinputport_callback)(void) = NULL;
DRIVER_INIT( pce ) {
pce.io_port_options = PCE_JOY_SIG | CONST_SIG;
}
MACHINE_RESET( pce ) {
}
/* todo: how many input ports does the PCE have? */
WRITE8_HANDLER ( pce_joystick_w )
{
h6280io_set_buffer(data);
/* bump counter on a low-to-high transition of bit 1 */
if((!joystick_data_select) && (data & JOY_CLOCK))
{
joystick_port_select = (joystick_port_select + 1) & 0x07;
}
/* do we want buttons or direction? */
joystick_data_select = data & JOY_CLOCK;
/* clear counter if bit 2 is set */
if(data & JOY_RESET)
{
joystick_port_select = 0;
}
}
READ8_HANDLER ( pce_joystick_r )
{
UINT8 ret;
int data;
if ( pce_joystick_readinputport_callback != NULL )
{
data = pce_joystick_readinputport_callback();
}
else
{
data = readinputport(0);
}
if(joystick_data_select) data >>= 4;
ret = (data & 0x0F) | pce.io_port_options;
#ifdef UNIFIED_PCE
ret &= ~0x40;
#endif
return (ret);
}
void pce_set_joystick_readinputport_callback( UINT8 (*joy_read)(void))
{
pce_joystick_readinputport_callback = joy_read;
}

View File

@ -0,0 +1,34 @@
/***************************************************************************
pcecommn.h
Headers for the common stuff for NEC PC Engine/TurboGrafx16.
***************************************************************************/
#ifndef PCECOMMON_H
#define PCECOMMON_H
#define PCE_MAIN_CLOCK 21477270
extern unsigned char *pce_user_ram; /* scratch RAM at F8 */
WRITE8_HANDLER ( pce_joystick_w );
READ8_HANDLER ( pce_joystick_r );
#define TG_16_JOY_SIG 0x00
#define PCE_JOY_SIG 0x40
#define NO_CD_SIG 0x80
#define CD_SIG 0x00
/* these might be used to indicate something, but they always seem to return 1 */
#define CONST_SIG 0x30
struct pce_struct
{
UINT8 io_port_options; /*driver-specific options for the PCE*/
};
extern struct pce_struct pce;
DRIVER_INIT( pce );
MACHINE_RESET( pce );
void pce_set_joystick_readinputport_callback( UINT8 (*joy_read)(void));
#endif

View File

@ -1616,6 +1616,7 @@ $(MAMEOBJ)/misc.a: \
$(DRIVERS)/vroulet.o \
$(DRIVERS)/wldarrow.o \
$(DRIVERS)/xyonix.o $(VIDEO)/xyonix.o \
$(DRIVERS)/uapce.o $(DRIVERS)/paranoia.o $(VIDEO)/vdc.o $(MACHINE)/pcecommn.o \
#-------------------------------------------------

View File

@ -7904,5 +7904,7 @@ Other Sun games
DRIVER( gtipoker ) /* (c) 1983 GTI Inc */
DRIVER( gamecstl ) /* MAME based bootleg */
DRIVER( drw80pkr )
DRIVER( blazlaz )
DRIVER( paranoia )
#endif /* DRIVER_RECURSIVE */

1090
src/mame/video/vdc.c Normal file

File diff suppressed because it is too large Load Diff

55
src/mame/video/vdc.h Normal file
View File

@ -0,0 +1,55 @@
#include "driver.h"
#include "video/generic.h"
VIDEO_START( pce );
VIDEO_UPDATE( pce );
WRITE8_HANDLER ( vdc_0_w );
WRITE8_HANDLER ( vdc_1_w );
READ8_HANDLER ( vdc_0_r );
READ8_HANDLER ( vdc_1_r );
PALETTE_INIT( vce );
READ8_HANDLER ( vce_r );
WRITE8_HANDLER ( vce_w );
WRITE8_HANDLER( vpc_w );
READ8_HANDLER( vpc_r );
WRITE8_HANDLER( sgx_vdc_w );
READ8_HANDLER( sgx_vdc_r );
INTERRUPT_GEN( pce_interrupt );
INTERRUPT_GEN( sgx_interrupt );
/* Screen timing stuff */
#define VDC_WPF 684 /* width of a line in frame including blanking areas */
#define VDC_LPF 262 /* number of lines in a single frame */
/* Bits in the VDC status register */
#define VDC_BSY 0x40 /* Set when the VDC accesses VRAM */
#define VDC_VD 0x20 /* Set when in the vertical blanking period */
#define VDC_DV 0x10 /* Set when a VRAM > VRAM DMA transfer is done */
#define VDC_DS 0x08 /* Set when a VRAM > SATB DMA transfer is done */
#define VDC_RR 0x04 /* Set when the current scanline equals the RCR register */
#define VDC_OR 0x02 /* Set when there are more than 16 sprites on a line */
#define VDC_CR 0x01 /* Set when sprite #0 overlaps with another sprite */
/* Bits in the CR register */
#define CR_BB 0x80 /* Background blanking */
#define CR_SB 0x40 /* Object blanking */
#define CR_VR 0x08 /* Interrupt on vertical blank enable */
#define CR_RC 0x04 /* Interrupt on line compare enable */
#define CR_OV 0x02 /* Interrupt on sprite overflow enable */
#define CR_CC 0x01 /* Interrupt on sprite #0 collision enable */
/* Bits in the DCR regsiter */
#define DCR_DSR 0x10 /* VRAM > SATB auto-transfer enable */
#define DCR_DID 0x08 /* Destination diretion */
#define DCR_SID 0x04 /* Source direction */
#define DCR_DVC 0x02 /* VRAM > VRAM EOT interrupt enable */
#define DCR_DSC 0x01 /* VRAM > SATB EOT interrupt enable */
/* just to keep things simple... */
enum vdc_regs {MAWR = 0, MARR, VxR, reg3, reg4, CR, RCR, BXR, BYR, MWR, HSR, HDR, VPR, VDW, VCR, DCR, SOUR, DESR, LENR, DVSSR };

View File

@ -56,7 +56,7 @@ static const translation_info gcc_translate[] =
{ 0, "-c", "/c~/Fo" },
{ 0, "-E", "/c~/E >" },
{ 0, "-S", "/c~/Fa" },
{ VS7, "-O0", "/Od /GS" },
{ VS7, "-O0", "/Od /GS /Oi" },
{ 0, "-O0", "/Od" },
{ 0, "-O1", "/O2" },
{ 0, "-O2", "/O2" },