int __stdcall ExampleInstructionEmulator( ParsedInstruction instruction, // parsed instruction data CALLER_CONTEXT* context) // caller context { // Setting GPR registers! // Using setters setRegValue(REG_ECX, 0xFACEFEED, context); setRegValue(REG_EDX, 0x00000000, context); // .. or directly in structure context->ecx = 0xFACEFEED; context->edx = 0x00000000; context->flags |= FLAG_ZF; // Other registers (SSE), memory etc. need to be set directly! __asm movhlps xmm5, xmm4; // Memory? Use getEffectiveVA to get address from mem structure // But check earlier, whether you deal with 32b or 16b pointer! if(instruction.src1 == MEM_32) *((UINT32*)getEffectiveVA(instruction.mem, context)) = 0x00000000; // Success: handled! return TRUE; }
void BMA180::enableWrite() { //ctrl_reg1 register set ee_w bit to enable writing to regs. setRegValue(0x0D,0x10,~0x10); delayMSec(10); }
void BMA180::disableWrite() { setRegValue(0x0D,0x0,~0x10); delayMSec(10); }
void BMA180::SetSMPSkip() { setRegValue(0x35, 1, 0xFE); }
void BMA180::SoftReset() // all values will be default { setRegValue(0x10,0xB6,0); delayMSec(100); }
void BMA180::SetISRMode() // you must provide a ISR function on the pin selected (pin 2 or 3,. so INT0 or INT1) { setRegValue(0x21,2,0xFD); }
void BMA180::SetFilter(FILTER f) // 10,20,40,75,150,300,600,1200, HP 1HZ,BP 0.2-300, higher values not authorized { setRegValue(0x20,f<<4,0x0F); }
void BMA180::setGSensitivty(GSENSITIVITY maxg) //1, 1.5 2 3 4 8 16 { setRegValue(0x35,maxg<<1,0xF1); }