@@ -24,11 +24,12 @@ Undumped games known to run on this PCB:
24
24
* Multi Spin
25
25
26
26
TODO
27
- - IRQs are wrong;
28
27
- EEPROM write doesn't work;
29
28
- 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);
32
33
- d9flower needs correct EEPROM;
33
34
- device-ify ES-9409 and share with excellent/dblcrown.cpp.
34
35
*/
@@ -94,34 +95,35 @@ class es9501_state : public driver_device
94
95
required_device<eeprom_serial_93cxx_device> m_eeprom;
95
96
required_device_array<address_map_bank_device, 2 > m_vram_bank;
96
97
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;
100
101
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 ] {};
102
105
tilemap_t *m_bg_tilemap = nullptr ;
103
106
tilemap_t *m_md_tilemap = nullptr ;
104
107
tilemap_t *m_fg_tilemap = nullptr ;
105
108
106
109
TILE_GET_INFO_MEMBER (get_bg_tile_info);
107
110
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);
112
115
void draw_sprites (bitmap_ind16 &bitmap, const rectangle &cliprect);
113
116
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);
115
118
116
- template <uint8_t Which> void vram_bank_w (uint8_t data);
119
+ template <u8 Which> void vram_bank_w (u8 data);
117
120
118
- void watchdog_eeprom_w (uint8_t data);
121
+ void watchdog_eeprom_w (u8 data);
119
122
120
123
void program_map (address_map &map) ATTR_COLD;
121
124
void vram_map (address_map &map) ATTR_COLD;
122
125
123
126
TIMER_DEVICE_CALLBACK_MEMBER (scanline_cb);
124
- u8 m_irq_source, m_irq_mask;
125
127
};
126
128
127
129
@@ -143,23 +145,23 @@ void es9501_state::video_start()
143
145
144
146
TILE_GET_INFO_MEMBER (es9501_state::get_bg_tile_info)
145
147
{
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 );
149
151
150
152
tileinfo.set (0 , code, color, 0 );
151
153
}
152
154
153
155
TILE_GET_INFO_MEMBER (es9501_state::get_fg_tile_info)
154
156
{
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 );
158
160
159
161
tileinfo.set (1 , code, color, 0 );
160
162
}
161
163
162
- void es9501_state::vram_w (offs_t offset, uint8_t data)
164
+ void es9501_state::vram_w (offs_t offset, u8 data)
163
165
{
164
166
m_vram[offset] = data;
165
167
@@ -175,7 +177,7 @@ void es9501_state::vram_w(offs_t offset, uint8_t data)
175
177
m_gfxdecode->gfx (1 )->mark_dirty (offset);
176
178
}
177
179
178
- void es9501_state::palette_w (offs_t offset, uint8_t data)
180
+ void es9501_state::palette_w (offs_t offset, u8 data)
179
181
{
180
182
m_pal_ram[offset] = data;
181
183
offset >>= 1 ;
@@ -210,7 +212,7 @@ void es9501_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
210
212
}
211
213
}
212
214
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)
214
216
{
215
217
bitmap.fill (0 , cliprect);
216
218
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
224
226
225
227
void es9501_state::machine_start ()
226
228
{
227
- m_irq_source = 0 ;
228
- m_irq_mask = 0 ;
229
+ save_item ( NAME ( m_irq_source)) ;
230
+ save_item ( NAME ( m_irq_mask)) ;
229
231
save_item (NAME (m_vram_bank_entry));
230
232
}
231
233
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)
234
236
{
235
237
m_vram_bank_entry[Which] = data;
236
238
m_vram_bank[Which]->set_bank (m_vram_bank_entry[Which]);
237
239
}
238
240
239
- void es9501_state::watchdog_eeprom_w (uint8_t data)
241
+ void es9501_state::watchdog_eeprom_w (u8 data)
240
242
{
241
- if (data & 0x01 )
243
+ if (BIT ( data, 0 ) )
242
244
m_watchdog->watchdog_reset ();
243
245
244
246
if (data & 0x2e )
@@ -261,8 +263,8 @@ void es9501_state::program_map(address_map &map)
261
263
map (0x406000 , 0x4063ff ).lr8 (NAME ([this ] (offs_t offset) { return m_pal_ram[offset]; })).w (FUNC (es9501_state::palette_w)).umask16 (0xff00 );
262
264
map (0x406400 , 0x406fff ).ram ();
263
265
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 >));
266
268
map (0x407e08 , 0x407e08 ).lrw8 (
267
269
NAME ([this ] () {
268
270
return m_irq_mask;
@@ -281,8 +283,8 @@ void es9501_state::program_map(address_map &map)
281
283
map (0x600006 , 0x600007 ).portr (" DSW" );
282
284
map (0x600008 , 0x600009 ).portr (" EEPROM_IN" );
283
285
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 );
286
288
}
287
289
288
290
void es9501_state::vram_map (address_map &map)
@@ -367,7 +369,7 @@ GFXDECODE_END
367
369
// bit 2 unknown (sprite DMA complete? Unset by specd9)
368
370
TIMER_DEVICE_CALLBACK_MEMBER(es9501_state::scanline_cb)
369
371
{
370
- int scanline = param;
372
+ int const scanline = param;
371
373
372
374
if (scanline == 240 && BIT (m_irq_mask, 1 ))
373
375
{
@@ -398,7 +400,7 @@ void es9501_state::es9501(machine_config &config)
398
400
for (auto bank : m_vram_bank)
399
401
ADDRESS_MAP_BANK (config, bank).set_map (&es9501_state::vram_map).set_options (ENDIANNESS_LITTLE, 8 , 16 , 0x1000 );
400
402
401
- SCREEN (config, m_screen, SCREEN_TYPE_RASTER); // TODO: everything
403
+ SCREEN (config, m_screen, SCREEN_TYPE_RASTER);
402
404
m_screen->set_refresh_hz (60 );
403
405
m_screen->set_vblank_time (ATTOSECONDS_IN_USEC (2500 ));
404
406
m_screen->set_screen_update (FUNC (es9501_state::screen_update));
@@ -520,8 +522,8 @@ ROM_END
520
522
} // anonymous namespace
521
523
522
524
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