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