#ifndef __GUESTSYS_COM_AH__ #define __GUESTSYS_COM_AH__ #include "config/AspectConfig.hpp" #ifdef CONFIG_EVENT_GUESTSYS #include "../../../bochs/bochs.h" #include "../../../bochs/cpu/cpu.h" #include "../SALInst.hpp" #include "bochs_helpers.hpp" // Fixed "port number" for "Guest system >> Bochs" communication #define BOCHS_COM_PORT 0x378 aspect GuestSysCom { pointcut outInstructions() = "% ...::bx_cpu_c::OUT_DX%(...)"; advice execution (outInstructions()) : after () { // // Event source: "guest system" // unsigned rDX = getCPU(tjp->that())->gen_reg[2].word.rx; // port number unsigned rAL = getCPU(tjp->that())->gen_reg[0].word.byte.rl; // data if (rDX == BOCHS_COM_PORT) { sal::simulator.onGuestSystemEvent((char)rAL, rDX); } } }; #endif // CONFIG_EVENT_GUESTSYS #endif /* __GUESTSYS_COM_AH__ */