diff --git a/tests/manual/trk/adapter.cpp b/tests/manual/trk/adapter.cpp index 3b184968ed1c5b8142f5fac237f64cd16266c287..b382d0d53d88eb3330efd8e23c3fec594af1e1e9 100644 --- a/tests/manual/trk/adapter.cpp +++ b/tests/manual/trk/adapter.cpp @@ -537,7 +537,11 @@ void Adapter::handleGdbResponse(const QByteArray &response) #endif bool ok = false; uint registerNumber = response.mid(1).toInt(&ok, 16); - if (registerNumber < RegisterCount) { + if (registerNumber == RegisterPSGdb) { + QByteArray ba; + appendInt(&ba, m_snapshot.registers[RegisterPSTrk]); + sendGdbMessage(ba.toHex(), "read processor status register"); + } else if (registerNumber < RegisterCount) { QByteArray ba; appendInt(&ba, m_snapshot.registers[registerNumber]); sendGdbMessage(ba.toHex(), "read single known register"); @@ -1059,8 +1063,10 @@ void Adapter::handleAndReportReadRegisters(const TrkResult &result) // [80 0B 00 00 00 00 00 C9 24 FF BC 00 00 00 00 00 // 60 00 00 00 00 00 00 78 67 79 70 00 00 00 00 00...] const char *data = result.data.data(); - for (int i = 0; i < RegisterCount; ++i) + for (int i = 0; i < RegisterCount; ++i) { m_snapshot.registers[i] = extractInt(data + 4 * i); + //qDebug() << i << hexNumber(m_snapshot.registers[i], 8); + } //QByteArray ba = result.data.toHex(); QByteArray ba; diff --git a/tests/manual/trk/trkserver.cpp b/tests/manual/trk/trkserver.cpp index 8cf11d7133e0936bd257d57f4b37220d257ff431..d5780f28adc49097db1ef7e90e804f4fc5013784 100644 --- a/tests/manual/trk/trkserver.cpp +++ b/tests/manual/trk/trkserver.cpp @@ -88,13 +88,13 @@ Inferior::Inferior() registers[7] = 0x00000000; registers[8] = 0x00000012; registers[9] = 0x00000040; - registers[10] = 0xC82AF210; + registers[10] = 0xC82AF210; registers[11] = 0x00000000; registers[12] = 0xC8000548; registers[13] = 0x00403ED0; registers[14] = 0x786A6BD8; registers[15] = 0x786A4CC8; - //registers[25] = 0x68000010; + registers[16] = 0x68000010; // that's reg 25 on chip? } class TrkServer : public QObject @@ -238,9 +238,7 @@ void TrkServer::handleAdapterMessage(const TrkResult &result) break; } case 0x12: { // Read Registers - appendByte(&data, 0x00); - appendByte(&data, 0x00); - appendByte(&data, 0x00); + data.clear(); for (int i = 0; i < RegisterCount; ++i) appendInt(&data, m_inferior.registers[i], BigEndian); writeToAdapter(0x80, result.token, data); diff --git a/tests/manual/trk/trkutils.h b/tests/manual/trk/trkutils.h index 811e4c6ebae41a4fe68432fcd5fb04315c633fcd..56d02ddaa0a963874d52365231be7544ee9464f3 100644 --- a/tests/manual/trk/trkutils.h +++ b/tests/manual/trk/trkutils.h @@ -72,8 +72,11 @@ enum CodeMode enum TargetConstants { - RegisterCount = 16, + RegisterCount = 17, RegisterPC = 15, // Program counter + RegisterPSGdb = 25, // gdb's view of the world + RegisterPSTrk = 16, // gdb's view of the world + MemoryChunkSize = 256 };