Added PR-8210 support to the ldplayer. Fixed step forward command on the PR-8210.

02136: cubeqst: from minimal UI cubeqst requires the optional CHD 
02127: xymg: The game name should be Xing Yun Man Guan and "Pin Yin:"should be omitted 
02138: flamegun: Debugger/Cheat System upper case cpu tag of MAIN doesn't work 
02139: In audio/system16.c, there is a reference to REGION_SOUND1 
02133: chindrah: The title of Zhong Guo Long?(Hong Kong,V011H) is Dong Fang Zhi Zhu(Hong Kong, V011H) 
02126: corrupt CHDs are reported as missing
This commit is contained in:
Aaron Giles 2008-08-22 02:43:32 +00:00
parent ba5fd30bf8
commit 7521888dd7
10 changed files with 307 additions and 245 deletions

1
.gitattributes vendored
View File

@ -1169,7 +1169,6 @@ src/mame/audio/sprint4.h svneol=native#text/plain
src/mame/audio/starwars.c svneol=native#text/plain src/mame/audio/starwars.c svneol=native#text/plain
src/mame/audio/subs.c svneol=native#text/plain src/mame/audio/subs.c svneol=native#text/plain
src/mame/audio/suna8.c svneol=native#text/plain src/mame/audio/suna8.c svneol=native#text/plain
src/mame/audio/system16.c svneol=native#text/plain
src/mame/audio/t5182.c svneol=native#text/plain src/mame/audio/t5182.c svneol=native#text/plain
src/mame/audio/t5182.h svneol=native#text/plain src/mame/audio/t5182.h svneol=native#text/plain
src/mame/audio/taito_en.c svneol=native#text/plain src/mame/audio/taito_en.c svneol=native#text/plain

View File

@ -437,6 +437,10 @@ static int audit_one_disk(core_options *options, const rom_entry *rom, const gam
else if (hash_data_has_info(record->exphash, HASH_INFO_NO_DUMP)) else if (hash_data_has_info(record->exphash, HASH_INFO_NO_DUMP))
set_status(record, AUDIT_STATUS_NOT_FOUND, SUBSTATUS_NOT_FOUND_NODUMP); set_status(record, AUDIT_STATUS_NOT_FOUND, SUBSTATUS_NOT_FOUND_NODUMP);
/* not found but optional */
else if (DISK_ISOPTIONAL(rom))
set_status(record, AUDIT_STATUS_NOT_FOUND, SUBSTATUS_NOT_FOUND_OPTIONAL);
/* not found at all */ /* not found at all */
else else
set_status(record, AUDIT_STATUS_NOT_FOUND, SUBSTATUS_NOT_FOUND); set_status(record, AUDIT_STATUS_NOT_FOUND, SUBSTATUS_NOT_FOUND);

View File

@ -2132,6 +2132,23 @@ UINT64 debug_read_opcode(offs_t address, int size, int arg)
} }
/*-------------------------------------------------
expression_cpu_index - return the CPU index
based on a case insensitive tag search
-------------------------------------------------*/
static int expression_cpu_index(running_machine *machine, const char *tag)
{
int index;
for (index = 0; index < ARRAY_LENGTH(machine->config->cpu); index++)
if (machine->config->cpu[index].tag != NULL && mame_stricmp(machine->config->cpu[index].tag, tag) == 0)
return index;
return -1;
}
/*------------------------------------------------- /*-------------------------------------------------
expression_read_memory - read 1,2,4 or 8 bytes expression_read_memory - read 1,2,4 or 8 bytes
at the given offset in the given address at the given offset in the given address
@ -2147,14 +2164,14 @@ static UINT64 expression_read_memory(const char *name, int space, UINT32 address
case EXPSPACE_PROGRAM: case EXPSPACE_PROGRAM:
case EXPSPACE_DATA: case EXPSPACE_DATA:
case EXPSPACE_IO: case EXPSPACE_IO:
cpuindex = (name != NULL) ? mame_find_cpu_index(Machine, name) : cpu_getactivecpu(); cpuindex = (name != NULL) ? expression_cpu_index(Machine, name) : cpu_getactivecpu();
if (cpuindex < 0) if (cpuindex < 0)
break; break;
return expression_read_address_space(cpuindex, ADDRESS_SPACE_PROGRAM + (space - EXPSPACE_PROGRAM), address, size); return expression_read_address_space(cpuindex, ADDRESS_SPACE_PROGRAM + (space - EXPSPACE_PROGRAM), address, size);
case EXPSPACE_OPCODE: case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE: case EXPSPACE_RAMWRITE:
cpuindex = (name != NULL) ? mame_find_cpu_index(Machine, name) : cpu_getactivecpu(); cpuindex = (name != NULL) ? expression_cpu_index(Machine, name) : cpu_getactivecpu();
if (cpuindex < 0) if (cpuindex < 0)
break; break;
if (name == NULL) if (name == NULL)
@ -2356,7 +2373,7 @@ static void expression_write_memory(const char *name, int space, UINT32 address,
case EXPSPACE_PROGRAM: case EXPSPACE_PROGRAM:
case EXPSPACE_DATA: case EXPSPACE_DATA:
case EXPSPACE_IO: case EXPSPACE_IO:
cpuindex = (name != NULL) ? mame_find_cpu_index(Machine, name) : cpu_getactivecpu(); cpuindex = (name != NULL) ? expression_cpu_index(Machine, name) : cpu_getactivecpu();
if (cpuindex < 0) if (cpuindex < 0)
break; break;
expression_write_address_space(cpuindex, ADDRESS_SPACE_PROGRAM + (space - EXPSPACE_PROGRAM), address, size, data); expression_write_address_space(cpuindex, ADDRESS_SPACE_PROGRAM + (space - EXPSPACE_PROGRAM), address, size, data);
@ -2364,7 +2381,7 @@ static void expression_write_memory(const char *name, int space, UINT32 address,
case EXPSPACE_OPCODE: case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE: case EXPSPACE_RAMWRITE:
cpuindex = (name != NULL) ? mame_find_cpu_index(Machine, name) : cpu_getactivecpu(); cpuindex = (name != NULL) ? expression_cpu_index(Machine, name) : cpu_getactivecpu();
if (cpuindex < 0) if (cpuindex < 0)
break; break;
expression_write_program_direct(cpuindex, (space == EXPSPACE_OPCODE), address, size, data); expression_write_program_direct(cpuindex, (space == EXPSPACE_OPCODE), address, size, data);
@ -2589,7 +2606,7 @@ static EXPRERR expression_validate(const char *name, int space)
case EXPSPACE_PROGRAM: case EXPSPACE_PROGRAM:
case EXPSPACE_DATA: case EXPSPACE_DATA:
case EXPSPACE_IO: case EXPSPACE_IO:
cpuindex = (name != NULL) ? mame_find_cpu_index(Machine, name) : cpu_getactivecpu(); cpuindex = (name != NULL) ? expression_cpu_index(Machine, name) : cpu_getactivecpu();
if (cpuindex < 0) if (cpuindex < 0)
return (name == NULL) ? EXPRERR_MISSING_MEMORY_NAME : EXPRERR_INVALID_MEMORY_NAME; return (name == NULL) ? EXPRERR_MISSING_MEMORY_NAME : EXPRERR_INVALID_MEMORY_NAME;
if (cpunum_addrbus_width(cpuindex, ADDRESS_SPACE_PROGRAM + (space - EXPSPACE_PROGRAM)) == 0) if (cpunum_addrbus_width(cpuindex, ADDRESS_SPACE_PROGRAM + (space - EXPSPACE_PROGRAM)) == 0)
@ -2598,7 +2615,7 @@ static EXPRERR expression_validate(const char *name, int space)
case EXPSPACE_OPCODE: case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE: case EXPSPACE_RAMWRITE:
cpuindex = (name != NULL) ? mame_find_cpu_index(Machine, name) : cpu_getactivecpu(); cpuindex = (name != NULL) ? expression_cpu_index(Machine, name) : cpu_getactivecpu();
if (cpuindex < 0) if (cpuindex < 0)
return (name == NULL) ? EXPRERR_MISSING_MEMORY_NAME : EXPRERR_INVALID_MEMORY_NAME; return (name == NULL) ? EXPRERR_MISSING_MEMORY_NAME : EXPRERR_INVALID_MEMORY_NAME;
break; break;

View File

@ -2602,9 +2602,12 @@ static void pr8210_command(laserdisc_state *ld)
break; break;
case 0x04: CMDPRINTF(("pr8210: Step forward\n")); case 0x04: CMDPRINTF(("pr8210: Step forward\n"));
/* step forward */ /* step forward one frame */
if (laserdisc_ready(ld)) if (laserdisc_ready(ld))
set_state(ld, LASERDISC_STEPPING_FORWARD, PR8210_STEP_SPEED, NULL_TARGET_FRAME); {
set_state(ld, LASERDISC_STEPPING_FORWARD, STOP_SPEED, NULL_TARGET_FRAME);
add_to_current_track(ld, ONE_TRACK);
}
break; break;
case 0x06 : CMDPRINTF(("pr8210: Chapter\n")); case 0x06 : CMDPRINTF(("pr8210: Chapter\n"));

