Tuesday, July 13, 2021

RSX11D V4 recovered

  Before there was RSX11M+, there was RSX11M. It wasn't all that different, really, just...less capable. Most of the innards were all basically the same, mostly...just less of them. But before RSX11M, there was RSX11D (let's forget IAS just for the moment). RSX11D on the surface was a lot like RSX11M - same commands, same file structures, most of the same system calls. But under the hatches, there were some major differences (the biggest being the device IO architecture).

  Not many folks around these days have ever worked with RSX11D, and apparently not a lot of it survives. I have been looking for a runnable copy of it for decades now. I had started to think it was gone for good.  A while back, though, James Fehlinger got ahold of some RSX11D V6.2 tapes (the last version released). They were not in good shape,  and  he did a whole lot of analysis and recovery to get them into useable condition (a whole heckuva lot of work - some of it really inspired. He's a guy that doesn't take fail for an answer). His work on this is available at Bitsavers, at

http://bitsavers.org/bits/DEC/pdp11/simh_images

  So, it's great to have runnable RSX11D V6.2 available. I  have a few hobby projects planned for it already. If you ever had any interest in RSX11D, I recommend you check it out. But that's not what I'm writin' about today. A few months back. I spotted several Ebay auctions for the contents of a former DEC engineer's basement computer collection (sadly, he was deceased - at least his relatives were making his collection available, instead of heaving it all into a dumpster).  One of the items listed was an RK05 disk, whose labels indicated it might have a bootable RSX11D V4 system on it.

  I bought it, and asked around online, looking for someone who had a working RK05. Fritz Mueller replied that he had one, connected to an 11/45, and could try to read it for me. The Great Magnet smiled on his efforts (all energy flows according to the whims of the Great Magnet), and the decades old disk read flawlessly.  He copied it to an image file (at the cost of some effort getting it transferred off the 11/45 - thanks again Fritz)  and emailed it to me.

  So, flush with optimism due to the good progress so far, I mounted a copy of the disk image in SIMH and tried to boot it. No soap...it hung in a loop when I attempted to boot it. Halting SIMH and single stepping it  showed that it was looping on a few instructions, doing...something...with some RK11 registers. Fritz tried to boot the physical pack on his 11/45, but, no joy there either. He actually disassembled a goodly slug of the boot code on the pack, which was a bit of a self modifying mess, but, we didn't get the problem figured out enough to make the boot succeed.

  This was disappointing. I was starting to think this was going to be a failed computer archaeology project. I had another look at the loop that it executed, and saw that it was looping, waiting for something to happen. If that thing ever happened, it would get to location 164 and take off. I figured, waddahell, let's pretend what it was waiting for occurred, and set the PC  to 164 and go from there. When I did that, the rest of the boot worked, and I was presented with a working  RSX11D V4 system!


  UPDATE - This boot problem has since been  analyzed and patched - please see blog entry titled

 "RSX11D V4 boot problem update"

  for the explanation of the problem and a new version with the patch.


  RSX11D V4 is missing a lot of things we take for granted in the later members of the RSX family, so it's mostly of historical interest (the worst lack I've found, is that it doesn't have any form of RMD or DEMO - the memory usage display that helps RSX system programmers while away the idle hours). But, at least it hasn't been lost like so many other pieces of DEC software, and it's interesting to explore it and see where things came from.

  Here's a simh disk image and a pdp11.ini file for it.


rsx11dv4.dsk


pdp11.ini


  Here's a look at the loop problem, and how to get past it.



C:\simh40\PDP11\rsx11dpack>pdp11

PDP-11 simulator V4.0-0 Current git commit id: ab3e07a4
Disabling XQ
sim>boot
(CTRL-e)
Simulation stopped, PC: 000152 (BPL 140)
sim> s

Step expired, PC: 000140 (MOV #2,@#177406)
sim> s

Step expired, PC: 000146 (TST @#177404)
sim> s

Step expired, PC: 000152 (BPL 140)
sim> s

Step expired, PC: 000140 (MOV #2,@#177406)
sim> s

Step expired, PC: 000146 (TST @#177404)

sim> e -m 140:200
140: MOV #2,@#177406
146: TST @#177404
152: BPL 140
154: BIT #2000,@#177402
162: BEQ 0
164: MOV #77406,@#177600
172: MOV #1027,@#177640
200: MOV #144340,-(SP)

sim> g 164


RSX-004A

MCR>MOU DK:
MOUNT-**VOLUME INFORMATION**
DEVICE =DK0
CLASS =FILE 11
LABEL =RSXSYS
UIC =[1,1]
ACCESS =[RWED,RWED,RWED,RWED]
CHARAC =[]

  Above is the version banner and the automount of the system disk that occurs at boot time.

  Here's a few command examples.

MCR>PIP /LI


DIRECTORY DK0:[200,200]
 1-MAY-75 14:11

HCR.OLB;1           59.     C  30-APR-75 15:48
Z.OBJ;1             1.         01-MAY-75 13:56



MCR>ACT /ALL
DK.... STS W0 250 000 000 020 003 000 065000 000000 000000
 REGS 174000 000262 002436 000010 000000 000001 002200 150000 000246
TT.... STS W0 248 000 000 100 004 000 352200 000000 000000
 REGS 174000 007772 002070 000020 000000 120100 001770 000001 000230
LP.... STS W0 248 000 000 020 002 000 112200 000000 000000
 REGS 174000 000324 002104 000001 000000 000001 000000 002120 000100
DT.... STS W0 248 000 000 020 002 000 120700 000010 000000
 REGS 174000 001114 000366 000000 000000 000000 001000 147600 000250
HY.... STS W0 246 000 000 020 000 000 124500 000040 000000
 REGS 174000 000522 006724 000002 000000 120500 000000 000041 000500
...ACT STS RN 221 000 000 020 000 000 102500 000001 000000
 REGS 174000 001146 000016 000006 000000 000202 000000 000000 000076
MO.... STS W0 100 000 000 020 000 000 115300 000000 140000
 REGS 174000 001432 124340 000001 000000 000001 000000 000000 000120

MCR>TIM
 05/01/75 14:12:05

MCR>DEV
  TT0   **
  CI0   TT0
  CO0   TT0
  CL0   TT0
  MO0   **
  HY0   **
  PP0
  PR0
  MT0
  DT1   **
  DT0   **
  CR0
  LP0   **
  DP0
  DF0
  DK1   **
  DK0   ** MOUNTED
  SY0   DK0

MCR>TAS
ALLOCR 11 GEN 050 003400 DK 0-00000004550
BPR... V001A GEN 050 007700 DK 0-00000006363
CR.... V004A GEN 248 003500 DK 0-00000004653
DK.... V003F SYDISK 248 003000 DK 0-00000004671
DT.... V005A GEN 248 003600 DK 0-00000004723
HCRCHK RSX03A GEN 050 071400 DK 0-00000007647
HY.... V002A GEN 246 007600 DK 0-00000007156
LKD RSX03A GEN 050 076500 DK 0-00000007744
LP.... V003E GEN 248 003100 DK 0-00000004732
MO.... V003F GEN 100 003400 DK 0-00000005014
PP.... V003F GEN 248 003100 DK 0-00000004706
PRT... 03 GEN 250 003700 DK 0-00000003775
PR.... V003F GEN 248 003000 DK 0-00000004715
SG2... V001A GEN 230 025300 DK 0-00000007024
TTYN00 GEN 051 001400 DK 0-00000005702
TT.... V003F TTY 248 011600 DK 0-00000004770
.FL000 V003A FILE 248 012500 DK 0-00000004464 FIXED
.FL007 V003A GEN 250 004700 DK 0-00000004502
.FL100 V002A MCR 247 004100 DK 0-00000004512
.FL200 10 MCRDSP 250 003200 DK 0-00000004522
.FL300 V002A GEN 240 011500 DK 0-00000004557
.TKTN. V002A GEN 249 002300 DK 0-00000004241
...ABO V002A MCR 221 001700 DK 0-00000004004
...ACT V002A MCR 221 002200 DK 0-00000004011
...ALT V002A MCR 221 002000 DK 0-00000004017
...BAT 01 GEN 020 022700 DK 0-00000006266
...CAN V002A MCR 221 001400 DK 0-00000004024
...COM V001A MCR 221 002100 DK 0-00000004041
...CON V004A GEN 050 004400 DK 0-00000004370
...DCU V003A GEN 050 013500 DK 0-00000004531
...DEV V001A MCR 221 001400 DK 0-00000004047
...DIS V002A MCR 221 001600 DK 0-00000004054
...DMO V002A GEN 050 003100 DK 0-00000004446
...DMP D04 GEN 050 025200 DK 0-00000002246
...EDI V004C GEN 050 056000 DK 0-00000005147
...ENA V002A MCR 221 001500 DK 0-00000004061
...FIX V002A MCR 221 002400 DK 0-00000004074
...FLX V003F GEN 050 052700 DK 0-00000002376
...FTN V0804 GEN 050 060200 DK 0-00000001773
...IHI V001A GEN 050 072500 DK 0-00000007512
...INI V002A GEN 050 015500 DK 0-00000004411
...INS V004A GEN 050 030000 DK 0-00000004261
...LBR 001 GEN 050 057000 DK 0-00000002531
...LOA V002A MCR 221 002700 DK 0-00000004102
...LUN V001A MCR 221 003600 DK 0-00000004110
...MAC 05.01 GEN 050 126400 DK 0-00000003104
...MCP V002A MCR 221 001100 DK 0-00000004117
...MCR V001A MCRDSP 221 002000 DK 0-00000004124
...MOU V004A GEN 050 010600 DK 0-00000004432
...OPE V002A MCR 221 004000 DK 0-00000004131
...PAR V001A MCR 221 001300 DK 0-00000004140
...PIP D13 GEN 050 042700 DK 0-00000002200
...REA V003A MCR 221 003300 DK 0-00000004146
...RED V003A MCR 221 002000 DK 0-00000004155
...REM V004A GEN 050 025200 DK 0-00000004337
...RUN V004A MCR 221 003400 DK 0-00000004400
...SAV V002A MCR 221 003600 DK 0-00000004176
...SET V004A MCR 221 001500 DK 0-00000004213
...TAS V003A MCR 221 002300 DK 0-00000004226
...TIM V003A MCR 221 002000 DK 0-00000004234
...TKB 08 GEN 050 150200 DK 0-00000003553
...UFD V002A GEN 050 003700 DK 0-00000004455
...UNF V002A MCR 221 001500 DK 0-00000004247
...UNL V003F MCR 221 002000 DK 0-00000004254
...VFY D05 GEN 050 034500 DK 0-00000002277
MCR>