Skip to content

Latest commit

 

History

History
 
 

15-video-ports

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

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.