From 796af47e749faa34b2362215fdf942b08b55f108 Mon Sep 17 00:00:00 2001 From: Peter Veenstra Date: Tue, 23 May 2006 10:30:02 +0000 Subject: [PATCH] Move irq 2/9 to a different location. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2635 --- src/hardware/pic.cpp | 23 +---------------------- src/ints/bios.cpp | 24 ++++++++++++++++++------ 2 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/hardware/pic.cpp b/src/hardware/pic.cpp index bc1a67a7..9a1a9866 100644 --- a/src/hardware/pic.cpp +++ b/src/hardware/pic.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: pic.cpp,v 1.34 2006-03-12 21:14:45 qbix79 Exp $ */ +/* $Id: pic.cpp,v 1.35 2006-05-23 10:30:02 qbix79 Exp $ */ #include @@ -452,20 +452,6 @@ bool PIC_RunQueue(void) { return true; } -//Irq 9-2 calling code -static Bitu INT71_Handler() { - IO_Write(0xa0,0x61); - CALLBACK_RunRealInt(0xa); - return CBRET_NONE; -} - -static Bitu INT0A_Handler() { - IO_Write(0x20,0x62); - return CBRET_NONE; -} - - - /* The TIMER Part */ struct TickerBlock { TIMER_TickHandler handler; @@ -522,7 +508,6 @@ class PIC:public Module_base{ private: IO_ReadHandleObject ReadHandler[4]; IO_WriteHandleObject WriteHandler[4]; - CALLBACK_HandlerObject callback[2]; public: PIC(Section* configuration):Module_base(configuration){ /* Setup pic0 and pic1 with initial values like DOS has normally */ @@ -575,12 +560,6 @@ public: pic.entries[PIC_QUEUESIZE-1].next=0; pic.free_entry=&pic.entries[0]; pic.next_entry=0; - /* Irq 9 and 2 thingie - * Should be done by bios but then it overwrites the mpu handler */ - callback[0].Install(&INT71_Handler,CB_IRET,"irq 9 bios"); - callback[0].Set_RealVec(0x71); - callback[1].Install(&INT0A_Handler,CB_IRET,"irq 2 bios"); - callback[1].Set_RealVec(0xA); } ~PIC(){ } diff --git a/src/ints/bios.cpp b/src/ints/bios.cpp index a95d016c..d9751bfb 100644 --- a/src/ints/bios.cpp +++ b/src/ints/bios.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: bios.cpp,v 1.59 2006-05-22 15:46:13 qbix79 Exp $ */ +/* $Id: bios.cpp,v 1.60 2006-05-23 10:30:02 qbix79 Exp $ */ #include "dosbox.h" #include "mem.h" @@ -61,6 +61,12 @@ static Bitu INT70_Handler(void) { IO_Write(0x20,0x20); return 0; } +// Irq 9 calls irq 2 +static Bitu INT71_Handler() { + IO_Write(0xa0,0x61); + CALLBACK_RunRealInt(0xa); + return CBRET_NONE; +} CALLBACK_HandlerObject* tandy_DAC_callback; static struct { @@ -813,7 +819,7 @@ void BIOS_SetupDisks(void); class BIOS:public Module_base{ private: - CALLBACK_HandlerObject callback[9]; + CALLBACK_HandlerObject callback[10]; public: BIOS(Section* configuration):Module_base(configuration){ /* tandy DAC can be requested in tandy_sound.cpp by initializing this field */ @@ -874,6 +880,16 @@ public: callback[8].Install(&INT70_Handler,CB_IRET,"Int 70 RTC"); callback[8].Set_RealVec(0x70); + /* Irq 9 routed to irq 2 (which is an iret at f000:ff53) */ + callback[9].Install(&INT71_Handler,CB_IRET,"irq 9 bios"); + callback[9].Set_RealVec(0x71); + + /* Some hardcoded vectors */ + phys_writeb(0xfff53,0xcf); /* bios default interrupt vector location */ + phys_writeb(0xfe987,0xea); /* original IRQ1 location (Defender booter) */ + phys_writed(0xfe988,RealGetVec(0x09)); + RealSetVec(0xA,0xf000ff53); /* Ghost busters 2 mt32 mode */ + if (machine==MCH_TANDY) phys_writeb(0xffffe,0xff) ; /* Tandy model */ else if (machine==MCH_PCJR) phys_writeb(0xffffe,0xfd); /* PCJr model */ else phys_writeb(0xffffe,0xfc); /* PC */ @@ -980,10 +996,6 @@ public: IO_Write(0x70,0x31); size_extended|=(IO_Read(0x71) << 8); - phys_writeb(0xfff53,0xcf); /* bios default interrupt vector location */ - phys_writeb(0xfe987,0xea); /* original IRQ1 location (Defender booter) */ - phys_writed(0xfe988,RealGetVec(0x09)); - if (machine==MCH_PCJR) PIC_AddEvent(RAMRefresh_Event,RAM_REFRESH_DELAY); } ~BIOS(){