1 // license:GPL-2.0+
2 // copyright-holders:Juergen Buchmueller
3 /***************************************************************************
4
5 Meadows S2650 driver
6
7 ****************************************************************************/
8
9 #include "emu.h"
10 #include "includes/meadows.h"
11
12 /* some constants to make life easier */
13 #define SPR_ADJUST_X -18
14 #define SPR_ADJUST_Y -14
15
16
17 /*************************************
18 *
19 * Tilemap callbacks
20 *
21 *************************************/
22
TILE_GET_INFO_MEMBER(meadows_state::get_tile_info)23 TILE_GET_INFO_MEMBER(meadows_state::get_tile_info)
24 {
25 uint8_t *videoram = m_videoram;
26 tileinfo.set(0, videoram[tile_index] & 0x7f, 0, 0);
27 }
28
29
30
31 /*************************************
32 *
33 * Video startup
34 *
35 *************************************/
36
video_start()37 void meadows_state::video_start()
38 {
39 m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(meadows_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8,8, 32,30);
40 }
41
42
43
44 /*************************************
45 *
46 * Video RAM write
47 *
48 *************************************/
49
meadows_videoram_w(offs_t offset,uint8_t data)50 void meadows_state::meadows_videoram_w(offs_t offset, uint8_t data)
51 {
52 m_videoram[offset] = data;
53 m_bg_tilemap->mark_tile_dirty(offset);
54 }
55
56
57
58 /*************************************
59 *
60 * Sprite RAM write
61 *
62 *************************************/
63
meadows_spriteram_w(offs_t offset,uint8_t data)64 void meadows_state::meadows_spriteram_w(offs_t offset, uint8_t data)
65 {
66 // m_screen->update_now();
67 m_screen->update_partial(m_screen->vpos());
68 m_spriteram[offset] = data;
69 }
70
71
72
73 /*************************************
74 *
75 * Sprite rendering
76 *
77 *************************************/
78
draw_sprites(bitmap_ind16 & bitmap,const rectangle & clip)79 void meadows_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &clip)
80 {
81 uint8_t *spriteram = m_spriteram;
82 int i;
83
84 for (i = 0; i < 4; i++)
85 {
86 int x = spriteram[i+0] + SPR_ADJUST_X;
87 int y = spriteram[i+4] + SPR_ADJUST_Y;
88 int code = spriteram[i+8] & 0x0f; /* bit #0 .. #3 select sprite */
89 /* int bank = (spriteram[i+8] >> 4) & 1; bit #4 selects prom ??? */
90 int bank = i; /* that fixes it for now :-/ */
91 int flip = spriteram[i+8] >> 5; /* bit #5 flip vertical flag */
92
93 m_gfxdecode->gfx(bank + 1)->transpen(bitmap,clip, code, 0, flip, 0, x, y, 0);
94 }
95 }
96
97
98
99 /*************************************
100 *
101 * Primary video update
102 *
103 *************************************/
104
screen_update_meadows(screen_device & screen,bitmap_ind16 & bitmap,const rectangle & cliprect)105 uint32_t meadows_state::screen_update_meadows(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
106 {
107 /* draw the background */
108 m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
109
110 /* draw the sprites */
111 if (m_gfxdecode->gfx(1))
112 draw_sprites(bitmap, cliprect);
113 return 0;
114 }
115