• Please review our updated Terms and Rules here

Ruud's Diagnostic ROM

modem7

10k Member
Joined
May 29, 2006
Messages
10,578
Location
Melbourne, Australia
I have enhanced Ruud's Diagnostic ROM to detect certain RAM addressing failures.

It is now at version 3.2

Available at minuszerodegrees.net

The RAM checks on-screen are now:
* Check first 2 KB of RAM
* Testing RAM - Data
* Testing RAM - Address

The RAM addressing check is using the same method that is in the BIOS ROM of the IBM 5160.

EXAMPLE

The 'Testing RAM - Address' check will detect the following test case:
Step 1: 5150 motherboard of type 64-256KB
Step 2: Remove the 4164 in the bit 3 position of bank 1.
Step 3: Lift the address A5 leg (pin 10) in the air (bent upwards good so that it will not short on pin 8 of the adjacent chip).
Step 4: Put the chip back.
Step 5: Ground the floating-in-the-air pin to simulate A5 in the chip being stuck LOW.

It will be seen that the 'Testing RAM - Data' passes, but the 'Testing RAM - Address' check fails.


OUTSTANDING

1. Improve commenting in source code.
2. Documentation. E.g. What each test does, interpretation of RAM address in error, ...
3. Addition of more thorough testing of RAM addressing.
4. Addition of a RAM refresh test. Something like the 10 second test that is in the Supersoft/Landmark ROM.
5. Addition of a 'Hot timer 1' check, like what the IBM 5160 BIOS does.
6. RAM failure addresses are to be displayed as absolute rather than in {segment : offset} form.
7. Other
 
Only useable with MDA or CGA card?
At this time. I can't make any promises for EGA/VGA support. It needs research. You will notice that the Supersoft/Landmark diagnostic does not, and there may have been a good reason for Landmark doing that. But I concede that Landmark may have simply thought, "Well, computer technicians will have an MDA/CGA card laying about", computer technicians being the product's main target. For now, a good and easier thing is to do, is to enhance the data output out to the LPT ports (e.g. outputting address+bits of RAM failure).
 
Only useable with MDA or CGA card?
So far, yes. Main reason: the EGA/VGA card needs to be initialized and then a Stack, read: RAM, is needed for the various subroutines it needs. And RAM is only available after the refresh has been initialized and, let's say, 2 KB has been tested thoroughly. But after the loop the refresh is stopped and you can forget about the RAM and thus doing anything with the card.

I thought about using the cards own RAM, just like I did with the CGA/MDA card but ran into a weird problem: the RAM could not be found! I tried with two different cards. My conclusion so far: the RAM isn't visible until the card has been initialized.

There is a possible solution: add some external SRAM somewhere in the C800-EFFF range that can serve as Stack. IMHO the EGA/VGA card can be initialized immediately after the RAM itself has been tested.
 
Can diagnose rom theoretically work without a video card? I mean using a COM port for output. This would be useful for troubleshooting a motherboard when you don't have a CGA, MDA or Hercules card.

I vaguely remember setting up an ancient RS/6000 without a videocard using COM port.
 
Can diagnose rom theoretically work without a video card? I mean using a COM port for output. This would be useful for troubleshooting a motherboard when you don't have a CGA, MDA or Hercules card.
Ruud's Diagnostic ROM presently outputs information the parallel/LPT ports, where a cheap device like the one shown at [here] can display that information.
And presently that is limited. As soon as the diagnostic discovers no MDA or CGA hard, it halts.

Enhancements are forthcoming, but I have to fit the research and implementation in with everything else that I do.
 
The main reason Ruud's Diagnostic ROM needs a CGA or MDA card is the Stack. With Landmark you could only have a Stack after the refresh worked fine and some RAM had been initialized. If you wanted to make use of subroutines in the mean time, you had to create all these little ROM based Stacks. Doable, but a lot of work. Another "problem": Landmark used the video memory to store the data like the number of loop it was performing. It was the number on the screen stored as ASCII.
My idea was quite simple: a MDA video card has 4096 bytes of RAM that is ALWAYS accessible and only 4000 are needed. A CGA card even more, much more. It meant that I had 96 bytes to store my data in a decent way and enough to have a Stack. The advantages:
- no more of these little weird little ROM based Stacks needed
- if I needed to change the layout of the screen, I did not need to worry about "where can I find my data now?"
If you have another independent source of SRAM that can be used, like a little extension board in the C800-EFFF area, no video card is needed anymore.

Regarding the LPT port: I enclosed it because I have a card laying around somewhere. Not as fancy as the one Modem7 pointed to, just two HTIL311A intelligent 7-segments displays. But I never used it because I created my own POST card and always used that one.

