mirror of https://github.com/stella-emu/stella.git
Added a flag to the 6502 code to track if the last memory access was a
read or not. Also modified the TIA code so that if the last access wasn't a read then it does not do a WSYNC operation. This allows the emubug.bin ROM to execute and report "2600" instead of "EMU". git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1123 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
ce28361930
commit
ca78e39ca8
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" 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: TIA.cxx,v 1.68 2006-08-12 02:42:09 bwmott Exp $
|
// $Id: TIA.cxx,v 1.69 2006-08-31 02:31:28 bwmott Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
@ -2211,8 +2211,18 @@ void TIA::poke(uInt16 addr, uInt8 value)
|
||||||
|
|
||||||
case 0x02: // Wait for leading edge of HBLANK
|
case 0x02: // Wait for leading edge of HBLANK
|
||||||
{
|
{
|
||||||
// Tell the cpu to waste the necessary amount of time
|
// It appears that the 6507 only halts during a read cycle so
|
||||||
waitHorizontalSync();
|
// we test here for follow-on writes which should be ignored as
|
||||||
|
// far as halting the processor is concerned.
|
||||||
|
//
|
||||||
|
// TODO - 08-30-2006: This halting isn't correct since it's
|
||||||
|
// still halting on the original write. The 6507 emulation
|
||||||
|
// should be expanded to include a READY line.
|
||||||
|
if(mySystem->m6502().lastAccessWasRead())
|
||||||
|
{
|
||||||
|
// Tell the cpu to waste the necessary amount of time
|
||||||
|
waitHorizontalSync();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" 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.cxx,v 1.16 2006-06-09 02:45:11 urchlay Exp $
|
// $Id: M6502.cxx,v 1.17 2006-08-31 02:31:29 bwmott Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include "M6502.hxx"
|
#include "M6502.hxx"
|
||||||
|
@ -80,6 +80,9 @@ void M6502::reset()
|
||||||
SP = 0xff;
|
SP = 0xff;
|
||||||
PS(0x20);
|
PS(0x20);
|
||||||
|
|
||||||
|
// Reset access flag
|
||||||
|
myLastAccessWasRead = true;
|
||||||
|
|
||||||
// Load PC from the reset vector
|
// Load PC from the reset vector
|
||||||
PC = (uInt16)mySystem->peek(0xfffc) | ((uInt16)mySystem->peek(0xfffd) << 8);
|
PC = (uInt16)mySystem->peek(0xfffc) | ((uInt16)mySystem->peek(0xfffd) << 8);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" 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.hxx,v 1.16 2005-12-09 01:16:13 stephena Exp $
|
// $Id: M6502.hxx,v 1.17 2006-08-31 02:31:29 bwmott Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#ifndef M6502_HXX
|
#ifndef M6502_HXX
|
||||||
|
@ -41,7 +41,7 @@ typedef Common::Array<Expression*> ExpressionList;
|
||||||
has a 64K addressing space.
|
has a 64K addressing space.
|
||||||
|
|
||||||
@author Bradford W. Mott
|
@author Bradford W. Mott
|
||||||
@version $Id: M6502.hxx,v 1.16 2005-12-09 01:16:13 stephena Exp $
|
@version $Id: M6502.hxx,v 1.17 2006-08-31 02:31:29 bwmott Exp $
|
||||||
*/
|
*/
|
||||||
class M6502
|
class M6502
|
||||||
{
|
{
|
||||||
|
@ -171,6 +171,13 @@ class M6502
|
||||||
*/
|
*/
|
||||||
uInt16 getPC() const { return PC; }
|
uInt16 getPC() const { return PC; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
Answer true iff the last memory access was a read.
|
||||||
|
|
||||||
|
@return true iff last access was a read.
|
||||||
|
*/
|
||||||
|
bool lastAccessWasRead() const { return myLastAccessWasRead; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
Overload the ostream output operator for addressing modes.
|
Overload the ostream output operator for addressing modes.
|
||||||
|
@ -279,6 +286,9 @@ class M6502
|
||||||
/// Table of system cycles for each instruction
|
/// Table of system cycles for each instruction
|
||||||
uInt32 myInstructionSystemCycleTable[256];
|
uInt32 myInstructionSystemCycleTable[256];
|
||||||
|
|
||||||
|
/// Indicates if the last memory access was a read or not
|
||||||
|
bool myLastAccessWasRead;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/// Addressing mode for each of the 256 opcodes
|
/// Addressing mode for each of the 256 opcodes
|
||||||
static AddressingMode ourAddressingModeTable[256];
|
static AddressingMode ourAddressingModeTable[256];
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" 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: M6502Hi.cxx,v 1.15 2005-12-17 01:23:07 stephena Exp $
|
// $Id: M6502Hi.cxx,v 1.16 2006-08-31 02:31:29 bwmott Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include "M6502Hi.hxx"
|
#include "M6502Hi.hxx"
|
||||||
|
@ -62,7 +62,10 @@ inline uInt8 M6502High::peek(uInt16 address)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return mySystem->peek(address);
|
|
||||||
|
uInt8 result = mySystem->peek(address);
|
||||||
|
myLastAccessWasRead = true;
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -85,6 +88,7 @@ inline void M6502High::poke(uInt16 address, uInt8 value)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mySystem->poke(address, value);
|
mySystem->poke(address, value);
|
||||||
|
myLastAccessWasRead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// See the file "license" for information on usage and redistribution of
|
// See the file "license" 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: M6502Low.cxx,v 1.8 2006-02-05 02:49:47 stephena Exp $
|
// $Id: M6502Low.cxx,v 1.9 2006-08-31 02:31:29 bwmott Exp $
|
||||||
//============================================================================
|
//============================================================================
|
||||||
|
|
||||||
#include "M6502Low.hxx"
|
#include "M6502Low.hxx"
|
||||||
|
@ -52,7 +52,9 @@ inline uInt8 M6502Low::peek(uInt16 address)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return mySystem->peek(address);
|
uInt8 result = mySystem->peek(address);
|
||||||
|
myLastAccessWasRead = true;
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@ -68,6 +70,7 @@ inline void M6502Low::poke(uInt16 address, uInt8 value)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
mySystem->poke(address, value);
|
mySystem->poke(address, value);
|
||||||
|
myLastAccessWasRead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
Loading…
Reference in New Issue