mirror of https://github.com/stella-emu/stella.git
Disassembly now shows symbolic names from VCS.H
git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@494 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
780422bd42
commit
5e911f1453
|
@ -13,7 +13,7 @@
|
|||
## See the file "license" for information on usage and redistribution of
|
||||
## this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
##
|
||||
## $Id: makefile,v 1.94 2005-06-14 01:11:47 stephena Exp $
|
||||
## $Id: makefile,v 1.95 2005-06-14 01:55:47 urchlay Exp $
|
||||
##============================================================================
|
||||
|
||||
##============================================================================
|
||||
|
@ -164,7 +164,7 @@ GUI_OBJS = Font.o Menu.o Launcher.o \
|
|||
ProgressDialog.o \
|
||||
DebuggerDialog.o PromptWidget.o CheatWidget.o
|
||||
|
||||
DBG_OBJS = Debugger.o DebuggerParser.o
|
||||
DBG_OBJS = Debugger.o DebuggerParser.o EquateList.o
|
||||
|
||||
CORE_OBJS = Booster.o Cart.o Cart2K.o Cart3F.o Cart4K.o CartAR.o CartDPC.o \
|
||||
CartE0.o CartE7.o CartF4.o CartF4SC.o CartF6.o CartF6SC.o \
|
||||
|
@ -470,3 +470,6 @@ Debugger.o: $(DBG)/Debugger.cxx $(DBG)/Debugger.hxx
|
|||
|
||||
DebuggerParser.o: $(DBG)/DebuggerParser.cxx $(DBG)/DebuggerParser.hxx
|
||||
$(CXX) -c $(FLAGS) $(OPTIONS) $(LDFLAGS) $(DBG)/DebuggerParser.cxx
|
||||
|
||||
EquateList.o: $(DBG)/EquateList.cxx $(DBG)/EquateList.hxx $(DBG)/Equate.hxx
|
||||
$(CXX) -c $(FLAGS) $(OPTIONS) $(LDFLAGS) $(DBG)/EquateList.cxx
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
|
||||
#ifndef EQUATE_HXX
|
||||
#define EQUATE_HXX
|
||||
|
||||
struct Equate {
|
||||
char *label;
|
||||
int address;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,111 @@
|
|||
|
||||
#include "bspf.hxx"
|
||||
#include "Equate.hxx"
|
||||
#include "EquateList.hxx"
|
||||
|
||||
// built in labels
|
||||
static struct Equate ourVcsEquates[] = {
|
||||
{ "VSYNC", 0x00 },
|
||||
{ "VBLANK", 0x01 },
|
||||
{ "WSYNC", 0x02 },
|
||||
{ "RSYNC", 0x03 },
|
||||
{ "NUSIZ0", 0x04 },
|
||||
{ "NUSIZ1", 0x05 },
|
||||
{ "COLUP0", 0x06 },
|
||||
{ "COLUP1", 0x07 },
|
||||
{ "COLUPF", 0x08 },
|
||||
{ "COLUBK", 0x09 },
|
||||
{ "CTRLPF", 0x0A },
|
||||
{ "REFP0", 0x0B },
|
||||
{ "REFP1", 0x0C },
|
||||
{ "PF0", 0x0D },
|
||||
{ "PF1", 0x0E },
|
||||
{ "PF2", 0x0F },
|
||||
{ "RESP0", 0x10 },
|
||||
{ "RESP1", 0x11 },
|
||||
{ "RESM0", 0x12 },
|
||||
{ "RESM1", 0x13 },
|
||||
{ "RESBL", 0x14 },
|
||||
{ "AUDC0", 0x15 },
|
||||
{ "AUDC1", 0x16 },
|
||||
{ "AUDF0", 0x17 },
|
||||
{ "AUDF1", 0x18 },
|
||||
{ "AUDV0", 0x19 },
|
||||
{ "AUDV1", 0x1A },
|
||||
{ "GRP0", 0x1B },
|
||||
{ "GRP1", 0x1C },
|
||||
{ "ENAM0", 0x1D },
|
||||
{ "ENAM1", 0x1E },
|
||||
{ "ENABL", 0x1F },
|
||||
{ "HMP0", 0x20 },
|
||||
{ "HMP1", 0x21 },
|
||||
{ "HMM0", 0x22 },
|
||||
{ "HMM1", 0x23 },
|
||||
{ "HMBL", 0x24 },
|
||||
{ "VDELP0", 0x25 },
|
||||
{ "VDEL01", 0x26 },
|
||||
{ "VDELP1", 0x26 },
|
||||
{ "VDELBL", 0x27 },
|
||||
{ "RESMP0", 0x28 },
|
||||
{ "RESMP1", 0x29 },
|
||||
{ "HMOVE", 0x2A },
|
||||
{ "HMCLR", 0x2B },
|
||||
{ "CXCLR", 0x2C },
|
||||
{ "CXM0P", 0x30 },
|
||||
{ "CXM1P", 0x31 },
|
||||
{ "CXP0FB", 0x32 },
|
||||
{ "CXP1FB", 0x33 },
|
||||
{ "CXM0FB", 0x34 },
|
||||
{ "CXM1FB", 0x35 },
|
||||
{ "CXBLPF", 0x36 },
|
||||
{ "CXPPMM", 0x37 },
|
||||
{ "INPT0", 0x38 },
|
||||
{ "INPT1", 0x39 },
|
||||
{ "INPT2", 0x3A },
|
||||
{ "INPT3", 0x3B },
|
||||
{ "INPT4", 0x3C },
|
||||
{ "INPT5", 0x3D },
|
||||
{ "SWCHA", 0x0280 },
|
||||
{ "SWCHB", 0x0282 },
|
||||
{ "SWACNT", 0x281 },
|
||||
{ "SWBCNT", 0x283 },
|
||||
{ "INTIM", 0x0284 },
|
||||
{ "TIM1T", 0x0294 },
|
||||
{ "TIM8T", 0x0295 },
|
||||
{ "TIM64T", 0x0296 },
|
||||
{ "TIM1024T", 0x0297 },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
EquateList::EquateList() {
|
||||
}
|
||||
|
||||
// FIXME: use something smarter than a linear search in the future.
|
||||
char *EquateList::getLabel(int addr) {
|
||||
for(int i=0; ourVcsEquates[i].label != NULL; i++)
|
||||
if(ourVcsEquates[i].address == addr)
|
||||
return ourVcsEquates[i].label;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// returns either the label, or a formatted hex string
|
||||
// if no label found.
|
||||
char *EquateList::getFormatted(int addr, int places) {
|
||||
static char fmt[10], buf[255];
|
||||
char *res = getLabel(addr);
|
||||
if(res != NULL)
|
||||
return res;
|
||||
|
||||
sprintf(fmt, "$%%0%dx", places);
|
||||
sprintf(buf, fmt, addr);
|
||||
return buf;
|
||||
}
|
||||
|
||||
int EquateList::getAddress(char *label) {
|
||||
for(int i=0; ourVcsEquates[i].label != NULL; i++)
|
||||
if( strcmp(ourVcsEquates[i].label, label) == 0 )
|
||||
return ourVcsEquates[i].address;
|
||||
|
||||
return -1;
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
|
||||
#ifndef EQUATELIST_HXX
|
||||
#define EQUATELIST_HXX
|
||||
|
||||
class EquateList {
|
||||
public:
|
||||
EquateList();
|
||||
char *getLabel(int addr);
|
||||
char *EquateList::getFormatted(int addr, int places);
|
||||
int getAddress(char *label);
|
||||
};
|
||||
|
||||
#endif
|
|
@ -13,23 +13,26 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: D6502.cxx,v 1.3 2005-06-13 13:35:09 urchlay Exp $
|
||||
// $Id: D6502.cxx,v 1.4 2005-06-14 01:55:52 urchlay Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <stdio.h>
|
||||
#include "D6502.hxx"
|
||||
#include "M6502.hxx"
|
||||
#include "System.hxx"
|
||||
#include "EquateList.hxx"
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
D6502::D6502(System* system)
|
||||
: mySystem(system)
|
||||
{
|
||||
equateList = new EquateList();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
D6502::~D6502()
|
||||
{
|
||||
delete equateList;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -53,20 +56,20 @@ uInt16 D6502::disassemble(uInt16 address, char* buffer)
|
|||
switch(M6502::ourAddressingModeTable[opcode])
|
||||
{
|
||||
case M6502::Absolute:
|
||||
sprintf(buffer, "%s $%04X ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
dpeek(mySystem, address + 1),
|
||||
sprintf(buffer, "%s %s ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
equateList->getFormatted(dpeek(mySystem, address + 1), 4),
|
||||
M6502::ourInstructionProcessorCycleTable[opcode]);
|
||||
return 3;
|
||||
|
||||
case M6502::AbsoluteX:
|
||||
sprintf(buffer, "%s $%04X,x ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
dpeek(mySystem, address + 1),
|
||||
sprintf(buffer, "%s %s,x ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
equateList->getFormatted(dpeek(mySystem, address + 1), 4),
|
||||
M6502::ourInstructionProcessorCycleTable[opcode]);
|
||||
return 3;
|
||||
|
||||
case M6502::AbsoluteY:
|
||||
sprintf(buffer, "%s $%04X,y ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
dpeek(mySystem, address + 1),
|
||||
sprintf(buffer, "%s %s,y ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
equateList->getFormatted(dpeek(mySystem, address + 1), 4),
|
||||
M6502::ourInstructionProcessorCycleTable[opcode]);
|
||||
return 3;
|
||||
|
||||
|
@ -114,14 +117,14 @@ uInt16 D6502::disassemble(uInt16 address, char* buffer)
|
|||
return 2;
|
||||
|
||||
case M6502::ZeroX:
|
||||
sprintf(buffer, "%s $%02X,x ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
mySystem->peek(address + 1),
|
||||
sprintf(buffer, "%s %s,x ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
equateList->getFormatted(dpeek(mySystem, address + 1), 2),
|
||||
M6502::ourInstructionProcessorCycleTable[opcode]);
|
||||
return 2;
|
||||
|
||||
case M6502::ZeroY:
|
||||
sprintf(buffer, "%s $%02X,y ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
mySystem->peek(address + 1),
|
||||
sprintf(buffer, "%s %s,y ; %d", M6502::ourInstructionMnemonicTable[opcode],
|
||||
equateList->getFormatted(dpeek(mySystem, address + 1), 2),
|
||||
M6502::ourInstructionProcessorCycleTable[opcode]);
|
||||
return 2;
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: D6502.hxx,v 1.2 2005-06-13 02:47:44 urchlay Exp $
|
||||
// $Id: D6502.hxx,v 1.3 2005-06-14 01:55:52 urchlay Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef D6502_HXX
|
||||
|
@ -24,13 +24,14 @@ class M6502;
|
|||
class System;
|
||||
|
||||
#include "bspf.hxx"
|
||||
#include "EquateList.hxx"
|
||||
|
||||
/**
|
||||
This is a base class for 6502 debuggers. This class provides the
|
||||
basic functionality needed for interactive debuggers.
|
||||
|
||||
@author Bradford W. Mott
|
||||
@version $Id: D6502.hxx,v 1.2 2005-06-13 02:47:44 urchlay Exp $
|
||||
@version $Id: D6502.hxx,v 1.3 2005-06-14 01:55:52 urchlay Exp $
|
||||
*/
|
||||
class D6502
|
||||
{
|
||||
|
@ -149,6 +150,7 @@ class D6502
|
|||
protected:
|
||||
// Pointer to the system I'm debugging
|
||||
System* mySystem;
|
||||
EquateList *equateList;
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue