Some small tms0980 bug fixes.

This commit is contained in:
Wilbert Pol 2009-06-28 08:06:19 +00:00
parent 2713b81280
commit 8bb520d0ec

View File

@ -374,7 +374,7 @@ INLINE tms0980_state *get_safe_token(const device_config *device)
static ADDRESS_MAP_START(tms0980_internal_rom, ADDRESS_SPACE_PROGRAM, 16)
AM_RANGE( 0x0000, 0x07FF ) AM_ROM
AM_RANGE( 0x0000, 0x0FFF ) AM_ROM
ADDRESS_MAP_END
@ -511,8 +511,10 @@ static void tms0980_set_cki_bus( const device_config *device )
case 0x70: case 0x78:
cpustate->cki_bus = tms0980_c_value[ cpustate->opcode & 0x0F ];
break;
}
default:
cpustate->cki_bus = 0x0F;
break;
}
/* Case 000001XXX */
if ( ( cpustate->opcode & 0x1F8 ) == 0x008 )
{
@ -524,6 +526,7 @@ static void tms0980_set_cki_bus( const device_config *device )
/* Case 00100XXXX - TCY */
if ( ( cpustate->opcode & 0x1F0 ) == 0x040 )
{
cpustate->cki_bus = cpustate->opcode & 0x0F;
}
/* Case 01XXXXXXX */
if ( ( cpustate->opcode & 0x180 ) == 0x080 )
@ -718,25 +721,28 @@ static CPU_EXECUTE( tms0980 )
break;
case 4:
/* execute: register store */
if ( cpustate->decode & ( MICRO_MASK | M_AUTA ) )
if ( cpustate->decode & MICRO_MASK )
{
if ( cpustate->decode & M_AUTA )
{
cpustate->a = cpustate->adder_result & 0x0F;
}
if ( cpustate->decode & ( MICRO_MASK | M_AUTY ) )
if ( cpustate->decode & M_AUTY )
{
cpustate->y = cpustate->adder_result & 0x0F;
}
// if ( cpustate->decode & ( MICRO_MASK | M_STSL ) )
// if ( cpustate->decode & M_STSL )
// {
// cpustate->status_latch = cpustate->status;
// }
}
debugger_instruction_hook( device, cpustate->rom_address << 1 );
/* fetch: fetch, update pc, ram address */
cpustate->opcode = memory_read_word_16be( cpustate->program, cpustate->rom_address << 1 );
cpustate->opcode &= 0x1FF;
cpustate->pc = tms0980_next_pc( cpustate->pc );
if (LOG)
logerror("tms0980: read opcode %04x. Set pc to %04x\n", cpustate->opcode, cpustate->pc );
logerror( "tms0980: read opcode %04x. Set pc to %04x\n", cpustate->opcode, cpustate->pc );
break;
case 5:
/* fetch: instruction decode */
@ -822,7 +828,7 @@ CPU_GET_INFO( tms0980 )
case CPUINFO_INT_MAX_CYCLES: info->i = 6; break;
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16 /* 9 */; break;
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 11; break;
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 12; break;
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_PROGRAM: info->i = 0; break;
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 8 /* 4 */; break;
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 7; break;