WIP: Adding addr16 type
authorLukas Krickl <lukas@krickl.dev>
Wed, 21 Feb 2024 16:18:54 +0000 (17:18 +0100)
committerLukas Krickl <lukas@krickl.dev>
Wed, 21 Feb 2024 16:18:54 +0000 (17:18 +0100)
src/archs.h
src/ulas.c

index d0f84ac7f43660a5b89fefbf5176a51bbc82bdf2..98f100dab36df20b531df64dabb18450c8314a63 100644 (file)
@@ -60,6 +60,7 @@ enum ulas_asmspetok {
   // A8 is like E8, but it will not emit an overflow warning
   // because it is commont to pass a 16-bit label as a value
   ULAS_A8 = -3,
+  ULAS_A16 = -4,
   ULAS_DATZERO = 0xFF00
 };
 
index 6852c8a1d601debae5a19a62b1d3182aff223528..d6ac609c2fcaf01108187a7db3a76652a275a971 100644 (file)
@@ -1823,7 +1823,8 @@ int ulas_asminstr(char *dst, unsigned long max, const char **line,
         if (strncmp(regstr, ulas.tok.buf, ulas.tok.maxlen) != 0) {
           goto skip;
         }
-      } else if (tok[i] == ULAS_E8 || tok[i] == ULAS_E16 || tok[i] == ULAS_A8) {
+      } else if (tok[i] == ULAS_E8 || tok[i] == ULAS_E16 || tok[i] == ULAS_A8 ||
+                 tok[i] == ULAS_A16) {
         assert(expridx < ULAS_INSTRDATMAX);
         int rc = 0;
         int res = ulas_intexpr(line, n, &rc);
@@ -1867,7 +1868,7 @@ int ulas_asminstr(char *dst, unsigned long max, const char **line,
 
       if (dat[datread] == ULAS_E8 || dat[datread] == ULAS_A8) {
         dst[written] = (char)exprres[expridx++];
-      } else if (dat[datread] == ULAS_E16) {
+      } else if (dat[datread] == ULAS_E16 || dat[datread] == ULAS_A16) {
         short val = (short)exprres[expridx++];
         if (ulas.arch.endianess == ULAS_BE) {
           dst[written++] = (char)(val >> 8);