From 0ee5dd21d0f2e81c5d9f763a605a56d970bc1c9e Mon Sep 17 00:00:00 2001 From: cancel Date: Fri, 30 Nov 2018 15:44:14 +0900 Subject: [PATCH] Add 'R' --- sim.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/sim.c b/sim.c index 3a8c585..668a377 100644 --- a/sim.c +++ b/sim.c @@ -291,6 +291,7 @@ Usz usz_clamp(Usz val, Usz min, Usz max) { _('M', 'm', modulo) \ _('O', 'o', offset) \ _('P', 'p', push) \ + _('R', 'r', random) \ _('T', 't', track) \ _('U', 'u', uturn) \ _('V', 'v', beam) \ @@ -551,6 +552,35 @@ BEGIN_DUAL_PHASE_1(push) POKE(1, write_val_x[0], PEEK(0, 1)); END_PHASE +BEGIN_DUAL_PHASE_0(random) + REALIZE_DUAL; + BEGIN_DUAL_PORTS + PORT(0, 1, IN); + PORT(0, 2, IN); + PORT(1, 0, OUT); + END_PORTS +END_PHASE +BEGIN_DUAL_PHASE_1(random) + REALIZE_DUAL; + STOP_IF_DUAL_INACTIVE; + Usz a = INDEX(PEEK(0, 1)); + Usz b = INDEX(PEEK(0, 2)); + // we should ask if this is an ok behavior as defined in the existing js. + Usz min, max; + if (a == b) { + POKE(1, 0, GLYPH(a)); + return; + } else if (b > a) { + min = a; + max = b; + } else { + max = a; + min = b; + } + Usz val = (y * 5 + x * 3) * Tick_number % (max - min) + min; + POKE(1, 0, GLYPH(val)); +END_PHASE + BEGIN_DUAL_PHASE_0(track) PSEUDO_DUAL; Isz read_val_x = 1;