aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bringelle.c7
-rw-r--r--src/utils/print.c48
-rw-r--r--src/utils/print.h6
-rw-r--r--src/utils/types.h8
4 files changed, 62 insertions, 7 deletions
diff --git a/src/bringelle.c b/src/bringelle.c
index 4c8e39f..d8bbe82 100644
--- a/src/bringelle.c
+++ b/src/bringelle.c
@@ -1,11 +1,8 @@
#include "utils/print.h"
-
-
-
void bringelle(){
- putchar('L');
- putchar('L');
+ clear();
+ print("Booting Bringelle...");
while(1);
}
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';
+ }
}
diff --git a/src/utils/print.h b/src/utils/print.h
index 51ed076..fb1badd 100644
--- a/src/utils/print.h
+++ b/src/utils/print.h
@@ -2,6 +2,12 @@
#define PRINT_H
+/**
+ * Print char
+ */
void putchar(char);
+void print(char*);
+void scrollup();
+void clear();
#endif
diff --git a/src/utils/types.h b/src/utils/types.h
new file mode 100644
index 0000000..b06b160
--- /dev/null
+++ b/src/utils/types.h
@@ -0,0 +1,8 @@
+#ifndef TYPES_H
+#define TYPES_h
+
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+
+#endif