Remove VBE from kernel headers.

This commit is contained in:
TomAwezome 2022-08-25 07:15:24 -04:00
parent 2bd8e2ab0b
commit f74e3d6b20
13 changed files with 73 additions and 130 deletions

Binary file not shown.

View file

@ -26,7 +26,6 @@ class CKConfig
CDoc *add_dev; CDoc *add_dev;
U8 *debug_distro_file, *debug_distro_start; U8 *debug_distro_file, *debug_distro_start;
U8 *home_dir; U8 *home_dir;
U16 screen_width, screen_height;
Bool opts[CONFIG_OPTIONS_NUM]; Bool opts[CONFIG_OPTIONS_NUM];
U8 mem_init_val, heap_init_val, var_init_val, boot_drive_let, mount_ide_auto_hd_let, mount_ide_auto_cd_let; U8 mem_init_val, heap_init_val, var_init_val, boot_drive_let, mount_ide_auto_hd_let, mount_ide_auto_cd_let;
}; };
@ -168,30 +167,11 @@ U0 KConfigOptions(CKConfig *c)
CKConfig *KConfigNew() CKConfig *KConfigNew()
{ {
I64 resolution_num;
CKConfig *c = CAlloc(sizeof(CKConfig)); CKConfig *c = CAlloc(sizeof(CKConfig));
c->add_dev = KConfigAddDev(c); c->add_dev = KConfigAddDev(c);
c->home_dir = StrNew("::/Home"); c->home_dir = StrNew("::/Home");
VideoRep(FALSE);
resolution_num = I64Get("Enter list number of desired resolution, "
"or desired width. ($$PURPLE$$<ENTER>$$FG$$ for auto maximum): ",, 1);
if (resolution_num <= VBE_MODES_NUM)
{
// c->screen_width = sys_vbe_modes[resolution_num - 1].width;
// c->screen_height = sys_vbe_modes[resolution_num - 1].height;
c->screen_width = 1024;
c->screen_height = 768;
}
else
{
// c->screen_width = resolution_num;
c->screen_width = 1024;
c->screen_height = I64Get("Enter Height: ",, 0);
c->screen_height = 768;
}
c->disk_cache_size_exp = StrGet("\nDisk Cache Size in Bytes, gets rounded-up funny, " c->disk_cache_size_exp = StrGet("\nDisk Cache Size in Bytes, gets rounded-up funny, "
"($$PURPLE$$<ENTER>$$FG$$ will use default.):", "($$PURPLE$$<ENTER>$$FG$$ will use default.):",
"Scale2Mem(0x80000,0x8000000)"); "Scale2Mem(0x80000,0x8000000)");

View file

@ -64,17 +64,6 @@ U0 SysGlobalsInit()
QueueInit(&dev.pci_head); QueueInit(&dev.pci_head);
dev.mem64_ptr = mem_mapped_space; dev.mem64_ptr = mem_mapped_space;
if (sys_boot_src.u8[0] != BOOT_SRC_RAM)
{//framebuffer pointer is already linear
// Seg2Linear(&sys_vbe_info.video_modes);
// Seg2Linear(&sys_vbe_info.oem);
// Seg2Linear(&sys_vbe_info.vendor);
// Seg2Linear(&sys_vbe_info.product_name);
// Seg2Linear(&sys_vbe_info.product_revision);
/// Seg2Linear(SYS_FONT_PTR);
// sys_vbe_info.software_revision = Bcd2Binary(sys_vbe_info.software_revision);
}
debug.fun_seg_cache = CAlloc(FUN_SEG_CACHE_SIZE * sizeof(CFunSegCache)); debug.fun_seg_cache = CAlloc(FUN_SEG_CACHE_SIZE * sizeof(CFunSegCache));
debug.int_fault_code = IntFaultHandlersNew; debug.int_fault_code = IntFaultHandlersNew;
} }

View file

@ -50,11 +50,6 @@ GDT_TR: DU8 MP_PROCESSORS_NUM * 16 DUP(0);
GDT_TR_RING3: DU8 MP_PROCESSORS_NUM * 16 DUP(0); GDT_TR_RING3: DU8 MP_PROCESSORS_NUM * 16 DUP(0);
#assert $$ - SYS_GDT == sizeof(CGDT) #assert $$ - SYS_GDT == sizeof(CGDT)
SYS_VBE_INFO:: DU8 sizeof(CVBEInfo) DUP(0);
SYS_VBE_MODES:: DU8 sizeof(CVBEModeShort) * VBE_MODES_NUM DUP(0);
SYS_VBE_FINAL_MODE:: DU8 sizeof(CVBEMode) DUP(0);
SYS_VBE_FINAL_MODE_NUM::DU16 0; //mode number of final mode set
SYS_FRAMEBUFFER_ADDR:: DU64 0; SYS_FRAMEBUFFER_ADDR:: DU64 0;
SYS_FRAMEBUFFER_WIDTH:: DU64 0; SYS_FRAMEBUFFER_WIDTH:: DU64 0;
SYS_FRAMEBUFFER_HEIGHT:: DU64 0; SYS_FRAMEBUFFER_HEIGHT:: DU64 0;
@ -68,12 +63,11 @@ SYS_SMBIOS_ENTRY:: DU64 0;
TEMP_VBE_MODE: DU8 sizeof(CVBEMode) DUP(0); TEMP_VBE_MODE: DU8 sizeof(CVBEMode) DUP(0);
MAX_VBE_MODE: DU8 sizeof(CVBEModeShort) DUP(0); MAX_VBE_MODE: DU8 sizeof(CVBEModeShort) DUP(0);
MAX_SCREEN_HEIGHT: DU16 0; MAX_SCREEN_HEIGHT: DU16 0;
VBE_INFO: DU8 sizeof(CVBEInfo) DUP(0);
VBE_MODES: DU8 sizeof(CVBEModeShort) * VBE_MODES_NUM DUP(0);
VBE_FINAL_MODE: DU8 sizeof(CVBEMode) DUP(0);
VBE_FINAL_MODE_NUM: DU16 0; //mode number of final mode set
#exe
{
StreamPrint("SCREEN_WIDTH: DU16 %d;"
"SCREEN_HEIGHT: DU16 %d;", kernel_config->screen_width, kernel_config->screen_height);
};
//************************************ //************************************
CORE0_16BIT_INIT:: CORE0_16BIT_INIT::
@ -91,10 +85,10 @@ GET_IP: POP BX
MOV AX, CS MOV AX, CS
ADD AX, BX ADD AX, BX
PUSH AX PUSH AX
PUSH U16 @@04 PUSH U16 @@05
RETF RETF
@@04: STI @@05: STI
MOV AX, CS MOV AX, CS
MOV DS, AX MOV DS, AX
MOV U32 [SYS_RUN_LEVEL], RLF_16BIT MOV U32 [SYS_RUN_LEVEL], RLF_16BIT
@ -107,15 +101,15 @@ GET_IP: POP BX
//Get VBE implementation information //Get VBE implementation information
MOV AX, 0x4F00 MOV AX, 0x4F00
MOV DI, SYS_VBE_INFO MOV DI, VBE_INFO
MOV CVBEInfo.signature[DI], 'VBE2' //set to 'VBE2' to use VBE 2.0 functionality MOV CVBEInfo.signature[DI], 'VBE2' //set to 'VBE2' to use VBE 2.0 functionality
INT 0x10 INT 0x10
POP ES POP ES
CMP AX, 0x004F CMP AX, 0x004F
JE @@05 JE @@10
JMP $$ //Freeze system if VBE not supported JMP $$ //Freeze system if VBE not supported
@@05: @@10:
/*Loop variables: /*Loop variables:
DI <- Temporary storage for mode information DI <- Temporary storage for mode information
@ -125,16 +119,16 @@ GET_IP: POP BX
SI <- Offset for video modes list SI <- Offset for video modes list
*/ */
//Obtain segment:offset of list of potential video modes //Obtain segment:offset of list of potential video modes
MOV AX, SYS_VBE_INFO MOV AX, VBE_INFO
MOV SI, CVBEInfo.video_modes[AX] MOV SI, CVBEInfo.video_modes[AX]
MOV GS, CVBEInfo.video_modes+2[AX] MOV GS, CVBEInfo.video_modes+2[AX]
MOV DI, TEMP_VBE_MODE MOV DI, TEMP_VBE_MODE
MOV DX, SYS_VBE_MODES MOV DX, VBE_MODES
@@06: //Loop through all the mode numbers @@15: //Loop through all the mode numbers
MOV AX, GS:[SI] MOV AX, GS:[SI]
CMP AX, 0xFFFF //FFFF signifies the end of the list CMP AX, 0xFFFF //FFFF signifies the end of the list
JE @@08 JE @@25
ADD SI, 2 //Increment pointer to read next U16 mode ADD SI, 2 //Increment pointer to read next U16 mode
@ -148,81 +142,75 @@ GET_IP: POP BX
INT 0x10 INT 0x10
POP ES POP ES
CMP AX, 0x004F CMP AX, 0x004F
JNE @@06 //if call to get mode information failed JNE @@15 //if call to get mode information failed
//filter everything but 32-bit color //filter everything but 32-bit color
MOV AL, CVBEMode.bpp[DI] MOV AL, CVBEMode.bpp[DI]
CMP AL, 32 CMP AL, 32
JNE @@06 JNE @@15
//Check if the mode is actually supported //Check if the mode is actually supported
MOV AX, CVBEMode.attributes[DI] MOV AX, CVBEMode.attributes[DI]
AND AX, 0x91 //bit 0 = supported, bit 4 = graphics mode, bit 7 = linear framebuffer AND AX, 0x91 //bit 0 = supported, bit 4 = graphics mode, bit 7 = linear framebuffer
CMP AX, 0x91 CMP AX, 0x91
JNE @@06 JNE @@15
//Only want memory model of packed pixel or direct color (RGB) //Only want memory model of packed pixel or direct color (RGB)
// MOV AX, CVBEMode.memory_model[DI] MOV AX, CVBEMode.memory_model[DI]
// CMP AX, 4 CMP AX, 4
// JNE @@06 JE @@18
// CMP AX, 6 CMP AX, 6
// JNE @@06 JNE @@15
//Copy information about this mode into an element of the mode array
MOV BX, CVBEMode.height[DI]
MOV CVBEModeShort.height[DX], BX
CMP BX, [MAX_SCREEN_HEIGHT]
JL @@07
MOV [MAX_SCREEN_HEIGHT], BX //Copy information about this mode into AX and BX
MOV [MAX_VBE_MODE], CX @@18: MOV BX, CVBEMode.height[DI]
@@20: MOV AX, CVBEMode.width[DI]
@@07: MOV AX, CVBEMode.width[DI] //Check if width and height match standard 1024x768
MOV CVBEModeShort.width[DX], AX CMP AX, 1024
// MOV EAX, CVBEMode.max_pixel_clock[DI] JNE @@15
// MOV CVBEModeShort.max_pixel_clock[DX], EAX CMP BX, 768
JNE @@15
MOV CVBEModeShort.mode_num[DX], CX
ADD DX, sizeof(CVBEModeShort) //next array element
//Check if width and height match
CMP AX, [SCREEN_WIDTH]
JNE @@06
CMP BX, [SCREEN_HEIGHT]
JNE @@06
//If we've made it here we have our mode //If we've made it here we have our mode
MOV [SYS_VBE_FINAL_MODE_NUM], CX MOV [VBE_FINAL_MODE_NUM], CX
JMP @@06 JMP @@15
@@08: //End of loop @@25: //End of loop
//If there isn't a valid mode set by user through kernel config, set the mode with the biggest height.
MOV AX, [SYS_VBE_FINAL_MODE_NUM]
CMP AX, 0
JNE @@09
MOV CX, [MAX_VBE_MODE]
MOV [SYS_VBE_FINAL_MODE_NUM], CX
@@09: PUSH ES @@30: PUSH ES
PUSH DS PUSH DS
POP ES POP ES
//Get mode infomration for the mode we want //Get mode infomration for the mode we want
MOV DI, SYS_VBE_FINAL_MODE MOV DI, VBE_FINAL_MODE
MOV CX, [SYS_VBE_FINAL_MODE_NUM] MOV CX, [VBE_FINAL_MODE_NUM]
MOV AX, 0x4F01 MOV AX, 0x4F01
INT 0x10 INT 0x10
POP ES POP ES
CMP AX, 0x004F CMP AX, 0x004F
JNE @@10 //if called failed JNE @@35 //if called failed
//Set the mode; call takes mode number in BX //Set the mode; call takes mode number in BX
MOV AX, 0x4F02 MOV AX, 0x4F02
MOV BX, CX MOV BX, CX
INT 0x10 INT 0x10
CMP AX, 0x004F CMP AX, 0x004F
JNE @@10 JNE @@35
//Give mode information to kernel
MOV EAX, CVBEMode.framebuffer[DI]
MOV U32 [SYS_FRAMEBUFFER_ADDR], EAX
MOV AX, CVBEMode.height[DI]
MOV U16 [SYS_FRAMEBUFFER_HEIGHT], AX
MOV AX, CVBEMode.width[DI]
MOV U16 [SYS_FRAMEBUFFER_WIDTH], AX
MOV AX, CVBEMode.pitch[DI]
MOV U16 [SYS_FRAMEBUFFER_PITCH], AX
MOV AX, CVBEMode.bpp[DI]
MOV U16 [SYS_FRAMEBUFFER_BPP], AX
BTS U32 [SYS_RUN_LEVEL], RLf_VESA BTS U32 [SYS_RUN_LEVEL], RLf_VESA
@@10: @@35:
//Get E801 memory map. //Get E801 memory map.
//Output: AX = Memory between 1MiB and 16MiB in KiB (max 0x3C00 == 15 MiB) //Output: AX = Memory between 1MiB and 16MiB in KiB (max 0x3C00 == 15 MiB)
@ -231,10 +219,10 @@ GET_IP: POP BX
XOR DX, DX XOR DX, DX
MOV AX, 0xE801 MOV AX, 0xE801
INT 0x15 INT 0x15
JCXZ @@12 //if CX and DX are zero, use AX and BX instead. JCXZ @@40 //if CX and DX are zero, use AX and BX instead.
MOV AX, CX MOV AX, CX
MOV BX, DX MOV BX, DX
@@12: MOV U16 [MEM_E801], AX @@40: MOV U16 [MEM_E801], AX
MOV U16 [MEM_E801+2], BX MOV U16 [MEM_E801+2], BX
//Get E820 memory map. //Get E820 memory map.
@ -243,21 +231,21 @@ GET_IP: POP BX
PUSH DS PUSH DS
POP ES POP ES
MOV DI, MEM_E820 MOV DI, MEM_E820
@@15: PUSH CX @@45: PUSH CX
MOV EAX, 0xE820 MOV EAX, 0xE820
MOV ECX, sizeof(CMemE820) MOV ECX, sizeof(CMemE820)
MOV EDX, 'PAMS' MOV EDX, 'PAMS'
INT 0x15 INT 0x15
JC @@20 JC @@50
CMP EAX, 'PAMS' CMP EAX, 'PAMS'
JNE @@20 JNE @@50
TEST EBX, EBX TEST EBX, EBX
JZ @@20 JZ @@50
ADD DI, sizeof(CMemE820) ADD DI, sizeof(CMemE820)
POP CX POP CX
LOOP @@15 LOOP @@45
SUB SP, 2 SUB SP, 2
@@20: ADD SP, 2 //if called failed we want to nullify the PUSHed CX value. @@50: ADD SP, 2 //if called failed we want to nullify the PUSHed CX value.
//Find how much space to map, start with E801 limit. //Find how much space to map, start with E801 limit.
XOR EAX, EAX XOR EAX, EAX
@ -268,24 +256,24 @@ GET_IP: POP BX
//Find max of E820 to set mapped space. //Find max of E820 to set mapped space.
MOV SI, MEM_E820 MOV SI, MEM_E820
@@25: MOV CL, CMemE820.type[SI] @@55: MOV CL, CMemE820.type[SI]
TEST CL, CL TEST CL, CL
JZ @@35 JZ @@65
MOV EBX, CMemE820.base [SI] MOV EBX, CMemE820.base [SI]
MOV ECX, CMemE820.base+4[SI] MOV ECX, CMemE820.base+4[SI]
ADD EBX, CMemE820.len [SI] ADD EBX, CMemE820.len [SI]
ADC ECX, CMemE820.len+4 [SI] ADC ECX, CMemE820.len+4 [SI]
SUB EBX, EAX SUB EBX, EAX
SBB ECX, EDX SBB ECX, EDX
JC @@30 JC @@60
MOV EAX, CMemE820.base [SI] MOV EAX, CMemE820.base [SI]
MOV EDX, CMemE820.base+4[SI] MOV EDX, CMemE820.base+4[SI]
ADD EAX, CMemE820.len [SI] ADD EAX, CMemE820.len [SI]
ADC EDX, CMemE820.len+4 [SI] ADC EDX, CMemE820.len+4 [SI]
@@30: ADD SI, sizeof(CMemE820) @@60: ADD SI, sizeof(CMemE820)
JMP @@25 JMP @@55
@@35: MOV [MEM_PHYSICAL_SPACE], EAX @@65: MOV [MEM_PHYSICAL_SPACE], EAX
MOV [MEM_PHYSICAL_SPACE+4], EDX MOV [MEM_PHYSICAL_SPACE+4], EDX
//Get PCI Bus Info //Get PCI Bus Info
@ -294,11 +282,11 @@ GET_IP: POP BX
MOV AX, 0xB101 MOV AX, 0xB101
INT 0x1A INT 0x1A
CMP DX, 'PC' CMP DX, 'PC'
JNE @@40 JNE @@70
MOV CH, 0 MOV CH, 0
INC CX INC CX
MOV U16 [SYS_PCI_BUSES], CX MOV U16 [SYS_PCI_BUSES], CX
@@40: @@70:
CLI CLI
//Enable A20 //Enable A20
IN AL, 0x92 IN AL, 0x92

