[OpenBIOS] [PATCH 00/16] Switch to standards-compliant Forth console from C console

Blue Swirl blauwirbel at gmail.com
Sun Mar 10 21:52:15 CET 2013


On Sun, Mar 10, 2013 at 7:31 PM, Blue Swirl <blauwirbel at gmail.com> wrote:
> On Sun, Mar 10, 2013 at 6:16 PM, Blue Swirl <blauwirbel at gmail.com> wrote:
>> On Sun, Mar 10, 2013 at 4:50 PM, Mark Cave-Ayland
>> <mark.cave-ayland at 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



More information about the OpenBIOS mailing list