C64: Use write protection on G64 images (which are often copy protected), and disable it on D64 images.

This commit is contained in:
SaxxonPike 2019-07-04 00:14:21 -05:00
parent 4e1892d094
commit 7fbccb7a46
5 changed files with 14 additions and 9 deletions

View File

@ -58,7 +58,7 @@
case 0x0:
return _port.ReadPrb(_prb, _ddrb);
case 0x1:
return _port.ReadPra(_pra, _ddra);
return _port.ReadExternalPra();
case 0x2:
return _ddrb;
case 0x3:
@ -86,7 +86,7 @@
case 0xE:
return _ier | 0x80;
case 0xF:
return _port.ReadPra(_pra, _ddra);
return _port.ReadExternalPra();
}
return 0xFF;
@ -238,7 +238,7 @@
public int EffectivePrB => _prb | ~_ddrb;
public int ActualPrA => _acrPaLatchEnable ? _paLatch : _port.ReadPra(_pra, _ddra);
public int ActualPrA => _acrPaLatchEnable ? _paLatch : _port.ReadExternalPra();
public int ActualPrB => _acrPbLatchEnable ? _pbLatch : _port.ReadPrb(_prb, _ddrb);
}

View File

@ -248,9 +248,9 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.Media
trackDensities.Add(DensityTable[i]);
}
}
return new Disk(trackDatas, trackNumbers, trackDensities, 84);
}
return new Disk(trackDatas, trackNumbers, trackDensities, 84) {WriteProtected = false};
}
}
}
}

View File

@ -57,10 +57,10 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.Media
throw new Exception("Byte-level speeds are not yet supported in the G64 loader.");
}
return new Disk(trackDatas, trackNumbers, trackDensities, 84);
return new Disk(trackDatas, trackNumbers, trackDensities, 84) {WriteProtected = true};
}
return new Disk(84);
return new Disk(84) {WriteProtected = false};
}
}

View File

@ -72,7 +72,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial
}
_diskOutputBits >>= 1;
if (_diskWriteEnabled)
if (_diskWriteEnabled && !_diskWriteProtected)
_countsBeforeRandomTransition = 0;
if ((_diskBits & 1) != 0)

View File

@ -214,6 +214,11 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial
{
_trackImageData = _disk.GetDataForTrack(_trackNumber);
_diskBits = _trackImageData[_diskByteOffset] >> (Disk.FluxBitsPerEntry - _diskBitsLeft);
_diskWriteProtected = _disk.WriteProtected;
}
else
{
_diskWriteProtected = true;
}
}