• Please review our updated Terms and Rules here

Ruud's diagnostic ROM for IBM PC, XT and compatibles

Right now, Ruud's diagnostic ROM presently outputs checkpoint ('debugging') codes to the parallel (LPT) ports of 378h, 278h, and 3BCh.
Those codes can be viewed via the modern device shown at [here].
More information about that is in the 'Checkpoint Codes' section in any of the five options at [here].
Actually, my PC-XT 8088 clone motherboard doesn't have in-build Parallel Port. Add-on card is needed for Parallel Port.
Has: FDD header, COM port and Game Port!

It would be great if I could read the Debug code through the Serial/COM Port to my Laptop with Putty.
 
I've been having issues with my XT and floppy drives (still looking for a MFM HDD + Floppy controller). 27c256 is fine right (with it doubled) or should I use a 27c128? Need to test the ram, but can't load a floppy...

Machine is a 5160 w/ 640kb upgrade (was 256kb). Original IBM CGA. SIIG serial, LAVA Computing parallel.
 
I've been having issues with my XT and floppy drives (still looking for a MFM HDD + Floppy controller). 27c256 is fine right (with it doubled) or should I use a 27c128? Need to test the ram, but can't load a floppy...

Machine is a 5160 w/ 640kb upgrade (was 256kb).
That will be a RAM subsystem upgrade. The wiring of the EPROM sockets will probably still be per the 64-256KB motherboard, which is pins 1 and 27 of each socket tied together.

Use a 27C256. Take a look at the 'Early 5160 motherboards' section at [here], which will show you which make-models of 27C256 are known to work. A W27E257 will work as well.

Rudd's diagnostic ROM is 8 KB sized, and so that would be quadrupled for a 27C256 (32 KB). I have already done that - see the 'Images (content) to be programmed into EPROM' section at [here].

... but can't load a floppy ... Original IBM CGA. SIIG serial, LAVA Computing parallel.
You have a serial card. Maybe accessing a serial floppy drive is a temporary option for you.
 
Questions: I have programmed small programs to send data over the COM port but so far only between my own devices, for example between my C64 and a PC. If I use my laptop with PuTTY, do I need to use a protocol? Or will it just display the characters that I send?
It should be very straightforward.
1. Initialise the serial port/s.
2. Then for each checkpoint code, send ASCII (e.g. for checkpoint 01, send byte 30h then byte 31h).
3. Then send a CR+LF sequence.

In the operation manual, the user gets informed of what serial parameters (baud, etc.) to set up their receiving device to, and the fact that ASCII is being sent.

And how will it handle CR and LF?
It will depend on the receiving device, and its configuration. Some 'receivers' will do a LF after the received CR, in which case, one ends up with an empty line between the checkpoint codes (because of two LF's, one done by the receiver, and one sent by your code). But that is hardly a problem, and if it bothers someone, they should be able to reconfigure their receiver.

1680507044449.png

You should not send a CR only, because for some receivers, that will only take the cursor back to the start of the current line.
 
Those codes can be viewed via the modern device shown at [here].
Just two HTIL311s, 7-segment display with internal 4 bits to 7-segmnet decoder, plus a 5V source will do as well. And you don't have to use delays.

Just in case people want the fancy one, do you know a source for it, Ray? TIA!

Edit: wanting to copy Makefile's code I saw Ayandon's entries and your reply. Strange because I am quite sure they weren't there when I read your and Makefile's comments. And your suggestion of "lpt post" is good.
 
Last edited:
Here's assembly for a DOS COM program that does this--writing to the serial port but without using interrupts. .......
Thank you very much!

I'll start with a simple version anyway: just lines of text showing the progress and results. For that I needed to know if CR and LF would work. When things work out fine, I will try to implement ANSI escape codes.
 
Bummer, I ran into a problem. Both Landmark and my program use the video memory to store various data like the amount of runs and errors. So it seems that a MDA or CGA video card is a must for the moment. Unless someone has another solution.

Just to remind you: the onboard RAM cannot be used because the refresh is turned off too long between runs. A possibility is an add-on card with SRAM like the EMS or 1 MB cards of Lo-tech. Any idea is welcome!
 
And your suggestion of "lpt post" is good.
I added text to that effect in the top-left corner of the photo at [here].

A possibility is an add-on card with SRAM like the EMS or 1 MB cards of Lo-tech.
I think that is getting 'messy'.

• Most people would need to purchase one of those two cards.

• The 1 MB card is not simply a 'plug it in and off you go' thing. Some people are not going to know how to configure it to suit their particular hardware configuration.

• For an EMS card, you would need to have code in your diagnostic that communicates directly with the hardware on the EMS card (since an EMS driver loaded is DOS does not exist). Specific to the EMS hardware?

• Multiple versions of your code. e.g.
- One for {Lo-tech EMS card, with Rudd's code putting the EMS page frame/window put at D0000},
- One for {Lo-tech EMS card, with Rudd's code putting the EMS page frame/window put at D4000},
- One for {SRAM at address 630K},
- One for {SRAM at address 640K},
and so on.
 
Any idea is welcome!
Just to remind you: the onboard RAM cannot be used because the refresh is turned off too long between runs.
I did think, "Simply reading from or writing to a dynamic RAM address refreshes it. So, in basic theory, with DMA based refreshing off, some conventional memory could be used, requiring that some extra code goes into the ROM that simply reads those bytes at a good enough frequency (a kind of manual refresh)."

Some consideration is:

1. What address ranges to use. One has to allow for the fact that a common reason for using a ROM based diagnostic is because there is a bad RAM chip/s in bank 0.

2. Initially, the address range in use would probably need to be 'dummy' read 8 times. This is due to the dynamic RAM requirement that follows:
1680584476895.png
 
• The 1 MB card is not simply a 'plug it in and off you go' thing. Some people are not going to know how to configure it to suit their particular hardware configuration.
Buying this card and not knowing how to configure it? Why did they buy it then?
Maybe I should have said that anything with a few KB of RAM would be fine. I have seen cards around that can be used as UMB RAM for XT machines.

• For an EMS card, you would need to have code in your diagnostic that communicates directly with the hardware on the EMS card (since an EMS driver loaded is DOS does not exist). Specific to the EMS hardware?
An EMS card has at least a window of a few KB inside the normal range and that is already enough. And AFAIK this window is configured by jumpers. To address the other pages, software will be needed. But I don't need those pages. So problem solved :)
Afterthought: do cards exist where the window has to be configured by software? If so, just configure it first on another machine.

• Multiple versions of your code. e.g. .....
Not really, I think. What I need is the address where the SRAM can be found. Alter the variable that holds this address in the source code and assemble it. Then run a tool that creates the various version for the 5150, 5160, etc. Or did you convert them all by hand? If so, I should be able to automate that. I can even tell the tool to assemble the source. Assuming that they know how to download NASM, anyone can change the address and create the needed BINs.
 
• The 1 MB card is not simply a 'plug it in and off you go' thing. Some people are not going to know how to configure it to suit their particular hardware configuration.
Buying this card and not knowing how to configure it? Why did they buy it then?
Because VGA is the only type of video card they have for the target machine, and they are informed that they need to acquire a 1 MB card to get VGA support in Rudd's Diagnostic ROM.
But I guess such people could choose the easier (?) route of acquiring an MDA/CGA card instead of a 1 MB card.

• For an EMS card, you would need to have code in your diagnostic that communicates directly with the hardware on the EMS card (since an EMS driver loaded is DOS does not exist). Specific to the EMS hardware?
An EMS card has at least a window of a few KB inside the normal range and that is already enough. And AFAIK this window is configured by jumpers. To address the other pages, software will be needed. But I don't need those pages. So problem solved :)
Afterthought: do cards exist where the window has to be configured by software? If so, just configure it first on another machine.
Background: Some network cards put a RAM buffer into the UMA, and for some of those, the RAM buffer does not appear in memory space until the driver gets loaded (i.e. the driver is doing some kind of card initialisation that results in the buffer appearing). There's a particular SMC made card I remember well, where we had to use the 'exclude' option in things like EMM386.EXE and Windows because the RAM buffer was not 'visible' in the early part of the booting process.

Could it be that some EMS cards are the same, i.e. the frame/window does not become 'visible' until the EMS hardware is sufficiently initialised !
 
But I guess such people could choose the easier (?) route of acquiring an MDA/CGA card instead of a 1 MB card.
Thinking all comments over and over I think that this is the easiest solution. And less work for me :)
 
AFAIK it should. To the PC it looks and acts like a CGA (or MDA) card. But it outputs a VGA signal. Ideal for people without a CGA or MDA monitor.

I'm interested in this card but I'm not able to solder those SMD parts and haven't found a party that could build it.
 
Back
Top