mirror of
https://github.com/holub/mame
synced 2025-10-07 01:16:22 +03:00
start looking at the macrossp line regs (nw)
This commit is contained in:
parent
f38babb223
commit
0d3d5c42cf
@ -6,24 +6,11 @@ Quiz Bisyoujo Senshi Sailor Moon (c)1997 Banpresto
|
|||||||
Driver by David Haywood
|
Driver by David Haywood
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- macrossp: tilemap zoom is wrong, see title screen (misplaced) and level 2 boss
|
- what is the 'bios' rom for? it appears to be data tables and is very different between games but we don't map it anywhere
|
||||||
(background scrolls faster than sprites)
|
- priorities
|
||||||
- should use VIDEO_RGB_DIRECT for alpha blending to work, but tilemap_draw_roz()
|
- zooming is wrong
|
||||||
doesn't support it.
|
- is alpha REALLY alpha or sprite flicker?
|
||||||
- Sprite Zoom on quizmoon title screen isn't right
|
- convert tilemaps to devices?
|
||||||
- Tilemap zoom effect on macrossp title screen and probably other places
|
|
||||||
- Priorities (Sprites & Backgrounds) - see quizmoon attract mode
|
|
||||||
- sprite/tilemap priorities might not be 100% correct
|
|
||||||
- Sound
|
|
||||||
- optimize palette fading in macrossp.quizmoon doesn't use that register.
|
|
||||||
- All Other Unused Reads / Writes
|
|
||||||
- Correct unknown ports if/as needed
|
|
||||||
- Clean Up
|
|
||||||
- Flip Screen support (both games have a dipswitch for it's selection)
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
|
|
||||||
Whats the BIOS rom? should it be in the 68020 map, its different between games.
|
|
||||||
|
|
||||||
68020 interrupts
|
68020 interrupts
|
||||||
lev 1 : 0x64 : 0000 084c - unknown..
|
lev 1 : 0x64 : 0000 084c - unknown..
|
||||||
@ -397,20 +384,20 @@ static ADDRESS_MAP_START( macrossp_map, AS_PROGRAM, 32, macrossp_state )
|
|||||||
AM_RANGE(0x800000, 0x802fff) AM_RAM AM_SHARE("spriteram")
|
AM_RANGE(0x800000, 0x802fff) AM_RAM AM_SHARE("spriteram")
|
||||||
/* SCR A Layer */
|
/* SCR A Layer */
|
||||||
AM_RANGE(0x900000, 0x903fff) AM_RAM_WRITE(macrossp_scra_videoram_w) AM_SHARE("scra_videoram")
|
AM_RANGE(0x900000, 0x903fff) AM_RAM_WRITE(macrossp_scra_videoram_w) AM_SHARE("scra_videoram")
|
||||||
AM_RANGE(0x904200, 0x9043ff) AM_WRITEONLY /* W/O? */
|
AM_RANGE(0x904200, 0x9043ff) AM_RAM AM_SHARE("scra_linezoom") /* W/O? */
|
||||||
AM_RANGE(0x905000, 0x90500b) AM_WRITEONLY AM_SHARE("scra_videoregs") /* W/O? */
|
AM_RANGE(0x905000, 0x90500b) AM_RAM AM_SHARE("scra_videoregs") /* W/O? */
|
||||||
/* SCR B Layer */
|
/* SCR B Layer */
|
||||||
AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(macrossp_scrb_videoram_w) AM_SHARE("scrb_videoram")
|
AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(macrossp_scrb_videoram_w) AM_SHARE("scrb_videoram")
|
||||||
AM_RANGE(0x90c200, 0x90c3ff) AM_WRITEONLY /* W/O? */
|
AM_RANGE(0x90c200, 0x90c3ff) AM_RAM AM_SHARE("scrb_linezoom") /* W/O? */
|
||||||
AM_RANGE(0x90d000, 0x90d00b) AM_WRITEONLY AM_SHARE("scrb_videoregs") /* W/O? */
|
AM_RANGE(0x90d000, 0x90d00b) AM_RAM AM_SHARE("scrb_videoregs") /* W/O? */
|
||||||
/* SCR C Layer */
|
/* SCR C Layer */
|
||||||
AM_RANGE(0x910000, 0x913fff) AM_RAM_WRITE(macrossp_scrc_videoram_w) AM_SHARE("scrc_videoram")
|
AM_RANGE(0x910000, 0x913fff) AM_RAM_WRITE(macrossp_scrc_videoram_w) AM_SHARE("scrc_videoram")
|
||||||
AM_RANGE(0x914200, 0x9143ff) AM_WRITEONLY /* W/O? */
|
AM_RANGE(0x914200, 0x9143ff) AM_RAM AM_SHARE("scrc_linezoom")/* W/O? */
|
||||||
AM_RANGE(0x915000, 0x91500b) AM_WRITEONLY AM_SHARE("scrc_videoregs") /* W/O? */
|
AM_RANGE(0x915000, 0x91500b) AM_RAM AM_SHARE("scrc_videoregs") /* W/O? */
|
||||||
/* Text Layer */
|
/* Text Layer */
|
||||||
AM_RANGE(0x918000, 0x91bfff) AM_RAM_WRITE(macrossp_text_videoram_w) AM_SHARE("text_videoram")
|
AM_RANGE(0x918000, 0x91bfff) AM_RAM_WRITE(macrossp_text_videoram_w) AM_SHARE("text_videoram")
|
||||||
AM_RANGE(0x91c200, 0x91c3ff) AM_WRITEONLY /* W/O? */
|
AM_RANGE(0x91c200, 0x91c3ff) AM_RAM AM_SHARE("text_linezoom") /* W/O? */
|
||||||
AM_RANGE(0x91d000, 0x91d00b) AM_WRITEONLY AM_SHARE("text_videoregs") /* W/O? */
|
AM_RANGE(0x91d000, 0x91d00b) AM_RAM AM_SHARE("text_videoregs") /* W/O? */
|
||||||
|
|
||||||
AM_RANGE(0xa00000, 0xa03fff) AM_RAM_WRITE(paletteram32_macrossp_w) AM_SHARE("paletteram")
|
AM_RANGE(0xa00000, 0xa03fff) AM_RAM_WRITE(paletteram32_macrossp_w) AM_SHARE("paletteram")
|
||||||
|
|
||||||
|
@ -11,27 +11,42 @@ public:
|
|||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_spriteram(*this, "spriteram"),
|
m_spriteram(*this, "spriteram"),
|
||||||
m_scra_videoram(*this, "scra_videoram"),
|
m_scra_videoram(*this, "scra_videoram"),
|
||||||
|
m_scra_linezoom(*this, "scra_linezoom"),
|
||||||
m_scra_videoregs(*this, "scra_videoregs"),
|
m_scra_videoregs(*this, "scra_videoregs"),
|
||||||
|
|
||||||
m_scrb_videoram(*this, "scrb_videoram"),
|
m_scrb_videoram(*this, "scrb_videoram"),
|
||||||
|
m_scrb_linezoom(*this, "scrb_linezoom"),
|
||||||
m_scrb_videoregs(*this, "scrb_videoregs"),
|
m_scrb_videoregs(*this, "scrb_videoregs"),
|
||||||
|
|
||||||
m_scrc_videoram(*this, "scrc_videoram"),
|
m_scrc_videoram(*this, "scrc_videoram"),
|
||||||
|
m_scrc_linezoom(*this, "scrc_linezoom"),
|
||||||
m_scrc_videoregs(*this, "scrc_videoregs"),
|
m_scrc_videoregs(*this, "scrc_videoregs"),
|
||||||
|
|
||||||
m_text_videoram(*this, "text_videoram"),
|
m_text_videoram(*this, "text_videoram"),
|
||||||
|
m_text_linezoom(*this, "text_linezoom"),
|
||||||
m_text_videoregs(*this, "text_videoregs"),
|
m_text_videoregs(*this, "text_videoregs"),
|
||||||
|
|
||||||
m_paletteram(*this, "paletteram"),
|
m_paletteram(*this, "paletteram"),
|
||||||
m_mainram(*this, "mainram"),
|
m_mainram(*this, "mainram"),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_audiocpu(*this, "audiocpu"){ }
|
m_audiocpu(*this, "audiocpu")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* memory pointers */
|
/* memory pointers */
|
||||||
required_shared_ptr<UINT32> m_spriteram;
|
required_shared_ptr<UINT32> m_spriteram;
|
||||||
required_shared_ptr<UINT32> m_scra_videoram;
|
required_shared_ptr<UINT32> m_scra_videoram;
|
||||||
|
required_shared_ptr<UINT32> m_scra_linezoom;
|
||||||
required_shared_ptr<UINT32> m_scra_videoregs;
|
required_shared_ptr<UINT32> m_scra_videoregs;
|
||||||
required_shared_ptr<UINT32> m_scrb_videoram;
|
required_shared_ptr<UINT32> m_scrb_videoram;
|
||||||
|
required_shared_ptr<UINT32> m_scrb_linezoom;
|
||||||
required_shared_ptr<UINT32> m_scrb_videoregs;
|
required_shared_ptr<UINT32> m_scrb_videoregs;
|
||||||
required_shared_ptr<UINT32> m_scrc_videoram;
|
required_shared_ptr<UINT32> m_scrc_videoram;
|
||||||
|
required_shared_ptr<UINT32> m_scrc_linezoom;
|
||||||
required_shared_ptr<UINT32> m_scrc_videoregs;
|
required_shared_ptr<UINT32> m_scrc_videoregs;
|
||||||
required_shared_ptr<UINT32> m_text_videoram;
|
required_shared_ptr<UINT32> m_text_videoram;
|
||||||
|
required_shared_ptr<UINT32> m_text_linezoom;
|
||||||
required_shared_ptr<UINT32> m_text_videoregs;
|
required_shared_ptr<UINT32> m_text_videoregs;
|
||||||
required_shared_ptr<UINT32> m_paletteram;
|
required_shared_ptr<UINT32> m_paletteram;
|
||||||
required_shared_ptr<UINT32> m_mainram;
|
required_shared_ptr<UINT32> m_mainram;
|
||||||
@ -76,7 +91,7 @@ public:
|
|||||||
UINT32 screen_update_macrossp(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update_macrossp(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
void screen_eof_macrossp(screen_device &screen, bool state);
|
void screen_eof_macrossp(screen_device &screen, bool state);
|
||||||
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority );
|
void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect, int priority );
|
||||||
void draw_layer( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer );
|
void draw_layer( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer, int line );
|
||||||
void sortlayers(int *layer,int *pri);
|
void sortlayers(int *layer,int *pri);
|
||||||
void update_colors( );
|
void update_colors( );
|
||||||
DECLARE_WRITE_LINE_MEMBER(irqhandler);
|
DECLARE_WRITE_LINE_MEMBER(irqhandler);
|
||||||
|
@ -304,10 +304,11 @@ void macrossp_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprec
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void macrossp_state::draw_layer( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer )
|
void macrossp_state::draw_layer( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer, int line )
|
||||||
{
|
{
|
||||||
tilemap_t *tm;
|
tilemap_t *tm;
|
||||||
UINT32 *vr;
|
UINT32 *vr;
|
||||||
|
UINT32 *lr;
|
||||||
|
|
||||||
switch (layer)
|
switch (layer)
|
||||||
{
|
{
|
||||||
@ -315,34 +316,45 @@ void macrossp_state::draw_layer( screen_device &screen, bitmap_rgb32 &bitmap, co
|
|||||||
default:
|
default:
|
||||||
tm = m_scra_tilemap;
|
tm = m_scra_tilemap;
|
||||||
vr = m_scra_videoregs;
|
vr = m_scra_videoregs;
|
||||||
|
lr = m_scra_linezoom;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
tm = m_scrb_tilemap;
|
tm = m_scrb_tilemap;
|
||||||
vr = m_scrb_videoregs;
|
vr = m_scrb_videoregs;
|
||||||
|
lr = m_scrb_linezoom;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
tm = m_scrc_tilemap;
|
tm = m_scrc_tilemap;
|
||||||
vr = m_scrc_videoregs;
|
vr = m_scrc_videoregs;
|
||||||
|
lr = m_scrc_linezoom;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((vr[2] & 0xf0000000) == 0xe0000000) /* zoom enable (guess, surely wrong) */
|
if ((vr[2] & 0xf0000000) == 0xe0000000) /* zoom enable (guess, surely wrong) */
|
||||||
{
|
{
|
||||||
int startx, starty, inc;
|
int startx, starty, inc, linc;
|
||||||
|
|
||||||
startx = (vr[1] & 0x0000ffff) << 16;
|
startx = (vr[1] & 0x0000ffff) << 16;
|
||||||
starty = (vr[1] & 0xffff0000) >> 0;
|
starty = (vr[1] & 0xffff0000) >> 0;
|
||||||
inc = (vr[2] & 0x00ff0000) >> 6,
|
inc = (vr[2] & 0x00ff0000) >> 6;
|
||||||
|
|
||||||
|
if (line&1)
|
||||||
|
linc = (lr[line/2] & 0x0000ffff)>>0;
|
||||||
|
else
|
||||||
|
linc = (lr[line/2] & 0xffff0000)>>16;
|
||||||
|
|
||||||
|
|
||||||
|
linc <<= 10;
|
||||||
|
|
||||||
/* WRONG! */
|
/* WRONG! */
|
||||||
/* scroll register contain position relative to the center of the screen, so adjust */
|
/* scroll register contain position relative to the center of the screen, so adjust */
|
||||||
startx -= (368/2) * inc;
|
startx -= (368/2) * linc;
|
||||||
starty -= (240/2) * inc;
|
starty -= (240/2) * inc;
|
||||||
|
|
||||||
tm->draw_roz(screen, bitmap, cliprect,
|
tm->draw_roz(screen, bitmap, cliprect,
|
||||||
startx,starty,inc,0,0,inc,
|
startx,starty,linc,0,0,inc,
|
||||||
1, /* wraparound */
|
1, /* wraparound */
|
||||||
0,0);
|
0,0);
|
||||||
}
|
}
|
||||||
@ -385,11 +397,34 @@ UINT32 macrossp_state::screen_update_macrossp(screen_device &screen, bitmap_rgb3
|
|||||||
|
|
||||||
sortlayers(layers, layerpri);
|
sortlayers(layers, layerpri);
|
||||||
|
|
||||||
draw_layer(screen, bitmap, cliprect, layers[0]);
|
rectangle clip;
|
||||||
|
const rectangle &visarea = screen.visible_area();
|
||||||
|
clip = visarea;
|
||||||
|
|
||||||
|
for (int y=0;y<240;y++)
|
||||||
|
{
|
||||||
|
clip.min_y = clip.max_y = y;
|
||||||
|
draw_layer(screen, bitmap, clip, layers[0], y);
|
||||||
|
}
|
||||||
|
|
||||||
draw_sprites(bitmap, cliprect, 0);
|
draw_sprites(bitmap, cliprect, 0);
|
||||||
draw_layer(screen, bitmap, cliprect, layers[1]);
|
|
||||||
|
for (int y=0;y<240;y++)
|
||||||
|
{
|
||||||
|
clip.min_y = clip.max_y = y;
|
||||||
|
draw_layer(screen, bitmap, clip, layers[1], y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
draw_sprites(bitmap, cliprect, 1);
|
draw_sprites(bitmap, cliprect, 1);
|
||||||
draw_layer(screen, bitmap, cliprect, layers[2]);
|
|
||||||
|
for (int y=0;y<240;y++)
|
||||||
|
{
|
||||||
|
clip.min_y = clip.max_y = y;
|
||||||
|
draw_layer(screen, bitmap, clip, layers[2], y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
draw_sprites(bitmap, cliprect, 2);
|
draw_sprites(bitmap, cliprect, 2);
|
||||||
draw_sprites(bitmap, cliprect, 3);
|
draw_sprites(bitmap, cliprect, 3);
|
||||||
m_text_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
m_text_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
Loading…
Reference in New Issue
Block a user