PDP8/A memory problems, what to do?

From: Gunther Schadow <gunther_at_aurora.regenstrief.org>
Date: Wed Dec 26 13:20:06 2001

[For once I did not crosspost and now PDP-8 Lovers list
is not working right, so it goes to classiccmp again.]

Hi,

after dishwashing I reassembled my "new" PDP8/A and it's
working again, after David Gesswein hinted me to the
programmers console quick reference, I was able to enter
my first manually assembled programs and it's indeed working!
I must say that I never thought I would ever manually
assemble a machine program, but with the PDP8 it's
remarkably easy.

My first PDP-8 program is a memory test, and I was glad I
did it because I found a problem. My test goes through all
memory fields and writes into each cell its address in the
field. Then it reads that address out of each field again
and so finds problems.

I have 3 16k words boards and one 8k word board. Two of
the 16k boards are good but both seem to want to play the
role of the lower fields 0 to 3. The third 16k board
plays the high fields 4 to 7, but it has a systematic
error masking out bits 6 and 7. All data X I write into
it is read as X AND 7717. The 8k board has a similar bit
mask error, it's mask is 6777. Is this a fatal problem
or can one fix it by cleaning some contacts or redo some
crummy soldering? I assume the core mats are all fine,
because they would not just lose a few columns of data
bits, right? I also assume that others had to deal with
similar issues, because apparently such errors are not
uncommon. What's the trick?

(I did swap them into various backplane slots, just to
make sure it's not just a gap in the data bus lines.
... BTW, does the OMNIBUS need something like grant
continuity cards for intermittent empty slots?)

thanks for your advice,
-Gunther


PS, just to show off (and to save this stuff from my hand-
written notes) here's my program. It's ugly spaghetti code
with quirks because I had to modify it at the console
(remember: never start coding without having done your
work on paper :-) I now understand much better :-)

I'm not sure I have the symbolic assembly language right,
I may use some things (like the Z modifier for zero-page
addressing) that is not standard but helps me code right.

0020 0000 LOC , 0 TESTED MEMORY LOCATION
0021 0000 FLD , 0 TESTED FIELD NUMBER

WRITE LOOP

0200 7200 CLA A = 0
0201 1254 TAD FLDINI A += FLDINI
0202 3021 DCA Z FLD FLD = A; A = 0
0203 1257 TAD LOCINI A += LOCINI
0204 3020 DCA Z LOC LOC = A; A = 0
0205 1020 WRLOOP, TAD Z LOC A += LOC
0206 3420 DCA IZ LOC *LOC = A; A = 0
0207 2020 ISZ Z LOC IF(++LOC == 0)
0210 5205 JMP WRLOOP ELSE GOTO WRLOOP
0211 4234 IFRET, JMS INCFLD THEN A = INCFLD()
0212 7450 SNA IF(A != 0)
0213 5205 JMP WRLOOP ELSE GOTO WRLOOP
                                /*FALLTHROUGH*/
READ/CHECK LOOP

0214 7200 CLA A = 0
0215 1254 TAD FLDINI A += FLDINI
0216 3021 DCA Z FLD FLD = A; A = 0
0217 1257 TAD LOCINI A += LOCINI
0220 3020 DCA Z LOC LOC = A; A = 0
0221 1020 RDLOOP, TAD Z LOC A += LOC
0222 7041 CIA A = -A
0223 1420 TAD IZ LOC A += *LOC
0224 7440 SZA IF(A != 0)
0225 7402 ERROR, HLT ELSE HALT
0226 2020 ISZ Z LOC THEN IF(++LOC == 0)
0227 5221 JMP RDLOOP ELSE GOTO RDLOOP
0230 4234 JMS INCFLD THEN A = INCFLD()
0231 7450 SNA IF(A != 0)
0232 5221 JMP RDLOOP ELSE GOTO RDLOOP
0233 7402 OK, HLT THEN HALT

INCREASE DATA FIELD SUBROUTINE
returns 0 if success
resets field to 0 and returns -1 if overflow

0234 0000 INCFLD, 0
0235 2021 ISZ Z FLD IF(++FLD == 0)
0236 7300 CLA CLL ELSE { A = 0; L = 0 }
0237 1021 TAD Z FLD THEN A += FLD
0240 7047 CIA A = -A
0241 1255 TAD FLDMAX A += FLDMAX
0242 7510 SPA IF(A >= 0)
0243 5261 JMP RSTFLD ELSE GOTO RSTFLD
0244 7300 CLA CLL THEN { A = 0; L = 0 }
0245 1021 TAD Z FLD A += FLD
0246 7006 RAL 2 A <<= 2
0247 7004 RAL A <<= 1
0250 1260 TAD CDFTMP A += CDFTMP
0251 3252 DCA CDFDO CDFDO = A; A = 0
0252 0000 CDFDO, 0
0253 5634 JMP I INCFLD RETURN

INITIALIZATION VALUES

0254 0000 FLDINI, 0
0255 0007 FLDMAX, 7
0256
0257 0300 LOCINI, 0300
0260 6201 CDFTMP, CDF

RESET THE MEMORY FIELD BACK TO 0
assert A == -1

0261 7000 RSTFLD, NOP
0262 1254 TAD FLDINI A += FLDINI
0263 3021 DCA Z FLD FLD = A; A = 0
0264 4234 JMS INCFLD A = INCFLD()
0265 7040 CMA A ~= A
0266 5212 JMP IFRET GOTO IFRET













-- 
Gunther Schadow, M.D., Ph.D.                    gschadow_at_regenstrief.org
Medical Information Scientist      Regenstrief Institute for Health Care
Adjunct Assistant Professor        Indiana University School of Medicine
tel:1(317)630-7960                         http://aurora.regenstrief.org
Received on Wed Dec 26 2001 - 13:20:06 GMT

This archive was generated by hypermail 2.3.0 : Fri Oct 10 2014 - 23:33:41 BST