mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
mmu040_movem_ea = srca;
while (amask) {
srca -= 2;
- put_word_mmu040(srca, m68k_areg (regs, movem_index2[amask]));
+ int predec = movem_index2[amask] != dstreg ? 0 : 2;
+ put_word_mmu040(srca, m68k_areg (regs, movem_index2[amask]) - predec);
amask = movem_next[amask];
}
while (dmask) {
srca -= 2;
- put_word_mmu040(srca, m68k_dreg (regs, movem_index2[dmask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_dreg (regs, movem_index2[dmask]) - predec);
dmask = movem_next[dmask];
}
m68k_areg(regs, dstreg) = srca;
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
mmu040_movem_ea = srca;
while (amask) {
srca -= 4;
- put_long_mmu040(srca, m68k_areg (regs, movem_index2[amask]));
+ int predec = movem_index2[amask] != dstreg ? 0 : 4;
+ put_long_mmu040(srca, m68k_areg (regs, movem_index2[amask]) - predec);
amask = movem_next[amask];
}
while (dmask) {
srca -= 4;
- put_long_mmu040(srca, m68k_dreg (regs, movem_index2[dmask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_dreg (regs, movem_index2[dmask]) - predec);
dmask = movem_next[dmask];
}
m68k_areg(regs, dstreg) = srca;
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
mmu040_movem = 1;
mmu040_movem_ea = srca;
while (dmask) {
- put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu040(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]);
+ int predec = movem_index2[amask] != dstreg ? 0 : 2;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.instruction_pc = m68k_getpci();
mmu030_state[1] |= MMU030_STATEFLAG1_LASTWRITE;
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.instruction_pc = m68k_getpci();
mmu030_state[1] |= MMU030_STATEFLAG1_LASTWRITE;
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(8);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(8);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]);
+ int predec = movem_index2[amask] != dstreg ? 0 : 4;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(4);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.instruction_pc = m68k_getpci();
mmu030_state[1] |= MMU030_STATEFLAG1_LASTWRITE;
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.instruction_pc = m68k_getpci();
mmu030_state[1] |= MMU030_STATEFLAG1_LASTWRITE;
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(6);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
m68k_incpci(8);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
m68k_incpci(8);
regs.instruction_pc = m68k_getpci();
srca = m68k_areg(regs, dstreg);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;
while (amask) {
srca -= 2;
- put_word_mmu060(srca, m68k_areg (regs, movem_index2[amask]));
+ int predec = movem_index2[amask] != dstreg ? 0 : 2;
+ put_word_mmu060(srca, m68k_areg (regs, movem_index2[amask]) - predec);
amask = movem_next[amask];
}
while (dmask) {
srca -= 2;
- put_word_mmu060(srca, m68k_dreg (regs, movem_index2[dmask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_dreg (regs, movem_index2[dmask]) - predec);
dmask = movem_next[dmask];
}
m68k_areg(regs, dstreg) = srca;
srca = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu060(4);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
srca = x_get_disp_ea_020(m68k_areg(regs, dstreg), 0);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
srca = (uae_s32)(uae_s16)get_iword_mmu060(4);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
srca = get_ilong_mmu060(4);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 2;
dmask = movem_next[dmask];
}
while (amask) {
- put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_word_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 2;
amask = movem_next[amask];
}
srca = m68k_areg(regs, dstreg);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;
while (amask) {
srca -= 4;
- put_long_mmu060(srca, m68k_areg (regs, movem_index2[amask]));
+ int predec = movem_index2[amask] != dstreg ? 0 : 4;
+ put_long_mmu060(srca, m68k_areg (regs, movem_index2[amask]) - predec);
amask = movem_next[amask];
}
while (dmask) {
srca -= 4;
- put_long_mmu060(srca, m68k_dreg (regs, movem_index2[dmask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_dreg (regs, movem_index2[dmask]) - predec);
dmask = movem_next[dmask];
}
m68k_areg(regs, dstreg) = srca;
srca = m68k_areg(regs, dstreg) + (uae_s32)(uae_s16)get_iword_mmu060(4);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
srca = x_get_disp_ea_020(m68k_areg(regs, dstreg), 0);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
srca = (uae_s32)(uae_s16)get_iword_mmu060(4);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
srca = get_ilong_mmu060(4);
uae_u16 dmask = mask & 0xff, amask = (mask >> 8) & 0xff;
while (dmask) {
- put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_dreg (regs, movem_index1[dmask]) - predec);
srca += 4;
dmask = movem_next[dmask];
}
while (amask) {
- put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]));
+ int predec = 0;
+ put_long_mmu060(srca, m68k_areg (regs, movem_index1[amask]) - predec);
srca += 4;
amask = movem_next[amask];
}
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]);
+ int predec = movem_index2[amask] != dstreg ? 0 : 2;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]);
+ int predec = movem_index2[amask] != dstreg ? 0 : 4;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]);
+ int predec = movem_index2[amask] != dstreg ? 0 : 2;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]);
+ int predec = movem_index2[amask] != dstreg ? 0 : 4;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index2[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index2[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(4);
m68k_incpci(4);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(0);
regs.instruction_pc = m68k_getpci();
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(6);
m68k_incpci(6);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_dreg(regs, movem_index1[dmask]) - predec;
if(!amask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (mmu030_state[1] & MMU030_STATEFLAG1_MOVEM2) {
mmu030_state[1] &= ~MMU030_STATEFLAG1_MOVEM2;
} else {
- mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]);
+ int predec = 0;
+ mmu030_data_buffer_out = m68k_areg(regs, movem_index1[amask]) - predec;
if(!dmask && !nextmask) {
regs.irc = get_iword_mmu030c_opcode_state(8);
m68k_incpci(8);
if (apdi)
out("srca -= %d;\n", size);
if (put) {
- out("%s, m68k_%creg (regs, %s[%cmask]));\n", code, reg, index, reg);
+ if (apdi && !i) {
+ out("int predec = movem_index2[amask] != dstreg ? 0 : %d;\n", size);
+ } else {
+ out("int predec = 0;\n");
+ }
+ out("%s, m68k_%creg (regs, %s[%cmask]) - predec);\n", code, reg, index, reg);
} else {
out("m68k_%creg (regs, %s[%cmask]) = %s;\n", reg, index, reg, code);
}
if (apdi)
out("srca -= %d;\n", size);
if (put) {
- out("%s, m68k_%creg (regs, %s[%cmask]));\n", code, reg, index, reg);
+ if (apdi && !i) {
+ out("int predec = movem_index2[amask] != dstreg ? 0 : %d;\n", size);
+ } else {
+ out("int predec = 0;\n");
+ }
+ out("%s, m68k_%creg (regs, %s[%cmask]) - predec);\n", code, reg, index, reg);
} else {
out("m68k_%creg (regs, %s[%cmask]) = %s;\n", reg, index, reg, code);
}
out("val = %smmu030_data_buffer_out;\n", size == 2 ? "(uae_s32)(uae_s16)" : "");
out("} else {\n");
if (put) {
- out("mmu030_data_buffer_out = m68k_%creg(regs, %s[%cmask]);\n", reg, index, reg);
+ if (apdi && !i) {
+ out("int predec = movem_index2[amask] != dstreg ? 0 : %d;\n", size);
+ } else {
+ out("int predec = 0;\n");
+ }
+ out("mmu030_data_buffer_out = m68k_%creg(regs, %s[%cmask]) - predec;\n", reg, index, reg);
if (MMU68030_LAST_WRITE) {
// last write?
if (dphase == i)
if (table68k[opcode].dmode == Apdi) {
out("uae_u16 amask = mask & 0xff, dmask = (mask >> 8) & 0xff;\n");
movem_ex3(1);
- if (!using_mmu) {
- out("int type = %d;\n", cpu_level > 1);
- }
+ out("int type = %d;\n", cpu_level > 1);
out("while (amask) {\n");
out("srca -= %d;\n", size);