mirror of https://github.com/stella-emu/stella.git
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:
parent
47f7be341e
commit
82bae93337
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue