From f74e3d6b20a7a7f14d6cf0fb6825261ffdd666d5 Mon Sep 17 00:00:00 2001 From: TomAwezome Date: Thu, 25 Aug 2022 07:15:24 -0400 Subject: [PATCH] Remove VBE from kernel headers. --- build/AUTO-VM.ISO | Bin 3530752 -> 3538944 bytes src/Kernel/KConfig.ZC | 20 ---- src/Kernel/KMain.ZC | 11 --- src/Kernel/KStart16.ZC | 144 +++++++++++++---------------- src/Kernel/KernelA.HH | 4 - src/Kernel/KernelB.HH | 6 -- src/Misc/Auto/AutoDistro.ZC | 2 +- src/Misc/Auto/AutoFullDistro0.ZC | 2 +- src/Misc/Auto/AutoFullDistro00.ZC | 2 +- src/Misc/Auto/AutoFullDistro000.ZC | 2 +- src/Misc/Auto/AutoInstall.ZC | 2 +- src/System/Utils/VideoRep.ZC | 4 +- zealbooter/zealbooter.c | 4 - 13 files changed, 73 insertions(+), 130 deletions(-) diff --git a/build/AUTO-VM.ISO b/build/AUTO-VM.ISO index 8740c8f107f5cecd031ff60441bb3b0a3ef122e1..191033690f27158c2522181c28eefc6a4c8361b2 100755 GIT binary patch delta 46841 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 = KConfigAddDev(c); c->home_dir = StrNew("::/Home"); - - VideoRep(FALSE); - resolution_num = I64Get("Enter list number of desired resolution, " - "or desired width. ($$PURPLE$$$$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, " "($$PURPLE$$$$FG$$ will use default.):", diff --git a/src/Kernel/KMain.ZC b/src/Kernel/KMain.ZC index 9004a629..26c9427f 100755 --- a/src/Kernel/KMain.ZC +++ b/src/Kernel/KMain.ZC @@ -64,17 +64,6 @@ U0 SysGlobalsInit() QueueInit(&dev.pci_head); 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.int_fault_code = IntFaultHandlersNew; } diff --git a/src/Kernel/KStart16.ZC b/src/Kernel/KStart16.ZC index ac1d8b8b..4bc5bc08 100755 --- a/src/Kernel/KStart16.ZC +++ b/src/Kernel/KStart16.ZC @@ -50,11 +50,6 @@ GDT_TR: DU8 MP_PROCESSORS_NUM * 16 DUP(0); GDT_TR_RING3: DU8 MP_PROCESSORS_NUM * 16 DUP(0); #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_WIDTH:: DU64 0; SYS_FRAMEBUFFER_HEIGHT:: DU64 0; @@ -68,12 +63,11 @@ SYS_SMBIOS_ENTRY:: DU64 0; TEMP_VBE_MODE: DU8 sizeof(CVBEMode) DUP(0); MAX_VBE_MODE: DU8 sizeof(CVBEModeShort) DUP(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:: @@ -91,10 +85,10 @@ GET_IP: POP BX MOV AX, CS ADD AX, BX PUSH AX - PUSH U16 @@04 + PUSH U16 @@05 RETF -@@04: STI +@@05: STI MOV AX, CS MOV DS, AX MOV U32 [SYS_RUN_LEVEL], RLF_16BIT @@ -107,15 +101,15 @@ GET_IP: POP BX //Get VBE implementation information 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 INT 0x10 POP ES CMP AX, 0x004F - JE @@05 + JE @@10 JMP $$ //Freeze system if VBE not supported -@@05: +@@10: /*Loop variables: DI <- Temporary storage for mode information @@ -125,16 +119,16 @@ GET_IP: POP BX SI <- Offset for video modes list */ //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 GS, CVBEInfo.video_modes+2[AX] 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] CMP AX, 0xFFFF //FFFF signifies the end of the list - JE @@08 + JE @@25 ADD SI, 2 //Increment pointer to read next U16 mode @@ -148,81 +142,75 @@ GET_IP: POP BX INT 0x10 POP ES 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 MOV AL, CVBEMode.bpp[DI] CMP AL, 32 - JNE @@06 + JNE @@15 //Check if the mode is actually supported MOV AX, CVBEMode.attributes[DI] AND AX, 0x91 //bit 0 = supported, bit 4 = graphics mode, bit 7 = linear framebuffer CMP AX, 0x91 - JNE @@06 + JNE @@15 //Only want memory model of packed pixel or direct color (RGB) -// MOV AX, CVBEMode.memory_model[DI] -// CMP AX, 4 -// JNE @@06 -// CMP AX, 6 -// JNE @@06 -//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 AX, CVBEMode.memory_model[DI] + CMP AX, 4 + JE @@18 + CMP AX, 6 + JNE @@15 - MOV [MAX_SCREEN_HEIGHT], BX - MOV [MAX_VBE_MODE], CX +//Copy information about this mode into AX and BX +@@18: MOV BX, CVBEMode.height[DI] +@@20: MOV AX, CVBEMode.width[DI] -@@07: MOV AX, CVBEMode.width[DI] - MOV CVBEModeShort.width[DX], AX -// MOV EAX, CVBEMode.max_pixel_clock[DI] -// MOV CVBEModeShort.max_pixel_clock[DX], EAX - - 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 +//Check if width and height match standard 1024x768 + CMP AX, 1024 + JNE @@15 + CMP BX, 768 + JNE @@15 //If we've made it here we have our mode - MOV [SYS_VBE_FINAL_MODE_NUM], CX - JMP @@06 + MOV [VBE_FINAL_MODE_NUM], CX + JMP @@15 -@@08: //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 +@@25: //End of loop -@@09: PUSH ES +@@30: PUSH ES PUSH DS POP ES //Get mode infomration for the mode we want - MOV DI, SYS_VBE_FINAL_MODE - MOV CX, [SYS_VBE_FINAL_MODE_NUM] + MOV DI, VBE_FINAL_MODE + MOV CX, [VBE_FINAL_MODE_NUM] MOV AX, 0x4F01 INT 0x10 POP ES CMP AX, 0x004F - JNE @@10 //if called failed + JNE @@35 //if called failed //Set the mode; call takes mode number in BX MOV AX, 0x4F02 MOV BX, CX INT 0x10 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 -@@10: +@@35: //Get E801 memory map. //Output: AX = Memory between 1MiB and 16MiB in KiB (max 0x3C00 == 15 MiB) @@ -231,10 +219,10 @@ GET_IP: POP BX XOR DX, DX MOV AX, 0xE801 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 BX, DX -@@12: MOV U16 [MEM_E801], AX +@@40: MOV U16 [MEM_E801], AX MOV U16 [MEM_E801+2], BX //Get E820 memory map. @@ -243,21 +231,21 @@ GET_IP: POP BX PUSH DS POP ES MOV DI, MEM_E820 -@@15: PUSH CX +@@45: PUSH CX MOV EAX, 0xE820 MOV ECX, sizeof(CMemE820) MOV EDX, 'PAMS' INT 0x15 - JC @@20 + JC @@50 CMP EAX, 'PAMS' - JNE @@20 + JNE @@50 TEST EBX, EBX - JZ @@20 + JZ @@50 ADD DI, sizeof(CMemE820) POP CX - LOOP @@15 + LOOP @@45 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. XOR EAX, EAX @@ -268,24 +256,24 @@ GET_IP: POP BX //Find max of E820 to set mapped space. MOV SI, MEM_E820 -@@25: MOV CL, CMemE820.type[SI] +@@55: MOV CL, CMemE820.type[SI] TEST CL, CL - JZ @@35 + JZ @@65 MOV EBX, CMemE820.base [SI] MOV ECX, CMemE820.base+4[SI] ADD EBX, CMemE820.len [SI] ADC ECX, CMemE820.len+4 [SI] SUB EBX, EAX SBB ECX, EDX - JC @@30 + JC @@60 MOV EAX, CMemE820.base [SI] MOV EDX, CMemE820.base+4[SI] ADD EAX, CMemE820.len [SI] ADC EDX, CMemE820.len+4 [SI] -@@30: ADD SI, sizeof(CMemE820) - JMP @@25 +@@60: ADD SI, sizeof(CMemE820) + JMP @@55 -@@35: MOV [MEM_PHYSICAL_SPACE], EAX +@@65: MOV [MEM_PHYSICAL_SPACE], EAX MOV [MEM_PHYSICAL_SPACE+4], EDX //Get PCI Bus Info @@ -294,11 +282,11 @@ GET_IP: POP BX MOV AX, 0xB101 INT 0x1A CMP DX, 'PC' - JNE @@40 + JNE @@70 MOV CH, 0 INC CX MOV U16 [SYS_PCI_BUSES], CX -@@40: +@@70: CLI //Enable A20 IN AL, 0x92 diff --git a/src/Kernel/KernelA.HH b/src/Kernel/KernelA.HH index 54b8151f..bc6946ca 100755 --- a/src/Kernel/KernelA.HH +++ b/src/Kernel/KernelA.HH @@ -564,10 +564,6 @@ class CKernel U16 sys_pci_buses; ;$$ = ($$ + 15) & -16; 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_width; U64 sys_framebuffer_height; diff --git a/src/Kernel/KernelB.HH b/src/Kernel/KernelB.HH index b43ee1bf..8b0a5f08 100755 --- a/src/Kernel/KernelB.HH +++ b/src/Kernel/KernelB.HH @@ -243,12 +243,6 @@ public _intern IC_FS CTask *Fs(); //FS segment register points to the current $L #help_file "::/Doc/TimeCycles" 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" public _extern SYS_FRAMEBUFFER_ADDR U8 *sys_framebuffer_addr; public _extern SYS_FRAMEBUFFER_WIDTH U64 sys_framebuffer_width; diff --git a/src/Misc/Auto/AutoDistro.ZC b/src/Misc/Auto/AutoDistro.ZC index 5c311e47..e2a2fbf5 100755 --- a/src/Misc/Auto/AutoDistro.ZC +++ b/src/Misc/Auto/AutoDistro.ZC @@ -2,7 +2,7 @@ // Custom DoDistro file that generates an AUTO.ISO. // 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) {//Does everything with current drive. diff --git a/src/Misc/Auto/AutoFullDistro0.ZC b/src/Misc/Auto/AutoFullDistro0.ZC index 08131775..e0514165 100755 --- a/src/Misc/Auto/AutoFullDistro0.ZC +++ b/src/Misc/Auto/AutoFullDistro0.ZC @@ -19,7 +19,7 @@ U0 Auto() } 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); Free(in_str); // in_str = MStrPrint("BootHDIns;OnceFlush;Once(\"#include \\\"/Misc/Auto/AutoFullDistro1\\\";;Auto;\");Reboot;"); diff --git a/src/Misc/Auto/AutoFullDistro00.ZC b/src/Misc/Auto/AutoFullDistro00.ZC index c657eb9a..fc237ca2 100755 --- a/src/Misc/Auto/AutoFullDistro00.ZC +++ b/src/Misc/Auto/AutoFullDistro00.ZC @@ -20,7 +20,7 @@ U0 Auto() // BootMHDIns('C'); // 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); In(in_str); // OnceDrive('C', in_str); diff --git a/src/Misc/Auto/AutoFullDistro000.ZC b/src/Misc/Auto/AutoFullDistro000.ZC index bef96d61..a0f6c2a0 100755 --- a/src/Misc/Auto/AutoFullDistro000.ZC +++ b/src/Misc/Auto/AutoFullDistro000.ZC @@ -20,7 +20,7 @@ U0 Auto() // BootMHDIns('C'); // 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); In(in_str); // OnceDrive('C', in_str); diff --git a/src/Misc/Auto/AutoInstall.ZC b/src/Misc/Auto/AutoInstall.ZC index 41f63ccf..57d8770f 100755 --- a/src/Misc/Auto/AutoInstall.ZC +++ b/src/Misc/Auto/AutoInstall.ZC @@ -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); if (atapi_port > -1) 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() diff --git a/src/System/Utils/VideoRep.ZC b/src/System/Utils/VideoRep.ZC index 94d417a9..b435c1e8 100755 --- a/src/System/Utils/VideoRep.ZC +++ b/src/System/Utils/VideoRep.ZC @@ -2,7 +2,7 @@ public I64 VideoRep(Bool full=TRUE) {//List available VBE modes as indicated by the BIOS. Show current mode; I64 i, mode_count = 0; CVBEModeShort *mode; - +/* if (full) { "\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++; } } - return mode_count; +*/ return mode_count; } diff --git a/zealbooter/zealbooter.c b/zealbooter/zealbooter.c index f8aab889..b7bd913e 100644 --- a/zealbooter/zealbooter.c +++ b/zealbooter/zealbooter.c @@ -126,10 +126,6 @@ struct CKernel { } __attribute__((packed)) sys_gdt_ptr; uint16_t sys_pci_buses; 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_width; uint64_t sys_framebuffer_height;