• Please review our updated Terms and Rules here

PDP-11/04 restoration

Will one of you kind people please explain to me how to read Mattis' logic analyzer output above?

Thanks!

Jack
Which of them?
The first show the interrupt sequence of the PDP-11 when using a working DL11-W card. I.e interrupts working as intended. The second show the failing 7408 gate on the DL11-W card.
The last four shows from left to right / from top to bottom: The sequence of writing 16 bits of data from the computer to the drive. The data is the characters "AB".
It also show when it is trying (but failing since a 74179 was broken) to generate the correct CRC sum. The CRC is 16 bits so the total is 32 bits. CRC is the data outputs of the CRC shift register which is a feedback shift register.
WRITED is the data shifted out from the data buffer in the TU60 to be written to the tape. The LSB is to the left. The first char is then hex 41, the second hex 42. But when writing the LSB is written first, which means that the data pattern written is 10000010 01000010 (WRITD is active low).
The CLK is the generated clock signal that drive all operations when writing.
GO is an active high signal that indicate that the drive is executing a command. READ D is the signal from the read circuits. It also reads when writing. But this signal is gated when writing so it will not enter the CRC circuit.
Each of the four screenshots show the processing of eight bits.
 
Cool info. I assume you know that for documentation purposes you can print screen to disk on the logic analyzer (or FTP a copy of the screen if you have the Ethernet option) and then you would have a clearer and smaller file to post instead taking a photo of the screen. Although taking a photo might be the quicker method.
 
Cool info. I assume you know that for documentation purposes you can print screen to disk on the logic analyzer (or FTP a copy of the screen if you have the Ethernet option) and then you would have a clearer and smaller file to post instead taking a photo of the screen. Although taking a photo might be the quicker method.
I have seen that possibility, but I have presently no running computer with 3.5" floppy disk connected. There is a guy that has made a small PIC based PCB that emulates a IEEE488 drive with a SD card. I am about to solder it together and use it instead. Until then I have to stay with this old fashioned hardcopy method...
 
Mattis,

AHA! Once I better understood the bit ordering and spent enough time with the TU60 manual to realize I was looking at phase encoding, things became much clearer. Now back to the manual and schematics to untangle the CRC process.

As always, thanks to all of you on the forum for sharing your knowledge and experience!

Jack

BTW, please tell us more about the GPIB-SD project.
 
Mattis,

AHA! Once I better understood the bit ordering and spent enough time with the TU60 manual to realize I was looking at phase encoding, things became much clearer. Now back to the manual and schematics to untangle the CRC process.

As always, thanks to all of you on the forum for sharing your knowledge and experience!

Jack

BTW, please tell us more about the GPIB-SD project.
Can't say I fully understand what is in each captured screen
but I still find it fascinating. Yes, please tell us more of this SD project.
 
I wasn't aware that the HP 166x series logic analyzers could use an HPIB disk drive. I thought they could only connect to a GPIB controller or printer. Let us know what you find.
 
I wasn't aware that the HP 166x series logic analyzers could use an HPIB disk drive. I thought they could only connect to a GPIB controller or printer. Let us know what you find.
Initially I bought this HPIB PCB to use with a HP9000/310 computer that I have. I thought it could be used with the HP1664A as well. Maybe it isn't? I had the impression it did since the HP1630 seems to be capable to do it. But I cannot find anything in the manual about HPIB disks so I guess you're right! I guess that then my only option then to put together my old computer with a 3.5" drive or continue using a camera.
 
Mattis,
BTW, please tell us more about the GPIB-SD project.
Well, there is a this guy, Anders, that announced this project on a Swedish forum site. I looked at his website and found it very interesting since I have a couple of HP9835/HP9845 calculators as well as a HP9000/310 computer. He had a spare PCB board that he sold me cheap. So now I have to populate it with ICs and discrete components. Then I also wrongly thought I could make use of it with my Logic Analyzer. But apparently HP removed that feature in later models of their analyzers.
 
New rubber on the drive spindle

New rubber on the drive spindle

