DSPAssembler: make ORG directive correctly seek forward

The xkas assembler says about org: "You can seek forward and backward
into a file."
This commit is contained in:
Michael Maltese
2017-05-19 16:00:46 -07:00
parent f3c8291c26
commit a4cb691058
2 changed files with 9 additions and 2 deletions

View File

@ -46,7 +46,8 @@ static const char* err_string[] = {"",
"Wrong parameter: must be accumulator register", "Wrong parameter: must be accumulator register",
"Wrong parameter: must be mid accumulator register", "Wrong parameter: must be mid accumulator register",
"Invalid register", "Invalid register",
"Number out of range"}; "Number out of range",
"Program counter out of range"};
DSPAssembler::DSPAssembler(const AssemblerSettings& settings) DSPAssembler::DSPAssembler(const AssemblerSettings& settings)
: m_cur_addr(0), m_cur_pass(0), m_current_param(0), settings_(settings) : m_cur_addr(0), m_cur_pass(0), m_current_param(0), settings_(settings)
@ -944,9 +945,14 @@ bool DSPAssembler::AssemblePass(const std::string& text, int pass)
if (strcmp("ORG", opcode) == 0) if (strcmp("ORG", opcode) == 0)
{ {
if (params[0].type == P_VAL) if (params[0].type == P_VAL)
{
m_totalSize = std::max(m_cur_addr, params[0].val);
m_cur_addr = params[0].val; m_cur_addr = params[0].val;
}
else else
{
ShowError(ERR_EXPECTED_PARAM_VAL); ShowError(ERR_EXPECTED_PARAM_VAL);
}
continue; continue;
} }

View File

@ -42,7 +42,8 @@ enum err_t
ERR_WRONG_PARAMETER_ACC, ERR_WRONG_PARAMETER_ACC,
ERR_WRONG_PARAMETER_MID_ACC, ERR_WRONG_PARAMETER_MID_ACC,
ERR_INVALID_REGISTER, ERR_INVALID_REGISTER,
ERR_OUT_RANGE_NUMBER ERR_OUT_RANGE_NUMBER,
ERR_OUT_RANGE_PC,
}; };
// Unless you want labels to carry over between files, you probably // Unless you want labels to carry over between files, you probably