aboutsummaryrefslogtreecommitdiff
path: root/src/utils/print.c
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-04-04 14:03:26 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-04-04 14:03:26 +0200
commit48a608c8959fc696184bc1af2f67ecd07c0381ba (patch)
tree88e69733c3d85d289dc48b0d298daeaf721d0587 /src/utils/print.c
parent969f81bd7e2c0ccb07b9d49c6265421ce86369e0 (diff)
Add utilities functions
Diffstat (limited to 'src/utils/print.c')
-rw-r--r--src/utils/print.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/src/utils/print.c b/src/utils/print.c
index c7c94d4..8fab941 100644
--- a/src/utils/print.c
+++ b/src/utils/print.c
@@ -1,7 +1,51 @@
#include "print.h"
+#include "types.h"
+
+#define MAX_COL 80
+#define MAX_LINE 25
+
+char *video=(char *)0xB8000;
+u8 col=0;
+u8 line=0;
void putchar(char c){
- char *video=(char *)0xB8000;
- video[0]=c;
+ // Print char
+ video[col*2+MAX_COL*line*2]=c;
+ // Refresh location
+ col+=1;
+ if(col>= MAX_COL){
+ col=0;
+ line+=1;
+ if(line>=MAX_LINE){
+ line=MAX_LINE-1;
+ scrollup();
+ }
+ }
+}
+
+void print(char *str){
+ int i=0;
+ while(str[i]!='\0'){
+ putchar(str[i]);
+ i++;
+ }
+}
+
+void clear(){
+ for(char i=0;i<MAX_LINE;i++){
+ scrollup();
+ }
+}
+
+void scrollup(){
+ // Move line up
+ for(char i=1;i<=MAX_LINE;i++){
+ for(char j=0;j<=MAX_COL;j++)
+ video[j*2+MAX_COL*(i-1)*2]=video[j*2+MAX_COL*i*2];
+ }
+ // Clear last line
+ for(char i=0;i<=MAX_COL;i++){
+ video[col*2+MAX_COL*(MAX_LINE-1)*2]='\0';
+ }
}