diff --git a/generate_player.py b/generate_player.py index 1425b96..dc5641f 100644 --- a/generate_player.py +++ b/generate_player.py @@ -149,44 +149,44 @@ def fast_path_trampoline(label: str) -> List[opcodes_6502.Opcode]: # # (14, 4), # 0.40 # ] # -# import itertools +import itertools + + +def _make_end_of_frame_voltages2(cycles) -> numpy.ndarray: + """Voltage sequence for end-of-frame TCP processing.""" + max_len = 140 + voltage_high = False + c = [1.0, 1.0, 1.0, -1.0] # STA $C030 + for i, skip_cycles in enumerate(itertools.cycle(cycles)): + c.extend([1.0 if voltage_high else -1.0] * (skip_cycles - 1)) + voltage_high = not voltage_high + c.append(1.0 if voltage_high else -1.0) + if len(c) >= max_len: + break + c.extend([1.0 if voltage_high else -1.0] * 6) # JMP (WDATA) + return numpy.array(c, dtype=numpy.float32) # # -# def _make_end_of_frame_voltages2(cycles) -> numpy.ndarray: -# """Voltage sequence for end-of-frame TCP processing.""" -# max_len = 140 -# voltage_high = False -# c = [1.0, 1.0, 1.0, -1.0] # STA $C030 -# for i, skip_cycles in enumerate(itertools.cycle(cycles)): -# c.extend([1.0 if voltage_high else -1.0] * (skip_cycles - 1)) -# voltage_high = not voltage_high -# c.append(1.0 if voltage_high else -1.0) -# if len(c) >= max_len: -# break -# c.extend([1.0 if voltage_high else -1.0] * 6) # JMP (WDATA) -# return numpy.array(c, dtype=numpy.float32) -# -# -# def _duty_cycles(): -# res = {} -# -# for i in range(4, 50, 2): -# for j in range(i, 50, 2): -# if i + j < 20 or i + j > 50: -# continue -# duty = j / (i + j) * 2 - 1 -# res.setdefault(duty, []).append((i + j, i, j)) -# -# cycles = [] -# for c in sorted(list(res.keys())): -# pair = sorted(sorted(res[c], reverse=False)[0][1:], reverse=True) -# cycles.append(pair) -# -# # return [(10, 10), (12, 10), (12, 8), (14, 10), (14, 6), (14, 8)] -# return cycles -# -# -# eof_cycles = _duty_cycles() +def _duty_cycles(): + res = {} + + for i in range(4, 50, 2): + for j in range(i, 50, 2): + if i + j < 20 or i + j > 50: + continue + duty = j / (i + j) * 2 - 1 + res.setdefault(duty, []).append((i + j, i, j)) + + cycles = [] + for c in sorted(list(res.keys())): + pair = sorted(sorted(res[c], reverse=False)[0][1:], reverse=True) + cycles.append(pair) + + # return [(10, 10), (12, 10), (12, 8), (14, 10), (14, 6), (14, 8)] + return cycles + + +eof_cycles = _duty_cycles() # def voltage_sequence( @@ -225,7 +225,7 @@ def audio_opcodes() -> Iterable[opcodes_6502.Opcode]: yield tuple(ops) # Add a NOP sled so we can more efficiently chain together longer - # runs of NOPs without wasting bytes in the TCP frame chaining + # runs of NOPs without wasting bytes in the TCP frame by chaining # together JMP (WDATA) yield tuple( [nop for nop in opcodes_6502.nops(20)] + [opcodes_6502.JMP_WDATA]) @@ -239,13 +239,11 @@ def generate_player( num_bytes = 0 seen_op_suffix_toggles = set() offset = 0 - unique_opcodes = {} + unique_entrypoints = {} toggles = {} with open(player_filename, "w+") as f: for i, ops in enumerate(player_ops): - unique_entrypoints = [] player_op = [] - for j, op in enumerate(ops): op_suffix_toggles = opcodes_6502.toggles(ops[j:]) if op_suffix_toggles not in seen_op_suffix_toggles: @@ -255,7 +253,7 @@ def generate_player( opcodes_6502.Literal( "tick_%02x: ; voltages %s" % ( offset, op_suffix_toggles), indent=0)) - unique_entrypoints.append((offset, op_suffix_toggles)) + unique_entrypoints[offset] = op_suffix_toggles player_op.append(op) offset += op.bytes @@ -268,34 +266,31 @@ def generate_player( f.write("%s\n" % str(op)) num_bytes += player_op_len - for op_offset, seq in unique_entrypoints: - unique_opcodes[op_offset] = seq - # toggles[op_offset] = tog f.write("\n") - f.write("; %d bytes\n" % num_bytes) + f.write("; %d entrypoints, %d bytes\n" % ( + len(unique_entrypoints), num_bytes)) - # with open(opcode_filename, "w") as f: - # f.write("import enum\nimport numpy\n\n\n") - # f.write("class Opcode(enum.Enum):\n") - # for o in unique_opcodes.keys(): - # f.write(" TICK_%02x = 0x%02x\n" % (o, o)) - # f.write(" EXIT = 0x%02x\n" % num_bytes) - # # f.write(" END_OF_FRAME = 0x%02x\n" % (num_bytes + 3)) - # for i, _ in enumerate(eof_cycles): - # f.write(" END_OF_FRAME_%d = 0x%02x\n" % (i, num_bytes + 4 + i)) - # - # f.write("\n\nVOLTAGE_SCHEDULE = {\n") - # for o, v in unique_opcodes.items(): - # f.write( - # " Opcode.TICK_%02x: numpy.array(%s, dtype=numpy.float32)," - # "\n" % (o, v)) - # for i, skip_cycles in enumerate(eof_cycles): - # f.write(" Opcode.END_OF_FRAME_%d: numpy.array([%s], " - # "dtype=numpy.float32), # %s\n" % (i, ", ".join( - # str(f) for f in _make_end_of_frame_voltages2( - # skip_cycles)), skip_cycles)) - # f.write("}\n") + with open(opcode_filename, "w") as f: + f.write("import enum\nimport numpy\n\n\n") + f.write("class Opcode(enum.Enum):\n") + for o in unique_entrypoints.keys(): + f.write(" TICK_%02x = 0x%02x\n" % (o, o)) + f.write(" EXIT = 0x%02x\n" % num_bytes) + # f.write(" END_OF_FRAME = 0x%02x\n" % (num_bytes + 3)) + for i, _ in enumerate(eof_cycles): + f.write(" END_OF_FRAME_%d = 0x%02x\n" % (i, num_bytes + 4 + i)) + f.write("\n\nVOLTAGE_SCHEDULE = {\n") + for o, v in unique_entrypoints.items(): + f.write( + " Opcode.TICK_%02x: numpy.array(%s, dtype=numpy.float32)," + "\n" % (o, v)) + for i, skip_cycles in enumerate(eof_cycles): + f.write(" Opcode.END_OF_FRAME_%d: numpy.array([%s], " + "dtype=numpy.float32), # %s\n" % (i, ", ".join( + str(f) for f in _make_end_of_frame_voltages2( + skip_cycles)), skip_cycles)) + f.write("}\n") # # f.write("\n\nTOGGLES = {\n") # for o, v in toggles.items(): @@ -304,11 +299,10 @@ def generate_player( # ) # f.write("}\n") # - # f.write("\n\nEOF_OPCODES = (\n") - # for i in range(len(eof_cycles)): - # f.write(" Opcode.END_OF_FRAME_%d,\n" % i) - # f.write(")\n") - + f.write("\n\nEOF_OPCODES = (\n") + for i in range(len(eof_cycles)): + f.write(" Opcode.END_OF_FRAME_%d,\n" % i) + f.write(")\n") def main(): diff --git a/opcodes_6502.py b/opcodes_6502.py index 610e45d..1415c21 100644 --- a/opcodes_6502.py +++ b/opcodes_6502.py @@ -1,5 +1,4 @@ -import itertools -from typing import Iterable, List +from typing import Iterable, Tuple class Opcode: @@ -77,7 +76,6 @@ def padding(cycles): def nops(cycles: int) -> Iterable[Opcode]: - print(cycles) if cycles < 2: raise ValueError while cycles: @@ -105,15 +103,15 @@ def nops(cycles: int) -> Iterable[Opcode]: # return tuple(numpy.array(out, dtype=numpy.float32)), toggles -def toggles(opcodes: Iterable[Opcode]) -> Tuple[bool]: +def toggles(opcodes: Iterable[Opcode]) -> Tuple[float]: res = [] - speaker = True + speaker = 1.0 for op in opcodes: if not op.cycles: continue res.extend([speaker] * (op.cycles - 1)) if op.toggle: - speaker = not speaker + speaker *= -1 res.append(speaker) return tuple(res) diff --git a/opcodes_generated.py b/opcodes_generated.py index be9bba8..14e1129 100644 --- a/opcodes_generated.py +++ b/opcodes_generated.py @@ -4,162 +4,196 @@ import numpy class Opcode(enum.Enum): TICK_00 = 0x00 - TICK_03 = 0x03 - TICK_06 = 0x06 - TICK_09 = 0x09 - TICK_0a = 0x0a - TICK_0d = 0x0d + TICK_01 = 0x01 + TICK_02 = 0x02 + TICK_05 = 0x05 + TICK_08 = 0x08 + TICK_0b = 0x0b + TICK_0e = 0x0e + TICK_0f = 0x0f TICK_10 = 0x10 TICK_13 = 0x13 - TICK_14 = 0x14 - TICK_1a = 0x1a + TICK_16 = 0x16 TICK_1d = 0x1d TICK_1e = 0x1e - TICK_27 = 0x27 - TICK_33 = 0x33 - TICK_36 = 0x36 - TICK_39 = 0x39 - TICK_3a = 0x3a - TICK_3f = 0x3f - TICK_42 = 0x42 - TICK_43 = 0x43 - TICK_4b = 0x4b + TICK_1f = 0x1f + TICK_22 = 0x22 + TICK_25 = 0x25 + TICK_2d = 0x2d + TICK_2e = 0x2e + TICK_2f = 0x2f + TICK_32 = 0x32 + TICK_3c = 0x3c + TICK_3d = 0x3d + TICK_3e = 0x3e + TICK_41 = 0x41 + TICK_4c = 0x4c + TICK_4d = 0x4d TICK_4e = 0x4e - TICK_4f = 0x4f - TICK_57 = 0x57 - TICK_5a = 0x5a - TICK_5b = 0x5b - TICK_63 = 0x63 + TICK_51 = 0x51 + TICK_5d = 0x5d + TICK_5e = 0x5e + TICK_5f = 0x5f + TICK_62 = 0x62 + TICK_6d = 0x6d TICK_6e = 0x6e - TICK_79 = 0x79 - TICK_84 = 0x84 - TICK_87 = 0x87 - TICK_88 = 0x88 - TICK_8f = 0x8f - EXIT = 0x99 - END_OF_FRAME_0 = 0x9d - END_OF_FRAME_1 = 0x9e - END_OF_FRAME_2 = 0x9f - END_OF_FRAME_3 = 0xa0 - END_OF_FRAME_4 = 0xa1 - END_OF_FRAME_5 = 0xa2 - END_OF_FRAME_6 = 0xa3 - END_OF_FRAME_7 = 0xa4 - END_OF_FRAME_8 = 0xa5 - END_OF_FRAME_9 = 0xa6 - END_OF_FRAME_10 = 0xa7 - END_OF_FRAME_11 = 0xa8 - END_OF_FRAME_12 = 0xa9 - END_OF_FRAME_13 = 0xaa - END_OF_FRAME_14 = 0xab - END_OF_FRAME_15 = 0xac - END_OF_FRAME_16 = 0xad - END_OF_FRAME_17 = 0xae - END_OF_FRAME_18 = 0xaf - END_OF_FRAME_19 = 0xb0 - END_OF_FRAME_20 = 0xb1 - END_OF_FRAME_21 = 0xb2 - END_OF_FRAME_22 = 0xb3 - END_OF_FRAME_23 = 0xb4 - END_OF_FRAME_24 = 0xb5 - END_OF_FRAME_25 = 0xb6 - END_OF_FRAME_26 = 0xb7 - END_OF_FRAME_27 = 0xb8 - END_OF_FRAME_28 = 0xb9 - END_OF_FRAME_29 = 0xba - END_OF_FRAME_30 = 0xbb - END_OF_FRAME_31 = 0xbc - END_OF_FRAME_32 = 0xbd - END_OF_FRAME_33 = 0xbe - END_OF_FRAME_34 = 0xbf - END_OF_FRAME_35 = 0xc0 - END_OF_FRAME_36 = 0xc1 - END_OF_FRAME_37 = 0xc2 - END_OF_FRAME_38 = 0xc3 - END_OF_FRAME_39 = 0xc4 - END_OF_FRAME_40 = 0xc5 - END_OF_FRAME_41 = 0xc6 - END_OF_FRAME_42 = 0xc7 - END_OF_FRAME_43 = 0xc8 - END_OF_FRAME_44 = 0xc9 - END_OF_FRAME_45 = 0xca - END_OF_FRAME_46 = 0xcb - END_OF_FRAME_47 = 0xcc - END_OF_FRAME_48 = 0xcd - END_OF_FRAME_49 = 0xce - END_OF_FRAME_50 = 0xcf - END_OF_FRAME_51 = 0xd0 - END_OF_FRAME_52 = 0xd1 - END_OF_FRAME_53 = 0xd2 - END_OF_FRAME_54 = 0xd3 - END_OF_FRAME_55 = 0xd4 - END_OF_FRAME_56 = 0xd5 - END_OF_FRAME_57 = 0xd6 - END_OF_FRAME_58 = 0xd7 - END_OF_FRAME_59 = 0xd8 - END_OF_FRAME_60 = 0xd9 - END_OF_FRAME_61 = 0xda - END_OF_FRAME_62 = 0xdb - END_OF_FRAME_63 = 0xdc - END_OF_FRAME_64 = 0xdd - END_OF_FRAME_65 = 0xde - END_OF_FRAME_66 = 0xdf - END_OF_FRAME_67 = 0xe0 - END_OF_FRAME_68 = 0xe1 - END_OF_FRAME_69 = 0xe2 - END_OF_FRAME_70 = 0xe3 - END_OF_FRAME_71 = 0xe4 - END_OF_FRAME_72 = 0xe5 - END_OF_FRAME_73 = 0xe6 - END_OF_FRAME_74 = 0xe7 - END_OF_FRAME_75 = 0xe8 - END_OF_FRAME_76 = 0xe9 - END_OF_FRAME_77 = 0xea - END_OF_FRAME_78 = 0xeb - END_OF_FRAME_79 = 0xec - END_OF_FRAME_80 = 0xed - END_OF_FRAME_81 = 0xee - END_OF_FRAME_82 = 0xef - END_OF_FRAME_83 = 0xf0 - END_OF_FRAME_84 = 0xf1 - END_OF_FRAME_85 = 0xf2 - END_OF_FRAME_86 = 0xf3 + TICK_6f = 0x6f + TICK_72 = 0x72 + TICK_7e = 0x7e + TICK_7f = 0x7f + TICK_80 = 0x80 + TICK_83 = 0x83 + TICK_90 = 0x90 + TICK_91 = 0x91 + TICK_92 = 0x92 + TICK_93 = 0x93 + TICK_94 = 0x94 + TICK_95 = 0x95 + TICK_96 = 0x96 + TICK_97 = 0x97 + TICK_98 = 0x98 + TICK_99 = 0x99 + EXIT = 0x9d + END_OF_FRAME_0 = 0xa1 + END_OF_FRAME_1 = 0xa2 + END_OF_FRAME_2 = 0xa3 + END_OF_FRAME_3 = 0xa4 + END_OF_FRAME_4 = 0xa5 + END_OF_FRAME_5 = 0xa6 + END_OF_FRAME_6 = 0xa7 + END_OF_FRAME_7 = 0xa8 + END_OF_FRAME_8 = 0xa9 + END_OF_FRAME_9 = 0xaa + END_OF_FRAME_10 = 0xab + END_OF_FRAME_11 = 0xac + END_OF_FRAME_12 = 0xad + END_OF_FRAME_13 = 0xae + END_OF_FRAME_14 = 0xaf + END_OF_FRAME_15 = 0xb0 + END_OF_FRAME_16 = 0xb1 + END_OF_FRAME_17 = 0xb2 + END_OF_FRAME_18 = 0xb3 + END_OF_FRAME_19 = 0xb4 + END_OF_FRAME_20 = 0xb5 + END_OF_FRAME_21 = 0xb6 + END_OF_FRAME_22 = 0xb7 + END_OF_FRAME_23 = 0xb8 + END_OF_FRAME_24 = 0xb9 + END_OF_FRAME_25 = 0xba + END_OF_FRAME_26 = 0xbb + END_OF_FRAME_27 = 0xbc + END_OF_FRAME_28 = 0xbd + END_OF_FRAME_29 = 0xbe + END_OF_FRAME_30 = 0xbf + END_OF_FRAME_31 = 0xc0 + END_OF_FRAME_32 = 0xc1 + END_OF_FRAME_33 = 0xc2 + END_OF_FRAME_34 = 0xc3 + END_OF_FRAME_35 = 0xc4 + END_OF_FRAME_36 = 0xc5 + END_OF_FRAME_37 = 0xc6 + END_OF_FRAME_38 = 0xc7 + END_OF_FRAME_39 = 0xc8 + END_OF_FRAME_40 = 0xc9 + END_OF_FRAME_41 = 0xca + END_OF_FRAME_42 = 0xcb + END_OF_FRAME_43 = 0xcc + END_OF_FRAME_44 = 0xcd + END_OF_FRAME_45 = 0xce + END_OF_FRAME_46 = 0xcf + END_OF_FRAME_47 = 0xd0 + END_OF_FRAME_48 = 0xd1 + END_OF_FRAME_49 = 0xd2 + END_OF_FRAME_50 = 0xd3 + END_OF_FRAME_51 = 0xd4 + END_OF_FRAME_52 = 0xd5 + END_OF_FRAME_53 = 0xd6 + END_OF_FRAME_54 = 0xd7 + END_OF_FRAME_55 = 0xd8 + END_OF_FRAME_56 = 0xd9 + END_OF_FRAME_57 = 0xda + END_OF_FRAME_58 = 0xdb + END_OF_FRAME_59 = 0xdc + END_OF_FRAME_60 = 0xdd + END_OF_FRAME_61 = 0xde + END_OF_FRAME_62 = 0xdf + END_OF_FRAME_63 = 0xe0 + END_OF_FRAME_64 = 0xe1 + END_OF_FRAME_65 = 0xe2 + END_OF_FRAME_66 = 0xe3 + END_OF_FRAME_67 = 0xe4 + END_OF_FRAME_68 = 0xe5 + END_OF_FRAME_69 = 0xe6 + END_OF_FRAME_70 = 0xe7 + END_OF_FRAME_71 = 0xe8 + END_OF_FRAME_72 = 0xe9 + END_OF_FRAME_73 = 0xea + END_OF_FRAME_74 = 0xeb + END_OF_FRAME_75 = 0xec + END_OF_FRAME_76 = 0xed + END_OF_FRAME_77 = 0xee + END_OF_FRAME_78 = 0xef + END_OF_FRAME_79 = 0xf0 + END_OF_FRAME_80 = 0xf1 + END_OF_FRAME_81 = 0xf2 + END_OF_FRAME_82 = 0xf3 + END_OF_FRAME_83 = 0xf4 + END_OF_FRAME_84 = 0xf5 + END_OF_FRAME_85 = 0xf6 + END_OF_FRAME_86 = 0xf7 VOLTAGE_SCHEDULE = { - Opcode.TICK_00: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_03: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_06: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_09: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_0a: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_0d: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_10: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_13: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_14: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_1a: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_1d: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_1e: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_27: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_33: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_36: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_39: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_3a: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_3f: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_42: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_43: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_4b: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_4e: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_4f: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_57: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_5a: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_5b: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_63: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_6e: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_79: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_84: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), - Opcode.TICK_87: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_88: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), - Opcode.TICK_8f: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_00: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_01: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_02: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_05: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_08: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_0b: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_0e: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_0f: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_10: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_13: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_16: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_1d: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_1e: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_1f: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_22: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_25: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_2d: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_2e: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_2f: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_32: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_3c: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_3d: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_3e: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_41: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_4c: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_4d: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_4e: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_51: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_5d: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_5e: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_5f: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_62: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_6d: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_6e: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_6f: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_72: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_7e: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_7f: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_80: numpy.array((1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0), dtype=numpy.float32), + Opcode.TICK_83: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_90: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_91: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_92: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_93: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_94: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_95: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_96: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_97: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_98: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), + Opcode.TICK_99: numpy.array((1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0), dtype=numpy.float32), Opcode.END_OF_FRAME_0: numpy.array([1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], dtype=numpy.float32), # [10, 10] Opcode.END_OF_FRAME_1: numpy.array([1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], dtype=numpy.float32), # [26, 24] Opcode.END_OF_FRAME_2: numpy.array([1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], dtype=numpy.float32), # [24, 22] @@ -250,43 +284,6 @@ VOLTAGE_SCHEDULE = { } -TOGGLES = { - Opcode.TICK_00: 3, - Opcode.TICK_03: 2, - Opcode.TICK_06: 1, - Opcode.TICK_09: 0, - Opcode.TICK_0a: 0, - Opcode.TICK_0d: 3, - Opcode.TICK_10: 2, - Opcode.TICK_13: 1, - Opcode.TICK_14: 1, - Opcode.TICK_1a: 3, - Opcode.TICK_1d: 2, - Opcode.TICK_1e: 2, - Opcode.TICK_27: 3, - Opcode.TICK_33: 2, - Opcode.TICK_36: 1, - Opcode.TICK_39: 0, - Opcode.TICK_3a: 0, - Opcode.TICK_3f: 2, - Opcode.TICK_42: 1, - Opcode.TICK_43: 1, - Opcode.TICK_4b: 2, - Opcode.TICK_4e: 1, - Opcode.TICK_4f: 1, - Opcode.TICK_57: 2, - Opcode.TICK_5a: 1, - Opcode.TICK_5b: 1, - Opcode.TICK_63: 2, - Opcode.TICK_6e: 2, - Opcode.TICK_79: 2, - Opcode.TICK_84: 1, - Opcode.TICK_87: 0, - Opcode.TICK_88: 0, - Opcode.TICK_8f: 1, -} - - EOF_OPCODES = ( Opcode.END_OF_FRAME_0, Opcode.END_OF_FRAME_1, diff --git a/player/player_generated.s b/player/player_generated.s index f520c23..516c2d5 100644 --- a/player/player_generated.s +++ b/player/player_generated.s @@ -1,75 +1,75 @@ -tick_00: ; voltages (True, True, True, True, True, True, True, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_00: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_01: ; voltages (True, True, True, True, True, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_01: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_02: ; voltages (True, True, True, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_02: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_05: ; voltages (True, True, True, False, False, False, False, True, True, True, True, True, True, True) +tick_05: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) STA $C030 ; 4 cycles -tick_08: ; voltages (True, True, True, False, False, False, False, False, False, False) +tick_08: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_0b: ; voltages (True, True, True, True, True, True) +tick_0b: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0) JMP (WDATA) ; 6 cycles -tick_0e: ; voltages (True, True, True, True, True, True, True, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_0e: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_0f: ; voltages (True, True, True, True, True, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_0f: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_10: ; voltages (True, True, True, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_10: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_13: ; voltages (True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True) +tick_13: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) STA $C030 ; 4 cycles -tick_16: ; voltages (True, True, True, True, True, False, False, False, False, False, False, False) +tick_16: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_1d: ; voltages (True, True, True, True, True, True, True, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_1d: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_1e: ; voltages (True, True, True, True, True, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_1e: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_1f: ; voltages (True, True, True, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_1f: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_22: ; voltages (True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True) +tick_22: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) STA $C030 ; 4 cycles -tick_25: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_25: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles NOP ; 2 cycles STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_2d: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_2d: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_2e: ; voltages (True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_2e: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_2f: ; voltages (True, True, True, False, False, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_2f: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_32: ; voltages (True, True, True, True, True, False, False, False, False, True, True, True, True, True, True, True) +tick_32: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles STA $C030 ; 4 cycles STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_3c: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_3c: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_3d: ; voltages (True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_3d: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_3e: ; voltages (True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_3e: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_41: ; voltages (True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True) +tick_41: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles STA $C030 ; 4 cycles NOP ; 2 cycles STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_4c: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_4c: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_4d: ; voltages (True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_4d: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_4e: ; voltages (True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_4e: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_51: ; voltages (True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True) +tick_51: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles STA $C030 ; 4 cycles NOP ; 2 cycles @@ -77,26 +77,26 @@ tick_51: ; voltages (True, True, True, True, True, False, False, False, False, F STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_5d: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_5d: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_5e: ; voltages (True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_5e: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_5f: ; voltages (True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, False, False, False, False, False, False, False) +tick_5f: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_62: ; voltages (True, True, True, True, True, True, True, False, False, False, False, True, True, True, True, True, True, True) +tick_62: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles NOP ; 2 cycles STA $C030 ; 4 cycles STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_6d: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_6d: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_6e: ; voltages (True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_6e: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_6f: ; voltages (True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_6f: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_72: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, True, True, True, True, True, True, True) +tick_72: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles NOP ; 2 cycles STA $C030 ; 4 cycles @@ -104,13 +104,13 @@ tick_72: ; voltages (True, True, True, True, True, True, True, False, False, Fal STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_7e: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_7e: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_7f: ; voltages (True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_7f: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) NOP ; 2 cycles -tick_80: ; voltages (True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, False, False, False, False, False, False, False) +tick_80: ; voltages (1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0) STA $C030 ; 4 cycles -tick_83: ; voltages (True, True, True, True, True, True, True, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True) +tick_83: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles NOP ; 2 cycles STA $C030 ; 4 cycles @@ -119,26 +119,26 @@ tick_83: ; voltages (True, True, True, True, True, True, True, False, False, Fal STA $C030 ; 4 cycles JMP (WDATA) ; 6 cycles -tick_90: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True) +tick_90: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_91: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True) +tick_91: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_92: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True) +tick_92: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_93: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True) +tick_93: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_94: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True) +tick_94: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_95: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, True) +tick_95: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_96: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True, True, True) +tick_96: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_97: ; voltages (True, True, True, True, True, True, True, True, True, True, True, True) +tick_97: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_98: ; voltages (True, True, True, True, True, True, True, True, True, True) +tick_98: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles -tick_99: ; voltages (True, True, True, True, True, True, True, True) +tick_99: ; voltages (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0) NOP ; 2 cycles JMP (WDATA) ; 6 cycles -; 157 bytes +; 50 entrypoints, 157 bytes