void m68000_set_reg(int regnum, unsigned val) { switch( regnum ) { case M68K_PC: m68k_set_reg(M68K_REG_PC, val); break; case M68K_SP: m68k_set_reg(M68K_REG_SP, val); break; case M68K_ISP: m68k_set_reg(M68K_REG_ISP, val); break; case M68K_USP: m68k_set_reg(M68K_REG_USP, val); break; case M68K_SR: m68k_set_reg(M68K_REG_SR, val); break; case M68K_D0: m68k_set_reg(M68K_REG_D0, val); break; case M68K_D1: m68k_set_reg(M68K_REG_D1, val); break; case M68K_D2: m68k_set_reg(M68K_REG_D2, val); break; case M68K_D3: m68k_set_reg(M68K_REG_D3, val); break; case M68K_D4: m68k_set_reg(M68K_REG_D4, val); break; case M68K_D5: m68k_set_reg(M68K_REG_D5, val); break; case M68K_D6: m68k_set_reg(M68K_REG_D6, val); break; case M68K_D7: m68k_set_reg(M68K_REG_D7, val); break; case M68K_A0: m68k_set_reg(M68K_REG_A0, val); break; case M68K_A1: m68k_set_reg(M68K_REG_A1, val); break; case M68K_A2: m68k_set_reg(M68K_REG_A2, val); break; case M68K_A3: m68k_set_reg(M68K_REG_A3, val); break; case M68K_A4: m68k_set_reg(M68K_REG_A4, val); break; case M68K_A5: m68k_set_reg(M68K_REG_A5, val); break; case M68K_A6: m68k_set_reg(M68K_REG_A6, val); break; case M68K_A7: m68k_set_reg(M68K_REG_A7, val); break; /* TODO: set contents of [SP + wordsize * (REG_SP_CONTENTS-regnum)] */ default: if( regnum < REG_SP_CONTENTS ) { unsigned offset = m68k_get_reg(NULL, M68K_REG_SP) + 4 * (REG_SP_CONTENTS - regnum); if( offset < 0xfffffd ) m68k_write_memory_16( offset, val ); } } }
// 3 word stack frame (68000 only) STATIC_INLINE void m68ki_stack_frame_3word(uint32_t pc, uint32_t sr) { #if 0 m68ki_push_32(pc); m68ki_push_16(sr); #else // Push PC on stack: m68k_areg(regs, 7) -= 4; m68k_write_memory_32(m68k_areg(regs, 7), pc); // Push SR on stack: m68k_areg(regs, 7) -= 2; m68k_write_memory_16(m68k_areg(regs, 7), sr); #endif }
void writeInstructionBufferToMusashiMemory(const uint16_t* instructionBuffer, uint instructionBufferSize) { uint word; for (word = 0; word < instructionBufferSize; ++word) m68k_write_memory_16(word * sizeof(uint16_t), instructionBuffer[word]); }