1.2 KiB
Concepts you may want to Google beforehand: I/O ports
Goal: Learn how to use the VGA card data ports
We will use C to communicate with devices via I/O registers and ports.
Open drivers/ports.c
and examine the inline C assembler syntax. It has
some differences, like the order of the source and destination operands,
and the funny syntax to assign variables to operands.
When you understand the concepts, open kernel/kernel.c
for an example
of use.
In this example we will examine the I/O ports which map the screen cursor
position. Specifically, we will query port 0x3d4
with value 14
to request
the cursor position high byte, and the same port with 15
for the low byte.
When this port is queried, it saves the result in port 0x3d5
Don't miss the opportunity to use gdb
to inspect the value of C variables,
since we still can't print them on the screen. To do so, set a breakpoint
for a specific line, breakpoint kernel.c:21
and use the print
command
to examine variables. Aren't you glad now that we invested some time in
compiling the cross-compiled gdb? ;)
Finally, we will use the queried cursor position to write a character at that location.