mirror of
https://github.com/holub/mame
synced 2025-06-07 05:13:46 +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)
|
if (inc)
|
||||||
{
|
{
|
||||||
// 68881 IDLE, version 0x1f
|
// 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+16, 0);
|
||||||
m68ki_write_32(m68k, addr+20, 0);
|
m68ki_write_32(m68k, addr+20, 0);
|
||||||
m68ki_write_32(m68k, addr+24, 0x70000000);
|
m68ki_write_32(m68k, addr+24, 0x70000000);
|
||||||
|
return 7*4;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m68ki_write_32(m68k, addr, 0x70000000);
|
m68ki_write_32(m68k, addr-4, 0x70000000);
|
||||||
m68ki_write_32(m68k, addr-4, 0);
|
|
||||||
m68ki_write_32(m68k, addr-8, 0);
|
m68ki_write_32(m68k, addr-8, 0);
|
||||||
m68ki_write_32(m68k, addr-12, 0);
|
m68ki_write_32(m68k, addr-12, 0);
|
||||||
m68ki_write_32(m68k, addr-16, 0);
|
m68ki_write_32(m68k, addr-16, 0);
|
||||||
m68ki_write_32(m68k, addr-20, 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
|
else
|
||||||
{
|
{
|
||||||
// we normally generate an IDLE frame
|
// we normally generate an IDLE frame
|
||||||
|
int delta = perform_fsave(m68k, addr, inc);
|
||||||
if(reg != -1)
|
if(reg != -1)
|
||||||
REG_A(m68k)[reg] += inc ? 6*4 : -6*4;
|
REG_A(m68k)[reg] += delta;
|
||||||
perform_fsave(m68k, addr, inc);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void m68040_do_frestore(m68ki_cpu_core *m68k, UINT32 addr, int reg)
|
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);
|
UINT32 temp = m68ki_read_32(m68k, addr);
|
||||||
|
|
||||||
// check for NULL frame
|
// check for NULL frame
|
||||||
@ -1851,9 +1868,13 @@ static void m68040_do_frestore(m68ki_cpu_core *m68k, UINT32 addr, int reg)
|
|||||||
if (reg != -1)
|
if (reg != -1)
|
||||||
{
|
{
|
||||||
// how about an IDLE frame?
|
// 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
|
} // check UNIMP
|
||||||
else if ((temp & 0x00ff0000) == 0x00380000)
|
else if ((temp & 0x00ff0000) == 0x00380000)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user