Reload GDT
This commit is contained in:
parent
b54b87ad2d
commit
ba7e57138c
8 changed files with 182 additions and 19 deletions
|
@ -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';
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue