1
0
mirror of https://github.com/lefticus/6502-cpp.git synced 2025-05-17 06:38:19 +00:00
This commit is contained in:
Jason Turner 2021-04-18 16:50:56 -06:00
parent ba5fa6c978
commit 2a2ce54d32

View File

@ -127,7 +127,8 @@ struct mos6502 : ASMLine
rts, rts,
clc, clc,
sec, sec,
bit bit,
jsr
}; };
static bool get_is_branch(const OpCode o) { static bool get_is_branch(const OpCode o) {
@ -156,6 +157,7 @@ struct mos6502 : ASMLine
case OpCode::ORA: case OpCode::ORA:
case OpCode::cmp: case OpCode::cmp:
case OpCode::jmp: case OpCode::jmp:
case OpCode::jsr:
case OpCode::adc: case OpCode::adc:
case OpCode::sbc: case OpCode::sbc:
case OpCode::rts: case OpCode::rts:
@ -192,6 +194,7 @@ struct mos6502 : ASMLine
case OpCode::dec: case OpCode::dec:
case OpCode::ORA: case OpCode::ORA:
case OpCode::jmp: case OpCode::jmp:
case OpCode::jsr:
case OpCode::bne: case OpCode::bne:
case OpCode::bmi: case OpCode::bmi:
case OpCode::beq: case OpCode::beq:
@ -283,6 +286,8 @@ struct mos6502 : ASMLine
return "sec"; return "sec";
case OpCode::bit: case OpCode::bit:
return "bit"; return "bit";
case OpCode::jsr:
return "jsr";
case OpCode::unknown: case OpCode::unknown:
return ""; return "";
}; };
@ -353,7 +358,8 @@ struct i386 : ASMLine
sbbb, sbbb,
negb, negb,
notb, notb,
retl retl,
call
}; };
static OpCode parse_opcode(Type t, const std::string &o) static OpCode parse_opcode(Type t, const std::string &o)
@ -400,6 +406,8 @@ struct i386 : ASMLine
if (o == "sbbb") return OpCode::sbbb; if (o == "sbbb") return OpCode::sbbb;
if (o == "pushl") return OpCode::pushl; if (o == "pushl") return OpCode::pushl;
if (o == "retl") return OpCode::retl; if (o == "retl") return OpCode::retl;
if (o == "call") return OpCode::call;
if (o == "calll") return OpCode::call;
} }
} }
throw std::runtime_error("Unknown opcode: " + o); throw std::runtime_error("Unknown opcode: " + o);
@ -736,6 +744,10 @@ void translate_instruction(std::vector<mos6502> &instructions, const i386::OpCod
} }
break; break;
case i386::OpCode::call:
instructions.emplace_back(mos6502::OpCode::jsr, o1);
break;
default: default:
throw std::runtime_error("Cannot translate unhandled instruction"); throw std::runtime_error("Cannot translate unhandled instruction");