(MESS)thomson - fixes for a non-standard video mode and adding a new one [Antoine Mine]

This commit is contained in:
Miodrag Milanovic 2014-09-25 18:03:34 +00:00
parent 422664119e
commit 7bb0f4f33d
3 changed files with 71 additions and 5 deletions

View File

@ -256,6 +256,7 @@ public:
TIMER_CALLBACK_MEMBER( thom_set_init );
void to770_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void mo5_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void mo5alt_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void to9_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void bitmap4_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void bitmap4alt_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
@ -266,9 +267,11 @@ public:
void page1_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void page2_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void overlay_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void overlayhalf_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void overlay3_scandraw_16( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void to770_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void mo5_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void mo5alt_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void to9_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void bitmap4_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void bitmap4alt_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
@ -279,6 +282,7 @@ public:
void page1_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void page2_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void overlay_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void overlayhalf_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void overlay3_scandraw_8( UINT8* vram, UINT16* dst, UINT16* pal, int org, int len );
void thom_vblank( screen_device &screen, bool state );
DECLARE_VIDEO_START( thom );
@ -607,7 +611,9 @@ protected:
#define THOM_VMODE_TO9 10
#define THOM_VMODE_80_TO9 11
#define THOM_VMODE_BITMAP4_ALT_HALF 12
#define THOM_VMODE_NB 13
#define THOM_VMODE_MO5_ALT 13
#define THOM_VMODE_OVERLAY_HALF 14
#define THOM_VMODE_NB 15
class to7_io_line_device : public device_t

View File

@ -2040,7 +2040,7 @@ void thomson_state::to9_set_video_mode( UINT8 data, int style )
break;
// undocumented, but tested on a real TO8D
case 0x20: thom_set_video_mode( THOM_VMODE_MO5 ); break;
case 0x20: thom_set_video_mode( THOM_VMODE_MO5_ALT ); break;
case 0x21: thom_set_video_mode( THOM_VMODE_BITMAP4 ); break;
@ -2064,6 +2064,9 @@ void thomson_state::to9_set_video_mode( UINT8 data, int style )
case 0x26: thom_set_video_mode( THOM_VMODE_OVERLAY ); break;
// undocumented 160x200 variant of overlay
case 0x3e: thom_set_video_mode( THOM_VMODE_OVERLAY_HALF ); break;
case 0x3f: thom_set_video_mode( THOM_VMODE_OVERLAY3 ); break;
default:

View File

@ -405,6 +405,31 @@ UPDATE_LOW( mo5 )
END_UPDATE
/* as mo5, but with pastel bit switched */
UPDATE_HI( mo5alt )
{
int i;
pen_t c[2];
c[0] = pal[ (ramb & 15) ^ 8 ];
c[1] = pal[ (ramb >> 4) ^ 8 ];
for ( i = 0; i < 16; i += 2, rama >>= 1 )
dst[ 15 - i ] = dst[ 14 - i ] = c[ rama & 1 ];
}
END_UPDATE
UPDATE_LOW( mo5alt )
{
int i;
pen_t c[2];
c[0] = pal[ (ramb & 15) ^ 8 ];
c[1] = pal[ (ramb >> 4) ^ 8 ];
for ( i = 0; i < 8; i++, rama >>= 1 )
dst[ 7 - i ] = c[ rama & 1 ];
}
END_UPDATE
/* as to770, but with pastel color bit unswitched */
@ -654,7 +679,7 @@ END_UPDATE
/* 320x200, 2-colors, two overlaid pages (untested) */
/* 320x200, 2-colors, two overlaid pages */
UPDATE_HI( overlay )
{
@ -681,8 +706,40 @@ UPDATE_LOW( overlay )
END_UPDATE
/* 160x200 undocumented variant of the above (2-colors, two overlaid pages) */
/* 160x200, 4-colors, four overlaid pages (untested) */
UPDATE_HI( overlayhalf )
{
int i;
pen_t c[2][2];
c[0][0] = pal[ 0 ];
c[0][1] = c[1][1] = pal[ 1 ];
c[1][0] = pal[ 2 ];
rama >>= 4;
ramb >>= 4;
for ( i = 0; i < 16; i += 4, rama >>= 1, ramb >>= 1 )
dst[ 15 - i ] = dst[ 14 - i ] = dst[ 13 - i ] = dst[ 12 - i ] =
c[ ramb & 1 ] [ rama & 1 ];
}
END_UPDATE
UPDATE_LOW( overlayhalf )
{
int i;
pen_t c[2][2];
c[0][0] = pal[ 0 ];
c[0][1] = c[1][1] = pal[ 1 ];
c[1][0] = pal[ 2 ];
rama >>= 4;
ramb >>= 4;
for ( i = 0; i < 8; i += 2, rama >>= 1, ramb >>= 1 )
dst[ 7 - i ] = dst[ 6 - i ] = c[ ramb & 1 ] [ rama & 1 ];
}
END_UPDATE
/* 160x200, 4-colors, four overlaid pages */
UPDATE_HI( overlay3 )
{
@ -725,7 +782,7 @@ static const thom_scandraw thom_scandraw_funcs[THOM_VMODE_NB][2] =
FUN(to770), FUN(mo5), FUN(bitmap4), FUN(bitmap4alt), FUN(mode80),
FUN(bitmap16), FUN(page1), FUN(page2), FUN(overlay), FUN(overlay3),
FUN(to9), FUN(mode80_to9),
FUN(bitmap4althalf),
FUN(bitmap4althalf), FUN(mo5alt), FUN(overlayhalf),
};