char *HEAP = _end; char *heap_end = _end; /* Default end of heap = no heap */
/* * Copy the header into the boot parameter block. Since this * screws up the old-style command line protocol, adjust by * filling in the new-style command line pointer instead.
*/ staticvoid copy_boot_params(void)
{ struct old_cmdline {
u16 cl_magic;
u16 cl_offset;
}; conststruct old_cmdline * const oldcmd = absolute_pointer(OLD_CL_ADDRESS);
if (!boot_params.hdr.cmd_line_ptr && oldcmd->cl_magic == OLD_CL_MAGIC) { /* Old-style command line protocol */
u16 cmdline_seg;
/* * Figure out if the command line falls in the region * of memory that an old kernel would have copied up * to 0x90000...
*/ if (oldcmd->cl_offset < boot_params.hdr.setup_move_size)
cmdline_seg = ds(); else
cmdline_seg = 0x9000;
/* * Query the keyboard lock status as given by the BIOS, and * set the keyboard repeat rate to maximum. Unclear why the latter * is done here; this might be possible to kill off as stale code.
*/ staticvoid keyboard_init(void)
{ struct biosregs ireg, oreg;
initregs(&ireg);
ireg.ah = 0x02; /* Get keyboard status */
intcall(0x16, &ireg, &oreg);
boot_params.kbd_status = oreg.al;
if (boot_params.hdr.loadflags & CAN_USE_HEAP) {
stack_end = (char *) (current_stack_pointer - STACK_SIZE);
heap_end = (char *) ((size_t)boot_params.hdr.heap_end_ptr + 0x200); if (heap_end > stack_end)
heap_end = stack_end;
} else { /* Boot protocol 2.00 only, no heap available */
puts("WARNING: Ancient bootloader, some functionality may be limited!\n");
}
}
void main(void)
{
init_default_io_ops();
/* First, copy the boot header into the "zeropage" */
copy_boot_params();
/* Initialize the early-boot console */
console_init(); if (cmdline_find_option_bool("debug"))
puts("early console in setup code\n");
/* End of heap check */
init_heap();
/* Make sure we have all the proper CPU support */ if (validate_cpu()) {
puts("Unable to boot - please use a kernel appropriate for your CPU.\n");
die();
}
/* Tell the BIOS what CPU mode we intend to run in */
set_bios_mode();
/* Detect memory layout */
detect_memory();
/* Set keyboard repeat rate (why?) and query the lock flags */
keyboard_init();
/* Query Intel SpeedStep (IST) information */
query_ist();
/* Query APM information */ #ifdefined(CONFIG_APM) || defined(CONFIG_APM_MODULE)
query_apm_bios(); #endif
/* Query EDD information */ #ifdefined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE)
query_edd(); #endif
/* Set the video mode */
set_video();
/* Do the last things and invoke protected mode */
go_to_protected_mode();
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.