- if (expr_var[0]) {
- if ((sym=findSymbol(expr_var[expr]))) {
- if (sym->mode=='X') {
- sprintf (rel_line[expr], "R %04x ABS_FFFF %s 0", where, sym->name);
- }
+ if ((sym=findSymbol(operand[seq]))) {
+ switch (sym->mode) {
+ case 'A':
+ // sfr or sbit, already in instruction
+ case '=':
+ // equat, already in instruction
+ break;
+ case 'X':
+ // external reference
+ sprintf (rel_line[seq], "R %04x ABS_FFFF %s %04x", where, sym->name,
+ sym->value);
+ break;
+ case 'R':
+ // absolute in current segment
+ sprintf (rel_line[seq], "R %04x ABS_PC PC %04x", where, sym->value);
+ break;
+ default:
+ fprintf (stderr, "unknown ABS_FFFF\n");
+ exit (1);