joncampbell123 / dosbox-x

DOSBox-X fork of the DOSBox project
GNU General Public License v2.0
2.53k stars 369 forks source link

[Solved] Is VGA 9dot font hardcoded in DOSBox? #5015

Closed MrMadguy64 closed 1 month ago

MrMadguy64 commented 1 month ago

Question

I've finally added CRTC reprogramming to my project. I wanted to add this feature for CGA 4bpp mode emulation. 9dot mode isn't needed for this purpose. Plus I wanted to add 90cols mode support. So I decided to disable 9dot mode. But when I did it - I got this: Screenshot As you can see, odd and even pixels don't have equal size. I would expect opposite effect on real hardware. I.e. I would expect odd pixels to be 4 pixel wide, while even ones would be 5 pixels wide in 9dot mode, while they would be 4+4 in 8dot mode. Is it because 9dot font is hardcoded in DOXBox, as 8dot font isn't used by any real software? Or is it my fault? How it looks on real hardware? May be I should keep 9dot mode and disable it for 90col mode only?

Have you checked that no similar question(s) exist?

Code of Conduct & Contributing Guidelines

maron2000 commented 1 month ago

Not konwing how it behave on real hardware, further discussion is not possible.

MrMadguy64 commented 1 month ago

Real font on real hardware is 8dot font with 9 dot just repeated for some symbols. Source. What is used to mimic graphic mode via text mode - is symbol with code 222. I expect it to be 4+4 in 8dot font and 4+5 in 9dot font. But DOSBox does completely opposite. Looks like 9dot font is hardcoded to be 50/50 to look better, cuz no real software uses 8dot font.

But may be I'm wrong and real 8dot font is something like 5+3 while 9dot font is 5+4. That's why I ask. Unfortunately I also don't have access to real hardware to test it.

Why do I use 8dot font? Because it's easier to implement. I don't need to treat 40/80 col mode specially. And because it should look better than 9dot font on real hardware.

MrMadguy64 commented 1 month ago

It's not even opposite. 9dot font is simply used everywhere.

45col 8dot font: 45col 8dot mode

80col 9dot font (previous version of my program): 80col 9dot mode

MrMadguy64 commented 1 month ago

Opposite happens in DOSBox 0.74. Both 8dot and 9dot font look the same, but odd and even pixels have the same width.

8dot font: 8dot font

9dot font: 9dot font

MrMadguy64 commented 1 month ago

Sorry for wasting your time. I've found "char9" option, that controls, which font is selected. But 8/9 dynamic switch isn't implemented, so font is indeed hardcoded.