Previous 199869 Revisions Next

r26842 Tuesday 31st December, 2013 at 16:22:45 UTC by Osso
Fix for MT04005 and possibly MT03976 too (NW)
[src/mame/drivers]ms32.c
[src/mame/includes]ms32.h
[src/mame/video]ms32.c

trunk/src/mame/drivers/ms32.c
r26841r26842
254254
255255READ8_MEMBER(ms32_state::ms32_priram_r8)
256256{
257   return m_priram_8[offset];
257   return m_priram[offset];
258258}
259259
260260WRITE8_MEMBER(ms32_state::ms32_priram_w8)
261261{
262   m_priram_8[offset] = data;
262   m_priram[offset] = data;
263263}
264264
265265READ16_MEMBER(ms32_state::ms32_palram_r16)
266266{
267   return m_palram_16[offset];
267   return m_palram[offset];
268268}
269269
270270WRITE16_MEMBER(ms32_state::ms32_palram_w16)
271271{
272   COMBINE_DATA(&m_palram_16[offset]);
272   COMBINE_DATA(&m_palram[offset]);
273273}
274274
275275READ16_MEMBER(ms32_state::ms32_rozram_r16)
276276{
277   return m_rozram_16[offset];
277   return m_rozram[offset];
278278}
279279
280280WRITE16_MEMBER(ms32_state::ms32_rozram_w16)
281281{
282   COMBINE_DATA(&m_rozram_16[offset]);
282   COMBINE_DATA(&m_rozram[offset]);
283283   m_roz_tilemap->mark_tile_dirty(offset/2);
284284}
285285
286286READ16_MEMBER(ms32_state::ms32_lineram_r16)
287287{
288   return m_lineram_16[offset];
288   return m_lineram[offset];
289289}
290290
291291WRITE16_MEMBER(ms32_state::ms32_lineram_w16)
292292{
293   COMBINE_DATA(&m_lineram_16[offset]);
293   COMBINE_DATA(&m_lineram[offset]);
294294}
295295
296296READ16_MEMBER(ms32_state::ms32_sprram_r16)
297297{
298   return m_sprram_16[offset];
298   return m_sprram[offset];
299299}
300300
301301WRITE16_MEMBER(ms32_state::ms32_sprram_w16)
302302{
303   COMBINE_DATA(&m_sprram_16[offset]);
303   COMBINE_DATA(&m_sprram[offset]);
304304}
305305
306306READ16_MEMBER(ms32_state::ms32_txram_r16)
307307{
308   return m_txram_16[offset];
308   return m_txram[offset];
309309}
310310
311311WRITE16_MEMBER(ms32_state::ms32_txram_w16)
312312{
313   COMBINE_DATA(&m_txram_16[offset]);
313   COMBINE_DATA(&m_txram[offset]);
314314   m_tx_tilemap->mark_tile_dirty(offset/2);
315315}
316316
317317READ16_MEMBER(ms32_state::ms32_bgram_r16)
318318{
319   return m_bgram_16[offset];
319   return m_bgram[offset];
320320}
321321
322322WRITE16_MEMBER(ms32_state::ms32_bgram_w16)
323323{
324   COMBINE_DATA(&m_bgram_16[offset]);
324   COMBINE_DATA(&m_bgram[offset]);
325325   m_bg_tilemap->mark_tile_dirty(offset/2);
326326   m_bg_tilemap_alt->mark_tile_dirty(offset/2);
327327}
r26841r26842
339339   /* RAM areas verified by testing on real hw - usually accessed at the 0xfc000000 + mirror */
340340   AM_RANGE(0xc0000000, 0xc0007fff) AM_READWRITE8(ms32_nvram_r8,   ms32_nvram_w8,   0x000000ff) AM_MIRROR(0x3c1fe000)  // nvram is 8-bit wide, 0x2000 in size */
341341/*  AM_RANGE(0xc0008000, 0xc01fffff) // mirrors of nvramram, handled above */
342   AM_RANGE(0xc1180000, 0xc1187fff) AM_READWRITE8(ms32_priram_r8,  ms32_priram_w8,  0x000000ff) AM_MIRROR(0x3c038000) /* priram is 8-bit wide, 0x2000 in size */
342   AM_RANGE(0xc1180000, 0xc1187fff) AM_READWRITE8(ms32_priram_r8,  ms32_priram_w8,  0x000000ff) AM_MIRROR(0x3c038000) AM_SHARE("priram") /* priram is 8-bit wide, 0x2000 in size */
343343/*  AM_RANGE(0xc1188000, 0xc11bffff) // mirrors of priram, handled above */
344   AM_RANGE(0xc1400000, 0xc143ffff) AM_READWRITE16(ms32_palram_r16, ms32_palram_w16, 0x0000ffff) AM_MIRROR(0x3c1c0000) /* palram is 16-bit wide, 0x20000 in size */
344   AM_RANGE(0xc1400000, 0xc143ffff) AM_READWRITE16(ms32_palram_r16, ms32_palram_w16, 0x0000ffff) AM_MIRROR(0x3c1c0000) AM_SHARE("palram") /* palram is 16-bit wide, 0x20000 in size */
345345/*  AM_RANGE(0xc1440000, 0xc145ffff) // mirrors of palram, handled above */
346   AM_RANGE(0xc2000000, 0xc201ffff) AM_READWRITE16(ms32_rozram_r16, ms32_rozram_w16, 0x0000ffff) AM_MIRROR(0x3c1e0000) /* rozram is 16-bit wide, 0x10000 in size */
346   AM_RANGE(0xc2000000, 0xc201ffff) AM_READWRITE16(ms32_rozram_r16, ms32_rozram_w16, 0x0000ffff) AM_MIRROR(0x3c1e0000) AM_SHARE("rozram") /* rozram is 16-bit wide, 0x10000 in size */
347347/*  AM_RANGE(0xc2020000, 0xc21fffff) // mirrors of rozram, handled above */
348   AM_RANGE(0xc2200000, 0xc2201fff) AM_READWRITE16(ms32_lineram_r16,ms32_lineram_w16,0x0000ffff) AM_MIRROR(0x3c1fe000) /* lineram is 16-bit wide, 0x1000 in size */
348   AM_RANGE(0xc2200000, 0xc2201fff) AM_READWRITE16(ms32_lineram_r16,ms32_lineram_w16,0x0000ffff) AM_MIRROR(0x3c1fe000) AM_SHARE("lineram") /* lineram is 16-bit wide, 0x1000 in size */
349349/*  AM_RANGE(0xc2202000, 0xc23fffff) // mirrors of lineram, handled above */
350   AM_RANGE(0xc2800000, 0xc283ffff) AM_READWRITE16(ms32_sprram_r16, ms32_sprram_w16, 0x0000ffff) AM_MIRROR(0x3c1c0000) /* spriteram is 16-bit wide, 0x20000 in size */
350   AM_RANGE(0xc2800000, 0xc283ffff) AM_READWRITE16(ms32_sprram_r16, ms32_sprram_w16, 0x0000ffff) AM_MIRROR(0x3c1c0000) AM_SHARE("sprram") /* spriteram is 16-bit wide, 0x20000 in size */
351351/*  AM_RANGE(0xc2840000, 0xc29fffff) // mirrors of sprram, handled above */
352   AM_RANGE(0xc2c00000, 0xc2c07fff) AM_READWRITE16(ms32_txram_r16,  ms32_txram_w16,  0x0000ffff) AM_MIRROR(0x3c1f0000) /* txram is 16-bit wide, 0x4000 in size */
353   AM_RANGE(0xc2c08000, 0xc2c0ffff) AM_READWRITE16(ms32_bgram_r16,  ms32_bgram_w16,  0x0000ffff) AM_MIRROR(0x3c1f0000) /* bgram is 16-bit wide, 0x4000 in size */
352   AM_RANGE(0xc2c00000, 0xc2c07fff) AM_READWRITE16(ms32_txram_r16,  ms32_txram_w16,  0x0000ffff) AM_MIRROR(0x3c1f0000) AM_SHARE("txram") /* txram is 16-bit wide, 0x4000 in size */
353   AM_RANGE(0xc2c08000, 0xc2c0ffff) AM_READWRITE16(ms32_bgram_r16,  ms32_bgram_w16,  0x0000ffff) AM_MIRROR(0x3c1f0000) AM_SHARE("bgram") /* bgram is 16-bit wide, 0x4000 in size */
354354/*  AM_RANGE(0xc2c10000, 0xc2dfffff) // mirrors of txram / bg, handled above */
355355   AM_RANGE(0xc2e00000, 0xc2e1ffff) AM_RAM AM_SHARE("mainram")                                AM_MIRROR(0x3c0e0000) /* mainram is 32-bit wide, 0x20000 in size */
356356   AM_RANGE(0xc3e00000, 0xc3ffffff) AM_ROMBANK("bank1")                                                AM_MIRROR(0x3c000000) // ROM is 32-bit wide, 0x200000 in size */
r26841r26842
381381
382382WRITE16_MEMBER(ms32_state::ms32_extra_w16)
383383{
384   COMBINE_DATA(&m_f1superb_extraram_16[offset]);
384   COMBINE_DATA(&m_f1superb_extraram[offset]);
385385   m_extra_tilemap->mark_tile_dirty(offset/2);
386386}
387387READ16_MEMBER(ms32_state::ms32_extra_r16)
388388{
389   return m_f1superb_extraram_16[offset];
389   return m_f1superb_extraram[offset];
390390}
391391
392392WRITE32_MEMBER(ms32_state::ms32_irq2_guess_w)
r26841r26842
417417   AM_RANGE(0xfd140000, 0xfd143fff) AM_RAM // used when you start enabling fpu ints
418418   AM_RANGE(0xfd144000, 0xfd145fff) AM_RAM // same data here
419419
420   AM_RANGE(0xfdc00000, 0xfdc007ff) AM_READWRITE16(ms32_extra_r16, ms32_extra_w16, 0x0000ffff) // definitely line ram
420   AM_RANGE(0xfdc00000, 0xfdc007ff) AM_READWRITE16(ms32_extra_r16, ms32_extra_w16, 0x0000ffff) AM_SHARE("f1sb_extraram") // definitely line ram
421421   AM_RANGE(0xfde00000, 0xfde01fff) AM_RAM // scroll info for lineram?
422422
423423   AM_IMPORT_FROM(ms32_map)
trunk/src/mame/includes/ms32.h
r26841r26842
88      m_tx_scroll(*this, "tx_scroll"),
99      m_bg_scroll(*this, "bg_scroll"),
1010      m_mahjong_input_select(*this, "mahjong_select"),
11      m_priram(*this, "priram", 32),
12      m_palram(*this, "palram", 32),
13      m_rozram(*this, "rozram", 32),
14      m_lineram(*this, "lineram", 32),
15      m_sprram(*this, "sprram", 32),
16      m_txram(*this, "txram", 32),
17      m_bgram(*this, "bgram", 32),
18      m_f1superb_extraram(*this, "f1sb_extraram", 32),
1119      m_maincpu(*this, "maincpu"),
1220      m_audiocpu(*this, "audiocpu")  { }
1321
r26841r26842
1624   required_shared_ptr<UINT32> m_tx_scroll;
1725   required_shared_ptr<UINT32> m_bg_scroll;
1826   required_shared_ptr<UINT32> m_mahjong_input_select;
27   required_shared_ptr<UINT8> m_priram;
28   required_shared_ptr<UINT16> m_palram;
29   required_shared_ptr<UINT16> m_rozram;
30   required_shared_ptr<UINT16> m_lineram;
31   required_shared_ptr<UINT16> m_sprram;
32   required_shared_ptr<UINT16> m_txram;
33   required_shared_ptr<UINT16> m_bgram;
34   optional_shared_ptr<UINT16> m_f1superb_extraram;
1935   UINT8 *m_nvram_8;
2036   UINT32 m_to_main;
2137   UINT16 m_irqreq;
r26841r26842
2339   tilemap_t *m_roz_tilemap;
2440   tilemap_t *m_bg_tilemap;
2541   tilemap_t *m_bg_tilemap_alt;
26   UINT8* m_priram_8;
27   UINT16* m_palram_16;
28   UINT16* m_rozram_16;
29   UINT16* m_lineram_16;
30   UINT16* m_sprram_16;
31   UINT16* m_txram_16;
32   UINT16* m_bgram_16;
3342   UINT32 m_tilemaplayoutcontrol;
34   UINT16* m_f1superb_extraram_16;
3543   tilemap_t* m_extra_tilemap;
3644   bitmap_ind16 m_temp_bitmap_tilemaps;
3745   bitmap_ind16 m_temp_bitmap_sprites;
trunk/src/mame/video/ms32.c
r26841r26842
2424{
2525   int tileno, colour;
2626
27   tileno = m_txram_16[tile_index *2]   & 0xffff;
28   colour = m_txram_16[tile_index *2+1] & 0x000f;
27   tileno = m_txram[tile_index *2]   & 0xffff;
28   colour = m_txram[tile_index *2+1] & 0x000f;
2929
3030   SET_TILE_INFO_MEMBER(3,tileno,colour,0);
3131}
r26841r26842
3434{
3535   int tileno,colour;
3636
37   tileno = m_rozram_16[tile_index *2]   & 0xffff;
38   colour = m_rozram_16[tile_index *2+1] & 0x000f;
37   tileno = m_rozram[tile_index *2]   & 0xffff;
38   colour = m_rozram[tile_index *2+1] & 0x000f;
3939
4040   SET_TILE_INFO_MEMBER(1,tileno,colour,0);
4141}
r26841r26842
4444{
4545   int tileno,colour;
4646
47   tileno = m_bgram_16[tile_index *2]   & 0xffff;
48   colour = m_bgram_16[tile_index *2+1] & 0x000f;
47   tileno = m_bgram[tile_index *2]   & 0xffff;
48   colour = m_bgram[tile_index *2+1] & 0x000f;
4949
5050   SET_TILE_INFO_MEMBER(2,tileno,colour,0);
5151}
r26841r26842
5454{
5555   int tileno,colour;
5656
57   tileno = m_f1superb_extraram_16[tile_index *2]   & 0xffff;
58   colour = m_f1superb_extraram_16[tile_index *2+1] & 0x000f;
57   tileno = m_f1superb_extraram[tile_index *2]   & 0xffff;
58   colour = m_f1superb_extraram[tile_index *2+1] & 0x000f;
5959
6060   SET_TILE_INFO_MEMBER(4,tileno,colour+0x50,0);
6161}
r26841r26842
6464
6565void ms32_state::video_start()
6666{
67   m_priram_8   = auto_alloc_array_clear(machine(), UINT8, 0x2000);
68   m_palram_16  = auto_alloc_array_clear(machine(), UINT16, 0x20000);
69   m_rozram_16  = auto_alloc_array_clear(machine(), UINT16, 0x10000);
70   m_lineram_16 = auto_alloc_array_clear(machine(), UINT16, 0x1000);
71   m_sprram_16  = auto_alloc_array_clear(machine(), UINT16, 0x20000);
72   m_bgram_16   = auto_alloc_array_clear(machine(), UINT16, 0x4000);
73   m_txram_16   = auto_alloc_array_clear(machine(), UINT16, 0x4000);
74
7567   m_tx_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ms32_state::get_ms32_tx_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,64,64);
7668   m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ms32_state::get_ms32_bg_tile_info),this),TILEMAP_SCAN_ROWS,16,16,64,64);
7769   m_bg_tilemap_alt = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ms32_state::get_ms32_bg_tile_info),this),TILEMAP_SCAN_ROWS,16,16,256,16); // alt layout, controller by register?
r26841r26842
10597
10698   // tp2m32 doesn't set the brightness registers so we need sensible defaults
10799   m_brt[0] = m_brt[1] = 0xffff;
100   
101   save_item(NAME(m_irqreq));
102   save_item(NAME(m_temp_bitmap_tilemaps));
103   save_item(NAME(m_temp_bitmap_sprites));
104   save_item(NAME(m_temp_bitmap_sprites_pri));
105   save_item(NAME(m_tilemaplayoutcontrol));
106   save_item(NAME(m_reverse_sprite_order));
107   save_item(NAME(m_flipscreen));
108   save_item(NAME(m_brt));
109   save_item(NAME(m_brt_r));
110   save_item(NAME(m_brt_g));
111   save_item(NAME(m_brt_b));
108112}
109113
110114VIDEO_START_MEMBER(ms32_state,f1superb)
111115{
112116   ms32_state::video_start();
113117
114   m_f1superb_extraram_16  = auto_alloc_array_clear(machine(), UINT16, 0x10000);
115118   m_extra_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(ms32_state::get_ms32_extra_tile_info),this),TILEMAP_SCAN_ROWS,2048,1,1,0x400);
116
117119}
118120
119121/********** PALETTE WRITES **********/
r26841r26842
129131    */
130132   if (~color & 0x4000)
131133   {
132      r = ((m_palram_16[color*2] & 0xff00) >>8 ) * m_brt_r / 0x100;
133      g = ((m_palram_16[color*2] & 0x00ff) >>0 ) * m_brt_g / 0x100;
134      b = ((m_palram_16[color*2+1] & 0x00ff) >>0 ) * m_brt_b / 0x100;
134      r = ((m_palram[color*2] & 0xff00) >>8 ) * m_brt_r / 0x100;
135      g = ((m_palram[color*2] & 0x00ff) >>0 ) * m_brt_g / 0x100;
136      b = ((m_palram[color*2+1] & 0x00ff) >>0 ) * m_brt_b / 0x100;
135137   }
136138   else
137139   {
138      r = ((m_palram_16[color*2] & 0xff00) >>8 );
139      g = ((m_palram_16[color*2] & 0x00ff) >>0 );
140      b = ((m_palram_16[color*2+1] & 0x00ff) >>0 );
140      r = ((m_palram[color*2] & 0xff00) >>8 );
141      g = ((m_palram[color*2] & 0x00ff) >>0 );
142      b = ((m_palram[color*2+1] & 0x00ff) >>0 );
141143   }
142144
143145   palette_set_color(machine(),color,MAKE_RGB(r,g,b));
r26841r26842
280282
281283      while (y <= maxy)
282284      {
283         UINT16 *lineaddr = m_lineram_16 + 8 * (y & 0xff);
285         UINT16 *lineaddr = m_lineram + 8 * (y & 0xff);
284286
285287         int start2x = (lineaddr[0x00/4] & 0xffff) | ((lineaddr[0x04/4] & 3) << 16);
286288         int start2y = (lineaddr[0x08/4] & 0xffff) | ((lineaddr[0x0c/4] & 3) << 16);
r26841r26842
390392   m_temp_bitmap_sprites.fill(0, cliprect);
391393   m_temp_bitmap_sprites_pri.fill(0, cliprect);
392394
393   draw_sprites(m_temp_bitmap_sprites, m_temp_bitmap_sprites_pri, cliprect, m_sprram_16, 0x20000, 0, m_reverse_sprite_order);
395   draw_sprites(m_temp_bitmap_sprites, m_temp_bitmap_sprites_pri, cliprect, m_sprram, 0x20000, 0, m_reverse_sprite_order);
394396
395397
396398
397399
398400   asc_pri = scr_pri = rot_pri = 0;
399401
400   if((m_priram_8[0x2b00 / 2] & 0x00ff) == 0x0034)
402   if((m_priram[0x2b00 / 2] & 0x00ff) == 0x0034)
401403      asc_pri++;
402404   else
403405      rot_pri++;
404406
405   if((m_priram_8[0x2e00 / 2] & 0x00ff) == 0x0034)
407   if((m_priram[0x2e00 / 2] & 0x00ff) == 0x0034)
406408      asc_pri++;
407409   else
408410      scr_pri++;
409411
410   if((m_priram_8[0x3a00 / 2] & 0x00ff) == 0x000c)
412   if((m_priram[0x3a00 / 2] & 0x00ff) == 0x000c)
411413      scr_pri++;
412414   else
413415      rot_pri++;
r26841r26842
491493            int primask = 0;
492494
493495            // get sprite priority value back out of bitmap/colour data (this is done in draw_sprite for standalone hw)
494            if (m_priram_8[(spritepri | 0x0a00 | 0x1500) / 2] & 0x38) primask |= 1 << 0;
495            if (m_priram_8[(spritepri | 0x0a00 | 0x1400) / 2] & 0x38) primask |= 1 << 1;
496            if (m_priram_8[(spritepri | 0x0a00 | 0x1100) / 2] & 0x38) primask |= 1 << 2;
497            if (m_priram_8[(spritepri | 0x0a00 | 0x1000) / 2] & 0x38) primask |= 1 << 3;
498            if (m_priram_8[(spritepri | 0x0a00 | 0x0500) / 2] & 0x38) primask |= 1 << 4;
499            if (m_priram_8[(spritepri | 0x0a00 | 0x0400) / 2] & 0x38) primask |= 1 << 5;
500            if (m_priram_8[(spritepri | 0x0a00 | 0x0100) / 2] & 0x38) primask |= 1 << 6;
501            if (m_priram_8[(spritepri | 0x0a00 | 0x0000) / 2] & 0x38) primask |= 1 << 7;
496            if (m_priram[(spritepri | 0x0a00 | 0x1500) / 2] & 0x38) primask |= 1 << 0;
497            if (m_priram[(spritepri | 0x0a00 | 0x1400) / 2] & 0x38) primask |= 1 << 1;
498            if (m_priram[(spritepri | 0x0a00 | 0x1100) / 2] & 0x38) primask |= 1 << 2;
499            if (m_priram[(spritepri | 0x0a00 | 0x1000) / 2] & 0x38) primask |= 1 << 3;
500            if (m_priram[(spritepri | 0x0a00 | 0x0500) / 2] & 0x38) primask |= 1 << 4;
501            if (m_priram[(spritepri | 0x0a00 | 0x0400) / 2] & 0x38) primask |= 1 << 5;
502            if (m_priram[(spritepri | 0x0a00 | 0x0100) / 2] & 0x38) primask |= 1 << 6;
503            if (m_priram[(spritepri | 0x0a00 | 0x0000) / 2] & 0x38) primask |= 1 << 7;
502504
503505
504506            if (primask == 0x00)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team