Physical failures are common in the PET - look for
corroded sockets,
video, power connectors etc.
I didn't see anything first time around (re-seating ICs and connectors
was one of the first things I did), but I'm just going through it again
to be sure.
Hmm, well no luck there - and everything seems tight in its sockets.
Swapping RAM banks doesn't help, either.
CPU reset and clock(s) seem OK on the 'scope. There looks to be activity on
the various RAM /CS lines, too.
Sounds like you are at the "real debugging" point. If you have a logic anaylzer
or
a storage scope, you should be able to catpture the first few accesses to ROM, and
confirm that the CPU is fetching the right opcode from the right address by walking
the bus lines on the CPU with your probe. Verify that what happens on the bus
matches the code in the ROM contant.
That fact that you have a screen full of viewable but random characters means the
CPU didn't get as far as clearng the video RAM (or possibly could not write the
video RAM). Assuming the former, then one of three things has most likely
happened:
- The program "crashed" due to reading an invalid opcode (check interface
between
ROM and CPU)
- The program "crashed" due to faulty RAM - this usually happens at the first
RTS instruction. (check interface between CPU and RAM).
- The program is running, but stuck in a loop waiting for an event that never
happens.
Get the ROM listings from funet, and logically follow the code until the screen
is cleared (iirc this is not terribly far into the code) - then note each hardware
device (ROM, RAM, PIO etc.) as the code flows through this path, and using a
storage scope match up the hardware accesses you see following a reset with
the logic of the code.
At some point they will diverge.
If the CPU has crashed due to bad ROM, this can happen anywhere. If due to a
bad RAM, it will likely happen at the end of a subroutine call). In either case,
you will likely see bus activity which is unrelated to the logic of the program (since
the program is no longer running). In some cases you may see NO bus activity
(if the CPU encounted a HLT opcode).
If the program is stuck looping on an event, you should see repeated accesses
to the affected device and the program will not proceed past this point.
Keep in mind that bad bus tranceivers etc. can make any of the above look like
any ot the others, so when you are observing "funnies" on the bus, it's a
good idea
to verify the signals all the way through the entire address/data path.
One strange thing: I pulled the character generator
ROM, expecting that doing
so would either give me a completely white or completely black screen. It
doesn't - I get some white blocks and some black blocks at random on the
display. I admit to not yet understanding what the PET's doing with its
display circuitry, but I had expected that having no ROM there would result in
every character having the same value, so regardless of what happened to be in
the video RAM at power-up I'd get the same character at every screen location.
Not sure if that sounds indicative of a particular fault...
I don't have the schematics in front of me, however as this is a character oriented
display, the CG ROM should sit between the video memory and the video shift
register. Removing it should effectivly decouple the video RAM data from the
visual display, and I would expect to see all white or all black, however with the
ROM removed, the inputs to the shift register are basically undriven, and depending
on the device you may just be seeing crosstalk from adjecent lines - as long as
you get good recognizable characters with the CG ROM installed (even if they are
randomly position around the screen), the display is probably working correctly.
Scoping the inputs to the shift register should show you what is happening (and
you may see lines on the display come/go as you load the pin).
Dave
--
dave06a (at) Dave Dunfield
dunfield (dot) Firmware development services & tools:
www.dunfield.com
com Collector of vintage computing equipment:
http://www.classiccmp.org/dunfield/index.html