Previous 199869 Revisions Next

r24079 Friday 5th July, 2013 at 02:47:27 UTC by Tafoid
Modernized some others devices contained in konicdev.c: k007342, k007420, k052109, k051960 and k05324x.  [Osso]
[src/mame/drivers]88games.c ajax.c aliens.c asterix.c battlnts.c bladestl.c blockhl.c bottom9.c chqflag.c combatsc.c contra.c crimfght.c fastlane.c flkatck.c gbusters.c gradius3.c hcastle.c labyrunr.c lethal.c mainevt.c parodius.c rockrage.c rollerg.c simpsons.c spy.c surpratk.c thunderx.c tmnt.c ultraman.c vendetta.c xmen.c
[src/mame/includes]battlnts.h bladestl.h combatsc.h contra.h fastlane.h flkatck.h hcastle.h rockrage.h
[src/mame/machine]ajax.c simpsons.c
[src/mame/video]88games.c ajax.c aliens.c asterix.c battlnts.c bladestl.c blockhl.c bottom9.c chqflag.c combatsc.c contra.c crimfght.c fastlane.c flkatck.c gbusters.c gradius3.c hcastle.c konicdev.c konicdev.h labyrunr.c lethal.c mainevt.c parodius.c rockrage.c rollerg.c simpsons.c spy.c surpratk.c thunderx.c tmnt.c ultraman.c vendetta.c xmen.c

