mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
Updated mpatrol to use resnet for colors.
This commit is contained in:
parent
7f838521bf
commit
a1e1f436b4
1 changed files with 91 additions and 92 deletions
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "m52.h"
|
#include "m52.h"
|
||||||
|
#include "video/resnet.h"
|
||||||
|
|
||||||
#define BGHEIGHT 64
|
#define BGHEIGHT 64
|
||||||
|
|
||||||
|
@ -18,130 +19,75 @@ static UINT8 bgcontrol;
|
||||||
static tilemap* bg_tilemap;
|
static tilemap* bg_tilemap;
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/*************************************
|
||||||
|
*
|
||||||
|
* Palette configuration
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
Convert the color PROMs into a more useable format.
|
|
||||||
|
|
||||||
Moon Patrol has one 256x8 character palette PROM, one 32x8 background
|
|
||||||
palette PROM, one 32x8 sprite palette PROM and one 256x4 sprite lookup
|
|
||||||
table PROM.
|
|
||||||
|
|
||||||
The character and background palette PROMs are connected to the RGB output
|
|
||||||
this way:
|
|
||||||
|
|
||||||
bit 7 -- 220 ohm resistor -- BLUE
|
|
||||||
-- 470 ohm resistor -- BLUE
|
|
||||||
-- 220 ohm resistor -- GREEN
|
|
||||||
-- 470 ohm resistor -- GREEN
|
|
||||||
-- 1 kohm resistor -- GREEN
|
|
||||||
-- 220 ohm resistor -- RED
|
|
||||||
-- 470 ohm resistor -- RED
|
|
||||||
bit 0 -- 1 kohm resistor -- RED
|
|
||||||
|
|
||||||
The sprite palette PROM is connected to the RGB output this way. Note that
|
|
||||||
RED and BLUE are swapped wrt the usual configuration.
|
|
||||||
|
|
||||||
bit 7 -- 220 ohm resistor -- RED
|
|
||||||
-- 470 ohm resistor -- RED
|
|
||||||
-- 220 ohm resistor -- GREEN
|
|
||||||
-- 470 ohm resistor -- GREEN
|
|
||||||
-- 1 kohm resistor -- GREEN
|
|
||||||
-- 220 ohm resistor -- BLUE
|
|
||||||
-- 470 ohm resistor -- BLUE
|
|
||||||
bit 0 -- 1 kohm resistor -- BLUE
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
PALETTE_INIT( m52 )
|
PALETTE_INIT( m52 )
|
||||||
{
|
{
|
||||||
|
static const int resistances_3[3] = { 1000, 470, 220 };
|
||||||
|
static const int resistances_2[2] = { 470, 220 };
|
||||||
|
double weights_r[3], weights_g[3], weights_b[3];
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
machine->colortable = colortable_alloc(machine, 512+32+32);
|
machine->colortable = colortable_alloc(machine, 512+32+32);
|
||||||
|
|
||||||
|
/* compute palette information for characters/backgrounds */
|
||||||
|
compute_resistor_weights(0, 255, -1.0,
|
||||||
|
3, resistances_3, weights_r, 0, 0,
|
||||||
|
3, resistances_3, weights_g, 0, 0,
|
||||||
|
2, resistances_2, weights_b, 0, 0);
|
||||||
|
|
||||||
/* character palette */
|
/* character palette */
|
||||||
for (i = 0;i < 512;i++)
|
for (i = 0;i < 512;i++)
|
||||||
{
|
{
|
||||||
int bit0,bit1,bit2,r,g,b;
|
UINT8 promval = color_prom[i];
|
||||||
|
int r = combine_3_weights(weights_r, BIT(promval,0), BIT(promval,1), BIT(promval,2));
|
||||||
/* red component */
|
int g = combine_3_weights(weights_g, BIT(promval,3), BIT(promval,4), BIT(promval,5));
|
||||||
bit0 = (*color_prom >> 0) & 0x01;
|
int b = combine_2_weights(weights_b, BIT(promval,6), BIT(promval,7));
|
||||||
bit1 = (*color_prom >> 1) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 2) & 0x01;
|
|
||||||
r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
/* green component */
|
|
||||||
bit0 = (*color_prom >> 3) & 0x01;
|
|
||||||
bit1 = (*color_prom >> 4) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 5) & 0x01;
|
|
||||||
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
/* blue component */
|
|
||||||
bit0 = 0;
|
|
||||||
bit1 = (*color_prom >> 6) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 7) & 0x01;
|
|
||||||
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
|
|
||||||
colortable_palette_set_color(machine->colortable,i,MAKE_RGB(r,g,b));
|
colortable_palette_set_color(machine->colortable,i,MAKE_RGB(r,g,b));
|
||||||
colortable_entry_set_value(machine->colortable,i,i);
|
|
||||||
color_prom++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* background palette */
|
/* background palette */
|
||||||
for (i = 0;i < 32;i++)
|
for (i = 0;i < 32;i++)
|
||||||
{
|
{
|
||||||
int bit0,bit1,bit2,r,g,b;
|
UINT8 promval = color_prom[512+i];
|
||||||
|
int r = combine_3_weights(weights_r, BIT(promval,0), BIT(promval,1), BIT(promval,2));
|
||||||
/* red component */
|
int g = combine_3_weights(weights_g, BIT(promval,3), BIT(promval,4), BIT(promval,5));
|
||||||
bit0 = (*color_prom >> 0) & 0x01;
|
int b = combine_2_weights(weights_b, BIT(promval,6), BIT(promval,7));
|
||||||
bit1 = (*color_prom >> 1) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 2) & 0x01;
|
|
||||||
r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
/* green component */
|
|
||||||
bit0 = (*color_prom >> 3) & 0x01;
|
|
||||||
bit1 = (*color_prom >> 4) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 5) & 0x01;
|
|
||||||
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
/* blue component */
|
|
||||||
bit0 = 0;
|
|
||||||
bit1 = (*color_prom >> 6) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 7) & 0x01;
|
|
||||||
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
|
|
||||||
colortable_palette_set_color(machine->colortable,i+512,MAKE_RGB(r,g,b));
|
colortable_palette_set_color(machine->colortable,i+512,MAKE_RGB(r,g,b));
|
||||||
color_prom++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* color_prom now points to the beginning of the sprite palette */
|
/* compute palette information for sprites */
|
||||||
|
compute_resistor_weights(0, 255, -1.0,
|
||||||
|
2, resistances_2, weights_r, 470, 0,
|
||||||
|
3, resistances_3, weights_g, 470, 0,
|
||||||
|
3, resistances_3, weights_b, 470, 0);
|
||||||
|
|
||||||
/* sprite palette */
|
/* sprite palette */
|
||||||
for (i = 0;i < 32;i++)
|
for (i = 0;i < 32;i++)
|
||||||
{
|
{
|
||||||
int bit0,bit1,bit2,r,g,b;
|
UINT8 promval = color_prom[512+32+i];
|
||||||
|
int r = combine_2_weights(weights_r, BIT(promval,6), BIT(promval,7));
|
||||||
/* red component */
|
int g = combine_3_weights(weights_g, BIT(promval,3), BIT(promval,4), BIT(promval,5));
|
||||||
bit0 = 0;
|
int b = combine_3_weights(weights_b, BIT(promval,0), BIT(promval,1), BIT(promval,2));
|
||||||
bit1 = (*color_prom >> 6) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 7) & 0x01;
|
|
||||||
r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
/* green component */
|
|
||||||
bit0 = (*color_prom >> 3) & 0x01;
|
|
||||||
bit1 = (*color_prom >> 4) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 5) & 0x01;
|
|
||||||
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
/* blue component */
|
|
||||||
bit0 = (*color_prom >> 0) & 0x01;
|
|
||||||
bit1 = (*color_prom >> 1) & 0x01;
|
|
||||||
bit2 = (*color_prom >> 2) & 0x01;
|
|
||||||
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
|
|
||||||
colortable_palette_set_color(machine->colortable,i+512+32,MAKE_RGB(r,g,b));
|
colortable_palette_set_color(machine->colortable,i+512+32,MAKE_RGB(r,g,b));
|
||||||
color_prom++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* color_prom now points to the beginning of the sprite lookup table */
|
/* character lookup table */
|
||||||
|
for (i = 0;i < 512;i++)
|
||||||
|
colortable_entry_set_value(machine->colortable,i,i);
|
||||||
|
|
||||||
/* sprite lookup table */
|
/* sprite lookup table */
|
||||||
for (i = 0;i < 16*4;i++)
|
for (i = 0;i < 16*4;i++)
|
||||||
{
|
{
|
||||||
colortable_entry_set_value(machine->colortable, 512+i, 512+32+(*color_prom++));
|
UINT8 promval = color_prom[512+32+32+((i & 3) | ((i & ~3) << 1))];
|
||||||
if (i % 4 == 3) color_prom += 4; /* half of the PROM is unused */
|
colortable_entry_set_value(machine->colortable, 512+i, 512+32+promval);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* background */
|
/* background */
|
||||||
|
@ -166,6 +112,12 @@ PALETTE_INIT( m52 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Tilemap info callback
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
static TILE_GET_INFO( get_tile_info )
|
static TILE_GET_INFO( get_tile_info )
|
||||||
{
|
{
|
||||||
UINT8 video = videoram[tile_index];
|
UINT8 video = videoram[tile_index];
|
||||||
|
@ -191,6 +143,12 @@ static TILE_GET_INFO( get_tile_info )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Video startup
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
VIDEO_START( m52 )
|
VIDEO_START( m52 )
|
||||||
{
|
{
|
||||||
bg_tilemap = tilemap_create(get_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32);
|
bg_tilemap = tilemap_create(get_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32);
|
||||||
|
@ -209,6 +167,12 @@ VIDEO_START( m52 )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Scroll registers
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_scroll_w )
|
WRITE8_HANDLER( m52_scroll_w )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -227,6 +191,12 @@ WRITE8_HANDLER( m52_scroll_w )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Video RAM write handlers
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_videoram_w )
|
WRITE8_HANDLER( m52_videoram_w )
|
||||||
{
|
{
|
||||||
videoram[offset] = data;
|
videoram[offset] = data;
|
||||||
|
@ -234,7 +204,6 @@ WRITE8_HANDLER( m52_videoram_w )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_colorram_w )
|
WRITE8_HANDLER( m52_colorram_w )
|
||||||
{
|
{
|
||||||
colorram[offset] = data;
|
colorram[offset] = data;
|
||||||
|
@ -242,6 +211,13 @@ WRITE8_HANDLER( m52_colorram_w )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Custom protection
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
/* This looks like some kind of protection implemented by a custom chip on the
|
/* This looks like some kind of protection implemented by a custom chip on the
|
||||||
scroll board. It mangles the value written to the port m52_bg1xpos_w, as
|
scroll board. It mangles the value written to the port m52_bg1xpos_w, as
|
||||||
follows: result = popcount(value & 0x7f) ^ (value >> 7) */
|
follows: result = popcount(value & 0x7f) ^ (value >> 7) */
|
||||||
|
@ -256,22 +232,33 @@ READ8_HANDLER( m52_protection_r )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Background control write handlers
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_bg1ypos_w )
|
WRITE8_HANDLER( m52_bg1ypos_w )
|
||||||
{
|
{
|
||||||
bg1ypos = data;
|
bg1ypos = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_bg1xpos_w )
|
WRITE8_HANDLER( m52_bg1xpos_w )
|
||||||
{
|
{
|
||||||
bg1xpos = data;
|
bg1xpos = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_bg2xpos_w )
|
WRITE8_HANDLER( m52_bg2xpos_w )
|
||||||
{
|
{
|
||||||
bg2xpos = data;
|
bg2xpos = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_bg2ypos_w )
|
WRITE8_HANDLER( m52_bg2ypos_w )
|
||||||
{
|
{
|
||||||
bg2ypos = data;
|
bg2ypos = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_bgcontrol_w )
|
WRITE8_HANDLER( m52_bgcontrol_w )
|
||||||
{
|
{
|
||||||
bgcontrol = data;
|
bgcontrol = data;
|
||||||
|
@ -291,6 +278,12 @@ WRITE8_HANDLER( m52_flipscreen_w )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Background rendering
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
static void draw_background(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, int xpos, int ypos, int image)
|
static void draw_background(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, int xpos, int ypos, int image)
|
||||||
{
|
{
|
||||||
rectangle rect;
|
rectangle rect;
|
||||||
|
@ -340,6 +333,12 @@ static void draw_background(running_machine *machine, mame_bitmap *bitmap, const
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Video render
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
VIDEO_UPDATE( m52 )
|
VIDEO_UPDATE( m52 )
|
||||||
{
|
{
|
||||||
int offs;
|
int offs;
|
||||||
|
|
Loading…
Reference in a new issue