Previous 199869 Revisions Next

r35167 Saturday 21st February, 2015 at 07:25:49 UTC by Osso
tecmosys.c: added save state support (nw)
[src/mame/drivers]tecmosys.c
[src/mame/includes]tecmosys.h
[src/mame/machine]tecmosys.c
[src/mame/video]tecmosys.c

trunk/src/mame/drivers/tecmosys.c
r243678r243679
309309   AM_RANGE(0xa00000, 0xa00001) AM_WRITE(eeprom_w  )
310310   AM_RANGE(0xa80000, 0xa80005) AM_WRITEONLY AM_SHARE("a80000regs")    // a80000-3 scroll? a80004 inverted ? 3 : 0
311311   AM_RANGE(0xb00000, 0xb00005) AM_WRITEONLY AM_SHARE("b00000regs")    // b00000-3 scrool?, b00004 inverted ? 3 : 0
312   AM_RANGE(0xb80000, 0xb80001) AM_READWRITE(tecmosys_prot_status_r, tecmosys_prot_status_w)
312   AM_RANGE(0xb80000, 0xb80001) AM_READWRITE(prot_status_r, prot_status_w)
313313   AM_RANGE(0xc00000, 0xc00005) AM_WRITEONLY AM_SHARE("c00000regs")    // c00000-3 scroll? c00004 inverted ? 13 : 10
314314   AM_RANGE(0xc80000, 0xc80005) AM_WRITEONLY AM_SHARE("c80000regs")    // c80000-3 scrool? c80004 inverted ? 3 : 0
315315   AM_RANGE(0xd00000, 0xd00001) AM_READ_PORT("P1")
316316   AM_RANGE(0xd00002, 0xd00003) AM_READ_PORT("P2")
317317   AM_RANGE(0xd80000, 0xd80001) AM_READ(eeprom_r)
318318   AM_RANGE(0xe00000, 0xe00001) AM_WRITE(sound_w )
319   AM_RANGE(0xe80000, 0xe80001) AM_WRITE(tecmosys_prot_data_w)
319   AM_RANGE(0xe80000, 0xe80001) AM_WRITE(prot_data_w)
320320   AM_RANGE(0xf00000, 0xf00001) AM_READ(sound_r)
321   AM_RANGE(0xf80000, 0xf80001) AM_READ(tecmosys_prot_data_r)
321   AM_RANGE(0xf80000, 0xf80001) AM_READ(prot_data_r)
322322ADDRESS_MAP_END
323323
324324
325WRITE8_MEMBER(tecmosys_state::tecmosys_z80_bank_w)
325WRITE8_MEMBER(tecmosys_state::z80_bank_w)
326326{
327327   membank("bank1")->set_entry(data);
328328}
329329
330WRITE8_MEMBER(tecmosys_state::tecmosys_oki_bank_w)
330WRITE8_MEMBER(tecmosys_state::oki_bank_w)
331331{
332332   UINT8 upperbank = (data & 0x30) >> 4;
333333   UINT8 lowerbank = (data & 0x03) >> 0;
r243678r243679
347347   ADDRESS_MAP_GLOBAL_MASK(0xff)
348348   AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ymf", ymf262_device, read, write)
349349   AM_RANGE(0x10, 0x10) AM_DEVREADWRITE("oki", okim6295_device, read, write)
350   AM_RANGE(0x20, 0x20) AM_WRITE(tecmosys_oki_bank_w)
351   AM_RANGE(0x30, 0x30) AM_WRITE(tecmosys_z80_bank_w)
350   AM_RANGE(0x20, 0x20) AM_WRITE(oki_bank_w)
351   AM_RANGE(0x30, 0x30) AM_WRITE(z80_bank_w)
352352   AM_RANGE(0x40, 0x40) AM_READ(soundlatch_byte_r)
353353   AM_RANGE(0x50, 0x50) AM_WRITE(soundlatch2_byte_w)
354354   AM_RANGE(0x60, 0x61) AM_DEVREADWRITE("ymz", ymz280b_device, read, write)
r243678r243679
441441void tecmosys_state::machine_start()
442442{
443443   membank("bank1")->configure_entries(0, 16, memregion("audiocpu")->base(), 0x4000);
444   
445   save_item(NAME(m_device_read_ptr));
446   save_item(NAME(m_device_status));
447   save_item(NAME(m_device_value));
444448}
445449
446450static MACHINE_CONFIG_START( deroon, tecmosys_state )
r243678r243679
465469   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(3000))
466470   MCFG_SCREEN_SIZE(64*8, 64*8)
467471   MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
468   MCFG_SCREEN_UPDATE_DRIVER(tecmosys_state, screen_update_tecmosys)
472   MCFG_SCREEN_UPDATE_DRIVER(tecmosys_state, screen_update)
469473
470474   MCFG_PALETTE_ADD("palette", 0x4000+0x800)
471475   MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
r243678r243679
620624   ROM_LOAD( "ae500w07.ad1", 0x080000, 0x080000, CRC(3734f92c) SHA1(048555b5aa89eaf983305c439ba08d32b4a1bb80) )
621625ROM_END
622626
623void tecmosys_state::tecmosys_descramble()
627void tecmosys_state::descramble()
624628{
625629   UINT8 *gfxsrc  = memregion( "gfx1" )->base();
626630   size_t srcsize = memregion( "gfx1" )->bytes();
r243678r243679
644648
645649DRIVER_INIT_MEMBER(tecmosys_state,deroon)
646650{
647   tecmosys_descramble();
648   tecmosys_prot_init(0); // machine/tecmosys.c
651   descramble();
652   prot_init(0); // machine/tecmosys.c
649653}
650654
651655DRIVER_INIT_MEMBER(tecmosys_state,tkdensho)
652656{
653   tecmosys_descramble();
654   tecmosys_prot_init(1);
657   descramble();
658   prot_init(1);
655659}
656660
657661DRIVER_INIT_MEMBER(tecmosys_state,tkdensha)
658662{
659   tecmosys_descramble();
660   tecmosys_prot_init(2);
663   descramble();
664   prot_init(2);
661665}
662666
663GAME( 1995, deroon,           0, deroon, deroon, tecmosys_state, deroon,     ROT0, "Tecmo", "Deroon DeroDero", 0 )
664GAME( 1996, tkdensho,         0, deroon, deroon, tecmosys_state, tkdensho,   ROT0, "Tecmo", "Toukidenshou - Angel Eyes (VER. 960614)", 0 )
665GAME( 1996, tkdenshoa, tkdensho, deroon, deroon, tecmosys_state, tkdensha,   ROT0, "Tecmo", "Toukidenshou - Angel Eyes (VER. 960427)", 0 )
667GAME( 1995, deroon,           0, deroon, deroon, tecmosys_state, deroon,     ROT0, "Tecmo", "Deroon DeroDero", GAME_SUPPORTS_SAVE )
668GAME( 1996, tkdensho,         0, deroon, deroon, tecmosys_state, tkdensho,   ROT0, "Tecmo", "Toukidenshou - Angel Eyes (VER. 960614)", GAME_SUPPORTS_SAVE )
669GAME( 1996, tkdenshoa, tkdensho, deroon, deroon, tecmosys_state, tkdensha,   ROT0, "Tecmo", "Toukidenshou - Angel Eyes (VER. 960427)", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/tecmosys.h
r243678r243679
1010public:
1111   tecmosys_state(const machine_config &mconfig, device_type type, const char *tag)
1212      : driver_device(mconfig, type, tag),
13      m_maincpu(*this, "maincpu"),
14      m_audiocpu(*this, "audiocpu"),
15      m_eeprom(*this, "eeprom"),
16      m_gfxdecode(*this, "gfxdecode"),
17      m_screen(*this, "screen"),
18      m_palette(*this, "palette"),
1319      m_spriteram(*this, "spriteram"),
1420      m_tilemap_paletteram16(*this, "tmap_palette"),
1521      m_bg2tilemap_ram(*this, "bg2tilemap_ram"),
r243678r243679
2329      m_b00000regs(*this, "b00000regs"),
2430      m_c00000regs(*this, "c00000regs"),
2531      m_c80000regs(*this, "c80000regs"),
26      m_880000regs(*this, "880000regs"),
27      m_maincpu(*this, "maincpu"),
28      m_audiocpu(*this, "audiocpu"),
29      m_eeprom(*this, "eeprom"),
30      m_gfxdecode(*this, "gfxdecode"),
31      m_screen(*this, "screen"),
32      m_palette(*this, "palette") { }
32      m_880000regs(*this, "880000regs") { }
3333
34   required_device<cpu_device> m_maincpu;
35   required_device<cpu_device> m_audiocpu;
36   required_device<eeprom_serial_93cxx_device> m_eeprom;
37   required_device<gfxdecode_device> m_gfxdecode;
38   required_device<screen_device> m_screen;
39   required_device<palette_device> m_palette;
40
3441   required_shared_ptr<UINT16> m_spriteram;
3542   required_shared_ptr<UINT16> m_tilemap_paletteram16;
3643   required_shared_ptr<UINT16> m_bg2tilemap_ram;
r243678r243679
4552   required_shared_ptr<UINT16> m_c00000regs;
4653   required_shared_ptr<UINT16> m_c80000regs;
4754   required_shared_ptr<UINT16> m_880000regs;
55   
4856   int m_spritelist;
4957   bitmap_ind16 m_sprite_bitmap;
5058   bitmap_ind16 m_tmp_tilemap_composebitmap;
r243678r243679
5765   UINT8 m_device_status;
5866   const struct prot_data* m_device_data;
5967   UINT8 m_device_value;
68   
6069   DECLARE_READ16_MEMBER(sound_r);
6170   DECLARE_WRITE16_MEMBER(sound_w);
6271   DECLARE_WRITE16_MEMBER(unk880000_w);
6372   DECLARE_READ16_MEMBER(unk880000_r);
64   DECLARE_WRITE8_MEMBER(tecmosys_z80_bank_w);
65   DECLARE_WRITE8_MEMBER(tecmosys_oki_bank_w);
66   DECLARE_READ16_MEMBER(tecmosys_prot_status_r);
67   DECLARE_WRITE16_MEMBER(tecmosys_prot_status_w);
68   DECLARE_READ16_MEMBER(tecmosys_prot_data_r);
69   DECLARE_WRITE16_MEMBER(tecmosys_prot_data_w);
73   DECLARE_WRITE8_MEMBER(z80_bank_w);
74   DECLARE_WRITE8_MEMBER(oki_bank_w);
75   DECLARE_READ16_MEMBER(prot_status_r);
76   DECLARE_WRITE16_MEMBER(prot_status_w);
77   DECLARE_READ16_MEMBER(prot_data_r);
78   DECLARE_WRITE16_MEMBER(prot_data_w);
7079   DECLARE_WRITE16_MEMBER(bg0_tilemap_w);
7180   DECLARE_WRITE16_MEMBER(bg1_tilemap_w);
7281   DECLARE_WRITE16_MEMBER(bg2_tilemap_w);
r243678r243679
7786   DECLARE_WRITE16_MEMBER(bg2_tilemap_lineram_w);
7887   DECLARE_READ16_MEMBER(eeprom_r);
7988   DECLARE_WRITE16_MEMBER(eeprom_w);
89   DECLARE_WRITE_LINE_MEMBER(sound_irq);
90   
8091   DECLARE_DRIVER_INIT(tkdensha);
8192   DECLARE_DRIVER_INIT(deroon);
8293   DECLARE_DRIVER_INIT(tkdensho);
94   virtual void machine_start();
95   virtual void video_start();
96   
8397   TILE_GET_INFO_MEMBER(get_bg0tile_info);
8498   TILE_GET_INFO_MEMBER(get_bg1tile_info);
8599   TILE_GET_INFO_MEMBER(get_bg2tile_info);
86100   TILE_GET_INFO_MEMBER(get_fg_tile_info);
87   virtual void machine_start();
88   virtual void video_start();
89   UINT32 screen_update_tecmosys(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
90   void tecmosys_prot_init(int which);
91   void tecmosys_prot_reset();
92   inline void set_color_555_tecmo(pen_t color, int rshift, int gshift, int bshift, UINT16 data);
93   void tecmosys_render_sprites_to_bitmap(bitmap_rgb32 &bitmap, UINT16 extrax, UINT16 extray );
94   void tecmosys_tilemap_copy_to_compose(UINT16 pri);
95   void tecmosys_do_final_mix(bitmap_rgb32 &bitmap);
96   void tecmosys_descramble();
97   DECLARE_WRITE_LINE_MEMBER(sound_irq);
98   required_device<cpu_device> m_maincpu;
99   required_device<cpu_device> m_audiocpu;
100   required_device<eeprom_serial_93cxx_device> m_eeprom;
101   required_device<gfxdecode_device> m_gfxdecode;
102   required_device<screen_device> m_screen;
103   required_device<palette_device> m_palette;
101
102   UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
103   void prot_init(int which);
104   void prot_reset();
105   inline void set_color_555(pen_t color, int rshift, int gshift, int bshift, UINT16 data);
106   void render_sprites_to_bitmap(bitmap_rgb32 &bitmap, UINT16 extrax, UINT16 extray );
107   void tilemap_copy_to_compose(UINT16 pri);
108   void do_final_mix(bitmap_rgb32 &bitmap);
109   void descramble();
104110};
trunk/src/mame/machine/tecmosys.c
r243678r243679
103103};
104104
105105
106void tecmosys_state::tecmosys_prot_reset()
106void tecmosys_state::prot_reset()
107107{
108108   m_device_read_ptr = 0;
109109   m_device_status = DS_IDLE;
110110   m_device_value = 0xff;
111111}
112112
113void tecmosys_state::tecmosys_prot_init(int which)
113void tecmosys_state::prot_init(int which)
114114{
115115   switch (which)
116116   {
r243678r243679
119119   case 2: m_device_data = &tkdensha_data; break;
120120   }
121121
122   machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(tecmosys_state::tecmosys_prot_reset),this));
122   machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(tecmosys_state::prot_reset),this));
123123}
124124
125READ16_MEMBER(tecmosys_state::tecmosys_prot_status_r)
125READ16_MEMBER(tecmosys_state::prot_status_r)
126126{
127127   if (ACCESSING_BITS_8_15)
128128   {
r243678r243679
134134   return 0xc0; // simulation is always ready
135135}
136136
137WRITE16_MEMBER(tecmosys_state::tecmosys_prot_status_w)
137WRITE16_MEMBER(tecmosys_state::prot_status_w)
138138{
139139   // deroon clears the status in one place.
140140}
141141
142142
143READ16_MEMBER(tecmosys_state::tecmosys_prot_data_r)
143READ16_MEMBER(tecmosys_state::prot_data_r)
144144{
145145   // prot appears to be read-ready for two consecutive reads
146146   // but returns 0xff for subsequent reads.
r243678r243679
151151}
152152
153153
154WRITE16_MEMBER(tecmosys_state::tecmosys_prot_data_w)
154WRITE16_MEMBER(tecmosys_state::prot_data_w)
155155{
156156   // Only LSB
157157   data >>= 8;
trunk/src/mame/video/tecmosys.c
r243678r243679
6666}
6767
6868
69inline void tecmosys_state::set_color_555_tecmo(pen_t color, int rshift, int gshift, int bshift, UINT16 data)
69inline void tecmosys_state::set_color_555(pen_t color, int rshift, int gshift, int bshift, UINT16 data)
7070{
7171   m_palette->set_pen_color(color, pal5bit(data >> rshift), pal5bit(data >> gshift), pal5bit(data >> bshift));
7272}
r243678r243679
7474WRITE16_MEMBER(tecmosys_state::tilemap_paletteram16_xGGGGGRRRRRBBBBB_word_w)
7575{
7676   COMBINE_DATA(&m_tilemap_paletteram16[offset]);
77   set_color_555_tecmo(offset+0x4000, 5, 10, 0, m_tilemap_paletteram16[offset]);
77   set_color_555(offset+0x4000, 5, 10, 0, m_tilemap_paletteram16[offset]);
7878}
7979
8080WRITE16_MEMBER(tecmosys_state::bg0_tilemap_lineram_w)
r243678r243679
9797
9898
9999
100void tecmosys_state::tecmosys_render_sprites_to_bitmap(bitmap_rgb32 &bitmap, UINT16 extrax, UINT16 extray )
100void tecmosys_state::render_sprites_to_bitmap(bitmap_rgb32 &bitmap, UINT16 extrax, UINT16 extray )
101101{
102102   UINT8 *gfxsrc    = memregion       ( "gfx1" )->base();
103103   int i;
r243678r243679
188188   }
189189}
190190
191void tecmosys_state::tecmosys_tilemap_copy_to_compose(UINT16 pri)
191void tecmosys_state::tilemap_copy_to_compose(UINT16 pri)
192192{
193193   int y,x;
194194   UINT16 *srcptr;
r243678r243679
205205   }
206206}
207207
208void tecmosys_state::tecmosys_do_final_mix(bitmap_rgb32 &bitmap)
208void tecmosys_state::do_final_mix(bitmap_rgb32 &bitmap)
209209{
210210   const pen_t *paldata = m_palette->pens();
211211   int y,x;
r243678r243679
275275}
276276
277277
278UINT32 tecmosys_state::screen_update_tecmosys(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
278UINT32 tecmosys_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
279279{
280280   bitmap.fill(m_palette->pen(0x4000), cliprect);
281281
r243678r243679
293293
294294   m_tmp_tilemap_renderbitmap.fill(0, cliprect);
295295   m_bg0tilemap->draw(screen, m_tmp_tilemap_renderbitmap, cliprect, 0,0);
296   tecmosys_tilemap_copy_to_compose(0x0000);
296   tilemap_copy_to_compose(0x0000);
297297
298298   m_tmp_tilemap_renderbitmap.fill(0, cliprect);
299299   m_bg1tilemap->draw(screen, m_tmp_tilemap_renderbitmap, cliprect, 0,0);
300   tecmosys_tilemap_copy_to_compose(0x4000);
300   tilemap_copy_to_compose(0x4000);
301301
302302   m_tmp_tilemap_renderbitmap.fill(0, cliprect);
303303   m_bg2tilemap->draw(screen, m_tmp_tilemap_renderbitmap, cliprect, 0,0);
304   tecmosys_tilemap_copy_to_compose(0x8000);
304   tilemap_copy_to_compose(0x8000);
305305
306306   m_tmp_tilemap_renderbitmap.fill(0, cliprect);
307307   m_txt_tilemap->draw(screen, m_tmp_tilemap_renderbitmap, cliprect, 0,0);
308   tecmosys_tilemap_copy_to_compose(0xc000);
308   tilemap_copy_to_compose(0xc000);
309309
310310
311   tecmosys_do_final_mix(bitmap);
311   do_final_mix(bitmap);
312312
313313   // prepare sprites for NEXT frame - causes 1 frame palette errors, but prevents sprite lag in tkdensho, which is correct?
314   tecmosys_render_sprites_to_bitmap(bitmap, m_880000regs[0x0], m_880000regs[0x1]);
314   render_sprites_to_bitmap(bitmap, m_880000regs[0x0], m_880000regs[0x1]);
315315
316316   return 0;
317317}
r243678r243679
339339
340340   m_bg2tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(tecmosys_state::get_bg2tile_info),this),TILEMAP_SCAN_ROWS,16,16,32,32);
341341   m_bg2tilemap->set_transparent_pen(0);
342   
343   save_item(NAME(m_spritelist));
342344}


Previous 199869 Revisions Next


© 1997-2024 The MAME Team