Skip to content
EtchedPixels edited this page Oct 14, 2017 · 39 revisions

Architectures

Z80

The Z80 codebase supports multiple different retro and hobbyist Z80 platforms. A good minimum configuration is about 96K of RAM plus a hard disk. Banking of some kind is needed for the Z80 port. The linker has been modified so that the kernel can reside in multiple 16K banks at the same address in order to suit platforms like the Spectrum 128K. The Z80 code supports fixed banks with a common area, 16K banks, with single and multiple processes in memory. The kernel uses no undocumented instructions but the SDCC floating point libraries do, however these work fine with Z180 and Z80 FPGA clones. IEEE doubles are not supported but act instead as floats.

Z180

Supported using the banked model and the Z80 codebase. Better memory management might be possible with some kind of base/limit memory allocator (perhaps steal the ELKS one), but the current supported platforms tend to have 512K+ memory so it's a non issue at this point.

6502

The 6502 port now runs on the tgl6502 (somewhat bitrotted initial experiments), and on the v65 virtual 6502 platform. You need a reasonably modern cc65 tree to build it. Floating point is not supported and there are some other awkward compiler limits with large stack variables. The current platforms use 16K banking or fixed bank/common.A minimum of 128K RAM is recommended. Signal handling and some pre-emption features are not yet complete and parts of the build still have to be done by hand as the tooling isn't completed.

65C816

This port runs to userspace. A few things in userspace fail because of problems with cc65 assuming zero page is at memory address 0. Otherwise it has the same limits as the 6502 port.

6809

The 6809 platform supports the Tandy COCO2/Dragon 64 with cartridge, the Tandy COCO3, and some other platforms including the FPGA based 'multicomp'. The 6809 tree is built with gcc6809 and the compactness of the code means it is just about possible to run in 64K of memory with serial console.

MSP430

Somewhat bitrotted port with userspace and shell. Very tight on memory

6811K0 etc

Core kernel code built, currently putting together a 68HC811 board and developing the boot ROM for it.

68000

Currently supports single process in memory models aimed at low end SBC platforms. Able to fit under 64K and run protected on platforms that can be jumpered for low 64K protection, and makes proper use of user and supervisor modes. Work in progress to support banked, MMU and eventually 'fake MMU' setups.

8086

Core code builds with bcc toolchain, no actual porting work done yet.

PDP/11

Core code builds with gcc and some of the minimal asm bits sketched out.

Compilers

  • SDCC 3.6 (Z80)
  • gcc + lwtools (6809)
  • CC65 (6502), currentish git snapshot needed
  • GCC (68000, MSP430, 68HC11, PDP-11)
  • bcc (8086)

Platforms

Amstrad NC100

Initial target. Runs entirely off PCMCIA memory card. Various things like NMI handling to finish off. Currently slightly broken following some core changes (14 Oct 2017)

Supported components

  • LCD display panel
  • Banked memory (16K flexible banks)
  • Keyboard
  • Serial port
  • PCMCIA port
  • Printer
  • Sound

Unsupported

  • NMI (suspend/auto-poweroff)

Amstrad NC200

Runs entirely off PCMCIA memory card. Various things like power buttons to sort out

Supported components

  • LCD display panel (but not yet with the right sized fonts so you'll need a magnifier!)
  • Banked memory (16K flexible banks)
  • Keyboard
  • Serial port
  • PCMCIA port
  • Printer

Unsupported

  • Power button
  • Backlight control
  • Floppy drive

Amstrad PCW8256/8512/9256/9512/...

Obvious target. Bootloader is written to load it as a 'start of day' disc (including graphical progress bar because.....). Gets to init but then various things break. Needs a considerable amount of rework now the basic boot to user space is functional.

Dragon NX-32

Dragon with the Spinx memory and SPI board or memory and a suitable disk controller (drivewire works but is a bit slow). Very well developed port with good hardware support.

Epson PX-4plus

Sketching this out as a test case for "how small can we go". The PX-4plus has 128(120?)K of I/O addressable RAMdisc, 64K of RAM and the ability to overlay a 32K ROM pod over 0x6000-0xBFFF. At the moment this port is just the basic bits fleshed out and compiled to see how the memory map would look and whether it would fit.

There is a PX-4 emulator (and its GPL) but it's for Windows http://homepage3.nifty.com/takeda-toshiya/. Runs nicely in Wine though.

MSX

Partly sketched out. Good enough to boot an MSX emulator with a MegaRAM, find the MegaRAM and set it up, or with an MSX2 mapper. There is a rather more complete and useful MSX2 port with SD card, keyboard etc.

MTX512

Boots to full userspace under emulation.

Supported Components

  • SDX/FDX 80 column display
  • 40 column VDP display
  • Keyboard
  • SDX floppy (not FDX)
  • Silicon disc
  • Z80 DART serial ports

Unsupported Components

  • Sound
  • FDX floppy
  • Rememorizer

Multicomp 09

An FPGA based 6809 platform providing a 12MHz 6809.

Supported components SD controller UARTs MMU DS1302 RTC Drivewire

N8VEM Mark IV (Z180)

The current Z180 based N8VEM 'DIY' kit board. For more information about N8VEM see https://retrobrewcomputers.org/doku.php?id=boards:sbc:z180_mark_iv:z180_mark_iv

(The Mark1, Mark2 and Zeta v1 are not currently supported)

Supported Components

  • IDE
  • SD card
  • Serial

Unsupported Components

  • ECB Bus (except PropIO)

P112 (Z180)

A Z180 single board computer available in kit or built form: https://661.org/p112/

With 1MB RAM.

Supported Components

  • G-IDE
  • Serial
  • Floppy

Unsupported Components

  • All the rest

SocZ80 (128MHz T80)

The code is actually heavily built upon Will Sowerbutts port to SocZ80 and Fuzix now runs on SocZ80.

Supported components

  • USB virtual serial (with problems)
  • Real serial port
  • MMU (configured for 16K banking)
  • RAM discs
  • SD card
  • Timer
  • Ethernet on newer FPGA firmware (testing)

Unsupported

  • Serial speed setting with newer FPGA firmware
  • Flash memory interface

Tandy COCO2

This needs a machine with 64K RAM, cartridge and an IDE interface or the CocoSDC.

Tandy COCO3

Main 6809 platform, supports level 2 (job control, networking), drivewire, IDE etc

Tandy TRS80 Model 4/4P

Boots to full userspace under emulation (sdltrs). As there is only 128K of RAM swap is fairly essential.

Supported components

  • Text mode console
  • 128K base memory banks (no other expanders yet although they should be easy to add)
  • Floppy controller
  • WD1010 hard disk controller
  • Serial
  • RTC at 0xB0-0xBF
  • High resolution graphics card

Unsupported

  • Double sided disks
  • Single/double density detection
  • Z180 and other extended memory bankers. These would be a nice one to add given programming information

NOTE: You need a patched sdltrs to run this. The standard build has IRQ handling emulation errors and will not run Fuzix properly.

V65

A virtual 6502 platform used for development. Fuzix supports all the base features including the IDE controller.

V68

A virtual 68000 platform used for development. Currently simple single process memory management is supported along with low memory protection. Banked memory and the simple MMU are not yet supported. This port is intended to provide the basis for lower end 680x0 boards and machines. 128K of RAM is needed, but more is better to run larger software.

Z80Pack

Virtual platform by Udo Munk. This is used for development work as it is easy to reconfigure the memory layout and also to put debugging traps into the emulator.

Supported components

  • Consoles 0-2
  • Memory banking (fixed banks)
  • Virtual Floppy A, B, C, D
  • Virtual Hard Disk I
  • Virtual Hard Disk J (swap)

ZX128

Sinclair Spectrum 128 and related platforms. Requires userspace binaries built for 0x8000 base not 0x0100 base. Not quite functional, swap fails and to actually be useful will need a real disk interface.

Supported components

  • Console/Keyboard
  • Interface 1 + Microdrive
  • Generic IDE interface

Unsupported

  • Sound
  • Interface 1 serial and net
  • The various floppy interfaces
  • Spectranet, DivIDE extra memory, etc

Other Targets

There are multiple machines which allow only the low 32K to be banked (or have other effective rules that cause this limit). Some of the code for this is now in BANK32 but it needs the proof of concept finishing. In particular the uarea stash must move depending upon the program size.

  • Microbee. Only the low 32K is banked, but some options to stuff things in add on ROM

  • N8VEM Mark 1, Mark 2, Zeta v1: Only the low 32K is banked (but there are lots of banks), just usually no timers. Given a timer card on the ECB the older N8VEM should be a trivial port.

Other possible targets that appear sufficiently capable

  • ABC806
  • Amstrad CPC series (using banked ROM for the OS)
  • Apple IIc/IIe (original Apple would need cc65 banking support writing)
  • Amstrad PCW16
  • Atari 800XL etc with memory expanders (needs cc65 banking support first)
  • BBC Plus/Master (very tight even with cc65 banked)
  • C128+ in Z80 mode
  • Camputers Lynx
  • Coleco Adam
  • Newbrain
  • Sam Coupe
  • Sinclair Spectrum +2A/3 (although the banking is quite awkward)
  • Sinclair Spectrum with Interface 1/2 and banked ROM cartridge (this would need some interesting I/O drivers and probably be limited to single tasking if using microdrives as swap) (see ZX128)
  • Sord M5
  • Some of the Sharp MZ systems as supported in MZIX.
  • Later Thompson DCM series machines (mostly sold in France). This would be a difficult port due to the small banked memory window
  • Tandy MC10 with MCX128 expander (6803 - so would also need a compiler!)

Probably a few others too.

File System

The file system is based upon the UZI file system but has been extended to 30 character filenames and the superblock has an 'epoch' base to allow for time beyond 2038 in a window.

Tools

The standalone tools provided are

  • Chmem - set the memory slot for a binary
  • Fsck - fsck a Fuzix fs
  • Mkfs - Make a Fuzix fs
  • Ucp - A tool for building and modifying Fuzix file systems. Really wants replacing with a script parsing tool that assembles a file system from a recipe