mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 18:15:11 +00:00
Make transfer of control to kernel work on Xbox
svn path=/trunk/; revision=11787
This commit is contained in:
parent
6de4a5c738
commit
0b66faaabd
10 changed files with 42 additions and 125 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: machpc.c,v 1.5 2004/11/14 22:04:38 gvg Exp $
|
/* $Id: machpc.c,v 1.6 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -46,6 +46,7 @@ PcMachInit(VOID)
|
||||||
MachVtbl.VideoSetPaletteColor = PcVideoSetPaletteColor;
|
MachVtbl.VideoSetPaletteColor = PcVideoSetPaletteColor;
|
||||||
MachVtbl.VideoGetPaletteColor = PcVideoGetPaletteColor;
|
MachVtbl.VideoGetPaletteColor = PcVideoGetPaletteColor;
|
||||||
MachVtbl.VideoSync = PcVideoSync;
|
MachVtbl.VideoSync = PcVideoSync;
|
||||||
|
MachVtbl.VideoPrepareForReactOS = PcVideoPrepareForReactOS;
|
||||||
MachVtbl.GetMemoryMap = PcMemGetMemoryMap;
|
MachVtbl.GetMemoryMap = PcMemGetMemoryMap;
|
||||||
MachVtbl.DiskReadLogicalSectors = PcDiskReadLogicalSectors;
|
MachVtbl.DiskReadLogicalSectors = PcDiskReadLogicalSectors;
|
||||||
MachVtbl.DiskGetPartitionEntry = PcDiskGetPartitionEntry;
|
MachVtbl.DiskGetPartitionEntry = PcDiskGetPartitionEntry;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: machpc.h,v 1.5 2004/11/14 22:04:38 gvg Exp $
|
/* $Id: machpc.h,v 1.6 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -44,6 +44,7 @@ BOOL PcVideoIsPaletteFixed(VOID);
|
||||||
VOID PcVideoSetPaletteColor(U8 Color, U8 Red, U8 Green, U8 Blue);
|
VOID PcVideoSetPaletteColor(U8 Color, U8 Red, U8 Green, U8 Blue);
|
||||||
VOID PcVideoGetPaletteColor(U8 Color, U8* Red, U8* Green, U8* Blue);
|
VOID PcVideoGetPaletteColor(U8 Color, U8* Red, U8* Green, U8* Blue);
|
||||||
VOID PcVideoSync(VOID);
|
VOID PcVideoSync(VOID);
|
||||||
|
VOID PcVideoPrepareForReactOS(VOID);
|
||||||
|
|
||||||
U32 PcMemGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);
|
U32 PcMemGetMemoryMap(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: machxbox.c,v 1.5 2004/11/14 22:04:38 gvg Exp $
|
/* $Id: machxbox.c,v 1.6 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -44,6 +44,7 @@ XboxMachInit(VOID)
|
||||||
MachVtbl.VideoSetPaletteColor = XboxVideoSetPaletteColor;
|
MachVtbl.VideoSetPaletteColor = XboxVideoSetPaletteColor;
|
||||||
MachVtbl.VideoGetPaletteColor = XboxVideoGetPaletteColor;
|
MachVtbl.VideoGetPaletteColor = XboxVideoGetPaletteColor;
|
||||||
MachVtbl.VideoSync = XboxVideoSync;
|
MachVtbl.VideoSync = XboxVideoSync;
|
||||||
|
MachVtbl.VideoPrepareForReactOS = XboxVideoPrepareForReactOS;
|
||||||
MachVtbl.GetMemoryMap = XboxMemGetMemoryMap;
|
MachVtbl.GetMemoryMap = XboxMemGetMemoryMap;
|
||||||
MachVtbl.DiskReadLogicalSectors = XboxDiskReadLogicalSectors;
|
MachVtbl.DiskReadLogicalSectors = XboxDiskReadLogicalSectors;
|
||||||
MachVtbl.DiskGetPartitionEntry = XboxDiskGetPartitionEntry;
|
MachVtbl.DiskGetPartitionEntry = XboxDiskGetPartitionEntry;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: machxbox.h,v 1.5 2004/11/14 22:04:38 gvg Exp $
|
/* $Id: machxbox.h,v 1.6 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -45,6 +45,7 @@ BOOL XboxVideoIsPaletteFixed(VOID);
|
||||||
VOID XboxVideoSetPaletteColor(U8 Color, U8 Red, U8 Green, U8 Blue);
|
VOID XboxVideoSetPaletteColor(U8 Color, U8 Red, U8 Green, U8 Blue);
|
||||||
VOID XboxVideoGetPaletteColor(U8 Color, U8* Red, U8* Green, U8* Blue);
|
VOID XboxVideoGetPaletteColor(U8 Color, U8* Red, U8* Green, U8* Blue);
|
||||||
VOID XboxVideoSync(VOID);
|
VOID XboxVideoSync(VOID);
|
||||||
|
VOID XboxVideoPrepareForReactOS(VOID);
|
||||||
|
|
||||||
VOID XboxMemInit(VOID);
|
VOID XboxMemInit(VOID);
|
||||||
PVOID XboxMemReserveMemory(U32 MbToReserve);
|
PVOID XboxMemReserveMemory(U32 MbToReserve);
|
||||||
|
|
|
@ -25,117 +25,35 @@
|
||||||
#include <multiboot.h>
|
#include <multiboot.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Here we assume the kernel is loaded at 1mb
|
* Here we assume the kernel is loaded at 1mb
|
||||||
* This boots the kernel
|
* This boots the kernel
|
||||||
*/
|
*/
|
||||||
.code32
|
.code32
|
||||||
EXTERN(_boot_reactos)
|
EXTERN(_boot_reactos)
|
||||||
call switch_to_real
|
call _MachVideoPrepareForReactOS
|
||||||
.code16
|
|
||||||
|
|
||||||
/* Save cursor position */
|
|
||||||
movw $3,%ax //! Reset video mode
|
|
||||||
int $0x10
|
|
||||||
|
|
||||||
|
|
||||||
movb $10,%bl
|
|
||||||
movb $12,%ah
|
|
||||||
int $0x10
|
|
||||||
|
|
||||||
movw $0x1112,%ax // Use 8x8 font
|
|
||||||
xorb %bl,%bl
|
|
||||||
int $0x10
|
|
||||||
movw $0x1200,%ax // Use alternate print screen
|
|
||||||
movb $0x20,%bl
|
|
||||||
int $0x10
|
|
||||||
movb $1,%ah // Define cursor (scan lines 6 to 7)
|
|
||||||
movw $0x0607,%cx
|
|
||||||
int $0x10
|
|
||||||
|
|
||||||
movb $1,%ah
|
|
||||||
movw $0x600,%cx
|
|
||||||
int $0x10
|
|
||||||
|
|
||||||
movb $6,%ah // Scroll active page up
|
|
||||||
movb $0x32,%al // Clear 25 lines
|
|
||||||
movw $0,%cx // Upper left of scroll
|
|
||||||
movw $0x314F,%dx // Lower right of scroll
|
|
||||||
movb $(1*0x00+0),%bh // Use normal attribute on blanked line
|
|
||||||
int $0x10 // Video-IO
|
|
||||||
|
|
||||||
|
|
||||||
movw $0,%dx
|
|
||||||
movb $0,%dh
|
|
||||||
|
|
||||||
movb $2,%ah
|
|
||||||
movb $0,%bh
|
|
||||||
int $0x10
|
|
||||||
|
|
||||||
movw $0,%dx
|
|
||||||
movb $0,%dh
|
|
||||||
|
|
||||||
movb $2,%ah
|
|
||||||
movb $0,%bh
|
|
||||||
int $0x10
|
|
||||||
|
|
||||||
call _multi_boot
|
call _multi_boot
|
||||||
|
|
||||||
// Should never get here
|
// Should never get here
|
||||||
cli
|
cli
|
||||||
|
bootloop:
|
||||||
hlt
|
hlt
|
||||||
|
jmp bootloop
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* After you have setup the _mb_header and _mb_info structures
|
* After you have setup the _mb_header and _mb_info structures
|
||||||
* then call this routine to transfer control to the kernel.
|
* then call this routine to transfer control to the kernel.
|
||||||
* This routine must be entered in 16-bit mode.
|
|
||||||
*/
|
*/
|
||||||
.code16
|
|
||||||
EXTERN(_multi_boot)
|
EXTERN(_multi_boot)
|
||||||
|
|
||||||
cli
|
cli
|
||||||
|
|
||||||
/*
|
|
||||||
* Setup various variables
|
|
||||||
*/
|
|
||||||
movw %ds,%bx
|
|
||||||
movzwl %bx,%eax
|
|
||||||
shll $4,%eax
|
|
||||||
addl %eax,kernel_gdtbase
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Load the absolute address of the multiboot information structure
|
* Load the absolute address of the multiboot information structure
|
||||||
*/
|
*/
|
||||||
movl $_mb_info,%ebx
|
movl $_mb_info,%ebx
|
||||||
|
|
||||||
/*
|
|
||||||
* load gdt
|
|
||||||
*/
|
|
||||||
lgdt kernel_gdtptr
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Enter pmode and clear prefetch queue
|
|
||||||
*/
|
|
||||||
movl %cr0,%eax
|
|
||||||
orl $0x10001,%eax
|
|
||||||
movl %eax,%cr0
|
|
||||||
jmp next
|
|
||||||
next:
|
|
||||||
/*
|
|
||||||
* NOTE: This must be position independant (no references to
|
|
||||||
* non absolute variables)
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initalize segment registers
|
|
||||||
*/
|
|
||||||
movw $KERNEL_DS,%ax
|
|
||||||
movw %ax,%ds
|
|
||||||
movw %ax,%ss
|
|
||||||
movw %ax,%es
|
|
||||||
movw %ax,%fs
|
|
||||||
movw %ax,%gs
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initalize eflags
|
* Initalize eflags
|
||||||
*/
|
*/
|
||||||
|
@ -155,33 +73,6 @@ next:
|
||||||
pushl _mb_entry_addr
|
pushl _mb_entry_addr
|
||||||
lretl
|
lretl
|
||||||
|
|
||||||
//ljmpl $KERNEL_CS,$(0x0200000+0x1000)
|
|
||||||
//ljmpl $KERNEL_CS,(_mb_entry_addr)
|
|
||||||
//ljmpl $KERNEL_CS,$(KERNEL_BASE+0x1000)
|
|
||||||
|
|
||||||
|
|
||||||
.p2align 2 /* force 4-byte alignment */
|
|
||||||
kernel_gdt:
|
|
||||||
.word 0 // Zero descriptor
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
|
|
||||||
.word 0xffff // Kernel code descriptor
|
|
||||||
.word 0x0000 //
|
|
||||||
.word 0x9a00 // base 0h limit 4gb
|
|
||||||
.word 0x00cf
|
|
||||||
|
|
||||||
.word 0xffff // Kernel data descriptor
|
|
||||||
.word 0x0000 //
|
|
||||||
.word 0x9200 // base 0h limit 4gb
|
|
||||||
.word 0x00cf
|
|
||||||
|
|
||||||
kernel_gdtptr:
|
|
||||||
.word (3*8)-1 /* Limit */
|
|
||||||
kernel_gdtbase:
|
|
||||||
.long kernel_gdt /* Base Address */
|
|
||||||
|
|
||||||
|
|
||||||
EXTERN(_mb_header)
|
EXTERN(_mb_header)
|
||||||
_mb_magic:
|
_mb_magic:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: pcvideo.c,v 1.1 2004/11/14 22:04:38 gvg Exp $
|
/* $Id: pcvideo.c,v 1.2 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -1106,4 +1106,11 @@ PcVideoSync(VOID)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
PcVideoPrepareForReactOS(VOID)
|
||||||
|
{
|
||||||
|
PcVideoSetMode80x50_80x43();
|
||||||
|
PcVideoHideShowTextCursor(FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: xboxvideo.c,v 1.3 2004/11/14 22:04:38 gvg Exp $
|
/* $Id: xboxvideo.c,v 1.4 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -35,7 +35,7 @@ static U32 Delta;
|
||||||
#define CHAR_WIDTH 8
|
#define CHAR_WIDTH 8
|
||||||
#define CHAR_HEIGHT 16
|
#define CHAR_HEIGHT 16
|
||||||
|
|
||||||
#define TOP_BOTTOM_LINES 40
|
#define TOP_BOTTOM_LINES 0
|
||||||
|
|
||||||
#define FB_SIZE_MB 4
|
#define FB_SIZE_MB 4
|
||||||
|
|
||||||
|
@ -209,4 +209,10 @@ XboxVideoSync()
|
||||||
/* Not supported */
|
/* Not supported */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
XboxVideoPrepareForReactOS(VOID)
|
||||||
|
{
|
||||||
|
XboxVideoClearScreenColor(MAKE_COLOR(0, 0, 0), TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
/* EOF */
|
/* EOF */
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: machine.h,v 1.5 2004/11/14 22:04:39 gvg Exp $
|
/* $Id: machine.h,v 1.6 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -52,6 +52,7 @@ typedef struct tagMACHVTBL
|
||||||
VOID (*VideoSetPaletteColor)(U8 Color, U8 Red, U8 Green, U8 Blue);
|
VOID (*VideoSetPaletteColor)(U8 Color, U8 Red, U8 Green, U8 Blue);
|
||||||
VOID (*VideoGetPaletteColor)(U8 Color, U8* Red, U8* Green, U8* Blue);
|
VOID (*VideoGetPaletteColor)(U8 Color, U8* Red, U8* Green, U8* Blue);
|
||||||
VOID (*VideoSync)(VOID);
|
VOID (*VideoSync)(VOID);
|
||||||
|
VOID (*VideoPrepareForReactOS)(VOID);
|
||||||
|
|
||||||
U32 (*GetMemoryMap)(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);
|
U32 (*GetMemoryMap)(PBIOS_MEMORY_MAP BiosMemoryMap, U32 MaxMemoryMapSize);
|
||||||
|
|
||||||
|
@ -82,6 +83,7 @@ extern MACHVTBL MachVtbl;
|
||||||
#define MachVideoSetPaletteColor(Col, R, G, B) MachVtbl.VideoSetPaletteColor((Col), (R), (G), (B))
|
#define MachVideoSetPaletteColor(Col, R, G, B) MachVtbl.VideoSetPaletteColor((Col), (R), (G), (B))
|
||||||
#define MachVideoGetPaletteColor(Col, R, G, B) MachVtbl.VideoGetPaletteColor((Col), (R), (G), (B))
|
#define MachVideoGetPaletteColor(Col, R, G, B) MachVtbl.VideoGetPaletteColor((Col), (R), (G), (B))
|
||||||
#define MachVideoSync() MachVtbl.VideoSync()
|
#define MachVideoSync() MachVtbl.VideoSync()
|
||||||
|
#define MachVideoPrepareForReactOS() MachVtbl.VideoPrepareForReactOS()
|
||||||
#define MachGetMemoryMap(MMap, Size) MachVtbl.GetMemoryMap((MMap), (Size))
|
#define MachGetMemoryMap(MMap, Size) MachVtbl.GetMemoryMap((MMap), (Size))
|
||||||
#define MachDiskReadLogicalSectors(Drive, Start, Count, Buf) MachVtbl.DiskReadLogicalSectors((Drive), (Start), (Count), (Buf))
|
#define MachDiskReadLogicalSectors(Drive, Start, Count, Buf) MachVtbl.DiskReadLogicalSectors((Drive), (Start), (Count), (Buf))
|
||||||
#define MachDiskGetPartitionEntry(Drive, Part, Entry) MachVtbl.DiskGetPartitionEntry((Drive), (Part), (Entry))
|
#define MachDiskGetPartitionEntry(Drive, Part, Entry) MachVtbl.DiskGetPartitionEntry((Drive), (Part), (Entry))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: machine.c,v 1.5 2004/11/14 22:04:38 gvg Exp $
|
/* $Id: machine.c,v 1.6 2004/11/23 11:28:02 gvg Exp $
|
||||||
*
|
*
|
||||||
* FreeLoader
|
* FreeLoader
|
||||||
*
|
*
|
||||||
|
@ -35,6 +35,7 @@
|
||||||
#undef MachVideoSetPaletteColor
|
#undef MachVideoSetPaletteColor
|
||||||
#undef MachVideoGetPaletteColor
|
#undef MachVideoGetPaletteColor
|
||||||
#undef MachVideoSync
|
#undef MachVideoSync
|
||||||
|
#undef MachVideoPrepareForReactOS
|
||||||
#undef MachGetMemoryMap
|
#undef MachGetMemoryMap
|
||||||
#undef MachDiskReadLogicalSectors
|
#undef MachDiskReadLogicalSectors
|
||||||
#undef MachDiskGetPartitionEntry
|
#undef MachDiskGetPartitionEntry
|
||||||
|
@ -131,7 +132,13 @@ MachVideoGetPaletteColor(U8 Color, U8 *Red, U8 *Green, U8 *Blue)
|
||||||
VOID
|
VOID
|
||||||
MachVideoSync(VOID)
|
MachVideoSync(VOID)
|
||||||
{
|
{
|
||||||
return MachVtbl.VideoSync();
|
MachVtbl.VideoSync();
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
MachVideoPrepareForReactOS(VOID)
|
||||||
|
{
|
||||||
|
MachVtbl.VideoPrepareForReactOS();
|
||||||
}
|
}
|
||||||
|
|
||||||
U32
|
U32
|
||||||
|
|
|
@ -686,7 +686,7 @@ LoadAndBootReactOS(PUCHAR OperatingSystemName)
|
||||||
rosPartition = 0;
|
rosPartition = 0;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (!DiskGetPartitionEntry(BootDrive, ++i, &PartitionTableEntry))
|
if (!MachDiskGetPartitionEntry(BootDrive, ++i, &PartitionTableEntry))
|
||||||
{
|
{
|
||||||
BootPartition = 0;
|
BootPartition = 0;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue