From f3b6b8665f444dd7f78ed47f258ac2c7af4f53ff Mon Sep 17 00:00:00 2001
From: tomcw <tomcw@users.noreply.github.com>
Date: Sun, 7 Feb 2021 16:58:11 +0000
Subject: [PATCH] Debugger: fixes to wrap 16-bit addr (was resulting in
 AppleWin debugger crashes)

---
 source/Debugger/Debugger_Assembler.cpp | 4 ++--
 source/Debugger/Debugger_Display.cpp   | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/source/Debugger/Debugger_Assembler.cpp b/source/Debugger/Debugger_Assembler.cpp
index 8177fa48..dd84244f 100644
--- a/source/Debugger/Debugger_Assembler.cpp
+++ b/source/Debugger/Debugger_Assembler.cpp
@@ -705,13 +705,13 @@ bool _6502_GetTargets ( WORD nAddress, int *pTargetPartial_, int *pTargetPartial
 			*pTargetPartial_    = nTarget16;
 			*pTargetPartial2_   = nTarget16+1;
 			if (bIncludeNextOpcodeAddress)
-				*pTargetPointer_ = *(LPWORD)(mem + nTarget16);
+				*pTargetPointer_ = mem[nTarget16] | (mem[(nTarget16+1)&0xFFFF]<<8);
 			if (pTargetBytes_)
 				*pTargetBytes_ = 2;
 			break;
 
 		case AM_IZX: // Indexed (Zeropage Indirect, X)
-			nTarget8  += regs.x;
+			nTarget8 = (nTarget8 + regs.x) & 0xFF;
 			*pTargetPartial_    = nTarget8;
 			*pTargetPointer_    = *(LPWORD)(mem + nTarget8);
 			if (pTargetBytes_)
diff --git a/source/Debugger/Debugger_Display.cpp b/source/Debugger/Debugger_Display.cpp
index faca9d72..79a0b7fe 100644
--- a/source/Debugger/Debugger_Display.cpp
+++ b/source/Debugger/Debugger_Display.cpp
@@ -1502,7 +1502,7 @@ int GetDisassemblyLine ( WORD nBaseAddress, DisasmLine_t & line_ )
 		{
 			nTarget = pData->nTargetAddress;
 		} else {
-			nTarget = *(LPWORD)(mem+nBaseAddress+1);
+			nTarget = mem[(nBaseAddress+1)&0xFFFF] | (mem[(nBaseAddress+2)&0xFFFF]<<8);
 			if (nOpbyte == 2)
 				nTarget &= 0xFF;
 		}
@@ -1742,7 +1742,7 @@ void FormatOpcodeBytes ( WORD nBaseAddress, DisasmLine_t & line_ )
 
 	for( int iByte = 0; iByte < nMaxOpBytes; iByte++ )
 	{
-		BYTE nMem = (unsigned)*(mem+nBaseAddress + iByte);
+		BYTE nMem = mem[(nBaseAddress+iByte)&0xFFFF];
 		sprintf( pDst, "%02X", nMem ); // sBytes+strlen(sBytes)
 		pDst += 2;