Merge pull request #4182 from Cacodemon345/chips_69000_black_cursor_64x64_fix

C&T 69000: DPMS
This commit is contained in:
Miran Grča
2024-02-20 22:42:00 +01:00
committed by GitHub
3 changed files with 20 additions and 4 deletions

View File

@@ -743,6 +743,12 @@ chips_69000_recalctimings(svga_t *svga)
svga->htotal -= 5; svga->htotal -= 5;
} }
if (((chips->ext_regs[0x61] & 0x8) && !(chips->ext_regs[0x61] & 0x4))
|| ((chips->ext_regs[0x61] & 0x2) && !(chips->ext_regs[0x61] & 0x1))) {
svga->dpms = 1;
} else
svga->dpms = 0;
if (chips->ext_regs[0x09] & 0x1) { if (chips->ext_regs[0x09] & 0x1) {
svga->vtotal -= 2; svga->vtotal -= 2;
svga->vtotal &= 0xFF; svga->vtotal &= 0xFF;
@@ -1543,6 +1549,7 @@ chips_69000_write_ext_reg(chips_69000_t* chips, uint8_t val)
break; break;
case 0x61: case 0x61:
chips->ext_regs[chips->ext_index] = val & 0x7f; chips->ext_regs[chips->ext_index] = val & 0x7f;
svga_recalctimings(&chips->svga);
break; break;
case 0x62: case 0x62:
chips->ext_regs[chips->ext_index] = val & 0x9C; chips->ext_regs[chips->ext_index] = val & 0x9C;

View File

@@ -947,6 +947,15 @@ svga_recalctimings(svga_t *svga)
/* Inform the user interface of any DPMS mode changes. */ /* Inform the user interface of any DPMS mode changes. */
if (svga->dpms) { if (svga->dpms) {
if (!svga->dpms_ui) { if (!svga->dpms_ui) {
/* Make sure to black out the entire screen to avoid lingering image. */
int y_add = enable_overscan ? svga->monitor->mon_overscan_y : 0;
int x_add = enable_overscan ? svga->monitor->mon_overscan_x : 0;
int y_start = enable_overscan ? 0 : (svga->monitor->mon_overscan_y >> 1);
int x_start = enable_overscan ? 0 : (svga->monitor->mon_overscan_x >> 1);
video_wait_for_buffer_monitor(svga->monitor_index);
memset(svga->monitor->target_buffer->dat, 0, svga->monitor->target_buffer->w * svga->monitor->target_buffer->h * 4);
video_blit_memtoscreen_monitor(x_start, y_start, svga->monitor->mon_xsize + x_add, svga->monitor->mon_ysize + y_add, svga->monitor_index);
video_wait_for_buffer_monitor(svga->monitor_index);
svga->dpms_ui = 1; svga->dpms_ui = 1;
ui_sb_set_text_w(plat_get_string(IDS_2143)); ui_sb_set_text_w(plat_get_string(IDS_2143));
} }
@@ -1864,14 +1873,14 @@ svga_doblit(int wx, int wy, svga_t *svga)
p = &svga->monitor->target_buffer->line[i & 0x7ff][0]; p = &svga->monitor->target_buffer->line[i & 0x7ff][0];
for (j = 0; j < (svga->monitor->mon_xsize + x_add); j++) for (j = 0; j < (svga->monitor->mon_xsize + x_add); j++)
p[j] = svga->overscan_color; p[j] = svga->dpms ? 0 : svga->overscan_color;
} }
for (i = 0; i < bottom; i++) { for (i = 0; i < bottom; i++) {
p = &svga->monitor->target_buffer->line[(svga->monitor->mon_ysize + svga->y_add + i) & 0x7ff][0]; p = &svga->monitor->target_buffer->line[(svga->monitor->mon_ysize + svga->y_add + i) & 0x7ff][0];
for (j = 0; j < (svga->monitor->mon_xsize + x_add); j++) for (j = 0; j < (svga->monitor->mon_xsize + x_add); j++)
p[j] = svga->overscan_color; p[j] = svga->dpms ? 0 : svga->overscan_color;
} }
} }

View File

@@ -831,9 +831,9 @@ destroy_bitmap(bitmap_t *b)
bitmap_t * bitmap_t *
create_bitmap(int x, int y) create_bitmap(int x, int y)
{ {
bitmap_t *b = malloc(sizeof(bitmap_t) + (y * sizeof(uint32_t *))); bitmap_t *b = calloc(sizeof(bitmap_t), (y * sizeof(uint32_t *)));
b->dat = malloc((size_t) x * y * 4); b->dat = calloc((size_t) x * y, 4);
for (int c = 0; c < y; c++) for (int c = 0; c < y; c++)
b->line[c] = &(b->dat[c * x]); b->line[c] = &(b->dat[c * x]);
b->w = x; b->w = x;