mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 01:42:30 +00:00
Support video and memory detection on the Xbox
svn path=/trunk/; revision=11599
This commit is contained in:
parent
cfde60c60d
commit
5882e75d37
|
@ -31,6 +31,10 @@ all:
|
|||
$(MAKE) -C install
|
||||
$(MAKE) -C fdebug
|
||||
|
||||
freeldr:
|
||||
$(MAKE) -C freeldr
|
||||
.PHONY : freeldr
|
||||
|
||||
clean:
|
||||
$(MAKE) -C bootsect clean
|
||||
$(MAKE) -C freeldr clean
|
||||
|
|
|
@ -200,7 +200,6 @@ ARCH_OBJS = fathelp.o \
|
|||
boot.o \
|
||||
linux.o \
|
||||
mb.o \
|
||||
i386mem.o \
|
||||
i386rtl.o \
|
||||
i386vid.o \
|
||||
drvmap.o \
|
||||
|
@ -210,6 +209,14 @@ ARCH_OBJS = fathelp.o \
|
|||
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 @@ BASE_OBJS = freeldr.o \
|
|||
debug.o \
|
||||
multiboot.o \
|
||||
version.o \
|
||||
cmdline.o
|
||||
cmdline.o \
|
||||
machine.o
|
||||
|
||||
FREELDR_OBJS= bootmgr.o \
|
||||
drivemap.o \
|
||||
|
|
50
freeldr/freeldr/arch/i386/archmach.c
Normal file
50
freeldr/freeldr/arch/i386/archmach.c
Normal file
|
@ -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 */
|
|
@ -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 @@ typedef struct _CM_COMPONENT_INFORMATION
|
|||
#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 ***************************************************************/
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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 @@ i386CommonExceptionHandler:
|
|||
|
||||
SAVE_CPU_REGS
|
||||
|
||||
call i386ClearScreenToBlue
|
||||
pushl $SCREEN_ATTR
|
||||
call _MachClearScreenAttr
|
||||
add $4,%esp
|
||||
|
||||
movl $i386ExceptionHandlerText,%esi
|
||||
call i386PrintText
|
||||
|
@ -438,12 +440,14 @@ i386CommonExceptionHandler:
|
|||
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 @@ i386PrintFrames:
|
|||
|
||||
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,48 +500,26 @@ i386PrintTextLoop:
|
|||
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 */
|
||||
/************************************************************************/
|
||||
|
@ -553,8 +539,7 @@ i386PrintHex3:
|
|||
andb $0x0f,%al
|
||||
movl $i386PrintHexTable,%ebx
|
||||
xlat /*$i386PrintHexTable*/
|
||||
call i386PrintTextCalcAddressOfNextChar
|
||||
stosb
|
||||
call i386PrintChar
|
||||
incl i386_ScreenPosX
|
||||
pop %eax
|
||||
|
||||
|
@ -579,10 +564,9 @@ i386PrintHexWord2:
|
|||
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 @@ i386PrintHexByte1:
|
|||
andb $0x0f,%al
|
||||
movl $i386PrintHexTable,%ebx
|
||||
xlat /*$i386PrintHexTable*/
|
||||
call i386PrintTextCalcAddressOfNextChar
|
||||
stosb
|
||||
call i386PrintChar
|
||||
incl i386_ScreenPosX
|
||||
pop %eax
|
||||
|
||||
|
|
39
freeldr/freeldr/arch/i386/machpc.c
Normal file
39
freeldr/freeldr/arch/i386/machpc.c
Normal file
|
@ -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 */
|
39
freeldr/freeldr/arch/i386/machpc.h
Normal file
39
freeldr/freeldr/arch/i386/machpc.h
Normal file
|
@ -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 */
|
37
freeldr/freeldr/arch/i386/machxbox.c
Normal file
37
freeldr/freeldr/arch/i386/machxbox.c
Normal file
|
@ -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;
|
||||
}
|
42
freeldr/freeldr/arch/i386/machxbox.h
Normal file
42
freeldr/freeldr/arch/i386/machxbox.h
Normal file
|
@ -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 */
|
98
freeldr/freeldr/arch/i386/pccons.c
Normal file
98
freeldr/freeldr/arch/i386/pccons.c
Normal file
|
@ -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 */
|
252
freeldr/freeldr/arch/i386/pcmem.c
Normal file
252
freeldr/freeldr/arch/i386/pcmem.c
Normal file
|
@ -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 */
|
286
freeldr/freeldr/arch/i386/xboxfont.c
Normal file
286
freeldr/freeldr/arch/i386/xboxfont.c
Normal file
|
@ -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 */
|
||||
|
144
freeldr/freeldr/arch/i386/xboxmem.c
Normal file
144
freeldr/freeldr/arch/i386/xboxmem.c
Normal file
|
@ -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 */
|
176
freeldr/freeldr/arch/i386/xboxvideo.c
Normal file
176
freeldr/freeldr/arch/i386/xboxvideo.c
Normal file
|
@ -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 */
|
|
@ -22,6 +22,7 @@
|
|||
#include <rtl.h>
|
||||
#include <comm.h>
|
||||
#include <portio.h>
|
||||
#include <machine.h>
|
||||
|
||||
#ifdef DEBUG
|
||||
|
||||
|
@ -75,6 +76,7 @@ VOID DebugInit(VOID)
|
|||
|
||||
VOID DebugPrintChar(UCHAR Character)
|
||||
{
|
||||
extern VOID XboxVideoPutChar(char c);
|
||||
if (Character == '\n')
|
||||
{
|
||||
DebugStartOfLine = TRUE;
|
||||
|
@ -94,7 +96,7 @@ VOID DebugPrintChar(UCHAR Character)
|
|||
}
|
||||
else
|
||||
{
|
||||
putchar(Character);
|
||||
MachPutChar(Character);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -230,26 +232,11 @@ VOID DebugPrintHeader(U32 Mask)
|
|||
}
|
||||
}
|
||||
|
||||
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 @@ VOID DebugPrint(U32 Mask, char *format, ...)
|
|||
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, ...)
|
|||
|
||||
}
|
||||
|
||||
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;
|
||||
|
|
|
@ -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 @@ VOID BootMain(char *CmdLine)
|
|||
{
|
||||
CmdLineParse(CmdLine);
|
||||
|
||||
EnableA20();
|
||||
MachInit();
|
||||
|
||||
#ifdef DEBUG
|
||||
DebugInit();
|
||||
#endif
|
||||
|
||||
DbgPrint((DPRINT_WARNING, "BootMain() called. BootDrive = 0x%x BootPartition = %d\n", BootDrive, BootPartition));
|
||||
|
||||
|
|
|
@ -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 @@ void MEMORY_WRITE_BREAKPOINT4(unsigned long addr);
|
|||
|
||||
#else
|
||||
|
||||
#define DebugInit()
|
||||
#define DbgPrint(_x_)
|
||||
#define DPRINT1(_x_)
|
||||
#define BugCheck(_x_)
|
||||
#define DbgDumpBuffer(_x_, _y_, _z_)
|
||||
|
||||
|
|
47
freeldr/freeldr/include/machine.h
Normal file
47
freeldr/freeldr/include/machine.h
Normal file
|
@ -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 */
|
|
@ -38,13 +38,6 @@ typedef struct
|
|||
|
||||
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);
|
||||
|
|
|
@ -72,7 +72,6 @@ int isxdigit(int c);
|
|||
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
|
||||
|
|
51
freeldr/freeldr/machine.c
Normal file
51
freeldr/freeldr/machine.c
Normal file
|
@ -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 */
|
|
@ -24,6 +24,7 @@
|
|||
#include <rtl.h>
|
||||
#include <debug.h>
|
||||
#include <ui.h>
|
||||
#include <machine.h>
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
|
@ -52,20 +53,16 @@ U32 LastFreePageHint = 0;
|
|||
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 @@ BOOL MmInitializeMemoryManager(VOID)
|
|||
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 @@ BOOL MmInitializeMemoryManager(VOID)
|
|||
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 @@ PVOID MmGetEndAddressOfAnyMemory(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MapCount)
|
|||
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);
|
||||
|
|
|
@ -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 @@ LoadAndBootReactOS(PUCHAR OperatingSystemName)
|
|||
* 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,
|
||||
|
|
|
@ -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 @@ VOID RunLoader(VOID)
|
|||
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);
|
||||
|
|
|
@ -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 @@ void print(char *str)
|
|||
int i;
|
||||
|
||||
for (i = 0; i < strlen(str); i++)
|
||||
putchar(str[i]);
|
||||
MachPutChar(str[i]);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -46,7 +48,7 @@ void printf(char *format, ... )
|
|||
{
|
||||
if (c != '%')
|
||||
{
|
||||
putchar(c);
|
||||
MachPutChar(c);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -75,22 +77,22 @@ void printf(char *format, ... )
|
|||
|
||||
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);
|
||||
|
|
Loading…
Reference in a new issue