chiark / gitweb /
working on making realtime link
authorian <ian>
Thu, 4 May 2006 23:58:43 +0000 (23:58 +0000)
committerian <ian>
Thu, 4 May 2006 23:58:43 +0000 (23:58 +0000)
hostside/Makefile
hostside/skelproto-pic.c
hostside/skelproto-pic.h

index add235520b34f16936d8fa4d12d98e67b4df5a40..0ac0a63f1b15fa387f1c081b7e49ffa812f6d025 100644 (file)
@@ -16,7 +16,8 @@ hostside-old: serialio.o nmra.o main.o encode.o utils.o
 
 realtime:      realtime.o startup.o cdumgr.o           \
                 cmdinput.o                             \
-                utils.o serialio.o auproto-pic.o
+                utils.o serialio.o auproto-pic.o       \
+                __oop-read-copy.o -loop
                $(LINK)
 
 proto-expanded:        ../cebpic/README.protocol
index ec565e21f55df3d72aa8f759b049f5e8ab896a47..72440e36ad80dfedf4cd73cd45cd6645ae99d2f2 100644 (file)
@@ -7,23 +7,35 @@
  * and related functions
  */
 
+#include <assert.h>
+
 #include "common.h"
 #include "auproto-pic.h"
 
-extern void enco_pic_anyinsn(PicInsn *out, const PicInsnInfo *pii,
-                            int objnum) {
+extern void enco_pic_any(PicInsn *out, int opcode, int argbits, int objnum) {
   unsigned long as= objnum;
   int i;
 
-  out->l= 1 + pii->argbits/7;
+  assert(!(as & (~0UL << argbits)));
+  out->l= 1 + argbits;
   for (i= out->l - 1;
        i >= 0;
        i--, as >>= 7)
     out->d[i]= (as & 0x07fUL) | 0x080UL;
   out->d[out->l - 1] &= ~0x080UL;
-  out->d[0] |= pii->opcode;
+  out->d[0] |= opcode;
 }
 
+#define C ,
+#define ENCO(w, xa, opcode, argbits, objnum)           \
+  extern void enco_pic_##w(PicInsn *out  xa) {         \
+    return enco_pic_any(out, opcode, argbits, objnum); \
+  }
+
+ENCO(pii, C const PicInsnInfo *pii C int objn,pii->opcode,pii->argbits,objn)
+ENCO(@cnameyn@,             , @opcodeyn@, 0,0)             @h2p@ @arglentf=0@
+ENCO(@cnameyn@, C int objnum, @opcodeyn@, @arglen@,objnum) @h2p@ @arglentf=1@
+
 const PicInsnInfo *lookup_byopcode(Byte byte0, const PicInsnInfo *table) {
   const PicInsnInfo *pi;
   for (pi= table;
index f748382bbf1abd13b3e22664949eb394ea9ec738..d30cad1d9c802a0ae64f292f7e6f9de173f26757 100644 (file)
@@ -13,8 +13,8 @@
 typedef struct PicInsnInfo PicInsnInfo;
 typedef void PicInputFn(const PicInsnInfo *pii, const PicInsn *pi, int objnum);
 
-void enco_pic_@cname@(PicInsn *out);            @h2p@ @arglentf=0@
-void enco_pic_@cname@(PicInsn *out, int objum); @h2p@ @arglentf=1@
+void enco_pic_@cnameyn@(PicInsn *out);            @h2p@ @arglentf=0@
+void enco_pic_@cnameyn@(PicInsn *out, int objum); @h2p@ @arglentf=1@
 PicInputFn on_pic_@cnameyn@;                    @p2h@
 #define PICMSG_@cnameynu@       @opcodeyn@
 #define PICMSG_@cnameynu@_M     @opcodemaskyn@
@@ -23,7 +23,8 @@ PicInputFn on_pic_@cnameyn@;                    @p2h@
 extern void enco_pic_polarity_begin(PicInsn *out);
 extern void enco_pic_polarity_setbit(PicInsn *out, int objnum);
 
-extern void enco_pic_anyinsn(PicInsn *out, const PicInsnInfo *pii, int objnum);
+extern void enco_pic_pii(PicInsn *out, const PicInsnInfo *pii, int objnum);
+extern void enco_pic_any(PicInsn *out, int opcode, int argbits, int objnum);
 
 const PicInsnInfo *lookup_byopcode(Byte byte0, const PicInsnInfo *table);
 void picinsn_decode(const PicInsn *pi, const PicInsnInfo *table,