TIA: Added blanking when HMOVE occurs.

Implemented playfield copying (fixes some Pacman display issues).
Added a document which discusses the inner workings of the TIA on a circuit level.
M6532: Added stubs for several registers, and changed the returns for some. Pitfall's first screen now renders correctly, and the copyright message scrolls.
This commit is contained in:
pjgat09 2012-03-12 18:44:29 +00:00
parent 287c5c61f8
commit 5e69d7503e
3 changed files with 1156 additions and 1 deletions

View File

@ -58,6 +58,22 @@ namespace BizHawk.Emulation.Consoles.Atari
else
{
Console.WriteLine("6532 register read: " + maskedAddr.ToString("x"));
if (maskedAddr == 0x00) // SWCHA
{
return 0xFF;
}
else if (maskedAddr == 0x01) // SWACNT
{
}
else if (maskedAddr == 0x02) // SWCHB
{
return 0x3F;
}
else if (maskedAddr == 0x03) // SWBCNT
{
}
}
}

View File

@ -13,6 +13,9 @@ namespace BizHawk.Emulation.Consoles.Atari
UInt32 PF; // PlayField data
byte BKcolor, PFcolor;
bool PFpriority = false;
bool PFreflect = false;
bool hmoveHappened = false;
struct playerData
{
@ -127,12 +130,20 @@ namespace BizHawk.Emulation.Consoles.Atari
// Second half
else
{
PFmask = (UInt32)(1 << ((byte)((pixelPos % 80) / 4)));
if (PFreflect)
{
PFmask = (UInt32)(1 << ((byte)((pixelPos % 80) / 4)));
}
else
{
PFmask = (UInt32)(1 << ((20 - 1) - (byte)((pixelPos % 80) / 4)));
}
}
UInt32 color;
color = palette[BKcolor];
if ((PF & PFmask) != 0)
{
color = palette[PFcolor];
@ -246,6 +257,15 @@ namespace BizHawk.Emulation.Consoles.Atari
{
color = 0x000000;
}
if (hmoveHappened && pixelPos >= 0 && pixelPos < 8)
{
color = 0x000000;
}
if (pixelPos >= 8)
{
hmoveHappened = false;
}
scanline[pixelPos] = color;
scanlinePos++;
@ -382,6 +402,7 @@ namespace BizHawk.Emulation.Consoles.Atari
else if (maskedAddr == 0x0A) // CTRLPF
{
PFpriority = (value & 0x04) != 0;
PFreflect = (value & 0x01) != 0;
ball.size = (byte)((value & 0x30) >> 4);
}
@ -461,6 +482,7 @@ namespace BizHawk.Emulation.Consoles.Atari
player1.HM = 0;
ball.HM = 0;
hmoveHappened = true;
}
}

File diff suppressed because it is too large Load Diff