mirror of
https://github.com/holub/mame
synced 2025-05-30 17:41:47 +03:00
sync (nw)
This commit is contained in:
parent
431af6c164
commit
e6dad37593
@ -1779,8 +1779,22 @@ void m68040_fpu_op0(m68ki_cpu_core *m68k)
|
||||
}
|
||||
}
|
||||
|
||||
static void perform_fsave(m68ki_cpu_core *m68k, UINT32 addr, int inc)
|
||||
static int perform_fsave(m68ki_cpu_core *m68k, UINT32 addr, int inc)
|
||||
{
|
||||
if(m68k->cpu_type & CPU_TYPE_040)
|
||||
{
|
||||
if(inc)
|
||||
{
|
||||
m68ki_write_32(m68k, addr, 0x41000000);
|
||||
return 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
m68ki_write_32(m68k, addr-4, 0x41000000);
|
||||
return -4;
|
||||
}
|
||||
}
|
||||
|
||||
if (inc)
|
||||
{
|
||||
// 68881 IDLE, version 0x1f
|
||||
@ -1791,16 +1805,18 @@ static void perform_fsave(m68ki_cpu_core *m68k, UINT32 addr, int inc)
|
||||
m68ki_write_32(m68k, addr+16, 0);
|
||||
m68ki_write_32(m68k, addr+20, 0);
|
||||
m68ki_write_32(m68k, addr+24, 0x70000000);
|
||||
return 7*4;
|
||||
}
|
||||
else
|
||||
{
|
||||
m68ki_write_32(m68k, addr, 0x70000000);
|
||||
m68ki_write_32(m68k, addr-4, 0);
|
||||
m68ki_write_32(m68k, addr-4, 0x70000000);
|
||||
m68ki_write_32(m68k, addr-8, 0);
|
||||
m68ki_write_32(m68k, addr-12, 0);
|
||||
m68ki_write_32(m68k, addr-16, 0);
|
||||
m68ki_write_32(m68k, addr-20, 0);
|
||||
m68ki_write_32(m68k, addr-24, 0x1f180000);
|
||||
m68ki_write_32(m68k, addr-24, 0);
|
||||
m68ki_write_32(m68k, addr-28, 0x1f180000);
|
||||
return -7*4;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1832,14 +1848,15 @@ static void m68040_do_fsave(m68ki_cpu_core *m68k, UINT32 addr, int reg, int inc)
|
||||
else
|
||||
{
|
||||
// we normally generate an IDLE frame
|
||||
int delta = perform_fsave(m68k, addr, inc);
|
||||
if(reg != -1)
|
||||
REG_A(m68k)[reg] += inc ? 6*4 : -6*4;
|
||||
perform_fsave(m68k, addr, inc);
|
||||
REG_A(m68k)[reg] += delta;
|
||||
}
|
||||
}
|
||||
|
||||
static void m68040_do_frestore(m68ki_cpu_core *m68k, UINT32 addr, int reg)
|
||||
{
|
||||
bool m40 = m68k->cpu_type & CPU_TYPE_040;
|
||||
UINT32 temp = m68ki_read_32(m68k, addr);
|
||||
|
||||
// check for NULL frame
|
||||
@ -1851,9 +1868,13 @@ static void m68040_do_frestore(m68ki_cpu_core *m68k, UINT32 addr, int reg)
|
||||
if (reg != -1)
|
||||
{
|
||||
// how about an IDLE frame?
|
||||
if ((temp & 0x00ff0000) == 0x00180000)
|
||||
if (!m40 && ((temp & 0x00ff0000) == 0x00180000))
|
||||
{
|
||||
REG_A(m68k)[reg] += 6*4;
|
||||
REG_A(m68k)[reg] += 7*4;
|
||||
}
|
||||
else if (m40 && ((temp & 0xffff0000) == 0x41000000))
|
||||
{
|
||||
REG_A(m68k)[reg] += 4;
|
||||
} // check UNIMP
|
||||
else if ((temp & 0x00ff0000) == 0x00380000)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user