summaryrefslogtreecommitdiff
path: root/2003/i/buzz/src/busp/busp.cc
diff options
context:
space:
mode:
Diffstat (limited to '2003/i/buzz/src/busp/busp.cc')
-rw-r--r--2003/i/buzz/src/busp/busp.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/2003/i/buzz/src/busp/busp.cc b/2003/i/buzz/src/busp/busp.cc
index 0e90475..d830a30 100644
--- a/2003/i/buzz/src/busp/busp.cc
+++ b/2003/i/buzz/src/busp/busp.cc
@@ -35,6 +35,20 @@ Busp::Busp ()
sigaction (SIGUSR1, &sa, 0); // Il n'y aura pas d'erreur, cf doc.
// Active les interruptions.
sti ();
+ // Remplis le tableau d'inversion des données.
+ // Les fils sont soudés à l'envers.
+ for (int i = 0; i < 256; ++i)
+ {
+ m_inverse[i] =
+ (i << 7) & (1 << 7)
+ | (i << 5) & (1 << 6)
+ | (i << 3) & (1 << 5)
+ | (i << 1) & (1 << 4)
+ | (i >> 1) & (1 << 3)
+ | (i >> 3) & (1 << 2)
+ | (i >> 5) & (1 << 1)
+ | (i >> 7) & (1 << 0);
+ }
}
// Destructeur.
@@ -91,7 +105,7 @@ Busp::write (int addr, int data)
{
struct pbus_io io;
io.addr = addr;
- io.data = data;
+ io.data = m_inverse[data];
ioctl (m_fd, PBUS_WRITE, &io);
cout << "write " << addr << " " << data << endl;
}
@@ -103,6 +117,6 @@ Busp::read (int addr)
struct pbus_io io;
io.addr = addr;
ioctl (m_fd, PBUS_READ, &io);
- cout << "read " << addr << " = " << (int) io.data << endl;
- return io.data;
+ cout << "read " << addr << " = " << (int) m_inverse[io.data] << endl;
+ return m_inverse[io.data];
}