#ifdef CONFIG_FB #define MULTIBOOT_LOADER_MAGIC 0x2BADB002 #define MBINFO_BIT_CMDLINE 2 #define MBINFO_OFFSET_CMDLINE 16 # copy real mode VESA initialization code mov $vesa_init, %esi mov $VESA_INIT_SEGMENT << 4, %edi mov $e_vesa_init - vesa_init, %ecx rep movsb # check for GRUB command line mov grub_eax, %eax cmp $MULTIBOOT_LOADER_MAGIC, %eax jne no_cmdline mov grub_ebx, %ebx mov (%ebx), %eax bt $MBINFO_BIT_CMDLINE, %eax jnc no_cmdline # skip the kernel path in command line mov MBINFO_OFFSET_CMDLINE(%ebx), %esi skip_loop: lodsb cmp $0, %al je no_cmdline cmp $' ', %al je skip_loop_done jmp skip_loop skip_loop_done: mov (%esi), %al cmp $0, %al je no_cmdline # copy at most 23 characters from command line mov $VESA_INIT_SEGMENT << 4, %edi add $default_mode - vesa_init, %edi mov $23, %ecx cmd_loop: lodsb stosb cmp $0, %al je cmd_loop_done loop cmd_loop cmd_loop_done: # zero termination xor %eax, %eax stosb no_cmdline: # jump to the real mode mov $VESA_INIT_SEGMENT << 4, %edi jmpl *%edi vesa_meeting_point: # returned back to protected mode mov %esi, KA2PA(vesa_ph_addr) mov %di, KA2PA(vesa_height) shr $16, %edi mov %di, KA2PA(vesa_width) mov %bx, KA2PA(vesa_scanline) shr $16, %ebx mov %bx, KA2PA(vesa_bpp) #endif