Added rst instructions
authorLukas Krickl <lukas@krickl.dev>
Sat, 25 Nov 2023 06:03:35 +0000 (07:03 +0100)
committerLukas Krickl <lukas@krickl.dev>
Sat, 25 Nov 2023 06:03:35 +0000 (07:03 +0100)
include/ulas.h
src/ulas.c
test/t0.s

index 412bebd0b291d59cd4fe78abfef91452229c0f62..8472fdd8e3757b0742b11462a51ae312e9335606 100644 (file)
@@ -325,7 +325,15 @@ enum ulas_asmregs {
   ULAS_REG_CARRY = 14,
 
   // misc
-  ULAS_REG_SP = 15
+  ULAS_REG_SP = 15,
+  ULAS_VEC00 = 17,
+  ULAS_VEC08 = 18,
+  ULAS_VEC10 = 19,
+  ULAS_VEC18 = 20,
+  ULAS_VEC20 = 21,
+  ULAS_VEC28 = 22,
+  ULAS_VEC30 = 23,
+  ULAS_VEC38 = 24
 };
 
 // special asm tokens for instr enum
index 7b731853af3c8801f7ebbaa6bcc1b3cff319f673..bfacaa507019263bf0c640ea49e92290388a2cee 100644 (file)
@@ -1386,6 +1386,22 @@ const char *ulas_asmregstr(enum ulas_asmregs reg) {
     return "sp";
   case ULAS_REG_AF:
     return "af";
+  case ULAS_VEC00:
+    return "0x00";
+  case ULAS_VEC08:
+    return "0x08";
+  case ULAS_VEC10:
+    return "0x10";
+  case ULAS_VEC18:
+    return "0x18";
+  case ULAS_VEC20:
+    return "0x20";
+  case ULAS_VEC28:
+    return "0x28";
+  case ULAS_VEC30:
+    return "0x30";
+  case ULAS_VEC38:
+    return "0x38";
   }
 
   return NULL;
@@ -1532,6 +1548,8 @@ const struct ulas_instr ULASINSTRS[] = {
     // ret
     ULAS_INSTR_REG("ret", 0xC0, ULAS_REG_NOT_ZERO),
     ULAS_INSTR_REG("ret", 0xD0, ULAS_REG_NOT_CARRY),
+    ULAS_INSTR_REG("ret", 0xC9, ULAS_REG_ZERO),
+    ULAS_INSTR_REG("ret", 0xD9, ULAS_REG_CARRY),
 
     // jp
     ULAS_INSTR_R16E16("jp", 0xC2, ULAS_REG_NOT_ZERO),
@@ -1542,6 +1560,16 @@ const struct ulas_instr ULASINSTRS[] = {
     ULAS_INSTR_R16E16("call", 0xC4, ULAS_REG_NOT_ZERO),
     ULAS_INSTR_R16E16("call", 0xD4, ULAS_REG_NOT_CARRY),
 
+    // rst 
+    ULAS_INSTR_REG("rst", 0xC7, ULAS_VEC00),
+    ULAS_INSTR_REG("rst", 0xD7, ULAS_VEC10),
+    ULAS_INSTR_REG("rst", 0xE7, ULAS_VEC20),
+    ULAS_INSTR_REG("rst", 0xF7, ULAS_VEC30),
+    ULAS_INSTR_REG("rst", 0xCF, ULAS_VEC08),
+    ULAS_INSTR_REG("rst", 0xDF, ULAS_VEC18),
+    ULAS_INSTR_REG("rst", 0xEF, ULAS_VEC28),
+    ULAS_INSTR_REG("rst", 0xFF, ULAS_VEC38),
+
     // inc/dec
     ULAS_INSTR_REG("inc", 0x03, ULAS_REG_BC),
     ULAS_INSTR_REG("inc", 0x13, ULAS_REG_DE),
@@ -1583,6 +1611,11 @@ const struct ulas_instr ULASINSTRS[] = {
     ULAS_INSTR_ALUR8D("or", 0xB0),
     ULAS_INSTR_ALUR8D("cp", 0xB8),
 
+    ULAS_INSTR_R8_EXPR8("add", 0xC6, ULAS_REG_A),
+    ULAS_INSTR_R8_EXPR8("sub", 0xD6, ULAS_REG_A),
+    ULAS_INSTR_R8_EXPR8("and", 0xE6, ULAS_REG_A),
+    ULAS_INSTR_R8_EXPR8("or", 0xF6, ULAS_REG_A),
+
     // alu r16, r16
     ULAS_INSTR_R16R16("add", 0x09, ULAS_REG_HL, ULAS_REG_BC),
     ULAS_INSTR_R16R16("add", 0x19, ULAS_REG_HL, ULAS_REG_DE),
index c3c580b24b26620e79ee9842aab94665785f6406..cc344a0f8ce8b3b28dd3d316e84680df113c5d10 100644 (file)
--- a/test/t0.s
+++ b/test/t0.s
@@ -50,3 +50,6 @@
   call nc, 2
 
   push af
+
+  add a, 1+2
+  rst 0x00