• Please review our updated Terms and Rules here

PET / IEEE-488 interface woes

FelisSapien

Member
Joined
Feb 18, 2021
Messages
18
Location
Birmingham, UK
Hi All,

I Recently acquired a PET/CBM 4016-N. It was not working on receipt but thanks to a couple of old threads on this board I've been able to get it to the BASIC prompt. On the surface everything now looks fine. Continued tinkering is revealing some quirks which I'll investigate as I'm able. My most pressing issue is that I can't read from a SD2PET device. Trying to CATALOG, LOAD or anything similar results in a ?DEVICE NOT PRESENT message. Cleaning the edge connector as suggested doesn't help so I start to search for diagnostics on the IEEE-488 port... Which lead me to another thread on this very board!

Here's what I've discovered:

The bus control lines (DAV, NFRD, NDAC and ATN) all report OK. On some further digging I find that poking values into the bus lines shows that lines 1, 3, and 4 are 'stuck' (see attached 'before' image)

Looking to the IEEE-488 I/F schematic I see a pair of MC3446 bus transceivers manage the IO lines in two groups, 1-4 (UB17) and 5-8 (UC12). Surely this is no coincidence... Testing with a logic probe I find values consistent between UB17 and UB16 (6520). Not sure what I was expecting though, I'm not a hardware guy. I decide to socket the MC3466 chips so I can swap and retest. My theory being that if UB17 was bad then the stuck bits would appear in bits 5-8. And that's what happened (see 'after' image)... my conclusion is that the chip is itself bad. Had the DIO bits remained as they were then I would have to look for something else influencing this behaviour. So... I've ordered some new chips and once they arrive we'll see if I have more joy with the SD2PET.

I've a few reasons for making this post. Firstly to get an external eye cast over what I've done. I love tinkering with old computers but am not particularly knowledgeable on hardware. I don't mind getting stuck in but I really don't know what I'm doing. There's every chance I've made a poor assumption and gone off at a tangent... To that end I really need to say thank you to dave_m, daver2, and Dwight Elvey - your work elsewhere has been immensely useful in getting this PET to behave (somewhat) as designed. I'm sure I'll be looking for your advice again sooner rather than later. Finally, it's possible that my story will be helpful to someone else?


Cheers,
Carl
 

Attachments

  • before_swap.jpeg
    before_swap.jpeg
    187.6 KB · Views: 15
  • after_swap.jpeg
    after_swap.jpeg
    160.3 KB · Views: 15
Here's the diagnostic code I was using. This was based on a program shared in the first thread I mentioned.


10 print chr$(147);"** ieee-488 interface diag **"

100 print "dav: ";
110 poke 59427,60:rem "set dav high"
120 dav = peek(59456) and 128
130 if dav = 0 then print"s/b 1 is 0":goto 200
140 poke 59427,52
150 dav = peek(59456) and 128
160 if dav = 128 then print"s/b 0 is 1":goto 200
170 print " ok"

200 print "nrfd: ";
210 poke 59456,255:rem "set nrfd high"
220 nrfd = peek(59456) and 64
230 if nrfd = 0 then print"s/b 1 is 0":goto 300
240 poke 59456,253
250 nrfd = peek(59456) and 64
260 if nrfd = 64 then print"s/b 0 is 1":goto 300
270 print "ok"

300 print "ndac: ";
310 poke 59425,60
320 ndac = peek(59456) and 1
330 if ndac = 0 then print"s/b 1 is 0":goto 400
340 poke 59425,52
350 ndac = peek(59456) and 1
360 if ndac = 1 then print"s/b 0 is 1":goto 400
370 print "ok"

400 print "atn: ";
410 a = peek(59424):rem "clear atn input"
420 poke 59456,4
430 poke 59456,0
440 poke 59456,4
450 a = peek(59425) and 128
460 if a = 0 then print"no transition detected":goto 500
470 print "ok"

500 print "dio:"
510 n = 0
520 for i = 0 to 9
530 poke 59426,n
540 v=peek(59424)
550 x$=""
560 t=128
570 for j = 0 to 7:x$=x$+str$(sgn(v and t))
580 t=t/2
590 nextj
600 print"in=";n,"out=";v,":";x$
610 n = n*2
620 if n = 0 then n = 1
630 if n > 255 then n = 255
640 next i

900 end
10 print chr$(147);"** ieee-488 interface diag **"

100 print "dav: ";
110 poke 59427,60:rem "set dav high"
120 dav = peek(59456) and 128
130 if dav = 0 then print"s/b 1 is 0":goto 200
140 poke 59427,52
150 dav = peek(59456) and 128
160 if dav = 128 then print"s/b 0 is 1":goto 200
170 print " ok"

