Added more rrc-as register annotations
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
6d3760c96e
commit
6a5d9696e7
|
@ -203,9 +203,14 @@ void OutputContext::setNop(uint32_t location) {
|
|||
}
|
||||
|
||||
std::string OutputContext::getAddressRegisterName(uint32_t addr, uint8_t offset) const {
|
||||
if (offset || registers.find(addr) == registers.end()) {
|
||||
uint64_t k = (uint64_t)addr | ((uint64_t)offset << 32);
|
||||
if (registers.find(k) == registers.end()) {
|
||||
return ::getAddressRegisterName(addr, offset);
|
||||
} else {
|
||||
return registers.at(addr);
|
||||
return registers.at(k);
|
||||
}
|
||||
}
|
||||
|
||||
void OutputContext::addRegister(const Instruction::AddressWithOffset &address, const std::string &name) {
|
||||
registers[(uint64_t)address.address | ((uint64_t)address.offset << 32)] = name;
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ private:
|
|||
const ImageFormat ℑ
|
||||
std::unordered_map<uint32_t, std::string> mappings;
|
||||
std::unordered_map<uint32_t, std::string> comments;
|
||||
std::unordered_map<uint32_t, std::string> registers;
|
||||
std::unordered_map<uint64_t, std::string> registers;
|
||||
std::unordered_map<uint32_t, bool> nop;
|
||||
|
||||
public:
|
||||
|
@ -56,9 +56,7 @@ public:
|
|||
|
||||
void setNop(uint32_t location);
|
||||
|
||||
void addRegister(uint32_t addr, const std::string &name) {
|
||||
registers[addr] = name;
|
||||
}
|
||||
void addRegister(const Instruction::AddressWithOffset& address, const std::string &name);
|
||||
|
||||
std::string getAddressRegisterName(uint32_t addr, uint8_t offset) const;
|
||||
|
||||
|
|
91
src/main.cpp
91
src/main.cpp
|
@ -299,7 +299,41 @@ void decodeImage(const std::string &fileName) {
|
|||
|
||||
};
|
||||
|
||||
for(uint32_t i = 10; i < 200; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_CONFIG_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 400; i < 410; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_INIT_STATUS_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 430; i < 441; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_INIT_STATUS_ARCHIVE_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 450; i < 452; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_INIT_OOR_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &r : registerRename) {
|
||||
ctx.addRegister(Instruction::AddressWithOffset{r.first, 0}, r.second);
|
||||
}
|
||||
|
||||
bool isKnownAssembler = false;
|
||||
if (imageObject.imageSignature.find("rrc-as") != std::string::npos) {
|
||||
|
@ -308,6 +342,27 @@ void decodeImage(const std::string &fileName) {
|
|||
comments.clear();
|
||||
knownNames.clear();
|
||||
|
||||
ctx.addRegister(Instruction::AddressWithOffset{static_cast<uint32_t>(KnownRegisters::BSM_ADDR_OFFSET_3), 0}, "rrcc_STACK_POINTER");
|
||||
ctx.addRegister(Instruction::AddressWithOffset{static_cast<uint32_t>(KnownRegisters::BSM_ADDR_OFFSET_2), 0}, "rrcc_FRAME_POINTER");
|
||||
|
||||
ctx.addRegister(Instruction::AddressWithOffset{static_cast<uint32_t>(KnownRegisters::MGMT_SCRATCH_0), 0}, "rrcc_P0_RRET");
|
||||
ctx.addRegister(Instruction::AddressWithOffset{static_cast<uint32_t>(KnownRegisters::MGMT_SCRATCH_1), 0}, "rrcc_P1_RRET_X");
|
||||
|
||||
for(uint32_t i = 0; i < 16; ++i){
|
||||
ctx.addRegister(Instruction::AddressWithOffset{i, 3}, "rrcc_STACK_POINTER+" +
|
||||
std::to_string(i));
|
||||
}
|
||||
for(uint32_t i = 0; i < 16; ++i){
|
||||
ctx.addRegister(Instruction::AddressWithOffset{i, 2}, "rrcc_FRAME_POINTER+" +
|
||||
std::to_string(i));
|
||||
}
|
||||
|
||||
for(uint32_t i = 0; i < 16; ++i){
|
||||
ctx.addRegister(Instruction::AddressWithOffset{static_cast<uint32_t>(KnownRegisters::BSM_SCRATCH_START) + 0x1F0, 0}, "rrcc_R" +
|
||||
std::to_string(i));
|
||||
}
|
||||
|
||||
|
||||
for (auto& i : imageObject.getInstructions()){
|
||||
std::unique_ptr<Instruction::Instruction> decodedInstruction = nullptr;
|
||||
std::unique_ptr<Instruction::Instruction> decodedInstruction2 = nullptr;
|
||||
|
@ -376,42 +431,6 @@ void decodeImage(const std::string &fileName) {
|
|||
ctx.addComment(c.first, c.second);
|
||||
}
|
||||
|
||||
for(uint32_t i = 10; i < 200; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_CONFIG_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 400; i < 410; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_INIT_STATUS_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 430; i < 441; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_INIT_STATUS_ARCHIVE_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for(uint32_t i = 450; i < 452; ++i){
|
||||
if(registerRename.find((uint32_t) KnownRegisters::BSM_SCRATCH_START + i) == registerRename.end()){
|
||||
std::stringstream s;
|
||||
s << "api_MASK_BSM_INIT_OOR_" << std::dec << i;
|
||||
registerRename[(uint32_t) KnownRegisters::BSM_SCRATCH_START + i] = s.str();
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &r : registerRename) {
|
||||
ctx.addRegister(r.first, r.second);
|
||||
}
|
||||
|
||||
ctx.analyze();
|
||||
|
||||
uint32_t prevAddress = 0;
|
||||
|
|
Loading…
Reference in a new issue