From 2ae43c7636049cd78d6d5843fa5d4e980cde0a7e Mon Sep 17 00:00:00 2001 From: Sjoerd van der Berg Date: Mon, 19 Aug 2002 12:33:51 +0000 Subject: [PATCH] New segments and no more default interrupt handles. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@158 --- src/cpu/callback.cpp | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/cpu/callback.cpp b/src/cpu/callback.cpp index da56c405..d10d5e7f 100644 --- a/src/cpu/callback.cpp +++ b/src/cpu/callback.cpp @@ -52,13 +52,13 @@ Bitu CALLBACK_Allocate(void) { void CALLBACK_Idle(void) { /* this makes the cpu execute instructions to handle irq's and then come back */ - Bit16u oldcs=Segs[cs].value; + Bit16u oldcs=SegValue(cs); Bit32u oldeip=reg_eip; - SetSegment_16(cs,CB_SEG); + SegSet16(cs,CB_SEG); reg_eip=call_idle<<4; DOSBOX_RunMachine(); reg_eip=oldeip; - SetSegment_16(cs,oldcs); + SegSet16(cs,oldcs); } static Bitu default_handler(void) { @@ -74,40 +74,40 @@ static Bitu stop_handler(void) { void CALLBACK_RunRealFar(Bit16u seg,Bit16u off) { reg_sp-=4; - real_writew(Segs[es].value,reg_sp,call_stop<<4); - real_writew(Segs[es].value,reg_sp+2,CB_SEG); + mem_writew(SegPhys(ss)+reg_sp,call_stop<<4); + mem_writew(SegPhys(ss)+reg_sp+2,CB_SEG); Bit32u oldeip=reg_eip; - Bit16u oldcs=Segs[cs].value; + Bit16u oldcs=SegValue(cs); reg_eip=off; - SetSegment_16(cs,seg); + SegSet16(cs,seg); DOSBOX_RunMachine(); reg_eip=oldeip; - SetSegment_16(cs,oldcs); + SegSet16(cs,oldcs); } void CALLBACK_RunRealInt(Bit8u intnum) { Bit32u oldeip=reg_eip; - Bit16u oldcs=Segs[cs].value; + Bit16u oldcs=SegValue(cs); reg_eip=call_stop<<4; - SetSegment_16(cs,CB_SEG); + SegSet16(cs,CB_SEG); Interrupt(intnum); DOSBOX_RunMachine(); reg_eip=oldeip; - SetSegment_16(cs,oldcs); + SegSet16(cs,oldcs); } void CALLBACK_SZF(bool val) { - Bit16u tempf=real_readw(Segs[ss].value,reg_sp+4) & 0xFFBF; + Bit16u tempf=mem_readw(SegPhys(ss)+reg_sp+4) & 0xFFBF; Bit16u newZF=(val==true) << 6; - real_writew(Segs[ss].value,reg_sp+4,(tempf | newZF)); + mem_writew(SegPhys(ss)+reg_sp+4,(tempf | newZF)); }; void CALLBACK_SCF(bool val) { - Bit16u tempf=real_readw(Segs[ss].value,reg_sp+4) & 0xFFFE; + Bit16u tempf=mem_readw(SegPhys(ss)+reg_sp+4) & 0xFFFE; Bit16u newCF=(val==true); - real_writew(Segs[ss].value,reg_sp+4,(tempf | newCF)); + mem_writew(SegPhys(ss)+reg_sp+4,(tempf | newCF)); }; @@ -153,12 +153,15 @@ void CALLBACK_Init(void) { real_writeb((Bit16u)CB_SEG,(call_idle<<4)+12,0xFE); real_writeb((Bit16u)CB_SEG,(call_idle<<4)+13,0x38); real_writew((Bit16u)CB_SEG,(call_idle<<4)+14,call_idle); + +#if C_DEBUG /* Setup all Interrupt to point to the default handler */ call_default=CALLBACK_Allocate(); CALLBACK_Setup(call_default,&default_handler,CB_IRET); for (i=0;i<256;i++) { real_writed(0,i*4,CALLBACK_RealPointer(call_default)); } +#endif }