Changed GFX tracking stuff in M6502 m4 script to #defines instead of

embedding actual code.


git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2151 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
stephena 2010-10-11 15:11:10 +00:00
parent 47f7be341e
commit 82bae93337
2 changed files with 74 additions and 50 deletions

View File

@ -14,7 +14,7 @@
// See the file "License.txt" for information on usage and redistribution of
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
//
// $Id: M6502.m4 2147 2010-10-11 00:44:25Z stephena $
// $Id: M6502.m4 2150 2010-10-11 14:51:48Z stephena $
//============================================================================
/**
@ -24,13 +24,28 @@
'm4 M6502.m4 > M6502.ins'
@author Bradford W. Mott
@version $Id: M6502.m4 2147 2010-10-11 00:44:25Z stephena $
@version $Id: M6502.m4 2150 2010-10-11 14:51:48Z stephena $
*/
#ifndef NOTSAMEPAGE
#define NOTSAMEPAGE(_addr1, _addr2) (((_addr1) ^ (_addr2)) & 0xff00)
#endif
#ifndef SET_LAST_PEEK
#define SET_LAST_PEEK(_addr) _addr = intermediateAddress;
#endif
#ifndef CLEAR_LAST_PEEK
#define CLEAR_LAST_PEEK(_addr) _addr = 0;
#endif
#ifndef CHECK_GFX_WRITE
#define CHECK_GFX_WRITE(_addr) \
if((operandAddress == 0x1B || operandAddress == 0x1C) && _addr) \
mySystem->setAddressDisasmType(_addr, DISASM_GFX);
#endif
@ -2223,7 +2238,7 @@ case 0xa9:
{
operand = peek(PC++, DISASM_DATA);
}
myLastPeekAddressA = 0;
CLEAR_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2235,7 +2250,7 @@ case 0xa5:
{
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA);
}
myLastPeekAddressA = 0;
CLEAR_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2250,7 +2265,7 @@ case 0xb5:
address += X;
operand = peek(address, DISASM_DATA);
}
myLastPeekAddressA = 0;
CLEAR_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2264,7 +2279,7 @@ case 0xad:
intermediateAddress |= ((uInt16)peek(PC++, DISASM_CODE) << 8);
operand = peek(intermediateAddress, DISASM_DATA);
}
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2284,7 +2299,7 @@ case 0xbd:
operand = peek(intermediateAddress, DISASM_DATA);
}
}
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2304,7 +2319,7 @@ case 0xb9:
operand = peek(intermediateAddress, DISASM_DATA);
}
}
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2321,7 +2336,7 @@ case 0xa1:
intermediateAddress |= ((uInt16)peek(pointer, DISASM_DATA) << 8);
operand = peek(intermediateAddress, DISASM_DATA);
}
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2342,7 +2357,7 @@ case 0xb1:
operand = peek(intermediateAddress, DISASM_DATA);
}
}
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
{
A = operand;
notZ = A;
@ -2358,7 +2373,7 @@ case 0xa2:
{
operand = peek(PC++, DISASM_DATA);
}
myLastPeekAddressX = 0;
CLEAR_LAST_PEEK(myLastPeekAddressX)
{
X = operand;
notZ = X;
@ -2370,7 +2385,7 @@ case 0xa6:
{
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA);
}
myLastPeekAddressX = 0;
CLEAR_LAST_PEEK(myLastPeekAddressX)
{
X = operand;
notZ = X;
@ -2385,7 +2400,7 @@ case 0xb6:
address += Y;
operand = peek(address, DISASM_DATA);
}
myLastPeekAddressX = 0;
CLEAR_LAST_PEEK(myLastPeekAddressX)
{
X = operand;
notZ = X;
@ -2399,7 +2414,7 @@ case 0xae:
intermediateAddress |= ((uInt16)peek(PC++, DISASM_CODE) << 8);
operand = peek(intermediateAddress, DISASM_DATA);
}
myLastPeekAddressX = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressX)
{
X = operand;
notZ = X;
@ -2419,7 +2434,7 @@ case 0xbe:
operand = peek(intermediateAddress, DISASM_DATA);
}
}
myLastPeekAddressX = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressX)
{
X = operand;
notZ = X;
@ -2435,7 +2450,7 @@ case 0xa0:
{
operand = peek(PC++, DISASM_DATA);
}
myLastPeekAddressY = 0;
CLEAR_LAST_PEEK(myLastPeekAddressY)
{
Y = operand;
notZ = Y;
@ -2447,7 +2462,7 @@ case 0xa4:
{
operand = peek(peek(PC++, DISASM_CODE), DISASM_DATA);
}
myLastPeekAddressY = 0;
CLEAR_LAST_PEEK(myLastPeekAddressY)
{
Y = operand;
notZ = Y;
@ -2462,7 +2477,7 @@ case 0xb4:
address += X;
operand = peek(address, DISASM_DATA);
}
myLastPeekAddressY = 0;
CLEAR_LAST_PEEK(myLastPeekAddressY)
{
Y = operand;
notZ = Y;
@ -2476,7 +2491,7 @@ case 0xac:
intermediateAddress |= ((uInt16)peek(PC++, DISASM_CODE) << 8);
operand = peek(intermediateAddress, DISASM_DATA);
}
myLastPeekAddressY = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressY)
{
Y = operand;
notZ = Y;
@ -2496,7 +2511,7 @@ case 0xbc:
operand = peek(intermediateAddress, DISASM_DATA);
}
}
myLastPeekAddressY = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressY)
{
Y = operand;
notZ = Y;
@ -4354,8 +4369,7 @@ case 0x85:
{
operandAddress = peek(PC++, DISASM_CODE);
}
if((operandAddress == 0x1B || operandAddress == 0x1C) && myLastPeekAddressA)
mySystem->setAddressDisasmType(myLastPeekAddressA, DISASM_GFX);
CHECK_GFX_WRITE(myLastPeekAddressA)
{
poke(operandAddress, A);
}
@ -4440,8 +4454,7 @@ case 0x86:
{
operandAddress = peek(PC++, DISASM_CODE);
}
if((operandAddress == 0x1B || operandAddress == 0x1C) && myLastPeekAddressX)
mySystem->setAddressDisasmType(myLastPeekAddressX, DISASM_GFX);
CHECK_GFX_WRITE(myLastPeekAddressX)
{
poke(operandAddress, X);
}
@ -4476,8 +4489,7 @@ case 0x84:
{
operandAddress = peek(PC++, DISASM_CODE);
}
if((operandAddress == 0x1B || operandAddress == 0x1C) && myLastPeekAddressY)
mySystem->setAddressDisasmType(myLastPeekAddressY, DISASM_GFX);
CHECK_GFX_WRITE(myLastPeekAddressY)
{
poke(operandAddress, Y);
}

View File

@ -31,6 +31,21 @@
#define NOTSAMEPAGE(_addr1, _addr2) (((_addr1) ^ (_addr2)) & 0xff00)
#endif
#ifndef SET_LAST_PEEK
#define SET_LAST_PEEK(_addr) _addr = intermediateAddress;
#endif
#ifndef CLEAR_LAST_PEEK
#define CLEAR_LAST_PEEK(_addr) _addr = 0;
#endif
#ifndef CHECK_GFX_WRITE
#define CHECK_GFX_WRITE(_addr) \
if((operandAddress == 0x1B || operandAddress == 0x1C) && _addr) \
mySystem->setAddressDisasmType(_addr, DISASM_GFX);
#endif
define(M6502_IMPLIED, `{
peek(PC, DISASM_NONE);
}')
@ -1504,49 +1519,49 @@ break;
// LDA
case 0xa9:
M6502_IMMEDIATE_READ
myLastPeekAddressA = 0;
CLEAR_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
case 0xa5:
M6502_ZERO_READ
myLastPeekAddressA = 0;
CLEAR_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
case 0xb5:
M6502_ZEROX_READ
myLastPeekAddressA = 0;
CLEAR_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
case 0xad:
M6502_ABSOLUTE_READ
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
case 0xbd:
M6502_ABSOLUTEX_READ
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
case 0xb9:
M6502_ABSOLUTEY_READ
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
case 0xa1:
M6502_INDIRECTX_READ
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
case 0xb1:
M6502_INDIRECTY_READ
myLastPeekAddressA = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressA)
M6502_LDA
break;
//////////////////////////////////////////////////
@ -1556,31 +1571,31 @@ break;
// LDX
case 0xa2:
M6502_IMMEDIATE_READ
myLastPeekAddressX = 0;
CLEAR_LAST_PEEK(myLastPeekAddressX)
M6502_LDX
break;
case 0xa6:
M6502_ZERO_READ
myLastPeekAddressX = 0;
CLEAR_LAST_PEEK(myLastPeekAddressX)
M6502_LDX
break;
case 0xb6:
M6502_ZEROY_READ
myLastPeekAddressX = 0;
CLEAR_LAST_PEEK(myLastPeekAddressX)
M6502_LDX
break;
case 0xae:
M6502_ABSOLUTE_READ
myLastPeekAddressX = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressX)
M6502_LDX
break;
case 0xbe:
M6502_ABSOLUTEY_READ
myLastPeekAddressX = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressX)
M6502_LDX
break;
//////////////////////////////////////////////////
@ -1590,31 +1605,31 @@ break;
// LDY
case 0xa0:
M6502_IMMEDIATE_READ
myLastPeekAddressY = 0;
CLEAR_LAST_PEEK(myLastPeekAddressY)
M6502_LDY
break;
case 0xa4:
M6502_ZERO_READ
myLastPeekAddressY = 0;
CLEAR_LAST_PEEK(myLastPeekAddressY)
M6502_LDY
break;
case 0xb4:
M6502_ZEROX_READ
myLastPeekAddressY = 0;
CLEAR_LAST_PEEK(myLastPeekAddressY)
M6502_LDY
break;
case 0xac:
M6502_ABSOLUTE_READ
myLastPeekAddressY = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressY)
M6502_LDY
break;
case 0xbc:
M6502_ABSOLUTEX_READ
myLastPeekAddressY = intermediateAddress;
SET_LAST_PEEK(myLastPeekAddressY)
M6502_LDY
break;
//////////////////////////////////////////////////
@ -2100,8 +2115,7 @@ break;
// STA
case 0x85:
M6502_ZERO_WRITE
if((operandAddress == 0x1B || operandAddress == 0x1C) && myLastPeekAddressA)
mySystem->setAddressDisasmType(myLastPeekAddressA, DISASM_GFX);
CHECK_GFX_WRITE(myLastPeekAddressA)
M6502_STA
break;
@ -2141,8 +2155,7 @@ break;
// STX
case 0x86:
M6502_ZERO_WRITE
if((operandAddress == 0x1B || operandAddress == 0x1C) && myLastPeekAddressX)
mySystem->setAddressDisasmType(myLastPeekAddressX, DISASM_GFX);
CHECK_GFX_WRITE(myLastPeekAddressX)
M6502_STX
break;
@ -2162,8 +2175,7 @@ break;
// STY
case 0x84:
M6502_ZERO_WRITE
if((operandAddress == 0x1B || operandAddress == 0x1C) && myLastPeekAddressY)
mySystem->setAddressDisasmType(myLastPeekAddressY, DISASM_GFX);
CHECK_GFX_WRITE(myLastPeekAddressY)
M6502_STY
break;