63,7 → 63,7 |
/* function __CHK to detect it! The compiler place it whenever */ |
/* it calls a function to detect overflow */ |
|
DWORD _stkbase; |
DWORD _stkbase; |
DWORD _stktop; |
|
/* This is some extra stuff we need to compile with argument */ |
72,7 → 72,11 |
typedef char *charp; |
charp _argv[100]; |
|
extern void main(int argc, char *argv[]); |
#ifndef MAIN |
#define MAIN main |
#endif |
|
extern void MAIN(int argc,char *argv[]); |
extern void bios_save(void); |
extern void bios_restore(void); |
|
83,93 → 87,54 |
} |
|
|
struct multiboot_info *mbi_address(void) |
struct multiboot_info * mbi_address(void) |
{ |
/* This is declared in [wc32/gnu]\x0.[asm/s] */ |
extern struct multiboot_info *mbi; |
/* This is declared in [wc32/gnu]\x0.[asm/s] */ |
extern struct multiboot_info *mbi; |
|
return (mbi); |
return (mbi); |
} |
|
#ifndef __NOH4__ |
|
void __kernel_init__(struct multiboot_info *m); |
|
void _startup(void) |
{ |
struct multiboot_info *mbi = mbi_address(); |
register int i = 0; |
struct multiboot_info *mbi = mbi_address(); |
char *cmdline = (char *)(mbi->cmdline); |
|
bios_save(); |
|
/* Call init procedure using standard C convention */ |
/* Remember you cannot call any console I/O function */ |
/* if you do not call bios_save() */ |
|
#ifdef __DUMP_MEM__ |
message("X/MEM : %u\n", mbi->mem_upper); |
message("DOS/MEM : %u\n", mbi->mem_lower); |
message("x_bios Size : %u\n", sizeof(X_BIOSCALL)); |
message("mbi Size : %u\n", sizeof(struct multiboot_info)); |
message("Cmdline : %s\n", mbi->cmdline); |
/* message("Argc : %u",_argc); |
message("Argv[0] : %s / %s\n",_argv[0]); |
message("Argv[1] : %s\n",_argv[1]); |
message("Argv[2] : %s\n",_argv[2]); |
message("Argv[3] : %s\n",_argv[3]); */ |
#endif |
|
__kernel_init__(mbi); |
|
bios_restore(); |
} |
|
#else |
void _startup(void) |
{ |
register int i = 0; |
struct multiboot_info *mbi = mbi_address(); |
char *cmdline = (char *) (mbi->cmdline); |
|
if (!(mbi->flags & MB_INFO_MEMORY)) { |
cputs |
("X/Runtime library error!!! Unable to find memory information!\n"); |
l1_exit(-1); |
if (!(mbi->flags & MB_INFO_MEMORY)) { |
cputs("X/Runtime library error!!! Unable to find memory information!\n"); |
l1_exit(-1); |
} |
|
if (mbi->flags & MB_INFO_CMDLINE) { |
/* Build parameter list, up to 100 parms... */ |
while (cmdline[i] != 0) { |
_argv[_argc] = &(cmdline[i]); |
while (cmdline[i] != ' ' && cmdline[i] != 0) i++; |
if (cmdline[i] == ' ') { |
cmdline[i] = 0; i++; _argc++; |
} |
} |
|
if (mbi->flags & MB_INFO_CMDLINE) { |
/* Build parameter list, up to 100 parms... */ |
while (cmdline[i] != 0) { |
_argv[_argc] = &(cmdline[i]); |
while (cmdline[i] != ' ' && cmdline[i] != 0) |
i++; |
if (cmdline[i] == ' ') { |
cmdline[i] = 0; |
i++; |
_argc++; |
} |
} |
_argc++; |
} |
|
bios_save(); |
/* Call main procedure using standard C convention */ |
/* Remember you cannot call any console I/O function */ |
/* if you do not call bios_save() */ |
|
_argc++; |
} |
|
bios_save(); |
/* Call main procedure using standard C convention */ |
/* Remember you cannot call any console I/O function */ |
/* if you do not call bios_save() */ |
|
#ifdef __DUMP_MEM__ |
message("X/MEM : %u\n", mbi->mem_upper); |
message("DOS/MEM : %u\n", mbi->mem_lower); |
message("x_bios Size : %u\n", sizeof(X_BIOSCALL)); |
message("mbi Size : %u\n", sizeof(struct multiboot_info)); |
message("Cmdline : %s\n", mbi->cmdline); |
message("Argc : %u", _argc); |
message("Argv[0] : %s / %s\n", _argv[0]); |
message("Argv[1] : %s\n", _argv[1]); |
message("Argv[2] : %s\n", _argv[2]); |
message("Argv[3] : %s\n", _argv[3]); |
message("X/MEM : %u\n",mbi->mem_upper); |
message("DOS/MEM : %u\n",mbi->mem_lower); |
message("x_bios Size : %u\n",sizeof(X_BIOSCALL)); |
message("mbi Size : %u\n",sizeof(struct multiboot_info)); |
message("Cmdline : %s\n",mbi->cmdline); |
message("Argc : %u",_argc); |
message("Argv[0] : %s / %s\n",_argv[0]); |
message("Argv[1] : %s\n",_argv[1]); |
message("Argv[2] : %s\n",_argv[2]); |
message("Argv[3] : %s\n",_argv[3]); |
#endif |
main(_argc, _argv); |
bios_restore(); |
MAIN(_argc,_argv); |
bios_restore(); |
} |
|
#endif |