Reading up on
GRUB would be a good place to start. You would create a specially formatted executable with a multiboot header in the beginning of your binary which would request that GRUB set the resolution and color depth for you and provide the frame buffer address (and other related video information).
When you boot, GRUB would get control first and collect all the necessary information for you (and some other important information such as a memory map) and then load your code and jump to it. GRUB will put the CPU in
protected mode and would set up a small stack and temporary
GDT for you.
You need to know: GRUB will try to set the resolution based on "best effort". When you read the documentation you need to pay very close attention to the word "may", as GRUB may give up if you are asking for something it cannot figure how to comply with your request. GRUB might give you a different resolution that is "close" to the request or may not service the request at all if it cannot figure out what you are asking it to do. The good news is that GRUB will report back to you what it was able to accomplish for your request.