View file

@ -564,10 +564,6 @@ class CKernel
U16 sys_pci_buses; U16 sys_pci_buses;
;$$ = ($$ + 15) & -16; ;$$ = ($$ + 15) & -16;
CGDT sys_gdt; CGDT sys_gdt;
CVBEInfo sys_vbe_info;
CVBEModeShort sys_vbe_modes[VBE_MODES_NUM];
CVBEMode sys_vbe_mode;
U16 sys_vbe_mode_num;
U64 sys_framebuffer_addr; U64 sys_framebuffer_addr;
U64 sys_framebuffer_width; U64 sys_framebuffer_width;
U64 sys_framebuffer_height; U64 sys_framebuffer_height;

View file

@ -243,12 +243,6 @@ public _intern IC_FS CTask *Fs(); //FS segment register points to the current $L
#help_file "::/Doc/TimeCycles" #help_file "::/Doc/TimeCycles"
public _intern IC_RDTSC I64 TSCGet(); //Get time stamp counter. public _intern IC_RDTSC I64 TSCGet(); //Get time stamp counter.
#help_index "Graphics/VBE"
public _extern SYS_VBE_INFO CVBEInfo sys_vbe_info;
public _extern SYS_VBE_FINAL_MODE CVBEMode sys_vbe_mode;
_extern SYS_VBE_FINAL_MODE_NUM U16 sys_vbe_mode_num;
_extern SYS_VBE_MODES CVBEModeShort sys_vbe_modes[VBE_MODES_NUM];
#help_index "Graphics/Framebuffer" #help_index "Graphics/Framebuffer"
public _extern SYS_FRAMEBUFFER_ADDR U8 *sys_framebuffer_addr; public _extern SYS_FRAMEBUFFER_ADDR U8 *sys_framebuffer_addr;
public _extern SYS_FRAMEBUFFER_WIDTH U64 sys_framebuffer_width; public _extern SYS_FRAMEBUFFER_WIDTH U64 sys_framebuffer_width;

