Improved docs, blockmem will be next ...

master
kaqu 2 years ago
parent ac3ffe2683
commit f9264ac454
  1. 2
      bit_to_flash.py
  2. 8
      firmware/main.c
  3. 68
      neopixelengine.py
  4. 214
      neopixelengine_simple_72PCT.py
  5. 1986
      npe.vcd

@ -39,7 +39,7 @@ def bit2svf(bitfilename, svffilename):
print("IDCODE in bitstream is 0x%08x" % idcode)
bitf.seek(0)
address = 0xc0000000 # Was:0?! csr.csv -> memory_region spiflash @ 0xc0000000
address = 0
last_page = -1
with open(svffilename, 'w') as svf:

@ -84,7 +84,7 @@ int main(int i, char **c)
int32_t red = 0x000100;
int32_t blue = 0x000001;
for(int j=0;j<24;j++) {
for(int j=0;j<8;j++) {
for(int i=0;i<27;i+=3) {
npe_b8LoadOffset_write(i); // @Offset
npe_b24Data2Load_write(green); // G
@ -106,11 +106,11 @@ int main(int i, char **c)
for(int i=0;i<27;i+=3)
{ //
npe_b8LoadOffset_write(i); // @Offset
npe_b24Data2Load_write(0); // G
npe_b24Data2Load_write(0x040000); // G
npe_b8LoadOffset_write(i+1); // @Offset
npe_b24Data2Load_write(0); // R
npe_b24Data2Load_write(0x000400); // R
npe_b8LoadOffset_write(i+2); // @Offset
npe_b24Data2Load_write(0); // B
npe_b24Data2Load_write(0x000004); // B
}
busy_wait(1000);
npe_bEnable_write(0); // Disable

@ -14,26 +14,44 @@
# 17.10.20/KQ NeoPixel engine up & driving LEDs
# 18.10.20/KQ Cleanup & more 'array'
# 19.10.20/KQ Renamed from 'neopixelprotocol'
# 27.10.20/KQ Using AutoDoc etc(improved documentation generation)
#
from migen import *
from litex.soc.interconnect.csr import AutoCSR, CSRStatus, CSRStorage, CSRField
from litex.soc.interconnect.csr import AutoCSR, CSRStatus, CSRStorage, CSRField, CSRAccess
from litex.soc.integration.doc import AutoDoc, ModuleDoc
class NeoPixelEngine(Module, AutoCSR):
"""NeoPixelEngine class provides the protocol logic to drive NeoPixel LED strips
**Inputs**:
:param b24Data2Load int24: New data to be loaded (24 bits)
class NeoPixelEngine(Module, AutoCSR, AutoDoc, ModuleDoc):
"""
NeoPixelEngine class provides the protocol logic to drive NeoPixel LED strips
:param b8LoadOffset int8: Offset (0..255) into b24GRBArray to load b24Data2Load to
Usage:
######
:param b8Len int8: Length (0..255) of actual 24-bit data entries (i.e. # of NeoPixels)
#. Fill NeoPixelEngine's local array of GRB values (Green/Red/Blue).
Load ``b24Data2Load`` with a 24-bit (GRB) value.
Indicate the offset (where to store) via writing to ``b8LoadOffset``.
Repeat for all offsets 'til end of array ...
:param bEnable bool: To enable running (after data preparation)
**Output**:
#. Indicate to NeoPixelEngine the actual no. of pixels used by setting up ``b8Len``.
#. Finally, enable processing by setting ``bEnable`` to true (1).
Inputs:
#######
:b24Data2Load: New data to be loaded (24 bits)
:b8LoadOffset: Offset (0..255) into b24GRBArray to load b24Data2Load to
:b8Len: Length (0..255) of actual 24-bit data entries (i.e. # of NeoPixels)
:bEnable: To enable running (after data preparation)
Output:
#######
:return bDataPin bool: NeoPixel 'Din' pin output
:bDataPin: NeoPixel 'Din' pin output (wire to actual output pin ... ;)
"""
def __init__(self, n_LEDs=3):
# On Colorlight-5A-75B/Lattice ECP5-25 (@i7/4th gen.):
@ -41,20 +59,32 @@ class NeoPixelEngine(Module, AutoCSR):
# 192 NeoPixel LEDs w/ ethernet/etherbone will use 95% of TRELLIS_SLICES & take approx. 2:20h to calculate
# 27 NeoPixels LEDs w/ ethernet/etherbone used for any tests will require 73% of TRELLIS_SLICES & take less than 0:10h to calculate
self.b24GRBArray = Array(Signal(24) for word24 in range(n_LEDs)) # Local 24-bit data Array
# Inputs
self.b24Data2Load = CSRStorage(24, reset_less=True, description="""
# Inputs
self.b24Data2Load = CSRStorage(24, reset_less=True,
fields=[CSRField("Data2Load", size=24, description="*Field*: 24-Bit value")],
description="""
Load value (24-Bit G/R/B).
Use *b8LoadOffset* first to indicate array location where to store this value.
Use ``b8LoadOffset`` first to indicate array location where to store this value.
""")
self.b8LoadOffset = CSRStorage(8, reset_less=True, description="""
self.b8LoadOffset = CSRStorage(8, reset_less=True,
fields=[CSRField("LoadOffset", size=8, description="*Field*: 8-Bit value (0..max)")],
description="""
Offset into storage array for 24-bit G/R/B values.
Prepare this one first, then indicate value to store via *b24Data2Load*.
Prepare this one first, then indicate value to store via ``b24Data2Load``.
""")
self.b8Len = CSRStorage(8, reset_less=True, description="""
self.b8Len = CSRStorage(8, reset_less=True,
fields=[CSRField("Len", size=8, description="*Field*: 8-Bit value (0..max)")],
description="""
No. of active (GRB) entries.
Indicate actual # of elements used (may be less than max!)
""")
self.bEnable = CSRStorage(8, reset_less=True, description="""
self.bEnable = CSRStorage(1, reset_less=True,
fields=[CSRField("Enable", size=1, description="*Field*: bit", values=[
("0", "DISABLED", "``NeoPixel`` protocol not active"),
("1", "ENABLED", "``NeoPixel`` protocol active"),
])
],
description="""
Enable free run (signal start & abort)
""")

@ -0,0 +1,214 @@
#!/usr/bin/env python3
#
# neopixelengine.py
#
# NeoPixel protocol engine (wanna-be), see:
# http://www.adafruit.com/datasheets/WS2812.pdf
# https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/
#
# History:
# --------
# 15.10.20/KQ Initial module export, test bench added
# 16.10.20/KQ Several submodules (incl. FSM) tested
# 17.10.20/KQ NeoPixel engine up & driving LEDs
# 18.10.20/KQ Cleanup & more 'array'
# 19.10.20/KQ Renamed from 'neopixelprotocol'
# 27.10.20/KQ Using AutoDoc etc(improved documentation generation)
#
from migen import *
from litex.soc.interconnect.csr import AutoCSR, CSRStatus, CSRStorage, CSRField, CSRAccess
from litex.soc.integration.doc import AutoDoc, ModuleDoc
class NeoPixelEngine(Module, AutoCSR, AutoDoc, ModuleDoc):
"""
NeoPixelEngine class provides the protocol logic to drive NeoPixel LED strips
Usage:
######
#. Fill NeoPixelEngine's local array of GRB values (Green/Red/Blue).
Load ``b24Data2Load`` with a 24-bit (GRB) value.
Indicate the offset (where to store) via writing to ``b8LoadOffset``.
Repeat for all offsets 'til end of array ...
#. Indicate to NeoPixelEngine the actual no. of pixels used by setting up ``b8Len``.
#. Finally, enable processing by setting ``bEnable`` to true (1).
Inputs:
#######
:b24Data2Load: New data to be loaded (24 bits)
:b8LoadOffset: Offset (0..255) into b24GRBArray to load b24Data2Load to
:b8Len: Length (0..255) of actual 24-bit data entries (i.e. # of NeoPixels)
:bEnable: To enable running (after data preparation)
Output:
#######
:bDataPin: NeoPixel 'Din' pin output (wire to actual output pin ... ;)
"""
def __init__(self, n_LEDs=3):
# On Colorlight-5A-75B/Lattice ECP5-25 (@i7/4th gen.):
# 256 NeoPixel LEDs will use 95% of TRELLIS_SLICES & REQUIRE ether_net & ether_bone being DISABLED! Calc. time >2h
# 192 NeoPixel LEDs w/ ethernet/etherbone will use 95% of TRELLIS_SLICES & take approx. 2:20h to calculate
# 27 NeoPixels LEDs w/ ethernet/etherbone used for any tests will require 73% of TRELLIS_SLICES & take less than 0:10h to calculate
self.b24GRBArray = Array(Signal(24) for word24 in range(n_LEDs)) # Local 24-bit data Array
# Inputs
self.b24Data2Load = CSRStorage(24, reset_less=True,
fields=[CSRField("Data2Load", size=24, description="*Field*: 24-Bit value")],
description="""
Load value (24-Bit G/R/B).
Use ``b8LoadOffset`` first to indicate array location where to store this value.
""")
self.b8LoadOffset = CSRStorage(8, reset_less=True,
fields=[CSRField("LoadOffset", size=8, description="*Field*: 8-Bit value (0..max)")],
description="""
Offset into storage array for 24-bit G/R/B values.
Prepare this one first, then indicate value to store via ``b24Data2Load``.
""")
self.b8Len = CSRStorage(8, reset_less=True,
fields=[CSRField("Len", size=8, description="*Field*: 8-Bit value (0..max)")],
description="""
No. of active (GRB) entries.
Indicate actual # of elements used (may be less than max!)
""")
self.bEnable = CSRStorage(1, reset_less=True,
fields=[CSRField("Enable", size=1, description="*Field*: bit", values=[
("0", "DISABLED", "``NeoPixel`` protocol not active"),
("1", "ENABLED", "``NeoPixel`` protocol active"),
])
],
description="""
Enable free run (signal start & abort)
""")
# Local data
self.b8Offset = Signal(8) # Array rover
self.b24GRB = Signal(24) # Current 24-bit data to send
self.b12PulseLen = Signal(12) # Current pulse length
self.b5Count24 = Signal(5) # 24-Bit counter
# Output
self.bDataPin = Signal() # To be wired to data pin ...
###
fsm = FSM(reset_state="IDLE") # FSM starts idling ...
self.submodules += fsm
self.sync += self.b24GRBArray[self.b8LoadOffset.storage].eq(self.b24Data2Load.storage) # Loader is allways active!
fsm.act("IDLE",
If((self.bEnable.storage==True) and (self.b8Len.storage > 0),
NextValue(self.b8Offset, 0), # Start @ 1st 24-bit data
NextValue(self.b24GRB, self.b24GRBArray[0]), # ... but load 1st right away!
NextValue(self.b5Count24,0), # Bit count 0..23
NextState("PREPAREBIT")
)
)
# Protocol: T0H=400ns/T0L=850ns, T1H=800ns/T1L=450ns, RST>50µs(>50000ns)
fsm.act("PREPAREBIT",
If(self.b24GRB[23],
NextValue(self.b12PulseLen,47), # Compensate for 1 state changes w/o action ...),
NextState("T1H")
).Else(
NextValue(self.b12PulseLen,23), # Compensate for 1 state changes w/o action ...
NextState("T0H")
)
)
fsm.act("T1H",
NextValue(self.bDataPin, 1),
NextValue(self.b12PulseLen, self.b12PulseLen-1),
If(self.b12PulseLen == 0,
NextValue(self.b12PulseLen, 24), # Compensate for 3 state changes w/o action ...
NextState("T1L")
)
)
fsm.act("T1L",
NextValue(self.bDataPin, 0),
NextValue(self.b12PulseLen, self.b12PulseLen-1),
If(self.b12PulseLen == 0,
NextValue(self.b5Count24, self.b5Count24 + 1), # Next bit (of GRB)
NextValue(self.b24GRB, self.b24GRB << 1), # Next bit (of GRB)
NextState("NEXTBIT")
)
)
fsm.act("T0H",
NextValue(self.bDataPin, 1),
NextValue(self.b12PulseLen, self.b12PulseLen-1),
If(self.b12PulseLen == 0,
NextValue(self.b12PulseLen, 48), # Compensate for 3 state changes w/o action ...
NextState("T0L")
)
)
fsm.act("T0L",
NextValue(self.bDataPin, 0),
NextValue(self.b12PulseLen, self.b12PulseLen-1),
If(self.b12PulseLen == 0,
NextValue(self.b5Count24, self.b5Count24 + 1), # Next bit (of GRB)
NextValue(self.b24GRB, self.b24GRB << 1), # Next bit (of GRB)
NextState("NEXTBIT")
)
)
fsm.act("NEXTBIT",
If(self.b5Count24 < 24, # Not yet done?
NextState("PREPAREBIT")
).Else( # GRB word finished. More to come?
NextValue(self.b5Count24,0), # Bit count reset for next word
NextValue(self.b8Offset, self.b8Offset + 1), # Prepare offset for later use
NextState("NEXTWORD")
)
)
fsm.act("NEXTWORD",
If((self.b8Offset < self.b8Len.storage) & (self.bEnable.storage==True), # Still more words to come (& no exit request)?
NextValue(self.b24GRB, self.b24GRBArray[self.b8Offset]), # Load in advance
NextState("PREPAREBIT")
).Else(
NextValue(self.b12PulseLen, 4095), # >50µs required (3000 not ok!)
NextState("RST")
)
)
fsm.act("RST",
NextValue(self.bDataPin, 0),
NextValue(self.b12PulseLen, self.b12PulseLen-1),
If(self.b12PulseLen == 0,
NextState("IDLE")
)
)
def npe_testbench(npe):
print("----- npe testbench -----")
yield npe.b8LoadOffset.storage.eq(3)
yield
yield npe.b24Data2Load.storage.eq(0x100000)
yield
yield npe.b24GRBArray[0].eq(0x123456)
yield
yield npe.b24GRBArray[1].eq(0x223344)
yield
yield npe.b24GRBArray[2].eq(0x654321)
yield
yield npe.b8Len.storage.eq(3)
yield
yield npe.bEnable.storage.eq(True)
yield
#
for i in range(10000): # Send the whole data & restart ...
print(i,": ", sep="", end="")
print((yield npe.bDataPin)) # Actual pin to move
yield
if i == 5000:
yield npe.bEnable.storage.eq(True) # Enable quickest restart ...
yield
if __name__ == "__main__":
npe = NeoPixelEngine(n_LEDs=3)
run_simulation(npe, npe_testbench(npe), vcd_name="npe.vcd")

1986
npe.vcd

@ -4,7 +4,7 @@ $var wire 24 # b24GRBArray2 $end
$var wire 24 $ b24Data2Load_storage $end
$var wire 8 % b8LoadOffset_storage $end
$var wire 8 & b8Len_storage $end
$var wire 8 ' bEnable_storage $end
$var wire 1 ' bEnable_storage $end
$var wire 8 ( b8Offset $end
$var wire 24 ) b24GRB $end
$var wire 12 * b12PulseLen $end
@ -32,7 +32,7 @@ b000000000000000000000000 #
b000000000000000000000000 $
b00000000 %
b00000000 &
b00000000 '
0'
b00000000 (
b000000000000000000000000 )
b000000000000 *
@ -52,74 +52,74 @@ b000000000000 5
08
09
#5
b00000011 %
19
b00000011 %
#10
09
#15
19
b000100000000000000000000 $
19
#20
09
#25
b000100100011010001010110 !
b000100000000000000000000 #
19
b000100000000000000000000 #
#30
09
#35
b001000100011001101000100 "
19
b001000100011001101000100 "
#40
09
#45
b011001010100001100100001 #
19
b011001010100001100100001 #
#50
09
#55
b00000011 &
b000100000000000000000000 #
19
b000100000000000000000000 #
#60
09
#65
10
b00000001 '
14
1'
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
b000100100011010001010110 1
12
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
14
#70
09
#75
b000000010111 5
00
b000000000000000000000000 1
02
b000100100011010001010110 )
04
b000000010111 5
16
b01010000010100100100010101010000010000010101001001000101010000100100100101010100 -
19
b0011010000111010010101000011000001001000 .
00
b000000000000000000000000 1
b000100100011010001010110 )
04
#80
09
#85
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#90
09
#95
1,
b000000010101 5
19
b000000010110 *
1,
#100
09
#105
@ -249,9 +249,9 @@ b000000000001 *
#310
09
#315
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#320
09
@ -264,10 +264,10 @@ b010101000011000001001100 -
#330
09
#335
0,
b000000101110 5
19
b000000101111 *
0,
#340
09
#345
@ -547,17 +547,23 @@ b000000000001 *
#800
09
#805
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b001001000110100010101100 1
12
b00001 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#810
09
#815
b000000000000000000000000 1
02
b001001000110100010101100 )
b00000 3
b111111111111 *
04
b00001 +
b000000000000 5
06
@ -565,12 +571,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b001001000110100010101100 )
b00000 3
b111111111111 *
04
#820
09
#825
@ -582,19 +582,19 @@ b0011010000111010010101000011000001001000 .
#830
09
#835
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#840
09
#845
1,
b000000010101 5
19
b000000010110 *
1,
#850
09
#855
@ -724,9 +724,9 @@ b000000000001 *
#1060
09
#1065
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#1070
09
@ -739,10 +739,10 @@ b010101000011000001001100 -
#1080
09
#1085
0,
b000000101110 5
19
b000000101111 *
0,
#1090
09
#1095
@ -1022,17 +1022,23 @@ b000000000001 *
#1550
09
#1555
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b010010001101000101011000 1
12
b00010 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#1560
09
#1565
b000000000000000000000000 1
02
b010010001101000101011000 )
b00000 3
b111111111111 *
04
b00010 +
b000000000000 5
06
@ -1040,12 +1046,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b010010001101000101011000 )
b00000 3
b111111111111 *
04
#1570
09
#1575
@ -1057,19 +1057,19 @@ b0011010000111010010101000011000001001000 .
#1580
09
#1585
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#1590
09
#1595
1,
b000000010101 5
19
b000000010110 *
1,
#1600
09
#1605
@ -1199,9 +1199,9 @@ b000000000001 *
#1810
09
#1815
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#1820
09
@ -1214,10 +1214,10 @@ b010101000011000001001100 -
#1830
09
#1835
0,
b000000101110 5
19
b000000101111 *
0,
#1840
09
#1845
@ -1497,17 +1497,23 @@ b000000000001 *
#2300
09
#2305
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b100100011010001010110000 1
12
b00011 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#2310
09
#2315
b000000000000000000000000 1
02
b100100011010001010110000 )
b00000 3
b111111111111 *
04
b00011 +
b000000000000 5
06
@ -1515,12 +1521,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b100100011010001010110000 )
b00000 3
b111111111111 *
04
#2320
09
#2325
@ -1532,19 +1532,19 @@ b0011001000111010010101000011000101001000 .
#2330
09
#2335
18
b000000101110 5
b000000101111 *
b010101000011000101001000 -
19
17
18
#2340
09
#2345
1,
b000000101101 5
19
b000000101110 *
1,
#2350
09
#2355
@ -1818,9 +1818,9 @@ b000000000001 *
#2800
09
#2805
b0011001100111010010101000011000101001100 .
b000000011000 5
19
b0011001100111010010101000011000101001100 .
b000000000000 *
#2810
09
@ -1833,10 +1833,10 @@ b010101000011000101001100 -
#2820
09
#2825
0,
b000000010110 5
19
b000000010111 *
0,
#2830
09
#2835
@ -1972,17 +1972,23 @@ b000000000001 *
#3050
09
#3055
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b001000110100010101100000 1
12
b00100 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#3060
09
#3065
b000000000000000000000000 1
02
b001000110100010101100000 )
b00000 3
b111111111111 *
04
b00100 +
b000000000000 5
06
@ -1990,12 +1996,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b001000110100010101100000 )
b00000 3
b111111111111 *
04
#3070
09
#3075
@ -2007,19 +2007,19 @@ b0011010000111010010101000011000001001000 .
#3080
09
#3085
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#3090
09
#3095
1,
b000000010101 5
19
b000000010110 *
1,
#3100
09
#3105
@ -2149,9 +2149,9 @@ b000000000001 *
#3310
09
#3315
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#3320
09
@ -2164,10 +2164,10 @@ b010101000011000001001100 -
#3330
09
#3335
0,
b000000101110 5
19
b000000101111 *
0,
#3340
09
#3345
@ -2447,17 +2447,23 @@ b000000000001 *
#3800
09
#3805
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b010001101000101011000000 1
12
b00101 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#3810
09
#3815
b000000000000000000000000 1
02
b010001101000101011000000 )
b00000 3
b111111111111 *
04
b00101 +
b000000000000 5
06
@ -2465,12 +2471,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b010001101000101011000000 )
b00000 3
b111111111111 *
04
#3820
09
#3825
@ -2482,19 +2482,19 @@ b0011010000111010010101000011000001001000 .
#3830
09
#3835
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#3840
09
#3845
1,
b000000010101 5
19
b000000010110 *
1,
#3850
09
#3855
@ -2624,9 +2624,9 @@ b000000000001 *
#4060
09
#4065
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#4070
09
@ -2639,10 +2639,10 @@ b010101000011000001001100 -
#4080
09
#4085
0,
b000000101110 5
19
b000000101111 *
0,
#4090
09
#4095
@ -2922,17 +2922,23 @@ b000000000001 *
#4550
09
#4555
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b100011010001010110000000 1
12
b00110 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#4560
09
#4565
b000000000000000000000000 1
02
b100011010001010110000000 )
b00000 3
b111111111111 *
04
b00110 +
b000000000000 5
06
@ -2940,12 +2946,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b100011010001010110000000 )
b00000 3
b111111111111 *
04
#4570
09
#4575
@ -2957,19 +2957,19 @@ b0011001000111010010101000011000101001000 .
#4580
09
#4585
18
b000000101110 5
b000000101111 *
b010101000011000101001000 -
19
17
18
#4590
09
#4595
1,
b000000101101 5
19
b000000101110 *
1,
#4600
09
#4605
@ -3243,9 +3243,9 @@ b000000000001 *
#5050
09
#5055
b0011001100111010010101000011000101001100 .
b000000011000 5
19
b0011001100111010010101000011000101001100 .
b000000000000 *
#5060
09
@ -3258,10 +3258,10 @@ b010101000011000101001100 -
#5070
09
#5075
0,
b000000010110 5
19
b000000010111 *
0,
#5080
09
#5085
@ -3397,17 +3397,23 @@ b000000000001 *
#5300
09
#5305
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b000110100010101100000000 1
12
b00111 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#5310
09
#5315
b000000000000000000000000 1
02
b000110100010101100000000 )
b00000 3
b111111111111 *
04
b00111 +
b000000000000 5
06
@ -3415,12 +3421,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b000110100010101100000000 )
b00000 3
b111111111111 *
04
#5320
09
#5325
@ -3432,19 +3432,19 @@ b0011010000111010010101000011000001001000 .
#5330
09
#5335
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#5340
09
#5345
1,
b000000010101 5
19
b000000010110 *
1,
#5350
09
#5355
@ -3574,9 +3574,9 @@ b000000000001 *
#5560
09
#5565
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#5570
09
@ -3589,10 +3589,10 @@ b010101000011000001001100 -
#5580
09
#5585
0,
b000000101110 5
19
b000000101111 *
0,
#5590
09
#5595
@ -3872,17 +3872,23 @@ b000000000001 *
#6050
09
#6055
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b001101000101011000000000 1
12
b01000 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#6060
09
#6065
b000000000000000000000000 1
02
b001101000101011000000000 )
b00000 3
b111111111111 *
04
b01000 +
b000000000000 5
06
@ -3890,12 +3896,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b001101000101011000000000 )
b00000 3
b111111111111 *
04
#6070
09
#6075
@ -3907,19 +3907,19 @@ b0011010000111010010101000011000001001000 .
#6080
09
#6085
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#6090
09
#6095
1,
b000000010101 5
19
b000000010110 *
1,
#6100
09
#6105
@ -4049,9 +4049,9 @@ b000000000001 *
#6310
09
#6315
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#6320
09
@ -4064,10 +4064,10 @@ b010101000011000001001100 -
#6330
09
#6335
0,
b000000101110 5
19
b000000101111 *
0,
#6340
09
#6345
@ -4347,17 +4347,23 @@ b000000000001 *
#6800
09
#6805
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b011010001010110000000000 1
12
b01001 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#6810
09
#6815
b000000000000000000000000 1
02
b011010001010110000000000 )
b00000 3
b111111111111 *
04
b01001 +
b000000000000 5
06
@ -4365,12 +4371,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b011010001010110000000000 )
b00000 3
b111111111111 *
04
#6820
09
#6825
@ -4382,19 +4382,19 @@ b0011010000111010010101000011000001001000 .
#6830
09
#6835
18
b000000010110 5
b000000010111 *
b010101000011000001001000 -
19
17
18
#6840
09
#6845
1,
b000000010101 5
19
b000000010110 *
1,
#6850
09
#6855
@ -4524,9 +4524,9 @@ b000000000001 *
#7060
09
#7065
b0011010100111010010101000011000001001100 .
b000000110000 5
19
b0011010100111010010101000011000001001100 .
b000000000000 *
#7070
09
@ -4539,10 +4539,10 @@ b010101000011000001001100 -
#7080
09
#7085
0,
b000000101110 5
19
b000000101111 *
0,
#7090
09
#7095
@ -4822,17 +4822,23 @@ b000000000001 *
#7550
09
#7555
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b110100010101100000000000 1
12
b01010 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#7560
09
#7565
b000000000000000000000000 1
02
b110100010101100000000000 )
b00000 3
b111111111111 *
04
b01010 +
b000000000000 5
06
@ -4840,12 +4846,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b110100010101100000000000 )
b00000 3
b111111111111 *
04
#7570
09
#7575
@ -4857,19 +4857,19 @@ b0011001000111010010101000011000101001000 .
#7580
09
#7585
18
b000000101110 5
b000000101111 *
b010101000011000101001000 -
19
17
18
#7590
09
#7595
1,
b000000101101 5
19
b000000101110 *
1,
#7600
09
#7605
@ -5143,9 +5143,9 @@ b000000000001 *
#8050
09
#8055
b0011001100111010010101000011000101001100 .
b000000011000 5
19
b0011001100111010010101000011000101001100 .
b000000000000 *
#8060
09
@ -5158,10 +5158,10 @@ b010101000011000101001100 -
#8070
09
#8075
0,
b000000010110 5
19
b000000010111 *
0,
#8080
09
#8085
@ -5297,17 +5297,23 @@ b000000000001 *
#8300
09
#8305
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b101000101011000000000000 1
12
b01011 3
b000000000000 *
14
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
#8310
09
#8315
b000000000000000000000000 1
02
b101000101011000000000000 )
b00000 3
b111111111111 *
04
b01011 +
b000000000000 5
06
@ -5315,12 +5321,6 @@ b01001110010001010101100001010100010000100100100101010100 -
19
b001100010011101001010000010100100100010101010000010000010101001001000101010000100100100101010100 .
08
b000000000000000000000000 1
02
b101000101011000000000000 )
b00000 3
b111111111111 *
04
#8320
09
#8325
@ -5332,19 +5332,19 @@ b0011001000111010010101000011000101001000 .
#8330
09
#8335
18
b000000101110 5
b000000101111 *
b010101000011000101001000 -
19
17
18
#8340
09
#8345
1,
b000000101101 5
19
b000000101110 *
1,
#8350
09
#8355
@ -5618,9 +5618,9 @@ b000000000001 *
#8800
09
#8805
b0011001100111010010101000011000101001100 .
b000000011000 5
19
b0011001100111010010101000011000101001100 .
b000000000000 *
#8810
09
@ -5633,10 +5633,10 @@ b010101000011000101001100 -
#8820
09
#8825
0,
b000000010110 5
19
b000000010111 *
0,
#8830
09
#8835
@ -5772,17 +5772,23 @@ b000000000001 *
#9050
09
#9055
b111111111111 5
19
b001101100011101001001110010001010101100001010100010000100100100101010100 .
b010001010110000000000000 1
12
b01100 3
b000000000000 *
14