From aec1686102abc5c9099c198e7798bcb7c94b3402 Mon Sep 17 00:00:00 2001 From: Tianhao Wang Date: Sat, 11 Mar 2023 01:35:16 +0100 Subject: adding io port --- src/machine/cgascr.rs | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) (limited to 'src/machine') 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