|
@ -268,8 +268,6 @@ Usz usz_clamp(Usz val, Usz min, Usz max) { |
|
|
#define OPER_PHASE_0_COMMON_ARGS \ |
|
|
#define OPER_PHASE_0_COMMON_ARGS \ |
|
|
OPER_PHASE_COMMON_ARGS, Oper_phase0_extras *const extra_params, \ |
|
|
OPER_PHASE_COMMON_ARGS, Oper_phase0_extras *const extra_params, \ |
|
|
Mark const cell_flags |
|
|
Mark const cell_flags |
|
|
#define OPER_PHASE_1_COMMON_ARGS \ |
|
|
|
|
|
OPER_PHASE_COMMON_ARGS, Oper_phase1_extras* const extra_params |
|
|
|
|
|
|
|
|
|
|
|
#define OPER_IGNORE_COMMON_ARGS() \ |
|
|
#define OPER_IGNORE_COMMON_ARGS() \ |
|
|
(void)gbuffer; \ |
|
|
(void)gbuffer; \ |
|
@ -288,10 +286,6 @@ Usz usz_clamp(Usz val, Usz min, Usz max) { |
|
|
OPER_IGNORE_COMMON_ARGS() \ |
|
|
OPER_IGNORE_COMMON_ARGS() \ |
|
|
(void)cell_flags; \ |
|
|
(void)cell_flags; \ |
|
|
enum { This_oper_char = Orca_oper_char_##_oper_name }; |
|
|
enum { This_oper_char = Orca_oper_char_##_oper_name }; |
|
|
#define BEGIN_SOLO_PHASE_1(_oper_name) \ |
|
|
|
|
|
OPER_PHASE_SPEC void oper_phase1_##_oper_name(OPER_PHASE_1_COMMON_ARGS) { \ |
|
|
|
|
|
OPER_IGNORE_COMMON_ARGS() \ |
|
|
|
|
|
enum { This_oper_char = Orca_oper_char_##_oper_name }; |
|
|
|
|
|
#define BEGIN_DUAL_PHASE_0(_oper_name) \ |
|
|
#define BEGIN_DUAL_PHASE_0(_oper_name) \ |
|
|
OPER_PHASE_SPEC void oper_phase0_##_oper_name(OPER_PHASE_0_COMMON_ARGS, \ |
|
|
OPER_PHASE_SPEC void oper_phase0_##_oper_name(OPER_PHASE_0_COMMON_ARGS, \ |
|
|
Glyph const This_oper_char) { \ |
|
|
Glyph const This_oper_char) { \ |
|
@ -300,13 +294,6 @@ Usz usz_clamp(Usz val, Usz min, Usz max) { |
|
|
(void)This_oper_char; \ |
|
|
(void)This_oper_char; \ |
|
|
enum { Uppercase_oper_char = Orca_oper_upper_char_##_oper_name }; \ |
|
|
enum { Uppercase_oper_char = Orca_oper_upper_char_##_oper_name }; \ |
|
|
(void)Uppercase_oper_char; |
|
|
(void)Uppercase_oper_char; |
|
|
#define BEGIN_DUAL_PHASE_1(_oper_name) \ |
|
|
|
|
|
OPER_PHASE_SPEC void oper_phase1_##_oper_name(OPER_PHASE_1_COMMON_ARGS, \ |
|
|
|
|
|
Glyph const This_oper_char) { \ |
|
|
|
|
|
OPER_IGNORE_COMMON_ARGS() \ |
|
|
|
|
|
(void)This_oper_char; \ |
|
|
|
|
|
enum { Uppercase_oper_char = Orca_oper_upper_char_##_oper_name }; \ |
|
|
|
|
|
(void)Uppercase_oper_char; |
|
|
|
|
|
|
|
|
|
|
|
#define END_PHASE } |
|
|
#define END_PHASE } |
|
|
|
|
|
|
|
@ -442,8 +429,6 @@ BEGIN_SOLO_PHASE_0(keys) |
|
|
o = '*'; |
|
|
o = '*'; |
|
|
POKE(1, 0, o); |
|
|
POKE(1, 0, o); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_SOLO_PHASE_1(keys) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_SOLO_PHASE_0(comment) |
|
|
BEGIN_SOLO_PHASE_0(comment) |
|
|
if (!IS_AWAKE) |
|
|
if (!IS_AWAKE) |
|
@ -461,16 +446,12 @@ BEGIN_SOLO_PHASE_0(comment) |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_SOLO_PHASE_1(comment) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_SOLO_PHASE_0(bang) |
|
|
BEGIN_SOLO_PHASE_0(bang) |
|
|
if (IS_AWAKE) { |
|
|
if (IS_AWAKE) { |
|
|
gbuffer_poke(gbuffer, height, width, y, x, '.'); |
|
|
gbuffer_poke(gbuffer, height, width, y, x, '.'); |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_SOLO_PHASE_1(bang) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_SOLO_PHASE_0(midi) |
|
|
BEGIN_SOLO_PHASE_0(midi) |
|
|
BEGIN_ACTIVE_PORTS |
|
|
BEGIN_ACTIVE_PORTS |
|
@ -506,8 +487,6 @@ BEGIN_SOLO_PHASE_0(midi) |
|
|
oe->velocity = midi_velocity_of(velocity_g); |
|
|
oe->velocity = midi_velocity_of(velocity_g); |
|
|
oe->bar_divisor = (U8)usz_clamp(index_of(length_g), 1, Glyphs_index_max); |
|
|
oe->bar_divisor = (U8)usz_clamp(index_of(length_g), 1, Glyphs_index_max); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_SOLO_PHASE_1(midi) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_SOLO_PHASE_0(osc) |
|
|
BEGIN_SOLO_PHASE_0(osc) |
|
|
BEGIN_ACTIVE_PORTS |
|
|
BEGIN_ACTIVE_PORTS |
|
@ -542,8 +521,6 @@ BEGIN_SOLO_PHASE_0(osc) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_SOLO_PHASE_1(osc) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(add) |
|
|
BEGIN_DUAL_PHASE_0(add) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -557,8 +534,6 @@ BEGIN_DUAL_PHASE_0(add) |
|
|
STOP_IF_DUAL_INACTIVE; |
|
|
STOP_IF_DUAL_INACTIVE; |
|
|
POKE(1, 0, glyphs_add(PEEK(0, 1), PEEK(0, 2))); |
|
|
POKE(1, 0, glyphs_add(PEEK(0, 1), PEEK(0, 2))); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(add) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(banger) |
|
|
BEGIN_DUAL_PHASE_0(banger) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -582,8 +557,6 @@ BEGIN_DUAL_PHASE_0(banger) |
|
|
} |
|
|
} |
|
|
POKE(1, 0, result); |
|
|
POKE(1, 0, result); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(banger) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(clock) |
|
|
BEGIN_DUAL_PHASE_0(clock) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -602,8 +575,6 @@ BEGIN_DUAL_PHASE_0(clock) |
|
|
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_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(clock) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(delay) |
|
|
BEGIN_DUAL_PHASE_0(delay) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -619,8 +590,6 @@ BEGIN_DUAL_PHASE_0(delay) |
|
|
Glyph g = (Tick_number + offset) % rate == 0 ? '*' : '.'; |
|
|
Glyph g = (Tick_number + offset) % rate == 0 ? '*' : '.'; |
|
|
POKE(1, 0, g); |
|
|
POKE(1, 0, g); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(delay) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(if) |
|
|
BEGIN_DUAL_PHASE_0(if) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -636,8 +605,6 @@ BEGIN_DUAL_PHASE_0(if) |
|
|
Glyph g1 = PEEK(0, 2); |
|
|
Glyph g1 = PEEK(0, 2); |
|
|
POKE(1, 0, g0 == g1 ? '*' : '.'); |
|
|
POKE(1, 0, g0 == g1 ? '*' : '.'); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(if) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(generator) |
|
|
BEGIN_DUAL_PHASE_0(generator) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -679,8 +646,6 @@ BEGIN_DUAL_PHASE_0(generator) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(generator) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(halt) |
|
|
BEGIN_DUAL_PHASE_0(halt) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -688,8 +653,6 @@ BEGIN_DUAL_PHASE_0(halt) |
|
|
PORT(1, 0, OUT); |
|
|
PORT(1, 0, OUT); |
|
|
END_PORTS |
|
|
END_PORTS |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(halt) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(increment) |
|
|
BEGIN_DUAL_PHASE_0(increment) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -711,8 +674,6 @@ BEGIN_DUAL_PHASE_0(increment) |
|
|
val = min; |
|
|
val = min; |
|
|
POKE(1, 0, glyph_of(val)); |
|
|
POKE(1, 0, glyph_of(val)); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(increment) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(jump) |
|
|
BEGIN_DUAL_PHASE_0(jump) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -725,8 +686,6 @@ BEGIN_DUAL_PHASE_0(jump) |
|
|
STOP_IF_DUAL_INACTIVE; |
|
|
STOP_IF_DUAL_INACTIVE; |
|
|
POKE(1, 0, PEEK(-1, 0)); |
|
|
POKE(1, 0, PEEK(-1, 0)); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(jump) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(kill) |
|
|
BEGIN_DUAL_PHASE_0(kill) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -738,8 +697,6 @@ BEGIN_DUAL_PHASE_0(kill) |
|
|
POKE(1, 0, '.'); |
|
|
POKE(1, 0, '.'); |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(kill) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(loop) |
|
|
BEGIN_DUAL_PHASE_0(loop) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -789,8 +746,6 @@ BEGIN_DUAL_PHASE_0(loop) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(loop) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(modulo) |
|
|
BEGIN_DUAL_PHASE_0(modulo) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -806,8 +761,6 @@ BEGIN_DUAL_PHASE_0(modulo) |
|
|
Usz ib = index_of(PEEK(0, 2)); |
|
|
Usz ib = index_of(PEEK(0, 2)); |
|
|
POKE(1, 0, indexed_glyphs[ib == 0 ? 0 : (ia % ib)]); |
|
|
POKE(1, 0, indexed_glyphs[ib == 0 ? 0 : (ia % ib)]); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(modulo) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(offset) |
|
|
BEGIN_DUAL_PHASE_0(offset) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -834,8 +787,6 @@ BEGIN_DUAL_PHASE_0(offset) |
|
|
} |
|
|
} |
|
|
POKE(1, 0, PEEK(coords[0], coords[1])); |
|
|
POKE(1, 0, PEEK(coords[0], coords[1])); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(offset) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(push) |
|
|
BEGIN_DUAL_PHASE_0(push) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -864,8 +815,6 @@ BEGIN_DUAL_PHASE_0(push) |
|
|
} |
|
|
} |
|
|
POKE(1, write_val_x[0], PEEK(0, 1)); |
|
|
POKE(1, write_val_x[0], PEEK(0, 1)); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(push) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(query) |
|
|
BEGIN_DUAL_PHASE_0(query) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -909,8 +858,6 @@ BEGIN_DUAL_PHASE_0(query) |
|
|
// }
|
|
|
// }
|
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(query) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
static Usz hash32_shift_mult(Usz key) { |
|
|
static Usz hash32_shift_mult(Usz key) { |
|
|
Usz c2 = UINT32_C(0x27d4eb2d); |
|
|
Usz c2 = UINT32_C(0x27d4eb2d); |
|
@ -950,8 +897,6 @@ BEGIN_DUAL_PHASE_0(random) |
|
|
Usz val = key % (max + 1 - min) + min; |
|
|
Usz val = key % (max + 1 - min) + min; |
|
|
POKE(1, 0, glyph_of(val)); |
|
|
POKE(1, 0, glyph_of(val)); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(random) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(track) |
|
|
BEGIN_DUAL_PHASE_0(track) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -982,8 +927,6 @@ BEGIN_DUAL_PHASE_0(track) |
|
|
} |
|
|
} |
|
|
POKE(1, 0, PEEK(0, ival[0])); |
|
|
POKE(1, 0, PEEK(0, ival[0])); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(track) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
static Isz const uturn_data[] = { |
|
|
static Isz const uturn_data[] = { |
|
|
// clang-format off
|
|
|
// clang-format off
|
|
@ -1019,8 +962,6 @@ BEGIN_DUAL_PHASE_0(uturn) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(uturn) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(variable) |
|
|
BEGIN_DUAL_PHASE_0(variable) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -1064,8 +1005,6 @@ BEGIN_DUAL_PHASE_0(variable) |
|
|
return; |
|
|
return; |
|
|
POKE(1, 0, result); |
|
|
POKE(1, 0, result); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(variable) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(teleport) |
|
|
BEGIN_DUAL_PHASE_0(teleport) |
|
|
REALIZE_DUAL; |
|
|
REALIZE_DUAL; |
|
@ -1092,8 +1031,6 @@ BEGIN_DUAL_PHASE_0(teleport) |
|
|
} |
|
|
} |
|
|
POKE_STUNNED(coords[0], coords[1], PEEK(0, 1)); |
|
|
POKE_STUNNED(coords[0], coords[1], PEEK(0, 1)); |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(teleport) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
BEGIN_DUAL_PHASE_0(zig) |
|
|
BEGIN_DUAL_PHASE_0(zig) |
|
|
if (!IS_AWAKE) |
|
|
if (!IS_AWAKE) |
|
@ -1120,8 +1057,6 @@ BEGIN_DUAL_PHASE_0(zig) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
END_PHASE |
|
|
END_PHASE |
|
|
BEGIN_DUAL_PHASE_1(zig) |
|
|
|
|
|
END_PHASE |
|
|
|
|
|
|
|
|
|
|
|
//////// Run simulation
|
|
|
//////// Run simulation
|
|
|
|
|
|
|
|
@ -1130,11 +1065,6 @@ END_PHASE |
|
|
oper_phase0_##_oper_name(gbuf, mbuf, height, width, iy, ix, tick_number, \ |
|
|
oper_phase0_##_oper_name(gbuf, mbuf, height, width, iy, ix, tick_number, \ |
|
|
extra_params, cell_flags); \ |
|
|
extra_params, cell_flags); \ |
|
|
break; |
|
|
break; |
|
|
#define SIM_EXPAND_SOLO_PHASE_1(_oper_char, _oper_name) \ |
|
|
|
|
|
case _oper_char: \ |
|
|
|
|
|
oper_phase1_##_oper_name(gbuf, mbuf, height, width, iy, ix, tick_number, \ |
|
|
|
|
|
extra_params); \ |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
#define SIM_EXPAND_DUAL_PHASE_0(_upper_oper_char, _lower_oper_char, \ |
|
|
#define SIM_EXPAND_DUAL_PHASE_0(_upper_oper_char, _lower_oper_char, \ |
|
|
_oper_name) \ |
|
|
_oper_name) \ |
|
@ -1143,13 +1073,6 @@ END_PHASE |
|
|
oper_phase0_##_oper_name(gbuf, mbuf, height, width, iy, ix, tick_number, \ |
|
|
oper_phase0_##_oper_name(gbuf, mbuf, height, width, iy, ix, tick_number, \ |
|
|
extra_params, cell_flags, glyph_char); \ |
|
|
extra_params, cell_flags, glyph_char); \ |
|
|
break; |
|
|
break; |
|
|
#define SIM_EXPAND_DUAL_PHASE_1(_upper_oper_char, _lower_oper_char, \ |
|
|
|
|
|
_oper_name) \ |
|
|
|
|
|
case _upper_oper_char: \ |
|
|
|
|
|
case _lower_oper_char: \ |
|
|
|
|
|
oper_phase1_##_oper_name(gbuf, mbuf, height, width, iy, ix, tick_number, \ |
|
|
|
|
|
extra_params, glyph_char); \ |
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
|
|
#define SIM_EXPAND_MOVM_PHASE_0(_upper_oper_char, _lower_oper_char, \ |
|
|
#define SIM_EXPAND_MOVM_PHASE_0(_upper_oper_char, _lower_oper_char, \ |
|
|
_oper_name, _delta_y, _delta_x) \ |
|
|
_oper_name, _delta_y, _delta_x) \ |
|
@ -1178,25 +1101,6 @@ static void sim_phase_0(Gbuffer gbuf, Mbuffer mbuf, Usz height, Usz width, |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
static void sim_phase_1(Gbuffer gbuf, Mbuffer mbuf, Usz height, Usz width, |
|
|
|
|
|
Usz tick_number, Oper_phase1_extras* extra_params) { |
|
|
|
|
|
for (Usz iy = 0; iy < height; ++iy) { |
|
|
|
|
|
Glyph const* glyph_row = gbuf + iy * width; |
|
|
|
|
|
Mark const* mark_row = mbuf + iy * width; |
|
|
|
|
|
for (Usz ix = 0; ix < width; ++ix) { |
|
|
|
|
|
Glyph glyph_char = glyph_row[ix]; |
|
|
|
|
|
if (ORCA_LIKELY(glyph_char == '.')) |
|
|
|
|
|
continue; |
|
|
|
|
|
if (mark_row[ix] & (Mark_flag_lock | Mark_flag_sleep)) |
|
|
|
|
|
continue; |
|
|
|
|
|
switch (glyph_char) { |
|
|
|
|
|
ORCA_SOLO_OPERATORS(SIM_EXPAND_SOLO_PHASE_1) |
|
|
|
|
|
ORCA_DUAL_OPERATORS(SIM_EXPAND_DUAL_PHASE_1) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void orca_run(Gbuffer gbuf, Mbuffer mbuf, Usz height, Usz width, |
|
|
void orca_run(Gbuffer gbuf, Mbuffer mbuf, Usz height, Usz width, |
|
|
Usz tick_number, Bank* bank, Oevent_list* oevent_list, |
|
|
Usz tick_number, Bank* bank, Oevent_list* oevent_list, |
|
|
Piano_bits piano_bits) { |
|
|
Piano_bits piano_bits) { |
|
@ -1212,5 +1116,4 @@ void orca_run(Gbuffer gbuf, Mbuffer mbuf, Usz height, Usz width, |
|
|
phase1_extras.piano_bits = piano_bits; |
|
|
phase1_extras.piano_bits = piano_bits; |
|
|
phase1_extras.oevent_list = oevent_list; |
|
|
phase1_extras.oevent_list = oevent_list; |
|
|
sim_phase_0(gbuf, mbuf, height, width, tick_number, &phase1_extras); |
|
|
sim_phase_0(gbuf, mbuf, height, width, tick_number, &phase1_extras); |
|
|
sim_phase_1(gbuf, mbuf, height, width, tick_number, &phase1_extras); |
|
|
|
|
|
} |
|
|
} |
|
|