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 mid accumulator register",
"Invalid register",
"Number out of range"};
"Number out of range",
"Program counter out of range"};
DSPAssembler::DSPAssembler(const AssemblerSettings& 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 (params[0].type == P_VAL)
{
m_totalSize = std::max(m_cur_addr, params[0].val);
m_cur_addr = params[0].val;
}
else
{
ShowError(ERR_EXPECTED_PARAM_VAL);
}
continue;
}

View File

@ -42,7 +42,8 @@ enum err_t
ERR_WRONG_PARAMETER_ACC,
ERR_WRONG_PARAMETER_MID_ACC,
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