|
@@ -282,6 +282,49 @@ void DisasmViewer::setCursorAddress(quint16 addr, int infoLine, int method)
|
|
|
setAddress(addr, infoLine, method);
|
|
|
}
|
|
|
|
|
|
+void DisasmViewer::refresh(int addr, int infoLine, int method)
|
|
|
+{
|
|
|
+ if (addr == -1) {
|
|
|
+ addr = cursorAddr;
|
|
|
+ }
|
|
|
+
|
|
|
+ // determine disasm bounds
|
|
|
+ int disasmStart;
|
|
|
+ int disasmEnd;
|
|
|
+ int extra = 4 * (visibleLines > 9 ? visibleLines+partialBottomLine : 10);
|
|
|
+ switch (method) {
|
|
|
+ case Middle:
|
|
|
+ case MiddleAlways:
|
|
|
+ disasmStart = addr - 3 * extra / 2;
|
|
|
+ disasmEnd = addr + 3 * extra / 2;
|
|
|
+ break;
|
|
|
+ case Bottom:
|
|
|
+ case BottomAlways:
|
|
|
+ disasmStart = addr - 2 * extra;
|
|
|
+ disasmEnd = addr + extra;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ disasmStart = addr - extra;
|
|
|
+ disasmEnd = addr + 2 * extra;
|
|
|
+ }
|
|
|
+ disasmStart = std::max(disasmStart, 0);
|
|
|
+ disasmEnd = std::min(disasmEnd, 0xFFFF);
|
|
|
+
|
|
|
+ CommMemoryRequest* req = new CommMemoryRequest(
|
|
|
+ disasmStart, disasmEnd - disasmStart + 1, &memory[disasmStart], *this);
|
|
|
+ req->address = addr;
|
|
|
+ req->line = infoLine;
|
|
|
+ req->method = method;
|
|
|
+
|
|
|
+ if (waitingForData) {
|
|
|
+ delete nextRequest;
|
|
|
+ nextRequest = req;
|
|
|
+ } else {
|
|
|
+ waitingForData = true;
|
|
|
+ CommClient::instance().sendCommand(req);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void DisasmViewer::setAddress(quint16 addr, int infoLine, int method)
|
|
|
{
|
|
|
int line = findDisasmLine(addr, infoLine);
|
|
@@ -347,41 +390,7 @@ void DisasmViewer::setAddress(quint16 addr, int infoLine, int method)
|
|
|
// This means that a new block of memory must be transfered from
|
|
|
// openMSX and disassembled.
|
|
|
|
|
|
- // determine disasm bounds
|
|
|
- int disasmStart;
|
|
|
- int disasmEnd;
|
|
|
- int extra = 4 * (visibleLines > 9 ? visibleLines+partialBottomLine : 10);
|
|
|
- switch (method) {
|
|
|
- case Middle:
|
|
|
- case MiddleAlways:
|
|
|
- disasmStart = addr - 3 * extra / 2;
|
|
|
- disasmEnd = addr + 3 * extra / 2;
|
|
|
- break;
|
|
|
- case Bottom:
|
|
|
- case BottomAlways:
|
|
|
- disasmStart = addr - 2 * extra;
|
|
|
- disasmEnd = addr + extra;
|
|
|
- break;
|
|
|
- default:
|
|
|
- disasmStart = addr - extra;
|
|
|
- disasmEnd = addr + 2 * extra;
|
|
|
- }
|
|
|
- disasmStart = std::max(disasmStart, 0);
|
|
|
- disasmEnd = std::min(disasmEnd, 0xFFFF);
|
|
|
-
|
|
|
- CommMemoryRequest* req = new CommMemoryRequest(
|
|
|
- disasmStart, disasmEnd - disasmStart + 1, &memory[disasmStart], *this);
|
|
|
- req->address = addr;
|
|
|
- req->line = infoLine;
|
|
|
- req->method = method;
|
|
|
-
|
|
|
- if (waitingForData) {
|
|
|
- delete nextRequest;
|
|
|
- nextRequest = req;
|
|
|
- } else {
|
|
|
- waitingForData = true;
|
|
|
- CommClient::instance().sendCommand(req);
|
|
|
- }
|
|
|
+ refresh(addr, infoLine, method);
|
|
|
}
|
|
|
|
|
|
void DisasmViewer::memoryUpdated(CommMemoryRequest* req)
|
|
@@ -458,9 +467,9 @@ int DisasmViewer::findDisasmLine(quint16 lineAddr, int infoLine)
|
|
|
int line = disasmLines.size() - 1;
|
|
|
while( line >= 0 ) {
|
|
|
if( lineAddr >= disasmLines[line].addr ) {
|
|
|
- if( infoLine == 0 )
|
|
|
+ if( infoLine == 0 )
|
|
|
return line;
|
|
|
- if (infoLine == LAST_INFO_LINE)
|
|
|
+ if (infoLine == LAST_INFO_LINE)
|
|
|
return line-1;
|
|
|
while (disasmLines[line].infoLine != infoLine && disasmLines[line].addr == lineAddr) {
|
|
|
line--;
|