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
{
[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)]
public BorderType BorderType { get; set; }
@ -104,7 +109,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64
public enum BorderType
{
SmallProportional, SmallFixed, Normal, Full
None, SmallProportional, SmallFixed, Normal
}
public enum SidType

View File

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