-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvideo.c
61 lines (54 loc) · 959 Bytes
/
video.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "video.h"
volatile char *video = VIDEO_BADDR;
volatile char *line_begin = VIDEO_BADDR;
void clear_video()
{
video = VIDEO_BADDR;
line_begin = VIDEO_BADDR;
bzero((char *)VIDEO_BADDR, VIDEO_LENGTH);
}
void disable_cursor()
{
outb(0x3D4, 0x0A);
outb(0x3D5, 0x20);
}
extern int user_input_start;
void backspace()
{
if (video > line_begin + user_input_start * 2)
{
write_serial_str("\b \b");
*video-- = 0;
*video-- = 0;
}
}
void __write(const char *s, int n)
{
int i = 0;
while (*s && i < n)
{
if (*s == '\n')
{
write_serial(*s);
video += (LINE_LENGTH)-(video-line_begin);
line_begin = video;
}
else
{
write_serial(*s);
*video++ = *s;
*video++ = 0x1F;
}
s++;
if (video == VIDEO_EADDR)
{
memmove((void *)VIDEO_BADDR,
(void *)VIDEO_BADDR + LINE_LENGTH,
VIDEO_LENGTH - LINE_LENGTH);
video -= LINE_LENGTH;
line_begin = video;
bzero((void *)video, LINE_LENGTH);
}
i++;
}
}