PDA

View Full Version : Custom resolution in Windows 2.x With ET4000



marcoguy
March 25th, 2016, 12:28 PM
I just thought I'd share this neat little trick I stumbled upon while experimenting with the Windows 2.x ET4000 drivers on my Deskpro 286.

I've recently acquired an NEC Multisync JC-1401P3A. As you might know, the original Multisyncs had a max resolution of 800x560, painfully close to 800x600 SVGA. Now, I'm not aware of any video cards or drivers that will display 800x560 without modification, but I do have plenty of 800x600 SVGA cards lying around, like the ET4000 in my Deskpro. It occurred to me last night that there might be a relatively easy way to adapt the ET4000 drivers to output 800x560. I figured it was a long shot for someone like myself with little to no experience working with drivers like this, but lo and behold, it took all of 5 minutes and actually worked :)

So here's what I did:

1. Open up VGA800.DRV in a hex editor
2. Locate the hex sequence 20 03 58 02 (Little-endian hex for 800 600). I've found that the sequence occurs twice, at offset 4932h and 4958h.
3. Replace the data at both locations with your desired resolution, obviously converted to hex (must be lower than 800x600, more on that later). In my case, I used 20 03 30 02 for 800x560
4. Save the modded file and install the driver as usual, selecting the 800x600 option.

Here's what I've been able to gather about the effects of the mod. It doesn't actually change the resolution being fed to the monitor, but rather the resolution that Windows "thinks" it can use. This can result in some odd behavior, but nothing too dramatic as long as you don't try displaying anything higher than the physical resolution. One quirk is that, when running in an emulator, you will get black bars to the bottom/right of the image to compensate for the portion of the screen resolution that is no longer being used. For example, on my 800x560 setup, I have a 40-pixel-high bar of black at the bottom of the screen when using the driver in an emulator. The other quirk I've noticed is that the mouse pointer will still show up over the black bar, but the tip cannot move below the active screen, just as if it had reached the bottom of the screen in a regular setup. Both of these effects can be seen here:
http://i.imgur.com/cpEu8hBm.png (http://i.imgur.com/cpEu8hB.png)

With the standard 800x600 driver for comparison:
http://i.imgur.com/IZ5UaZ8m.png (http://i.imgur.com/IZ5UaZ8.png)

And here's what happens when you try to make the 800x600 driver display at 1024x768:
http://i.imgur.com/D9Zkn88m.png (http://i.imgur.com/D9Zkn88.png)

Which is to be expected, as Windows is trying to use screen space that doesn't exist so naturally there would be glitches in the display. Anyway, I hope this trick is useful to someone somewhere. It doesn't exactly solve a widespread problem but I just figured I would post the instructions on the off chance that they could actually be useful to someone. If anyone feels like trying this out with drivers for a different card or a different operating system, feel free to chime in. I won't be home for the weekend, but on Monday I can add a few pics of this actually running on my Multisync in all its glory :)

For some reason the forum software won't let me attach IMA files, but here are two pre-made driver disks: 800x560 (https://drive.google.com/file/d/0Byf3UTe-z1m3SGE2LWZOcG15MEE/view?usp=sharing) and 800x600 (https://drive.google.com/file/d/0Byf3UTe-z1m3dlNNUkdxcmlrZm8/view?usp=sharing).

Xacalite
March 25th, 2016, 12:50 PM
Now, I'm not aware of any video cards or drivers that will display 800x560 without modification
According to Ralf Brown's Interrupt List, there are at least two: ATI EGA Wonder and ATI VIP.
No idea about drivers, though.

vwestlife
March 25th, 2016, 05:30 PM
Since VGA is analog, it's the horizontal and vertical frequencies that matter, not the amount of pixels being displayed. You can display any resolution you want as long as the H and V freqs stay within the monitor's limits.

The specs for the JC-1401P3A are 15.5 to 35 kHz H, 56 to 62 Hz V.

800x600 @ 56 Hz V uses a scan rate of 35.2 kHz H, which is well within its tolerance.

marcoguy
March 25th, 2016, 05:54 PM
Yes, the monitor certainly can tolerate and sync to a full 800x600/56 Hz signal, but I've found that the picture tends to run off the bottom of the viewable screen and require a good deal of adjustment, and even then the top and bottom margins end up way smaller than the left and right. This fix is purely cosmetic, as the signal being fed to the monitor is still 800x600/56 Hz. If it couldn't sync to that, it wouldn't be able to sync to this either. This fix just lets me load Windows more conveniently without requiring a bunch of vertical adjustment.

mR_Slug
March 25th, 2016, 06:14 PM
According to Ralf Brown's Interrupt List, there are at least two: ATI EGA Wonder and ATI VIP.
No idea about drivers, though.

Here are some more I found a while back:

Intelligent VGA Board (800x560x16/800x528x16/80x66/80x33/132x25/132x44)
Sigma VGA/H 256k (tseng based) (800x600x16/800x560x16/132x?)
Tatung VGA Platinum card 256k (800x560x16/132x25/132x44)
PCG Photon Mega Card (800x560/640x480)

I think the Sigma card is based on the ET3000 chip, so assuming the functionality wasn't removed in the ET4000 chip, in theory all ET4000 based cards should work.

SomeGuy
March 25th, 2016, 06:29 PM
Internally, many chipsets may be able to set arbitrary resolutions, but the problem is the driver software is coded only for a few small common resolutions.

If by chance the Windows 2.x driver initializes the video chip itself rather than passing the initialization off to the BIOS (most DOS application drivers do) then it might technically be possible to modify the driver to do an actual custom resolution. Although tracking down and reverse engineering all of the needed bits may be very difficult.