Inside the Bush Internet Surf Set, part 2

by Andrew Flegg <andrew@bleb.org>

Introduction

Last time we looked at the Bush Internet Surf Set: a web browser in a set-top box which, for less than twenty pounds, gives you the ability to use NCFresco on your telly. In this article, we're going to look at turning this funky little box into a fully-functioning RISC OS machine, using an Iomega Zip drive and a "donor" RISC OS 3.7 box. We'll also investigate some of the hidden features of the box, including how to change the ISP and homepage.

Playing with the box

Acorn machines since the BBC have used Shift-Break to invert the default boot procedure: on a BBC, this usually meant running the !Boot file on the current floppy; on a RISC OS machine with a full !Boot structure, Shift-Break will actually bring the machine up in a minimal configuration. So the first thing to try when wanting to fiddle with these machines is to try holding down Shift whilst turning it on. Not really very surprisingly, it works! So, the first step is to hold down "Shift" on the remote control whilst plugging the unit into the mains. You'll still have to press the yellow "Internet" button to enable the video output and the default cursor position was off the top of my TV, however pressing "Enter" a few times will eventually bring up a flashing cursor next to an asterisk:

*_

Here we can now do all the things that we used to do on Beebs: type "BASIC", press "Enter" and you're in BBC BASIC:

*BASIC
ARM BBC BASIC V version 1.16 (C) Acorn 1989
 
Starting with 8049062 bytes free
>PRINT "Hello world"
Hello world
>_

A useful thing to remember here is the control codes to change the screen mode: after turning the box on and having the cursor off the top of the screen you can use Ctrl-V followed by Ctrl-O to change to mode 12, which should be a little easier to read on a TV set.

We can also use standard commands such as ex and dir to move about the file system. The default directory is Resources:$, the built-in ROM filing system - due to the Surf Set not having a hard disk. After a bit of poking about, the directory structure can be determined, and judicious use of *type, *dump and BASIC's LOAD and LIST allow us to determine some of the uses of the files:

Resources:$.Description
    !Boot.Run when the box boots normally
        !BootNetWould be used for networking booting (not used on the Surf Set)
        !RunDoes the work of booting the box
        HTML.Contains all the HTML forms used to configure the box etc.
            Dialling.Animations etc. used during dialling
            ISPcapture.Forms used to change the ISP
            MA.Various messages
            Other.Contains a hidden photo of the development staff
            Setup.Forms used in the "Options" section
        Modules.Contains additional modules which may be loaded
            IZipFSZip drive filing system
            PPADriverJZip drive driver
        PaletteDefines the colours used for the pointer etc.
        Utils.Little programs which are used by the boot process
            BootZipLoads the Zip driver if appropriate
            CheckTestService test
            EnableZipSets the printer to "Zip drive"
    Apps.The box's built-in applications
        !NCKeyBd.Displays a "soft" keyboard on screen
        !Watchdog.Ensures the system's running OK
    Resources.OS and application resources
        DiallerUI.Resources for the dialling process
        LED.Specifies the default state for the front-panel LEDs
        Modem.Resources for the built-in modem
        Monitors.Contains the MDF for PAL TVs
        NCDialCtrl.Resources for the dialler
        NCFresco.Resources for the built-in web browser
        NCOptions.Resources for the options system
        NVRAM.Contains a list of the named values in non-volatile RAM
        PassFilter.Contains a list of Easter Eggs
        PortMan.NC-style resources
        STBPrint.Printing resources/td>
        Test.Test applications
            !ModemTest.Tests the modem
            !ModTerm.Terminal program
            !TestMenu.Front-end to the test applications
            !UnitTest.Various tests on the unit's subsystem
        ...Lots of standard RISC OS 3.7 stuff

Interesting bits

Several interesting things stick out from the above list, including Zip drivers; Easter Eggs and ISP details configuration. But how do we access them? Some of the cool things which can be done with the box are below, along with a description of how and why they work. However, first things first, though: getting the box into a usable state:

Easter Eggs

"Easter Eggs" are little secrets that systems designers purposely place in the code to either access hidden functionality or as their own mark on a product. The file Resources.PassFilter.Config seems to contain a list of keys, URLs to activate on and commands to run. All the URLs are the same: file:/MAscr:connect, which works out to be !Boot.HTML.MA.connect - the box's main front page containing "World Wide Web" and "Options". One of the key sequences is "whodunnit" and typing this at the main screen does, indeed, reveal a photo of the development team. The other keys, however, are a little more interesting:

Unfortunately, however, typing "@ISPCAccessPassword" on the main page doesn't seem to do anything; however "ISPCAccessPassword" also shows up in Resources.NVRAM.Tags, and it turns out that the @-prefix is an indicator to not use that string directly, but the value locked away in the non-volatile RAM.

Changing the ISP