View file

@ -2,7 +2,7 @@
// Custom DoDistro file that generates an AUTO.ISO. // Custom DoDistro file that generates an AUTO.ISO.
// Used by host OS to create a full Distro ISO synced with GitHub repo. // Used by host OS to create a full Distro ISO synced with GitHub repo.
#define STD_DISTRO_DVD_CONFIG "TB\nScale2Mem(2048,0x40000)\nT\n\n1024\n768\n\n\n" #define STD_DISTRO_DVD_CONFIG "TB\nScale2Mem(2048,0x40000)\nT\n\n\n\n"
U0 MakeMyISO(U8 *_out_iso_filename) U0 MakeMyISO(U8 *_out_iso_filename)
{//Does everything with current drive. {//Does everything with current drive.

View file

@ -19,7 +19,7 @@ U0 Auto()
} }
BootMHDIns('C'); BootMHDIns('C');
in_str = MStrPrint("Sleep(700);In(\"CC\\n%d\\n\\n1024\\n768\\n\\n\\n\");", ata_port); in_str = MStrPrint("Sleep(700);In(\"CC\\n%d\\n\\n\\n\\n\");", ata_port);
OnceDrive('C', in_str); OnceDrive('C', in_str);
Free(in_str); Free(in_str);
// in_str = MStrPrint("BootHDIns;OnceFlush;Once(\"#include \\\"/Misc/Auto/AutoFullDistro1\\\";;Auto;\");Reboot;"); // in_str = MStrPrint("BootHDIns;OnceFlush;Once(\"#include \\\"/Misc/Auto/AutoFullDistro1\\\";;Auto;\");Reboot;");

View file

@ -20,7 +20,7 @@ U0 Auto()
// BootMHDIns('C'); // BootMHDIns('C');
// in_str = MStrPrint("Sleep(700);In(\"CC\\n%d\\n\\n1024\\n768\\n\\n\\n\");", ata_port); // in_str = MStrPrint("Sleep(700);In(\"CC\\n%d\\n\\n1024\\n768\\n\\n\\n\");", ata_port);
in_str = MStrPrint("CC\n%d\n\n1024\n768\n\n\n", ata_port); in_str = MStrPrint("CC\n%d\n\n\n\n", ata_port);
Sleep(700); Sleep(700);
In(in_str); In(in_str);
// OnceDrive('C', in_str); // OnceDrive('C', in_str);

View file

@ -20,7 +20,7 @@ U0 Auto()
// BootMHDIns('C'); // BootMHDIns('C');
// in_str = MStrPrint("Sleep(700);In(\"CC\\n%d\\n\\n1024\\n768\\n\\n\\n\");", ata_port); // in_str = MStrPrint("Sleep(700);In(\"CC\\n%d\\n\\n1024\\n768\\n\\n\\n\");", ata_port);
in_str = MStrPrint("CC\n%d\n\n1024\n768\n\n\n", ata_port); in_str = MStrPrint("CC\n%d\n\n\n\n", ata_port);
Sleep(700); Sleep(700);
In(in_str); In(in_str);
// OnceDrive('C', in_str); // OnceDrive('C', in_str);

