C64Hawk: Fix border issues - #1272 (#1276)

This commit is contained in:
Asnivor 2018-08-21 20:30:04 +01:00 committed by feos
parent e39cb1274c
commit d28e4e9f70
2 changed files with 27 additions and 6 deletions

View File

@ -34,7 +34,12 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
public class C64Settings public class C64Settings
{ {
[DisplayName("Border type")] [DisplayName("Border type")]
[Description("Select how to show the border area")] [Description("Select how to show the border area\n" +
"NORMAL:\t Horizontal and Vertical border both set to 32 pixels (although horizontal will appear narrower due to pixel density)\n" +
"SMALL PROPORTIONAL:\t Horizontal and Vertical border both set to 16 pixels (although horizontal will appear narrower due to pixel density)\n" +
"SMALL FIXED:\t Horizontal border is set to 16 pixels and vertical is made slightly smaller so as to appear horizontal and vertical are the same after pixel density has been applied\n" +
"NONE:\t Only the pixel buffer is rendered"
)]
[DefaultValue(BorderType.SmallProportional)] [DefaultValue(BorderType.SmallProportional)]
public BorderType BorderType { get; set; } public BorderType BorderType { get; set; }
@ -104,7 +109,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
public enum BorderType public enum BorderType
{ {
SmallProportional, SmallFixed, Normal, Full None, SmallProportional, SmallFixed, Normal
} }
public enum SidType public enum SidType

View File

@ -97,6 +97,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
switch (borderType) switch (borderType)
{ {
/*
case C64.BorderType.Full: case C64.BorderType.Full:
newHblankStart = -1; newHblankStart = -1;
newHblankEnd = -1; newHblankEnd = -1;
@ -105,6 +106,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
newVblankEnd = -1; newVblankEnd = -1;
_vblank = false; _vblank = false;
break; break;
*/
case C64.BorderType.Normal: case C64.BorderType.Normal:
newHblankStart = hblankStart; newHblankStart = hblankStart;
newHblankEnd = hblankEnd; newHblankEnd = hblankEnd;
@ -129,13 +131,27 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS
newVblankStart = 0xFA + hBorderSize; newVblankStart = 0xFA + hBorderSize;
newVblankEnd = 0x32 - hBorderSize; newVblankEnd = 0x32 - hBorderSize;
break; break;
case C64.BorderType.None:
newHblankStart = 0x158 + PixBufferSize;
newHblankEnd = 0x018 + PixBufferSize;
newVblankStart = 0xFA;
newVblankEnd = 0x32;
_vblank = true;
_hblank = true;
break;
} }
// wrap values // wrap values
newHblankStart = WrapValue(0, maxWidth, newHblankStart); if (_hblank)
newHblankEnd = WrapValue(0, maxWidth, newHblankEnd); {
newVblankStart = WrapValue(0, lines, newVblankStart); newHblankStart = WrapValue(0, maxWidth, newHblankStart);
newVblankEnd = WrapValue(0, lines, newVblankEnd); newHblankEnd = WrapValue(0, maxWidth, newHblankEnd);
}
if (_vblank)
{
newVblankStart = WrapValue(0, lines, newVblankStart);
newVblankEnd = WrapValue(0, lines, newVblankEnd);
}
// calculate output dimensions // calculate output dimensions
_hblankStartCheckXRaster = newHblankStart & 0xFFC; _hblankStartCheckXRaster = newHblankStart & 0xFFC;