teco & microEMACS


XXDP is a very basic operating system, and a collection of diagnostic programs for PDP-11.

manual: http://www.dunnington.u-net.com/public/PDP-11/

software: ftp://sunsite.unc.edu/pub/academic/computer-science/history/pdp-11/xxdp/

The main uses I have for this package are the utilities ZRQCH0, the formatter for the RQDX3 MFM hard drive controller, and also ZRQAH0, the disk exerciser.

I figured out how to snapshot a memory image of zrqch0 and zrqah0 that can be booted via VTserver (see how below), so you can format disks on a system that has nothing but a CPU, RQDX3, and a hard drive. Here is the .vtrc file. You will also need the 2.11BSD boot.dd.

Here also is a hacked version of zqrch0, called zrqch1, which believes that the Maxtor XT1140 is an RD54. The differences are that the 1140 has 918 tracks instead of 1225, and it makes a different clicking noise, which might indicate that the 2190 has a faster positioning mechanism. (Or it could simply be that the 2190 is mounted properly, and the 1140 is sitting on top of it).

I did more than simply change the number of tracks -- I recalculated the number of replacement blocks, the table sizes, etc. RQDX3, disklabel, 2.11BSD, and fsck all seem to be content so far.

I will try this stunt on an ST4096 next. If my theory proves out, I'll try to reduce the hack to formulas and publish it here. Right now there is still a bit of guess work involved. (P.S. -- it didn't work with the ST4096; the drive hung for some reason. I assume there is some control incompatibility unrelated to geometry.)

BTW -- keep your Maxtor drives cool. They must have forced air flow, or they will overheat and start getting errors. They do OK in a BA23, but sitting in still, open air, they get too hot.

The format of a DEC hard drive is rather complex. The only info I've ever found explaining it is this patent: 4,434,487, and a table in the back of the RQDX3 manual. A primary benefit of the patent is that it defines the TLAs's, and explains the function of each area. The RQDX3 only implements a subset of the technique explained in the patent.

I did a hex dump of ZRQCH0, found the drive table, and decoded it. The results are in these text files in hex and decimal, and a spreadsheet. The second text file has a couple of the patches worked out below the table. This is work in progress, but I'll put it here if anyone is determined enough to take it further.

The addresses in the dump are relative to the zrqch0 file.

Here also is zrqbc1 for the RQDX1. I have not tried it.


Sometimes you want to format a drive on a system that does not yet have a working operating system, or perhaps it does not have a floppy drive. You can hack an XXDP program so that you can download it using VTserver. Here's how you do it:

Get a copy of the XXDP disk. Setup the Ersatz-11 (E11) emulator to boot from this disk image. Once you're running the XXDP operating system, type "bootsm" to boot into the small model.




Next, run the program, for example, "r zrqch0". You should see a display like this:


RQDX3 Disk Formatter Utility
UNIT IS Formattable Winchester (RDnn) or Floppy (RX33) Drives
RSTRT ADR 145702

Write down the restart address, in this case, 145702.

At this point, hit Alt-Enter to break back to the E11 console. Now save an image of the entire first 56K: "dump zrqch0 0:157777". This will save a file called zrqch0.pdp.

In order to make this downloadable, a header has to be added. Start with this file: header. Here is an "od" of the header:

0000000: 000407 000000 160000 000000 000000 145702 000000 000001

Add this to the beginning of the file you saved: "cat header zrqch0.pcp >tmp". (I have Cygwin, which allows me to use UNIX-like commands on my PC -- highly recommended) .

Now go back to E11. We will use E11 to load the program back into emulated PDP-11 memory, make a  patch, and write it out again. You could use any binary editor, but E11 is still running, and it does octal editing, so we'll use that. (If the start address is 145702, the header is already correct, and you don't have to do this, just rename the file.)

E11> load tmp.            Note the ".", otherwise E11 assumes an extension of ".pdp".
E11>e 0 22                dump out header to check things
000000/ 000407
000002/ 000000
000004/ 160000
000006/ 000000
000010/ 000000
000012/ 145702
000014/ 000000
000016/ 000001
000020/ 000002
000022/ 004704
E11>d 12 145702          
patch the "start address" that you wrote down before into the header
E11>e 0 22               
check once more
000000/ 000407
000002/ 000000
000004/ 160000
000006/ 000000
000010/ 000000
000012/ 145702
000014/ 000000
000016/ 000001
000020/ 000002
000022/ 004704
E11>dump zrqch0.           
save the result

Here is the definition of the header for reference:

* Header prepended to each a.out file.
struct exec
  int a_magic; /* magic number */
  unsigned int a_text;    /* size of text segment */
  unsigned int a_data;    /* size of initialized data */
  unsigned int a_bss;     /* size of uninitialized data */
  unsigned int a_syms;    /* size of symbol table */
  unsigned int a_entry;   /* entry point */
  unsigned int a_unused;  /* not used */
  unsigned int a_flag;    /* relocation info stripped */


Some of these fields are don't cares to the boot loader. 

The file "zrqch0" can now be bootstrapped via VTserver. It will start up right where it left off on the emulator, at the DR> prompt. The first thing you need to do is type "START", then follow the procedure.

I've only tried this with a couple of the RQDX3 utilities. Your mileage may vary.

You can also move the modified zqrch0 to the root directory of a 2.11BSD or 2.9BSD system. You can boot from these programs instead of unix:

73Boot from ra(0,0,0) at 0172150
: ra(0,0,0)zrqch0

I use this shortcut when I'm using my 11/83 to check out a new drive installed as disk 2.


Thanks to Michael Davidson for helping me to get this header business right.


Other resources:



Last modified: December 31, 2009