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) 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 ADDRESS_MAP_END
@ -511,8 +511,10 @@ static void tms0980_set_cki_bus( const device_config *device )
case 0x70: case 0x78: case 0x70: case 0x78:
cpustate->cki_bus = tms0980_c_value[ cpustate->opcode & 0x0F ]; cpustate->cki_bus = tms0980_c_value[ cpustate->opcode & 0x0F ];
break; break;
} default:
cpustate->cki_bus = 0x0F; cpustate->cki_bus = 0x0F;
break;
}
/* Case 000001XXX */ /* Case 000001XXX */
if ( ( cpustate->opcode & 0x1F8 ) == 0x008 ) if ( ( cpustate->opcode & 0x1F8 ) == 0x008 )
{ {
@ -524,6 +526,7 @@ static void tms0980_set_cki_bus( const device_config *device )
/* Case 00100XXXX - TCY */ /* Case 00100XXXX - TCY */
if ( ( cpustate->opcode & 0x1F0 ) == 0x040 ) if ( ( cpustate->opcode & 0x1F0 ) == 0x040 )
{ {
cpustate->cki_bus = cpustate->opcode & 0x0F;
} }
/* Case 01XXXXXXX */ /* Case 01XXXXXXX */
if ( ( cpustate->opcode & 0x180 ) == 0x080 ) if ( ( cpustate->opcode & 0x180 ) == 0x080 )
@ -718,18 +721,21 @@ static CPU_EXECUTE( tms0980 )
break; break;
case 4: case 4:
/* execute: register store */ /* 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; cpustate->a = cpustate->adder_result & 0x0F;
} }
if ( cpustate->decode & ( MICRO_MASK | M_AUTY ) ) if ( cpustate->decode & M_AUTY )
{ {
cpustate->y = cpustate->adder_result & 0x0F; cpustate->y = cpustate->adder_result & 0x0F;
} }
// if ( cpustate->decode & ( MICRO_MASK | M_STSL ) ) // if ( cpustate->decode & M_STSL )
// { // {
// cpustate->status_latch = cpustate->status; // cpustate->status_latch = cpustate->status;
// } // }
}
debugger_instruction_hook( device, cpustate->rom_address << 1 ); debugger_instruction_hook( device, cpustate->rom_address << 1 );
/* fetch: fetch, update pc, ram address */ /* fetch: fetch, update pc, ram address */
cpustate->opcode = memory_read_word_16be( cpustate->program, cpustate->rom_address << 1 ); cpustate->opcode = memory_read_word_16be( cpustate->program, cpustate->rom_address << 1 );
@ -822,7 +828,7 @@ CPU_GET_INFO( tms0980 )
case CPUINFO_INT_MAX_CYCLES: info->i = 6; break; 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_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_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_DATABUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 8 /* 4 */; break;
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 7; break; case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 7; break;