#ifndef __IOPORT_COM_AH__ #define __IOPORT_COM_AH__ #include "config/FailConfig.hpp" #ifdef CONFIG_EVENT_IOPORT #include "../../../bochs/bochs.h" #include "../../../bochs/cpu/cpu.h" #include "../SALInst.hpp" #include "bochs_helpers.hpp" aspect IOPortCom { // ATM only capturing bytewise output (most common, I suppose) pointcut outInstruction() = "% ...::bx_cpu_c::OUT_DXAL(...)"; advice execution (outInstruction()) : after () { unsigned rDX = getCPU(tjp->that())->gen_reg[2].word.rx; // port number unsigned char rAL = getCPU(tjp->that())->gen_reg[0].word.byte.rl; // data sal::simulator.onIOPortEvent(rAL, rDX, true); } pointcut inInstruction() = "% ...::bx_cpu_c::IN_ALDX(...)"; advice execution (inInstruction()) : after () { unsigned rDX = getCPU(tjp->that())->gen_reg[2].word.rx; // port number unsigned char rAL = getCPU(tjp->that())->gen_reg[0].word.byte.rl; // data sal::simulator.onIOPortEvent(rAL, rDX, false); } }; #endif // CONFIG_EVENT_IOPORT #endif /* __IOPORT_COM_AH__ */