URL
https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk
Subversion Repositories open8_urisc
[/] [open8_urisc/] [trunk/] [Open8 Tools/] [open8_src/] [open8_as/] [decode_v8urisc.c] - Rev 178
Compare with Previous | Blame | View Log
case 0:
for ( ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == 0 && buffer[inz] == 0x0A) {
fprintf(file_out_ptr, "d%d ", opt_tmp->hex);
i = inz;
return SUCCEEDED;
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
break;
case 1:
if (xbit_size > 8 && opt_tmp->skip_8bit == 1)
break;
for ( ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == 'x') {
y = i;
i = inz;
z = input_number();
inz = i;
i = y;
if (!(z == SUCCEEDED || z == INPUT_NUMBER_ADDRESS_LABEL || z == INPUT_NUMBER_STACK))
return FAILED;
if (z == SUCCEEDED && (d > 255 || d < -128))
break;
if (operand_hint == HINT_16BIT)
break;
for (x++ ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == 0 && buffer[inz] == 0x0A) {
if (z == SUCCEEDED)
fprintf(file_out_ptr, "d%d d%d ", opt_tmp->hex, d);
else if (z == INPUT_NUMBER_ADDRESS_LABEL)
fprintf(file_out_ptr, "k%d d%d R%s ", active_file_info_last->line_current, opt_tmp->hex, label);
else
fprintf(file_out_ptr, "d%d c%d ", opt_tmp->hex, latest_stack);
i = inz;
return SUCCEEDED;
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
break;
case 2:
for ( ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == '?') {
y = i;
i = inz;
z = input_number();
inz = i;
i = y;
if (!(z == SUCCEEDED || z == INPUT_NUMBER_ADDRESS_LABEL || z == INPUT_NUMBER_STACK))
return FAILED;
if (z == SUCCEEDED && (d > 65535 || d < -32768)) {
print_error("Out of 16bit range.\n", ERROR_NUM);
return FAILED;
}
for (x++ ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == 0 && buffer[inz] == 0x0A) {
if (z == SUCCEEDED)
fprintf(file_out_ptr, "d%d y%d ", opt_tmp->hex, d);
else if (z == INPUT_NUMBER_ADDRESS_LABEL)
fprintf(file_out_ptr, "k%d d%d r%s ", active_file_info_last->line_current, opt_tmp->hex, label);
else
fprintf(file_out_ptr, "d%d C%d ", opt_tmp->hex, latest_stack);
i = inz;
return SUCCEEDED;
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
break;
case 3:
for ( ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == 0 && buffer[inz] == 0x0A) {
fprintf(file_out_ptr, "y%d ", opt_tmp->hex);
i = inz;
return SUCCEEDED;
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
break;
case 4:
if (xbit_size > 8 && opt_tmp->skip_8bit == 1)
break;
for ( ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == 'x') {
y = i;
i = inz;
z = input_number();
inz = i;
i = y;
if (!(z == SUCCEEDED || z == INPUT_NUMBER_ADDRESS_LABEL || z == INPUT_NUMBER_STACK))
return FAILED;
if (z == SUCCEEDED && (d > 255 || d < -128))
break;
if (operand_hint == HINT_16BIT)
break;
for (x++ ; x < OP_SIZE_MAX; inz++, x++) {
if (opt_tmp->op[x] == 0 && buffer[inz] == 0x0A) {
if (z == SUCCEEDED)
fprintf(file_out_ptr, "d%d d%d ", opt_tmp->hex, d);
else if (z == INPUT_NUMBER_ADDRESS_LABEL)
fprintf(file_out_ptr, "k%d d%d Q%s ", active_file_info_last->line_current, opt_tmp->hex, label);
else
fprintf(file_out_ptr, "d%d c%d ", opt_tmp->hex, latest_stack);
i = inz;
return SUCCEEDED;
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
}
if (opt_tmp->op[x] != toupper((int)buffer[inz]))
break;
}
break;
