|
@@ -299,7 +299,11 @@ void console_cursor(int state);
|
|
#define CONSOLE_ROW_SECOND (video_console_address + CONSOLE_ROW_SIZE)
|
|
#define CONSOLE_ROW_SECOND (video_console_address + CONSOLE_ROW_SIZE)
|
|
#define CONSOLE_ROW_LAST (video_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE)
|
|
#define CONSOLE_ROW_LAST (video_console_address + CONSOLE_SIZE - CONSOLE_ROW_SIZE)
|
|
#define CONSOLE_SIZE (CONSOLE_ROW_SIZE * CONSOLE_ROWS)
|
|
#define CONSOLE_SIZE (CONSOLE_ROW_SIZE * CONSOLE_ROWS)
|
|
-#define CONSOLE_SCROLL_SIZE (CONSOLE_SIZE - CONSOLE_ROW_SIZE)
|
|
|
|
|
|
+
|
|
|
|
+/* By default we scroll by a single line */
|
|
|
|
+#ifndef CONFIG_CONSOLE_SCROLL_LINES
|
|
|
|
+#define CONFIG_CONSOLE_SCROLL_LINES 1
|
|
|
|
+#endif
|
|
|
|
|
|
/* Macros */
|
|
/* Macros */
|
|
#ifdef VIDEO_FB_LITTLE_ENDIAN
|
|
#ifdef VIDEO_FB_LITTLE_ENDIAN
|
|
@@ -740,26 +744,33 @@ static void console_clear_line(int line, int begin, int end)
|
|
|
|
|
|
static void console_scrollup(void)
|
|
static void console_scrollup(void)
|
|
{
|
|
{
|
|
|
|
+ const int rows = CONFIG_CONSOLE_SCROLL_LINES;
|
|
|
|
+ int i;
|
|
|
|
+
|
|
/* copy up rows ignoring the first one */
|
|
/* copy up rows ignoring the first one */
|
|
|
|
|
|
#ifdef VIDEO_HW_BITBLT
|
|
#ifdef VIDEO_HW_BITBLT
|
|
video_hw_bitblt(VIDEO_PIXEL_SIZE, /* bytes per pixel */
|
|
video_hw_bitblt(VIDEO_PIXEL_SIZE, /* bytes per pixel */
|
|
0, /* source pos x */
|
|
0, /* source pos x */
|
|
video_logo_height +
|
|
video_logo_height +
|
|
- VIDEO_FONT_HEIGHT, /* source pos y */
|
|
|
|
|
|
+ VIDEO_FONT_HEIGHT * rows, /* source pos y */
|
|
0, /* dest pos x */
|
|
0, /* dest pos x */
|
|
video_logo_height, /* dest pos y */
|
|
video_logo_height, /* dest pos y */
|
|
VIDEO_VISIBLE_COLS, /* frame width */
|
|
VIDEO_VISIBLE_COLS, /* frame width */
|
|
VIDEO_VISIBLE_ROWS
|
|
VIDEO_VISIBLE_ROWS
|
|
- video_logo_height
|
|
- video_logo_height
|
|
- - VIDEO_FONT_HEIGHT /* frame height */
|
|
|
|
|
|
+ - VIDEO_FONT_HEIGHT * rows /* frame height */
|
|
);
|
|
);
|
|
#else
|
|
#else
|
|
- memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_SECOND,
|
|
|
|
- CONSOLE_SCROLL_SIZE >> 2);
|
|
|
|
|
|
+ memcpyl(CONSOLE_ROW_FIRST, CONSOLE_ROW_FIRST + rows * CONSOLE_ROW_SIZE,
|
|
|
|
+ (CONSOLE_SIZE - CONSOLE_ROW_SIZE * rows) >> 2);
|
|
#endif
|
|
#endif
|
|
/* clear the last one */
|
|
/* clear the last one */
|
|
- console_clear_line(CONSOLE_ROWS - 1, 0, CONSOLE_COLS - 1);
|
|
|
|
|
|
+ for (i = 1; i <= rows; i++)
|
|
|
|
+ console_clear_line(CONSOLE_ROWS - i, 0, CONSOLE_COLS - 1);
|
|
|
|
+
|
|
|
|
+ /* Decrement row number */
|
|
|
|
+ console_row -= rows;
|
|
}
|
|
}
|
|
|
|
|
|
static void console_back(void)
|
|
static void console_back(void)
|
|
@@ -871,9 +882,6 @@ static void console_newline(int n)
|
|
if (console_row >= CONSOLE_ROWS) {
|
|
if (console_row >= CONSOLE_ROWS) {
|
|
/* Scroll everything up */
|
|
/* Scroll everything up */
|
|
console_scrollup();
|
|
console_scrollup();
|
|
-
|
|
|
|
- /* Decrement row number */
|
|
|
|
- console_row = CONSOLE_ROWS - 1;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|