diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-04 14:03:26 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-04 14:03:26 +0200 |
| commit | 48a608c8959fc696184bc1af2f67ecd07c0381ba (patch) | |
| tree | 88e69733c3d85d289dc48b0d298daeaf721d0587 /src/utils/print.c | |
| parent | 969f81bd7e2c0ccb07b9d49c6265421ce86369e0 (diff) | |
Add utilities functions
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'; + } } |
