z80: fix short relative branches to unknown symbols
authorAlan Cox <alan@linux.intel.com>
Thu, 16 Nov 2017 15:00:51 +0000 (15:00 +0000)
committerAlan Cox <alan@linux.intel.com>
Thu, 16 Nov 2017 15:00:51 +0000 (15:00 +0000)
We now error them with a rather more useful message

Applications/MWC/cmd/asz80/as.h
Applications/MWC/cmd/asz80/as1.c
Applications/MWC/cmd/asz80/as6.c

index 22840d1..d281da3 100644 (file)
@@ -153,7 +153,7 @@ typedef     uint16_t        VALUE;          /* For symbol values */
 #define DATA_IN_ZP     27
 #define REQUIRE_Z180   28
 #define        SEGMENT_CLASH   29
-
+#define UNKNOWN_SYMBOL 30
 
 
 #elif TARGET_6502
index 8340018..e9630b9 100644 (file)
@@ -265,7 +265,9 @@ loop:
                }
                istuser(&a1);
                disp = a1.a_value-dot[segment]-2;
-               if (disp<-128 || disp>127 || a1.a_segment != segment)
+               if (a1.a_segment == UNKNOWN)
+                       aerr(UNKNOWN_SYMBOL);
+               else if (disp<-128 || disp>127 || a1.a_segment != segment)
                        aerr(BRA_RANGE);
                outab(opcode);
                outab(disp);
index 33372c5..a4a75c8 100644 (file)
@@ -180,8 +180,10 @@ char *etext[] = {
        "constant out of range",
        "data in BSS",
        "segment overflow",
+       "",
        "Z180 instruction",
-       "segment conflict"
+       "segment conflict",
+       "unknown symbol"
 };
 
 /*