boot.c
Код:
#include "boot.h"
#define START_ADDRES 0x100000#define STACK_OFFSET 0x10000#define IMAGE_SIZE 0x600#define BSS_SIZE 0x200
void main();
#if defined(_M_IX86)
#define MULTIBOOT_HEADER_MAGIC 0x1BADB002#define MULTIBOOT_HEADER_FLAGS 0x00010003#define MULTIBOOT_BOOTLOADER_MAGIC 0x2BADB002
#pragma comment(linker, "/merge:.rdata=.data")
BOOTINFO *bootinfo;
static void __declspec(naked) start()
{
__asm
{
mov esp,100000h+STACK_OFFSET
mov bootinfo,ebx
push 0
popfd
};
main();
__asm
{
cli
hlt
};
}
static const unsigned mbheader[]=
{
MULTIBOOT_HEADER_MAGIC,
MULTIBOOT_HEADER_FLAGS,
-(MULTIBOOT_HEADER_MAGIC + MULTIBOOT_HEADER_FLAGS),
(unsigned)mbheader,
START_ADDRES,
START_ADDRES+IMAGE_SIZE,
START_ADDRES+IMAGE_SIZE+BSS_SIZE,
(unsigned)start
};
#else#error Not defined multiboot entry for this arhitecture#endif //_M_IX86
boot.h
Код:
#if defined(_M_IX86)
typedef struct _BOOTMODULE
{
unsigned mod_start;
unsigned mod_end;
char* string;
unsigned reserved;
} BOOTMODULE;
typedef struct _BOOTINFO
{
unsigned flags;
unsigned mem_lower;
unsigned mem_upper;
unsigned boot_device;
char* cmdline;
unsigned mods_count;
BOOTMODULE* mods_addr;
} BOOTINFO;
extern BOOTINFO *bootinfo;
#define get_cmd_line() (bootinfo->cmdline)
#else
#error Not defined multiboot entry for this arhitecture#endif //_M_IX86
только не забудь переопределить вот эти константы
Код:
#define START_ADDRES 0x100000#define STACK_OFFSET 0x10000#define IMAGE_SIZE 0x600#define BSS_SIZE 0x200