Skip to content
EtchedPixels edited this page May 30, 2015 · 39 revisions

#Architectures

Z80

Current development target. Supports Z80 and clones with banked memory and suitable I/O devices.

Z180

Supported using the banked model. The main gap is finishing off and adding support for the (ex ELKS) hole based memory allocator for the Z180 style base/limit registers.

6502

Core code builds with cc65 (git snapshot). It's larger than the Z80 and 6809 output and it's not clear how practical a 6502 port would ever be given the 6502 limits on stack and zero pages. Disk based single resident certainly ought to be doable however given enough RAM - Superpet perhaps ! To do this properly needs either a system with movable zero pages (Commodore 128 style) or one with 64K crude banks (eg 6509). Straight 6502 with banking ought to be sufficient for a disk swapping model. The port runs sufficient for minimal user space development on the tgl6502.

6809

Builds with gcc 6809. Kernel for a test platform using xroar, and for a Dragon32 with NX memory expansion card. Userspace is fairly complete but a few apps don't work (notably /bin/sh). Standalone utilities understand how to drive big endian file systems. Code is very tight, size is smaller than Z80. With no framebuffer/font drivers probably usable on a straight 64K box with paging to hard disc (as original UZI did on Z80)

6811K0 etc

Not yet scoped

68000

Core kernel builds in a mock up format. Various functions like fast memory block swapping code need to be written before progress can be made.

TI99/4A

This has a gcc that ought to work for the 99/4A and Geneve. The Geneve had 8 x 8K pages with flexible banking and hard disks etc. However the TI is a completely different instruction set to anything mainstream

#Compilers

#Platforms ##Amstrad NC100 Initial target. Runs entirely off PCMCIA memory card. Various things like NMI handling to finish off

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.

##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 addressible 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

##N8VEM Mark IV (Z180)

The current Z180 based N8VEM 'DIY' kit board. For more information about N8VEM see http://n8vem-sbc.pbworks.com/w/page/4200908/FrontPage

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

Supported Components

  • IDE
  • SD card
  • Serial

Unsupported Components

  • ECB Bus

##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

Unsupported

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

##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)
  • Floppy controller
  • WD1010 hard disk controller
  • Serial (speed setting needs work)
  • 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.

##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.

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

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.

#System Calls The following calls are implemented

  • _exit
  • open (3 argument)
  • close
  • rename
  • mknod
  • link
  • unlink
  • read
  • write
  • lseek
  • chdir
  • sync
  • access
  • chmod
  • chown
  • stat
  • fstat
  • dup
  • getpid
  • getppid
  • getuid
  • umask
  • _getfsys
  • execve
  • _getdirent (internals for readdir)
  • setuid
  • setgid
  • time
  • stime
  • ioctl
  • brk
  • sbrk
  • fork
  • mount (no r/o mount yet)
  • umount
  • signal (not all SYS5 signalling yet supported correctly)
  • dup2
  • pause (including timed pause)
  • alarm
  • kill
  • pipe
  • getgid
  • times
  • utime
  • geteuid
  • getegid
  • chroot
  • fcntl
  • fchdir
  • fchmod
  • fchown
  • mkdir
  • rmdir
  • setpgrp (SYS5 style)
  • _uname (uname bits plus sysconf bits)
  • waitpid
  • uadmin (SYS5 style reboot etc)
  • nice
  • _sigdisp (sighold, sigrelse)
  • flock
  • getpgrp

#Signals

  • SIGHUP (minimally implemented for tty hangup)
  • SIGINT
  • SIGQUIT
  • SIGILL (not supported by most processors)
  • SIGTRAP (not supported by most processors)
  • SIGABRT/SIGIOT
  • SIGBUS (used to signal NULL scribbles)
  • SIGFPE (C library support for divison by zero)
  • SIGKILL
  • SIGUSR1
  • SIGSEGV (not supported by processors so used to signal NULL call/jumps)
  • SIGUSR2
  • SIGPIPE
  • SIGALRM
  • SIGTERM
  • SIGSTKFLT (not supported by any processors yet)
  • SIGCHLD (not yet implemented)
  • SIGCONT
  • SIGSTOP (not yet implemented)
  • SIGTSTP (not yet implemented)
  • SIGTTIN (not implemented)
  • SIGTTOU (not implemented)
  • SIGURG (not yet used for anything)
  • SIGXCPU (not implemented)
  • SIGXFSZ (not implemented)
  • SIGVTALRM (not supported)
  • SIGPROF (not supported)
  • SIGWINCH (no GUI yet)
  • SIGIO (not supported)
  • SIGPWR (not supported yet, will be relevant to things like NC100/200)
  • SIGSYS

#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