• Please review our updated Terms and Rules here

True CGA vs VGA card in CGA mode

Strange. I've examined the BIOS dump, and I can't seem to find anything like that. I found the date and copyright, but not any revision number. I guess IBM didn't include revision numbers properly in the earlier BIOS'es before 1985.

No. The 487SX socet is empty. The first versions of CGA_COMP wouldn't even run on it because it lacks a math coprocessor.

Okay, my bad again (sorry, I wrote parts of the detection library 15 years ago): The BIOS date and revision are appended to the BIOS string. So, in this string:

1501512 Corp. IBM 1981 (11/08/82, Rev. 244)

The "1501512 Corp. IBM 1981" is ascii found in the ROM BIOS and the "(11/08/82, Rev. 244)" is found using the following code:

Code:
Function BiosDate;
Begin
  BiosDate:=Chr (MEM[$FFFF:$0005])+Chr(MEM[$FFFF:$0006])+
              Chr (MEM[$FFFF:$0007])+Chr(MEM[$FFFF:$0008])+
              Chr (MEM[$FFFF:$0009])+Chr(MEM[$FFFF:$000A])+
              Chr (MEM[$FFFF:$000B])+Chr(MEM[$FFFF:$000C]);
End;

Function BiosRevision;
Var
  W:Word;
Begin
  Regs.AH:=$C0;
  Regs.ES:=0;
  Regs.BX:=0;
  Regs.Flags:=Regs.Flags and FCarry;
  Intr($15,regs);
  BiosRevision:=Mem[Regs.ES:Regs.BX+4];
End;

Since your BIOS doesn't support that call, it's invalid. The code to detect system type and BIOS revision are obvious not related, so I'll fix the code. (Someday, not now. Probably when I write my benchmark.)

As for the 486 misfire, I don't have a 486sx so I can't immediately fix that. But thanks for the bug report and I'll probably remove that part until I can test it.
 
I had occasion to test this software in my Tandy 1000 TL, and the CGA emulation was surprisingly good. The tests it failed were the Interlace Mode (showing what a VGA card would show) and all the memory read/write tests. It complained about the timing, even though this machine is XT class and built before 1990. (It did have a 286-486 accelerator in it.)

It also did not show the tweaked text mode pictures exactly as they should have been, but the reason why is because the Tandy font has differences compared to the IBM PC font.

Edit: a Tandy 1000 SX is more compatible. The Interlace Mode showed up exactly as it would on a true IBM CGA except that you needed to set the screen to use 200 lines instead of 225. The memory read/write tests were faster than a real CGA, but I assume that is because the CPU is faster.
 
Last edited:
Anyone has the last cgacomp release available? I can't access the oldskool.org webpage, it is down right now...

EDIT: Is up again.
 
Last edited:
I needed to add some monitor calibration tests to the CGA compatibility tester, so: Surprise! New version (v1.1) is available at http://www.oldskool.org/pc/cgacomp . Features added to the new release:


  • Composite modes and monitors now officially supported.
  • Added aspect ratio calibration pattern.
  • Added color uniformity/purity screens.
  • Added monitor linearity grids.
  • Replaced Robert Tyler picture with an amazing original piece from VileR.
  • Added Composite CGA identification screen originally seen in "8088 MPH".
  • Optimized code for size and overlay usage. Now runs on 128KB systems w/ DOS 3.x (I tested 3.1; bootable disk image available at same URL above). Tandy and PCjr still require 256KB, sorry.
  • Bugfixes (vertical refresh rate detection actually works now, whoops).

Much of this work was done because I'm going to start making videos of authentic CGA output, and needed a way to stress any capture/processing solutions I will be experimenting with.
 
New release of the CGA Compatibility Tester, in which Jim completely removes the aspect ratio test pattern and replaces it with something sensible. Here's what's new:

  • Added convergence pattern.
  • Changed Uniformity test to cycle through RGBI pins.
  • Pressing "P" will now pause/unpause any color cycling.
  • Re-tooled aspect ratio pattern for composite monitors only.
  • Clarified descriptions for tests meant for a particular monitor.

It's usable as a monitor calibration tool too, BTW.
 
Just added a new release with some test plates and options that help if you are trying to capture real CGA video footage (both with a capture solution as well as a videocamera.) Here's what's new:


  • Added video capture color and luminance test plates.
  • Added vertical/horizontal motion video capture torture test.
  • Added capture dropped frame and audio/video sync test.
  • Added IRGB pin and color text labels to the uniformity test.
  • Completely rewrote vertical refresh rate detection because I'm an idiot.
  • Added command-line options for batch usage.
 
There is an obvious way to measure refresh rate (record time difference between two subsequent start-of-refresh events). I was not doing it that way, hence I was an idiot. I can't tell you how I was doing it before because I cleansed prior versions with fire.
 
Hi Trixter,
thank you for the code, very nice. I was asking myself why the detection code failed (hang) on my PC1 Olivetti with XT-IDE Universal BIOS.

Maybe I found an answer:
in WHICHCGA.ASM

4 demoAPI EQU 0F8h
6 ; Determine if loader is present, and abort if not
8 ; First, check to see if the API is even present.
9 ; If not, don't try to call anything since it will hang the system.
10 xor bx,bx
11 mov es,bx
12 mov di,(demoAPI * 4)+2 ;check to see if our INT is empty
13 cmp [word es:di],bx ;int. vector empty?
14 je exitShort ;abort if so
15 mov ax,0700h ;check int. vector to see if it's ours
16 int demoAPI

it check intvec F8 but:

"XTIDE BIOS variables can now be located to top of base RAM and it is the default setting. It will steal 1kB of base RAM but it ensures that nothing accidentally corrupts BIOS variables. Top of interrupt vectors (30:0h) can be used if necessary. All Tandy 1000 models with 640kB or less RAM require that top of interrupt vectors are used". Mine is configured to use top of vector. So it find a NON-zero vector @ int F8.

I checked and mine is nonzero...
Can be this that is locking machine during test?
Also earlier version of 8088MPH didn't hang, but last version did.

Thank you
 
INT F8h is custom to 8088 MPH's interrupt services code. When 8088 MPH runs, INT F8 is installed before the WHICHCGA code runs. If it hangs on your system, that isn't why; likely it is because of the custom video modes we're creating.

Including WHICHCGA in the repo was a mistake, whoops. I'll leave it in for the curious (we have better tricks now).
 
INT F8h is custom to 8088 MPH's interrupt services code. When 8088 MPH runs, INT F8 is installed before the WHICHCGA code runs. If it hangs on your system, that isn't why; likely it is because of the custom video modes we're creating.

Including WHICHCGA in the repo was a mistake, whoops. I'll leave it in for the curious (we have better tricks now).

Ok, thank you trixter. Maybe installation of this INT overwrite some XT-IDE parameters and then reading from Hard Disk result in some mess?
Earlier version of 8088MPH did not hang so is not about the graphics, ... maybe there is some relation with high interrupt customization?
I had to investigate. To the debugger! ;)
 
Ok, thank you trixter. Maybe installation of this INT overwrite some XT-IDE parameters and then reading from Hard Disk result in some mess?
Earlier version of 8088MPH did not hang so is not about the graphics, ... maybe there is some relation with high interrupt customization?
I had to investigate. To the debugger! ;)

No, the INT F8h stuff is not related here, you're mistaken. It doesn't overwrite xt-ide parameters. It's an unused interrupt vector that we decided to use.
 
Earlier version of 8088MPH did not hang so is not about the graphics

I don't recall that we changed anything in the loader between the party version and the final version, so it has always used a loader at int F8h.
Of course the WHICHCGA program itself is new in the final version. So it could be that this program is buggy on your system, while the rest of the demo is not.
I believe the WHICHCGA program is called 8088MPH.001 in the final version. You could replace that with a 'dummy' program to see if that fixes it.
Eg, if you would copy 8088MPH.002 to 8088MPH.001, you'd get the calibration screen twice, and the rest of the demo should work as-is.
Mind you, the calibration screen is new as well, so that may also fail... So you may want to try with 8088MPH.003 first, and perhaps also replace 8088MPH.002 :)
 
Back
Top