--- nono/m680x0/m68030fpu.cpp 2026/04/29 17:05:15 1.1.1.5 +++ nono/m680x0/m68030fpu.cpp 2026/04/29 17:05:26 1.1.1.6 @@ -69,9 +69,9 @@ MPU680x0Device::cea_fpu(int bytes) n = eanum(ir); save_reg_pi(n); if (bytes == 1) { - return internal_ea_anpi_8(n); + return internal_ea_anpi_1(n); } else { - // _anpi_{16,32} のマクロは用意されてるけど、これと同じなので + // _anpi_{2,4} のマクロは用意されてるけど、これと同じなので reg.A[n] += bytes; return reg.A[n] - bytes; } @@ -81,9 +81,9 @@ MPU680x0Device::cea_fpu(int bytes) n = eanum(ir); save_reg_pd(n); if (bytes == 1) { - return internal_ea_anpd_8(n); + return internal_ea_anpd_1(n); } else { - // _anpd_{16,32} のマクロは用意されてるけど、これと同じなので + // _anpd_{2,4} のマクロは用意されてるけど、これと同じなので reg.A[n] -= bytes; return reg.A[n]; } @@ -115,36 +115,36 @@ MPU680x0Device::cea_fpu(int bytes) // メモリから 64ビット値を読み込む void -MPU680x0Device::read_64(uint32 addr, uint32 *data) +MPU680x0Device::read_8(uint32 addr, uint32 *data) { - data[0] = read_32(addr); - data[1] = read_32(addr + 4); + data[0] = read_4(addr); + data[1] = read_4(addr + 4); } // メモリから 96ビット値を読み込む void -MPU680x0Device::read_96(uint32 addr, uint32 *data) +MPU680x0Device::read_12(uint32 addr, uint32 *data) { - data[0] = read_32(addr); - data[1] = read_32(addr + 4); - data[2] = read_32(addr + 8); + data[0] = read_4(addr); + data[1] = read_4(addr + 4); + data[2] = read_4(addr + 8); } // 64ビット値(.D)をメモリに書き込む void -MPU680x0Device::write_64(uint32 addr, const uint32 *data) +MPU680x0Device::write_8(uint32 addr, const uint32 *data) { - write_32(addr, data[0]); - write_32(addr + 4, data[1]); + write_4(addr, data[0]); + write_4(addr + 4, data[1]); } // 96ビット値(.D)をメモリに書き込む void -MPU680x0Device::write_96(uint32 addr, const uint32 *data) +MPU680x0Device::write_12(uint32 addr, const uint32 *data) { - write_32(addr, data[0]); - write_32(addr + 4, data[1]); - write_32(addr + 8, data[2]); + write_4(addr, data[0]); + write_4(addr + 4, data[1]); + write_4(addr + 8, data[2]); } // ソースを読み込む。 @@ -195,24 +195,24 @@ MPU680x0Device::readSRC(int size_id, str } else if (mr == 0x3c) { // #imm switch (size_id) { case SIZE_B: - data[0] = fetch_16() & 0xff; + data[0] = fetch_2() & 0xff; break; case SIZE_W: - data[0] = fetch_16(); + data[0] = fetch_2(); break; case SIZE_L: case SIZE_S: - data[0] = fetch_32(); + data[0] = fetch_4(); break; case SIZE_D: - data[0] = fetch_32(); - data[1] = fetch_32(); + data[0] = fetch_4(); + data[1] = fetch_4(); break; case SIZE_X: case SIZE_P: - data[0] = fetch_32(); - data[1] = fetch_32(); - data[2] = fetch_32(); + data[0] = fetch_4(); + data[1] = fetch_4(); + data[2] = fetch_4(); break; default: return false; @@ -222,25 +222,25 @@ MPU680x0Device::readSRC(int size_id, str switch (size_id) { case SIZE_B: ea = cea_fpu(1); - data[0] = (int32)(int8)read_8(ea); + data[0] = (int32)(int8)read_1(ea); break; case SIZE_W: ea = cea_fpu(2); - data[0] = (int32)(int16)read_16(ea); + data[0] = (int32)(int16)read_2(ea); break; case SIZE_L: case SIZE_S: ea = cea_fpu(4); - data[0] = read_32(ea); + data[0] = read_4(ea); break; case SIZE_D: ea = cea_fpu(8); - read_64(ea, data); + read_8(ea, data); break; case SIZE_X: case SIZE_P: ea = cea_fpu(12); - read_96(ea, data); + read_12(ea, data); break; default: return false; @@ -588,7 +588,7 @@ MPU680x0Device::fpu_op_fmove_b_mem() } else { CYCLE(100); ea = cea_fpu(1); - write_8(ea, (uint8)data); + write_1(ea, (uint8)data); } } @@ -615,7 +615,7 @@ MPU680x0Device::fpu_op_fmove_w_mem() } else { CYCLE(100); ea = cea_fpu(2); - write_16(ea, (uint16)data); + write_2(ea, (uint16)data); } } @@ -639,7 +639,7 @@ MPU680x0Device::fpu_op_fmove_l_mem() } else { CYCLE(100); ea = cea_fpu(4); - write_32(ea, data); + write_4(ea, data); } } @@ -662,7 +662,7 @@ MPU680x0Device::fpu_op_fmove_s_mem() } else { CYCLE(80); ea = cea_fpu(4); - write_32(ea, data); + write_4(ea, data); } } @@ -681,7 +681,7 @@ MPU680x0Device::fpu_op_fmove_d_mem() fpu_implode(&fe, &fe.fe_f3, FTYPE_DBL, data); ea = cea_fpu(8); - write_64(ea, data); + write_8(ea, data); } // FMOVE.X FPn, @@ -695,7 +695,7 @@ MPU680x0Device::fpu_op_fmove_x_mem() uint32 ea; ea = cea_fpu(12); - write_96(ea, &RegFP(srcnum * 3)); + write_12(ea, &RegFP(srcnum * 3)); } // FMOVE.P FPn, @@ -727,7 +727,7 @@ MPU680x0Device::fpu_op_fmove_p_mem() fpu_ftop(&fe, &fe.fe_f3, data, k); ea = cea_fpu(12); - write_96(ea, data); + write_12(ea, data); } // FMOVEM.L , @@ -788,7 +788,7 @@ MPU680x0Device::fpu_op_fmovem_ea2ctl() // (68000PRM.pdf p393) ea = cea_fpu(count * 4); for (i = 0; i < count; i++) { - src[i] = read_32(ea); + src[i] = read_4(ea); ea += 4; } @@ -797,7 +797,7 @@ MPU680x0Device::fpu_op_fmovem_ea2ctl() CYCLE(count * 6); for (i = 0; i < count; i++) { - src[i] = fetch_32(); + src[i] = fetch_4(); } } else { @@ -883,15 +883,15 @@ MPU680x0Device::fpu_op_fmovem_ctl2ea() ea = cea_fpu(count * 4); // 該当レジスタをメモリへ書き出し if ((reglist & 4)) { - write_32(ea, RegFPCR); + write_4(ea, RegFPCR); ea += 4; } if ((reglist & 2)) { - write_32(ea, RegFPSR); + write_4(ea, RegFPSR); ea += 4; } if ((reglist & 1)) { - write_32(ea, RegFPIAR); + write_4(ea, RegFPIAR); ea += 4; } } @@ -944,7 +944,7 @@ MPU680x0Device::fpu_op_fmovem_ea2reg() // predec ならビット7から FP7..FP0 で、bit7 側から順に転送。 for (i = 7; reglist; reglist <<=1, i--) { if ((int8)reglist < 0) { - read_96(ea, &RegFP(i * 3)); + read_12(ea, &RegFP(i * 3)); ea += 12; } } @@ -952,7 +952,7 @@ MPU680x0Device::fpu_op_fmovem_ea2reg() // ctrl/postinc ならビット7から FP0..FP7 で、bit7 側から順に転送。 for (i = 0; reglist; reglist <<= 1, i++) { if ((int8)reglist < 0) { - read_96(ea, &RegFP(i * 3)); + read_12(ea, &RegFP(i * 3)); ea += 12; } } @@ -1029,7 +1029,7 @@ MPU680x0Device::fpu_op_fmovem_reg2ea() for (i = 7; reglist; reglist <<= 1, i--) { if ((int8)reglist < 0) { reg.A[n] -= 12; - write_96(reg.A[n], &RegFP(i * 3)); + write_12(reg.A[n], &RegFP(i * 3)); } } } else { @@ -1037,7 +1037,7 @@ MPU680x0Device::fpu_op_fmovem_reg2ea() for (i = 0; reglist; reglist <<= 1, i++) { if ((int8)reglist < 0) { reg.A[n] -= 12; - write_96(reg.A[n], &RegFP(i * 3)); + write_12(reg.A[n], &RegFP(i * 3)); } } } @@ -1049,7 +1049,7 @@ MPU680x0Device::fpu_op_fmovem_reg2ea() // predec ならビット7から FP7..FP0 で、bit7 側から順に転送。 for (i = 7; reglist; reglist <<= 1, i--) { if ((int8)reglist < 0) { - write_96(ea, &RegFP(i * 3)); + write_12(ea, &RegFP(i * 3)); ea += 12; } } @@ -1057,7 +1057,7 @@ MPU680x0Device::fpu_op_fmovem_reg2ea() // ctrl/postinc ならビット7から FP0..FP7 で、bit7 側から順に転送。 for (i = 0; reglist; reglist <<= 1, i++) { if ((int8)reglist < 0) { - write_96(ea, &RegFP(i * 3)); + write_12(ea, &RegFP(i * 3)); ea += 12; } } @@ -1075,7 +1075,7 @@ MPU680x0Device::fpu_op_fscc() uint mm = eamode(ir); uint rr = eanum(ir); uint cond = ir2 & 0x3f; - int data; + uint32 data; uint32 ea; // cache worst @@ -1121,7 +1121,7 @@ MPU680x0Device::fpu_op_fscc() } ea = cea_fpu(1); - write_8(ea, data); + write_1(ea, data); } // FDBcc Dn,