Previous 199869 Revisions Next

r34923 Sunday 8th February, 2015 at 08:08:35 UTC by Osso
rabbit.c, tmmjprd.c: added save state support, removed unneeded prefixes (nw)
[src/mame/drivers]rabbit.c tmmjprd.c

trunk/src/mame/drivers/rabbit.c
r243434r243435
9696
9797   rabbit_state(const machine_config &mconfig, device_type type, const char *tag)
9898      : driver_device(mconfig, type, tag),
99      m_maincpu(*this, "maincpu"),
100      m_eeprom(*this, "eeprom"),
101      m_gfxdecode(*this, "gfxdecode"),
102      m_palette(*this, "palette"),
99103      m_viewregs0(*this, "viewregs0"),
100104      m_viewregs6(*this, "viewregs6"),
101105      m_viewregs7(*this, "viewregs7"),
r243434r243435
104108      m_tilemap_regs(*this, "tilemap_regs"),
105109      m_spriteregs(*this, "spriteregs"),
106110      m_blitterregs(*this, "blitterregs"),
107      m_spriteram(*this, "spriteram"),
108      m_maincpu(*this, "maincpu"),
109      m_eeprom(*this, "eeprom"),
110      m_gfxdecode(*this, "gfxdecode"),
111      m_palette(*this, "palette") { }
111      m_spriteram(*this, "spriteram") { }
112112
113   required_device<cpu_device> m_maincpu;
114   required_device<eeprom_serial_93cxx_device> m_eeprom;
115   required_device<gfxdecode_device> m_gfxdecode;
116   required_device<palette_device> m_palette;
117   
113118   required_shared_ptr<UINT32> m_viewregs0;
114119   required_shared_ptr<UINT32> m_viewregs6;
115120   required_shared_ptr<UINT32> m_viewregs7;
r243434r243435
118123   required_shared_ptr_array<UINT32, 4> m_tilemap_regs;
119124   required_shared_ptr<UINT32> m_spriteregs;
120125   required_shared_ptr<UINT32> m_blitterregs;
126   required_shared_ptr<UINT32> m_spriteram;
127   
121128   bitmap_ind16 *m_sprite_bitmap;
122129   rectangle m_sprite_clip;
123130   int m_vblirqlevel;
124131   int m_bltirqlevel;
125132   int m_banking;
126133   UINT32 *m_tilemap_ram[4];
127   required_shared_ptr<UINT32> m_spriteram;
128134   tilemap_t *m_tilemap[4];
129   DECLARE_WRITE32_MEMBER(rabbit_tilemap0_w);
130   DECLARE_WRITE32_MEMBER(rabbit_tilemap1_w);
131   DECLARE_WRITE32_MEMBER(rabbit_tilemap2_w);
132   DECLARE_WRITE32_MEMBER(rabbit_tilemap3_w);
133   DECLARE_READ32_MEMBER(rabbit_tilemap0_r);
134   DECLARE_READ32_MEMBER(rabbit_tilemap1_r);
135   DECLARE_READ32_MEMBER(rabbit_tilemap2_r);
136   DECLARE_READ32_MEMBER(rabbit_tilemap3_r);
135   
136   DECLARE_WRITE32_MEMBER(tilemap0_w);
137   DECLARE_WRITE32_MEMBER(tilemap1_w);
138   DECLARE_WRITE32_MEMBER(tilemap2_w);
139   DECLARE_WRITE32_MEMBER(tilemap3_w);
140   DECLARE_READ32_MEMBER(tilemap0_r);
141   DECLARE_READ32_MEMBER(tilemap1_r);
142   DECLARE_READ32_MEMBER(tilemap2_r);
143   DECLARE_READ32_MEMBER(tilemap3_r);
137144   DECLARE_READ32_MEMBER(randomrabbits);
138   DECLARE_WRITE32_MEMBER(rabbit_rombank_w);
139   DECLARE_WRITE32_MEMBER(rabbit_blitter_w);
140   DECLARE_WRITE32_MEMBER(rabbit_eeprom_write);
145   DECLARE_WRITE32_MEMBER(rombank_w);
146   DECLARE_WRITE32_MEMBER(blitter_w);
147   DECLARE_WRITE32_MEMBER(eeprom_write);
148   
141149   DECLARE_DRIVER_INIT(rabbit);
142   TILE_GET_INFO_MEMBER(get_rabbit_tilemap0_tile_info);
143   TILE_GET_INFO_MEMBER(get_rabbit_tilemap1_tile_info);
144   TILE_GET_INFO_MEMBER(get_rabbit_tilemap2_tile_info);
145   TILE_GET_INFO_MEMBER(get_rabbit_tilemap3_tile_info);
150   
151   TILE_GET_INFO_MEMBER(get_tilemap0_tile_info);
152   TILE_GET_INFO_MEMBER(get_tilemap1_tile_info);
153   TILE_GET_INFO_MEMBER(get_tilemap2_tile_info);
154   TILE_GET_INFO_MEMBER(get_tilemap3_tile_info);
155   
156   INTERRUPT_GEN_MEMBER(vblank_interrupt);
157   
146158   virtual void video_start();
147   UINT32 screen_update_rabbit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
148   INTERRUPT_GEN_MEMBER(rabbit_vblank_interrupt);
149   inline void get_rabbit_tilemap_info(tile_data &tileinfo, int tile_index, int whichtilemap, int tilesize);
159   
160   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
161   inline void get_tilemap_info(tile_data &tileinfo, int tile_index, int whichtilemap, int tilesize);
150162   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
151   void rabbit_clearspritebitmap( bitmap_ind16 &bitmap, const rectangle &cliprect );
163   void clearspritebitmap( bitmap_ind16 &bitmap, const rectangle &cliprect );
152164   void draw_sprite_bitmap( bitmap_ind16 &bitmap, const rectangle &cliprect );
153   void rabbit_drawtilemap( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int whichtilemap );
154   void rabbit_do_blit();
155   required_device<cpu_device> m_maincpu;
156   required_device<eeprom_serial_93cxx_device> m_eeprom;
157   required_device<gfxdecode_device> m_gfxdecode;
158   required_device<palette_device> m_palette;
165   void drawtilemap( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int whichtilemap );
166   void do_blit();
167
159168protected:
160169   virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
161170};
162171
163172
164173/* call with tilesize = 0 for 8x8 or 1 for 16x16 */
165void rabbit_state::get_rabbit_tilemap_info(tile_data &tileinfo, int tile_index, int whichtilemap, int tilesize)
174void rabbit_state::get_tilemap_info(tile_data &tileinfo, int tile_index, int whichtilemap, int tilesize)
166175{
167176   /* fedcba98 76543210 fedcba98 76543210
168177      x                                    color mask? how exactly does it relate to color bits?
r243434r243435
222231   }
223232}
224233
225TILE_GET_INFO_MEMBER(rabbit_state::get_rabbit_tilemap0_tile_info)
234TILE_GET_INFO_MEMBER(rabbit_state::get_tilemap0_tile_info)
226235{
227   get_rabbit_tilemap_info(tileinfo,tile_index,0,1);
236   get_tilemap_info(tileinfo,tile_index,0,1);
228237}
229238
230TILE_GET_INFO_MEMBER(rabbit_state::get_rabbit_tilemap1_tile_info)
239TILE_GET_INFO_MEMBER(rabbit_state::get_tilemap1_tile_info)
231240{
232   get_rabbit_tilemap_info(tileinfo,tile_index,1,1);
241   get_tilemap_info(tileinfo,tile_index,1,1);
233242}
234243
235TILE_GET_INFO_MEMBER(rabbit_state::get_rabbit_tilemap2_tile_info)
244TILE_GET_INFO_MEMBER(rabbit_state::get_tilemap2_tile_info)
236245{
237   get_rabbit_tilemap_info(tileinfo,tile_index,2,1);
246   get_tilemap_info(tileinfo,tile_index,2,1);
238247}
239248
240TILE_GET_INFO_MEMBER(rabbit_state::get_rabbit_tilemap3_tile_info)
249TILE_GET_INFO_MEMBER(rabbit_state::get_tilemap3_tile_info)
241250{
242   get_rabbit_tilemap_info(tileinfo,tile_index,3,0);
251   get_tilemap_info(tileinfo,tile_index,3,0);
243252}
244253
245WRITE32_MEMBER(rabbit_state::rabbit_tilemap0_w)
254WRITE32_MEMBER(rabbit_state::tilemap0_w)
246255{
247256   COMBINE_DATA(&m_tilemap_ram[0][offset]);
248257   m_tilemap[0]->mark_tile_dirty(offset);
249258}
250259
251WRITE32_MEMBER(rabbit_state::rabbit_tilemap1_w)
260WRITE32_MEMBER(rabbit_state::tilemap1_w)
252261{
253262   COMBINE_DATA(&m_tilemap_ram[1][offset]);
254263   m_tilemap[1]->mark_tile_dirty(offset);
255264}
256265
257WRITE32_MEMBER(rabbit_state::rabbit_tilemap2_w)
266WRITE32_MEMBER(rabbit_state::tilemap2_w)
258267{
259268   COMBINE_DATA(&m_tilemap_ram[2][offset]);
260269   m_tilemap[2]->mark_tile_dirty(offset);
261270}
262271
263272
264WRITE32_MEMBER(rabbit_state::rabbit_tilemap3_w)
273WRITE32_MEMBER(rabbit_state::tilemap3_w)
265274{
266275   COMBINE_DATA(&m_tilemap_ram[3][offset]);
267276   m_tilemap[3]->mark_tile_dirty(offset);
r243434r243435
323332}
324333
325334/* the sprite bitmap can probably be handled better than this ... */
326void rabbit_state::rabbit_clearspritebitmap( bitmap_ind16 &bitmap, const rectangle &cliprect )
335void rabbit_state::clearspritebitmap( bitmap_ind16 &bitmap, const rectangle &cliprect )
327336{
328337   int startx, starty;
329338   int y;
r243434r243435
411420   m_tilemap_ram[2] = auto_alloc_array_clear(machine(), UINT32, 0x20000/4);
412421   m_tilemap_ram[3] = auto_alloc_array_clear(machine(), UINT32, 0x20000/4);
413422
414   m_tilemap[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_rabbit_tilemap0_tile_info),this),TILEMAP_SCAN_ROWS,16, 16, 128,32);
415   m_tilemap[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_rabbit_tilemap1_tile_info),this),TILEMAP_SCAN_ROWS,16, 16, 128,32);
416   m_tilemap[2] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_rabbit_tilemap2_tile_info),this),TILEMAP_SCAN_ROWS,16, 16, 128,32);
417   m_tilemap[3] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_rabbit_tilemap3_tile_info),this),TILEMAP_SCAN_ROWS, 8,  8, 128,32);
423   m_tilemap[0] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_tilemap0_tile_info),this),TILEMAP_SCAN_ROWS,16, 16, 128,32);
424   m_tilemap[1] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_tilemap1_tile_info),this),TILEMAP_SCAN_ROWS,16, 16, 128,32);
425   m_tilemap[2] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_tilemap2_tile_info),this),TILEMAP_SCAN_ROWS,16, 16, 128,32);
426   m_tilemap[3] = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(rabbit_state::get_tilemap3_tile_info),this),TILEMAP_SCAN_ROWS, 8,  8, 128,32);
418427
419428   /* the tilemaps mix 4bpp and 8bbp tiles, we split these into 2 groups, and set a different transpen for each group */
420429   m_tilemap[0]->map_pen_to_layer(0, 15,  TILEMAP_PIXEL_TRANSPARENT);
r243434r243435
428437
429438   m_sprite_bitmap = auto_bitmap_ind16_alloc(machine(),0x1000,0x1000);
430439   m_sprite_clip.set(0, 0x1000-1, 0, 0x1000-1);
440   
441   save_pointer(NAME(m_tilemap_ram[0]), 0x20000/4);
442   save_pointer(NAME(m_tilemap_ram[1]), 0x20000/4);
443   save_pointer(NAME(m_tilemap_ram[2]), 0x20000/4);
444   save_pointer(NAME(m_tilemap_ram[3]), 0x20000/4);
431445}
432446
433447/*
r243434r243435
452466
453467*/
454468
455void rabbit_state::rabbit_drawtilemap( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int whichtilemap )
469void rabbit_state::drawtilemap( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int whichtilemap )
456470{
457471   INT32 startx, starty, incxx, incxy, incyx, incyy, tran;
458472
r243434r243435
475489         tran ? 0 : TILEMAP_DRAW_OPAQUE,0);
476490}
477491
478UINT32 rabbit_state::screen_update_rabbit(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
492UINT32 rabbit_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
479493{
480494   int prilevel;
481495
r243434r243435
497511   /* prio isnt certain but seems to work.. */
498512   for (prilevel = 0xf; prilevel >0; prilevel--)
499513   {
500      if (prilevel == ((m_tilemap_regs[3][0]&0x0f000000)>>24)) rabbit_drawtilemap(screen,bitmap,cliprect, 3);
501      if (prilevel == ((m_tilemap_regs[2][0]&0x0f000000)>>24)) rabbit_drawtilemap(screen,bitmap,cliprect, 2);
502      if (prilevel == ((m_tilemap_regs[1][0]&0x0f000000)>>24)) rabbit_drawtilemap(screen,bitmap,cliprect, 1);
503      if (prilevel == ((m_tilemap_regs[0][0]&0x0f000000)>>24)) rabbit_drawtilemap(screen,bitmap,cliprect, 0);
514      if (prilevel == ((m_tilemap_regs[3][0]&0x0f000000)>>24)) drawtilemap(screen,bitmap,cliprect, 3);
515      if (prilevel == ((m_tilemap_regs[2][0]&0x0f000000)>>24)) drawtilemap(screen,bitmap,cliprect, 2);
516      if (prilevel == ((m_tilemap_regs[1][0]&0x0f000000)>>24)) drawtilemap(screen,bitmap,cliprect, 1);
517      if (prilevel == ((m_tilemap_regs[0][0]&0x0f000000)>>24)) drawtilemap(screen,bitmap,cliprect, 0);
504518
505519      if (prilevel == 0x09) // should it be selectable?
506520      {
507         rabbit_clearspritebitmap(bitmap,cliprect);
521         clearspritebitmap(bitmap,cliprect);
508522         draw_sprites(bitmap,cliprect);  // render to bitmap
509523         draw_sprite_bitmap(bitmap,cliprect); // copy bitmap to screen
510524      }
r243434r243435
515529
516530
517531
518READ32_MEMBER(rabbit_state::rabbit_tilemap0_r)
532READ32_MEMBER(rabbit_state::tilemap0_r)
519533{
520534   return m_tilemap_ram[0][offset];
521535}
522536
523READ32_MEMBER(rabbit_state::rabbit_tilemap1_r)
537READ32_MEMBER(rabbit_state::tilemap1_r)
524538{
525539   return m_tilemap_ram[1][offset];
526540}
527541
528READ32_MEMBER(rabbit_state::rabbit_tilemap2_r)
542READ32_MEMBER(rabbit_state::tilemap2_r)
529543{
530544   return m_tilemap_ram[2][offset];
531545}
532546
533READ32_MEMBER(rabbit_state::rabbit_tilemap3_r)
547READ32_MEMBER(rabbit_state::tilemap3_r)
534548{
535549   return m_tilemap_ram[3][offset];
536550}
r243434r243435
541555}
542556
543557/* rom bank is used when testing roms, not currently hooked up */
544WRITE32_MEMBER(rabbit_state::rabbit_rombank_w)
558WRITE32_MEMBER(rabbit_state::rombank_w)
545559{
546560   UINT8 *dataroms = memregion("gfx1")->base();
547561#if 0
r243434r243435
572586   }
573587}
574588
575void rabbit_state::rabbit_do_blit()
589void rabbit_state::do_blit()
576590{
577591   UINT8 *blt_data = memregion("gfx1")->base();
578592   int blt_source = (m_blitterregs[0]&0x000fffff)>>0;
r243434r243435
667681
668682
669683
670WRITE32_MEMBER(rabbit_state::rabbit_blitter_w)
684WRITE32_MEMBER(rabbit_state::blitter_w)
671685{
672686   COMBINE_DATA(&m_blitterregs[offset]);
673687
674688   if (offset == 0x0c/4)
675689   {
676      rabbit_do_blit();
690      do_blit();
677691   }
678692}
679693
680WRITE32_MEMBER(rabbit_state::rabbit_eeprom_write)
694WRITE32_MEMBER(rabbit_state::eeprom_write)
681695{
682696   // don't disturb the EEPROM if we're not actually writing to it
683697   // (in particular, data & 0x100 here with mask = ffff00ff looks to be the watchdog)
r243434r243435
700714   AM_RANGE(0x000010, 0x000013) AM_WRITENOP // bug in code / emulation?
701715   AM_RANGE(0x000024, 0x000027) AM_WRITENOP // bug in code / emulation?
702716   AM_RANGE(0x00719c, 0x00719f) AM_WRITENOP // bug in code / emulation?
703   AM_RANGE(0x200000, 0x200003) AM_READ_PORT("INPUTS") AM_WRITE(rabbit_eeprom_write)
717   AM_RANGE(0x200000, 0x200003) AM_READ_PORT("INPUTS") AM_WRITE(eeprom_write)
704718   AM_RANGE(0x400010, 0x400013) AM_READ(randomrabbits) // gfx chip status?
705719   /* this lot are probably gfxchip/blitter etc. related */
706720   AM_RANGE(0x400010, 0x400013) AM_WRITEONLY AM_SHARE("viewregs0" )
r243434r243435
709723   AM_RANGE(0x400140, 0x400157) AM_WRITEONLY AM_SHARE("tilemap_regs.2" ) // tilemap regs3
710724   AM_RANGE(0x400160, 0x400177) AM_WRITEONLY AM_SHARE("tilemap_regs.3" ) // tilemap regs4
711725   AM_RANGE(0x400200, 0x40021b) AM_WRITEONLY AM_SHARE("spriteregs" ) // sprregs?
712   AM_RANGE(0x400300, 0x400303) AM_WRITE(rabbit_rombank_w) // used during rom testing, rombank/area select + something else?
726   AM_RANGE(0x400300, 0x400303) AM_WRITE(rombank_w) // used during rom testing, rombank/area select + something else?
713727   AM_RANGE(0x400400, 0x400413) AM_WRITEONLY AM_SHARE("viewregs6" ) // some global controls? (brightness etc.?)
714728   AM_RANGE(0x400500, 0x400503) AM_WRITEONLY AM_SHARE("viewregs7" )
715   AM_RANGE(0x400700, 0x40070f) AM_WRITE(rabbit_blitter_w) AM_SHARE("blitterregs" )
729   AM_RANGE(0x400700, 0x40070f) AM_WRITE(blitter_w) AM_SHARE("blitterregs" )
716730   AM_RANGE(0x400800, 0x40080f) AM_WRITEONLY AM_SHARE("viewregs9" ) // never changes?
717731   AM_RANGE(0x400900, 0x4009ff) AM_DEVREADWRITE16("i5000snd", i5000snd_device, read, write, 0xffffffff)
718732   /* hmm */
r243434r243435
720734
721735   AM_RANGE(0x440000, 0x47ffff) AM_ROMBANK("bank1") // data (gfx / sound) rom readback for ROM testing
722736   /* tilemaps */
723   AM_RANGE(0x480000, 0x483fff) AM_READWRITE(rabbit_tilemap0_r,rabbit_tilemap0_w)
724   AM_RANGE(0x484000, 0x487fff) AM_READWRITE(rabbit_tilemap1_r,rabbit_tilemap1_w)
725   AM_RANGE(0x488000, 0x48bfff) AM_READWRITE(rabbit_tilemap2_r,rabbit_tilemap2_w)
726   AM_RANGE(0x48c000, 0x48ffff) AM_READWRITE(rabbit_tilemap3_r,rabbit_tilemap3_w)
737   AM_RANGE(0x480000, 0x483fff) AM_READWRITE(tilemap0_r,tilemap0_w)
738   AM_RANGE(0x484000, 0x487fff) AM_READWRITE(tilemap1_r,tilemap1_w)
739   AM_RANGE(0x488000, 0x48bfff) AM_READWRITE(tilemap2_r,tilemap2_w)
740   AM_RANGE(0x48c000, 0x48ffff) AM_READWRITE(tilemap3_r,tilemap3_w)
727741   AM_RANGE(0x494000, 0x497fff) AM_RAM AM_SHARE("spriteram") // sprites?
728742   AM_RANGE(0x4a0000, 0x4affff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
729743   AM_RANGE(0xff0000, 0xffffff) AM_RAM
r243434r243435
761775INPUT_PORTS_END
762776
763777
764static const gfx_layout rabbit_sprite_8x8x4_layout =
778static const gfx_layout sprite_8x8x4_layout =
765779{
766780   8,8,
767781   RGN_FRAC(1,1),
r243434r243435
772786   8*32
773787};
774788
775static const gfx_layout rabbit_sprite_8x8x8_layout =
789static const gfx_layout sprite_8x8x8_layout =
776790{
777791   8,8,
778792   RGN_FRAC(1,1),
r243434r243435
785799
786800
787801
788static const gfx_layout rabbit_sprite_16x16x4_layout =
802static const gfx_layout sprite_16x16x4_layout =
789803{
790804   16,16,
791805   RGN_FRAC(1,2),
r243434r243435
796810   16*32
797811};
798812
799static const gfx_layout rabbit_sprite_16x16x8_layout =
813static const gfx_layout sprite_16x16x8_layout =
800814{
801815   16,16,
802816   RGN_FRAC(1,2),
r243434r243435
807821   16*64
808822};
809823
810static const gfx_layout rabbit_8x8x4_layout =
824static const gfx_layout _8x8x4_layout =
811825{
812826   8,8,
813827   RGN_FRAC(1,1),
r243434r243435
818832   8*32
819833};
820834
821static const gfx_layout rabbit_16x16x4_layout =
835static const gfx_layout _16x16x4_layout =
822836{
823837   16,16,
824838   RGN_FRAC(1,1),
r243434r243435
829843   16*64
830844};
831845
832static const gfx_layout rabbit_8x8x8_layout =
846static const gfx_layout _8x8x8_layout =
833847{
834848   8,8,
835849   RGN_FRAC(1,1),
r243434r243435
840854   8*64
841855};
842856
843static const gfx_layout rabbit_16x16x8_layout =
857static const gfx_layout _16x16x8_layout =
844858{
845859   16,16,
846860   RGN_FRAC(1,1),
r243434r243435
855869
856870static GFXDECODE_START( rabbit )
857871   /* this seems to be sprites */
858   GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_8x8x4_layout,   0x0, 0x1000  )
859   GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_16x16x4_layout, 0x0, 0x1000  )
860   GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_8x8x8_layout,   0x0, 0x1000  ) // wrong
861   GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_16x16x8_layout, 0x0, 0x1000  ) // wrong
872   GFXDECODE_ENTRY( "gfx1", 0, sprite_8x8x4_layout,   0x0, 0x1000  )
873   GFXDECODE_ENTRY( "gfx1", 0, sprite_16x16x4_layout, 0x0, 0x1000  )
874   GFXDECODE_ENTRY( "gfx1", 0, sprite_8x8x8_layout,   0x0, 0x1000  ) // wrong
875   GFXDECODE_ENTRY( "gfx1", 0, sprite_16x16x8_layout, 0x0, 0x1000  ) // wrong
862876
863877   /* this seems to be backgrounds and tilemap gfx */
864   GFXDECODE_ENTRY( "gfx2", 0, rabbit_8x8x4_layout,   0x0, 0x1000  )
865   GFXDECODE_ENTRY( "gfx2", 0, rabbit_16x16x4_layout, 0x0, 0x1000  )
866   GFXDECODE_ENTRY( "gfx2", 0, rabbit_8x8x8_layout,   0x0, 0x1000  )
867   GFXDECODE_ENTRY( "gfx2", 0, rabbit_16x16x8_layout, 0x0, 0x1000  )
878   GFXDECODE_ENTRY( "gfx2", 0, _8x8x4_layout,   0x0, 0x1000  )
879   GFXDECODE_ENTRY( "gfx2", 0, _16x16x4_layout, 0x0, 0x1000  )
880   GFXDECODE_ENTRY( "gfx2", 0, _8x8x8_layout,   0x0, 0x1000  )
881   GFXDECODE_ENTRY( "gfx2", 0, _16x16x8_layout, 0x0, 0x1000  )
868882
869883GFXDECODE_END
870884
r243434r243435
875889
876890  */
877891
878INTERRUPT_GEN_MEMBER(rabbit_state::rabbit_vblank_interrupt)
892INTERRUPT_GEN_MEMBER(rabbit_state::vblank_interrupt)
879893{
880894   m_maincpu->set_input_line(m_vblirqlevel, HOLD_LINE);
881895}
r243434r243435
883897static MACHINE_CONFIG_START( rabbit, rabbit_state )
884898   MCFG_CPU_ADD("maincpu", M68EC020, XTAL_24MHz)
885899   MCFG_CPU_PROGRAM_MAP(rabbit_map)
886   MCFG_CPU_VBLANK_INT_DRIVER("screen", rabbit_state,  rabbit_vblank_interrupt)
900   MCFG_CPU_VBLANK_INT_DRIVER("screen", rabbit_state,  vblank_interrupt)
887901
888902   MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
889903
r243434r243435
896910   MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
897911//  MCFG_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*16, 64*16-1)
898912//  MCFG_SCREEN_VISIBLE_AREA(0*8, 20*16-1, 32*16, 48*16-1)
899   MCFG_SCREEN_UPDATE_DRIVER(rabbit_state, screen_update_rabbit)
913   MCFG_SCREEN_UPDATE_DRIVER(rabbit_state, screen_update)
900914   MCFG_SCREEN_PALETTE("palette")
901915
902916   MCFG_PALETTE_ADD_INIT_BLACK("palette", 0x4000)
r243434r243435
966980ROM_END
967981
968982
969GAME( 1997, rabbit,        0, rabbit,  rabbit, rabbit_state,  rabbit,  ROT0, "Aorn / Electronic Arts", "Rabbit (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) // somewhat playable
983GAME( 1997, rabbit,        0, rabbit,  rabbit, rabbit_state,  rabbit,  ROT0, "Aorn / Electronic Arts", "Rabbit (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // somewhat playable
trunk/src/mame/drivers/tmmjprd.c
r243434r243435
3939public:
4040   tmmjprd_state(const machine_config &mconfig, device_type type, const char *tag)
4141      : driver_device(mconfig, type, tag),
42         m_tilemap_regs(*this, "tilemap_regs"),
43         m_spriteregs(*this, "spriteregs"),
44         m_spriteram(*this, "spriteram") ,
4542      m_maincpu(*this, "maincpu"),
4643      m_eeprom(*this, "eeprom"),
4744      m_gfxdecode(*this, "gfxdecode"),
48      m_palette(*this, "palette") { }
45      m_palette(*this, "palette"),
46      m_tilemap_regs(*this, "tilemap_regs"),
47      m_spriteregs(*this, "spriteregs"),
48      m_spriteram(*this, "spriteram") { }
4949
50   required_device<cpu_device> m_maincpu;
51   required_device<eeprom_serial_93cxx_device> m_eeprom;
52   required_device<gfxdecode_device> m_gfxdecode;
53   required_device<palette_device> m_palette;
54
5055   required_shared_ptr_array<UINT32, 4> m_tilemap_regs;
5156   required_shared_ptr<UINT32> m_spriteregs;
57   required_shared_ptr<UINT32> m_spriteram;
58
5259   UINT32 *m_tilemap_ram[4];
53   required_shared_ptr<UINT32> m_spriteram;
5460   UINT8 m_mux_data;
5561   UINT8 m_system_in;
5662   double m_old_brt1;
5763   double m_old_brt2;
58   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap0_w);
59   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap1_w);
60   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap2_w);
61   DECLARE_WRITE32_MEMBER(tmmjprd_tilemap3_w);
62   DECLARE_READ32_MEMBER(tmmjprd_tilemap0_r);
63   DECLARE_READ32_MEMBER(tmmjprd_tilemap1_r);
64   DECLARE_READ32_MEMBER(tmmjprd_tilemap2_r);
65   DECLARE_READ32_MEMBER(tmmjprd_tilemap3_r);
64
65   DECLARE_WRITE32_MEMBER(tilemap0_w);
66   DECLARE_WRITE32_MEMBER(tilemap1_w);
67   DECLARE_WRITE32_MEMBER(tilemap2_w);
68   DECLARE_WRITE32_MEMBER(tilemap3_w);
69   DECLARE_READ32_MEMBER(tilemap0_r);
70   DECLARE_READ32_MEMBER(tilemap1_r);
71   DECLARE_READ32_MEMBER(tilemap2_r);
72   DECLARE_READ32_MEMBER(tilemap3_r);
6673   DECLARE_READ32_MEMBER(randomtmmjprds);
67   DECLARE_WRITE32_MEMBER(tmmjprd_blitter_w);
68   DECLARE_READ32_MEMBER(tmmjprd_mux_r);
69   DECLARE_WRITE32_MEMBER(tmmjprd_brt_1_w);
70   DECLARE_WRITE32_MEMBER(tmmjprd_brt_2_w);
71   DECLARE_WRITE32_MEMBER(tmmjprd_eeprom_write);
74   DECLARE_WRITE32_MEMBER(blitter_w);
75   DECLARE_READ32_MEMBER(mux_r);
76   DECLARE_WRITE32_MEMBER(brt_1_w);
77   DECLARE_WRITE32_MEMBER(brt_2_w);
78   DECLARE_WRITE32_MEMBER(eeprom_write);
79
80   virtual void machine_start();
7281   virtual void video_start();
73   UINT32 screen_update_tmmjprd_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
74   UINT32 screen_update_tmmjprd_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
75   TIMER_CALLBACK_MEMBER(tmmjprd_blit_done);
76   TIMER_DEVICE_CALLBACK_MEMBER(tmmjprd_scanline);
82
83   UINT32 screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
84   UINT32 screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
85
86   TIMER_CALLBACK_MEMBER(blit_done);
87   TIMER_DEVICE_CALLBACK_MEMBER(scanline);
88
7789   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int screen);
78   void ttmjprd_draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, int x,int y,int sizex,int sizey, UINT32 tiledata, UINT8* rom);
79   void ttmjprd_draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32*tileram, UINT32*tileregs, UINT8*rom );
80   void tmmjprd_do_blit();
81   required_device<cpu_device> m_maincpu;
82   required_device<eeprom_serial_93cxx_device> m_eeprom;
83   required_device<gfxdecode_device> m_gfxdecode;
84   required_device<palette_device> m_palette;
90   void draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, int x,int y,int sizex,int sizey, UINT32 tiledata, UINT8* rom);
91   void draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32*tileram, UINT32*tileregs, UINT8*rom );
92   void do_blit();
8593};
8694
8795
88WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap0_w)
96WRITE32_MEMBER(tmmjprd_state::tilemap0_w)
8997{
9098   COMBINE_DATA(&m_tilemap_ram[0][offset]);
9199}
92100
93101
94102
95WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap1_w)
103WRITE32_MEMBER(tmmjprd_state::tilemap1_w)
96104{
97105   COMBINE_DATA(&m_tilemap_ram[1][offset]);
98106}
99107
100WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap2_w)
108WRITE32_MEMBER(tmmjprd_state::tilemap2_w)
101109{
102110   COMBINE_DATA(&m_tilemap_ram[2][offset]);
103111}
104112
105WRITE32_MEMBER(tmmjprd_state::tmmjprd_tilemap3_w)
113WRITE32_MEMBER(tmmjprd_state::tilemap3_w)
106114{
107115   COMBINE_DATA(&m_tilemap_ram[3][offset]);
108116}
r243434r243435
183191   }
184192}
185193
186void tmmjprd_state::ttmjprd_draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, int x,int y,int sizex,int sizey, UINT32 tiledata, UINT8* rom)
194void tmmjprd_state::draw_tile(bitmap_ind16 &bitmap, const rectangle &cliprect, int x,int y,int sizex,int sizey, UINT32 tiledata, UINT8* rom)
187195{
188196   /* note, it's tile address _NOT_ tile number, 'sub-tile' access is possible, hence using the custom rendering */
189197   int tileaddr = (tiledata&0x000fffff)>>0;
r243434r243435
262270   }
263271}
264272
265void tmmjprd_state::ttmjprd_draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32*tileram, UINT32*tileregs, UINT8*rom )
273void tmmjprd_state::draw_tilemap(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32*tileram, UINT32*tileregs, UINT8*rom )
266274{
267275   int y,x;
268276   int count;
r243434r243435
296304      {
297305         UINT32 tiledata = tileram[count];
298306         // todo: handle wraparound
299         ttmjprd_draw_tile(bitmap,cliprect,(x*tile_sizex)-scrollx,(y*tile_sizey)-scrolly,tile_sizex,tile_sizey, tiledata, rom);
307         draw_tile(bitmap,cliprect,(x*tile_sizex)-scrollx,(y*tile_sizey)-scrolly,tile_sizex,tile_sizey, tiledata, rom);
300308         count++;
301309      }
302310   }
303311
304312}
305313
306UINT32 tmmjprd_state::screen_update_tmmjprd_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
314UINT32 tmmjprd_state::screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
307315{
308316   UINT8* gfxroms = memregion("gfx2")->base();
309317
310318   bitmap.fill(m_palette->black_pen(), cliprect);
311319
312   ttmjprd_draw_tilemap(bitmap, cliprect, m_tilemap_ram[3], m_tilemap_regs[3], gfxroms );
320   draw_tilemap(bitmap, cliprect, m_tilemap_ram[3], m_tilemap_regs[3], gfxroms );
313321   draw_sprites(bitmap,cliprect, 1);
314   ttmjprd_draw_tilemap(bitmap, cliprect, m_tilemap_ram[2], m_tilemap_regs[2], gfxroms );
322   draw_tilemap(bitmap, cliprect, m_tilemap_ram[2], m_tilemap_regs[2], gfxroms );
315323
316324   /*
317325   popmessage("%08x %08x %08x %08x %08x %08x",
r243434r243435
337345   return 0;
338346}
339347
340UINT32 tmmjprd_state::screen_update_tmmjprd_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
348UINT32 tmmjprd_state::screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
341349{
342350   UINT8* gfxroms = memregion("gfx2")->base();
343351
344352   bitmap.fill(m_palette->black_pen(), cliprect);
345353
346   ttmjprd_draw_tilemap(bitmap, cliprect, m_tilemap_ram[1], m_tilemap_regs[1], gfxroms );
354   draw_tilemap(bitmap, cliprect, m_tilemap_ram[1], m_tilemap_regs[1], gfxroms );
347355   draw_sprites(bitmap,cliprect, 0);
348   ttmjprd_draw_tilemap(bitmap, cliprect, m_tilemap_ram[0], m_tilemap_regs[0], gfxroms );
356   draw_tilemap(bitmap, cliprect, m_tilemap_ram[0], m_tilemap_regs[0], gfxroms );
349357
350358   return 0;
351359}
r243434r243435
358366   m_tilemap_ram[1] = auto_alloc_array_clear(machine(), UINT32, 0x8000);
359367   m_tilemap_ram[2] = auto_alloc_array_clear(machine(), UINT32, 0x8000);
360368   m_tilemap_ram[3] = auto_alloc_array_clear(machine(), UINT32, 0x8000);
369   
370   
371   save_pointer(NAME(m_tilemap_ram[0]), 0x8000);
372   save_pointer(NAME(m_tilemap_ram[1]), 0x8000);
373   save_pointer(NAME(m_tilemap_ram[2]), 0x8000);
374   save_pointer(NAME(m_tilemap_ram[3]), 0x8000);
375   
376   save_item(NAME(m_old_brt1));
377   save_item(NAME(m_old_brt2));
361378}
362379
363READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap0_r)
380READ32_MEMBER(tmmjprd_state::tilemap0_r)
364381{
365382   return m_tilemap_ram[0][offset];
366383}
367384
368READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap1_r)
385READ32_MEMBER(tmmjprd_state::tilemap1_r)
369386{
370387   return m_tilemap_ram[1][offset];
371388}
372389
373READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap2_r)
390READ32_MEMBER(tmmjprd_state::tilemap2_r)
374391{
375392   return m_tilemap_ram[2][offset];
376393}
377394
378READ32_MEMBER(tmmjprd_state::tmmjprd_tilemap3_r)
395READ32_MEMBER(tmmjprd_state::tilemap3_r)
379396{
380397   return m_tilemap_ram[3][offset];
381398}
r243434r243435
390407#define BLITLOG 0
391408
392409#if 0
393TIMER_CALLBACK_MEMBER(tmmjprd_state::tmmjprd_blit_done)
410TIMER_CALLBACK_MEMBER(tmmjprd_state::blit_done)
394411{
395412   m_maincpu->set_input_line(3, HOLD_LINE);
396413}
397414
398void tmmjprd_state::tmmjprd_do_blit()
415void tmmjprd_state::do_blit()
399416{
400417   UINT8 *blt_data = memregion("gfx1")->base();
401   int blt_source = (tmmjprd_blitterregs[0]&0x000fffff)>>0;
402   int blt_column = (tmmjprd_blitterregs[1]&0x00ff0000)>>16;
403   int blt_line   = (tmmjprd_blitterregs[1]&0x000000ff);
404   int blt_tilemp = (tmmjprd_blitterregs[2]&0x0000e000)>>13;
405   int blt_oddflg = (tmmjprd_blitterregs[2]&0x00000001)>>0;
418   int blt_source = (m_blitterregs[0]&0x000fffff)>>0;
419   int blt_column = (m_blitterregs[1]&0x00ff0000)>>16;
420   int blt_line   = (m_blitterregs[1]&0x000000ff);
421   int blt_tilemp = (m_blitterregs[2]&0x0000e000)>>13;
422   int blt_oddflg = (m_blitterregs[2]&0x00000001)>>0;
406423   int mask,shift;
407424
408425
409   if(BLITCMDLOG) osd_printf_debug("BLIT command %08x %08x %08x\n", tmmjprd_blitterregs[0], tmmjprd_blitterregs[1], tmmjprd_blitterregs[2]);
426   if(BLITCMDLOG) osd_printf_debug("BLIT command %08x %08x %08x\n", m_blitterregs[0], m_blitterregs[1], m_blitterregs[2]);
410427
411428   if (blt_oddflg&1)
412429   {
r243434r243435
439456            if (!blt_amount)
440457            {
441458               if(BLITLOG) osd_printf_debug("end of blit list\n");
442               machine().scheduler().timer_set(attotime::from_usec(500), timer_expired_delegate(FUNC(tmmjprd_state::tmmjprd_blit_done),this));
459               machine().scheduler().timer_set(attotime::from_usec(500), timer_expired_delegate(FUNC(tmmjprd_state::blit_done),this));
443460               return;
444461            }
445462
r243434r243435
450467               blt_source+=2;
451468               writeoffs=blt_oddflg+blt_column;
452469               m_tilemap_ram[blt_tilemp][writeoffs]=(m_tilemap_ram[blt_tilemp][writeoffs]&mask)|(blt_value<<shift);
453               tmmjprd_tilemap[blt_tilemp]->mark_tile_dirty(writeoffs);
470               m_tilemap[blt_tilemp]->mark_tile_dirty(writeoffs);
454471
455472               blt_column++;
456473               blt_column&=0x7f;
r243434r243435
467484            {
468485               writeoffs=blt_oddflg+blt_column;
469486               m_tilemap_ram[blt_tilemp][writeoffs]=(m_tilemap_ram[blt_tilemp][writeoffs]&mask)|(blt_value<<shift);
470               tmmjprd_tilemap[blt_tilemp]->mark_tile_dirty(writeoffs);
487               m_tilemap[blt_tilemp]->mark_tile_dirty(writeoffs);
471488               blt_column++;
472489               blt_column&=0x7f;
473490            }
r243434r243435
476493
477494         case 0x03: /* next line */
478495            if(BLITLOG) osd_printf_debug("blit: move to next line\n");
479            blt_column = (tmmjprd_blitterregs[1]&0x00ff0000)>>16; /* --CC---- */
496            blt_column = (m_blitterregs[1]&0x00ff0000)>>16; /* --CC---- */
480497            blt_oddflg+=128;
481498            break;
482499
r243434r243435
490507
491508
492509
493WRITE32_MEMBER(tmmjprd_state::tmmjprd_blitter_w)
510WRITE32_MEMBER(tmmjprd_state::blitter_w)
494511{
495   COMBINE_DATA(&tmmjprd_blitterregs[offset]);
512   COMBINE_DATA(&m_blitterregs[offset]);
496513
497514   if (offset == 0x0c/4)
498515   {
499      tmmjprd_do_blit(machine());
516      do_blit();
500517   }
501518}
502519#endif
503520
521void tmmjprd_state::machine_start()
522{
523   save_item(NAME(m_mux_data));
524   save_item(NAME(m_system_in));
525}
504526
505WRITE32_MEMBER(tmmjprd_state::tmmjprd_eeprom_write)
527WRITE32_MEMBER(tmmjprd_state::eeprom_write)
506528{
507529   // don't disturb the EEPROM if we're not actually writing to it
508530   // (in particular, data & 0x100 here with mask = ffff00ff looks to be the watchdog)
r243434r243435
522544   }
523545}
524546
525READ32_MEMBER(tmmjprd_state::tmmjprd_mux_r)
547READ32_MEMBER(tmmjprd_state::mux_r)
526548{
527549   m_system_in = ioport("SYSTEM")->read();
528550
r243434r243435
629651
630652/* notice that data & 0x4 is always cleared on brt_1 and set on brt_2.        *
631653 * My wild guess is that bits 0,1 and 2 controls what palette entries to dim. */
632WRITE32_MEMBER(tmmjprd_state::tmmjprd_brt_1_w)
654WRITE32_MEMBER(tmmjprd_state::brt_1_w)
633655{
634656   int i;
635657   double brt;
r243434r243435
647669   }
648670}
649671
650WRITE32_MEMBER(tmmjprd_state::tmmjprd_brt_2_w)
672WRITE32_MEMBER(tmmjprd_state::brt_2_w)
651673{
652674   int i;
653675   double brt;
r243434r243435
669691   AM_RANGE(0x000000, 0x1fffff) AM_ROM
670692   AM_RANGE(0x200010, 0x200013) AM_READ(randomtmmjprds) // gfx chip status?
671693   /* check these are used .. */
672//  AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_SHARE("tmmjprd_viewregs0")
694//  AM_RANGE(0x200010, 0x200013) AM_WRITEONLY AM_SHARE("viewregs0")
673695   AM_RANGE(0x200100, 0x200117) AM_WRITEONLY AM_SHARE("tilemap_regs.0" ) // tilemap regs1
674696   AM_RANGE(0x200120, 0x200137) AM_WRITEONLY AM_SHARE("tilemap_regs.1" ) // tilemap regs2
675697   AM_RANGE(0x200140, 0x200157) AM_WRITEONLY AM_SHARE("tilemap_regs.2" ) // tilemap regs3
676698   AM_RANGE(0x200160, 0x200177) AM_WRITEONLY AM_SHARE("tilemap_regs.3" ) // tilemap regs4
677699   AM_RANGE(0x200200, 0x20021b) AM_WRITEONLY AM_SHARE("spriteregs" ) // sprregs?
678//  AM_RANGE(0x200300, 0x200303) AM_WRITE(tmmjprd_rombank_w) // used during rom testing, rombank/area select + something else?
679   AM_RANGE(0x20040c, 0x20040f) AM_WRITE(tmmjprd_brt_1_w)
680   AM_RANGE(0x200410, 0x200413) AM_WRITE(tmmjprd_brt_2_w)
681//  AM_RANGE(0x200500, 0x200503) AM_WRITEONLY AM_SHARE("tmmjprd_viewregs7")
682//  AM_RANGE(0x200700, 0x20070f) AM_WRITE(tmmjprd_blitter_w) AM_SHARE("tmmjprd_blitterregs")
683//  AM_RANGE(0x200800, 0x20080f) AM_WRITEONLY AM_SHARE("tmmjprd_viewregs9") // never changes?
700//  AM_RANGE(0x200300, 0x200303) AM_WRITE(rombank_w) // used during rom testing, rombank/area select + something else?
701   AM_RANGE(0x20040c, 0x20040f) AM_WRITE(brt_1_w)
702   AM_RANGE(0x200410, 0x200413) AM_WRITE(brt_2_w)
703//  AM_RANGE(0x200500, 0x200503) AM_WRITEONLY AM_SHARE("viewregs7")
704//  AM_RANGE(0x200700, 0x20070f) AM_WRITE(blitter_w) AM_SHARE("blitterregs")
705//  AM_RANGE(0x200800, 0x20080f) AM_WRITEONLY AM_SHARE("viewregs9") // never changes?
684706   AM_RANGE(0x200900, 0x2009ff) AM_DEVREADWRITE16("i5000snd", i5000snd_device, read, write, 0xffffffff)
685707   /* hmm */
686//  AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_SHARE("tmmjprd_viewregs10")
708//  AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_SHARE("viewregs10")
687709   /* tilemaps */
688   AM_RANGE(0x280000, 0x283fff) AM_READWRITE(tmmjprd_tilemap0_r,tmmjprd_tilemap0_w)
689   AM_RANGE(0x284000, 0x287fff) AM_READWRITE(tmmjprd_tilemap1_r,tmmjprd_tilemap1_w)
690   AM_RANGE(0x288000, 0x28bfff) AM_READWRITE(tmmjprd_tilemap2_r,tmmjprd_tilemap2_w)
691   AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE(tmmjprd_tilemap3_r,tmmjprd_tilemap3_w)
710   AM_RANGE(0x280000, 0x283fff) AM_READWRITE(tilemap0_r,tilemap0_w)
711   AM_RANGE(0x284000, 0x287fff) AM_READWRITE(tilemap1_r,tilemap1_w)
712   AM_RANGE(0x288000, 0x28bfff) AM_READWRITE(tilemap2_r,tilemap2_w)
713   AM_RANGE(0x28c000, 0x28ffff) AM_READWRITE(tilemap3_r,tilemap3_w)
692714   /* ?? is palette ram shared with sprites in this case or just a different map */
693715   AM_RANGE(0x290000, 0x29bfff) AM_RAM AM_SHARE("spriteram")
694716   AM_RANGE(0x29c000, 0x29ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
695717
696   AM_RANGE(0x400000, 0x400003) AM_READ(tmmjprd_mux_r) AM_WRITE(tmmjprd_eeprom_write)
718   AM_RANGE(0x400000, 0x400003) AM_READ(mux_r) AM_WRITE(eeprom_write)
697719   AM_RANGE(0xf00000, 0xffffff) AM_RAM
698720ADDRESS_MAP_END
699721
700722
701723
702static const gfx_layout rabbit_sprite_16x16x8_layout =
724static const gfx_layout sprite_16x16x8_layout =
703725{
704726   16,16,
705727   RGN_FRAC(1,2),
r243434r243435
721743// gfx decoding is ugly.. 16*16 tiles can start at varying different offsets..
722744static GFXDECODE_START( tmmjprd )
723745   /* this seems to be sprites */
724//  GFXDECODE_ENTRY( "gfx1", 0, tmmjprd_sprite_8x8x4_layout,   0x0, 0x1000  )
725//  GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_16x16x4_layout, 0x0, 0x1000  )
726//  GFXDECODE_ENTRY( "gfx1", 0, tmmjprd_sprite_8x8x8_layout,   0x0, 0x1000  )
727   GFXDECODE_ENTRY( "gfx1", 0, rabbit_sprite_16x16x8_layout, 0x0, 0x10  )
746//  GFXDECODE_ENTRY( "gfx1", 0, sprite_8x8x4_layout,   0x0, 0x1000  )
747//  GFXDECODE_ENTRY( "gfx1", 0, sprite_16x16x4_layout, 0x0, 0x1000  )
748//  GFXDECODE_ENTRY( "gfx1", 0, sprite_8x8x8_layout,   0x0, 0x1000  )
749   GFXDECODE_ENTRY( "gfx1", 0, sprite_16x16x8_layout, 0x0, 0x10  )
728750GFXDECODE_END
729751
730752
731TIMER_DEVICE_CALLBACK_MEMBER(tmmjprd_state::tmmjprd_scanline)
753TIMER_DEVICE_CALLBACK_MEMBER(tmmjprd_state::scanline)
732754{
733755   int scanline = param;
734756
r243434r243435
743765static MACHINE_CONFIG_START( tmmjprd, tmmjprd_state )
744766   MCFG_CPU_ADD("maincpu",M68EC020,24000000) /* 24 MHz */
745767   MCFG_CPU_PROGRAM_MAP(tmmjprd_map)
746   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", tmmjprd_state, tmmjprd_scanline, "lscreen", 0, 1)
768   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", tmmjprd_state, scanline, "lscreen", 0, 1)
747769
748770   MCFG_EEPROM_SERIAL_93C46_ADD("eeprom")
749771   MCFG_EEPROM_SERIAL_ENABLE_STREAMING()
r243434r243435
768790   MCFG_SCREEN_SIZE(64*16, 64*16)
769791   MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
770792   //MCFG_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1)
771   MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_tmmjprd_left)
793   MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_left)
772794   MCFG_SCREEN_PALETTE("palette")
773795
774796   MCFG_SCREEN_ADD("rscreen", RASTER)
r243434r243435
777799   MCFG_SCREEN_SIZE(64*16, 64*16)
778800   MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 28*8-1)
779801   //MCFG_SCREEN_VISIBLE_AREA(0*8, 64*16-1, 0*8, 64*16-1)
780   MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_tmmjprd_right)
802   MCFG_SCREEN_UPDATE_DRIVER(tmmjprd_state, screen_update_right)
781803   MCFG_SCREEN_PALETTE("palette")
782804
783805
r243434r243435
863885ROM_END
864886
865887
866GAME( 1997, tmmjprd,       0, tmmjprd, tmmjprd, driver_device, 0, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Dear My Love", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
867GAME( 1998, tmpdoki, tmmjprd, tmpdoki, tmmjprd, driver_device, 0, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Doki Doki Hen", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) // missing gfx due to wrong roms?
888GAME( 1997, tmmjprd,       0, tmmjprd, tmmjprd, driver_device, 0, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Dear My Love", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
889GAME( 1998, tmpdoki, tmmjprd, tmpdoki, tmmjprd, driver_device, 0, ROT0, "Media / Sonnet", "Tokimeki Mahjong Paradise - Doki Doki Hen", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // missing gfx due to wrong roms?


Previous 199869 Revisions Next


© 1997-2024 The MAME Team