200 print "nrfd: ";
210 poke 59456,255:rem "set nrfd high"
220 nrfd = peek(59456) and 64
230 if nrfd = 0 then print"s/b 1 is 0":goto 300
240 poke 59456,253
250 nrfd = peek(59456) and 64
260 if nrfd = 64 then print"s/b 0 is 1":goto 300
270 print "ok"

300 print "ndac: ";
310 poke 59425,60
320 ndac = peek(59456) and 1
330 if ndac = 0 then print"s/b 1 is 0":goto 400
340 poke 59425,52
350 ndac = peek(59456) and 1
360 if ndac = 1 then print"s/b 0 is 1":goto 400
370 print "ok"

400 print "atn: ";
410 a = peek(59424):rem "clear atn input"
420 poke 59456,4
430 poke 59456,0
440 poke 59456,4
450 a = peek(59425) and 128
460 if a = 0 then print"no transition detected":goto 500
470 print "ok"

500 print "dio:"
510 n = 0
520 for i = 0 to 9
530 poke 59426,n
540 v=peek(59424)
550 x$=""
560 t=128
570 for j = 0 to 7:x$=x$+str$(sgn(v and t))
580 t=t/2
590 nextj
600 print"in=";n,"out=";v,":";x$
610 n = n*2
620 if n = 0 then n = 1
630 if n > 255 then n = 255
640 next i

900 end
10 print chr$(147);"** ieee-488 interface diag **"

100 print "dav: ";
110 poke 59427,60:rem "set dav high"
120 dav = peek(59456) and 128
130 if dav = 0 then print"s/b 1 is 0":goto 200
140 poke 59427,52
150 dav = peek(59456) and 128
160 if dav = 128 then print"s/b 0 is 1":goto 200
170 print " ok"

200 print "nrfd: ";
210 poke 59456,255:rem "set nrfd high"
220 nrfd = peek(59456) and 64
230 if nrfd = 0 then print"s/b 1 is 0":goto 300
240 poke 59456,253
250 nrfd = peek(59456) and 64
260 if nrfd = 64 then print"s/b 0 is 1":goto 300
270 print "ok"

300 print "ndac: ";
310 poke 59425,60
320 ndac = peek(59456) and 1
330 if ndac = 0 then print"s/b 1 is 0":goto 400
340 poke 59425,52
350 ndac = peek(59456) and 1
360 if ndac = 1 then print"s/b 0 is 1":goto 400
370 print "ok"

400 print "atn: ";
410 a = peek(59424):rem "clear atn input"
420 poke 59456,4
430 poke 59456,0
440 poke 59456,4
450 a = peek(59425) and 128
460 if a = 0 then print"no transition detected":goto 500
470 print "ok"

500 print "dio:"
510 n = 0
520 for i = 0 to 9
530 poke 59426,n
540 v=peek(59424)
550 x$=""
560 t=128
570 for j = 0 to 7:x$=x$+str$(sgn(v and t))
580 t=t/2
590 nextj
600 print"in=";n,"out=";v,":";x$
610 n = n*2
620 if n = 0 then n = 1
630 if n > 255 then n = 255
640 next i

900 end
 
Carl,
Welcome to the Vintage Computer Forum.

Your troubleshooting method is sound. Replace the MC3466 part with equivalent device.
-dave_m
 
I've heard that it's not uncommon for those to fail, but since they aren't made anymore, finding replacements can be difficult.
Possibly someone shorted out the chip by plugging in a cable while the computer was on, or accidentally plugged in a user port device to the IEEE port.
 
When you get the IEEE bus working, be sure to learn the advanced features of the SD2PET. It supports subdirectories on the SD card. So instead of having one directory with a hundred programs which makes it hard to find the file you want, you can sort the programs into subdirectories which will make finding the right program with the Directory command easier. There may be a key that slows the scrolling, but I can newer remember it when using the Directory command.
 
I've heard that it's not uncommon for those to fail, but since they aren't made anymore, finding replacements can be difficult.
Hutch,
You are right. It looks like they are scarce. Still some on ebay but only cheap ones are from China.

There are 11 available from Quest Components in California but they want $30 each! https://www.questcomp.com/part/4/mc3446n/256611474
 
