アセンブラファイルとテストの整理
[YACASL2.git] / test / unit / getcmdcode / getcmdcode.c
diff --git a/test/unit/getcmdcode/getcmdcode.c b/test/unit/getcmdcode/getcmdcode.c
new file mode 100644 (file)
index 0000000..512e771
--- /dev/null
@@ -0,0 +1,36 @@
+#include "casl2.h"
+
+int main(){
+    int i;
+    WORD code;
+    struct CMDCODELIST {
+        char *cmd;
+        CMDTYPE type;
+    } cmdcodelist[] = {
+        { "LD", NONE }, { "LD", 066 }, { "NOEX", R1_R2 },
+        { "NOP", NONE }, { "LD", R_ADR_X_ }, { "ST", R_ADR_X },
+        { "LAD", R_ADR_X }, { "LD", R1_R2 }, { "ADDA", R_ADR_X_ },
+        { "SUBA", R_ADR_X_ }, { "ADDL", R_ADR_X_ }, { "SUBL", R_ADR_X_ },
+        { "ADDA", R1_R2 }, { "SUBA", R1_R2 }, { "ADDL", R1_R2 },
+        { "SUBL", R1_R2 }, { "AND", R_ADR_X_ }, { "OR", R_ADR_X_ },
+        { "XOR", R_ADR_X_ }, { "AND", R1_R2 }, { "OR", R1_R2 },
+        { "XOR", R1_R2 }, { "CPA", R_ADR_X_ }, { "CPL", R_ADR_X_ },
+        { "CPA", R1_R2 }, { "CPL", R1_R2 }, { "SLA", R_ADR_X },
+        { "SRA", R_ADR_X }, { "SLL", R_ADR_X }, { "SRL", R_ADR_X },
+        { "JMI", ADR_X }, { "JNZ", ADR_X }, { "JZE", ADR_X },
+        { "JUMP", ADR_X }, { "JPL", ADR_X }, { "JOV", ADR_X },
+        { "PUSH", ADR_X }, { "POP", R_ }, { "CALL", ADR_X },
+        { "SVC", ADR_X }, { "RET", NONE }
+    };
+    create_cmdtype_code();
+    for(i = 0; i < sizeof(cmdcodelist)/sizeof(cmdcodelist[0]); i++) {
+        code = getcmdcode(cmdcodelist[i].cmd, cmdcodelist[i].type);
+        printf("%s:0%02o ---> 0x%04x\n", cmdcodelist[i].cmd, cmdcodelist[i].type, code);
+        if(cerrno != 0) {
+            printf("\terror - %d: %s", cerrno, cerrmsg);
+            freecerr();
+        }
+    }
+    free_cmdtype_code();
+    return 0;
+}