VESA Tutorial

This forums is for OS project announcements including project openings, new releases, update notices, test requests, and job openings (both paying and volunteer).
User avatar
xenos
Member
Member
Posts: 1117
Joined: Thu Aug 11, 2005 11:00 pm
Libera.chat IRC: xenos1984
Location: Tartu, Estonia
Contact:

Re: VESA Tutorial

Post by xenos »

~ wrote:By the way, your website at http://hwdb.mipt.cc/Main_Page is down. I can't see it, it just doesn't load.
Indeed. Unfortunately I don't manage the server, but I plan to move the contents to a different server.
Programmers' Hardware Database // GitHub user: xenos1984; OS project: NOS
User avatar
~
Member
Member
Posts: 1225
Joined: Tue Mar 06, 2007 11:17 am
Libera.chat IRC: ArcheFire

Re: VESA Tutorial

Post by ~ »

XenOS wrote:
~ wrote:By the way, your website at http://hwdb.mipt.cc/Main_Page is down. I can't see it, it just doesn't load.
Indeed. Unfortunately I don't manage the server, but I plan to move the contents to a different server.
You can host files on http://www.archive.org

>> I opened my account a year ago and I've uploaded around 50 Gigabytes (I want to upload my whole 5-Terabyte drive). <<

It's public domain, free; it gets automatically distributed as a torrent.

It can also can be seen from the web as a regular Geocities website, but with unlimited space (it seems that it's better and easier to upload files smaller than 2GB).

It's like Archive.org and other helpers like ArchiveTeam did it to compensate what happened to Geocities.
User avatar
max
Member
Member
Posts: 616
Joined: Mon Mar 05, 2012 11:23 am
Libera.chat IRC: maxdev
Location: Germany
Contact:

Re: VESA Tutorial

Post by max »

Nice work!
omarrx024 wrote:Thanks! Unfortunately, I don't know how to edit the Wiki (using tags, etc). It tooks me a while just to add my OS to the Projects list.
Is there a manual/guide?
I can transfer this to the Wiki and help you if you want me to/did not do so yet. Just tell me.
User avatar
BrightLight
Member
Member
Posts: 901
Joined: Sat Dec 27, 2014 9:11 am
Location: Maadi, Cairo, Egypt
Contact:

Re: VESA Tutorial

Post by BrightLight »

max wrote:Nice work!
Thanks!
max wrote:I can transfer this to the Wiki and help you if you want me to/did not do so yet. Just tell me.
No, thanks. I will probably add a link to this topic on the Wiki or learn how to write a Wiki page when I'm less lazy. :mrgreen:
You know your OS is advanced when you stop using the Intel programming guide as a reference.
User avatar
jeaye
Posts: 8
Joined: Tue May 24, 2016 6:48 pm
Libera.chat IRC: jeaye
Location: San Francisco
Contact:

Re: VESA Tutorial

Post by jeaye »

It's been a few months since this was posted; max offered to copy it over to the wiki, but you said you'd get around to it. Is it safe to assume now that it's not going to happen, and we can take max up on his offer?

This is one of the more helpful VESA write ups and it'd be great to have it on the wiki.
User avatar
BrightLight
Member
Member
Posts: 901
Joined: Sat Dec 27, 2014 9:11 am
Location: Maadi, Cairo, Egypt
Contact:

Re: VESA Tutorial

Post by BrightLight »

I've put it on the Wiki here.
You know your OS is advanced when you stop using the Intel programming guide as a reference.
User avatar
Octacone
Member
Member
Posts: 1138
Joined: Fri Aug 07, 2015 6:13 am

Re: VESA Tutorial

Post by Octacone »

omarrx024 wrote:VESA Tutorial
Hello. Today, I'm posting specifically to teach people who want graphics all about VESA. That means that in less than 30 minutes, you'll be able to have a high-color graphics world in your OS!
Less than 30 minutes. :D
OS: Basic OS
About: 32 Bit Monolithic Kernel Written in C++ and Assembly, Custom FAT 32 Bootloader
cheapskate01
Member
Member
Posts: 58
Joined: Sat Aug 01, 2015 9:05 pm

Re: VESA Tutorial

Post by cheapskate01 »

Thanks for the tutorial Omar!

Is there any tutorial on the UEFI GOP you talked about?
"That I'm in forum signatures is just a sign the invasion of sortie is nearing completion. Soon you'll all have to become me to defeat me." ~ Sortie
User avatar
BrightLight
Member
Member
Posts: 901
Joined: Sat Dec 27, 2014 9:11 am
Location: Maadi, Cairo, Egypt
Contact:

Re: VESA Tutorial

Post by BrightLight »

cheapskate01 wrote:Thanks for the tutorial Omar!

Is there any tutorial on the UEFI GOP you talked about?
I don't know much about UEFI in general, TBH. You can Google around for UEFI docs; they shouldn't be hard to find.
BTW, this tutorial is on the Wiki.
You know your OS is advanced when you stop using the Intel programming guide as a reference.
User avatar
Coconut9
Member
Member
Posts: 51
Joined: Sat May 20, 2017 1:25 am
Location: PCI bus: 3, slot: 9, function: 5

Re: VESA Tutorial

Post by Coconut9 »

How can I get/use the real screen resolution?
Also does Windows use VBE for graphics? (If not, what?)
How people react when a new update of your OS is coming:
Linux user: Cool, more free stuff!
Mac user: Ooh I have to pay!
Windows user: Ah not again!
User avatar
zaval
Member
Member
Posts: 647
Joined: Fri Feb 17, 2017 4:01 pm
Location: Ukraine, Bachmut
Contact:

Re: VESA Tutorial

Post by zaval »

ARISTOS wrote:How can I get/use the real screen resolution?
Also does Windows use VBE for graphics? (If not, what?)
Search for EDID. Monitor reports loads of things with it about itself. Its documentation is available on the VESA site. I wish I could elaborate, but tbh, I am a noobass here yet.) On my target, there is two LCD controllers driving HDMI port. GPU isn't involved here at all. You somehow get access to EDID through I2C, and then knowing what the monitor supports, set aforementioned LCD controllers appropriately. Not only resolution, - timings, framebuffer format, DMA/interrupts etc. It's a long way to learn for me yet.)
ANT - NT-like OS for x64 and arm64.
efify - UEFI for a couple of boards (mips and arm). suspended due to lost of all the target park boards (russians destroyed our town).
User avatar
BrightLight
Member
Member
Posts: 901
Joined: Sat Dec 27, 2014 9:11 am
Location: Maadi, Cairo, Egypt
Contact:

