diff --git a/programs/boot.vc5asm b/programs/boot.vc5asm index 0d4f51b..1448913 100644 --- a/programs/boot.vc5asm +++ b/programs/boot.vc5asm @@ -51,7 +51,7 @@ key_press_int: mov r0, [0x600] add r0, r0, VCD - mov r1, [KBC_CODE] + mov r1, [KBD_CODE] cmp r1, 44 ; spacebar mov r2, rfl and r2, r2, FL_EQ diff --git a/src/assembler.cpp b/src/assembler.cpp index 9691be3..5120a1c 100644 --- a/src/assembler.cpp +++ b/src/assembler.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -100,7 +101,7 @@ auto Assembler::assemble_file() } assert(value->ty == EOT::Imm); - m_syms[stmt->ident] = value->as_imm(); + m_syms[std::string(stmt->ident)] = value->as_imm(); } else if (parser.next_is_align()) { auto stmt = parser.parse_align(); @@ -153,6 +154,11 @@ auto Assembler::assemble_file() parser.try_recover(); continue; } + + if (line->labels) { + define_labels(*line->labels); + } + lines.push_back(std::move(line)); } } @@ -165,33 +171,36 @@ auto Assembler::assemble_file() m_second_pass = true; for (const auto& line : lines) { - std::println("[{}] = {}", m_builder.ip(), line->ident); assemble_line(*line); } - for (size_t i = 0; i < 64; i += 4) { - std::println("{:02x} {:02x} {:02x} {:02x}", - m_program[i], - m_program[i + 1], - m_program[i + 2], - m_program[i + 3]); - } - return std::move(m_program); } -void Assembler::assemble_define_labels(const std::vector