sonarlint vid_ega.c

This commit is contained in:
Jasmine Iwanek
2023-07-31 14:43:33 -04:00
parent b4ebfc3369
commit a65c2164e0
2 changed files with 54 additions and 11 deletions

View File

@@ -85,7 +85,7 @@ ega_recalc_remap_func(ega_t *ega)
func_nr = VAR_DWORD_MODE;
else if (ega->crtc[0x17] & 0x40)
func_nr = VAR_BYTE_MODE;
else if ((ega->crtc[0x17] & 0x20) && ega->vram_limit > 64*1024)
else if ((ega->crtc[0x17] & 0x20) && ega->vram_limit > 64 * 1024)
func_nr = VAR_WORD_MODE_MA15;
else
func_nr = VAR_WORD_MODE_MA13;

View File

@@ -56,7 +56,7 @@ static video_timings_t timing_ega = { .type = VIDEO_ISA, .write_b = 8, .write_w
static uint8_t ega_rotate[8][256];
static uint32_t pallook16[256];
static uint32_t pallook64[256];
static int ega_type = 0;
static int ega_type = 0;
static int old_overscan_color = 0;
uint8_t egaremap2bpp[256];
@@ -64,7 +64,7 @@ uint8_t egaremap2bpp[256];
/* 3C2 controls default mode on EGA. On VGA, it determines monitor type (mono or colour):
7=CGA mode (200 lines), 9=EGA mode (350 lines), 8=EGA mode (200 lines). */
int egaswitchread;
int egaswitches = 9;
int egaswitches = 9;
int update_overscan = 0;
uint8_t ega_in(uint16_t addr, void *priv);
@@ -102,6 +102,9 @@ ega_out(uint16_t addr, uint8_t val, void *priv)
case 0xb3:
ati_eeprom_write((ati_eeprom_t *) ega->eeprom, val & 8, val & 2, val & 1);
break;
default:
break;
}
break;
@@ -180,6 +183,9 @@ ega_out(uint16_t addr, uint8_t val, void *priv)
case 4:
ega->chain2_write = !(val & 4);
break;
default:
break;
}
break;
case 0x3ce:
@@ -213,11 +219,17 @@ ega_out(uint16_t addr, uint8_t val, void *priv)
case 0xC: /*32k at B8000*/
mem_mapping_set_addr(&ega->mapping, 0xb8000, 0x08000);
break;
default:
break;
}
break;
case 7:
ega->colournocare = val;
break;
default:
break;
}
break;
case 0x3d0:
@@ -244,6 +256,9 @@ ega_out(uint16_t addr, uint8_t val, void *priv)
}
}
break;
default:
break;
}
}
@@ -267,6 +282,7 @@ ega_in(uint16_t addr, void *priv)
if (ati_eeprom_read((ati_eeprom_t *) ega->eeprom))
ret |= 8;
break;
default:
ret = ega->regs[ega->index];
break;
@@ -315,7 +331,7 @@ ega_in(uint16_t addr, void *priv)
break;
case 0x3d1:
case 0x3d5:
switch(ega->crtcreg) {
switch (ega->crtcreg) {
case 0xc:
case 0xd:
case 0xe:
@@ -340,6 +356,9 @@ ega_in(uint16_t addr, void *priv)
ega->stat ^= 0x30; /*Fools IBM EGA video BIOS self-test*/
ret = ega->stat;
break;
default:
break;
}
return ret;
@@ -435,11 +454,11 @@ ega_recalctimings(ega_t *ega)
ega->hdisp *= (ega->seqregs[1] & 1) ? 16 : 18;
else
ega->hdisp *= (ega->seqregs[1] & 1) ? 8 : 9;
ega->render = ega_render_text;
ega->render = ega_render_text;
ega->hdisp_old = ega->hdisp;
} else {
ega->hdisp *= (ega->seqregs[1] & 8) ? 16 : 8;
ega->render = ega_render_graphics;
ega->render = ega_render_graphics;
ega->hdisp_old = ega->hdisp;
}
}
@@ -779,7 +798,7 @@ ega_remap_cpu_addr(uint32_t inaddr, ega_t *ega)
if (ega->gdcreg[6] & 2) {
a0mux |= 2;
}
if (ega->vram_limit <= 64*1024) {
if (ega->vram_limit <= 64 * 1024) {
a0mux |= 1;
}
@@ -798,6 +817,9 @@ ega_remap_cpu_addr(uint32_t inaddr, ega_t *ega)
case 0xC: // 32K B800
addr &= 0x7FFF;
break;
default:
break;
}
switch (a0mux) {
@@ -811,15 +833,18 @@ ega_remap_cpu_addr(uint32_t inaddr, ega_t *ega)
// A0 becomes the inversion of PGSEL (reg 0x3C2, miscout, bit 5)
// That is, 1 selects the "low" 64k, and 0 selects the "high" 64k.
addr &= ~1;
addr |= (~ega->miscout>>5)&1;
addr |= (~ega->miscout >> 5) & 1;
break;
case 3: // A0 becomes A14
addr &= ~1;
addr |= (inaddr>>14)&1;
addr |= (inaddr >> 14) & 1;
break;
case 6: // A0 becomes A16
addr &= ~1;
addr |= (inaddr>>16)&1;
addr |= (inaddr >> 16) & 1;
break;
default:
break;
}
@@ -940,6 +965,9 @@ ega_write(uint32_t addr, uint8_t val, void *priv)
if (writemask2 & 8)
ega->vram[addr | 0x3] = (vald & ega->gdcreg[8]) ^ ega->ld;
break;
default:
break;
}
}
break;
@@ -999,9 +1027,15 @@ ega_write(uint32_t addr, uint8_t val, void *priv)
if (writemask2 & 8)
ega->vram[addr | 0x3] = (vald & ega->gdcreg[8]) ^ ega->ld;
break;
default:
break;
}
}
break;
default:
break;
}
}
@@ -1111,6 +1145,9 @@ ega_init(ega_t *ega, int monitor_type, int is_mono)
case 3:
pallook64[c] = pallook16[c] = makecol32(0x34, 0xff, 0x5d);
break;
default:
break;
}
break;
case DISPLAY_AMBER:
@@ -1124,6 +1161,9 @@ ega_init(ega_t *ega, int monitor_type, int is_mono)
case 3:
pallook64[c] = pallook16[c] = makecol32(0xff, 0xe3, 0x34);
break;
default:
break;
}
break;
case DISPLAY_WHITE:
@@ -1138,6 +1178,9 @@ ega_init(ega_t *ega, int monitor_type, int is_mono)
case 3:
pallook64[c] = pallook16[c] = makecol32(0xff, 0xfd, 0xed);
break;
default:
break;
}
break;
}
@@ -1201,8 +1244,8 @@ ega_standalone_init(const device_t *info)
ega_type = 1;
switch (info->local) {
case EGA_IBM:
default:
case EGA_IBM:
rom_init(&ega->bios_rom, BIOS_IBM_PATH,
0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
break;