Previous 15994 Revisions Next

r14869 Sunday 8th April, 2012 at 15:56:44 UTC by R. Belmont
m68k improvements: [Hans Ostermeyer]
- Fixed BFINS, BFEXTU, and BFEXTS to fetch 8-bit quantities as 8 bits (corrects Domain/OS 10.3.5 crash on page boundry)
- Added SoftFloat log functions and m68k FLOGNP1, FLOGN, FLOG2, and FLOG10 instructions
[src/emu/cpu/m68000]m68k_in.c m68kfpu.c

src/emu/cpu/m68000/m68kfpu.c
r14868r14869
13211321         m68k->remaining_cycles -= 109;
13221322         break;
13231323      }
1324      case 0x06:      // FLOGNP1
1325      {
1326         REG_FP(m68k)[dst] = floatx80_flognp1 (source);
1327         SET_CONDITION_CODES(m68k, REG_FP(m68k)[dst]);
1328         m68k->remaining_cycles -= 594; // for MC68881
1329         break;
1330      }
13241331      case 0x0e:      // FSIN
13251332      {
13261333         REG_FP(m68k)[dst] = source;
r14868r14869
13371344         m68k->remaining_cycles -= 75;
13381345         break;
13391346      }
1347      case 0x14:      // FLOGN
1348      {
1349         REG_FP(m68k)[dst] = floatx80_flogn (source);
1350         SET_CONDITION_CODES(m68k, REG_FP(m68k)[dst]);
1351         m68k->remaining_cycles -= 548; // for MC68881
1352         break;
1353      }
1354      case 0x15:      // FLOG10
1355      {
1356         REG_FP(m68k)[dst] = floatx80_flog10 (source);
1357         SET_CONDITION_CODES(m68k, REG_FP(m68k)[dst]);
1358         m68k->remaining_cycles -= 604; // for MC68881
1359         break;
1360      }
1361      case 0x16:      // FLOG2
1362      {
1363         REG_FP(m68k)[dst] = floatx80_flog2 (source);
1364         SET_CONDITION_CODES(m68k, REG_FP(m68k)[dst]);
1365         m68k->remaining_cycles -= 604; // for MC68881
1366         break;
1367      }
13401368      case 0x18:      // FABS
13411369      {
13421370         REG_FP(m68k)[dst] = source;
src/emu/cpu/m68000/m68k_in.c
r14868r14869
26602660      }
26612661      width = ((width-1) & 31) + 1;
26622662
2663      data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
2663      data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
2664            (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
26642665
26652666      data = MASK_OUT_ABOVE_32(data<<offset);
26662667
r14868r14869
27452746      }
27462747      width = ((width-1) & 31) + 1;
27472748
2748      data = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
2749      data = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
2750            (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
27492751      data = MASK_OUT_ABOVE_32(data<<offset);
27502752
27512753      if((offset+width) > 32)
r14868r14869
29422944      (mc68kcpu)->not_z_flag = insert_base;
29432945      insert_long = insert_base >> offset;
29442946
2945      data_long = (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
2947      data_long = (offset+width) < 8 ? (m68ki_read_8((mc68kcpu), ea) << 24) :
2948            (offset+width) < 16 ? (m68ki_read_16((mc68kcpu), ea) << 16) : m68ki_read_32((mc68kcpu), ea);
29462949      (mc68kcpu)->v_flag = VFLAG_CLEAR;
29472950      (mc68kcpu)->c_flag = CFLAG_CLEAR;
29482951
2949      if((width + offset) < 16)
2952      if((width + offset) < 8)
29502953      {
2954         m68ki_write_8((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 24);
2955      }
2956      else if((width + offset) < 16)
2957      {
29512958         m68ki_write_16((mc68kcpu), ea, ((data_long & ~mask_long) | insert_long) >> 16);
29522959      }
29532960      else

Previous 15994 Revisions Next


© 1998-2018 The MESS Team