gba gpu view: bring to front when loading a widget. gba: put dma in tracelog. disable display of sprites with shape = 3. fixes gobbelygook in F-Zero Climax (J). not sure if this is actually what hardware does, as the broken sprite data is from a different ambiguous situation.

This commit is contained in:
goyuken 2012-11-29 21:16:52 +00:00
parent c1f9a131d5
commit 20d9e726d2
5 changed files with 37 additions and 5 deletions

View File

@ -672,7 +672,9 @@ namespace BizHawk.MultiClient.GBAtools
{
if (listBoxWidgets.SelectedItem != null)
{
(listBoxWidgets.SelectedItem as MobileBmpView).Show();
var mbv = listBoxWidgets.SelectedItem as MobileBmpView;
mbv.Show();
mbv.BringToFront();
listBoxWidgets.Items.RemoveAt(listBoxWidgets.SelectedIndex);
}
}

View File

@ -21,6 +21,7 @@
#include "ameteor.hpp"
#include "debug.hpp"
#include <sstream>
namespace AMeteor
{
@ -152,6 +153,15 @@ namespace AMeteor
<< " to " << IOS_ADD << chan.dest
<< " of " << IOS_NOR << (chan.count ? chan.count : 0x10000)
<< (chan.control.b.type ? " words" : " halfwords"));
if (traceenabled)
{
std::stringstream ss;
ss << "DMA" << IOS_NOR << (int)channum << ", from " << IOS_ADD << chan.src
<< " to " << IOS_ADD << chan.dest
<< " of " << IOS_NOR << (chan.count ? chan.count : 0x10000)
<< (chan.control.b.type ? " words" : " halfwords");
trace_bizhawk(ss.str());
}
#if 0
if (channum == 3 && (chan.dest >> 24) == 0x0D || (chan.src >> 24) == 0x0D)
{

View File

@ -55,6 +55,10 @@ namespace AMeteor
if (m_attr0 & (0x1 << 9) || ((m_attr0 >> 10) & 0x3) == 2)
return;
// don't draw sprites with "prohibited" size
if (m_width == 0)
return;
int16_t yoff = (m_attr0 & 0xFF);
if (yoff > Screen::HEIGHT)
yoff -= 256;
@ -253,6 +257,10 @@ namespace AMeteor
if (((m_attr0 >> 10) & 0x3) == 2)
return;
// don't draw sprites with "prohibited" size
if (m_width == 0)
return;
int16_t yoff = (m_attr0 & 0xFF);
if (yoff > Screen::HEIGHT)
yoff -= 256;
@ -407,6 +415,10 @@ namespace AMeteor
if (m_attr0 & (0x1 << 9) || ((m_attr0 >> 10) & 0x3) != 2)
return;
// don't draw sprites with "prohibited" size
if (m_width == 0)
return;
int16_t yoff = (m_attr0 & 0xFF);
if (yoff > Screen::HEIGHT)
yoff -= 256;
@ -497,6 +509,10 @@ namespace AMeteor
// if it's not an obj window
if (((m_attr0 >> 10) & 0x3) != 2)
return;
// don't draw sprites with "prohibited" size
if (m_width == 0)
return;
int16_t yoff = (m_attr0 & 0xFF);
if (yoff > Screen::HEIGHT)
@ -662,15 +678,17 @@ namespace AMeteor
inline void Object::SetSize ()
{
static const uint8_t Width[3][4] = {
static const uint8_t Width[4][4] = {
{1, 2, 4, 8}, // Square
{2, 4, 4, 8}, // Horizontal
{1, 1, 2, 4} // Vertical
{1, 1, 2, 4}, // Vertical
{0, 0, 0, 0} // Prohibited
};
static const uint8_t Height[3][4] = {
static const uint8_t Height[4][4] = {
{1, 2, 4, 8}, // Square
{1, 1, 2, 4}, // Horizontal
{2, 4, 4, 8} // Vertical
{2, 4, 4, 8}, // Vertical
{0, 0, 0, 0} // Prohibited
};
m_width = Width[m_attr0 >> 14][m_attr1 >> 14];

View File

@ -93,6 +93,8 @@ namespace AMeteor
}
else // no vcount match
dispstat &= ~(uint16_t)0x4;
// scanline callback for frontend
// ...
}
else // if we were not H-Blanking
{