Debugger: In _6502_GetTargets() removed the bool bIgnoreJSRJMP parameter.
This commit is contained in:
parent
f0e840f8e0
commit
87677ed4c3
|
@ -1130,7 +1130,7 @@ int CheckBreakpointsIO ()
|
|||
// bIncludeNextOpcodeAddress == false:
|
||||
// . JSR addr16: ignore addr16 as a target
|
||||
// . BRK/RTS/RTI: ignore return (or vector) addr16 as a target
|
||||
_6502_GetTargets( regs.pc, &aTarget[0], &aTarget[1], &aTarget[2], &nBytes, true, true, false );
|
||||
_6502_GetTargets( regs.pc, &aTarget[0], &aTarget[1], &aTarget[2], &nBytes, true, false );
|
||||
|
||||
if (nBytes)
|
||||
{
|
||||
|
|
|
@ -584,21 +584,19 @@ bool _6502_GetStackReturnAddress ( WORD & nAddress_ )
|
|||
|
||||
//===========================================================================
|
||||
bool _6502_GetTargets ( WORD nAddress, int *pTargetPartial_, int *pTargetPartial2_, int *pTargetPointer_, int * pTargetBytes_,
|
||||
bool bIgnoreJSRJMP /*= true*/, bool bIgnoreBranch /*= true*/, bool bIncludeNextOpcodeAddress /*= true*/ )
|
||||
bool bIgnoreBranch /*= true*/, bool bIncludeNextOpcodeAddress /*= true*/ )
|
||||
{
|
||||
bool bStatus = false;
|
||||
|
||||
if (! pTargetPartial_)
|
||||
return bStatus;
|
||||
return false;
|
||||
|
||||
if (! pTargetPartial2_)
|
||||
return bStatus;
|
||||
return false;
|
||||
|
||||
if (! pTargetPointer_)
|
||||
return bStatus;
|
||||
return false;
|
||||
|
||||
// if (! pTargetBytes_)
|
||||
// return bStatus;
|
||||
// return false;
|
||||
|
||||
*pTargetPartial_ = NO_6502_TARGET;
|
||||
*pTargetPartial2_ = NO_6502_TARGET;
|
||||
|
@ -607,8 +605,6 @@ bool _6502_GetTargets ( WORD nAddress, int *pTargetPartial_, int *pTargetPartial
|
|||
if (pTargetBytes_)
|
||||
*pTargetBytes_ = 0;
|
||||
|
||||
bStatus = true;
|
||||
|
||||
BYTE nOpcode = mem[nAddress];
|
||||
BYTE nTarget8 = mem[(nAddress+1)&0xFFFF];
|
||||
WORD nTarget16 = (mem[(nAddress+2)&0xFFFF]<<8) | nTarget8;
|
||||
|
@ -666,13 +662,13 @@ bool _6502_GetTargets ( WORD nAddress, int *pTargetPartial_, int *pTargetPartial
|
|||
break;
|
||||
|
||||
case AM_A: // Absolute
|
||||
if (nOpcode == OPCODE_JSR) // JSR?
|
||||
if (nOpcode == OPCODE_JSR)
|
||||
{
|
||||
*pTargetPartial_ = _6502_STACK_BEGIN + ((regs.sp+0) & 0xFF);
|
||||
*pTargetPartial2_ = _6502_STACK_BEGIN + ((regs.sp-1) & 0xFF);
|
||||
}
|
||||
|
||||
if (bIncludeNextOpcodeAddress || (nOpcode != OPCODE_JSR))
|
||||
if (bIncludeNextOpcodeAddress || (nOpcode != OPCODE_JSR && nOpcode != OPCODE_JMP_A))
|
||||
*pTargetPointer_ = nTarget16;
|
||||
|
||||
if (pTargetBytes_)
|
||||
|
@ -778,22 +774,7 @@ bool _6502_GetTargets ( WORD nAddress, int *pTargetPartial_, int *pTargetPartial
|
|||
break;
|
||||
}
|
||||
|
||||
if (bIgnoreJSRJMP)
|
||||
{
|
||||
// If 6502 is jumping, don't show byte [nAddressTarget]
|
||||
if ((*pTargetPointer_ >= 0) && (
|
||||
(nOpcode == OPCODE_JSR ) || // 0x20
|
||||
(nOpcode == OPCODE_JMP_A ))) // 0x4C
|
||||
// (nOpcode == OPCODE_JMP_NA ) || // 0x6C
|
||||
// (nOpcode == OPCODE_JMP_IAX))) // 0x7C
|
||||
{
|
||||
*pTargetPointer_ = NO_6502_TARGET;
|
||||
if (pTargetBytes_)
|
||||
*pTargetBytes_ = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return bStatus;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -818,7 +799,7 @@ bool _6502_GetTargetAddress ( const WORD & nAddress, WORD & nTarget_ )
|
|||
int nTargetPointer;
|
||||
WORD nTargetValue = 0; // de-ref
|
||||
int nTargetBytes;
|
||||
_6502_GetTargets( nAddress, &nTargetPartial, &nTargetPointer, &nTargetBytes, false, false );
|
||||
_6502_GetTargets( nAddress, &nTargetPartial, &nTargetPointer, &nTargetBytes, false );
|
||||
|
||||
// if (nTargetPointer == NO_6502_TARGET)
|
||||
// {
|
||||
|
|
|
@ -193,8 +193,8 @@ extern int g_aAssemblerFirstDirective[ NUM_ASSEMBLERS ];
|
|||
int _6502_GetOpmodeOpbyte( const int iAddress, int & iOpmode_, int & nOpbytes_, const DisasmData_t** pData = NULL );
|
||||
void _6502_GetOpcodeOpmodeOpbyte( int & iOpcode_, int & iOpmode_, int & nOpbytes_ );
|
||||
bool _6502_GetStackReturnAddress( WORD & nAddress_ );
|
||||
bool _6502_GetTargets( WORD nAddress, int *pTargetPartial_, int *pTargetPartial2_, int *pTargetPointer_, int * pBytes_
|
||||
, const bool bIgnoreJSRJMP = true, bool bIgnoreBranch = true, bool bIncludeNextOpcodeAddress = true );
|
||||
bool _6502_GetTargets( WORD nAddress, int *pTargetPartial_, int *pTargetPartial2_, int *pTargetPointer_, int * pBytes_,
|
||||
bool bIgnoreBranch = true, bool bIncludeNextOpcodeAddress = true );
|
||||
bool _6502_GetTargetAddress( const WORD & nAddress, WORD & nTarget_ );
|
||||
bool _6502_IsOpcodeBranch( int nOpcode );
|
||||
bool _6502_IsOpcodeValid( int nOpcode );
|
||||
|
|
|
@ -1528,6 +1528,13 @@ int GetDisassemblyLine ( WORD nBaseAddress, DisasmLine_t & line_ )
|
|||
int nTargetBytes;
|
||||
_6502_GetTargets( nBaseAddress, &nTargetPartial, &nTargetPartial2, &nTargetPointer, &nTargetBytes );
|
||||
|
||||
// For *direct* JSR/JMP, don't show 'addr16:byte char'
|
||||
if (iOpcode == OPCODE_JSR || iOpcode == OPCODE_JMP_A)
|
||||
{
|
||||
nTargetPointer = NO_6502_TARGET;
|
||||
nTargetBytes = 0;
|
||||
}
|
||||
|
||||
if (nTargetPointer != NO_6502_TARGET)
|
||||
{
|
||||
bDisasmFormatFlags |= DISASM_FORMAT_TARGET_POINTER;
|
||||
|
@ -1541,7 +1548,7 @@ int GetDisassemblyLine ( WORD nBaseAddress, DisasmLine_t & line_ )
|
|||
if (g_iConfigDisasmTargets & DISASM_TARGET_ADDR)
|
||||
sprintf( line_.sTargetPointer, "%04X", nTargetPointer & 0xFFFF );
|
||||
|
||||
if (iOpmode != AM_NA ) // Indirect Absolute
|
||||
if (iOpcode != OPCODE_JMP_NA && iOpcode != OPCODE_JMP_IAX)
|
||||
{
|
||||
bDisasmFormatFlags |= DISASM_FORMAT_TARGET_VALUE;
|
||||
if (g_iConfigDisasmTargets & DISASM_TARGET_VAL)
|
||||
|
@ -3215,6 +3222,12 @@ void DrawTargets ( int line)
|
|||
int aTarget[3];
|
||||
_6502_GetTargets( regs.pc, &aTarget[0],&aTarget[1],&aTarget[2], NULL );
|
||||
|
||||
const BYTE iOpcode = mem[regs.pc];
|
||||
if (iOpcode == OPCODE_JSR || iOpcode == OPCODE_JMP_A)
|
||||
{
|
||||
aTarget[2] = NO_6502_TARGET;
|
||||
}
|
||||
|
||||
aTarget[1] = aTarget[2]; // Move down as we only have 2 lines
|
||||
|
||||
RECT rect;
|
||||
|
|
|
@ -145,7 +145,6 @@ int GH445_test_abs(BYTE op)
|
|||
return 0;
|
||||
}
|
||||
|
||||
// NB. bIgnoreJSRJMP == false, ie. TargetAddr[2] gets set
|
||||
int GH445_test_jsr(void)
|
||||
{
|
||||
bool bRes;
|
||||
|
@ -159,15 +158,15 @@ int GH445_test_jsr(void)
|
|||
mem[(regs.pc+2)&0xFFFF] = (BYTE) ((target2>>8)&0xff);
|
||||
|
||||
regs.sp = 0x1FF;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != regs.sp-1 || TargetAddr[2] != target2) return 1;
|
||||
|
||||
regs.sp = 0x100;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != 0x1FF || TargetAddr[2] != target2) return 1;
|
||||
|
||||
regs.sp = 0x101;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != regs.sp-1 || TargetAddr[2] != target2) return 1;
|
||||
|
||||
return 0;
|
||||
|
@ -232,7 +231,6 @@ int GH445_test_rti_rts(WORD sp, const bool isRTI)
|
|||
return 0;
|
||||
}
|
||||
|
||||
// NB. bIgnoreJSRJMP == false, ie. TargetAddr[2] gets set
|
||||
int GH445_test_jmp(BYTE op)
|
||||
{
|
||||
bool bRes;
|
||||
|
@ -268,7 +266,7 @@ int GH445_test_jmp(BYTE op)
|
|||
mem[regs.pc] = op;
|
||||
mem[(regs.pc+1)&0xFFFF] = (BYTE) (target16&0xff);
|
||||
mem[(regs.pc+2)&0xFFFF] = (BYTE) ((target16>>8)&0xff);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes);
|
||||
if (!bRes || TargetAddr[0] != target0 || TargetAddr[1] != target1 || TargetAddr[2] != target2) return 1;
|
||||
|
||||
return 0;
|
||||
|
@ -448,7 +446,7 @@ int GH451_test_abs(BYTE op)
|
|||
mem[regs.pc] = op;
|
||||
mem[(regs.pc+1)&0xFFFF] = (BYTE) (target2&0xff);
|
||||
mem[(regs.pc+2)&0xFFFF] = (BYTE) ((target2>>8)&0xff);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[2] != target2) return 1;
|
||||
|
||||
return 0;
|
||||
|
@ -463,15 +461,15 @@ int GH451_test_jsr(void)
|
|||
mem[regs.pc] = OPCODE_JSR;
|
||||
|
||||
regs.sp = 0x1FF;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != regs.sp-1 || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
regs.sp = 0x100;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != 0x1FF || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
regs.sp = 0x101;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != regs.sp-1 || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
return 0;
|
||||
|
@ -486,15 +484,15 @@ int GH451_test_brk(void)
|
|||
mem[regs.pc] = OPCODE_BRK;
|
||||
|
||||
regs.sp = 0x1FF;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != regs.sp-1 || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
regs.sp = 0x100;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != 0x1FF || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
regs.sp = 0x101;
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != regs.sp || TargetAddr[1] != regs.sp-1 || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
return 0;
|
||||
|
@ -530,13 +528,12 @@ int GH451_test_rti_rts(WORD sp, const bool isRTI)
|
|||
if (!isRTI)
|
||||
ret_addr++; // NB. return addr from stack is incremented before being transferred to PC
|
||||
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != sp_addr_l || TargetAddr[1] != sp_addr_h || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// bIgnoreJSRJMP == true
|
||||
int GH451_test_jmp(BYTE op)
|
||||
{
|
||||
bool bRes;
|
||||
|
@ -565,7 +562,7 @@ int GH451_test_jmp(BYTE op)
|
|||
mem[regs.pc] = op;
|
||||
mem[(regs.pc+1)&0xFFFF] = (BYTE) (target16&0xff);
|
||||
mem[(regs.pc+2)&0xFFFF] = (BYTE) ((target16>>8)&0xff);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != target0 || TargetAddr[1] != target1 || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
return 0;
|
||||
|
@ -581,13 +578,13 @@ int GH451_test_Bcc(void)
|
|||
mem[regs.pc] = 0x10; // BPL next-op
|
||||
mem[regs.pc+1] = 0;
|
||||
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != NO_6502_TARGET || TargetAddr[1] != NO_6502_TARGET || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
mem[regs.pc] = 0x10; // BPL this-op
|
||||
mem[regs.pc+1] = 0xfe;
|
||||
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, true, false);
|
||||
bRes = _6502_GetTargets(regs.pc, &TargetAddr[0], &TargetAddr[1], &TargetAddr[2], &TargetBytes, true, false);
|
||||
if (!bRes || TargetAddr[0] != NO_6502_TARGET || TargetAddr[1] != NO_6502_TARGET || TargetAddr[2] != NO_6502_TARGET) return 1;
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue