diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-05 14:46:31 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-04-05 14:46:31 +0200 |
| commit | ba7e57138c9e41cf944afb91c146fea23713c1d1 (patch) | |
| tree | 3a57bd313ee7a7fd8535286e3364ef47bb7aa705 /src/utils/print.c | |
| parent | b54b87ad2d41e60e9be1e299140dbf59e76c8fc6 (diff) | |
Reload GDT
Diffstat (limited to 'src/utils/print.c')
| -rw-r--r-- | src/utils/print.c | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/src/utils/print.c b/src/utils/print.c index 8fab941..dbed000 100644 --- a/src/utils/print.c +++ b/src/utils/print.c @@ -1,24 +1,36 @@ #include "print.h" -#include "types.h" #define MAX_COL 80 #define MAX_LINE 25 -char *video=(char *)0xB8000; -u8 col=0; -u8 line=0; +struct VIDEO_STATE { + u8 *mem; + u8 col; + u8 line; + u8 bg; + u8 fg; +}; +VIDEO_STATE VS={ + (u8 *)0xB8000, + 0, + 0, + BLACK, + GRAY, +}; void putchar(char c){ // Print char - video[col*2+MAX_COL*line*2]=c; + VS.mem[VS.col*2+MAX_COL*VS.line*2]=c; + VS.mem[VS.col*2+MAX_COL*VS.line*2+1]=VS.fg|VS.bg<<4; + // Refresh location - col+=1; - if(col>= MAX_COL){ - col=0; - line+=1; - if(line>=MAX_LINE){ - line=MAX_LINE-1; + VS.col+=1; + if(VS.col>= MAX_COL){ + VS.col=0; + VS.line+=1; + if(VS.line>=MAX_LINE){ + VS.line=MAX_LINE-1; scrollup(); } } @@ -39,13 +51,13 @@ void clear(){ } void scrollup(){ - // Move line up + // Move VS.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]; + VS.mem[j*2+MAX_COL*(i-1)*2]=VS.mem[j*2+MAX_COL*i*2]; } - // Clear last line + // Clear last VS.line for(char i=0;i<=MAX_COL;i++){ - video[col*2+MAX_COL*(MAX_LINE-1)*2]='\0'; + VS.mem[i*2+MAX_COL*(MAX_LINE-1)*2]='\0'; } } |
