Jump to content

DVI connection management under DOS\9x.


Recommended Posts

Greetings. Faced with a problem related to DVI connection. It appears both in pure MS-DOS 6.22 and in the DOS window of Windows 98. I used different nVidia graphics cards and everywhere the picture is almost identical. Namely, when I set any resolution and refresh rate (640x480; 800x600; 1024x768), it is reset to native for my monitor, determined by the EDID for the DVI port. Monitor, any selected input resolution defines as 1600x900@60hz. Naturally, I would like to put something else. For example, 800x600@72hz. but the input is still the same 1600x900@60hz.

When I connect via VGA, everything works correctly. What resolution and frequency I set - this is displayed. As far as I understand, the nVidia video card scales any outgoing resolution to native, if connected via DVI. Is it possible to somehow disable forced scaling under DOS\9x for DVI connection or somehow explicitly set the required mode?

Link to comment
Share on other sites


1. It is not Nvidia specific behaviour. BIOSes of old ATI cards setup 1280*1024 on DVI output for example no matter what is native resolution of monitor (if it is above or equal to 1280*1024, of course) and requested video mode.

2. Only patch BIOS or direct program GPU.

Link to comment
Share on other sites

Posted (edited)

When first booting to DOS, the display surface is usually in a 720x400 text mode. That's 80x25 characters, 9x16 pixels each.

To reset the text mode to 80 or 40 columns, color or black&white, use:

 mode { co80 | co40 | bw80 | bw40 }

e.g.: mode co80

 

Edited by jumper
Link to comment
Share on other sites

14 hours ago, jumper said:

Vesa video modes should be supported. Use a DOS app to set the screen to any standard Vesa mode.

You probably misunderstand the problem. Software get the right mode (which it requested), but hardware output to monitor has different mode (resolution) because between software visible surface and hardware output locates the scaler. The question is how to eliminate it.

Link to comment
Share on other sites

2 hours ago, jumper said:

Vesa video modes should be supported. Use a DOS app to set the screen to any standard Vesa mode.

 

 

1 hour ago, jumper said:

When first booting to DOS, the display surface is usually in a 720x400 text mode. That's 80x25 characters, 9x16 pixels each.

To reset the text mode to 80 or 40 columns, color or black&white, use:

 mode { co80 | co40 | bw80 | bw40 }

e.g.: mode co80

 

Yes, all these modes work fine (including VESA), but all of them are forcibly scaled by the video card to native under DOS, if connected via DVI. Via VGA, all modes (VESA, at least) are displayed "as is", as set by the software. I would like to do the same for DVI connection.

 

Just now, SweetLow said:

You probably misunderstand the problem. Software get the right mode (which it requested), but hardware output to monitor has different mode (resolution) because between software visible surface and hardware output locates the scaler. The question is how to eliminate it.

Yes, that's right. When connecting an nVidia video card via DVI, from the moment the PC is turned on, the video mode specified in the monitor's EDID ("Detailed Data" -> "Preferred Timing Block") is set and what resolution and frequency are specified in this block, these will be used in the future under DOS (And in the DOS window of Windows 98, too). And all other modes that the DOS software requests are forcibly scaled to this previously set resolution (and frequency). What you need to specify in this EDID block will happen. When the video driver under Windows 98 is included in the game, other (Extended) EDID blocks (which can also contain other video modes) are also taken into account, which allows you to set custom permissions that the monitor can accept natively (As is), if they are listed in these blocks. Otherwise, you are forced to scale to the native video mode of the same or the nearest supported video mode specified in these extended EDID blocks. The highest resolution specified in these blocks (CEA Extension) is considered the native monitor resolution for the nVidia video driver under Windows 98.

Here the question remains, why do DOS ignore the standard modes listed in the main EDID section ("Standard Data" - > "Established Timings" + "Standard Timings") and immediately switch to "Detailed Data"? This is also the most basic thing, and it should be taken into account first of all. I haven't checked yet, but I suspect that this may be due to the flag set under "Feature Support" -> "Preferred Timing Mode" (Preferred Timing Mode includes the Native Pixel Format and Preferred Refresh Rate of the Display Device). I'll have to try turning it off.

PS: When creating this topic, I was just hoping that maybe someone knows some low-level DOS tool that allows:

- adjust EDID data in memory.
- manage the DVI connection in real time (changing, for example, the refresh rate).
- enable / disable forced scaling by the video adapter.

On the last point, there is indeed such a tool, but it works a little differently than expected. Namely, the video mode remains the same (For example, 1600x900), set according to the EDID at the start of the PC (As described above), only 800x600 scaled to it (For example) are obtained in the center or from the edge, instead of stretching (By default) completely. That's all the management. This is a bit different.

Link to comment
Share on other sites

Could it be as simple as the monitor is set to stretch the DVI input to fill the screen? I'd check the monitor controls.

 

Link to comment
Share on other sites

The monitor scales what the video card gives you. And if it gives 1600x900 (In which 800x600 is scaled, by means of the video card), then the monitor works with it as with 1600x900, offering options available for this resolution for further scaling (Emulation 17", 19", 4:3, for example, and so on).

Nah, well, it's not like that at all... We may also want to change the refresh rate (and not just change the resolution\disable zooming). How will the monitor handle this? I didn't find anything about this for DVI (There are solutions for VGA, they are tested and work. Such as UniRefresh, UniVBE, VBEHZ), but for DVI, the frequency specified in the monitor's EDID (Preferred Timing Mode) is always used, at least for nVidia. I haven't found any utility that allows you to switch refresh rates (For DVI) yet.

There is another idea here - to make several versions of EDID, prescribing in each your preferred video mode and refresh rate (So that you can choose your own for each case). But how to re-shoot EDID under DOS? Where is it actually stored in memory (so that it can be replaced and reinitialized)? Of course, outside the monitor. After all, it comes from the monitor to the computer and is stored somewhere in a volatile part of the memory.

I will later try to test one hypothesis, whether it is even possible in principle to initialize (And force to use) another EDID in one day, without rebooting the PC (So far over the wire, with the actual transfer of another EDID). If the experiment is successful , the possibility of redefining the EDID under DOS in memory may theoretically exist (which is at least somewhat encouraging).

PS: I have already found information about the existence of hardware solutions that allow you to replace the EDID. But for now, I would like to try to limit myself exclusively to software tools (After all, with VGA it is possible to do this. Why all of a sudden such difficulties with DVI?).

___________

Checked it out. And it really can work that way. Loading any compatible VBIOS image file under DOS (Using RamBios\VGABios) causes the video card to read the EDID in a new way (While RamBios\VGABios, along with the image, can be unloaded immediately after that, so as not to take up memory). It remains to find a way to replace the EDID data sent by the monitor with your own (custom) ones, and then you can load any custom EDID under DOS (With the necessary video modes and update frequencies). There are no other software solutions to the problem yet. Tested on GeForce PCX 5900 (PCI-E x16).

Edited by defuser
Link to comment
Share on other sites

On 5/21/2024 at 9:46 PM, defuser said:

When I connect via VGA, everything works correctly. What resolution and frequency I set - this is displayed. As far as I understand, the nVidia video card scales any outgoing resolution to native, if connected via DVI. Is it possible to somehow disable forced scaling under DOS\9x for DVI connection or somehow explicitly set the required mode?

your problem is not related with videocard. this is monitor issue, not card. my monitor, benq bl2411, which i use 12 years, doing force stretch image to fullscreen for ANY signal on DVI input, from any source - Intel HDG, NVidia 4200/5200/1070, BUT Radeon, which SELF does image centering. so just replace monitor to manual aspect setting capable.

Edited by MERCURY127
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...