Browse Source

Merge pull request #22 from npisanti/master

changes A C D F I to match orcaJS
master
Лu Лinveгa 6 years ago
committed by GitHub
parent
commit
df0e1276ec
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 46
      sim.c

46
sim.c

@ -50,7 +50,7 @@ static Usz index_of(Glyph c) {
#else #else
// Reference implementation // Reference implementation
static Usz index_of(Glyph c) { static Usz index_of(Glyph c) {
if (c == '.') if (c == '.' || c == '*')
return 0; return 0;
if (c >= '0' && c <= '9') if (c >= '0' && c <= '9')
return (Usz)(c - '0'); return (Usz)(c - '0');
@ -417,11 +417,11 @@ END_OPERATOR
BEGIN_OPERATOR(add) BEGIN_OPERATOR(add)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
PORT(0, -1, IN);
PORT(0, 1, IN); PORT(0, 1, IN);
PORT(0, 2, IN);
PORT(1, 0, OUT); PORT(1, 0, OUT);
Usz a = index_of(PEEK(0, 1)); Usz a = index_of(PEEK(0, -1));
Usz b = index_of(PEEK(0, 2)); Usz b = index_of(PEEK(0, 1));
POKE(1, 0, indexed_glyphs[(a + b) % Glyphs_index_count]); POKE(1, 0, indexed_glyphs[(a + b) % Glyphs_index_count]);
END_OPERATOR END_OPERATOR
@ -453,7 +453,7 @@ BEGIN_OPERATOR(clock)
if (rate == 0) if (rate == 0)
rate = 1; rate = 1;
if (mod_num == 0) if (mod_num == 0)
mod_num = 10; mod_num = 8;
Glyph g = glyph_of(Tick_number / rate % mod_num); Glyph g = glyph_of(Tick_number / rate % mod_num);
POKE(1, 0, g); POKE(1, 0, g);
END_OPERATOR END_OPERATOR
@ -468,19 +468,19 @@ BEGIN_OPERATOR(delay)
if (rate == 0) if (rate == 0)
rate = 1; rate = 1;
if (mod_num == 0) if (mod_num == 0)
mod_num = 10; mod_num = 8;
Glyph g = Tick_number % (rate * mod_num) == 0 ? '*' : '.'; Glyph g = Tick_number % (rate * mod_num) == 0 ? '*' : '.';
POKE(1, 0, g); POKE(1, 0, g);
END_OPERATOR END_OPERATOR
BEGIN_OPERATOR(if) BEGIN_OPERATOR(if)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
PORT(0, -1, IN);
PORT(0, 1, IN); PORT(0, 1, IN);
PORT(0, 2, IN);
PORT(1, 0, OUT); PORT(1, 0, OUT);
Glyph g0 = PEEK(0, 1); Glyph g0 = PEEK(0, -1);
Glyph g1 = PEEK(0, 2); Glyph g1 = PEEK(0, 1);
POKE(1, 0, g0 == g1 ? '*' : '.'); POKE(1, 0, (g0 == g1 && g0 != '.' && g1 != '.') ? '*' : '.');
END_OPERATOR END_OPERATOR
BEGIN_OPERATOR(generator) BEGIN_OPERATOR(generator)
@ -506,25 +506,19 @@ END_OPERATOR
BEGIN_OPERATOR(increment) BEGIN_OPERATOR(increment)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
PORT(0, -1, IN);
PORT(0, 1, IN); PORT(0, 1, IN);
PORT(0, 2, IN);
PORT(1, 0, IN | OUT); PORT(1, 0, IN | OUT);
Usz a = index_of(PEEK(0, 1)); Glyph g = PEEK(0, -1);
Usz b = index_of(PEEK(0, 2)); Usz rate = 1;
if (g != '.' && g != '*')
rate = index_of(g);
Usz max = index_of(PEEK(0, 1));
Usz val = index_of(PEEK(1, 0)); Usz val = index_of(PEEK(1, 0));
if (a < b) { if (max == 0)
if (val < a || val >= b - 1) max = 36;
val = a; val = val + rate;
else val = val % max;
++val;
} else if (a > b) {
if (val <= b || val > a)
val = a - 1;
else
--val;
} else {
return;
}
POKE(1, 0, glyph_of(val)); POKE(1, 0, glyph_of(val));
END_OPERATOR END_OPERATOR

Loading…
Cancel
Save