mirror of https://github.com/stella-emu/stella.git
Sub2K ROMs now show only the actual data in the binary. This allows
the saved disassembly to be compiled to the exact same binary. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@2669 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
895fd7b263
commit
467ac0a280
|
@ -21,12 +21,17 @@
|
|||
accurate. It also automatically differentiates between
|
||||
CODE/PGFX/GFX/DATA/ROW areas, whereas normal Distella
|
||||
only differentiates between CODE/GFX/ROW. For now, only
|
||||
single-bank (4K) ROMs are supported.
|
||||
single-bank (4K and smaller) ROMs are supported.
|
||||
|
||||
- The disassembly now recognizes various TIA read/write mirrors,
|
||||
and marks them as such (for example, INPT4.30 instead of INPT4
|
||||
for address $3C).
|
||||
|
||||
- ROMS less than 2K in size (so called 'Sub2K' ROMs) now show only
|
||||
the actual data in the binary. This means, for example, that a
|
||||
256byte ROM will show only 256 bytes in the disassembly, instead
|
||||
of padding garbage/duplicated data to 2K boundary.
|
||||
|
||||
- Fixed labelling in ROW directives; it wasn't accurately setting
|
||||
a label in the case where it occurred in the middle of the data.
|
||||
|
||||
|
|
|
@ -47,12 +47,16 @@ CartDebug::CartDebug(Debugger& dbg, Console& console, const OSystem& osystem)
|
|||
addRamArea(i->start, i->size, i->roffset, i->woffset);
|
||||
|
||||
// Create bank information for each potential bank, and an extra one for ZP RAM
|
||||
uInt16 banksize =
|
||||
!BSPF_equalsIgnoreCase(myConsole.cartridge().name(), "Cartridge2K") ? 4096 : 2048;
|
||||
// Banksizes greater than 4096 indicate multi-bank ROMs, but we handle only
|
||||
// 4K pieces at a time
|
||||
// Banksizes less than 4K use the actual value
|
||||
int banksize = 4096;
|
||||
myConsole.cartridge().getImage(banksize);
|
||||
banksize = BSPF_min(banksize, 4096);
|
||||
BankInfo info;
|
||||
for(int i = 0; i < myConsole.cartridge().bankCount(); ++i)
|
||||
{
|
||||
info.size = banksize; // TODO - get this from Cart class
|
||||
info.size = banksize;
|
||||
myBankInfo.push_back(info);
|
||||
}
|
||||
info.size = 128; // ZP RAM
|
||||
|
|
|
@ -43,6 +43,7 @@ DiStella::DiStella(const CartDebug& dbg, CartDebug::DisassemblyList& list,
|
|||
CartDebug::AddressList::iterator it = addresses.begin();
|
||||
uInt16 start = *it++;
|
||||
|
||||
myOffset = info.offset;
|
||||
if(start & 0x1000)
|
||||
{
|
||||
if(info.size == 4096) // 4K ROM space
|
||||
|
@ -56,38 +57,37 @@ DiStella::DiStella(const CartDebug& dbg, CartDebug::DisassemblyList& list,
|
|||
Offset to code = $D000
|
||||
Code range = $D000-$DFFF
|
||||
=============================================*/
|
||||
myAppData.start = 0x0000;
|
||||
myAppData.end = 0x0FFF;
|
||||
myOffset = (start - (start % 0x1000));
|
||||
info.start = myAppData.start = 0x0000;
|
||||
info.end = myAppData.end = 0x0FFF;
|
||||
|
||||
// Keep previous offset; it may be different between banks
|
||||
if(info.offset == 0)
|
||||
info.offset = myOffset = (start - (start % 0x1000));
|
||||
}
|
||||
else // 2K ROM space
|
||||
else // 2K ROM space (also includes 'Sub2K' ROMs)
|
||||
{
|
||||
/*============================================
|
||||
The offset is the address where the code segment
|
||||
starts. For a 2K game, it is usually 0xf800,
|
||||
but can also be 0xf000.
|
||||
=============================================*/
|
||||
myAppData.start = 0x0000;
|
||||
myAppData.end = 0x07FF;
|
||||
myOffset = (start & 0xF800);
|
||||
info.start = myAppData.start = 0x0000;
|
||||
info.end = myAppData.end = info.size - 1;
|
||||
info.offset = myOffset = (start - (start % info.size));
|
||||
}
|
||||
}
|
||||
else // ZP RAM
|
||||
{
|
||||
// For now, we assume all accesses below $1000 are zero-page
|
||||
myAppData.start = 0x0080;
|
||||
myAppData.end = 0x00FF;
|
||||
myOffset = 0;
|
||||
info.start = myAppData.start = 0x0080;
|
||||
info.end = myAppData.end = 0x00FF;
|
||||
info.offset = myOffset = 0;
|
||||
|
||||
// Resolve data is never used in ZP RAM mode
|
||||
resolvedata = false;
|
||||
}
|
||||
myAppData.length = info.size;
|
||||
|
||||
info.start = myAppData.start;
|
||||
info.end = myAppData.end;
|
||||
info.offset = myOffset;
|
||||
|
||||
memset(myLabels, 0, 0x1000);
|
||||
memset(myDirectives, 0, 0x1000);
|
||||
myAddressQueue.push(start);
|
||||
|
|
Loading…
Reference in New Issue