Subversion Repositories HelenOS-historic

Rev

Rev 534 | Rev 588 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 534 Rev 575
Line 32... Line 32...
32
#include <arch/mm/page.h>
32
#include <arch/mm/page.h>
33
#include <synch/spinlock.h>
33
#include <synch/spinlock.h>
34
#include <arch/types.h>
34
#include <arch/types.h>
35
#include <arch/asm.h>
35
#include <arch/asm.h>
36
#include <memstr.h>
36
#include <memstr.h>
-
 
37
#include <console/chardev.h>
-
 
38
#include <console/console.h>
37
 
39
 
38
/*
40
/*
39
 * The EGA driver.
41
 * The EGA driver.
40
 * Simple and short. Function for displaying characters and "scrolling".
42
 * Simple and short. Function for displaying characters and "scrolling".
41
 */
43
 */
42
 
44
 
43
static spinlock_t egalock;
45
static spinlock_t egalock;
44
static __u32 ega_cursor;
46
static __u32 ega_cursor;
45
 
47
 
-
 
48
static void ega_putchar(chardev_t *d, const char ch);
-
 
49
 
-
 
50
chardev_t ega_console;
-
 
51
static chardev_operations_t ega_ops = {
-
 
52
    .write = ega_putchar
-
 
53
};
-
 
54
 
46
void ega_move_cursor(void);
55
void ega_move_cursor(void);
47
 
56
 
48
void ega_init(void)
57
void ega_init(void)
49
{
58
{
50
    __u8 hi, lo;
59
    __u8 hi, lo;
Line 53... Line 62...
53
    outb(0x3d4,0xe);
62
    outb(0x3d4,0xe);
54
    hi = inb(0x3d5);
63
    hi = inb(0x3d5);
55
    outb(0x3d4,0xf);
64
    outb(0x3d4,0xf);
56
    lo = inb(0x3d5);
65
    lo = inb(0x3d5);
57
    ega_cursor = (hi<<8)|lo;
66
    ega_cursor = (hi<<8)|lo;
-
 
67
 
-
 
68
    chardev_initialize("ega_out", &ega_console, &ega_ops);
-
 
69
    stdout = &ega_console;
-
 
70
 
58
    ega_putchar('\n');
71
    putchar('\n');
59
}
72
}
60
 
73
 
61
static void ega_display_char(char ch)
74
static void ega_display_char(char ch)
62
{
75
{
63
    __u8 *vram = (__u8 *) PA2KA(VIDEORAM);
76
    __u8 *vram = (__u8 *) PA2KA(VIDEORAM);
Line 76... Line 89...
76
    memcpy((void *)PA2KA(VIDEORAM), (void *)(PA2KA(VIDEORAM) + ROW*2), (SCREEN - ROW)*2);
89
    memcpy((void *)PA2KA(VIDEORAM), (void *)(PA2KA(VIDEORAM) + ROW*2), (SCREEN - ROW)*2);
77
    memsetw(PA2KA(VIDEORAM) + (SCREEN - ROW)*2, ROW, 0x0720);
90
    memsetw(PA2KA(VIDEORAM) + (SCREEN - ROW)*2, ROW, 0x0720);
78
    ega_cursor = ega_cursor - ROW;
91
    ega_cursor = ega_cursor - ROW;
79
}
92
}
80
 
93
 
81
void ega_putchar(const char ch)
94
void ega_putchar(chardev_t *d, const char ch)
82
{
95
{
83
    ipl_t ipl;
96
    ipl_t ipl;
84
 
97
 
85
    ipl = interrupts_disable();
98
    ipl = interrupts_disable();
86
    spinlock_lock(&egalock);
99
    spinlock_lock(&egalock);
Line 109... Line 122...
109
    outb(0x3d4,0xe);
122
    outb(0x3d4,0xe);
110
    outb(0x3d5,(ega_cursor>>8)&0xff);
123
    outb(0x3d5,(ega_cursor>>8)&0xff);
111
    outb(0x3d4,0xf);
124
    outb(0x3d4,0xf);
112
    outb(0x3d5,ega_cursor&0xff);   
125
    outb(0x3d5,ega_cursor&0xff);   
113
}
126
}
114
 
-
 
115
void putchar(const char ch)
-
 
116
{
-
 
117
    ega_putchar(ch);
-
 
118
}
-