From 44c0b660fc044662a71c1fa051e11f2717a544cb Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Tue, 13 Aug 2002 04:53:31 +0000 Subject: [PATCH] RunRealFar and RunRealInt have been fixed. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@150 --- src/cpu/callback.cpp | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/src/cpu/callback.cpp b/src/cpu/callback.cpp index 7a66dc7e..da56c405 100644 --- a/src/cpu/callback.cpp +++ b/src/cpu/callback.cpp @@ -32,7 +32,7 @@ CallBack_Handler CallBack_Handlers[CB_MAX]; -static Bitu call_runint16,call_idle,call_default,call_runfar16; +static Bitu call_stop,call_idle,call_default; static Bitu illegal_handler(void) { E_Exit("Illegal CallBack Called"); @@ -73,23 +73,24 @@ static Bitu stop_handler(void) { void CALLBACK_RunRealFar(Bit16u seg,Bit16u off) { - real_writew((Bit16u)CB_SEG,(call_runfar16<<4)+1,off); - real_writew((Bit16u)CB_SEG,(call_runfar16<<4)+3,seg); + reg_sp-=4; + real_writew(Segs[es].value,reg_sp,call_stop<<4); + real_writew(Segs[es].value,reg_sp+2,CB_SEG); Bit32u oldeip=reg_eip; Bit16u oldcs=Segs[cs].value; - reg_eip=call_runfar16<<4; - SetSegment_16(cs,CB_SEG); + reg_eip=off; + SetSegment_16(cs,seg); DOSBOX_RunMachine(); reg_eip=oldeip; SetSegment_16(cs,oldcs); } void CALLBACK_RunRealInt(Bit8u intnum) { - real_writeb((Bit16u)CB_SEG,(call_runint16<<4)+1,intnum); Bit32u oldeip=reg_eip; Bit16u oldcs=Segs[cs].value; - reg_eip=call_runint16<<4; + reg_eip=call_stop<<4; SetSegment_16(cs,CB_SEG); + Interrupt(intnum); DOSBOX_RunMachine(); reg_eip=oldeip; SetSegment_16(cs,oldcs); @@ -139,20 +140,12 @@ void CALLBACK_Init(void) { for (i=0;i