Added pop and jp
authorLukas Krickl <lukas@krickl.dev>
Fri, 24 Nov 2023 18:07:43 +0000 (19:07 +0100)
committerLukas Krickl <lukas@krickl.dev>
Fri, 24 Nov 2023 18:07:43 +0000 (19:07 +0100)
include/ulas.h
src/ulas.c
test/t0.s

index a64158e3078f864aa81fb48d73090215cbf0ab5d..412bebd0b291d59cd4fe78abfef91452229c0f62 100644 (file)
@@ -316,6 +316,7 @@ enum ulas_asmregs {
   ULAS_REG_BC = 8,
   ULAS_REG_DE = 9,
   ULAS_REG_HL = 10,
+  ULAS_REG_AF = 16,
 
   // flags
   ULAS_REG_NOT_ZERO = 11,
index ceebeecaaac69f5bc0c8b7fed7bc4fc1e2abe133..45775026061188beddb9584a656d13d30c874557 100644 (file)
@@ -1384,6 +1384,8 @@ const char *ulas_asmregstr(enum ulas_asmregs reg) {
     return "c";
   case ULAS_REG_SP:
     return "sp";
+  case ULAS_REG_AF:
+    return "af";
   }
 
   return NULL;
@@ -1531,6 +1533,11 @@ const struct ulas_instr ULASINSTRS[] = {
     ULAS_INSTR_REG("ret", 0xC0, ULAS_REG_NOT_ZERO),
     ULAS_INSTR_REG("ret", 0xD0, ULAS_REG_NOT_CARRY),
 
+    // jp
+    ULAS_INSTR_R16E16("jp", 0xC2, ULAS_REG_NOT_ZERO),
+    ULAS_INSTR_R16E16("jp", 0xD2, ULAS_REG_NOT_CARRY),
+    {"jp", {ULAS_E16, 0}, {0xC3, ULAS_E16, 0x00}},
+
     // inc/dec
     ULAS_INSTR_REG("inc", 0x03, ULAS_REG_BC),
     ULAS_INSTR_REG("inc", 0x13, ULAS_REG_DE),
@@ -1578,6 +1585,12 @@ const struct ulas_instr ULASINSTRS[] = {
     ULAS_INSTR_R16R16("add", 0x29, ULAS_REG_HL, ULAS_REG_HL),
     ULAS_INSTR_R16R16("add", 0x39, ULAS_REG_HL, ULAS_REG_SP),
 
+    // pop
+    ULAS_INSTR_REG("pop", 0xC1, ULAS_REG_BC),
+    ULAS_INSTR_REG("pop", 0xD1, ULAS_REG_DE),
+    ULAS_INSTR_REG("pop", 0xE1, ULAS_REG_HL),
+    ULAS_INSTR_REG("pop", 0xF1, ULAS_REG_AF),
+
     {NULL}};
 
 // assembles an instruction, writes bytes into dst
index e792dbbb0375837edd4bd797e5e6a1ef0bb7b555..49865eaf5947cf88747d0569240034066ee57bad 100644 (file)
--- a/test/t0.s
+++ b/test/t0.s
@@ -41,3 +41,8 @@
 
   ld [1], a
   ld a, [2]
+
+  pop bc
+  jp nz, 2
+
+  jp 3