From 414e0d993548fa6e1aea8b944da531e7db07bb94 Mon Sep 17 00:00:00 2001
From: Leandro Nini <drfiemost@users.noreply.github.com>
Date: Wed, 24 Mar 2021 18:06:14 +0100
Subject: [PATCH] Register A and F are inverted in position so swap them when
 pushing/pulling from the stack. Fixes issue #20

---
 gme/Gb_Cpu.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/gme/Gb_Cpu.cpp b/gme/Gb_Cpu.cpp
index 21f334e..b8787b2 100644
--- a/gme/Gb_Cpu.cpp
+++ b/gme/Gb_Cpu.cpp
@@ -881,7 +881,7 @@ loop:
 
 // Stack
 
-	case 0xF1: // POP FA
+	case 0xF1: // POP AF
 	case 0xC1: // POP BC
 	case 0xD1: // POP DE
 	case 0xE1: // POP HL (common)
@@ -890,7 +890,8 @@ loop:
 		sp = (sp + 2) & 0xFFFF;
 		if ( op != 0xF1 )
 			goto loop;
-		flags = rg.flags & 0xF0;
+		flags = rg.a & 0xF0;
+		rg.a = rg.flags;
 		goto loop;
 	
 	case 0xC5: // PUSH BC
@@ -905,8 +906,8 @@ loop:
 		data = rp.hl;
 		goto push;
 	
-	case 0xF5: // PUSH FA
-		data = (flags << 8) | rg.a;
+	case 0xF5: // PUSH AF
+		data = (rg.a << 8) | flags;
 		goto push;
 
 // Flow control
-- 
2.10.5

