Browse Source

Merge pull request #7 from npisanti/master

compliant to orca release, T out disabled with len 0
master
Лu Лinveгa 6 years ago
committed by GitHub
parent
commit
985a2da33e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 33
      sim.c

33
sim.c

@ -372,7 +372,7 @@ END_OPERATOR
BEGIN_OPERATOR(osc) BEGIN_OPERATOR(osc)
PORT(0, 1, IN | PARAM); PORT(0, 1, IN | PARAM);
PORT(0, 2, IN | PARAM); PORT(0, 2, IN | PARAM);
Usz len = index_of(PEEK(0, 2)) + 1; Usz len = index_of(PEEK(0, 2));
if (len > Oevent_osc_int_count) if (len > Oevent_osc_int_count)
len = Oevent_osc_int_count; len = Oevent_osc_int_count;
for (Usz i = 0; i < len; ++i) { for (Usz i = 0; i < len; ++i) {
@ -431,8 +431,10 @@ BEGIN_OPERATOR(clock)
PORT(0, -1, IN | PARAM); PORT(0, -1, IN | PARAM);
PORT(0, 1, IN); PORT(0, 1, IN);
PORT(1, 0, OUT); PORT(1, 0, OUT);
Usz mod_num = index_of(PEEK(0, 1)) + 1; Usz mod_num = index_of(PEEK(0, 1));
Usz rate = index_of(PEEK(0, -1)) + 1; mod_num = (mod_num == 0) ? 10 : mod_num;
Usz rate = index_of(PEEK(0, -1));
rate = (rate == 0) ? 1 : rate;
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
@ -443,7 +445,8 @@ BEGIN_OPERATOR(delay)
PORT(0, -1, IN | PARAM); PORT(0, -1, IN | PARAM);
PORT(1, 0, OUT); PORT(1, 0, OUT);
Usz offset = index_of(PEEK(0, 1)); Usz offset = index_of(PEEK(0, 1));
Usz rate = index_of(PEEK(0, -1)) + 1; Usz rate = index_of(PEEK(0, -1));
rate = (rate == 0) ? 1 : rate;
Glyph g = (Tick_number + offset) % rate == 0 ? '*' : '.'; Glyph g = (Tick_number + offset) % rate == 0 ? '*' : '.';
POKE(1, 0, g); POKE(1, 0, g);
END_OPERATOR END_OPERATOR
@ -462,7 +465,7 @@ BEGIN_OPERATOR(generator)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
Isz out_x = (Isz)index_of(PEEK(0, -3)); Isz out_x = (Isz)index_of(PEEK(0, -3));
Isz out_y = (Isz)index_of(PEEK(0, -2)) + 1; Isz out_y = (Isz)index_of(PEEK(0, -2)) + 1;
Isz len = (Isz)index_of(PEEK(0, -1)) + 1; Isz len = (Isz)index_of(PEEK(0, -1));
PORT(0, -3, IN | PARAM); // x PORT(0, -3, IN | PARAM); // x
PORT(0, -2, IN | PARAM); // y PORT(0, -2, IN | PARAM); // y
PORT(0, -1, IN | PARAM); // len PORT(0, -1, IN | PARAM); // len
@ -511,7 +514,7 @@ END_OPERATOR
BEGIN_OPERATOR(loop) BEGIN_OPERATOR(loop)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
PORT(0, -1, IN | PARAM); PORT(0, -1, IN | PARAM);
Usz len = safe_index_of(PEEK(0, -1)) + 1; Usz len = safe_index_of(PEEK(0, -1));
if (len > width - x - 1) if (len > width - x - 1)
len = width - x - 1; len = width - x - 1;
Mark* m = mbuffer + y * width + x + 1; Mark* m = mbuffer + y * width + x + 1;
@ -555,15 +558,16 @@ END_OPERATOR
BEGIN_OPERATOR(push) BEGIN_OPERATOR(push)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
Usz len = index_of(PEEK(0, -1)) + 1; Usz len = index_of(PEEK(0, -1));
Usz key = index_of(PEEK(0, -2)); Usz key = index_of(PEEK(0, -2));
PORT(0, -1, IN | PARAM);
PORT(0, -2, IN | PARAM);
PORT(0, 1, IN);
if (len==0) return;
Isz out_x = (Isz)(key % len); Isz out_x = (Isz)(key % len);
for (Usz i = 0; i < len; ++i) { for (Usz i = 0; i < len; ++i) {
LOCK(1, (Isz)i); LOCK(1, (Isz)i);
} }
PORT(0, -1, IN | PARAM);
PORT(0, -2, IN | PARAM);
PORT(0, 1, IN);
PORT(1, out_x, OUT); PORT(1, out_x, OUT);
POKE(1, out_x, PEEK(0, 1)); POKE(1, out_x, PEEK(0, 1));
END_OPERATOR END_OPERATOR
@ -572,7 +576,7 @@ BEGIN_OPERATOR(query)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
Isz in_x = (Isz)index_of(PEEK(0, -3)) + 1; Isz in_x = (Isz)index_of(PEEK(0, -3)) + 1;
Isz in_y = (Isz)index_of(PEEK(0, -2)); Isz in_y = (Isz)index_of(PEEK(0, -2));
Isz len = (Isz)index_of(PEEK(0, -1)) + 1; Isz len = (Isz)index_of(PEEK(0, -1));
Isz out_x = 1 - len; Isz out_x = 1 - len;
PORT(0, -3, IN | PARAM); // x PORT(0, -3, IN | PARAM); // x
PORT(0, -2, IN | PARAM); // y PORT(0, -2, IN | PARAM); // y
@ -622,14 +626,15 @@ END_OPERATOR
BEGIN_OPERATOR(track) BEGIN_OPERATOR(track)
LOWERCASE_REQUIRES_BANG; LOWERCASE_REQUIRES_BANG;
Usz len = index_of(PEEK(0, -1)) + 1; Usz len = index_of(PEEK(0, -1));
Usz key = index_of(PEEK(0, -2)); Usz key = index_of(PEEK(0, -2));
PORT(0, -1, IN | PARAM);
PORT(0, -2, IN | PARAM);
if (len == 0) return;
Isz read_val_x = (Isz)(key % len) + 1; Isz read_val_x = (Isz)(key % len) + 1;
for (Usz i = 0; i < len; ++i) { for (Usz i = 0; i < len; ++i) {
LOCK(0, (Isz)(i + 1)); LOCK(0, (Isz)(i + 1));
} }
PORT(0, -1, IN | PARAM);
PORT(0, -2, IN | PARAM);
PORT(0, (Isz)read_val_x, IN); PORT(0, (Isz)read_val_x, IN);
PORT(1, 0, OUT); PORT(1, 0, OUT);
POKE(1, 0, PEEK(0, read_val_x)); POKE(1, 0, PEEK(0, read_val_x));

Loading…
Cancel
Save