1 package edu.berkeley.obits.device.atmel;
3 import edu.berkeley.obits.*;
4 //import static edu.berkeley.cs.obits.device.atmel.Wires.*;
7 import org.ibex.util.Log;
9 public abstract class AtmelDevice {
11 public static class Util {
12 public static int lutSwap(int x) {
25 public static class Constants {
26 public static final int NONE = -1;
27 public static final int L0 = 0;
28 public static final int L1 = 1;
29 public static final int L2 = 2;
30 public static final int L3 = 3;
31 public static final int L4 = 4;
33 public static final int NORTH = 8;
34 public static final int WEST = 9;
35 public static final int SOUTH = 10;
36 public static final int EAST = 11;
38 public static final int XLUT = 12;
39 public static final int YLUT = 13;
40 public static final int ZMUX = 14;
42 public static final int H4 = 15;
43 public static final int V4 = 16;
45 public static final int NW = 20;
46 public static final int SW = 21;
47 public static final int NE = 22;
48 public static final int SE = 23;
50 public static final int SLOW = 24;
51 public static final int MEDIUM = 25;
52 public static final int FAST = 26;
54 public static final int ALWAYS_ON = 27;
55 public static final int ALWAYS_OFF = 28;
57 public static final int FB = 29;
59 public static final int LUT_SELF = 0xAA;
60 public static final int LUT_Z = 0xF0;
61 public static final int LUT_OTHER = 0xCC;
63 public static final int TMUX_W_AND_Z = 0x00001001;
64 public static final int TMUX_W = 0x00001002;
65 public static final int TMUX_Z = 0x00001004;
66 public static final int TMUX_W_AND_FB = 0x00001008;
67 public static final int TMUX_FB = 0x00001010;
72 /** issue a command to the device in Mode4 format; see Gosset's documentation for further details */
73 public int getWidth() { return 24; }
74 public int getHeight() { return 24; }
76 private static String hex2(int i) {
77 String ret = Integer.toString(i, 16);
78 while(ret.length() < 2) ret = "0"+ret;
79 return ret.toUpperCase();
82 public void readMode4(InputStream in) throws IOException {
84 BufferedReader br = new BufferedReader(new InputStreamReader(in));
85 for(String str = br.readLine(); str != null; str = br.readLine()) {
86 long foo = Long.parseLong(str, 16);
87 mode4((int)(foo >> 24), (int)(foo >> 16), (int)(foo >> 8), (int)(foo >> 0));
94 public abstract void flush();
96 public void writeMode4(Writer w) throws IOException {
97 for(int x=0; x<getWidth(); x++)
98 for(int y=0; y<getWidth(); y++)
99 for(int z=0; z<255; z++) {
100 if ((z > 0x09 && z < 0x10) ||
101 (z > 0x11 && z < 0x20) ||
102 (z > 0x29 && z < 0x30) ||
103 (z > 0x39 && z < 0x40) ||
104 (z > 0x41 && z < 0x60) ||
105 (z > 0x67 && z < 0x70) ||
106 (z > 0x77 && z < 0xD0) ||
112 w.write(hex2(mode4(z, y, x) & 0xff));
119 public abstract void mode4(int z, int y, int x, int d);
120 public abstract byte mode4(int z, int y, int x);
121 public byte mode4zyx(int zyx) { return mode4(zyx>>24, (zyx>>16)&0xff, (zyx>>8)&0xff); }
122 public void mode4zyx(int zyx, int d, int invmask) { mode4(zyx>>24, (zyx>>16)&0xff, (zyx>>8)&0xff, d, invmask); }
123 public void mode4(int z, int y, int x, int d, int invmask) {
124 int old = mode4(z, y, x);
129 public void mode4zyx(int zyx, int bit, boolean set) { mode4(zyx>>24, (zyx>>16)&0xff, (zyx>>8)&0xff, bit, set); }
130 public void mode4(int z, int y, int x, int bit, boolean set) {
131 int old = mode4(z, y, x);
133 old |= set ? (1 << bit) : 0;