I do hate reinventing the wheel, and I suspect a lot of faults with BBC machines are what the TV repair trade call stock faults.
So if a fault is common, or various symptoms are caused by one component (or a handful of components like when the regulation feedback loop goes wrong in a switch mode power supply ). Then if it is documented, it saves having to always start fault finding from scratch
The problem is, that as most of the forum members are hobbyists, most will have limited electronic skills, and fewer still will be good at logical fault finding, tracing and repair .
Fewer still will fully document what the exact symptoms were and what they did to fix the fault .
This does limit the flow of information into to such a database.
Some years ago when the TV repair trade was large, they had the benefit of large numbers of repair workshops which carried out lots of repairs - and as a result, lots of information was collected (and a lot was published in the now defunct trade magazine "Television").
Therefore I think this idea / project will be a bit of a slow burner . But it also needs someone to do a bit of proactive prodding to extract information from members who do post about problems, but who do not forward the required information .
Once members get used to the information that is required, things may improve.
Anyway them there are my thoughts.
BTW I work for a company where the main part of my job is attending and repairing failures. I work on electronic systems (but not at component level), electrical systems, mechanical systems, computer systems, telecom systems, relay based logic systems or a nice mix of the different technologies
Do the company make it easy by having a fault database like described above - NO! They do have a data base system, but it fills up with so much incorrect and misleading "information" (a "controller" updates the fault entry when you 'phone the details through), it is more of a record keeping system than a useful tool .
Now then, time to provide some help ...
My Beeb goes Beeeeeeeeeeeeeeeeeeeeeeeee and no longer works, or...
My Beeb only reports 16k when it starts, or...
My Beeb has strange things going on with the screen and it crashes...
All these symptoms are likely to be caused by a memory circuitry fault. Often it is due to either a 74LS245N (IC14) buffer failing (more on this later), or due to a dynamic RAM (DRAM) chip failing.
So first off lets start with the first step. Using a multimeter confirm that the +5V supply voltage is okay (4.85V to 5.15V is good). Test on the PCB terminals where all three sets of the red and black leads from the PSU connect to the PCB.
Next, find and note the position of link S25.
S25 selects if the board is configured as a 16k board, or a 32k board.
Now about DRAM (or How is the RAM arranged in a Beeb?)
The type of DRAM chips used in the Beeb are 4816 types. One of these can only store 16k bits of data. The memory in the chip is arranged as 16384 memory cells that are only one bit wide. So for each address (there are 16384 addresses) the chip can store one data bit. As the CPU used in the Beeb needs 8 bits (one byte) for each memory address, we can use eight of these DRAM chips. Eight bits = one byte. The memory layout is now 16k bytes (16384 addresses, each of which can store 8 bits, where each bit is stored in separate DRAM chips).
HITACHI wrote:16384-word X 1-bit Dynamic Random Access Memory
The HM4816 is a new generation MOS dynamic RAM circuit organized as
16,384 words by 1 bit. As a state-of-the art MOS memory device, the HM4816
(16K RAM) incorporates advanced circuit techniques designed to provide wide
operating margins, both internally and to the system user, while achieving
performance levels in speed and power previously seen only in MOSTEK's high
performance MK4027 (4K RAM).
The technology used to fabricate the HM4816 is HITACHI's double-poly,
N-channel silicon gate process.
This process, coupled with the use of a single transistor dynamic storage cell
provides the maximum possible circuit density and reliability, while maintaining
high performance capability.
The use of dynamic circuitry throughout, including sense amplifiers, assures that
power dissipation is minimized without any sacrifice in speed or operating margin.
These factors combine to make the HM4816 a truly superior RAM product.
Multiplexed address inputs (a feature pioneered by MOSTEK for its 4K RAMs)
permits the HM4816 to be packaged in a standard 16-pin DIP.
This recognized industry standard package configuration, while compatible with
widely available automated testing and insertion equipment, provides highest
possible system bit densities and simplifies system upgrade from 4K to 16K RAMs
Non-critical clock timing requirements allow use of the multiplexing technique
while maintaining high Performance.
As you can see from the pin-out diagram there are separate data input (Din) and data output (Dout) pins. In the Beeb these are connected together and then to one line of the data-bus.
The HM4816 data sheet is available in a zip file here
So now you know a bit about DRAM. How do we get the Beeb to see 32k bytes of RAM?
Well, Acorn used two "banks" of 16k chips, making a total of 16 HM4816 type chips. Arranged as 2 "banks" of eight HM4816 chips.
But where does link S25 come in, and how do I work out which chip(s) is/are faulty?
The circuitry on a 32k byte Beeb PCB is designed to select either one 16k DRAM bank or the other 16k DRAM bank depending on the current CPU address. We can use this via S25 to change the RAM bank that is in use. Which hopefully will enable us (assuming the defective DRAM chips are in only one "bank" to persuade the Beeb to start up as a 16k unit.
With a model A /CAS1 controls the only 16k RAM bank, as IC61 to IC68 are not present.
With a model B /CAS0 controls the lower 16k RAM bank and /CAS1 controls the upper 16k RAM bank. /CAS0 is in the memory map from &0000 to &3FFF (0x0000 to 0x3FFF) and /CAS1 is mapped from &4000 to &7FFF (0x4000 to 0x7FFF).
Link S25 is South on a model A (16k) so only /CAS1 is active.
It is north on a model B (32k) and so both /CAS0 and /CAS1 are active.
If you suspect that you have a RAM memory fault, on a model B you can move link S25 South and see if the machine will run with only one 16k RAM bank. The /CAS1 bank will be the active RAM and the RAM controlled by /CAS0 will be disabled.
For testing only, on a model B, link S25 can be removed, then only /CAS0 is active. The /CAS1 RAM bank will be disabled.
If you use a 74LS04N hex inverter to invert the signal from the North pin of S25 and connect the output of the inverter to the middle pin of S25, this will swap the two banks around in memory as far as the MPU is concerned. You can now run a memory test on the suspect RAM from &4000 (0x4000) to &7FFF (0x7FFF). Note that if such a test shows a fault, it is the /CAS0 bank that is faulty.
This is one test program (thanks to Mark/retroclinic)
This test program is based on checking one bank only for one type of individual bit fault.retroclinic wrote:In 32K mode, invert the signal going to the centre pin of S25 using a 74LS04. The computer will now boot, but you'll see the memory fault on the screen.
Then it's just a case of:
5 MODE 0
30 IF A=0 THEN GOTO 20
40 PRINT A
(go to mode 0 first if you can't see what you're typing because of the memory fault, the top of the screen will still be usable)
In most cases that should give you a number after a short time, which converted to binary will give you the bad bit - then just change that particular ram out. Sometimes you need to change the &4000, or make it use random addresses between &4000 and &8000 until it shows the fault.
Each DRAM chip is actually a one bit by 16k memory. So to make a 16k byte memory bank you need 8 chips. Each chip being connected to a different data bit.
If one chip is faulty due to a faulty data input or output circuit, this BASIC program would show this.
Full thread hereretroclinic wrote:Also, it's only a very simple guide program, you can change the 0 to 255 to check for stuck on bits, or change the address, or use a RND(&4000)+&4000 to check for a range within the faulty bank.
Here is another memory test program: (thanks to MartinB)
MartinB wrote:I know there are 1001 different memory testers out there but here's one I wrote for quick first-look testing when there's obvious display symptoms. It tests the whole of user ram from &E00 to &7FFF and by running it from a low (normally illegal) PAGE of &900, it will work fine on tape and disc systems. By using &55 and &AA as the test patterns it will find stuck bits and cross-talk errors and because it creates a visual mode-specific 'test pattern' it also shows cross-chip addressing faults and display circuitry anomalies.
Type it in and save it as per any normal BASIC program. To use, press <Break>, set any screen mode with MODEn <cr>, set PAGE=&900 <cr> and CHAIN"MTEST" <cr> (or whatever name you've saved it under.) The given screen should be completely black during the test apart from the 'twinkling' activity marker in the top left corner until the screen memory for the selected Mode is tested. Then, a pattern will slowly fill the screen from top left to bottom right and there should be no visual deviations from this progressive fill. The pattern will vary according to Mode but will always be constant for that Mode. In the case of Mode7, there will (should) be nothing until the last few seconds when the screen will fill with 'U's. For some modes, you will see that your monitor gets a good resolution and EHT test too! The complete test takes about two minutes.
If a location fails, the program will simply stop and print the hex memory location where the error occurred. If all locations pass, you will just finsh with 'OK'. This type of program specifically tests the CPU<>Memory chain and if it passes but you see random characters, holes or pattern shifts then this points the finger at the display circuitry and thus halves the diagnostic process.
80UNTIL M%=X% OR E%
Don't forget though, after saving, use as follows :
Table of DRAM chips vs. /CAS RAM bank and data bits
Data bits - IC numbers
Code: Select all
D0= IC61 IC53
D1= IC62 IC54
D2= IC63 IC55
D3= IC64 IC56
D4= IC65 IC57
D5= IC66 IC58
D6= IC67 IC59
D7= IC68 IC60
Using a 74LS04N hex inverter to invert the signal from the North pin of S25
(Diagram courtesy of MartinB
Also the following connections are needed: +5v is Pin 14 and 0v is Pin 7.
The 74LS04N is a fairly common standard logic chip. Some possible suppliers are ESR, Bowood, Quarndon, Rapid, CPC, Farnell and Maplin.
If you find, or strongly think that a chip is faulty, it will need to be replaced. Don't bother to desolder the old chip as-is. Using some good quality, but fine side cutters / snips, cut each chip leg near the plastic body of the chip. Then remove the chip. Now you can desolder and remove each pin, one at a time. Not only is this easier, it also means there is less risk of damage to the PCB tracks (traces).
Don't solder the replacement / new chip directly to the PCB. Instead fit a IC socket. This means if the chip has to changed again, no desoldering or soldering is needed
Sometimes the actual DRAM chips are not faulty and it is some of the logic circuitry that fails. Of the various standard logic chips, the 74LS245N line driver/buffer in position IC14 is the most likely to fail. Test by renewing it .
Edited 2014-12-25 to update links