vga: Respect Line Compare Register in text modes
Unbreaks setup screen of Act1/PL Signed-off-by: malc <av1474@comtv.ru>
This commit is contained in:
		
							parent
							
								
									3e6ba50340
								
							
						
					
					
						commit
						d1984194f3
					
				
							
								
								
									
										18
									
								
								hw/vga.c
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								hw/vga.c
									
									
									
									
									
								
							@ -1267,9 +1267,9 @@ static rgb_to_pixel_dup_func *rgb_to_pixel_dup_table[NB_DEPTHS] = {
 | 
				
			|||||||
static void vga_draw_text(VGACommonState *s, int full_update)
 | 
					static void vga_draw_text(VGACommonState *s, int full_update)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int cx, cy, cheight, cw, ch, cattr, height, width, ch_attr;
 | 
					    int cx, cy, cheight, cw, ch, cattr, height, width, ch_attr;
 | 
				
			||||||
    int cx_min, cx_max, linesize, x_incr;
 | 
					    int cx_min, cx_max, linesize, x_incr, line;
 | 
				
			||||||
    uint32_t offset, fgcol, bgcol, v, cursor_offset;
 | 
					    uint32_t offset, fgcol, bgcol, v, cursor_offset;
 | 
				
			||||||
    uint8_t *d1, *d, *src, *s1, *dest, *cursor_ptr;
 | 
					    uint8_t *d1, *d, *src, *dest, *cursor_ptr;
 | 
				
			||||||
    const uint8_t *font_ptr, *font_base[2];
 | 
					    const uint8_t *font_ptr, *font_base[2];
 | 
				
			||||||
    int dup9, line_offset, depth_index;
 | 
					    int dup9, line_offset, depth_index;
 | 
				
			||||||
    uint32_t *palette;
 | 
					    uint32_t *palette;
 | 
				
			||||||
@ -1301,7 +1301,6 @@ static void vga_draw_text(VGACommonState *s, int full_update)
 | 
				
			|||||||
    full_update |= update_basic_params(s);
 | 
					    full_update |= update_basic_params(s);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    line_offset = s->line_offset;
 | 
					    line_offset = s->line_offset;
 | 
				
			||||||
    s1 = s->vram_ptr + (s->start_addr * 4);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    vga_get_text_resolution(s, &width, &height, &cw, &cheight);
 | 
					    vga_get_text_resolution(s, &width, &height, &cw, &cheight);
 | 
				
			||||||
    x_incr = cw * ((ds_get_bits_per_pixel(s->ds) + 7) >> 3);
 | 
					    x_incr = cw * ((ds_get_bits_per_pixel(s->ds) + 7) >> 3);
 | 
				
			||||||
@ -1354,9 +1353,11 @@ static void vga_draw_text(VGACommonState *s, int full_update)
 | 
				
			|||||||
    dest = ds_get_data(s->ds);
 | 
					    dest = ds_get_data(s->ds);
 | 
				
			||||||
    linesize = ds_get_linesize(s->ds);
 | 
					    linesize = ds_get_linesize(s->ds);
 | 
				
			||||||
    ch_attr_ptr = s->last_ch_attr;
 | 
					    ch_attr_ptr = s->last_ch_attr;
 | 
				
			||||||
 | 
					    line = 0;
 | 
				
			||||||
 | 
					    offset = s->start_addr * 4;
 | 
				
			||||||
    for(cy = 0; cy < height; cy++) {
 | 
					    for(cy = 0; cy < height; cy++) {
 | 
				
			||||||
        d1 = dest;
 | 
					        d1 = dest;
 | 
				
			||||||
        src = s1;
 | 
					        src = s->vram_ptr + offset;
 | 
				
			||||||
        cx_min = width;
 | 
					        cx_min = width;
 | 
				
			||||||
        cx_max = -1;
 | 
					        cx_max = -1;
 | 
				
			||||||
        for(cx = 0; cx < width; cx++) {
 | 
					        for(cx = 0; cx < width; cx++) {
 | 
				
			||||||
@ -1419,7 +1420,14 @@ static void vga_draw_text(VGACommonState *s, int full_update)
 | 
				
			|||||||
                       (cx_max - cx_min + 1) * cw, cheight);
 | 
					                       (cx_max - cx_min + 1) * cw, cheight);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        dest += linesize * cheight;
 | 
					        dest += linesize * cheight;
 | 
				
			||||||
        s1 += line_offset;
 | 
					        if (line >= s->line_compare) {
 | 
				
			||||||
 | 
					            line -= s->line_compare;
 | 
				
			||||||
 | 
					            offset = 0;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        else {
 | 
				
			||||||
 | 
					            offset += line_offset;
 | 
				
			||||||
 | 
					            line += cheight;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user