Add S_INH (no operands) and S_BRANCH
authorNick Downing <nick@ndcode.org>
Fri, 14 Jun 2019 23:27:57 +0000 (09:27 +1000)
committerNick Downing <nick@ndcode.org>
Fri, 14 Jun 2019 23:27:57 +0000 (09:27 +1000)
aspdp11/pdp11.h
aspdp11/pdp11mch.c
aspdp11/pdp11pst.c
aspdp11/test/crt0.asm
asxxsrc/asout.c

index 7b23d43..7f229fb 100644 (file)
@@ -66,7 +66,7 @@
 /*\r
  * PDP11 Instruction types\r
  */\r
-#define S_ABS          50\r
+#define S_INH          50\r
 #define S_BRANCH       51\r
 #define S_DOUBLE       52\r
 #define S_FLOP         53\r
index 45d2af1..2a3247c 100644 (file)
@@ -78,7 +78,7 @@ struct mne *mp;
                /*\r
                 * Opcode Processing\r
                 */\r
-               outaw(op | ((t1 | v1) << 6) | t2 | v2);\r
+               outaw(op + ((t1 + v1) << 6) + t2 + v2);\r
 \r
                /*\r
                 * Source Processing\r
@@ -131,7 +131,7 @@ struct mne *mp;
                /*\r
                 * Opcode Processing\r
                 */\r
-               outaw(op | t1 | v1);\r
+               outaw(op + t1 + v1);\r
 \r
                /*\r
                 * Source/Destination Processing\r
@@ -358,26 +358,27 @@ struct mne *mp;
                default:        aerr();                 break;\r
                }\r
                break;\r
+#endif\r
 \r
        case S_INH:\r
                outaw(op);\r
                break;\r
 \r
-       case S_JXX:\r
+       case S_BRANCH:\r
                expr(&e1, 0);\r
                if (mchpcr(&e1)) {\r
                        v1 = (int) (e1.e_addr - dot.s_addr - 2);\r
                        v1 >>= 1;\r
-                       if ((v1 < -512) || (v1 > 511))\r
+                       if ((v1 < -128) || (v1 > 127))\r
                                aerr();\r
-                       outaw(op + (v1 & 0x03FF));\r
+                       outaw(op + (v1 & 0x00FF));\r
                } else {\r
-                       outrwm(&e1, R_PCR | R_JXX, op);\r
+                       outrb(&e1, R_PCR);\r
+                       outab(op >> 8);\r
                }\r
                if (e1.e_mode != S_USER)\r
                        rerr();\r
                break;\r
-#endif\r
 \r
        default:\r
                opcycles = OPCY_ERR;\r
index 6b40dc4..5a78497 100644 (file)
@@ -342,33 +342,33 @@ struct    mne     mne[] = {
 \r
        /* flag-setting */\r
 \r
-    {  NULL,   "nop",          S_ABS,          0,      0000240 },\r
-    {  NULL,   "clc",          S_ABS,          0,      0000241 },\r
-    {  NULL,   "clv",          S_ABS,          0,      0000242 },\r
-    {  NULL,   "clz",          S_ABS,          0,      0000244 },\r
-    {  NULL,   "cln",          S_ABS,          0,      0000250 },\r
-    {  NULL,   "ccc",          S_ABS,          0,      0000257 },\r
-    {  NULL,   "sec",          S_ABS,          0,      0000261 },\r
-    {  NULL,   "sev",          S_ABS,          0,      0000262 },\r
-    {  NULL,   "sez",          S_ABS,          0,      0000264 },\r
-    {  NULL,   "sen",          S_ABS,          0,      0000270 },\r
-    {  NULL,   "scc",          S_ABS,          0,      0000277 },\r
-    {  NULL,   "halt",         S_ABS,          0,      0000000 },\r
-    {  NULL,   "wait",         S_ABS,          0,      0000001 },\r
-    {  NULL,   "rti",          S_ABS,          0,      0000002 },\r
-    {  NULL,   "bpt",          S_ABS,          0,      0000003 },\r
-    {  NULL,   "iot",          S_ABS,          0,      0000004 },\r
-    {  NULL,   "reset",        S_ABS,          0,      0000005 },\r
-    {  NULL,   "rtt",          S_ABS,          0,      0000006 },\r
-    {  NULL,   "mfpt",         S_ABS,          0,      0000007 },\r
+    {  NULL,   "nop",          S_INH,          0,      0000240 },\r
+    {  NULL,   "clc",          S_INH,          0,      0000241 },\r
+    {  NULL,   "clv",          S_INH,          0,      0000242 },\r
+    {  NULL,   "clz",          S_INH,          0,      0000244 },\r
+    {  NULL,   "cln",          S_INH,          0,      0000250 },\r
+    {  NULL,   "ccc",          S_INH,          0,      0000257 },\r
+    {  NULL,   "sec",          S_INH,          0,      0000261 },\r
+    {  NULL,   "sev",          S_INH,          0,      0000262 },\r
+    {  NULL,   "sez",          S_INH,          0,      0000264 },\r
+    {  NULL,   "sen",          S_INH,          0,      0000270 },\r
+    {  NULL,   "scc",          S_INH,          0,      0000277 },\r
+    {  NULL,   "halt",         S_INH,          0,      0000000 },\r
+    {  NULL,   "wait",         S_INH,          0,      0000001 },\r
+    {  NULL,   "rti",          S_INH,          0,      0000002 },\r
+    {  NULL,   "bpt",          S_INH,          0,      0000003 },\r
+    {  NULL,   "iot",          S_INH,          0,      0000004 },\r
+    {  NULL,   "reset",        S_INH,          0,      0000005 },\r
+    {  NULL,   "rtt",          S_INH,          0,      0000006 },\r
+    {  NULL,   "mfpt",         S_INH,          0,      0000007 },\r
 \r
        /* floating point ops */\r
 \r
