Line | |
---|
1 | #include "screen.h" |
---|
2 | #include <cpu-io.h> |
---|
3 | |
---|
4 | void 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 | |
---|
29 | void 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 | |
---|
64 | void 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 | |
---|
76 | void show_cursor(void) |
---|
77 | { |
---|
78 | move_cursor(kX, kY); |
---|
79 | } |
---|
80 | |
---|
81 | void hide_cursor(void) |
---|
82 | { |
---|
83 | move_cursor(-1, -1); |
---|
84 | } |
---|
85 | |
---|
86 | void 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.