diff --git a/sim.c b/sim.c index 0e98e20..64809ef 100644 --- a/sim.c +++ b/sim.c @@ -260,6 +260,7 @@ Usz UCLAMP(Usz val, Usz min, Usz max) { _('W', 'w', west) \ _('Z', 'z', southeast) \ _('A', 'a', add) \ + _('B', 'b', banger) \ _('F', 'f', if) \ _('G', 'g', generator) \ _('H', 'h', halt) \ @@ -300,6 +301,40 @@ BEGIN_DUAL_PHASE_1(add) POKE(1, 0, glyphs_add(PEEK(0, 1), PEEK(0, 2))); END_PHASE +BEGIN_DUAL_PHASE_0(banger) + REALIZE_DUAL; + BEGIN_DUAL_PORTS + PORT(0, 1, IN | NONLOCKING); + PORT(1, 0, OUT); + END_PORTS +END_PHASE +BEGIN_DUAL_PHASE_1(banger) + REALIZE_DUAL; + STOP_IF_DUAL_INACTIVE; + Glyph g = PEEK(0, 1); + Glyph result; + switch (g) { + case '1': + case 'N': + case 'n': + case 'E': + case 'e': + case 'S': + case 's': + case 'W': + case 'w': + case 'Z': + case 'z': + case '*': + result = '*'; + break; + default: + result = '.'; + break; + } + POKE(1, 0, result); +END_PHASE + BEGIN_DUAL_PHASE_0(if) REALIZE_DUAL; BEGIN_DUAL_PORTS