Fixed SDAC BPP modes and VCLK timings according to the datasheet.
This commit is contained in:
@@ -332,10 +332,16 @@ void et4000w32p_recalctimings(svga_t *svga)
|
|||||||
svga->clock = cpuclock / sdac_getclock((svga->miscout >> 2) & 3, &et4000->sdac_ramdac);
|
svga->clock = cpuclock / sdac_getclock((svga->miscout >> 2) & 3, &et4000->sdac_ramdac);
|
||||||
switch (sdac_get_clock_divider(&et4000->sdac_ramdac))
|
switch (sdac_get_clock_divider(&et4000->sdac_ramdac))
|
||||||
{
|
{
|
||||||
case 2:
|
case 1:
|
||||||
svga->clock /= 2.0;
|
svga->clock *= 2.0;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
svga->clock /= 1.5;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
svga->clock /= 2.0;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
svga->clock /= 3.0;
|
svga->clock /= 3.0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -6,14 +6,17 @@
|
|||||||
#include "vid_svga.h"
|
#include "vid_svga.h"
|
||||||
#include "vid_sdac_ramdac.h"
|
#include "vid_sdac_ramdac.h"
|
||||||
|
|
||||||
|
/* Returning divider * 2 */
|
||||||
int sdac_get_clock_divider(sdac_ramdac_t *ramdac)
|
int sdac_get_clock_divider(sdac_ramdac_t *ramdac)
|
||||||
{
|
{
|
||||||
switch (ramdac->command >> 4)
|
switch (ramdac->command >> 4)
|
||||||
{
|
{
|
||||||
case 0x0: case 0x3: case 0x5: return 1;
|
case 0x1: return 1;
|
||||||
case 0x1: case 0x2: case 0x6: case 0x7: case 0xa: case 0xc: return 2;
|
case 0x0: case 0x3: case 0x5: return 2;
|
||||||
case 0x4: case 0xe: return 3;
|
case 0x9: return 3;
|
||||||
default: return 1;
|
case 0x2: case 0x6: case 0x7: case 0x8: case 0xa: case 0xc: return 4;
|
||||||
|
case 0x4: case 0xe: return 6;
|
||||||
|
default: return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,13 +39,14 @@ void sdac_ramdac_out(uint16_t addr, uint8_t val, sdac_ramdac_t *ramdac, svga_t *
|
|||||||
// pclog("RAMDAC command reg now %02X\n", val);
|
// pclog("RAMDAC command reg now %02X\n", val);
|
||||||
switch (val >> 4)
|
switch (val >> 4)
|
||||||
{
|
{
|
||||||
case 0x2: case 0x3: case 0xa: svga->bpp = 15; break;
|
case 0x2: case 0x3: case 0x8: case 0xa: case 0xc: svga->bpp = 15; break;
|
||||||
case 0x4: case 0xe: svga->bpp = 24; break;
|
case 0x4: case 0x9: case 0xe: svga->bpp = 24; break;
|
||||||
case 0x5: case 0x6: case 0xc: svga->bpp = 16; break;
|
case 0x5: case 0x6: svga->bpp = 16; break;
|
||||||
case 0x7: svga->bpp = 32; break;
|
case 0x7: svga->bpp = 32; break;
|
||||||
|
|
||||||
case 0: case 1: default: svga->bpp = 8; break;
|
case 0: case 1: default: svga->bpp = 8; break;
|
||||||
}
|
}
|
||||||
|
pclog("SDAC: Set to %02X, %i bpp\n", val >> 4, svga->bpp);
|
||||||
svga_recalctimings(svga);
|
svga_recalctimings(svga);
|
||||||
}
|
}
|
||||||
//ramdac->magic_count = 0;
|
//ramdac->magic_count = 0;
|
||||||
|
Reference in New Issue
Block a user