Clean up some more and restore fake EOF opcodes

This commit is contained in:
kris 2022-06-25 15:26:14 +01:00
parent efa63a5ab2
commit 804ce60434
4 changed files with 301 additions and 312 deletions

View File

@ -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():

View File

@ -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)

View File

@ -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,

View File

@ -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