mirror of
https://github.com/AppleWin/AppleWin.git
synced 2024-12-23 00:30:17 +00:00
2.5.0.3
* BP now backwards compatible * Cleaned up Breakpoint code
This commit is contained in:
parent
0bd18b1d4c
commit
00b1ca699a
@ -42,214 +42,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
// TODO: COLOR SAVE ["filename"]
|
||||
// TODO: COLOR LOAD ["filename"]
|
||||
|
||||
// TCHAR DEBUG_VERSION = "0.0.0.0"; // App Version
|
||||
const int DEBUGGER_VERSION = MAKE_VERSION(2,5,0,1);
|
||||
|
||||
// .1 SH Address,Len Byte [Byte ..]
|
||||
// 2.5 split Debugger files
|
||||
|
||||
// .21 Changed: Branch indicator now a little bigger +3 in DebugInitialize() (easier to read), indented ^,V to make the < stand out
|
||||
// U 300
|
||||
// E 300 D0 80 D0 FE D0 00
|
||||
// .20 Added: BW is now a seperate color scheme
|
||||
// .19 Added: ECHO CmdConfigEcho(), g_pConsoleFirstArg, and ArgsGet()
|
||||
// .18 Changed: BPX now defaults to setting breakpoint at cursor.
|
||||
// .17 Changed: BP now defaults to setting breakpoint at PC.
|
||||
|
||||
// Patch 22
|
||||
// .16 fixed BPM. i.e. BPM C400,100. Boot: ulti4bo.dsk, breaks at: 81BC: STA ($88),Y $0088=$C480 ... C483: A0
|
||||
|
||||
// Patch 21
|
||||
// .15 Fixed: CmdRegisterSet() equal sign is now optional. i.e. R A [=] Y
|
||||
// .14 Optimized: ArgsCook()
|
||||
// .13 Fixed: HELP "..." on ambigious command displays potential commands
|
||||
// .12 Added: Token %, calculator mod
|
||||
// .11 Added: Token /, calculator div
|
||||
// .10 Added: Token ^, calculator bit-xor
|
||||
// .9 Added: Token |, calculator bit-or
|
||||
// .8 Added: Token &, calculator bit-and
|
||||
// .7 Added: Mini-Assembler
|
||||
// .6 Added: MOTD (Message of the Day) : Moved from DebugBegin()
|
||||
// .5 Added: HELP SOURCE
|
||||
// .4 Fixed: SYMMAIN SYMUSER SYMSRC to now only search their respective symbol tables
|
||||
// .3 Added: _CmdSymbolList_Address2Symbol() _CmdSymbolList_Symbol2Address() now take bit-flags of which tables to search
|
||||
// .2 Added: EB alias for E
|
||||
// .1 Added: EW address value16 CmdMemoryEnterWord() to set memory with 16-Bit Values
|
||||
// 2.4.2.0
|
||||
// .14 Added: SYM ! name to remove (user) symbol. _CmdSymbolsUpdate()
|
||||
// .13 Added: JSR address|symbol CmdJSR()
|
||||
// .12 Fixed: SYM address|symbol now reports if address or symbol not found. CmdSymbolsList()
|
||||
// .11 Fixed PageUp*, PagDn* not being recognized valid commands.
|
||||
|
||||
// Patch 20
|
||||
// .10 Added: SYM2 symbolname = value
|
||||
// .9 Added: Undocumented command: FONT *
|
||||
// .8 Improved: FONT MODE # is now more accurate. i.e. U 301
|
||||
// FONT MODE 0 Classic line spacing (19 lines: 301 .. 313)
|
||||
// FONT MODE 1 Improved line spacing (20 lines: 301 .. 314)
|
||||
// FONT MODE 2 Optimal line spacing (22 lines: 301 .. 316)
|
||||
// .7 Fixed: ArgsCook() wasn't parsing #value properly. i.e. CALC #A+0A
|
||||
// .6 Cleanup: DrawWatches()
|
||||
|
||||
// Patch 19
|
||||
// .5 Fixed: ProfileSave() doesn't strip '%' percent signs anymore. Changed: fprintf() to fputs()
|
||||
// Fixed: PROFILE RESET doesn't do dummy run of formatting profile data.
|
||||
// .4 Fixed: Exporting Profile data is now Excel/OpenOffice friendly.
|
||||
// Zero counts not listed on console. (They are when saved to file.)
|
||||
|
||||
// Patch 18
|
||||
// .3 Fixed: Help_Arg_1() now copies command name into arg.name
|
||||
// .2 Fixed: Temporarily removed extra windows that aren't done yet from showing up: WINDOW_IO WINDOW_SYMBOLS WINDOW_ZEROPAGE WINDOW_SOURCE
|
||||
// .1 Added: PROFILE LIST -- can now view the profile data from witin the debugger!
|
||||
// 2.4.1 Added: PROFILE SAVE -- now we can optimize (D0 BNE), and (10 BPL) sucking up the major of the emulator's time. WOOT!
|
||||
// Added: _6502GetOpmodeOpbyte() and _6502GetOpcodeOpmode()
|
||||
// .37 Fixed: Misc. commands not updating the console when processed
|
||||
|
||||
// Patch 17
|
||||
// .36 Data window now shows text dump based on memory view set (ASCII or APPLE)
|
||||
// MA1 D0D0; DATA;
|
||||
// MT1 D0D0; DATA;
|
||||
// D D0D0; DATA;
|
||||
// .35 Renamed: ML1 ML2 to MT1 MT2 (Mem Text)
|
||||
// .34 Removed: MH1 MH2 (redundant MEM_VIEW_APPLE_TEXT)
|
||||
// .33 Fixed: Tweaking of Lo,Hi,Norm Ascii colors for Disasm Immediate & Memory Dumps
|
||||
// ML1 D0D0; MH2 D0D0; U FA75
|
||||
// .32 Changed: Lo now maps High Ascii to printable chars. i.e. ML1 D0D0
|
||||
// .31 Ctrl-Tab, and Ctrl-Shift-Tab now cycle next/prev windows.
|
||||
// .30 Added: Up,Down,PageUp,PageDown,Shift-PageUp,Shift-PageDown,Ctrl-PageUp,Ctrl-PageDown now scroll Data window
|
||||
// .29 Added: DATA window now shows memory dump
|
||||
|
||||
// Patch 16
|
||||
// .28 Fixed: MONO wasn't setting monochrome scheme
|
||||
// .27 Changed: Registers now drawn in light blue for both DrawSubWindow_Info() [DrawRegisters()] and DrawBreakpoints()
|
||||
// Reg names in DrawSubWindow_Info no longer hard-coded: using g_areakpointSource[]
|
||||
// .26 Changed: DrawTargets() now shows Temp Address, and Final Address as orange (FG_INFO_ADDRESS)
|
||||
// .25 Changed: Flag Clear "FC" to "CL" (like 6502 mnemonic)
|
||||
// Changed: Flag Set "FS" to "SE" (like 6502 mnemonic)
|
||||
// Added: Mirrored 6502 Mnemonics to clear/set flags as commands
|
||||
// Moved: Legacy Flag Clear/Set commands "R?" "S?" to aliases
|
||||
// .24 Fixed OPCODE 2F: AM_INVALID1 -> AM_INVALID3
|
||||
// .23 Fixed OPCODE 0F: AM_INVALID1 -> AM_INVALID3
|
||||
// .22 Fixed: Shift-PageUp Shift-PageDown Ctrl-PageUp Ctrl-PageDown -> _CursorMoveUpAligned() & _CursorMoveDownAligned()
|
||||
// Bug: U F001, Ctrl-PageDown
|
||||
// Was using current disasm cursor address instead of top disasm cursor
|
||||
// .21 Fixed: _CursorMoveUpAligned() & _CursorMoveDownAligned() not wrapping around past FF00 to 0, and wrapping around past 0 to FF00
|
||||
// .20 Fixed: DisasmCalcTopFromCurAddress() causing bogus g_bDisasmCurBad when disasm invalid opcodes.
|
||||
// .19 g_aAddressingFormat[] -> g_aOpmodes[]
|
||||
// .18 Reverted .17 Changed StackPointer Input/Output. 'SP' is now back to 'S' (to be consistent with 6502 mnemonics)
|
||||
|
||||
// Patch 15
|
||||
// .17 Changed StackPointer Input/Output from 'S' to 'SP'
|
||||
// .16 Fixed Go StopAddress [SkipAddress,Length] Trace() not working afterwards
|
||||
// .15 Added Info Regs color - Foreground and Background (orange)
|
||||
|
||||
// Patch 14
|
||||
// .14 Added: Stack register now shows stack depth
|
||||
// .13 Bugfix: CmdBreakpointAddPC() operators now don't add extra breakpoints. i.e. BPX P < FA00
|
||||
// .12 Bugfix: DrawMemory() should draw memory byte for IO address: ML1 C000
|
||||
|
||||
// Patch 13
|
||||
// NightlyBuild
|
||||
// .11 Disasm now looks up symbols +1,-1. i.e. U FA85, u FAAE
|
||||
// .10 Fixed '~' full console height
|
||||
// .9 Fixed: FindCommand() to update command found if not exact match
|
||||
// .8 Moved: Flag names from g_aFlagNames[] to "inlined" g_aBreakpointSource[]
|
||||
// .7 Extended: Calc to show binary values, and char is single-quoted
|
||||
// Nightly Build
|
||||
// .6 Bugfix: DrawTargets() should draw target byte for IO address: R PC FB33
|
||||
// .5 Extended: FONT "FontName" [Height]
|
||||
// .4 Extended: Go StopAddress [SkipAddress,Len]
|
||||
// .3 Added BPR F // break on flag
|
||||
// Added ! // new breakpoint operator: NOT_EQUAL
|
||||
|
||||
// Patch 12
|
||||
// .2 Fixed: FindCommand() and FindParam() now returns 0 if name length is 0.
|
||||
// .1 Fixed: CmdHelpSpecific() wasn't printing help for 1 argument set by other commands
|
||||
// 2.4.0.0 added: uber breakpoints: BPR [A|X|Y|PC|SP] [<,<=,=,>,>=] address
|
||||
// .2 fixed: parsing console input to detect immediate values on operators '+', '-'
|
||||
// You can now do register arithmetic: CALC A+X+Y
|
||||
// .1 added: mini-calculator 'CALC'
|
||||
// 2.3.2 Rewrote parsing of console input
|
||||
// You can now do stuff like:
|
||||
// BPA INITAN+3
|
||||
// FONT "Lucida Console"
|
||||
|
||||
// Patch 11
|
||||
// .19 fixed disasm: new color for disasm target address (orange)
|
||||
// U FF14 shouldn't colorize ',X'
|
||||
// U FF16 shouldn't colorize ',Y'
|
||||
// U FF21 shouldn't colorze 'symbol,Y'
|
||||
// Addr should be purple or orange to verify is fixed
|
||||
// .18 fixed disasm: all indirects to do symbol lookup, and colorized '('...')' as operators
|
||||
// .17 added disasm: syntax coloring to immediate mode prefix '#$'
|
||||
// .16 fixed disasm window to work with proportional fonts
|
||||
// .15 fixed buffer-overun crash in TextConvertTabsToSpaces()
|
||||
|
||||
// Patch 10
|
||||
// .14 fixed help CATEGORY & SPECIFIC not working properly
|
||||
// .13 fixed bug of CODE not removing CODE window split
|
||||
// .12 fixed split window bug of re-sizing console too large
|
||||
// .11 removed hard-coded height of 16 for line height in various Draw*()
|
||||
// .10 added alpha feature: SOURCE2 now shows source assembly listing in bottom half of window DrawSourceLine()
|
||||
// .9 added P [#] to step number of times specified
|
||||
// .8 added Up-Arrow, Down-Arrow to scroll console by one line in full screen console window
|
||||
// .7 Added source level debugger to buffer complete assembly source listing file
|
||||
// .6 Added help for MA#, ML#, MH#
|
||||
// .5 added 3rd symbol table: SRC
|
||||
// .4 Added: seperated console input color, console output color
|
||||
// .3 SYM now prints which symbol table the symbol was found in.
|
||||
// .2 Added "DFB" to add assembler variable to user symbol table
|
||||
// .1 Fixed FindAddressFromSymbol() and FindSymbolFromAddress() to search user symbol table first
|
||||
// 2.3.1 Renamed all globals to conform to coding standard
|
||||
|
||||
// .10 added TAB to move the cursor back to the PC, if there is no console input
|
||||
// .9 fixed bug of setting reg, always moving the cursor back the PC
|
||||
// .8 added detection if font is proportional. Still doesn't draw properly, but slowly getting there.
|
||||
// .7 added colorized chars for regs, and memory ascii dump
|
||||
// .6 fixed console buffering BUG: ~,~,VERSION *
|
||||
// .5 added ~ to toggle full console on/off
|
||||
// .4 Fixed BUG: 'G' DebugContinueStepping() disasm window cursor getting out of sync: R PC FA62; U FB40; G FB53
|
||||
// .3 Fixed spelling of CmdWindowLast()
|
||||
// .2 Added undocumented "VERSION *" to show the number of bytes in the disasm "window"
|
||||
// .1 Fixed BUG: CmdTrace() disasm window cursor getting out of sync: Start, F7, PageUp, Space
|
||||
// 2.3.0.0 Syntax coloring for the disassembler! Plus a fancy branch indicator to 'PR#6'! Rock on!
|
||||
// 38 Fixed FindParam() bug of skipping every other parameter
|
||||
// 37 Fixed _PARAM_*_BEGIN _PARAM_*_END _PARAM_*_NUM
|
||||
// 36 Added Regs A,X,Y to show character
|
||||
// 35 Added syntax coloring for DrawBreakpoints()
|
||||
// 34 Fixed DrawMemory() viewing memory ASCII to map control-chars to a printable glyph
|
||||
// 33 Fixed 0 addr not working in CmdMemoryCompare()
|
||||
// 32 Added BG_INFO_INVERSE, FG_INFO_INVERSE for flag hilighting
|
||||
// 31 Changed FG_INFO_OPCODE color to yellow
|
||||
// 30 Fixed MDC 0, bug in CmdUnassemble()with garbage address, due to var not init, and symbol lookup failed
|
||||
// 29 Fixed typos in help summary, A, and D
|
||||
// 28 Fixed Scrolling with and without g_bDisasmCurBad
|
||||
// 27 Found bug -- can't scroll up past $5FFF with Tom's Bug Sample .. CmdCursorLineUp() not checking for gbDisamBad;
|
||||
// 26 Code cleanup: still have some '#define's to convert over to 'const'
|
||||
// 25 Fixed disasm singularity not showing up in DrawDisassemblyLine()
|
||||
// 24 Fixed an disasm singularity in DisasmCalcTopFromCurAddress() i.e. F7, G FB53, then Space (to trace) once.
|
||||
// 23 Fixed bug Watches not being cleared: _ClearViaArgs()
|
||||
// 22 Code Cleanup: Moved most ExtTextOut() to DebugDrawText()
|
||||
// 21 Changed End to jump $8000, due to redundant funcationality of Home, and wrap-around.
|
||||
// 20 Added: DisasmCalc*From*()
|
||||
// 19 New colors Enum & Array
|
||||
// 18 implemented RTS. fixed RET to use common stack return address logic.
|
||||
// 17 fixed console PageUp PageDn not refreshing console
|
||||
// .2 WINDOW_CONSOLE &
|
||||
// Implemented commands: MemoryDumpAscii*(): MA1 MA2 ML1 ML2 MH1 MH2
|
||||
// 16 removed BOOL Cmd*(), replaced with UPDATE_*
|
||||
// 15 New Console Scrolling
|
||||
// 14 extended FindParam() to specify [begin,end]
|
||||
// 13 added split window infastructure, added Window_e
|
||||
// 12 fixed PARAM aliases
|
||||
// 11 fixed FindParam() to allow aliases
|
||||
// 10 fixed SYM1 CLEAR, SYM2 CLEAR not actuall clearing
|
||||
// 9 fixed BufferOuput() in DebugBegin() clobbering first buffered output line
|
||||
// .1 since source level debugging is a minor feature
|
||||
// 8 added command "VERSION *" to show internal debug info
|
||||
// 7 fixed mem enter not refreshing screen
|
||||
// 6 added source level debuggig back-end
|
||||
// 5 fixed "SYM 0" bug
|
||||
// See Debugger_Changelong.txt for full details
|
||||
const int DEBUGGER_VERSION = MAKE_VERSION(2,5,0,3);
|
||||
|
||||
|
||||
// Public _________________________________________________________________________________________
|
||||
@ -258,7 +52,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
// Breakpoints ________________________________________________________________
|
||||
|
||||
int g_nBreakpoints = 0;
|
||||
Breakpoint_t g_aBreakpoints[ MAX_BREAKPOINTS ];
|
||||
Breakpoint_t g_aBreakpoints[ NUM_BREAKPOINTS ];
|
||||
|
||||
// NOTE: Breakpoint_Source_t and g_aBreakpointSource must match!
|
||||
const TCHAR *g_aBreakpointSource[ NUM_BREAKPOINT_SOURCES ] =
|
||||
@ -1074,7 +868,7 @@ bool IsHexString ( LPCSTR pText )
|
||||
//===========================================================================
|
||||
bool GetBreakpointInfo ( WORD nOffset, bool & bBreakpointActive_, bool & bBreakpointEnable_ )
|
||||
{
|
||||
for (int iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++)
|
||||
for (int iBreakpoint = 0; iBreakpoint < NUM_BREAKPOINTS; iBreakpoint++)
|
||||
{
|
||||
Breakpoint_t *pBP = &g_aBreakpoints[ iBreakpoint ];
|
||||
|
||||
@ -1183,7 +977,7 @@ bool CheckBreakpointsIO ()
|
||||
nAddress = aTarget[ iTarget ];
|
||||
if (nAddress != NO_6502_TARGET)
|
||||
{
|
||||
for (int iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++)
|
||||
for (int iBreakpoint = 0; iBreakpoint < NUM_BREAKPOINTS; iBreakpoint++)
|
||||
{
|
||||
Breakpoint_t *pBP = &g_aBreakpoints[iBreakpoint];
|
||||
if (_BreakpointValid( pBP ))
|
||||
@ -1209,7 +1003,7 @@ bool CheckBreakpointsReg ()
|
||||
{
|
||||
bool bStatus = false;
|
||||
|
||||
for (int iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++)
|
||||
for (int iBreakpoint = 0; iBreakpoint < NUM_BREAKPOINTS; iBreakpoint++)
|
||||
{
|
||||
Breakpoint_t *pBP = &g_aBreakpoints[iBreakpoint];
|
||||
|
||||
@ -1629,6 +1423,26 @@ Update_t CmdBreakpointMenu (int nArgs)
|
||||
g_aArgs[1].nVal1 = regs.pc;
|
||||
CmdBreakpointAddPC( 1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
int iParam;
|
||||
int nFound = FindParam( g_aArgs[ 1 ].sArg, MATCH_EXACT, iParam, _PARAM_GENERAL_BEGIN, _PARAM_GENERAL_END );
|
||||
|
||||
if (! nFound)
|
||||
{
|
||||
CmdBreakpointAddPC( 1 );
|
||||
}
|
||||
|
||||
if (iParam == PARAM_SAVE)
|
||||
{
|
||||
}
|
||||
if (iParam == PARAM_LOAD)
|
||||
{
|
||||
}
|
||||
if (iParam == PARAM_RESET)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
return UPDATE_CONSOLE_DISPLAY;
|
||||
}
|
||||
@ -1764,13 +1578,13 @@ bool _CmdBreakpointAddCommonArg ( int iArg, int nArg, BreakpointSource_t iSrc, B
|
||||
int iBreakpoint = 0;
|
||||
Breakpoint_t *pBP = & g_aBreakpoints[ iBreakpoint ];
|
||||
|
||||
while ((iBreakpoint < MAX_BREAKPOINTS) && g_aBreakpoints[iBreakpoint].nLength)
|
||||
while ((iBreakpoint < NUM_BREAKPOINTS) && g_aBreakpoints[iBreakpoint].nLength)
|
||||
{
|
||||
iBreakpoint++;
|
||||
pBP++;
|
||||
}
|
||||
|
||||
if (iBreakpoint >= MAX_BREAKPOINTS)
|
||||
if (iBreakpoint >= NUM_BREAKPOINTS)
|
||||
{
|
||||
ConsoleDisplayError(TEXT("All Breakpoints slots are currently in use."));
|
||||
return bStatus;
|
||||
@ -1900,45 +1714,54 @@ Update_t CmdBreakpointAddMem (int nArgs)
|
||||
|
||||
|
||||
//===========================================================================
|
||||
void _BreakpointClear( Breakpoint_t * aBreakWatchZero, int iBreakpoint )
|
||||
void _BreakWatchZero_Clear( Breakpoint_t * aBreakWatchZero, int iSlot )
|
||||
{
|
||||
aBreakWatchZero[iBreakpoint].bSet = false;
|
||||
aBreakWatchZero[iBreakpoint].bEnabled = false;
|
||||
aBreakWatchZero[iBreakpoint].nLength = 0;
|
||||
aBreakWatchZero[ iSlot ].bSet = false;
|
||||
aBreakWatchZero[ iSlot ].bEnabled = false;
|
||||
aBreakWatchZero[ iSlot ].nLength = 0;
|
||||
}
|
||||
|
||||
void _BreakWatchZero_RemoveOne( Breakpoint_t *aBreakWatchZero, const int iSlot, int & nTotal )
|
||||
{
|
||||
if (aBreakWatchZero[iSlot].bSet)
|
||||
{
|
||||
_BreakWatchZero_Clear( aBreakWatchZero, iSlot );
|
||||
nTotal--;
|
||||
}
|
||||
}
|
||||
|
||||
void _BreakWatchZero_RemoveAll( Breakpoint_t *aBreakWatchZero, const int nMax, int & nTotal )
|
||||
{
|
||||
int iSlot = nMax;
|
||||
|
||||
while (iSlot--)
|
||||
{
|
||||
_BreakWatchZero_RemoveOne( aBreakWatchZero, iSlot, nTotal );
|
||||
}
|
||||
}
|
||||
|
||||
// called by BreakpointsClear, WatchesClear, ZeroPagePointersClear
|
||||
//===========================================================================
|
||||
void _ClearViaArgs( int nArgs, Breakpoint_t * aBreakWatchZero, const int nMax, int & gnBWZ )
|
||||
void _ClearViaArgs( int nArgs, Breakpoint_t * aBreakWatchZero, const int nMax, int & nTotal )
|
||||
{
|
||||
int iBWZ;
|
||||
int iSlot = 0;
|
||||
|
||||
// CLEAR EACH BREAKPOINT IN THE LIST
|
||||
// Clear specified breakpoints
|
||||
while (nArgs)
|
||||
{
|
||||
iBWZ = g_aArgs[nArgs].nVal1;
|
||||
iSlot = g_aArgs[nArgs].nVal1;
|
||||
|
||||
if (! _tcscmp(g_aArgs[nArgs].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName))
|
||||
{
|
||||
iBWZ = nMax;
|
||||
while (iBWZ--)
|
||||
{
|
||||
if (aBreakWatchZero[iBWZ].bSet)
|
||||
{
|
||||
_BreakpointClear( aBreakWatchZero, iBWZ );
|
||||
gnBWZ--;
|
||||
}
|
||||
}
|
||||
_BreakWatchZero_RemoveAll( aBreakWatchZero, nMax, nTotal );
|
||||
break;
|
||||
}
|
||||
else if ((iBWZ >= 1) && (iBWZ <= nMax))
|
||||
else
|
||||
if ((iSlot >= 1) && (iSlot <= nMax))
|
||||
{
|
||||
if (aBreakWatchZero[iBWZ-1].bSet)
|
||||
{
|
||||
_BreakpointClear( aBreakWatchZero, iBWZ - 1 );
|
||||
gnBWZ--;
|
||||
}
|
||||
_BreakWatchZero_RemoveOne( aBreakWatchZero, iSlot - 1, nTotal );
|
||||
}
|
||||
|
||||
nArgs--;
|
||||
}
|
||||
}
|
||||
@ -1947,24 +1770,28 @@ void _ClearViaArgs( int nArgs, Breakpoint_t * aBreakWatchZero, const int nMax, i
|
||||
// called by BreakpointsDisable, WatchesDisable, ZeroPagePointersDisable
|
||||
void _EnableDisableViaArgs( int nArgs, Breakpoint_t * aBreakWatchZero, const int nMax, const bool bEnabled )
|
||||
{
|
||||
int iSlot = 0;
|
||||
|
||||
// Enable each breakpoint in the list
|
||||
while (nArgs)
|
||||
{
|
||||
int iBWZ = g_aArgs[nArgs].nVal1;
|
||||
iSlot = g_aArgs[nArgs].nVal1;
|
||||
|
||||
if (! _tcscmp(g_aArgs[nArgs].sArg, g_aParameters[ PARAM_WILDSTAR ].m_sName))
|
||||
{
|
||||
int iBWZ = nMax;
|
||||
while (iBWZ--)
|
||||
iSlot = nMax;
|
||||
while (iSlot--)
|
||||
{
|
||||
aBreakWatchZero[iBWZ].bEnabled = bEnabled;
|
||||
aBreakWatchZero[ iSlot ].bEnabled = bEnabled;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
if ((iBWZ >= 1) && (iBWZ <= nMax))
|
||||
if ((iSlot >= 1) && (iSlot <= nMax))
|
||||
{
|
||||
aBreakWatchZero[iBWZ-1].bEnabled = bEnabled;
|
||||
aBreakWatchZero[iSlot-1].bEnabled = bEnabled;
|
||||
}
|
||||
|
||||
nArgs--;
|
||||
}
|
||||
}
|
||||
@ -1975,32 +1802,16 @@ Update_t CmdBreakpointClear (int nArgs)
|
||||
if (!g_nBreakpoints)
|
||||
return ConsoleDisplayError(TEXT("There are no breakpoints defined."));
|
||||
|
||||
int iBreakpoint;
|
||||
|
||||
// CHECK FOR ERRORS
|
||||
if (!nArgs)
|
||||
{
|
||||
iBreakpoint = MAX_BREAKPOINTS;
|
||||
while (iBreakpoint--)
|
||||
{
|
||||
if ((g_aBreakpoints[iBreakpoint].bSet) &&
|
||||
(g_aBreakpoints[iBreakpoint].nAddress == regs.pc)) // TODO: FIXME
|
||||
{
|
||||
_BreakpointClear( g_aBreakpoints, iBreakpoint );
|
||||
g_nBreakpoints--;
|
||||
}
|
||||
}
|
||||
// return DisplayHelp(CmdBreakpointClear);
|
||||
_BreakWatchZero_RemoveAll( g_aBreakpoints, NUM_BREAKPOINTS, g_nBreakpoints );
|
||||
}
|
||||
|
||||
_ClearViaArgs( nArgs, g_aBreakpoints, MAX_BREAKPOINTS, g_nBreakpoints );
|
||||
|
||||
if (! g_nBreakpoints)
|
||||
else
|
||||
{
|
||||
return (UPDATE_DISASM | UPDATE_BREAKPOINTS);
|
||||
_ClearViaArgs( nArgs, g_aBreakpoints, NUM_BREAKPOINTS, g_nBreakpoints );
|
||||
}
|
||||
|
||||
return UPDATE_BREAKPOINTS | UPDATE_CONSOLE_DISPLAY; // 1;
|
||||
return UPDATE_DISASM | UPDATE_BREAKPOINTS | UPDATE_CONSOLE_DISPLAY;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
@ -2012,7 +1823,7 @@ Update_t CmdBreakpointDisable (int nArgs)
|
||||
if (! nArgs)
|
||||
return Help_Arg_1( CMD_BREAKPOINT_DISABLE );
|
||||
|
||||
_EnableDisableViaArgs( nArgs, g_aBreakpoints, MAX_BREAKPOINTS, false );
|
||||
_EnableDisableViaArgs( nArgs, g_aBreakpoints, NUM_BREAKPOINTS, false );
|
||||
|
||||
return UPDATE_BREAKPOINTS;
|
||||
}
|
||||
@ -2033,7 +1844,7 @@ Update_t CmdBreakpointEnable (int nArgs) {
|
||||
if (! nArgs)
|
||||
return Help_Arg_1( CMD_BREAKPOINT_ENABLE );
|
||||
|
||||
_EnableDisableViaArgs( nArgs, g_aBreakpoints, MAX_BREAKPOINTS, true );
|
||||
_EnableDisableViaArgs( nArgs, g_aBreakpoints, NUM_BREAKPOINTS, true );
|
||||
|
||||
return UPDATE_BREAKPOINTS;
|
||||
}
|
||||
@ -2068,7 +1879,7 @@ Update_t CmdBreakpointList (int nArgs)
|
||||
{
|
||||
// ConsoleBufferPush( );
|
||||
// vector<int> vBreakpoints;
|
||||
// int iBreakpoint = MAX_BREAKPOINTS;
|
||||
// int iBreakpoint = NUM_BREAKPOINTS;
|
||||
// while (iBreakpoint--)
|
||||
// {
|
||||
// if (g_aBreakpoints[iBreakpoint].enabled)
|
||||
@ -2086,7 +1897,7 @@ Update_t CmdBreakpointList (int nArgs)
|
||||
else
|
||||
{
|
||||
int iBreakpoint = 0;
|
||||
while (iBreakpoint < MAX_BREAKPOINTS)
|
||||
while (iBreakpoint < NUM_BREAKPOINTS)
|
||||
{
|
||||
if (g_aBreakpoints[ iBreakpoint ].bSet)
|
||||
{
|
||||
@ -6632,7 +6443,7 @@ void DebugInitialize ()
|
||||
WindowUpdateConsoleDisplayedSize();
|
||||
|
||||
// CLEAR THE BREAKPOINT AND WATCH TABLES
|
||||
ZeroMemory( g_aBreakpoints , MAX_BREAKPOINTS * sizeof(Breakpoint_t));
|
||||
ZeroMemory( g_aBreakpoints , NUM_BREAKPOINTS * sizeof(Breakpoint_t));
|
||||
ZeroMemory( g_aWatches , MAX_WATCHES * sizeof(Watches_t) );
|
||||
ZeroMemory( g_aZeroPagePointers, MAX_ZEROPAGE_POINTERS * sizeof(ZeroPagePointers_t));
|
||||
|
||||
|
@ -20,7 +20,7 @@ using namespace std;
|
||||
|
||||
// Breakpoints
|
||||
extern int g_nBreakpoints;
|
||||
extern Breakpoint_t g_aBreakpoints[ MAX_BREAKPOINTS ];
|
||||
extern Breakpoint_t g_aBreakpoints[ NUM_BREAKPOINTS ];
|
||||
|
||||
extern const TCHAR *g_aBreakpointSource [ NUM_BREAKPOINT_SOURCES ];
|
||||
extern const TCHAR *g_aBreakpointSymbols[ NUM_BREAKPOINT_OPERATORS ];
|
||||
|
@ -73,7 +73,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
// 10 signed: BPL BGE
|
||||
// B0 unsigned: BCS BGE
|
||||
|
||||
|
||||
#define R_ MEM_R
|
||||
#define _W MEM_W
|
||||
#define RW MEM_R | MEM_W
|
||||
@ -151,7 +150,7 @@ const Opcodes_t g_aOpcodes65C02[ NUM_OPCODES ] =
|
||||
{"INX", 0 , 0}, {"SBC", AM_M , R_}, {"NOP", 0 , 0}, {"NOP", AM_1 , 0 }, // E8 .. EB
|
||||
{"CPX", AM_A , R_}, {"SBC", AM_A , R_}, {"INC", AM_A , RW}, {"NOP", AM_1 , 0 }, // EC .. EF
|
||||
{"BEQ", AM_R , 0}, {"SBC", AM_NZY, R_}, {"SBC", AM_NZ , 0}, {"NOP", AM_1 , 0 }, // F0 .. F3
|
||||
{"NOP", AM_2 , 0}, {"SBC", AM_ZX , R_}, {"INC", AM_ZX , RW}, {"NOP", AM_1 , 0 }, // F4 .. F7
|
||||
{"NOP", AM_2 , 0}, {"SBC", AM_ZX , R_}, {"INC", AM_ZX , RW}, {"???", AM_ZX , 0 }, // F4 .. F7
|
||||
{"SED", 0 , 0}, {"SBC", AM_AY , R_}, {"PLX", 0 , 0}, {"NOP", AM_1 , 0 }, // F8 .. FB
|
||||
{"NOP", AM_3 , 0}, {"SBC", AM_AX , R_}, {"INC", AM_AX , RW}, {"NOP", AM_1 , 0 } // FF .. FF
|
||||
};
|
||||
@ -274,272 +273,11 @@ Fx BEQ r SBC (d),Y sbc (d) --- --- SBC d,X INC d,X --- SED SBC a,Y
|
||||
{"INX", 0 , 0}, {"SBC", AM_M , R_}, {"NOP", 0 , 0}, {"NOP", AM_1 , 0 }, // E8 .. EB
|
||||
{"CPX", AM_A , R_}, {"SBC", AM_A , R_}, {"INC", AM_A , RW}, {"NOP", AM_1 , 0 }, // EC .. EF
|
||||
{"BEQ", AM_R , 0}, {"SBC", AM_NZY, R_}, {"SBC", AM_NZ , 0}, {"NOP", AM_1 , 0 }, // F0 .. F3
|
||||
{"NOP", AM_2 , 0}, {"SBC", AM_ZX , R_}, {"INC", AM_ZX , RW}, {"NOP", AM_1 , 0 }, // F4 .. F7
|
||||
{"NOP", AM_2 , 0}, {"SBC", AM_ZX , R_}, {"INC", AM_ZX , RW}, {"???", AM_ZX , 0 }, // F4 .. F7
|
||||
{"SED", 0 , 0}, {"SBC", AM_AY , R_}, {"PLX", 0 , 0}, {"NOP", AM_1 , 0 }, // F8 .. FB
|
||||
{"NOP", AM_3 , 0}, {"SBC", AM_AX , R_}, {"INC", AM_AX , RW}, {"NOP", AM_1 , 0 } // FF .. FF
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
// x3 x7 xB xF are never used
|
||||
{TEXT("BRK"), 0 , 0 }, // 00h
|
||||
{TEXT("ORA"), ADDR_INDX , R_ }, // 01h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // 02h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 03h
|
||||
{TEXT("TSB"), ADDR_ZP , _W }, // 04h // 65C02
|
||||
{TEXT("ORA"), ADDR_ZP , R_ }, // 05h
|
||||
{TEXT("ASL"), ADDR_ZP , _W }, // 06h // MEM_R ?
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 07h
|
||||
{TEXT("PHP"), 0 , SW }, // 08h
|
||||
{TEXT("ORA"), ADDR_IMM , im }, // 09h
|
||||
{TEXT("ASL"), 0 , 0 }, // 0Ah // MEM_IMPLICIT
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 0Bh
|
||||
{TEXT("TSB"), ADDR_ABS , _W }, // 0Ch // 65C02
|
||||
{TEXT("ORA"), ADDR_ABS , R_ }, // 0Dh
|
||||
{TEXT("ASL"), ADDR_ABS , _W }, // 0Eh // MEM_R ?
|
||||
{TEXT("NOP"), ADDR_INVALID3 , 0 }, // 0Fh
|
||||
{TEXT("BPL"), ADDR_REL , 0 }, // 10h // signed: BGE @reference: http://www.6502.org/tutorials/compare_instructions.html
|
||||
{TEXT("ORA"), ADDR_INDY , R_ }, // 11h
|
||||
{TEXT("ORA"), ADDR_IZPG , R_ }, // 12h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 13h
|
||||
{TEXT("TRB"), ADDR_ZP , _W }, // 14h
|
||||
{TEXT("ORA"), ADDR_ZP_X , R_ }, // 15h
|
||||
{TEXT("ASL"), ADDR_ZP_X , _W }, // 16h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 17h
|
||||
{TEXT("CLC"), 0 , 0 }, // 18h
|
||||
{TEXT("ORA"), ADDR_ABSY , R_ }, // 19h
|
||||
{TEXT("INA"), 0 , 0 }, // 1Ah INC A
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 1Bh
|
||||
{TEXT("TRB"), ADDR_ABS , _W }, // 1Ch
|
||||
{TEXT("ORA"), ADDR_ABSX , R_ }, // 1Dh
|
||||
{TEXT("ASL"), ADDR_ABSX }, // 1Eh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 1Fh
|
||||
{TEXT("JSR"), ADDR_ABS }, // 20h
|
||||
{TEXT("AND"), ADDR_INDX }, // 21h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // 22h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 23h
|
||||
{TEXT("BIT"), ADDR_ZP }, // 24h
|
||||
{TEXT("AND"), ADDR_ZP }, // 25h
|
||||
{TEXT("ROL"), ADDR_ZP }, // 26h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 27h
|
||||
{TEXT("PLP"), 0 }, // 28h
|
||||
{TEXT("AND"), ADDR_IMM }, // 29h
|
||||
{TEXT("ROL"), 0 }, // 2Ah
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 2Bh
|
||||
{TEXT("BIT"), ADDR_ABS }, // 2Ch
|
||||
{TEXT("AND"), ADDR_ABS }, // 2Dh
|
||||
{TEXT("ROL"), ADDR_ABS }, // 2Eh
|
||||
{TEXT("NOP"), ADDR_INVALID3 , 0 }, // 2Fh
|
||||
{TEXT("BMI"), ADDR_REL }, // 30h
|
||||
{TEXT("AND"), ADDR_INDY }, // 31h
|
||||
{TEXT("AND"), ADDR_IZPG }, // 32h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 33h
|
||||
{TEXT("BIT"), ADDR_ZP_X }, // 34h
|
||||
{TEXT("AND"), ADDR_ZP_X }, // 35h
|
||||
{TEXT("ROL"), ADDR_ZP_X }, // 36h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 37h
|
||||
{TEXT("SEC"), 0 }, // 38h
|
||||
{TEXT("AND"), ADDR_ABSY }, // 39h
|
||||
{TEXT("DEA"), 0 }, // 3Ah
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 3Bh
|
||||
{TEXT("BIT"), ADDR_ABSX }, // 3Ch
|
||||
{TEXT("AND"), ADDR_ABSX }, // 3Dh
|
||||
{TEXT("ROL"), ADDR_ABSX }, // 3Eh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 3Fh
|
||||
{TEXT("RTI"), 0 , 0 }, // 40h
|
||||
{TEXT("EOR"), ADDR_INDX }, // 41h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // 42h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 43h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // 44h
|
||||
{TEXT("EOR"), ADDR_ZP }, // 45h
|
||||
{TEXT("LSR"), ADDR_ZP , _W }, // 46h // MEM_R ?
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 47h
|
||||
{TEXT("PHA"), 0 }, // 48h // MEM_WRITE_IMPLIED | MEM_STACK
|
||||
{TEXT("EOR"), ADDR_IMM }, // 49h
|
||||
{TEXT("LSR"), 0 }, // 4Ah
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 4Bh
|
||||
{TEXT("JMP"), ADDR_ABS }, // 4Ch
|
||||
{TEXT("EOR"), ADDR_ABS }, // 4Dh
|
||||
{TEXT("LSR"), ADDR_ABS , _W }, // 4Eh // MEM_R ?
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 4Fh
|
||||
{TEXT("BVC"), ADDR_REL }, // 50h
|
||||
{TEXT("EOR"), ADDR_INDY }, // 51h
|
||||
{TEXT("EOR"), ADDR_IZPG }, // 52h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 53h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // 54h
|
||||
{TEXT("EOR"), ADDR_ZP_X }, // 55h
|
||||
{TEXT("LSR"), ADDR_ZP_X , _W }, // 56h // MEM_R ?
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 57h
|
||||
{TEXT("CLI"), 0 }, // 58h
|
||||
{TEXT("EOR"), ADDR_ABSY }, // 59h
|
||||
{TEXT("PHY"), 0 }, // 5Ah
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 5Bh
|
||||
{TEXT("NOP"), ADDR_INVALID3 , 0 }, // 5Ch
|
||||
{TEXT("EOR"), ADDR_ABSX }, // 5Dh
|
||||
{TEXT("LSR"), ADDR_ABSX }, // 5Eh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 5Fh
|
||||
{TEXT("RTS"), 0 , SR }, // 60h
|
||||
{TEXT("ADC"), ADDR_INDX }, // 61h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // 62h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 63h
|
||||
{TEXT("STZ"), ADDR_ZP }, // 64h
|
||||
{TEXT("ADC"), ADDR_ZP }, // 65h
|
||||
{TEXT("ROR"), ADDR_ZP }, // 66h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 67h
|
||||
{TEXT("PLA"), 0 , SW }, // 68h
|
||||
{TEXT("ADC"), ADDR_IMM }, // 69h
|
||||
{TEXT("ROR"), 0 }, // 6Ah
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 6Bh
|
||||
{TEXT("JMP"), ADDR_IABS }, // 6Ch
|
||||
{TEXT("ADC"), ADDR_ABS }, // 6Dh
|
||||
{TEXT("ROR"), ADDR_ABS }, // 6Eh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 6Fh
|
||||
{TEXT("BVS"), ADDR_REL }, // 70h
|
||||
{TEXT("ADC"), ADDR_INDY }, // 71h
|
||||
{TEXT("ADC"), ADDR_IZPG }, // 72h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 73h
|
||||
{TEXT("STZ"), ADDR_ZP_X }, // 74h
|
||||
{TEXT("ADC"), ADDR_ZP_X }, // 75h
|
||||
{TEXT("ROR"), ADDR_ZP_X }, // 76h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 77h
|
||||
{TEXT("SEI"), 0 }, // 78h
|
||||
{TEXT("ADC"), ADDR_ABSY }, // 79h
|
||||
{TEXT("PLY"), 0 , SR }, // 7Ah
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 7Bh
|
||||
{TEXT("JMP"), ADDR_ABSIINDX }, // 7Ch
|
||||
{TEXT("ADC"), ADDR_ABSX }, // 7Dh
|
||||
{TEXT("ROR"), ADDR_ABSX }, // 7Eh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 7Fh
|
||||
{TEXT("BRA"), ADDR_REL }, // 80h
|
||||
{TEXT("STA"), ADDR_INDX , _W }, // 81h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // 82h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 83h
|
||||
{TEXT("STY"), ADDR_ZP , _W }, // 84h
|
||||
{TEXT("STA"), ADDR_ZP , _W }, // 85h
|
||||
{TEXT("STX"), ADDR_ZP , _W }, // 86h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 87h
|
||||
{TEXT("DEY"), 0 , 0 }, // 88h // Explicit
|
||||
{TEXT("BIT"), ADDR_IMM }, // 89h
|
||||
{TEXT("TXA"), 0 , 0 }, // 8Ah // Explicit
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 8Bh
|
||||
{TEXT("STY"), ADDR_ABS , _W }, // 8Ch
|
||||
{TEXT("STA"), ADDR_ABS , _W }, // 8Dh
|
||||
{TEXT("STX"), ADDR_ABS , _W }, // 8Eh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 8Fh
|
||||
{TEXT("BCC"), ADDR_REL , 0 }, // 90h // MEM_IMMEDIATE
|
||||
{TEXT("STA"), ADDR_INDY , _W }, // 91h
|
||||
{TEXT("STA"), ADDR_IZPG , _W }, // 92h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 93h
|
||||
{TEXT("STY"), ADDR_ZP_X , _W }, // 94h
|
||||
{TEXT("STA"), ADDR_ZP_X , _W }, // 95h
|
||||
{TEXT("STX"), ADDR_ZP_Y , _W }, // 96h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 97h
|
||||
{TEXT("TYA"), 0 , 0 }, // 98h // Explicit
|
||||
{TEXT("STA"), ADDR_ABSY , _W }, // 99h
|
||||
{TEXT("TXS"), 0 , 0 }, // 9Ah // EXplicit
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 9Bh
|
||||
{TEXT("STZ"), ADDR_ABS , _W }, // 9Ch
|
||||
{TEXT("STA"), ADDR_ABSX , _W }, // 9Dh
|
||||
{TEXT("STZ"), ADDR_ABSX , _W }, // 9Eh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // 9Fh
|
||||
{TEXT("LDY"), ADDR_IMM , 0 }, // A0h // MEM_IMMEDIATE
|
||||
{TEXT("LDA"), ADDR_INDX , R_ }, // A1h
|
||||
{TEXT("LDX"), ADDR_IMM , 0 }, // A2h // MEM_IMMEDIATE
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // A3h
|
||||
{TEXT("LDY"), ADDR_ZP , R_ }, // A4h
|
||||
{TEXT("LDA"), ADDR_ZP , R_ }, // A5h
|
||||
{TEXT("LDX"), ADDR_ZP , R_ }, // A6h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // A7h
|
||||
{TEXT("TAY"), 0 , 0 }, // A8h // Explicit
|
||||
{TEXT("LDA"), ADDR_IMM , 0 }, // A9h // MEM_IMMEDIATE
|
||||
{TEXT("TAX"), 0 , 0 }, // AAh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // ABh
|
||||
{TEXT("LDY"), ADDR_ABS , R_ }, // ACh
|
||||
{TEXT("LDA"), ADDR_ABS , R_ }, // ADh
|
||||
{TEXT("LDX"), ADDR_ABS , R_ }, // AEh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // AFh
|
||||
{TEXT("BCS"), ADDR_REL , 0 }, // B0h // MEM_IMMEDIATE // unsigned: BGE
|
||||
{TEXT("LDA"), ADDR_INDY , R_ }, // B1h
|
||||
{TEXT("LDA"), ADDR_IZPG , R_ }, // B2h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // B3h
|
||||
{TEXT("LDY"), ADDR_ZP_X , R_ }, // B4h
|
||||
{TEXT("LDA"), ADDR_ZP_X , R_ }, // B5h
|
||||
{TEXT("LDX"), ADDR_ZP_Y , R_ }, // B6h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // B7h
|
||||
{TEXT("CLV"), 0 , 0 }, // B8h // Explicit
|
||||
{TEXT("LDA"), ADDR_ABSY , R_ }, // B9h
|
||||
{TEXT("TSX"), 0 , 0 }, // BAh // Explicit
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // BBh
|
||||
{TEXT("LDY"), ADDR_ABSX , R_ }, // BCh
|
||||
{TEXT("LDA"), ADDR_ABSX , R_ }, // BDh
|
||||
{TEXT("LDX"), ADDR_ABSY , R_ }, // BEh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // BFh
|
||||
{TEXT("CPY"), ADDR_IMM }, // C0h
|
||||
{TEXT("CMP"), ADDR_INDX }, // C1h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // C2h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // C3h
|
||||
{TEXT("CPY"), ADDR_ZP }, // C4h
|
||||
{TEXT("CMP"), ADDR_ZP }, // C5h
|
||||
{TEXT("DEC"), ADDR_ZP }, // C6h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // C7h
|
||||
{TEXT("INY"), 0 }, // C8h
|
||||
{TEXT("CMP"), ADDR_IMM }, // C9h
|
||||
{TEXT("DEX"), 0 }, // CAh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // CBh
|
||||
{TEXT("CPY"), ADDR_ABS }, // CCh
|
||||
{TEXT("CMP"), ADDR_ABS }, // CDh
|
||||
{TEXT("DEC"), ADDR_ABS }, // CEh
|
||||
{TEXT("NOP"), ADDR_INVALID1 }, // CFh
|
||||
{TEXT("BNE"), ADDR_REL }, // D0h
|
||||
{TEXT("CMP"), ADDR_INDY }, // D1h
|
||||
{TEXT("CMP"), ADDR_IZPG }, // D2h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // D3h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // D4h
|
||||
{TEXT("CMP"), ADDR_ZP_X }, // D5h
|
||||
{TEXT("DEC"), ADDR_ZP_X }, // D6h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // D7h
|
||||
{TEXT("CLD"), 0 }, // D8h
|
||||
{TEXT("CMP"), ADDR_ABSY }, // D9h
|
||||
{TEXT("PHX"), 0 }, // DAh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // DBh
|
||||
{TEXT("NOP"), ADDR_INVALID3 , 0 }, // DCh
|
||||
{TEXT("CMP"), ADDR_ABSX }, // DDh
|
||||
{TEXT("DEC"), ADDR_ABSX }, // DEh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // DFh
|
||||
{TEXT("CPX"), ADDR_IMM }, // E0h
|
||||
{TEXT("SBC"), ADDR_INDX }, // E1h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // E2h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // E3h
|
||||
{TEXT("CPX"), ADDR_ZP }, // E4h
|
||||
{TEXT("SBC"), ADDR_ZP }, // E5h
|
||||
{TEXT("INC"), ADDR_ZP }, // E6h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // E7h
|
||||
{TEXT("INX"), 0 }, // E8h
|
||||
{TEXT("SBC"), ADDR_IMM }, // E9h
|
||||
{TEXT("NOP"), 0 , 0 }, // EAh
|
||||
{TEXT("NOP"), ADDR_INVALID1 }, // EBh
|
||||
{TEXT("CPX"), ADDR_ABS }, // ECh
|
||||
{TEXT("SBC"), ADDR_ABS }, // EDh
|
||||
{TEXT("INC"), ADDR_ABS }, // EEh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // EFh
|
||||
{TEXT("BEQ"), ADDR_REL }, // F0h
|
||||
{TEXT("SBC"), ADDR_INDY }, // F1h
|
||||
{TEXT("SBC"), ADDR_IZPG }, // F2h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // F3h
|
||||
{TEXT("NOP"), ADDR_INVALID2 , 0 }, // F4h
|
||||
{TEXT("SBC"), ADDR_ZP_X }, // F5h
|
||||
{TEXT("INC"), ADDR_ZP_X }, // F6h
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // F7h
|
||||
{TEXT("SED"), 0 }, // F8h
|
||||
{TEXT("SBC"), ADDR_ABSY }, // F9h
|
||||
{TEXT("PLX"), 0 }, // FAh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 }, // FBh
|
||||
{TEXT("NOP"), ADDR_INVALID3 , 0 }, // FCh
|
||||
{TEXT("SBC"), ADDR_ABSX }, // FDh
|
||||
{TEXT("INC"), ADDR_ABSX }, // FEh
|
||||
{TEXT("NOP"), ADDR_INVALID1 , 0 } // FFh
|
||||
};
|
||||
*/
|
||||
#undef R_
|
||||
#undef _W
|
||||
#undef RW
|
||||
|
@ -516,7 +516,7 @@ void DrawBreakpoints (HDC dc, int line)
|
||||
rect.bottom += g_nFontHeight;
|
||||
|
||||
int iBreakpoint;
|
||||
for (iBreakpoint = 0; iBreakpoint < MAX_BREAKPOINTS; iBreakpoint++ )
|
||||
for (iBreakpoint = 0; iBreakpoint < NUM_BREAKPOINTS; iBreakpoint++ )
|
||||
{
|
||||
Breakpoint_t *pBP = &g_aBreakpoints[iBreakpoint];
|
||||
WORD nLength = pBP->nLength;
|
||||
|
@ -431,7 +431,7 @@ Update_t CmdHelpSpecific (int nArgs)
|
||||
break;
|
||||
// Breakpoints
|
||||
case CMD_BREAKPOINT:
|
||||
wsprintf( sText, " Maximum breakpoints are: %d", MAX_BREAKPOINTS );
|
||||
wsprintf( sText, " Maximum breakpoints are: %d", NUM_BREAKPOINTS );
|
||||
ConsoleBufferPush( sText );
|
||||
break;
|
||||
case CMD_BREAKPOINT_ADD_REG:
|
||||
|
@ -136,7 +136,7 @@
|
||||
|
||||
enum
|
||||
{
|
||||
MAX_BREAKPOINTS = 5
|
||||
NUM_BREAKPOINTS = 5
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user