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

Posted (edited)

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

Posted (edited)
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

  • 2 weeks later...
On 5/31/2024 at 9:51 PM, MERCURY127 said:

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.

Hi. The question is a bit different. For clarity, I will now try to explain first with an example of how this works in Windows. And then we can move back to DOS.

So, in the nVidia settings, we have the ability to adjust the zoom (Different options), let's look at the first three of them:

nvscl.gif.f81dbf3097834e7497157ce29402844d.gif

DVI connection. On the desktop, we now have 1600x900.

- when you select the first option (Display adapter scaling), it turns out that the input to the monitor is actually 1920x1080 (1600x900 scaled by means of the video card to 1920x1080);

- when you select the second option (Centered output), it turns out that the input to the monitor is actually 1920x1080 (1600x900 inscribed in 1920x1080 in the center, using the video card, with black stripes on the edges);

- when you select the third option (Monitor Scaling), it turns out that the input to the monitor is actually 1600x900 (1600x900 as it is, scaled by the monitor's tools as set in the settings of the monitor itself).

Now we go back to DOS and see at the input to the monitor 1920x1080@60Hz (The first or second option, depending on the settings in nvscaler).
How do we get the third option here? What would be the input to the monitor actually served what the software requires? The second part of the question is how to change the screen refresh rate under DOS, with a DVI connection?

For comparison, we connect via VGA, go to DOS and see-just the third option (Honest 720x400@70hz is fed to the monitor input). On DVI it is necessary as well that would be. How do I do this? Here's the question.

Edited by defuser
Link to comment
Share on other sites

4 hours ago, jumper said:

BTW, preview for 4) isn't correct.

Moreover, even the monitor scales native 1600x900 approximately exactly as it is drawn on this preview, if you select "Aspect" in the settings of the monitor itself.

4 hours ago, jumper said:

Select Monitor Scaling, shut down Windows, then cold boot with an EBD to DOS.

Thanks, but it doesn't help.

Link to comment
Share on other sites

I suggest, for the convenience of research, that for the time being we put out of brackets everything that concerns scaling (We will return to this if anything later). How do I resolve the issue with the refresh rate? Having decided at least for the beginning of this issue, you can move on. This is more important in the context of application compatibility. A simple example is that the game requires setting 72hz, instead of 60hz (by default), so that it works correctly under DOS. For another game, 75hz is good. What should I do if I connect DVI? What other options are there?

Link to comment
Share on other sites

VBE 3.0 support is generally available. But in the case of DVI, this is not enough. We need something else.
Or something interferes with full-fledged work (What exactly?).

This generally exists and works fine over a VGA connection. At least in combination with some VBE 3.0 compatible nVidia-based cards, such as NV30, NV31\NV34 (Only some vBIOS implementations actually allow this capability) , and NV38, from the ones I've tested. For the first three, the UniRefresh utility is suitable, and for NV38, the patched UniVBE is suitable. However, in none of these cases is it possible to change the refresh rate exactly when DVI is connected (Always remains 60hz).

As for the G70, which I'm tormenting at the moment. Using a DVI connection under DOS, it always remains 60hz by default (Or another value that is explicitly specified in the monitor's EDID (In the Preferred Timing Block)). And it doesn't change to anything else with the help of these utilities. Alas! As specified in this EDID block, it remains under DOS in all cases (and in the DOS window of Windows 98, too).

I should probably try switching back to NV34 (where VBE 3.0 is guaranteed to work via a VGA connection) and think carefully about why this doesn't happen with DVI...

What else can I try to do?

Here by the way there is a link to this:

"Bit 11 Refresh rate control Select. If set to 1, use usеr specified CRTC values for refresh rate, otherwise use BIOS default refresh rate."

Maybe somewhere you need to switch to 1 by hand? This is via RU.EXE is it changing or is it being changed in vBIOS? If the former, how do I get to this place? I would like to see what the G70 value is now.

Edited by defuser
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...