Porting Linux to the Nintendo 64 has been the subject of April Fool's
jokes, semi-serious discussion, and "wouldn't be cool if..." remarks.
However, no one has really discussed the technical issues behind doing
this, and not many people have considered it seriously.
Well, porting Linux to N64 is not very feasible, but turning the
Nintendo 64 into a X-terminal IS possible.
Just for the hell of it, I looked up the specs for the N64, as well as
visited various N64 hack sites, to see if anything like this would be
possible at all. These are the specs I came up with.
36Mb Rambus DRAM (almost 5MB); Unified Memory Architecture, graphics
and ROM executables share this memory.
MIPS 4300i processor, instruction set is fully 4000-family compatible.
There are hacking tools that cover the creation of entire ROMs, as well
as pieced-together documentation of the N64 sound and graphics
processors
SOFTWARE:
Linux has been ported to the MIPS, including the 4000 family. The
kernel can fit in less than 2MB of RAM, and with lots of tweaking and
paring down the kernel, probably less.
A very small x-host. TinyX could serve as a base model.
Need to write drivers for graphics and sound DSPs, as well as keyboard
and mouse drivers, so that keyboard and mouse can be hooked up through
controller ports.
HARDWARE:
Cartridge to store kernel and X-host (2MB should do it, compressed; 4MB
would allow you flash the ROM with larger ROM images in the future to
"upgrade")
8MB or 16MB of flash memory to serve as cache and virtual memory. The
kernel could page to the flash memory, giving the illusion of much more
memory (flash memory is fast, so it shouldn't affect the performance too
badly) Kernel could also use as small cache for network operations.
10BaseT on cartridge. Switch available to set to hub or direct (direct
connects directly to another Ethernet card, hub connects to standard
network)
Keyboard/mouse adapters for controller ports. Plug keyb in port1, mouse
in port2, then attach standard PS/2 mice and keyboards.
Nice to add cartridge interface on Xterminal cartridge, so that N64 can
be use as console and Xterm by just plugging in game cartridge, and
swapping controllers and keyb/mouse.
BOOT SEQUENCE: (POSSIBLE)
1. Plug cartridge in.
2. kernel boots, loads drivers for keyb/mouse adapter, sound and
graphics
3. load TCP/IP support
4. find server to connect to (XDM, etc.)
5. load Xhost
6. load WM, programs from server
7. click shutdown
8. turn off power and remove cartridge
OTHER POSSIBILITIES:
You could also use bootp and tftp to load the kernel and Xhost, cutting
down on ROM needed.
NOTES:
tools provided in ROM should include a utility to write new ROM image to
ROM.
single-user only, users would log in using XDM (standard Xterm
procedure)
Basically, it would work like a standard Xterminal. Less expensive (the
cartridge with ROM, flash RAM, Ethernet chip) shouldn't cost too much
more than a new game.
Allows dual-use of home-computer. For example, I can be writing a
thesis paper on the main machine, while my brother plays a Linux games
on the N64. He can also use it to do graphics editing, writing short
papers, etc.
The TV text quality would suck of course, but in general, quality need
not be too bad. 640x480 at 16bpp (RGBA) with a virtual screen of
800x600 wouldn't be too shabby. The Xhost would need some good
text-quality algorithms, though, but if these are implemented well, text
should be 'readable'.
the N64 terminal would probably not be used as often as a real Xterm,
but still, it would give a lot of flexibility to a current 1 homePC w/
N64 setup. It would also be handy for any home network, and offer many
possibilities.
And anyways, it would ROCK if we could point to a N64 and say, "Right
now, I'm recompiling my kernel on that N64."
As far as porting and creating drivers and such, there are currently
hacking tools that allow N64 hackers to create their own games.
Therefore, basic graphics and sound information is available, making it
possible to write the needed drivers.
Any comments? Anything that would really make this impossible?
David Freeman
.sig == wasted bandwidth
hmm, just like this
post, right?
vcard.vcf < 1K Download |