ZXHawk: TapeDevice - replaced embedded end of block pause values with individual PAUSE blocks
This commit is contained in:
parent
84bc77e82e
commit
94436c307c
|
@ -115,6 +115,21 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
buf[offsetIndex + 1] = (byte)(value >> 8);
|
buf[offsetIndex + 1] = (byte)(value >> 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a PauseInMilliseconds value and returns the value in T-States
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pauseInMS"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static int TranslatePause(int pauseInMS)
|
||||||
|
{
|
||||||
|
// t-states per millisecond
|
||||||
|
var tspms = (69888 * 50) / 1000;
|
||||||
|
// get value
|
||||||
|
int res = pauseInMS * tspms;
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region TAP Format Constants
|
#region TAP Format Constants
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -337,7 +336,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
|
|
||||||
// add block pause
|
// add block pause
|
||||||
int actualPause = PAUSE_MS * 1000;
|
int actualPause = PAUSE_MS * 1000;
|
||||||
dataPeriods.Add(actualPause);
|
//dataPeriods.Add(actualPause);
|
||||||
|
|
||||||
// default pause for tap files
|
// default pause for tap files
|
||||||
tdb.PauseInMS = 1000;
|
tdb.PauseInMS = 1000;
|
||||||
|
@ -348,9 +347,40 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
// add the raw data
|
// add the raw data
|
||||||
tdb.BlockData = blockdata;
|
tdb.BlockData = blockdata;
|
||||||
|
|
||||||
|
// generate separate PAUS block
|
||||||
|
TapeDataBlock tdbPause = new TapeDataBlock();
|
||||||
|
tdbPause.DataPeriods = new List<int>();
|
||||||
|
tdbPause.BlockDescription = BlockType.PAUSE_BLOCK;
|
||||||
|
tdbPause.PauseInMS = 0;
|
||||||
|
var pauseInTStates = TranslatePause(tdb.PauseInMS);
|
||||||
|
//if (pauseInTStates > 0)
|
||||||
|
//tdbPause.DataPeriods.Add(pauseInTStates);
|
||||||
|
tdb.PauseInMS = 0;
|
||||||
|
|
||||||
// add block to the tape
|
// add block to the tape
|
||||||
_datacorder.DataBlocks.Add(tdb);
|
_datacorder.DataBlocks.Add(tdb);
|
||||||
|
|
||||||
|
// PAUS block if neccessary
|
||||||
|
if (pauseInTStates > 0)
|
||||||
|
{
|
||||||
|
tdbPause.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles");
|
||||||
|
|
||||||
|
int by1000 = pauseInTStates / 70000;
|
||||||
|
int rem1000 = pauseInTStates % 70000;
|
||||||
|
|
||||||
|
if (by1000 > 1)
|
||||||
|
{
|
||||||
|
tdbPause.DataPeriods.Add(35000);
|
||||||
|
tdbPause.DataPeriods.Add(pauseInTStates - 35000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tdbPause.DataPeriods.Add(pauseInTStates);
|
||||||
|
tdbPause.DataPeriods.Add(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
_datacorder.DataBlocks.Add(tdbPause);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -322,6 +322,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
|
|
||||||
// advance the position to the next block
|
// advance the position to the next block
|
||||||
_position += blockLen;
|
_position += blockLen;
|
||||||
|
|
||||||
|
// generate PAUSE block
|
||||||
|
CreatePauseBlock(_datacorder.DataBlocks.Last());
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -379,6 +382,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
|
|
||||||
// advance the position to the next block
|
// advance the position to the next block
|
||||||
_position += blockLen;
|
_position += blockLen;
|
||||||
|
|
||||||
|
// generate PAUSE block
|
||||||
|
CreatePauseBlock(_datacorder.DataBlocks.Last());
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -502,6 +508,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
|
|
||||||
// advance the position to the next block
|
// advance the position to the next block
|
||||||
_position += blockLen;
|
_position += blockLen;
|
||||||
|
|
||||||
|
// generate PAUSE block
|
||||||
|
CreatePauseBlock(_datacorder.DataBlocks.Last());
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -595,7 +604,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
// add end of block pause
|
// add end of block pause
|
||||||
if (pauseAfterBlock > 0)
|
if (pauseAfterBlock > 0)
|
||||||
{
|
{
|
||||||
t.DataPeriods.Add(3500 * pauseAfterBlock);
|
//t.DataPeriods.Add(3500 * pauseAfterBlock);
|
||||||
}
|
}
|
||||||
|
|
||||||
t.PauseInMS = pauseAfterBlock;
|
t.PauseInMS = pauseAfterBlock;
|
||||||
|
@ -605,6 +614,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
|
|
||||||
// add the block
|
// add the block
|
||||||
_datacorder.DataBlocks.Add(t);
|
_datacorder.DataBlocks.Add(t);
|
||||||
|
|
||||||
|
// generate PAUSE block
|
||||||
|
CreatePauseBlock(_datacorder.DataBlocks.Last());
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -773,8 +785,8 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// this is actually just a pause
|
// this is actually just a pause
|
||||||
pauseDuration = 3500 * pauseDuration;
|
//pauseDuration = 3500 * pauseDuration;
|
||||||
t.DataPeriods.Add(pauseDuration);
|
//t.DataPeriods.Add(pauseDuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add end of block pause
|
// add end of block pause
|
||||||
|
@ -785,6 +797,10 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
|
|
||||||
// advanced position to next block
|
// advanced position to next block
|
||||||
_position += 2;
|
_position += 2;
|
||||||
|
|
||||||
|
// generate PAUSE block
|
||||||
|
CreatePauseBlock(_datacorder.DataBlocks.Last());
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -1764,8 +1780,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
// add block pause if pause is not 0
|
// add block pause if pause is not 0
|
||||||
if (pauseAfterBlock != 0)
|
if (pauseAfterBlock != 0)
|
||||||
{
|
{
|
||||||
int actualPause = pauseAfterBlock * 3500;
|
block.PauseInMS = pauseAfterBlock;
|
||||||
dataPeriods.Add(actualPause);
|
//int actualPause = pauseAfterBlock * 3500;
|
||||||
|
//dataPeriods.Add(actualPause);
|
||||||
}
|
}
|
||||||
|
|
||||||
// add to the tapedatablock object
|
// add to the tapedatablock object
|
||||||
|
@ -1827,6 +1844,44 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Pause Block Creator
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If neccessary a seperate PAUSE block will be created
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="original"></param>
|
||||||
|
private void CreatePauseBlock(TapeDataBlock original)
|
||||||
|
{
|
||||||
|
if (original.PauseInMS > 0)
|
||||||
|
{
|
||||||
|
TapeDataBlock pBlock = new TapeDataBlock();
|
||||||
|
pBlock.DataPeriods = new List<int>();
|
||||||
|
pBlock.BlockDescription = BlockType.PAUSE_BLOCK;
|
||||||
|
pBlock.PauseInMS = 0;
|
||||||
|
var pauseInTStates = TranslatePause(original.PauseInMS);
|
||||||
|
|
||||||
|
pBlock.AddMetaData(BlockDescriptorTitle.Block_ID, pauseInTStates.ToString() + " cycles");
|
||||||
|
|
||||||
|
int by1000 = pauseInTStates / 70000;
|
||||||
|
int rem1000 = pauseInTStates % 70000;
|
||||||
|
|
||||||
|
if (by1000 > 1)
|
||||||
|
{
|
||||||
|
pBlock.DataPeriods.Add(35000);
|
||||||
|
pBlock.DataPeriods.Add(pauseInTStates - 35000);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pBlock.DataPeriods.Add(pauseInTStates);
|
||||||
|
pBlock.DataPeriods.Add(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
_datacorder.DataBlocks.Add(pBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum DataBlockType
|
public enum DataBlockType
|
||||||
|
|
|
@ -238,8 +238,10 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum
|
||||||
PULS,
|
PULS,
|
||||||
DATA,
|
DATA,
|
||||||
BRWS,
|
BRWS,
|
||||||
PAUS
|
PAUS,
|
||||||
|
|
||||||
|
// zxhawk proprietry
|
||||||
|
PAUSE_BLOCK,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue