second massive overhaul of slipway; now it works on all ps1 problems
[fleet.git] / src / edu / berkeley / fleet / slipway / test.c
1 #include<stdio.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
5 #include <stdint.h>
6
7 #define uint32 uint32_t
8 #define uint64 uint64_t
9 static uint32 fd;
10
11 void sendc(char c) {
12   uint32 rv = write(fd, &c, 1);
13   if (rv != 1) {
14     printf("write ret: %d\n", rv);
15   }
16   printf("send: %x\n", c);
17 }
18
19 void send(int dest, uint64 i) {
20   sendc((dest >> 8) & 0xff);
21   sendc((dest >> 0) & 0xff);
22   sendc((i >>32) & 0xff);
23   sendc((i >>24) & 0xff);
24   sendc((i >>16) & 0xff);
25   sendc((i >> 8) & 0xff);
26   sendc((i >> 0) & 0xff);
27 }
28
29 char recvc() {
30   char c;
31   uint32 rv = read(fd, &c, 1);
32   if (rv != 1) {
33     printf("read ret: %d\n", rv);
34   }
35   return c;
36 }
37
38 uint64 recv() {
39   uint64 ret = 0
40     | (((uint64)recvc()) << 32)
41     | (((uint64)recvc()) << 24)
42     | (((uint64)recvc()) << 16)
43     | (((uint64)recvc()) <<  8)
44     | (((uint64)recvc()) <<  0)
45     ;
46   return ret;
47 }
48
49 void sendbits(int num, int dat) {
50   sendc(num);
51   while(num > 0) {
52     sendc((dat>>(num>=8 ? (num-8):0)) & 0xff);
53     num -= 8;
54   }
55 }
56
57 uint64_t inst(int boxname, int tokenin, int datain, int latch, int dataout, int tokenout, int count, int dest) {
58   uint64_t ret = 0;
59   ret |= dest;     ret <<= 7;
60   ret |= count;    ret <<= 1;
61   ret |= tokenout; ret <<= 1;
62   ret |= dataout;  ret <<= 1;
63   ret |= latch;    ret <<= 1;
64   ret |= datain;   ret <<= 1;
65   ret |= tokenin;  ret <<= 11;
66   ret |= boxname;
67   return ret;
68 }
69
70 int main(int argc, char** argv) {
71   char c;
72   uint32 i,j;
73   int64_t result;
74   int64_t temp;
75   printf("hello.\n");
76   fd = open(argv[1], O_RDWR);
77   printf("open %s = %d\n", argv[1], fd);
78
79   if (argc > 2) {
80     int fd2 = open(argv[2], O_RDWR);
81     printf("open %s = %d\n", argv[2], fd2);
82     while(1) {
83       i = read(fd2, &c, 1);
84       if (i!=1) break;
85       sendc(c);
86     }
87   }
88
89   printf("\n===================================================================\n\n");
90   while(1) {
91     result = 0;
92     for(j=0; j<6; j++) {
93       temp = recvc();
94       temp = temp << (j * 8);
95       result = result | temp;
96     }
97     printf("%lld = 0x%llx\n", result, result);
98     fflush(stdout);
99   }
100   return 0;
101 }