Ok, with a little help from my friends a was able to locate new rubber for the drive spindles. Both of them. I now have ran ZTABC0, ZTADC0 and ZTAEB0 diagnostics. The first two run fairly well. But the last one doesn't even start. It just sits there forever until I hit INIT. The thing is that the documentation for ZTAE?? is for the C0 version rather than the B0 version that I have here. Is there a bug somewhere?

Code:
@
007574 006574 006774 170617
@DD
CLEARING MEMORY
CHMDDA0 XXDP+ DD MONITOR  8K
BOOTED VIA UNIT 0

ENTER DATE (DD-MMM-YY):

RESTART ADDR:033726
50 HZ? N   Y

LSI?   N

THIS IS XXDP+.  TYPE  "H" OR "H/L" FOR DETAILS
.D

ENTRY#  FILNAM.EXT        DATE          LENGTH  START

000001  HMDDA1.SYS      22-MAR-80         17    000050
000002  HDDDA1.SYS      22-MAR-80          3    000071
000003  HUDIA0.SYS      22-MAR-80          6    000074
000004  UPD1  .BIN      22-MAR-80         12    000102
000005  UPD2  .BIN      22-MAR-80         16    000116
000006  HELP  .TXT      22-MAR-80         26    000136
000007  HSAAA0.SYS      22-MAR-80         24    000170
000010  SETUP .BIN      22-MAR-80         26    000220
000011  GKAAA0.BIC       1-MAR-89         14    000252
000012  GKABC0.BIC       1-MAR-89         15    000270
000013  ZTAAC0.BIN      11-AUG-76         16    000307
000014  ZTABC0.BIN      11-AUG-76         17    000327
000015  ZTACC0.BIN      11-AUG-76         13    000350
000016  ZTADC0.BIN      11-AUG-76         16    000365
000017  ZTAEB0.BIN      11-AUG-76         13    000405
000020  ZTAFC0.BIN      11-AUG-76          2    000422
000021  ZTAHA0.BIN      11-AUG-76          6    000424
000022  ZKLAE0.BIC      11-AUG-76         14    000432
000023  ZDLAF1.BIN      12-MAR-77         17    000450
000024  ZDLBB0.BIN      11-AUG-76         16    000471
000025  ZDLCA0.BIC      11-AUG-76         19    000511
000026  ZDLDA1.BIC      29-JAN-77         19    000534
000027  ZDLOC0.BIN      17-AUG-76          4    000557
000030  ZKWKA1.BIC      29-JAN-77         27    000563

.R ZTABC0

MAINDEC-11-DZTAB-C

SWR = 000000  NEW =

TESTING DRIVE A
|
END PASS
TESTING DRIVE B
`
END PASS
TESTING DRIVE A
`
DATA PROBLEM
PC      TACS    EXPECT  RCV'D
010470  000004  000377  000122

x
END PASS
TESTING DRIVE B
`
END PASS
TESTING DRIVE A
`
000000 177500 001056 016632
@DD
CLEARING MEMORY
CHMDDA0 XXDP+ DD MONITOR  8K
BOOTED VIA UNIT 0

ENTER DATE (DD-MMM-YY):

RESTART ADDR:033726
50 HZ? N   Y

LSI?   N

THIS IS XXDP+.  TYPE  "H" OR "H/L" FOR DETAILS

.R ZTAEB0

MAINDEC-11-DZTAE-B

SWR = 000000  NEW =

 DRIVE A AND DRIVE B WILL BE TESTED
*** FORMAT *** DRIVE A

001612 000000 001056 011646
@DD
CLEARING MEMORY
CHMDDA0 XXDP+ DD MONITOR  8K
BOOTED VIA UNIT 0

ENTER DATE (DD-MMM-YY):

RESTART ADDR:033726
50 HZ? N   Y

LSI?   N

THIS IS XXDP+.  TYPE  "H" OR "H/L" FOR DETAILS
.R ZTADC0

MAINDEC-11-DZTAD-C

SWR = 000000  NEW =

TESTING DRIVE A AND DRIVE B
WRITE-FILE-GAP
IMPROPER FLAG OCCURRED
TEST    ERROR
PC      PC      TACS    TADB
005636  010562  120140  000017


END PASS
TESTING DRIVE B AND DRIVE A
READ
SHORT RECORD
TEST    ERROR                   BYTES
PC      PC      TACS    TADB    LEFT
004742  011204  140144  000350  000006


BUFFER COMPARE
BAD DATA READ
TEST    ERROR           EXPT'D  RCV'D   BYTE
PC      PC      TACS    DATA    DATA    NUMBER
004746  010512  140144  000314  000357  000001


END PASS
TESTING DRIVE A AND DRIVE B
END PASS
TESTING DRIVE B AND DRIVE A
END PASS
TESTING DRIVE A AND DRIVE B
END PASS
TESTING DRIVE B AND DRIVE A
END PASS
TESTING DRIVE A AND DRIVE B
END PASS
TESTING DRIVE B AND DRIVE A

Then the next trouble with suitable media. I only have two original DEC cassette tapes. Then I got some NCR tapes from a guy i Morocco. Apparently they have been stored in the desert for very long time so the lubricants vapored away. The Verbatim cassettes from a guy in Germany was doing quite well. Although I have problem with the pressure pad that is made from some kind of foam which seem to deteriorate over time. Then finally the Maxell tapes which fails almost instantly. Apparently the tape cannot withstand the tension which the drive causes to the tape, it breaks after just a few rewinds.
DataCassette.png


I have also tried to convert audio cassettes with mixed results. Some works, sort of, some doesn't.

Next step is to get CAPS-11 on a cassette and run! Need to do a little bit more work on the TU60EXERCISER program.
 
Mattis,

I have don't have time to fully explain, but ZTAEB0 has a bug. I can't rememebr where on the internet, but I wrote up the patch. There needs to be a missing CLR PS added that you will see in the C0 listing at 002016. without it the PSW priority stays at 7 and ignores the #6 priority of the TA11.

It looks like the totality of my patch was:

2010 000240
2012 005067 (the CLR PS)
2014 175760

Then make sure you start from location 000204.

Lou

PS. I'm updating this post since I've now found the original post on this bug. At the bottom of this page is my original post on this page: http://www.vintage-computer.com/vcforum/showthread.php?21706-pdp-11-04-assembly-from-parts/page4

Ok, with a little help from my friends a was able to locate new rubber for the drive spindles. Both of them. I now have ran ZTABC0, ZTADC0 and ZTAEB0 diagnostics. The first two run fairly well. But the last one doesn't even start. It just sits there forever until I hit INIT. The thing is that the documentation for ZTAE?? is for the C0 version rather than the B0 version that I have here. Is there a bug somewhere?
 
Last edited:
Mattis,

I have don't have time to fully explain, but ZTAEB0 has a bug. I can't rememebr where on the internet, but I wrote up the patch. There needs to be a missing CLR PS added that you will see in the C0 listing at 002016. without it the PSW priority stays at 7 and ignores the #6 priority of the TA11.

Thanks Lou! That explains it. I did some searching and actually found an (RL02?) image that is supposed to contain the ZTAEC0 (and ZTADD0) binary . But I haven't yet been able to test it since my VirtualBox/E11, which I need to build a TU58 image, causes my machine to hang right now.
 
Trying to boot

Trying to boot

Finally I got my TU60EXERCISER program running so that it could write to the tape. I wrote the CTLOAD.SYS as the first file and then CAPS11.S8K file followed by the rest of the files. I tried to boot. It read the tape for a brief moment and then nothing. The RUN light kept glowing. Hitting INIT got me back to the console emulator prompt:
Code:
@CT
000000 040000 000466 020002

Examining the memory a location 000000 and 128 bytes onwards show that the PROM bootstrap managed read the correct data into memory. This should be the PRELDR. I cannot find any source for this part of the CTLOAD.SYS so there is no clear description on what it is supposed to do except for this from the CAPS-11 manual:

PRELDR is the first record of the first file on the System Cassette. This cassette pre-loader is actually a small program written in "CBOOT Loader Format" which is powerful enough to determine memory size and load succeding programs into highest memory. It is linked, loaded, and started automatically by CBOOT at location 0. A map of CAPS-11 memory now appears as shown in Memory Map #2 of Figure E-3."

