• Please review our updated Terms and Rules here

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

What are the changes:
- If something goes wrong during the 2 KB test, offending address and the bad bits are shown.
For those with an IBM 5150, i.e. RAM chips in bank 0 are soldered in, showing the bad bit/s for the 'first 2 KB test' is a good improvement over the previous version. (Screen shot at [here].)

I have added a 'Ruuds diagnostic ROM for IBM 5150/5155/5160' link on minuszerodegrees.net (within the 'ROMs' section).
From that link, navigation is to four distinct web pages:
- ROM fitted to the 16KB-64KB version of IBM 5150 motherboard
- ROM fitted to the 64KB-256KB version of IBM 5150 motherboard
- ROM fitted to the 64-256KB version of IBM 5160 motherboard
- ROM fitted to the 256-640KB version of IBM 5160 motherboard
 
Hello @Ruud
thank you, ok, I will try the source code, can you share please your script that compile the source code and then copy the compiled file to the emulator?
nasm.exe diagrom.asm -f bin -l diagrom.lst -o diagrom.%Exten% -Z error.txt
nasm.exe diagrom.asm -f bin -l diagrom.lst -o diagrom.%Exten%
checksum diagrom.bin

The first line compiles the source and outputs the possible errors to a text file. The second line outpus the possible errors to the screen. The third line adjusts the checksum byte.
Sources and exe can be found in the attached ZIP file. Written using Free Pascal Compiler.
 

Attachments

  • Checksum.zip
    46.1 KB · Views: 15
nasm.exe diagrom.asm -f bin -l diagrom.lst -o diagrom.%Exten% -Z error.txt
nasm.exe diagrom.asm -f bin -l diagrom.lst -o diagrom.%Exten%
checksum diagrom.bin

The first line compiles the source and outputs the possible errors to a text file. The second line outpus the possible errors to the screen. The third line adjusts the checksum byte.
Sources and exe can be found in the attached ZIP file. Written using Free Pascal Compiler.
Hi @Ruud
Thank you a lot.
 
Dear @Ruud

I have two XT Clone PCs that I am in the process of restoring.
(One with Battery Damage. One recovered from a seller, never tested)

Spec: V20 Processor, Faraday FE2010A Chipset thing. It comes with a CGA card (and will build the Sergey's ISA Super VGA card soon.)

Can I use your Diagnostic ROM with this system?
 

Attachments

  • 1661503888593.jpg
    1661503888593.jpg
    664.4 KB · Views: 16
  • 1661505489095.jpg
    1661505489095.jpg
    404.9 KB · Views: 15
Then it should work. The remark about the VGA card was made because I got "complaints" that it didn't work with VGA cards. For the moment it won't. For an explanation, please see this so far unfinished page. (Sorry, due to a renovation I completely forgot about it)
 
Then it should work. The remark about the VGA card was made because I got "complaints" that it didn't work with VGA cards. For the moment it won't. For an explanation, please see this so far unfinished page. (Sorry, due to a renovation I completely forgot about it)

Ref: http://www.baltissen.org/newhtm/diagnosticROM.htm

If I can get VGA to work (I don't own EGA so I cannot test that), that will be version 3.

Eagerly waiting for the version 3 :)
Atleast minimum support for Sergey's ISA Super VGA.
 
I used to use Landmark but I had some thoughts about it and it seemed nice to create my own version. But until some on board memory had been tested, everything had to be done in ROM, thus including running subroutines using a trick: version 1. Then the idea rose to use a part of the video memory, the part outside the screen, as stack and that simplified a lot: version 2. If that works with CGA and MDA, why not with VGA? Which will be version 3.

The problem: due to a renovation I have a bad access to my hardware. The good news: the actual work has been finished, so it is now a matter of clearing everything and then find out where everything has been stuffed. Two very kind sons helped me to stow things away but forgot to note down where they put what. OK, that's life :)
 
A ROM like this is needed when there is a big problem.
In this case, there is a good chance that any video will work.
Then, ask for VGA support is the contrary of the ROM purpose....
 
I know two men having a XT clone with a VGA card for the simple reason that they don't have a CGA or MDA monitor. They would be pleased with having a ROM that works with VGA. Just in case....
 
I know two men having a XT clone with a VGA card for the simple reason that they don't have a CGA or MDA monitor. They would be pleased with having a ROM that works with VGA. Just in case....
Hi Rud,

Excellent job :)

