diff --git a/src/cpu/core_dyn_x86/decoder.h b/src/cpu/core_dyn_x86/decoder.h index 35328bd9..10973317 100644 --- a/src/cpu/core_dyn_x86/decoder.h +++ b/src/cpu/core_dyn_x86/decoder.h @@ -188,6 +188,22 @@ static void dyn_check_bool_exception_al(void) { used_save_info++; } +#include "pic.h" + +static void dyn_check_irqrequest(void) { + gen_load_host(&PIC_IRQCheck,DREG(TMPB),4); + gen_dop_word(DOP_OR,true,DREG(TMPB),DREG(TMPB)); + save_info[used_save_info].branch_pos=gen_create_branch_long(BR_NZ); + gen_releasereg(DREG(TMPB)); + dyn_savestate(&save_info[used_save_info].state); + if (!decode.cycles) decode.cycles++; + save_info[used_save_info].cycles=decode.cycles; + save_info[used_save_info].eip_change=decode.code-decode.code_start; + if (!cpu.code.big) save_info[used_save_info].eip_change&=0xffff; + save_info[used_save_info].type=normal; + used_save_info++; +} + static void dyn_fill_blocks(void) { for (Bitu sct=0; sct