Skip to content
biot edited this page Dec 15, 2014 · 39 revisions

#Architectures

Z80

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

Z180

Not yet supported. The main gap is finishing off and testing the (ex ELKS) hole based memory allocator for the Z180 style base/limit registers. In theory you could knock something up equivalent to UZI180 using the fixed bank allocator for now.

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.

6809

Core code builds with gcc 6809. No long long so would need some fiddling to get time_t right. Some work likely to be needed. Code is very tight, size is smaller than Z80.

6811K0 etc

Not yet scoped

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 (but not yet speed setting)
  • PCMCIA port
  • Printer

Unsupported

  • Sound
  • 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 (but not yet speed setting)
  • PCMCIA port
  • Printer

Unsupported

  • Sound
  • 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.....). Root fs mounts but floppy driver seems to load wrong data once we step off track 0

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

##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. MSX1 port has some experimental code to find disk ROMs but not yet any drivers for that or keyboard.

##SocZ80 (128MHz T80) The code is actually heavily built upon Will Sowerbutts port to SocZ80 but the SocZ80 bits have not been brought into line with the generic API so it does not currently run. On the TODO list to fix soon. Includes some useful support for modern things like SD card

Supported components

  • USB virtual serial
  • Real serial port
  • MMU (configured for 16K banking)
  • Serial port
  • RAM discs
  • SD card
  • Timer

Unsupported

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

##Tandy TRS80 Initial code sketched out but boot loader and floppy drivers not yet written. The Tandy has some odd memory banking limits so is probably usefully limited to singletasking mode unless a hard disk is present or one of the big third party or Z180 expanders

##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. See https://github.com/atsidaev/FUZIX/commits/master

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.

  • Memotech MTX512
  • Microbee. Only the low 32K is banked, but some options to stuff things in add on ROM
  • N8VEM Mark 1 and Mark 2: Only the low 32K is banked (but there are lots of banks)
  • TRS80 - you can only switch either the upper or lower bank externally not both, so once you add most of the big expanders that were supported you are in this class

Other possible targets that appear sufficiently capable

  • ABC806
  • Amstrad CPC series (would really need SDCC's linker to be fixed to support generating banked 16K targets for the ROM area)
  • Amstrad PCW16
  • C128+ in Z80 mode
  • Camputers Lynx
  • Coleco Adam
  • N8VEM Mark 4 (Z180)
  • 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. -- Tatung Einstein 256. This bizarre machine has 64K of RAM, and 192K of graphics RAM which is not directly CPU accessible but large chunks of which could be used for paging.

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)

#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