\r
#include <freeldr.h>\r
\r
-#define NDEBUG\r
+#include <ndk/ldrtypes.h>\r
+\r
+//#define NDEBUG\r
#include <debug.h>\r
\r
VOID DumpMemoryAllocMap(VOID);\r
RtlZeroMemory(*GdtIdt, NumPages << MM_PAGE_SHIFT);\r
}\r
\r
-\r
VOID\r
LoadAndBootWindows(PCSTR OperatingSystemName, WORD OperatingSystemVersion)\r
{\r
BOOLEAN Status;\r
ULONG SectionId;\r
ULONG BootDevice;\r
- PLOADER_PARAMETER_BLOCK LoaderBlock=NULL, LoaderBlockVA;\r
- PLDR_DATA_TABLE_ENTRY KernelDTE, HalDTE;\r
+ PLOADER_PARAMETER_BLOCK LoaderBlock, LoaderBlockVA;\r
KERNEL_ENTRY_POINT KiSystemStartup;\r
+ PLDR_DATA_TABLE_ENTRY KernelDTE, HalDTE;\r
+ PIMAGE_NT_HEADERS NtosHeader;\r
// Mm-related things\r
- PVOID GdtIdt=NULL;\r
+ PVOID GdtIdt;\r
ULONG PcrBasePage=0;\r
ULONG TssBasePage=0;\r
\r
+\r
+\r
//sprintf(MsgBuffer,"Booting Microsoft(R) Windows(R) OS version '%04x' is not implemented yet", OperatingSystemVersion);\r
//UiMessageBox(MsgBuffer);\r
\r
\r
/* Save entry-point pointer (VA) */\r
KiSystemStartup = (KERNEL_ENTRY_POINT)KernelDTE->EntryPoint;\r
+\r
LoaderBlockVA = PaToVa(LoaderBlock);\r
\r
/* Debugging... */\r
\r
WinLdrpDumpMemoryDescriptors(LoaderBlockVA);\r
\r
- /*__asm\r
- {\r
- or esp, KSEG0_BASE;\r
- or ebp, KSEG0_BASE;\r
- }*/\r
-\r
- /*\r
- {\r
- ULONG *trrr = (ULONG *)(512*1024*1024);\r
+ // temp: offset C9000\r
\r
- *trrr = 0x13131414;\r
- }\r
+ //FIXME: If I substitute this debugging checkpoint, GCC will "optimize away" the code below\r
+ //while (1) {};\r
+ asm(".intel_syntax noprefix\n");\r
+ asm("test1:\n");\r
+ asm("jmp test1\n");\r
+ asm(".att_syntax\n");\r
\r
- //FIXME!\r
- while (1) {};*/\r
\r
- (KiSystemStartup)(LoaderBlockVA);\r
+ (*KiSystemStartup)(LoaderBlockVA);\r
\r
return;\r
}\r