Commit in freeldr on MAIN
Makefile+41.7 -> 1.8
freeldr/machine.c+51added 1.1
       /Makefile+10-21.53 -> 1.54
       /debug.c+32-181.21 -> 1.22
       /freeldr.c+2-31.28 -> 1.29
freeldr/arch/i386/archmach.c+50added 1.1
                 /machpc.c+39added 1.1
                 /machpc.h+39added 1.1
                 /machxbox.c+37added 1.1
                 /machxbox.h+42added 1.1
                 /pccons.c+98added 1.1
                 /pcmem.c+252added 1.1
                 /xboxfont.c+286added 1.1
                 /xboxmem.c+144added 1.1
                 /xboxvideo.c+176added 1.1
                 /hardware.h+61.5 -> 1.6
                 /i386rtl.c-391.2 -> 1.3
                 /i386trap.S+40-571.5 -> 1.6
                 /i386mem.c-2161.4 removed
freeldr/include/machine.h+47added 1.1
               /debug.h+11-71.7 -> 1.8
               /mm.h-71.11 -> 1.12
               /rtl.h-11.8 -> 1.9
freeldr/mm/meminit.c+5-281.13 -> 1.14
freeldr/reactos/reactos.c+18-41.38 -> 1.39
               /setupldr.c+23-141.15 -> 1.16
freeldr/rtl/print.c+8-61.7 -> 1.8
+1420-402
12 added + 1 removed + 14 modified, total 27 files
Support video and memory detection on the Xbox

freeldr
Makefile 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- Makefile	1 Jun 2004 01:21:06 -0000	1.7
+++ Makefile	8 Nov 2004 22:02:47 -0000	1.8
@@ -31,6 +31,10 @@
 	$(MAKE) -C install
 	$(MAKE) -C fdebug
 
+freeldr:
+	$(MAKE) -C freeldr
+.PHONY : freeldr
+
 clean:
 	$(MAKE) -C bootsect clean
 	$(MAKE) -C freeldr clean

freeldr/freeldr
machine.c added at 1.1
diff -N machine.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ machine.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,51 @@
+/* $Id: machine.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "freeldr.h"
+#include "machine.h"
+
+#undef MachClearScreenAttr
+#undef MachPutChar
+#undef MachPutCharAttrAtLoc
+#undef MachGetMemoryMap
+
+MACHVTBL MachVtbl;
+
+void 
+MachClearScreenAttr(U8 Attr)
+{
+  MachVtbl.ClearScreenAttr(Attr);
+}
+
+void MachPutChar(int Ch)
+{
+  MachVtbl.PutChar(Ch);
+}
+
+void MachPutCharAttrAtLoc(int Ch, U8 Attr, unsigned X, unsigned Y)
+{
+  MachVtbl.PutCharAttrAtLoc(Ch, Attr, X, Y);
+}
+
+U32 MachGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize)
+{
+  return MachVtbl.GetMemoryMap(BiosMemoryMap, MaxMemoryMapSize);
+}
+
+/* EOF */

freeldr/freeldr
Makefile 1.53 -> 1.54
diff -u -r1.53 -r1.54
--- Makefile	1 Nov 2004 20:49:32 -0000	1.53
+++ Makefile	8 Nov 2004 22:02:47 -0000	1.54
@@ -200,7 +200,6 @@
 			boot.o		\
 			linux.o		\
 			mb.o		\
-			i386mem.o	\
 			i386rtl.o	\
 			i386vid.o	\
 			drvmap.o	\
@@ -210,6 +209,14 @@
 			hardware.o	\
 			hwcpu.o		\
 			hwpci.o		\
+			archmach.o	\
+			machpc.o	\
+			machxbox.o	\
+			pccons.o	\
+			pcmem.o		\
+			xboxfont.o	\
+			xboxmem.o	\
+			xboxvideo.o	\
 			_alloca.o		# For Mingw32 builds
 
 
@@ -272,7 +279,8 @@
 			debug.o \
 			multiboot.o	\
 			version.o \
-			cmdline.o
+			cmdline.o \
+			machine.o
 
 FREELDR_OBJS=	bootmgr.o \
 		drivemap.o \

freeldr/freeldr
debug.c 1.21 -> 1.22
diff -u -r1.21 -r1.22
--- debug.c	17 May 2004 20:25:01 -0000	1.21
+++ debug.c	8 Nov 2004 22:02:47 -0000	1.22
@@ -22,6 +22,7 @@
 #include <rtl.h>
 #include <comm.h>
 #include <portio.h>
+#include <machine.h>
 
 #ifdef DEBUG
 
@@ -75,6 +76,7 @@
 
 VOID DebugPrintChar(UCHAR Character)
 {
+extern VOID XboxVideoPutChar(char c);
 	if (Character == '\n')
 	{
 		DebugStartOfLine = TRUE;
@@ -94,7 +96,7 @@
 	}
 	else
 	{
-		putchar(Character);
+		MachPutChar(Character);
 	}
 }
 
@@ -230,26 +232,11 @@
 	}
 }
 
-VOID DebugPrint(U32 Mask, char *format, ...)
+static VOID DebugPrintV(char *format, int *dataptr)
 {
-	int *dataptr = (int *) &format;
 	char c, *ptr, str[16];
 	int ll;
-	
-	// Mask out unwanted debug messages
-	if (!(Mask & DebugPrintMask))
-	{
-		return;
-	}
-
-	// Print the header if we have started a new line
-	if (DebugStartOfLine)
-	{
-		DebugPrintHeader(Mask);
-		DebugStartOfLine = FALSE;
-	}
 
-	dataptr++;
 	ll = 0;
 	while ((c = *(format++)))
 	{
@@ -308,7 +295,7 @@
 				DebugPrintChar(c);
 				break;
 			default:
-				DebugPrint(Mask, "\nDebugPrint() invalid format specifier - %%%c\n", c);
+				DebugPrint(DPRINT_WARNING, "\nDebugPrint() invalid format specifier - %%%c\n", c);
 				break;
 			}
 		}
@@ -322,6 +309,33 @@
 
 }
 
+VOID DebugPrint(U32 Mask, char *format, ...)
+{
+	int *dataptr = (int *) &format;
+	
+	// Mask out unwanted debug messages
+	if (!(Mask & DebugPrintMask))
+	{
+		return;
+	}
+
+	// Print the header if we have started a new line
+	if (DebugStartOfLine)
+	{
+		DebugPrintHeader(Mask);
+		DebugStartOfLine = FALSE;
+	}
+
+	DebugPrintV(format, ++dataptr);
+}
+
+VOID DebugPrint1(char *format, ...)
+{
+	int *dataptr = (int *) &format;
+
+	DebugPrintV(format, ++dataptr);
+}
+
 VOID DebugDumpBuffer(U32 Mask, PVOID Buffer, U32 Length)
 {
 	PUCHAR	BufPtr = (PUCHAR)Buffer;

freeldr/freeldr
freeldr.c 1.28 -> 1.29
diff -u -r1.28 -r1.29
--- freeldr.c	1 Nov 2004 20:49:32 -0000	1.28
+++ freeldr.c	8 Nov 2004 22:02:47 -0000	1.29
@@ -20,6 +20,7 @@
 #include <freeldr.h>
 #include <rtl.h>
 #include <arch.h>
+#include <machine.h>
 #include <mm.h>
 #include <debug.h>
 #include <bootmgr.h>
@@ -30,11 +31,9 @@
 {
 	CmdLineParse(CmdLine);
 
-	EnableA20();
+	MachInit();
 
-#ifdef DEBUG
 	DebugInit();
-#endif
 
 	DbgPrint((DPRINT_WARNING, "BootMain() called. BootDrive = 0x%x BootPartition = %d\n", BootDrive, BootPartition));
 

freeldr/freeldr/arch/i386
archmach.c added at 1.1
diff -N archmach.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ archmach.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,50 @@
+/* $Id: archmach.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "freeldr.h"
+#include "mm.h"
+#include "machine.h"
+#include "machpc.h"
+#include "machxbox.h"
+#include "portio.h"
+#include "hardware.h"
+#include "rtl.h"
+
+VOID
+MachInit(VOID)
+{
+  U32 PciId;
+
+  memset(&MachVtbl, 0, sizeof(MACHVTBL));
+
+  /* Check for Xbox by identifying device at PCI 0:0:0, if it's
+   * 0x10de/0x02a5 then we're running on an Xbox */
+  WRITE_PORT_ULONG((U32*) 0xcf8, CONFIG_CMD(0, 0, 0));
+  PciId = READ_PORT_ULONG((U32*) 0xcfc);
+  if (0x02a510de == PciId)
+    {
+      XboxMachInit();
+    }
+  else
+    {
+      PcMachInit();
+    }
+}
+
+/* EOF */

freeldr/freeldr/arch/i386
machpc.c added at 1.1
diff -N machpc.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ machpc.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,39 @@
+/* $Id: machpc.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "freeldr.h"
+#include "mm.h"
+#include "arch.h"
+#include "machine.h"
+#include "machpc.h"
+#include "rtl.h"
+
+VOID
+PcMachInit(VOID)
+{
+  EnableA20();
+
+  /* Setup vtbl */
+  MachVtbl.ClearScreenAttr = PcConsClearScreenAttr;
+  MachVtbl.PutChar = PcConsPutChar;
+  MachVtbl.PutCharAttrAtLoc = PcConsPutCharAttrAtLoc;
+  MachVtbl.GetMemoryMap = PcMemGetMemoryMap;
+}
+
+/* EOF */

freeldr/freeldr/arch/i386
machpc.h added at 1.1
diff -N machpc.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ machpc.h	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,39 @@
+/* $Id: machpc.h,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  Copyright (C) 2003  Eric Kohl
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __I386_MACHPC_H_
+#define __I386_MACHPC_H_
+
+#ifndef __MEMORY_H
+#include "mm.h"
+#endif
+
+VOID PcMachInit(VOID);
+
+VOID PcConsClearScreenAttr(U8 Attr);
+VOID PcConsPutChar(int Ch);
+VOID PcConsPutCharAttrAtLoc(int Ch, U8 Attr, unsigned X, unsigned Y);
+
+U32 PcMemGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);
+
+#endif /* __I386_MACHPC_H_ */
+
+/* EOF */

freeldr/freeldr/arch/i386
machxbox.c added at 1.1
diff -N machxbox.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ machxbox.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,37 @@
+/* $Id: machxbox.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "freeldr.h"
+#include "mm.h"
+#include "machine.h"
+#include "machxbox.h"
+
+VOID
+XboxMachInit(VOID)
+{
+  /* Initialize our stuff */
+  XboxMemInit();
+  XboxVideoInit();
+
+  /* Setup vtbl */
+  MachVtbl.ClearScreenAttr = XboxVideoClearScreenAttr;
+  MachVtbl.PutChar = XboxVideoPutChar;
+  MachVtbl.PutCharAttrAtLoc = XboxVideoPutCharAttrAtLoc;
+  MachVtbl.GetMemoryMap = XboxMemGetMemoryMap;
+}

freeldr/freeldr/arch/i386
machxbox.h added at 1.1
diff -N machxbox.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ machxbox.h	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,42 @@
+/* $Id: machxbox.h,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __I386_MACHXBOX_H_
+#define __I386_MACHXBOX_H_
+
+#ifndef __MEMORY_H
+#include "mm.h"
+#endif
+
+U8 XboxFont8x16[256 * 16];
+
+VOID XboxMachInit(VOID);
+
+VOID XboxVideoInit(VOID);
+VOID XboxVideoClearScreenAttr(U8 Attr);
+VOID XboxVideoPutChar(int Ch);
+VOID XboxVideoPutCharAttrAtLoc(int Ch, U8 Attr, unsigned X, unsigned Y);
+
+VOID XboxMemInit(VOID);
+PVOID XboxMemReserveMemory(U32 MbToReserve);
+U32 XboxMemGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);
+
+#endif /* __I386_HWXBOX_H_ */
+
+/* EOF */

freeldr/freeldr/arch/i386
pccons.c added at 1.1
diff -N pccons.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ pccons.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,98 @@
+/* $Id: pccons.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include "freeldr.h"
+#include "mm.h"
+#include "arch.h"
+#include "debug.h"
+#include "machpc.h"
+#include "rtl.h"
+
+#define TEXTMODE_BUFFER      0xb8000
+#define TEXTMODE_BUFFER_SIZE 0x8000
+
+#define TEXT_COLS  80
+#define TEXT_LINES 25
+
+VOID
+PcConsClearScreenAttr(U8 Attr)
+{
+  U16 AttrChar;
+  U16 *BufPtr;
+
+  AttrChar = ((U16) Attr << 8) | ' ';
+  for (BufPtr = (U16 *) TEXTMODE_BUFFER;
+       BufPtr < (U16 *) (TEXTMODE_BUFFER + TEXTMODE_BUFFER_SIZE);
+       BufPtr++)
+    {
+      *BufPtr = AttrChar;
+    }
+}
+
+VOID
+PcConsPutChar(int Ch)
+{
+  REGS Regs;
+
+  /* If we are displaying a CR '\n' then do a LF also */
+  if ('\n' == Ch)
+    {
+      /* Display the LF */
+      PcConsPutChar('\r');
+    }
+
+  /* If we are displaying a TAB '\t' then display 8 spaces ' ' */
+  if ('\t' == Ch)
+    {
+      /* Display the 8 spaces ' ' */
+      PcConsPutChar(' ');
+      PcConsPutChar(' ');
+      PcConsPutChar(' ');
+      PcConsPutChar(' ');
+      PcConsPutChar(' ');
+      PcConsPutChar(' ');
+      PcConsPutChar(' ');
+      PcConsPutChar(' ');
+      return;
+    }
+
+  /* Int 10h AH=0Eh
+   * VIDEO - TELETYPE OUTPUT
+   *
+   * AH = 0Eh
+   * AL = character to write
+   * BH = page number
+   * BL = foreground color (graphics modes only)
+   */
+  Regs.b.ah = 0x0E;
+  Regs.b.al = Ch;
+  Regs.w.bx = 1;
+  Int386(0x10, &Regs, &Regs);
+}
+
+VOID
+PcConsPutCharAttrAtLoc(int Ch, U8 Attr, unsigned X, unsigned Y)
+{
+  U16 *BufPtr;
+
+  BufPtr = (U16 *) (TEXTMODE_BUFFER + (Y * TEXT_COLS + X) * 2);
+  *BufPtr = ((U16) Attr << 8) | (Ch & 0xff);
+}
+
+/* EOF */

