Author: tkreuzer
Date: Tue Sep 27 20:25:51 2011
New Revision: 53876
URL:
http://svn.reactos.org/svn/reactos?rev=53876&view=rev
Log:
[FREELDR]
- copy ebp into REGS structure on Int386
- Write pointer and size of extended bios data area in physical page 0 location 0x740 and
pointers to vga rom fonts in location 0x700. This is required by windows 2003's
videoprt. Now freeldr is more Windows 2003 ready then ever!
Modified:
trunk/reactos/boot/freeldr/freeldr/arch/i386/winldr.c
trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc
Modified: trunk/reactos/boot/freeldr/freeldr/arch/i386/winldr.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/…
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/i386/winldr.c [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/i386/winldr.c [iso-8859-1] Tue Sep 27 20:25:51
2011
@@ -279,6 +279,77 @@
return TRUE;
}
+#define ExtendedBIOSDataArea ((PULONG)0x740)
+#define ExtendedBIOSDataSize ((PULONG)0x744)
+#define RomFontPointers ((PULONG)0x700)
+
+enum
+{
+ INT1FhFont = 0x00,
+ INT43hFont = 0x01,
+ ROM_8x14CharacterFont = 0x02,
+ ROM_8x8DoubleDotFontLo = 0x03,
+ ROM_8x8DoubleDotFontHi = 0x04,
+ ROM_AlphaAlternate = 0x05,
+ ROM_8x16Font = 0x06,
+ ROM_Alternate9x16Font = 0x07,
+ UltraVision_8x20Font = 0x11,
+ UltraVision_8x10Font = 0x12,
+};
+
+void WinLdrSetupSpecialDataPointers()
+{
+ REGS BiosRegs;
+
+ /* Get the address of the bios rom fonts. Win 2003 videoprt reads these
+ values from address 0x700 .. 0x718 and store them in the registry
+ in HKLM\System\CurrentControlSet\Control\Wow\RomFontPointers
+ Int 10h, AX=1130h, BH = pointer specifier
+ returns: es:bp = address */
+ BiosRegs.d.eax = 0x1130;
+ BiosRegs.b.bh = ROM_8x14CharacterFont;
+ Int386(0x10, &BiosRegs, &BiosRegs);
+ RomFontPointers[0] = BiosRegs.w.es << 4 | BiosRegs.w.bp;
+
+ BiosRegs.b.bh = ROM_8x8DoubleDotFontLo;
+ Int386(0x10, &BiosRegs, &BiosRegs);
+ RomFontPointers[1] = BiosRegs.w.es << 16 | BiosRegs.w.bp;
+
+ BiosRegs.b.bh = ROM_8x8DoubleDotFontHi;
+ Int386(0x10, &BiosRegs, &BiosRegs);
+ RomFontPointers[2] = BiosRegs.w.es << 16 | BiosRegs.w.bp;
+
+ BiosRegs.b.bh = ROM_AlphaAlternate;
+ Int386(0x10, &BiosRegs, &BiosRegs);
+ RomFontPointers[3] = BiosRegs.w.es << 16 | BiosRegs.w.bp;
+
+ BiosRegs.b.bh = ROM_8x16Font;
+ Int386(0x10, &BiosRegs, &BiosRegs);
+ RomFontPointers[4] = BiosRegs.w.es << 16 | BiosRegs.w.bp;
+
+ BiosRegs.b.bh = ROM_Alternate9x16Font;
+ Int386(0x10, &BiosRegs, &BiosRegs);
+ RomFontPointers[5] = BiosRegs.w.es << 16 | BiosRegs.w.bp;
+
+ /* Store address of the extended bios data area in 0x740 */
+ BiosRegs.d.eax = 0xC100;
+ Int386(0x15, &BiosRegs, &BiosRegs);
+ if (INT386_SUCCESS(BiosRegs))
+ {
+ *ExtendedBIOSDataArea = BiosRegs.w.es << 4;
+ *ExtendedBIOSDataSize = 1024;
+ ERR(">> *ExtendedBIOSDataArea = 0x%lx\n",
*ExtendedBIOSDataArea);
+ }
+ else
+ {
+ ERR("Couldn't get address of extended BIOS data area\n");
+ *ExtendedBIOSDataArea = 0;
+ *ExtendedBIOSDataSize = 0;
+ }
+
+ /* Store size of the extended bios data area in 0x740 */
+}
+
void WinLdrSetupMachineDependent(PLOADER_PARAMETER_BLOCK LoaderBlock)
{
ULONG TssSize;
@@ -331,6 +402,9 @@
/* Map stuff like PCR, KI_USER_SHARED_DATA and Apic */
WinLdrMapSpecialPages();
+
+ /* Set some special fields */
+ WinLdrSetupSpecialDataPointers();
}
Modified: trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/freeldr/arch/…
==============================================================================
--- trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/freeldr/arch/realmode/int386.inc [iso-8859-1] Tue Sep 27
20:25:51 2011
@@ -29,6 +29,7 @@
mov edx, dword ptr cs:[BSS_RegisterSet + REGS_EDX]
mov esi, dword ptr cs:[BSS_RegisterSet + REGS_ESI]
mov edi, dword ptr cs:[BSS_RegisterSet + REGS_EDI]
+ mov ebp, dword ptr cs:[BSS_RegisterSet + REGS_EBP]
/* Do not set the flags register */
/* only return its value in regsout */
@@ -46,6 +47,7 @@
mov dword ptr cs:[BSS_RegisterSet + REGS_EDX], edx
mov dword ptr cs:[BSS_RegisterSet + REGS_ESI], esi
mov dword ptr cs:[BSS_RegisterSet + REGS_EDI], edi
+ mov dword ptr cs:[BSS_RegisterSet + REGS_EBP], ebp
mov ax, ds
mov word ptr cs:[BSS_RegisterSet + REGS_DS], ax