9
9
#include "includes/portrait.h"
12
UINT8 *portrait_bgvideoram, *portrait_fgvideoram;
13
static tilemap_t *foreground, *background;
15
12
WRITE8_HANDLER( portrait_bgvideo_write )
17
tilemap_mark_tile_dirty(background,offset/2);
18
portrait_bgvideoram[offset] = data;
14
portrait_state *state = space->machine().driver_data<portrait_state>();
15
tilemap_mark_tile_dirty(state->m_background,offset/2);
16
state->m_bgvideoram[offset] = data;
21
19
WRITE8_HANDLER( portrait_fgvideo_write )
23
tilemap_mark_tile_dirty(foreground,offset/2);
24
portrait_fgvideoram[offset] = data;
21
portrait_state *state = space->machine().driver_data<portrait_state>();
22
tilemap_mark_tile_dirty(state->m_foreground,offset/2);
23
state->m_fgvideoram[offset] = data;
27
INLINE void get_tile_info( running_machine *machine, tile_data *tileinfo, int tile_index, const UINT8 *source )
26
INLINE void get_tile_info( running_machine &machine, tile_data *tileinfo, int tile_index, const UINT8 *source )
29
28
int attr = source[tile_index*2+0];
30
29
int tilenum = source[tile_index*2+1];
58
57
static TILE_GET_INFO( get_bg_tile_info )
60
get_tile_info( machine, tileinfo, tile_index, portrait_bgvideoram );
59
portrait_state *state = machine.driver_data<portrait_state>();
60
get_tile_info( machine, tileinfo, tile_index, state->m_bgvideoram );
63
63
static TILE_GET_INFO( get_fg_tile_info )
65
get_tile_info( machine, tileinfo, tile_index, portrait_fgvideoram );
65
portrait_state *state = machine.driver_data<portrait_state>();
66
get_tile_info( machine, tileinfo, tile_index, state->m_fgvideoram );
68
69
VIDEO_START( portrait )
70
background = tilemap_create( machine, get_bg_tile_info, tilemap_scan_rows, 16, 16, 32, 32 );
71
foreground = tilemap_create( machine, get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32 );
71
portrait_state *state = machine.driver_data<portrait_state>();
72
state->m_background = tilemap_create( machine, get_bg_tile_info, tilemap_scan_rows, 16, 16, 32, 32 );
73
state->m_foreground = tilemap_create( machine, get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32 );
73
tilemap_set_transparent_pen( foreground, 7 );
75
tilemap_set_transparent_pen( state->m_foreground, 7 );
78
80
PALETTE_INIT( portrait )
81
UINT8* lookup = machine->region("tileattr")->base();
83
UINT8* lookup = machine.region("tileattr")->base();
83
85
/* allocate the colortable */
84
machine->colortable = colortable_alloc(machine, 0x40);
86
machine.colortable = colortable_alloc(machine, 0x40);
87
89
for (i = 0;i < 0x40;i++)
94
96
g = (data >> 3) & 0x3;
95
97
b = (data >> 5) & 0x7;
97
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(pal3bit(r), pal2bit(g), pal3bit(b)));
99
colortable_palette_set_color(machine.colortable, i, MAKE_RGB(pal3bit(r), pal2bit(g), pal3bit(b)));
109
111
g = (data >> 5) & 0x1f;
110
112
b = (data >> 10) & 0x1f;
112
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(pal5bit(r), pal5bit(g), pal5bit(b)));
114
colortable_palette_set_color(machine.colortable, i, MAKE_RGB(pal5bit(r), pal5bit(g), pal5bit(b)));
114
116
// ?? the lookup seems to reference 0x3f colours, unless 1 bit is priority or similar?
115
colortable_palette_set_color(machine->colortable, i+0x20, MAKE_RGB(pal5bit(r>>1), pal5bit(g>>1), pal5bit(b>>1)));
117
colortable_palette_set_color(machine.colortable, i+0x20, MAKE_RGB(pal5bit(r>>1), pal5bit(g>>1), pal5bit(b>>1)));
122
124
for (i = 0;i < 0x800;i++)
124
126
UINT8 ctabentry = lookup[i]&0x3f;
125
colortable_entry_set_value(machine->colortable, i, ctabentry);
127
colortable_entry_set_value(machine.colortable, i, ctabentry);
130
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
132
static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const rectangle *cliprect)
132
UINT8 *source = machine->generic.spriteram.u8;
134
portrait_state *state = machine.driver_data<portrait_state>();
135
UINT8 *source = state->m_spriteram;
133
136
UINT8 *finish = source + 0x200;
135
138
while( source < finish )
194
198
cliprect_no_scroll.min_x = cliprect_no_scroll.max_x - 111;
195
199
cliprect_scroll.max_x = cliprect_scroll.min_x + 319;
197
tilemap_set_scrolly(background, 0, 0);
198
tilemap_set_scrolly(foreground, 0, 0);
199
tilemap_draw(bitmap, &cliprect_no_scroll, background, 0, 0);
200
tilemap_draw(bitmap, &cliprect_no_scroll, foreground, 0, 0);
202
tilemap_set_scrolly(background, 0, portrait_scroll);
203
tilemap_set_scrolly(foreground, 0, portrait_scroll);
204
tilemap_draw(bitmap, &cliprect_scroll, background, 0, 0);
205
tilemap_draw(bitmap, &cliprect_scroll, foreground, 0, 0);
207
draw_sprites(screen->machine, bitmap,cliprect);
201
tilemap_set_scrolly(state->m_background, 0, 0);
202
tilemap_set_scrolly(state->m_foreground, 0, 0);
203
tilemap_draw(bitmap, &cliprect_no_scroll, state->m_background, 0, 0);
204
tilemap_draw(bitmap, &cliprect_no_scroll, state->m_foreground, 0, 0);
206
tilemap_set_scrolly(state->m_background, 0, state->m_scroll);
207
tilemap_set_scrolly(state->m_foreground, 0, state->m_scroll);
208
tilemap_draw(bitmap, &cliprect_scroll, state->m_background, 0, 0);
209
tilemap_draw(bitmap, &cliprect_scroll, state->m_foreground, 0, 0);
211
draw_sprites(screen->machine(), bitmap,cliprect);