Previous 199869 Revisions Next

r26424 Monday 25th November, 2013 at 22:48:53 UTC by Angelo Salese
Fixed long standing regression bug with Real Break flipscreen
[src/emu/machine]tmp68301.c tmp68301.h
[src/emu/video]v9938.c
[src/mame/drivers]realbrk.c

trunk/src/emu/video/v9938.c
r26423r26424
16451645   else
16461646      ln += m_offset_x;
16471647
1648   for (i=0;i<256;i++)
16481649   {
1649      for (i=0;i<256;i++)
1650      if (col[i] & 0x80)
16501651      {
1651         if (col[i] & 0x80)
1652         {
1652         *ln++ = pens[g7_ind16[col[i]&0x0f]];
1653         if (_Width > 512)
16531654            *ln++ = pens[g7_ind16[col[i]&0x0f]];
1654            if (_Width > 512)
1655               *ln++ = pens[g7_ind16[col[i]&0x0f]];
1656         }
1655      }
1656      else
1657      {
1658         if (_Width > 512)
1659            ln += 2;
16571660         else
1658         {
1659            if (_Width > 512)
1660               ln += 2;
1661            else
1662               ln++;
1663         }
1661            ln++;
16641662      }
16651663   }
16661664}
trunk/src/emu/machine/tmp68301.c
r26423r26424
1515
1616static ADDRESS_MAP_START( tmp68301_regs, AS_0, 16, tmp68301_device )
1717//   AM_RANGE(0x000,0x3ff) AM_RAM
18   AM_RANGE(0x094,0x095) AM_READWRITE(imr_r,imr_w)
19   AM_RANGE(0x098,0x099) AM_READWRITE(iisr_r,iisr_w)
1820
21   /* Serial */
22   AM_RANGE(0x18e,0x18f) AM_READWRITE(scr_r,scr_w)
1923ADDRESS_MAP_END
2024
25// IRQ Mask register, 0x94
26READ16_MEMBER(tmp68301_device::imr_r)
27{
28   return m_imr;
29}
30
31WRITE16_MEMBER(tmp68301_device::imr_w)
32{
33   COMBINE_DATA(&m_imr);
34}
35
36// IRQ In-Service Register
37READ16_MEMBER(tmp68301_device::iisr_r)
38{
39   return m_iisr;
40}
41
42WRITE16_MEMBER(tmp68301_device::iisr_w)
43{
44   COMBINE_DATA(&m_iisr);
45}
46
47// Serial Control Register (TODO: 8-bit wide)
48READ16_MEMBER(tmp68301_device::scr_r)
49{
50   return m_scr;
51}
52
53WRITE16_MEMBER(tmp68301_device::scr_w)
54{
55   /*
56      *--- ---- CKSE
57      --*- ---- RES
58      ---- ---* INTM
59   */
60
61   COMBINE_DATA(&m_scr);
62   m_scr &= 0xa1;
63}
64
65
2166tmp68301_device::tmp68301_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
2267   : device_t(mconfig, TMP68301, "TMP68301", tag, owner, clock, "tmp68301", __FILE__),
2368      device_memory_interface(mconfig, *this),
r26423r26424
58103      m_IE[i] = 0;
59104
60105   machine().firstcpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(tmp68301_device::irq_callback),this));
106
107   m_imr = 0x7f7; // mask all irqs
61108}
62109
63110//-------------------------------------------------
r26423r26424
103150{
104151   int i = param;
105152   UINT16 TCR  =   m_regs[(0x200 + i * 0x20)/2];
106   UINT16 IMR  =   m_regs[0x94/2];      // Interrupt Mask Register (IMR)
107153   UINT16 ICR  =   m_regs[0x8e/2+i];    // Interrupt Controller Register (ICR7..9)
108154   UINT16 IVNR =   m_regs[0x9a/2];      // Interrupt Vector Number Register (IVNR)
109155
110156//  logerror("s: callback timer %04X, j = %d\n",machine.describe_context(),i,tcount);
111157
112158   if  (   (TCR & 0x0004) &&   // INT
113         !(IMR & (0x100<<i))
159         !(m_imr & (0x100<<i))
114160      )
115161   {
116162      int level = ICR & 0x0007;
r26423r26424
185231
186232   /* Take care of external interrupts */
187233
188   UINT16 IMR  =   m_regs[0x94/2];      // Interrupt Mask Register (IMR)
189234   UINT16 IVNR =   m_regs[0x9a/2];      // Interrupt Vector Number Register (IVNR)
190235
191236   for (i = 0; i < 3; i++)
192237   {
193238      if  (   (m_IE[i]) &&
194            !(IMR & (1<<i))
239            !(m_imr & (1<<i))
195240         )
196241      {
197242         UINT16 ICR  =   m_regs[0x80/2+i];    // Interrupt Controller Register (ICR0..2)
r26423r26424
212257
213258READ16_MEMBER( tmp68301_device::regs_r )
214259{
215   return m_regs[offset];
260   return read_word(offset);
216261}
217262
218263WRITE16_MEMBER( tmp68301_device::regs_w )
trunk/src/emu/machine/tmp68301.h
r26423r26424
1717   void external_interrupt_1();
1818   void external_interrupt_2();
1919
20   DECLARE_READ16_MEMBER(imr_r);
21   DECLARE_WRITE16_MEMBER(imr_w);
22   DECLARE_READ16_MEMBER(iisr_r);
23   DECLARE_WRITE16_MEMBER(iisr_w);
24   DECLARE_READ16_MEMBER(scr_r);
25   DECLARE_WRITE16_MEMBER(scr_w);
26
2027protected:
2128   // device-level overrides
2229   virtual void device_config_complete();
r26423r26424
3845   IRQ_CALLBACK_MEMBER(irq_callback);
3946   void update_irq_state();
4047
48   UINT16 m_imr;
49   UINT16 m_iisr;
50   UINT16 m_scr;
51
4152   inline UINT16 read_word(offs_t address);
4253   inline void write_word(offs_t address, UINT16 data);
4354   const address_space_config      m_space_config;
trunk/src/mame/drivers/realbrk.c
r26423r26424
167167
168168/*realbrk specific memory map*/
169169static ADDRESS_MAP_START( realbrk_mem, AS_PROGRAM, 16, realbrk_state )
170   AM_IMPORT_FROM(base_mem)
171170   AM_RANGE(0x800008, 0x80000b) AM_DEVWRITE8("ymsnd", ym2413_device, write, 0x00ff) //
172171   AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0")                            // P1 & P2 (Inputs)
173172   AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1")                            // Coins
174173   AM_RANGE(0xc00004, 0xc00005) AM_RAM_READ(realbrk_dsw_r) AM_SHARE("dsw_select")  // DSW select
175174   AM_RANGE(0xff0000, 0xfffbff) AM_RAM                                         // RAM
176175   AM_RANGE(0xfffd0a, 0xfffd0b) AM_WRITE(realbrk_flipscreen_w              )   // Hack! Parallel port data register
176   AM_IMPORT_FROM(base_mem)
177177ADDRESS_MAP_END
178178
179179/*pkgnsh specific memory map*/

Previous 199869 Revisions Next


© 1997-2024 The MAME Team