From b696aaea4cac63865b234349a6e97d61184e4a33 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 22 Jul 2017 21:31:58 -0400 Subject: [PATCH] A7800Hawk: Fix controllers --- .../Consoles/Atari/A7800Hawk/TIA_Sound/TIA.cs | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/TIA_Sound/TIA.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/TIA_Sound/TIA.cs index 01b4f6aa3c..1a9b012e4b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/TIA_Sound/TIA.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/TIA_Sound/TIA.cs @@ -98,7 +98,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk //INPT0-3 are used to read 2 button joysticks as well for the A7800 if (maskedAddr == 0x08) // INPT0 { - if (Core.m6532._outputB == 0 && (Core.m6532._ddRb & 0x10)==0x10) + if ((Core.m6532._outputB & 0x04) == 0 && (Core.m6532._ddRb & 0x04) == 0x04) { Core._islag = false; return (byte)(Core.p1_fire_2x & 0x80); @@ -111,7 +111,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk if (maskedAddr == 0x09) // INPT1 { - if (Core.m6532._outputB == 0 && (Core.m6532._ddRb & 0x10) == 0x10) + if ((Core.m6532._outputB & 0x04) == 0 && (Core.m6532._ddRb & 0x04) == 0x04) { Core._islag = false; return (byte)((Core.p1_fire_2x & 0x40)<<1); @@ -124,7 +124,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk if (maskedAddr == 0x0A) // INPT2 { - if (Core.m6532._outputB == 0 && (Core.m6532._ddRb & 0x04) == 0x04) + if ((Core.m6532._outputB & 0x10) == 0 && (Core.m6532._ddRb & 0x10) == 0x10) { Core._islag = false; return (byte)(Core.p2_fire_2x & 0x80); @@ -137,7 +137,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk if (maskedAddr == 0x0B) // INPT3 { - if (Core.m6532._outputB == 0 && (Core.m6532._ddRb & 0x04) == 0x04) + if ((Core.m6532._outputB & 0x10) == 0 && (Core.m6532._ddRb & 0x10) == 0x10) { Core._islag = false; return (byte)((Core.p2_fire_2x & 0x40)<<1); @@ -151,13 +151,37 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk if (maskedAddr == 0x0C) // INPT4 { Core._islag = false; - return Core.p1_fire; + + if (!Core.p1_is_2button) + { + return Core.p1_fire; + } + else if ((Core.m6532._outputB & 0x04) != 0 || (Core.m6532._ddRb & 0x04) != 0x04) + { + return Core.p1_fire; + } + else + { + return 0x80; + } } if (maskedAddr == 0x0D) // INPT5 { Core._islag = false; - return Core.p2_fire; + + if (!Core.p2_is_2button) + { + return Core.p2_fire; + } + else if ((Core.m6532._outputB & 0x10) != 0 || (Core.m6532._ddRb & 0x10) != 0x10) + { + return Core.p2_fire; + } + else + { + return 0x80; + } } return 0;