• Stars
    star
    2,160
  • Rank 21,344 (Top 0.5 %)
  • Language
    C
  • License
    Other
  • Created about 10 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

FuzixOS: Because Small Is Beautiful

FuzixOS: Because Small Is Beautiful

This is the initial public tree for the FuzixOS project. It is not yet useful although you can build and boot it and run test application code. A lot of work is needed on the utilities and libraries.

FUZIX

FUZIX is a fusion of various elements from the assorted UZI forks and branches beaten together into some kind of semi-coherent platform and then extended from V7 to somewhere in the SYS3 to SYS5.x world with bits of POSIX thrown in for good measure. Various learnings and tricks from ELKS and from OMU also got blended in

Pre-built images

Some pre-built filesystems are now available on www.fuzix.org, and other images should follow in time.

Tools

Most of the trees will build with recent tool chains for that architecture. The one exception is Z80/Z180. A modified SDCC is available in my github. This contains support for banked code that was not accepted upstream, and does not include the recent SDCC changes that totally changed the compiler ABI.

What does FUZIX have over UZI

  • Support for multiple processes in banked memory (as per UZI180) but with Minix style chmem and efficient use of bank allocations.
  • Support for multiple processes via hard disk or non mappable RAM drive switching (as per UZI, UZIX).
  • Support for "real" swapping combined with banked memory.
  • Proper sane off_t and lseek
  • Normal dev_t
  • 30 character filenames
  • Proper sane time_t
  • System 5 signals
  • Posix termios (does all the original UZI tty did but much can be added)
  • Blocking on carrier for terminals
  • Optimisations to avoid bogus uarea copying compared to UZI180
  • More modern system call API: 3 argument open, mkdir, rmdir, rename, chroot (with correct .. semantics), fchdir, fchmod, fchown, fstat, fcntl, setpgrp, sighold and friends, waitpid, setpgrp, nice O_NDELAY, O_CLOEXEC, F_SETFL, F_DUPFD etc
  • Address validation checks on all syscall copies
  • Builds with a modern ANSI C compiler (SDCC)
  • Kernel boots to userspace on 6303, 6502, 65C816, 68000, 6803, 6809, 68HC11, 8080, 8085, arm32, esp8266, MSP430 (bitrotted) and eZ80/Z80/Z180
  • Core code can be built for 6303, 6502, 65C816, 68000, 6803, 6809, 68HC11, 8080, 8085, 8086, arm32, esp8266, MSP430, pdp11, rabbit r2k/r3k and eZ80/Z80/Z180 so should be far more portable
  • Core architecture designed to support building and maintaining multiple target machines without forking each one
  • Helpers to make many bits of implementation wrappers to core code
  • Lots more bugs right now

What does UZI have over FUZIX

  • Can run in 64K of RAM (32K kernel/32K user). FUZIX needs banked ROM or similar to pull this off. If you have banked ROM then our kernel footprint in RAM is about 8K plus userspace plus any framebuffers and similar overhead. On a 6809 it's just about possible to run in a straight 64K

What do the UZI branches have that FUZIX has not yet integrated

  • Symbolic links (UZIX)
  • Various clever fusions of syscalls that may save a few bytes (UZIX)
  • setprio (UZIX)
  • Rather crude loadable drivers (UZIX)
  • Use of __naked and __asm for Z80 specific bits to avoid more .S files than are needed (UMZIX)

Plus OMU has a really clever function passing trick for open/creat and friends, while UMZIX has a neat unified "make anything" function.

What Key Features Are Missing Still

  • ptrace, most of ulimit
  • root reserved disk blocks
  • banked executables
  • TCP/IP (in progress)
  • select/poll() (in progress)
  • Support for > 32MB filesystems (but first figure out how to fsck a giant fs on a slow 8bit micro!)
  • Smarter scheduler
  • Optimisations for disk block/inode allocator (2.11BSD)

Tool Issues

  • 6809 gcc and cc65 don't have long long 64bit (for sane time_t)
  • SDCC can generate ROMmable binaries but not banked ones (hack fixes done)
  • None of the above have an O88 style common sequence compressor
  • CC65 can't handle larger objects on stack, and lacks float support
  • We need a 'proper' 65C816 C compiler
  • ACK 8080 lacks floating point support

More Repositories

1

EmulatorKit

A collection of emulators mostly of retrobrew style systems
C
142
star
2

OMU

"One Man Unix", archive of the Unix clone written (before Linus !) by the late Dr Steve Hosgood, and extended by Terry Barnaby
C
45
star
3

Fuzix-Compiler-Kit

Fuzix C Compiler Project
C
45
star
4

CC6303

A C compiler for the 6800 series processors
C
37
star
5

Centurion

An emulator in progress for the Centurion CPU6 based minicomputer
C
34
star
6

sdcc280

SDCC with Fuzix patches and Z280 work in progress
C
15
star
7

IDE

A simple IDE emulator library along with some simple tools and patches to use it
C
15
star
8

Virtual68

A simple 68K virtual platform for FUZIX bring up and similar purposes
C
13
star
9

L9X

A Level 9 game engine in very little memory
C
11
star
10

RC2014-ROM

ROM images under development for RC2014 8085 and other projects
C
11
star
11

Z180MiniITX

9
star
12

Mini11

A 68HC11 SBC for the 68HC11A CPUs
Assembly
9
star
13

V85

8085 emulator with the undocumented instructions and flags
C
9
star
14

pcc-tms9995-support

C
8
star
15

sim1750a

Simulator for MIL-STD-1750A processors
C
8
star
16

CPM8085

CP/M 3 BIOS for the RC2014 8085 systems
8
star
17

Virtual65

A simple virtual banked memory 6502 emulated platform for FUZIX debug
C
7
star
18

pcc-tms9995

ANSI pcc retarget to the TMS9995 microprocessor
C
6
star
19

ScottAdams6800

Scott Adams game player for small micros in C, plus the Tandy MC-10 (and maybe eventually FLEX) in 6800
Assembly
6
star
20

Fuzix-Bintools

Assembler, linker etc to go with the compiler
C
5
star
21

TaylorMade

Game Interpreter for later Adventure International games
C
5
star
22

CenturionTools

Warrex Centurion Tool Chain
C
4
star
23

v65c816

Virtual platform for 65c816 Fuzix development and testing
C
4
star
24

Opt85

An 8085 Optimizer For AckCC (obsolete, incomplete, ex project)
C
3
star
25

3DPrint-NonCommercial

OpenSCAD for various 3D printed model railway items, CC-NC type licensing applies
OpenSCAD
3
star
26

ViewTerm

A teletext/viewdata terminal interface using ncurses
C
1
star
27

LibTile

Some experiments in a portable tile based graphcis library
C
1
star
28

DunfieldMicroC

C
1
star