Re: VESA Tutorial

Post by BrightLight »

ARISTOS wrote:How can I get/use the real screen resolution?
If you mean the display's optimal screen resolution, you should use EDID. The EDID is a block of information that the monitor reports about itself, and it includes the optimal screen resolution.
ARISTOS wrote:Also does Windows use VBE for graphics? (If not, what?)
Windows uses VBE when there is no graphics driver available, otherwise it uses the graphics driver which would also normally allow things like acceleration, hardware blitting and other features that wouldn't be possible using VBE.
zaval wrote:You somehow get access to EDID through I2C, and then knowing what the monitor supports, set aforementioned LCD controllers appropriately. Not only resolution, - timings, framebuffer format, DMA/interrupts etc.
Unless you're writing a graphics driver, you don't need to know that many details on how to communicate with the monitor itself; VESA offers function 0x4F15 which allows you to request the EDID block. The BIOS does all the dirty work for you in this function. Look at the VBE EDID specification. The defined structures tell you all you need to know.

In case the EDID function fails or the information in it isn't valid, you can either use a default mode (like 640x480 or 800x600) or ask the user for their preferred mode from the list of supported modes.
You know your OS is advanced when you stop using the Intel programming guide as a reference.
User avatar
Coconut9
Member
Member
Posts: 51
Joined: Sat May 20, 2017 1:25 am
Location: PCI bus: 3, slot: 9, function: 5

Re: VESA Tutorial

Post by Coconut9 »

omarrx024 wrote: Unless you're writing a graphics driver, you don't need to know that many details on how to communicate with the monitor itself; VESA offers function 0x4F15 which allows you to request the EDID block. The BIOS does all the dirty work for you in this function.

In case the EDID function fails or the information in it isn't valid, you can either use a default mode (like 640x480 or 800x600) or ask the user for their preferred mode from the list of supported modes.
EDID works I got the resolution of the screen, Do one of the non standard mode os VBE will contain it?
Also I would like to use multiple screens with different resolutions and have different memory address to access them. Am I asking too much?
How people react when a new update of your OS is coming:
Linux user: Cool, more free stuff!
Mac user: Ooh I have to pay!
Windows user: Ah not again!
User avatar
BrightLight
Member
Member
Posts: 901
Joined: Sat Dec 27, 2014 9:11 am
Location: Maadi, Cairo, Egypt
Contact:

Re: VESA Tutorial

Post by BrightLight »

ARISTOS wrote:EDID works I got the resolution of the screen, Do one of the non standard mode os VBE will contain it?
Yes. You should scan the supported modes to find the screen resolution you want. On top of that, you should never rely on "standard modes," because most BIOSes support them for backward compatibility only, and the specification says they really don't have to support them if they don't want to. So you should always scan modes and not hardcode numbers.
ARISTOS wrote:Also I would like to use multiple screens with different resolutions and have different memory address to access them. Am I asking too much?
VBE does not offer multiple monitor support. You'll need a real graphics driver to achieve that, and each graphics device will implement it in a different way.
You know your OS is advanced when you stop using the Intel programming guide as a reference.
Korona
Member
Member
Posts: 999
Joined: Thu May 17, 2007 1:27 pm
Contact:

Re: VESA Tutorial

Post by Korona »

zaval wrote:
ARISTOS wrote:How can I get/use the real screen resolution?
Also does Windows use VBE for graphics? (If not, what?)
Search for EDID. Monitor reports loads of things with it about itself. Its documentation is available on the VESA site. I wish I could elaborate, but tbh, I am a noobass here yet.) On my target, there is two LCD controllers driving HDMI port. GPU isn't involved here at all. You somehow get access to EDID through I2C, and then knowing what the monitor supports, set aforementioned LCD controllers appropriately. Not only resolution, - timings, framebuffer format, DMA/interrupts etc. It's a long way to learn for me yet.)
I really dislike posting to necro'd threads but I got a question here. Are the display controllers for those ARM SoCs you're working with (the ones driving the HDMI port, not the number crunching GPU chips) typically documented? If I know the timings, is the documentation sufficient to set them? Is there documentation on how to drive the I2C bus? The I2C (as well as DDC and EDID) protocol is fairly simple (a few lines of C code); the question is if access to the pins itself is documented.
managarm: Microkernel-based OS capable of running a Wayland desktop (Discord: https://discord.gg/7WB6Ur3). My OS-dev projects: [mlibc: Portable C library for managarm, qword, Linux, Sigma, ...] [LAI: AML interpreter] [xbstrap: Build system for OS distributions].
Post Reply