Added monochrome green/amber/white monitor selection for CGA, MDA and Hercules. Patch from basic2004.

This commit is contained in:
SarahW 2017-06-04 17:39:39 +01:00
commit 7af491d719
6 changed files with 300 additions and 59 deletions

View file

@ -466,22 +466,7 @@ void initvideo()
for (c = 0; c < 65536; c++)
video_16to32[c] = ((c & 31) << 3) | (((c >> 5) & 63) << 10) | (((c >> 11) & 31) << 19);
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x00, 0x00, 0xaa);
cgapal[0x2] = makecol(0x00, 0xaa, 0x00);
cgapal[0x3] = makecol(0x00, 0xaa, 0xaa);
cgapal[0x4] = makecol(0xaa, 0x00, 0x00);
cgapal[0x5] = makecol(0xaa, 0x00, 0xaa);
cgapal[0x6] = makecol(0xaa, 0x55, 0x00);
cgapal[0x7] = makecol(0xaa, 0xaa, 0xaa);
cgapal[0x8] = makecol(0x55, 0x55, 0x55);
cgapal[0x9] = makecol(0x55, 0x55, 0xff);
cgapal[0xa] = makecol(0x55, 0xff, 0x55);
cgapal[0xb] = makecol(0x55, 0xff, 0xff);
cgapal[0xc] = makecol(0xff, 0x55, 0x55);
cgapal[0xd] = makecol(0xff, 0x55, 0xff);
cgapal[0xe] = makecol(0xff, 0xff, 0x55);
cgapal[0xf] = makecol(0xff, 0xff, 0xff);
cgapal_rebuild(DISPLAY_RGB, 0);
blit_data.wake_blit_thread = thread_create_event();
blit_data.blit_complete = thread_create_event();
@ -548,3 +533,156 @@ void video_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h)
blit_data.h = h;
thread_set_event(blit_data.wake_blit_thread);
}
void cgapal_rebuild(int display_type, int contrast)
{
switch (display_type)
{
case DISPLAY_GREEN:
if (contrast)
{
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x00, 0x34, 0x0c);
cgapal[0x2] = makecol(0x04, 0x5d, 0x14);
cgapal[0x3] = makecol(0x04, 0x69, 0x18);
cgapal[0x4] = makecol(0x08, 0xa2, 0x24);
cgapal[0x5] = makecol(0x08, 0xb2, 0x28);
cgapal[0x6] = makecol(0x0c, 0xe7, 0x34);
cgapal[0x7] = makecol(0x0c, 0xf3, 0x38);
cgapal[0x8] = makecol(0x00, 0x1c, 0x04);
cgapal[0x9] = makecol(0x04, 0x4d, 0x10);
cgapal[0xa] = makecol(0x04, 0x7d, 0x1c);
cgapal[0xb] = makecol(0x04, 0x8e, 0x20);
cgapal[0xc] = makecol(0x08, 0xc7, 0x2c);
cgapal[0xd] = makecol(0x08, 0xd7, 0x30);
cgapal[0xe] = makecol(0x14, 0xff, 0x45);
cgapal[0xf] = makecol(0x34, 0xff, 0x5d);
}
else
{
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x00, 0x34, 0x0c);
cgapal[0x2] = makecol(0x04, 0x55, 0x14);
cgapal[0x3] = makecol(0x04, 0x5d, 0x14);
cgapal[0x4] = makecol(0x04, 0x86, 0x20);
cgapal[0x5] = makecol(0x04, 0x92, 0x20);
cgapal[0x6] = makecol(0x08, 0xba, 0x2c);
cgapal[0x7] = makecol(0x08, 0xc7, 0x2c);
cgapal[0x8] = makecol(0x04, 0x8a, 0x20);
cgapal[0x9] = makecol(0x08, 0xa2, 0x24);
cgapal[0xa] = makecol(0x08, 0xc3, 0x2c);
cgapal[0xb] = makecol(0x08, 0xcb, 0x30);
cgapal[0xc] = makecol(0x0c, 0xe7, 0x34);
cgapal[0xd] = makecol(0x0c, 0xef, 0x38);
cgapal[0xe] = makecol(0x24, 0xff, 0x51);
cgapal[0xf] = makecol(0x34, 0xff, 0x5d);
}
break;
case DISPLAY_AMBER:
if (contrast)
{
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x55, 0x14, 0x00);
cgapal[0x2] = makecol(0x82, 0x2c, 0x00);
cgapal[0x3] = makecol(0x92, 0x34, 0x00);
cgapal[0x4] = makecol(0xcf, 0x61, 0x00);
cgapal[0x5] = makecol(0xdf, 0x6d, 0x00);
cgapal[0x6] = makecol(0xff, 0x9a, 0x04);
cgapal[0x7] = makecol(0xff, 0xae, 0x18);
cgapal[0x8] = makecol(0x2c, 0x08, 0x00);
cgapal[0x9] = makecol(0x6d, 0x20, 0x00);
cgapal[0xa] = makecol(0xa6, 0x45, 0x00);
cgapal[0xb] = makecol(0xba, 0x51, 0x00);
cgapal[0xc] = makecol(0xef, 0x79, 0x00);
cgapal[0xd] = makecol(0xfb, 0x86, 0x00);
cgapal[0xe] = makecol(0xff, 0xcb, 0x28);
cgapal[0xf] = makecol(0xff, 0xe3, 0x34);
}
else
{
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x55, 0x14, 0x00);
cgapal[0x2] = makecol(0x79, 0x24, 0x00);
cgapal[0x3] = makecol(0x86, 0x2c, 0x00);
cgapal[0x4] = makecol(0xae, 0x49, 0x00);
cgapal[0x5] = makecol(0xbe, 0x55, 0x00);
cgapal[0x6] = makecol(0xe3, 0x71, 0x00);
cgapal[0x7] = makecol(0xef, 0x79, 0x00);
cgapal[0x8] = makecol(0xb2, 0x4d, 0x00);
cgapal[0x9] = makecol(0xcb, 0x5d, 0x00);
cgapal[0xa] = makecol(0xeb, 0x79, 0x00);
cgapal[0xb] = makecol(0xf3, 0x7d, 0x00);
cgapal[0xc] = makecol(0xff, 0x9e, 0x04);
cgapal[0xd] = makecol(0xff, 0xaa, 0x10);
cgapal[0xe] = makecol(0xff, 0xdb, 0x30);
cgapal[0xf] = makecol(0xff, 0xe3, 0x34);
}
break;
case DISPLAY_WHITE:
if (contrast)
{
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x37, 0x3d, 0x40);
cgapal[0x2] = makecol(0x55, 0x5c, 0x5f);
cgapal[0x3] = makecol(0x61, 0x67, 0x6b);
cgapal[0x4] = makecol(0x8f, 0x95, 0x95);
cgapal[0x5] = makecol(0x9b, 0xa0, 0x9f);
cgapal[0x6] = makecol(0xcc, 0xcf, 0xc8);
cgapal[0x7] = makecol(0xdf, 0xde, 0xd4);
cgapal[0x8] = makecol(0x24, 0x27, 0x29);
cgapal[0x9] = makecol(0x42, 0x48, 0x4c);
cgapal[0xa] = makecol(0x70, 0x76, 0x78);
cgapal[0xb] = makecol(0x81, 0x87, 0x87);
cgapal[0xc] = makecol(0xaf, 0xb3, 0xb0);
cgapal[0xd] = makecol(0xbb, 0xbf, 0xba);
cgapal[0xe] = makecol(0xef, 0xed, 0xdf);
cgapal[0xf] = makecol(0xff, 0xfd, 0xed);
}
else
{
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x37, 0x3d, 0x40);
cgapal[0x2] = makecol(0x4a, 0x50, 0x54);
cgapal[0x3] = makecol(0x55, 0x5c, 0x5f);
cgapal[0x4] = makecol(0x78, 0x7e, 0x80);
cgapal[0x5] = makecol(0x81, 0x87, 0x87);
cgapal[0x6] = makecol(0xa3, 0xa7, 0xa6);
cgapal[0x7] = makecol(0xaf, 0xb3, 0xb0);
cgapal[0x8] = makecol(0x7a, 0x81, 0x83);
cgapal[0x9] = makecol(0x8c, 0x92, 0x92);
cgapal[0xa] = makecol(0xac, 0xb0, 0xad);
cgapal[0xb] = makecol(0xb3, 0xb7, 0xb4);
cgapal[0xc] = makecol(0xd1, 0xd3, 0xcb);
cgapal[0xd] = makecol(0xd9, 0xdb, 0xd2);
cgapal[0xe] = makecol(0xf7, 0xf5, 0xe7);
cgapal[0xf] = makecol(0xff, 0xfd, 0xed);
}
break;
default:
cgapal[0x0] = makecol(0x00, 0x00, 0x00);
cgapal[0x1] = makecol(0x00, 0x00, 0xaa);
cgapal[0x2] = makecol(0x00, 0xaa, 0x00);
cgapal[0x3] = makecol(0x00, 0xaa, 0xaa);
cgapal[0x4] = makecol(0xaa, 0x00, 0x00);
cgapal[0x5] = makecol(0xaa, 0x00, 0xaa);
if (display_type == DISPLAY_RGB_NO_BROWN)
{
cgapal[0x6] = makecol(0xaa, 0xaa, 0x00);
}
else
{
cgapal[0x6] = makecol(0xaa, 0x55, 0x00);
}
cgapal[0x7] = makecol(0xaa, 0xaa, 0xaa);
cgapal[0x8] = makecol(0x55, 0x55, 0x55);
cgapal[0x9] = makecol(0x55, 0x55, 0xff);
cgapal[0xa] = makecol(0x55, 0xff, 0x55);
cgapal[0xb] = makecol(0x55, 0xff, 0xff);
cgapal[0xc] = makecol(0xff, 0x55, 0x55);
cgapal[0xd] = makecol(0xff, 0x55, 0xff);
cgapal[0xe] = makecol(0xff, 0xff, 0x55);
cgapal[0xf] = makecol(0xff, 0xff, 0xff);
break;
}
}