Everything needed to emulate a WICAT System 150/155 (68000, 1982) under MAME and boot its two operating systems from ready made, self booting Winchester images:
- UniSoft UNIX (the March 1982 68000 port, "WICAT UNIX SYSTEM 156"): boots from power on to a single user shell; after leaving single user it goes multiuser with getty, login and csh. Root has no password. All eight distribution diskettes are installed (root plus /usr).
- WMCS 6.0 (WICAT Multi-user Control System): boots from power on to the CIP command interpreter, installed with the system's own procedure and with the release restored from the distribution volumes.
Both boot straight into the machine: the driver patch clears the stale
MACHINE_NOT_WORKING flag (two operating systems run interactively) and
makes MAME's skip_warnings option unconditional, so no startup screen
stands between you and the terminal.
The repository contains the MAME driver patch, the disk building and filesystem tooling, the preserved distribution media, and the two installed disk images.
scripts/build-mame.sh # clones MAME 0.289, applies the patch, builds
scripts/run-unix.sh # boots UNIX in a window
scripts/run-wmcs.sh # boots WMCS 6.0 in a window
Build dependencies (Debian/Ubuntu): build-essential git python3 libsdl2-dev libsdl2-ttf-dev libfontconfig-dev qtbase5-dev. The disk
building tools additionally want chdman (package mame-tools).
Both run scripts accept --check for a headless smoke test that boots the
machine for 60 emulated seconds and verifies that the terminal screen
rendered.
Both boot straight into the machine, no startup screens. The MAME window is the WICAT terminal: click inside it and type normally. Scroll Lock toggles between typing into the machine and MAME UI keys; Esc leaves MAME.
Logging in. It boots to # and you are already root, in single user,
where there is no login yet. To reach multiuser, with the daemons running
and /usr mounted:
kill -9 $$
The 1982 shell ignores an interactive exit and init only waits for the
shell to die, which is why that is the way out. /etc/rc then runs and
:login: appears; log in as root with no password. The prompt becomes
numbered because root uses csh. The accounts are in /etc/passwd: root,
daemon, bin, guest, dup and backup, all without passwords.
Getting around.
ls ls -l /etc cd pwd cat more df du who ps a
date show the time; date 8209091200 sets it
/etc/fsck check both filesystems (they ship clean)
What is installed. The full distribution. In /bin, available even in
single user:
ar as cat cc chmod cmp cp csh date dd df diff du echo ed false grep kill
ld ln login ls mail mkdir mv nice nm od passwd pr ps pwd rm rmdir sed sh
size stty su sync tar tee test time true wall who write
In /usr/bin, once multiuser has mounted /usr:
adb at awk basename cal cb clear col comm con crypt ctags cu dc deroff
diff3 diffdir edit egrep ex expr f77 fgrep file find head join last lex
look lpq make man mesg more newgrp nroff pc printenv prof ptx ranlib
reset sleep sort split ssp strings strip sum tail touch tr tree tset tty
ul uniq units vi wc whereis whoami xstr yacc
/etc carries the administration side: fsck, mkfs, mknod, mount, umount,
dump, restore, cron, getty, init, update, diskformat, mkboot.
The ones that need a word on how to leave them: ed is the line editor
(a appends until a line holding a single dot, p prints, w writes,
q quits), vi leaves with :q! or :wq, mail ends a message with
Ctrl+D. cc file.c and f77 file.f compile, man ls reads a manual
page, cal 9 1982 prints that month.
The kernel marks every character of cooked output with even parity in bit
7 (the V6 style partab), and the terminal firmware discards those bytes,
so on an untouched kernel the shell prompt and every echoed keystroke are
invisible while kernel printf output, which bypasses the tty driver, shows
fine. The shipped disk has that bit cleared across the table by
tools/fixparity.py, leaving the low bits (per character delays) alone.
The untouched kernel is still in media/.
Safe shutdown (UNIX): type sync, wait for the prompt, type sync
again, then leave MAME (Esc or close the window). Disk writes go to a
diff/ overlay next to the scripts; deleting diff/wicat-unix.dif
returns the machine to its factory state.
Logging in. The machine boots straight to the > prompt of the CIP
command interpreter as user SYSTEM, the equivalent of root, so nothing
has to be typed to get in. logon does run and will take you to a
Username: prompt if you want to change user, and dstat reports who
you are and what the terminal is set to.
Getting around. Paths start with the device and files carry a version
number (NAME.EXT.1); leave it out and the newest is used.
dir list the current directory
dir _dc0/rootdir/ the root directory (it is called rootdir:
plain "dir _dc0/" returns error 177)
dir _dc0/sysexe/c* filter by name
dir _dc0/rootdir/ :full long listing with sizes and protections
cd _dc0/rootdir/ change directory
copy source dest copy; del file removes (asks Y or N)
crd _dc0/tests/ create a directory
fstat file owner, dates and protections
dev system devices; dstat device status
err 131 explain a WMCS error number
dump file hex dump; count file characters and lines
Devices are _dc0 (Winchester), _dx0 (floppy), _tt0 (terminal),
_null. Every command above was run on the machine before being written
here.
What is installed. The shipped image carries the complete release:
all 94 utilities and the 115 help pages, with nothing left empty.
time, who, type, sort, print, logon, shutdown and the rest
all run, and the help pages are readable as files, since there is no
help command:
type _dc0/syshlp/dir.hlp how to use DIR
type _dc0/syshlp/shutdown.hlp how to use SHUTDOWN
dir _dc0/syshlp/ all 115 of them
Safe shutdown (WMCS): use the system's own shutdown. It takes a
delay, which is required, and an optional message:
shutdown +0:1 immediate is not a thing: give it a delay
Shutdown in 1 minute, 0 seconds (Y or N)? > y
It then counts down, kills the processes and dismounts every device itself, ending in:
__NODE_DC0 Dismounted.
__NODE_NULL Dismounted.
__NODE_TT0 Dismounted.
Shutdown complete.
Once that is on screen, leave MAME. type _dc0/syshlp/shutdown.hlp has
the rest: +0:5 "To load new os" is the shape of a longer notice, and
:reboot restarts instead of halting.
Two things to expect. The confirmation only takes a lowercase y.
And it reports Creating command file useroff.com / Status = 133 / The specified file could not be found: that file is an optional per user
logout script which this image does not have, and the shutdown completes
regardless.
dmnt _dc0 :auto still works and is the way to flush the volume without
bringing the system down. State lives in diff/wicat-wmcs.dif; delete it
to return to the factory image.
patches/ MAME driver patch against tag mame0289 (BSD-3-Clause, like the
original driver it extends)
scripts/ build and run scripts
disks/ installed, self booting Winchester images (CHD, 512 byte
sectors): wicat-unix.chd (306x6x17), wicat-wmcs.chd (304x6x18)
roms/ MAME ROM sets: system ROMs (wicat.zip) and the Keytronic
keyboard controller (keytronic_l2207.zip)
media/ the preserved WICAT software collection: UniSoft UNIX
(UNIPLUS), WMCS 4.2 through 6.1, MCS 3/4, tools and brochures,
148 diskette images in ImageDisk format
tools/ filesystem readers and builders for both systems, the disk
installers, and MAME Lua automation helpers
TECHNICAL.md hardware and filesystem findings made while getting the two
systems to run
The shipped CHDs were produced from the distribution diskettes with the tools in this repository:
- UNIX:
tools/imd2raw.pyflattens the UNIPLUS diskettes, thentools/mkunixdisk.pybuilds the installed Winchester (root from volumes 1, 2, 3 and 8; /usr from volumes 4 to 7) with a native fsck clean filesystem and the boot area written by the system's own/etc/mkboot. - WMCS:
tools/cmds/wmcs-install-restore.txtdrives the system's own installer under MAME (dinit, btup, copy, then restore of the release backup volumes) usingtools/autotype.lua, which types commands, swaps diskettes when the guest asks for the next volume, and answers the volume confirmation prompts.
The code in patches/, scripts/ and tools/ is under the BSD 3-Clause
license (see LICENSE). The vintage software in media/, roms/ and
disks/ is included for preservation and emulation of long discontinued
hardware; no license is claimed over it and no affiliation with the
original vendors is implied. The media tree mirrors the WICAT collection
preserved at bitsavers.org (bits/Wicat). WICAT Systems ceased operations
decades ago; if you hold rights to any of this material and object to its
inclusion, open an issue.
Thanks to the MAME project (the driver here extends the wicat skeleton driver in MAME 0.289) and to bitsavers.org for preserving the media and documentation that made this possible.