2014-10-09 09:38:11 +00:00
|
|
|
*Concepts you may want to Google beforehand: 32-bit protected mode, VGA, video
|
|
|
|
memory*
|
|
|
|
|
|
|
|
**Goal: Print on the screen when on 32-bit protected mode**
|
|
|
|
|
2014-10-09 09:40:08 +00:00
|
|
|
32-bit mode allows us to use 32 bit registers and memory addressing,
|
2014-10-09 09:41:23 +00:00
|
|
|
protected memory, virtual memory and other advantages, but we will lose
|
2014-10-09 09:38:11 +00:00
|
|
|
BIOS interrupts and we'll need to code the GDT (more on this later)
|
|
|
|
|
2014-10-09 09:41:23 +00:00
|
|
|
In this lesson we will write a new print string routine which works in
|
|
|
|
32-bit mode, where we don't have BIOS interrupts, by directly manipulating
|
2014-10-09 09:38:11 +00:00
|
|
|
the VGA video memory instead of calling `int 0x10`. The VGA memory starts
|
|
|
|
at address `0xb8000` and it has a text mode which is useful to avoid
|
|
|
|
manipulating direct pixels.
|
|
|
|
|
2014-10-09 09:41:23 +00:00
|
|
|
|
2014-10-09 09:38:11 +00:00
|
|
|
The formula for accessing a specific character on the 80x25 grid is:
|
|
|
|
|
|
|
|
`0xb8000 + 2 * (row * 80 + col)`
|
|
|
|
|
|
|
|
That is, every character uses 2 bytes (one for the ASCII, another for
|
|
|
|
color and such), and we see that the structure of the memory concatenates
|
|
|
|
rows.
|
|
|
|
|
|
|
|
Open `32bit-print.asm` to see the code. It will always print the string
|
|
|
|
on the top left of the screen, but soon we'll write higher level routines
|
|
|
|
to replace it.
|
|
|
|
|
|
|
|
Unfortunately we cannot yet call this routine from the bootloader, because
|
|
|
|
we still don't know how to write the GDT and enter protected mode. Once
|
|
|
|
you have understood the code, jump to the next lesson.
|