1
0
Fork 0

Set cursor speed to the vga standard of 32 frames for a full period. Hope that this is correct for the other machines as well. Fix that frameskip would slow down the cursor blinking speed.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@4298
This commit is contained in:
Peter Veenstra 2019-12-10 08:25:18 +00:00
parent 0987fb6f0c
commit e7df2b9b19

View file

@ -395,7 +395,7 @@ static Bit8u * VGA_TEXT_Draw_Line(Bitu vidstart, Bitu line) {
*draw++=(fg&mask1) | (bg&~mask1);
*draw++=(fg&mask2) | (bg&~mask2);
}
if (!vga.draw.cursor.enabled || !(vga.draw.cursor.count&0x8)) goto skip_cursor;
if (!vga.draw.cursor.enabled || !(vga.draw.cursor.count&0x10)) goto skip_cursor;
font_addr = (vga.draw.cursor.address-vidstart) >> 1;
if (font_addr>=0 && font_addr<(Bits)vga.draw.blocks) {
if (line<vga.draw.cursor.sline) goto skip_cursor;
@ -444,7 +444,7 @@ static Bit8u * VGA_TEXT_Herc_Draw_Line(Bitu vidstart, Bitu line) {
*draw++=(fg&mask2) | (bg&~mask2);
}
}
if (!vga.draw.cursor.enabled || !(vga.draw.cursor.count&0x8)) goto skip_cursor;
if (!vga.draw.cursor.enabled || !(vga.draw.cursor.count&0x10)) goto skip_cursor;
font_addr = (vga.draw.cursor.address-vidstart) >> 1;
if (font_addr>=0 && font_addr<(Bits)vga.draw.blocks) {
if (line<vga.draw.cursor.sline) goto skip_cursor;
@ -506,7 +506,7 @@ static Bit8u* VGA_TEXT_Draw_Line(Bitu vidstart, Bitu line) {
}
}
// draw the text mode cursor if needed
if ((vga.draw.cursor.count&0x8) && (line >= vga.draw.cursor.sline) &&
if ((vga.draw.cursor.count&0x10) && (line >= vga.draw.cursor.sline) &&
(line <= vga.draw.cursor.eline) && vga.draw.cursor.enabled) {
// the adress of the attribute that makes up the cell the cursor is in
Bits attr_addr = (vga.draw.cursor.address-vidstart) >> 1;
@ -564,7 +564,7 @@ static Bit8u* VGA_TEXT_Xlat16_Draw_Line(Bitu vidstart, Bitu line) {
}
}
// draw the text mode cursor if needed
if ((vga.draw.cursor.count&0x8) && (line >= vga.draw.cursor.sline) &&
if ((vga.draw.cursor.count&0x10) && (line >= vga.draw.cursor.sline) &&
(line <= vga.draw.cursor.eline) && vga.draw.cursor.enabled) {
// the adress of the attribute that makes up the cell the cursor is in
Bits attr_addr = (vga.draw.cursor.address-vidstart) >> 1;
@ -834,7 +834,9 @@ static void VGA_VerticalTimer(Bitu /*val*/) {
E_Exit("This new machine needs implementation in VGA_VerticalTimer too.");
break;
}
//Check if we can actually render, else skip the rest (frameskip)
vga.draw.cursor.count++; // Do this here, else the cursor speed depends on the frameskip
if (vga.draw.vga_override || !RENDER_StartUpdate())
return;
@ -902,7 +904,7 @@ static void VGA_VerticalTimer(Bitu /*val*/) {
else vga.draw.linear_mask = 0x3fff; // CGA, Tandy 4 pages
vga.draw.cursor.address=vga.config.cursor_start*2;
vga.draw.address *= 2;
vga.draw.cursor.count++;
//vga.draw.cursor.count++; //Moved before the frameskip test.
/* check for blinking and blinking change delay */
FontMask[1]=(vga.draw.blinking & (vga.draw.cursor.count >> 4)) ?
0 : 0xffffffff;