[OpenBIOS] usb driver to support usb keyboard

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Mon May 5 00:41:30 CEST 2014


On 03/05/14 10:56, BALATON Zoltan wrote:

> On Fri, 3 May 2014, Tarl Neustaedter wrote:
>> I'm not volunteering to do the work (lest I hear my boss scream in
>> agony), but I suspect this is a case that it just drops in and works.
>> Lillian wrote it for the OneLaptop project, and I understand that
>> implementation and OpenBios haven't diverged all that much.
>
> Problem is I don't know where to drop it to try if it works and if it
> doesn't I don't know how to debug Forth so I could only shoot in the
> dark. I don't even know where to start with this Forth driver.

Sadly the PCI code in OpenBIOS is still written in C so there would be 
some interface work required there.

In terms of testing the code, Forth is an interpreted language so you 
can literally copy/paste from the source files into a serial console and 
see what happens ;)  I suspect that the reality will be slightly 
different though, for example we know that OpenFirmware has behaviours 
which aren't implemented in OpenBIOS.

I should also point out that given that the original OpenFirmware was 
written almost completely in Forth, a lot of the semantics are so 
tightly tied in that it would make sense to start looking at bits of 
Forth as you come across them, and even better you can use the Forth 
debugger (see README.debugger) to step through words one at a time.

 From the time I've spent working on OpenBIOS, I would say that the 2 
things that have cost me the most time have been excessive use of C and 
premature forking of individual architectures. Historically OpenBIOS has 
a lot of C drivers borrowed from other projects which is great for 
getting something going but causes more headaches further down the line. 
Maybe the original aim was to convert the C drivers over to Forth as 
time allows? I don't know as that was prior to my involvement in the 
project.

As an example, last summer I ended up rewriting the majority of the 
display layer and I would say that most of the bugs were caused by C 
structs and Forth structs not being in sync, plus there was massive code 
duplication between C and Forth. Currently the C code uses pointers into 
the Forth dictionary where required so that the values are always 
consistent, and now C is only used for low-level primitives e.g. 
blitting that can be used across all architectures.

Similarly I spent time creating the common libopenbios since there was a 
lot of code duplicated between PPC, SPARC32 and SPARC64 which required 
multiple fixes and testing for minor fixes. But to go back to my 
original point: the more cross architecture work we do, the less 
maintenance is required and all architectures get bugfixes for free. And 
if we need cross architecture, then Forth is a better choice since it 
provides the greatest compatibility with clients and the IEEE1275 
specification, and you get to debug and develop live systems 
step-by-step without having to rebuild/redeploy.


ATB,

Mark.




More information about the OpenBIOS mailing list