diff options
Diffstat (limited to 'src/utils/print.c')
| -rw-r--r-- | src/utils/print.c | 48 |
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'; + } } |
