by Andrew Flegg <andrew@bleb.org>
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.
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 |
!BootNet | Would be used for networking booting (not used on the Surf Set) |
!Run | Does 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 |
IZipFS | Zip drive filing system |
PPADriverJ | Zip drive driver |
Palette | Defines the colours used for the pointer etc. |
Utils. | Little programs which are used by the boot process |
BootZip | Loads the Zip driver if appropriate |
CheckTest | Service test |
EnableZip | Sets 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 |
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" 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.
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:
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.
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...
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 |
Auto | Starts the box at a supervisor prompt |
Magic. | Contains the files necessary to start a desktop |
!CopyROS37 | When run on a RISC OS 3.7 machine, copies the appropriate resources into this directory |
!Run | Handles the desktop boot |
!Run | Handles the desktop boot |
Apps. | Will contain a copy of the Zip filer |
Desktop | Starts the desktop itself & starts appropriate apps |
Essential | Loads 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 |
Suggested | Loads modules which are useful to a RISC OS box |
Utils. | Various useful utilities |
DumpNVRAM | Saves a copy of the NVRAM |
LineEditor | Makes command lines easier to use |
MKey | Module which emulates the non-existent "Adjust" mouse button when Ctrl-S pressed |
MouseKey | Source for MKey, by Leo White |
RMSave | Saves 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.
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!
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! ;-)