| 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.