Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
The stackmat flips its data bits!
Browse files Browse the repository at this point in the history
  • Loading branch information
jfly committed May 28, 2014
1 parent e5595f0 commit a071c22
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 70 deletions.
141 changes: 71 additions & 70 deletions release/fskube.js
Original file line number Diff line number Diff line change
Expand Up @@ -10523,7 +10523,7 @@ function __ZN6fskube16Rs232Synthesizer7receiveEi($this,$data) {
if (!($16)) {
$17 = 1 << $storemerge;
$18 = $17 & $data;
$19 = ($18|0)!=(0);
$19 = ($18|0)==(0);
$20 = HEAP32[$15>>2]|0;
$21 = (($20) + 8|0);
$22 = HEAP32[$21>>2]|0;
Expand Down Expand Up @@ -10558,103 +10558,104 @@ function __ZN6fskube16Rs232Interpreter7receiveEb($this,$b) {
$b = $b|0;
var $$phi$trans$insert = 0, $$pre = 0, $$pre$phi5Z2D = 0, $$pre2 = 0, $$pre4 = 0, $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0;
var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0;
var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr6 = 0, $vararg_ptr7 = 0, label = 0, sp = 0;
var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr6 = 0, $vararg_ptr7 = 0, label = 0, sp = 0;
sp = STACKTOP;
STACKTOP = STACKTOP + 16|0;
$vararg_buffer = sp;
$0 = (($this) + 8|0);
$1 = HEAP8[$0>>0]|0;
$2 = $1 & 1;
$3 = ($2<<24>>24)==(0);
if (!($3)) {
$0 = $b&1;
$1 = (($this) + 8|0);
$2 = HEAP8[$1>>0]|0;
$3 = $2 & 1;
$4 = ($3<<24>>24)==(0);
if (!($4)) {
if ($b) {
HEAP8[$0>>0] = 0;
$4 = (($this) + 20|0);
HEAP32[$4>>2] = 0;
HEAP8[$1>>0] = 0;
$5 = (($this) + 20|0);
HEAP32[$5>>2] = 0;
STACKTOP = sp;return;
}
$5 = (($this) + 12|0);
$6 = HEAP32[$5>>2]|0;
$7 = (($6) + 1)|0;
HEAP32[$5>>2] = $7;
$8 = (($this) + 4|0);
$9 = HEAP32[$8>>2]|0;
$10 = ($9|0)==(0|0);
if ($10) {
$6 = (($this) + 12|0);
$7 = HEAP32[$6>>2]|0;
$8 = (($7) + 1)|0;
HEAP32[$6>>2] = $8;
$9 = (($this) + 4|0);
$10 = HEAP32[$9>>2]|0;
$11 = ($10|0)==(0|0);
if ($11) {
STACKTOP = sp;return;
}
$11 = HEAP32[$9>>2]|0;
$12 = (($11) + 8|0);
$13 = HEAP32[$12>>2]|0;
FUNCTION_TABLE_vii[$13 & 255]($9,-1);
$12 = HEAP32[$10>>2]|0;
$13 = (($12) + 8|0);
$14 = HEAP32[$13>>2]|0;
FUNCTION_TABLE_vii[$14 & 255]($10,-1);
STACKTOP = sp;return;
}
$14 = (($this) + 20|0);
$15 = HEAP32[$14>>2]|0;
$16 = ($15|0)==(8);
if ($16) {
$15 = (($this) + 20|0);
$16 = HEAP32[$15>>2]|0;
$17 = ($16|0)==(8);
if ($17) {
do {
if ($b) {
$26 = HEAP32[5296>>2]|0;
$27 = (($26) + 22|0);
$28 = HEAP8[$27>>0]|0;
$29 = $28 & 1;
$30 = ($29<<24>>24)==(0);
if ($30) {
$27 = HEAP32[5296>>2]|0;
$28 = (($27) + 22|0);
$29 = HEAP8[$28>>0]|0;
$30 = $29 & 1;
$31 = ($30<<24>>24)==(0);
if ($31) {
$$pre4 = (($this) + 16|0);
$$pre$phi5Z2D = $$pre4;
break;
} else {
$31 = (($this) + 16|0);
$32 = HEAP8[$31>>0]|0;
$33 = $32&255;
HEAP32[$vararg_buffer>>2] = $26;
$32 = (($this) + 16|0);
$33 = HEAP8[$32>>0]|0;
$34 = $33&255;
HEAP32[$vararg_buffer>>2] = $27;
$vararg_ptr6 = (($vararg_buffer) + 4|0);
HEAP32[$vararg_ptr6>>2] = 1;
$vararg_ptr7 = (($vararg_buffer) + 8|0);
HEAP32[$vararg_ptr7>>2] = $33;
HEAP32[$vararg_ptr7>>2] = $34;
(_printf((5360|0),($vararg_buffer|0))|0);
$$pre$phi5Z2D = $31;
$$pre$phi5Z2D = $32;
break;
}
} else {
$17 = (($this) + 16|0);
$18 = (($this) + 4|0);
$19 = HEAP32[$18>>2]|0;
$20 = ($19|0)==(0|0);
if ($20) {
$$pre$phi5Z2D = $17;
$18 = (($this) + 16|0);
$19 = (($this) + 4|0);
$20 = HEAP32[$19>>2]|0;
$21 = ($20|0)==(0|0);
if ($21) {
$$pre$phi5Z2D = $18;
} else {
$21 = HEAP8[$17>>0]|0;
$22 = $21&255;
$23 = HEAP32[$19>>2]|0;
$24 = (($23) + 8|0);
$25 = HEAP32[$24>>2]|0;
FUNCTION_TABLE_vii[$25 & 255]($19,$22);
$$pre$phi5Z2D = $17;
$22 = HEAP8[$18>>0]|0;
$23 = $22&255;
$24 = HEAP32[$20>>2]|0;
$25 = (($24) + 8|0);
$26 = HEAP32[$25>>2]|0;
FUNCTION_TABLE_vii[$26 & 255]($20,$23);
$$pre$phi5Z2D = $18;
}
}
} while(0);
HEAP8[$0>>0] = 1;
$34 = (($this) + 12|0);
HEAP32[$34>>2] = 0;
HEAP8[$1>>0] = 1;
$35 = (($this) + 12|0);
HEAP32[$35>>2] = 0;
HEAP8[$$pre$phi5Z2D>>0] = 0;
$$pre = HEAP32[$14>>2]|0;
$37 = $$pre;$40 = 0;
$$pre = HEAP32[$15>>2]|0;
$38 = $$pre;$41 = 0;
} else {
$$phi$trans$insert = (($this) + 16|0);
$$pre2 = HEAP8[$$phi$trans$insert>>0]|0;
$37 = $15;$40 = $$pre2;
$38 = $16;$41 = $$pre2;
}
$35 = $b&1;
$36 = $35 << $37;
$38 = (($this) + 16|0);
$39 = $40&255;
$41 = $39 | $36;
$42 = $41&255;
HEAP8[$38>>0] = $42;
$43 = (($37) + 1)|0;
HEAP32[$14>>2] = $43;
$36 = $0 ^ 1;
$37 = $36 << $38;
$39 = (($this) + 16|0);
$40 = $41&255;
$42 = $40 | $37;
$43 = $42&255;
HEAP8[$39>>0] = $43;
$44 = (($38) + 1)|0;
HEAP32[$15>>2] = $44;
STACKTOP = sp;return;
}
function __ZN6fskube16Rs232SynthesizerD1Ev($this) {
Expand Down Expand Up @@ -11570,7 +11571,7 @@ function _strtok($s,$sep) {
$49 = $42;
$50 = $49 & 3;
$51 = ($50|0)==(0);
L36: do {
L35: do {
if ($51) {
$$02$lcssa$i$i = $42;
} else {
Expand All @@ -11594,7 +11595,7 @@ function _strtok($s,$sep) {
$57 = ($56|0)==(0);
if ($57) {
$$02$lcssa$i$i = $54;
break L36;
break L35;
}
$$pre = HEAP8[$54>>0]|0;
$$026$i$i = $54;$58 = $$pre;
Expand All @@ -11608,7 +11609,7 @@ function _strtok($s,$sep) {
$65 = $64 ^ -2139062144;
$66 = $65 & $63;
$67 = ($66|0)==(0);
L43: do {
L42: do {
if ($67) {
$76 = $62;$w$03$i$i = $$02$lcssa$i$i;
while(1) {
Expand All @@ -11621,7 +11622,7 @@ function _strtok($s,$sep) {
$69 = (($w$03$i$i) + 4|0);
if (!($81)) {
$w$0$lcssa$i$i = $w$03$i$i;
break L43;
break L42;
}
$68 = HEAP32[$69>>2]|0;
$70 = (($68) + -16843009)|0;
Expand Down
11 changes: 11 additions & 0 deletions src/rs232.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ LOG_HANDLE("rs232")

Rs232Synthesizer::Rs232Synthesizer() {}

// It looks like the stackmat flips its data bits. I don't know
// if this is part of the 8N1 protocol, or just something weird
// the stackmat does.
#define FLIP_DATA_BITS true

void Rs232Synthesizer::receive(int data) {
if(data < 0) {
// Send our "idle" signal (low) for a good little while.
Expand All @@ -21,6 +26,9 @@ void Rs232Synthesizer::receive(int data) {
// send bits of char, least significant first (little endian)
for(int i = 0; i < 8; i++) {
bool bit = (data >> i) & 1;
#ifdef FLIP_DATA_BITS
bit = !bit;
#endif
send(bit);
}

Expand Down Expand Up @@ -64,6 +72,9 @@ void Rs232Interpreter::receive(bool b) {
inProgressChar = 0;
}

#ifdef FLIP_DATA_BITS
b = !b;
#endif
inProgressChar |= (b << nthBit);
nthBit++;
}
Expand Down

0 comments on commit a071c22

Please sign in to comment.