View File

@ -1004,10 +1004,10 @@ static void process_disk_entries(rom_load_data *romdata, const char *regiontag,
err = open_disk_image(Machine->gamedrv, romp, &chd.origfile, &chd.origchd); err = open_disk_image(Machine->gamedrv, romp, &chd.origfile, &chd.origchd);
if (err != CHDERR_NONE) if (err != CHDERR_NONE)
{ {
if (err == CHDERR_UNSUPPORTED_VERSION) if (err == CHDERR_FILE_NOT_FOUND)
sprintf(&romdata->errorbuf[strlen(romdata->errorbuf)], "%s UNSUPPORTED CHD VERSION\n", astring_c(filename));
else
sprintf(&romdata->errorbuf[strlen(romdata->errorbuf)], "%s NOT FOUND\n", astring_c(filename)); sprintf(&romdata->errorbuf[strlen(romdata->errorbuf)], "%s NOT FOUND\n", astring_c(filename));
else
sprintf(&romdata->errorbuf[strlen(romdata->errorbuf)], "%s CHD ERROR: %s\n", astring_c(filename), chd_error_string(err));
/* if this is NO_DUMP, keep going, though the system may not be able to handle it */ /* if this is NO_DUMP, keep going, though the system may not be able to handle it */
if (hash_data_has_info(ROM_GETHASHDATA(romp), HASH_INFO_NO_DUMP) || DISK_ISOPTIONAL(romp)) if (hash_data_has_info(ROM_GETHASHDATA(romp), HASH_INFO_NO_DUMP) || DISK_ISOPTIONAL(romp))
@ -1043,10 +1043,7 @@ static void process_disk_entries(rom_load_data *romdata, const char *regiontag,
err = open_disk_diff(Machine->gamedrv, romp, chd.origchd, &chd.difffile, &chd.diffchd); err = open_disk_diff(Machine->gamedrv, romp, chd.origchd, &chd.difffile, &chd.diffchd);
if (err != CHDERR_NONE) if (err != CHDERR_NONE)
{ {
if (err == CHDERR_UNSUPPORTED_VERSION) sprintf(&romdata->errorbuf[strlen(romdata->errorbuf)], "%s DIFF CHD ERROR: %s\n", astring_c(filename), chd_error_string(err));
sprintf(&romdata->errorbuf[strlen(romdata->errorbuf)], "%s UNSUPPORTED CHD VERSION\n", astring_c(filename));
else
sprintf(&romdata->errorbuf[strlen(romdata->errorbuf)], "%s: CAN'T OPEN DIFF FILE\n", astring_c(filename));
romdata->errors++; romdata->errors++;
continue; continue;
} }

View File

@ -39,5 +39,6 @@ const game_driver * const drivers[] =
#else /* DRIVER_RECURSIVE */ #else /* DRIVER_RECURSIVE */
DRIVER( ldv1000 ) /* Pioneer LD-V1000 */ DRIVER( ldv1000 ) /* Pioneer LD-V1000 */
DRIVER( pr8210 ) /* Pioneer PR-8210 */
#endif /* DRIVER_RECURSIVE */ #endif /* DRIVER_RECURSIVE */

View File

@ -60,93 +60,15 @@ static input_port_value last_controls;
static UINT8 playing; static UINT8 playing;
static UINT8 displaying; static UINT8 displaying;
static UINT8 pr8210_last_was_number;
static emu_timer *pr8210_bit_timer;
static UINT32 pr8210_command_buffer_in, pr8210_command_buffer_out;
static UINT8 pr8210_command_buffer[10];
static void (*execute_command)(const device_config *laserdisc, int command); static void (*execute_command)(const device_config *laserdisc, int command);
/*************************************
*
* LD-V1000 implementation
*
*************************************/
static void ldv1000_execute(const device_config *laserdisc, int command)
{
static const UINT8 digits[10] = { 0x3f, 0x0f, 0x8f, 0x4f, 0x2f, 0xaf, 0x6f, 0x1f, 0x9f, 0x5f };
switch (command)
{
case CMD_SCAN_REVERSE:
laserdisc_data_w(laserdisc, 0xf8);
playing = TRUE;
break;
case CMD_SCAN_REVERSE_END:
laserdisc_data_w(laserdisc, 0xfd);
playing = TRUE;
break;
case CMD_STEP_REVERSE:
laserdisc_data_w(laserdisc, 0xfe);
playing = FALSE;
break;
case CMD_SCAN_FORWARD:
laserdisc_data_w(laserdisc, 0xf0);
playing = TRUE;
break;
case CMD_SCAN_FORWARD_END:
laserdisc_data_w(laserdisc, 0xfd);
playing = TRUE;
break;
case CMD_STEP_FORWARD:
laserdisc_data_w(laserdisc, 0xf6);
playing = FALSE;
break;
case CMD_PLAY:
laserdisc_data_w(laserdisc, 0xfd);
playing = TRUE;
break;
case CMD_PAUSE:
laserdisc_data_w(laserdisc, 0xa0);
playing = FALSE;
break;
case CMD_DISPLAY_ON:
laserdisc_data_w(laserdisc, digits[1]);
laserdisc_data_w(laserdisc, 0xf1);
break;
case CMD_DISPLAY_OFF:
laserdisc_data_w(laserdisc, digits[0]);
laserdisc_data_w(laserdisc, 0xf1);
break;
case CMD_0:
case CMD_1:
case CMD_2:
case CMD_3:
case CMD_4:
case CMD_5:
case CMD_6:
case CMD_7:
case CMD_8:
case CMD_9:
laserdisc_data_w(laserdisc, digits[command - CMD_0]);
break;
case CMD_SEARCH:
laserdisc_data_w(laserdisc, 0xf7);
playing = FALSE;
break;
}
}
/************************************* /*************************************
* *
* Timers and sync * Timers and sync
@ -244,7 +166,7 @@ static TIMER_CALLBACK( autoplay )
const device_config *laserdisc = device_list_first(machine->config->devicelist, LASERDISC); const device_config *laserdisc = device_list_first(machine->config->devicelist, LASERDISC);
/* start playing */ /* start playing */
laserdisc_data_w(laserdisc, 0xfd); (*execute_command)(laserdisc, CMD_PLAY);
playing = TRUE; playing = TRUE;
displaying = FALSE; displaying = FALSE;
} }
@ -261,6 +183,240 @@ static MACHINE_RESET( ldplayer )
/*************************************
*
* PR-8210 implementation
*
*************************************/
INLINE void pr8210_add_command(UINT8 command)
{
pr8210_command_buffer[pr8210_command_buffer_in++ % ARRAY_LENGTH(pr8210_command_buffer)] = (command & 0x1f) | 0x20;
pr8210_command_buffer[pr8210_command_buffer_in++ % ARRAY_LENGTH(pr8210_command_buffer)] = (command & 0x1f) | 0x20;
pr8210_command_buffer[pr8210_command_buffer_in++ % ARRAY_LENGTH(pr8210_command_buffer)] = 0x00 | 0x20;
}
static TIMER_CALLBACK( pr8210_bit_off_callback )
{
const device_config *laserdisc = ptr;
/* deassert the control line */
laserdisc_line_w(laserdisc, LASERDISC_LINE_CONTROL, CLEAR_LINE);
}
static TIMER_CALLBACK( pr8210_bit_callback )
{
attotime duration = ATTOTIME_IN_MSEC(30);
const device_config *laserdisc = ptr;
UINT8 bitsleft = param >> 16;
UINT8 data = param;
/* if we have bits, process */
if (bitsleft != 0)
{
/* assert the line and set a timer for deassertion */
laserdisc_line_w(laserdisc, LASERDISC_LINE_CONTROL, ASSERT_LINE);
timer_set(ATTOTIME_IN_USEC(250), ptr, 0, pr8210_bit_off_callback);
/* space 0 bits apart by 1msec, and 1 bits by 2msec */
duration = attotime_mul(ATTOTIME_IN_MSEC(1), (data & 0x80) ? 2 : 1);
data <<= 1;
bitsleft--;
}
/* if we're out of bits, queue up the next command */
else if (bitsleft == 0 && pr8210_command_buffer_in != pr8210_command_buffer_out)
{
data = pr8210_command_buffer[pr8210_command_buffer_out++ % ARRAY_LENGTH(pr8210_command_buffer)];
bitsleft = 12;
}
timer_adjust_oneshot(pr8210_bit_timer, duration, (bitsleft << 16) | data);
}
static MACHINE_START( pr8210 )
{
const device_config *laserdisc = device_list_first(machine->config->devicelist, LASERDISC);
MACHINE_START_CALL(ldplayer);
pr8210_bit_timer = timer_alloc(pr8210_bit_callback, (void *)laserdisc);
}
static MACHINE_RESET( pr8210 )
{
MACHINE_RESET_CALL(ldplayer);
timer_adjust_oneshot(pr8210_bit_timer, attotime_zero, 0);
}
static void pr8210_execute(const device_config *laserdisc, int command)
{
static const UINT8 digits[10] = { 0x01, 0x11, 0x09, 0x19, 0x05, 0x15, 0x0d, 0x1d, 0x03, 0x13 };
int prev_was_number = pr8210_last_was_number;
pr8210_last_was_number = FALSE;
switch (command)
{
case CMD_SCAN_REVERSE:
pr8210_add_command(0x1c);
playing = TRUE;
break;
case CMD_SCAN_REVERSE_END:
pr8210_add_command(0x14);
playing = TRUE;
break;
case CMD_STEP_REVERSE:
pr8210_add_command(0x12);
playing = FALSE;
break;
case CMD_SCAN_FORWARD:
pr8210_add_command(0x08);
playing = TRUE;
break;
case CMD_SCAN_FORWARD_END:
pr8210_add_command(0x14);
playing = TRUE;
break;
case CMD_STEP_FORWARD:
pr8210_add_command(0x04);
playing = FALSE;
break;
case CMD_PLAY:
pr8210_add_command(0x14);
playing = TRUE;
break;
case CMD_PAUSE:
pr8210_add_command(0x0a);
playing = FALSE;
break;
case CMD_DISPLAY_ON:
// pr8210_add_command(digits[1]);
// pr8210_add_command(0xf1);
break;
case CMD_DISPLAY_OFF:
// pr8210_add_command(digits[0]);
// pr8210_add_command(0xf1);
break;
case CMD_0:
case CMD_1:
case CMD_2:
case CMD_3:
case CMD_4:
case CMD_5:
case CMD_6:
case CMD_7:
case CMD_8:
case CMD_9:
if (!prev_was_number)
pr8210_add_command(0x1a);
pr8210_add_command(digits[command - CMD_0]);
pr8210_last_was_number = TRUE;
break;
case CMD_SEARCH:
pr8210_add_command(0x1a);
playing = FALSE;
break;
}
}
/*************************************
*
* LD-V1000 implementation
*
*************************************/
static void ldv1000_execute(const device_config *laserdisc, int command)
{
static const UINT8 digits[10] = { 0x3f, 0x0f, 0x8f, 0x4f, 0x2f, 0xaf, 0x6f, 0x1f, 0x9f, 0x5f };
switch (command)
{
case CMD_SCAN_REVERSE:
laserdisc_data_w(laserdisc, 0xf8);
playing = TRUE;
break;
case CMD_SCAN_REVERSE_END:
laserdisc_data_w(laserdisc, 0xfd);
playing = TRUE;
break;
case CMD_STEP_REVERSE:
laserdisc_data_w(laserdisc, 0xfe);
playing = FALSE;
break;
case CMD_SCAN_FORWARD:
laserdisc_data_w(laserdisc, 0xf0);
playing = TRUE;
break;
case CMD_SCAN_FORWARD_END:
laserdisc_data_w(laserdisc, 0xfd);
playing = TRUE;
break;
case CMD_STEP_FORWARD:
laserdisc_data_w(laserdisc, 0xf6);
playing = FALSE;
break;
case CMD_PLAY:
laserdisc_data_w(laserdisc, 0xfd);
playing = TRUE;
break;
case CMD_PAUSE:
laserdisc_data_w(laserdisc, 0xa0);
playing = FALSE;
break;
case CMD_DISPLAY_ON:
laserdisc_data_w(laserdisc, digits[1]);
laserdisc_data_w(laserdisc, 0xf1);
break;
case CMD_DISPLAY_OFF:
laserdisc_data_w(laserdisc, digits[0]);
laserdisc_data_w(laserdisc, 0xf1);
break;
case CMD_0:
case CMD_1:
case CMD_2:
case CMD_3:
case CMD_4:
case CMD_5:
case CMD_6:
case CMD_7:
case CMD_8:
case CMD_9:
laserdisc_data_w(laserdisc, digits[command - CMD_0]);
break;
case CMD_SEARCH:
laserdisc_data_w(laserdisc, 0xf7);
playing = FALSE;
break;
}
}
/************************************* /*************************************
* *
* Port definitions * Port definitions
@ -323,6 +479,14 @@ static MACHINE_DRIVER_START( ldv1000 )
MACHINE_DRIVER_END MACHINE_DRIVER_END
static MACHINE_DRIVER_START( pr8210 )
MDRV_IMPORT_FROM(ldplayer_ntsc)
MDRV_MACHINE_START(pr8210)
MDRV_MACHINE_RESET(pr8210)
MDRV_LASERDISC_ADD("laserdisc", PIONEER_PR8210)
MACHINE_DRIVER_END
/************************************* /*************************************
* *
@ -335,6 +499,11 @@ ROM_START( ldv1000 )
ROM_END ROM_END
ROM_START( pr8210 )
DISK_REGION( "laserdisc" )
ROM_END
/************************************* /*************************************
* *
@ -406,6 +575,7 @@ static DRIVER_INIT( ldplayer )
static DRIVER_INIT( ldv1000 ) { execute_command = ldv1000_execute; DRIVER_INIT_CALL(ldplayer); } static DRIVER_INIT( ldv1000 ) { execute_command = ldv1000_execute; DRIVER_INIT_CALL(ldplayer); }
static DRIVER_INIT( pr8210 ) { execute_command = pr8210_execute; DRIVER_INIT_CALL(ldplayer); }
@ -415,4 +585,5 @@ static DRIVER_INIT( ldv1000 ) { execute_command = ldv1000_execute; DRIVER_INIT_C
* *
*************************************/ *************************************/
GAME( 2008, ldv1000, 0, ldv1000, ldplayer, ldv1000, ROT0, "MAME", "LDV-1000 Simulator", 0 ) GAME( 2008, ldv1000, 0, ldv1000, ldplayer, ldv1000, ROT0, "MAME", "Pioneer LDV-1000 Simulator", 0 )
GAME( 2008, pr8210, 0, pr8210, ldplayer, pr8210, ROT0, "MAME", "Pioneer PR-8210 Simulator", 0 )

View File

@ -1,115 +0,0 @@
// system 16 - 7751 emulation, based on monster bash code.
#include "driver.h"
#include "cpu/i8039/i8039.h"
#include "sound/dac.h"
static UINT32 port_8255_c03 = 0;
static UINT32 port_8255_c47 = 0;
static UINT32 port_7751_p27 = 0;
static UINT32 rom_offset = 0;
static UINT32 rom_base = 0;
static UINT32 rom_bank = 0;
static TIMER_CALLBACK( trigger_7751_sound )
{
int data = param;
/* I think this is correct for 128k sound roms,
it's OK for smaller roms */
if((data&0xf) == 0xc) rom_bank=0;
else if((data&0xf) == 0xd) rom_bank=0x4000;
else if((data&0xf) == 0xb) rom_bank=0xc000;
else if((data&0xf) == 0xa) rom_bank=0x8000;
else if((data&0xf) == 0xf) rom_bank=0x1c000;
else if((data&0xf) == 0xe) rom_bank=0x18000;
else if((data&0xf) == 0x7) rom_bank=0x14000;
else if((data&0xf) == 0x6) rom_bank=0x10000;
port_8255_c03 = (data>>5);
cpunum_set_input_line(machine, 2, 0, PULSE_LINE);
}
// I'm sure this must be wrong, but it seems to work for quartet music.
WRITE8_HANDLER( sys16_7751_audio_8255_w )
{
logerror("7751: %4x %4x\n",data,data^0xff);
if ((data & 0x0f) != 8)
{
cpunum_set_input_line(machine, 2, INPUT_LINE_RESET, PULSE_LINE);
timer_set(ATTOTIME_IN_USEC(300), NULL, data, trigger_7751_sound);
}
}
READ8_HANDLER( sys16_7751_audio_8255_r )
{
// Only PC4 is hooked up
/* 0x00 = BUSY, 0x10 = NOT BUSY */
return (port_8255_c47 & 0x10);
}
/* read from BUS */
READ8_HANDLER( sys16_7751_sh_rom_r )
{
UINT8 *sound_rom = memory_region(machine, REGION_SOUND1);
return sound_rom[rom_offset+rom_base];
}
/* read from T1 */
READ8_HANDLER( sys16_7751_sh_t1_r )
{
// Labelled as "TEST", connected to ground
return 0;
}
/* read from P2 */
READ8_HANDLER( sys16_7751_sh_command_r )
{
// 8255's PC0-2 connects to 7751's S0-2 (P24-P26 on an 8048)
return ((port_8255_c03 & 0x07) << 4) | port_7751_p27;
}
/* write to P1 */
WRITE8_HANDLER( sys16_7751_sh_dac_w )
{
dac_data_w(0,data);
}
/* write to P2 */
WRITE8_HANDLER( sys16_7751_sh_busy_w )
{
port_8255_c03 = (data & 0x70) >> 4;
port_8255_c47 = (data & 0x80) >> 3;
port_7751_p27 = data & 0x80;
rom_base = rom_bank;
}
/* write to P4 */
WRITE8_HANDLER( sys16_7751_sh_offset_a0_a3_w )
{
rom_offset = (rom_offset & 0xFFF0) | (data & 0x0F);
}
/* write to P5 */
WRITE8_HANDLER( sys16_7751_sh_offset_a4_a7_w )
{
rom_offset = (rom_offset & 0xFF0F) | ((data & 0x0F) << 4);
}
/* write to P6 */
WRITE8_HANDLER( sys16_7751_sh_offset_a8_a11_w )
{
rom_offset = (rom_offset & 0xF0FF) | ((data & 0x0F) << 8);
}
/* write to P7 */
WRITE8_HANDLER( sys16_7751_sh_rom_select_w )
{
rom_offset = (rom_offset & 0x0FFF) | ((0x4000 + ((data&0xf) << 12)) & 0x3000);
}

View File

@ -3365,17 +3365,17 @@ ROM_END
***************************************************************************/ ***************************************************************************/
GAME( 1995, lhb, 0, lhb, lhb, lhb, ROT0, "IGS", "Long Hu Bang (V035C)", 0 ) GAME( 1995, lhb, 0, lhb, lhb, lhb, ROT0, "IGS", "Long Hu Bang (V035C)", 0 )
GAME( 1995, lhba, lhb, lhb, lhb, lhba, ROT0, "IGS", "Long Hu Bang (V033C)", 0 ) GAME( 1995, lhba, lhb, lhb, lhb, lhba, ROT0, "IGS", "Long Hu Bang (V033C)", 0 )
GAME( 1995, dbc, 0, lhb, lhb, dbc, ROT0, "IGS", "Da Ban Cheng (V027H)", 0 ) GAME( 1995, dbc, 0, lhb, lhb, dbc, ROT0, "IGS", "Da Ban Cheng (V027H)", 0 )
GAME( 1996, chmplst2, 0, chmplst2, chmplst2, chmplst2, ROT0, "IGS", "Long Hu Bang II (V185H)", 0 ) GAME( 1996, chmplst2, 0, chmplst2, chmplst2, chmplst2, ROT0, "IGS", "Long Hu Bang II (V185H)", 0 )
GAME( 1996, xymg, 0, xymg, xymg, xymg, ROT0, "IGS", "PinYin: Xing Yun Man Guan (V651C)", 0 ) GAME( 1996, xymg, 0, xymg, xymg, xymg, ROT0, "IGS", "Xing Yun Man Guan (V651C)", 0 )
GAME( 1996, grtwall, xymg, grtwall, grtwall, grtwall, ROT0, "IGS", "Wan Li Chang Cheng (V638C)", 0 ) GAME( 1996, grtwall, xymg, grtwall, grtwall, grtwall, ROT0, "IGS", "Wan Li Chang Cheng (V638C)", 0 )
GAME( 1996, vbowl, 0, vbowl, vbowl, vbowl, ROT0, "IGS", "Virtua Bowling (World, V101XCM)", GAME_IMPERFECT_SOUND ) GAME( 1996, vbowl, 0, vbowl, vbowl, vbowl, ROT0, "IGS", "Virtua Bowling (World, V101XCM)", GAME_IMPERFECT_SOUND )
GAME( 1996, vbowlj, vbowl, vbowl, vbowlj, vbowlj, ROT0, "IGS / Alta", "Virtua Bowling (Japan, V100JCM)", GAME_IMPERFECT_SOUND ) GAME( 1996, vbowlj, vbowl, vbowl, vbowlj, vbowlj, ROT0, "IGS / Alta", "Virtua Bowling (Japan, V100JCM)", GAME_IMPERFECT_SOUND )
GAME( 1997, drgnwrld, 0, chindrag, drgnwrld, drgnwrld, ROT0, "IGS", "Dragon World (World, V0400)", 0 ) GAME( 1997, drgnwrld, 0, chindrag, drgnwrld, drgnwrld, ROT0, "IGS", "Dragon World (World, V0400)", 0 )
GAME( 1995, drgwrld3, drgnwrld, chindrag, drgnwrld, drgwrld3, ROT0, "IGS", "Dragon World (World, V0300)", 0 ) GAME( 1995, drgwrld3, drgnwrld, chindrag, drgnwrld, drgwrld3, ROT0, "IGS", "Dragon World (World, V0300)", 0 )
GAME( 1995, chindrag, drgnwrld, chindrag, chindrag, chindrag, ROT0, "IGS / Alta", "Zhong Guo Long (Japan, V021J)", 0 ) GAME( 1995, chindrag, drgnwrld, chindrag, chindrag, chindrag, ROT0, "IGS / Alta", "Zhong Guo Long (Japan, V021J)", 0 )
GAME( 1995, chugokur, drgnwrld, chindrag, chindrag, chugokur, ROT0, "IGS / Alta", "Zhong Guo Long (Japan, V020J)", 0 ) GAME( 1995, chugokur, drgnwrld, chindrag, chindrag, chugokur, ROT0, "IGS / Alta", "Zhong Guo Long (Japan, V020J)", 0 )
GAME( 1995, chindrac, drgnwrld, chindrag, chindrac, chindrac, ROT0, "IGS", "Zhong Guo Long (China, V010C)", 0 ) GAME( 1995, chindrac, drgnwrld, chindrag, chindrac, chindrac, ROT0, "IGS", "Zhong Guo Long (China, V010C)", 0 )
GAME( 1995, chindrah, drgnwrld, chindrag, chindrac, chindrah, ROT0, "IGS", "Zhong Guo Long? (Hong Kong, V011H)", 0 ) GAME( 1995, chindrah, drgnwrld, chindrag, chindrac, chindrah, ROT0, "IGS", "Dong Fang Zhi Zhu (Hong Kong, V011H)", 0 )

View File

@ -186,21 +186,6 @@ static void sys16_video_config(void (*update)(void), int sprxoffs, const int *ba
/***************************************************************************/ /***************************************************************************/
// 7751 emulation
WRITE8_HANDLER( sys16_7751_audio_8255_w );
READ8_HANDLER( sys16_7751_audio_8255_r );
READ8_HANDLER( sys16_7751_sh_rom_r );
READ8_HANDLER( sys16_7751_sh_t1_r );
READ8_HANDLER( sys16_7751_sh_command_r );
WRITE8_HANDLER( sys16_7751_sh_dac_w );
WRITE8_HANDLER( sys16_7751_sh_busy_w );
WRITE8_HANDLER( sys16_7751_sh_offset_a0_a3_w );
WRITE8_HANDLER( sys16_7751_sh_offset_a4_a7_w );
WRITE8_HANDLER( sys16_7751_sh_offset_a8_a11_w );
WRITE8_HANDLER( sys16_7751_sh_rom_select_w );
/***************************************************************************/
static UINT16 coinctrl; static UINT16 coinctrl;
static WRITE16_HANDLER( sys16_3d_coinctrl_w ) static WRITE16_HANDLER( sys16_3d_coinctrl_w )