ReactOS  0.4.14-dev-317-g96040ec
bios.c File Reference
#include "ntvdm.h"
#include <debug.h>
#include "emulator.h"
#include "cpu/callback.h"
#include "cpu/bop.h"
#include "bios.h"
#include "bios32/bios32.h"
#include "rom.h"
#include "umamgr.h"
#include "io.h"
#include "hardware/cmos.h"
#include <stdlib.h>
Include dependency graph for bios.c:

Go to the source code of this file.

Macros

#define NDEBUG
 
#define BOP_RESET   0x00
 
#define BOP_EQUIPLIST   0x11
 
#define BOP_GETMEMSIZE   0x12
 

Functions

VOID WINAPI WinNtVdmBiosReset (LPWORD Stack)
 
BOOLEAN BiosInitialize (IN LPCSTR BiosFileName, IN LPCSTR RomFiles OPTIONAL)
 
VOID BiosCleanup (VOID)
 

Variables

static BOOLEAN Bios32Loaded = FALSE
 
PBIOS_DATA_AREA Bda
 
PBIOS_CONFIG_TABLE Bct
 

Macro Definition Documentation

◆ BOP_EQUIPLIST

#define BOP_EQUIPLIST   0x11

Definition at line 35 of file bios.c.

◆ BOP_GETMEMSIZE

#define BOP_GETMEMSIZE   0x12

Definition at line 36 of file bios.c.

◆ BOP_RESET

#define BOP_RESET   0x00

Definition at line 33 of file bios.c.

◆ NDEBUG

#define NDEBUG

Definition at line 13 of file bios.c.

Function Documentation

◆ BiosCleanup()

VOID BiosCleanup ( VOID  )

Definition at line 153 of file bios.c.

154 {
155  UmaMgrCleanup();
156 
158 }
VOID Bios32Cleanup(VOID)
Definition: bios32.c:1285
VOID UmaMgrCleanup(VOID)
Definition: umamgr.c:616
static BOOLEAN Bios32Loaded
Definition: bios.c:40

Referenced by VdmShutdown().

◆ BiosInitialize()

BOOLEAN BiosInitialize ( IN LPCSTR  BiosFileName,
IN LPCSTR RomFiles  OPTIONAL 
)

Definition at line 60 of file bios.c.

62 {
64  BOOLEAN Success2 = FALSE;
65  LPCSTR RomFile;
66  LPSTR ptr;
67  ULONG_PTR RomAddress;
68  CHAR RomFileName[MAX_PATH + 10 + 1];
69 
70  /* Disable interrupts */
71  setIF(0);
72 
73  /* Initialize the BDA and the BCT pointers */
75  // The BCT is found at F000:E6F5 for 100% compatible BIOSes.
77 
78  /* Register the BIOS support BOPs */
79  RegisterBop(BOP_RESET, WinNtVdmBiosReset); // Needed for Windows NTVDM (SoftPC) BIOS.
80  RegisterBop(BOP_EQUIPLIST , BiosEquipmentService); // Needed by Windows NTVDM (SoftPC) BIOS
81  RegisterBop(BOP_GETMEMSIZE, BiosGetMemorySize); // and also NTDOS!!
82 
83  if (BiosFileName == NULL)
84  {
86  }
87  else if (BiosFileName[0] != '\0')
88  {
89  PVOID BiosLocation = NULL;
90 
91  Success = LoadBios(BiosFileName, &BiosLocation, NULL);
92  DPRINT1("BIOS file '%s' loading %s at address 0x%08x; GetLastError() = %u\n",
93  BiosFileName, Success ? "succeeded" : "failed", BiosLocation, GetLastError());
94  }
95  else // if (BiosFileName[0] == '\0')
96  {
97  /* Do nothing */
98  Success = TRUE;
99  }
100 
101  /* Bail out now if we failed to load any BIOS file */
102  if (!Success) return FALSE;
103 
104  /* Load optional ROMs */
105  if (RomFiles)
106  {
107  RomFile = RomFiles;
108  while (*RomFile)
109  {
110  strncpy(RomFileName, RomFile, ARRAYSIZE(RomFileName));
111  RomFileName[ARRAYSIZE(RomFileName)-1] = '\0';
112 
113  ptr = strchr(RomFileName, '|'); // Since '|' is forbidden as a valid file name, we use it as a separator for the ROM address.
114  if (!ptr) goto Skip;
115  *ptr++ = '\0';
116 
117  RomAddress = strtoul(ptr, NULL, 0); // ROM segment
118  RomAddress <<= 4; // Convert to real address
119  if (RomAddress == 0) goto Skip;
120 
121  Success2 = LoadRom(RomFileName, (PVOID)RomAddress, NULL);
122  DPRINT1("ROM file '%s' loading %s at address 0x%08x; GetLastError() = %u\n",
123  RomFileName, Success2 ? "succeeded" : "failed", RomAddress, GetLastError());
124 
125 Skip:
126  RomFile += strlen(RomFile) + 1;
127  }
128  }
129 
130  /*
131  * Boot it up.
132  * The CPU is already in reset-mode so that
133  * CS:IP points to F000:FFF0 as required.
134  */
135  // DisplayMessage(L"CS:IP=%04X:%04X", getCS(), getIP());
136  // setCS(0xF000);
137  // setIP(0xFFF0);
138 
139  // /* Enable interrupts */
140  // setIF(1);
141 
142  /* Initialize the Upper Memory Area Manager */
143  if (!UmaMgrInitialize())
144  {
145  wprintf(L"FATAL: Failed to initialize the UMA manager.\n");
146  return FALSE;
147  }
148 
149  return Success;
150 }
#define BOP_GETMEMSIZE
Definition: bios.c:36
UINT32 strtoul(const char *String, char **Terminator, UINT32 Base)
Definition: utclib.c:696
#define TRUE
Definition: types.h:120
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
VOID RegisterBop(BYTE BopCode, EMULATOR_BOP_PROC BopHandler)
Definition: bop.c:29
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
char CHAR
Definition: xmlstorage.h:175
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
PBIOS_DATA_AREA Bda
Definition: bios.c:42
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
#define wprintf(...)
Definition: whoami.c:18
char * LPSTR
Definition: xmlstorage.h:182
BOOLEAN Bios32Initialize(VOID)
Definition: bios32.c:1242
#define SEG_OFF_TO_PTR(seg, off)
Definition: emulator.h:28
BOOLEAN LoadBios(IN PCSTR BiosFileName, OUT PVOID *BiosLocation OPTIONAL, OUT PULONG BiosSize OPTIONAL)
Definition: rom.c:169
uint32_t ULONG_PTR
Definition: typedefs.h:63
PBIOS_CONFIG_TABLE Bct
Definition: bios.c:43
struct _BIOS_CONFIG_TABLE * PBIOS_CONFIG_TABLE
#define BOP_RESET
Definition: bios.c:33
static PVOID ptr
Definition: dispmode.c:27
BOOLEAN LoadRom(IN PCSTR RomFileName, IN PVOID RomLocation, OUT PULONG RomSize OPTIONAL)
Definition: rom.c:214
unsigned char BOOLEAN
static BOOLEAN Bios32Loaded
Definition: bios.c:40
smooth NULL
Definition: ftsmooth.c:416
const char * LPCSTR
Definition: xmlstorage.h:183
#define BOP_EQUIPLIST
Definition: bios.c:35
BOOLEAN UmaMgrInitialize(VOID)
Definition: umamgr.c:375
#define MAX_PATH
Definition: compat.h:26
static const WCHAR L[]
Definition: oid.c:1250
#define BDA_SEGMENT
Definition: bios.h:28
VOID WINAPI WinNtVdmBiosReset(LPWORD Stack)
Definition: bios.c:50
VOID WINAPI setIF(ULONG)
Definition: registers.c:643
char * strchr(const char *String, int ch)
Definition: utclib.c:501
#define DPRINT1
Definition: precomp.h:8
struct BIOS_DATA_AREA * PBIOS_DATA_AREA
VOID WINAPI BiosEquipmentService(LPWORD Stack)
Definition: bios32.c:200
#define BIOS_SEGMENT
Definition: bios.h:29
VOID WINAPI BiosGetMemorySize(LPWORD Stack)
Definition: bios32.c:206

Referenced by wmain().

◆ WinNtVdmBiosReset()

VOID WINAPI WinNtVdmBiosReset ( LPWORD  Stack)

Definition at line 50 of file bios.c.

51 {
52  DisplayMessage(L"You are loading Windows NTVDM BIOS!\n");
53  // Bios32Post(Stack);
54 
55  DisplayMessage(L"ReactOS NTVDM doesn't support Windows NTVDM BIOS at the moment. The VDM will shut down.");
57 }
static const WCHAR L[]
Definition: oid.c:1250
VOID EmulatorTerminate(VOID)
Definition: emulator.c:503
void DisplayMessage(BOOL bConsole, BOOL bSilent, LPCTSTR lpMessage, LPCTSTR lpTitle, UINT uType)
Definition: regsvr32.c:239

Referenced by BiosInitialize().

Variable Documentation

◆ Bct

Definition at line 43 of file bios.c.

Referenced by BiosInitialize().

◆ Bda

◆ Bios32Loaded

BOOLEAN Bios32Loaded = FALSE
static

Definition at line 40 of file bios.c.

Referenced by BiosCleanup(), and BiosInitialize().