DoctorWkt / Nine-E

A Unix-like environment on an 8-bit 6809 single-board computer

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Welcome to the Nine-E project. The aim here is to create a Unix-like environment on an 8-bit computer.

On the hardware side, there is:

  • a 6809 CPU,
  • 8K of ROM,
  • 54K of RAM,
  • a UART, and
  • access to a USB key for disk storage.

On the software side:

  • the xv6 filesystem code resides in ROM,
  • the libc and include files come mostly from Fuzix,
  • the userland applications come from Fuzix, Minix 1.5 and xv6.

There is no MMU and no clock device, so there isn't any multitasking (i.e. no fork(), exec(), time(). Apart from that, what is able to work is pretty impressive.

Status -- mid-August 2023

The hardware is rock solid. I've got the xv6 filesystem in ROM and working well. I've got some of the Fuzix libc running including the mem/string functions, the stdio functions, and malloc/brk/sbrk. The rest of the libc is untested.

There are some basic programs taken from xv6, Fuzix and Minix 1.5. There is also a simple vi-like editor, a simple less-like pager, and a document processor called roff. So, with the current system, you can edit documents, process them and see the output.

There is a simple shell that knows about * and ? expansion, pipelines, and file redirection such as >, <, >> and 2>. It also has simple "readline" functionality with "tab" filename completion.

Quick Start

There should be a copy of the USB key, fs.img, already here. And, in the XV6FS dfirectory, a copy of the ROM image xv6rom. Go into the Salmi directory and do a make to make the Nine-E simulator. Now run the VROMXV6 script to start the simulator with the ROM and the filesystem:

$ ./VROMXV6 
$ ls -l
-rwxrwxrwx     1 root root    129 README
drwxrwxrwx     2 root root    464 bin
-rwxrwxrwx     1 root root   6071 roff_manual

$ head roff_manual | wc
10 21 111

$ cd bin
$ ls -l
-rwxrwxrwx     1 root root   3494 basename
-rwxrwxrwx     1 root root   5277 cal
-rwxrwxrwx     1 root root   1798 cat
-rwxrwxrwx     1 root root   5285 cksum
-rwxrwxrwx     1 root root   4537 cmp
-rwxrwxrwx     1 root root   4305 comm
-rwxrwxrwx     1 root root   6486 crc
-rwxrwxrwx     1 root root   7676 cut
-rwxrwxrwx     1 root root   1168 echo
-rwxrwxrwx     1 root root   6341 expand
-rwxrwxrwx     1 root root   8747 grep
-rwxrwxrwx     1 root root   7052 less
-rwxrwxrwx     1 root root   1630 ln
-rwxrwxrwx     1 root root   8165 ls
-rwxrwxrwx     1 root root   1653 mkdir
-rwxrwxrwx     1 root root   6479 od
-rwxrwxrwx     1 root root   2327 oldgrep
-rwxrwxrwx     1 root root   2488 oldls
-rwxrwxrwx     1 root root   3001 pwd
-rwxrwxrwx     1 root root   1647 rm
-rwxrwxrwx     1 root root   6594 roff
-rwxrwxrwx     1 root root   5626 sh
-rwxrwxrwx     1 root root   3178 try
-rwxrwxrwx     1 root root  10951 usertests
-rwxrwxrwx     1 root root  24626 vi
-rwxrwxrwx     1 root root   1930 wc

TODO

  • Test more of the libc functions.
  • Write stub functions that do nothing, or do very little, e.g. return a constant time().
  • Bring in more programs.

About

A Unix-like environment on an 8-bit 6809 single-board computer

License:BSD 3-Clause "New" or "Revised" License


Languages

Language:C 83.9%Language:Verilog 13.8%Language:Assembly 1.4%Language:Makefile 0.5%Language:Batchfile 0.2%Language:Perl 0.1%Language:Shell 0.0%