#include "m68kcpu.h"
extern void m68040_fpu_op0(void);
extern void m68040_fpu_op1(void);
-extern void m68881_mmu_ops();
+extern void m68851_mmu_ops();
extern void m68881_ftrap();
/* ======================================================================== */
pack 16 mm axy7 1000111101001111 .......... . . U U U . . 13 13 13
pack 16 mm . 1000...101001... .......... . . U U U . . 13 13 13
pea 32 . . 0100100001...... A..DXWLdx. U U U U U 6 6 5 5 5
-pflush 32 . . 1111010100011000 .......... . . . . S . . . . 4 TODO: correct timing
+pflusha 32 . . 1111010100011... .......... . . . . S . . . . 4 TODO: correct timing
+pflushan 32 . . 1111010100010... .......... . . . . S . . . . 4 TODO: correct timing
pmmu 32 . . 1111000......... .......... . . S S S . . 8 8 8
reset 0 . . 0100111001110000 .......... S S S S S 0 0 0 0 0
ror 8 s . 1110...000011... .......... U U U U U 6 6 8 8 8
case 0x003: /* TC */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_tc;
return;
}
m68ki_exception_illegal();
case 0x004: /* ITT0 */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_itt0;
return;
}
m68ki_exception_illegal();
case 0x005: /* ITT1 */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_itt1;
return;
}
m68ki_exception_illegal();
case 0x006: /* DTT0 */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_dtt0;
return;
}
m68ki_exception_illegal();
case 0x007: /* DTT1 */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_dtt1;
return;
}
m68ki_exception_illegal();
case 0x805: /* MMUSR */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_sr_040;
return;
}
m68ki_exception_illegal();
case 0x806: /* URP */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_urp_aptr;
return;
}
m68ki_exception_illegal();
case 0x807: /* SRP */
if(CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ REG_DA[(word2 >> 12) & 15] = m68ki_cpu.mmu_srp_aptr;
return;
}
m68ki_exception_illegal();
case 0x003: /* TC */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_tc = REG_DA[(word2 >> 12) & 15];
+
+ if (m68ki_cpu.mmu_tc & 0x8000)
+ {
+ m68ki_cpu.pmmu_enabled = 1;
+ }
+ else
+ {
+ m68ki_cpu.pmmu_enabled = 0;
+ }
return;
}
m68ki_exception_illegal();
case 0x004: /* ITT0 */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_itt0 = REG_DA[(word2 >> 12) & 15];
return;
}
m68ki_exception_illegal();
case 0x005: /* ITT1 */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_itt1 = REG_DA[(word2 >> 12) & 15];
return;
}
m68ki_exception_illegal();
case 0x006: /* DTT0 */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_dtt0 = REG_DA[(word2 >> 12) & 15];
return;
}
m68ki_exception_illegal();
case 0x007: /* DTT1 */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_dtt1 = REG_DA[(word2 >> 12) & 15];
return;
}
m68ki_exception_illegal();
case 0x805: /* MMUSR */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_sr_040 = REG_DA[(word2 >> 12) & 15];
return;
}
m68ki_exception_illegal();
case 0x806: /* URP */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_urp_aptr = REG_DA[(word2 >> 12) & 15];
return;
}
m68ki_exception_illegal();
case 0x807: /* SRP */
if (CPU_TYPE_IS_040_PLUS(CPU_TYPE))
{
- /* TODO */
+ m68ki_cpu.mmu_srp_aptr = REG_DA[(word2 >> 12) & 15];
return;
}
m68ki_exception_illegal();
m68ki_push_32(ea);
}
-M68KMAKE_OP(pflush, 32, ., .)
+M68KMAKE_OP(pflusha, 32, ., .)
{
- if ((CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) && (HAS_PMMU))
+ if (HAS_PMMU)
+ {
+ fprintf(stderr,"68040: unhandled PFLUSHA (ir=%04x)\n", REG_IR);
+ return;
+ }
+ m68ki_exception_1111();
+}
+
+M68KMAKE_OP(pflushan, 32, ., .)
+{
+ if (HAS_PMMU)
{
- fprintf(stderr,"68040: unhandled PFLUSH\n");
+ fprintf(stderr,"68040: unhandled PFLUSHAN (ir=%04x)\n", REG_IR);
return;
}
m68ki_exception_1111();
{
if ((CPU_TYPE_IS_EC020_PLUS(CPU_TYPE)) && (HAS_PMMU))
{
- m68881_mmu_ops();
+ m68851_mmu_ops();
}
else
{