Fortune 32:16

There was one of these in the Computer Science lab where I hung out playing with the DG.

Documents on bitsavers.

Basic machine specs are a 6 MHz 68000 and 256 kB RAM.

Disk Images

Disks are 80 tracks of five 1024-byte sectors each side. I wrote some code which operates on a binary image and reads the basic file system.

I kind-of cheated by looking through the disk images and finding some source code on the DEVTOOLS disk, file ino.h.

struct INODE {
  UINT16 mode;
  UINT16 links;
  UINT16 uid;
  UINT16 gid;
  UINT32 size;
  UINT8  addr[40]; /* In threes */
  UINT32 time1, time2, time3;
} *inode;

struct DIR
{
  UINT8 foo;
  UINT8 inode;
  char filename[14];
} *dir;
Block addresses start at cylinder 1 (cylinder 0 is reserved, looks like).
in mode   size   block1 filename
02 41FF 00000060 000011 .
02 41FF 00000060 000011 ..
66 81B4 0000009D 000012 __vol1__
65 41FF 00000030 000013 m
63 816D 00000F16 000015 ds.maint
62 41FF 00000050 000019 usr
Reading the usr directory using
dir = &disk.byte[BLOCK_TO_ADDRESS(0x19)];

in mode   size   block1 filename
62 41FF 00000050 000019 .
02 41FF 00000060 000011 ..
61 41FF 000000D0 00001A bin
5D 41FF 00000130 00005A lib
44 41FF 00000270 000262 include
Seems to work.

From a reverse-engineering point-of-view, the Diagnostics disk is probably the most interesting. It contains a stand-alone boot environment as well as a file system, although the inodes start on cylinder 7 -- the first six cylinders are reserved on a bootable disk, maybe?

(Later. I compared the first sector of LDEVTOOL.BIN to that of DIAGS.BIN. LDEVTOOL byte 0x5d = 0x0A = 10 and DIAGS.BIN byte 0x5d = 0x3c = 60. Coincidence? I think not. Software updated.)

root directory at inode 0x02, block address = 00000010, byte address = 00013000
in mode   size   block1 filename   address in image
02 41FF 00000130 000010 .          00013000
02 41FF 00000130 000010 ..         00013000
66 81B6 00000187 000011 README     00013400
65 8124 00008AAC 000012 coma       00013800
64 8124 0000524D 000036 coma.doc   0001C800
63 81F8 00016E20 00004C comb       00022000
62 81ED 0000277C 0000A9 crt        00039400
61 81B6 000128DB 0000B3 doc.comb   0003BC00
60 81B6 000158F6 0000FF doc.pio    0004EC00
5F 8124 00005724 000157 fdtest     00064C00
5E 8124 000098B8 00016E hdtest     0006A800
5D 81B6 0000609B 000196 hdtest.doc 00074800
5C 81ED 00006434 0001B0 kbd        0007B000
5B 8124 00007270 0001CB kbtest     00081C00
5A 8124 00002E54 0001E9 mem        00089400
59 81F8 00003AE0 0001F6 memlow     0008C800
58 8124 000027B0 000206 mmu        00090800
57 81F8 0000BD4C 000210 pio        00093000
56 81ED 00000B88 000241 prt        0009F400

So here's the README file:

Files in this directory:

Stand alone objects:
  coma  1.6  3/5/83
  fdtest  2.7.1.1  3/4/83
  hdtest  2.15 3/4/83
  kbtest  2.2  3/4/83
  mem  1.4  3/4/83
  mmu  2.2  3/4/83
  
Objects that run under UNIX:
  crt  1.5  3/4/83
  prt  1.2  3/4/83
  kbd  1.2  3/4/83
  
Documentation files:
  README  this file
  coma.doc 1.3  1/17/82
  hdtest.doc 1.1  11/14/83
  doc.comb 1.1  11/14/83
  doc.pio  1.1  11/14/83

I ran the UNIX strings on the diagnostic disk and found interesting things.

coma mentions a DART, which is the Z-80 name for a dual UART.

comb tests a completely different kettle of fish, and it looks as if it passes Intel hex records to the embedded Z-80.

 1 - Test 1.1 - Self-Test Execution
 2 - Test 1.2 - Interface Registers
 3 - Test 1.3 - Dual-Port Ram Test w/o Refresh
 4 - Test 1.4 - Dual-Port Ram Parity Logic
 5 - Test 1.5 - Z-80 Instruction Execution
 6 - Test 1.6 - Dual-Port Ram Test with Refresh
 7 - Test 1.7 - Z-80 NMI Logic
 8 - Test 1.8 - Dual-Port Ram Memory Fading
 9 - Test 2.1 - Z-80 I/O Address Bus
 a - Test 2.2 - Z-80 Memory Address Bus
 b - Test 2.3 - Dual-Port Ram Test with CLB Accesses
 c - Test 2.4 - Interrupt Handshake Logic
 d - Test 2.5 - CTC and SIO Logic

fdtest gives away very little (looks like four floppies are supported) and so does hdtest (the documentation mentions Western Digital and Xebec).

(Later: Oooh look. It's a WD1001-CLB.)

Drive Type options list:
	A10	- Seagate 10 Megabyte (ST412)
	B05	- Miniscribe 5 Megabyte 
	B10	- Miniscribe 10 Megabyte
	C20	- Ampex 20 Megabyte
	G25	- Atasi 25 Megabyte
	H25	- Evotec 25 Megabyte
	I20	- Disctron 20 Megabyte
	J20	- CDC 20 Megabyte
	J30	- CDC 30 Megabyte
	K40	- Maxtor 40 Megabyte
	K50	- Maxtor 50 Megabyte
	Z05	- Seagate 5 Megabyte (ST506)
	OTHER	- (Use the 'init' command to select device)

Update 2020-01-01: I found Fritz Hohl's 2016 blog post which gives a lot more information on the Fortune 32:16. Even better are John Bass' recent comments on that blog post, giving a lot of insight into the company as well as the hardware.


[Image] Hit Count
hits since 2015-10-15.

Back to Wouter's Page (This page last modified 2020-06-14)