- Circus Charlie, Champion Base Ball and Fire Battle use the colortable object to get rid of TRANSPARENT_COLOR

- resnet usage in Circus Charlie and Champion Base Ball. Finally a pure white in circusc, after all these years
This commit is contained in:
Zsolt Vasvari 2008-02-01 01:05:23 +00:00
parent e7a2e72273
commit 75e7fdd1af
5 changed files with 143 additions and 119 deletions

View File

@ -321,8 +321,7 @@ static MACHINE_DRIVER_START( circusc )
MDRV_SCREEN_SIZE(32*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MDRV_GFXDECODE(circusc)
MDRV_PALETTE_LENGTH(32)
MDRV_COLORTABLE_LENGTH(16*16+16*16)
MDRV_PALETTE_LENGTH(16*16+16*16)
MDRV_PALETTE_INIT(circusc)
MDRV_VIDEO_START(circusc)
@ -383,8 +382,8 @@ ROM_START( circusc )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "380_j18.2a", 0x0000, 0x020, CRC(10dd4eaa) SHA1(599acd25f36445221c553510a5de23ddba5ecc15) ) /* palette */
ROM_LOAD( "380_j16.10c", 0x0020, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* character lookup table */
ROM_LOAD( "380_j17.7b", 0x0120, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* sprite lookup table */
ROM_LOAD( "380_j17.7b", 0x0020, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* character lookup table */
ROM_LOAD( "380_j16.10c", 0x0120, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* sprite lookup table */
ROM_END
ROM_START( circusc2 )
@ -413,8 +412,8 @@ ROM_START( circusc2 )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "380_j18.2a", 0x0000, 0x020, CRC(10dd4eaa) SHA1(599acd25f36445221c553510a5de23ddba5ecc15) ) /* palette */
ROM_LOAD( "380_j16.10c", 0x0020, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* character lookup table */
ROM_LOAD( "380_j17.7b", 0x0120, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* sprite lookup table */
ROM_LOAD( "380_j17.7b", 0x0020, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* character lookup table */
ROM_LOAD( "380_j16.10c", 0x0120, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* sprite lookup table */
ROM_END
ROM_START( circusc3 )
@ -443,8 +442,8 @@ ROM_START( circusc3 )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "380_j18.2a", 0x0000, 0x020, CRC(10dd4eaa) SHA1(599acd25f36445221c553510a5de23ddba5ecc15) ) /* palette */
ROM_LOAD( "380_j16.10c", 0x0020, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* character lookup table */
ROM_LOAD( "380_j17.7b", 0x0120, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* sprite lookup table */
ROM_LOAD( "380_j17.7b", 0x0020, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* character lookup table */
ROM_LOAD( "380_j16.10c", 0x0120, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* sprite lookup table */
ROM_END
ROM_START( circuscc ) /* Version U */
@ -473,8 +472,8 @@ ROM_START( circuscc ) /* Version U */
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "380_j18.2a", 0x0000, 0x020, CRC(10dd4eaa) SHA1(599acd25f36445221c553510a5de23ddba5ecc15) ) /* palette */
ROM_LOAD( "380_j16.10c", 0x0020, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* character lookup table */
ROM_LOAD( "380_j17.7b", 0x0120, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* sprite lookup table */
ROM_LOAD( "380_j17.7b", 0x0020, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* character lookup table */
ROM_LOAD( "380_j16.10c", 0x0120, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* sprite lookup table */
ROM_END
ROM_START( circusce ) /* Version P */
@ -503,8 +502,8 @@ ROM_START( circusce ) /* Version P */
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "380_j18.2a", 0x0000, 0x020, CRC(10dd4eaa) SHA1(599acd25f36445221c553510a5de23ddba5ecc15) ) /* palette */
ROM_LOAD( "380_j16.10c", 0x0020, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* character lookup table */
ROM_LOAD( "380_j17.7b", 0x0120, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* sprite lookup table */
ROM_LOAD( "380_j17.7b", 0x0020, 0x100, CRC(13989357) SHA1(0d61d468f6d3e1570fd18d236ec8cab92db4ed5c) ) /* character lookup table */
ROM_LOAD( "380_j16.10c", 0x0120, 0x100, CRC(c244f2aa) SHA1(86df21c8e0b1ed51a0a4bd33dbb33f6efdea7d39) ) /* sprite lookup table */
ROM_END
@ -514,8 +513,8 @@ static DRIVER_INIT( circusc )
}
GAME( 1984, circusc, 0, circusc, circusc, circusc, ROT90, "Konami", "Circus Charlie (Selectable level set 1)", GAME_SUPPORTS_SAVE )
GAME( 1984, circusc2, circusc, circusc, circusc, circusc, ROT90, "Konami", "Circus Charlie (Selectable level set 2)", GAME_SUPPORTS_SAVE )
GAME( 1984, circusc3, circusc, circusc, circusc, circusc, ROT90, "Konami", "Circus Charlie (No level select)", GAME_SUPPORTS_SAVE )
GAME( 1984, circusc, 0, circusc, circusc, circusc, ROT90, "Konami", "Circus Charlie (level select, set 1)", GAME_SUPPORTS_SAVE )
GAME( 1984, circusc2, circusc, circusc, circusc, circusc, ROT90, "Konami", "Circus Charlie (level select, set 2)", GAME_SUPPORTS_SAVE )
GAME( 1984, circusc3, circusc, circusc, circusc, circusc, ROT90, "Konami", "Circus Charlie (no level select)", GAME_SUPPORTS_SAVE )
GAME( 1984, circuscc, circusc, circusc, circusc, circusc, ROT90, "Konami (Centuri license)", "Circus Charlie (Centuri)", GAME_SUPPORTS_SAVE )
GAME( 1984, circusce, circusc, circusc, circusc, circusc, ROT90, "Konami (Centuri license)", "Circus Charlie (Centuri, earlier)", GAME_SUPPORTS_SAVE )

View File

@ -324,8 +324,7 @@ static MACHINE_DRIVER_START( firebatl )
MDRV_SCREEN_SIZE(0x120, 0x100)
MDRV_SCREEN_VISIBLE_AREA(0, 0x120-1, 0x0+16, 0x100-16-1)
MDRV_GFXDECODE(firebatl)
MDRV_PALETTE_LENGTH(512)
MDRV_COLORTABLE_LENGTH(512+64*4)
MDRV_PALETTE_LENGTH(512+64*4)
MDRV_PALETTE_INIT(firebatl)
MDRV_VIDEO_START(firebatl)

View File

@ -7,12 +7,12 @@
***************************************************************************/
#include "driver.h"
#include "video/resnet.h"
static UINT8 gfxbank;
static UINT8 palette_bank;
static tilemap *bg_tilemap;
static UINT8 *pen_mask;
/***************************************************************************
@ -31,42 +31,57 @@ static UINT8 *pen_mask;
bit 0 -- 1 kohm resistor -- RED
***************************************************************************/
PALETTE_INIT( champbas )
{
static const int resistances_rg[3] = { 1000, 470, 220 };
static const int resistances_b [2] = { 470, 220 };
double rweights[3], gweights[3], bweights[2];
int i;
pen_mask = auto_malloc(128 * sizeof(UINT8));
memset(pen_mask, 0, 128 * sizeof(UINT8));
/* compute the color output resistor weights */
compute_resistor_weights(0, 255, -1.0,
3, &resistances_rg[0], rweights, 0, 0,
3, &resistances_rg[0], gweights, 0, 0,
2, &resistances_b[0], bweights, 0, 0);
for (i = 0; i < machine->drv->total_colors; i++)
/* allocate the colortable */
machine->colortable = colortable_alloc(machine, 32);
/* create a lookup table for the palette */
for (i = 0; i < 0x20; i++)
{
int bit0, bit1, bit2, r, g, b;
UINT8 pen = ((i & 0x100) >> 4) | (color_prom[0x20 + (i & 0xff)] & 0x0f);
int bit0, bit1, bit2;
int r, g, b;
/* red component */
bit0 = (color_prom[pen] >> 0) & 0x01;
bit1 = (color_prom[pen] >> 1) & 0x01;
bit2 = (color_prom[pen] >> 2) & 0x01;
r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
bit0 = (color_prom[i] >> 0) & 0x01;
bit1 = (color_prom[i] >> 1) & 0x01;
bit2 = (color_prom[i] >> 2) & 0x01;
r = combine_3_weights(rweights, bit0, bit1, bit2);
/* green component */
bit0 = (color_prom[pen] >> 3) & 0x01;
bit1 = (color_prom[pen] >> 4) & 0x01;
bit2 = (color_prom[pen] >> 5) & 0x01;
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
bit0 = (color_prom[i] >> 3) & 0x01;
bit1 = (color_prom[i] >> 4) & 0x01;
bit2 = (color_prom[i] >> 5) & 0x01;
g = combine_3_weights(gweights, bit0, bit1, bit2);
/* blue component */
bit0 = 0;
bit1 = (color_prom[pen] >> 6) & 0x01;
bit2 = (color_prom[pen] >> 7) & 0x01;
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
bit0 = (color_prom[i] >> 6) & 0x01;
bit1 = (color_prom[i] >> 7) & 0x01;
b = combine_2_weights(bweights, bit0, bit1);
palette_set_color(machine, i, MAKE_RGB(r, g, b));
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b));
}
/* set the mask, color 0 is transparent */
if (color_prom[pen] == 0)
pen_mask[i >> 2] |= (1 << (i & 0x03));
/* color_prom now points to the beginning of the lookup table */
color_prom += 32;
/* character lookup table - sprites use the same color lookup table as characters */
for (i = 0; i < 0x200; i++)
{
UINT8 ctabentry = ((i & 0x100) >> 4) | (color_prom[i & 0xff] & 0x0f);
colortable_entry_set_value(machine->colortable, i, ctabentry);
}
}
@ -141,7 +156,8 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
flipx, flipy,
sx, sy,
cliprect,
TRANSPARENCY_PENS, pen_mask[color]);
TRANSPARENCY_PENS,
colortable_get_transpen_mask(machine->colortable, machine->gfx[2 + gfxbank], color, 0));
}
}

View File

@ -7,6 +7,7 @@
***************************************************************************/
#include "driver.h"
#include "video/resnet.h"
@ -36,46 +37,65 @@ UINT8 *circusc_scroll;
bit 0 -- 1 kohm resistor -- RED
***************************************************************************/
PALETTE_INIT( circusc )
{
static const int resistances_rg[3] = { 1000, 470, 220 };
static const int resistances_b [2] = { 470, 220 };
double rweights[3], gweights[3], bweights[2];
int i;
#define TOTAL_COLORS(gfxn) (machine->gfx[gfxn]->total_colors * machine->gfx[gfxn]->color_granularity)
#define COLOR(gfxn,offs) (colortable[machine->drv->gfxdecodeinfo[gfxn].color_codes_start + offs])
/* compute the color output resistor weights */
compute_resistor_weights(0, 255, -1.0,
3, &resistances_rg[0], rweights, 0, 0,
3, &resistances_rg[0], gweights, 0, 0,
2, &resistances_b[0], bweights, 0, 0);
for (i = 0;i < machine->drv->total_colors;i++)
/* allocate the colortable */
machine->colortable = colortable_alloc(machine, 32);
/* create a lookup table for the palette */
for (i = 0; i < 0x20; i++)
{
int bit0,bit1,bit2,r,g,b;
int bit0, bit1, bit2;
int r, g, b;
/* red component */
bit0 = (*color_prom >> 0) & 0x01;
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;
bit0 = (color_prom[i] >> 0) & 0x01;
bit1 = (color_prom[i] >> 1) & 0x01;
bit2 = (color_prom[i] >> 2) & 0x01;
r = combine_3_weights(rweights, bit0, bit1, bit2);
palette_set_color(machine,i,MAKE_RGB(r,g,b));
color_prom++;
/* green component */
bit0 = (color_prom[i] >> 3) & 0x01;
bit1 = (color_prom[i] >> 4) & 0x01;
bit2 = (color_prom[i] >> 5) & 0x01;
g = combine_3_weights(gweights, bit0, bit1, bit2);
/* blue component */
bit0 = (color_prom[i] >> 6) & 0x01;
bit1 = (color_prom[i] >> 7) & 0x01;
b = combine_2_weights(bweights, bit0, bit1);
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b));
}
/* color_prom now points to the beginning of the lookup table */
color_prom += 32;
/* sprites */
for (i = 0;i < TOTAL_COLORS(1);i++)
COLOR(1,i) = *(color_prom++) & 0x0f;
/* characters map to the upper 16 palette entries */
for (i = 0; i < 0x100; i++)
{
UINT8 ctabentry = color_prom[i] & 0x0f;
colortable_entry_set_value(machine->colortable, i, ctabentry + 0x10);
}
/* characters */
for (i = 0;i < TOTAL_COLORS(0);i++)
COLOR(0,i) = (*(color_prom++) & 0x0f) + 0x10;
/* sprites map to the lower 16 palette entries */
for (i = 0x100; i < 0x200; i++)
{
UINT8 ctabentry = color_prom[i] & 0x0f;
colortable_entry_set_value(machine->colortable, i, ctabentry);
}
}
@ -90,11 +110,12 @@ static TILE_GET_INFO( get_tile_info )
{
UINT8 attr = circusc_colorram[tile_index];
tileinfo->category = (attr & 0x10) >> 4;
SET_TILE_INFO(
0,
circusc_videoram[tile_index] + ((attr & 0x20) << 3),
attr & 0x0f,
TILE_FLIPYX((attr & 0xc0) >> 6));
tileinfo->group = attr & 0x0f;
SET_TILE_INFO(0,
circusc_videoram[tile_index] + ((attr & 0x20) << 3),
attr & 0x0f,
TILE_FLIPYX((attr & 0xc0) >> 6));
}
@ -153,17 +174,18 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
if ((*circusc_spritebank & 0x01) != 0)
sr = spriteram;
else sr = spriteram_2;
else
sr = spriteram_2;
for (offs = 0; offs < spriteram_size;offs += 4)
{
int sx,sy,flipx,flipy;
int code = sr[offs + 0] + 8 * (sr[offs + 1] & 0x20);
int color = sr[offs + 1] & 0x0f;
int sx = sr[offs + 2];
int sy = sr[offs + 3];
int flipx = sr[offs + 1] & 0x40;
int flipy = sr[offs + 1] & 0x80;
sx = sr[offs + 2];
sy = sr[offs + 3];
flipx = sr[offs + 1] & 0x40;
flipy = sr[offs + 1] & 0x80;
if (flip_screen)
{
sx = 240 - sx;
@ -174,12 +196,11 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
drawgfx(bitmap,machine->gfx[1],
sr[offs + 0] + 8 * (sr[offs + 1] & 0x20),
sr[offs + 1] & 0x0f,
code, color,
flipx,flipy,
sx,sy,
cliprect,TRANSPARENCY_COLOR,0);
cliprect,TRANSPARENCY_PENS,
colortable_get_transpen_mask(machine->colortable, machine->gfx[1], color, 0));
}
}
@ -192,6 +213,7 @@ VIDEO_UPDATE( circusc )
for (i = 10;i < 32;i++)
tilemap_set_scrolly(bg_tilemap,i,*circusc_scroll);
fillbitmap(bitmap, machine->pens[0], cliprect);
tilemap_draw(bitmap,cliprect,bg_tilemap,1,0);
draw_sprites(machine,bitmap,cliprect);
tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);

View File

@ -64,45 +64,32 @@ PALETTE_INIT( clshroad )
PALETTE_INIT( firebatl )
{
int i;
#define TOTAL_COLORS(gfxn) (machine->gfx[gfxn]->total_colors * machine->gfx[gfxn]->color_granularity)
#define COLOR(gfxn,offs) (colortable[machine->drv->gfxdecodeinfo[gfxn].color_codes_start + offs])
/* allocate the colortable */
machine->colortable = colortable_alloc(machine, 0x100);
#if 1
for (i = 0;i < 256;i++)
/* create a lookup table for the palette */
for (i = 0; i < 0x100; i++)
{
int bit0,bit1,bit2,bit3,r,g,b;
int r = pal4bit(color_prom[i + 0x000]);
int g = pal4bit(color_prom[i + 0x100]);
int b = pal4bit(color_prom[i + 0x200]);
/* red component */
bit0 = (color_prom[i] >> 0) & 0x01;
bit1 = (color_prom[i] >> 1) & 0x01;
bit2 = (color_prom[i] >> 2) & 0x01;
bit3 = (color_prom[i] >> 3) & 0x01;
r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
/* green component */
bit0 = (color_prom[i + 256] >> 0) & 0x01;
bit1 = (color_prom[i + 256] >> 1) & 0x01;
bit2 = (color_prom[i + 256] >> 2) & 0x01;
bit3 = (color_prom[i + 256] >> 3) & 0x01;
g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
/* blue component */
bit0 = (color_prom[i + 2*256] >> 0) & 0x01;
bit1 = (color_prom[i + 2*256] >> 1) & 0x01;
bit2 = (color_prom[i + 2*256] >> 2) & 0x01;
bit3 = (color_prom[i + 2*256] >> 3) & 0x01;
b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3;
palette_set_color(machine,i,MAKE_RGB(r,g,b));
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b));
}
#endif
color_prom += 3*256;
/* color_prom now points to the beginning of the lookup table */
color_prom += 0x300;
for (i = 0; i < 0x200; i++)
colortable_entry_set_value(machine->colortable, i, i & 0xff);
for (i = 0;i < TOTAL_COLORS(2);i++)
COLOR(2,i) = ((color_prom[i] & 0x0f) << 4) + (color_prom[i+256] & 0x0f);
for (i = 0x200; i < 0x300; i++)
{
UINT8 ctabentry = ((color_prom[(i - 0x200) + 0x000] & 0x0f) << 4) |
(color_prom[(i - 0x200) + 0x100] & 0x0f);
colortable_entry_set_value(machine->colortable, i, ctabentry);
}
}
@ -200,11 +187,12 @@ static TILEMAP_MAPPER( tilemap_scan_rows_extra )
static TILE_GET_INFO( get_tile_info_fb1 )
{
UINT8 code = clshroad_vram_1[ tile_index + 0x000 ];
UINT8 color = clshroad_vram_1[ tile_index + 0x400 ];
UINT8 color = clshroad_vram_1[ tile_index + 0x400 ] & 0x3f;
tileinfo->group = color;
SET_TILE_INFO(
2,
code,
color & 0x3f,
color,
0);
}
@ -229,10 +217,10 @@ WRITE8_HANDLER( clshroad_vram_1_w )
VIDEO_START( firebatl )
{
/* These 2 use the graphics and scroll value */
tilemap_0a = tilemap_create(get_tile_info_0a,tilemap_scan_rows,TILEMAP_TYPE_PEN, 16,16,0x20,0x10);
tilemap_0a = tilemap_create(get_tile_info_0a,tilemap_scan_rows,TILEMAP_TYPE_PEN,16,16,0x20,0x10);
tilemap_0b = tilemap_create(get_tile_info_0b,tilemap_scan_rows,TILEMAP_TYPE_PEN,16,16,0x20,0x10);
/* Text (No scrolling) */
tilemap_1 = tilemap_create(get_tile_info_fb1,tilemap_scan_rows_extra,TILEMAP_TYPE_COLORTABLE,8,8,0x24,0x20);
tilemap_1 = tilemap_create(get_tile_info_fb1,tilemap_scan_rows_extra,TILEMAP_TYPE_PEN,8,8,0x24,0x20);
tilemap_set_scroll_rows( tilemap_0a, 1);
tilemap_set_scroll_rows( tilemap_0b, 1);
@ -246,13 +234,13 @@ VIDEO_START( firebatl )
tilemap_set_scrolldx( tilemap_0b, -0x30, -0xb5);
tilemap_set_transparent_pen( tilemap_0b, 0 );
tilemap_set_transparent_pen( tilemap_1, 0x0f );
colortable_configure_tilemap_groups(machine->colortable, tilemap_1, machine->gfx[2], 0x0f);
}
VIDEO_START( clshroad )
{
/* These 2 use the graphics and scroll value */
tilemap_0a = tilemap_create(get_tile_info_0a,tilemap_scan_rows,TILEMAP_TYPE_PEN, 16,16,0x20,0x10);
tilemap_0a = tilemap_create(get_tile_info_0a,tilemap_scan_rows,TILEMAP_TYPE_PEN,16,16,0x20,0x10);
tilemap_0b = tilemap_create(get_tile_info_0b,tilemap_scan_rows,TILEMAP_TYPE_PEN,16,16,0x20,0x10);
/* Text (No scrolling) */
tilemap_1 = tilemap_create(get_tile_info_1,tilemap_scan_rows_extra,TILEMAP_TYPE_PEN,8,8,0x24,0x20);