diff --git a/core/experiments/fireinterrupt/CMakeLists.txt b/core/experiments/fireinterrupt/CMakeLists.txt new file mode 100644 index 00000000..50a65a8b --- /dev/null +++ b/core/experiments/fireinterrupt/CMakeLists.txt @@ -0,0 +1,17 @@ +set(EXPERIMENT_NAME fireinterrupt) +set(EXPERIMENT_TYPE fireinterruptExperiment) +configure_file(../instantiate-experiment.ah.in + ${CMAKE_CURRENT_BINARY_DIR}/instantiate-${EXPERIMENT_NAME}.ah @ONLY +) + +#experiment sources +set(MY_EXPERIMENT_SRCS + experiment.hpp + experiment.cc +) + +#### include directories #### +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +## build library +add_library(${EXPERIMENT_NAME} ${MY_EXPERIMENT_SRCS}) diff --git a/core/experiments/fireinterrupt/bootdisk.img b/core/experiments/fireinterrupt/bootdisk.img new file mode 100644 index 00000000..65e20694 Binary files /dev/null and b/core/experiments/fireinterrupt/bootdisk.img differ diff --git a/core/experiments/fireinterrupt/experiment.cc b/core/experiments/fireinterrupt/experiment.cc new file mode 100644 index 00000000..a6f2ddc9 --- /dev/null +++ b/core/experiments/fireinterrupt/experiment.cc @@ -0,0 +1,46 @@ +#include +#include + +#include "experiment.hpp" +#include "SAL/SALInst.hpp" +#include "SAL/bochs/BochsRegister.hpp" +#include "controller/Event.hpp" +#include "util/Logger.hpp" +#include "config/AspectConfig.hpp" + +// Check if configuration dependencies are satisfied: +#if !defined(CONFIG_EVENT_BREAKPOINTS) || !defined(CONFIG_DISABLE_KEYB_INTERRUPTS) || !defined(CONFIG_FIRE_INTERRUPTS) + #error This experiment needs: breakpoints, disabled keyboard interrupts and fire interrupts. Enable these in the configuration. +#endif + +/* This experiment demonstrates the fireInterrupt feature. + * The keyboard-interrupts are disabled. So nothing happens if you press a button on keyboard. + * Only the pressed button will be stored in keyboard-buffer. + * With the fireInterrupt feature keyboard-interrupts are generated manually. + * The result is that the keyboard interrupts will be compensated manually. + * bootdisk.img can be used as example image. (turbo-pacman :) ) + */ + +using std::endl; + +bool fireinterruptExperiment::run() +{ + Logger log("FireInterrupt", false); + log << "experiment start" << endl; +#if 1 + while(1){ + int j = 0; + for(j=0 ; j<=100 ; j++){ + fi::BPEvent mainbp(0x1045f5); + sal::simulator.addEventAndWait(&mainbp); + } + sal::simulator.fireInterrupt(1); + } +#elif 1 + + sal::simulator.dbgEnableInstrPtrOutput(500); + +#endif + + return true; +} diff --git a/core/experiments/fireinterrupt/experiment.hpp b/core/experiments/fireinterrupt/experiment.hpp new file mode 100644 index 00000000..2bf149f5 --- /dev/null +++ b/core/experiments/fireinterrupt/experiment.hpp @@ -0,0 +1,14 @@ +#ifndef __FIREINTERRUPT_EXPERIMENT_HPP__ + #define __FIREINTERRUPT_EXPERIMENT_HPP__ + +#include "controller/ExperimentFlow.hpp" + +class fireinterruptExperiment : public fi::ExperimentFlow +{ + public: + fireinterruptExperiment() { } + + bool run(); +}; + +#endif // __FIREINTERRUPT_EXPERIMENT_HPP__