
xmboot boot loader for VMIPS
============================

This is a serial-based boot loader which supports loading ECOFF
executables, which can either be sent over a serial link using the
XMODEM protocol, or linked with the boot loader.

What's here:

Makefile, Makefile.in - used to build boot.rom
README - this file
boot.c - command processor, entry point
coff.c - procedures to interpret mips coff headers
coff.h - data structures representing mips coff file & section headers
lib.c - the "little C library"
lib.h - public interface to lib.c
serial.c, serial.h - interface between lib.c and serial device
xmrcv.c - XMODEM receive code
xmrcv.h - public interface to xmrcv.c
panic.c - routine to catch exceptions and print a message
bootenv.c, bootenv.h - environment processing
boot.script.in - ld script used for setting up the booter.
boot_setup.S - low level assembly code for booter; implements DECstation PROM
 jump table and panic call.
set_status.S, set_status.h - C routines for getting/setting the CP0 Status word

scripts:
vmips16M - script for running vmips with extra memory
vmipsdec - script for running vmips with extra memory and DEC devices
catrom - shell script that glues an ecoff executable to the booter.
 (see vmips mailing list archives for details.)

toys:
loadtest* - hello world program; you can try loading this with the booter, 
 if you have an ecoff toolchain to compile it with.

runtests - test driver (see below)
tests that runtests runs:
libtest.c - test suite for the little C library
libtest.input - inputs to libtest.c
libtest.output - expected outputs from libtest.c
pftest.c - vmips-hosted tests for printf in little C library
pftest.output - expected output from pftest.c
testbootenv.c - test code for bootenv.c
testbootenv.output - expected outputs from testbootenv.c


Testing infrastructure for xmboot
=================================

How to test the booter:
 * runtests is a shellscript that runs all the test programs.
 * Run it with "sh runtests".
 * It produces dejagnu-style output but does not use dejagnu. We'll
   rewrite this later to work using dejagnu.

What it currently runs:
 * testbootenv, libtest and pftest (on host only!)

Tests need to be written for the following modules:
 * boot.c
 * coff.c
 * panic.c
 * serial.c
 * xmrcv.c

Infrastructure work:
 * These tests should be rewritten as dejagnu tests.  The infrastructure
   is probably pretty simple to write.  One complication is that the tests
   should be run on both the host and on vmips.
 * In order to run tests unchanged under both vmips and the host, we would
   like to handle main() correctly. This is already OK for C programs, all
   we need to do is teach vmipstool to link in libgcc.a and implement an
   atexit() that doesn't do anything. This will not be OK for C++ programs.
   Then, maybe, the entry()/main() hack can go away, and maybe the mess of
   ld.scripts in xmboot can go away, too.

