diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/bringelle.c | 7 | ||||
| -rw-r--r-- | src/utils/print.c | 48 | ||||
| -rw-r--r-- | src/utils/print.h | 6 | ||||
| -rw-r--r-- | src/utils/types.h | 8 |
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 |
