mirror of
https://github.com/holub/mame
synced 2025-06-05 04:16:28 +03:00
log:
- 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:
parent
d194ca43eb
commit
47cf2c7874
6
.gitattributes
vendored
6
.gitattributes
vendored
@ -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
188
src/mame/drivers/paranoia.c
Normal 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 )
|
@ -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 )
|
||||
|
@ -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
230
src/mame/drivers/uapce.c
Normal 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 )
|
73
src/mame/machine/pcecommn.c
Normal file
73
src/mame/machine/pcecommn.c
Normal 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;
|
||||
}
|
34
src/mame/machine/pcecommn.h
Normal file
34
src/mame/machine/pcecommn.h
Normal 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
|
@ -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 \
|
||||
|
||||
|
||||
#-------------------------------------------------
|
||||
|
@ -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
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
55
src/mame/video/vdc.h
Normal 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 };
|
||||
|
@ -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" },
|
||||
|
Loading…
Reference in New Issue
Block a user