2001-12-27 19:54:36 +00:00
|
|
|
//============================================================================
|
|
|
|
//
|
2016-12-30 00:00:30 +00:00
|
|
|
// SSSS tt lll lll
|
|
|
|
// SS SS tt ll ll
|
|
|
|
// SS tttttt eeee ll ll aaaa
|
2001-12-27 19:54:36 +00:00
|
|
|
// SSSS tt ee ee ll ll aa
|
|
|
|
// SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator"
|
|
|
|
// SS SS tt ee ll ll aa aa
|
|
|
|
// SSSS ttt eeeee llll llll aaaaa
|
|
|
|
//
|
2019-01-01 15:05:51 +00:00
|
|
|
// Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony
|
2010-04-10 21:37:23 +00:00
|
|
|
// and the Stella Team
|
2001-12-27 19:54:36 +00:00
|
|
|
//
|
2010-01-10 03:23:32 +00:00
|
|
|
// See the file "License.txt" for information on usage and redistribution of
|
2001-12-27 19:54:36 +00:00
|
|
|
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
|
|
|
//============================================================================
|
|
|
|
|
|
|
|
#ifndef M6532_HXX
|
|
|
|
#define M6532_HXX
|
|
|
|
|
2019-02-26 22:43:22 +00:00
|
|
|
class ConsoleIO;
|
Added RiotDebug class, which for now only duplicates the previous
functionality of the Debugger::riotState() method. It will become
more useful when I add a RIOT tab to the debugger. Also, added
change tracking infrastructure.
Fixed long-standing bug with viewing the contents of TIM{1, 8, 64, 1024}T
registers. Apparently, the output generated by the 'riot' debugger
command showed either INTIM or TIMINT for those registers, and not the
actual value written to those registers.
Added INTIM, TIMINT, and TIMCLKS to the riot output, which show the
current values of the timer, the timer interrupt, and the number of
'timer clocks' resulting from writing to a timer register.
Cleaned up some of the debugger API, removing pointers and using
references instead.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1479 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-04-19 21:11:52 +00:00
|
|
|
class RiotDebug;
|
2017-11-20 18:57:05 +00:00
|
|
|
class System;
|
2010-08-19 21:48:28 +00:00
|
|
|
class Settings;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
|
|
|
#include "bspf.hxx"
|
|
|
|
#include "Device.hxx"
|
|
|
|
|
|
|
|
/**
|
2012-09-11 21:16:21 +00:00
|
|
|
This class models the M6532 RAM-I/O-Timer (aka RIOT) chip in the 2600
|
2012-09-16 17:32:45 +00:00
|
|
|
console. Note that since the M6507 CPU doesn't contain an interrupt line,
|
|
|
|
the following functionality relating to the RIOT IRQ line is not emulated:
|
2012-09-11 21:16:21 +00:00
|
|
|
|
2012-09-16 17:32:45 +00:00
|
|
|
- A3 to enable/disable interrupt from timer to IRQ
|
|
|
|
- A1 to enable/disable interrupt from PA7 to IRQ
|
2012-09-11 21:16:21 +00:00
|
|
|
|
2012-09-16 17:32:45 +00:00
|
|
|
@author Bradford W. Mott and Stephen Anthony
|
2001-12-27 19:54:36 +00:00
|
|
|
*/
|
|
|
|
class M6532 : public Device
|
|
|
|
{
|
Added RiotDebug class, which for now only duplicates the previous
functionality of the Debugger::riotState() method. It will become
more useful when I add a RIOT tab to the debugger. Also, added
change tracking infrastructure.
Fixed long-standing bug with viewing the contents of TIM{1, 8, 64, 1024}T
registers. Apparently, the output generated by the 'riot' debugger
command showed either INTIM or TIMINT for those registers, and not the
actual value written to those registers.
Added INTIM, TIMINT, and TIMCLKS to the riot output, which show the
current values of the timer, the timer interrupt, and the number of
'timer clocks' resulting from writing to a timer register.
Cleaned up some of the debugger API, removing pointers and using
references instead.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1479 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-04-19 21:11:52 +00:00
|
|
|
public:
|
|
|
|
/**
|
|
|
|
The RIOT debugger class is a friend who needs special access
|
|
|
|
*/
|
|
|
|
friend class RiotDebug;
|
|
|
|
|
2001-12-27 19:54:36 +00:00
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Create a new 6532 for the specified console
|
|
|
|
|
2010-08-19 21:48:28 +00:00
|
|
|
@param console The console the 6532 is associated with
|
2012-02-04 15:17:30 +00:00
|
|
|
@param settings The settings used by the system
|
2001-12-27 19:54:36 +00:00
|
|
|
*/
|
2019-02-26 22:43:22 +00:00
|
|
|
M6532(const ConsoleIO& console, const Settings& settings);
|
2015-12-29 21:28:10 +00:00
|
|
|
virtual ~M6532() = default;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Reset cartridge to its power-on state
|
|
|
|
*/
|
2015-07-10 18:59:03 +00:00
|
|
|
void reset() override;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
2012-09-16 17:32:45 +00:00
|
|
|
/**
|
|
|
|
Update the entire digital and analog pin state of ports A and B.
|
|
|
|
*/
|
|
|
|
void update();
|
|
|
|
|
2001-12-27 19:54:36 +00:00
|
|
|
/**
|
|
|
|
Install 6532 in the specified system. Invoked by the system
|
|
|
|
when the 6532 is attached to it.
|
|
|
|
|
|
|
|
@param system The system the device should install itself in
|
|
|
|
*/
|
2015-07-10 18:59:03 +00:00
|
|
|
void install(System& system) override;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
2008-02-19 12:33:07 +00:00
|
|
|
/**
|
|
|
|
Install 6532 in the specified system and device. Invoked by
|
|
|
|
the system when the 6532 is attached to it. All devices
|
|
|
|
which invoke this method take responsibility for chaining
|
|
|
|
requests back to *this* device.
|
|
|
|
|
|
|
|
@param system The system the device should install itself in
|
|
|
|
@param device The device responsible for this address space
|
|
|
|
*/
|
2016-10-29 22:31:55 +00:00
|
|
|
void installDelegate(System& system, Device& device);
|
2008-02-19 12:33:07 +00:00
|
|
|
|
2002-05-13 19:17:32 +00:00
|
|
|
/**
|
OK, another huge commit. I need to commit this now, because things are
starting to go out of sync on my development machines. OK, where to
begin ...
Changed state file format, so older state files will no longer work. The
changes aren't finalized yet, so expect more breakage.
Added getByte() and putByte() methods to serialized data, resulting in
smaller state files (previously, 1-byte values were stored as 4-byte ints).
Totally reworked controller handling code. Controller state is now
explicitly set with an ::update() method, making it easier to serialize.
Some work is still required on the serialization stuff for more advanced
controllers.
Added a 'Serializable' interface to all carts, device, controllers, etc
that can be (de)serialized. This fixes a long-standing design issue
which I personally caused many years ago.
Console switches state (SWCHB register) is now saved to state files.
Added beginnings of movie support. Basically, this saves an initial
state file, and thereafter continuously saves controller and console
switches state. Support is still somewhat rough and there's no UI for
it, but it does successfully save and later load/play state movies.
Removed specific events for driving controllers, and have them use
joystick events instead. This has the nice side effect that
joystick direction remapping 'just works' for driving controllers too.
Fixed issues with paddle emulation seen in 'Night Driver' ROM. Related
to this, removed a hack wrt paddles when grabmouse is enabled. There's
still some work to do when using the mouse to emulate paddles, but the
Stelladaptor and real paddles work fine.
Added beginnings of TrackBall CX-22 controller emulation. It doesn't
actually do anything yet, but the class is there :)
Probably some other stuff that I'm forgetting ...
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1385 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-10-03 21:41:19 +00:00
|
|
|
Save the current state of this device to the given Serializer.
|
2002-05-13 19:17:32 +00:00
|
|
|
|
OK, another huge commit. I need to commit this now, because things are
starting to go out of sync on my development machines. OK, where to
begin ...
Changed state file format, so older state files will no longer work. The
changes aren't finalized yet, so expect more breakage.
Added getByte() and putByte() methods to serialized data, resulting in
smaller state files (previously, 1-byte values were stored as 4-byte ints).
Totally reworked controller handling code. Controller state is now
explicitly set with an ::update() method, making it easier to serialize.
Some work is still required on the serialization stuff for more advanced
controllers.
Added a 'Serializable' interface to all carts, device, controllers, etc
that can be (de)serialized. This fixes a long-standing design issue
which I personally caused many years ago.
Console switches state (SWCHB register) is now saved to state files.
Added beginnings of movie support. Basically, this saves an initial
state file, and thereafter continuously saves controller and console
switches state. Support is still somewhat rough and there's no UI for
it, but it does successfully save and later load/play state movies.
Removed specific events for driving controllers, and have them use
joystick events instead. This has the nice side effect that
joystick direction remapping 'just works' for driving controllers too.
Fixed issues with paddle emulation seen in 'Night Driver' ROM. Related
to this, removed a hack wrt paddles when grabmouse is enabled. There's
still some work to do when using the mouse to emulate paddles, but the
Stelladaptor and real paddles work fine.
Added beginnings of TrackBall CX-22 controller emulation. It doesn't
actually do anything yet, but the class is there :)
Probably some other stuff that I'm forgetting ...
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1385 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-10-03 21:41:19 +00:00
|
|
|
@param out The Serializer object to use
|
|
|
|
@return False on any errors, else true
|
2002-05-13 19:17:32 +00:00
|
|
|
*/
|
2015-07-10 18:59:03 +00:00
|
|
|
bool save(Serializer& out) const override;
|
2002-05-13 19:17:32 +00:00
|
|
|
|
|
|
|
/**
|
OK, this looks like a huge update, but it's only because of some Serializer
class reworking. Serializer class now handles read/write of state from
files as well as in-memory streams. As a result, Deserializer class has
been removed.
Added state rewinding to the debugger. For now, this is limited to 100
levels of undo, with a new state generated each time a step/trace/frame/
scanline advance is performed. The undo level is 'rolling', in that it
remembers the last 100 levels (so you lose the oldest states when you
start adding more than 100). For now, this is tied to the 'Alt-r' key
in the debugger. Still TODO is add a button for it, and clean up some
TIA output issues when rewinding.
Added support for 6K version of Supercharger ROMs (this fixes issues
with the 6K version of Cubis).
Cleaned up the Serializable infrastructure, making sure that all
classes that need to implement it actually do so now.
Fixed issue with editable widgets in the UI, where pressing Enter
on the keypad wasn't actually being registered.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1849 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2009-08-05 16:05:34 +00:00
|
|
|
Load the current state of this device from the given Serializer.
|
2002-05-13 19:17:32 +00:00
|
|
|
|
OK, this looks like a huge update, but it's only because of some Serializer
class reworking. Serializer class now handles read/write of state from
files as well as in-memory streams. As a result, Deserializer class has
been removed.
Added state rewinding to the debugger. For now, this is limited to 100
levels of undo, with a new state generated each time a step/trace/frame/
scanline advance is performed. The undo level is 'rolling', in that it
remembers the last 100 levels (so you lose the oldest states when you
start adding more than 100). For now, this is tied to the 'Alt-r' key
in the debugger. Still TODO is add a button for it, and clean up some
TIA output issues when rewinding.
Added support for 6K version of Supercharger ROMs (this fixes issues
with the 6K version of Cubis).
Cleaned up the Serializable infrastructure, making sure that all
classes that need to implement it actually do so now.
Fixed issue with editable widgets in the UI, where pressing Enter
on the keypad wasn't actually being registered.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1849 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2009-08-05 16:05:34 +00:00
|
|
|
@param in The Serializer object to use
|
OK, another huge commit. I need to commit this now, because things are
starting to go out of sync on my development machines. OK, where to
begin ...
Changed state file format, so older state files will no longer work. The
changes aren't finalized yet, so expect more breakage.
Added getByte() and putByte() methods to serialized data, resulting in
smaller state files (previously, 1-byte values were stored as 4-byte ints).
Totally reworked controller handling code. Controller state is now
explicitly set with an ::update() method, making it easier to serialize.
Some work is still required on the serialization stuff for more advanced
controllers.
Added a 'Serializable' interface to all carts, device, controllers, etc
that can be (de)serialized. This fixes a long-standing design issue
which I personally caused many years ago.
Console switches state (SWCHB register) is now saved to state files.
Added beginnings of movie support. Basically, this saves an initial
state file, and thereafter continuously saves controller and console
switches state. Support is still somewhat rough and there's no UI for
it, but it does successfully save and later load/play state movies.
Removed specific events for driving controllers, and have them use
joystick events instead. This has the nice side effect that
joystick direction remapping 'just works' for driving controllers too.
Fixed issues with paddle emulation seen in 'Night Driver' ROM. Related
to this, removed a hack wrt paddles when grabmouse is enabled. There's
still some work to do when using the mouse to emulate paddles, but the
Stelladaptor and real paddles work fine.
Added beginnings of TrackBall CX-22 controller emulation. It doesn't
actually do anything yet, but the class is there :)
Probably some other stuff that I'm forgetting ...
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1385 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2007-10-03 21:41:19 +00:00
|
|
|
@return False on any errors, else true
|
2002-05-13 19:17:32 +00:00
|
|
|
*/
|
2015-07-10 18:59:03 +00:00
|
|
|
bool load(Serializer& in) override;
|
2002-05-13 19:17:32 +00:00
|
|
|
|
2001-12-27 19:54:36 +00:00
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Get the byte at the specified address
|
|
|
|
|
|
|
|
@return The byte at the specified address
|
|
|
|
*/
|
2015-07-10 18:59:03 +00:00
|
|
|
uInt8 peek(uInt16 address) override;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Change the byte at the specified address to the given value
|
|
|
|
|
|
|
|
@param address The address where the value should be stored
|
|
|
|
@param value The value to be stored at the address
|
2010-03-28 03:13:10 +00:00
|
|
|
|
|
|
|
@return True if the poke changed the device address space, else false
|
2001-12-27 19:54:36 +00:00
|
|
|
*/
|
2015-07-10 18:59:03 +00:00
|
|
|
bool poke(uInt16 address, uInt8 value) override;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
2017-12-16 20:28:44 +00:00
|
|
|
/**
|
|
|
|
* Update RIOT state to the current timestamp.
|
|
|
|
*/
|
|
|
|
void updateEmulation();
|
|
|
|
|
2019-04-28 01:11:17 +00:00
|
|
|
/**
|
|
|
|
Get a pointer to the RAM contents.
|
|
|
|
|
|
|
|
@return Pointer to RAM array.
|
|
|
|
*/
|
2019-09-16 22:16:15 +00:00
|
|
|
const uInt8* getRAM() const { return myRAM.data(); }
|
2019-04-28 01:11:17 +00:00
|
|
|
|
Added RiotDebug class, which for now only duplicates the previous
functionality of the Debugger::riotState() method. It will become
more useful when I add a RIOT tab to the debugger. Also, added
change tracking infrastructure.
Fixed long-standing bug with viewing the contents of TIM{1, 8, 64, 1024}T
registers. Apparently, the output generated by the 'riot' debugger
command showed either INTIM or TIMINT for those registers, and not the
actual value written to those registers.
Added INTIM, TIMINT, and TIMCLKS to the riot output, which show the
current values of the timer, the timer interrupt, and the number of
'timer clocks' resulting from writing to a timer register.
Cleaned up some of the debugger API, removing pointers and using
references instead.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1479 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-04-19 21:11:52 +00:00
|
|
|
private:
|
|
|
|
|
2008-04-23 16:51:11 +00:00
|
|
|
void setTimerRegister(uInt8 data, uInt8 interval);
|
2012-01-02 16:37:17 +00:00
|
|
|
void setPinState(bool shcha);
|
2008-04-23 16:51:11 +00:00
|
|
|
|
2013-02-17 22:33:53 +00:00
|
|
|
// The following are used by the debugger to read INTIM/TIMINT
|
|
|
|
// We need separate methods to do this, so the state of the system
|
|
|
|
// isn't changed
|
2017-03-14 00:26:14 +00:00
|
|
|
uInt8 intim();
|
|
|
|
uInt8 timint();
|
|
|
|
Int32 intimClocks();
|
|
|
|
uInt32 timerClocks() const;
|
2017-10-11 20:48:07 +00:00
|
|
|
|
|
|
|
#ifdef DEBUGGER_SUPPORT
|
2017-09-16 15:38:37 +00:00
|
|
|
void createAccessBases();
|
2017-10-11 20:48:07 +00:00
|
|
|
|
2017-09-16 15:38:37 +00:00
|
|
|
/**
|
2017-10-11 20:48:07 +00:00
|
|
|
Query the given address type for the associated disassembly flags.
|
2017-09-16 15:38:37 +00:00
|
|
|
|
2017-10-11 20:48:07 +00:00
|
|
|
@param address The address to query
|
2017-09-16 15:38:37 +00:00
|
|
|
*/
|
|
|
|
uInt8 getAccessFlags(uInt16 address) const override;
|
2017-10-11 20:48:07 +00:00
|
|
|
/**
|
|
|
|
Change the given address to use the given disassembly flags.
|
|
|
|
|
|
|
|
@param address The address to modify
|
|
|
|
@param flags A bitfield of DisasmType directives for the given address
|
|
|
|
*/
|
2017-09-16 15:38:37 +00:00
|
|
|
void setAccessFlags(uInt16 address, uInt8 flags) override;
|
2017-10-11 20:48:07 +00:00
|
|
|
#endif // DEBUGGER_SUPPORT
|
2013-02-17 22:33:53 +00:00
|
|
|
|
2001-12-27 19:54:36 +00:00
|
|
|
private:
|
|
|
|
// Reference to the console
|
2019-02-26 22:43:22 +00:00
|
|
|
const ConsoleIO& myConsole;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
2010-08-19 21:48:28 +00:00
|
|
|
// Reference to the settings
|
|
|
|
const Settings& mySettings;
|
|
|
|
|
2001-12-27 19:54:36 +00:00
|
|
|
// An amazing 128 bytes of RAM
|
2019-09-16 22:16:15 +00:00
|
|
|
std::array<uInt8, 128> myRAM;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
2013-01-05 01:12:25 +00:00
|
|
|
// Current value of the timer
|
2017-03-14 00:26:14 +00:00
|
|
|
uInt8 myTimer;
|
|
|
|
|
|
|
|
// Current number of clocks "queued" for the divider
|
|
|
|
uInt32 mySubTimer;
|
|
|
|
|
|
|
|
// The divider
|
|
|
|
uInt32 myDivider;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
2017-03-14 00:26:14 +00:00
|
|
|
// Has the timer wrapped?
|
|
|
|
bool myTimerWrapped;
|
2017-03-19 21:25:16 +00:00
|
|
|
bool myWrappedThisCycle;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
2017-03-14 00:26:14 +00:00
|
|
|
// Cycle when the timer set. Debugging only.
|
2017-09-08 13:59:30 +00:00
|
|
|
uInt64 mySetTimerCycle;
|
2017-03-14 00:26:14 +00:00
|
|
|
|
|
|
|
// Last cycle considered in emu updates
|
2017-09-08 21:22:03 +00:00
|
|
|
uInt64 myLastCycle;
|
2001-12-27 19:54:36 +00:00
|
|
|
|
|
|
|
// Data Direction Register for Port A
|
|
|
|
uInt8 myDDRA;
|
|
|
|
|
|
|
|
// Data Direction Register for Port B
|
|
|
|
uInt8 myDDRB;
|
|
|
|
|
2008-04-23 16:51:11 +00:00
|
|
|
// Last value written to Port A
|
|
|
|
uInt8 myOutA;
|
|
|
|
|
2010-08-08 12:32:02 +00:00
|
|
|
// Last value written to Port B
|
|
|
|
uInt8 myOutB;
|
|
|
|
|
2012-09-11 21:16:21 +00:00
|
|
|
// Interrupt Flag Register
|
|
|
|
uInt8 myInterruptFlag;
|
|
|
|
|
2012-09-16 17:32:45 +00:00
|
|
|
// Used to determine whether an active transition on PA7 has occurred
|
|
|
|
// True is positive edge-detect, false is negative edge-detect
|
|
|
|
bool myEdgeDetectPositive;
|
|
|
|
|
Added RiotDebug class, which for now only duplicates the previous
functionality of the Debugger::riotState() method. It will become
more useful when I add a RIOT tab to the debugger. Also, added
change tracking infrastructure.
Fixed long-standing bug with viewing the contents of TIM{1, 8, 64, 1024}T
registers. Apparently, the output generated by the 'riot' debugger
command showed either INTIM or TIMINT for those registers, and not the
actual value written to those registers.
Added INTIM, TIMINT, and TIMCLKS to the riot output, which show the
current values of the timer, the timer interrupt, and the number of
'timer clocks' resulting from writing to a timer register.
Cleaned up some of the debugger API, removing pointers and using
references instead.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1479 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-04-19 21:11:52 +00:00
|
|
|
// Last value written to the timer registers
|
2019-09-18 12:57:32 +00:00
|
|
|
std::array<uInt8, 4> myOutTimer;
|
Added RiotDebug class, which for now only duplicates the previous
functionality of the Debugger::riotState() method. It will become
more useful when I add a RIOT tab to the debugger. Also, added
change tracking infrastructure.
Fixed long-standing bug with viewing the contents of TIM{1, 8, 64, 1024}T
registers. Apparently, the output generated by the 'riot' debugger
command showed either INTIM or TIMINT for those registers, and not the
actual value written to those registers.
Added INTIM, TIMINT, and TIMCLKS to the riot output, which show the
current values of the timer, the timer interrupt, and the number of
'timer clocks' resulting from writing to a timer register.
Cleaned up some of the debugger API, removing pointers and using
references instead.
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1479 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
2008-04-19 21:11:52 +00:00
|
|
|
|
2019-04-14 00:56:53 +00:00
|
|
|
// Accessible bits in the interrupt flag register
|
|
|
|
// All other bits are always zeroed
|
|
|
|
static constexpr uInt8 TimerBit = 0x80, PA7Bit = 0x40;
|
|
|
|
|
2017-09-17 08:35:45 +00:00
|
|
|
#ifdef DEBUGGER_SUPPORT
|
2017-09-16 15:38:37 +00:00
|
|
|
static constexpr uInt16
|
|
|
|
RAM_SIZE = 0x80, RAM_MASK = RAM_SIZE - 1,
|
2017-09-17 08:35:45 +00:00
|
|
|
STACK_SIZE = RAM_SIZE, STACK_MASK = RAM_MASK, STACK_BIT = 0x100,
|
|
|
|
IO_SIZE = 0x20, IO_MASK = IO_SIZE - 1, IO_BIT = 0x200,
|
|
|
|
ZP_DELAY = 1;
|
2019-09-16 22:16:15 +00:00
|
|
|
|
|
|
|
// The arrays containing information about every byte of RIOT
|
|
|
|
// indicating whether and how (RW) it is used.
|
|
|
|
std::array<uInt8, RAM_SIZE> myRAMAccessBase;
|
|
|
|
std::array<uInt8, STACK_SIZE> myStackAccessBase;
|
|
|
|
std::array<uInt8, IO_SIZE> myIOAccessBase;
|
|
|
|
// The array used to skip the first ZP access tracking
|
|
|
|
std::array<uInt8, RAM_SIZE> myZPAccessDelay;
|
2017-09-17 08:35:45 +00:00
|
|
|
#endif // DEBUGGER_SUPPORT
|
2017-09-16 11:48:04 +00:00
|
|
|
|
2001-12-27 19:54:36 +00:00
|
|
|
private:
|
2015-04-26 19:02:42 +00:00
|
|
|
// Following constructors and assignment operators not supported
|
|
|
|
M6532() = delete;
|
|
|
|
M6532(const M6532&) = delete;
|
|
|
|
M6532(M6532&&) = delete;
|
|
|
|
M6532& operator=(const M6532&) = delete;
|
|
|
|
M6532& operator=(M6532&&) = delete;
|
2001-12-27 19:54:36 +00:00
|
|
|
};
|
|
|
|
|
2008-04-20 19:52:33 +00:00
|
|
|
#endif
|