ref: a53ce88328b24b591b51d8db3f74f7b562b30c03
parent: fd0c4b9b42bfd84b791b1b61d87d1382e5e1cc40
author: Nicola Pisanti <nicola@npisanti.com>
date: Tue Apr 23 17:56:14 EDT 2019
changes A C D F I to match orcaJS
--- a/sim.c
+++ b/sim.c
@@ -50,7 +50,7 @@
#else
// Reference implementation
static Usz index_of(Glyph c) {
- if (c == '.')
+ if (c == '.' || c == '*')
return 0;
if (c >= '0' && c <= '9')
return (Usz)(c - '0');
@@ -417,11 +417,11 @@
BEGIN_OPERATOR(add)
LOWERCASE_REQUIRES_BANG;
+ PORT(0, -1, IN);
PORT(0, 1, IN);
- PORT(0, 2, IN);
PORT(1, 0, OUT);
- Usz a = index_of(PEEK(0, 1));
- Usz b = index_of(PEEK(0, 2));
+ Usz a = index_of(PEEK(0, -1));
+ Usz b = index_of(PEEK(0, 1));
POKE(1, 0, indexed_glyphs[(a + b) % Glyphs_index_count]);
END_OPERATOR
@@ -453,7 +453,7 @@
if (rate == 0)
rate = 1;
if (mod_num == 0)
- mod_num = 10;
+ mod_num = 8;
Glyph g = glyph_of(Tick_number / rate % mod_num);
POKE(1, 0, g);
END_OPERATOR
@@ -468,7 +468,7 @@
if (rate == 0)
rate = 1;
if (mod_num == 0)
- mod_num = 10;
+ mod_num = 8;
Glyph g = Tick_number % (rate * mod_num) == 0 ? '*' : '.';
POKE(1, 0, g);
END_OPERATOR
@@ -475,12 +475,12 @@
BEGIN_OPERATOR(if)
LOWERCASE_REQUIRES_BANG;
+ PORT(0, -1, IN);
PORT(0, 1, IN);
- PORT(0, 2, IN);
PORT(1, 0, OUT);
- Glyph g0 = PEEK(0, 1);
- Glyph g1 = PEEK(0, 2);
- POKE(1, 0, g0 == g1 ? '*' : '.');
+ Glyph g0 = PEEK(0, -1);
+ Glyph g1 = PEEK(0, 1);
+ POKE(1, 0, (g0 == g1 && g0 != '.' && g1 != '.') ? '*' : '.');
END_OPERATOR
BEGIN_OPERATOR(generator)
@@ -506,25 +506,19 @@
BEGIN_OPERATOR(increment)
LOWERCASE_REQUIRES_BANG;
+ PORT(0, -1, IN);
PORT(0, 1, IN);
- PORT(0, 2, IN);
PORT(1, 0, IN | OUT);
- Usz a = index_of(PEEK(0, 1));
- Usz b = index_of(PEEK(0, 2));
+ Glyph g = PEEK(0, -1);
+ Usz rate = 1;
+ if (g != '.' && g != '*')
+ rate = index_of(g);
+ Usz max = index_of(PEEK(0, 1));
Usz val = index_of(PEEK(1, 0));
- if (a < b) {
- if (val < a || val >= b - 1)
- val = a;
- else
- ++val;
- } else if (a > b) {
- if (val <= b || val > a)
- val = a - 1;
- else
- --val;
- } else {
- return;
- }
+ if (max == 0)
+ max = 36;
+ val = val + rate;
+ val = val % max;
POKE(1, 0, glyph_of(val));
END_OPERATOR