Rev 1312 | Rev 1317 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1312 | Rev 1316 | ||
|---|---|---|---|
| Line 28... | Line 28... | ||
| 28 | 28 | ||
| 29 | #include <genarch/fb/font-8x16.h> |
29 | #include <genarch/fb/font-8x16.h> |
| 30 | #include <genarch/fb/fb.h> |
30 | #include <genarch/fb/fb.h> |
| 31 | #include <console/chardev.h> |
31 | #include <console/chardev.h> |
| 32 | #include <console/console.h> |
32 | #include <console/console.h> |
| - | 33 | #include <mm/slab.h> |
|
| 33 | #include <panic.h> |
34 | #include <panic.h> |
| 34 | #include <memstr.h> |
35 | #include <memstr.h> |
| - | 36 | #include <config.h> |
|
| 35 | 37 | ||
| 36 | #include "helenos.xbm" |
38 | #include "helenos.xbm" |
| 37 | 39 | ||
| 38 | SPINLOCK_INITIALIZE(fb_lock); |
40 | SPINLOCK_INITIALIZE(fb_lock); |
| 39 | 41 | ||
| 40 | static __u8 *fbaddress = NULL; |
42 | static __u8 *fbaddress = NULL; |
| 41 | 43 | ||
| - | 44 | static __u8 *blankline = NULL; |
|
| - | 45 | ||
| 42 | static unsigned int xres = 0; |
46 | static unsigned int xres = 0; |
| 43 | static unsigned int yres = 0; |
47 | static unsigned int yres = 0; |
| 44 | static unsigned int scanline = 0; |
48 | static unsigned int scanline = 0; |
| 45 | static unsigned int pixelbytes = 0; |
49 | static unsigned int pixelbytes = 0; |
| 46 | 50 | ||
| Line 157... | Line 161... | ||
| 157 | 161 | ||
| 158 | /** Scroll screen one row up */ |
162 | /** Scroll screen one row up */ |
| 159 | static void scroll_screen(void) |
163 | static void scroll_screen(void) |
| 160 | { |
164 | { |
| 161 | unsigned int i; |
165 | unsigned int i; |
| - | 166 | __u8 *lastline = &fbaddress[(rows - 1) * ROW_BYTES]; |
|
| 162 | 167 | ||
| 163 | memcpy((void *) fbaddress, (void *) &fbaddress[ROW_BYTES], scanline * yres - ROW_BYTES); |
168 | memcpy((void *) fbaddress, (void *) &fbaddress[ROW_BYTES], scanline * yres - ROW_BYTES); |
| 164 | 169 | ||
| 165 | /* Clear last row */ |
170 | /* Clear last row */ |
| - | 171 | if (blankline) { |
|
| - | 172 | memcpy((void *) lastline, (void *) blankline, ROW_BYTES); |
|
| - | 173 | } else { |
|
| 166 | for (i = 0; i < FONT_SCANLINES; i++) |
174 | for (i = 0; i < FONT_SCANLINES; i++) |
| 167 | clear_line((rows - 1) * FONT_SCANLINES + i); |
175 | clear_line((rows - 1) * FONT_SCANLINES + i); |
| - | 176 | ||
| - | 177 | if (config.mm_initialized) { |
|
| - | 178 | /* Save a blank line aside. */ |
|
| - | 179 | blankline = (__u8 *) malloc(ROW_BYTES, FRAME_ATOMIC); |
|
| - | 180 | if (blankline) |
|
| - | 181 | memcpy((void *) blankline, (void *) lastline, ROW_BYTES); |
|
| - | 182 | } |
|
| - | 183 | } |
|
| 168 | } |
184 | } |
| 169 | 185 | ||
| 170 | 186 | ||
| 171 | static void invert_pixel(unsigned int x, unsigned int y) |
187 | static void invert_pixel(unsigned int x, unsigned int y) |
| 172 | { |
188 | { |