pce-cd: basically working pretty okay! (fixed bug causing issues with extended ADPCM playback sequences)

This commit is contained in:
beirich 2011-09-28 05:03:22 +00:00
parent f3dc6068ce
commit cf8216ac46
5 changed files with 5 additions and 43 deletions

View File

@ -44,11 +44,6 @@ namespace BizHawk.Emulation.CPUs.H6280
if (IRQ2Assert && FlagI == false && LagIFlag == false && (IRQControlByte & IRQ2Selector) == 0 && InBlockTransfer == false)
{
Console.WriteLine("============================================================");
Console.WriteLine(" ENTERING IRQ2");
Console.WriteLine(" 1802: {0:X2}, 1803: {1:X2}, && {2:X2}",PCEngine.CdIoPorts[2], PCEngine.CdIoPorts[3], PCEngine.CdIoPorts[2] & PCEngine.CdIoPorts[3]);
Console.WriteLine("============================================================");
WriteMemory((ushort)(S-- + 0x2100), (byte)(PC >> 8));
WriteMemory((ushort)(S-- + 0x2100), (byte)PC);
WriteMemory((ushort)(S-- + 0x2100), (byte)(P & (~0x10)));

View File

@ -100,18 +100,16 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
{
AdpcmLength = IOAddress;
EndReached = false;
//Console.WriteLine("SET LENGTH={0:X4}", adpcm_length);
}
if (AdpcmIsPlaying && (value & 0x20) == 0)
AdpcmIsPlaying = false; // only plays as long as this bit is set
AdpcmIsPlaying = false; // clearing this bit stops playback
if (AdpcmIsPlaying == false && (value & 0x20) != 0)
{
if ((value & 0x40) == 0)
Console.WriteLine("a thing thats normally set is not set");
//Console.WriteLine("Start playing! READ {0:X4} LENGTH {1:X4}", ReadAddress, AdpcmLength);
AdpcmIsPlaying = true;
playingSample = 2048;
magnitude = 0;
@ -143,6 +141,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
{
EndReached = true;
HalfReached = false;
//Port180D &= 0x9F;
}
}
@ -161,6 +160,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
{
byte dmaByte = SCSI.DataBits;
RAM[WriteAddress++] = dmaByte;
AdpcmLength++;
SCSI.ACK = false;
SCSI.REQ = false;
@ -168,10 +168,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
}
if (SCSI.DataTransferInProgress == false)
{
Port180B = 0;
//Console.WriteLine(" ADPCM DMA COMPLETED");
}
}
pce.IntADPCM = HalfReached;

View File

@ -1,14 +1,6 @@
******************************************************
* Turbo CD Issues *
******************************************************
- General, issues where ADPCM cuts out after a few seconds
- Bakuretsu Hunter
- Download II
- Dracula X when you rescue Maria
- Dragon Slayer
- Dungeon Explorer II
- Magicoal
- Ys IV
- Graphics corruption:
- Camp California, check seagull during opening
@ -18,11 +10,9 @@
Still some lesser issues with cancelling a fadeout. Otherwise CDDA is working now...
- Develo Magazine demo game
Arcade Card games:
- JANSHIN DENSETSU sets the T flag prior to an LDA instruction; MANY TIMES (ie it doesnt seem to be an accident).
Unclear if T flag actually affects LDA instruction.
- Ryuuko no Ken is all messed up, and I don't super care :|
- Record of Lodoss War wont start game from title screen
- Valis: Screen is black during entire intro section

View File

@ -167,7 +167,6 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
{
if (DataIn.Count == 0)
{
//Console.WriteLine("Sector available to read!!!");
// read in a sector and shove it in the queue
disc.ReadLBA_2048(CurrentReadingSector, DataIn.GetBuffer(), 0);
DataIn.SignalBufferFilled(2048);
@ -279,7 +278,6 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
pce.IntDataTransferReady = false;
if (DataTransferWasDone)
{
Console.WriteLine("DATA TRANSFER FINISHED!");
DataTransferInProgress = false;
DataTransferWasDone = false;
pce.IntDataTransferComplete = true;
@ -393,7 +391,6 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
if (CommandBuffer[4] == 0)
SectorsLeftToRead = 256;
Console.WriteLine("STARTED READ: {0} SECTORS FROM {1}",SectorsLeftToRead, CurrentReadingSector);
DataReadWaitTimer = pce.Cpu.TotalExecutedCycles + 5000; // figure out proper read delay later
pce.CDAudio.Stop();
}

View File

@ -4,7 +4,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
{
public partial class PCEngine
{
public static byte[] CdIoPorts = new byte[16];
public byte[] CdIoPorts = new byte[16];
public bool IntADPCM // INTA
{
@ -36,7 +36,6 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
{
CDAudio.CallbackAction = () =>
{
Console.WriteLine("FIRING CD-AUDIO STOP IRQ MAYBE!");
IntDataTransferReady = false;
IntDataTransferComplete = true;
};
@ -64,14 +63,6 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
CdIoPorts[2] = value;
SCSI.ACK = ((value & 0x80) != 0);
if ((CdIoPorts[2] & 0x04) != 0) Log.Error("CD", "INTA enable");
if ((CdIoPorts[2] & 0x08) != 0) Log.Error("CD", "INTSTOP enable");
if ((CdIoPorts[2] & 0x10) != 0) Log.Error("CD", "INTSUB enable");
if ((CdIoPorts[2] & 0x20) != 0) Log.Error("CD", "INTM enable");
if ((CdIoPorts[2] & 0x40) != 0) Log.Error("CD", "INTD enable");
if ((Cpu.IRQControlByte & 0x01) == 0 &&
(CdIoPorts[2] & 0x7C) != 0) Log.Error("CD", "BTW, IRQ2 is not masked");
SCSI.Think();
RefreshIRQ2();
break;
@ -89,7 +80,7 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
case 0x1805:
case 0x1806:
// Latch CDDA data... no action needed for us
// Latch CDDA data... no action needed for us (because we cheat)
break;
case 0x1807: // BRAM Unlock
@ -101,20 +92,14 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
ADPCM.IOAddress &= 0xFF00;
ADPCM.IOAddress |= value;
if ((CdIoPorts[0x0D] & 0x10) != 0)
{
Console.WriteLine("doing silly thing");
ADPCM.AdpcmLength = ADPCM.IOAddress;
}
break;
case 0x1809: // ADPCM address MSB
ADPCM.IOAddress &= 0x00FF;
ADPCM.IOAddress |= (ushort)(value << 8);
if ((CdIoPorts[0x0D] & 0x10) != 0)
{
Console.WriteLine("doing silly thing");
ADPCM.AdpcmLength = ADPCM.IOAddress;
}
break;
case 0x180A: // ADPCM Memory Read/Write Port
@ -123,8 +108,6 @@ namespace BizHawk.Emulation.Consoles.TurboGrafx
case 0x180B: // ADPCM DMA Control
ADPCM.Port180B = value;
if (ADPCM.AdpcmCdDmaRequested)
Console.WriteLine(" ADPCM DMA REQUESTED");
break;
case 0x180D: // ADPCM Address Control