static void chksegment(ADDR *left, ADDR *right, int op)
{
+ uint16_t m = (left->a_type & TMMODE);
+ if (m == TBR || m == TWR) {
+ if (op != '+')
+ aerr(MUST_BE_ABSOLUTE);
+ if ((right->a_type & TMMODE) == TUSER) {
+ left->a_segment = right->a_segment;
+ return;
+ }
+ aerr(MUST_BE_ABSOLUTE);
+ }
/* Not symbols, doesn't matter */
if ((left->a_type & TMMODE) != TUSER ||(right->a_type & TMMODE) != TUSER)
return;
if (mode==TBR || mode==TWR || mode==TSR || mode==TCC) {
ap->a_type = mode|sp->s_value;
ap->a_value = 0;
+ ap->a_segment = UNKNOWN;
return;
}
if (mode != TNEW && mode != TUSER)
void outrab(ADDR *a)
{
int s = 0;
+ uint16_t mode = (a->a_type & TMMODE);
+ if (mode == TBR || mode == TWR) {
+ a->a_flags |= A_LOW;
+ if (a->a_segment != ABSOLUTE)
+ aerr(MUST_BE_ABSOLUTE);
+ }
if (a->a_segment != ABSOLUTE) {
check_store_allowed(segment, 1);
outbyte(REL_ESC);