FWIW, Glen Kleinschmidt used a pair of SN75ALS160 as the output line drivers and a pair of 74LS245 buffers as the input line receivers in his 2001 clone.
It would require some modding but should work on a real PET if the Motorola chips get too scarce or too expensive.
Page 10 and 26 of the PDF at the link below.
Link: http://www.glensstuff.com/pet2001/pet2001.htm
 
Carl,
Did you ever find the MC 3446 IEEE 488 transceivers?

Waiting... The chips I ordered are coming from China. ETA is in the next week or so.

Sitting on my hands for so long is proving quite uncomfortable... I've run other diagnostics and on the whole everything seems fine with the PET. I do have some errors reported by Jim Butterfields ROM verifier but I'm not sure how to interpret that. I've also got plans to upgrade RAM to 32K. But I'm trying to restrict myself to one step at a time.
 
The MC3446 chips I ordered arrived this morning... Great news, now I've replaced the bad chip the diagnostic program reports more sensibly. The SD2PET device is working! :)

I can now more comfortably move on to other chores... like adding a reset button and upgrading the memory to 32kb.
 
Amazing! How on earth did you get three day delivery from China? ;-)

Mind revealing where you ordered the MC3446s?

Congratulations on your successful repair!!

m
 
Amazing! How on earth did you get three day delivery from China? ;-)

Mind revealing where you ordered the MC3446s?

Congratulations on your successful repair!!

m

I found a seller on ebay (link below) - it took just under a month from order for me to receive them. The 3 days is probably the time between me saying I'm expecting them any day now (or words to that effect) and confirmation that I'd and fixed my issue.

https://www.ebay.co.uk/str/biz2020a63

5x MC3446N cost me just over £10 incl. postage. I only needed one but got a few more just in case.
 
Here's the diagnostic code I was using. This was based on a program shared in the first thread I mentioned.


10 print chr$(147);"** ieee-488 interface diag **"

100 print "dav: ";
110 poke 59427,60:rem "set dav high"
120 dav = peek(59456) and 128
130 if dav = 0 then print"s/b 1 is 0":goto 200
140 poke 59427,52
150 dav = peek(59456) and 128
160 if dav = 128 then print"s/b 0 is 1":goto 200
170 print " ok"


200 print "nrfd: ";
210 poke 59456,255:rem "set nrfd high"
220 nrfd = peek(59456) and 64
230 if nrfd = 0 then print"s/b 1 is 0":goto 300
240 poke 59456,253
250 nrfd = peek(59456) and 64
260 if nrfd = 64 then print"s/b 0 is 1":goto 300
270 print "ok"


300 print "ndac: ";
310 poke 59425,60
320 ndac = peek(59456) and 1
330 if ndac = 0 then print"s/b 1 is 0":goto 400
340 poke 59425,52
350 ndac = peek(59456) and 1
360 if ndac = 1 then print"s/b 0 is 1":goto 400
370 print "ok"


400 print "atn: ";
410 a = peek(59424):rem "clear atn input"
420 poke 59456,4
430 poke 59456,0
440 poke 59456,4
450 a = peek(59425) and 128
460 if a = 0 then print"no transition detected":goto 500
470 print "ok"

500 print "dio:"
510 n = 0
520 for i = 0 to 9
530 poke 59426,n
540 v=peek(59424)
550 x$=""
560 t=128
570 for j = 0 to 7:x$=x$+str$(sgn(v and t))
580 t=t/2
590 nextj
600 print"in=";n,"out=";v,":";x$
610 n = n*2
620 if n = 0 then n = 1
630 if n > 255 then n = 255
640 next i


900 end
10 print chr$(147);"** ieee-488 interface diag **"

100 print "dav: ";
110 poke 59427,60:rem "set dav high"
120 dav = peek(59456) and 128
130 if dav = 0 then print"s/b 1 is 0":goto 200
140 poke 59427,52
150 dav = peek(59456) and 128
160 if dav = 128 then print"s/b 0 is 1":goto 200
170 print " ok"


200 print "nrfd: ";
210 poke 59456,255:rem "set nrfd high"
220 nrfd = peek(59456) and 64
230 if nrfd = 0 then print"s/b 1 is 0":goto 300
240 poke 59456,253
250 nrfd = peek(59456) and 64
260 if nrfd = 64 then print"s/b 0 is 1":goto 300
270 print "ok"


300 print "ndac: ";
310 poke 59425,60
320 ndac = peek(59456) and 1
330 if ndac = 0 then print"s/b 1 is 0":goto 400
340 poke 59425,52
350 ndac = peek(59456) and 1
360 if ndac = 1 then print"s/b 0 is 1":goto 400
370 print "ok"