trunk/src/mame/drivers/ultraman.c
r24078r24079
4949   AM_RANGE(0x207f80, 0x207f9f) AM_DEVWRITE8_LEGACY("k051316_1", k051316_ctrl_w, 0x00ff)   /* K051316 #0 registers */
5050   AM_RANGE(0x207fa0, 0x207fbf) AM_DEVWRITE8_LEGACY("k051316_2", k051316_ctrl_w, 0x00ff)   /* K051316 #1 registers */
5151   AM_RANGE(0x207fc0, 0x207fdf) AM_DEVWRITE8_LEGACY("k051316_3", k051316_ctrl_w, 0x00ff)   /* K051316 #2 registers */
52   AM_RANGE(0x304000, 0x30400f) AM_DEVREADWRITE8_LEGACY("k051960", k051937_r, k051937_w, 0x00ff)       /* Sprite control */
53   AM_RANGE(0x304800, 0x304fff) AM_DEVREADWRITE8_LEGACY("k051960", k051960_r, k051960_w, 0x00ff)       /* Sprite RAM */
52   AM_RANGE(0x304000, 0x30400f) AM_DEVREADWRITE8("k051960", k051960_device, k051937_r, k051937_w, 0x00ff)       /* Sprite control */
53   AM_RANGE(0x304800, 0x304fff) AM_DEVREADWRITE8("k051960", k051960_device, k051960_r, k051960_w, 0x00ff)       /* Sprite RAM */
5454ADDRESS_MAP_END
5555
5656static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, ultraman_state )
trunk/src/mame/drivers/rollerg.c
r24078r24079
9494   AM_RANGE(0x0061, 0x0061) AM_READ(pip_r)             /* ????? */
9595   AM_RANGE(0x0100, 0x010f) AM_DEVREADWRITE("k053252", k053252_device, read, write)      /* 053252? */
9696   AM_RANGE(0x0200, 0x020f) AM_DEVWRITE_LEGACY("k051316", k051316_ctrl_w)
97   AM_RANGE(0x0300, 0x030f) AM_DEVREADWRITE_LEGACY("k053244", k053244_r, k053244_w)
97   AM_RANGE(0x0300, 0x030f) AM_DEVREADWRITE("k053244", k05324x_device, k053244_r, k053244_w)
9898   AM_RANGE(0x0800, 0x0fff) AM_READ(rollerg_k051316_r) AM_DEVWRITE_LEGACY("k051316", k051316_w)
99   AM_RANGE(0x1000, 0x17ff) AM_DEVREADWRITE_LEGACY("k053244", k053245_r, k053245_w)
99   AM_RANGE(0x1000, 0x17ff) AM_DEVREADWRITE("k053244", k05324x_device, k053245_r, k053245_w)
100100   AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_be_w) AM_SHARE("paletteram")
101101   AM_RANGE(0x2000, 0x3aff) AM_RAM
102102   AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
trunk/src/mame/drivers/contra.c
r24078r24079
2020#include "cpu/m6809/hd6309.h"
2121#include "cpu/m6809/m6809.h"
2222#include "sound/2151intf.h"
23#include "video/konicdev.h"
2423#include "includes/konamipt.h"
2524#include "includes/contra.h"
2625
r24078r24079
2827INTERRUPT_GEN_MEMBER(contra_state::contra_interrupt)
2928{
3029   address_space &space = generic_space();
31   if (k007121_ctrlram_r(m_k007121_1, space, 7) & 0x02)
30   if (m_k007121_1->ctrlram_r(space, 7) & 0x02)
3231      device.execute().set_input_line(HD6309_IRQ_LINE, HOLD_LINE);
3332}
3433
trunk/src/mame/drivers/tmnt.c
r24078r24079
8484   /* some games have the A12 line not connected, so the chip spans */
8585   /* twice the memory range, with mirroring */
8686   offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
87   return k052109_word_r(m_k052109, space, offset, mem_mask);
87   return m_k052109->word_r(space, offset, mem_mask);
8888}
8989
9090WRITE16_MEMBER(tmnt_state::k052109_word_noA12_w)
r24078r24079
9292   /* some games have the A12 line not connected, so the chip spans */
9393   /* twice the memory range, with mirroring */
9494   offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
95   k052109_word_w(m_k052109, space, offset, data, mem_mask);
95   m_k052109->word_w(space, offset, data, mem_mask);
9696}
9797
9898WRITE16_MEMBER(tmnt_state::punkshot_k052109_word_w)
r24078r24079
100100   /* it seems that a word write is supposed to affect only the MSB. The */
101101   /* "ROUND 1" text in punkshtj goes lost otherwise. */
102102   if (ACCESSING_BITS_8_15)
103      k052109_w(m_k052109, space, offset, (data >> 8) & 0xff);
103      m_k052109->write(space, offset, (data >> 8) & 0xff);
104104   else if (ACCESSING_BITS_0_7)
105      k052109_w(m_k052109, space, offset + 0x2000, data & 0xff);
105      m_k052109->write(space, offset + 0x2000, data & 0xff);
106106}
107107
108108WRITE16_MEMBER(tmnt_state::punkshot_k052109_word_noA12_w)
r24078r24079
124124   else
125125   {
126126      offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3);
127      return k053245_word_r(m_k053245, space, offset, mem_mask);
127      return m_k053245->k053245_word_r(space, offset, mem_mask);
128128   }
129129}
130130
r24078r24079
135135   if (!(offset & 0x0031))
136136   {
137137      offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3);
138      k053245_word_w(m_k053245, space, offset, data, mem_mask);
138      m_k053245->k053245_word_w(space, offset, data, mem_mask);
139139   }
140140}
141141
r24078r24079
143143{
144144   offset &= ~1;   /* handle mirror address */
145145
146   return k053244_r(m_k053245, space, offset + 1) | (k053244_r(m_k053245, space, offset) << 8);
146   return m_k053245->k053244_r(space, offset + 1) | (m_k053245->k053244_r(space, offset) << 8);
147147}
148148
149149WRITE16_MEMBER(tmnt_state::k053244_word_noA1_w)
r24078r24079
151151   offset &= ~1;   /* handle mirror address */
152152
153153   if (ACCESSING_BITS_8_15)
154      k053244_w(m_k053245, space, offset, (data >> 8) & 0xff);
154      m_k053245->k053244_w(space, offset, (data >> 8) & 0xff);
155155   if (ACCESSING_BITS_0_7)
156      k053244_w(m_k053245, space, offset + 1, data & 0xff);
156      m_k053245->k053244_w(space, offset + 1, data & 0xff);
157157}
158158
159159INTERRUPT_GEN_MEMBER(tmnt_state::cuebrick_interrupt)
r24078r24079
164164
165165INTERRUPT_GEN_MEMBER(tmnt_state::punkshot_interrupt)
166166{
167   if (k052109_is_irq_enabled(m_k052109))
167   if (m_k052109->is_irq_enabled())
168168      irq4_line_hold(device);
169169}
170170
171171INTERRUPT_GEN_MEMBER(tmnt_state::lgtnfght_interrupt)
172172{
173   if (k052109_is_irq_enabled(m_k052109))
173   if (m_k052109->is_irq_enabled())
174174      irq5_line_hold(device);
175175}
176176
r24078r24079
363363         data = -space.read_word(0x105818);
364364         data = ((data / 8 - 4) & 0x1f) * 0x40;
365365         data += ((space.read_word(0x105cb0) +
366                  256 * k052109_r(m_k052109, space, 0x1a01) + k052109_r(m_k052109, space, 0x1a00) - 6) / 8 + 12) & 0x3f;
366                  256 * m_k052109->read(space, 0x1a01) + m_k052109->read(space, 0x1a00) - 6) / 8 + 12) & 0x3f;
367367         return data;
368368
369369      default:
r24078r24079
389389         {
390390            if ((space.read_word(0x180006 + 128 * i) >> 8) == logical_pri)
391391            {
392               k053245_word_w(m_k053245, space, 8 * i, hardware_pri, 0x00ff);
392               m_k053245->k053245_word_w(space, 8 * i, hardware_pri, 0x00ff);
393393               hardware_pri++;
394394            }
395395         }
r24078r24079
507507      m_last = data & 0x20;
508508
509509      /* bit 6 = enable char ROM reading through the video RAM */
510      k052109_set_rmrd_line(m_k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
510      m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
511511   }
512512}
513513
r24078r24079
558558   AM_RANGE(0x0b0400, 0x0b0401) AM_WRITE(cuebrick_nvbank_w)
559559   AM_RANGE(0x0c0000, 0x0c0003) AM_DEVREADWRITE8("ymsnd", ym2151_device, read, write, 0xff00)
560560   AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w)
561   AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE_LEGACY("k051960", k051937_word_r, k051937_word_w)
562   AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE_LEGACY("k051960", k051960_word_r, k051960_word_w)
561   AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051960_device, k051937_word_r, k051937_word_w)
562   AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_device, k051960_word_r, k051960_word_w)
563563ADDRESS_MAP_END
564564
565565
r24078r24079
580580#endif
581581   AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w)
582582//  AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
583   AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE_LEGACY("k051960", k051937_word_r, k051937_word_w)
584   AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE_LEGACY("k051960", k051960_word_r, k051960_word_w)
583   AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051960_device, k051937_word_r, k051937_word_w)
584   AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_device, k051960_word_r, k051960_word_w)
585585ADDRESS_MAP_END
586586
587587
r24078r24079
601601   AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(tmnt_priority_w)
602602   AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w)
603603//  AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
604   AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE_LEGACY("k051960", k051937_word_r, k051937_word_w)
605   AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE_LEGACY("k051960", k051960_word_r, k051960_word_w)
604   AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051960_device, k051937_word_r, k051937_word_w)
605   AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_device, k051960_word_r, k051960_word_w)
606606ADDRESS_MAP_END
607607
608608
r24078r24079
620620   AM_RANGE(0x0a0060, 0x0a007f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w)
621621   AM_RANGE(0x0a0080, 0x0a0081) AM_WRITE(watchdog_reset16_w)
622622   AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, punkshot_k052109_word_noA12_w)
623   AM_RANGE(0x110000, 0x110007) AM_DEVREADWRITE_LEGACY("k051960", k051937_word_r, k051937_word_w)
624   AM_RANGE(0x110400, 0x1107ff) AM_DEVREADWRITE_LEGACY("k051960", k051960_word_r, k051960_word_w)
623   AM_RANGE(0x110000, 0x110007) AM_DEVREADWRITE("k051960", k051960_device, k051937_word_r, k051937_word_w)
624   AM_RANGE(0x110400, 0x1107ff) AM_DEVREADWRITE("k051960", k051960_device, k051960_word_r, k051960_word_w)
625625   AM_RANGE(0xfffffc, 0xffffff) AM_READ(punkshot_kludge_r)
626626ADDRESS_MAP_END
627627
r24078r24079
655655
656656static ADDRESS_MAP_START( blswhstl_main_map, AS_PROGRAM, 16, tmnt_state )
657657   AM_RANGE(0x000000, 0x07ffff) AM_ROM
658   AM_RANGE(0x180000, 0x183fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_word_r, k052109_word_w)
658   AM_RANGE(0x180000, 0x183fff) AM_DEVREADWRITE("k052109", k052109_device, word_r, word_w)
659659   AM_RANGE(0x204000, 0x207fff) AM_RAM /* main RAM */
660660   AM_RANGE(0x300000, 0x303fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_SHARE("spriteram")
661661   AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
r24078r24079
689689      {
690690         if (k053251_get_tmap_dirty(m_k053251, 2 + i))
691691         {
692            k052109_tilemap_mark_dirty(m_k052109, i);
692            m_k052109->tilemap_mark_dirty(i);
693693            k053251_set_tmap_dirty(m_k053251, 2 + i, 0);
694694         }
695695      }
r24078r24079
703703   AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
704704   AM_RANGE(0x10c000, 0x10cfff) AM_DEVREADWRITE_LEGACY("k053936", k053936_linectrl_r, k053936_linectrl_w)  /* 053936? */
705705   AM_RANGE(0x110000, 0x11001f) AM_WRITE(k053244_word_noA1_w)              /* duplicate! */
706   AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE_LEGACY("k053245", k053244_lsb_r, k053244_lsb_w)    /* duplicate! */
706   AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE("k053245", k05324x_device, k053244_lsb_r, k053244_lsb_w)    /* duplicate! */
707707   AM_RANGE(0x118000, 0x11801f) AM_DEVWRITE_LEGACY("k053936", k053936_ctrl_w)
708708   AM_RANGE(0x11c000, 0x11c01f) AM_DEVWRITE_LEGACY("k053251", k053251_msb_w)
709709   AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(k053251_glfgreat_w)
r24078r24079
727727   AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
728728   AM_RANGE(0x10c000, 0x10cfff) AM_DEVREADWRITE_LEGACY("k053936", k053936_linectrl_r, k053936_linectrl_w)
729729   AM_RANGE(0x110000, 0x11001f) AM_WRITE(k053244_word_noA1_w)              /* duplicate! */
730   AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE_LEGACY("k053245", k053244_lsb_r, k053244_lsb_w)    /* duplicate! */
730   AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE("k053245", k05324x_device, k053244_lsb_r, k053244_lsb_w)    /* duplicate! */
731731   AM_RANGE(0x118000, 0x11801f) AM_DEVWRITE_LEGACY("k053936", k053936_ctrl_w)
732732   AM_RANGE(0x11c000, 0x11c01f) AM_DEVWRITE_LEGACY("k053251", k053251_msb_w)
733733   AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(k053251_glfgreat_w)
r24078r24079
765765      if (!(offs & 0x0031))
766766      {
767767         offs = ((offs & 0x000e) >> 1) | ((offs & 0x1fc0) >> 3);
768         k053245_word_w(m_k053245, space, offs, data, 0xffff);
768         m_k053245->k053245_word_w(space, offs, data, 0xffff);
769769      }
770770   }
771771   else if (addr >= 0x104000 / 2 && addr <= 0x107fff / 2)
r24078r24079
10011001   AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff)
10021002   AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w)
10031003   AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w)
1004   AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_word_r, k052109_word_w)
1004   AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_device, word_r, word_w)
10051005ADDRESS_MAP_END
10061006
10071007
r24078r24079
10271027   AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("k053260", k053260_device, k053260_w, 0x00ff)
10281028   AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w)
10291029   AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE_LEGACY("k053251", k053251_lsb_w)
1030   AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_word_r, k052109_word_w)
1030   AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_device, word_r, word_w)
10311031ADDRESS_MAP_END
10321032
10331033
r24078r24079
10411041   AM_RANGE(0x1c0300, 0x1c0301) AM_WRITE(ssriders_1c0300_w)
10421042   AM_RANGE(0x1c0400, 0x1c0401) AM_WRITENOP
10431043   AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w)
1044   AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_word_r, k052109_word_w)
1044   AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_device, word_r, word_w)
10451045   AM_RANGE(0x604020, 0x60402f) AM_WRITENOP    /* written every frame */
10461046   AM_RANGE(0x604200, 0x604201) AM_WRITENOP    /* watchdog */
10471047   AM_RANGE(0x6119e2, 0x6119e3) AM_WRITENOP    /* written a lot in some test menus (PC=18204) */
r24078r24079
10701070   AM_RANGE(0x500202, 0x500203) AM_READ(thndrx2_eeprom_r)
10711071   AM_RANGE(0x500300, 0x500301) AM_WRITENOP    /* watchdog reset? irq enable? */
10721072   AM_RANGE(0x600000, 0x607fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w)
1073   AM_RANGE(0x700000, 0x700007) AM_DEVREADWRITE_LEGACY("k051960", k051937_word_r, k051937_word_w)
1074   AM_RANGE(0x700400, 0x7007ff) AM_DEVREADWRITE_LEGACY("k051960", k051960_word_r, k051960_word_w)
1073   AM_RANGE(0x700000, 0x700007) AM_DEVREADWRITE("k051960", k051960_device, k051937_word_r, k051937_word_w)
1074   AM_RANGE(0x700400, 0x7007ff) AM_DEVREADWRITE("k051960", k051960_device, k051960_word_r, k051960_word_w)
10751075ADDRESS_MAP_END
10761076
10771077
trunk/src/mame/drivers/hcastle.c
r24078r24079
1111#include "cpu/z80/z80.h"
1212#include "sound/3812intf.h"
1313#include "sound/k051649.h"
14#include "video/konicdev.h"
1514#include "includes/konamipt.h"
1615#include "includes/hcastle.h"
1716
trunk/src/mame/drivers/aliens.c
r24078r24079
2020
2121INTERRUPT_GEN_MEMBER(aliens_state::aliens_interrupt)
2222{
23   if (k051960_is_irq_enabled(m_k051960))
23   if (m_k051960->k051960_is_irq_enabled())
2424      device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
2525}
2626
r24078r24079
5050   m_palette_selected = data & 0x20;
5151
5252   /* bit 6 = enable char ROM reading through the video RAM */
53   k052109_set_rmrd_line(m_k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
53   m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
5454
5555   /* other bits unknown */
5656#if 0
r24078r24079
8282
8383READ8_MEMBER(aliens_state::k052109_051960_r)
8484{
85   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
85   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
8686   {
8787      if (offset >= 0x3800 && offset < 0x3808)
88         return k051937_r(m_k051960, space, offset - 0x3800);
88         return m_k051960->k051937_r(space, offset - 0x3800);
8989      else if (offset < 0x3c00)
90         return k052109_r(m_k052109, space, offset);
90         return m_k052109->read(space, offset);
9191      else
92         return k051960_r(m_k051960, space, offset - 0x3c00);
92         return m_k051960->k051960_r(space, offset - 0x3c00);
9393   }
9494   else
95      return k052109_r(m_k052109, space, offset);
95      return m_k052109->read(space, offset);
9696}
9797
9898WRITE8_MEMBER(aliens_state::k052109_051960_w)
9999{
100100   if (offset >= 0x3800 && offset < 0x3808)
101      k051937_w(m_k051960, space, offset - 0x3800, data);
101      m_k051960->k051937_w(space, offset - 0x3800, data);
102102   else if (offset < 0x3c00)
103      k052109_w(m_k052109, space, offset, data);
103      m_k052109->write(space, offset, data);
104104   else
105      k051960_w(m_k051960, space, offset - 0x3c00, data);
105      m_k051960->k051960_w(space, offset - 0x3c00, data);
106106}
107107
108108static ADDRESS_MAP_START( aliens_map, AS_PROGRAM, 8, aliens_state )
trunk/src/mame/drivers/flkatck.c
r24078r24079
1414#include "cpu/z80/z80.h"
1515#include "cpu/m6809/hd6309.h"
1616#include "sound/2151intf.h"
17#include "video/konicdev.h"
1817#include "includes/konamipt.h"
1918#include "includes/flkatck.h"
2019
trunk/src/mame/drivers/battlnts.c
r24078r24079
1414#include "cpu/m6809/hd6309.h"
1515#include "cpu/z80/z80.h"
1616#include "sound/3812intf.h"
17#include "video/konicdev.h"
1817#include "includes/konamipt.h"
1918#include "includes/battlnts.h"
2019
r24078r24079
2726
2827INTERRUPT_GEN_MEMBER(battlnts_state::battlnts_interrupt)
2928{
30   if (k007342_is_int_enabled(m_k007342))
29   if (m_k007342->is_int_enabled())
3130      device.execute().set_input_line(HD6309_IRQ_LINE, HOLD_LINE);
3231}
3332
r24078r24079
5655 *************************************/
5756
5857static ADDRESS_MAP_START( battlnts_map, AS_PROGRAM, 8, battlnts_state )
59   AM_RANGE(0x0000, 0x1fff) AM_DEVREADWRITE_LEGACY("k007342", k007342_r, k007342_w)    /* Color RAM + Video RAM */
60   AM_RANGE(0x2000, 0x21ff) AM_DEVREADWRITE_LEGACY("k007420", k007420_r, k007420_w)    /* Sprite RAM */
61   AM_RANGE(0x2200, 0x23ff) AM_DEVREADWRITE_LEGACY("k007342", k007342_scroll_r, k007342_scroll_w)      /* Scroll RAM */
58   AM_RANGE(0x0000, 0x1fff) AM_DEVREADWRITE("k007342", k007342_device, read, write)    /* Color RAM + Video RAM */
59   AM_RANGE(0x2000, 0x21ff) AM_DEVREADWRITE("k007420", k007420_device, read, write)    /* Sprite RAM */
60   AM_RANGE(0x2200, 0x23ff) AM_DEVREADWRITE("k007342", k007342_device, scroll_r, scroll_w)      /* Scroll RAM */
6261   AM_RANGE(0x2400, 0x24ff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_be_w) AM_SHARE("paletteram")/* palette */
63   AM_RANGE(0x2600, 0x2607) AM_DEVWRITE_LEGACY("k007342", k007342_vreg_w)          /* Video Registers */
62   AM_RANGE(0x2600, 0x2607) AM_DEVWRITE("k007342", k007342_device, vreg_w)          /* Video Registers */
6463   AM_RANGE(0x2e00, 0x2e00) AM_READ_PORT("DSW1")
6564   AM_RANGE(0x2e01, 0x2e01) AM_READ_PORT("P2")
6665   AM_RANGE(0x2e02, 0x2e02) AM_READ_PORT("P1")
trunk/src/mame/drivers/88games.c
r24078r24079
2424
2525INTERRUPT_GEN_MEMBER(_88games_state::k88games_interrupt)
2626{
27   if (k052109_is_irq_enabled(m_k052109))
27   if (m_k052109->is_irq_enabled())
2828      irq0_line_hold(device);
2929}
3030
r24078r24079
8888/* special handlers to combine 052109 & 051960 */
8989READ8_MEMBER(_88games_state::k052109_051960_r)
9090{
91   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
91   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
9292   {
9393      if (offset >= 0x3800 && offset < 0x3808)
94         return k051937_r(m_k051960, space, offset - 0x3800);
94         return m_k051960->k051937_r(space, offset - 0x3800);
9595      else if (offset < 0x3c00)
96         return k052109_r(m_k052109, space, offset);
96         return m_k052109->read(space, offset);
9797      else
98         return k051960_r(m_k051960, space, offset - 0x3c00);
98         return m_k051960->k051960_r(space, offset - 0x3c00);
9999   }
100100   else
101      return k052109_r(m_k052109, space, offset);
101      return m_k052109->read(space, offset);
102102}
103103
104104WRITE8_MEMBER(_88games_state::k052109_051960_w)
105105{
106106   if (offset >= 0x3800 && offset < 0x3808)
107      k051937_w(m_k051960, space, offset - 0x3800, data);
107      m_k051960->k051937_w(space, offset - 0x3800, data);
108108   else if (offset < 0x3c00)
109      k052109_w(m_k052109, space, offset, data);
109      m_k052109->write(space, offset, data);
110110   else
111      k051960_w(m_k051960, space, offset - 0x3c00, data);
111      m_k051960->k051960_w(space, offset - 0x3c00, data);
112112}
113113
114114/*************************************
r24078r24079
288288   state->m_videobank = lines & 0x10;
289289
290290   /* bit 5 = enable char ROM reading through the video RAM */
291   k052109_set_rmrd_line(state->m_k052109, (lines & 0x20) ? ASSERT_LINE : CLEAR_LINE);
291   state->m_k052109->set_rmrd_line((lines & 0x20) ? ASSERT_LINE : CLEAR_LINE);
292292
293293   /* bit 6 is unknown, 1 most of the time */
294294
trunk/src/mame/drivers/simpsons.c
r24078r24079
100100   AM_RANGE(0x1fc8, 0x1fc9) AM_DEVREAD_LEGACY("k053246", k053246_r)
101101   AM_RANGE(0x1fca, 0x1fca) AM_READ(watchdog_reset_r)
102102   AM_RANGE(0x2000, 0x3fff) AM_RAMBANK("bank4")
103   AM_RANGE(0x0000, 0x3fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)
103   AM_RANGE(0x0000, 0x3fff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
104104   AM_RANGE(0x4000, 0x5fff) AM_RAM
105105   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1")
106106   AM_RANGE(0x8000, 0xffff) AM_ROM
r24078r24079
271271      timer_set(attotime::from_usec(30), TIMER_DMAEND);
272272   }
273273
274   if (k052109_is_irq_enabled(m_k052109))
274   if (m_k052109->is_irq_enabled())
275275      device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
276276}
277277
trunk/src/mame/drivers/xmen.c
r24078r24079
6060      /* bit 8 = enable sprite ROM reading */
6161      k053246_set_objcha_line(m_k053246, (data & 0x0100) ? ASSERT_LINE : CLEAR_LINE);
6262      /* bit 9 = enable char ROM reading through the video RAM */
63      k052109_set_rmrd_line(m_k052109, (data & 0x0200) ? ASSERT_LINE : CLEAR_LINE);
63      m_k052109->set_rmrd_line((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE);
6464   }
6565}
6666
r24078r24079
122122   AM_RANGE(0x10a00c, 0x10a00d) AM_DEVREAD_LEGACY("k053246", k053246_word_r)
123123   AM_RANGE(0x110000, 0x113fff) AM_RAM     /* main RAM */
124124   AM_RANGE(0x18fa00, 0x18fa01) AM_WRITE(xmen_18fa00_w)
125   AM_RANGE(0x18c000, 0x197fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_lsb_r, k052109_lsb_w)
125   AM_RANGE(0x18c000, 0x197fff) AM_DEVREADWRITE("k052109", k052109_device, lsb_r, lsb_w)
126126ADDRESS_MAP_END
127127
128128static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, xmen_state )
r24078r24079
158158   AM_RANGE(0x10a00c, 0x10a00d) AM_DEVREAD_LEGACY("k053246", k053246_word_r) /* sprites */
159159   AM_RANGE(0x110000, 0x113fff) AM_RAM     /* main RAM */
160160   AM_RANGE(0x18fa00, 0x18fa01) AM_WRITE(xmen_18fa00_w)
161/*  AM_RANGE(0x18c000, 0x197fff) AM_DEVWRITE_LEGACY("k052109", k052109_lsb_w) AM_SHARE("tilemapleft") */
161/*  AM_RANGE(0x18c000, 0x197fff) AM_DEVWRITE("k052109", k052109_device, lsb_w) AM_SHARE("tilemapleft") */
162162   AM_RANGE(0x18c000, 0x197fff) AM_RAM AM_SHARE("tilemapleft") /* left tilemap (p1,p2,p3 counters) */
163163/*
164164    AM_RANGE(0x1ac000, 0x1af7ff) AM_READONLY
trunk/src/mame/drivers/mainevt.c
r24078r24079
3232
3333INTERRUPT_GEN_MEMBER(mainevt_state::mainevt_interrupt)
3434{
35   if (k052109_is_irq_enabled(m_k052109))
35   if (m_k052109->is_irq_enabled())
3636      irq0_line_hold(device);
3737}
3838
r24078r24079
5757   //palette_selected = data & 0x20;
5858
5959   /* bit 6 = enable char ROM reading through the video RAM */
60   k052109_set_rmrd_line(m_k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
60   m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
6161
6262   /* bit 7 = NINITSET (unknown) */
6363
r24078r24079
126126
127127READ8_MEMBER(mainevt_state::k052109_051960_r)
128128{
129   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
129   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
130130   {
131131      if (offset >= 0x3800 && offset < 0x3808)
132         return k051937_r(m_k051960, space, offset - 0x3800);
132         return m_k051960->k051937_r(space, offset - 0x3800);
133133      else if (offset < 0x3c00)
134         return k052109_r(m_k052109, space, offset);
134         return m_k052109->read(space, offset);
135135      else
136         return k051960_r(m_k051960, space, offset - 0x3c00);
136         return m_k051960->k051960_r(space, offset - 0x3c00);
137137   }
138138   else
139      return k052109_r(m_k052109, space, offset);
139      return m_k052109->read(space, offset);
140140}
141141
142142WRITE8_MEMBER(mainevt_state::k052109_051960_w)
143143{
144144   if (offset >= 0x3800 && offset < 0x3808)
145      k051937_w(m_k051960, space, offset - 0x3800, data);
145      m_k051960->k051937_w(space, offset - 0x3800, data);
146146   else if (offset < 0x3c00)
147      k052109_w(m_k052109, space, offset, data);
147      m_k052109->write(space, offset, data);
148148   else
149      k051960_w(m_k051960, space, offset - 0x3c00, data);
149      m_k051960->k051960_w(space, offset - 0x3c00, data);
150150}
151151
152152
trunk/src/mame/drivers/ajax.c
r24078r24079
2626
2727static ADDRESS_MAP_START( ajax_main_map, AS_PROGRAM, 8, ajax_state )
2828   AM_RANGE(0x0000, 0x01c0) AM_READWRITE(ajax_ls138_f10_r, ajax_ls138_f10_w)   /* bankswitch + sound command + FIRQ command */
29   AM_RANGE(0x0800, 0x0807) AM_DEVREADWRITE_LEGACY("k051960", k051937_r, k051937_w)                    /* sprite control registers */
30   AM_RANGE(0x0c00, 0x0fff) AM_DEVREADWRITE_LEGACY("k051960", k051960_r, k051960_w)                    /* sprite RAM 2128SL at J7 */
29   AM_RANGE(0x0800, 0x0807) AM_DEVREADWRITE("k051960", k051960_device, k051937_r, k051937_w)                    /* sprite control registers */
30   AM_RANGE(0x0c00, 0x0fff) AM_DEVREADWRITE("k051960", k051960_device, k051960_r, k051960_w)                    /* sprite RAM 2128SL at J7 */
3131   AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_byte_be_w) AM_SHARE("paletteram")/* palette */
3232   AM_RANGE(0x2000, 0x3fff) AM_RAM AM_SHARE("share1")                                  /* shared RAM with the 6809 */
3333   AM_RANGE(0x4000, 0x5fff) AM_RAM                                             /* RAM 6264L at K10 */
r24078r24079
4141   AM_RANGE(0x1000, 0x17ff) AM_DEVREAD_LEGACY("k051316", k051316_rom_r)                /* 051316 (ROM test) */
4242   AM_RANGE(0x1800, 0x1800) AM_WRITE(ajax_bankswitch_2_w)          /* bankswitch control */
4343   AM_RANGE(0x2000, 0x3fff) AM_RAM AM_SHARE("share1")                      /* shared RAM with the 052001 */
44   AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)        /* video RAM + color RAM + video registers */
44   AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE("k052109", k052109_device, read, write)        /* video RAM + color RAM + video registers */
4545   AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1")                            /* banked ROM */
4646   AM_RANGE(0xa000, 0xffff) AM_ROM                                 /* ROM I16 */
4747ADDRESS_MAP_END
trunk/src/mame/drivers/bladestl.c
r24078r24079
3131#include "cpu/m6809/hd6309.h"
3232#include "sound/2203intf.h"
3333#include "sound/upd7759.h"
34#include "video/konicdev.h"
3534#include "includes/konamipt.h"
3635#include "includes/bladestl.h"
3736
r24078r24079
4039{
4140   int scanline = param;
4241
43   if(scanline == 240 && k007342_is_int_enabled(m_k007342)) // vblank-out irq
42   if(scanline == 240 && m_k007342->is_int_enabled()) // vblank-out irq
4443      m_maincpu->set_input_line(HD6309_FIRQ_LINE, HOLD_LINE);
4544
4645   if(scanline == 0) // vblank-in or timer irq
r24078r24079
116115 *************************************/
117116
118117static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, bladestl_state )
119   AM_RANGE(0x0000, 0x1fff) AM_DEVREADWRITE_LEGACY("k007342", k007342_r, k007342_w)    /* Color RAM + Video RAM */
120   AM_RANGE(0x2000, 0x21ff) AM_DEVREADWRITE_LEGACY("k007420", k007420_r, k007420_w)    /* Sprite RAM */
121   AM_RANGE(0x2200, 0x23ff) AM_DEVREADWRITE_LEGACY("k007342", k007342_scroll_r, k007342_scroll_w)  /* Scroll RAM */
118   AM_RANGE(0x0000, 0x1fff) AM_DEVREADWRITE("k007342", k007342_device, read, write)    /* Color RAM + Video RAM */
119   AM_RANGE(0x2000, 0x21ff) AM_DEVREADWRITE("k007420", k007420_device, read, write)    /* Sprite RAM */
120   AM_RANGE(0x2200, 0x23ff) AM_DEVREADWRITE("k007342", k007342_device, scroll_r, scroll_w)  /* Scroll RAM */
122121   AM_RANGE(0x2400, 0x245f) AM_RAM AM_SHARE("paletteram")      /* palette */
123   AM_RANGE(0x2600, 0x2607) AM_DEVWRITE_LEGACY("k007342", k007342_vreg_w)          /* Video Registers */
122   AM_RANGE(0x2600, 0x2607) AM_DEVWRITE("k007342", k007342_device, vreg_w)          /* Video Registers */
124123   AM_RANGE(0x2e00, 0x2e00) AM_READ_PORT("COINSW")             /* DIPSW #3, coinsw, startsw */
125124   AM_RANGE(0x2e01, 0x2e01) AM_READ_PORT("P1")                 /* 1P controls */
126125   AM_RANGE(0x2e02, 0x2e02) AM_READ_PORT("P2")                 /* 2P controls */
trunk/src/mame/drivers/asterix.c
r24078r24079
173173static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, asterix_state )
174174   AM_RANGE(0x000000, 0x0fffff) AM_ROM
175175   AM_RANGE(0x100000, 0x107fff) AM_RAM
176   AM_RANGE(0x180000, 0x1807ff) AM_DEVREADWRITE_LEGACY("k053244", k053245_word_r, k053245_word_w)
176   AM_RANGE(0x180000, 0x1807ff) AM_DEVREADWRITE("k053244", k05324x_device, k053245_word_r, k053245_word_w)
177177   AM_RANGE(0x180800, 0x180fff) AM_RAM                             // extra RAM, or mirror for the above?
178   AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE_LEGACY("k053244", k053244_word_r, k053244_word_w)
178   AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("k053244", k05324x_device, k053244_word_r, k053244_word_w)
179179   AM_RANGE(0x280000, 0x280fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram")
180   AM_RANGE(0x300000, 0x30001f) AM_DEVREADWRITE_LEGACY("k053244", k053244_lsb_r, k053244_lsb_w)
180   AM_RANGE(0x300000, 0x30001f) AM_DEVREADWRITE("k053244", k05324x_device, k053244_lsb_r, k053244_lsb_w)
181181   AM_RANGE(0x380000, 0x380001) AM_READ_PORT("IN0")
182182   AM_RANGE(0x380002, 0x380003) AM_READ_PORT("IN1")
183183   AM_RANGE(0x380100, 0x380101) AM_WRITE(control2_w)
trunk/src/mame/drivers/gradius3.c
r24078r24079
2828
2929READ16_MEMBER(gradius3_state::k052109_halfword_r)
3030{
31   return k052109_r(m_k052109, space, offset);
31   return m_k052109->read(space, offset);
3232}
3333
3434WRITE16_MEMBER(gradius3_state::k052109_halfword_w)
3535{
3636   if (ACCESSING_BITS_0_7)
37      k052109_w(m_k052109, space, offset, data & 0xff);
37      m_k052109->write(space, offset, data & 0xff);
3838
3939   /* is this a bug in the game or something else? */
4040   if (!ACCESSING_BITS_0_7)
41      k052109_w(m_k052109, space, offset, (data >> 8) & 0xff);
41      m_k052109->write(space, offset, (data >> 8) & 0xff);
4242//      logerror("%06x half %04x = %04x\n",space.device().safe_pc(),offset,data);
4343}
4444
4545READ16_MEMBER(gradius3_state::k051937_halfword_r)
4646{
47   return k051937_r(m_k051960, space, offset);
47   return m_k051960->k051937_r(space, offset);
4848}
4949
5050WRITE16_MEMBER(gradius3_state::k051937_halfword_w)
5151{
5252   if (ACCESSING_BITS_0_7)
53      k051937_w(m_k051960, space, offset, data & 0xff);
53      m_k051960->k051937_w(space, offset, data & 0xff);
5454}
5555
5656READ16_MEMBER(gradius3_state::k051960_halfword_r)
5757{
58   return k051960_r(m_k051960, space, offset);
58   return m_k051960->k051960_r(space, offset);
5959}
6060
6161WRITE16_MEMBER(gradius3_state::k051960_halfword_w)
6262{
6363   if (ACCESSING_BITS_0_7)
64      k051960_w(m_k051960, space, offset, data & 0xff);
64      m_k051960->k051960_w(space, offset, data & 0xff);
6565}
6666
6767WRITE16_MEMBER(gradius3_state::cpuA_ctrl_w)
trunk/src/mame/drivers/parodius.c
r24078r24079
2121
2222INTERRUPT_GEN_MEMBER(parodius_state::parodius_interrupt)
2323{
24   if (k052109_is_irq_enabled(m_k052109))
24   if (m_k052109->is_irq_enabled())
2525      device.execute().set_input_line(0, HOLD_LINE);
2626}
2727
r24078r24079
5454READ8_MEMBER(parodius_state::parodius_052109_053245_r)
5555{
5656   if (m_videobank & 0x02)
57      return k053245_r(m_k053245, space, offset);
57      return m_k053245->k053245_r(space, offset);
5858   else
59      return k052109_r(m_k052109, space, offset);
59      return m_k052109->read(space, offset);
6060}
6161
6262WRITE8_MEMBER(parodius_state::parodius_052109_053245_w)
6363{
6464   if (m_videobank & 0x02)
65      k053245_w(m_k053245, space, offset, data);
65      m_k053245->k053245_w(space, offset, data);
6666   else
67      k052109_w(m_k052109, space, offset, data);
67      m_k052109->write(space, offset, data);
6868}
6969
7070WRITE8_MEMBER(parodius_state::parodius_videobank_w)
r24078r24079
8888   coin_counter_w(machine(), 1, data & 0x02);
8989
9090   /* bit 3 = enable char ROM reading through the video RAM */
91   k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
91   m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
9292
9393   /* other bits unknown */
9494}
r24078r24079
141141   AM_RANGE(0x3f8e, 0x3f8e) AM_READ_PORT("DSW3")
142142   AM_RANGE(0x3f8f, 0x3f8f) AM_READ_PORT("DSW1")
143143   AM_RANGE(0x3f90, 0x3f90) AM_READ_PORT("DSW2")
144   AM_RANGE(0x3fa0, 0x3faf) AM_DEVREADWRITE_LEGACY("k053245", k053244_r, k053244_w)
144   AM_RANGE(0x3fa0, 0x3faf) AM_DEVREADWRITE("k053245", k05324x_device, k053244_r, k053244_w)
145145   AM_RANGE(0x3fb0, 0x3fbf) AM_DEVWRITE_LEGACY("k053251", k053251_w)
146146   AM_RANGE(0x3fc0, 0x3fc0) AM_READ(watchdog_reset_r) AM_WRITE(parodius_3fc0_w)
147147   AM_RANGE(0x3fc4, 0x3fc4) AM_WRITE(parodius_videobank_w)
148148   AM_RANGE(0x3fc8, 0x3fc8) AM_WRITE(parodius_sh_irqtrigger_w)
149149   AM_RANGE(0x3fcc, 0x3fcd) AM_READ(parodius_sound_r) AM_DEVWRITE("k053260", k053260_device, k053260_w) /* K053260 */
150150   AM_RANGE(0x2000, 0x27ff) AM_READWRITE(parodius_052109_053245_r, parodius_052109_053245_w)
151   AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)
151   AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
152152   AM_RANGE(0x6000, 0x9fff) AM_ROMBANK("bank1")            /* banked ROM */
153153   AM_RANGE(0xa000, 0xffff) AM_ROM                 /* ROM */
154154ADDRESS_MAP_END
trunk/src/mame/drivers/combatsc.c
r24078r24079
123123#include "cpu/m6809/hd6309.h"
124124#include "cpu/z80/z80.h"
125125#include "sound/2203intf.h"
126#include "sound/upd7759.h"
127#include "sound/msm5205.h"
128#include "video/konicdev.h"
129126#include "includes/combatsc.h"
130127
131128
trunk/src/mame/drivers/rockrage.c
r24078r24079
5252#include "cpu/m6809/hd6309.h"
5353#include "sound/2151intf.h"
5454#include "sound/vlm5030.h"
55#include "video/konicdev.h"
5655#include "includes/rockrage.h"
5756#include "includes/konamipt.h"
5857
5958
6059INTERRUPT_GEN_MEMBER(rockrage_state::rockrage_interrupt)
6160{
62   if (k007342_is_int_enabled(m_k007342))
61   if (m_k007342->is_int_enabled())
6362      device.execute().set_input_line(HD6309_IRQ_LINE, HOLD_LINE);
6463}
6564
r24078r24079
9695}
9796
9897static ADDRESS_MAP_START( rockrage_map, AS_PROGRAM, 8, rockrage_state )
99   AM_RANGE(0x0000, 0x1fff) AM_DEVREADWRITE_LEGACY("k007342", k007342_r, k007342_w)                    /* Color RAM + Video RAM */
100   AM_RANGE(0x2000, 0x21ff) AM_DEVREADWRITE_LEGACY("k007420", k007420_r, k007420_w)                    /* Sprite RAM */
101   AM_RANGE(0x2200, 0x23ff) AM_DEVREADWRITE_LEGACY("k007342", k007342_scroll_r, k007342_scroll_w)  /* Scroll RAM */
98   AM_RANGE(0x0000, 0x1fff) AM_DEVREADWRITE("k007342", k007342_device, read, write)                    /* Color RAM + Video RAM */
99   AM_RANGE(0x2000, 0x21ff) AM_DEVREADWRITE("k007420", k007420_device, read, write)                    /* Sprite RAM */
100   AM_RANGE(0x2200, 0x23ff) AM_DEVREADWRITE("k007342", k007342_device, scroll_r, scroll_w)  /* Scroll RAM */
102101   AM_RANGE(0x2400, 0x247f) AM_RAM AM_SHARE("paletteram")                      /* Palette */
103   AM_RANGE(0x2600, 0x2607) AM_DEVWRITE_LEGACY("k007342", k007342_vreg_w)                          /* Video Registers */
102   AM_RANGE(0x2600, 0x2607) AM_DEVWRITE("k007342", k007342_device, vreg_w)                          /* Video Registers */
104103   AM_RANGE(0x2e00, 0x2e00) AM_READ_PORT("SYSTEM")
105104   AM_RANGE(0x2e01, 0x2e01) AM_READ_PORT("P1")
106105   AM_RANGE(0x2e02, 0x2e02) AM_READ_PORT("P2")
trunk/src/mame/drivers/chqflag.c
r24078r24079
2929{
3030   int scanline = param;
3131
32   if(scanline == 240 && k051960_is_irq_enabled(m_k051960)) // vblank irq
32   if(scanline == 240 && m_k051960->k051960_is_irq_enabled()) // vblank irq
3333      m_maincpu->set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
34   else if(((scanline % 32) == 0) && (k051960_is_nmi_enabled(m_k051960))) // timer irq
34   else if(((scanline % 32) == 0) && (m_k051960->k051960_is_nmi_enabled())) // timer irq
3535      m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
3636}
3737
r24078r24079
139139   AM_RANGE(0x0000, 0x0fff) AM_RAM                                             /* RAM */
140140   AM_RANGE(0x1000, 0x17ff) AM_RAMBANK("bank1")                                /* banked RAM (RAM/051316 (chip 1)) */
141141   AM_RANGE(0x1800, 0x1fff) AM_RAMBANK("bank2")                                /* palette + RAM */
142   AM_RANGE(0x2000, 0x2007) AM_DEVREADWRITE_LEGACY("k051960", k051937_r, k051937_w)                    /* Sprite control registers */
143   AM_RANGE(0x2400, 0x27ff) AM_DEVREADWRITE_LEGACY("k051960", k051960_r, k051960_w)                    /* Sprite RAM */
142   AM_RANGE(0x2000, 0x2007) AM_DEVREADWRITE("k051960", k051960_device, k051937_r, k051937_w)                    /* Sprite control registers */
143   AM_RANGE(0x2400, 0x27ff) AM_DEVREADWRITE("k051960", k051960_device, k051960_r, k051960_w)                    /* Sprite RAM */
144144   AM_RANGE(0x2800, 0x2fff) AM_READ_BANK("bank3") AM_DEVWRITE_LEGACY("k051316_2", k051316_w)       /* 051316 zoom/rotation (chip 2) */
145145   AM_RANGE(0x3000, 0x3000) AM_WRITE(soundlatch_byte_w)                                /* sound code # */
146146   AM_RANGE(0x3001, 0x3001) AM_WRITE(chqflag_sh_irqtrigger_w)                  /* cause interrupt on audio CPU */
trunk/src/mame/drivers/fastlane.c
r24078r24079
1111
1212#include "emu.h"
1313#include "cpu/m6809/hd6309.h"
14#include "video/konicdev.h"
1514#include "includes/konamipt.h"
1615#include "includes/fastlane.h"
1716
r24078r24079
2019   int scanline = param;
2120
2221   address_space &space = generic_space();
23   if(scanline == 240 && k007121_ctrlram_r(m_k007121, space, 7) & 0x02) // vblank irq
22   if(scanline == 240 && m_k007121->ctrlram_r(space, 7) & 0x02) // vblank irq
2423      m_maincpu->set_input_line(HD6309_IRQ_LINE, HOLD_LINE);
25   else if(((scanline % 32) == 0) && k007121_ctrlram_r(m_k007121, space, 7) & 0x01) // timer irq
24   else if(((scanline % 32) == 0) && m_k007121->ctrlram_r(space, 7) & 0x01) // timer irq
2625      m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
2726}
2827
r24078r24079
3029WRITE8_MEMBER(fastlane_state::k007121_registers_w)
3130{
3231   if (offset < 8)
33      k007121_ctrl_w(m_k007121, space, offset, data);
32      m_k007121->ctrl_w(space, offset, data);
3433   else    /* scroll registers */
3534      m_k007121_regs[offset] = data;
3635}
trunk/src/mame/drivers/vendetta.c
r24078r24079
143143
144144READ8_MEMBER(vendetta_state::vendetta_K052109_r)
145145{
146   return k052109_r(m_k052109, space, offset + 0x2000);
146   return m_k052109->read(space, offset + 0x2000);
147147}
148148
149149WRITE8_MEMBER(vendetta_state::vendetta_K052109_w)
r24078r24079
153153   // *  Tilemap MASK-ROM Test       (0x1d80<->0x3d80, 0x1e00<->0x3e00, 0x1f00<->0x3f00)  *
154154   // *************************************************************************************
155155   if ((offset == 0x1d80) || (offset == 0x1e00) || (offset == 0x1f00))
156      k052109_w(m_k052109, space, offset, data);
157   k052109_w(m_k052109, space, offset + 0x2000, data);
156      m_k052109->write(space, offset, data);
157   m_k052109->write(space, offset + 0x2000, data);
158158}
159159
160160
r24078r24079
172172   else
173173   {
174174      space.install_readwrite_handler(m_video_banking_base + 0x2000, m_video_banking_base + 0x2fff, read8_delegate(FUNC(vendetta_state::vendetta_K052109_r),this), write8_delegate(FUNC(vendetta_state::vendetta_K052109_w),this) );
175      space.install_legacy_readwrite_handler(*m_k052109, m_video_banking_base + 0x0000, m_video_banking_base + 0x0fff, FUNC(k052109_r), FUNC(k052109_w) );
175      space.install_readwrite_handler(m_video_banking_base + 0x0000, m_video_banking_base + 0x0fff, read8_delegate(FUNC(k052109_device::read), (k052109_device*)m_k052109), write8_delegate(FUNC(k052109_device::write), (k052109_device*)m_k052109));
176176   }
177177}
178178
r24078r24079
185185   /* bit 2 = BRAMBK ?? */
186186
187187   /* bit 3 = enable char ROM reading through the video RAM */
188   k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
188   m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
189189
190190   /* bit 4 = INIT ?? */
191191
r24078r24079
251251   /* what is the desired effect of overlapping these memory regions anyway? */
252252   AM_RANGE(0x4000, 0x4fff) AM_RAMBANK("bank3")
253253   AM_RANGE(0x6000, 0x6fff) AM_RAMBANK("bank2")
254   AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)
254   AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
255255   AM_RANGE(0x8000, 0xffff) AM_ROM
256256ADDRESS_MAP_END
257257
r24078r24079
275275   /* what is the desired effect of overlapping these memory regions anyway? */
276276   AM_RANGE(0x2000, 0x2fff) AM_RAMBANK("bank3")                    // 052109 (Tilemap) 0x0000-0x0fff
277277   AM_RANGE(0x4000, 0x4fff) AM_RAMBANK("bank2")                    // 052109 (Tilemap) 0x2000-0x3fff, Tilemap MASK-ROM bank selector (MASK-ROM Test)
278   AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)            // 052109 (Tilemap)
278   AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE("k052109", k052109_device, read, write)            // 052109 (Tilemap)
279279   AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1")                    // 053248 '975r01' 1M ROM (Banked)
280280   AM_RANGE(0x8000, 0xffff) AM_ROM                         // 053248 '975r01' 1M ROM (0x18000-0x1ffff)
281281ADDRESS_MAP_END
trunk/src/mame/drivers/spy.c
r24078r24079
2727
2828INTERRUPT_GEN_MEMBER(spy_state::spy_interrupt)
2929{
30   if (k052109_is_irq_enabled(m_k052109))
30   if (m_k052109->is_irq_enabled())
3131      device.execute().set_input_line(0, HOLD_LINE);
3232}
3333
r24078r24079
286286   coin_counter_w(machine(), 1, data & 0x02);
287287
288288   /* bit 2 = enable char ROM reading through the video RAM */
289   k052109_set_rmrd_line(m_k052109, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE);
289   m_k052109->set_rmrd_line((data & 0x04) ? ASSERT_LINE : CLEAR_LINE);
290290
291291   /* bit 3 = disable video */
292292   m_video_enable = ~(data & 0x08);
r24078r24079
345345
346346READ8_MEMBER(spy_state::k052109_051960_r)
347347{
348   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
348   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
349349   {
350350      if (offset >= 0x3800 && offset < 0x3808)
351         return k051937_r(m_k051960, space, offset - 0x3800);
351         return m_k051960->k051937_r(space, offset - 0x3800);
352352      else if (offset < 0x3c00)
353         return k052109_r(m_k052109, space, offset);
353         return m_k052109->read(space, offset);
354354      else
355         return k051960_r(m_k051960, space, offset - 0x3c00);
355         return m_k051960->k051960_r(space, offset - 0x3c00);
356356   }
357357   else
358      return k052109_r(m_k052109, space, offset);
358      return m_k052109->read(space, offset);
359359}
360360
361361WRITE8_MEMBER(spy_state::k052109_051960_w)
362362{
363363   if (offset >= 0x3800 && offset < 0x3808)
364      k051937_w(m_k051960, space, offset - 0x3800, data);
364      m_k051960->k051937_w(space, offset - 0x3800, data);
365365   else if (offset < 0x3c00)
366      k052109_w(m_k052109, space, offset, data);
366      m_k052109->write(space, offset, data);
367367   else
368      k051960_w(m_k051960, space, offset - 0x3c00, data);
368      m_k051960->k051960_w(space, offset - 0x3c00, data);
369369}
370370
371371static ADDRESS_MAP_START( spy_map, AS_PROGRAM, 8, spy_state )
trunk/src/mame/drivers/crimfght.c
r24078r24079
2424
2525INTERRUPT_GEN_MEMBER(crimfght_state::crimfght_interrupt)
2626{
27   if (k051960_is_irq_enabled(m_k051960))
27   if (m_k051960->k051960_is_irq_enabled())
2828      device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
2929}
3030
r24078r24079
5353
5454READ8_MEMBER(crimfght_state::k052109_051960_r)
5555{
56   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
56   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
5757   {
5858      if (offset >= 0x3800 && offset < 0x3808)
59         return k051937_r(m_k051960, space, offset - 0x3800);
59         return m_k051960->k051937_r(space, offset - 0x3800);
6060      else if (offset < 0x3c00)
61         return k052109_r(m_k052109, space, offset);
61         return m_k052109->read(space, offset);
6262      else
63         return k051960_r(m_k051960, space, offset - 0x3c00);
63         return m_k051960->k051960_r(space, offset - 0x3c00);
6464   }
6565   else
66      return k052109_r(m_k052109, space, offset);
66      return m_k052109->read(space, offset);
6767}
6868
6969WRITE8_MEMBER(crimfght_state::k052109_051960_w)
7070{
7171   if (offset >= 0x3800 && offset < 0x3808)
72      k051937_w(m_k051960, space, offset - 0x3800, data);
72      m_k051960->k051937_w(space, offset - 0x3800, data);
7373   else if (offset < 0x3c00)
74      k052109_w(m_k052109, space, offset, data);
74      m_k052109->write(space, offset, data);
7575   else
76      k051960_w(m_k051960, space, offset - 0x3c00, data);
76      m_k051960->k051960_w(space, offset - 0x3c00, data);
7777}
7878
7979/********************************************/
r24078r24079
399399      device->memory().space(AS_PROGRAM).install_readwrite_bank(0x0000, 0x03ff, "bank1");                             /* RAM */
400400
401401   /* bit 6 = enable char ROM reading through the video RAM */
402   k052109_set_rmrd_line(state->m_k052109, (lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
402   state->m_k052109->set_rmrd_line((lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
403403
404404   state->membank("bank2")->set_entry(lines & 0x0f);
405405}
trunk/src/mame/drivers/labyrunr.c
r24078r24079
1919INTERRUPT_GEN_MEMBER(labyrunr_state::labyrunr_vblank_interrupt)
2020{
2121   address_space &space = generic_space();
22   if (k007121_ctrlram_r(m_k007121, space, 7) & 0x02)
22   if (m_k007121->ctrlram_r(space, 7) & 0x02)
2323      device.execute().set_input_line(HD6309_IRQ_LINE, HOLD_LINE);
2424}
2525
2626INTERRUPT_GEN_MEMBER(labyrunr_state::labyrunr_timer_interrupt)
2727{
2828   address_space &space = generic_space();
29   if (k007121_ctrlram_r(m_k007121, space, 7) & 0x01)
29   if (m_k007121->ctrlram_r(space, 7) & 0x01)
3030      device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
3131}
3232
r24078r24079
4444}
4545
4646static ADDRESS_MAP_START( labyrunr_map, AS_PROGRAM, 8, labyrunr_state )
47   AM_RANGE(0x0000, 0x0007) AM_DEVWRITE_LEGACY("k007121", k007121_ctrl_w)
47   AM_RANGE(0x0000, 0x0007) AM_DEVWRITE("k007121", k007121_device, ctrl_w)
4848   AM_RANGE(0x0020, 0x005f) AM_RAM AM_SHARE("scrollram")
4949   AM_RANGE(0x0800, 0x0800) AM_DEVREADWRITE("ym1", ym2203_device, read_port_r, write_port_w)
5050   AM_RANGE(0x0801, 0x0801) AM_DEVREADWRITE("ym1", ym2203_device, status_port_r, control_port_w)
trunk/src/mame/drivers/surpratk.c
r24078r24079
2020
2121INTERRUPT_GEN_MEMBER(surpratk_state::surpratk_interrupt)
2222{
23   if (k052109_is_irq_enabled(m_k052109))
23   if (m_k052109->is_irq_enabled())
2424      device.execute().set_input_line(0, HOLD_LINE);
2525}
2626
r24078r24079
3434         return m_generic_paletteram_8[offset];
3535   }
3636   else if (m_videobank & 0x01)
37      return k053245_r(m_k053244, space, offset);
37      return m_k053244->k053245_r(space, offset);
3838   else
3939      return m_ram[offset];
4040}
r24078r24079
4949         paletteram_xBBBBBGGGGGRRRRR_byte_be_w(space,offset,data);
5050   }
5151   else if (m_videobank & 0x01)
52      k053245_w(m_k053244, space, offset, data);
52      m_k053244->k053245_w(space, offset, data);
5353   else
5454      m_ram[offset] = data;
5555}
r24078r24079
7373   coin_counter_w(machine(), 1, data & 0x02);
7474
7575   /* bit 3 = enable char ROM reading through the video RAM */
76   k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
76   m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
7777
7878   /* other bits unknown */
7979}
r24078r24079
9090   AM_RANGE(0x5f8e, 0x5f8e) AM_READ_PORT("DSW3")
9191   AM_RANGE(0x5f8f, 0x5f8f) AM_READ_PORT("DSW1")
9292   AM_RANGE(0x5f90, 0x5f90) AM_READ_PORT("DSW2")
93   AM_RANGE(0x5fa0, 0x5faf) AM_DEVREADWRITE_LEGACY("k053244", k053244_r, k053244_w)
93   AM_RANGE(0x5fa0, 0x5faf) AM_DEVREADWRITE("k053244", k05324x_device, k053244_r, k053244_w)
9494   AM_RANGE(0x5fb0, 0x5fbf) AM_DEVWRITE_LEGACY("k053251", k053251_w)
9595   AM_RANGE(0x5fc0, 0x5fc0) AM_READ(watchdog_reset_r) AM_WRITE(surpratk_5fc0_w)
9696   AM_RANGE(0x5fd0, 0x5fd1) AM_DEVWRITE("ymsnd", ym2151_device, write)
9797   AM_RANGE(0x5fc4, 0x5fc4) AM_WRITE(surpratk_videobank_w)
98   AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE_LEGACY("k052109", k052109_r, k052109_w)
98   AM_RANGE(0x4000, 0x7fff) AM_DEVREADWRITE("k052109", k052109_device, read, write)
9999   AM_RANGE(0x8000, 0xffff) AM_ROM                 /* ROM */
100100ADDRESS_MAP_END
101101
trunk/src/mame/drivers/blockhl.c
r24078r24079
3232
3333INTERRUPT_GEN_MEMBER(blockhl_state::blockhl_interrupt)
3434{
35   if (k052109_is_irq_enabled(m_k052109) && m_rombank == 0)    /* kludge to prevent crashes */
35   if (m_k052109->is_irq_enabled() && m_rombank == 0)    /* kludge to prevent crashes */
3636      device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
3737}
3838
r24078r24079
6161/* special handlers to combine 052109 & 051960 */
6262READ8_MEMBER(blockhl_state::k052109_051960_r)
6363{
64   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
64   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
6565   {
6666      if (offset >= 0x3800 && offset < 0x3808)
67         return k051937_r(m_k051960, space, offset - 0x3800);
67         return m_k051960->k051937_r(space, offset - 0x3800);
6868      else if (offset < 0x3c00)
69         return k052109_r(m_k052109, space, offset);
69         return m_k052109->read(space, offset);
7070      else
71         return k051960_r(m_k051960, space, offset - 0x3c00);
71         return m_k051960->k051960_r(space, offset - 0x3c00);
7272   }
7373   else
74      return k052109_r(m_k052109, space, offset);
74      return m_k052109->read(space, offset);
7575}
7676
7777WRITE8_MEMBER(blockhl_state::k052109_051960_w)
7878{
7979   if (offset >= 0x3800 && offset < 0x3808)
80      k051937_w(m_k051960, space, offset - 0x3800, data);
80      m_k051960->k051937_w(space, offset - 0x3800, data);
8181   else if (offset < 0x3c00)
82      k052109_w(m_k052109, space, offset, data);
82      m_k052109->write(space, offset, data);
8383   else
84      k051960_w(m_k051960, space, offset - 0x3c00, data);
84      m_k051960->k051960_w(space, offset - 0x3c00, data);
8585}
8686
8787
r24078r24079
311311   state->m_palette_selected = ~lines & 0x20;
312312
313313   /* bit 6 = enable char ROM reading through the video RAM */
314   k052109_set_rmrd_line(state->m_k052109, (lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
314   state->m_k052109->set_rmrd_line((lines & 0x40) ? ASSERT_LINE : CLEAR_LINE);
315315
316316   /* bit 7 used but unknown */
317317
trunk/src/mame/drivers/bottom9.c
r24078r24079
2121
2222INTERRUPT_GEN_MEMBER(bottom9_state::bottom9_interrupt)
2323{
24   if (k052109_is_irq_enabled(m_k052109))
24   if (m_k052109->is_irq_enabled())
2525      device.execute().set_input_line(0, HOLD_LINE);
2626}
2727
2828READ8_MEMBER(bottom9_state::k052109_051960_r)
2929{
30   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
30   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
3131   {
3232      if (offset >= 0x3800 && offset < 0x3808)
33         return k051937_r(m_k051960, space, offset - 0x3800);
33         return m_k051960->k051937_r(space, offset - 0x3800);
3434      else if (offset < 0x3c00)
35         return k052109_r(m_k052109, space, offset);
35         return m_k052109->read(space, offset);
3636      else
37         return k051960_r(m_k051960, space, offset - 0x3c00);
37         return m_k051960->k051960_r(space, offset - 0x3c00);
3838   }
3939   else
40      return k052109_r(m_k052109, space, offset);
40      return m_k052109->read(space, offset);
4141}
4242
4343WRITE8_MEMBER(bottom9_state::k052109_051960_w)
4444{
4545   if (offset >= 0x3800 && offset < 0x3808)
46      k051937_w(m_k051960, space, offset - 0x3800, data);
46      m_k051960->k051937_w(space, offset - 0x3800, data);
4747   else if (offset < 0x3c00)
48      k052109_w(m_k052109, space, offset, data);
48      m_k052109->write(space, offset, data);
4949   else
50      k051960_w(m_k051960, space, offset - 0x3c00, data);
50      m_k051960->k051960_w(space, offset - 0x3c00, data);
5151}
5252
5353READ8_MEMBER(bottom9_state::bottom9_bankedram1_r)
r24078r24079
111111   coin_counter_w(machine(), 1, data & 0x02);
112112
113113   /* bit 2 = enable char ROM reading through the video RAM */
114   k052109_set_rmrd_line(m_k052109, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE);
114   m_k052109->set_rmrd_line((data & 0x04) ? ASSERT_LINE : CLEAR_LINE);
115115
116116   /* bit 3 = disable video */
117117   m_video_enable = ~data & 0x08;
trunk/src/mame/drivers/lethal.c
r24078r24079
263263            case 0x4d:
264264            case 0x4e:
265265            case 0x4f:
266               return k053244_r(m_k053244, space, offset - 0x40);
266               return m_k053244->k053244_r(space, offset - 0x40);
267267
268268            case 0x80:
269269            case 0x81:
r24078r24079
304304         }
305305      }
306306      else if (offset < 0x1800)
307         return k053245_r(m_k053244, space, (offset - 0x0800) & 0x07ff);
307         return m_k053244->k053245_r(space, (offset - 0x0800) & 0x07ff);
308308      else if (offset < 0x2000)
309309         return k056832_ram_code_lo_r(m_k056832, space, offset - 0x1800);
310310      else if (offset < 0x2800)
r24078r24079
354354            case 0x4d:
355355            case 0x4e:
356356            case 0x4f:
357               k053244_w(m_k053244, space, offset - 0x40, data);
357               m_k053244->k053244_w(space, offset - 0x40, data);
358358               break;
359359
360360            case 0x80:
r24078r24079
398398         }
399399      }
400400      else if (offset < 0x1800)
401         k053245_w(m_k053244, space, (offset - 0x0800) & 0x07ff, data);
401         m_k053244->k053245_w(space, (offset - 0x0800) & 0x07ff, data);
402402      else if (offset < 0x2000)
403403         k056832_ram_code_lo_w(m_k056832, space, offset - 0x1800, data);
404404      else if (offset < 0x2800)
trunk/src/mame/drivers/gbusters.c
r24078r24079
2020
2121INTERRUPT_GEN_MEMBER(gbusters_state::gbusters_interrupt)
2222{
23   if (k052109_is_irq_enabled(m_k052109))
23   if (m_k052109->is_irq_enabled())
2424      device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
2525}
2626
r24078r24079
4343WRITE8_MEMBER(gbusters_state::gbusters_1f98_w)
4444{
4545   /* bit 0 = enable char ROM reading through the video RAM */
46   k052109_set_rmrd_line(m_k052109, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
46   m_k052109->set_rmrd_line((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
4747
4848   /* bit 7 used (during gfx rom tests), but unknown */
4949
r24078r24079
115115/* special handlers to combine 052109 & 051960 */
116116READ8_MEMBER(gbusters_state::k052109_051960_r)
117117{
118   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
118   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
119119   {
120120      if (offset >= 0x3800 && offset < 0x3808)
121         return k051937_r(m_k051960, space, offset - 0x3800);
121         return m_k051960->k051937_r(space, offset - 0x3800);
122122      else if (offset < 0x3c00)
123         return k052109_r(m_k052109, space, offset);
123         return m_k052109->read(space, offset);
124124      else
125         return k051960_r(m_k051960, space, offset - 0x3c00);
125         return m_k051960->k051960_r(space, offset - 0x3c00);
126126   }
127127   else
128      return k052109_r(m_k052109, space, offset);
128      return m_k052109->read(space, offset);
129129}
130130
131131WRITE8_MEMBER(gbusters_state::k052109_051960_w)
132132{
133133   if (offset >= 0x3800 && offset < 0x3808)
134      k051937_w(m_k051960, space, offset - 0x3800, data);
134      m_k051960->k051937_w(space, offset - 0x3800, data);
135135   else if (offset < 0x3c00)
136      k052109_w(m_k052109, space, offset, data);
136      m_k052109->write(space, offset, data);
137137   else
138      k051960_w(m_k051960, space, offset - 0x3c00, data);
138      m_k051960->k051960_w(space, offset - 0x3c00, data);
139139}
140140
141141
trunk/src/mame/drivers/thunderx.c
r24078r24079
2626
2727INTERRUPT_GEN_MEMBER(thunderx_state::scontra_interrupt)
2828{
29   if (k052109_is_irq_enabled(m_k052109))
29   if (m_k052109->is_irq_enabled())
3030      device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
3131}
3232
r24078r24079
296296   // logerror("%04x: 1f98_w %02x\n", space.device().safe_pc(),data);
297297
298298   /* bit 0 = enable char ROM reading through the video RAM */
299   k052109_set_rmrd_line(m_k052109, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
299   m_k052109->set_rmrd_line((data & 0x01) ? ASSERT_LINE : CLEAR_LINE);
300300
301301   /* bit 1 = PMC-BK */
302302   m_pmcbank = (data & 0x02) >> 1;
r24078r24079
368368
369369READ8_MEMBER(thunderx_state::k052109_051960_r)
370370{
371   if (k052109_get_rmrd_line(m_k052109) == CLEAR_LINE)
371   if (m_k052109->get_rmrd_line() == CLEAR_LINE)
372372   {
373373      if (offset >= 0x3800 && offset < 0x3808)
374         return k051937_r(m_k051960, space, offset - 0x3800);
374         return m_k051960->k051937_r(space, offset - 0x3800);
375375      else if (offset < 0x3c00)
376         return k052109_r(m_k052109, space, offset);
376         return m_k052109->read(space, offset);
377377      else
378         return k051960_r(m_k051960, space, offset - 0x3c00);
378         return m_k051960->k051960_r(space, offset - 0x3c00);
379379   }
380380   else
381      return k052109_r(m_k052109, space, offset);
381      return m_k052109->read(space, offset);
382382}
383383
384384WRITE8_MEMBER(thunderx_state::k052109_051960_w)
385385{
386386   if (offset >= 0x3800 && offset < 0x3808)
387      k051937_w(m_k051960, space, offset - 0x3800, data);
387      m_k051960->k051937_w(space, offset - 0x3800, data);
388388   else if (offset < 0x3c00)
389      k052109_w(m_k052109, space, offset, data);
389      m_k052109->write(space, offset, data);
390390   else
391      k051960_w(m_k051960, space, offset - 0x3c00, data);
391      m_k051960->k051960_w(space, offset - 0x3c00, data);
392392}
393393
394394/***************************************************************************/
trunk/src/mame/machine/simpsons.c
r24078r24079
3737   coin_counter_w(machine(), 1, data & 0x02);
3838   /* bit 2 selects mono or stereo sound */
3939   /* bit 3 = enable char ROM reading through the video RAM */
40   k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
40   m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
4141   /* bit 4 = INIT (unknown) */
4242   /* bit 5 = enable sprite ROM reading */
4343   k053246_set_objcha_line(m_k053246, (~data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
trunk/src/mame/machine/ajax.c
r24078r24079
180180WRITE8_MEMBER(ajax_state::ajax_bankswitch_2_w)
181181{
182182   /* enable char ROM reading through the video RAM */
183   k052109_set_rmrd_line(m_k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
183   m_k052109->set_rmrd_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
184184
185185   /* bit 5 enables 051316 wraparound */
186186   k051316_wraparound_enable(m_k051316, data & 0x20);
r24078r24079
215215
216216INTERRUPT_GEN_MEMBER(ajax_state::ajax_interrupt)
217217{
218   if (k051960_is_irq_enabled(m_k051960))
218   if (m_k051960->k051960_is_irq_enabled())
219219      device.execute().set_input_line(KONAMI_IRQ_LINE, HOLD_LINE);
220220}
trunk/src/mame/video/bladestl.c
r24078r24079
11#include "emu.h"
2#include "video/konicdev.h"
32#include "includes/bladestl.h"
43
54
r24078r24079
8180{
8281   set_pens(machine());
8382
84   k007342_tilemap_update(m_k007342);
83   m_k007342->tilemap_update();
8584
86   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE ,0);
87   k007420_sprites_draw(m_k007420, bitmap, cliprect, machine().gfx[1]);
88   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 1, 1 | TILEMAP_DRAW_OPAQUE ,0);
89   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 0, 0 ,0);
90   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 0, 1 ,0);
85   m_k007342->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE ,0);
86   m_k007420->sprites_draw(bitmap, cliprect, machine().gfx[1]);
87   m_k007342->tilemap_draw(bitmap, cliprect, 1, 1 | TILEMAP_DRAW_OPAQUE ,0);
88   m_k007342->tilemap_draw(bitmap, cliprect, 0, 0 ,0);
89   m_k007342->tilemap_draw(bitmap, cliprect, 0, 1 ,0);
9190   return 0;
9291}
trunk/src/mame/video/thunderx.c
r24078r24079
6767
6868UINT32 thunderx_state::screen_update_scontra(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
6969{
70   k052109_tilemap_update(m_k052109);
70   m_k052109->tilemap_update();
7171
7272   machine().priority_bitmap.fill(0, cliprect);
7373
r24078r24079
7575//  bitmap.fill(16 * m_layer_colorbase[1], cliprect);
7676   if (m_priority)
7777   {
78      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 1);
79      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 2);
78      m_k052109->tilemap_draw(bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 1);
79      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 2);
8080   }
8181   else
8282   {
83      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1);
84      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 2);
83      m_k052109->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1);
84      m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 2);
8585   }
86   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 4);
86   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 4);
8787
88   k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
88   m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
8989   return 0;
9090}
trunk/src/mame/video/gradius3.c
r24078r24079
7777   m_layer_colorbase[2] = 48;
7878   m_sprite_colorbase = 16;
7979
80   k052109_set_layer_offsets(m_k052109, 2, -2, 0);
81   k051960_set_sprite_offsets(m_k051960, 2, 0);
80   m_k052109->set_layer_offsets(2, -2, 0);
81   m_k051960->k051960_set_sprite_offsets(2, 0);
8282
8383   /* re-decode the sprites because the ROMs are connected to the custom IC differently
8484      from how they are connected to the CPU. */
r24078r24079
125125{
126126   /* TODO: this kludge enforces the char banks. For some reason, they don't work otherwise. */
127127   address_space &space = machine().driver_data()->generic_space();
128   k052109_w(m_k052109, space, 0x1d80, 0x10);
129   k052109_w(m_k052109, space, 0x1f00, 0x32);
128   m_k052109->write(space, 0x1d80, 0x10);
129   m_k052109->write(space, 0x1f00, 0x32);
130130
131   k052109_tilemap_update(m_k052109);
131   m_k052109->tilemap_update();
132132
133133   machine().priority_bitmap.fill(0, cliprect);
134134   if (m_priority == 0)
135135   {
136      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 2);
137      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 4);
138      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 1);
136      m_k052109->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 2);
137      m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 4);
138      m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 1);
139139   }
140140   else
141141   {
142      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 1);
143      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 2);
144      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 4);
142      m_k052109->tilemap_draw(bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 1);
143      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 2);
144      m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 4);
145145   }
146146
147   k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
147   m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
148148   return 0;
149149}
trunk/src/mame/video/konicdev.c
r24078r24079
13321332/*                                                                         */
13331333/***************************************************************************/
13341334
1335struct k007121_state
1335
1336const device_type K007121 = &device_creator<k007121_device>;
1337
1338k007121_device::k007121_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1339   : device_t(mconfig, K007121, "Konami 007121", tag, owner, clock, "k007121", __FILE__),
1340   m_flipscreen(0)
13361341{
1337   UINT8    ctrlram[8];
1338   int      flipscreen;
1339};
1342}
13401343
1341/*****************************************************************************
1342    INLINE FUNCTIONS
1343*****************************************************************************/
1344//-------------------------------------------------
1345//  device_config_complete - perform any
1346//  operations now that the configuration is
1347//  complete
1348//-------------------------------------------------
13441349
1345INLINE k007121_state *k007121_get_safe_token( device_t *device )
1350void k007121_device::device_config_complete()
13461351{
1347   assert(device != NULL);
1348   assert(device->type() == K007121);
1352}
13491353
1350   return (k007121_state *)downcast<k007121_device *>(device)->token();
1354//-------------------------------------------------
1355//  device_start - device-specific startup
1356//-------------------------------------------------
1357
1358void k007121_device::device_start()
1359{
1360   save_item(NAME(m_ctrlram));
1361   save_item(NAME(m_flipscreen));
13511362}
13521363
1364//-------------------------------------------------
1365//  device_reset - device-specific reset
1366//-------------------------------------------------
1367
1368void k007121_device::device_reset()
1369{
1370   int i;
1371
1372   m_flipscreen = 0;
1373
1374   for (i = 0; i < 8; i++)
1375      m_ctrlram[i] = 0;
1376}
1377
1378
13531379/*****************************************************************************
13541380    DEVICE HANDLERS
13551381*****************************************************************************/
13561382
1357READ8_DEVICE_HANDLER( k007121_ctrlram_r )
1383READ8_MEMBER( k007121_device::ctrlram_r )
13581384{
1359   k007121_state *k007121 = k007121_get_safe_token(device);
1360
13611385   assert(offset < 8);
13621386
1363   return k007121->ctrlram[offset];
1387   return m_ctrlram[offset];
13641388}
13651389
13661390
1367WRITE8_DEVICE_HANDLER( k007121_ctrl_w )
1391WRITE8_MEMBER( k007121_device::ctrl_w )
13681392{
1369   k007121_state *k007121 = k007121_get_safe_token(device);
1370
13711393   assert(offset < 8);
13721394
13731395   switch (offset)
13741396   {
13751397   case 6:
13761398      /* palette bank change */
1377      if ((k007121->ctrlram[offset] & 0x30) != (data & 0x30))
1399      if ((m_ctrlram[offset] & 0x30) != (data & 0x30))
13781400         space.machine().tilemap().mark_all_dirty();
13791401      break;
13801402   case 7:
1381      k007121->flipscreen = data & 0x08;
1403      m_flipscreen = data & 0x08;
13821404      break;
13831405   }
13841406
1385   k007121->ctrlram[offset] = data;
1407   m_ctrlram[offset] = data;
13861408}
13871409
13881410/*
r24078r24079
14201442 *
14211443 */
14221444
1423void k007121_sprites_draw( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx, colortable_t *ctable,
1445void k007121_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx, colortable_t *ctable,
14241446                     const UINT8 *source, int base_color, int global_x_offset, int bank_base, UINT32 pri_mask )
14251447{
1426   k007121_state *k007121 = k007121_get_safe_token(device);
1427//  gfx_element *gfx = gfxs[chip];
1448   //  gfx_element *gfx = gfxs[chip];
14281449   bitmap_ind8 &priority_bitmap = gfx->machine().priority_bitmap;
1429   int flipscreen = k007121->flipscreen;
1450   int flipscreen = m_flipscreen;
14301451   int i, num, inc, offs[5];
14311452   int is_flakatck = (ctable == NULL);
14321453
r24078r24079
15521573   }
15531574}
15541575
1555/*****************************************************************************
1556    DEVICE INTERFACE
1557*****************************************************************************/
1576/***************************************************************************/
1577/*                                                                         */
1578/*                                 007342                                  */
1579/*                                                                         */
1580/***************************************************************************/
15581581
1559static DEVICE_START( k007121 )
1560{
1561   k007121_state *k007121 = k007121_get_safe_token(device);
1582const device_type K007342 = &device_creator<k007342_device>;
15621583
1563   device->save_item(NAME(k007121->ctrlram));
1564   device->save_item(NAME(k007121->flipscreen));
1565}
1566
1567static DEVICE_RESET( k007121 )
1584k007342_device::k007342_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1585   : device_t(mconfig, K007342, "Konami 007342", tag, owner, clock, "k007342", __FILE__),
1586   m_ram(NULL),
1587   m_scroll_ram(NULL),
1588   m_videoram_0(NULL),
1589   m_videoram_1(NULL),
1590   m_colorram_0(NULL),
1591   m_colorram_1(NULL),
1592   //m_tilemap[2];
1593   m_flipscreen(0),
1594   m_int_enabled(0)
1595   //m_regs[8],
1596   //m_scrollx[2],
1597   //m_scrolly[2]
15681598{
1569   k007121_state *k007121 = k007121_get_safe_token(device);
1570   int i;
1571
1572   k007121->flipscreen = 0;
1573
1574   for (i = 0; i < 8; i++)
1575      k007121->ctrlram[i] = 0;
15761599}
15771600
1578const device_type K007121 = &device_creator<k007121_device>;
1579
1580k007121_device::k007121_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1581   : device_t(mconfig, K007121, "Konami 007121", tag, owner, clock, "k007121", __FILE__)
1582{
1583   m_token = global_alloc_clear(k007121_state);
1584}
1585
15861601//-------------------------------------------------
15871602//  device_config_complete - perform any
15881603//  operations now that the configuration is
15891604//  complete
15901605//-------------------------------------------------
15911606
1592void k007121_device::device_config_complete()
1607void k007342_device::device_config_complete()
15931608{
1609   // inherit a copy of the static data
1610   const k007342_interface *intf = reinterpret_cast<const k007342_interface *>(static_config());
1611   if (intf != NULL)
1612   *static_cast<k007342_interface *>(this) = *intf;
1613   
1614   // or initialize to defaults if none provided
1615   else
1616   {
1617      m_gfxnum = 0;
1618      m_callback = NULL;
1619   }
15941620}
15951621
15961622//-------------------------------------------------
15971623//  device_start - device-specific startup
15981624//-------------------------------------------------
15991625
1600void k007121_device::device_start()
1626void k007342_device::device_start()
16011627{
1602   DEVICE_START_NAME( k007121 )(this);
1628   m_tilemap[0] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k007342_device::get_tile_info0),this), tilemap_mapper_delegate(FUNC(k007342_device::scan),this), 8, 8, 64, 32);
1629   m_tilemap[1] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k007342_device::get_tile_info1),this), tilemap_mapper_delegate(FUNC(k007342_device::scan),this), 8, 8, 64, 32);
1630
1631   m_ram = auto_alloc_array_clear(machine(), UINT8, 0x2000);
1632   m_scroll_ram = auto_alloc_array_clear(machine(), UINT8, 0x0200);
1633
1634   m_colorram_0 = &m_ram[0x0000];
1635   m_colorram_1 = &m_ram[0x1000];
1636   m_videoram_0 = &m_ram[0x0800];
1637   m_videoram_1 = &m_ram[0x1800];
1638
1639   m_tilemap[0]->set_transparent_pen(0);
1640   m_tilemap[1]->set_transparent_pen(0);
1641
1642   save_pointer(NAME(m_ram), 0x2000);
1643   save_pointer(NAME(m_scroll_ram), 0x0200);
1644   save_item(NAME(m_int_enabled));
1645   save_item(NAME(m_flipscreen));
1646   save_item(NAME(m_scrollx));
1647   save_item(NAME(m_scrolly));
1648   save_item(NAME(m_regs));
16031649}
16041650
16051651//-------------------------------------------------
16061652//  device_reset - device-specific reset
16071653//-------------------------------------------------
16081654
1609void k007121_device::device_reset()
1655void k007342_device::device_reset()
16101656{
1611   DEVICE_RESET_NAME( k007121 )(this);
1612}
1657   int i;
16131658
1614/***************************************************************************/
1615/*                                                                         */
1616/*                                 007342                                  */
1617/*                                                                         */
1618/***************************************************************************/
1659   m_int_enabled = 0;
1660   m_flipscreen = 0;
1661   m_scrollx[0] = 0;
1662   m_scrollx[1] = 0;
1663   m_scrolly[0] = 0;
1664   m_scrolly[1] = 0;
16191665
1620struct k007342_state
1621{
1622   UINT8    *ram;
1623   UINT8    *scroll_ram;
1624   UINT8    *videoram_0;
1625   UINT8    *videoram_1;
1626   UINT8    *colorram_0;
1627   UINT8    *colorram_1;
1628
1629   tilemap_t  *tilemap[2];
1630   int      flipscreen, gfxnum, int_enabled;
1631   UINT8    regs[8];
1632   UINT16   scrollx[2];
1633   UINT8    scrolly[2];
1634
1635   k007342_callback callback;
1636};
1637
1638/*****************************************************************************
1639    INLINE FUNCTIONS
1640*****************************************************************************/
1641
1642INLINE k007342_state *k007342_get_safe_token( device_t *device )
1643{
1644   assert(device != NULL);
1645   assert(device->type() == K007342);
1646
1647   return (k007342_state *)downcast<k007342_device *>(device)->token();
1666   for (i = 0; i < 8; i++)
1667      m_regs[i] = 0;
16481668}
16491669
1650INLINE const k007342_interface *k007342_get_interface( device_t *device )
1651{
1652   assert(device != NULL);
1653   assert((device->type() == K007342));
1654   return (const k007342_interface *) device->static_config();
1655}
1656
16571670/*****************************************************************************
16581671    DEVICE HANDLERS
16591672*****************************************************************************/
16601673
1661READ8_DEVICE_HANDLER( k007342_r )
1674READ8_MEMBER( k007342_device::read )
16621675{
1663   k007342_state *k007342 = k007342_get_safe_token(device);
1664   return k007342->ram[offset];
1676   return m_ram[offset];
16651677}
16661678
1667WRITE8_DEVICE_HANDLER( k007342_w )
1679WRITE8_MEMBER( k007342_device::write )
16681680{
1669   k007342_state *k007342 = k007342_get_safe_token(device);
1670   k007342->ram[offset] = data;
1681   m_ram[offset] = data;
16711682
16721683   if (offset < 0x1000)    /* layer 0 */
1673      k007342->tilemap[0]->mark_tile_dirty(offset & 0x7ff);
1684      m_tilemap[0]->mark_tile_dirty(offset & 0x7ff);
16741685   else                /* layer 1 */
1675      k007342->tilemap[1]->mark_tile_dirty(offset & 0x7ff);
1686      m_tilemap[1]->mark_tile_dirty(offset & 0x7ff);
16761687}
16771688
1678READ8_DEVICE_HANDLER( k007342_scroll_r )
1689READ8_MEMBER( k007342_device::scroll_r )
16791690{
1680   k007342_state *k007342 = k007342_get_safe_token(device);
1681   return k007342->scroll_ram[offset];
1691   return m_scroll_ram[offset];
16821692}
16831693
1684WRITE8_DEVICE_HANDLER( k007342_scroll_w )
1694WRITE8_MEMBER( k007342_device::scroll_w )
16851695{
1686   k007342_state *k007342 = k007342_get_safe_token(device);
1687   k007342->scroll_ram[offset] = data;
1696   m_scroll_ram[offset] = data;
16881697}
16891698
1690WRITE8_DEVICE_HANDLER( k007342_vreg_w )
1699WRITE8_MEMBER( k007342_device::vreg_w )
16911700{
1692   k007342_state *k007342 = k007342_get_safe_token(device);
16931701   switch(offset)
16941702   {
16951703      case 0x00:
16961704         /* bit 1: INT control */
1697         k007342->int_enabled = data & 0x02;
1698         k007342->flipscreen = data & 0x10;
1699         k007342->tilemap[0]->set_flip(k007342->flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
1700         k007342->tilemap[1]->set_flip(k007342->flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
1705         m_int_enabled = data & 0x02;
1706         m_flipscreen = data & 0x10;
1707         m_tilemap[0]->set_flip(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
1708         m_tilemap[1]->set_flip(m_flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
17011709         break;
17021710      case 0x01:  /* used for banking in Rock'n'Rage */
1703         if (data != k007342->regs[1])
1711         if (data != m_regs[1])
17041712            space.machine().tilemap().mark_all_dirty();
17051713      case 0x02:
1706         k007342->scrollx[0] = (k007342->scrollx[0] & 0xff) | ((data & 0x01) << 8);
1707         k007342->scrollx[1] = (k007342->scrollx[1] & 0xff) | ((data & 0x02) << 7);
1714         m_scrollx[0] = (m_scrollx[0] & 0xff) | ((data & 0x01) << 8);
1715         m_scrollx[1] = (m_scrollx[1] & 0xff) | ((data & 0x02) << 7);
17081716         break;
17091717      case 0x03:  /* scroll x (register 0) */
1710         k007342->scrollx[0] = (k007342->scrollx[0] & 0x100) | data;
1718         m_scrollx[0] = (m_scrollx[0] & 0x100) | data;
17111719         break;
17121720      case 0x04:  /* scroll y (register 0) */
1713         k007342->scrolly[0] = data;
1721         m_scrolly[0] = data;
17141722         break;
17151723      case 0x05:  /* scroll x (register 1) */
1716         k007342->scrollx[1] = (k007342->scrollx[1] & 0x100) | data;
1724         m_scrollx[1] = (m_scrollx[1] & 0x100) | data;
17171725         break;
17181726      case 0x06:  /* scroll y (register 1) */
1719         k007342->scrolly[1] = data;
1727         m_scrolly[1] = data;
17201728      case 0x07:  /* unused */
17211729         break;
17221730   }
1723   k007342->regs[offset] = data;
1731   m_regs[offset] = data;
17241732}
17251733
1726void k007342_tilemap_update( device_t *device )
1734void k007342_device::tilemap_update( )
17271735{
1728   k007342_state *k007342 = k007342_get_safe_token(device);
17291736   int offs;
17301737
17311738   /* update scroll */
1732   switch (k007342->regs[2] & 0x1c)
1739   switch (m_regs[2] & 0x1c)
17331740   {
17341741      case 0x00:
17351742      case 0x08:  /* unknown, blades of steel shootout between periods */
1736         k007342->tilemap[0]->set_scroll_rows(1);
1737         k007342->tilemap[0]->set_scroll_cols(1);
1738         k007342->tilemap[0]->set_scrollx(0, k007342->scrollx[0]);
1739         k007342->tilemap[0]->set_scrolly(0, k007342->scrolly[0]);
1743         m_tilemap[0]->set_scroll_rows(1);
1744         m_tilemap[0]->set_scroll_cols(1);
1745         m_tilemap[0]->set_scrollx(0, m_scrollx[0]);
1746         m_tilemap[0]->set_scrolly(0, m_scrolly[0]);
17401747         break;
17411748
17421749      case 0x0c:  /* 32 columns */
1743         k007342->tilemap[0]->set_scroll_rows(1);
1744         k007342->tilemap[0]->set_scroll_cols(512);
1745         k007342->tilemap[0]->set_scrollx(0, k007342->scrollx[0]);
1750         m_tilemap[0]->set_scroll_rows(1);
1751         m_tilemap[0]->set_scroll_cols(512);
1752         m_tilemap[0]->set_scrollx(0, m_scrollx[0]);
17461753         for (offs = 0; offs < 256; offs++)
1747            k007342->tilemap[0]->set_scrolly((offs + k007342->scrollx[0]) & 0x1ff,
1748                  k007342->scroll_ram[2 * (offs / 8)] + 256 * k007342->scroll_ram[2 * (offs / 8) + 1]);
1754            m_tilemap[0]->set_scrolly((offs + m_scrollx[0]) & 0x1ff,
1755                  m_scroll_ram[2 * (offs / 8)] + 256 * m_scroll_ram[2 * (offs / 8) + 1]);
17491756         break;
17501757
17511758      case 0x14:  /* 256 rows */
1752         k007342->tilemap[0]->set_scroll_rows(256);
1753         k007342->tilemap[0]->set_scroll_cols(1);
1754         k007342->tilemap[0]->set_scrolly(0, k007342->scrolly[0]);
1759         m_tilemap[0]->set_scroll_rows(256);
1760         m_tilemap[0]->set_scroll_cols(1);
1761         m_tilemap[0]->set_scrolly(0, m_scrolly[0]);
17551762         for (offs = 0; offs < 256; offs++)
1756            k007342->tilemap[0]->set_scrollx((offs + k007342->scrolly[0]) & 0xff,
1757                  k007342->scroll_ram[2 * offs] + 256 * k007342->scroll_ram[2 * offs + 1]);
1763            m_tilemap[0]->set_scrollx((offs + m_scrolly[0]) & 0xff,
1764                  m_scroll_ram[2 * offs] + 256 * m_scroll_ram[2 * offs + 1]);
17581765         break;
17591766
17601767      default:
1761//          popmessage("unknown scroll ctrl %02x", k007342->regs[2] & 0x1c);
1768//          popmessage("unknown scroll ctrl %02x", m_regs[2] & 0x1c);
17621769         break;
17631770   }
17641771
1765   k007342->tilemap[1]->set_scrollx(0, k007342->scrollx[1]);
1766   k007342->tilemap[1]->set_scrolly(0, k007342->scrolly[1]);
1772   m_tilemap[1]->set_scrollx(0, m_scrollx[1]);
1773   m_tilemap[1]->set_scrolly(0, m_scrolly[1]);
17671774
17681775#if 0
17691776   {
17701777      static int current_layer = 0;
17711778
17721779      if (machine.input().code_pressed_once(KEYCODE_Z)) current_layer = !current_layer;
1773      k007342->tilemap[current_layer]->enable(1);
1774      k007342->tilemap[!current_layer]->enable(0);
1780      m_tilemap[current_layer]->enable(1);
1781      m_tilemap[!current_layer]->enable(0);
17751782
17761783      popmessage("regs:%02x %02x %02x %02x-%02x %02x %02x %02x:%02x",
1777         k007342->regs[0], k007342->regs[1], k007342->regs[2], k007342->regs[3],
1778         k007342->regs[4], k007342->regs[5], k007342->regs[6], k007342->regs[7],
1784         m_regs[0], m_regs[1], m_regs[2], m_regs[3],
1785         m_regs[4], m_regs[5], m_regs[6], m_regs[7],
17791786         current_layer);
17801787   }
17811788#endif
17821789}
17831790
1784void k007342_tilemap_draw( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, int num, int flags, UINT32 priority )
1791void k007342_device::tilemap_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, int num, int flags, UINT32 priority )
17851792{
1786   k007342_state *k007342 = k007342_get_safe_token(device);
1787   k007342->tilemap[num]->draw(bitmap, cliprect, flags, priority);
1793   m_tilemap[num]->draw(bitmap, cliprect, flags, priority);
17881794}
17891795
1790int k007342_is_int_enabled( device_t *device )
1796int k007342_device::is_int_enabled( )
17911797{
1792   k007342_state *k007342 = k007342_get_safe_token(device);
1793   return k007342->int_enabled;
1798   return m_int_enabled;
17941799}
17951800
17961801
r24078r24079
18101815  color RAM     ----xxxx    depends on external connections (usually color and banking)
18111816*/
18121817
1813TILEMAP_MAPPER_MEMBER(k007342_device::k007342_scan)
1818TILEMAP_MAPPER_MEMBER(k007342_device::scan)
18141819{
18151820   /* logical (col,row) -> memory offset */
18161821   return (col & 0x1f) + ((row & 0x1f) << 5) + ((col & 0x20) << 5);
18171822}
18181823
1819INLINE void k007342_get_tile_info( running_machine &machine, device_t *device, tile_data &tileinfo, int tile_index, int layer, UINT8 *cram, UINT8 *vram )
1824void k007342_device::get_tile_info( tile_data &tileinfo, int tile_index, int layer, UINT8 *cram, UINT8 *vram )
18201825{
1821   k007342_state *k007342 = k007342_get_safe_token(device);
18221826   int color, code, flags;
18231827
18241828   color = cram[tile_index];
r24078r24079
18271831
18281832   tileinfo.category = (color & 0x80) >> 7;
18291833
1830   k007342->callback(device->machine(), layer, k007342->regs[1], &code, &color, &flags);
1834   m_callback(machine(), layer, m_regs[1], &code, &color, &flags);
18311835
1832   SET_TILE_INFO(
1833         k007342->gfxnum,
1836   SET_TILE_INFO_MEMBER(
1837         m_gfxnum,
18341838         code,
18351839         color,
18361840         flags);
18371841}
18381842
1839TILE_GET_INFO_MEMBER(k007342_device::k007342_get_tile_info0)
1843TILE_GET_INFO_MEMBER(k007342_device::get_tile_info0)
18401844{
1841   k007342_state *k007342 = k007342_get_safe_token(this);
1842   k007342_get_tile_info(machine(), this, tileinfo, tile_index, 0, k007342->colorram_0, k007342->videoram_0);
1845   get_tile_info(tileinfo, tile_index, 0, m_colorram_0, m_videoram_0);
18431846}
18441847
1845TILE_GET_INFO_MEMBER(k007342_device::k007342_get_tile_info1)
1848TILE_GET_INFO_MEMBER(k007342_device::get_tile_info1)
18461849{
1847   k007342_state *k007342 = k007342_get_safe_token(this);
1848   k007342_get_tile_info(machine(), this, tileinfo, tile_index, 1, k007342->colorram_1, k007342->videoram_1);
1850   get_tile_info(tileinfo, tile_index, 1, m_colorram_1, m_videoram_1);
18491851}
18501852
1851const device_type K007342 = &device_creator<k007342_device>;
1853/***************************************************************************/
1854/*                                                                         */
1855/*                                 007420                                  */
1856/*                                                                         */
1857/***************************************************************************/
18521858
1853k007342_device::k007342_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1854   : device_t(mconfig, K007342, "Konami 007342", tag, owner, clock, "k007342", __FILE__)
1859#define K007420_SPRITERAM_SIZE 0x200
1860
1861const device_type K007420 = &device_creator<k007420_device>;
1862
1863k007420_device::k007420_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
1864   : device_t(mconfig, K007420, "Konami 007420", tag, owner, clock, "k007420", __FILE__),
1865   m_ram(NULL),
1866    m_flipscreen(0)
1867   //m_regs[8],
18551868{
1856   m_token = global_alloc_clear(k007342_state);
18571869}
18581870
18591871//-------------------------------------------------
r24078r24079
18621874//  complete
18631875//-------------------------------------------------
18641876
1865void k007342_device::device_config_complete()
1877void k007420_device::device_config_complete()
18661878{
1879   // inherit a copy of the static data
1880   const k007420_interface *intf = reinterpret_cast<const k007420_interface *>(static_config());
1881   if (intf != NULL)
1882   *static_cast<k007420_interface *>(this) = *intf;
1883   
1884   // or initialize to defaults if none provided
1885   else
1886   {
1887      m_banklimit = 0;
1888      m_callback = NULL;
1889   }
18671890}
18681891
18691892//-------------------------------------------------
18701893//  device_start - device-specific startup
18711894//-------------------------------------------------
18721895
1873void k007342_device::device_start()
1896void k007420_device::device_start()
18741897{
1875   k007342_state *k007342 = k007342_get_safe_token(this);
1876   const k007342_interface *intf = k007342_get_interface(this);
1898   m_ram = auto_alloc_array_clear(machine(), UINT8, 0x200);
18771899
1878   k007342->gfxnum = intf->gfxnum;
1879   k007342->callback = intf->callback;
1880
1881   k007342->tilemap[0] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k007342_device::k007342_get_tile_info0),this), tilemap_mapper_delegate(FUNC(k007342_device::k007342_scan),this), 8, 8, 64, 32);
1882   k007342->tilemap[1] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k007342_device::k007342_get_tile_info1),this), tilemap_mapper_delegate(FUNC(k007342_device::k007342_scan),this), 8, 8, 64, 32);
1883
1884   k007342->ram = auto_alloc_array(machine(), UINT8, 0x2000);
1885   k007342->scroll_ram = auto_alloc_array(machine(), UINT8, 0x0200);
1886
1887   k007342->colorram_0 = &k007342->ram[0x0000];
1888   k007342->colorram_1 = &k007342->ram[0x1000];
1889   k007342->videoram_0 = &k007342->ram[0x0800];
1890   k007342->videoram_1 = &k007342->ram[0x1800];
1891
1892   k007342->tilemap[0]->set_transparent_pen(0);
1893   k007342->tilemap[1]->set_transparent_pen(0);
1894
1895   save_pointer(NAME(k007342->ram), 0x2000);
1896   save_pointer(NAME(k007342->scroll_ram), 0x0200);
1897   save_item(NAME(k007342->int_enabled));
1898   save_item(NAME(k007342->flipscreen));
1899   save_item(NAME(k007342->scrollx));
1900   save_item(NAME(k007342->scrolly));
1901   save_item(NAME(k007342->regs));
1900   save_pointer(NAME(m_ram), 0x200);
1901   save_item(NAME(m_flipscreen));   // current one uses 7342 one
1902   save_item(NAME(m_regs)); // current one uses 7342 ones
19021903}
19031904
19041905//-------------------------------------------------
19051906//  device_reset - device-specific reset
19061907//-------------------------------------------------
19071908
1908void k007342_device::device_reset()
1909void k007420_device::device_reset()
19091910{
1910   k007342_state *k007342 = k007342_get_safe_token(this);
19111911   int i;
19121912
1913   k007342->int_enabled = 0;
1914   k007342->flipscreen = 0;
1915   k007342->scrollx[0] = 0;
1916   k007342->scrollx[1] = 0;
1917   k007342->scrolly[0] = 0;
1918   k007342->scrolly[1] = 0;
1919
1913   m_flipscreen = 0;
19201914   for (i = 0; i < 8; i++)
1921      k007342->regs[i] = 0;
1915      m_regs[i] = 0;
19221916}
19231917
1924
1925
1926/***************************************************************************/
1927/*                                                                         */
1928/*                                 007420                                  */
1929/*                                                                         */
1930/***************************************************************************/
1931
1932struct k007420_state
1933{
1934   UINT8        *ram;
1935
1936   int          banklimit;
1937   int          flipscreen;    // current code uses the 7342 flipscreen!!
1938   UINT8        regs[8];   // current code uses the 7342 regs!! (only [2])
1939
1940   k007420_callback callback;
1941};
1942
19431918/*****************************************************************************
1944    INLINE FUNCTIONS
1945*****************************************************************************/
1946
1947INLINE k007420_state *k007420_get_safe_token( device_t *device )
1948{
1949   assert(device != NULL);
1950   assert(device->type() == K007420);
1951
1952   return (k007420_state *)downcast<k007420_device *>(device)->token();
1953}
1954
1955INLINE const k007420_interface *k007420_get_interface( device_t *device )
1956{
1957   assert(device != NULL);
1958   assert((device->type() == K007420));
1959   return (const k007420_interface *) device->static_config();
1960}
1961
1962/*****************************************************************************
19631919    DEVICE HANDLERS
19641920*****************************************************************************/
19651921
1966READ8_DEVICE_HANDLER( k007420_r )
1922READ8_MEMBER( k007420_device::read )
19671923{
1968   k007420_state *k007420 = k007420_get_safe_token(device);
1969   return k007420->ram[offset];
1924   return m_ram[offset];
19701925}
19711926
1972WRITE8_DEVICE_HANDLER( k007420_w )
1927WRITE8_MEMBER( k007420_device::write )
19731928{
1974   k007420_state *k007420 = k007420_get_safe_token(device);
1975   k007420->ram[offset] = data;
1929   m_ram[offset] = data;
19761930}
19771931
19781932/*
r24078r24079
19951949 *   7  | xxxxxxxx | unused
19961950 */
19971951
1998void k007420_sprites_draw( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx )
1952void k007420_device::sprites_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx )
19991953{
2000   k007420_state *k007420 = k007420_get_safe_token(device);
20011954   int offs;
2002   int codemask = k007420->banklimit;
2003   int bankmask = ~k007420->banklimit;
1955   int codemask = m_banklimit;
1956   int bankmask = ~m_banklimit;
20041957
20051958   for (offs = K007420_SPRITERAM_SIZE - 8; offs >= 0; offs -= 8)
20061959   {
r24078r24079
20081961      static const int xoffset[4] = { 0, 1, 4, 5 };
20091962      static const int yoffset[4] = { 0, 2, 8, 10 };
20101963
2011      code = k007420->ram[offs + 1];
2012      color = k007420->ram[offs + 2];
2013      ox = k007420->ram[offs + 3] - ((k007420->ram[offs + 4] & 0x80) << 1);
2014      oy = 256 - k007420->ram[offs + 0];
2015      flipx = k007420->ram[offs + 4] & 0x04;
2016      flipy = k007420->ram[offs + 4] & 0x08;
1964      code = m_ram[offs + 1];
1965      color = m_ram[offs + 2];
1966      ox = m_ram[offs + 3] - ((m_ram[offs + 4] & 0x80) << 1);
1967      oy = 256 - m_ram[offs + 0];
1968      flipx = m_ram[offs + 4] & 0x04;
1969      flipy = m_ram[offs + 4] & 0x08;
20171970
2018      k007420->callback(device->machine(), &code, &color);
1971      m_callback(machine(), &code, &color);
20191972
20201973      bank = code & bankmask;
20211974      code &= codemask;
20221975
20231976      /* 0x080 = normal scale, 0x040 = double size, 0x100 half size */
2024      zoom = k007420->ram[offs + 5] | ((k007420->ram[offs + 4] & 0x03) << 8);
1977      zoom = m_ram[offs + 5] | ((m_ram[offs + 4] & 0x03) << 8);
20251978      if (!zoom)
20261979         continue;
20271980      zoom = 0x10000 * 128 / zoom;
20281981
2029      switch (k007420->ram[offs + 4] & 0x70)
1982      switch (m_ram[offs + 4] & 0x70)
20301983      {
20311984         case 0x30: w = h = 1; break;
20321985         case 0x20: w = 2; h = 1; code &= (~1); break;
r24078r24079
20341987         case 0x00: w = h = 2; code &= (~3); break;
20351988         case 0x40: w = h = 4; code &= (~3); break;
20361989         default: w = 1; h = 1;
2037//logerror("Unknown sprite size %02x\n",(k007420->ram[offs + 4] & 0x70) >> 4);
1990//logerror("Unknown sprite size %02x\n",(m_ram[offs + 4] & 0x70) >> 4);
20381991      }
20391992
2040      if (k007420->flipscreen)
1993      if (m_flipscreen)
20411994      {
20421995         ox = 256 - ox - ((zoom * w + (1 << 12)) >> 13);
20431996         oy = 256 - oy - ((zoom * h + (1 << 12)) >> 13);
r24078r24079
20792032                  flipx,flipy,
20802033                  sx,sy,0);
20812034
2082               if (k007420->regs[2] & 0x80)
2035               if (m_regs[2] & 0x80)
20832036                  drawgfx_transpen(bitmap,cliprect,gfx,
20842037                     c,
20852038                     color,
r24078r24079
21242077                  sx,sy,
21252078                  (zw << 16) / 8,(zh << 16) / 8,0);
21262079
2127               if (k007420->regs[2] & 0x80)
2080               if (m_regs[2] & 0x80)
21282081                  drawgfxzoom_transpen(bitmap,cliprect,gfx,
21292082                     c,
21302083                     color,
r24078r24079
21392092   {
21402093      static int current_sprite = 0;
21412094
2142      if (machine.input().code_pressed_once(KEYCODE_Z)) current_sprite = (current_sprite+1) & ((K007420_SPRITERAM_SIZE/8)-1);
2143      if (machine.input().code_pressed_once(KEYCODE_X)) current_sprite = (current_sprite-1) & ((K007420_SPRITERAM_SIZE/8)-1);
2095      if (machine().input().code_pressed_once(KEYCODE_Z)) current_sprite = (current_sprite+1) & ((K007420_SPRITERAM_SIZE/8)-1);
2096      if (machine().input().code_pressed_once(KEYCODE_X)) current_sprite = (current_sprite-1) & ((K007420_SPRITERAM_SIZE/8)-1);
21442097
21452098      popmessage("%02x:%02x %02x %02x %02x %02x %02x %02x %02x", current_sprite,
2146         k007420->ram[(current_sprite*8)+0], k007420->ram[(current_sprite*8)+1],
2147         k007420->ram[(current_sprite*8)+2], k007420->ram[(current_sprite*8)+3],
2148         k007420->ram[(current_sprite*8)+4], k007420->ram[(current_sprite*8)+5],
2149         k007420->ram[(current_sprite*8)+6], k007420->ram[(current_sprite*8)+7]);
2099         m_ram[(current_sprite*8)+0], m_ram[(current_sprite*8)+1],
2100         m_ram[(current_sprite*8)+2], m_ram[(current_sprite*8)+3],
2101         m_ram[(current_sprite*8)+4], m_ram[(current_sprite*8)+5],
2102         m_ram[(current_sprite*8)+6], m_ram[(current_sprite*8)+7]);
21502103   }
21512104#endif
21522105}
21532106
2154/*****************************************************************************
2155    DEVICE INTERFACE
2156*****************************************************************************/
21572107
2158static DEVICE_START( k007420 )
2159{
2160   k007420_state *k007420 = k007420_get_safe_token(device);
2161   const k007420_interface *intf = k007420_get_interface(device);
2108/***************************************************************************/
2109/*                                                                         */
2110/*                                 052109                                  */
2111/*                                                                         */
2112/***************************************************************************/
21622113
2163   k007420->callback = intf->callback;
2164   k007420->banklimit = intf->banklimit;
2114const device_type K052109 = &device_creator<k052109_device>;
21652115
2166   k007420->ram = auto_alloc_array(device->machine(), UINT8, 0x200);
2116k052109_device::k052109_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
2117   : device_t(mconfig, K052109, "Konami 052109", tag, owner, clock, "k052109", __FILE__),
2118   m_ram(NULL),
2119   m_videoram_F(NULL),
2120   m_videoram_A(NULL),
2121   m_videoram_B(NULL),
2122   m_videoram2_F(NULL),
2123   m_videoram2_A(NULL),
2124   m_videoram2_B(NULL),
2125   m_colorram_F(NULL),
2126   m_colorram_A(NULL),
2127   m_colorram_B(NULL),
21672128
2168   device->save_pointer(NAME(k007420->ram), 0x200);
2169   device->save_item(NAME(k007420->flipscreen));   // current one uses 7342 one
2170   device->save_item(NAME(k007420->regs)); // current one uses 7342 ones
2171}
2172
2173static DEVICE_RESET( k007420 )
2129   //m_tilemap[3],
2130   m_tileflip_enable(0),
2131   //m_charrombank[4],
2132   //m_charrombank_2[4],
2133   m_has_extra_video_ram(0),
2134   m_rmrd_line(0),
2135   m_irq_enabled(0),
2136   //m_dx[3], m_dy[3],
2137   m_romsubbank(0),
2138   m_scrollctrl(0)
21742139{
2175   k007420_state *k007420 = k007420_get_safe_token(device);
2176   int i;
2177
2178   k007420->flipscreen = 0;
2179   for (i = 0; i < 8; i++)
2180      k007420->regs[i] = 0;
21812140}
21822141
2183
2184const device_type K007420 = &device_creator<k007420_device>;
2185
2186k007420_device::k007420_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
2187   : device_t(mconfig, K007420, "Konami 007420", tag, owner, clock, "k007420", __FILE__)
2188{
2189   m_token = global_alloc_clear(k007420_state);
2190}
2191
21922142//-------------------------------------------------
21932143//  device_config_complete - perform any
21942144//  operations now that the configuration is
21952145//  complete
21962146//-------------------------------------------------
21972147
2198void k007420_device::device_config_complete()
2148void k052109_device::device_config_complete()
21992149{
2150   // inherit a copy of the static data
2151   const k052109_interface *intf = reinterpret_cast<const k052109_interface *>(static_config());
2152   if (intf != NULL)
2153   *static_cast<k052109_interface *>(this) = *intf;
2154   
2155   // or initialize to defaults if none provided
2156   else
2157   {
2158      m_gfx_memory_region = "";
2159      m_gfx_num = 0;
2160      m_plane_order = 0;
2161      m_deinterleave = 0;
2162      m_callback = NULL;
2163   }
22002164}
22012165
22022166//-------------------------------------------------
22032167//  device_start - device-specific startup
22042168//-------------------------------------------------
22052169
2206void k007420_device::device_start()
2170void k052109_device::device_start()
22072171{
2208   DEVICE_START_NAME( k007420 )(this);
2209}
2172   UINT32 total;
2173   static const gfx_layout charlayout =
2174   {
2175      8,8,
2176      0,
2177      4,
2178      { 24, 16, 8, 0 },
2179      { 0, 1, 2, 3, 4, 5, 6, 7 },
2180      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
2181      32*8
2182   };
2183   static const gfx_layout charlayout_gradius3 =
2184   {
2185      8,8,
2186      0,
2187      4,
2188      { 0, 1, 2, 3 },
2189      { XOR(0)*4, XOR(1)*4, XOR(2)*4, XOR(3)*4, XOR(4)*4, XOR(5)*4, XOR(6)*4, XOR(7)*4 },
2190      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
2191      32*8
2192   };
22102193
2211//-------------------------------------------------
2212//  device_reset - device-specific reset
2213//-------------------------------------------------
22142194
2215void k007420_device::device_reset()
2216{
2217   DEVICE_RESET_NAME( k007420 )(this);
2218}
2195   /* decode the graphics */
2196   switch (m_plane_order)
2197   {
2198   case NORMAL_PLANE_ORDER:
2199      total = machine().root_device().memregion(m_gfx_memory_region)->bytes() / 32;
2200      decode_gfx(machine(), m_gfx_num, machine().root_device().memregion(m_gfx_memory_region)->base(), total, &charlayout, 4);
2201      break;
22192202
2220/***************************************************************************/
2221/*                                                                         */
2222/*                                 052109                                  */
2223/*                                                                         */
2224/***************************************************************************/
2203   case GRADIUS3_PLANE_ORDER:
2204      total = 0x1000;
2205      decode_gfx(machine(), m_gfx_num, machine().root_device().memregion(m_gfx_memory_region)->base(), total, &charlayout_gradius3, 4);
2206      break;
22252207
2226struct k052109_state
2227{
2228   UINT8    *ram;
2229   UINT8    *videoram_F;
2230   UINT8    *videoram_A;
2231   UINT8    *videoram_B;
2232   UINT8    *videoram2_F;
2233   UINT8    *videoram2_A;
2234   UINT8    *videoram2_B;
2235   UINT8    *colorram_F;
2236   UINT8    *colorram_A;
2237   UINT8    *colorram_B;
2208   default:
2209      fatalerror("Unsupported plane_order\n");
2210   }
22382211
2239   tilemap_t  *tilemap[3];
2240   int      tileflip_enable, gfxnum;
2241   UINT8    charrombank[4];
2242   UINT8    charrombank_2[4];
2243   UINT8    has_extra_video_ram;
2244   INT32    rmrd_line;
2245   UINT8    irq_enabled;
2246   INT32    dx[3], dy[3];
2247   UINT8    romsubbank, scrollctrl;
2212   /* deinterleave the graphics, if needed */
2213   deinterleave_gfx(machine(), m_gfx_memory_region, m_deinterleave);
22482214
2249   k052109_callback callback;
2215   m_tilemap[0] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k052109_device::get_tile_info0),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
2216   m_tilemap[1] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k052109_device::get_tile_info1),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
2217   m_tilemap[2] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k052109_device::get_tile_info2),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
22502218
2251   const char *memory_region;
2252};
2219   m_ram = auto_alloc_array_clear(machine(), UINT8, 0x6000);
22532220
2221   m_colorram_F = &m_ram[0x0000];
2222   m_colorram_A = &m_ram[0x0800];
2223   m_colorram_B = &m_ram[0x1000];
2224   m_videoram_F = &m_ram[0x2000];
2225   m_videoram_A = &m_ram[0x2800];
2226   m_videoram_B = &m_ram[0x3000];
2227   m_videoram2_F = &m_ram[0x4000];
2228   m_videoram2_A = &m_ram[0x4800];
2229   m_videoram2_B = &m_ram[0x5000];
22542230
2255/*****************************************************************************
2256    INLINE FUNCTIONS
2257*****************************************************************************/
2231   m_tilemap[0]->set_transparent_pen(0);
2232   m_tilemap[1]->set_transparent_pen(0);
2233   m_tilemap[2]->set_transparent_pen(0);
22582234
2259INLINE k052109_state *k052109_get_safe_token( device_t *device )
2260{
2261   assert(device != NULL);
2262   assert(device->type() == K052109);
2263
2264   return (k052109_state *)downcast<k052109_device *>(device)->token();
2235   save_pointer(NAME(m_ram), 0x6000);
2236   save_item(NAME(m_rmrd_line));
2237   save_item(NAME(m_romsubbank));
2238   save_item(NAME(m_scrollctrl));
2239   save_item(NAME(m_irq_enabled));
2240   save_item(NAME(m_charrombank));
2241   save_item(NAME(m_charrombank_2));
2242   save_item(NAME(m_dx));
2243   save_item(NAME(m_dy));
2244   save_item(NAME(m_has_extra_video_ram));
2245   machine().save().register_postload(save_prepost_delegate(FUNC(k052109_device::tileflip_reset), this));
22652246}
22662247
2267INLINE const k052109_interface *k052109_get_interface( device_t *device )
2248//-------------------------------------------------
2249//  device_reset - device-specific reset
2250//-------------------------------------------------
2251
2252void k052109_device::device_reset()
22682253{
2269   assert(device != NULL);
2270   assert((device->type() == K052109));
2271   return (const k052109_interface *) device->static_config();
2254   int i;
2255
2256   m_rmrd_line = CLEAR_LINE;
2257   m_irq_enabled = 0;
2258   m_romsubbank = 0;
2259   m_scrollctrl = 0;
2260
2261   m_has_extra_video_ram = 0;
2262
2263   for (i = 0; i < 3; i++)
2264      m_dx[i] = m_dy[i] = 0;
2265
2266   for (i = 0; i < 4; i++)
2267   {
2268      m_charrombank[i] = 0;
2269      m_charrombank_2[i] = 0;
2270   }
22722271}
22732272
22742273/*****************************************************************************
22752274    DEVICE HANDLERS
22762275*****************************************************************************/
22772276
2278READ8_DEVICE_HANDLER( k052109_r )
2277READ8_MEMBER( k052109_device::read )
22792278{
2280   k052109_state *k052109 = k052109_get_safe_token(device);
2281
2282   if (k052109->rmrd_line == CLEAR_LINE)
2279   if (m_rmrd_line == CLEAR_LINE)
22832280   {
22842281      if ((offset & 0x1fff) >= 0x1800)
22852282      {
r24078r24079
22972294//logerror("%04x: read from unknown 052109 address %04x\n",space.device().safe_pc(),offset);
22982295      }
22992296
2300      return k052109->ram[offset];
2297      return m_ram[offset];
23012298   }
23022299   else    /* Punk Shot and TMNT read from 0000-1fff, Aliens from 2000-3fff */
23032300   {
23042301      int code = (offset & 0x1fff) >> 5;
2305      int color = k052109->romsubbank;
2302      int color = m_romsubbank;
23062303      int flags = 0;
23072304      int priority = 0;
2308      int bank = k052109->charrombank[(color & 0x0c) >> 2] >> 2;   /* discard low bits (TMNT) */
2305      int bank = m_charrombank[(color & 0x0c) >> 2] >> 2;   /* discard low bits (TMNT) */
23092306      int addr;
23102307
2311      bank |= (k052109->charrombank_2[(color & 0x0c) >> 2] >> 2); // Surprise Attack uses this 2nd bank in the rom test
2308      bank |= (m_charrombank_2[(color & 0x0c) >> 2] >> 2); // Surprise Attack uses this 2nd bank in the rom test
23122309
2313   if (k052109->has_extra_video_ram)
2310   if (m_has_extra_video_ram)
23142311      code |= color << 8; /* kludge for X-Men */
23152312   else
2316      k052109->callback(space.machine(), 0, bank, &code, &color, &flags, &priority);
2313      m_callback(space.machine(), 0, bank, &code, &color, &flags, &priority);
23172314
23182315      addr = (code << 5) + (offset & 0x1f);
2319      addr &= space.machine().root_device().memregion(k052109->memory_region)->bytes() - 1;
2316      addr &= space.machine().root_device().memregion(m_gfx_memory_region)->bytes() - 1;
23202317
2321//      logerror("%04x: off = %04x sub = %02x (bnk = %x) adr = %06x\n", space.device().safe_pc(), offset, k052109->romsubbank, bank, addr);
2318//      logerror("%04x: off = %04x sub = %02x (bnk = %x) adr = %06x\n", space.device().safe_pc(), offset, m_romsubbank, bank, addr);
23222319
2323      return space.machine().root_device().memregion(k052109->memory_region)->base()[addr];
2320      return space.machine().root_device().memregion(m_gfx_memory_region)->base()[addr];
23242321   }
23252322}
23262323
2327WRITE8_DEVICE_HANDLER( k052109_w )
2324WRITE8_MEMBER( k052109_device::write )
23282325{
2329   k052109_state *k052109 = k052109_get_safe_token(device);
2330
23312326   if ((offset & 0x1fff) < 0x1800) /* tilemap RAM */
23322327   {
23332328      if (offset >= 0x4000)
2334         k052109->has_extra_video_ram = 1;  /* kludge for X-Men */
2329         m_has_extra_video_ram = 1;  /* kludge for X-Men */
23352330
2336      k052109->ram[offset] = data;
2337      k052109->tilemap[(offset & 0x1800) >> 11]->mark_tile_dirty(offset & 0x7ff);
2331      m_ram[offset] = data;
2332      m_tilemap[(offset & 0x1800) >> 11]->mark_tile_dirty(offset & 0x7ff);
23382333   }
23392334   else    /* control registers */
23402335   {
2341      k052109->ram[offset] = data;
2336      m_ram[offset] = data;
23422337
23432338      if (offset >= 0x180c && offset < 0x1834)
23442339      {   /* A y scroll */    }
r24078r24079
23462341      {   /* A x scroll */    }
23472342      else if (offset == 0x1c80)
23482343      {
2349         if (k052109->scrollctrl != data)
2344         if (m_scrollctrl != data)
23502345         {
23512346//popmessage("scrollcontrol = %02x", data);
23522347//logerror("%04x: rowscrollcontrol = %02x\n", space.device().safe_pc(), data);
2353            k052109->scrollctrl = data;
2348            m_scrollctrl = data;
23542349         }
23552350      }
23562351      else if (offset == 0x1d00)
r24078r24079
23582353//logerror("%04x: 052109 register 1d00 = %02x\n", space.device().safe_pc(), data);
23592354         /* bit 2 = irq enable */
23602355         /* the custom chip can also generate NMI and FIRQ, for use with a 6809 */
2361         k052109->irq_enabled = data & 0x04;
2356         m_irq_enabled = data & 0x04;
23622357      }
23632358      else if (offset == 0x1d80)
23642359      {
23652360         int dirty = 0;
23662361
2367         if (k052109->charrombank[0] != (data & 0x0f))
2362         if (m_charrombank[0] != (data & 0x0f))
23682363            dirty |= 1;
2369         if (k052109->charrombank[1] != ((data >> 4) & 0x0f))
2364         if (m_charrombank[1] != ((data >> 4) & 0x0f))
23702365            dirty |= 2;
23712366
23722367         if (dirty)
23732368         {
23742369            int i;
23752370
2376            k052109->charrombank[0] = data & 0x0f;
2377            k052109->charrombank[1] = (data >> 4) & 0x0f;
2371            m_charrombank[0] = data & 0x0f;
2372            m_charrombank[1] = (data >> 4) & 0x0f;
23782373
23792374            for (i = 0; i < 0x1800; i++)
23802375            {
2381               int bank = (k052109->ram[i]&0x0c) >> 2;
2376               int bank = (m_ram[i]&0x0c) >> 2;
23822377               if ((bank == 0 && (dirty & 1)) || (bank == 1 && (dirty & 2)))
23832378               {
2384                  k052109->tilemap[(i & 0x1800) >> 11]->mark_tile_dirty(i & 0x7ff);
2379                  m_tilemap[(i & 0x1800) >> 11]->mark_tile_dirty(i & 0x7ff);
23852380               }
23862381            }
23872382         }
r24078r24079
23892384      else if (offset == 0x1e00 || offset == 0x3e00) // Surprise Attack uses offset 0x3e00
23902385      {
23912386//logerror("%04x: 052109 register 1e00 = %02x\n",space.device().safe_pc(),data);
2392         k052109->romsubbank = data;
2387         m_romsubbank = data;
23932388      }
23942389      else if (offset == 0x1e80)
23952390      {
23962391//if ((data & 0xfe)) logerror("%04x: 052109 register 1e80 = %02x\n",space.device().safe_pc(),data);
2397         k052109->tilemap[0]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2398         k052109->tilemap[1]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2399         k052109->tilemap[2]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2400         if (k052109->tileflip_enable != ((data & 0x06) >> 1))
2392         m_tilemap[0]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2393         m_tilemap[1]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2394         m_tilemap[2]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2395         if (m_tileflip_enable != ((data & 0x06) >> 1))
24012396         {
2402            k052109->tileflip_enable = ((data & 0x06) >> 1);
2397            m_tileflip_enable = ((data & 0x06) >> 1);
24032398
2404            k052109->tilemap[0]->mark_all_dirty();
2405            k052109->tilemap[1]->mark_all_dirty();
2406            k052109->tilemap[2]->mark_all_dirty();
2399            m_tilemap[0]->mark_all_dirty();
2400            m_tilemap[1]->mark_all_dirty();
2401            m_tilemap[2]->mark_all_dirty();
24072402         }
24082403      }
24092404      else if (offset == 0x1f00)
24102405      {
24112406         int dirty = 0;
24122407
2413         if (k052109->charrombank[2] != (data & 0x0f))
2408         if (m_charrombank[2] != (data & 0x0f))
24142409            dirty |= 1;
24152410
2416         if (k052109->charrombank[3] != ((data >> 4) & 0x0f))
2411         if (m_charrombank[3] != ((data >> 4) & 0x0f))
24172412            dirty |= 2;
24182413
24192414         if (dirty)
24202415         {
24212416            int i;
24222417
2423            k052109->charrombank[2] = data & 0x0f;
2424            k052109->charrombank[3] = (data >> 4) & 0x0f;
2418            m_charrombank[2] = data & 0x0f;
2419            m_charrombank[3] = (data >> 4) & 0x0f;
24252420
24262421            for (i = 0; i < 0x1800; i++)
24272422            {
2428               int bank = (k052109->ram[i] & 0x0c) >> 2;
2423               int bank = (m_ram[i] & 0x0c) >> 2;
24292424               if ((bank == 2 && (dirty & 1)) || (bank == 3 && (dirty & 2)))
2430                  k052109->tilemap[(i & 0x1800) >> 11]->mark_tile_dirty(i & 0x7ff);
2425                  m_tilemap[(i & 0x1800) >> 11]->mark_tile_dirty(i & 0x7ff);
24312426            }
24322427         }
24332428      }
r24078r24079
24382433      else if (offset == 0x3d80) // Surprise Attack uses offset 0x3d80 in rom test
24392434      {
24402435         // mirroring this write, breaks Surprise Attack in game tilemaps
2441         k052109->charrombank_2[0] = data & 0x0f;
2442         k052109->charrombank_2[1] = (data >> 4) & 0x0f;
2436         m_charrombank_2[0] = data & 0x0f;
2437         m_charrombank_2[1] = (data >> 4) & 0x0f;
24432438      }
24442439      else if (offset == 0x3f00) // Surprise Attack uses offset 0x3f00 in rom test
24452440      {
24462441         // mirroring this write, breaks Surprise Attack in game tilemaps
2447         k052109->charrombank_2[2] = data & 0x0f;
2448         k052109->charrombank_2[3] = (data >> 4) & 0x0f;
2442         m_charrombank_2[2] = data & 0x0f;
2443         m_charrombank_2[3] = (data >> 4) & 0x0f;
24492444      }
24502445//      else
24512446//          logerror("%04x: write %02x to unknown 052109 address %04x\n",space.device().safe_pc(),data,offset);
24522447   }
24532448}
24542449
2455READ16_DEVICE_HANDLER( k052109_word_r )
2450READ16_MEMBER( k052109_device::word_r )
24562451{
2457   return k052109_r(device, space, offset + 0x2000) | (k052109_r(device, space, offset) << 8);
2452   return read(space, offset + 0x2000) | (read(space, offset) << 8);
24582453}
24592454
2460WRITE16_DEVICE_HANDLER( k052109_word_w )
2455WRITE16_MEMBER( k052109_device::word_w )
24612456{
24622457   if (ACCESSING_BITS_8_15)
2463      k052109_w(device, space, offset, (data >> 8) & 0xff);
2458      write(space, offset, (data >> 8) & 0xff);
24642459   if (ACCESSING_BITS_0_7)
2465      k052109_w(device, space, offset + 0x2000, data & 0xff);
2460      write(space, offset + 0x2000, data & 0xff);
24662461}
24672462
2468READ16_DEVICE_HANDLER( k052109_lsb_r )
2463READ16_MEMBER( k052109_device::lsb_r )
24692464{
2470   return k052109_r(device, space, offset);
2465   return read(space, offset);
24712466}
24722467
2473WRITE16_DEVICE_HANDLER( k052109_lsb_w )
2468WRITE16_MEMBER( k052109_device::lsb_w )
24742469{
24752470   if(ACCESSING_BITS_0_7)
2476      k052109_w(device, space, offset, data & 0xff);
2471      write(space, offset, data & 0xff);
24772472}
24782473
2479void k052109_set_rmrd_line( device_t *device, int state )
2474void k052109_device::set_rmrd_line( int state )
24802475{
2481   k052109_state *k052109 = k052109_get_safe_token(device);
2482   k052109->rmrd_line = state;
2476   m_rmrd_line = state;
24832477}
24842478
2485int k052109_get_rmrd_line(device_t *device )
2479int k052109_device::get_rmrd_line( )
24862480{
2487   k052109_state *k052109 = k052109_get_safe_token(device);
2488   return k052109->rmrd_line;
2481   return m_rmrd_line;
24892482}
24902483
24912484
2492void k052109_tilemap_mark_dirty( device_t *device, int tmap_num )
2485void k052109_device::tilemap_mark_dirty( int tmap_num )
24932486{
2494   k052109_state *k052109 = k052109_get_safe_token(device);
2495   k052109->tilemap[tmap_num]->mark_all_dirty();
2487   m_tilemap[tmap_num]->mark_all_dirty();
24962488}
24972489
24982490
2499void k052109_tilemap_update( device_t *device )
2491void k052109_device::tilemap_update( )
25002492{
2501   k052109_state *k052109 = k052109_get_safe_token(device);
25022493   int xscroll, yscroll, offs;
25032494
25042495#if 0
25052496{
25062497popmessage("%x %x %x %x",
2507   k052109->charrombank[0],
2508   k052109->charrombank[1],
2509   k052109->charrombank[2],
2510   k052109->charrombank[3]);
2498   m_charrombank[0],
2499   m_charrombank[1],
2500   m_charrombank[2],
2501   m_charrombank[3]);
25112502}
25122503#endif
25132504
2514   if ((k052109->scrollctrl & 0x03) == 0x02)
2505   if ((m_scrollctrl & 0x03) == 0x02)
25152506   {
2516      UINT8 *scrollram = &k052109->ram[0x1a00];
2507      UINT8 *scrollram = &m_ram[0x1a00];
25172508
2518      k052109->tilemap[1]->set_scroll_rows(256);
2519      k052109->tilemap[1]->set_scroll_cols(1);
2520      yscroll = k052109->ram[0x180c];
2521      k052109->tilemap[1]->set_scrolly(0, yscroll + k052109->dy[1]);
2509      m_tilemap[1]->set_scroll_rows(256);
2510      m_tilemap[1]->set_scroll_cols(1);
2511      yscroll = m_ram[0x180c];
2512      m_tilemap[1]->set_scrolly(0, yscroll + m_dy[1]);
25222513      for (offs = 0; offs < 256; offs++)
25232514      {
25242515         xscroll = scrollram[2 * (offs & 0xfff8) + 0] + 256 * scrollram[2 * (offs & 0xfff8) + 1];
25252516         xscroll -= 6;
2526         k052109->tilemap[1]->set_scrollx((offs + yscroll) & 0xff, xscroll + k052109->dx[1]);
2517         m_tilemap[1]->set_scrollx((offs + yscroll) & 0xff, xscroll + m_dx[1]);
25272518      }
25282519   }
2529   else if ((k052109->scrollctrl & 0x03) == 0x03)
2520   else if ((m_scrollctrl & 0x03) == 0x03)
25302521   {
2531      UINT8 *scrollram = &k052109->ram[0x1a00];
2522      UINT8 *scrollram = &m_ram[0x1a00];
25322523
2533      k052109->tilemap[1]->set_scroll_rows(256);
2534      k052109->tilemap[1]->set_scroll_cols(1);
2535      yscroll = k052109->ram[0x180c];
2536      k052109->tilemap[1]->set_scrolly(0, yscroll + k052109->dy[1]);
2524      m_tilemap[1]->set_scroll_rows(256);
2525      m_tilemap[1]->set_scroll_cols(1);
2526      yscroll = m_ram[0x180c];
2527      m_tilemap[1]->set_scrolly(0, yscroll + m_dy[1]);
25372528      for (offs = 0; offs < 256; offs++)
25382529      {
25392530         xscroll = scrollram[2 * offs + 0] + 256 * scrollram[2 * offs + 1];
25402531         xscroll -= 6;
2541         k052109->tilemap[1]->set_scrollx((offs + yscroll) & 0xff, xscroll + k052109->dx[1]);
2532         m_tilemap[1]->set_scrollx((offs + yscroll) & 0xff, xscroll + m_dx[1]);
25422533      }
25432534   }
2544   else if ((k052109->scrollctrl & 0x04) == 0x04)
2535   else if ((m_scrollctrl & 0x04) == 0x04)
25452536   {
2546      UINT8 *scrollram = &k052109->ram[0x1800];
2537      UINT8 *scrollram = &m_ram[0x1800];
25472538
2548      k052109->tilemap[1]->set_scroll_rows(1);
2549      k052109->tilemap[1]->set_scroll_cols(512);
2550      xscroll = k052109->ram[0x1a00] + 256 * k052109->ram[0x1a01];
2539      m_tilemap[1]->set_scroll_rows(1);
2540      m_tilemap[1]->set_scroll_cols(512);
2541      xscroll = m_ram[0x1a00] + 256 * m_ram[0x1a01];
25512542      xscroll -= 6;
2552      k052109->tilemap[1]->set_scrollx(0, xscroll + k052109->dx[1]);
2543      m_tilemap[1]->set_scrollx(0, xscroll + m_dx[1]);
25532544      for (offs = 0; offs < 512; offs++)
25542545      {
25552546         yscroll = scrollram[offs / 8];
2556         k052109->tilemap[1]->set_scrolly((offs + xscroll) & 0x1ff, yscroll + k052109->dy[1]);
2547         m_tilemap[1]->set_scrolly((offs + xscroll) & 0x1ff, yscroll + m_dy[1]);
25572548      }
25582549   }
25592550   else
25602551   {
2561      UINT8 *scrollram = &k052109->ram[0x1a00];
2552      UINT8 *scrollram = &m_ram[0x1a00];
25622553
2563      k052109->tilemap[1]->set_scroll_rows(1);
2564      k052109->tilemap[1]->set_scroll_cols(1);
2554      m_tilemap[1]->set_scroll_rows(1);
2555      m_tilemap[1]->set_scroll_cols(1);
25652556      xscroll = scrollram[0] + 256 * scrollram[1];
25662557      xscroll -= 6;
2567      yscroll = k052109->ram[0x180c];
2568      k052109->tilemap[1]->set_scrollx(0, xscroll + k052109->dx[1]);
2569      k052109->tilemap[1]->set_scrolly(0, yscroll + k052109->dy[1]);
2558      yscroll = m_ram[0x180c];
2559      m_tilemap[1]->set_scrollx(0, xscroll + m_dx[1]);
2560      m_tilemap[1]->set_scrolly(0, yscroll + m_dy[1]);
25702561   }
25712562
2572   if ((k052109->scrollctrl & 0x18) == 0x10)
2563   if ((m_scrollctrl & 0x18) == 0x10)
25732564   {
2574      UINT8 *scrollram = &k052109->ram[0x3a00];
2565      UINT8 *scrollram = &m_ram[0x3a00];
25752566
2576      k052109->tilemap[2]->set_scroll_rows(256);
2577      k052109->tilemap[2]->set_scroll_cols(1);
2578      yscroll = k052109->ram[0x380c];
2579      k052109->tilemap[2]->set_scrolly(0, yscroll + k052109->dy[2]);
2567      m_tilemap[2]->set_scroll_rows(256);
2568      m_tilemap[2]->set_scroll_cols(1);
2569      yscroll = m_ram[0x380c];
2570      m_tilemap[2]->set_scrolly(0, yscroll + m_dy[2]);
25802571      for (offs = 0; offs < 256; offs++)
25812572      {
25822573         xscroll = scrollram[2 * (offs & 0xfff8) + 0] + 256 * scrollram[2 * (offs & 0xfff8) + 1];
25832574         xscroll -= 6;
2584         k052109->tilemap[2]->set_scrollx((offs + yscroll) & 0xff, xscroll + k052109->dx[2]);
2575         m_tilemap[2]->set_scrollx((offs + yscroll) & 0xff, xscroll + m_dx[2]);
25852576      }
25862577   }
2587   else if ((k052109->scrollctrl & 0x18) == 0x18)
2578   else if ((m_scrollctrl & 0x18) == 0x18)
25882579   {
2589      UINT8 *scrollram = &k052109->ram[0x3a00];
2580      UINT8 *scrollram = &m_ram[0x3a00];
25902581
2591      k052109->tilemap[2]->set_scroll_rows(256);
2592      k052109->tilemap[2]->set_scroll_cols(1);
2593      yscroll = k052109->ram[0x380c];
2594      k052109->tilemap[2]->set_scrolly(0, yscroll + k052109->dy[2]);
2582      m_tilemap[2]->set_scroll_rows(256);
2583      m_tilemap[2]->set_scroll_cols(1);
2584      yscroll = m_ram[0x380c];
2585      m_tilemap[2]->set_scrolly(0, yscroll + m_dy[2]);
25952586      for (offs = 0; offs < 256; offs++)
25962587      {
25972588         xscroll = scrollram[2 * offs + 0] + 256 * scrollram[2 * offs + 1];
25982589         xscroll -= 6;
2599         k052109->tilemap[2]->set_scrollx((offs + yscroll) & 0xff, xscroll + k052109->dx[2]);
2590         m_tilemap[2]->set_scrollx((offs + yscroll) & 0xff, xscroll + m_dx[2]);
26002591      }
26012592   }
2602   else if ((k052109->scrollctrl & 0x20) == 0x20)
2593   else if ((m_scrollctrl & 0x20) == 0x20)
26032594   {
2604      UINT8 *scrollram = &k052109->ram[0x3800];
2595      UINT8 *scrollram = &m_ram[0x3800];
26052596
2606      k052109->tilemap[2]->set_scroll_rows(1);
2607      k052109->tilemap[2]->set_scroll_cols(512);
2608      xscroll = k052109->ram[0x3a00] + 256 * k052109->ram[0x3a01];
2597      m_tilemap[2]->set_scroll_rows(1);
2598      m_tilemap[2]->set_scroll_cols(512);
2599      xscroll = m_ram[0x3a00] + 256 * m_ram[0x3a01];
26092600      xscroll -= 6;
2610      k052109->tilemap[2]->set_scrollx(0, xscroll + k052109->dx[2]);
2601      m_tilemap[2]->set_scrollx(0, xscroll + m_dx[2]);
26112602      for (offs = 0; offs < 512; offs++)
26122603      {
26132604         yscroll = scrollram[offs / 8];
2614         k052109->tilemap[2]->set_scrolly((offs + xscroll) & 0x1ff, yscroll + k052109->dy[2]);
2605         m_tilemap[2]->set_scrolly((offs + xscroll) & 0x1ff, yscroll + m_dy[2]);
26152606      }
26162607   }
26172608   else
26182609   {
2619      UINT8 *scrollram = &k052109->ram[0x3a00];
2610      UINT8 *scrollram = &m_ram[0x3a00];
26202611
2621      k052109->tilemap[2]->set_scroll_rows(1);
2622      k052109->tilemap[2]->set_scroll_cols(1);
2612      m_tilemap[2]->set_scroll_rows(1);
2613      m_tilemap[2]->set_scroll_cols(1);
26232614      xscroll = scrollram[0] + 256 * scrollram[1];
26242615      xscroll -= 6;
2625      yscroll = k052109->ram[0x380c];
2626      k052109->tilemap[2]->set_scrollx(0, xscroll + k052109->dx[2]);
2627      k052109->tilemap[2]->set_scrolly(0, yscroll + k052109->dy[2]);
2616      yscroll = m_ram[0x380c];
2617      m_tilemap[2]->set_scrollx(0, xscroll + m_dx[2]);
2618      m_tilemap[2]->set_scrolly(0, yscroll + m_dy[2]);
26282619   }
26292620
26302621#if 0
2631if ((k052109->scrollctrl & 0x03) == 0x01 ||
2632      (k052109->scrollctrl & 0x18) == 0x08 ||
2633      ((k052109->scrollctrl & 0x04) && (k052109->scrollctrl & 0x03)) ||
2634      ((k052109->scrollctrl & 0x20) && (k052109->scrollctrl & 0x18)) ||
2635      (k052109->scrollctrl & 0xc0) != 0)
2636   popmessage("scrollcontrol = %02x", k052109->scrollctrl);
2622if ((m_scrollctrl & 0x03) == 0x01 ||
2623      (m_scrollctrl & 0x18) == 0x08 ||
2624      ((m_scrollctrl & 0x04) && (m_scrollctrl & 0x03)) ||
2625      ((m_scrollctrl & 0x20) && (m_scrollctrl & 0x18)) ||
2626      (m_scrollctrl & 0xc0) != 0)
2627   popmessage("scrollcontrol = %02x", m_scrollctrl);
26372628
2638if (machine.input().code_pressed(KEYCODE_F))
2629if (machine().input().code_pressed(KEYCODE_F))
26392630{
26402631   FILE *fp;
26412632   fp=fopen("TILE.DMP", "w+b");
26422633   if (fp)
26432634   {
2644      fwrite(k052109->ram, 0x6000, 1, fp);
2635      fwrite(m_ram, 0x6000, 1, fp);
26452636      popmessage("saved");
26462637      fclose(fp);
26472638   }
r24078r24079
26492640#endif
26502641}
26512642
2652void k052109_tilemap_draw( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, int tmap_num, UINT32 flags, UINT8 priority )
2643void k052109_device::tilemap_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, int tmap_num, UINT32 flags, UINT8 priority )
26532644{
2654   k052109_state *k052109 = k052109_get_safe_token(device);
2655   k052109->tilemap[tmap_num]->draw(bitmap, cliprect, flags, priority);
2645   m_tilemap[tmap_num]->draw(bitmap, cliprect, flags, priority);
26562646}
26572647
2658int k052109_is_irq_enabled( device_t *device )
2648int k052109_device::is_irq_enabled( )
26592649{
2660   k052109_state *k052109 = k052109_get_safe_token(device);
2661
2662   return k052109->irq_enabled;
2650   return m_irq_enabled;
26632651}
26642652
2665void k052109_set_layer_offsets( device_t *device, int layer, int dx, int dy )
2653void k052109_device::set_layer_offsets( int layer, int dx, int dy )
26662654{
2667   k052109_state *k052109 = k052109_get_safe_token(device);
2668
2669   k052109->dx[layer] = dx;
2670   k052109->dy[layer] = dy;
2655   m_dx[layer] = dx;
2656   m_dy[layer] = dy;
26712657}
26722658
26732659
r24078r24079
26882674  color RAM    ------xx  depends on external connections (usually banking, flip)
26892675*/
26902676
2691INLINE void k052109_get_tile_info( running_machine &machine, device_t *device, tile_data &tileinfo, int tile_index, int layer, UINT8 *cram, UINT8 *vram1, UINT8 *vram2 )
2677void k052109_device::get_tile_info( tile_data &tileinfo, int tile_index, int layer, UINT8 *cram, UINT8 *vram1, UINT8 *vram2 )
26922678{
2693   k052109_state *k052109 = k052109_get_safe_token(device);
26942679   int flipy = 0;
26952680   int code = vram1[tile_index] + 256 * vram2[tile_index];
26962681   int color = cram[tile_index];
26972682   int flags = 0;
26982683   int priority = 0;
2699   int bank = k052109->charrombank[(color & 0x0c) >> 2];
2700   if (k052109->has_extra_video_ram)
2684   int bank = m_charrombank[(color & 0x0c) >> 2];
2685   if (m_has_extra_video_ram)
27012686      bank = (color & 0x0c) >> 2; /* kludge for X-Men */
27022687
27032688   color = (color & 0xf3) | ((bank & 0x03) << 2);
r24078r24079
27052690
27062691   flipy = color & 0x02;
27072692
2708   k052109->callback(device->machine(), layer, bank, &code, &color, &flags, &priority);
2693   m_callback(machine(), layer, bank, &code, &color, &flags, &priority);
27092694
27102695   /* if the callback set flip X but it is not enabled, turn it off */
2711   if (!(k052109->tileflip_enable & 1))
2696   if (!(m_tileflip_enable & 1))
27122697      flags &= ~TILE_FLIPX;
27132698
27142699   /* if flip Y is enabled and the attribute but is set, turn it on */
2715   if (flipy && (k052109->tileflip_enable & 2))
2700   if (flipy && (m_tileflip_enable & 2))
27162701      flags |= TILE_FLIPY;
27172702
2718   SET_TILE_INFO(
2719         k052109->gfxnum,
2703   SET_TILE_INFO_MEMBER(
2704         m_gfx_num,
27202705         code,
27212706         color,
27222707         flags);
r24078r24079
27242709   tileinfo.category = priority;
27252710}
27262711
2727TILE_GET_INFO_MEMBER(k052109_device::k052109_get_tile_info0)
2712TILE_GET_INFO_MEMBER(k052109_device::get_tile_info0)
27282713{
2729   k052109_state *k052109 = k052109_get_safe_token(this);
2730   k052109_get_tile_info(machine(), this, tileinfo, tile_index, 0, k052109->colorram_F, k052109->videoram_F, k052109->videoram2_F);
2714   get_tile_info(tileinfo, tile_index, 0, m_colorram_F, m_videoram_F, m_videoram2_F);
27312715}
27322716
2733TILE_GET_INFO_MEMBER(k052109_device::k052109_get_tile_info1)
2717TILE_GET_INFO_MEMBER(k052109_device::get_tile_info1)
27342718{
2735   k052109_state *k052109 = k052109_get_safe_token(this);
2736   k052109_get_tile_info(machine(), this, tileinfo, tile_index, 1, k052109->colorram_A, k052109->videoram_A, k052109->videoram2_A);
2719   get_tile_info(tileinfo, tile_index, 1, m_colorram_A, m_videoram_A, m_videoram2_A);
27372720}
27382721
2739TILE_GET_INFO_MEMBER(k052109_device::k052109_get_tile_info2)
2722TILE_GET_INFO_MEMBER(k052109_device::get_tile_info2)
27402723{
2741   k052109_state *k052109 = k052109_get_safe_token(this);
2742   k052109_get_tile_info(machine(), this, tileinfo, tile_index, 2, k052109->colorram_B, k052109->videoram_B, k052109->videoram2_B);
2724   get_tile_info(tileinfo, tile_index, 2, m_colorram_B, m_videoram_B, m_videoram2_B);
27432725}
27442726
27452727
2746static void k052109_tileflip_reset(k052109_state *k052109)
2728void k052109_device::tileflip_reset()
27472729{
2748   int data = k052109->ram[0x1e80];
2749   k052109->tilemap[0]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2750   k052109->tilemap[1]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2751   k052109->tilemap[2]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2752   k052109->tileflip_enable = ((data & 0x06) >> 1);
2730   int data = m_ram[0x1e80];
2731   m_tilemap[0]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2732   m_tilemap[1]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2733   m_tilemap[2]->set_flip((data & 1) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
2734   m_tileflip_enable = ((data & 0x06) >> 1);
27532735}
27542736
2755const device_type K052109 = &device_creator<k052109_device>;
27562737
2757k052109_device::k052109_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
2758   : device_t(mconfig, K052109, "Konami 052109", tag, owner, clock, "k052109", __FILE__)
2738/***************************************************************************/
2739/*                                                                         */
2740/*                                 051960                                  */
2741/*                                                                         */
2742/***************************************************************************/
2743
2744const device_type K051960 = &device_creator<k051960_device>;
2745
2746k051960_device::k051960_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
2747   : device_t(mconfig, K051960, "Konami 051960", tag, owner, clock, "k051960", __FILE__),
2748   m_ram(NULL),
2749   m_gfx(NULL),
2750   //m_spriterombank[3],
2751   m_dx(0),
2752   m_dy(0),
2753   m_romoffset(0),
2754   m_spriteflip(0),
2755   m_readroms(0),
2756   m_irq_enabled(0),
2757   m_nmi_enabled(0),
2758   m_k051937_counter(0)
27592759{
2760   m_token = global_alloc_clear(k052109_state);
27612760}
27622761
27632762//-------------------------------------------------
r24078r24079
27662765//  complete
27672766//-------------------------------------------------
27682767
2769void k052109_device::device_config_complete()
2768void k051960_device::device_config_complete()
27702769{
2770   // inherit a copy of the static data
2771   const k051960_interface *intf = reinterpret_cast<const k051960_interface *>(static_config());
2772   if (intf != NULL)
2773   *static_cast<k051960_interface *>(this) = *intf;
2774   
2775   // or initialize to defaults if none provided
2776   else
2777   {
2778      m_gfx_memory_region = "";
2779      m_gfx_num = 0;
2780      m_plane_order = 0;
2781      m_deinterleave = 0;
2782      m_callback = NULL;
2783   }
27712784}
27722785
27732786//-------------------------------------------------
27742787//  device_start - device-specific startup
27752788//-------------------------------------------------
27762789
2777void k052109_device::device_start()
2790void k051960_device::device_start()
27782791{
2779   k052109_state *k052109 = k052109_get_safe_token(this);
2780   const k052109_interface *intf = k052109_get_interface(this);
27812792   UINT32 total;
2782   static const gfx_layout charlayout =
2793   static const gfx_layout spritelayout =
27832794   {
2784      8,8,
2795      16,16,
27852796      0,
27862797      4,
2798      { 0, 8, 16, 24 },
2799      { 0, 1, 2, 3, 4, 5, 6, 7,
2800            8*32+0, 8*32+1, 8*32+2, 8*32+3, 8*32+4, 8*32+5, 8*32+6, 8*32+7 },
2801      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
2802            16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
2803      128*8
2804   };
2805   static const gfx_layout spritelayout_reverse =
2806   {
2807      16,16,
2808      0,
2809      4,
27872810      { 24, 16, 8, 0 },
2788      { 0, 1, 2, 3, 4, 5, 6, 7 },
2789      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
2790      32*8
2811      { 0, 1, 2, 3, 4, 5, 6, 7,
2812            8*32+0, 8*32+1, 8*32+2, 8*32+3, 8*32+4, 8*32+5, 8*32+6, 8*32+7 },
2813      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
2814            16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
2815      128*8
27912816   };
2792   static const gfx_layout charlayout_gradius3 =
2817   static const gfx_layout spritelayout_gradius3 =
27932818   {
2794      8,8,
2819      16,16,
27952820      0,
27962821      4,
27972822      { 0, 1, 2, 3 },
2798      { XOR(0)*4, XOR(1)*4, XOR(2)*4, XOR(3)*4, XOR(4)*4, XOR(5)*4, XOR(6)*4, XOR(7)*4 },
2799      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
2800      32*8
2823      { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4,
2824         32*8+2*4, 32*8+3*4, 32*8+0*4, 32*8+1*4, 32*8+6*4, 32*8+7*4, 32*8+4*4, 32*8+5*4 },
2825      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
2826         64*8+0*32, 64*8+1*32, 64*8+2*32, 64*8+3*32, 64*8+4*32, 64*8+5*32, 64*8+6*32, 64*8+7*32 },
2827      128*8
28012828   };
28022829
2803
28042830   /* decode the graphics */
2805   switch (intf->plane_order)
2831   switch (m_plane_order)
28062832   {
28072833   case NORMAL_PLANE_ORDER:
2808      total = machine().root_device().memregion(intf->gfx_memory_region)->bytes() / 32;
2809      decode_gfx(machine(), intf->gfx_num, machine().root_device().memregion(intf->gfx_memory_region)->base(), total, &charlayout, 4);
2834      total = machine().root_device().memregion(m_gfx_memory_region)->bytes() / 128;
2835      decode_gfx(machine(), m_gfx_num, machine().root_device().memregion(m_gfx_memory_region)->base(), total, &spritelayout, 4);
28102836      break;
28112837
2838   case REVERSE_PLANE_ORDER:
2839      total = machine().root_device().memregion(m_gfx_memory_region)->bytes() / 128;
2840      decode_gfx(machine(), m_gfx_num, machine().root_device().memregion(m_gfx_memory_region)->base(), total, &spritelayout_reverse, 4);
2841      break;
2842
28122843   case GRADIUS3_PLANE_ORDER:
2813      total = 0x1000;
2814      decode_gfx(machine(), intf->gfx_num, machine().root_device().memregion(intf->gfx_memory_region)->base(), total, &charlayout_gradius3, 4);
2844      total = 0x4000;
2845      decode_gfx(machine(), m_gfx_num, machine().root_device().memregion(m_gfx_memory_region)->base(), total, &spritelayout_gradius3, 4);
28152846      break;
28162847
28172848   default:
2818      fatalerror("Unsupported plane_order\n");
2849      fatalerror("Unknown plane_order\n");
28192850   }
28202851
2852   if (VERBOSE && !(machine().config().m_video_attributes & VIDEO_HAS_SHADOWS))
2853      popmessage("driver should use VIDEO_HAS_SHADOWS");
2854
28212855   /* deinterleave the graphics, if needed */
2822   deinterleave_gfx(machine(), intf->gfx_memory_region, intf->deinterleave);
2856   deinterleave_gfx(machine(), m_gfx_memory_region, m_deinterleave);
28232857
2824   k052109->memory_region = intf->gfx_memory_region;
2825   k052109->gfxnum = intf->gfx_num;
2826   k052109->callback = intf->callback;
2858   m_gfx = machine().gfx[m_gfx_num];
2859   m_ram = auto_alloc_array_clear(machine(), UINT8, 0x400);
28272860
2828   k052109->tilemap[0] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k052109_device::k052109_get_tile_info0),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
2829   k052109->tilemap[1] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k052109_device::k052109_get_tile_info1),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
2830   k052109->tilemap[2] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(k052109_device::k052109_get_tile_info2),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
2861   save_item(NAME(m_romoffset));
2862   save_item(NAME(m_spriteflip));
2863   save_item(NAME(m_readroms));
2864   save_item(NAME(m_spriterombank));
2865   save_pointer(NAME(m_ram), 0x400);
2866   save_item(NAME(m_irq_enabled));
2867   save_item(NAME(m_nmi_enabled));
2868   save_item(NAME(m_dx));
2869   save_item(NAME(m_dy));
28312870
2832   k052109->ram = auto_alloc_array_clear(machine(), UINT8, 0x6000);
2833
2834   k052109->colorram_F = &k052109->ram[0x0000];
2835   k052109->colorram_A = &k052109->ram[0x0800];
2836   k052109->colorram_B = &k052109->ram[0x1000];
2837   k052109->videoram_F = &k052109->ram[0x2000];
2838   k052109->videoram_A = &k052109->ram[0x2800];
2839   k052109->videoram_B = &k052109->ram[0x3000];
2840   k052109->videoram2_F = &k052109->ram[0x4000];
2841   k052109->videoram2_A = &k052109->ram[0x4800];
2842   k052109->videoram2_B = &k052109->ram[0x5000];
2843
2844   k052109->tilemap[0]->set_transparent_pen(0);
2845   k052109->tilemap[1]->set_transparent_pen(0);
2846   k052109->tilemap[2]->set_transparent_pen(0);
2847
2848   save_pointer(NAME(k052109->ram), 0x6000);
2849   save_item(NAME(k052109->rmrd_line));
2850   save_item(NAME(k052109->romsubbank));
2851   save_item(NAME(k052109->scrollctrl));
2852   save_item(NAME(k052109->irq_enabled));
2853   save_item(NAME(k052109->charrombank));
2854   save_item(NAME(k052109->charrombank_2));
2855   save_item(NAME(k052109->dx));
2856   save_item(NAME(k052109->dy));
2857   save_item(NAME(k052109->has_extra_video_ram));
2858   machine().save().register_postload(save_prepost_delegate(FUNC(k052109_tileflip_reset), k052109));
2871   save_item(NAME(m_k051937_counter));
28592872}
28602873
28612874//-------------------------------------------------
28622875//  device_reset - device-specific reset
28632876//-------------------------------------------------
28642877
2865void k052109_device::device_reset()
2878void k051960_device::device_reset()
28662879{
2867   k052109_state *k052109 = k052109_get_safe_token(this);
2868   int i;
2880   
2881   m_dx = m_dy = 0;
2882   m_k051937_counter = 0;
28692883
2870   k052109->rmrd_line = CLEAR_LINE;
2871   k052109->irq_enabled = 0;
2872   k052109->romsubbank = 0;
2873   k052109->scrollctrl = 0;
2884   m_romoffset = 0;
2885   m_spriteflip = 0;
2886   m_readroms = 0;
2887   m_irq_enabled = 0;
2888   m_nmi_enabled = 0;
28742889
2875   k052109->has_extra_video_ram = 0;
2876
2877   for (i = 0; i < 3; i++)
2878      k052109->dx[i] = k052109->dy[i] = 0;
2879
2880   for (i = 0; i < 4; i++)
2881   {
2882      k052109->charrombank[i] = 0;
2883      k052109->charrombank_2[i] = 0;
2884   }
2890   m_spriterombank[0] = 0;
2891   m_spriterombank[1] = 0;
2892   m_spriterombank[2] = 0;
28852893}
28862894
28872895
2888
2889/***************************************************************************/
2890/*                                                                         */
2891/*                                 051960                                  */
2892/*                                                                         */
2893/***************************************************************************/
2894
2895struct k051960_state
2896{
2897   UINT8    *ram;
2898
2899   gfx_element *gfx;
2900
2901   UINT8    spriterombank[3];
2902   int      dx, dy;
2903   int      romoffset;
2904   int      spriteflip, readroms;
2905   int      irq_enabled, nmi_enabled;
2906
2907   int      k051937_counter;
2908
2909   k051960_callback callback;
2910
2911   const char *memory_region;
2912};
2913
2914
29152896/*****************************************************************************
2916    INLINE FUNCTIONS
2917*****************************************************************************/
2918
2919INLINE k051960_state *k051960_get_safe_token( device_t *device )
2920{
2921   assert(device != NULL);
2922   assert(device->type() == K051960);
2923
2924   return (k051960_state *)downcast<k051960_device *>(device)->token();
2925}
2926
2927INLINE const k051960_interface *k051960_get_interface( device_t *device )
2928{
2929   assert(device != NULL);
2930   assert((device->type() == K051960));
2931   return (const k051960_interface *) device->static_config();
2932}
2933
2934/*****************************************************************************
29352897    DEVICE HANDLERS
29362898*****************************************************************************/
29372899
2938static int k051960_fetchromdata( device_t *device, int byte )
2900int k051960_device::k051960_fetchromdata( int byte )
29392901{
2940   k051960_state *k051960 = k051960_get_safe_token(device);
29412902   int code, color, pri, shadow, off1, addr;
29422903
2943   addr = k051960->romoffset + (k051960->spriterombank[0] << 8) + ((k051960->spriterombank[1] & 0x03) << 16);
2904   addr = m_romoffset + (m_spriterombank[0] << 8) + ((m_spriterombank[1] & 0x03) << 16);
29442905   code = (addr & 0x3ffe0) >> 5;
29452906   off1 = addr & 0x1f;
2946   color = ((k051960->spriterombank[1] & 0xfc) >> 2) + ((k051960->spriterombank[2] & 0x03) << 6);
2907   color = ((m_spriterombank[1] & 0xfc) >> 2) + ((m_spriterombank[2] & 0x03) << 6);
29472908   pri = 0;
29482909   shadow = color & 0x80;
2949   k051960->callback(device->machine(), &code, &color, &pri, &shadow);
2910   m_callback(machine(), &code, &color, &pri, &shadow);
29502911
29512912   addr = (code << 7) | (off1 << 2) | byte;
2952   addr &= device->machine().root_device().memregion(k051960->memory_region)->bytes() - 1;
2913   addr &= machine().root_device().memregion(m_gfx_memory_region)->bytes() - 1;
29532914
2954//  popmessage("%s: addr %06x", device->machine().describe_context(), addr);
2915//  popmessage("%s: addr %06x", machine().describe_context(), addr);
29552916
2956   return device->machine().root_device().memregion(k051960->memory_region)->base()[addr];
2917   return machine().root_device().memregion(m_gfx_memory_region)->base()[addr];
29572918}
29582919
2959READ8_DEVICE_HANDLER( k051960_r )
2920READ8_MEMBER( k051960_device::k051960_r )
29602921{
2961   k051960_state *k051960 = k051960_get_safe_token(device);
2962   if (k051960->readroms)
2922   if (m_readroms)
29632923   {
29642924      /* the 051960 remembers the last address read and uses it when reading the sprite ROMs */
2965      k051960->romoffset = (offset & 0x3fc) >> 2;
2966      return k051960_fetchromdata(device, offset & 3);    /* only 88 Games reads the ROMs from here */
2925      m_romoffset = (offset & 0x3fc) >> 2;
2926      return k051960_fetchromdata(offset & 3);    /* only 88 Games reads the ROMs from here */
29672927   }
29682928   else
2969      return k051960->ram[offset];
2929      return m_ram[offset];
29702930}
29712931
2972WRITE8_DEVICE_HANDLER( k051960_w )
2932WRITE8_MEMBER( k051960_device::k051960_w )
29732933{
2974   k051960_state *k051960 = k051960_get_safe_token(device);
2975   k051960->ram[offset] = data;
2934   m_ram[offset] = data;
29762935}
29772936
2978READ16_DEVICE_HANDLER( k051960_word_r )
2937READ16_MEMBER( k051960_device::k051960_word_r )
29792938{
2980   return k051960_r(device, space, offset * 2 + 1) | (k051960_r(device, space, offset * 2) << 8);
2939   return k051960_r(space, offset * 2 + 1) | (k051960_r(space, offset * 2) << 8);
29812940}
29822941
2983WRITE16_DEVICE_HANDLER( k051960_word_w )
2942WRITE16_MEMBER( k051960_device::k051960_word_w )
29842943{
29852944   if (ACCESSING_BITS_8_15)
2986      k051960_w(device, space, offset * 2, (data >> 8) & 0xff);
2945      k051960_w(space, offset * 2, (data >> 8) & 0xff);
29872946   if (ACCESSING_BITS_0_7)
2988      k051960_w(device, space, offset * 2 + 1, data & 0xff);
2947      k051960_w(space, offset * 2 + 1, data & 0xff);
29892948}
29902949
29912950
29922951/* should this be split by k051960? */
2993READ8_DEVICE_HANDLER( k051937_r )
2952READ8_MEMBER( k051960_device::k051937_r )
29942953{
2995   k051960_state *k051960 = k051960_get_safe_token(device);
2996
2997   if (k051960->readroms && offset >= 4 && offset < 8)
2998      return k051960_fetchromdata(device, offset & 3);
2954   if (m_readroms && offset >= 4 && offset < 8)
2955      return k051960_fetchromdata(offset & 3);
29992956   else
30002957   {
30012958      if (offset == 0)
30022959      {
30032960         /* some games need bit 0 to pulse */
3004         return (k051960->k051937_counter++) & 1;
2961         return (m_k051937_counter++) & 1;
30052962      }
30062963      //logerror("%04x: read unknown 051937 address %x\n", device->cpu->safe_pc(), offset);
30072964      return 0;
r24078r24079
30102967   return 0;
30112968}
30122969
3013WRITE8_DEVICE_HANDLER( k051937_w )
2970WRITE8_MEMBER( k051960_device::k051937_w )
30142971{
3015   k051960_state *k051960 = k051960_get_safe_token(device);
3016
30172972   if (offset == 0)
30182973   {
30192974      //if (data & 0xc2) popmessage("051937 reg 00 = %02x",data);
30202975
30212976      /* bit 0 is IRQ enable */
3022      k051960->irq_enabled = data & 0x01;
2977      m_irq_enabled = data & 0x01;
30232978
30242979      /* bit 1: probably FIRQ enable */
30252980
30262981      /* bit 2 is NMI enable */
3027      k051960->nmi_enabled = data & 0x04;
2982      m_nmi_enabled = data & 0x04;
30282983
30292984      /* bit 3 = flip screen */
3030      k051960->spriteflip = data & 0x08;
2985      m_spriteflip = data & 0x08;
30312986
30322987      /* bit 4 used by Devastators and TMNT, unknown */
30332988
30342989      /* bit 5 = enable gfx ROM reading */
3035      k051960->readroms = data & 0x20;
3036      //logerror("%04x: write %02x to 051937 address %x\n", machine.cpu->safe_pc(), data, offset);
2990      m_readroms = data & 0x20;
2991      //logerror("%04x: write %02x to 051937 address %x\n", machine().cpu->safe_pc(), data, offset);
30372992   }
30382993   else if (offset == 1)
30392994   {
3040//  popmessage("%04x: write %02x to 051937 address %x", machine.cpu->safe_pc(), data, offset);
3041//logerror("%04x: write %02x to unknown 051937 address %x\n", machine.cpu->safe_pc(), data, offset);
2995//  popmessage("%04x: write %02x to 051937 address %x", machine().cpu->safe_pc(), data, offset);
2996//logerror("%04x: write %02x to unknown 051937 address %x\n", machine().cpu->safe_pc(), data, offset);
30422997   }
30432998   else if (offset >= 2 && offset < 5)
30442999   {
3045      k051960->spriterombank[offset - 2] = data;
3000      m_spriterombank[offset - 2] = data;
30463001   }
30473002   else
30483003   {
3049   //  popmessage("%04x: write %02x to 051937 address %x", machine.cpu->safe_pc(), data, offset);
3050   //logerror("%04x: write %02x to unknown 051937 address %x\n", machine.cpu->safe_pc(), data, offset);
3004   //  popmessage("%04x: write %02x to 051937 address %x", machine().cpu->safe_pc(), data, offset);
3005   //logerror("%04x: write %02x to unknown 051937 address %x\n", machine().cpu->safe_pc(), data, offset);
30513006   }
30523007}
30533008
3054int k051960_is_irq_enabled( device_t *device )
3009int k051960_device::k051960_is_irq_enabled( )
30553010{
3056   k051960_state *k051960 = k051960_get_safe_token(device);
3057   return k051960->irq_enabled;
3011   return m_irq_enabled;
30583012}
30593013
3060int k051960_is_nmi_enabled( device_t *device )
3014int k051960_device::k051960_is_nmi_enabled( )
30613015{
3062   k051960_state *k051960 = k051960_get_safe_token(device);
3063   return k051960->nmi_enabled;
3016   return m_nmi_enabled;
30643017}
30653018
3066void k051960_set_sprite_offsets( device_t *device, int dx, int dy )
3019void k051960_device::k051960_set_sprite_offsets( int dx, int dy )
30673020{
3068   k051960_state *k051960 = k051960_get_safe_token(device);
3069   k051960->dx = dx;
3070   k051960->dy = dy;
3021   m_dx = dx;
3022   m_dy = dy;
30713023}
30723024
30733025
3074READ16_DEVICE_HANDLER( k051937_word_r )
3026READ16_MEMBER( k051960_device::k051937_word_r )
30753027{
3076   return k051937_r(device, space, offset * 2 + 1) | (k051937_r(device, space, offset * 2) << 8);
3028   return k051937_r(space, offset * 2 + 1) | (k051937_r(space, offset * 2) << 8);
30773029}
30783030
3079WRITE16_DEVICE_HANDLER( k051937_word_w )
3031WRITE16_MEMBER( k051960_device::k051937_word_w )
30803032{
30813033   if (ACCESSING_BITS_8_15)
3082      k051937_w(device, space, offset * 2,(data >> 8) & 0xff);
3034      k051937_w(space, offset * 2,(data >> 8) & 0xff);
30833035   if (ACCESSING_BITS_0_7)
3084      k051937_w(device, space, offset * 2 + 1,data & 0xff);
3036      k051937_w(space, offset * 2 + 1,data & 0xff);
30853037}
30863038
30873039/*
r24078r24079
31163068 * Note that Aliens also uses the shadow bit to select the second sprite bank.
31173069 */
31183070
3119void k051960_sprites_draw( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, int min_priority, int max_priority )
3071void k051960_device::k051960_sprites_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, int min_priority, int max_priority )
31203072{
31213073#define NUM_SPRITES 128
3122   k051960_state *k051960 = k051960_get_safe_token(device);
3123   running_machine &machine = device->machine();
31243074   int offs, pri_code;
31253075   int sortedlist[NUM_SPRITES];
31263076   UINT8 drawmode_table[256];
r24078r24079
31343084   /* prebuild a sorted table */
31353085   for (offs = 0; offs < 0x400; offs += 8)
31363086   {
3137      if (k051960->ram[offs] & 0x80)
3087      if (m_ram[offs] & 0x80)
31383088      {
31393089         if (max_priority == -1) /* draw front to back when using priority buffer */
3140            sortedlist[(k051960->ram[offs] & 0x7f) ^ 0x7f] = offs;
3090            sortedlist[(m_ram[offs] & 0x7f) ^ 0x7f] = offs;
31413091         else
3142            sortedlist[k051960->ram[offs] & 0x7f] = offs;
3092            sortedlist[m_ram[offs] & 0x7f] = offs;
31433093      }
31443094   }
31453095
r24078r24079
31653115      if (offs == -1)
31663116         continue;
31673117
3168      code = k051960->ram[offs + 2] + ((k051960->ram[offs + 1] & 0x1f) << 8);
3169      color = k051960->ram[offs + 3] & 0xff;
3118      code = m_ram[offs + 2] + ((m_ram[offs + 1] & 0x1f) << 8);
3119      color = m_ram[offs + 3] & 0xff;
31703120      pri = 0;
31713121      shadow = color & 0x80;
3172      k051960->callback(device->machine(), &code, &color, &pri, &shadow);
3122      m_callback(machine(), &code, &color, &pri, &shadow);
31733123
31743124      if (max_priority != -1)
31753125         if (pri < min_priority || pri > max_priority)
31763126            continue;
31773127
3178      size = (k051960->ram[offs + 1] & 0xe0) >> 5;
3128      size = (m_ram[offs + 1] & 0xe0) >> 5;
31793129      w = width[size];
31803130      h = height[size];
31813131
r24078r24079
31863136      if (w >= 8) code &= ~0x10;
31873137      if (h >= 8) code &= ~0x20;
31883138
3189      ox = (256 * k051960->ram[offs + 6] + k051960->ram[offs + 7]) & 0x01ff;
3190      oy = 256 - ((256 * k051960->ram[offs + 4] + k051960->ram[offs + 5]) & 0x01ff);
3191      ox += k051960->dx;
3192      oy += k051960->dy;
3193      flipx = k051960->ram[offs + 6] & 0x02;
3194      flipy = k051960->ram[offs + 4] & 0x02;
3195      zoomx = (k051960->ram[offs + 6] & 0xfc) >> 2;
3196      zoomy = (k051960->ram[offs + 4] & 0xfc) >> 2;
3139      ox = (256 * m_ram[offs + 6] + m_ram[offs + 7]) & 0x01ff;
3140      oy = 256 - ((256 * m_ram[offs + 4] + m_ram[offs + 5]) & 0x01ff);
3141      ox += m_dx;
3142      oy += m_dy;
3143      flipx = m_ram[offs + 6] & 0x02;
3144      flipy = m_ram[offs + 4] & 0x02;
3145      zoomx = (m_ram[offs + 6] & 0xfc) >> 2;
3146      zoomy = (m_ram[offs + 4] & 0xfc) >> 2;
31973147      zoomx = 0x10000 / 128 * (128 - zoomx);
31983148      zoomy = 0x10000 / 128 * (128 - zoomy);
31993149
3200      if (k051960->spriteflip)
3150      if (m_spriteflip)
32013151      {
32023152         ox = 512 - (zoomx * w >> 12) - ox;
32033153         oy = 256 - (zoomy * h >> 12) - oy;
r24078r24079
32053155         flipy = !flipy;
32063156      }
32073157
3208      drawmode_table[k051960->gfx->granularity() - 1] = shadow ? DRAWMODE_SHADOW : DRAWMODE_SOURCE;
3158      drawmode_table[m_gfx->granularity() - 1] = shadow ? DRAWMODE_SHADOW : DRAWMODE_SOURCE;
32093159
32103160      if (zoomx == 0x10000 && zoomy == 0x10000)
32113161      {
r24078r24079
32313181                  c += yoffset[y];
32323182
32333183               if (max_priority == -1)
3234                  pdrawgfx_transtable(bitmap,cliprect,k051960->gfx,
3184                  pdrawgfx_transtable(bitmap,cliprect,m_gfx,
32353185                        c,
32363186                        color,
32373187                        flipx,flipy,
32383188                        sx & 0x1ff,sy,
3239                        machine.priority_bitmap,pri,
3240                        drawmode_table,machine.shadow_table);
3189                        machine().priority_bitmap,pri,
3190                        drawmode_table,machine().shadow_table);
32413191               else
3242                  drawgfx_transtable(bitmap,cliprect,k051960->gfx,
3192                  drawgfx_transtable(bitmap,cliprect,m_gfx,
32433193                        c,
32443194                        color,
32453195                        flipx,flipy,
32463196                        sx & 0x1ff,sy,
3247                        drawmode_table,machine.shadow_table);
3197                        drawmode_table,machine().shadow_table);
32483198            }
32493199         }
32503200      }
r24078r24079
32743224                  c += yoffset[y];
32753225
32763226               if (max_priority == -1)
3277                  pdrawgfxzoom_transtable(bitmap,cliprect,k051960->gfx,
3227                  pdrawgfxzoom_transtable(bitmap,cliprect,m_gfx,
32783228                        c,
32793229                        color,
32803230                        flipx,flipy,
32813231                        sx & 0x1ff,sy,
32823232                        (zw << 16) / 16,(zh << 16) / 16,
3283                        machine.priority_bitmap,pri,
3284                        drawmode_table,machine.shadow_table);
3233                        machine().priority_bitmap,pri,
3234                        drawmode_table,machine().shadow_table);
32853235               else
3286                  drawgfxzoom_transtable(bitmap,cliprect,k051960->gfx,
3236                  drawgfxzoom_transtable(bitmap,cliprect,m_gfx,
32873237                        c,
32883238                        color,
32893239                        flipx,flipy,
32903240                        sx & 0x1ff,sy,
32913241                        (zw << 16) / 16,(zh << 16) / 16,
3292                        drawmode_table,machine.shadow_table);
3242                        drawmode_table,machine().shadow_table);
32933243            }
32943244         }
32953245      }
32963246   }
32973247#if 0
3298if (machine.input().code_pressed(KEYCODE_D))
3248if (machine().input().code_pressed(KEYCODE_D))
32993249{
33003250   FILE *fp;
33013251   fp=fopen("SPRITE.DMP", "w+b");
r24078r24079
33103260#undef NUM_SPRITES
33113261}
33123262
3263
3264/***************************************************************************/
3265/*                                                                         */
3266/*                      05324x Family Sprite Generators                    */
3267/*                                                                         */
3268/***************************************************************************/
3269
3270/***************************************************************************/
3271/*                                                                         */
3272/*                         053244 / 053245                                 */
3273/*                                                                         */
3274/***************************************************************************/
3275
3276
33133277/*****************************************************************************
33143278    DEVICE INTERFACE
33153279*****************************************************************************/
33163280
3317static DEVICE_START( k051960 )
3281const device_type K053244 = &device_creator<k05324x_device>;
3282
3283k05324x_device::k05324x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
3284   : device_t(mconfig, K053244, "Konami 053244 & 053245", tag, owner, clock, "k05324x", __FILE__),
3285   m_ram(NULL),
3286   m_buffer(NULL),
3287   m_gfx(NULL),
3288   //m_regs[0x10],
3289   m_rombank(0),
3290   m_ramsize(0),
3291   m_z_rejection(0)
33183292{
3319   k051960_state *k051960 = k051960_get_safe_token(device);
3320   const k051960_interface *intf = k051960_get_interface(device);
3321   running_machine &machine = device->machine();
3293}
3294
3295//-------------------------------------------------
3296//  device_config_complete - perform any
3297//  operations now that the configuration is
3298//  complete
3299//-------------------------------------------------
3300
3301void k05324x_device::device_config_complete()
3302{
3303   // inherit a copy of the static data
3304   const k05324x_interface *intf = reinterpret_cast<const k05324x_interface *>(static_config());
3305   if (intf != NULL)
3306   *static_cast<k05324x_interface *>(this) = *intf;
3307   
3308   // or initialize to defaults if none provided
3309   else
3310   {
3311      m_gfx_memory_region = "";
3312      m_gfx_num = 0;
3313      m_plane_order = 0;
3314      m_dx = 0;
3315      m_dy = 0;
3316      m_deinterleave = 0;
3317      m_callback = NULL;
3318   }
3319}
3320
3321//-------------------------------------------------
3322//  device_start - device-specific startup
3323//-------------------------------------------------
3324
3325void k05324x_device::device_start()
3326{
33223327   UINT32 total;
33233328   static const gfx_layout spritelayout =
33243329   {
33253330      16,16,
33263331      0,
33273332      4,
3328      { 0, 8, 16, 24 },
3329      { 0, 1, 2, 3, 4, 5, 6, 7,
3330            8*32+0, 8*32+1, 8*32+2, 8*32+3, 8*32+4, 8*32+5, 8*32+6, 8*32+7 },
3331      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
3332            16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
3333      128*8
3334   };
3335   static const gfx_layout spritelayout_reverse =
3336   {
3337      16,16,
3338      0,
3339      4,
33403333      { 24, 16, 8, 0 },
33413334      { 0, 1, 2, 3, 4, 5, 6, 7,
33423335            8*32+0, 8*32+1, 8*32+2, 8*32+3, 8*32+4, 8*32+5, 8*32+6, 8*32+7 },
r24078r24079
33443337            16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
33453338      128*8
33463339   };
3347   static const gfx_layout spritelayout_gradius3 =
3348   {
3349      16,16,
3350      0,
3351      4,
3352      { 0, 1, 2, 3 },
3353      { 2*4, 3*4, 0*4, 1*4, 6*4, 7*4, 4*4, 5*4,
3354         32*8+2*4, 32*8+3*4, 32*8+0*4, 32*8+1*4, 32*8+6*4, 32*8+7*4, 32*8+4*4, 32*8+5*4 },
3355      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
3356         64*8+0*32, 64*8+1*32, 64*8+2*32, 64*8+3*32, 64*8+4*32, 64*8+5*32, 64*8+6*32, 64*8+7*32 },
3357      128*8
3358   };
33593340
33603341   /* decode the graphics */
3361   switch (intf->plane_order)
3342   switch (m_plane_order)
33623343   {
33633344   case NORMAL_PLANE_ORDER:
3364      total = machine.root_device().memregion(intf->gfx_memory_region)->bytes() / 128;
3365      decode_gfx(machine, intf->gfx_num, machine.root_device().memregion(intf->gfx_memory_region)->base(), total, &spritelayout, 4);
3345      total = machine().root_device().memregion(m_gfx_memory_region)->bytes() / 128;
3346      decode_gfx(machine(), m_gfx_num, machine().root_device().memregion(m_gfx_memory_region)->base(), total, &spritelayout, 4);
33663347      break;
33673348
3368   case REVERSE_PLANE_ORDER:
3369      total = machine.root_device().memregion(intf->gfx_memory_region)->bytes() / 128;
3370      decode_gfx(machine, intf->gfx_num, machine.root_device().memregion(intf->gfx_memory_region)->base(), total, &spritelayout_reverse, 4);
3371      break;
3372
3373   case GRADIUS3_PLANE_ORDER:
3374      total = 0x4000;
3375      decode_gfx(machine, intf->gfx_num, machine.root_device().memregion(intf->gfx_memory_region)->base(), total, &spritelayout_gradius3, 4);
3376      break;
3377
33783349   default:
3379      fatalerror("Unknown plane_order\n");
3350      fatalerror("Unsupported plane_order\n");
33803351   }
33813352
3382   if (VERBOSE && !(machine.config().m_video_attributes & VIDEO_HAS_SHADOWS))
3353   if (VERBOSE && !(machine().config().m_video_attributes & VIDEO_HAS_SHADOWS))
33833354      popmessage("driver should use VIDEO_HAS_SHADOWS");
33843355
33853356   /* deinterleave the graphics, if needed */
3386   deinterleave_gfx(machine, intf->gfx_memory_region, intf->deinterleave);
3357   deinterleave_gfx(machine(), m_gfx_memory_region, m_deinterleave);
33873358
3388   k051960->memory_region = intf->gfx_memory_region;
3389   k051960->gfx = machine.gfx[intf->gfx_num];
3390   k051960->callback = intf->callback;
3391   k051960->ram = auto_alloc_array_clear(machine, UINT8, 0x400);
3359   m_ramsize = 0x800;
33923360
3393   device->save_item(NAME(k051960->romoffset));
3394   device->save_item(NAME(k051960->spriteflip));
3395   device->save_item(NAME(k051960->readroms));
3396   device->save_item(NAME(k051960->spriterombank));
3397   device->save_pointer(NAME(k051960->ram), 0x400);
3398   device->save_item(NAME(k051960->irq_enabled));
3399   device->save_item(NAME(k051960->nmi_enabled));
3400   device->save_item(NAME(k051960->dx));
3401   device->save_item(NAME(k051960->dy));
3361   m_z_rejection = -1;
3362   m_gfx = machine().gfx[m_gfx_num];
3363   m_ram = auto_alloc_array_clear(machine(), UINT16, m_ramsize / 2);
34023364
3403   device->save_item(NAME(k051960->k051937_counter));
3404}
3365   m_buffer = auto_alloc_array_clear(machine(), UINT16, m_ramsize / 2);
34053366
3406static DEVICE_RESET( k051960 )
3407{
3408   k051960_state *k051960 = k051960_get_safe_token(device);
3409
3410   k051960->dx = k051960->dy = 0;
3411   k051960->k051937_counter = 0;
3412
3413   k051960->romoffset = 0;
3414   k051960->spriteflip = 0;
3415   k051960->readroms = 0;
3416   k051960->irq_enabled = 0;
3417   k051960->nmi_enabled = 0;
3418
3419   k051960->spriterombank[0] = 0;
3420   k051960->spriterombank[1] = 0;
3421   k051960->spriterombank[2] = 0;
3367   save_pointer(NAME(m_ram), m_ramsize / 2);
3368   save_pointer(NAME(m_buffer), m_ramsize / 2);
3369   save_item(NAME(m_rombank));
3370   save_item(NAME(m_z_rejection));
3371   save_item(NAME(m_regs));
34223372}
34233373
3424
3425const device_type K051960 = &device_creator<k051960_device>;
3426
3427k051960_device::k051960_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
3428   : device_t(mconfig, K051960, "Konami 051960", tag, owner, clock, "k051960", __FILE__)
3429{
3430   m_token = global_alloc_clear(k051960_state);
3431}
3432
34333374//-------------------------------------------------
3434//  device_config_complete - perform any
3435//  operations now that the configuration is
3436//  complete
3437//-------------------------------------------------
3438
3439void k051960_device::device_config_complete()
3440{
3441}
3442
3443//-------------------------------------------------
3444//  device_start - device-specific startup
3445//-------------------------------------------------
3446
3447void k051960_device::device_start()
3448{
3449   DEVICE_START_NAME( k051960 )(this);
3450}
3451
3452//-------------------------------------------------
34533375//  device_reset - device-specific reset
34543376//-------------------------------------------------
34553377
3456void k051960_device::device_reset()
3378void k05324x_device::device_reset()
34573379{
3458   DEVICE_RESET_NAME( k051960 )(this);
3459}
3380   int i;
34603381
3461/***************************************************************************/
3462/*                                                                         */
3463/*                      05324x Family Sprite Generators                    */
3464/*                                                                         */
3465/***************************************************************************/
3382   m_rombank = 0;
34663383
3467/***************************************************************************/
3468/*                                                                         */
3469/*                         053244 / 053245                                 */
3470/*                                                                         */
3471/***************************************************************************/
3472
3473struct k05324x_state
3474{
3475   UINT16    *ram;
3476   UINT16    *buffer;
3477
3478   gfx_element *gfx;
3479
3480   UINT8    regs[0x10];    // 053244
3481   int      dx, dy;
3482   int      rombank;       // 053244
3483   int      ramsize;
3484   int      z_rejection;
3485
3486   k05324x_callback callback;
3487
3488   const char *memory_region;
3489};
3490
3491
3492/*****************************************************************************
3493    INLINE FUNCTIONS
3494*****************************************************************************/
3495
3496INLINE k05324x_state *k05324x_get_safe_token( device_t *device )
3497{
3498   assert(device != NULL);
3499   assert((device->type() == K053244 || device->type() == K053245));
3500
3501   return (k05324x_state *)downcast<k05324x_device *>(device)->token();
3384   for (i = 0; i < 0x10; i++)
3385      m_regs[i] = 0;
35023386}
35033387
3504INLINE const k05324x_interface *k05324x_get_interface( device_t *device )
3505{
3506   assert(device != NULL);
3507   assert((device->type() == K053244 || device->type() == K053245));
3508   return (const k05324x_interface *) device->static_config();
3509}
3510
35113388/*****************************************************************************
35123389    DEVICE HANDLERS
35133390*****************************************************************************/
35143391
3515void k053245_set_sprite_offs( device_t *device, int offsx, int offsy )
3392void k05324x_device::k053245_set_sprite_offs( int offsx, int offsy )
35163393{
3517   k05324x_state *k053245 = k05324x_get_safe_token(device);
3518   k053245->dx = offsx;
3519   k053245->dy = offsy;
3394   m_dx = offsx;
3395   m_dy = offsy;
35203396}
35213397
3522READ16_DEVICE_HANDLER( k053245_word_r )
3398READ16_MEMBER( k05324x_device::k053245_word_r )
35233399{
3524   k05324x_state *k053245 = k05324x_get_safe_token(device);
3525   return k053245->ram[offset];
3400   return m_ram[offset];
35263401}
35273402
3528WRITE16_DEVICE_HANDLER( k053245_word_w )
3403WRITE16_MEMBER( k05324x_device::k053245_word_w )
35293404{
3530   k05324x_state *k053245 = k05324x_get_safe_token(device);
3531   COMBINE_DATA(k053245->ram + offset);
3405   COMBINE_DATA(m_ram + offset);
35323406}
35333407
3534READ8_DEVICE_HANDLER( k053245_r )
3408READ8_MEMBER( k05324x_device::k053245_r )
35353409{
3536   k05324x_state *k053245 = k05324x_get_safe_token(device);
3537
35383410   if(offset & 1)
3539      return k053245->ram[offset >> 1] & 0xff;
3411      return m_ram[offset >> 1] & 0xff;
35403412   else
3541      return (k053245->ram[offset >> 1] >> 8) & 0xff;
3413      return (m_ram[offset >> 1] >> 8) & 0xff;
35423414}
35433415
35443416
3545WRITE8_DEVICE_HANDLER( k053245_w )
3417WRITE8_MEMBER( k05324x_device::k053245_w )
35463418{
3547   k05324x_state *k053245 = k05324x_get_safe_token(device);
3548
35493419   if(offset & 1)
3550      k053245->ram[offset >> 1] = (k053245->ram[offset >> 1] & 0xff00) | data;
3420      m_ram[offset >> 1] = (m_ram[offset >> 1] & 0xff00) | data;
35513421   else
3552      k053245->ram[offset >> 1] = (k053245->ram[offset >> 1] & 0x00ff) | (data << 8);
3422      m_ram[offset >> 1] = (m_ram[offset >> 1] & 0x00ff) | (data << 8);
35533423}
35543424
3555void k053245_clear_buffer( device_t *device )
3425void k05324x_device::k053245_clear_buffer( )
35563426{
3557   k05324x_state *k053245 = k05324x_get_safe_token(device);
35583427   int i, e;
35593428
3560   for (e = k053245->ramsize / 2, i = 0; i < e; i += 8)
3561      k053245->buffer[i] = 0;
3429   for (e = m_ramsize / 2, i = 0; i < e; i += 8)
3430      m_buffer[i] = 0;
35623431}
35633432
3564INLINE void k053245_update_buffer( device_t *device )
3433void k05324x_device::k053245_update_buffer( )
35653434{
3566   k05324x_state *k053245 = k05324x_get_safe_token(device);
3567   memcpy(k053245->buffer, k053245->ram, k053245->ramsize);
3435   memcpy(m_buffer, m_ram, m_ramsize);
35683436}
35693437
3570READ8_DEVICE_HANDLER( k053244_r )
3438READ8_MEMBER( k05324x_device::k053244_r )
35713439{
3572   k05324x_state *k053244 = k05324x_get_safe_token(device);
3573   running_machine &machine = space.machine();
3574
3575   if ((k053244->regs[5] & 0x10) && offset >= 0x0c && offset < 0x10)
3440   if ((m_regs[5] & 0x10) && offset >= 0x0c && offset < 0x10)
35763441   {
35773442      int addr;
35783443
3579      addr = (k053244->rombank << 19) | ((k053244->regs[11] & 0x7) << 18)
3580         | (k053244->regs[8] << 10) | (k053244->regs[9] << 2)
3444      addr = (m_rombank << 19) | ((m_regs[11] & 0x7) << 18)
3445         | (m_regs[8] << 10) | (m_regs[9] << 2)
35813446         | ((offset & 3) ^ 1);
3582      addr &= machine.root_device().memregion(k053244->memory_region)->bytes() - 1;
3447      addr &= machine().root_device().memregion(m_gfx_memory_region)->bytes() - 1;
35833448
3584      //  popmessage("%s: offset %02x addr %06x", machine.describe_context(), offset & 3, addr);
3449      //  popmessage("%s: offset %02x addr %06x", machine().describe_context(), offset & 3, addr);
35853450
3586      return machine.root_device().memregion(k053244->memory_region)->base()[addr];
3451      return machine().root_device().memregion(m_gfx_memory_region)->base()[addr];
35873452   }
35883453   else if (offset == 0x06)
35893454   {
3590      k053245_update_buffer(device);
3455      k053245_update_buffer();
35913456      return 0;
35923457   }
35933458   else
35943459   {
3595      //logerror("%s: read from unknown 053244 address %x\n", machine.describe_context(), offset);
3460      //logerror("%s: read from unknown 053244 address %x\n", machine().describe_context(), offset);
35963461      return 0;
35973462   }
35983463}
35993464
3600WRITE8_DEVICE_HANDLER( k053244_w )
3465WRITE8_MEMBER( k05324x_device::k053244_w )
36013466{
3602   k05324x_state *k053244 = k05324x_get_safe_token(device);
3467   m_regs[offset] = data;
36033468
3604   k053244->regs[offset] = data;
3605
36063469   switch(offset)
36073470   {
36083471   case 0x05:
r24078r24079
36143477      break;
36153478
36163479   case 0x06:
3617      k053245_update_buffer(device);
3480      k053245_update_buffer();
36183481      break;
36193482   }
36203483}
36213484
36223485
3623READ16_DEVICE_HANDLER( k053244_lsb_r )
3486READ16_MEMBER( k05324x_device::k053244_lsb_r )
36243487{
3625   return k053244_r(device, space, offset);
3488   return k053244_r(space, offset);
36263489}
36273490
3628WRITE16_DEVICE_HANDLER( k053244_lsb_w )
3491WRITE16_MEMBER( k05324x_device::k053244_lsb_w )
36293492{
36303493   if (ACCESSING_BITS_0_7)
3631      k053244_w(device, space, offset, data & 0xff);
3494      k053244_w(space, offset, data & 0xff);
36323495}
36333496
3634READ16_DEVICE_HANDLER( k053244_word_r )
3497READ16_MEMBER( k05324x_device::k053244_word_r )
36353498{
3636   return (k053244_r(device, space, offset * 2) << 8) | k053244_r(device, space, offset * 2 + 1);
3499   return (k053244_r(space, offset * 2) << 8) | k053244_r(space, offset * 2 + 1);
36373500}
36383501
3639WRITE16_DEVICE_HANDLER( k053244_word_w )
3502WRITE16_MEMBER( k05324x_device::k053244_word_w )
36403503{
36413504   if (ACCESSING_BITS_8_15)
3642      k053244_w(device, space, offset * 2, (data >> 8) & 0xff);
3505      k053244_w(space, offset * 2, (data >> 8) & 0xff);
36433506   if (ACCESSING_BITS_0_7)
3644      k053244_w(device, space, offset * 2 + 1, data & 0xff);
3507      k053244_w(space, offset * 2 + 1, data & 0xff);
36453508}
36463509
3647void k053244_bankselect( device_t *device, int bank )
3510void k05324x_device::k053244_bankselect( int bank )
36483511{
3649   k05324x_state *k053244 = k05324x_get_safe_token(device);
3650   k053244->rombank = bank;
3512   m_rombank = bank;
36513513}
36523514
3515void k05324x_device::k05324x_set_z_rejection( int zcode )
3516{
3517   m_z_rejection = zcode;
3518}
3519
36533520/*
36543521 * Sprite Format
36553522 * ------------------
r24078r24079
36783545 * The rest of the sprite remains normal.
36793546 */
36803547
3681void k053245_sprites_draw( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect )
3548void k05324x_device::k053245_sprites_draw( bitmap_ind16 &bitmap, const rectangle &cliprect )
36823549{
36833550#define NUM_SPRITES 128
3684   k05324x_state *k053245 = k05324x_get_safe_token(device);
3685   running_machine &machine = device->machine();
36863551   int offs, pri_code, i;
36873552   int sortedlist[NUM_SPRITES];
36883553   int flipscreenX, flipscreenY, spriteoffsX, spriteoffsY;
r24078r24079
36913556   memset(drawmode_table, DRAWMODE_SOURCE, sizeof(drawmode_table));
36923557   drawmode_table[0] = DRAWMODE_NONE;
36933558
3694   flipscreenX = k053245->regs[5] & 0x01;
3695   flipscreenY = k053245->regs[5] & 0x02;
3696   spriteoffsX = (k053245->regs[0] << 8) | k053245->regs[1];
3697   spriteoffsY = (k053245->regs[2] << 8) | k053245->regs[3];
3559   flipscreenX = m_regs[5] & 0x01;
3560   flipscreenY = m_regs[5] & 0x02;
3561   spriteoffsX = (m_regs[0] << 8) | m_regs[1];
3562   spriteoffsY = (m_regs[2] << 8) | m_regs[3];
36983563
36993564   for (offs = 0; offs < NUM_SPRITES; offs++)
37003565      sortedlist[offs] = -1;
37013566
37023567   /* prebuild a sorted table */
3703   for (i = k053245->ramsize / 2, offs = 0; offs < i; offs += 8)
3568   for (i = m_ramsize / 2, offs = 0; offs < i; offs += 8)
37043569   {
3705      pri_code = k053245->buffer[offs];
3570      pri_code = m_buffer[offs];
37063571      if (pri_code & 0x8000)
37073572      {
37083573         pri_code &= 0x007f;
37093574
3710         if (offs && pri_code == k053245->z_rejection)
3575         if (offs && pri_code == m_z_rejection)
37113576            continue;
37123577
37133578         if (sortedlist[pri_code] == -1)
r24078r24079
37503615      /* field to do bank switching. However this applies only to TMNT2, with its */
37513616      /* protection mcu creating the sprite table, so we don't know where to fetch */
37523617      /* the bits from. */
3753      code = k053245->buffer[offs + 1];
3618      code = m_buffer[offs + 1];
37543619      code = ((code & 0xffe1) + ((code & 0x0010) >> 2) + ((code & 0x0008) << 1)
37553620               + ((code & 0x0004) >> 1) + ((code & 0x0002) << 2));
3756      color = k053245->buffer[offs + 6] & 0x00ff;
3621      color = m_buffer[offs + 6] & 0x00ff;
37573622      pri = 0;
37583623
3759      k053245->callback(device->machine(), &code, &color, &pri);
3624      m_callback(machine(), &code, &color, &pri);
37603625
3761      size = (k053245->buffer[offs] & 0x0f00) >> 8;
3626      size = (m_buffer[offs] & 0x0f00) >> 8;
37623627
37633628      w = 1 << (size & 0x03);
37643629      h = 1 << ((size >> 2) & 0x03);
r24078r24079
37683633        <0x40 enlarge (0x20 = double size)
37693634        >0x40 reduce (0x80 = half size)
37703635      */
3771      zoomy = k053245->buffer[offs + 4];
3636      zoomy = m_buffer[offs + 4];
37723637      if (zoomy > 0x2000)
37733638         continue;
37743639
r24078r24079
37763641         zoomy = (0x400000 + zoomy / 2) / zoomy;
37773642      else
37783643         zoomy = 2 * 0x400000;
3779      if ((k053245->buffer[offs] & 0x4000) == 0)
3644      if ((m_buffer[offs] & 0x4000) == 0)
37803645      {
3781         zoomx = k053245->buffer[offs + 5];
3646         zoomx = m_buffer[offs + 5];
37823647         if (zoomx > 0x2000)
37833648            continue;
37843649         if (zoomx)
r24078r24079
37903655      else
37913656         zoomx = zoomy;
37923657
3793      ox = k053245->buffer[offs+3] + spriteoffsX;
3794      oy = k053245->buffer[offs+2];
3658      ox = m_buffer[offs+3] + spriteoffsX;
3659      oy = m_buffer[offs+2];
37953660
3796      ox += k053245->dx;
3797      oy += k053245->dy;
3661      ox += m_dx;
3662      oy += m_dy;
37983663
3799      flipx = k053245->buffer[offs] & 0x1000;
3800      flipy = k053245->buffer[offs] & 0x2000;
3801      mirrorx = k053245->buffer[offs + 6] & 0x0100;
3664      flipx = m_buffer[offs] & 0x1000;
3665      flipy = m_buffer[offs] & 0x2000;
3666      mirrorx = m_buffer[offs + 6] & 0x0100;
38023667      if (mirrorx)
38033668         flipx = 0; // documented and confirmed
38043669
3805      mirrory = k053245->buffer[offs + 6] & 0x0200;
3806      shadow = k053245->buffer[offs + 6] & 0x0080;
3670      mirrory = m_buffer[offs + 6] & 0x0200;
3671      shadow = m_buffer[offs + 6] & 0x0080;
38073672
38083673      if (flipscreenX)
38093674      {
r24078r24079
38273692      ox -= (zoomx * w) >> 13;
38283693      oy -= (zoomy * h) >> 13;
38293694
3830      drawmode_table[k053245->gfx->granularity() - 1] = shadow ? DRAWMODE_SHADOW : DRAWMODE_SOURCE;
3695      drawmode_table[m_gfx->granularity() - 1] = shadow ? DRAWMODE_SHADOW : DRAWMODE_SOURCE;
38313696
38323697      for (y = 0; y < h; y++)
38333698      {
r24078r24079
38913756
38923757            if (zoomx == 0x10000 && zoomy == 0x10000)
38933758            {
3894               pdrawgfx_transtable(bitmap,cliprect,k053245->gfx,
3759               pdrawgfx_transtable(bitmap,cliprect,m_gfx,
38953760                     c,
38963761                     color,
38973762                     fx,fy,
38983763                     sx,sy,
3899                     machine.priority_bitmap,pri,
3900                     drawmode_table,machine.shadow_table);
3764                     machine().priority_bitmap,pri,
3765                     drawmode_table,machine().shadow_table);
39013766            }
39023767            else
39033768            {
3904               pdrawgfxzoom_transtable(bitmap,cliprect,k053245->gfx,
3769               pdrawgfxzoom_transtable(bitmap,cliprect,m_gfx,
39053770                     c,
39063771                     color,
39073772                     fx,fy,
39083773                     sx,sy,
39093774                     (zw << 16) / 16,(zh << 16) / 16,
3910                     machine.priority_bitmap,pri,
3911                     drawmode_table,machine.shadow_table);
3775                     machine().priority_bitmap,pri,
3776                     drawmode_table,machine().shadow_table);
39123777
39133778            }
39143779         }
39153780      }
39163781   }
39173782#if 0
3918if (machine.input().code_pressed(KEYCODE_D))
3783if (machine().input().code_pressed(KEYCODE_D))
39193784{
39203785   FILE *fp;
39213786   fp=fopen("SPRITE.DMP", "w+b");
39223787   if (fp)
39233788   {
3924      fwrite(k053245->buffer, 0x800, 1, fp);
3789      fwrite(m_buffer, 0x800, 1, fp);
39253790      popmessage("saved");
39263791      fclose(fp);
39273792   }
r24078r24079
39303795#undef NUM_SPRITES
39313796}
39323797
3933/* Lethal Enforcers has 2 of these chips hooked up in parallel to give 6bpp gfx.. lets cheat a
3798/* Lethal Enforcers has 2 of these chips hooked up in parallel to give 6bpp gfx.. let's cheat a
39343799  bit and make emulating it a little less messy by using a custom function instead */
3935void k053245_sprites_draw_lethal( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect )
3800void k05324x_device::k053245_sprites_draw_lethal( bitmap_ind16 &bitmap, const rectangle &cliprect )
39363801{
39373802#define NUM_SPRITES 128
3938   k05324x_state *k053245 = k05324x_get_safe_token(device);
39393803   int offs, pri_code, i;
39403804   int sortedlist[NUM_SPRITES];
39413805   int flipscreenX, flipscreenY, spriteoffsX, spriteoffsY;
39423806   UINT8 drawmode_table[256];
3943   running_machine &machine = device->machine();
3944
3807   
39453808   memset(drawmode_table, DRAWMODE_SOURCE, sizeof(drawmode_table));
39463809   drawmode_table[0] = DRAWMODE_NONE;
39473810
3948   flipscreenX = k053245->regs[5] & 0x01;
3949   flipscreenY = k053245->regs[5] & 0x02;
3950   spriteoffsX = (k053245->regs[0] << 8) | k053245->regs[1];
3951   spriteoffsY = (k053245->regs[2] << 8) | k053245->regs[3];
3811   flipscreenX = m_regs[5] & 0x01;
3812   flipscreenY = m_regs[5] & 0x02;
3813   spriteoffsX = (m_regs[0] << 8) | m_regs[1];
3814   spriteoffsY = (m_regs[2] << 8) | m_regs[3];
39523815
39533816   for (offs = 0; offs < NUM_SPRITES; offs++)
39543817      sortedlist[offs] = -1;
39553818
39563819   /* prebuild a sorted table */
3957   for (i = k053245->ramsize / 2, offs = 0; offs < i; offs += 8)
3820   for (i = m_ramsize / 2, offs = 0; offs < i; offs += 8)
39583821   {
3959      pri_code = k053245->buffer[offs];
3822      pri_code = m_buffer[offs];
39603823      if (pri_code & 0x8000)
39613824      {
39623825         pri_code &= 0x007f;
39633826
3964         if (offs && pri_code == k053245->z_rejection)
3827         if (offs && pri_code == m_z_rejection)
39653828            continue;
39663829
39673830         if (sortedlist[pri_code] == -1)
r24078r24079
40043867      /* field to do bank switching. However this applies only to TMNT2, with its */
40053868      /* protection mcu creating the sprite table, so we don't know where to fetch */
40063869      /* the bits from. */
4007      code = k053245->buffer[offs + 1];
3870      code = m_buffer[offs + 1];
40083871      code = ((code & 0xffe1) + ((code & 0x0010) >> 2) + ((code & 0x0008) << 1)
40093872               + ((code & 0x0004) >> 1) + ((code & 0x0002) << 2));
4010      color = k053245->buffer[offs + 6] & 0x00ff;
3873      color = m_buffer[offs + 6] & 0x00ff;
40113874      pri = 0;
40123875
4013      k053245->callback(device->machine(), &code, &color, &pri);
3876      m_callback(machine(), &code, &color, &pri);
40143877
4015      size = (k053245->buffer[offs] & 0x0f00) >> 8;
3878      size = (m_buffer[offs] & 0x0f00) >> 8;
40163879
40173880      w = 1 << (size & 0x03);
40183881      h = 1 << ((size >> 2) & 0x03);
r24078r24079
40223885        <0x40 enlarge (0x20 = double size)
40233886        >0x40 reduce (0x80 = half size)
40243887      */
4025      zoomy = k053245->buffer[offs + 4];
3888      zoomy = m_buffer[offs + 4];
40263889      if (zoomy > 0x2000)
40273890         continue;
40283891      if (zoomy)
40293892         zoomy = (0x400000 + zoomy / 2) / zoomy;
40303893      else
40313894         zoomy = 2 * 0x400000;
4032      if ((k053245->buffer[offs] & 0x4000) == 0)
3895      if ((m_buffer[offs] & 0x4000) == 0)
40333896      {
4034         zoomx = k053245->buffer[offs + 5];
3897         zoomx = m_buffer[offs + 5];
40353898         if (zoomx > 0x2000)
40363899            continue;
40373900         if (zoomx)
r24078r24079
40433906      else
40443907         zoomx = zoomy;
40453908
4046      ox = k053245->buffer[offs + 3] + spriteoffsX;
4047      oy = k053245->buffer[offs + 2];
3909      ox = m_buffer[offs + 3] + spriteoffsX;
3910      oy = m_buffer[offs + 2];
40483911
4049      ox += k053245->dx;
4050      oy += k053245->dy;
3912      ox += m_dx;
3913      oy += m_dy;
40513914
4052      flipx = k053245->buffer[offs] & 0x1000;
4053      flipy = k053245->buffer[offs] & 0x2000;
4054      mirrorx = k053245->buffer[offs + 6] & 0x0100;
3915      flipx = m_buffer[offs] & 0x1000;
3916      flipy = m_buffer[offs] & 0x2000;
3917      mirrorx = m_buffer[offs + 6] & 0x0100;
40553918      if (mirrorx)
40563919         flipx = 0; // documented and confirmed
4057      mirrory = k053245->buffer[offs + 6] & 0x0200;
4058      shadow = k053245->buffer[offs + 6] & 0x0080;
3920      mirrory = m_buffer[offs + 6] & 0x0200;
3921      shadow = m_buffer[offs + 6] & 0x0080;
40593922
40603923      if (flipscreenX)
40613924      {
r24078r24079
40773940      ox -= (zoomx * w) >> 13;
40783941      oy -= (zoomy * h) >> 13;
40793942
4080      drawmode_table[machine.gfx[0]->granularity() - 1] = shadow ? DRAWMODE_SHADOW : DRAWMODE_SOURCE;
3943      drawmode_table[machine().gfx[0]->granularity() - 1] = shadow ? DRAWMODE_SHADOW : DRAWMODE_SOURCE;
40813944
40823945      for (y = 0; y < h; y++)
40833946      {
r24078r24079
41414004
41424005            if (zoomx == 0x10000 && zoomy == 0x10000)
41434006            {
4144               pdrawgfx_transtable(bitmap,cliprect,machine.gfx[0], /* hardcoded to 0 (decoded 6bpp gfx) for le */
4007               pdrawgfx_transtable(bitmap,cliprect,machine().gfx[0], /* hardcoded to 0 (decoded 6bpp gfx) for le */
41454008                     c,
41464009                     color,
41474010                     fx,fy,
41484011                     sx,sy,
4149                     machine.priority_bitmap,pri,
4150                     drawmode_table,machine.shadow_table);
4012                     machine().priority_bitmap,pri,
4013                     drawmode_table,machine().shadow_table);
41514014            }
41524015            else
41534016            {
4154               pdrawgfxzoom_transtable(bitmap,cliprect,machine.gfx[0],  /* hardcoded to 0 (decoded 6bpp gfx) for le */
4017               pdrawgfxzoom_transtable(bitmap,cliprect,machine().gfx[0],  /* hardcoded to 0 (decoded 6bpp gfx) for le */
41554018                     c,
41564019                     color,
41574020                     fx,fy,
41584021                     sx,sy,
41594022                     (zw << 16) / 16,(zh << 16) / 16,
4160                     machine.priority_bitmap,pri,
4161                     drawmode_table,machine.shadow_table);
4023                     machine().priority_bitmap,pri,
4024                     drawmode_table,machine().shadow_table);
41624025
41634026            }
41644027         }
41654028      }
41664029   }
41674030#if 0
4168if (machine.input().code_pressed(KEYCODE_D))
4031if (machine().input().code_pressed(KEYCODE_D))
41694032{
41704033   FILE *fp;
41714034   fp=fopen("SPRITE.DMP", "w+b");
41724035   if (fp)
41734036   {
4174      fwrite(k053245->buffer, 0x800, 1, fp);
4037      fwrite(m_buffer, 0x800, 1, fp);
41754038      popmessage("saved");
41764039      fclose(fp);
41774040   }
r24078r24079
41804043#undef NUM_SPRITES
41814044}
41824045
4183
4184/*****************************************************************************
4185    DEVICE INTERFACE
4186*****************************************************************************/
4187
4188static DEVICE_START( k05324x )
4046READ16_MEMBER( k05324x_device::k053244_reg_word_r )
41894047{
4190   k05324x_state *k05324x = k05324x_get_safe_token(device);
4191   const k05324x_interface *intf = k05324x_get_interface(device);
4192   running_machine &machine = device->machine();
4193   UINT32 total;
4194   static const gfx_layout spritelayout =
4195   {
4196      16,16,
4197      0,
4198      4,
4199      { 24, 16, 8, 0 },
4200      { 0, 1, 2, 3, 4, 5, 6, 7,
4201            8*32+0, 8*32+1, 8*32+2, 8*32+3, 8*32+4, 8*32+5, 8*32+6, 8*32+7 },
4202      { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
4203            16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
4204      128*8
4205   };
4206
4207   /* decode the graphics */
4208   switch (intf->plane_order)
4209   {
4210   case NORMAL_PLANE_ORDER:
4211      total = machine.root_device().memregion(intf->gfx_memory_region)->bytes() / 128;
4212      decode_gfx(machine, intf->gfx_num, machine.root_device().memregion(intf->gfx_memory_region)->base(), total, &spritelayout, 4);
4213      break;
4214
4215   default:
4216      fatalerror("Unsupported plane_order\n");
4217   }
4218
4219   if (VERBOSE && !(machine.config().m_video_attributes & VIDEO_HAS_SHADOWS))
4220      popmessage("driver should use VIDEO_HAS_SHADOWS");
4221
4222   /* deinterleave the graphics, if needed */
4223   deinterleave_gfx(machine, intf->gfx_memory_region, intf->deinterleave);
4224
4225   k05324x->ramsize = 0x800;
4226
4227   k05324x->z_rejection = -1;
4228   k05324x->memory_region = intf->gfx_memory_region;
4229   k05324x->gfx = machine.gfx[intf->gfx_num];
4230   k05324x->dx = intf->dx;
4231   k05324x->dy = intf->dy;
4232   k05324x->callback = intf->callback;
4233   k05324x->ram = auto_alloc_array(machine, UINT16, k05324x->ramsize / 2);
4234
4235   k05324x->buffer = auto_alloc_array(machine, UINT16, k05324x->ramsize / 2);
4236
4237   device->save_pointer(NAME(k05324x->ram), k05324x->ramsize / 2);
4238   device->save_pointer(NAME(k05324x->buffer), k05324x->ramsize / 2);
4239   device->save_item(NAME(k05324x->rombank));
4240   device->save_item(NAME(k05324x->z_rejection));
4241   device->save_item(NAME(k05324x->regs));
4048   return(m_regs[offset * 2] << 8 | m_regs[offset * 2 + 1]);
42424049}
42434050
4244static DEVICE_RESET( k05324x )
4245{
4246   k05324x_state *k05324x = k05324x_get_safe_token(device);
4247   int i;
42484051
4249   k05324x->rombank = 0;
4250
4251   for (i = 0; i < 0x10; i++)
4252      k05324x->regs[i] = 0;
4253}
4254
4255
4256const device_type K053244 = &device_creator<k05324x_device>;
4257
4258k05324x_device::k05324x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
4259   : device_t(mconfig, K053244, "Konami 053244 & 053245", tag, owner, clock, "k05324x", __FILE__)
4260{
4261   m_token = global_alloc_clear(k05324x_state);
4262}
4263
4264//-------------------------------------------------
4265//  device_config_complete - perform any
4266//  operations now that the configuration is
4267//  complete
4268//-------------------------------------------------
4269
4270void k05324x_device::device_config_complete()
4271{
4272}
4273
4274//-------------------------------------------------
4275//  device_start - device-specific startup
4276//-------------------------------------------------
4277
4278void k05324x_device::device_start()
4279{
4280   DEVICE_START_NAME( k05324x )(this);
4281}
4282
4283//-------------------------------------------------
4284//  device_reset - device-specific reset
4285//-------------------------------------------------
4286
4287void k05324x_device::device_reset()
4288{
4289   DEVICE_RESET_NAME( k05324x )(this);
4290}
4291
42924052/***************************************************************************/
42934053/*                                                                         */
42944054/*                                 053246/053247                           */
r24078r24079
53555115        0x00-0xff = zcode to ignore
53565116*/
53575117
5358
5359void k05324x_set_z_rejection( device_t *device, int zcode )
5360{
5361   k05324x_state *k05324x = k05324x_get_safe_token(device);
5362   k05324x->z_rejection = zcode;
5363}
5364
53655118void k053247_set_z_rejection( device_t *device, int zcode )
53665119{
53675120   k053247_state *k053247 = k053247_get_safe_token(device);
r24078r24079
1089810651   offset <<= 1;
1089910652   return (k055555_word_r(device, space, offset + 1, 0xffff) | k055555_word_r(device, space, offset, 0xffff) << 16);
1090010653}
10901
10902READ16_DEVICE_HANDLER( k053244_reg_word_r )
10903{
10904   k05324x_state *k053244 = k05324x_get_safe_token(device);
10905   return(k053244->regs[offset * 2] << 8 | k053244->regs[offset * 2 + 1]);
10906}
trunk/src/mame/video/konicdev.h
r24078r24079
2828
2929struct k007342_interface
3030{
31   int                gfxnum;
32   k007342_callback   callback;
31   int                m_gfxnum;
32   k007342_callback   m_callback;
3333};
3434
3535struct k007420_interface
3636{
37   int                banklimit;
38   k007420_callback   callback;
37   int                m_banklimit;
38   k007420_callback   m_callback;
3939};
4040
4141struct k052109_interface
4242{
43   const char         *gfx_memory_region;
44   int                gfx_num;
45   int                plane_order;
46   int                deinterleave;
47   k052109_callback   callback;
43   const char         *m_gfx_memory_region;
44   int                m_gfx_num;
45   int                m_plane_order;
46   int                m_deinterleave;
47   k052109_callback   m_callback;
4848};
4949
5050struct k051960_interface
5151{
52   const char         *gfx_memory_region;
53   int                gfx_num;
54   int                plane_order;
55   int                deinterleave;
56   k051960_callback   callback;
52   const char         *m_gfx_memory_region;
53   int                m_gfx_num;
54   int                m_plane_order;
55   int                m_deinterleave;
56   k051960_callback   m_callback;
5757};
5858
5959struct k05324x_interface
6060{
61   const char         *gfx_memory_region;
62   int                gfx_num;
63   int                plane_order;
64   int                dx, dy;
65   int                deinterleave;
66   k05324x_callback   callback;
61   const char         *m_gfx_memory_region;
62   int                m_gfx_num;
63   int                m_plane_order;
64   int                m_dx, m_dy;
65   int                m_deinterleave;
66   k05324x_callback   m_callback;
6767};
6868
6969struct k053247_interface
r24078r24079
148148{
149149public:
150150   k007121_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
151   ~k007121_device() { global_free(m_token); }
151   ~k007121_device() {}
152   
153   DECLARE_READ8_MEMBER( ctrlram_r );
154   DECLARE_WRITE8_MEMBER( ctrl_w );
152155
153   // access to legacy token
154   void *token() const { assert(m_token != NULL); return m_token; }
156   /* shall we move source in the interface? */
157   /* also notice that now we directly pass *gfx[chip] instead of **gfx !! */
158   void sprites_draw( bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx, colortable_t *ctable,   const UINT8 *source, int base_color, int global_x_offset, int bank_base, UINT32 pri_mask );
159
155160protected:
156161   // device-level overrides
157162   virtual void device_config_complete();
158163   virtual void device_start();
159164   virtual void device_reset();
165   
160166private:
161167   // internal state
162   void *m_token;
168   UINT8    m_ctrlram[8];
169   int      m_flipscreen;
163170};
164171
165172extern const device_type K007121;
166173
167class k007342_device : public device_t
174class k007342_device : public device_t,
175                              public k007342_interface
168176{
169177public:
170178   k007342_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
171   ~k007342_device() { global_free(m_token); }
179   ~k007342_device() {}
172180
173   // access to legacy token
174   void *token() const { assert(m_token != NULL); return m_token; }
181   DECLARE_READ8_MEMBER( read );
182   DECLARE_WRITE8_MEMBER( write );
183   DECLARE_READ8_MEMBER( scroll_r );
184   DECLARE_WRITE8_MEMBER( scroll_w );
185   DECLARE_WRITE8_MEMBER( vreg_w );
186
187   void tilemap_update();
188   void tilemap_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int num, int flags, UINT32 priority);
189   int is_int_enabled();
190
175191protected:
176192   // device-level overrides
177193   virtual void device_config_complete();
r24078r24079
179195   virtual void device_reset();
180196private:
181197   // internal state
182   void *m_token;
198   UINT8    *m_ram;
199   UINT8    *m_scroll_ram;
200   UINT8    *m_videoram_0;
201   UINT8    *m_videoram_1;
202   UINT8    *m_colorram_0;
203   UINT8    *m_colorram_1;
183204
184   TILEMAP_MAPPER_MEMBER(k007342_scan);
185   TILE_GET_INFO_MEMBER(k007342_get_tile_info0);
186   TILE_GET_INFO_MEMBER(k007342_get_tile_info1);
205   tilemap_t  *m_tilemap[2];
206   int      m_flipscreen, m_int_enabled;
207   UINT8    m_regs[8];
208   UINT16   m_scrollx[2];
209   UINT8    m_scrolly[2];
210
211   TILEMAP_MAPPER_MEMBER(scan);
212   TILE_GET_INFO_MEMBER(get_tile_info0);
213   TILE_GET_INFO_MEMBER(get_tile_info1);
214   void get_tile_info( tile_data &tileinfo, int tile_index, int layer, UINT8 *cram, UINT8 *vram );
187215};
188216
189217extern const device_type K007342;
190218
191class k007420_device : public device_t
219class k007420_device : public device_t,
220                              public k007420_interface
192221{
193222public:
194223   k007420_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
195   ~k007420_device() { global_free(m_token); }
224   ~k007420_device() {}
196225
197   // access to legacy token
198   void *token() const { assert(m_token != NULL); return m_token; }
226   DECLARE_READ8_MEMBER( read );
227   DECLARE_WRITE8_MEMBER( write );
228   void sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx);
229
199230protected:
200231   // device-level overrides
201232   virtual void device_config_complete();
r24078r24079
203234   virtual void device_reset();
204235private:
205236   // internal state
206   void *m_token;
237   UINT8        *m_ram;
238
239   int          m_flipscreen;    // current code uses the 7342 flipscreen!!
240   UINT8        m_regs[8];   // current code uses the 7342 regs!! (only [2])
207241};
208242
209243extern const device_type K007420;
210244
211class k052109_device : public device_t
245class k052109_device : public device_t,
246                              public k052109_interface
212247{
213248public:
214249   k052109_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
215   ~k052109_device() { global_free(m_token); }
250   ~k052109_device() {}
216251
217   // access to legacy token
218   void *token() const { assert(m_token != NULL); return m_token; }
252   /*
253   You don't have to decode the graphics: the vh_start() routines will do that
254   for you, using the plane order passed.
255   Of course the ROM data must be in the correct order. This is a way to ensure
256   that the ROM test will pass.
257   The konami_rom_deinterleave() function above will do the reorganization for
258   you in most cases (but see tmnt.c for additional bit rotations or byte
259   permutations which may be required).
260   */
261   #define NORMAL_PLANE_ORDER 0x0123
262   #define REVERSE_PLANE_ORDER 0x3210
263   #define GRADIUS3_PLANE_ORDER 0x1111
264   #define TASMAN_PLANE_ORDER 0x1616
265   
266   /*
267   The callback is passed:
268   - layer number (0 = FIX, 1 = A, 2 = B)
269   - bank (range 0-3, output of the pins CAB1 and CAB2)
270   - code (range 00-FF, output of the pins VC3-VC10)
271   NOTE: code is in the range 0000-FFFF for X-Men, which uses extra RAM
272   - color (range 00-FF, output of the pins COL0-COL7)
273   The callback must put:
274   - in code the resulting tile number
275   - in color the resulting color index
276   - if necessary, put flags and/or priority for the TileMap code in the tile_info
277   structure (e.g. TILE_FLIPX). Note that TILE_FLIPY is handled internally by the
278   chip so it must not be set by the callback.
279   */
280
281   DECLARE_READ8_MEMBER( read );
282   DECLARE_WRITE8_MEMBER( write );   
283   DECLARE_READ16_MEMBER( word_r );
284   DECLARE_WRITE16_MEMBER( word_w );
285   DECLARE_READ16_MEMBER( lsb_r );
286   DECLARE_WRITE16_MEMBER( lsb_w );
287   
288   void set_rmrd_line(int state);
289   int get_rmrd_line();
290   void tilemap_update();
291   int is_irq_enabled();
292   void set_layer_offsets(int layer, int dx, int dy);
293   void tilemap_mark_dirty(int tmap_num);
294   void tilemap_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int tmap_num, UINT32 flags, UINT8 priority);
295
219296protected:
220297   // device-level overrides
221298   virtual void device_config_complete();
r24078r24079
223300   virtual void device_reset();
224301private:
225302   // internal state
226   void *m_token;
303   UINT8    *m_ram;
304   UINT8    *m_videoram_F;
305   UINT8    *m_videoram_A;
306   UINT8    *m_videoram_B;
307   UINT8    *m_videoram2_F;
308   UINT8    *m_videoram2_A;
309   UINT8    *m_videoram2_B;
310   UINT8    *m_colorram_F;
311   UINT8    *m_colorram_A;
312   UINT8    *m_colorram_B;
227313
228   TILE_GET_INFO_MEMBER(k052109_get_tile_info0);
229   TILE_GET_INFO_MEMBER(k052109_get_tile_info1);
230   TILE_GET_INFO_MEMBER(k052109_get_tile_info2);
314   tilemap_t  *m_tilemap[3];
315   int      m_tileflip_enable;
316   UINT8    m_charrombank[4];
317   UINT8    m_charrombank_2[4];
318   UINT8    m_has_extra_video_ram;
319   INT32    m_rmrd_line;
320   UINT8    m_irq_enabled;
321   INT32    m_dx[3], m_dy[3];
322   UINT8    m_romsubbank, m_scrollctrl;
323
324   TILE_GET_INFO_MEMBER(get_tile_info0);
325   TILE_GET_INFO_MEMBER(get_tile_info1);
326   TILE_GET_INFO_MEMBER(get_tile_info2);
327   
328   void get_tile_info( tile_data &tileinfo, int tile_index, int layer, UINT8 *cram, UINT8 *vram1, UINT8 *vram2 );
329   void tileflip_reset();
231330};
232331
233332extern const device_type K052109;
234333
235class k051960_device : public device_t
334class k051960_device : public device_t,
335                              public k051960_interface
236336{
237337public:
238338   k051960_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
239   ~k051960_device() { global_free(m_token); }
339   ~k051960_device() {}
240340
241   // access to legacy token
242   void *token() const { assert(m_token != NULL); return m_token; }
341   /*
342   The callback is passed:
343   - code (range 00-1FFF, output of the pins CA5-CA17)
344   - color (range 00-FF, output of the pins OC0-OC7). Note that most of the
345     time COL7 seems to be "shadow", but not always (e.g. Aliens).
346   The callback must put:
347   - in code the resulting sprite number
348   - in color the resulting color index
349   - if necessary, in priority the priority of the sprite wrt tilemaps
350   - if necessary, alter shadow to indicate whether the sprite has shadows enabled.
351     shadow is preloaded with color & 0x80 so it doesn't need to be changed unless
352     the game has special treatment (Aliens)
353   */
354
355   DECLARE_READ8_MEMBER( k051960_r );
356   DECLARE_WRITE8_MEMBER( k051960_w );
357   DECLARE_READ16_MEMBER( k051960_word_r );
358   DECLARE_WRITE16_MEMBER( k051960_word_w );
359
360   DECLARE_READ8_MEMBER( k051937_r );
361   DECLARE_WRITE8_MEMBER( k051937_w );
362   DECLARE_READ16_MEMBER( k051937_word_r );
363   DECLARE_WRITE16_MEMBER( k051937_word_w );
364
365   void k051960_sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int min_priority, int max_priority);
366   int k051960_is_irq_enabled();
367   int k051960_is_nmi_enabled();
368   void k051960_set_sprite_offsets(int dx, int dy);
369
370   #if 0 // to be moved in the specific drivers!
371   /* special handling for the chips sharing address space */
372   DECLARE_READ8_HANDLER( k052109_051960_r );
373   DECLARE_WRITE8_HANDLER( k052109_051960_w );
374   #endif
375
243376protected:
244377   // device-level overrides
245378   virtual void device_config_complete();
r24078r24079
247380   virtual void device_reset();
248381private:
249382   // internal state
250   void *m_token;
383   UINT8    *m_ram;
384
385   gfx_element *m_gfx;
386
387   UINT8    m_spriterombank[3];
388   int      m_dx, m_dy;
389   int      m_romoffset;
390   int      m_spriteflip, m_readroms;
391   int      m_irq_enabled, m_nmi_enabled;
392
393   int      m_k051937_counter;
394   
395   int k051960_fetchromdata( int byte );
251396};
252397
253398extern const device_type K051960;
254399
255class k05324x_device : public device_t
400class k05324x_device : public device_t,
401                              public k05324x_interface
256402{
257403public:
258404   k05324x_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
259   ~k05324x_device() { global_free(m_token); }
405   ~k05324x_device() {}
260406
261   // access to legacy token
262   void *token() const { assert(m_token != NULL); return m_token; }
407   DECLARE_READ16_MEMBER( k053245_word_r );
408   DECLARE_WRITE16_MEMBER( k053245_word_w );
409   DECLARE_READ8_MEMBER( k053245_r );
410   DECLARE_WRITE8_MEMBER( k053245_w );
411   DECLARE_READ8_MEMBER( k053244_r );
412   DECLARE_WRITE8_MEMBER( k053244_w );
413   DECLARE_READ16_MEMBER( k053244_lsb_r );
414   DECLARE_WRITE16_MEMBER( k053244_lsb_w );
415   DECLARE_READ16_MEMBER( k053244_word_r );
416   DECLARE_WRITE16_MEMBER( k053244_word_w );
417   void k053244_bankselect(int bank);    /* used by TMNT2, Asterix and Premier Soccer for ROM testing */
418   void k053245_sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect);
419   void k053245_sprites_draw_lethal(bitmap_ind16 &bitmap, const rectangle &cliprect); /* for lethal enforcers */
420   void k053245_clear_buffer();
421   void k053245_update_buffer();
422   void k053245_set_sprite_offs(int offsx, int offsy);
423   void k05324x_set_z_rejection(int zcode); // common to k053244/5
424
263425protected:
264426   // device-level overrides
265427   virtual void device_config_complete();
r24078r24079
267429   virtual void device_reset();
268430private:
269431   // internal state
270   void *m_token;
432   UINT16    *m_ram;
433   UINT16    *m_buffer;
434
435   gfx_element *m_gfx;
436
437   UINT8    m_regs[0x10];    // 053244
438   int      m_rombank;       // 053244
439   int      m_ramsize;
440   int      m_z_rejection;
441   
442   DECLARE_READ16_MEMBER( k053244_reg_word_r );    // OBJSET0 debug handler
271443};
272444
273445extern const device_type K053244;
r24078r24079
722894    DEVICE I/O FUNCTIONS
723895***************************************************************************/
724896
725/**  Konami 007121  **/
726DECLARE_READ8_DEVICE_HANDLER( k007121_ctrlram_r );
727DECLARE_WRITE8_DEVICE_HANDLER( k007121_ctrl_w );
728
729/* shall we move source in the interface? */
730/* also notice that now we directly pass *gfx[chip] instead of **gfx !! */
731void k007121_sprites_draw( device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx, colortable_t *ctable,
732                     const UINT8 *source, int base_color, int global_x_offset, int bank_base, UINT32 pri_mask );
733
734
735/**  Konami 007342  **/
736DECLARE_READ8_DEVICE_HANDLER( k007342_r );
737DECLARE_WRITE8_DEVICE_HANDLER( k007342_w );
738DECLARE_READ8_DEVICE_HANDLER( k007342_scroll_r );
739DECLARE_WRITE8_DEVICE_HANDLER( k007342_scroll_w );
740DECLARE_WRITE8_DEVICE_HANDLER( k007342_vreg_w );
741
742void k007342_tilemap_update(device_t *device);
743void k007342_tilemap_draw(device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, int num, int flags, UINT32 priority);
744int k007342_is_int_enabled(device_t *device);
745
746
747/**  Konami 007420  **/
748#define K007420_SPRITERAM_SIZE 0x200
749
750DECLARE_READ8_DEVICE_HANDLER( k007420_r );
751DECLARE_WRITE8_DEVICE_HANDLER( k007420_w );
752void k007420_sprites_draw(device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, gfx_element *gfx);
753
754
755/**  Konami 052109  **/
756/*
757You don't have to decode the graphics: the vh_start() routines will do that
758for you, using the plane order passed.
759Of course the ROM data must be in the correct order. This is a way to ensure
760that the ROM test will pass.
761The konami_rom_deinterleave() function above will do the reorganization for
762you in most cases (but see tmnt.c for additional bit rotations or byte
763permutations which may be required).
764*/
765#define NORMAL_PLANE_ORDER 0x0123
766#define REVERSE_PLANE_ORDER 0x3210
767#define GRADIUS3_PLANE_ORDER 0x1111
768#define TASMAN_PLANE_ORDER 0x1616
769
770/*
771The callback is passed:
772- layer number (0 = FIX, 1 = A, 2 = B)
773- bank (range 0-3, output of the pins CAB1 and CAB2)
774- code (range 00-FF, output of the pins VC3-VC10)
775  NOTE: code is in the range 0000-FFFF for X-Men, which uses extra RAM
776- color (range 00-FF, output of the pins COL0-COL7)
777The callback must put:
778- in code the resulting tile number
779- in color the resulting color index
780- if necessary, put flags and/or priority for the TileMap code in the tile_info
781  structure (e.g. TILE_FLIPX). Note that TILE_FLIPY is handled internally by the
782  chip so it must not be set by the callback.
783*/
784
785DECLARE_READ8_DEVICE_HANDLER( k052109_r );
786DECLARE_WRITE8_DEVICE_HANDLER( k052109_w );
787DECLARE_READ16_DEVICE_HANDLER( k052109_word_r );
788DECLARE_WRITE16_DEVICE_HANDLER( k052109_word_w );
789DECLARE_READ16_DEVICE_HANDLER( k052109_lsb_r );
790DECLARE_WRITE16_DEVICE_HANDLER( k052109_lsb_w );
791
792void k052109_set_rmrd_line(device_t *device, int state);
793int k052109_get_rmrd_line(device_t *device);
794void k052109_tilemap_update(device_t *device);
795int k052109_is_irq_enabled(device_t *device);
796void k052109_set_layer_offsets(device_t *device, int layer, int dx, int dy);
797void k052109_tilemap_mark_dirty(device_t *device, int tmap_num);
798void k052109_tilemap_draw(device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, int tmap_num, UINT32 flags, UINT8 priority);
799
800
801/**  Konami 051960 / 051937  **/
802/*
803The callback is passed:
804- code (range 00-1FFF, output of the pins CA5-CA17)
805- color (range 00-FF, output of the pins OC0-OC7). Note that most of the
806  time COL7 seems to be "shadow", but not always (e.g. Aliens).
807The callback must put:
808- in code the resulting sprite number
809- in color the resulting color index
810- if necessary, in priority the priority of the sprite wrt tilemaps
811- if necessary, alter shadow to indicate whether the sprite has shadows enabled.
812  shadow is preloaded with color & 0x80 so it doesn't need to be changed unless
813  the game has special treatment (Aliens)
814*/
815
816DECLARE_READ8_DEVICE_HANDLER( k051960_r );
817DECLARE_WRITE8_DEVICE_HANDLER( k051960_w );
818DECLARE_READ16_DEVICE_HANDLER( k051960_word_r );
819DECLARE_WRITE16_DEVICE_HANDLER( k051960_word_w );
820
821DECLARE_READ8_DEVICE_HANDLER( k051937_r );
822DECLARE_WRITE8_DEVICE_HANDLER( k051937_w );
823DECLARE_READ16_DEVICE_HANDLER( k051937_word_r );
824DECLARE_WRITE16_DEVICE_HANDLER( k051937_word_w );
825
826void k051960_sprites_draw(device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect, int min_priority, int max_priority);
827int k051960_is_irq_enabled(device_t *device);
828int k051960_is_nmi_enabled(device_t *device);
829void k051960_set_sprite_offsets(device_t *device, int dx, int dy);
830
831#if 0 // to be moved in the specific drivers!
832/* special handling for the chips sharing address space */
833DECLARE_READ8_HANDLER( k052109_051960_r );
834DECLARE_WRITE8_HANDLER( k052109_051960_w );
835#endif
836
837
838/**  Konami 053244 / 053245  **/
839DECLARE_READ16_DEVICE_HANDLER( k053245_word_r );
840DECLARE_WRITE16_DEVICE_HANDLER( k053245_word_w );
841DECLARE_READ8_DEVICE_HANDLER( k053245_r );
842DECLARE_WRITE8_DEVICE_HANDLER( k053245_w );
843DECLARE_READ8_DEVICE_HANDLER( k053244_r );
844DECLARE_WRITE8_DEVICE_HANDLER( k053244_w );
845DECLARE_READ16_DEVICE_HANDLER( k053244_lsb_r );
846DECLARE_WRITE16_DEVICE_HANDLER( k053244_lsb_w );
847DECLARE_READ16_DEVICE_HANDLER( k053244_word_r );
848DECLARE_WRITE16_DEVICE_HANDLER( k053244_word_w );
849void k053244_bankselect(device_t *device, int bank);    /* used by TMNT2, Asterix and Premier Soccer for ROM testing */
850void k053245_sprites_draw(device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect);
851void k053245_sprites_draw_lethal(device_t *device, bitmap_ind16 &bitmap, const rectangle &cliprect); /* for lethal enforcers */
852void k053245_clear_buffer(device_t *device);
853void k053245_set_sprite_offs(device_t *device, int offsx, int offsy);
854
855
856
857897/**  Konami 053246 / 053247 / 055673  **/
858898#define K055673_LAYOUT_GX  0
859899#define K055673_LAYOUT_RNG 1
r24078r24079
887927int k053247_read_register(device_t *device, int regnum);
888928void k053247_set_sprite_offs(device_t *device, int offsx, int offsy);
889929void k053247_wraparound_enable(device_t *device, int status);
890void k05324x_set_z_rejection(device_t *device, int zcode); // common to k053244/5
891930void k053247_set_z_rejection(device_t *device, int zcode); // common to k053246/7
892931void k053247_get_ram(device_t *device, UINT16 **ram);
893932int k053247_get_dx(device_t *device);
r24078r24079
11751214DECLARE_READ32_DEVICE_HANDLER( k053247_reg_long_r );    // OBJSET2
11761215DECLARE_READ32_DEVICE_HANDLER( k055555_long_r );        // PCU2
11771216
1178DECLARE_READ16_DEVICE_HANDLER( k053244_reg_word_r );    // OBJSET0
1179
11801217#endif
trunk/src/mame/video/ultraman.c
r24078r24079
123123{
124124   k051316_zoom_draw(m_k051316_3, bitmap, cliprect, 0, 0);
125125   k051316_zoom_draw(m_k051316_2, bitmap, cliprect, 0, 0);
126   k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
126   m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
127127   k051316_zoom_draw(m_k051316_1, bitmap, cliprect, 0, 0);
128   k051960_sprites_draw(m_k051960, bitmap, cliprect, 1, 1);
128   m_k051960->k051960_sprites_draw(bitmap, cliprect, 1, 1);
129129   return 0;
130130}
trunk/src/mame/video/parodius.c
r24078r24079
5555   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI4);
5656   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI3);
5757
58   k052109_tilemap_update(m_k052109);
58   m_k052109->tilemap_update();
5959
6060   layer[0] = 0;
6161   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
6868
6969   machine().priority_bitmap.fill(0, cliprect);
7070   bitmap.fill(16 * bg_colorbase, cliprect);
71   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[0], 0,1);
72   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[1], 0,2);
73   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[2], 0,4);
71   m_k052109->tilemap_draw(bitmap, cliprect, layer[0], 0,1);
72   m_k052109->tilemap_draw(bitmap, cliprect, layer[1], 0,2);
73   m_k052109->tilemap_draw(bitmap, cliprect, layer[2], 0,4);
7474
75   k053245_sprites_draw(m_k053245, bitmap, cliprect);
75   m_k053245->k053245_sprites_draw(bitmap, cliprect);
7676   return 0;
7777}
trunk/src/mame/video/combatsc.c
r24078r24079
114114
115115TILE_GET_INFO_MEMBER(combatsc_state::get_tile_info0)
116116{
117   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_1, generic_space(), 6);
117   UINT8 ctrl_6 = m_k007121_1->ctrlram_r(generic_space(), 6);
118118   UINT8 attributes = m_page[0][tile_index];
119119   int bank = 4 * ((m_vreg & 0x0f) - 1);
120120   int number, color;
r24078r24079
148148
149149TILE_GET_INFO_MEMBER(combatsc_state::get_tile_info1)
150150{
151   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_2, generic_space(), 6);
151   UINT8 ctrl_6 = m_k007121_2->ctrlram_r(generic_space(), 6);
152152   UINT8 attributes = m_page[1][tile_index];
153153   int bank = 4 * ((m_vreg >> 4) - 1);
154154   int number, color;
r24078r24079
346346
347347WRITE8_MEMBER(combatsc_state::combatsc_pf_control_w)
348348{
349   device_t *k007121 = m_video_circuit ? m_k007121_2 : m_k007121_1;
350   k007121_ctrl_w(k007121, space, offset, data);
349   k007121_device *k007121 = m_video_circuit ? m_k007121_2 : m_k007121_1;
350   k007121->ctrl_w(space, offset, data);
351351
352352   if (offset == 7)
353353      m_bg_tilemap[m_video_circuit]->set_flip((data & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
r24078r24079
381381
382382void combatsc_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, const UINT8 *source, int circuit, UINT32 pri_mask )
383383{
384   device_t *k007121 = circuit ? m_k007121_2 : m_k007121_1;
384   k007121_device *k007121 = circuit ? m_k007121_2 : m_k007121_1;
385385   address_space &space = machine().driver_data()->generic_space();
386   int base_color = (circuit * 4) * 16 + (k007121_ctrlram_r(k007121, space, 6) & 0x10) * 2;
386   int base_color = (circuit * 4) * 16 + (k007121->ctrlram_r(space, 6) & 0x10) * 2;
387387
388   k007121_sprites_draw(k007121, bitmap, cliprect, machine().gfx[circuit], machine().colortable, source, base_color, 0, 0, pri_mask);
388   k007121->sprites_draw(bitmap, cliprect, machine().gfx[circuit], machine().colortable, source, base_color, 0, 0, pri_mask);
389389}
390390
391391
r24078r24079
396396   set_pens();
397397
398398   address_space &space = machine().driver_data()->generic_space();
399   if (k007121_ctrlram_r(m_k007121_1, space, 1) & 0x02)
399   if (m_k007121_1->ctrlram_r(space, 1) & 0x02)
400400   {
401401      m_bg_tilemap[0]->set_scroll_rows(32);
402402      for (i = 0; i < 32; i++)
r24078r24079
405405   else
406406   {
407407      m_bg_tilemap[0]->set_scroll_rows(1);
408      m_bg_tilemap[0]->set_scrollx(0, k007121_ctrlram_r(m_k007121_1, space, 0) | ((k007121_ctrlram_r(m_k007121_1, space, 1) & 0x01) << 8));
408      m_bg_tilemap[0]->set_scrollx(0, m_k007121_1->ctrlram_r(space, 0) | ((m_k007121_1->ctrlram_r(space, 1) & 0x01) << 8));
409409   }
410410
411   if (k007121_ctrlram_r(m_k007121_2, space, 1) & 0x02)
411   if (m_k007121_2->ctrlram_r(space, 1) & 0x02)
412412   {
413413      m_bg_tilemap[1]->set_scroll_rows(32);
414414      for (i = 0; i < 32; i++)
r24078r24079
417417   else
418418   {
419419      m_bg_tilemap[1]->set_scroll_rows(1);
420      m_bg_tilemap[1]->set_scrollx(0, k007121_ctrlram_r(m_k007121_2, space, 0) | ((k007121_ctrlram_r(m_k007121_2, space, 1) & 0x01) << 8));
420      m_bg_tilemap[1]->set_scrollx(0, m_k007121_2->ctrlram_r(space, 0) | ((m_k007121_2->ctrlram_r(space, 1) & 0x01) << 8));
421421   }
422422
423   m_bg_tilemap[0]->set_scrolly(0, k007121_ctrlram_r(m_k007121_1, space, 2));
424   m_bg_tilemap[1]->set_scrolly(0, k007121_ctrlram_r(m_k007121_2, space, 2));
423   m_bg_tilemap[0]->set_scrolly(0, m_k007121_1->ctrlram_r(space, 2));
424   m_bg_tilemap[1]->set_scrolly(0, m_k007121_2->ctrlram_r(space, 2));
425425
426426   machine().priority_bitmap.fill(0, cliprect);
427427
r24078r24079
448448      draw_sprites(bitmap, cliprect, m_spriteram[0], 0, 0x4444);
449449   }
450450
451   if (k007121_ctrlram_r(m_k007121_1, space, 1) & 0x08)
451   if (m_k007121_1->ctrlram_r(space, 1) & 0x08)
452452   {
453453      for (i = 0; i < 32; i++)
454454      {
r24078r24079
458458   }
459459
460460   /* chop the extreme columns if necessary */
461   if (k007121_ctrlram_r(m_k007121_1, space, 3) & 0x40)
461   if (m_k007121_1->ctrlram_r(space, 3) & 0x40)
462462   {
463463      rectangle clip;
464464
trunk/src/mame/video/rockrage.c
r24078r24079
11#include "emu.h"
2#include "video/konicdev.h"
32#include "includes/rockrage.h"
43
54void rockrage_state::palette_init()
r24078r24079
10099{
101100   set_pens(machine());
102101
103   k007342_tilemap_update(m_k007342);
102   m_k007342->tilemap_update();
104103
105   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
106   k007420_sprites_draw(m_k007420, bitmap, cliprect, machine().gfx[1]);
107   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 0, 1 | TILEMAP_DRAW_OPAQUE, 0);
108   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 1, 0, 0);
109   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 1, 1, 0);
104   m_k007342->tilemap_draw(bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
105   m_k007420->sprites_draw(bitmap, cliprect, machine().gfx[1]);
106   m_k007342->tilemap_draw(bitmap, cliprect, 0, 1 | TILEMAP_DRAW_OPAQUE, 0);
107   m_k007342->tilemap_draw(bitmap, cliprect, 1, 0, 0);
108   m_k007342->tilemap_draw(bitmap, cliprect, 1, 1, 0);
110109   return 0;
111110}
trunk/src/mame/video/ajax.c
r24078r24079
8787
8888UINT32 ajax_state::screen_update_ajax(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
8989{
90   k052109_tilemap_update(m_k052109);
90   m_k052109->tilemap_update();
9191
9292   machine().priority_bitmap.fill(0, cliprect);
9393
9494   bitmap.fill(get_black_pen(machine()), cliprect);
95   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 1);
95   m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 1);
9696   if (m_priority)
9797   {
9898      /* basic layer order is B, zoom, A, F */
9999      k051316_zoom_draw(m_k051316, bitmap, cliprect, 0, 4);
100      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 2);
100      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 2);
101101   }
102102   else
103103   {
104104      /* basic layer order is B, A, zoom, F */
105      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 2);
105      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 2);
106106      k051316_zoom_draw(m_k051316, bitmap, cliprect, 0, 4);
107107   }
108   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 8);
108   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 8);
109109
110   k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
110   m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
111111   return 0;
112112}
trunk/src/mame/video/fastlane.c
r24078r24079
11#include "emu.h"
2#include "video/konicdev.h"
32#include "includes/fastlane.h"
43
54
r24078r24079
4847
4948TILE_GET_INFO_MEMBER(fastlane_state::get_tile_info0)
5049{
51   UINT8 ctrl_3 = k007121_ctrlram_r(m_k007121, generic_space(), 3);
52   UINT8 ctrl_4 = k007121_ctrlram_r(m_k007121, generic_space(), 4);
53   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121, generic_space(), 5);
50   UINT8 ctrl_3 = m_k007121->ctrlram_r(generic_space(), 3);
51   UINT8 ctrl_4 = m_k007121->ctrlram_r(generic_space(), 4);
52   UINT8 ctrl_5 = m_k007121->ctrlram_r(generic_space(), 5);
5453   int attr = m_videoram1[tile_index];
5554   int code = m_videoram1[tile_index + 0x400];
5655   int bit0 = (ctrl_5 >> 0) & 0x03;
r24078r24079
7675
7776TILE_GET_INFO_MEMBER(fastlane_state::get_tile_info1)
7877{
79   UINT8 ctrl_3 = k007121_ctrlram_r(m_k007121, generic_space(), 3);
80   UINT8 ctrl_4 = k007121_ctrlram_r(m_k007121, generic_space(), 4);
81   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121, generic_space(), 5);
78   UINT8 ctrl_3 = m_k007121->ctrlram_r(generic_space(), 3);
79   UINT8 ctrl_4 = m_k007121->ctrlram_r(generic_space(), 4);
80   UINT8 ctrl_5 = m_k007121->ctrlram_r(generic_space(), 5);
8281   int attr = m_videoram2[tile_index];
8382   int code = m_videoram2[tile_index + 0x400];
8483   int bit0 = (ctrl_5 >> 0) & 0x03;
r24078r24079
161160
162161   /* set scroll registers */
163162   address_space &space = machine().driver_data()->generic_space();
164   xoffs = k007121_ctrlram_r(m_k007121, space, 0);
163   xoffs = m_k007121->ctrlram_r(space, 0);
165164   for (i = 0; i < 32; i++)
166165      m_layer0->set_scrollx(i, m_k007121_regs[0x20 + i] + xoffs - 40);
167166
168   m_layer0->set_scrolly(0, k007121_ctrlram_r(m_k007121, space, 2));
167   m_layer0->set_scrolly(0, m_k007121->ctrlram_r(space, 2));
169168
170169   m_layer0->draw(bitmap, finalclip0, 0, 0);
171   k007121_sprites_draw(m_k007121, bitmap, cliprect, machine().gfx[0], machine().colortable, m_spriteram, 0, 40, 0, (UINT32)-1);
170   m_k007121->sprites_draw(bitmap, cliprect, machine().gfx[0], machine().colortable, m_spriteram, 0, 40, 0, (UINT32)-1);
172171   m_layer1->draw(bitmap, finalclip1, 0, 0);
173172   return 0;
174173}
trunk/src/mame/video/vendetta.c
r24078r24079
6161   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI3);
6262   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI4);
6363
64   k052109_tilemap_update(m_k052109);
64   m_k052109->tilemap_update();
6565
6666   layer[0] = 0;
6767   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
7373   konami_sortlayers3(layer, m_layerpri);
7474
7575   machine().priority_bitmap.fill(0, cliprect);
76   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
77   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[1], 0, 2);
78   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[2], 0, 4);
76   m_k052109->tilemap_draw(bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
77   m_k052109->tilemap_draw(bitmap, cliprect, layer[1], 0, 2);
78   m_k052109->tilemap_draw(bitmap, cliprect, layer[2], 0, 4);
7979
8080   k053247_sprites_draw(m_k053246, bitmap, cliprect);
8181   return 0;
trunk/src/mame/video/crimfght.c
r24078r24079
7575
7676UINT32 crimfght_state::screen_update_crimfght(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
7777{
78   k052109_tilemap_update(m_k052109);
78   m_k052109->tilemap_update();
7979
80   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0);
81   k051960_sprites_draw(m_k051960, bitmap, cliprect, 2, 2);
82   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 0);
83   k051960_sprites_draw(m_k051960, bitmap, cliprect, 1, 1);
84   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0);
85   k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
80   m_k052109->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0);
81   m_k051960->k051960_sprites_draw(bitmap, cliprect, 2, 2);
82   m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 0);
83   m_k051960->k051960_sprites_draw(bitmap, cliprect, 1, 1);
84   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0);
85   m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
8686   return 0;
8787}
trunk/src/mame/video/blockhl.c
r24078r24079
5555{
5656   machine().priority_bitmap.fill(0, cliprect);
5757
58   k052109_tilemap_update(m_k052109);
58   m_k052109->tilemap_update();
5959
60   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0);   // tile 2
61   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 1); // tile 1
62   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 2); // tile 0
60   m_k052109->tilemap_draw(bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0);   // tile 2
61   m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 1); // tile 1
62   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 2); // tile 0
6363
64   k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, -1);
64   m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, -1);
6565   return 0;
6666}
trunk/src/mame/video/contra.c
r24078r24079
55***************************************************************************/
66
77#include "emu.h"
8#include "video/konicdev.h"
98#include "includes/contra.h"
109
1110
r24078r24079
7776
7877TILE_GET_INFO_MEMBER(contra_state::get_fg_tile_info)
7978{
80   UINT8 ctrl_3 = k007121_ctrlram_r(m_k007121_1, generic_space(), 3);
81   UINT8 ctrl_4 = k007121_ctrlram_r(m_k007121_1, generic_space(), 4);
82   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121_1, generic_space(), 5);
83   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_1, generic_space(), 6);
79   UINT8 ctrl_3 = m_k007121_1->ctrlram_r(generic_space(), 3);
80   UINT8 ctrl_4 = m_k007121_1->ctrlram_r(generic_space(), 4);
81   UINT8 ctrl_5 = m_k007121_1->ctrlram_r(generic_space(), 5);
82   UINT8 ctrl_6 = m_k007121_1->ctrlram_r(generic_space(), 6);
8483   int attr = m_fg_cram[tile_index];
8584   int bit0 = (ctrl_5 >> 0) & 0x03;
8685   int bit1 = (ctrl_5 >> 2) & 0x03;
r24078r24079
105104
106105TILE_GET_INFO_MEMBER(contra_state::get_bg_tile_info)
107106{
108   UINT8 ctrl_3 = k007121_ctrlram_r(m_k007121_2, generic_space(), 3);
109   UINT8 ctrl_4 = k007121_ctrlram_r(m_k007121_2, generic_space(), 4);
110   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121_2, generic_space(), 5);
111   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_2, generic_space(), 6);
107   UINT8 ctrl_3 = m_k007121_2->ctrlram_r(generic_space(), 3);
108   UINT8 ctrl_4 = m_k007121_2->ctrlram_r(generic_space(), 4);
109   UINT8 ctrl_5 = m_k007121_2->ctrlram_r(generic_space(), 5);
110   UINT8 ctrl_6 = m_k007121_2->ctrlram_r(generic_space(), 6);
112111   int attr = m_bg_cram[tile_index];
113112   int bit0 = (ctrl_5 >> 0) & 0x03;
114113   int bit1 = (ctrl_5 >> 2) & 0x03;
r24078r24079
134133
135134TILE_GET_INFO_MEMBER(contra_state::get_tx_tile_info)
136135{
137   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121_1, generic_space(), 5);
138   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_1, generic_space(), 6);
136   UINT8 ctrl_5 = m_k007121_1->ctrlram_r(generic_space(), 5);
137   UINT8 ctrl_6 = m_k007121_1->ctrlram_r(generic_space(), 6);
139138   int attr = m_tx_cram[tile_index];
140139   int bit0 = (ctrl_5 >> 0) & 0x03;
141140   int bit1 = (ctrl_5 >> 2) & 0x03;
r24078r24079
230229
231230WRITE8_MEMBER(contra_state::contra_K007121_ctrl_0_w)
232231{
233   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_1, space, 6);
232   UINT8 ctrl_6 = m_k007121_1->ctrlram_r(space, 6);
234233
235234   if (offset == 3)
236235   {
r24078r24079
249248   if (offset == 7)
250249      m_fg_tilemap->set_flip((data & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
251250
252   k007121_ctrl_w(m_k007121_1, space, offset, data);
251   m_k007121_1->ctrl_w(space, offset, data);
253252}
254253
255254WRITE8_MEMBER(contra_state::contra_K007121_ctrl_1_w)
256255{
257   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_2, space, 6);
256   UINT8 ctrl_6 = m_k007121_2->ctrlram_r(space, 6);
258257
259258   if (offset == 3)
260259   {
r24078r24079
271270   if (offset == 7)
272271      m_bg_tilemap->set_flip((data & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
273272
274   k007121_ctrl_w(m_k007121_2, space, offset, data);
273   m_k007121_2->ctrl_w(space, offset, data);
275274}
276275
277276
r24078r24079
284283
285284void contra_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int bank )
286285{
287   device_t *k007121 = bank ? m_k007121_2 : m_k007121_1;
286   k007121_device *k007121 = bank ? m_k007121_2 : m_k007121_1;
288287   address_space &space = machine().driver_data()->generic_space();
289   int base_color = (k007121_ctrlram_r(k007121, space, 6) & 0x30) * 2;
288   int base_color = (k007121->ctrlram_r(space, 6) & 0x30) * 2;
290289   const UINT8 *source;
291290
292291   if (bank == 0)
r24078r24079
294293   else
295294      source = m_buffered_spriteram_2;
296295
297   k007121_sprites_draw(k007121, bitmap, cliprect, machine().gfx[bank], machine().colortable, source, base_color, 40, 0, (UINT32)-1);
296   k007121->sprites_draw(bitmap, cliprect, machine().gfx[bank], machine().colortable, source, base_color, 40, 0, (UINT32)-1);
298297}
299298
300299UINT32 contra_state::screen_update_contra(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
301300{
302301   address_space &space = machine().driver_data()->generic_space();
303   UINT8 ctrl_1_0 = k007121_ctrlram_r(m_k007121_1, space, 0);
304   UINT8 ctrl_1_2 = k007121_ctrlram_r(m_k007121_1, space, 2);
305   UINT8 ctrl_2_0 = k007121_ctrlram_r(m_k007121_2, space, 0);
306   UINT8 ctrl_2_2 = k007121_ctrlram_r(m_k007121_2, space, 2);
302   UINT8 ctrl_1_0 = m_k007121_1->ctrlram_r(space, 0);
303   UINT8 ctrl_1_2 = m_k007121_1->ctrlram_r(space, 2);
304   UINT8 ctrl_2_0 = m_k007121_2->ctrlram_r(space, 0);
305   UINT8 ctrl_2_2 = m_k007121_2->ctrlram_r(space, 2);
307306   rectangle bg_finalclip = m_bg_clip;
308307   rectangle fg_finalclip = m_fg_clip;
309308   rectangle tx_finalclip = m_tx_clip;
trunk/src/mame/video/battlnts.c
r24078r24079
11#include "emu.h"
2#include "video/konicdev.h"
32#include "includes/battlnts.h"
43
54/***************************************************************************
r24078r24079
4443
4544UINT32 battlnts_state::screen_update_battlnts(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
4645{
47   k007342_tilemap_update(m_k007342);
46   m_k007342->tilemap_update();
4847
49   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE ,0);
50   k007420_sprites_draw(m_k007420, bitmap, cliprect, machine().gfx[1]);
51   k007342_tilemap_draw(m_k007342, bitmap, cliprect, 0, 1 | TILEMAP_DRAW_OPAQUE ,0);
48   m_k007342->tilemap_draw(bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE ,0);
49   m_k007420->sprites_draw(bitmap, cliprect, machine().gfx[1]);
50   m_k007342->tilemap_draw(bitmap, cliprect, 0, 1 | TILEMAP_DRAW_OPAQUE ,0);
5251   return 0;
5352}
trunk/src/mame/video/bottom9.c
r24078r24079
7373
7474UINT32 bottom9_state::screen_update_bottom9(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
7575{
76   k052109_tilemap_update(m_k052109);
76   m_k052109->tilemap_update();
7777
7878   /* note: FIX layer is not used */
7979   bitmap.fill(m_layer_colorbase[1], cliprect);
8080//  if (m_video_enable)
8181   {
82      k051960_sprites_draw(m_k051960, bitmap, cliprect, 1, 1);
82      m_k051960->k051960_sprites_draw(bitmap, cliprect, 1, 1);
8383      k051316_zoom_draw(m_k051316, bitmap, cliprect, 0, 0);
84      k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
85      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 0);
84      m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
85      m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 0);
8686      /* note that priority 3 is opposite to the basic layer priority! */
8787      /* (it IS used, but hopefully has no effect) */
88      k051960_sprites_draw(m_k051960, bitmap, cliprect, 2, 3);
89      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 0);
88      m_k051960->k051960_sprites_draw(bitmap, cliprect, 2, 3);
89      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 0);
9090   }
9191   return 0;
9292}
trunk/src/mame/video/labyrunr.c
r24078r24079
6565
6666TILE_GET_INFO_MEMBER(labyrunr_state::get_tile_info0)
6767{
68   UINT8 ctrl_3 = k007121_ctrlram_r(m_k007121, generic_space(), 3);
69   UINT8 ctrl_4 = k007121_ctrlram_r(m_k007121, generic_space(), 4);
70   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121, generic_space(), 5);
71   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121, generic_space(), 6);
68   UINT8 ctrl_3 = m_k007121->ctrlram_r(generic_space(), 3);
69   UINT8 ctrl_4 = m_k007121->ctrlram_r(generic_space(), 4);
70   UINT8 ctrl_5 = m_k007121->ctrlram_r(generic_space(), 5);
71   UINT8 ctrl_6 = m_k007121->ctrlram_r(generic_space(), 6);
7272   int attr = m_videoram1[tile_index];
7373   int code = m_videoram1[tile_index + 0x400];
7474   int bit0 = (ctrl_5 >> 0) & 0x03;
r24078r24079
9494
9595TILE_GET_INFO_MEMBER(labyrunr_state::get_tile_info1)
9696{
97   UINT8 ctrl_3 = k007121_ctrlram_r(m_k007121, generic_space(), 3);
98   UINT8 ctrl_4 = k007121_ctrlram_r(m_k007121, generic_space(), 4);
99   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121, generic_space(), 5);
100   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121, generic_space(), 6);
97   UINT8 ctrl_3 = m_k007121->ctrlram_r(generic_space(), 3);
98   UINT8 ctrl_4 = m_k007121->ctrlram_r(generic_space(), 4);
99   UINT8 ctrl_5 = m_k007121->ctrlram_r(generic_space(), 5);
100   UINT8 ctrl_6 = m_k007121->ctrlram_r(generic_space(), 6);
101101   int attr = m_videoram2[tile_index];
102102   int code = m_videoram2[tile_index + 0x400];
103103   int bit0 = (ctrl_5 >> 0) & 0x03;
r24078r24079
177177UINT32 labyrunr_state::screen_update_labyrunr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
178178{
179179   address_space &space = machine().driver_data()->generic_space();
180   UINT8 ctrl_0 = k007121_ctrlram_r(m_k007121, space, 0);
180   UINT8 ctrl_0 = m_k007121->ctrlram_r(space, 0);
181181   rectangle finalclip0, finalclip1;
182182
183183   set_pens();
r24078r24079
185185   machine().priority_bitmap.fill(0, cliprect);
186186   bitmap.fill(get_black_pen(machine()), cliprect);
187187
188   if (~k007121_ctrlram_r(m_k007121, space, 3) & 0x20)
188   if (~m_k007121->ctrlram_r(space, 3) & 0x20)
189189   {
190190      int i;
191191
r24078r24079
201201      for(i = 0; i < 32; i++)
202202      {
203203         /* enable colscroll */
204         if((k007121_ctrlram_r(m_k007121, space, 1) & 6) == 6) // it's probably just one bit, but it's only used once in the game so I don't know which it's
205            m_layer0->set_scrolly((i + 2) & 0x1f, k007121_ctrlram_r(m_k007121, space, 2) + m_scrollram[i]);
204         if((m_k007121->ctrlram_r(space, 1) & 6) == 6) // it's probably just one bit, but it's only used once in the game so I don't know which it's
205            m_layer0->set_scrolly((i + 2) & 0x1f, m_k007121->ctrlram_r(space, 2) + m_scrollram[i]);
206206         else
207            m_layer0->set_scrolly((i + 2) & 0x1f, k007121_ctrlram_r(m_k007121, space, 2));
207            m_layer0->set_scrolly((i + 2) & 0x1f, m_k007121->ctrlram_r(space, 2));
208208      }
209209
210210      m_layer0->draw(bitmap, finalclip0, TILEMAP_DRAW_OPAQUE, 0);
211      k007121_sprites_draw(m_k007121, bitmap, cliprect, machine().gfx[0], machine().colortable, m_spriteram,(k007121_ctrlram_r(m_k007121, space, 6) & 0x30) * 2, 40,0,(k007121_ctrlram_r(m_k007121, space, 3) & 0x40) >> 5);
211      m_k007121->sprites_draw(bitmap, cliprect, machine().gfx[0], machine().colortable, m_spriteram,(m_k007121->ctrlram_r(space, 6) & 0x30) * 2, 40,0,(m_k007121->ctrlram_r(space, 3) & 0x40) >> 5);
212212      /* we ignore the transparency because layer1 is drawn only at the top of the screen also covering sprites */
213213      m_layer1->draw(bitmap, finalclip1, TILEMAP_DRAW_OPAQUE, 0);
214214   }
r24078r24079
221221      finalclip0.min_y = finalclip1.min_y = cliprect.min_y;
222222      finalclip0.max_y = finalclip1.max_y = cliprect.max_y;
223223
224      if(k007121_ctrlram_r(m_k007121, space, 1) & 1)
224      if(m_k007121->ctrlram_r(space, 1) & 1)
225225      {
226226         finalclip0.min_x = cliprect.max_x - ctrl_0 + 8;
227227         finalclip0.max_x = cliprect.max_x;
r24078r24079
278278      if(use_clip3[1])
279279         m_layer1->draw(bitmap, finalclip3, 0, 1);
280280
281      k007121_sprites_draw(m_k007121, bitmap, cliprect, machine().gfx[0], machine().colortable, m_spriteram, (k007121_ctrlram_r(m_k007121, space, 6) & 0x30) * 2,40,0,(k007121_ctrlram_r(m_k007121, space, 3) & 0x40) >> 5);
281      m_k007121->sprites_draw(bitmap, cliprect, machine().gfx[0], machine().colortable, m_spriteram, (m_k007121->ctrlram_r(space, 6) & 0x30) * 2,40,0,(m_k007121->ctrlram_r(space, 3) & 0x40) >> 5);
282282   }
283283   return 0;
284284}
trunk/src/mame/video/mainevt.c
r24078r24079
9393
9494UINT32 mainevt_state::screen_update_mainevt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
9595{
96   k052109_tilemap_update(m_k052109);
96   m_k052109->tilemap_update();
9797
9898   machine().priority_bitmap.fill(0, cliprect);
99   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1);
100   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 1, 2); /* low priority part of layer */
101   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 4); /* high priority part of layer */
102   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 8);
99   m_k052109->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1);
100   m_k052109->tilemap_draw(bitmap, cliprect, 2, 1, 2); /* low priority part of layer */
101   m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 4); /* high priority part of layer */
102   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 8);
103103
104   k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
104   m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
105105   return 0;
106106}
107107
108108UINT32 mainevt_state::screen_update_dv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
109109{
110   k052109_tilemap_update(m_k052109);
110   m_k052109->tilemap_update();
111111
112   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0);
113   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 0);
114   k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
115   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0);
112   m_k052109->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0);
113   m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 0);
114   m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
115   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0);
116116   return 0;
117117}
trunk/src/mame/video/aliens.c
r24078r24079
7373
7474UINT32 aliens_state::screen_update_aliens(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
7575{
76   k052109_tilemap_update(m_k052109);
76   m_k052109->tilemap_update();
7777
7878   machine().priority_bitmap.fill(0, cliprect);
7979   bitmap.fill(m_layer_colorbase[1] * 16, cliprect);
8080
81   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 1);
82   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 2);
83   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 4);
81   m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 1);
82   m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 2);
83   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 4);
8484
85   k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
85   m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
8686   return 0;
8787}
trunk/src/mame/video/tmnt.c
r24078r24079
5252{
5353   tmnt_state *state = machine.driver_data<tmnt_state>();
5454
55   if ((k052109_get_rmrd_line(state->m_k052109) == CLEAR_LINE) && (layer == 0))
55   if ((state->m_k052109->get_rmrd_line() == CLEAR_LINE) && (layer == 0))
5656   {
5757      *code |= ((*color & 0x01) << 8);
5858      *color = state->m_layer_colorbase[layer]  + ((*color & 0x80) >> 5) + ((*color & 0x10) >> 1);
r24078r24079
254254
255255VIDEO_START_MEMBER(tmnt_state,lgtnfght)/* also tmnt2, ssriders */
256256{
257   k05324x_set_z_rejection(m_k053245, 0);
257   m_k053245->k05324x_set_z_rejection(0);
258258
259259   m_dim_c = m_dim_v = m_lastdim = m_lasten = 0;
260260
r24078r24079
330330      m_irq5_mask = data & 0x20;
331331
332332      /* bit 7 = enable char ROM reading through the video RAM */
333      k052109_set_rmrd_line(m_k052109, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
333      m_k052109->set_rmrd_line((data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
334334
335335      /* other bits unused */
336336   }
r24078r24079
350350      m_last = data & 0x04;
351351
352352      /* bit 3 = enable char ROM reading through the video RAM */
353      k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
353      m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
354354   }
355355}
356356
r24078r24079
369369      m_last = data & 0x04;
370370
371371      /* bit 3 = enable char ROM reading through the video RAM */
372      k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
372      m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
373373   }
374374}
375375
r24078r24079
382382      coin_counter_w(machine(), 1,data & 0x02);
383383
384384      /* bit 3 = enable char ROM reading through the video RAM */
385      k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
385      m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
386386
387387      /* bit 7 = select char ROM bank */
388388      if (m_blswhstl_rombank != ((data & 0x80) >> 7))
r24078r24079
418418      coin_counter_w(machine(), 1, data & 0x02);
419419
420420      /* bit 4 = enable char ROM reading through the video RAM */
421      k052109_set_rmrd_line(m_k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
421      m_k052109->set_rmrd_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
422422
423423      /* bit 5 = 53596 tile rom bank selection */
424424      if (m_glfgreat_roz_rom_bank != (data & 0x20) >> 5)
r24078r24079
455455      m_dim_c = data & 0x18;
456456
457457      /* bit 5 selects sprite ROM for testing in TMNT2 (bits 5-7, actually, according to the schematics) */
458      k053244_bankselect(m_k053245, ((data & 0x20) >> 5) << 2);
458      m_k053245->k053244_bankselect(((data & 0x20) >> 5) << 2);
459459   }
460460}
461461
r24078r24079
468468      coin_counter_w(machine(), 1, data & 0x02);
469469
470470      /* bit 3 = enable char ROM reading through the video RAM */
471      k052109_set_rmrd_line(m_k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
471      m_k052109->set_rmrd_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
472472
473473      /* bits 4-6 control palette dimming (DIM0-DIM2) */
474474      m_dim_v = (data & 0x70) >> 4;
r24078r24079
484484      coin_counter_w(machine(), 1, data & 0x02);
485485
486486      /* bit 4 = enable char ROM reading through the video RAM */
487      k052109_set_rmrd_line(m_k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
487      m_k052109->set_rmrd_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
488488
489489      /* bit 6 = sprite ROM bank */
490490      m_prmrsocr_sprite_bank = (data & 0x40) >> 6;
491      k053244_bankselect(m_k053245, m_prmrsocr_sprite_bank << 2);
491      m_k053245->k053244_bankselect(m_prmrsocr_sprite_bank << 2);
492492
493493      /* bit 7 = 53596 region selector for ROM test */
494494      m_glfgreat_roz_char_bank = (data & 0x80) >> 7;
r24078r24079
544544
545545UINT32 tmnt_state::screen_update_mia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
546546{
547   k052109_tilemap_update(m_k052109);
547   m_k052109->tilemap_update();
548548
549   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0);
550   if ((m_tmnt_priorityflag & 1) == 1) k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
551   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 0);
552   if ((m_tmnt_priorityflag & 1) == 0) k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
553   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0);
549   m_k052109->tilemap_draw(bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0);
550   if ((m_tmnt_priorityflag & 1) == 1) m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
551   m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 0);
552   if ((m_tmnt_priorityflag & 1) == 0) m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
553   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0);
554554
555555   return 0;
556556}
557557
558558UINT32 tmnt_state::screen_update_tmnt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
559559{
560   k052109_tilemap_update(m_k052109);
560   m_k052109->tilemap_update();
561561
562   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0);
563   if ((m_tmnt_priorityflag & 1) == 1) k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
564   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 0);
565   if ((m_tmnt_priorityflag & 1) == 0) k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
566   k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0);
562   m_k052109->tilemap_draw(bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0);
563   if ((m_tmnt_priorityflag & 1) == 1) m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
564   m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 0);
565   if ((m_tmnt_priorityflag & 1) == 0) m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
566   m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0);
567567
568568   return 0;
569569}
r24078r24079
576576   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI4);
577577   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI3);
578578
579   k052109_tilemap_update(m_k052109);
579   m_k052109->tilemap_update();
580580
581581   m_sorted_layer[0] = 0;
582582   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
588588   konami_sortlayers3(m_sorted_layer, m_layerpri);
589589
590590   machine().priority_bitmap.fill(0, cliprect);
591   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[0], TILEMAP_DRAW_OPAQUE, 1);
592   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[1], 0, 2);
593   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[2], 0, 4);
591   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[0], TILEMAP_DRAW_OPAQUE, 1);
592   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[1], 0, 2);
593   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[2], 0, 4);
594594
595   k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
595   m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
596596   return 0;
597597}
598598
r24078r24079
607607   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI4);
608608   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI3);
609609
610   k052109_tilemap_update(m_k052109);
610   m_k052109->tilemap_update();
611611
612612   m_sorted_layer[0] = 0;
613613   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
620620
621621   machine().priority_bitmap.fill(0, cliprect);
622622   bitmap.fill(16 * bg_colorbase, cliprect);
623   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[0], 0, 1);
624   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[1], 0, 2);
625   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[2], 0, 4);
623   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[0], 0, 1);
624   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[1], 0, 2);
625   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[2], 0, 4);
626626
627   k053245_sprites_draw(m_k053245, bitmap, cliprect);
627   m_k053245->k053245_sprites_draw(bitmap, cliprect);
628628   return 0;
629629}
630630
r24078r24079
651651   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI3) + 8;   /* weird... */
652652   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI4);
653653
654   k052109_tilemap_update(m_k052109);
654   m_k052109->tilemap_update();
655655
656656   m_sorted_layer[0] = 0;
657657   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
666666
667667   machine().priority_bitmap.fill(0, cliprect);
668668   bitmap.fill(16 * bg_colorbase, cliprect);
669   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[0], 0, 1);
669   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[0], 0, 1);
670670
671671   if (m_layerpri[0] >= 0x30 && m_layerpri[1] < 0x30)
672672   {
r24078r24079
674674      m_glfgreat_pixel = bitmap.pix16(0x80, 0x105);
675675   }
676676
677   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[1], 0, 2);
677   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[1], 0, 2);
678678
679679   if (m_layerpri[1] >= 0x30 && m_layerpri[2] < 0x30)
680680   {
r24078r24079
682682      m_glfgreat_pixel = bitmap.pix16(0x80, 0x105);
683683   }
684684
685   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[2], 0, 4);
685   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[2], 0, 4);
686686
687687   if (m_layerpri[2] >= 0x30)
688688   {
r24078r24079
690690      m_glfgreat_pixel = bitmap.pix16(0x80, 0x105);
691691   }
692692
693   k053245_sprites_draw(m_k053245, bitmap, cliprect);
693   m_k053245->k053245_sprites_draw(bitmap, cliprect);
694694   return 0;
695695}
696696
r24078r24079
756756   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI4);
757757   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI3);
758758
759   k052109_tilemap_update(m_k052109);
759   m_k052109->tilemap_update();
760760
761761   m_sorted_layer[0] = 0;
762762   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
769769
770770   machine().priority_bitmap.fill(0, cliprect);
771771   bitmap.fill(16 * bg_colorbase, cliprect);
772   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[0], 0, 1);
773   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[1], 0, 2);
774   k052109_tilemap_draw(m_k052109, bitmap, cliprect, m_sorted_layer[2], 0, 4);
772   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[0], 0, 1);
773   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[1], 0, 2);
774   m_k052109->tilemap_draw(bitmap, cliprect, m_sorted_layer[2], 0, 4);
775775
776   k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
776   m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
777777   return 0;
778778}
779779
r24078r24079
790790   // on rising edge
791791   if (state)
792792   {
793      k053245_clear_buffer(m_k053245);
793      m_k053245->k053245_clear_buffer();
794794   }
795795}
trunk/src/mame/video/simpsons.c
r24078r24079
4848
4949READ8_MEMBER(simpsons_state::simpsons_k052109_r)
5050{
51   return k052109_r(m_k052109, space, offset + 0x2000);
51   return m_k052109->read(space, offset + 0x2000);
5252}
5353
5454WRITE8_MEMBER(simpsons_state::simpsons_k052109_w)
5555{
56   k052109_w(m_k052109, space, offset + 0x2000, data);
56   m_k052109->write(space, offset + 0x2000, data);
5757}
5858
5959READ8_MEMBER(simpsons_state::simpsons_k053247_r)
r24078r24079
101101      membank("bank5")->set_base(m_generic_paletteram_8);
102102   }
103103   else
104      space.install_legacy_readwrite_handler(*m_k052109, 0x0000, 0x0fff, FUNC(k052109_r), FUNC(k052109_w));
104      space.install_readwrite_handler(0x0000, 0x0fff, read8_delegate(FUNC(k052109_device::read), (k052109_device*)m_k052109), write8_delegate(FUNC(k052109_device::write), (k052109_device*)m_k052109));
105105
106106   if (bank & 2)
107107      space.install_readwrite_handler(0x2000, 0x3fff, read8_delegate(FUNC(simpsons_state::simpsons_k053247_r),this), write8_delegate(FUNC(simpsons_state::simpsons_k053247_w),this));
r24078r24079
127127   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI3);
128128   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI4);
129129
130   k052109_tilemap_update(m_k052109);
130   m_k052109->tilemap_update();
131131
132132   layer[0] = 0;
133133   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
140140
141141   machine().priority_bitmap.fill(0, cliprect);
142142   bitmap.fill(16 * bg_colorbase, cliprect);
143   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[0], 0, 1);
144   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[1], 0, 2);
145   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[2], 0, 4);
143   m_k052109->tilemap_draw(bitmap, cliprect, layer[0], 0, 1);
144   m_k052109->tilemap_draw(bitmap, cliprect, layer[1], 0, 2);
145   m_k052109->tilemap_draw(bitmap, cliprect, layer[2], 0, 4);
146146
147147   k053247_sprites_draw(m_k053246, bitmap, cliprect);
148148   return 0;
trunk/src/mame/video/asterix.c
r24078r24079
66static void reset_spritebank( running_machine &machine )
77{
88   asterix_state *state = machine.driver_data<asterix_state>();
9   k053244_bankselect(state->m_k053244, state->m_spritebank & 7);
9   state->m_k053244->k053244_bankselect(state->m_spritebank & 7);
1010   state->m_spritebanks[0] = (state->m_spritebank << 12) & 0x7000;
1111   state->m_spritebanks[1] = (state->m_spritebank <<  9) & 0x7000;
1212   state->m_spritebanks[2] = (state->m_spritebank <<  6) & 0x7000;
r24078r24079
103103
104104/* this isn't supported anymore and it is unsure if still needed; keeping here for reference
105105    pdrawgfx_shadow_lowpri = 1; fix shadows in front of feet */
106   k053245_sprites_draw(m_k053244, bitmap, cliprect);
106   m_k053244->k053245_sprites_draw(bitmap, cliprect);
107107
108108   k056832_tilemap_draw(m_k056832, bitmap, cliprect, 2, K056832_DRAW_FLAG_MIRROR, 0);
109109   return 0;
trunk/src/mame/video/chqflag.c
r24078r24079
7272   bitmap.fill(0, cliprect);
7373
7474   k051316_zoom_draw(m_k051316_2, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
75   k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
75   m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
7676   k051316_zoom_draw(m_k051316_2, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0);
77   k051960_sprites_draw(m_k051960, bitmap, cliprect, 1, 1);
77   m_k051960->k051960_sprites_draw(bitmap, cliprect, 1, 1);
7878   k051316_zoom_draw(m_k051316_1, bitmap, cliprect, 0, 0);
7979   return 0;
8080}
trunk/src/mame/video/rollerg.c
r24078r24079
6565   machine().priority_bitmap.fill(0, cliprect);
6666   bitmap.fill(16 * bg_colorbase, cliprect);
6767   k051316_zoom_draw(m_k051316, bitmap, cliprect, 0, 1);
68   k053245_sprites_draw(m_k053244, bitmap, cliprect);
68   m_k053244->k053245_sprites_draw(bitmap, cliprect);
6969   return 0;
7070}
trunk/src/mame/video/surpratk.c
r24078r24079
5656   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI4);
5757   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI3);
5858
59   k052109_tilemap_update(m_k052109);
59   m_k052109->tilemap_update();
6060
6161   layer[0] = 0;
6262   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI2);
r24078r24079
6969
7070   machine().priority_bitmap.fill(0, cliprect);
7171   bitmap.fill(16 * bg_colorbase, cliprect);
72   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[0], 0, 1);
73   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[1], 0, 2);
74   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[2], 0, 4);
72   m_k052109->tilemap_draw(bitmap, cliprect, layer[0], 0, 1);
73   m_k052109->tilemap_draw(bitmap, cliprect, layer[1], 0, 2);
74   m_k052109->tilemap_draw(bitmap, cliprect, layer[2], 0, 4);
7575
76   k053245_sprites_draw(m_k053244, bitmap, cliprect);
76   m_k053244->k053245_sprites_draw(bitmap, cliprect);
7777   return 0;
7878}
trunk/src/mame/video/hcastle.c
r24078r24079
55***************************************************************************/
66
77#include "emu.h"
8#include "video/konicdev.h"
98#include "includes/hcastle.h"
109
1110
r24078r24079
7271
7372TILE_GET_INFO_MEMBER(hcastle_state::get_fg_tile_info)
7473{
75   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121_1, generic_space(), 5);
76   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_1, generic_space(), 6);
74   UINT8 ctrl_5 = m_k007121_1->ctrlram_r(generic_space(), 5);
75   UINT8 ctrl_6 = m_k007121_1->ctrlram_r(generic_space(), 6);
7776   int bit0 = (ctrl_5 >> 0) & 0x03;
7877   int bit1 = (ctrl_5 >> 2) & 0x03;
7978   int bit2 = (ctrl_5 >> 4) & 0x03;
r24078r24079
9695
9796TILE_GET_INFO_MEMBER(hcastle_state::get_bg_tile_info)
9897{
99   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121_2, generic_space(), 5);
100   UINT8 ctrl_6 = k007121_ctrlram_r(m_k007121_2, generic_space(), 6);
98   UINT8 ctrl_5 = m_k007121_2->ctrlram_r(generic_space(), 5);
99   UINT8 ctrl_6 = m_k007121_2->ctrlram_r(generic_space(), 6);
101100   int bit0 = (ctrl_5 >> 0) & 0x03;
102101   int bit1 = (ctrl_5 >> 2) & 0x03;
103102   int bit2 = (ctrl_5 >> 4) & 0x03;
r24078r24079
177176   {
178177      m_fg_tilemap->set_flip((data & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
179178   }
180   k007121_ctrl_w(m_k007121_1, space, offset, data);
179   m_k007121_1->ctrl_w(space, offset, data);
181180}
182181
183182WRITE8_MEMBER(hcastle_state::hcastle_pf2_control_w)
r24078r24079
193192   {
194193      m_bg_tilemap->set_flip((data & 0x08) ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
195194   }
196   k007121_ctrl_w(m_k007121_2, space, offset, data);
195   m_k007121_2->ctrl_w(space, offset, data);
197196}
198197
199198/*****************************************************************************/
200199
201200void hcastle_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, UINT8 *sbank, int bank )
202201{
203   device_t *k007121 = bank ? m_k007121_2 : m_k007121_1;
202   k007121_device *k007121 = bank ? m_k007121_2 : m_k007121_1;
204203   address_space &space = machine().driver_data()->generic_space();
205   int base_color = (k007121_ctrlram_r(k007121, space, 6) & 0x30) * 2;
204   int base_color = (k007121->ctrlram_r(space, 6) & 0x30) * 2;
206205   int bank_base = (bank == 0) ? 0x4000 * (m_gfx_bank & 1) : 0;
207206
208   k007121_sprites_draw(k007121, bitmap, cliprect, machine().gfx[bank], machine().colortable, sbank, base_color, 0, bank_base, (UINT32)-1);
207   k007121->sprites_draw(bitmap, cliprect, machine().gfx[bank], machine().colortable, sbank, base_color, 0, bank_base, (UINT32)-1);
209208}
210209
211210/*****************************************************************************/
r24078r24079
214213{
215214   address_space &space = machine().driver_data()->generic_space();
216215
217   UINT8 ctrl_1_0 = k007121_ctrlram_r(m_k007121_1, space, 0);
218   UINT8 ctrl_1_1 = k007121_ctrlram_r(m_k007121_1, space, 1);
219   UINT8 ctrl_1_2 = k007121_ctrlram_r(m_k007121_1, space, 2);
220   UINT8 ctrl_1_3 = k007121_ctrlram_r(m_k007121_1, space, 3);
221   UINT8 ctrl_2_0 = k007121_ctrlram_r(m_k007121_2, space, 0);
222   UINT8 ctrl_2_1 = k007121_ctrlram_r(m_k007121_2, space, 1);
223   UINT8 ctrl_2_2 = k007121_ctrlram_r(m_k007121_2, space, 2);
224   UINT8 ctrl_2_3 = k007121_ctrlram_r(m_k007121_2, space, 3);
216   UINT8 ctrl_1_0 = m_k007121_1->ctrlram_r(space, 0);
217   UINT8 ctrl_1_1 = m_k007121_1->ctrlram_r(space, 1);
218   UINT8 ctrl_1_2 = m_k007121_1->ctrlram_r(space, 2);
219   UINT8 ctrl_1_3 = m_k007121_1->ctrlram_r(space, 3);
220   UINT8 ctrl_2_0 = m_k007121_2->ctrlram_r(space, 0);
221   UINT8 ctrl_2_1 = m_k007121_2->ctrlram_r(space, 1);
222   UINT8 ctrl_2_2 = m_k007121_2->ctrlram_r(space, 2);
223   UINT8 ctrl_2_3 = m_k007121_2->ctrlram_r(space, 3);
225224
226225   set_pens();
227226
trunk/src/mame/video/flkatck.c
r24078r24079
55***************************************************************************/
66
77#include "emu.h"
8#include "video/konicdev.h"
98#include "includes/flkatck.h"
109
1110/***************************************************************************
r24078r24079
1615
1716TILE_GET_INFO_MEMBER(flkatck_state::get_tile_info_A)
1817{
19   UINT8 ctrl_0 = k007121_ctrlram_r(m_k007121, generic_space(), 0);
20   UINT8 ctrl_2 = k007121_ctrlram_r(m_k007121, generic_space(), 2);
21   UINT8 ctrl_3 = k007121_ctrlram_r(m_k007121, generic_space(), 3);
22   UINT8 ctrl_4 = k007121_ctrlram_r(m_k007121, generic_space(), 4);
23   UINT8 ctrl_5 = k007121_ctrlram_r(m_k007121, generic_space(), 5);
18   UINT8 ctrl_0 = m_k007121->ctrlram_r(generic_space(), 0);
19   UINT8 ctrl_2 = m_k007121->ctrlram_r(generic_space(), 2);
20   UINT8 ctrl_3 = m_k007121->ctrlram_r(generic_space(), 3);
21   UINT8 ctrl_4 = m_k007121->ctrlram_r(generic_space(), 4);
22   UINT8 ctrl_5 = m_k007121->ctrlram_r(generic_space(), 5);
2423   int attr = m_k007121_ram[tile_index];
2524   int code = m_k007121_ram[tile_index + 0x400];
2625   int bit0 = (ctrl_5 >> 0) & 0x03;
r24078r24079
9796   switch (offset)
9897   {
9998      case 0x04:  /* ROM bank select */
100         if (data != k007121_ctrlram_r(m_k007121, space, 4))
99         if (data != m_k007121->ctrlram_r(space, 4))
101100            machine().tilemap().mark_all_dirty();
102101         break;
103102
r24078r24079
108107         break;
109108   }
110109
111   k007121_ctrl_w(m_k007121, space, offset, data);
110   m_k007121->ctrl_w(space, offset, data);
112111}
113112
114113
r24078r24079
139138      clip[1] = visarea;
140139      clip[1].min_x = clip[1].max_x - 40;
141140
142      m_k007121_tilemap[0]->set_scrollx(0, k007121_ctrlram_r(m_k007121, space, 0) - 56 );
143      m_k007121_tilemap[0]->set_scrolly(0, k007121_ctrlram_r(m_k007121, space, 2));
141      m_k007121_tilemap[0]->set_scrollx(0, m_k007121->ctrlram_r(space, 0) - 56 );
142      m_k007121_tilemap[0]->set_scrolly(0, m_k007121->ctrlram_r(space, 2));
144143      m_k007121_tilemap[1]->set_scrollx(0, -16);
145144   }
146145   else
r24078r24079
152151      clip[1].max_x = 39;
153152      clip[1].min_x = 0;
154153
155      m_k007121_tilemap[0]->set_scrollx(0, k007121_ctrlram_r(m_k007121, space, 0) - 40 );
156      m_k007121_tilemap[0]->set_scrolly(0, k007121_ctrlram_r(m_k007121, space, 2));
154      m_k007121_tilemap[0]->set_scrollx(0, m_k007121->ctrlram_r(space, 0) - 40 );
155      m_k007121_tilemap[0]->set_scrolly(0, m_k007121->ctrlram_r(space, 2));
157156      m_k007121_tilemap[1]->set_scrollx(0, 0);
158157   }
159158
r24078r24079
163162
164163   /* draw the graphics */
165164   m_k007121_tilemap[0]->draw(bitmap, clip[0], 0, 0);
166   k007121_sprites_draw(m_k007121, bitmap, cliprect, machine().gfx[0], NULL, &m_k007121_ram[0x1000], 0, 40, 0, (UINT32)-1);
165   m_k007121->sprites_draw(bitmap, cliprect, machine().gfx[0], NULL, &m_k007121_ram[0x1000], 0, 40, 0, (UINT32)-1);
167166   m_k007121_tilemap[1]->draw(bitmap, clip[1], 0, 0);
168167   return 0;
169168}
trunk/src/mame/video/xmen.c
r24078r24079
7979   m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI0);
8080   m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI2);
8181
82   k052109_tilemap_update(m_k052109);
82   m_k052109->tilemap_update();
8383
8484   layer[0] = 0;
8585   m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI3);
r24078r24079
9393   machine().priority_bitmap.fill(0, cliprect);
9494   /* note the '+1' in the background color!!! */
9595   bitmap.fill(16 * bg_colorbase + 1, cliprect);
96   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[0], 0, 1);
97   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[1], 0, 2);
98   k052109_tilemap_draw(m_k052109, bitmap, cliprect, layer[2], 0, 4);
96   m_k052109->tilemap_draw(bitmap, cliprect, layer[0], 0, 1);
97   m_k052109->tilemap_draw(bitmap, cliprect, layer[1], 0, 2);
98   m_k052109->tilemap_draw(bitmap, cliprect, layer[2], 0, 4);
9999
100100/* this isn't supported anymore and it is unsure if still needed; keeping here for reference
101101    pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */
r24078r24079
165165            */
166166         for (offset = 0; offset < (0xc000 / 2); offset++)
167167         {
168   //          K052109_lsb_w
169            k052109_w(m_k052109, space, offset, m_xmen6p_tilemapright[offset] & 0x00ff);
168   //          m_k052109->lsb_w
169            m_k052109->write(space, offset, m_xmen6p_tilemapright[offset] & 0x00ff);
170170         }
171171
172172
r24078r24079
184184            */
185185         for (offset = 0; offset < (0xc000 / 2); offset++)
186186         {
187   //          K052109_lsb_w
188            k052109_w(m_k052109, space, offset, m_xmen6p_tilemapleft[offset] & 0x00ff);
187   //          m_k052109->lsb_w
188            m_k052109->write(space, offset, m_xmen6p_tilemapleft[offset] & 0x00ff);
189189         }
190190
191191
r24078r24079
199199      m_layer_colorbase[1] = k053251_get_palette_index(m_k053251, K053251_CI0);
200200      m_layer_colorbase[2] = k053251_get_palette_index(m_k053251, K053251_CI2);
201201
202      k052109_tilemap_update(m_k052109);
202      m_k052109->tilemap_update();
203203
204204      layer[0] = 0;
205205      m_layerpri[0] = k053251_get_priority(m_k053251, K053251_CI3);
r24078r24079
213213      machine().priority_bitmap.fill(0, cliprect);
214214      /* note the '+1' in the background color!!! */
215215      renderbitmap->fill(16 * bg_colorbase + 1, cliprect);
216      k052109_tilemap_draw(m_k052109, *renderbitmap, cliprect, layer[0], 0, 1);
217      k052109_tilemap_draw(m_k052109, *renderbitmap, cliprect, layer[1], 0, 2);
218      k052109_tilemap_draw(m_k052109, *renderbitmap, cliprect, layer[2], 0, 4);
216      m_k052109->tilemap_draw(*renderbitmap, cliprect, layer[0], 0, 1);
217      m_k052109->tilemap_draw(*renderbitmap, cliprect, layer[1], 0, 2);
218      m_k052109->tilemap_draw(*renderbitmap, cliprect, layer[2], 0, 4);
219219
220220   /* this isn't supported anymore and it is unsure if still needed; keeping here for reference
221221       pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */
trunk/src/mame/video/lethal.c
r24078r24079
107107   k056832_tilemap_draw(m_k056832, bitmap, cliprect, 2, K056832_DRAW_FLAG_MIRROR, 2);
108108   k056832_tilemap_draw(m_k056832, bitmap, cliprect, 1, K056832_DRAW_FLAG_MIRROR, 4);
109109
110   k053245_sprites_draw_lethal(m_k053244, bitmap, cliprect);
110   m_k053244->k053245_sprites_draw_lethal(bitmap, cliprect);
111111
112112   // force "A" layer over top of everything
113113   k056832_tilemap_draw(m_k056832, bitmap, cliprect, 0, K056832_DRAW_FLAG_MIRROR, 0);
trunk/src/mame/video/88games.c
r24078r24079
5656
5757UINT32 _88games_state::screen_update_88games(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
5858{
59   k052109_tilemap_update(m_k052109);
59   m_k052109->tilemap_update();
6060
6161   if (m_k88games_priority)
6262   {
63      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);   // tile 0
64      k051960_sprites_draw(m_k051960, bitmap,cliprect, 1, 1);
65      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 0); // tile 2
66      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 0); // tile 1
67      k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
63      m_k052109->tilemap_draw(bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);   // tile 0
64      m_k051960->k051960_sprites_draw(bitmap,cliprect, 1, 1);
65      m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 0); // tile 2
66      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 0); // tile 1
67      m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
6868      k051316_zoom_draw(m_k051316, bitmap, cliprect, 0, 0);
6969   }
7070   else
7171   {
72      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0);   // tile 2
72      m_k052109->tilemap_draw(bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0);   // tile 2
7373      k051316_zoom_draw(m_k051316, bitmap, cliprect, 0, 0);
74      k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
75      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 0); // tile 1
76      k051960_sprites_draw(m_k051960, bitmap, cliprect, 1, 1);
77      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0); // tile 0
74      m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
75      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 0); // tile 1
76      m_k051960->k051960_sprites_draw(bitmap, cliprect, 1, 1);
77      m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0); // tile 0
7878   }
7979
8080   return 0;
trunk/src/mame/video/gbusters.c
r24078r24079
4848
4949UINT32 gbusters_state::screen_update_gbusters(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
5050{
51   k052109_tilemap_update(m_k052109);
51   m_k052109->tilemap_update();
5252
5353   /* sprite priority 3 = disable */
5454   if (m_priority)
5555   {
56//      k051960_sprites_draw(m_k051960, bitmap, cliprect, 1, 1);  /* are these used? */
57      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0);
58      k051960_sprites_draw(m_k051960, bitmap, cliprect, 2, 2);
59      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, 0, 0);
60      k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
61      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0);
56//      m_k051960->k051960_sprites_draw(bitmap, cliprect, 1, 1);  /* are these used? */
57      m_k052109->tilemap_draw(bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0);
58      m_k051960->k051960_sprites_draw(bitmap, cliprect, 2, 2);
59      m_k052109->tilemap_draw(bitmap, cliprect, 1, 0, 0);
60      m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
61      m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0);
6262   }
6363   else
6464   {
65//      k051960_sprites_draw(m_k051960, bitmap, cliprect, 1, 1);  /* are these used? */
66      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0);
67      k051960_sprites_draw(m_k051960, bitmap, cliprect, 2, 2);
68      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 0);
69      k051960_sprites_draw(m_k051960, bitmap, cliprect, 0, 0);
70      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0);
65//      m_k051960->k051960_sprites_draw(bitmap, cliprect, 1, 1);  /* are these used? */
66      m_k052109->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0);
67      m_k051960->k051960_sprites_draw(bitmap, cliprect, 2, 2);
68      m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 0);
69      m_k051960->k051960_sprites_draw(bitmap, cliprect, 0, 0);
70      m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0);
7171   }
7272   return 0;
7373}
trunk/src/mame/video/spy.c
r24078r24079
6262
6363UINT32 spy_state::screen_update_spy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
6464{
65   k052109_tilemap_update(m_k052109);
65   m_k052109->tilemap_update();
6666
6767   machine().priority_bitmap.fill(0, cliprect);
6868
r24078r24079
7070      bitmap.fill(16 * m_layer_colorbase[0], cliprect);
7171   else
7272   {
73      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1);
74      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 2, 0, 2);
75      k051960_sprites_draw(m_k051960, bitmap, cliprect, -1, -1);
76      k052109_tilemap_draw(m_k052109, bitmap, cliprect, 0, 0, 0);
73      m_k052109->tilemap_draw(bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1);
74      m_k052109->tilemap_draw(bitmap, cliprect, 2, 0, 2);
75      m_k051960->k051960_sprites_draw(bitmap, cliprect, -1, -1);
76      m_k052109->tilemap_draw(bitmap, cliprect, 0, 0, 0);
7777   }
7878
7979   return 0;
trunk/src/mame/includes/bladestl.h
r24078r24079
44
55*************************************************************************/
66#include "sound/upd7759.h"
7#include "video/konicdev.h"
78
89class bladestl_state : public driver_device
910{
trunk/src/mame/includes/combatsc.h
r24078r24079
55*************************************************************************/
66#include "sound/upd7759.h"
77#include "sound/msm5205.h"
8#include "video/konicdev.h"
89
910class combatsc_state : public driver_device
1011{
r24078r24079
5051   required_device<cpu_device> m_audiocpu;
5152   optional_device<k007121_device> m_k007121_1;
5253   optional_device<k007121_device> m_k007121_2;
54   required_device<cpu_device> m_maincpu;
55   optional_device<upd7759_device> m_upd7759;
56   optional_device<msm5205_device> m_msm5205;
5357   DECLARE_WRITE8_MEMBER(combatsc_vreg_w);
5458   DECLARE_WRITE8_MEMBER(combatscb_sh_irqtrigger_w);
5559   DECLARE_READ8_MEMBER(combatscb_io_r);
r24078r24079
9296   void set_pens(  );
9397   void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, const UINT8 *source, int circuit, UINT32 pri_mask );
9498   void bootleg_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, const UINT8 *source, int circuit );
95   required_device<cpu_device> m_maincpu;
96   optional_device<upd7759_device> m_upd7759;
97   optional_device<msm5205_device> m_msm5205;
9899};
trunk/src/mame/includes/rockrage.h
r24078r24079
44
55*************************************************************************/
66
7#include "video/konicdev.h"
8
79class rockrage_state : public driver_device
810{
911public:
trunk/src/mame/includes/contra.h
r24078r24079
44
55*************************************************************************/
66
7#include "video/konicdev.h"
8
79class contra_state : public driver_device
810{
911public:
trunk/src/mame/includes/fastlane.h
r24078r24079
44
55*************************************************************************/
66#include "sound/k007232.h"
7#include "video/konicdev.h"
78
89class fastlane_state : public driver_device
910{
trunk/src/mame/includes/hcastle.h
r24078r24079
66
77#include "video/bufsprite.h"
88#include "sound/k007232.h"
9#include "video/konicdev.h"
910
1011class hcastle_state : public driver_device
1112{
trunk/src/mame/includes/flkatck.h
r24078r24079
44
55*************************************************************************/
66#include "sound/k007232.h"
7#include "video/konicdev.h"
78
89class flkatck_state : public driver_device
910{
trunk/src/mame/includes/battlnts.h
r24078r24079
44
55*************************************************************************/
66
7#include "video/konicdev.h"
8
79class battlnts_state : public driver_device
810{
911public:

Previous 199869 Revisions Next


© 1997-2024 The MAME Team