aboutsummaryrefslogtreecommitdiff
path: root/src/machine/cgascr.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/machine/cgascr.rs')
-rw-r--r--src/machine/cgascr.rs44
1 files changed, 31 insertions, 13 deletions
diff --git a/src/machine/cgascr.rs b/src/machine/cgascr.rs
index f67501c..091c50d 100644
--- a/src/machine/cgascr.rs
+++ b/src/machine/cgascr.rs
@@ -8,29 +8,47 @@ pub struct CGAScreen{
#[allow(dead_code)]
impl CGAScreen{
- pub fn new(cows:u32, rows:u32) -> Self {
- Self {max_cows: cows, max_rows:rows,}
+ pub fn new(rows:u32, cols:u32) -> Self {
+ Self {max_rows:rows, max_cows:cols}
+ }
+
+
+ fn get_index(&self,row:u32, col:u32) -> u32{
+ col + row*self.max_cows
}
-
// this function should be the only one that "directly touches"
// the memory by address.
// and since it's unsafe, it shouldn't be public
- //
- // fn show(&self, x:u32, y:u32, c:char, attr:u8){
- //
- // }
+ pub fn show(&self, row:u32, col:u32, c:char, attr:u8){
+ let index = self.get_index(row, col);
+
+ unsafe{
+ *vga_buffer.offset(index as isize * 2) = c as u8;
+ *vga_buffer.offset(index as isize * 2 + 1) = attr;
+ }
+
+ }
+
+ pub fn putchar(&self, ch:char){
+
+ }
+
+ pub fn setpos(){}
+ pub fn getpos(){}
+
+
+ // Sanity Check of the cgascreen
pub fn test(&self){
let mut r = 0;
let mut c = 0;
-
+
+ let mut counter = 0;
while r<self.max_rows {
while c<self.max_cows {
- let index:u32 = r*self.max_cows + c;
- unsafe {
- *vga_buffer.offset(index as isize * 2) = index as u8;
- *vga_buffer.offset(index as isize * 2 + 1) = index as u8;
- }
+ let ch = (counter & 0xff) as u8;
+ self.show(r,c,ch as char, ch);
+ counter += 1;
c+=1;
}
r+=1;