1
0
Fork 0

Add reboot handler and some more bios strings. (h-a-l-9000, Beta2)

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3268
This commit is contained in:
Peter Veenstra 2009-01-21 21:50:23 +00:00
parent 9f649f01b4
commit 8bba45ae04

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: bios.cpp,v 1.72 2008-08-06 18:32:35 c2woody Exp $ */
/* $Id: bios.cpp,v 1.73 2009-01-21 21:50:23 qbix79 Exp $ */
#include "dosbox.h"
#include "mem.h"
@ -358,17 +358,17 @@ static Bitu INT8_Handler(void) {
/* and running drive */
mem_writeb(BIOS_DRIVE_RUNNING,mem_readb(BIOS_DRIVE_RUNNING) & 0xF0);
return CBRET_NONE;
};
}
#undef DOSBOX_CLOCKSYNC
static Bitu INT1C_Handler(void) {
return CBRET_NONE;
};
}
static Bitu INT12_Handler(void) {
reg_ax=mem_readw(BIOS_MEMORY_SIZE);
return CBRET_NONE;
};
}
static Bitu INT17_Handler(void) {
LOG(LOG_BIOS,LOG_NORMAL)("INT17:Function %X",reg_ah);
@ -741,6 +741,24 @@ static Bitu INT15_Handler(void) {
return CBRET_NONE;
}
static Bitu Reboot_Handler(void) {
// switch to text mode, notify user (let's hope INT10 still works)
const char* const text = "\n\n Reboot requested, quitting now.";
reg_ax = 0;
CALLBACK_RunRealInt(0x10);
reg_ah = 0xe;
reg_bx = 0;
for(Bitu i = 0; i < strlen(text);i++) {
reg_al = text[i];
CALLBACK_RunRealInt(0x10);
}
LOG_MSG(text);
double start = PIC_FullIndex();
while((PIC_FullIndex()-start)<3000) CALLBACK_Idle();
throw 1;
return CBRET_NONE;
}
void BIOS_ZeroExtendedSize(bool in) {
if(in) other_memsystems++;
else other_memsystems--;
@ -759,7 +777,7 @@ void BIOS_SetupDisks(void);
class BIOS:public Module_base{
private:
CALLBACK_HandlerObject callback[10];
CALLBACK_HandlerObject callback[11];
public:
BIOS(Section* configuration):Module_base(configuration){
/* tandy DAC can be requested in tandy_sound.cpp by initializing this field */
@ -815,7 +833,7 @@ public:
BIOS_SetupKeyboard();
/* INT 17 Printer Routines */
callback[5].Install(&INT17_Handler,CB_IRET,"Int 17 Printer");
callback[5].Install(&INT17_Handler,CB_IRET_STI,"Int 17 Printer");
callback[5].Set_RealVec(0x17);
/* INT 1A TIME and some other functions */
@ -834,6 +852,16 @@ public:
callback[9].Install(NULL,CB_IRQ9,"irq 9 bios");
callback[9].Set_RealVec(0x71);
/* Reboot */
callback[10].Install(&Reboot_Handler,CB_IRET,"reboot");
callback[10].Set_RealVec(0x18);
RealPt rptr = callback[10].Get_RealPointer();
RealSetVec(0x19,rptr);
// set system BIOS entry point too
phys_writeb(0xFFFF0,0xEA); // FARJMP
phys_writew(0xFFFF1,RealOff(rptr)); // offset
phys_writew(0xFFFF3,RealSeg(rptr)); // segment
/* Irq 2 */
RealPt irq2pt=RealMake(0xf000,0xff55); /* Ghost busters 2 mt32 mode */
Bitu call_irq2=CALLBACK_Allocate();
@ -850,6 +878,21 @@ public:
else if (machine==MCH_PCJR) phys_writeb(0xffffe,0xfd); /* PCJr model */
else phys_writeb(0xffffe,0xfc); /* PC */
// System BIOS identification
const char* const b_type =
"IBM COMPATIBLE 486 BIOS COPYRIGHT The DOSBox Team.";
for(Bitu i = 0; i < strlen(b_type); i++) phys_writeb(0xfe00e + i,b_type[i]);
// System BIOS version
const char* const b_vers =
"DOSBox FakeBIOS v1.0";
for(Bitu i = 0; i < strlen(b_vers); i++) phys_writeb(0xfe061+i,b_vers[i]);
// write system BIOS date
const char* const b_date = "01/01/92";
for(Bitu i = 0; i < strlen(b_date); i++) phys_writeb(0xffff5+i,b_date[i]);
phys_writeb(0xfffff,0x55); // signature
if (use_tandyDAC) {
/* tandy DAC sound requested, see if soundblaster device is available */
if (Tandy_InitializeSB()) {