As mentioned above, the password to change the ISP is contained in the non-volatile (permanent) RAM. Examining !Boot.Utils.BootZip reveals how to read a value:

DIM blk% 4
SYS "XNVRAM_Read","PrinterCode",blk%,0 TO status;flags%
PRINT !blk%

A little bit of experimentation is required to determine the API, after which we find the following code will print the password (type it from a BASIC prompt, as outlined above):

DIM b% 255
SYS "XNVRAM_Read","ISPCAccessPassword",b%,255 TO s%,b$;flags%
PRINT b$

On my IBX-100, this gives a reply of 39d8sk43k2. Restarting the box normally allows this to be entered at the main screen and it does take you into the ISP configuration system, which consists of three pages:

  1. ISP name
    ISP telephone number
    User name
    Password
    Home URL
  2. ISP domain name
    Primary DNS
    Secondary DNS
    Dial script
  3. E-mail URL
    Search URL
    Time server
    HTTP proxy server
    FTP proxy server

You can change any or all of the above options: for example, I've changed the home page on mine to a customised mini-portal, but others have changed the ISP to a SurfTime (or similar) account allowing unmetered browsing through the box.

Enabling the Zip drive

The ROM contains a version of Argo's IZipFS filing system and driver for Iomega's 100MB parallel port Zip drive, so will only recognise 100MB disks, formatted with Argo's tool. These drives may now be a little hard to get hold of if you haven't already got one, however many are still available second hand. !Boot.!Run runs !Boot.Utils.BootZip and then, later, contains the line:

IfThere IZipFS:Auto Then IZipFS:Auto

Which says that if there's a file called "Auto" in the root directory of the Zip drive, run it. BootZip is where the drivers are loaded: the NVRAM-held value of "PrinterCode" is read and, if it's 999 then the two modules in !Boot.Modules are loaded.

Setting the printer code to 999 is easy, as that's exactly what !Boot.Utils.EnableZip does - so either run it directly or use the Easter Egg shortcut above: type "zipdebugging" at the main "World Wide Web" and "Options" page.

Once we've got the Zip drive up and running we can either take a copy of "Resources:$" back to a RISC OS machine for easier fiddling, or start copying stuff from another RISC OS machine to better use the box. Here, for example, is an Obey file I used during debugging - simply place it in the root directory of a Zip disk and call it Auto:

|>IZipFS::0.$.Auto
|
 
echo <22><12>
echo Welcome to Lazarus
echo
izipfs
gos

You could also RMLoad a copy of LineEditor to make editing and retyping commands easier. A slightly modified version of this Obey file is in the Zip file of related files - along with a copy of the LineEditor module, but more on that below...

Getting to the Desktop

If you've got a RISC OS 3.7 machine to act as a donor then it is possible to get a fully functioning desktop on your TV. In the related files Zip, you'll find the following directory structure:

IZipFS::0.$.Description
    AutoStarts the box at a supervisor prompt
    Magic.Contains the files necessary to start a desktop
        !CopyROS37When run on a RISC OS 3.7 machine, copies the appropriate resources into this directory
        !RunHandles the desktop boot
        !RunHandles the desktop boot
        Apps.Will contain a copy of the Zip filer
        DesktopStarts the desktop itself & starts appropriate apps
        EssentialLoads modules which are essential to getting a desktop running
        Fonts.Will contain a copy of Trinity
        Modules.Will contain a copy of various modules
        Resources.Will contain a copy of bits from Resources:$.Resources
        SuggestedLoads modules which are useful to a RISC OS box
        Utils.Various useful utilities
            DumpNVRAMSaves a copy of the NVRAM
            LineEditorMakes command lines easier to use
            MKeyModule which emulates the non-existent "Adjust" mouse button when Ctrl-S pressed
            MouseKeySource for MKey, by Leo White
            RMSaveSaves a module to disk

After unpacking the files onto a RISC OS 3.7 (others may work), simply run the !CopyROS37 Obey file and the appropriate bits will be copied into the appropriate directories. Then, Auto and Magic should be copied onto the root directory of an Argo-formatted Zip disk. Then, if the Zip drive is connected and enabled when the box is powered-up you'll be left with a supervisor prompt at which typing magic will start the Desktop.

Using the box...

Although the box doesn't have any sound hardware, the "suggested" module set includes the sound drivers as most games assume they'll be available. But now the machine's up and running at the desktop anything which runs on an A7000 should run on this, including most desktop applications; games etc. A quick list includes:

...but much, much more should be possible. It's certainly strange to be playing old BBC games on a telly again, but on a RISC OS-based set-top box running a BBC emulator!

Areas for future investigation

Although we've learnt a lot about what the box can do, there's still a lot more to investigate:

Some of these have already been discussed on comp.sys.acorn.misc, comp.sys.acorn.hardware and Alan Cox's diary. But there are still lots of unanswered questions about this flexible, cheap box - perhaps you can find the answers! ;-)