#register #graphics #access #hardware #data #structures

no-std vga

Support for vga specific functions, data structures, and registers

13 releases

0.2.9 Jun 12, 2023
0.2.8 Mar 1, 2023
0.2.7 Jun 3, 2021
0.2.6 Feb 15, 2021
0.2.1 Mar 26, 2020

#67 in No standard library

Download history 1/week @ 2024-01-15 13/week @ 2024-02-12 54/week @ 2024-02-19 55/week @ 2024-02-26 65/week @ 2024-03-04 82/week @ 2024-03-11 92/week @ 2024-03-18 35/week @ 2024-03-25 82/week @ 2024-04-01

323 downloads per month
Used in 4 crates

MIT/Apache

155KB
2.5K SLoC

Build Status Docs.rs Badge

vga

This crate provides vga specific functions, data structures, and access to various registers.

Memory addresses 0xA0000 -> 0xBFFFF must be readable and writeable this crate to work properly.

Note: This crate is currently experimental and subject to change since it's in active development.

Text Mode

use vga::colors::{Color16, TextModeColor};
use vga::writers::{ScreenCharacter, TextWriter, Text80x25};

let text_mode = Text80x25::new();
let color = TextModeColor::new(Color16::Yellow, Color16::Black);
let screen_character = ScreenCharacter::new(b'T', color);

text_mode.set_mode();
text_mode.clear_screen();
text_mode.write_character(0, 0, screen_character);

Graphics Mode

use vga::colors::Color16;
use vga::writers::{Graphics640x480x16, GraphicsWriter};

let mode = Graphics640x480x16::new();
mode.set_mode();
mode.clear_screen(Color16::Black);
mode.draw_line((80, 60), (80, 420), Color16::White);
mode.draw_line((80, 60), (540, 60), Color16::White);
mode.draw_line((80, 420), (540, 420), Color16::White);
mode.draw_line((540, 420), (540, 60), Color16::White);
mode.draw_line((80, 90), (540, 90), Color16::White);
for (offset, character) in "Hello World!".chars().enumerate() {
    mode.draw_character(270 + offset * 8, 72, character, Color16::White)
}

Dependencies

~1.5MB
~20K SLoC