Is PRELDR relying on that the CBOOT is located at 001000? My HW boot is in PROM of course.

Using E11 (yes I got it running without hanging my VM) I loaded CTLOAD.SYS into memory at 000000 and tried to single step through the code. Starting at address 000000 it ends up spinning at 130/134. I have marked the instructions executed by E11 with '>'. The code is confusing to me. At address 000042 it moves 000005 to address 000000, but why is instruction at address 130 comparing the contents of address 000000 with 100240? On the real machine after hitting INIT location 0 has value 000005.

Can someone please explain what this code is supposed to do? My PDP-11 assembly knowledge seems to fail here. Or is this the wrong code? I am confused since this code doesn't seem to contain anything to manipulate the TA11 registers.

Code:
>		000000	nop
>		000002	br	000010
		000004	.word	000030
		000006	halt
>		000010	mov	#000500,sp
>		000014	clr	r4
>		000016	mov	sp,r5
>		000020	tst	(r4)             < causes trap 4/6 as part of memory sizing 
>		000022	add	#020000,r4
>		000026	br	000020
>		000030	mov	#000130,r3
>		000034	clr	r2
>		000036	mov	#000200,r1
>		000042	movb	#000005,(r0)
>		000046	jsr	pc,(r3)              > label_1
		000050	movb	000002(r0),(r5)+
		000054	jsr	pc,(r3)
		000056	dec	r2
		000060	bmi	000112
		000062	bne	000072
		000064	mov	sp,r5
		000066	mov	r1,r2
		000070	dec	r2
		000072	dec	r1
		000074	bne	000050
		000076	bisb	#000020,(r0)
		000102	jsr	pc,(r3)
		000104	tst	r2
		000106	bne	000036
		000110	jmp	(r4)
		000112	bit	#000001,r5
		000116	bne	000072
		000120	mov	-(r5),r2
		000122	sub	r2,r4
		000124	mov	r4,r5
		000126	br	000072
> label_1 	000130	bit	#100240,(r0)
> 		000134	beq	000130
		000136	bmi	000142
		000140	rts	pc
		000142	mov	(r0),r4
		000144	halt
		000146	tst	(sp)+
		000150	movb	#000007,(r0)
		000154	jsr	pc,(r3)
		000156	movb	#000015,(r0)
		000162	jsr	pc,(r3)
		000164	inc	(r0)
		000166	jsr	pc,(r3)
		000170	br	000010
		000172	swab	@-(sp)
		000174	rol	r2
		000176	swab	@-(sp)
 
CAPS-11 boot!

CAPS-11 boot!

Yes. My suspicion regarding CBOOT was correct. It has to be loaded at address 001000 and onwards. One cannot boot CAPS-11 from the CT boot on the M9312 board PROM.

Code:
.DI

 --

CTLOAP SYS 19-FEB-14
CAPS11 S8K 25-NOV-13
DEMO   PAL 25-NOV-13
EDIT   SLG 25-NOV-13
LINK   SRU 25-NOV-13
ODT    SLG 25-NOV-13
PAL    SRU 25-NOV-13
PIP    SRU 25-NOV-13

?NO SENTINEL FILE

?SYNTAX ERROR

.

My tape writer programs never wrote a sentinel file which is supposed to be the last file of the tape. But it works! CTLOAP.SYS is the patched version of CTLOAD.SYS that have removed all references to the switch register to make it work on a machine with a operators console only.
 
Is PRELDR relying on that the CBOOT is located at 001000? My HW boot is in PROM of course.

A person at another forum came up with a answer (since it is in swedish I won't quote it directly here) to why it wouldn't boot using the PROM bootstrap: CBOOT places the TA11 CSR in R0 whereas the M9312 CT bootstrap places TA11 CSR in R1 (and unit number in R0). PRELDR rely on R0 to have the correct value. I need to patch PRELDR to make it boot using the PROM boot.
 
Tape archeology

Tape archeology

First off I managed patch the CTLOAD.SYS file so that it now loads directly from the M9312 CT boot which is very nice. No hassle any more to type in or download the initial boot. Just hit init and then the drive start to spin. Nice. It turned out that not only the PRELDR needed patching, but there were also a BR instruction that made the CABLDR to skip initialising the R0 to correct values. Here is a patched version if anyone needs it.

With a booting CAPS-11 system I got interested in finding out what was actually on those two old DEC cassette tapes that I did have. One is pictured earlier in the thread and is marked "S LMS 2 KOP". "KOP" may indicate "KOPIA", or COPY. But other than that I do not understand what it stands for. It do contain some stuff:
Code:
010000 051415 177714 000002
@CT

CAPS-11 V01-02

.DA 27-MAR-14

.DI CT1:

 27-MAR-14

CTLOAD SYS 07-JAN-75
CAPS11 S8K 07-JAN-75
PIP    SRU 07-JAN-75
EDIT   SLG 07-JAN-75
LINK   SRU 07-JAN-75
ODT    SLG 07-JAN-75
PAL    SRU 07-JAN-75
BASIC  LDA 07-JAN-75

.
An CAPS-11 operating system cassette dated January 1975. Almost 40 years old files... I did a copy and and used my patched bootstrap to start it. It loads. But it wouldn't give me the prompt. It might be that it is configured differently than the version that I have.

As it would be very interesting to actually extract the content of the cassette I continued the work on my tu60tools. I had quite hard time debugging it when running on the bare metal. It is not that you get a nice stack trace when there is pointer problem... Finally yesterday I had the TU60read utility ready to read files from the cassette, and it seemed to work. At least it read back the file that I stored on the booting tape correctly. I tried them on a copy of the cassette with the contents listed above and got these files:

I checked the CTLOAD.SYS binary. It is 896 bytes (7 blocks) rather than 1024 bytes. But it seems to be complete. Disassembling it shows that for most parts it is identical to the CTLOAD.SYS that used to come with CAPS-11.

The BASIC.LDA binary seems to be a copy of the paper tape BASIC. Doing strings on the binary reveals "PDP-11 BASIC, VERSION 007A". Strings on CAPS11.S8K give "CAPS-11 V01-02" so I guess this CAPS-11 cassette is just built slightly different.

Then I tried to the same type of archeology on another cassette, but the file system was to damaged. I managed to dig out this PDP-8 code snippet though:

Code:
TO +1 IF HIGH TEST
        DCA   TEST
        TAD   TABNO
        AND   P777
        DCA   TABNO     /SAVE TABLE NUMBER
        TAD   LTAB
        DCA   TCORE     /SET CORE ADDRESS
        CLL
        CIF
        JMS I TABLE     /READ LIMIT TABLES
TABNO,  0
TCORE,  0
        CLA CLL
        CDF
        TAD I BAND1     /FETCH
NUMBER OF
        DCA   B1        /CHANNELS FROM MEM0
        TAD I BAND2
        DCA   B2
        JMS I RSETDF
        IAC
        JMS   COMWRD    /FETCH BATCH TRAIN NO
        SPA CLA         /RELOCATE OUTER BAND?
        JMP   INNER     /NO - INNER
        DCA   CHNO      /YES - SET 1:ST CHANNEL NUMBER
        TAD   B1        /FETCH CHANNEL COUNTER
        JMP   BOTH
INNER,  TAD   B1        /CALCULATE FIRST CHANNEL NO
        CIA
        DCA   CHNO
        TAD   B2        /FETCH CHANNEL COUNTER
BOTH,   DCA   CHCNT     /SAVE COUNTER ON PAGE ZERO
        TAD   P5
        JMS   COMWRD    /FETCH CHANNEL NUMBER
        SNA             /ZERO?
        JMP   ALL       /YES - TEST ALL ON ONE BAND
        TAD   M1        /NO - SAVE CORRECT
        DCA   CHNO      /CHANNELNUMBER
        TAD   M1
        DCA   CHCNT /SET COUNTER TO -1
        SKP
SINGLE, CLA IAC         /SET AC TO 11
ALL,    TAD   P10       /SET AC TO 10
        JMP I RELO      /RELOCATE
ACLEAR, DCA I TEMP      /CLEAR RCLEAR IN COMMAND BUFFER
        ISZ   TADDR     /SET POINTER TO CORRECT
        CDF             /ADD TERM IN TBTAB
        DCA I TADDR        /ZERO ADD TERM
        JMS I RSETDF    /RESET DATA FIELD
        NOP
        CMA
        DCA   QCPFEL
        JMS I DCWAIT
        TAD   QCP       /INDICATE READY
        CIF
        CLL
        JMS I MONDSC    /RETURN TO QCP
        HLT             /SECURITY HALT
COMWRD, 0               /ADD TERM IN AC
        TAD   COMAND
        DCA   TEMP      /ADDR IN COMAND BUFFER
        TAD I TEMP      /FETCH COMAND WORD
        JMP I COMWRD    /TO AC AND RETURN

/CONSTANTS:
BAND1,  66    /PAGE0, MEM0
BAND2,  67              /  "      "
B1,     0
B2,     0
TEMP,   0
P3,     3
P4,     4
P5,     5
P10,    10
P50,    50
P51,    51
P52,    52
P54,    54
P55,    55
P77,    77
P777,   777
P3777,  3777
P6000,  6000
M1,     -1
M2,     -2
M2001D, -3721
QCP,    4023            /AUT
OSTART QCP

$

Well. Since the machine is running quite well now I will start looking at the final step of my restoration project: Get a LA30 Decwriter up and running to accompany the PDP-11.
 
Restoring a LA30 Decwriter

Restoring a LA30 Decwriter

tingo said:
Progress! Well done!

Thanks! I guess that I should thank all people that helped me along the way, especially Lou who provided me with CAPS-11 files and a lot of insights in CAPS-11, Johnny that gave a lot of hints where to find the problems, Anders, who lent me extender boards, without them I would have been stuck for long time and also Christer who sent me new rubber for the spindle wheel.

Lou - N2MIY said:
Congratulations. Now there's another of us running CAPS-11!

On my 11/04, instead of patching the secondary loader to work without a hardware switch register, I built my own hardware switch register : http://www.vintage-computer.com/vcfo...achmentid=7062

Thanks! Yes. I hope that I can find CAPS-11 BASIC to run on it as well. I would the real killer app so to say. Building your own switch register is something. Have to try Unibus interacing some day.


I have now embarked on the last part of this journey. To get a nice terminal that is the same vintage as the rest of the system. I happen to have a LA30 in store which I am now going to restore. Our unit is manufactured early 1973. However the printhead seems to have been replaced in 1979.

The LA30 is apparently one of the earliest dot matrix printing devices made, which makes it quite interesting in it self.

LA30_lowres.png

Really nice vintage look on this printing terminal! And heavy. The chassis is made from die cast (i presume) aluminum and top cover made from fiber glass reinforced plastic.

This Decwriter has a baudrate switch to the rigt which made me think it was a serial LA30S, but the type plate on the back says LA30P. It is also lacking the two cards that do serial coms.

LA30-logic-lowres.png


The logic that controls the printer is all TTL, except for the character decoding ROM, the keyboard encoder and the optional UART.

LA30-keyboard-lowres.png


After a good cleaning the keyboard looked really decent. The keyboard layout is somewhat different from modern keyboards.
Isn't the keyboard encoder chip beautiful? A very early LSI chip made by SMC.

I started reforming the capacitors. All of them seems to do quite well. 100 uA leakage in the worst of them. Not bad after more than 40 years. I then gave the printhead some treatment as well to remove old ink.

When (and if) I finally get it working I still will have a problem: This is a parallel terminal, which require a M7910 in the PDP-11. I don't have one. The other option that I have is to try to find the two boards that are missing, M7731 and M7389, which I think is even harder. The last option is maybe to build a small parallel to serial converter using an Arduino board. Should be quite straight forward.

Anyone out there that might have M7910 or M7731/M7389?
 
Last edited:
Back
Top