freeldr/freeldr/arch/i386
pcmem.c added at 1.1
diff -N pcmem.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ pcmem.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,252 @@
+/* $Id: pcmem.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Note: Most of this code comes from the old file "i386mem.c", which
+ *       was Copyright (C) 1998-2003 Brian Palmer <brianp@sginet.com>
+ */
+
+#include "freeldr.h"
+#include "arch.h"
+#include "debug.h"
+#include "mm.h"
+#include "machpc.h"
+#include "portio.h"
+#include "rtl.h"
+
+static U32
+PcMemGetExtendedMemorySize(VOID)
+{
+  REGS RegsIn;
+  REGS RegsOut;
+  U32 MemorySize;
+
+  DbgPrint((DPRINT_MEMORY, "GetExtendedMemorySize()\n"));
+
+  /* Int 15h AX=E801h
+   * Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS
+   *
+   * AX = E801h
+   * Return:
+   * CF clear if successful
+   * AX = extended memory between 1M and 16M, in K (max 3C00h = 15MB)
+   * BX = extended memory above 16M, in 64K blocks
+   * CX = configured memory 1M to 16M, in K
+   * DX = configured memory above 16M, in 64K blocks
+   * CF set on error
+   */
+  RegsIn.w.ax = 0xE801;
+  Int386(0x15, &RegsIn, &RegsOut);
+
+  DbgPrint((DPRINT_MEMORY, "Int15h AX=E801h\n"));
+  DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n", RegsOut.w.ax));
+  DbgPrint((DPRINT_MEMORY, "BX = 0x%x\n", RegsOut.w.bx));
+  DbgPrint((DPRINT_MEMORY, "CX = 0x%x\n", RegsOut.w.cx));
+  DbgPrint((DPRINT_MEMORY, "DX = 0x%x\n", RegsOut.w.dx));
+  DbgPrint((DPRINT_MEMORY, "CF set = %s\n\n", (RegsOut.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
+
+  if (INT386_SUCCESS(RegsOut))
+    {
+      /* If AX=BX=0000h the use CX and DX */
+      if (RegsOut.w.ax == 0)
+        {
+          /* Return extended memory size in K */
+          MemorySize = RegsOut.w.dx * 64;
+          MemorySize += RegsOut.w.cx;
+          return MemorySize;
+        }
+      else
+        {
+          /* Return extended memory size in K */
+          MemorySize = RegsOut.w.bx * 64;
+          MemorySize += RegsOut.w.ax;
+          return MemorySize;
+        }
+    }
+
+  /* If we get here then Int15 Func E801h didn't work */
+  /* So try Int15 Func 88h */
+
+  /* Int 15h AH=88h
+   * SYSTEM - GET EXTENDED MEMORY SIZE (286+)
+   *
+   * AH = 88h
+   * Return:
+   * CF clear if successful
+   * AX = number of contiguous KB starting at absolute address 100000h
+   * CF set on error
+   * AH = status
+   * 80h invalid command (PC,PCjr)
+   * 86h unsupported function (XT,PS30)
+   */
+  RegsIn.b.ah = 0x88;
+  Int386(0x15, &RegsIn, &RegsOut);
+
+  DbgPrint((DPRINT_MEMORY, "Int15h AH=88h\n"));
+  DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n", RegsOut.w.ax));
+  DbgPrint((DPRINT_MEMORY, "CF set = %s\n\n", (RegsOut.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
+
+  if (INT386_SUCCESS(RegsOut) && RegsOut.w.ax != 0)
+    {
+      MemorySize = RegsOut.w.ax;
+      return MemorySize;
+    }
+
+  /* If we get here then Int15 Func 88h didn't work */
+  /* So try reading the CMOS */
+  WRITE_PORT_UCHAR((PUCHAR)0x70, 0x31);
+  MemorySize = READ_PORT_UCHAR((PUCHAR)0x71);
+  MemorySize = (MemorySize & 0xFFFF);
+  MemorySize = (MemorySize << 8);
+
+  DbgPrint((DPRINT_MEMORY, "Int15h Failed\n"));
+  DbgPrint((DPRINT_MEMORY, "CMOS reports: 0x%x\n", MemorySize));
+
+  return MemorySize;
+}
+
+static U32
+PcMemGetConventionalMemorySize(VOID)
+{
+  REGS Regs;
+
+  DbgPrint((DPRINT_MEMORY, "GetConventionalMemorySize()\n"));
+
+  /* Int 12h
+   * BIOS - GET MEMORY SIZE
+   *
+   * Return:
+   * AX = kilobytes of contiguous memory starting at absolute address 00000h
+   *
+   * This call returns the contents of the word at 0040h:0013h;
+   * in PC and XT, this value is set from the switches on the motherboard
+   */
+  Regs.w.ax = 0;
+  Int386(0x12, &Regs, &Regs);
+
+  DbgPrint((DPRINT_MEMORY, "Int12h\n"));
+  DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n\n", Regs.w.ax));
+
+  return (U32)Regs.w.ax;
+}
+
+static U32
+PcMemGetBiosMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize)
+{
+  REGS Regs;
+  U32 MapCount;
+
+  DbgPrint((DPRINT_MEMORY, "GetBiosMemoryMap()\n"));
+
+  /* Int 15h AX=E820h
+   * Newer BIOSes - GET SYSTEM MEMORY MAP
+   *
+   * AX = E820h
+   * EAX = 0000E820h
+   * EDX = 534D4150h ('SMAP')
+   * EBX = continuation value or 00000000h to start at beginning of map
+   * ECX = size of buffer for result, in bytes (should be >= 20 bytes)
+   * ES:DI -> buffer for result
+   * Return:
+   * CF clear if successful
+   * EAX = 534D4150h ('SMAP')
+   * ES:DI buffer filled
+   * EBX = next offset from which to copy or 00000000h if all done
+   * ECX = actual length returned in bytes
+   * CF set on error
+   * AH = error code (86h)
+   */
+  Regs.x.eax = 0x0000E820;
+  Regs.x.edx = 0x534D4150; /* ('SMAP') */
+  Regs.x.ebx = 0x00000000;
+  Regs.x.ecx = sizeof(BIOS_MEMORY_MAP);
+  Regs.w.es = BIOSCALLBUFSEGMENT;
+  Regs.w.di = BIOSCALLBUFOFFSET;
+  for (MapCount = 0; MapCount < MaxMemoryMapSize; MapCount++)
+    {
+      Int386(0x15, &Regs, &Regs);
+
+      DbgPrint((DPRINT_MEMORY, "Memory Map Entry %d\n", MapCount));
+      DbgPrint((DPRINT_MEMORY, "Int15h AX=E820h\n"));
+      DbgPrint((DPRINT_MEMORY, "EAX = 0x%x\n", Regs.x.eax));
+      DbgPrint((DPRINT_MEMORY, "EBX = 0x%x\n", Regs.x.ebx));
+      DbgPrint((DPRINT_MEMORY, "ECX = 0x%x\n", Regs.x.ecx));
+      DbgPrint((DPRINT_MEMORY, "CF set = %s\n", (Regs.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
+
+      /* If the BIOS didn't return 'SMAP' in EAX then
+       * it doesn't support this call */
+      if (Regs.x.eax != 0x534D4150)
+        {
+          break;
+        }
+
+      /* Copy data to caller's buffer */
+      RtlCopyMemory(&BiosMemoryMap[MapCount], (PVOID)BIOSCALLBUFFER, Regs.x.ecx);
+
+      DbgPrint((DPRINT_MEMORY, "BaseAddress: 0x%x%x\n", BiosMemoryMap[MapCount].BaseAddress));
+      DbgPrint((DPRINT_MEMORY, "Length: 0x%x%x\n", BiosMemoryMap[MapCount].Length));
+      DbgPrint((DPRINT_MEMORY, "Type: 0x%x\n", BiosMemoryMap[MapCount].Type));
+      DbgPrint((DPRINT_MEMORY, "Reserved: 0x%x\n", BiosMemoryMap[MapCount].Reserved));
+      DbgPrint((DPRINT_MEMORY, "\n"));
+
+      /* If the continuation value is zero or the
+       * carry flag is set then this was
+       * the last entry so we're done */
+      if (Regs.x.ebx == 0x00000000 || !INT386_SUCCESS(Regs))
+        {
+          MapCount++;
+          DbgPrint((DPRINT_MEMORY, "End Of System Memory Map!\n\n"));
+          break;
+        }
+
+      /* Setup the registers for the next call */
+      Regs.x.eax = 0x0000E820;
+      Regs.x.edx = 0x534D4150; /* ('SMAP') */
+      /* Regs.x.ebx = 0x00000001;  Continuation value already set by the BIOS */
+      Regs.x.ecx = sizeof(BIOS_MEMORY_MAP);
+      Regs.w.es = BIOSCALLBUFSEGMENT;
+      Regs.w.di = BIOSCALLBUFOFFSET;
+    }
+
+  return MapCount;
+}
+
+U32
+PcMemGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize)
+{
+  U32 EntryCount;
+
+  EntryCount = PcMemGetBiosMemoryMap(BiosMemoryMap, MaxMemoryMapSize);
+
+  /* If the BIOS didn't provide a memory map, synthesize one */
+  if (0 == EntryCount && 2 <= MaxMemoryMapSize)
+    {
+      /* Conventional memory */
+      BiosMemoryMap[0].BaseAddress = 0;
+      BiosMemoryMap[0].Length = PcMemGetConventionalMemorySize() * 1024;
+      BiosMemoryMap[0].Type = MEMTYPE_USABLE;
+      /* Extended memory */
+      BiosMemoryMap[1].BaseAddress = 1024 * 1024;
+      BiosMemoryMap[1].Length = PcMemGetExtendedMemorySize() * 1024;
+      BiosMemoryMap[1].Type = MEMTYPE_USABLE;
+      EntryCount = 2;
+    }
+
+  return EntryCount;
+}
+
+/* EOF */

freeldr/freeldr/arch/i386
xboxfont.c added at 1.1
diff -N xboxfont.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ xboxfont.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,286 @@
+/* $Id: xboxfont.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Note: Converted from the XFree vga.bdf font
+ */
+
+#include "freeldr.h"
+#include "machxbox.h"
+
+U8 XboxFont8x16[256 * 16] =
+{
+  0x00,0x00,0x00,0x7c,0xc6,0xc6,0xde,0xde,0xde,0xdc,0xc0,0x7c,0x00,0x00,0x00,0x00, /* 0x00 */
+  0x00,0x00,0x7e,0x81,0xa5,0x81,0x81,0xa5,0x99,0x81,0x81,0x7e,0x00,0x00,0x00,0x00, /* 0x01 */
+  0x00,0x00,0x7e,0xff,0xdb,0xff,0xff,0xdb,0xe7,0xff,0xff,0x7e,0x00,0x00,0x00,0x00, /* 0x02 */
+  0x00,0x00,0x00,0x00,0x6c,0xfe,0xfe,0xfe,0xfe,0x7c,0x38,0x10,0x00,0x00,0x00,0x00, /* 0x03 */
+  0x00,0x00,0x00,0x00,0x10,0x38,0x7c,0xfe,0x7c,0x38,0x10,0x00,0x00,0x00,0x00,0x00, /* 0x04 */
+  0x00,0x00,0x00,0x18,0x3c,0x3c,0xe7,0xe7,0xe7,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* 0x05 */
+  0x00,0x00,0x00,0x18,0x3c,0x7e,0xff,0xff,0x7e,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* 0x06 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 0x07 */
+  0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xc3,0xc3,0xe7,0xff,0xff,0xff,0xff,0xff,0xff, /* 0x08 */
+  0x00,0x00,0x00,0x00,0x00,0x3c,0x66,0x42,0x42,0x66,0x3c,0x00,0x00,0x00,0x00,0x00, /* 0x09 */
+  0xff,0xff,0xff,0xff,0xff,0xc3,0x99,0xbd,0xbd,0x99,0xc3,0xff,0xff,0xff,0xff,0xff, /* 0x0a */
+  0x00,0x00,0x1e,0x06,0x0e,0x1a,0x78,0xcc,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,0x00, /* 0x0b */
+  0x00,0x00,0x3c,0x66,0x66,0x66,0x66,0x3c,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00, /* 0x0c */
+  0x00,0x00,0x3f,0x33,0x3f,0x30,0x30,0x30,0x30,0x70,0xf0,0xe0,0x00,0x00,0x00,0x00, /* 0x0d */
+  0x00,0x00,0x7f,0x63,0x7f,0x63,0x63,0x63,0x63,0x67,0xe7,0xe6,0xc0,0x00,0x00,0x00, /* 0x0e */
+  0x00,0x00,0x00,0x18,0x18,0xdb,0x3c,0xe7,0x3c,0xdb,0x18,0x18,0x00,0x00,0x00,0x00, /* 0x0f */
+  0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfe,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00, /* 0x10 */
+  0x00,0x02,0x06,0x0e,0x1e,0x3e,0xfe,0x3e,0x1e,0x0e,0x06,0x02,0x00,0x00,0x00,0x00, /* 0x11 */
+  0x00,0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00,0x00,0x00,0x00,0x00, /* 0x12 */
+  0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x66,0x66,0x00,0x00,0x00,0x00, /* 0x13 */
+  0x00,0x00,0x7f,0xdb,0xdb,0xdb,0x7b,0x1b,0x1b,0x1b,0x1b,0x1b,0x00,0x00,0x00,0x00, /* 0x14 */
+  0x00,0x7c,0xc6,0x60,0x38,0x6c,0xc6,0xc6,0x6c,0x38,0x0c,0xc6,0x7c,0x00,0x00,0x00, /* 0x15 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xfe,0xfe,0xfe,0x00,0x00,0x00,0x00, /* 0x16 */
+  0x00,0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x7e,0x3c,0x18,0x7e,0x00,0x00,0x00,0x00, /* 0x17 */
+  0x00,0x00,0x18,0x3c,0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 0x18 */
+  0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x3c,0x18,0x00,0x00,0x00,0x00, /* 0x19 */
+  0x00,0x00,0x00,0x00,0x00,0x18,0x0c,0xfe,0x0c,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* 0x1a */
+  0x00,0x00,0x00,0x00,0x00,0x30,0x60,0xfe,0x60,0x30,0x00,0x00,0x00,0x00,0x00,0x00, /* 0x1b */
+  0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0xc0,0xc0,0xfe,0x00,0x00,0x00,0x00,0x00,0x00, /* 0x1c */
+  0x00,0x00,0x00,0x00,0x00,0x28,0x6c,0xfe,0x6c,0x28,0x00,0x00,0x00,0x00,0x00,0x00, /* 0x1d */
+  0x00,0x00,0x00,0x00,0x10,0x38,0x38,0x7c,0x7c,0xfe,0xfe,0x00,0x00,0x00,0x00,0x00, /* 0x1e */
+  0x00,0x00,0x00,0x00,0xfe,0xfe,0x7c,0x7c,0x38,0x38,0x10,0x00,0x00,0x00,0x00,0x00, /* 0x1f */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   */
+  0x00,0x00,0x18,0x3c,0x3c,0x3c,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* ! */
+  0x00,0x66,0x66,0x66,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* " */
+  0x00,0x00,0x00,0x6c,0x6c,0xfe,0x6c,0x6c,0x6c,0xfe,0x6c,0x6c,0x00,0x00,0x00,0x00, /* # */
+  0x18,0x18,0x7c,0xc6,0xc2,0xc0,0x7c,0x06,0x06,0x86,0xc6,0x7c,0x18,0x18,0x00,0x00, /* $ */
+  0x00,0x00,0x00,0x00,0xc2,0xc6,0x0c,0x18,0x30,0x60,0xc6,0x86,0x00,0x00,0x00,0x00, /* % */
+  0x00,0x00,0x38,0x6c,0x6c,0x38,0x76,0xdc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* & */
+  0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ' */
+  0x00,0x00,0x0c,0x18,0x30,0x30,0x30,0x30,0x30,0x30,0x18,0x0c,0x00,0x00,0x00,0x00, /* ( */
+  0x00,0x00,0x30,0x18,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x18,0x30,0x00,0x00,0x00,0x00, /* ) */
+  0x00,0x00,0x00,0x00,0x00,0x66,0x3c,0xff,0x3c,0x66,0x00,0x00,0x00,0x00,0x00,0x00, /* * */
+  0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00, /* + */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00,0x00, /* , */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* - */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* . */
+  0x00,0x00,0x00,0x00,0x02,0x06,0x0c,0x18,0x30,0x60,0xc0,0x80,0x00,0x00,0x00,0x00, /* / */
+  0x00,0x00,0x38,0x6c,0xc6,0xc6,0xd6,0xd6,0xc6,0xc6,0x6c,0x38,0x00,0x00,0x00,0x00, /* 0 */
+  0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x7e,0x00,0x00,0x00,0x00, /* 1 */
+  0x00,0x00,0x7c,0xc6,0x06,0x0c,0x18,0x30,0x60,0xc0,0xc6,0xfe,0x00,0x00,0x00,0x00, /* 2 */
+  0x00,0x00,0x7c,0xc6,0x06,0x06,0x3c,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 3 */
+  0x00,0x00,0x0c,0x1c,0x3c,0x6c,0xcc,0xfe,0x0c,0x0c,0x0c,0x1e,0x00,0x00,0x00,0x00, /* 4 */
+  0x00,0x00,0xfe,0xc0,0xc0,0xc0,0xfc,0x06,0x06,0x06,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 5 */
+  0x00,0x00,0x38,0x60,0xc0,0xc0,0xfc,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 6 */
+  0x00,0x00,0xfe,0xc6,0x06,0x06,0x0c,0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00, /* 7 */
+  0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7c,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 8 */
+  0x00,0x00,0x7c,0xc6,0xc6,0xc6,0x7e,0x06,0x06,0x06,0x0c,0x78,0x00,0x00,0x00,0x00, /* 9 */
+  0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, /* : */
+  0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x30,0x00,0x00,0x00,0x00, /* ; */
+  0x00,0x00,0x00,0x06,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x06,0x00,0x00,0x00,0x00, /* < */
+  0x00,0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* = */
+  0x00,0x00,0x00,0x60,0x30,0x18,0x0c,0x06,0x0c,0x18,0x30,0x60,0x00,0x00,0x00,0x00, /* > */
+  0x00,0x00,0x7c,0xc6,0xc6,0x0c,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, /* ? */
+  0x00,0x00,0x00,0x7c,0xc6,0xc6,0xde,0xde,0xde,0xdc,0xc0,0x7c,0x00,0x00,0x00,0x00, /* @ */
+  0x00,0x00,0x10,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* A */
+  0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x66,0x66,0x66,0x66,0xfc,0x00,0x00,0x00,0x00, /* B */
+  0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xc0,0xc0,0xc2,0x66,0x3c,0x00,0x00,0x00,0x00, /* C */
+  0x00,0x00,0xf8,0x6c,0x66,0x66,0x66,0x66,0x66,0x66,0x6c,0xf8,0x00,0x00,0x00,0x00, /* D */
+  0x00,0x00,0xfe,0x66,0x62,0x68,0x78,0x68,0x60,0x62,0x66,0xfe,0x00,0x00,0x00,0x00, /* E */
+  0x00,0x00,0xfe,0x66,0x62,0x68,0x78,0x68,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, /* F */
+  0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xde,0xc6,0xc6,0x66,0x3a,0x00,0x00,0x00,0x00, /* G */
+  0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* H */
+  0x00,0x00,0x3c,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* I */
+  0x00,0x00,0x1e,0x0c,0x0c,0x0c,0x0c,0x0c,0xcc,0xcc,0xcc,0x78,0x00,0x00,0x00,0x00, /* J */
+  0x00,0x00,0xe6,0x66,0x66,0x6c,0x78,0x78,0x6c,0x66,0x66,0xe6,0x00,0x00,0x00,0x00, /* K */
+  0x00,0x00,0xf0,0x60,0x60,0x60,0x60,0x60,0x60,0x62,0x66,0xfe,0x00,0x00,0x00,0x00, /* L */
+  0x00,0x00,0xc6,0xee,0xfe,0xfe,0xd6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* M */
+  0x00,0x00,0xc6,0xe6,0xf6,0xfe,0xde,0xce,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* N */
+  0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* O */
+  0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, /* P */
+  0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xd6,0xde,0x7c,0x0c,0x0e,0x00,0x00, /* Q */
+  0x00,0x00,0xfc,0x66,0x66,0x66,0x7c,0x6c,0x66,0x66,0x66,0xe6,0x00,0x00,0x00,0x00, /* R */
+  0x00,0x00,0x7c,0xc6,0xc6,0x60,0x38,0x0c,0x06,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* S */
+  0x00,0x00,0x7e,0x7e,0x5a,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* T */
+  0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* U */
+  0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x10,0x00,0x00,0x00,0x00, /* V */
+  0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xd6,0xd6,0xd6,0xfe,0xee,0x6c,0x00,0x00,0x00,0x00, /* W */
+  0x00,0x00,0xc6,0xc6,0x6c,0x7c,0x38,0x38,0x7c,0x6c,0xc6,0xc6,0x00,0x00,0x00,0x00, /* X */
+  0x00,0x00,0x66,0x66,0x66,0x66,0x3c,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* Y */
+  0x00,0x00,0xfe,0xc6,0x86,0x0c,0x18,0x30,0x60,0xc2,0xc6,0xfe,0x00,0x00,0x00,0x00, /* Z */
+  0x00,0x00,0x3c,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3c,0x00,0x00,0x00,0x00, /* [ */
+  0x00,0x00,0x00,0x80,0xc0,0xe0,0x70,0x38,0x1c,0x0e,0x06,0x02,0x00,0x00,0x00,0x00, /* \ */
+  0x00,0x00,0x3c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x3c,0x00,0x00,0x00,0x00, /* ] */
+  0x10,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ^ */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00, /* _ */
+  0x30,0x30,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ` */
+  0x00,0x00,0x00,0x00,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* a */
+  0x00,0x00,0xe0,0x60,0x60,0x78,0x6c,0x66,0x66,0x66,0x66,0x7c,0x00,0x00,0x00,0x00, /* b */
+  0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xc0,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, /* c */
+  0x00,0x00,0x1c,0x0c,0x0c,0x3c,0x6c,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* d */
+  0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, /* e */
+  0x00,0x00,0x38,0x6c,0x64,0x60,0xf0,0x60,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, /* f */
+  0x00,0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0xcc,0x78,0x00, /* g */
+  0x00,0x00,0xe0,0x60,0x60,0x6c,0x76,0x66,0x66,0x66,0x66,0xe6,0x00,0x00,0x00,0x00, /* h */
+  0x00,0x00,0x18,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* i */
+  0x00,0x00,0x06,0x06,0x00,0x0e,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3c,0x00, /* j */
+  0x00,0x00,0xe0,0x60,0x60,0x66,0x6c,0x78,0x78,0x6c,0x66,0xe6,0x00,0x00,0x00,0x00, /* k */
+  0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* l */
+  0x00,0x00,0x00,0x00,0x00,0xec,0xfe,0xd6,0xd6,0xd6,0xd6,0xc6,0x00,0x00,0x00,0x00, /* m */
+  0x00,0x00,0x00,0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, /* n */
+  0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* o */
+  0x00,0x00,0x00,0x00,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x7c,0x60,0x60,0xf0,0x00, /* p */
+  0x00,0x00,0x00,0x00,0x00,0x76,0xcc,0xcc,0xcc,0xcc,0xcc,0x7c,0x0c,0x0c,0x1e,0x00, /* q */
+  0x00,0x00,0x00,0x00,0x00,0xdc,0x76,0x66,0x60,0x60,0x60,0xf0,0x00,0x00,0x00,0x00, /* r */
+  0x00,0x00,0x00,0x00,0x00,0x7c,0xc6,0x60,0x38,0x0c,0xc6,0x7c,0x00,0x00,0x00,0x00, /* s */
+  0x00,0x00,0x10,0x30,0x30,0xfc,0x30,0x30,0x30,0x30,0x36,0x1c,0x00,0x00,0x00,0x00, /* t */
+  0x00,0x00,0x00,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* u */
+  0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x3c,0x18,0x00,0x00,0x00,0x00, /* v */
+  0x00,0x00,0x00,0x00,0x00,0xc6,0xc6,0xd6,0xd6,0xd6,0xfe,0x6c,0x00,0x00,0x00,0x00, /* w */
+  0x00,0x00,0x00,0x00,0x00,0xc6,0x6c,0x38,0x38,0x38,0x6c,0xc6,0x00,0x00,0x00,0x00, /* x */
+  0x00,0x00,0x00,0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7e,0x06,0x0c,0xf8,0x00, /* y */
+  0x00,0x00,0x00,0x00,0x00,0xfe,0xcc,0x18,0x30,0x60,0xc6,0xfe,0x00,0x00,0x00,0x00, /* z */
+  0x00,0x00,0x0e,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0e,0x00,0x00,0x00,0x00, /* { */
+  0x00,0x00,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* | */
+  0x00,0x00,0x70,0x18,0x18,0x18,0x0e,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, /* } */
+  0x00,0x00,0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* ~ */
+  0x00,0x00,0x00,0x00,0x10,0x38,0x6c,0xc6,0xc6,0xc6,0xfe,0x00,0x00,0x00,0x00,0x00, /* 0x7f */
+  0x00,0x00,0x3c,0x66,0xc2,0xc0,0xc0,0xc0,0xc2,0x66,0x3c,0x0c,0x06,0x7c,0x00,0x00, /* 0x80 */
+  0x00,0x00,0xcc,0x00,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0x81 */
+  0x00,0x0c,0x18,0x30,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x82 */
+  0x00,0x10,0x38,0x6c,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0x83 */
+  0x00,0x00,0xcc,0x00,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0x84 */
+  0x00,0x60,0x30,0x18,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0x85 */
+  0x00,0x38,0x6c,0x38,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0x86 */
+  0x00,0x00,0x00,0x00,0x3c,0x66,0x60,0x60,0x66,0x3c,0x0c,0x06,0x3c,0x00,0x00,0x00, /* 0x87 */
+  0x00,0x10,0x38,0x6c,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x88 */
+  0x00,0x00,0xc6,0x00,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x89 */
+  0x00,0x60,0x30,0x18,0x00,0x7c,0xc6,0xfe,0xc0,0xc0,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x8a */
+  0x00,0x00,0x66,0x00,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* 0x8b */
+  0x00,0x18,0x3c,0x66,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* 0x8c */
+  0x00,0x60,0x30,0x18,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* 0x8d */
+  0x00,0xc6,0x00,0x10,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* 0x8e */
+  0x38,0x6c,0x38,0x00,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* 0x8f */
+  0x18,0x30,0x60,0x00,0xfe,0x66,0x60,0x7c,0x60,0x60,0x66,0xfe,0x00,0x00,0x00,0x00, /* 0x90 */
+  0x00,0x00,0x00,0x00,0x00,0xcc,0x76,0x36,0x7e,0xd8,0xd8,0x6e,0x00,0x00,0x00,0x00, /* 0x91 */
+  0x00,0x00,0x3e,0x6c,0xcc,0xcc,0xfe,0xcc,0xcc,0xcc,0xcc,0xce,0x00,0x00,0x00,0x00, /* 0x92 */
+  0x00,0x10,0x38,0x6c,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x93 */
+  0x00,0x00,0xc6,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x94 */
+  0x00,0x60,0x30,0x18,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x95 */
+  0x00,0x30,0x78,0xcc,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0x96 */
+  0x00,0x60,0x30,0x18,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0x97 */
+  0x00,0x00,0xc6,0x00,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7e,0x06,0x0c,0x78,0x00, /* 0x98 */
+  0x00,0xc6,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x99 */
+  0x00,0xc6,0x00,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0x9a */
+  0x00,0x18,0x18,0x3c,0x66,0x60,0x60,0x60,0x66,0x3c,0x18,0x18,0x00,0x00,0x00,0x00, /* 0x9b */
+  0x00,0x38,0x6c,0x64,0x60,0xf0,0x60,0x60,0x60,0x60,0xe6,0xfc,0x00,0x00,0x00,0x00, /* 0x9c */
+  0x00,0x00,0x66,0x66,0x3c,0x18,0x7e,0x18,0x7e,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 0x9d */
+  0x00,0xf8,0xcc,0xcc,0xf8,0xc4,0xcc,0xde,0xcc,0xcc,0xcc,0xc6,0x00,0x00,0x00,0x00, /* 0x9e */
+  0x00,0x0e,0x1b,0x18,0x18,0x18,0x7e,0x18,0x18,0x18,0x18,0x18,0xd8,0x70,0x00,0x00, /* 0x9f */
+  0x00,0x18,0x30,0x60,0x00,0x78,0x0c,0x7c,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0xa0 */
+  0x00,0x0c,0x18,0x30,0x00,0x38,0x18,0x18,0x18,0x18,0x18,0x3c,0x00,0x00,0x00,0x00, /* 0xa1 */
+  0x00,0x18,0x30,0x60,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0xa2 */
+  0x00,0x18,0x30,0x60,0x00,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x76,0x00,0x00,0x00,0x00, /* 0xa3 */
+  0x00,0x00,0x76,0xdc,0x00,0xdc,0x66,0x66,0x66,0x66,0x66,0x66,0x00,0x00,0x00,0x00, /* 0xa4 */
+  0x76,0xdc,0x00,0xc6,0xe6,0xf6,0xfe,0xde,0xce,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* 0xa5 */
+  0x00,0x3c,0x6c,0x6c,0x3e,0x00,0x7e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xa6 */
+  0x00,0x38,0x6c,0x6c,0x38,0x00,0x7c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xa7 */
+  0x00,0x00,0x30,0x30,0x00,0x30,0x30,0x60,0xc0,0xc6,0xc6,0x7c,0x00,0x00,0x00,0x00, /* 0xa8 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00,0x00, /* 0xa9 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x06,0x06,0x06,0x06,0x00,0x00,0x00,0x00,0x00, /* 0xaa */
+  0x00,0xc0,0xc0,0xc2,0xc6,0xcc,0x18,0x30,0x60,0xdc,0x86,0x0c,0x18,0x3e,0x00,0x00, /* 0xab */
+  0x00,0xc0,0xc0,0xc2,0xc6,0xcc,0x18,0x30,0x66,0xce,0x9e,0x3e,0x06,0x06,0x00,0x00, /* 0xac */
+  0x00,0x00,0x18,0x18,0x00,0x18,0x18,0x18,0x3c,0x3c,0x3c,0x18,0x00,0x00,0x00,0x00, /* 0xad */
+  0x00,0x00,0x00,0x00,0x00,0x36,0x6c,0xd8,0x6c,0x36,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xae */
+  0x00,0x00,0x00,0x00,0x00,0xd8,0x6c,0x36,0x6c,0xd8,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xaf */
+  0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44, /* 0xb0 */
+  0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa, /* 0xb1 */
+  0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77,0xdd,0x77, /* 0xb2 */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xb3 */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xb4 */
+  0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xb5 */
+  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xf6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xb6 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xfe,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xb7 */
+  0x00,0x00,0x00,0x00,0x00,0xf8,0x18,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xb8 */
+  0x36,0x36,0x36,0x36,0x36,0xf6,0x06,0xf6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xb9 */
+  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xba */
+  0x00,0x00,0x00,0x00,0x00,0xfe,0x06,0xf6,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xbb */
+  0x36,0x36,0x36,0x36,0x36,0xf6,0x06,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xbc */
+  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xfe,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xbd */
+  0x18,0x18,0x18,0x18,0x18,0xf8,0x18,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xbe */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xbf */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xc0 */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xc1 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xc2 */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xc3 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xc4 */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xc5 */
+  0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xc6 */
+  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xc7 */
+  0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xc8 */
+  0x00,0x00,0x00,0x00,0x00,0x3f,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xc9 */
+  0x36,0x36,0x36,0x36,0x36,0xf7,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xca */
+  0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xf7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xcb */
+  0x36,0x36,0x36,0x36,0x36,0x37,0x30,0x37,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xcc */
+  0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xcd */
+  0x36,0x36,0x36,0x36,0x36,0xf7,0x00,0xf7,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xce */
+  0x18,0x18,0x18,0x18,0x18,0xff,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xcf */
+  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xd0 */
+  0x00,0x00,0x00,0x00,0x00,0xff,0x00,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xd1 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xd2 */
+  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xd3 */
+  0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xd4 */
+  0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xd5 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xd6 */
+  0x36,0x36,0x36,0x36,0x36,0x36,0x36,0xff,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, /* 0xd7 */
+  0x18,0x18,0x18,0x18,0x18,0xff,0x18,0xff,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xd8 */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xd9 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xda */
+  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 0xdb */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, /* 0xdc */
+  0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, /* 0xdd */
+  0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, /* 0xde */
+  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xdf */
+  0x00,0x00,0x00,0x00,0x00,0x76,0xdc,0xd8,0xd8,0xd8,0xdc,0x76,0x00,0x00,0x00,0x00, /* 0xe0 */
+  0x00,0x00,0x78,0xcc,0xcc,0xcc,0xd8,0xcc,0xc6,0xc6,0xc6,0xcc,0x00,0x00,0x00,0x00, /* 0xe1 */
+  0x00,0x00,0xfe,0xc6,0xc6,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x00, /* 0xe2 */
+  0x00,0x00,0x00,0x00,0xfe,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00, /* 0xe3 */
+  0x00,0x00,0x00,0xfe,0xc6,0x60,0x30,0x18,0x30,0x60,0xc6,0xfe,0x00,0x00,0x00,0x00, /* 0xe4 */
+  0x00,0x00,0x00,0x00,0x00,0x7e,0xd8,0xd8,0xd8,0xd8,0xd8,0x70,0x00,0x00,0x00,0x00, /* 0xe5 */
+  0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x7c,0x60,0x60,0xc0,0x00,0x00,0x00, /* 0xe6 */
+  0x00,0x00,0x00,0x00,0x76,0xdc,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, /* 0xe7 */
+  0x00,0x00,0x00,0x7e,0x18,0x3c,0x66,0x66,0x66,0x3c,0x18,0x7e,0x00,0x00,0x00,0x00, /* 0xe8 */
+  0x00,0x00,0x00,0x38,0x6c,0xc6,0xc6,0xfe,0xc6,0xc6,0x6c,0x38,0x00,0x00,0x00,0x00, /* 0xe9 */
+  0x00,0x00,0x38,0x6c,0xc6,0xc6,0xc6,0x6c,0x6c,0x6c,0x6c,0xee,0x00,0x00,0x00,0x00, /* 0xea */
+  0x00,0x00,0x1e,0x30,0x18,0x0c,0x3e,0x66,0x66,0x66,0x66,0x3c,0x00,0x00,0x00,0x00, /* 0xeb */
+  0x00,0x00,0x00,0x00,0x00,0x7e,0xdb,0xdb,0xdb,0x7e,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xec */
+  0x00,0x00,0x00,0x03,0x06,0x7e,0xdb,0xdb,0xf3,0x7e,0x60,0xc0,0x00,0x00,0x00,0x00, /* 0xed */
+  0x00,0x00,0x1c,0x30,0x60,0x60,0x7c,0x60,0x60,0x60,0x30,0x1c,0x00,0x00,0x00,0x00, /* 0xee */
+  0x00,0x00,0x00,0x7c,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00,0x00,0x00,0x00, /* 0xef */
+  0x00,0x00,0x00,0x00,0xfe,0x00,0x00,0xfe,0x00,0x00,0xfe,0x00,0x00,0x00,0x00,0x00, /* 0xf0 */
+  0x00,0x00,0x00,0x00,0x18,0x18,0x7e,0x18,0x18,0x00,0x00,0xff,0x00,0x00,0x00,0x00, /* 0xf1 */
+  0x00,0x00,0x00,0x30,0x18,0x0c,0x06,0x0c,0x18,0x30,0x00,0x7e,0x00,0x00,0x00,0x00, /* 0xf2 */
+  0x00,0x00,0x00,0x0c,0x18,0x30,0x60,0x30,0x18,0x0c,0x00,0x7e,0x00,0x00,0x00,0x00, /* 0xf3 */
+  0x00,0x00,0x0e,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, /* 0xf4 */
+  0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xd8,0xd8,0xd8,0x70,0x00,0x00,0x00,0x00, /* 0xf5 */
+  0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x7e,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00, /* 0xf6 */
+  0x00,0x00,0x00,0x00,0x00,0x76,0xdc,0x00,0x76,0xdc,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xf7 */
+  0x00,0x38,0x6c,0x6c,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xf8 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xf9 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xfa */
+  0x00,0x0f,0x0c,0x0c,0x0c,0x0c,0x0c,0xec,0x6c,0x6c,0x3c,0x1c,0x00,0x00,0x00,0x00, /* 0xfb */
+  0x00,0xd8,0x6c,0x6c,0x6c,0x6c,0x6c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xfc */
+  0x00,0x70,0xd8,0x30,0x60,0xc8,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 0xfd */
+  0x00,0x00,0x00,0x00,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x7c,0x00,0x00,0x00,0x00,0x00, /* 0xfe */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  /* 0xff */
+};
+
+/* EOF */
+

freeldr/freeldr/arch/i386
xboxmem.c added at 1.1
diff -N xboxmem.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ xboxmem.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,144 @@
+/* $Id: xboxmem.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Note: much of this code was based on knowledge and/or code developed
+ * by the Xbox Linux group: http://www.xbox-linux.org
+ */
+
+#include "freeldr.h"
+#include "debug.h"
+#include "mm.h"
+#include "rtl.h"
+#include "hardware.h"
+#include "machxbox.h"
+#include "portio.h"
+
+static U32 InstalledMemoryMb = 0;
+static U32 AvailableMemoryMb = 0;
+
+#define TEST_SIZE     0x200
+#define TEST_PATTERN1 0xaa
+#define TEST_PATTERN2 0x55
+
+VOID
+XboxMemInit(VOID)
+{
+  U8 ControlRegion[TEST_SIZE];
+  PVOID MembaseTop = (PVOID)(64 * 1024 * 1024);
+  PVOID MembaseLow = (PVOID)0;
+
+  (*(PU32)(0xfd000000 + 0x100200)) = 0x03070103 ;
+  (*(PU32)(0xfd000000 + 0x100204)) = 0x11448000 ;
+
+  WRITE_PORT_ULONG((U32*) 0xcf8, CONFIG_CMD(0, 0, 0x84));
+  WRITE_PORT_ULONG((U32*) 0xcfc, 0x7ffffff);             /* Prep hardware for 128 Mb */
+
+  InstalledMemoryMb = 64;
+  memset(ControlRegion, TEST_PATTERN1, TEST_SIZE);
+  memset(MembaseTop, TEST_PATTERN1, TEST_SIZE);
+  __asm__ ("wbinvd\n");
+
+  if (0 == memcmp(MembaseTop, ControlRegion, TEST_SIZE))
+    {
+      /* Looks like there is memory .. maybe a 128MB box */
+      memset(ControlRegion, TEST_PATTERN2, TEST_SIZE);
+      memset(MembaseTop, TEST_PATTERN2, TEST_SIZE);
+      __asm__ ("wbinvd\n");
+      if (0 == memcmp(MembaseTop, ControlRegion, TEST_SIZE))
+        {
+          /* Definitely looks like there is memory */
+          if (0 == memcmp(MembaseLow, ControlRegion, TEST_SIZE))
+            {
+              /* Hell, we find the Test-string at 0x0 too ! */
+              InstalledMemoryMb = 64;
+            }
+          else
+            {
+              InstalledMemoryMb = 128;
+            }
+        }
+    }
+
+  /* Set hardware for amount of memory detected */
+  WRITE_PORT_ULONG((U32*) 0xcf8, CONFIG_CMD(0, 0, 0x84));
+  WRITE_PORT_ULONG((U32*) 0xcfc, InstalledMemoryMb * 1024 * 1024 - 1);
+
+  AvailableMemoryMb = InstalledMemoryMb;
+}
+
+U32
+XboxMemGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize)
+{
+  U32 EntryCount = 0;
+
+  /* Synthesize memory map */
+  if (1 <= MaxMemoryMapSize)
+    {
+      /* Available RAM block */
+      BiosMemoryMap[0].BaseAddress = 0;
+      BiosMemoryMap[0].Length = AvailableMemoryMb * 1024 * 1024;
+      BiosMemoryMap[0].Type = MEMTYPE_USABLE;
+      EntryCount = 1;
+    }
+
+  if (2 <= MaxMemoryMapSize)
+    {
+      /* Video memory */
+      BiosMemoryMap[1].BaseAddress = AvailableMemoryMb * 1024 * 1024;
+      BiosMemoryMap[1].Length = (InstalledMemoryMb - AvailableMemoryMb) * 1024 * 1024;
+      BiosMemoryMap[1].Type = MEMTYPE_RESERVED;
+      EntryCount = 2;
+    }
+
+  return EntryCount;
+}
+
+unsigned
+XboxMemGetInstalledMemoryMb(VOID)
+{
+  if (0 == InstalledMemoryMb)
+    {
+      /* Hmm, seems we're not initialized yet */
+      XboxMemInit();
+    }
+
+  return InstalledMemoryMb;
+}
+
+PVOID
+XboxMemReserveMemory(U32 MbToReserve)
+{
+  if (0 == InstalledMemoryMb)
+    {
+      /* Hmm, seems we're not initialized yet */
+      XboxMemInit();
+    }
+
+  if (AvailableMemoryMb < MbToReserve)
+    {
+      /* Can't satisfy the request */
+      return NULL;
+    }
+
+  AvailableMemoryMb -= MbToReserve;
+
+  /* Top of available memory points to the space just reserved */
+  return (PVOID) (AvailableMemoryMb * 1024 * 1024);
+}
+
+/* EOF */

freeldr/freeldr/arch/i386
xboxvideo.c added at 1.1
diff -N xboxvideo.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ xboxvideo.c	8 Nov 2004 22:02:47 -0000	1.1
@@ -0,0 +1,176 @@
+/* $Id: xboxvideo.c,v 1.1 2004/11/08 22:02:47 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Note: much of this code was based on knowledge and/or code developed
+ * by the Xbox Linux group: http://www.xbox-linux.org
+ */
+
+#include "freeldr.h"
+#include "debug.h"
+#include "rtl.h"
+#include "machxbox.h"
+
+static PVOID FrameBuffer;
+static U32 ScreenWidth;
+static U32 ScreenHeight;
+static U32 BytesPerPixel;
+static U32 Delta;
+
+static unsigned CurrentCursorX;
+static unsigned CurrentCursorY;
+static unsigned CurrentFgColor;
+static unsigned CurrentBgColor;
+
+#define CHAR_WIDTH  8
+#define CHAR_HEIGHT 16
+
+#define TOP_BOTTOM_LINES 40
+
+#define FB_SIZE_MB 4
+
+#define MAKE_COLOR(Red, Green, Blue) (0xff000000 | (((Red) & 0xff) << 16) | (((Green) & 0xff) << 8) | ((Blue) & 0xff))
+
+static VOID
+XboxVideoOutputChar(U8 Char, unsigned X, unsigned Y, U32 FgColor, U32 BgColor)
+{
+  PU8 FontPtr;
+  PU32 Pixel;
+  U8 Mask;
+  unsigned Line;
+  unsigned Col;
+
+  FontPtr = XboxFont8x16 + Char * 16;
+  Pixel = (PU32) ((char *) FrameBuffer + (Y * CHAR_HEIGHT + TOP_BOTTOM_LINES) * Delta
+                  + X * CHAR_WIDTH * BytesPerPixel);
+  for (Line = 0; Line < CHAR_HEIGHT; Line++)
+    {
+      Mask = 0x80;
+      for (Col = 0; Col < CHAR_WIDTH; Col++)
+        {
+          Pixel[Col] = (0 != (FontPtr[Line] & Mask) ? FgColor : BgColor);
+          Mask = Mask >> 1;
+        }
+      Pixel = (PU32) ((char *) Pixel + Delta);
+    }
+}
+
+static U32
+XboxVideoAttrToSingleColor(U8 Attr)
+{
+  U8 Intensity;
+
+  Intensity = (0 == (Attr & 0x08) ? 127 : 255);
+
+  return 0xff000000 |
+         (0 == (Attr & 0x04) ? 0 : (Intensity << 16)) |
+         (0 == (Attr & 0x02) ? 0 : (Intensity << 8)) |
+         (0 == (Attr & 0x01) ? 0 : Intensity);
+}
+
+static VOID
+XboxVideoAttrToColors(U8 Attr, U32 *FgColor, U32 *BgColor)
+{
+  *FgColor = XboxVideoAttrToSingleColor(Attr & 0xf);
+  *BgColor = XboxVideoAttrToSingleColor((Attr >> 4) & 0xf);
+}
+
+static VOID
+XboxVideoClearScreen(U32 Color, BOOL FullScreen)
+{
+  U32 Line, Col;
+  PU32 p;
+
+  for (Line = 0; Line < ScreenHeight - (FullScreen ? 0 : 2 * TOP_BOTTOM_LINES); Line++)
+    {
+      p = (PU32) ((char *) FrameBuffer + (Line + (FullScreen ? 0 : TOP_BOTTOM_LINES)) * Delta);
+      for (Col = 0; Col < ScreenWidth; Col++)
+        {
+          *p++ = Color;
+        }
+    }
+}
+
+VOID
+XboxVideoClearScreenAttr(U8 Attr)
+{
+  U32 FgColor, BgColor;
+
+  XboxVideoAttrToColors(Attr, &FgColor, &BgColor);
+
+  XboxVideoClearScreen(BgColor, FALSE);
+}
+
+VOID
+XboxVideoPutChar(int c)
+{
+  if ('\r' == c)
+    {
+      CurrentCursorX = 0;
+    }
+  else if ('\n' == c)
+    {
+      CurrentCursorX = 0;
+      CurrentCursorY++;
+    }
+  else if ('\t' == c)
+    {
+      CurrentCursorX = (CurrentCursorX + 8) & ~ 7;
+    }
+  else
+    {
+      XboxVideoOutputChar(c, CurrentCursorX, CurrentCursorY, CurrentFgColor, CurrentBgColor);
+      CurrentCursorX++;
+    }
+  if (ScreenWidth / CHAR_WIDTH <= CurrentCursorX)
+    {
+      CurrentCursorX = 0;
+      CurrentCursorY++;
+    }
+}
+
+VOID
+XboxVideoPutCharAttrAtLoc(int Ch, U8 Attr, unsigned X, unsigned Y)
+{
+  U32 FgColor, BgColor;
+
+  XboxVideoAttrToColors(Attr, &FgColor, &BgColor);
+
+  XboxVideoOutputChar(Ch, X, Y, FgColor, BgColor);
+}
+
+VOID
+XboxVideoInit(VOID)
+{
+  FrameBuffer = (PVOID)((U32) XboxMemReserveMemory(FB_SIZE_MB) | 0xf0000000);
+  ScreenWidth = 640;
+  ScreenHeight = 480;
+  BytesPerPixel = 4;
+  Delta = (ScreenWidth * BytesPerPixel + 3) & ~ 0x3;
+
+  CurrentCursorX = 0;
+  CurrentCursorY = 0;
+  CurrentFgColor = MAKE_COLOR(192, 192, 192);
+  CurrentBgColor = MAKE_COLOR(0, 0, 0);
+
+  XboxVideoClearScreen(CurrentBgColor, TRUE);
+
+  /* Tell the nVidia controller about the framebuffer */
+  *((PU32) 0xfd600800) = (U32) FrameBuffer;
+}
+
+/* EOF */

freeldr/freeldr/arch/i386
hardware.h 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- hardware.h	30 Aug 2004 10:50:13 -0000	1.5
+++ hardware.h	8 Nov 2004 22:02:47 -0000	1.6
@@ -21,6 +21,10 @@
 #ifndef __I386_HARDWARE_H_
 #define __I386_HARDWARE_H_
 
+#ifndef __REGISTRY_H
+#include "../../reactos/registry.h"
+#endif
+
 typedef enum
 {
   InterfaceTypeUndefined = -1,
@@ -149,6 +153,8 @@
 #define Input       0x00000020
 #define Output      0x00000040
 
+#define CONFIG_CMD(bus, dev_fn, where) \
+	(0x80000000 | (((U32)(bus)) << 16) | (((dev_fn) & 0x1F) << 11) | (((dev_fn) & 0xE0) << 3) | ((where) & ~3))
 
 /* PROTOTYPES ***************************************************************/
 

freeldr/freeldr/arch/i386
i386rtl.c 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- i386rtl.c	19 Jan 2003 01:03:58 -0000	1.2
+++ i386rtl.c	8 Nov 2004 22:02:47 -0000	1.3
@@ -22,45 +22,6 @@
 #include <rtl.h>
 #include <portio.h>
 
-void putchar(int ch)
-{
-	REGS	Regs;
-
-	/* If we are displaying a CR '\n' then do a LF also */
-	if (ch == '\n')
-	{
-		/* Display the LF */
-		putchar('\r');
-	}
-
-	/* If we are displaying a TAB '\t' then display 8 spaces ' ' */
-	if (ch == '\t')
-	{
-		/* Display the 8 spaces ' ' */
-		putchar(' ');
-		putchar(' ');
-		putchar(' ');
-		putchar(' ');
-		putchar(' ');
-		putchar(' ');
-		putchar(' ');
-		putchar(' ');
-		return;
-	}
-
-	// Int 10h AH=0Eh
-	// VIDEO - TELETYPE OUTPUT
-	//
-	// AH = 0Eh
-	// AL = character to write
-	// BH = page number
-	// BL = foreground color (graphics modes only)
-	Regs.b.ah = 0x0E;
-	Regs.b.al = ch;
-	Regs.w.bx = 1;
-	Int386(0x10, &Regs, &Regs);
-}
-
 int kbhit(void)
 {
 	REGS	Regs;

freeldr/freeldr/arch/i386
i386trap.S 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- i386trap.S	30 Oct 2004 17:25:38 -0000	1.5
+++ i386trap.S	8 Nov 2004 22:02:47 -0000	1.6
@@ -24,7 +24,7 @@
 #include <arch.h>
 #include <version.h>
 
-
+#define SCREEN_ATTR 0x1f			/* Bright white on blue background */
 
 .macro SAVE_CPU_REGS
 	movl	%eax,i386_EAX
@@ -272,7 +272,9 @@
 
 	SAVE_CPU_REGS
 
-	call	i386ClearScreenToBlue
+	pushl	$SCREEN_ATTR
+	call	_MachClearScreenAttr
+	add	$4,%esp
 
 	movl	$i386ExceptionHandlerText,%esi
 	call	i386PrintText
@@ -438,12 +440,14 @@
 	movl	$0,i386_ScreenPosX
 	incl	i386_ScreenPosY
 	incl	i386_ScreenPosY
-  call  i386PrintFrames           // Display frames
+	call	i386PrintFrames						// Display frames
 	incl	i386_ScreenPosY
 	incl	i386_ScreenPosY
 
+	cli
 i386ExceptionHandlerHang:
-	jmp		i386ExceptionHandlerHang
+	hlt
+	jmp	i386ExceptionHandlerHang
 
 	iret
 
@@ -454,31 +458,35 @@
 
 	movl	i386_EBP,%edi
 printnextframe:
-  test  %edi,%edi
-  je    nomoreframes
-  movl  $STACK32ADDR,%eax
-  cmpl  %edi,%eax
-  jbe   nomoreframes
-  movl	4(%edi),%eax
-  pushl %edi
+	test	%edi,%edi
+	je	nomoreframes
+	movl	$STACK32ADDR,%eax
+	cmpl	%edi,%eax
+	jbe	nomoreframes
+	movl	4(%edi),%eax
+	pushl	%edi
 	call	i386PrintHexDword					// Display frame
-  popl  %edi
+	popl	%edi
 	incl	i386_ScreenPosX
 	incl	i386_ScreenPosX
-  movl	0(%edi),%edi
-  jmp printnextframe
+	movl	0(%edi),%edi
+	jmp	printnextframe
 nomoreframes:
-  ret
+	ret
 
 /************************************************************************/
-i386ClearScreenToBlue:
+/* AL = Char to display                                                 */
+/************************************************************************/
+i386PrintChar:
 	.code32
 
-	cld
-	movw	$0x1F20,%ax
-	movl	$0xB0000,%edi
-	movl	$0x8000,%ecx
-	rep stosw
+	pushl	i386_ScreenPosY
+	pushl	i386_ScreenPosX
+	pushl	$SCREEN_ATTR
+	andl	$0xff,%eax
+	pushl	%eax
+	call	_MachPutCharAttrAtLoc
+	addl	$16,%esp
 
 	ret
 
@@ -492,49 +500,27 @@
 	lodsb
 
 	// Check for end of string char
-	cmp		$0,%al
-	je		i386PrintTextDone
+	cmp	$0,%al
+	je	i386PrintTextDone
 
 	// Check for newline char
-	cmp		$0x0a,%al
-	jne		i386PrintTextLoop2
+	cmp	$0x0a,%al
+	jne	i386PrintTextLoop2
 	incl	i386_ScreenPosY
 	movl	$0,i386_ScreenPosX
-	jmp		i386PrintTextLoop
+	jmp	i386PrintTextLoop
 
 i386PrintTextLoop2:
-	call	i386PrintTextCalcAddressOfNextChar
-
-	stosb
+	call	i386PrintChar
 	incl	i386_ScreenPosX
 
-	jmp		i386PrintTextLoop
+	jmp	i386PrintTextLoop
 
 i386PrintTextDone:
 	
 	ret
 
 /************************************************************************/
-/* On return EDI = Address of next char in screen memory                */
-/************************************************************************/
-i386PrintTextCalcAddressOfNextChar:
-	.code32
-
-	push	%eax
-
-	movl	$0xB8000,%edi
-	addl	i386_ScreenPosX,%edi
-	addl	i386_ScreenPosX,%edi
-	movl	i386_ScreenPosY,%eax
-	movl	$160,%ecx				// 80 columns, 2 bytes per column
-	mull	%ecx
-	addl	%eax,%edi
-
-	pop		%eax
-
-	ret
-
-/************************************************************************/
 /* Prints the value in EAX on the screen in hex                         */
 /************************************************************************/
 i386PrintHexDword:
@@ -553,8 +539,7 @@
 	andb	$0x0f,%al
 	movl	$i386PrintHexTable,%ebx
 	xlat	/*$i386PrintHexTable*/
-	call	i386PrintTextCalcAddressOfNextChar
-	stosb
+	call	i386PrintChar
 	incl	i386_ScreenPosX
 	pop		%eax
 
@@ -579,10 +564,9 @@
 	andb	$0x0f,%al
 	movl	$i386PrintHexTable,%ebx
 	xlat	/*$i386PrintHexTable*/
-	call	i386PrintTextCalcAddressOfNextChar
-	stosb
+	call	i386PrintChar
 	incl	i386_ScreenPosX
-	pop		%eax
+	pop	%eax
 
 	ret
 
@@ -600,8 +584,7 @@
 	andb	$0x0f,%al
 	movl	$i386PrintHexTable,%ebx
 	xlat	/*$i386PrintHexTable*/
-	call	i386PrintTextCalcAddressOfNextChar
-	stosb
+	call	i386PrintChar
 	incl	i386_ScreenPosX
 	pop		%eax
 

freeldr/freeldr/arch/i386
i386mem.c removed after 1.4
diff -N i386mem.c
--- i386mem.c	19 Jan 2003 01:03:58 -0000	1.4
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,216 +0,0 @@
-/*
- *  FreeLoader
- *  Copyright (C) 1998-2003  Brian Palmer  <brianp@sginet.com>
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <freeldr.h>
-#include <arch.h>
-#include <mm.h>
-#include <debug.h>
-#include <rtl.h>
-#include <portio.h>
-
-
-U32 GetExtendedMemorySize(VOID)
-{
-	REGS	RegsIn;
-	REGS	RegsOut;
-	U32		MemorySize;
-
-	DbgPrint((DPRINT_MEMORY, "GetExtendedMemorySize()\n"));
-
-	// Int 15h AX=E801h
-	// Phoenix BIOS v4.0 - GET MEMORY SIZE FOR >64M CONFIGURATIONS
-	//
-	// AX = E801h
-	// Return:
-	// CF clear if successful
-	// AX = extended memory between 1M and 16M, in K (max 3C00h = 15MB)
-	// BX = extended memory above 16M, in 64K blocks
-	// CX = configured memory 1M to 16M, in K
-	// DX = configured memory above 16M, in 64K blocks
-	// CF set on error
-	RegsIn.w.ax = 0xE801;
-	Int386(0x15, &RegsIn, &RegsOut);
-
-	DbgPrint((DPRINT_MEMORY, "Int15h AX=E801h\n"));
-	DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n", RegsOut.w.ax));
-	DbgPrint((DPRINT_MEMORY, "BX = 0x%x\n", RegsOut.w.bx));
-	DbgPrint((DPRINT_MEMORY, "CX = 0x%x\n", RegsOut.w.cx));
-	DbgPrint((DPRINT_MEMORY, "DX = 0x%x\n", RegsOut.w.dx));
-	DbgPrint((DPRINT_MEMORY, "CF set = %s\n\n", (RegsOut.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
-
-	if (INT386_SUCCESS(RegsOut))
-	{
-		// If AX=BX=0000h the use CX and DX
-		if (RegsOut.w.ax == 0)
-		{
-			// Return extended memory size in K
-			MemorySize = RegsOut.w.dx * 64;
-			MemorySize += RegsOut.w.cx;
-			return MemorySize;
-		}
-		else
-		{
-			// Return extended memory size in K
-			MemorySize = RegsOut.w.bx * 64;
-			MemorySize += RegsOut.w.ax;
-			return MemorySize;
-		}
-	}
-
-	// If we get here then Int15 Func E801h didn't work
-	// So try Int15 Func 88h
-
-	// Int 15h AH=88h
-	// SYSTEM - GET EXTENDED MEMORY SIZE (286+)
-	//
-	// AH = 88h
-	// Return:
-	// CF clear if successful
-	// AX = number of contiguous KB starting at absolute address 100000h
-	// CF set on error
-	// AH = status
-	// 80h invalid command (PC,PCjr)
-	// 86h unsupported function (XT,PS30)
-	RegsIn.b.ah = 0x88;
-	Int386(0x15, &RegsIn, &RegsOut);
-
-	DbgPrint((DPRINT_MEMORY, "Int15h AH=88h\n"));
-	DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n", RegsOut.w.ax));
-	DbgPrint((DPRINT_MEMORY, "CF set = %s\n\n", (RegsOut.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
-
-	if (INT386_SUCCESS(RegsOut) && RegsOut.w.ax != 0)
-	{
-		MemorySize = RegsOut.w.ax;
-		return MemorySize;
-	}
-
-	// If we get here then Int15 Func 88h didn't work
-	// So try reading the CMOS
-	WRITE_PORT_UCHAR((PUCHAR)0x70, 0x31);
-	MemorySize = READ_PORT_UCHAR((PUCHAR)0x71);
-	MemorySize = (MemorySize & 0xFFFF);
-	MemorySize = (MemorySize << 8);
-
-	DbgPrint((DPRINT_MEMORY, "Int15h Failed\n"));
-	DbgPrint((DPRINT_MEMORY, "CMOS reports: 0x%x\n", MemorySize));
-
-	return MemorySize;
-}
-
-U32 GetConventionalMemorySize(VOID)
-{
-	REGS	Regs;
-
-	DbgPrint((DPRINT_MEMORY, "GetConventionalMemorySize()\n"));
-
-	// Int 12h
-	// BIOS - GET MEMORY SIZE
-	//
-	// Return:
-	// AX = kilobytes of contiguous memory starting at absolute address 00000h
-	//
-	// This call returns the contents of the word at 0040h:0013h;
-	// in PC and XT, this value is set from the switches on the motherboard
-	Regs.w.ax = 0;
-	Int386(0x12, &Regs, &Regs);
-
-	DbgPrint((DPRINT_MEMORY, "Int12h\n"));
-	DbgPrint((DPRINT_MEMORY, "AX = 0x%x\n\n", Regs.w.ax));
-
-	return (U32)Regs.w.ax;
-}
-
-U32 GetBiosMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize)
-{
-	REGS	Regs;
-	U32		MapCount;
-
-	DbgPrint((DPRINT_MEMORY, "GetBiosMemoryMap()\n"));
-
-	// Int 15h AX=E820h
-	// Newer BIOSes - GET SYSTEM MEMORY MAP
-	//
-	// AX = E820h
-	// EAX = 0000E820h
-	// EDX = 534D4150h ('SMAP')
-	// EBX = continuation value or 00000000h to start at beginning of map
-	// ECX = size of buffer for result, in bytes (should be >= 20 bytes)
-	// ES:DI -> buffer for result
-	// Return:
-	// CF clear if successful
-	// EAX = 534D4150h ('SMAP')
-	// ES:DI buffer filled
-	// EBX = next offset from which to copy or 00000000h if all done
-	// ECX = actual length returned in bytes
-	// CF set on error
-	// AH = error code (86h)
-	Regs.x.eax = 0x0000E820;
-	Regs.x.edx = 0x534D4150; // ('SMAP')
-	Regs.x.ebx = 0x00000000;
-	Regs.x.ecx = sizeof(BIOS_MEMORY_MAP);
-	Regs.w.es = BIOSCALLBUFSEGMENT;
-	Regs.w.di = BIOSCALLBUFOFFSET;
-	for (MapCount=0; MapCount<MaxMemoryMapSize; MapCount++)
-	{
-		Int386(0x15, &Regs, &Regs);
-
-		DbgPrint((DPRINT_MEMORY, "Memory Map Entry %d\n", MapCount));
-		DbgPrint((DPRINT_MEMORY, "Int15h AX=E820h\n"));
-		DbgPrint((DPRINT_MEMORY, "EAX = 0x%x\n", Regs.x.eax));
-		DbgPrint((DPRINT_MEMORY, "EBX = 0x%x\n", Regs.x.ebx));
-		DbgPrint((DPRINT_MEMORY, "ECX = 0x%x\n", Regs.x.ecx));
-		DbgPrint((DPRINT_MEMORY, "CF set = %s\n", (Regs.x.eflags & I386FLAG_CF) ? "TRUE" : "FALSE"));
-
-		// If the BIOS didn't return 'SMAP' in EAX then
-		// it doesn't support this call
-		if (Regs.x.eax != 0x534D4150)
-		{
-			break;
-		}
-
-		// Copy data to caller's buffer
-		RtlCopyMemory(&BiosMemoryMap[MapCount], (PVOID)BIOSCALLBUFFER, Regs.x.ecx);
-
-		DbgPrint((DPRINT_MEMORY, "BaseAddress: 0x%x%x\n", BiosMemoryMap[MapCount].BaseAddress));
-		DbgPrint((DPRINT_MEMORY, "Length: 0x%x%x\n", BiosMemoryMap[MapCount].Length));
-		DbgPrint((DPRINT_MEMORY, "Type: 0x%x\n", BiosMemoryMap[MapCount].Type));
-		DbgPrint((DPRINT_MEMORY, "Reserved: 0x%x\n", BiosMemoryMap[MapCount].Reserved));
-		DbgPrint((DPRINT_MEMORY, "\n"));
-
-		// If the continuation value is zero or the
-		// carry flag is set then this was
-		// the last entry so we're done
-		if (Regs.x.ebx == 0x00000000 || !INT386_SUCCESS(Regs))
-		{
-			MapCount++;
-			DbgPrint((DPRINT_MEMORY, "End Of System Memory Map!\n\n"));
-			break;
-		}
-
-		// Setup the registers for the next call
-		Regs.x.eax = 0x0000E820;
-		Regs.x.edx = 0x534D4150; // ('SMAP')
-		//Regs.x.ebx = 0x00000001; // Continuation value already set by the BIOS
-		Regs.x.ecx = sizeof(BIOS_MEMORY_MAP);
-		Regs.w.es = BIOSCALLBUFSEGMENT;
-		Regs.w.di = BIOSCALLBUFOFFSET;
-	}
-
-	return MapCount;
-}

freeldr/freeldr/include
machine.h added at 1.1
diff -N machine.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ machine.h	8 Nov 2004 22:02:48 -0000	1.1
@@ -0,0 +1,47 @@
+/* $Id: machine.h,v 1.1 2004/11/08 22:02:48 gvg Exp $
+ *
+ *  FreeLoader
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __MACHINE_H_
+#define __MACHINE_H_
+
+#ifndef __MEMORY_H
+#include "mm.h"
+#endif
+
+typedef struct tagMACHVTBL
+{
+  VOID (*ClearScreenAttr)(U8 Attr);
+  VOID (*PutChar)(int Ch);
+  VOID (*PutCharAttrAtLoc)(int Ch, U8 Attr, unsigned X, unsigned Y);
+
+  U32 (*GetMemoryMap)(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);
+} MACHVTBL, *PMACHVTBL;
+
+VOID MachInit(VOID);
+
+extern MACHVTBL MachVtbl;
+
+#define MachClearScreenAttr(Attr)		MachVtbl.ClearScreenAttr(Attr)
+#define MachPutChar(Ch)				MachVtbl.PutChar(Ch)
+#define MachPutCharAttrAtLoc(Ch, Attr, X, Y)	MachVtbl.PutCharAttrAtLoc((Ch), (Attr), (X), (Y))
+#define MachGetMemoryMap(MMap, Size)		MachVtbl.GetMemoryMap((MMap), (Size))
+
+#endif /* __MACHINE_H_ */
+
+/* EOF */

freeldr/freeldr/include
debug.h 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- debug.h	25 Apr 2003 19:32:50 -0000	1.7
+++ debug.h	8 Nov 2004 22:02:48 -0000	1.8
@@ -23,24 +23,26 @@
 
 #ifdef DEBUG
 
-	#define DPRINT_NONE		    0x00000000  // No debug print
+	#define DPRINT_NONE		0x00000000  // No debug print
 	#define DPRINT_WARNING		0x00000001  // OR this with DebugPrintMask to enable debugger messages and other misc stuff
-	#define DPRINT_MEMORY		  0x00000002  // OR this with DebugPrintMask to enable memory management messages
+	#define DPRINT_MEMORY		0x00000002  // OR this with DebugPrintMask to enable memory management messages
 	#define DPRINT_FILESYSTEM	0x00000004  // OR this with DebugPrintMask to enable file system messages
 	#define DPRINT_INIFILE		0x00000008  // OR this with DebugPrintMask to enable .ini file messages
-	#define DPRINT_UI			    0x00000010  // OR this with DebugPrintMask to enable user interface messages
-	#define DPRINT_DISK			  0x00000020  // OR this with DebugPrintMask to enable disk messages
-	#define DPRINT_CACHE		  0x00000040  // OR this with DebugPrintMask to enable cache messages
+	#define DPRINT_UI		0x00000010  // OR this with DebugPrintMask to enable user interface messages
+	#define DPRINT_DISK		0x00000020  // OR this with DebugPrintMask to enable disk messages
+	#define DPRINT_CACHE		0x00000040  // OR this with DebugPrintMask to enable cache messages
 	#define DPRINT_REGISTRY		0x00000080  // OR this with DebugPrintMask to enable registry messages
 	#define DPRINT_REACTOS		0x00000100  // OR this with DebugPrintMask to enable ReactOS messages
-	#define DPRINT_LINUX		  0x00000200  // OR this with DebugPrintMask to enable Linux messages
-  #define DPRINT_HWDETECT		0x00000400  // OR this with DebugPrintMask to enable hardware detection messages
+	#define DPRINT_LINUX		0x00000200  // OR this with DebugPrintMask to enable Linux messages
+	#define DPRINT_HWDETECT		0x00000400  // OR this with DebugPrintMask to enable hardware detection messages
 
 	VOID	DebugInit(VOID);
 	VOID	DebugPrint(U32 Mask, char *format, ...);
+	VOID	DebugPrint1(char *format, ...);
 	VOID	DebugDumpBuffer(U32 Mask, PVOID Buffer, U32 Length);
 
 	#define DbgPrint(_x_)					DebugPrint _x_ ;
+	#define DPRINT1						DebugPrint1
 	#define BugCheck(_x_)					{ DebugPrint(DPRINT_WARNING, "Fatal Error: %s:%d(%s)\n", __FILE__, __LINE__, __FUNCTION__); DebugPrint _x_ ; for (;;); }
 	#define DbgDumpBuffer(_x_, _y_, _z_)	DebugDumpBuffer(_x_, _y_, _z_)
 
@@ -73,7 +75,9 @@
 
 #else
 
+	#define DebugInit()
 	#define DbgPrint(_x_)
+	#define DPRINT1(_x_)
 	#define BugCheck(_x_)
 	#define DbgDumpBuffer(_x_, _y_, _z_)
 

freeldr/freeldr/include
mm.h 1.11 -> 1.12
diff -u -r1.11 -r1.12
--- mm.h	5 Jun 2003 20:06:48 -0000	1.11
+++ mm.h	8 Nov 2004 22:02:48 -0000	1.12
@@ -38,13 +38,6 @@
 
 U32		GetSystemMemorySize(VOID);								// Returns the amount of total memory in the system
 
-// These functions are implemented in mem.S
-U32		GetExtendedMemorySize(VOID);							// Returns extended memory size in KB
-U32		GetConventionalMemorySize(VOID);						// Returns conventional memory size in KB
-U32		GetBiosMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);	// Fills structure with BIOS memory map and returns memory map item count
-
-
-
 
 //BOOL	MmInitializeMemoryManager(U32 LowMemoryStart, U32 LowMemoryLength);
 BOOL	MmInitializeMemoryManager(VOID);

freeldr/freeldr/include
rtl.h 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- rtl.h	17 May 2004 20:25:01 -0000	1.8
+++ rtl.h	8 Nov 2004 22:02:48 -0000	1.9
@@ -72,7 +72,6 @@
 char *	convert_to_ascii(char *buf, int c, ...);
 char *	convert_i64_to_ascii(char *buf, int c, ...);
 
-void	putchar(int ch);		// Implemented in asmcode.S
 int		kbhit(void);			// Implemented in asmcode.S
 int		getch(void);			// Implemented in asmcode.S
 int		getyear(void);			// Implemented in asmcode.S

freeldr/freeldr/mm
meminit.c 1.13 -> 1.14
diff -u -r1.13 -r1.14
--- meminit.c	29 Aug 2003 18:54:17 -0000	1.13
+++ meminit.c	8 Nov 2004 22:02:48 -0000	1.14
@@ -24,6 +24,7 @@
 #include <rtl.h>
 #include <debug.h>
 #include <ui.h>
+#include <machine.h>
 
 
 #ifdef DEBUG
@@ -52,20 +53,16 @@
 BOOL MmInitializeMemoryManager(VOID)
 {
 	BIOS_MEMORY_MAP	BiosMemoryMap[32];
-	U32				BiosMemoryMapEntryCount;
-	U32				ExtendedMemorySize;
-	U32				ConventionalMemorySize;
+	U32		BiosMemoryMapEntryCount;
 #ifdef DEBUG
-	U32				Index;
+	U32		Index;
 #endif
 
 	DbgPrint((DPRINT_MEMORY, "Initializing Memory Manager.\n"));
 
 	RtlZeroMemory(BiosMemoryMap, sizeof(BIOS_MEMORY_MAP) * 32);
 
-	BiosMemoryMapEntryCount = GetBiosMemoryMap(BiosMemoryMap, 32);
-	ExtendedMemorySize = GetExtendedMemorySize();
-	ConventionalMemorySize = GetConventionalMemorySize();
+	BiosMemoryMapEntryCount = MachGetMemoryMap(BiosMemoryMap, sizeof(BiosMemoryMap) / sizeof(BIOS_MEMORY_MAP));
 
 #ifdef DEBUG
 	// Dump the system memory map
@@ -77,13 +74,6 @@
 			DbgPrint((DPRINT_MEMORY, "%x%x\t %x%x\t %s\n", BiosMemoryMap[Index].BaseAddress, BiosMemoryMap[Index].Length, MmGetSystemMemoryMapTypeString(BiosMemoryMap[Index].Type)));
 		}
 	}
-	else
-	{
-		DbgPrint((DPRINT_MEMORY, "GetBiosMemoryMap() not supported.\n"));
-	}
-
-	DbgPrint((DPRINT_MEMORY, "Extended memory size: %d KB\n", ExtendedMemorySize));
-	DbgPrint((DPRINT_MEMORY, "Conventional memory size: %d KB\n", ConventionalMemorySize));
 #endif
 
 	// If we got the system memory map then fixup invalid entries
@@ -92,19 +82,6 @@
 		MmFixupSystemMemoryMap(BiosMemoryMap, &BiosMemoryMapEntryCount);
 	}
 
-	// Since I don't feel like writing two sets of routines
-	// one to handle the BiosMemoryMap structure and another
-	// to handle just a flat extended memory size I'm going
-	// to create a 'fake' memory map entry out of the
-	// extended memory size if GetBiosMemoryMap() fails.
-	//if (BiosMemoryMapEntryCount == 0)
-	{
-		BiosMemoryMap[0].BaseAddress = 0x100000;		// Start at 1MB
-		BiosMemoryMap[0].Length = ExtendedMemorySize * 1024;
-		BiosMemoryMap[0].Type = MEMTYPE_USABLE;
-		BiosMemoryMapEntryCount = 1;
-	}
-
 	TotalPagesInLookupTable = MmGetAddressablePageCountIncludingHoles(BiosMemoryMap, BiosMemoryMapEntryCount);
 	PageLookupTableAddress = MmFindLocationForPageLookupTable(BiosMemoryMap, BiosMemoryMapEntryCount);
 	LastFreePageHint = TotalPagesInLookupTable;
@@ -159,7 +136,7 @@
 	EndAddressOfMemory = 0;
 	for (Index=0; Index<MapCount; Index++)
 	{
-		if (MaxStartAddressSoFar < BiosMemoryMap[Index].BaseAddress)
+		if (MaxStartAddressSoFar <= BiosMemoryMap[Index].BaseAddress)
 		{
 			MaxStartAddressSoFar = BiosMemoryMap[Index].BaseAddress;
 			EndAddressOfMemory = (MaxStartAddressSoFar + BiosMemoryMap[Index].Length);

freeldr/freeldr/reactos
reactos.c 1.38 -> 1.39
diff -u -r1.38 -r1.39
--- reactos.c	20 Sep 2004 18:02:36 -0000	1.38
+++ reactos.c	8 Nov 2004 22:02:48 -0000	1.39
@@ -28,6 +28,7 @@
 #include <ui.h>
 #include <multiboot.h>
 #include <mm.h>
+#include <machine.h>
 #include <inifile.h>
 
 #include "registry.h"
@@ -604,22 +605,35 @@
 	 * Setup multiboot information structure
 	 */
 	mb_info.flags = MB_INFO_FLAG_MEM_SIZE | MB_INFO_FLAG_BOOT_DEVICE | MB_INFO_FLAG_COMMAND_LINE | MB_INFO_FLAG_MODULES;
-	mb_info.mem_lower = GetConventionalMemorySize();
-	mb_info.mem_upper = GetExtendedMemorySize();
 	mb_info.boot_device = 0xffffffff;
 	mb_info.cmdline = (unsigned long)multiboot_kernel_cmdline;
 	mb_info.mods_count = 0;
 	mb_info.mods_addr = (unsigned long)multiboot_modules;
-	mb_info.mmap_length = (unsigned long)GetBiosMemoryMap((PBIOS_MEMORY_MAP)(PVOID)&multiboot_memory_map, 32) * sizeof(memory_map_t);
+	mb_info.mmap_length = (unsigned long)MachGetMemoryMap((PBIOS_MEMORY_MAP)(PVOID)&multiboot_memory_map, 32) * sizeof(memory_map_t);
 	if (mb_info.mmap_length)
 	{
 		mb_info.mmap_addr = (unsigned long)&multiboot_memory_map;
-		mb_info.flags |= MB_INFO_FLAG_MEMORY_MAP;
+		mb_info.flags |= MB_INFO_FLAG_MEM_SIZE | MB_INFO_FLAG_MEMORY_MAP;
 		multiboot_memory_map_descriptor_size = sizeof(memory_map_t); // GetBiosMemoryMap uses a fixed value of 24
 		DbgPrint((DPRINT_REACTOS, "memory map length: %d\n", mb_info.mmap_length));
 		DbgPrint((DPRINT_REACTOS, "dumping memory map:\n"));
 		for (i=0; i<(mb_info.mmap_length/sizeof(memory_map_t)); i++)
 		{
+			if (MEMTYPE_USABLE == multiboot_memory_map[i].type &&
+			    0 == multiboot_memory_map[i].base_addr_low)
+			{
+				mb_info.mem_lower = (multiboot_memory_map[i].base_addr_low + multiboot_memory_map[i].length_low) / 1024;
+				if (640 < mb_info.mem_lower)
+				{
+					mb_info.mem_lower = 640;
+				}
+			}
+			if (MEMTYPE_USABLE == multiboot_memory_map[i].type &&
+			    multiboot_memory_map[i].base_addr_low <= 1024 * 1024 &&
+			    1024 * 1024 <= multiboot_memory_map[i].base_addr_low + multiboot_memory_map[i].length_low)
+			{
+				mb_info.mem_upper = (multiboot_memory_map[i].base_addr_low + multiboot_memory_map[i].length_low) / 1024 - 1024;
+			}
 			DbgPrint((DPRINT_REACTOS, "start: %x\t size: %x\t type %d\n", 
 			          multiboot_memory_map[i].base_addr_low, 
 				  multiboot_memory_map[i].length_low,

freeldr/freeldr/reactos
setupldr.c 1.15 -> 1.16
diff -u -r1.15 -r1.16
--- setupldr.c	30 Aug 2004 10:53:00 -0000	1.15
+++ setupldr.c	8 Nov 2004 22:02:48 -0000	1.16
@@ -27,6 +27,7 @@
 #include <fs.h>
 #include <multiboot.h>
 #include <mm.h>
+#include <machine.h>
 #include <ui.h>
 #include <inffile.h>
 
@@ -238,40 +239,48 @@
   U32 Size;
   char *SourcePath;
   char *LoadOptions;
+  int i;
 
   HINF InfHandle;
   U32 ErrorLine;
   INFCONTEXT InfContext;
 
   /* Setup multiboot information structure */
-  mb_info.flags = MB_INFO_FLAG_MEM_SIZE | MB_INFO_FLAG_BOOT_DEVICE | MB_INFO_FLAG_COMMAND_LINE | MB_INFO_FLAG_MODULES;
-  mb_info.mem_lower = GetConventionalMemorySize();
-  mb_info.mem_upper = GetExtendedMemorySize();
+  mb_info.flags = MB_INFO_FLAG_BOOT_DEVICE | MB_INFO_FLAG_COMMAND_LINE | MB_INFO_FLAG_MODULES;
   mb_info.boot_device = 0xffffffff;
   mb_info.cmdline = (unsigned long)multiboot_kernel_cmdline;
   mb_info.mods_count = 0;
   mb_info.mods_addr = (unsigned long)multiboot_modules;
-  mb_info.mmap_length = (unsigned long)GetBiosMemoryMap((PBIOS_MEMORY_MAP)(PVOID)&multiboot_memory_map, 32) * sizeof(memory_map_t);
+  mb_info.mmap_length = (unsigned long)MachGetMemoryMap((PBIOS_MEMORY_MAP)(PVOID)&multiboot_memory_map, 32) * sizeof(memory_map_t);
   if (mb_info.mmap_length)
     {
       mb_info.mmap_addr = (unsigned long)&multiboot_memory_map;
-      mb_info.flags |= MB_INFO_FLAG_MEMORY_MAP;
+      mb_info.flags |= MB_INFO_FLAG_MEM_SIZE | MB_INFO_FLAG_MEMORY_MAP;
       multiboot_memory_map_descriptor_size = sizeof(memory_map_t); // GetBiosMemoryMap uses a fixed value of 24
+      for (i = 0; i < (mb_info.mmap_length / sizeof(memory_map_t)); i++)
+        {
+          if (MEMTYPE_USABLE == multiboot_memory_map[i].type &&
+              0 == multiboot_memory_map[i].base_addr_low)
+            {
+              mb_info.mem_lower = (multiboot_memory_map[i].base_addr_low + multiboot_memory_map[i].length_low) / 1024;
+              if (640 < mb_info.mem_lower)
+                {
+                  mb_info.mem_lower = 640;
+                }
+            }
+          if (MEMTYPE_USABLE == multiboot_memory_map[i].type &&
+              multiboot_memory_map[i].base_addr_low <= 1024 * 1024 &&
+              1024 * 1024 <= multiboot_memory_map[i].base_addr_low + multiboot_memory_map[i].length_low)
+            {
+              mb_info.mem_upper = (multiboot_memory_map[i].base_addr_low + multiboot_memory_map[i].length_low) / 1024 - 1024;
+            }
 #if 0
-      {
-	 int i;
-         printf("memory map length: %d\n", mb_info.mmap_length);
-         printf("dumping memory map:\n");
-         for (i=0; i<(mb_info.mmap_length / sizeof(memory_map_t)); i++)
-	 {
 	    printf("start: %x\t size: %x\t type %d\n", 
 		   multiboot_memory_map[i].base_addr_low, 
 		   multiboot_memory_map[i].length_low,
 		   multiboot_memory_map[i].type);
-	 }
-         getch();
-      }
 #endif
+        }
     }
 #if 0
   printf("low_mem = %d\n", mb_info.mem_lower);

freeldr/freeldr/rtl
print.c 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- print.c	30 Aug 2004 10:51:44 -0000	1.7
+++ print.c	8 Nov 2004 22:02:48 -0000	1.8
@@ -17,6 +17,8 @@
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <freeldr.h>
+#include <machine.h>
 #include <rtl.h>
 
 /*
@@ -27,7 +29,7 @@
 	int	i;
 
 	for (i = 0; i < strlen(str); i++)
-		putchar(str[i]);
+		MachPutChar(str[i]);
 }
 
 /*
@@ -46,7 +48,7 @@
 	{
 		if (c != '%')
 		{
-			putchar(c);
+			MachPutChar(c);
 		}
 		else
 		{
@@ -75,22 +77,22 @@
 
 				while (*ptr)
 				{
-					putchar(*(ptr++));
+					MachPutChar(*(ptr++));
 				}
 				break;
 
-			case 'c': putchar((*(dataptr++))&0xff); break;
+			case 'c': MachPutChar((*(dataptr++))&0xff); break;
 
 			case 's':
 				ptr = (char *)(*(dataptr++));
 
 				while ((c = *(ptr++)))
 				{
-					putchar(c);
+					MachPutChar(c);
 				}
 				break;
 			case '%':
-				putchar(c);
+				MachPutChar(c);
 				break;
 			default:
 				printf("\nprintf() invalid format specifier - %%%c\n", c);
CVSspam 0.2.8