mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
m68k: use 68340 instruction table for 68340, cpXXX instructions are 020/030 only, add CINV, CPUSH stubs for 040 [R. Belmont]
This commit is contained in:
parent
42532831b3
commit
d2cb425361
@ -8,9 +8,9 @@ must fix:
|
|||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/*
|
/*
|
||||||
* MUSASHI
|
* MUSASHI
|
||||||
* Version 3.32
|
* Version 4.80
|
||||||
*
|
*
|
||||||
* A portable Motorola M680x0 processor emulation engine.
|
* A portable Motorola M68xxx processor emulation engine.
|
||||||
* Copyright Karl Stenerud. All rights reserved.
|
* Copyright Karl Stenerud. All rights reserved.
|
||||||
*
|
*
|
||||||
* This code may be freely used for non-commercial purposes as long as this
|
* This code may be freely used for non-commercial purposes as long as this
|
||||||
@ -195,6 +195,17 @@ void m68ki_build_opcode_table(void)
|
|||||||
m68ki_set_one(ostruct->match | i, ostruct);
|
m68ki_set_one(ostruct->match | i, ostruct);
|
||||||
ostruct++;
|
ostruct++;
|
||||||
}
|
}
|
||||||
|
while(ostruct->mask == 0xff20)
|
||||||
|
{
|
||||||
|
for(i = 0;i < 4;i++)
|
||||||
|
{
|
||||||
|
for(j = 0;j < 32;j++)
|
||||||
|
{
|
||||||
|
m68ki_set_one(ostruct->match | (i << 6) | j, ostruct);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ostruct++;
|
||||||
|
}
|
||||||
while(ostruct->mask == 0xf1f8)
|
while(ostruct->mask == 0xf1f8)
|
||||||
{
|
{
|
||||||
for(i = 0;i < 8;i++)
|
for(i = 0;i < 8;i++)
|
||||||
@ -333,9 +344,9 @@ cpu cycles: Base number of cycles required to execute this opcode on the
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
spec spec allowed ea mode cpu cycles
|
spec spec allowed ea mode 3 cpu cycles
|
||||||
name size proc ea bit pattern A+-DXWLdxI 0 1 2 3 4 000 010 020 030 040 340 comments
|
name size proc ea bit pattern A+-DXWLdxI 0 1 2 3 4 2 000 010 020 030 040 340 comments
|
||||||
====== ==== ==== ==== ================ ========== = = = = = === === === === === === ==========
|
====== ==== ==== ==== ================ ========== = = = = = = === === === === === === ==========
|
||||||
M68KMAKE_TABLE_START
|
M68KMAKE_TABLE_START
|
||||||
1010 0 . . 1010............ .......... U U U U U U 4 4 4 4 4 4
|
1010 0 . . 1010............ .......... U U U U U U 4 4 4 4 4 4
|
||||||
1111 0 . . 1111............ .......... U U U U U U 4 4 4 4 4 4
|
1111 0 . . 1111............ .......... U U U U U U 4 4 4 4 4 4
|
||||||
@ -516,11 +527,13 @@ cmpm 8 . axy7 1011111100001111 .......... U U U U U U 12 12 9
|
|||||||
cmpm 8 . . 1011...100001... .......... U U U U U U 12 12 9 9 9 9
|
cmpm 8 . . 1011...100001... .......... U U U U U U 12 12 9 9 9 9
|
||||||
cmpm 16 . . 1011...101001... .......... U U U U U U 12 12 9 9 9 9
|
cmpm 16 . . 1011...101001... .......... U U U U U U 12 12 9 9 9 9
|
||||||
cmpm 32 . . 1011...110001... .......... U U U U U U 20 20 9 9 9 9
|
cmpm 32 . . 1011...110001... .......... U U U U U U 20 20 9 9 9 9
|
||||||
cpbcc 32 . . 1111...01....... .......... . . U U U U . . 4 4 4 4 unemulated
|
cinv 32 . . 11110100..0..... .......... . . . . U . . . . . 16 . 040 only
|
||||||
cpdbcc 32 . . 1111...001001... .......... . . U U U U . . 4 4 4 4 unemulated
|
cpush 32 . . 11110100..1..... .......... . . . . U . . . . . 16 . 040 only
|
||||||
cpgen 32 . . 1111...000...... .......... . . U U U U . . 4 4 4 4 unemulated
|
cpbcc 32 . . 1111...01....... .......... . . U U . . . . 4 4 . . cpXXX only for 020/030, not on 040!
|
||||||
cpscc 32 . . 1111...001...... .......... . . U U U U . . 4 4 4 4 unemulated
|
cpdbcc 32 . . 1111...001001... .......... . . U U . . . . 4 4 . .
|
||||||
cptrapcc 32 . . 1111...001111... .......... . . U U U U . . 4 4 4 4 unemulated
|
cpgen 32 . . 1111...000...... .......... . . U U . . . . 4 4 . .
|
||||||
|
cpscc 32 . . 1111...001...... .......... . . U U . . . . 4 4 . .
|
||||||
|
cptrapcc 32 . . 1111...001111... .......... . . U U . . . . 4 4 . .
|
||||||
dbt 16 . . 0101000011001... .......... U U U U U U 12 12 6 6 6 6
|
dbt 16 . . 0101000011001... .......... U U U U U U 12 12 6 6 6 6
|
||||||
dbf 16 . . 0101000111001... .......... U U U U U U 12 12 6 6 6 6
|
dbf 16 . . 0101000111001... .......... U U U U U U 12 12 6 6 6 6
|
||||||
dbcc 16 . . 0101....11001... .......... U U U U U U 12 12 6 6 6 6
|
dbcc 16 . . 0101....11001... .......... U U U U U U 12 12 6 6 6 6
|
||||||
@ -4417,7 +4430,6 @@ M68KMAKE_OP(cptrapcc, 32, ., .)
|
|||||||
m68ki_exception_1111(mc68kcpu);
|
m68ki_exception_1111(mc68kcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
M68KMAKE_OP(dbt, 16, ., .)
|
M68KMAKE_OP(dbt, 16, ., .)
|
||||||
{
|
{
|
||||||
REG_PC(mc68kcpu) += 2;
|
REG_PC(mc68kcpu) += 2;
|
||||||
@ -10223,6 +10235,27 @@ M68KMAKE_OP(unpk, 16, mm, .)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
M68KMAKE_OP(cinv, 32, ., .)
|
||||||
|
{
|
||||||
|
if(CPU_TYPE_IS_040_PLUS((mc68kcpu)->cpu_type))
|
||||||
|
{
|
||||||
|
logerror("%s at %08x: called unimplemented instruction %04x (cinv)\n",
|
||||||
|
(mc68kcpu)->device->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m68ki_exception_1111(mc68kcpu);
|
||||||
|
}
|
||||||
|
|
||||||
|
M68KMAKE_OP(cpush, 32, ., .)
|
||||||
|
{
|
||||||
|
if(CPU_TYPE_IS_040_PLUS((mc68kcpu)->cpu_type))
|
||||||
|
{
|
||||||
|
logerror("%s at %08x: called unimplemented instruction %04x (cpush)\n",
|
||||||
|
(mc68kcpu)->device->tag(), REG_PC(mc68kcpu) - 2, (mc68kcpu)->ir);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m68ki_exception_1111(mc68kcpu);
|
||||||
|
}
|
||||||
|
|
||||||
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||||
M68KMAKE_END
|
M68KMAKE_END
|
||||||
|
@ -5,8 +5,8 @@
|
|||||||
#if 0
|
#if 0
|
||||||
static const char copyright_notice[] =
|
static const char copyright_notice[] =
|
||||||
"MUSASHI\n"
|
"MUSASHI\n"
|
||||||
"Version 4.70 (2010-11-06)\n"
|
"Version 4.80 (2010-08-27)\n"
|
||||||
"A portable Motorola M680x0 processor emulation engine.\n"
|
"A portable Motorola M68xxx processor emulation engine.\n"
|
||||||
"Copyright Karl Stenerud. All rights reserved.\n"
|
"Copyright Karl Stenerud. All rights reserved.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"This code may be freely used for non-commercial purpooses as long as this\n"
|
"This code may be freely used for non-commercial purpooses as long as this\n"
|
||||||
@ -2325,9 +2325,9 @@ static CPU_INIT( m68340 )
|
|||||||
new(&m68k->memory) m68k_memory_interface;
|
new(&m68k->memory) m68k_memory_interface;
|
||||||
m68k->memory.init32(*m68k->program);
|
m68k->memory.init32(*m68k->program);
|
||||||
m68k->sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
|
m68k->sr_mask = 0xf71f; /* T1 T0 S M -- I2 I1 I0 -- -- -- X N Z V C */
|
||||||
m68k->jump_table = m68ki_instruction_jump_table[2];
|
m68k->jump_table = m68ki_instruction_jump_table[5];
|
||||||
m68k->cyc_instruction = m68ki_cycles[2];
|
m68k->cyc_instruction = m68ki_cycles[5];
|
||||||
m68k->cyc_exception = m68ki_exception_cycle_table[2];
|
m68k->cyc_exception = m68ki_exception_cycle_table[5];
|
||||||
m68k->cyc_bcc_notake_b = -2;
|
m68k->cyc_bcc_notake_b = -2;
|
||||||
m68k->cyc_bcc_notake_w = 0;
|
m68k->cyc_bcc_notake_w = 0;
|
||||||
m68k->cyc_dbcc_f_noexp = 0;
|
m68k->cyc_dbcc_f_noexp = 0;
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/*
|
/*
|
||||||
* MUSASHI
|
* MUSASHI
|
||||||
* Version 4.70
|
* Version 4.80
|
||||||
*
|
*
|
||||||
* A portable Motorola M680x0 processor emulation engine.
|
* A portable Motorola M680x0 processor emulation engine.
|
||||||
* Copyright Karl Stenerud. All rights reserved.
|
* Copyright Karl Stenerud. All rights reserved.
|
||||||
@ -56,7 +56,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static const char g_version[] = "4.70";
|
static const char g_version[] = "4.80";
|
||||||
|
|
||||||
/* ======================================================================== */
|
/* ======================================================================== */
|
||||||
/* =============================== INCLUDES =============================== */
|
/* =============================== INCLUDES =============================== */
|
||||||
@ -133,12 +133,12 @@ static const char g_version[] = "4.70";
|
|||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
CPU_TYPE_000 = 0,
|
CPU_TYPE_000 = 0, // 0
|
||||||
CPU_TYPE_010,
|
CPU_TYPE_010, // 1
|
||||||
CPU_TYPE_020,
|
CPU_TYPE_020, // 2
|
||||||
CPU_TYPE_030,
|
CPU_TYPE_030, // 3
|
||||||
CPU_TYPE_040,
|
CPU_TYPE_040, // 4
|
||||||
CPU_TYPE_68340,
|
CPU_TYPE_68340, // 5
|
||||||
NUM_CPUS
|
NUM_CPUS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user