I didn't implement RS-232 because I didn't need; I created the Diagnostic ROM for my own needs in the first place because The Landmark one did not work good enough IMHO. It is just one routine that outputs the data towards the POST card and LPT ports. It is just a matter of adding some lines to output the data towards the COM port(s).
 
Regarding the LPT port: I enclosed it because I have a card laying around somewhere. Not as fancy as the one Modem7 pointed to, just two HTIL311A intelligent 7-segments displays. But I never used it because I created my own POST card and always used that one.
The one that I pointed to has a feature that can be useful: the recording of previously received bytes. For example, used to display a word. Or perhaps a test number followed by the failure reason. Or more than two bytes. But as I have discovered, the device ignores a byte if the previously received byte is the same, e.g. a problem if displaying the test word read back from register 2 of the DMA controller, and that word is FFFF. Even putting a 4 second delay between the bytes makes no difference. So a 'works most of the time' answer might be to include a byte number, e.g. [01][FF][02][FF].
 
Ruud's Diagnostic ROM is now at version 3.3

Available at minuszerodegrees.net

-------------------------------------------------------------------------------------------
FIXES / ENHANCEMENTS
-------------------------------------------------------------------------------------------
Fix: The 'Check floppy controller' test will now fail if there is no floppy controller.

Enhancement: If the 'Check floppy controller' test fails, the 'Trying to read a floppy' test will not be performed ("N/A" gets displayed against it.)

Enhancement: A small delay put between tests. (IMO, it looks better.)

Enhancement: The very first thing done by the diagnostic is to output checkpoint 33 (rather than 00). 33 is very distinctive. Yes, we are taking the chance that the circuitry involved in doing that is working.

Enhancement: The second thing done by the diagnostic is that the speaker is beeped three times, in the pattern of short-long-short. Yes, we are taking the chance that the circuitry involved in beeping the speaker is working. But for those without an MDA/CGA card, this beeping indicates that the code has started to execute.
( Of course, a lack of these beeps does not mean that the diagnostic did not start to execute. )

Enhancement: A 'hot timer 1' test added. This is a test that the IBM POST does in an IBM 5160.

Enhancement: A basic test of RAM refresh. Write a test value to an address in bank 0, wait 30 seconds, then read the value back.
(The Supersoft/Landmark uses 10 seconds, but I found that inadequate for an IBM 5150 motherboard of mine.)

Enhancement: Improved documentation within the source code.

-------------------------------------------------------------------------------------------
TO-DO LIST
-------------------------------------------------------------------------------------------

No particular order.

1. In addition to parallel/LPT ports, and port 80H, output checkpoint codes to RS232 ports.

2. Output failure info (where it helps) to the ports.

3. Investigate support for no video card, EGA video card, VGA card. Not straightforward.

4. Investigate issue in the calculation of PC and XT switch settings. A quick look suggests an assumption.

5. Enhance the RAM addressing test. Presently, it only does what the POST in the IBM BIOS does, which is do the test in 16K blocks. That won't, for example, detect a 64K-bit chip (instead of a 256K-bit) that has been accidentally put into bank 0 of the 5160 256-640K motherboard.

6. Enhance the RAM refresh test. Primarily, it uses a test address in bank 0 only, but it needs to cater for a failure where not all banks are affected. (E.g. in the IBM 5150, certain failure modes of chip U55.) Also, I have an IBM XT motherboard, which 30 seconds appears to be inadequate - to be investigated.

7. Displays of address changed from segment+offset format to absolute.

8. The 30 second RAM refresh delay to cater for PC/XT machines running above 4.77 MHz.

9. Improve user documentation. E.g. A listing of the tests with exactly what those tests are doing, NOT doing, probable/possible causes, etc.

10. Improve detection of parity chip failure. Presently some situations don't reveal it, e.g, remove parity RAM chip plus RAM chips for bits 0,1, and 2. No biggie, because after restoring RAM chips for bits 0,1, and 2, the parity RAM chip is then shown as faulty.
 
I have enhanced Ruud's Diagnostic ROM. It is now at version 3.4

Available at minuszerodegrees.net

Enhancement:
The RAM addressing test has been enhanced.
For example, it will now throw an error if a 4164 type RAM chip has been accidentally put into a socket that requires a 41256 type.

Enhancement:
Failing addresses are also shown in absolute hex form.
 
I have enhanced Ruud's Diagnostic ROM. It is now at version 3.5

Available at minuszerodegrees.net

Enhancement:

