The AT&T 3B2/400 was a small, multi-user UNIX computer developed by AT&T in 1985. It was part of the larger 3B family of UNIX computers based on the Western Electric WE32000 and WE32100 series of CPUs and peripherals. What makes the 3B2 historically interesting was its use as the primary porting platform for AT&T UNIX System V Release 3.
This emulator is part of the SIMH simulation framework, and emulates a standard desktop 3B2/400 with the following devices:
- 1MB, 2MB, or 4MB of system memory
- One 720KB floppy diskette
- One or two 30MB, 72MB, 135MB, or 161MB MFM hard disk drives.
Since internals documentation for the 3B2 series are not readily available, the emulator was made possible through a reverse-engineering effort, studying the System V Release 3 source code, and lots of caffeine.
- 2018-04-11: Major fix to DMA and CONTTY serial support.
HD161are now both recognized names for the Maxtor XT1190 disk drive.
- 2017-12-27: Fix for CPU traps. The UNIX debugger
sdbshould now work correctly under System V Release 3.
- 2017-12-17: Minor compiler warning fix.
- 2017-12-16: Fixed a FIFO overflow bug in the CONTTY device.
- 2017-12-15: Critical MMU bugfix.
- 2017-12-13: Improved support for multiple hard disk drives, as well as adding support for additional hard disk geometries.
- 2017-12-09: Added support for the secondary on-board serial terminal (CONTTY).
This emulator has no known bugs, but that does not mean it is bug-free software. It is still under development as new features are added.
The following outstanding issues are not yet addressed:
- Only the Console and CONTTY serial ports are emulated so far. Support for an 8-line PORTS serial card is coming soon.
- No network card is emulated yet.
Getting the Emulator
Latest Build: Wednesday 11 April 2018
|3b2||833,032 bytes||GNU/Linux x86_64 executable
|3B2.exe||630,784 bytes||Windows XP/7/10 32-bit executable
Compiling from Source on GNU/Linux
The SIMH source repository is here:
If you would like to build the emulator on GNU/Linux yourself:
- Clone the SIMH repository above
- cd into the
The binary will be built into the
The 3B2 emulator is part of SIMH, the Computer History Simulation Project. Full documentation for the SIMH platform is availble here:
simh_doc.pdf (PDF, 400KB)
A complete description of SIMH would be much too long for this document, but in brief, it is a platform for writing and hosting computer simulators. SIMH implements a great number of simulators, of which the 3B2/400 is only one.
Below is a “Getting Started” guide to help ease you into the world of SIMH in general, and using the 3B2/400 specifically.
3B2.exe under Windows) binary is a standalone application. On Linux, all you need to do is CD into the directory where you’ve downloaded
3b2, and type
On Windows, open the
cmd.exe shell, CD into the directory where you’ve downloaded
3B2.exe, and type
In either case, you’ll be greeted with an interactive SIMH shell where you can type commands. It looks like this:
AT&T 3B2 Model 400 simulator V4.0-0 Beta git commit id: 2de2b9bd sim>
To quit at any time, just type
Any command that you can type to the SIMH
sim> prompt can be stored in a startup file, and this is generally the easiest way to do things. For example, create a file named
boot.ini, and put in the following:
set cpu 4M set cpu idle set id0 HD161 attach nvram nvram.bin attach tod tod.bin attach id0 hard_disk.img attach if floppy_disk.img attach contty 8888
When you start the 3B2 simulator, you can pass the name of this file to the program, for example under Linux
And under Windows
Let’s walk through the
boot.ini file to explain what each line means.
set cpu 4M
This sets the CPU memory to 4 MB, the maximum allowed. Other options include
set cpu idle
This enables CPU idle support. Idle support lets the emulator use less host CPU. If this line were not present, the emulator would use 100% of one host CPU core.
set id0 HD161
id0is the first hard disk (a second hard disk can be optionally attached as
id1). This tells the emulator that the hard disk is of type
HD161, a Maxtor XT1190 161MB MFM hard disk.Other options include
HD30for a 30MB hard disk, and
HD72for a 72MB hard disk. (Unless otherwise specified,
HD72is the default, because the HD72 was the largest size that AT&T originally shipped with the 3B2/400)
attach nvram nvram.bin
This creates a file named
nvram.binon disk to hold the state of the Non-Volatile RAM between boots.
attach tod tod.bin
This creates a file named
tod.binon disk to hold the state of the Time-of-Day clock between boots.
attach id0 hard_disk.img
This creates a 161MB file on disk named
hard_disk.imgto act as a virtual hard-drive.
attach if floppy_image.img
Attach a file on disk named
floppy_image.imgto the internal 720KB floppy diskette
attach contty 8888
This will enable the second on-board serial port, known as CONTTY on the 3B2. It will then listen for
telnetconnections on the host on port
8888.To access the port, you can use a terminal emulator to telnet to
8888. By default
gettyprocess, so you should be able to log in to two accounts at the same time.
Booting The 3B2
To boot the simulator, type:
sim> boot cpu
You may see several messages:
- If this is the first time you’ve booted, or if you have deleted the
nvram.binfile, you will see the message:
FW ERROR 1-01: NVRAM SANITY FAILURE DEFAULT VALUES ASSUMED IF REPEATED, CHECK THE BATTERY
This is normal, and will not be repeated.
- If this is the first time you’ve booted, and you have an unformatted hard disk image (or no disk image) attached, you will see the message:
FW ERROR 1-02: DISK SANITY FAILURE EXECUTION HALTED
Once the disk image has been formatted, or if you use a pre-built image, you should no longer see this message.
If either of these messages appear, you will be prompted with the following:
SYSTEM FAILURE: CONSULT YOUR SYSTEM ADMINISTRATION UTILITIES GUIDE
The “SYSTEM FAILURE” line is actually an invisible password prompt!
Type the default password
mcp and press Enter.
You’ll then see the following:
Enter name of program to execute [ ]:
unix and press enter.
When prompted for which option and slot to load unix from, type
0 to load from floppy disk, or type
1 to load from hard disk. Now UNIX will boot.
If you’re using one of the pre-built hard disk images, you shouldn’t even need to do this. It should boot without any user interaction. The
root user has no password, so have fun.
Exiting the Emulator
To stop SIMH at any time, type the control sequence
Control-E. This will return you to the SIMH prompt (
sim>), where you can type
Prebuilt Hard Disk and NVRAM Images
To make getting started as painless as possible, I have prepared several hard disk images with AT&T System V Release 3.2 UNIX pre-installed.
All hard-disk images are of type
HD161, to give you maximum free space.
There is also a pre-generated NVRAM image that you can use, if you wish. NVRAM is “Non-Volatile RAM”, and stores parts of the system configuration between boots.
|hd161.img.gz||4.9 MB||Full install of all 26 floppy disks making up a standard System V Release 3.2 distribution.|
|hd161_extras.img.gz||7.2 MB||Above, plus the following extras:
|hd161_blank.img.gz||164 KB||Blank 161MB disk image useful for installing fresh, or as a second hard drive.|
|nvram.bin||4 KB||Non-Volatile RAM image (optional)|
Transferring Data Between the Emulator and a Host
There are two ways to copy data in and out of the emulator. The first is using the KERMIT protocol. The second and much hackier way is to write data to an unused portion of a secondary hard disk image.
When in doubt, use Kermit. It’s cleaner and involves less risk of data loss.
Transferring via C-Kermit
KERMIT is a protocol developed for transferring data over a serial line.
Using Kermit to transfer files is fairly easy. The biggest downside is that the transfer is fairly slow, since the CONTTY serial terminal emulates a baud rate of 115,200 bps.
To use Kermit, you will need two pieces of software:
- Kermit for your host operating system
- C-Kermit for the 3B2 (below)
Kermit 95 for Windows is available here: http://www.kermitproject.org/k95.html
C-Kermit for Linux is available through most distribution’s package managers.
C-Kermit for the 3B2 is available here, on a diskette image:
|ck189.img||720 KB||C-Kermit 5A(189) compiled for SVR3.2 on the 3B2/400|
Installing Kermit on the Emulator
Attach the floppy image to the simulator with the following command:
sim> ATTACH IF ck189.img
Then, in UNIX, mount the floppy:
# mount /dev/diskette /install
# cp /install/kermit /usr/bin/kermit
Copying Data from a Host Computer to the 3B2
- Enable the CONTTY device on the 3B2. For example, to listen for connections on port 8888, you would add this to your startup file:
ATTACH CONTTY 8888
- Start Kermit on your host system.
- From C-Kermit on your host system, use the following command to connect to the CONTTY device:
C-Kermit> TELNET /NOWAIT 127.0.0.1 8888
Be sure to replace the IP address and port with the appropriate values.
- When Kermit has connected to the CONTTY device, press
Entera few times until you see a login prompt. Log in as your standard user on the 3B2.
- Now, on the 3B2, run C-Kermit, and type:
followed by the control sequence to bring you back to the host Kermit interface:
(that’s the Control key plus backslash (\), followed by the “c” key)
- You should now be back in the host Kermit session. Type:
Your file should transfer to the 3B2 at about 1200 bytes per second. Not blazingly fast, but tolerable.
Copying Data from the 3B2 to a Host Computer
This is really just the reverse procedure. You do exactly the same things, except on the 3B2 C-Kermit session, you type:
And on the Host Kermit session, you type:
Transferring via a Hard Disk image
This is really a tremendous hack, and should only be used until such time as the 3B2 emulator fully supports a tape drive emulation and/or Ethernet emulation.
On The Linux Host
- Prepare a blank hard disk image with a valid low level format, partition table, and VTOC. If you need a pre-built image, one is available below. Download the file hd72_xfer.img.gz and uncompress it.
- Prepare a cpio archive of the files you wish to transfer to the emulated 3B2. In Linux, you must remember to pass the
--format odcflag to build a compatible cpio archive, e.g.:
$ ls * | cpio -ov --format odc > example.cpio
ddto write the archive into the blank hard disk image. By passing the
seek=810flag, we skip into an unused area of the disk.
$ dd if=example.cpio of=hd72_xfer.img bs=512 seek=810 conv=notrunc
- Finally, attach the disk image under SIMH (you must do this when the 3B2 is powered down!)
sim> set id1 hd72
sim> attach id1 hd72_xfer.img
On the Simulated 3B2
Now we reverse the process on the 3B2 by using
cpio to read from the raw emulated disk, e.g.:
# dd if=/dev/rSA/disk2 skip=648 bs=512 | cpio -idv
Note that we skip 648 blocks instead of 810. That is intentional, because the first cylinder is not mapped to the
Using UNIX SVR3
If your only experience with UNIX-like systems is through modern Linux, you should be aware of a few things.
First, SVR3 is not loaded with fancy utilities like Linux. The base 3B2 installation doesn’t even come with man pages.
Second, you don’t (by default) get a backspace character. That’s not a problem with the emulator, that’s really how SVR3.2 works. If you want to delete a character, you have to type the pound / hash symbol (#). And if you want to delete the whole line and start again, you have to press the at symbol (@).
Control Character Setup
You can change these default terminal control characters to something more familiar with the
stty intr "^C" stty erase "^?" stty kill "^U"
Some terminal emulators send CTRL-H to delete a character. On such a terminal, you can use:
stty erase "^H"
To check the current values:
If you want to use the
vi editor in visual mode, you will need to define your
TERM environment variable to something that SVR3.2 recognizes. It’s generally safe to set this to vt100.
TERM=vt100 export TERM
You can put this into your
.profile file to set it automatically each time you log in.
Don’t forget to shut down cleanly. Type:
# shutdown -i0 -g0 -y
Installing SVR3.2 From Scratch
If you’re feeling particularly adventurous, you can create a new blank hard drive image and low-level format it using the IDTOOLS floppy, then proceed to install SVR3.2 from scratch.
The IDTOOLS floppy image is here:
|idtools.img||720 KB||IDTOOLS (Integrated Disk Utils) and DGMON (Diagnostic Monitor)|
Instead of attaching the hard drive image above, just attach a new file. A blank hard drive image will be created by SIMH.
Then, boot off of the
sim> attach id0 new_blank_hd.img sim> attach if0 idtools.img sim> attach nvram nvram.bin sim> boot cpu
At the “SYSTEM FAILURE” prompt, enter the password
mcp and press enter.
Then at the
Enter name of program to execute [ ]: prompt, enter
idtools, then select the floppy drive.
Once idtools is running, you’ll see the following menu:
--------------------- IDTOOLS --------------------- Floppy diskette formatter - type formflop Hard disk formatter - type formhard Hard disk verify - type verify Disk to disk copy high speed - type ddhs Disk to disk copy by sector - type dd Disk <--> mem copy - type d-m Defect table builder - type defect Write sanity track - type fixdisk Change boot defaults - type chgboot Quit - type q Command?
formhard, then select disk 0
You’ll need to know the parameters of the hard disk to format it. The following emulated hard disks are supported
|SIMH Command||Description||Drive ID||Cylinders||Tracks/Cyl||Sec/Track||Bytes/Sec|
||CDC Wren 94155-36||3||697||5||18||512|
||CDC Wren II 94156-86||5||925||9||18||512|
Below is an example session with responses for formatting a 161 MB (HD161) disk. Enter the correct responses for whichever type of disk you are formatting.
Current config table values: Drive Id: 2 - ? 11 Number cylinders: 306 - ? 1224 Number tracks/cyl: 4 - ? 15 Number sectors/track: 18 - ? 18 Number bytes/sector: 512 - ? 512
You can really just skip all the annoying bad block stuff. You’ll have to press Enter a lot.
Format entire disk - type 1
The disk image will be low-level formatted and verified, and a sanity track will be written.
I will largely leave this as an exercise for the reader. The basic procedure is to boot
unix from the first floppy disk, and then follow the prompts to install the Essential Utilities floppy disks 1 – 6. After the Essential Utilities are installed, you can reboot off the hard disk
id0 and proceed to install additional products with the
All of the SVR3.2 floppy images can be found here.
|01_Essential_Utilities_1.img||720 KB||Essential Utilities (Disk 1)|
|02_Essential_Utilities_2.img||720 KB||Essential Utilities (Disk 2)|
|03_Essential_Utilities_3.img||720 KB||Essential Utilities (Disk 3)|
|04_Essential_Utilities_4.img||720 KB||Essential Utilities (Disk 4)|
|05_Essential_Utilities_5.img||720 KB||Essential Utilities (Disk 5)|
|06_Essential_Utilities_6.img||720 KB||Essential Utilities (Disk 6)|
|07_Directory_and_File_Management.img||720 KB||Directory and File Management Utilities|
|08_User_Environment.img||720 KB||User Environment Utilities|
|09_System_Administration.img||720 KB||System Administration Utilities|
|10_Terminfo_1.img||720 KB||Terminal Info Utilities (Disk 1)|
|11_Terminfo_2.img||720 KB||Terminal Info Utilities (Disk 2)|
|12_Editing.img||720 KB||Editing Utilities|
|13_Basic_Networking_1.img||720 KB||Basic Networking Utilities UUCP (Disk 1)|
|14_Basic_Networking_2.img||720 KB||Basic Networking Utilities UUCP (Disk 2)|
|15_System_Header_Files.img||720 KB||System Header Files|
|16_Software_Generation_1.img||720 KB||Software Generation Utilities (Disk 1)|
|17_Software_Generation_2.img||720 KB||Software Generation Utilities (Disk 2)|
|18_Software_Generation_3.img||720 KB||Software Generation Utilities (Disk 3)|
|19_Software_Generation_4.img||720 KB||Software Generation Utilities (Disk 4)|
|20_Software_Generation_5.img||720 KB||Software Generation Utilities (Disk 5)|
|21_Software_Generation_6.img||720 KB||Software Generation Utilities (Disk 6)|
|22_Extended_Software_Generation.img||720 KB||Extended Software Generation Utilities|
|23_C_Programming_Language_1.img||720 KB||C Programming Language Utilities (Disk 1)|
|24_C_Programming_Language_2.img||720 KB||C Programming Language Utilities (Disk 2)|
|25_Advanced_C_Utilities.img||720 KB||Advanced C Utilities|
|26_Source_Code_Control.img||720 KB||Source Code Control Utilities|
The files below include everything required to get your AT&T 3B2 online. The Network Service Utilities are required before installing the Wollongong TCP/IP driver stack.
NOTE: These files do NOT work with the emulator (yet!) because the emulator does not emulate an NI ethernet card (yet!). They’re here in case they’re useful for your real 3B2.
|ni.img||720 KB||NI Ethernet Card Driver Version 1.1 Diskette|
|nsu_11.img||720 KB||Network Service Utilities Version 1.1 Diskette (note: for use with SVR 3.0 only)|
|nsu_32.img||720 KB||Network Service Utilities Version 3.2 Diskette (note: for use with SVR 3.2 and 3.2.2 only)|
|tcp_1.img||720 KB||Wollongong Integrated Networking WIN/3B (TCP/IP) Release 3.0.1, Disk 1|
|tcp_2.img||720 KB||Wollongong Integrated Networking WIN/3B (TCP/IP) Release 3.0.1, Disk 2|
|tcp_3.img||720 KB||Wollongong Integrated Networking WIN/3B (TCP/IP) Release 3.0.1, Disk 3|
|tcp_4.img||720 KB||Wollongong Integrated Networking WIN/3B (TCP/IP) Release 3.0.1, Disk 4|
|tcp_5.img||720 KB||Wollongong Integrated Networking WIN/3B (TCP/IP) Release 3.0.1, Disk 5|
|tcp_6.img||720 KB||Wollongong Integrated Networking WIN/3B (TCP/IP) Release 3.0.1, Disk 6|