Skip to content

Commit 610ca72

Browse files
committed
excellent/es9501.cpp: minor maintenance work (shorthand variable types everywhere, save state support, comment updates)
1 parent 7c58a51 commit 610ca72

File tree

1 file changed

+43
-41
lines changed

1 file changed

+43
-41
lines changed

src/mame/excellent/es9501.cpp

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ Undumped games known to run on this PCB:
2424
* Multi Spin
2525
2626
TODO
27-
- IRQs are wrong;
2827
- EEPROM write doesn't work;
2928
- outputs, hopper;
30-
- verify colors;
31-
- fix sprites (currently disabled);
29+
- sprite colors aren't always correct;
30+
- sprite / tilemap priorities;
31+
- bgtilemap tile number is currently masked at 0xfff but should go to at least
32+
0x3fff (see bugs in d9flower);
3233
- d9flower needs correct EEPROM;
3334
- device-ify ES-9409 and share with excellent/dblcrown.cpp.
3435
*/
@@ -94,34 +95,35 @@ class es9501_state : public driver_device
9495
required_device<eeprom_serial_93cxx_device> m_eeprom;
9596
required_device_array<address_map_bank_device, 2> m_vram_bank;
9697

97-
required_shared_ptr<uint8_t> m_vram;
98-
memory_share_creator<uint8_t> m_spriteram;
99-
memory_share_creator<uint8_t> m_pal_ram;
98+
required_shared_ptr<u8> m_vram;
99+
memory_share_creator<u8> m_spriteram;
100+
memory_share_creator<u8> m_pal_ram;
100101

101-
uint8_t m_vram_bank_entry[2] {};
102+
u8 m_irq_source = 0;
103+
u8 m_irq_mask = 0;
104+
u8 m_vram_bank_entry[2] {};
102105
tilemap_t *m_bg_tilemap = nullptr;
103106
tilemap_t *m_md_tilemap = nullptr;
104107
tilemap_t *m_fg_tilemap = nullptr;
105108

106109
TILE_GET_INFO_MEMBER(get_bg_tile_info);
107110
TILE_GET_INFO_MEMBER(get_fg_tile_info);
108-
void vram_w(offs_t offset, uint8_t data);
109-
uint8_t spriteram_r(offs_t offset) { return m_spriteram[offset]; }
110-
void spriteram_w(offs_t offset, uint8_t data) { m_spriteram[offset] = data; }
111-
void palette_w(offs_t offset, uint8_t data);
111+
void vram_w(offs_t offset, u8 data);
112+
u8 spriteram_r(offs_t offset) { return m_spriteram[offset]; }
113+
void spriteram_w(offs_t offset, u8 data) { m_spriteram[offset] = data; }
114+
void palette_w(offs_t offset, u8 data);
112115
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
113116

114-
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
117+
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
115118

116-
template <uint8_t Which> void vram_bank_w(uint8_t data);
119+
template <u8 Which> void vram_bank_w(u8 data);
117120

118-
void watchdog_eeprom_w(uint8_t data);
121+
void watchdog_eeprom_w(u8 data);
119122

120123
void program_map(address_map &map) ATTR_COLD;
121124
void vram_map(address_map &map) ATTR_COLD;
122125

123126
TIMER_DEVICE_CALLBACK_MEMBER(scanline_cb);
124-
u8 m_irq_source, m_irq_mask;
125127
};
126128

127129

@@ -143,23 +145,23 @@ void es9501_state::video_start()
143145

144146
TILE_GET_INFO_MEMBER(es9501_state::get_bg_tile_info)
145147
{
146-
uint8_t const *rambase = (const uint8_t *)tilemap.user_data();
147-
uint16_t const code = (rambase[tile_index * 2 + 1] | (rambase[tile_index * 2 + 0] << 8)) & 0xfff;
148-
uint8_t const color = (rambase[tile_index * 2 + 0] >> 4);
148+
u8 const *rambase = (const u8 *)tilemap.user_data();
149+
u16 const code = (rambase[tile_index * 2 + 1] | (rambase[tile_index * 2 + 0] << 8)) & 0xfff;
150+
u8 const color = (rambase[tile_index * 2 + 0] >> 4);
149151

150152
tileinfo.set(0, code, color, 0);
151153
}
152154

153155
TILE_GET_INFO_MEMBER(es9501_state::get_fg_tile_info)
154156
{
155-
uint8_t const *rambase = (const uint8_t *)tilemap.user_data();
156-
uint16_t const code = (rambase[tile_index * 2 + 1] | (rambase[tile_index * 2 + 0] << 8)) & 0x7ff;
157-
uint8_t const color = (rambase[tile_index * 2 + 0] >> 4);
157+
u8 const *rambase = (const u8 *)tilemap.user_data();
158+
u16 const code = (rambase[tile_index * 2 + 1] | (rambase[tile_index * 2 + 0] << 8)) & 0x7ff;
159+
u8 const color = (rambase[tile_index * 2 + 0] >> 4);
158160

159161
tileinfo.set(1, code, color, 0);
160162
}
161163

162-
void es9501_state::vram_w(offs_t offset, uint8_t data)
164+
void es9501_state::vram_w(offs_t offset, u8 data)
163165
{
164166
m_vram[offset] = data;
165167

@@ -175,7 +177,7 @@ void es9501_state::vram_w(offs_t offset, uint8_t data)
175177
m_gfxdecode->gfx(1)->mark_dirty(offset);
176178
}
177179

178-
void es9501_state::palette_w(offs_t offset, uint8_t data)
180+
void es9501_state::palette_w(offs_t offset, u8 data)
179181
{
180182
m_pal_ram[offset] = data;
181183
offset >>= 1;
@@ -210,7 +212,7 @@ void es9501_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
210212
}
211213
}
212214

