source: trunk/hal/i386/screen.c @ 31

Last change on this file since 31 was 1, checked in by alain, 8 years ago

First import

File size: 1.4 KB
Line 
1#include "screen.h"
2#include <cpu-io.h>
3
4void scrollup(unsigned int n)
5{
6        unsigned char *video, *tmp;
7
8        for(video = (unsigned char *) RAMSCREEN; video < (unsigned char *) SCREENLIM; video += 2) 
9        {
10                tmp = (unsigned char *) (video + n * 160);
11
12                if(tmp < (unsigned char *) SCREENLIM) 
13                {
14                        *video = *tmp;
15                        *(video + 1) = *(tmp + 1);
16                } else 
17                {
18                        *video = 0;
19                        *(video + 1) = 0x07;
20                }
21        }
22
23        kY -= n;
24
25        if(kY < 0)
26                kY = 0;
27}
28
29void putcar(uint8_t c)
30{
31        unsigned char *video;
32
33        if(c == 10)             /* CR-NL */
34        {               
35                kX = 0;
36                kY++;
37        } 
38        else if(c == 9)         /* TAB */
39        {
40                kX = kX + 8 - (kX % 8);
41        } 
42        else if(c == 13)        /* CR */ 
43        {       
44                kX = 0;
45        } 
46        else
47        {               
48                video  = (unsigned char *) (RAMSCREEN + 2 * kX + 160 * kY);
49                *video = c;
50                *(video + 1) = kattr;
51
52                kX++;
53                if (kX > 79) 
54                {
55                        kX = 0;
56                        kY++;
57                }
58        }
59
60        if (kY > 24)
61                scrollup(kY - 24);
62}
63
64void move_cursor(uint8_t x, uint8_t y)
65{
66        uint16_t c_pos;
67
68        c_pos = y * 80 + x;
69
70        cpu_io_out8(0x3d4, 0x0f);
71        cpu_io_out8(0x3d5, (uint8_t) c_pos);
72        cpu_io_out8(0x3d4, 0x0e);
73        cpu_io_out8(0x3d5, (uint8_t) (c_pos >> 8));
74}
75
76void show_cursor(void)
77{
78        move_cursor(kX, kY);
79}
80
81void hide_cursor(void)
82{
83        move_cursor(-1, -1);
84}
85
86void dump (uint8_t* addr, int n)
87{
88        char c1, c2;
89        char *tab = "0123456789ABCDEF";
90       
91        while(n--) {
92                c1 = tab[(*addr & 0xF0)>>4];
93                c2 = tab[*addr & 0x0F];
94                addr++;
95                putcar(c1);
96                putcar(c2);
97        }
98}
Note: See TracBrowser for help on using the repository browser.