58
54
static TILE_GET_INFO( get_bg_tile_info )
60
SET_TILE_INFO(2, tryout_vram[tile_index] & 0x7f, 2, 0);
56
tryout_state *state = machine.driver_data<tryout_state>();
57
SET_TILE_INFO(2, state->m_vram[tile_index] & 0x7f, 2, 0);
63
60
READ8_HANDLER( tryout_vram_r )
65
return tryout_vram[offset]; // debug only
62
tryout_state *state = space->machine().driver_data<tryout_state>();
63
return state->m_vram[offset]; // debug only
68
66
WRITE8_HANDLER( tryout_videoram_w )
70
tryout_state *state = space->machine->driver_data<tryout_state>();
71
UINT8 *videoram = state->videoram;
68
tryout_state *state = space->machine().driver_data<tryout_state>();
69
UINT8 *videoram = state->m_videoram;
72
70
videoram[offset] = data;
73
tilemap_mark_tile_dirty(fg_tilemap, offset & 0x3ff);
71
tilemap_mark_tile_dirty(state->m_fg_tilemap, offset & 0x3ff);
76
74
WRITE8_HANDLER( tryout_vram_w )
76
tryout_state *state = space->machine().driver_data<tryout_state>();
78
77
/* There are eight banks of vram - in bank 0 the first 0x400 bytes
79
78
is reserved for the tilemap. In banks 2, 4 and 6 the game never
80
79
writes to the first 0x400 bytes - I suspect it's either
111
110
offset=(offset&0x7ff) | (bank<<11);
112
tryout_vram[offset]=data;
111
state->m_vram[offset]=data;
114
113
switch (offset&0x1c00) {
116
tryout_vram_gfx[(offset&0x3ff) + 0x0000 + ((offset&0x2000)>>1)]=(~data&0xf);
117
tryout_vram_gfx[(offset&0x3ff) + 0x2000 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
115
state->m_vram_gfx[(offset&0x3ff) + 0x0000 + ((offset&0x2000)>>1)]=(~data&0xf);
116
state->m_vram_gfx[(offset&0x3ff) + 0x2000 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
120
tryout_vram_gfx[(offset&0x3ff) + 0x4000 + ((offset&0x2000)>>1)]=(~data&0xf);
121
tryout_vram_gfx[(offset&0x3ff) + 0x4400 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
119
state->m_vram_gfx[(offset&0x3ff) + 0x4000 + ((offset&0x2000)>>1)]=(~data&0xf);
120
state->m_vram_gfx[(offset&0x3ff) + 0x4400 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
124
tryout_vram_gfx[(offset&0x3ff) + 0x0400 + ((offset&0x2000)>>1)]=(~data&0xf);
125
tryout_vram_gfx[(offset&0x3ff) + 0x2400 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
123
state->m_vram_gfx[(offset&0x3ff) + 0x0400 + ((offset&0x2000)>>1)]=(~data&0xf);
124
state->m_vram_gfx[(offset&0x3ff) + 0x2400 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
128
tryout_vram_gfx[(offset&0x3ff) + 0x0800 + ((offset&0x2000)>>1)]=(~data&0xf);
129
tryout_vram_gfx[(offset&0x3ff) + 0x2800 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
127
state->m_vram_gfx[(offset&0x3ff) + 0x0800 + ((offset&0x2000)>>1)]=(~data&0xf);
128
state->m_vram_gfx[(offset&0x3ff) + 0x2800 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
132
tryout_vram_gfx[(offset&0x3ff) + 0x4800 + ((offset&0x2000)>>1)]=(~data&0xf);
133
tryout_vram_gfx[(offset&0x3ff) + 0x4c00 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
131
state->m_vram_gfx[(offset&0x3ff) + 0x4800 + ((offset&0x2000)>>1)]=(~data&0xf);
132
state->m_vram_gfx[(offset&0x3ff) + 0x4c00 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
136
tryout_vram_gfx[(offset&0x3ff) + 0x0c00 + ((offset&0x2000)>>1)]=(~data&0xf);
137
tryout_vram_gfx[(offset&0x3ff) + 0x2c00 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
135
state->m_vram_gfx[(offset&0x3ff) + 0x0c00 + ((offset&0x2000)>>1)]=(~data&0xf);
136
state->m_vram_gfx[(offset&0x3ff) + 0x2c00 + ((offset&0x2000)>>1)]=(~data&0xf0)>>4;
141
gfx_element_mark_dirty(space->machine->gfx[2], (offset-0x400/64)&0x7f);
140
gfx_element_mark_dirty(space->machine().gfx[2], (offset-0x400/64)&0x7f);
144
143
WRITE8_HANDLER( tryout_vram_bankswitch_w )
145
tryout_state *state = space->machine().driver_data<tryout_state>();
146
state->m_vram_bank = data;
149
149
WRITE8_HANDLER( tryout_flipscreen_w )
151
flip_screen_set(space->machine, data & 1);
151
flip_screen_set(space->machine(), data & 1);
154
154
static TILEMAP_MAPPER( get_fg_memory_offset )
171
171
VIDEO_START( tryout )
173
fg_tilemap = tilemap_create(machine, get_fg_tile_info,get_fg_memory_offset,8,8,32,32);
174
bg_tilemap = tilemap_create(machine, get_bg_tile_info,get_bg_memory_offset,16,16,64,16);
176
tryout_vram=auto_alloc_array(machine, UINT8, 8 * 0x800);
177
tryout_vram_gfx=auto_alloc_array(machine, UINT8, 0x6000);
179
gfx_element_set_source(machine->gfx[2], tryout_vram_gfx);
181
tilemap_set_transparent_pen(fg_tilemap,0);
173
tryout_state *state = machine.driver_data<tryout_state>();
174
state->m_fg_tilemap = tilemap_create(machine, get_fg_tile_info,get_fg_memory_offset,8,8,32,32);
175
state->m_bg_tilemap = tilemap_create(machine, get_bg_tile_info,get_bg_memory_offset,16,16,64,16);
177
state->m_vram=auto_alloc_array(machine, UINT8, 8 * 0x800);
178
state->m_vram_gfx=auto_alloc_array(machine, UINT8, 0x6000);
180
gfx_element_set_source(machine.gfx[2], state->m_vram_gfx);
182
tilemap_set_transparent_pen(state->m_fg_tilemap,0);
184
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
185
static void draw_sprites(running_machine &machine, bitmap_t *bitmap,const rectangle *cliprect)
186
UINT8 *spriteram = machine->generic.spriteram.u8;
187
UINT8 *spriteram_2 = machine->generic.spriteram2.u8;
187
tryout_state *state = machine.driver_data<tryout_state>();
188
UINT8 *spriteram = state->m_spriteram;
189
UINT8 *spriteram_2 = state->m_spriteram2;
188
190
int offs,fx,fy,x,y,color,sprite,inc;
190
192
for (offs = 0;offs < 0x7f;offs += 4)
214
216
/* Double Height */
215
217
if(spriteram[offs] & 0x10)
217
drawgfx_transpen(bitmap,cliprect,machine->gfx[1],
219
drawgfx_transpen(bitmap,cliprect,machine.gfx[1],
219
221
color,fx,fy,x,y + inc,0);
221
drawgfx_transpen(bitmap,cliprect,machine->gfx[1],
223
drawgfx_transpen(bitmap,cliprect,machine.gfx[1],
223
225
color,fx,fy,x,y,0);
227
drawgfx_transpen(bitmap,cliprect,machine->gfx[1],
229
drawgfx_transpen(bitmap,cliprect,machine.gfx[1],
229
231
color,fx,fy,x,y,0);
234
VIDEO_UPDATE( tryout )
236
SCREEN_UPDATE( tryout )
238
tryout_state *state = screen->machine().driver_data<tryout_state>();
238
if (!flip_screen_get(screen->machine))
239
tilemap_set_scrollx(fg_tilemap, 0, 16); /* Assumed hard-wired */
241
if (!flip_screen_get(screen->machine()))
242
tilemap_set_scrollx(state->m_fg_tilemap, 0, 16); /* Assumed hard-wired */
241
tilemap_set_scrollx(fg_tilemap, 0, -8); /* Assumed hard-wired */
244
tilemap_set_scrollx(state->m_fg_tilemap, 0, -8); /* Assumed hard-wired */
243
scrollx = tryout_gfx_control[1] + ((tryout_gfx_control[0]&1)<<8) + ((tryout_gfx_control[0]&4)<<7) - ((tryout_gfx_control[0] & 2) ? 0 : 0x100);
246
scrollx = state->m_gfx_control[1] + ((state->m_gfx_control[0]&1)<<8) + ((state->m_gfx_control[0]&4)<<7) - ((state->m_gfx_control[0] & 2) ? 0 : 0x100);
245
248
/* wrap-around */
246
if(tryout_gfx_control[1] == 0) { scrollx+=0x100; }
248
tilemap_set_scrollx(bg_tilemap, 0, scrollx+2); /* why +2? hard-wired? */
249
tilemap_set_scrolly(bg_tilemap, 0, -tryout_gfx_control[2]);
251
if(!(tryout_gfx_control[0] & 0x8)) // screen disable
249
if(state->m_gfx_control[1] == 0) { scrollx+=0x100; }
251
tilemap_set_scrollx(state->m_bg_tilemap, 0, scrollx+2); /* why +2? hard-wired? */
252
tilemap_set_scrolly(state->m_bg_tilemap, 0, -state->m_gfx_control[2]);
254
if(!(state->m_gfx_control[0] & 0x8)) // screen disable
253
256
/* TODO: Color might be different, needs a video from an original pcb. */
254
bitmap_fill(bitmap, cliprect, screen->machine->pens[0x10]);
257
bitmap_fill(bitmap, cliprect, screen->machine().pens[0x10]);
258
tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
259
tilemap_draw(bitmap,cliprect,fg_tilemap,0,0);
260
draw_sprites(screen->machine, bitmap,cliprect);
261
tilemap_draw(bitmap,cliprect,state->m_bg_tilemap,0,0);
262
tilemap_draw(bitmap,cliprect,state->m_fg_tilemap,0,0);
263
draw_sprites(screen->machine(), bitmap,cliprect);
263
// popmessage("%02x %02x %02x %02x",tryout_gfx_control[0],tryout_gfx_control[1],tryout_gfx_control[2],scrollx);
266
// popmessage("%02x %02x %02x %02x",state->m_gfx_control[0],state->m_gfx_control[1],state->m_gfx_control[2],scrollx);