mirror of
https://github.com/MoleskiCoder/EightBit.git
synced 2026-04-19 19:16:38 +00:00
Bring LR35902 a little more in line with the Z80 implementation.
Signed-off-by: Adrian.Conlon <adrian.conlon@gmail.com>
This commit is contained in:
@@ -9,12 +9,12 @@
|
||||
#include "LR35902.h"
|
||||
#include "StatusFlags.h"
|
||||
|
||||
Disassembler::Disassembler() {
|
||||
EightBit::Disassembler::Disassembler() {
|
||||
// Disable exceptions where too many format arguments are available
|
||||
m_formatter.exceptions(boost::io::all_error_bits ^ boost::io::too_many_args_bit);
|
||||
}
|
||||
|
||||
std::string Disassembler::state(LR35902& cpu) {
|
||||
std::string EightBit::Disassembler::state(EightBit::LR35902& cpu) {
|
||||
|
||||
auto pc = cpu.getProgramCounter();
|
||||
auto sp = cpu.getStackPointer();
|
||||
@@ -45,7 +45,7 @@ std::string Disassembler::state(LR35902& cpu) {
|
||||
return output.str();
|
||||
}
|
||||
|
||||
std::string Disassembler::RP(int rp) const {
|
||||
std::string EightBit::Disassembler::RP(int rp) const {
|
||||
switch (rp) {
|
||||
case 0:
|
||||
return "BC";
|
||||
@@ -59,7 +59,7 @@ std::string Disassembler::RP(int rp) const {
|
||||
throw std::logic_error("Unhandled register pair");
|
||||
}
|
||||
|
||||
std::string Disassembler::RP2(int rp) const {
|
||||
std::string EightBit::Disassembler::RP2(int rp) const {
|
||||
switch (rp) {
|
||||
case 0:
|
||||
return "BC";
|
||||
@@ -73,7 +73,7 @@ std::string Disassembler::RP2(int rp) const {
|
||||
throw std::logic_error("Unhandled register pair");
|
||||
}
|
||||
|
||||
std::string Disassembler::R(int r) const {
|
||||
std::string EightBit::Disassembler::R(int r) const {
|
||||
switch (r) {
|
||||
case 0:
|
||||
return "B";
|
||||
@@ -95,7 +95,7 @@ std::string Disassembler::R(int r) const {
|
||||
throw std::logic_error("Unhandled register");
|
||||
}
|
||||
|
||||
std::string Disassembler::cc(int flag) {
|
||||
std::string EightBit::Disassembler::cc(int flag) {
|
||||
switch (flag) {
|
||||
case 0:
|
||||
return "NZ";
|
||||
@@ -117,7 +117,7 @@ std::string Disassembler::cc(int flag) {
|
||||
throw std::logic_error("Unhandled condition");
|
||||
}
|
||||
|
||||
std::string Disassembler::alu(int which) {
|
||||
std::string EightBit::Disassembler::alu(int which) {
|
||||
switch (which) {
|
||||
case 0: // ADD A,n
|
||||
return "ADD";
|
||||
@@ -139,14 +139,14 @@ std::string Disassembler::alu(int which) {
|
||||
throw std::logic_error("Unhandled alu operation");
|
||||
}
|
||||
|
||||
std::string Disassembler::disassemble(LR35902& cpu) {
|
||||
std::string EightBit::Disassembler::disassemble(LR35902& cpu) {
|
||||
m_prefixCB = false;
|
||||
std::ostringstream output;
|
||||
disassemble(output, cpu, cpu.getProgramCounter().word);
|
||||
return output.str();
|
||||
}
|
||||
|
||||
void Disassembler::disassemble(std::ostringstream& output, LR35902& cpu, uint16_t pc) {
|
||||
void EightBit::Disassembler::disassemble(std::ostringstream& output, LR35902& cpu, uint16_t pc) {
|
||||
|
||||
auto& memory = cpu.getMemory();
|
||||
auto opcode = memory.peek(pc);
|
||||
@@ -190,7 +190,7 @@ void Disassembler::disassemble(std::ostringstream& output, LR35902& cpu, uint16_
|
||||
output << m_formatter % (int)immediate % (int)absolute % relative % (int)displacement % indexedImmediate;
|
||||
}
|
||||
|
||||
void Disassembler::disassembleCB(
|
||||
void EightBit::Disassembler::disassembleCB(
|
||||
std::ostringstream& output,
|
||||
LR35902& cpu,
|
||||
uint16_t pc,
|
||||
@@ -240,7 +240,7 @@ void Disassembler::disassembleCB(
|
||||
}
|
||||
}
|
||||
|
||||
void Disassembler::disassembleOther(
|
||||
void EightBit::Disassembler::disassembleOther(
|
||||
std::ostringstream& output,
|
||||
LR35902& cpu,
|
||||
uint16_t pc,
|
||||
@@ -504,13 +504,13 @@ void Disassembler::disassembleOther(
|
||||
}
|
||||
}
|
||||
|
||||
std::string Disassembler::flag(uint8_t value, int flag, const std::string& represents) {
|
||||
std::string EightBit::Disassembler::flag(uint8_t value, int flag, const std::string& represents) {
|
||||
std::ostringstream output;
|
||||
output << (value & flag ? represents : "-");
|
||||
return output.str();
|
||||
}
|
||||
|
||||
std::string Disassembler::flags(uint8_t value) {
|
||||
std::string EightBit::Disassembler::flags(uint8_t value) {
|
||||
std::ostringstream output;
|
||||
output
|
||||
<< flag(value, LR35902::ZF, "Z")
|
||||
@@ -524,31 +524,31 @@ std::string Disassembler::flags(uint8_t value) {
|
||||
return output.str();
|
||||
}
|
||||
|
||||
std::string Disassembler::hex(uint8_t value) {
|
||||
std::string EightBit::Disassembler::hex(uint8_t value) {
|
||||
std::ostringstream output;
|
||||
output << std::hex << std::setw(2) << std::setfill('0') << (int)value;
|
||||
return output.str();
|
||||
}
|
||||
|
||||
std::string Disassembler::hex(uint16_t value) {
|
||||
std::string EightBit::Disassembler::hex(uint16_t value) {
|
||||
std::ostringstream output;
|
||||
output << std::hex << std::setw(4) << std::setfill('0') << (int)value;
|
||||
return output.str();
|
||||
}
|
||||
|
||||
std::string Disassembler::binary(uint8_t value) {
|
||||
std::string EightBit::Disassembler::binary(uint8_t value) {
|
||||
std::ostringstream output;
|
||||
output << std::bitset<8>(value);
|
||||
return output.str();
|
||||
}
|
||||
|
||||
std::string Disassembler::decimal(uint8_t value) {
|
||||
std::string EightBit::Disassembler::decimal(uint8_t value) {
|
||||
std::ostringstream output;
|
||||
output << (int)value;
|
||||
return output.str();
|
||||
}
|
||||
|
||||
std::string Disassembler::invalid(uint8_t value) {
|
||||
std::string EightBit::Disassembler::invalid(uint8_t value) {
|
||||
std::ostringstream output;
|
||||
output << "Invalid instruction: " << hex(value) << "(" << binary(value) << ")";
|
||||
return output.str();
|
||||
|
||||
Reference in New Issue
Block a user