400 print "atn: ";
410 a = peek(59424):rem "clear atn input"
420 poke 59456,4
430 poke 59456,0
440 poke 59456,4
450 a = peek(59425) and 128
460 if a = 0 then print"no transition detected":goto 500
470 print "ok"

500 print "dio:"
510 n = 0
520 for i = 0 to 9
530 poke 59426,n
540 v=peek(59424)
550 x$=""
560 t=128
570 for j = 0 to 7:x$=x$+str$(sgn(v and t))
580 t=t/2
590 nextj
600 print"in=";n,"out=";v,":";x$
610 n = n*2
620 if n = 0 then n = 1
630 if n > 255 then n = 255
640 next i


900 end
10 print chr$(147);"** ieee-488 interface diag **"

100 print "dav: ";
110 poke 59427,60:rem "set dav high"
120 dav = peek(59456) and 128
130 if dav = 0 then print"s/b 1 is 0":goto 200
140 poke 59427,52
150 dav = peek(59456) and 128
160 if dav = 128 then print"s/b 0 is 1":goto 200
170 print " ok"


200 print "nrfd: ";
210 poke 59456,255:rem "set nrfd high"
220 nrfd = peek(59456) and 64
230 if nrfd = 0 then print"s/b 1 is 0":goto 300
240 poke 59456,253
250 nrfd = peek(59456) and 64
260 if nrfd = 64 then print"s/b 0 is 1":goto 300
270 print "ok"


300 print "ndac: ";
310 poke 59425,60
320 ndac = peek(59456) and 1
330 if ndac = 0 then print"s/b 1 is 0":goto 400
340 poke 59425,52
350 ndac = peek(59456) and 1
360 if ndac = 1 then print"s/b 0 is 1":goto 400
370 print "ok"


400 print "atn: ";
410 a = peek(59424):rem "clear atn input"
420 poke 59456,4
430 poke 59456,0
440 poke 59456,4
450 a = peek(59425) and 128
460 if a = 0 then print"no transition detected":goto 500
470 print "ok"

500 print "dio:"
510 n = 0
520 for i = 0 to 9
530 poke 59426,n
540 v=peek(59424)
550 x$=""
560 t=128
570 for j = 0 to 7:x$=x$+str$(sgn(v and t))
580 t=t/2
590 nextj
600 print"in=";n,"out=";v,":";x$
610 n = n*2
620 if n = 0 then n = 1
630 if n > 255 then n = 255
640 next i


900 end
After inputting the above program, I get following results

dav: 0
nrfd: 0
ndac: s/b 0 is 1
atn: no transition detected
dio:
in = 0 out = 255 : 11111111
in = 1 out = 255: 11111111
and so on in = 2,4,8,16,32,64,128,255 out is always 255 followed by same eight 11111111

Computer is 8032. It seems 3446 buffers at UB17 and UB12 are ok, and fault could be 3446 buffer at UA20, or the 6520 or 6522.
Which of these is most likely faulty ? What does the "ndac" and "atn" results above mean ?. Many thanks, Michael
 
Michael,
NDAC is one of the IEEE488 control signals.
To troubleshoot the NDAC signal:

type a stop after the colon at line 330
330 if ndac = 0 then print"s/b 1 is 0": stop: goto 400

Then with voltmeter, you should see:
High (>3.5V) at
UB16 pin 39, UA20 pin 11, UA20 pin 10, and UA20 pin9.
Where do you find a Low? That should tell where is bad chip is.

-dave_m
 
After inputting the above program, I get following results

dio:
in = 0 out = 255 : 11111111
in = 1 out = 255: 11111111
and so on in = 2,4,8,16,32,64,128,255 out is always 255 followed by same eight 11111111

Computer is 8032. It seems 3446 buffers at UB17 and UB12 are ok, and fault could be 3446 buffer at UA20, or the 6520 or 6522.
Which of these is most likely faulty ? What does the "ndac" and "atn" results above mean ?. Many thanks, Michael
As for the data line test, if you have checked that the IEEE transceivers UB17 and UB12 are good, then the PIA UB16 would be suspect.
 
I found a seller on ebay (link below) - it took just under a month from order for me to receive them. The 3 days is probably the time between me saying I'm expecting them any day now (or words to that effect) and confirmation that I'd and fixed my issue.

https://www.ebay.co.uk/str/biz2020a63

5x MC3446N cost me just over £10 incl. postage. I only needed one but got a few more just in case.
I have found cricklewood electronics a nice source of hard to find IC’s. Can be expensive but pleased so far with what I have purchased.

Andy
 
Back
Top