View file

@ -41,7 +41,7 @@ U0 VMInstallDrive(CTask *task, U8 drv_let, I64 ata_port, I64 atapi_port)
XTalkWait(task, "C\n%d\n", ata_port); XTalkWait(task, "C\n%d\n", ata_port);
if (atapi_port > -1) if (atapi_port > -1)
XTalkWait(task, "T%d\n", atapi_port); XTalkWait(task, "T%d\n", atapi_port);
XTalkWait(task, "\n1024\n768\n\n\n"); //Exit Drives, set Screen Resolution, skip Disk Cache and Options XTalkWait(task, "\n\n\n"); //Exit Drives, set Screen Resolution, skip Disk Cache and Options
} }
U0 VMInstallWiz() U0 VMInstallWiz()

View file

@ -2,7 +2,7 @@ public I64 VideoRep(Bool full=TRUE)
{//List available VBE modes as indicated by the BIOS. Show current mode; {//List available VBE modes as indicated by the BIOS. Show current mode;
I64 i, mode_count = 0; I64 i, mode_count = 0;
CVBEModeShort *mode; CVBEModeShort *mode;
/*
if (full) if (full)
{ {
"\nVBE Version %X.%X\n\n", sys_vbe_info.version.u8[1], sys_vbe_info.version.u8[0]; "\nVBE Version %X.%X\n\n", sys_vbe_info.version.u8[1], sys_vbe_info.version.u8[0];
@ -61,6 +61,6 @@ public I64 VideoRep(Bool full=TRUE)
mode_count++; mode_count++;
} }
} }
return mode_count; */ return mode_count;
} }

View file

@ -126,10 +126,6 @@ struct CKernel {
} __attribute__((packed)) sys_gdt_ptr; } __attribute__((packed)) sys_gdt_ptr;
uint16_t sys_pci_buses; uint16_t sys_pci_buses;
struct CGDT sys_gdt __attribute__((aligned(16))); struct CGDT sys_gdt __attribute__((aligned(16)));
struct CVBEInfo sys_vbe_info;
struct CVBEModeShort sys_vbe_modes[VBE_MODES_NUM];
struct CVBEMode sys_vbe_mode;
uint16_t sys_vbe_mode_num;
uint64_t sys_framebuffer_addr; uint64_t sys_framebuffer_addr;
uint64_t sys_framebuffer_width; uint64_t sys_framebuffer_width;
uint64_t sys_framebuffer_height; uint64_t sys_framebuffer_height;