On Sun, Mar 10, 2013 at 7:31 PM, Blue Swirl blauwirbel@gmail.com wrote:
On Sun, Mar 10, 2013 at 6:16 PM, Blue Swirl blauwirbel@gmail.com wrote:
On Sun, Mar 10, 2013 at 4:50 PM, Mark Cave-Ayland mark.cave-ayland@ilande.co.uk wrote:
As mentioned in my previous email on-list, OpenBIOS currently contains two consoles - a C based console and a Forth based console. The Forth based console is currently broken, but is more feature complete than the C console, whilst also being more portable across different architectures.
This patchset performs the following functions:
- Fix various bugs in the Forth console
- Optimise performance using low-level C graphics routines
- Add simple IEEE1275-like initialisers for TCX and VGA graphics
- Switch TCX and VGA drivers over to use the new console using the standard is-install word
Once this patchset is committed, a further patchset will follow to remove all of the duplicate C console code, remove packages/video.c and unify the console input/routines into libopenbios.
I'm getting these warnings during build, perhaps something is not correct: LINK openbios-builtin.elf libopenbios.a(console_common.o): warning: multiple common of `video' libsparc32.a(openbios.o): warning: previous common is here libopenbios.a(video_common.o): warning: multiple common of `video' libsparc32.a(openbios.o): warning: previous common is here libpackages.a(video.o): warning: multiple common of `video' libsparc32.a(openbios.o): warning: previous common is here GEN openbios-builtin.elf.syms
I used the following to fix the warning, please squash into patch #5:
diff --git a/include/libopenbios/video.h b/include/libopenbios/video.h index 13bf143..1840981 100644 --- a/include/libopenbios/video.h +++ b/include/libopenbios/video.h @@ -17,7 +17,7 @@ typedef struct osi_fb_info { int rb, w, h, depth; } osi_fb_info_t;
-struct { +extern struct video_info { int has_video; osi_fb_info_t fb; unsigned long *pal; /* 256 elements */ diff --git a/libopenbios/video_common.c b/libopenbios/video_common.c index 11aeec7..621f032 100644 --- a/libopenbios/video_common.c +++ b/libopenbios/video_common.c @@ -23,6 +23,7 @@ #include "packages/video.h" #include "drivers/vga.h"
+struct video_info video;
unsigned long get_color( int col_ind )
Based on a quick Debian 3.1 CDROM boot test, it looks like scrolling and clear screen does not work at all. Text is also offset by one line down and one column right.
NetBSD 4.0 also suffers from lack of scrolling and clear screen, but characters are positioned correctly.
On the positive side, reverse text now works and I guess the screen flashes show BEL handling.
It looks like Forth version is a bit too buggy, for example 1b emit ." [H" should position cursor to top left corner of the screen (like HEAD), but with the patch set it does nothing except leaves a stray '0' on the stack!
Some usual messages (CPUs, UUID) are not going to screen but that's probably OK.
Mark Cave-Ayland (16): display.fs: Fix up default-font word. display.fs: Fix fb8-delete-lines within the inbuilt Forth terminal emulator. terminal.fs: Fix linefeeds on the bottom line of the Forth console. terminal.fs: Fix backspace sequence in Forth terminal. video: Create new video_common.c file for shared video primitive routines. video_common.c: Move primitive graphic operations into libopenbios/video_common.c. pci: Modify PCI display devices so that open and close words are not created automatically during initialisation. video: Create tcx.fs and vga.fs to simulate Fcode video initialisation code. display.fs: pass the colour depth in bytes to the Forth terminal routines. video_common.c: create low-level video_mask_blit() function. video_common.c: create low-level video_invert_rect() function. display.fs: Fix fb8 routines to work with bit depths > 8. video_common.c: create low-level video_fill_rect() function. display.fs: optimise scrolling by copying/deleting multiple scanlines at once. display.fs: Add vertical font-spacing as per the existing C console implementation. video: switch VGA and TCX drivers over to Forth console using is-install.
openbios-devel/arch/sparc32/console.c | 12 - openbios-devel/arch/sparc32/openbios.c | 2 +- openbios-devel/drivers/build.xml | 2 + openbios-devel/drivers/pci.c | 14 +- openbios-devel/drivers/pci.h | 1 + openbios-devel/drivers/sbus.c | 2 + openbios-devel/drivers/tcx.fs | 13 + openbios-devel/drivers/vga.fs | 13 + openbios-devel/drivers/vga_vbe.c | 2 +- openbios-devel/forth/device/display.fs | 172 +++++------ openbios-devel/forth/device/font.fs | 4 + openbios-devel/forth/device/terminal.fs | 10 +- openbios-devel/include/libopenbios/video.h | 24 ++ openbios-devel/include/packages/video.h | 6 +- openbios-devel/libopenbios/build.xml | 1 + openbios-devel/libopenbios/console_common.c | 1 + openbios-devel/libopenbios/video_common.c | 444 +++++++++++++++++++++++++++ openbios-devel/packages/video.c | 279 +---------------- 18 files changed, 607 insertions(+), 395 deletions(-) create mode 100644 openbios-devel/drivers/tcx.fs create mode 100644 openbios-devel/drivers/vga.fs create mode 100644 openbios-devel/include/libopenbios/video.h create mode 100644 openbios-devel/libopenbios/video_common.c
-- 1.7.10.4
-- OpenBIOS http://openbios.org/ Mailinglist: http://lists.openbios.org/mailman/listinfo Free your System - May the Forth be with you