NESHawk: FDS Timer IRQ's
This commit is contained in:
parent
c594e48175
commit
9498206980
|
@ -255,19 +255,29 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
case 0x0020:
|
||||
timerlatch &= 0xff00;
|
||||
timerlatch |= value;
|
||||
//timerirq = false;
|
||||
break;
|
||||
case 0x0021:
|
||||
timerlatch &= 0x00ff;
|
||||
timerlatch |= value << 8;
|
||||
//timerirq = false;
|
||||
break;
|
||||
case 0x0022:
|
||||
timerreg = (byte)(value & 3);
|
||||
timervalue = timerlatch;
|
||||
if (diskenable)
|
||||
{
|
||||
timerreg = (byte)(value & 3);
|
||||
if ((value & 0x02) == 0x02)
|
||||
{
|
||||
timervalue = timerlatch;
|
||||
}
|
||||
else
|
||||
{
|
||||
_timerirq = false;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case 0x0023:
|
||||
diskenable = (value & 1) != 0;
|
||||
if (!diskenable) { _timerirq = false; }
|
||||
soundenable = (value & 2) != 0;
|
||||
break;
|
||||
case 0x0024:
|
||||
|
@ -344,7 +354,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
|
||||
public override void ClockCPU()
|
||||
{
|
||||
if ((timerreg & 2) != 0)// && timervalue > 0)
|
||||
if ((timerreg & 2) != 0 && diskenable)
|
||||
{
|
||||
if (timervalue!=0)
|
||||
{
|
||||
|
@ -352,22 +362,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
}
|
||||
if (timervalue == 0)
|
||||
{
|
||||
|
||||
/*
|
||||
if ((timerreg & 1) != 0)
|
||||
{
|
||||
timervalue = timerlatch;
|
||||
//timervalue = 0xFFFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
timerreg &= unchecked((byte)~2);
|
||||
timervalue = 0;
|
||||
timerlatch = 0;
|
||||
}
|
||||
*/
|
||||
timervalue = timerlatch;
|
||||
timerirq = true;
|
||||
if ((timerreg & 1) == 0)
|
||||
{
|
||||
timerreg -= 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
audio.Clock();
|
||||
|
|
|
@ -67,14 +67,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES
|
|||
byte[] fileheader = br.ReadBytes(16);
|
||||
if (fileheader[0] != 0x03)
|
||||
{
|
||||
throw new Exception("Corrupt FDS block 3");
|
||||
// Instead of exceptions, display strong warnings
|
||||
Console.WriteLine("WARNING: INVALID FILE, BLOCK 3 ERROR");
|
||||
//throw new Exception("Corrupt FDS block 3");
|
||||
}
|
||||
int filesize = fileheader[13] + fileheader[14] * 256;
|
||||
|
||||
byte[] file = br.ReadBytes(filesize + 1);
|
||||
if (file[0] != 0x04)
|
||||
{
|
||||
throw new Exception("Corrupt FDS block 4");
|
||||
Console.WriteLine("WARNING: INVALID FILE, BLOCK 4 ERROR");
|
||||
//throw new Exception("Corrupt FDS block 4");
|
||||
}
|
||||
|
||||
WriteBlock(ret, fileheader, 122);
|
||||
|
|
Loading…
Reference in New Issue