Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WICAT System 150

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.

Quick start

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.

Using the machines

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.

UNIX

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.

WMCS 6.0

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.

Repository layout

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

Rebuilding the disks from the media

The shipped CHDs were produced from the distribution diskettes with the tools in this repository:

  • UNIX: tools/imd2raw.py flattens the UNIPLUS diskettes, then tools/mkunixdisk.py builds 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.txt drives the system's own installer under MAME (dinit, btup, copy, then restore of the release backup volumes) using tools/autotype.lua, which types commands, swaps diskettes when the guest asks for the next volume, and answers the volume confirmation prompts.

Provenance and licensing

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.

About

WICAT System 150 (68000, 1982) under MAME: boots both UniSoft UNIX and WMCS 6.0 from installed Winchester images, with the driver patch, disk building tools and the preserved distribution media

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages