Previous 199869 Revisions Next

r21919 Sunday 17th March, 2013 at 22:23:05 UTC by David Haywood
deco_mlc - some improvement to stadhr96
[src/mame/drivers]deco_mlc.c
[src/mame/includes]deco_mlc.h
[src/mame/video]deco_mlc.c

trunk/src/mame/drivers/deco_mlc.c
r21918r21919
206206   return m_mlc_vram[offset]&0xffff;
207207}
208208
209// there is more to this, it controls the runner on the attract screen before the title should appear at least
209210READ32_MEMBER(deco_mlc_state::stadhr96_prot_146_r)
210211{
211212   /*
r21918r21919
217218   */
218219   offset<<=1;
219220
220   logerror("%08x:  Read prot %04x\n", space.device().safe_pc(), offset);
221221
222222   if (offset==0x5c4)
223223      return 0xaa55 << 16;
r21918r21919
228228   if (offset==0x304)
229229      return 0x0001 << 16; // Unknown, is either 0,1,2,3
230230
231   printf("%08x:  Read prot %08x\n", space.device().safe_pc(), offset);
232
231233   return 0;
232234}
233235
236WRITE32_MEMBER(deco_mlc_state::stadhr96_prot_146_w)
237{
238   printf("%08x:  Write prot %04x %08x\n", space.device().safe_pc(), offset, data);
239}
240
234241/******************************************************************************/
235242
236243static ADDRESS_MAP_START( decomlc_map, AS_PROGRAM, 32, deco_mlc_state )
r21918r21919
250257   AM_RANGE(0x044001c, 0x044001f) AM_WRITENOP AM_MIRROR(0xff000000)
251258   AM_RANGE(0x0500000, 0x0500003) AM_WRITE(avengrs_eprom_w) AM_MIRROR(0xff000000)
252259   AM_RANGE(0x0600000, 0x0600007) AM_DEVREADWRITE8_LEGACY("ymz", ymz280b_r, ymz280b_w, 0xff000000) AM_MIRROR(0xff000000)
253   AM_RANGE(0x070f000, 0x070ffff) AM_READ(stadhr96_prot_146_r) AM_MIRROR(0xff000000)
254//  AM_RANGE(0x070f000, 0x070ffff) AM_READ_LEGACY(stadhr96_prot_146_w) AM_SHARE("prot32ram")
260   AM_RANGE(0x070f000, 0x070ffff) AM_READWRITE(stadhr96_prot_146_r, stadhr96_prot_146_w) AM_MIRROR(0xff000000)
255261ADDRESS_MAP_END
256262
257263/******************************************************************************/
trunk/src/mame/includes/deco_mlc.h
r21918r21919
1616   required_shared_ptr<UINT32> m_mlc_vram;
1717   timer_device *m_raster_irq_timer;
1818   int m_mainCpuIsArm;
19   int m_mlc_raster_table[9][256];
19   UINT32 m_mlc_raster_table_1[4*256];
20   UINT32 m_mlc_raster_table_2[4*256];
21   UINT32 m_mlc_raster_table_3[4*256];
2022   UINT32 m_vbl_i;
2123   int m_lastScanline[9];
2224   UINT32 m_colour_mask;
r21918r21919
3032   DECLARE_READ32_MEMBER(mlc_spriteram_r);
3133   DECLARE_READ32_MEMBER(mlc_vram_r);
3234   DECLARE_READ32_MEMBER(stadhr96_prot_146_r);
35   DECLARE_WRITE32_MEMBER(stadhr96_prot_146_w);
3336   DECLARE_READ32_MEMBER(avengrgs_speedup_r);
3437   DECLARE_WRITE32_MEMBER(avengrs_eprom_w);
3538   DECLARE_DRIVER_INIT(mlc);
trunk/src/mame/video/deco_mlc.c
r21918r21919
336336      if(fx1&1) fx^=0x8000;
337337      if(fy1&1) fy^=0x4000;
338338
339      int extra_x_scale = 0x100;
340
341      // I think we need some hardware tests..
342      //  see notes about how this can't be our enable register (avengrgs doesn't touch it
343      //  and relies on something else, probably just the bits we use to select the window)
344      //  (although as previously noted, it isn't writing valid per-scanline values either)
339345      if (rasterMode)
340346      {
341         int irq_base_reg = 12 /* 6, 9, 12 */;
347            // use of these is a bit weird.
348            // -ZZZ -xxx   ---- -yyy   -XXX -zzz
342349
343         int extra_y_off = m_irq_ram[irq_base_reg+0] & 0x7ff;
344         int extra_x_off = m_irq_ram[irq_base_reg+1] & 0x7ff;
345         int extra_y_scale = (m_irq_ram[irq_base_reg+2]>>16) & 0x7ff;
346         int extra_x_scale = (m_irq_ram[irq_base_reg+2]>>0) & 0x7ff;
350            // xxx = x offset?
351            // yyy = y offset?
352            // zzz = xzoom (confirmed? stadium hero)
353            //  0x100 = no zoom
354            //
355            // XXX = duplicate bits of xxx?
356            // ZZZ = (sometimes) duplicate bits of zzz
347357
348         if (extra_x_off & 0x400) extra_x_off -= 0x800;
349         if (extra_y_off & 0x400) extra_y_off -= 0x800;
358         if ((clipper==0x0) || (clipper==0x2))
359         {
360         
361            int irq_base_reg; /* 6, 9, 12  are possible */
362            if (clipper== 0) irq_base_reg = 6;     // OK upper screen.. left?
363            else if (clipper== 2) irq_base_reg = 9; // OK upper screen.. main / center
364            else irq_base_reg = 12;
365
366            int extra_y_off = m_irq_ram[irq_base_reg+0] & 0x7ff;
367            int extra_x_off = m_irq_ram[irq_base_reg+1] & 0x7ff;
368            extra_x_scale = (m_irq_ram[irq_base_reg+2]>>0) & 0x3ff;
369
370            if (extra_x_off & 0x400) { extra_x_off = (-extra_x_off & 0x3ff); } else { extra_x_off = (extra_x_off & 0x3ff); }
371            if (extra_y_off & 0x400) { extra_x_off = (-extra_y_off & 0x3ff); } else { extra_y_off = (extra_y_off & 0x3ff); }
350372     
351         if (extra_y_scale & 0x400) extra_y_scale -= 0x800;
352         if (extra_x_scale & 0x400) extra_x_scale -= 0x800;
353373
354         x += extra_x_off;
355         y += extra_y_off;
374            x += extra_x_off;
375            y += extra_y_off;
376         }
377         else if (clipper==0x1)
378         {
379            // right?
380         }
381         else if (clipper==0x3)
382         {
383            // bottom?
384         }
356385
357         xscale += extra_x_scale;
358         yscale += extra_y_scale;
359
360386      }
361387
388      xscale *= extra_x_scale;
389
362390      int ybase=y<<16;
363391      int yinc=(yscale<<8)*16;
364392
r21918r21919
368396         ybase-=yoffs * (yscale<<8);
369397
370398      int xbase=x<<16;
371      int xinc=(xscale<<8)*16;
399      int xinc=(xscale)*16;
372400         
373401      if (fx)
374         xbase+=(xoffs-15) * (xscale<<8) - ((w-1)*xinc);
402         xbase+=(xoffs-15) * (xscale) - ((w-1)*xinc);
375403      else
376         xbase-=xoffs * (xscale<<8);
404         xbase-=xoffs * (xscale);
377405
378406
379407      int full_realybase = ybase;
r21918r21919
490518                     tile,tile2,
491519                     color + colorOffset,fx,realxbase,
492520                     0,
493                     use8bppMode,(xscale<<8),alpha, srcline);
521                     use8bppMode,(xscale),alpha, srcline);
494522
495523      }
496524

Previous 199869 Revisions Next


© 1997-2024 The MAME Team