summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/mb60553.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/mb60553.cpp')
-rw-r--r--src/mame/video/mb60553.cpp44
1 files changed, 28 insertions, 16 deletions
diff --git a/src/mame/video/mb60553.cpp b/src/mame/video/mb60553.cpp
index 9178227b0e4..f24c8de2864 100644
--- a/src/mame/video/mb60553.cpp
+++ b/src/mame/video/mb60553.cpp
@@ -5,7 +5,12 @@
the actual line scroll / zoom is not properly understood
interestingly the chip seems to require doubled up ROMs (2 copies of each ROM) to draw just the single layer.
-
+
+*/
+/*
+ Tecmo World Cup '94 "service mode" has an item for testing zooming, this is:
+ 0xffdf12 target zoom code
+ 0xffdf16 current zoom code
*/
#include "emu.h"
@@ -257,33 +262,40 @@ void mb60553_zooming_tilemap_device::draw( screen_device &screen, bitmap_ind16&
{
int line;
rectangle clip;
-
+
clip.min_x = screen.visible_area().min_x;
clip.max_x = screen.visible_area().max_x;
- for (line = 0; line < 224;line++)
+ for (line = screen.visible_area().min_y; line < screen.visible_area().max_y;line++)
{
// int scrollx;
// int scrolly;
-
uint32_t startx,starty;
-
- uint32_t incxx,incyy;
-
- startx = m_regs[0];
+ int32_t incxx,incyy;
+ int32_t incxy,incyx;
+ float xoffset;
+
+ // confirmed on how ROZ is used
+ incyy = ((int16_t)m_lineram[(line)*8+0])<<4;
+ incxx = ((int16_t)m_lineram[(line)*8+3])<<4;
+
+ // startx has an offset based off current x zoom value
+ // This is confirmed by Tecmo World Cup '94 startx being 0xff40 (-192) when showing footballer pics on attract mode (incxx is 0x800)
+ // TODO: slightly offset?
+ xoffset = ((float)incyy/(float)0x10000) * 384.0;
+
+ startx = m_regs[0] + (int32_t)xoffset;
starty = m_regs[1];
- startx += (24<<4); // maybe not..
-
- startx -= m_lineram[(line)*8+7]/2;
-
- incxx = m_lineram[(line)*8+0]<<4;
- incyy = m_lineram[(line)*8+3]<<4;
-
+ // TODO: what's this? Used by Grand Striker playfield
+ incyx = ((int16_t)m_lineram[(line)*8+7])<<4;
+ // V Goal Soccer rotation
+ incxy = ((int16_t)m_lineram[(line)*8+4])<<4;
+
clip.min_y = clip.max_y = line;
draw_roz_core(screen, bitmap, clip, startx<<12,starty<<12,
- incxx,0,0,incyy,
+ incxx,incxy,-incyx,incyy,
1
);