-    {  NULL,   "cfcc",         S_ABS,          0,      0170000 },\r
-    {  NULL,   "setf",         S_ABS,          0,      0170001 },\r
-    {  NULL,   "setd",         S_ABS,          0,      0170011 },\r
-    {  NULL,   "seti",         S_ABS,          0,      0170002 },\r
-    {  NULL,   "setl",         S_ABS,          0,      0170012 },\r
+    {  NULL,   "cfcc",         S_INH,          0,      0170000 },\r
+    {  NULL,   "setf",         S_INH,          0,      0170001 },\r
+    {  NULL,   "setd",         S_INH,          0,      0170011 },\r
+    {  NULL,   "seti",         S_INH,          0,      0170002 },\r
+    {  NULL,   "setl",         S_INH,          0,      0170012 },\r
     {  NULL,   "clrf",         S_SINGLE,       0,      0170400 },\r
     {  NULL,   "negf",         S_SINGLE,       0,      0170700 },\r
     {  NULL,   "absf",         S_SINGLE,       0,      0170600 },\r
index 0918a29..8c14136 100644 (file)
@@ -6,7 +6,7 @@
 exit = 1
 
 start:
-;      setd
+       setd
        mov     2(sp),r0
        clr     -2(r0)
        mov     sp,r0
@@ -16,9 +16,9 @@ start:
        mov     r0,2(sp)
 1$: ;1:
        tst     (r0)+
-;      bne     1b
+       bne     1$ ;1b
        cmp     r0,*2(sp)
-;      blo     1f
+       blo     2$ ;1f
        tst     -(r0)
 2$: ;1:
        mov     r0,4(sp)
index 455504c..d3635ec 100644 (file)
@@ -356,7 +356,16 @@ a_uint v;
        int p_bytes;\r
 \r
        if (pass == 2) {\r
- fprintf(stderr, "0%06o: 0%06o\n", dot.s_addr, v & 0xffff);\r
+ switch (i) {\r
+ case 1:\r
+  fprintf(stderr, "0%06o: 0%03o\n", dot.s_addr, v & 0xff);\r
+  break;\r
+ case 2:\r
+  fprintf(stderr, "0%06o: 0%06o\n", dot.s_addr, v & 0xffff);\r
+  break;\r
+ default:\r
+  abort();\r
+ }\r
                out_lxb(i, v, 0);\r
                if (oflag) {\r
                        outchk(i, 0);\r
@@ -525,7 +534,16 @@ int r;
        int p_bytes;\r
 \r
        if (pass == 2) {\r
- fprintf(stderr, "0%06o: 0%06o\n", dot.s_addr, esp->e_addr & 0xffff);\r
+ switch (i) {\r
+ case 1:\r
+  fprintf(stderr, "0%06o: 0%03o\n", dot.s_addr, esp->e_addr & 0xff);\r
+  break;\r
+ case 2:\r
+  fprintf(stderr, "0%06o: 0%06o\n", dot.s_addr, esp->e_addr & 0xffff);\r
+  break;\r
+ default:\r
+  abort();\r
+ }\r
                if (esp->e_flag==0 && esp->e_base.e_ap==NULL &&\r
                   !((r & (R_PAGE | R_PCR))==R_PAGN)) {\r
                        /*\r