Implement waiting for retrace in VBE functions. Remove range checks in protected mode functions, consistent with UniVBE and other VBE implementations. Fixes hang and graphics glitches in Jack Orlando.
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4048
This commit is contained in:
parent
5c0b03c10c
commit
4aa821d0e6
5 changed files with 91 additions and 34 deletions
|
@ -592,10 +592,10 @@ graphics_chars:
|
|||
break;
|
||||
case 0x07:
|
||||
switch (reg_bl) {
|
||||
case 0x80: /* Set Display Start during retrace ?? */
|
||||
case 0x80: /* Set Display Start during retrace */
|
||||
case 0x00: /* Set display Start */
|
||||
reg_al=0x4f;
|
||||
reg_ah=VESA_SetDisplayStart(reg_cx,reg_dx);
|
||||
reg_ah=VESA_SetDisplayStart(reg_cx,reg_dx,reg_bl==0x80);
|
||||
break;
|
||||
case 0x01:
|
||||
reg_al=0x4f;
|
||||
|
@ -611,9 +611,8 @@ graphics_chars:
|
|||
case 0x09:
|
||||
switch (reg_bl) {
|
||||
case 0x80: /* Set Palette during retrace */
|
||||
//TODO
|
||||
case 0x00: /* Set Palette */
|
||||
reg_ah=VESA_SetPalette(SegPhys(es)+reg_di,reg_dx,reg_cx);
|
||||
reg_ah=VESA_SetPalette(SegPhys(es)+reg_di,reg_dx,reg_cx,reg_bl==0x80);
|
||||
reg_al=0x4f;
|
||||
break;
|
||||
case 0x01: /* Get Palette */
|
||||
|
@ -633,27 +632,27 @@ graphics_chars:
|
|||
}
|
||||
switch (reg_bl) {
|
||||
case 0x00:
|
||||
reg_edi=RealOff(int10.rom.pmode_interface);
|
||||
SegSet16(es,RealSeg(int10.rom.pmode_interface));
|
||||
reg_di=RealOff(int10.rom.pmode_interface);
|
||||
reg_cx=int10.rom.pmode_interface_size;
|
||||
reg_ax=0x004f;
|
||||
break;
|
||||
case 0x01: /* Get code for "set window" */
|
||||
reg_edi=RealOff(int10.rom.pmode_interface)+int10.rom.pmode_interface_window;
|
||||
SegSet16(es,RealSeg(int10.rom.pmode_interface));
|
||||
reg_cx=0x10; //0x10 should be enough for the callbacks
|
||||
reg_di=RealOff(int10.rom.pmode_interface)+int10.rom.pmode_interface_window;
|
||||
reg_cx=int10.rom.pmode_interface_start-int10.rom.pmode_interface_window;
|
||||
reg_ax=0x004f;
|
||||
break;
|
||||
case 0x02: /* Get code for "set display start" */
|
||||
reg_edi=RealOff(int10.rom.pmode_interface)+int10.rom.pmode_interface_start;
|
||||
SegSet16(es,RealSeg(int10.rom.pmode_interface));
|
||||
reg_cx=0x10; //0x10 should be enough for the callbacks
|
||||
reg_di=RealOff(int10.rom.pmode_interface)+int10.rom.pmode_interface_start;
|
||||
reg_cx=int10.rom.pmode_interface_palette-int10.rom.pmode_interface_start;
|
||||
reg_ax=0x004f;
|
||||
break;
|
||||
case 0x03: /* Get code for "set palette" */
|
||||
reg_edi=RealOff(int10.rom.pmode_interface)+int10.rom.pmode_interface_palette;
|
||||
SegSet16(es,RealSeg(int10.rom.pmode_interface));
|
||||
reg_cx=0x10; //0x10 should be enough for the callbacks
|
||||
reg_di=RealOff(int10.rom.pmode_interface)+int10.rom.pmode_interface_palette;
|
||||
reg_cx=int10.rom.pmode_interface_size-int10.rom.pmode_interface_palette;
|
||||
reg_ax=0x004f;
|
||||
break;
|
||||
default:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue