Add simple program that allows you to boot into a bios image for running cpu tester bios
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4257
This commit is contained in:
parent
bca40f5561
commit
766a63ac33
1 changed files with 57 additions and 0 deletions
|
@ -1005,6 +1005,61 @@ static void LOADROM_ProgramStart(Program * * make) {
|
|||
*make=new LOADROM;
|
||||
}
|
||||
|
||||
class BIOS : public Program {
|
||||
public:
|
||||
void Run(void) {
|
||||
if (!(cmd->FindCommand(1, temp_line))) {
|
||||
WriteOut("Must specify BIOS file to load.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
Bit8u drive;
|
||||
char fullname[DOS_PATHLENGTH];
|
||||
localDrive* ldp = 0;
|
||||
if (!DOS_MakeName((char *)temp_line.c_str(), fullname, &drive)) return;
|
||||
|
||||
try {
|
||||
/* try to read ROM file into buffer */
|
||||
ldp = dynamic_cast<localDrive*>(Drives[drive]);
|
||||
if (!ldp) return;
|
||||
|
||||
FILE *tmpfile = ldp->GetSystemFilePtr(fullname, "rb");
|
||||
if (tmpfile == NULL) {
|
||||
WriteOut("Can't open a file");
|
||||
return;
|
||||
}
|
||||
fseek(tmpfile, 0L, SEEK_END);
|
||||
if (ftell(tmpfile) > 64 * 1024) {
|
||||
WriteOut("BIOS File too large");
|
||||
fclose(tmpfile);
|
||||
return;
|
||||
}
|
||||
fseek(tmpfile, 0L, SEEK_SET);
|
||||
Bit8u buffer[64*1024];
|
||||
Bitu data_read = fread(buffer, 1, sizeof( buffer), tmpfile);
|
||||
fclose(tmpfile);
|
||||
|
||||
Bit32u rom_base = PhysMake(0xf000, 0); // override regular dosbox bios
|
||||
/* write buffer into ROM */
|
||||
for (Bitu i = 0; i < data_read; i++) phys_writeb(rom_base + i, buffer[i]);
|
||||
|
||||
//Start executing this bios
|
||||
memset(&cpu_regs, 0, sizeof(cpu_regs));
|
||||
memset(&Segs, 0, sizeof(Segs));
|
||||
|
||||
|
||||
SegSet16(cs, 0xf000);
|
||||
reg_eip = 0xfff0;
|
||||
}
|
||||
catch (...) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
static void BIOS_ProgramStart(Program * * make) {
|
||||
*make = new BIOS;
|
||||
}
|
||||
|
||||
// LOADFIX
|
||||
|
||||
|
@ -1767,7 +1822,9 @@ void DOS_SetupPrograms(void) {
|
|||
PROGRAMS_MakeFile("RESCAN.COM",RESCAN_ProgramStart);
|
||||
PROGRAMS_MakeFile("INTRO.COM",INTRO_ProgramStart);
|
||||
PROGRAMS_MakeFile("BOOT.COM",BOOT_ProgramStart);
|
||||
PROGRAMS_MakeFile("BIOS.COM", BIOS_ProgramStart);
|
||||
PROGRAMS_MakeFile("LOADROM.COM", LOADROM_ProgramStart);
|
||||
PROGRAMS_MakeFile("IMGMOUNT.COM", IMGMOUNT_ProgramStart);
|
||||
PROGRAMS_MakeFile("KEYB.COM", KEYB_ProgramStart);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue