Subversion Repositories HelenOS

Rev

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

Rev 3674 Rev 4338
Line 47... Line 47...
47
#include <ipc/fb.h>
47
#include <ipc/fb.h>
48
#include <ipc/ipc.h>
48
#include <ipc/ipc.h>
49
#include <ipc/ns.h>
49
#include <ipc/ns.h>
50
#include <ipc/services.h>
50
#include <ipc/services.h>
51
#include <libarch/ddi.h>
51
#include <libarch/ddi.h>
-
 
52
#include <console/style.h>
-
 
53
#include <console/color.h>
52
 
54
 
53
#include "ega.h"
55
#include "ega.h"
54
#include "../console/screenbuffer.h"
56
#include "../console/screenbuffer.h"
55
#include "main.h"
57
#include "main.h"
56
 
58
 
Line 62... Line 64...
62
saved_screen saved_screens[MAX_SAVED_SCREENS];
64
saved_screen saved_screens[MAX_SAVED_SCREENS];
63
 
65
 
64
#define EGA_IO_ADDRESS 0x3d4
66
#define EGA_IO_ADDRESS 0x3d4
65
#define EGA_IO_SIZE 2
67
#define EGA_IO_SIZE 2
66
 
68
 
67
int ega_normal_color=0x0f;
69
int ega_normal_color = 0x0f;
68
int ega_inverted_color=0xf0;
70
int ega_inverted_color = 0xf0;
69
 
71
 
70
#define NORMAL_COLOR        ega_normal_color       
72
#define NORMAL_COLOR        ega_normal_color       
71
#define INVERTED_COLOR      ega_inverted_color
73
#define INVERTED_COLOR      ega_inverted_color
72
 
74
 
73
#define EGA_STYLE(fg,bg) ((fg) > (bg) ? NORMAL_COLOR : INVERTED_COLOR)
75
#define EGA_STYLE(fg,bg) ((fg) > (bg) ? NORMAL_COLOR : INVERTED_COLOR)
Line 125... Line 127...
125
 
127
 
126
static void scroll(int rows)
128
static void scroll(int rows)
127
{
129
{
128
    int i;
130
    int i;
129
    if (rows > 0) {
131
    if (rows > 0) {
130
        memcpy(scr_addr, ((char *) scr_addr) + rows * scr_width * 2,
132
        memmove(scr_addr, ((char *) scr_addr) + rows * scr_width * 2,
131
            scr_width * scr_height * 2 - rows * scr_width * 2);
133
            scr_width * scr_height * 2 - rows * scr_width * 2);
132
        for (i = 0; i < rows * scr_width; i++)
134
        for (i = 0; i < rows * scr_width; i++)
133
            (((short *) scr_addr) + scr_width * scr_height - rows *
135
            (((short *) scr_addr) + scr_width * scr_height - rows *
134
                scr_width)[i] = ((style << 8) + ' ');
136
                scr_width)[i] = ((style << 8) + ' ');
135
    } else if (rows < 0) {
137
    } else if (rows < 0) {
136
        memcpy(((char *)scr_addr) - rows * scr_width * 2, scr_addr,
138
        memmove(((char *)scr_addr) - rows * scr_width * 2, scr_addr,
137
            scr_width * scr_height * 2 + rows * scr_width * 2);
139
            scr_width * scr_height * 2 + rows * scr_width * 2);
138
        for (i = 0; i < -rows * scr_width; i++)
140
        for (i = 0; i < -rows * scr_width; i++)
139
            ((short *)scr_addr)[i] = ((style << 8 ) + ' ');
141
            ((short *)scr_addr)[i] = ((style << 8 ) + ' ');
140
    }
142
    }
141
}
143
}
Line 152... Line 154...
152
{
154
{
153
    int i;
155
    int i;
154
 
156
 
155
    for (i = 0; i < scr_width * scr_height; i++) {
157
    for (i = 0; i < scr_width * scr_height; i++) {
156
        scr_addr[i * 2] = data[i].character;
158
        scr_addr[i * 2] = data[i].character;
-
 
159
        /* FIXME
157
        scr_addr[i * 2 + 1] = EGA_STYLE(data[i].style.fg_color,
160
        scr_addr[i * 2 + 1] = EGA_STYLE(data[i].style.fg_color,
158
            data[i].style.bg_color);
161
            data[i].style.bg_color);
-
 
162
        */
159
    }
163
    }
160
}
164
}
161
 
165
 
162
static int save_screen(void)
166
static int save_screen(void)
163
{
167
{
Line 273... Line 277...
273
            else
277
            else
274
                cursor_disable();
278
                cursor_disable();
275
            retval = 0;
279
            retval = 0;
276
            break;
280
            break;
277
        case FB_SET_STYLE:
281
        case FB_SET_STYLE:
-
 
282
            retval = 0;
-
 
283
            switch (IPC_GET_ARG1(call)) {
-
 
284
            case STYLE_NORMAL: style = INVERTED_COLOR; break;
-
 
285
            case STYLE_EMPHASIS: style = INVERTED_COLOR | 4; break;
-
 
286
            default: retval = EINVAL;
-
 
287
            }
-
 
288
            break;
-
 
289
        case FB_SET_COLOR:
-
 
290
            fgcolor = IPC_GET_ARG1(call);
-
 
291
            bgcolor = IPC_GET_ARG2(call);
-
 
292
            style = (fgcolor & 7) | ((bgcolor & 7) << 4);
-
 
293
            if (IPC_GET_ARG3(call) & CATTR_BRIGHT)
-
 
294
                style = style | 0x08;
-
 
295
            retval = 0;
-
 
296
            break;
-
 
297
        case FB_SET_RGB_COLOR:
278
            fgcolor = IPC_GET_ARG1(call);
298
            fgcolor = IPC_GET_ARG1(call);
279
            bgcolor = IPC_GET_ARG2(call);
299
            bgcolor = IPC_GET_ARG2(call);
280
            style = EGA_STYLE(fgcolor, bgcolor);
300
            style = EGA_STYLE(fgcolor, bgcolor);
281
            retval = 0;
301
            retval = 0;
282
            break;
302
            break;
Line 315... Line 335...
315
    ega_ph_addr = (void *) sysinfo_value("fb.address.physical");
335
    ega_ph_addr = (void *) sysinfo_value("fb.address.physical");
316
    scr_width = sysinfo_value("fb.width");
336
    scr_width = sysinfo_value("fb.width");
317
    scr_height = sysinfo_value("fb.height");
337
    scr_height = sysinfo_value("fb.height");
318
    if(sysinfo_value("fb.blinking"))
338
    if(sysinfo_value("fb.blinking"))
319
    {
339
    {
320
            ega_normal_color&=0x77;
340
            ega_normal_color &= 0x77;
321
            ega_inverted_color&=0x77;
341
            ega_inverted_color &= 0x77;
322
    }
342
    }
323
    style = NORMAL_COLOR;
343
    style = NORMAL_COLOR;
324
 
344
 
325
    iospace_enable(task_get_id(), (void *) EGA_IO_ADDRESS, 2);
345
    iospace_enable(task_get_id(), (void *) EGA_IO_ADDRESS, 2);
326
 
346