chore: minor changes

Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
This commit is contained in:
2023-09-13 04:15:16 +05:30
parent 8a04eade92
commit 387f3c8f07
7 changed files with 17 additions and 17 deletions

View File

@@ -79,8 +79,8 @@ main(int argc, const char* argv[]) {
{ {
Memory memory(std::move(bios), std::move(rom)); Memory memory(std::move(bios), std::move(rom));
Bus bus(std::make_shared<Memory>(memory)); Bus bus(memory);
Cpu cpu(std::make_shared<Bus>(bus)); Cpu cpu(bus);
cpu.step(); cpu.step();
} }
return 0; return 0;

View File

@@ -38,7 +38,7 @@
".cc" ".cc"
".build" ".build"
]; ];
outputs = [ "dev" "out" ]; outputs = [ "out" "dev" ];
inherit nativeBuildInputs; inherit nativeBuildInputs;

View File

@@ -1,8 +1,8 @@
#include "bus.hh" #include "bus.hh"
#include <memory> #include <memory>
Bus::Bus(std::shared_ptr<Memory> memory) Bus::Bus(Memory& memory)
: memory(memory) {} : memory(std::make_shared<Memory>(memory)) {}
uint8_t uint8_t
Bus::read_byte(size_t address) { Bus::read_byte(size_t address) {

View File

@@ -5,7 +5,7 @@
class Bus { class Bus {
public: public:
Bus(std::shared_ptr<Memory> memory); Bus(Memory& memory);
uint8_t read_byte(size_t address); uint8_t read_byte(size_t address);
void write_byte(size_t address, uint8_t byte); void write_byte(size_t address, uint8_t byte);

View File

@@ -6,11 +6,11 @@
using namespace logger; using namespace logger;
Cpu::Cpu(std::shared_ptr<Bus> bus) Cpu::Cpu(Bus& bus)
: gpr(0) : gpr(0)
, cpsr(0) , cpsr(0)
, spsr(0) , spsr(0)
, bus(bus) , bus(std::make_shared<Bus>(bus))
, gpr_banked({ { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } }) , gpr_banked({ { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 } })
, spsr_banked({ 0, 0, 0, 0, 0 }) { , spsr_banked({ 0, 0, 0, 0, 0 }) {
cpsr.set_mode(Mode::System); cpsr.set_mode(Mode::System);

View File

@@ -9,7 +9,7 @@ using std::size_t;
class Cpu { class Cpu {
public: public:
Cpu(std::shared_ptr<Bus> bus); Cpu(Bus& bus);
void step(); void step();
private: private:

View File

@@ -22,7 +22,7 @@ Cpu::exec_arm(uint32_t insn) {
}; };
// Branch and exhcange // Branch and exhcange
if ((insn & 0x0ffffff0) == 0x012fff10) { if ((insn & 0x0FFFFFF0) == 0x012FFF10) {
static constexpr char syn[] = "BX"; static constexpr char syn[] = "BX";
uint8_t rn = insn & 0b1111; uint8_t rn = insn & 0b1111;
@@ -46,7 +46,7 @@ Cpu::exec_arm(uint32_t insn) {
rst_nth_bit(gpr[15], 1); rst_nth_bit(gpr[15], 1);
} }
// Branch // Branch
} else if ((insn & 0x0e000000) == 0x0a000000) { } else if ((insn & 0x0E000000) == 0x0A000000) {
static constexpr char syn[] = "B"; static constexpr char syn[] = "B";
bool link = get_nth_bit(insn, 24); bool link = get_nth_bit(insn, 24);
@@ -69,7 +69,7 @@ Cpu::exec_arm(uint32_t insn) {
} }
// Multiply // Multiply
} else if ((insn & 0x0fc000f0) == 0x00000090) { } else if ((insn & 0x0FC000F0) == 0x00000090) {
static constexpr char syn[2][4] = { "MUL", "MLA" }; static constexpr char syn[2][4] = { "MUL", "MLA" };
uint8_t rm = get_bit_range(insn, 0, 3); uint8_t rm = get_bit_range(insn, 0, 3);
@@ -116,7 +116,7 @@ Cpu::exec_arm(uint32_t insn) {
} }
} }
// Multiply long // Multiply long
} else if ((insn & 0x0f8000f0) == 0x00800090) { } else if ((insn & 0x0F8000F0) == 0x00800090) {
static constexpr char syn[2][2][6] = { { "SMULL", "SMLAL" }, static constexpr char syn[2][2][6] = { { "SMULL", "SMLAL" },
{ "UMULL", "UMLAL" } }; { "UMULL", "UMLAL" } };
@@ -177,7 +177,7 @@ Cpu::exec_arm(uint32_t insn) {
} }
// Single data swap // Single data swap
} else if ((insn & 0x0fb00ff0) == 0x01000090) { } else if ((insn & 0x0FB00FF0) == 0x01000090) {
static constexpr char syn[] = "SWP"; static constexpr char syn[] = "SWP";
uint8_t rm = get_bit_range(insn, 0, 3); uint8_t rm = get_bit_range(insn, 0, 3);
@@ -205,7 +205,7 @@ Cpu::exec_arm(uint32_t insn) {
// Halfword transfer // Halfword transfer
// TODO: create abstraction to reuse for block data and single data // TODO: create abstraction to reuse for block data and single data
// transfer // transfer
} else if ((insn & 0x0e000090) == 0x00000090) { } else if ((insn & 0x0E000090) == 0x00000090) {
static constexpr char syn[2][4] = { "STR", "LDR" }; static constexpr char syn[2][4] = { "STR", "LDR" };
uint8_t rm = get_bit_range(insn, 0, 3); uint8_t rm = get_bit_range(insn, 0, 3);
@@ -265,13 +265,13 @@ Cpu::exec_arm(uint32_t insn) {
gpr[rd] = bus->read_halfword(address); gpr[rd] = bus->read_halfword(address);
// sign extend the halfword // sign extend the halfword
if (get_nth_bit(gpr[rd], 15)) if (get_nth_bit(gpr[rd], 15))
gpr[rd] |= 0xffff0000; gpr[rd] |= 0xFFFF0000;
// byte // byte
} else { } else {
// sign extend the byte // sign extend the byte
gpr[rd] = bus->read_byte(address); gpr[rd] = bus->read_byte(address);
if (get_nth_bit(gpr[rd], 7)) if (get_nth_bit(gpr[rd], 7))
gpr[rd] |= 0xffffff00; gpr[rd] |= 0xFFFFFF00;
} }
// unsigned halfword // unsigned halfword
} else if (h) { } else if (h) {