Data addresses used in peek operations should be exposed to the debugger,

whether or not they're in cart space (aka, above $1000).  Other parts of
the code can then choose whether to use them, if desired.  This fixes a bug
in the 'Data src' output in the CPU area of the debugger, whereby addresses
were zeroed if they resulted from addresses below $1000.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2158 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2010-10-21 21:16:55 +00:00
parent 8cb6a83512
commit ccf6227b9d
2 changed files with 96 additions and 81 deletions

View File

@ -14,7 +14,7 @@
// See the file "License.txt" for information on usage and redistribution of // See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES. // this file, and for a DISCLAIMER OF ALL WARRANTIES.
// //
// $Id: M6502.m4 2156 2010-10-21 17:46:23Z stephena $ // $Id: M6502.m4 2157 2010-10-21 21:01:00Z stephena $
//============================================================================ //============================================================================
/** /**
@ -24,7 +24,7 @@
'm4 M6502.m4 > M6502.ins' 'm4 M6502.m4 > M6502.ins'
@author Bradford W. Mott @author Bradford W. Mott
@version $Id: M6502.m4 2156 2010-10-21 17:46:23Z stephena $ @version $Id: M6502.m4 2157 2010-10-21 21:01:00Z stephena $
*/ */
#ifndef NOTSAMEPAGE #ifndef NOTSAMEPAGE
@ -309,7 +309,8 @@ break;
case 0x65: case 0x65:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
if(!D) if(!D)
@ -345,10 +346,10 @@ break;
case 0x75: case 0x75:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
if(!D) if(!D)
@ -640,7 +641,8 @@ break;
case 0x25: case 0x25:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A &= operand; A &= operand;
@ -651,10 +653,10 @@ break;
case 0x35: case 0x35:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A &= operand; A &= operand;
@ -960,7 +962,8 @@ break;
case 0x24: case 0x24:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
notZ = (A & operand); notZ = (A & operand);
@ -1141,7 +1144,8 @@ break;
case 0xc5: case 0xc5:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
uInt16 value = (uInt16)A - (uInt16)operand; uInt16 value = (uInt16)A - (uInt16)operand;
@ -1154,10 +1158,10 @@ break;
case 0xd5: case 0xd5:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
uInt16 value = (uInt16)A - (uInt16)operand; uInt16 value = (uInt16)A - (uInt16)operand;
@ -1281,7 +1285,8 @@ break;
case 0xe4: case 0xe4:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
uInt16 value = (uInt16)X - (uInt16)operand; uInt16 value = (uInt16)X - (uInt16)operand;
@ -1323,7 +1328,8 @@ break;
case 0xc4: case 0xc4:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
uInt16 value = (uInt16)Y - (uInt16)operand; uInt16 value = (uInt16)Y - (uInt16)operand;
@ -1593,7 +1599,8 @@ break;
case 0x45: case 0x45:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A ^= operand; A ^= operand;
@ -1604,10 +1611,10 @@ break;
case 0x55: case 0x55:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A ^= operand; A ^= operand;
@ -2178,7 +2185,8 @@ break;
case 0xa7: case 0xa7:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A = operand; A = operand;
@ -2190,10 +2198,10 @@ break;
case 0xb7: case 0xb7:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += Y; intermediateAddress += Y;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A = operand; A = operand;
@ -2258,9 +2266,10 @@ break;
case 0xa5: case 0xa5:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
CLEAR_LAST_PEEK(myLastSrcAddressA) SET_LAST_PEEK(myLastSrcAddressA)
{ {
A = operand; A = operand;
notZ = A; notZ = A;
@ -2270,12 +2279,12 @@ break;
case 0xb5: case 0xb5:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
CLEAR_LAST_PEEK(myLastSrcAddressA) SET_LAST_PEEK(myLastSrcAddressA)
{ {
A = operand; A = operand;
notZ = A; notZ = A;
@ -2393,9 +2402,10 @@ break;
case 0xa6: case 0xa6:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
CLEAR_LAST_PEEK(myLastSrcAddressX) SET_LAST_PEEK(myLastSrcAddressX)
{ {
X = operand; X = operand;
notZ = X; notZ = X;
@ -2405,12 +2415,12 @@ break;
case 0xb6: case 0xb6:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += Y; intermediateAddress += Y;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
CLEAR_LAST_PEEK(myLastSrcAddressX) SET_LAST_PEEK(myLastSrcAddressX)
{ {
X = operand; X = operand;
notZ = X; notZ = X;
@ -2470,9 +2480,10 @@ break;
case 0xa4: case 0xa4:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
CLEAR_LAST_PEEK(myLastSrcAddressY) SET_LAST_PEEK(myLastSrcAddressY)
{ {
Y = operand; Y = operand;
notZ = Y; notZ = Y;
@ -2482,12 +2493,12 @@ break;
case 0xb4: case 0xb4:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
CLEAR_LAST_PEEK(myLastSrcAddressY) SET_LAST_PEEK(myLastSrcAddressY)
{ {
Y = operand; Y = operand;
notZ = Y; notZ = Y;
@ -2671,7 +2682,8 @@ case 0x04:
case 0x44: case 0x44:
case 0x64: case 0x64:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
} }
@ -2684,10 +2696,10 @@ case 0x74:
case 0xd4: case 0xd4:
case 0xf4: case 0xf4:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
} }
@ -2738,7 +2750,8 @@ break;
case 0x05: case 0x05:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A |= operand; A |= operand;
@ -2749,10 +2762,10 @@ break;
case 0x15: case 0x15:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
A |= operand; A |= operand;
@ -3685,7 +3698,8 @@ break;
case 0xe5: case 0xe5:
{ {
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
// N, V, Z, C flags are the same in either mode (C calculated at the end) // N, V, Z, C flags are the same in either mode (C calculated at the end)
@ -3718,10 +3732,10 @@ break;
case 0xf5: case 0xf5:
{ {
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
} }
{ {
// N, V, Z, C flags are the same in either mode (C calculated at the end) // N, V, Z, C flags are the same in either mode (C calculated at the end)

View File

@ -139,7 +139,8 @@ define(M6502_ABSOLUTEY_READMODIFYWRITE, `{
}') }')
define(M6502_ZERO_READ, `{ define(M6502_ZERO_READ, `{
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA); intermediateAddress = peek(PC++, DISASM_CODE);
operand = peek(intermediateAddress, DISASM_DATA);
}') }')
define(M6502_ZERO_WRITE, `{ define(M6502_ZERO_WRITE, `{
@ -153,10 +154,10 @@ define(M6502_ZERO_READMODIFYWRITE, `{
}') }')
define(M6502_ZEROX_READ, `{ define(M6502_ZEROX_READ, `{
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += X; intermediateAddress += X;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
}') }')
define(M6502_ZEROX_WRITE, `{ define(M6502_ZEROX_WRITE, `{
@ -174,10 +175,10 @@ define(M6502_ZEROX_READMODIFYWRITE, `{
}') }')
define(M6502_ZEROY_READ, `{ define(M6502_ZEROY_READ, `{
uInt8 address = peek(PC++, DISASM_CODE); intermediateAddress = peek(PC++, DISASM_CODE);
peek(address, DISASM_DATA); peek(intermediateAddress, DISASM_DATA);
address += Y; intermediateAddress += Y;
operand = peek(address, DISASM_DATA); operand = peek(intermediateAddress, DISASM_DATA);
}') }')
define(M6502_ZEROY_WRITE, `{ define(M6502_ZEROY_WRITE, `{
@ -1535,13 +1536,13 @@ break;
case 0xa5: case 0xa5:
M6502_ZERO_READ M6502_ZERO_READ
CLEAR_LAST_PEEK(myLastSrcAddressA) SET_LAST_PEEK(myLastSrcAddressA)
M6502_LDA M6502_LDA
break; break;
case 0xb5: case 0xb5:
M6502_ZEROX_READ M6502_ZEROX_READ
CLEAR_LAST_PEEK(myLastSrcAddressA) SET_LAST_PEEK(myLastSrcAddressA)
M6502_LDA M6502_LDA
break; break;
@ -1587,13 +1588,13 @@ break;
case 0xa6: case 0xa6:
M6502_ZERO_READ M6502_ZERO_READ
CLEAR_LAST_PEEK(myLastSrcAddressX) SET_LAST_PEEK(myLastSrcAddressX)
M6502_LDX M6502_LDX
break; break;
case 0xb6: case 0xb6:
M6502_ZEROY_READ M6502_ZEROY_READ
CLEAR_LAST_PEEK(myLastSrcAddressX) SET_LAST_PEEK(myLastSrcAddressX)
M6502_LDX M6502_LDX
break; break;
@ -1621,13 +1622,13 @@ break;
case 0xa4: case 0xa4:
M6502_ZERO_READ M6502_ZERO_READ
CLEAR_LAST_PEEK(myLastSrcAddressY) SET_LAST_PEEK(myLastSrcAddressY)
M6502_LDY M6502_LDY
break; break;
case 0xb4: case 0xb4:
M6502_ZEROX_READ M6502_ZEROX_READ
CLEAR_LAST_PEEK(myLastSrcAddressY) SET_LAST_PEEK(myLastSrcAddressY)
M6502_LDY M6502_LDY
break; break;