Where can I find the last version ?
I would like to do an extended ROM version of your ROM, to play with it with my PicoMEM Board.
 
I know two men having a XT clone with a VGA card for the simple reason that they don't have a CGA or MDA monitor. They would be pleased with having a ROM that works with VGA. Just in case....
I actually started implementing polling mode serial output for that situation for the XT clone board I was fixing, but found and fixed the hardware issue before I got very far. It would require butchering TextToScreen, etc. to use ANSI escape sequences to move the cursor around among other changes.
 
Hmm, it is an idea using a COM port for outputting data. I have thought about it before but having CGA and MDA at my disposal I discarded the idea. The advantage of this idea is that you can use any computer with a COM port to see what is going on. But I must assume that the user won't have a CGA or MDA card at hand which means I must use version 1 as base for this version.

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? And how will it handle CR and LF?

With a bit of luck I'll be able to give my full attention to the VGA version again tomorrow.
 
Hmm, it is an idea using a COM port for outputting data. I have thought about it before but having CGA and MDA at my disposal I discarded the idea. The advantage of this idea is that you can use any computer with a COM port to see what is going on. But I must assume that the user won't have a CGA or MDA card at hand which means I must use version 1 as base for this version.

COM port Debugging will be a great help when lack of CGA/MDA card.
In that case, I do not need any VGA support :)
 
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? And how will it handle CR and LF?
Will you need much more than to be able to reset (clear) the screen, position the cursor to some position, and output a string at that position (moving the cursor along the way)? ANSI escape sequences should be all you need. CR-LF will work as expected. I can't remember if you're using any IBM "extended ASCII" characters like line drawing characters, but you might want to take those out as well and replace with +, -, | so the user doesn't have to bother configuring their terminal program to use any character set but ASCII.

Here's assembly for a DOS COM program that does this--writing to the serial port but without using interrupts.

cpu 8086 bits 16 org 100h COM1 equ 3f8h COM2 equ 2f8h TXBUF equ 0 ; Transmit buffer RXBUF equ 0 ; Receive buffer DIVLO equ 0 ; Baud divisor, low byte DIVHI equ 1 ; Baud divisor, high byte INTEN equ 1 ; Interrupt enable INTID equ 2 ; Interrupt identification LINECON equ 3 ; Line control MODCON equ 4 ; Modem control LINESTAT equ 5 ; Line status MODSTAT equ 6 ; Modem status section .text start: cld ;; set 8-N-1 and flip to divisor access mode mov dx,COM1+LINECON mov al,83h out dx,al ;; program 1200 bps mov dl,(COM1+DIVLO) & 0xff mov al,60h ; 0060h for 1200 out dx,al inc dx ; DIVHI xor al,al out dx,al ;; get out of divisor access mode mov dl,(COM1+LINECON) & 0xff mov al,03h out dx,al ;; disable all interrupts from the port mov dl,(COM1+INTEN) & 0xff xor al,al out dx,al ;; initialize modem control register ;; turn RTS and DTR on for max compat with terminal program on other end mov dl,(COM1+MODCON) & 0xff mov al,03h out dx,al ;; send string mov cx,HELLOLEN mov di,COM1+TXBUF inc dx ; LINESTAT mov si,szHelloWorld .send: ;; implement timeout here... in al,dx test al,40h ; transmitter hold register jz .send ; if it's busy, try again xchg dx,di ; TXBUF lodsb out dx,al xchg dx,di ; LINESTAT loop .send .done: mov ax,4c00h int 21h section .data szHelloWorld db 27,'c' ; ANSI escape to reset terminal db 27,'[12;34H' ; cursor on line 12, column 34 db "Hello World!",13,10,"CR-LF works!" HELLOLEN equ $-szHelloWorld
 
COM port Debugging will be a great help when lack of CGA/MDA card.
In that case, I do not need any VGA support :)
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].
 
Back
Top