Code added to detect (in most cases) an unexpected NMI.
Unexpected = NMI's are disabled from reaching the CPU, but the CPU received an NMI.
When detected, checkpoint 99h is generated and then '*** UNEXPECTED NMI ***' is displayed, then the CPU is halted.

Added due to the particular chip failure that WobbleStone had on his 5160 motherboard, and also because any unexpected NMI would hang Ruud's Diagnostic ROM (and possibly the Supersoft Diagnostic ROM).

( An unexpected NMI can be simulated by temporarily, for a very short time, connecting the 8088's NMI pin to +5V. )
 
Somehow I missed that, my fault. I'll add that information to my site ASAP.

Thank you for the good work!
 
I have enhanced Ruud's Diagnostic ROM. It is now at version 3.6

Available at minuszerodegrees.net

Enhancement:

BACKGROUND:

A few people will want to test the motherboard switches, by changing them and verifying that the diagnostic's display of the switches reflects same. For example, all switches off, then all switches on, then varying patterns of settings. That means that a diagnostic's inspection of the switch settings to determine whether the host motherboard is PC-class or XT-class does not work in all situations.

BUG:

There was a bug in relation to the reading/display of the motherboard switch settings. I knew that the cause was going to be related to the diagnostic's inspection of the switch settings to determine whether the host motherboard is PC-class or XT-class.

FIX:

The switches are now displayed in the same way that the Supersoft/Landmark displays them: three boxes. A 'PC SW1', a 'PC SW2' box, and an 'XT SW1' box. When the diagnostic is used on a PC-class motherboard, the two PC boxes are the ones that the user look at. When the diagnostic is used on an XT-class motherboard, the XT box is the one that the user looks at.


1692696917055.png
 
I have problem with original IBM XT 5160 64-256 kB motherboard.
When I use diagnostics ROM it passes first 2 kB memory and then is continuously counting up to 64 kB and over and over.
Does not go further.
I checked all memory chips and they are ok.
 
I have problem with original IBM XT 5160 64-256 kB motherboard.
When I use diagnostics ROM it passes first 2 kB memory and then is continuously counting up to 64 kB and over and over.
Does not go further.
I checked all memory chips and they are ok.
On the face of it, it sounds like an addressing problem: when a certain address in the code is reached, the CPU goes back to executing from an earlier point in the code.

1. What version of Rudd's Diagnostic ROM are you using ?

2. Is Rudd's Diagnostic ROM displaying "Found RAM: 64 KB" ?

2. "Counting up" does not make sense to me, because at no stage does Rudd's Diagnostic ROM show a figure that 'counts up'. What I think you may be referring to are the progress blocks shown when the 'Testing RAM' tests execute, per the example photo at [here]. Confirm that for us.

3. Does TEST6077 at [here] do what is expected of it? Confidence test only.

4. In case of a faulty EPROM/EEPROM, program a second EPROM/EEPROM with the code for Rudd's Diagnostic ROM and then see if that second EPROM/EEPROM behaves the same. ( A faulty EPROM/EEPROM can pass data/content verification - see [here].)
 
Thank you for your reply :)

I started by burning version 2023-08-22 and tested the motherboard today
The result is much better. It found 256 kB of RAM and showed a critical error when testing the memory
 

Attachments

  • ruuds2.jpg
    ruuds2.jpg
    100 KB · Views: 25
Last edited:
I started by burning version 2023-08-22
Version 3.6

I started by burning version 2023-08-22 and tested the motherboard today
The result is much better. It found 256 kB of RAM and showed a critical error when testing the memory
So, an addressing problem as what the symptoms suggested.

The cause could be an expansion card, a RAM chip on the motherboard, or a non-RAM chip on the motherboard. I was in the same 'addressing problem' situation some weeks back, and the cause turned out to be a non-RAM chip on the motherboard.
Try the following, in the order shown.

------------------------------------------------------------------------------------------
STEP 1

If you haven't already, remove all ISA expansion cards except for the video card. Then see if Ruud's Diagnostic ROM still reports an addressing error.

STEP 2

You have a 5160 64-256KB motherboard. Does the diagnostic still report an addressing problem after you:
- Remove the RAM chips from banks 1, 2, and 3; and <--- important
- Set the two RAM related switches in switch block SW1 to 'enable only bank 0'.

STEP 3

{ Still have an addressing error with only bank 0 in operation. }
Swap out the RAM chips currently in bank 0 with a set of chips that you removed in step 2. Then see if Ruud's Diagnostic ROM still reports an addressing error.

------------------------------------------------------------------------------------------

Let us know the result of these three steps.

Also, do you have access to a logic probe ?
 
Back
Top