1
0
Fork 0

Add alternate font tables and associated loading logic in video BIOS, allowing correct gaps between "wide" characters (e.g. m,w,M,W,T,Z,0) in all VGA machine types.

Update all related BIOS memory values and CRTC registers when loading fonts, fixing quirks in some textmode programs like Inertia Player. Based in part on a patch by h-a-l-9000.

Improve support for MDA emulation in the vgaonly machine type, as it is the only way the video BIOS can make use of the 14-line alternate symbols.

Be compatible by setting the INT 43h vector to the first half of the 8-line font table for standard text modes. Fixes a few obscure games and demos that rely on this BIOS behavior.

Move VESA mode table and OEM string before font tables in the video ROM, which is a more compatible ordering and gives the data low address offsets that work around a bug in some programs such as the Abuse game and Molejo demo.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3932
This commit is contained in:
ripsaw8080 2015-08-28 14:37:25 +00:00
parent f66ff6e3d7
commit 1b7b92ed8a
5 changed files with 254 additions and 80 deletions

View file

@ -911,6 +911,8 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, Bit32s
for (Bitu i=0;i<256*16;i++) {
phys_writeb(font16pt+i,cpi_buf[font_data_start+i]);
}
// terminate alternate list to prevent loading
phys_writeb(Real2Phys(int10.rom.font_16_alternate),0);
font_changed=true;
} else if (font_height==0x0e) {
// 14x8 font
@ -918,6 +920,8 @@ Bitu keyboard_layout::read_codepage_file(const char* codepage_file_name, Bit32s
for (Bitu i=0;i<256*14;i++) {
phys_writeb(font14pt+i,cpi_buf[font_data_start+i]);
}
// terminate alternate list to prevent loading
phys_writeb(Real2Phys(int10.rom.font_14_alternate),0);
font_changed=true;
} else if (font_height==0x08) {
// 8x8 fonts