213-
uint32_t es9501_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
215+
u32 es9501_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
214216
{
215217
bitmap.fill(0, cliprect);
216218
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
@@ -224,21 +226,21 @@ uint32_t es9501_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
224226

225227
void es9501_state::machine_start()
226228
{
227-
m_irq_source = 0;
228-
m_irq_mask = 0;
229+
save_item(NAME(m_irq_source));
230+
save_item(NAME(m_irq_mask));
229231
save_item(NAME(m_vram_bank_entry));
230232
}
231233

232-
template <uint8_t Which>
233-
void es9501_state::vram_bank_w(uint8_t data)
234+
template <u8 Which>
235+
void es9501_state::vram_bank_w(u8 data)
234236
{
235237
m_vram_bank_entry[Which] = data;
236238
m_vram_bank[Which]->set_bank(m_vram_bank_entry[Which]);
237239
}
238240

239-
void es9501_state::watchdog_eeprom_w(uint8_t data)
241+
void es9501_state::watchdog_eeprom_w(u8 data)
240242
{
241-
if (data & 0x01)
243+
if (BIT(data, 0))
242244
m_watchdog->watchdog_reset();
243245

244246
if (data & 0x2e)
@@ -261,8 +263,8 @@ void es9501_state::program_map(address_map &map)
261263
map(0x406000, 0x4063ff).lr8(NAME([this] (offs_t offset) { return m_pal_ram[offset]; })).w(FUNC(es9501_state::palette_w)).umask16(0xff00);
262264
map(0x406400, 0x406fff).ram();
263265
map(0x407c00, 0x407cff).ram();
264-
map(0x407e00, 0x407e00).lr8(NAME([this] () -> uint8_t { return m_vram_bank_entry[1]; })).w(FUNC(es9501_state::vram_bank_w<1>));
265-
map(0x407e02, 0x407e02).lr8(NAME([this] () -> uint8_t { return m_vram_bank_entry[0]; })).w(FUNC(es9501_state::vram_bank_w<0>));
266+
map(0x407e00, 0x407e00).lr8(NAME([this] () -> u8 { return m_vram_bank_entry[1]; })).w(FUNC(es9501_state::vram_bank_w<1>));
267+
map(0x407e02, 0x407e02).lr8(NAME([this] () -> u8 { return m_vram_bank_entry[0]; })).w(FUNC(es9501_state::vram_bank_w<0>));
266268
map(0x407e08, 0x407e08).lrw8(
267269
NAME([this] () {
268270
return m_irq_mask;
@@ -281,8 +283,8 @@ void es9501_state::program_map(address_map &map)
281283
map(0x600006, 0x600007).portr("DSW");
282284
map(0x600008, 0x600009).portr("EEPROM_IN");
283285
map(0x600008, 0x600008).w(FUNC(es9501_state::watchdog_eeprom_w));
284-
map(0x700000, 0x700003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0xff00); // ??
285-
map(0x700004, 0x700007).w("ymz284", FUNC(ymz284_device::address_data_w)).umask16(0xff00); // ??
286+
map(0x700000, 0x700003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask16(0xff00);
287+
map(0x700004, 0x700007).w("ymz284", FUNC(ymz284_device::address_data_w)).umask16(0xff00);
286288
}
287289

288290
void es9501_state::vram_map(address_map &map)
@@ -367,7 +369,7 @@ GFXDECODE_END
367369
// bit 2 unknown (sprite DMA complete? Unset by specd9)
368370
TIMER_DEVICE_CALLBACK_MEMBER(es9501_state::scanline_cb)
369371
{
370-
int scanline = param;
372+
int const scanline = param;
371373

372374
if (scanline == 240 && BIT(m_irq_mask, 1))
373375
{
@@ -398,7 +400,7 @@ void es9501_state::es9501(machine_config &config)
398400
for (auto bank : m_vram_bank)
399401
ADDRESS_MAP_BANK(config, bank).set_map(&es9501_state::vram_map).set_options(ENDIANNESS_LITTLE, 8, 16, 0x1000);
400402

401-
SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // TODO: everything
403+
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
402404
m_screen->set_refresh_hz(60);
403405
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500));
404406
m_screen->set_screen_update(FUNC(es9501_state::screen_update));
@@ -520,8 +522,8 @@ ROM_END
520522
} // anonymous namespace
521523

522524

523-
GAME( 1998, d9flower, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Cadence Technology", "Dream 9 Flower (v1.00c, set 1)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
524-
GAME( 1998, d9flowera, d9flower, es9501, specd9, es9501_state, empty_init, ROT0, "Cadence Technology", "Dream 9 Flower (v1.00c, set 2)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
525-
GAME( 1997, specd9, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Special Dream 9 (v1.0.7G)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
526-
GAME( 1997, specd9105g, specd9, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Special Dream 9 (v1.0.5G)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
527-
GAME( 1997, starball, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Star Ball (v1.0.0S)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
525+
GAME( 1998, d9flower, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Cadence Technology", "Dream 9 Flower (v1.00c, set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
526+
GAME( 1998, d9flowera, d9flower, es9501, specd9, es9501_state, empty_init, ROT0, "Cadence Technology", "Dream 9 Flower (v1.00c, set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
527+
GAME( 1997, specd9, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Special Dream 9 (v1.0.7G)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
528+
GAME( 1997, specd9105g, specd9, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Special Dream 9 (v1.0.5G)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
529+
GAME( 1997, starball, 0, es9501, specd9, es9501_state, empty_init, ROT0, "Excellent System", "Star Ball (v1.0.0S)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )

0 commit comments

Comments
 (0)