Rewrite readblock in assembly

This commit is contained in:
Byron Lathi
2023-08-08 19:28:10 -07:00
parent 446f4e7539
commit e73c4e1d08
7 changed files with 606 additions and 560 deletions

View File

@@ -3,7 +3,7 @@
{
"name": "la0",
"type": "la",
"uuid": "fc5ad0b7db9846e2b64719110e7975d8",
"uuid": "3116afbb3c1645178391686859e56041",
"trigin_en": false,
"trigout_en": false,
"auto_inserted": true,
@@ -21,48 +21,43 @@
"width": 1,
"probe_type": 1
},
{
"name": "cpu_sync",
"width": 1,
"probe_type": 1
},
{
"name": "cpu_resb",
"width": 1,
"probe_type": 1
},
{
"name": "cpu_addr",
"width": 16,
"probe_type": 1
},
{
"name": "cpu_phi2",
"name": "cpu_sync",
"width": 1,
"probe_type": 1
},
{
"name": "spi_clk",
"name": "cpu_rdy",
"width": 1,
"probe_type": 1
},
{
"name": "spi_mosi",
"name": "spi_controller/r_input_data",
"width": 8,
"probe_type": 1
},
{
"name": "spi_controller/r_output_data",
"width": 8,
"probe_type": 1
},
{
"name": "spi_controller/o_spi_clk",
"width": 1,
"probe_type": 1
},
{
"name": "sd_cs",
"name": "spi_controller/o_spi_mosi",
"width": 1,
"probe_type": 1
},
{
"name": "spi_miso",
"width": 1,
"probe_type": 1
},
{
"name": "spi_controller/active",
"name": "spi_controller/i_spi_miso",
"width": 1,
"probe_type": 1
}
@@ -192,7 +187,7 @@
},
{
"name": "la0_clk",
"net": "clk_50",
"net": "clk_2",
"path": []
},
{
@@ -241,123 +236,224 @@
"path": []
},
{
"name": "la0_probe2",
"net": "cpu_sync",
"path": []
},
{
"name": "la0_probe3",
"net": "cpu_resb",
"path": []
},
{
"name": "la0_probe4[0]",
"name": "la0_probe2[0]",
"net": "cpu_addr[0]",
"path": []
},
{
"name": "la0_probe4[1]",
"name": "la0_probe2[1]",
"net": "cpu_addr[1]",
"path": []
},
{
"name": "la0_probe4[2]",
"name": "la0_probe2[2]",
"net": "cpu_addr[2]",
"path": []
},
{
"name": "la0_probe4[3]",
"name": "la0_probe2[3]",
"net": "cpu_addr[3]",
"path": []
},
{
"name": "la0_probe4[4]",
"name": "la0_probe2[4]",
"net": "cpu_addr[4]",
"path": []
},
{
"name": "la0_probe4[5]",
"name": "la0_probe2[5]",
"net": "cpu_addr[5]",
"path": []
},
{
"name": "la0_probe4[6]",
"name": "la0_probe2[6]",
"net": "cpu_addr[6]",
"path": []
},
{
"name": "la0_probe4[7]",
"name": "la0_probe2[7]",
"net": "cpu_addr[7]",
"path": []
},
{
"name": "la0_probe4[8]",
"name": "la0_probe2[8]",
"net": "cpu_addr[8]",
"path": []
},
{
"name": "la0_probe4[9]",
"name": "la0_probe2[9]",
"net": "cpu_addr[9]",
"path": []
},
{
"name": "la0_probe4[10]",
"name": "la0_probe2[10]",
"net": "cpu_addr[10]",
"path": []
},
{
"name": "la0_probe4[11]",
"name": "la0_probe2[11]",
"net": "cpu_addr[11]",
"path": []
},
{
"name": "la0_probe4[12]",
"name": "la0_probe2[12]",
"net": "cpu_addr[12]",
"path": []
},
{
"name": "la0_probe4[13]",
"name": "la0_probe2[13]",
"net": "cpu_addr[13]",
"path": []
},
{
"name": "la0_probe4[14]",
"name": "la0_probe2[14]",
"net": "cpu_addr[14]",
"path": []
},
{
"name": "la0_probe4[15]",
"name": "la0_probe2[15]",
"net": "cpu_addr[15]",
"path": []
},
{
"name": "la0_probe5",
"net": "cpu_phi2",
"name": "la0_probe3",
"net": "cpu_sync",
"path": []
},
{
"name": "la0_probe6",
"net": "spi_clk",
"name": "la0_probe4",
"net": "cpu_rdy",
"path": []
},
{
"name": "la0_probe5[0]",
"net": "r_input_data[0]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe5[1]",
"net": "r_input_data[1]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe5[2]",
"net": "r_input_data[2]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe5[3]",
"net": "r_input_data[3]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe5[4]",
"net": "r_input_data[4]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe5[5]",
"net": "r_input_data[5]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe5[6]",
"net": "r_input_data[6]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe5[7]",
"net": "r_input_data[7]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[0]",
"net": "r_output_data[0]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[1]",
"net": "r_output_data[1]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[2]",
"net": "r_output_data[2]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[3]",
"net": "r_output_data[3]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[4]",
"net": "r_output_data[4]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[5]",
"net": "r_output_data[5]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[6]",
"net": "r_output_data[6]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe6[7]",
"net": "r_output_data[7]",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe7",
"net": "spi_mosi",
"path": []
"net": "o_spi_clk",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe8",
"net": "sd_cs",
"path": []
"net": "o_spi_mosi",
"path": [
"spi_controller"
]
},
{
"name": "la0_probe9",
"net": "spi_miso",
"path": []
},
{
"name": "la0_probe10",
"net": "active",
"net": "i_spi_miso",
"path": [
"spi_controller"
]
@@ -380,7 +476,7 @@
{
"name": "cpu_data_in",
"width": 8,
"clk_domain": "clk_50",
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": [],
@@ -390,23 +486,7 @@
{
"name": "cpu_rwb",
"width": 1,
"clk_domain": "clk_50",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
},
{
"name": "cpu_sync",
"width": 1,
"clk_domain": "clk_50",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
},
{
"name": "cpu_resb",
"width": 1,
"clk_domain": "clk_50",
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
@@ -414,7 +494,7 @@
{
"name": "cpu_addr",
"width": 16,
"clk_domain": "clk_50",
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": [],
@@ -422,49 +502,69 @@
"net_idx_right": 0
},
{
"name": "cpu_phi2",
"name": "cpu_sync",
"width": 1,
"clk_domain": "clk_50",
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
},
{
"name": "spi_clk",
"name": "cpu_rdy",
"width": 1,
"clk_domain": "clk_50",
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
},
{
"name": "spi_mosi",
"width": 1,
"clk_domain": "clk_50",
"name": "r_input_data",
"width": 8,
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
"path": [
"spi_controller"
],
"net_idx_left": 7,
"net_idx_right": 0
},
{
"name": "sd_cs",
"width": 1,
"clk_domain": "clk_50",
"name": "r_output_data",
"width": 8,
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
"path": [
"spi_controller"
],
"net_idx_left": 7,
"net_idx_right": 0
},
{
"name": "spi_miso",
"name": "o_spi_clk",
"width": 1,
"clk_domain": "clk_50",
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": []
"path": [
"spi_controller"
]
},
{
"name": "active",
"name": "o_spi_mosi",
"width": 1,
"clk_domain": "clk_50",
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": [
"spi_controller"
]
},
{
"name": "i_spi_miso",
"width": 1,
"clk_domain": "clk_2",
"selected_probe_type": "DATA AND TRIGGER",
"child": [],
"path": [

View File

@@ -1,253 +1,253 @@
@00000000
00 80 4C 00 00 8D 13 02 8E 14 02 8D 1A 02 8E 1B
02 88 B9 FF FF 8D 24 02 88 B9 FF FF 8D 23 02 8C
26 02 20 FF FF A0 FF D0 E8 60 00 00 0B FE 00 00
00 00 A2 FF 9A D8 A9 00 85 00 A9 80 85 01 20 83
FE 20 3F FB 20 52 F0 58 20 CC F1 6C FC FF 20 33
FB 00 A0 00 F0 07 A9 52 A2 F0 4C 05 02 60 AD FF
EF A2 00 60 8D FF EF 60 20 B2 F1 C9 0A D0 05 A9
0D 20 B2 F1 60 DA 5A A8 B2 00 AA A9 1B 20 B2 F1
A9 5B 20 B2 F1 98 20 B2 F1 A9 3B 20 B2 F1 8A 20
B2 F1 A9 48 20 B2 F1 7A FA 60 DA A9 1B 20 B2 F1
A9 63 20 B2 F1 68 60 40 DA BA 48 E8 E8 BD 00 01
29 10 D0 06 68 FA 20 CB F1 40 68 FA 7C BF F0 C5
26 02 20 FF FF A0 FF D0 E8 60 00 00 70 FD 00 00
00 00 A2 FF 9A D8 A9 00 85 00 A9 80 85 01 20 E8
FD 20 BA FA 20 52 F0 58 20 69 F2 6C FC FF 20 AE
FA 00 A0 00 F0 07 A9 52 A2 F0 4C 05 02 60 AD FF
EF A2 00 60 8D FF EF 60 20 4F F2 C9 0A D0 05 A9
0D 20 4F F2 60 DA 5A A8 B2 00 AA A9 1B 20 4F F2
A9 5B 20 4F F2 98 20 4F F2 A9 3B 20 4F F2 8A 20
4F F2 A9 48 20 4F F2 7A FA 60 DA A9 1B 20 4F F2
A9 63 20 4F F2 68 60 40 DA BA 48 E8 E8 BD 00 01
29 10 D0 06 68 FA 20 68 F2 40 68 FA 7C BF F0 C5
F0 C9 F0 CA F0 20 9A F0 40 40 20 68 F0 40 48 A0
04 B1 00 09 40 20 A2 F1 88 B1 00 20 A2 F1 88 10
F8 68 09 01 20 A2 F1 20 2F FC 60 A2 08 A9 FF 20
A2 F1 C9 FF D0 03 CA D0 F4 60 85 08 86 09 20 EB
F0 92 08 A9 FF 20 A2 F1 A0 01 91 08 20 1C FC 60
AA 20 6A FD A9 FF 20 A2 F1 92 08 E6 08 D0 02 E6
04 B1 00 09 40 20 3F F2 88 B1 00 20 3F F2 88 10
F8 68 09 01 20 3F F2 20 AA FB 60 A2 08 A9 FF 20
3F F2 C9 FF D0 03 CA D0 F4 60 85 08 86 09 20 EB
F0 92 08 A9 FF 20 3F F2 A0 01 91 08 20 97 FB 60
AA 20 E5 FC A9 FF 20 3F F2 92 08 E6 08 D0 02 E6
09 CA D0 F0 60 85 08 86 09 20 EB F0 C9 02 B0 12
E6 08 D0 02 E6 08 A5 08 A6 09 20 97 FD A9 04 20
10 F1 60 48 A9 FF 20 A2 F1 A9 00 20 96 F1 A9 FF
20 A2 F1 68 20 CE F0 20 EB F0 A8 A9 FF 20 A2 F1
A9 00 20 9C F1 A9 FF 20 A2 F1 98 A2 00 60 A9 00
20 9C F1 20 8B F1 A9 FF 20 A2 F1 A9 00 20 9C F1
A2 50 A9 FF 20 A2 F1 CA D0 F8 60 A2 01 A9 C8 3A
D0 FD CA D0 F8 60 A9 01 8D DB EF 60 9C DB EF 60
A9 00 8D DA EF AD DB EF 30 FB AD D9 EF 60 8D E6
EF 60 48 8D E6 EF AD E7 EF 89 02 D0 F9 68 60 AD
E6 EF A2 00 60 AD E7 EF A2 00 60 60 20 FA FB A2
00 86 02 86 03 A9 00 20 91 FC 20 E0 FB A9 EA A2
FE 20 A0 FB 20 93 F2 C9 00 20 3E FD D0 03 4C FB
F1 A9 E2 A2 FE 20 A0 FB 4C 87 F2 A9 D8 A2 FE 20
A0 FB A9 A6 A2 FE 20 A0 FB A0 05 20 4D FC 20 91
FC AD 00 02 AE 01 02 20 97 FD A9 0C 20 5E FC 20
80 F5 A0 07 91 00 A9 CA A2 FE 20 A0 FB A0 07 A2
00 B1 00 C9 00 20 44 FD D0 03 4C 4D F2 A0 06 A2
00 B1 00 C9 FE 20 44 FD F0 03 4C 56 F2 A2 00 A9
00 D0 03 4C 5A F2 A2 00 A9 01 D0 03 4C 6B F2 AD
00 02 AE 01 02 20 C1 F6 4C 84 F2 A0 06 A2 00 B1
00 A2 00 29 F0 20 25 FB D0 03 4C 84 F2 A9 BB A2
FE 20 A0 FB 6C 00 02 4C 8A F2 4C 8A F2 A0 0C 20
0B FB 60 20 07 FC A9 00 20 81 FD 20 6E F1 4C CA
F2 A0 00 A2 00 18 A9 01 71 00 91 00 A0 00 A2 00
B1 00 C9 FF 20 44 FD D0 03 4C CA F2 A9 0C A2 FF
20 A0 FB A2 00 A9 01 4C 01 F4 20 05 F4 A0 01 91
00 C9 01 20 3E FD D0 C9 A2 00 A9 00 A0 06 20 C5
FD A0 07 20 44 FC E0 03 D0 02 C9 E8 20 5D FD F0
03 4C F7 F2 4C 03 F3 A0 06 A2 00 A9 01 20 FB FA
4C E1 F2 A9 01 20 5E FC 20 22 F4 A0 01 A2 00 B1
00 C9 01 20 3E FD D0 03 4C 29 F3 A9 02 A2 FF 20
A0 FB A2 00 A9 01 4C 01 F4 A0 05 A2 00 B1 00 C9
AA 20 3E FD D0 03 4C 40 F3 A2 00 A9 01 4C 01 F4
A2 00 A9 00 A0 00 91 00 A0 00 A2 00 B1 00 C9 FF
20 44 FD D0 03 4C 66 F3 A9 F2 A2 FE 20 A0 FB A2
00 A9 01 4C 01 F4 20 44 F5 A0 01 91 00 A0 01 A2
00 B1 00 C9 02 20 5D FD D0 03 4C 84 F3 20 61 F5
A0 01 91 00 A2 00 A9 00 A0 06 20 C5 FD A0 07 20
44 FC E0 03 D0 02 C9 E8 20 5D FD F0 03 4C A3 F3
4C AF F3 A0 06 A2 00 A9 01 20 FB FA 4C 8D F3 A0
00 A2 00 18 A9 01 71 00 91 00 A0 01 A2 00 B1 00
C9 00 20 3E FD D0 81 A2 00 A9 00 A0 06 20 C5 FD
A0 07 20 44 FC E0 03 D0 02 C9 E8 20 5D FD F0 03
4C E6 F3 4C F2 F3 A0 06 A2 00 A9 01 20 FB FA 4C
D0 F3 A9 01 20 5E FC 20 CA F4 A2 00 A9 00 4C 01
F4 20 34 FC 60 A2 00 A9 00 20 81 FD A2 00 86 02
86 03 A9 00 20 91 FC A2 00 A9 94 20 43 F1 4C 21
F4 60 20 97 FD A2 00 A9 FF 20 A2 F1 A2 00 A9 00
20 96 F1 A2 00 A9 FF 20 A2 F1 A2 00 A9 08 20 81
FD A2 01 A9 00 85 02 A9 00 85 03 A9 AA 20 91 FC
A2 00 A9 86 20 CE F0 A0 01 20 44 FC 20 25 F1 A2
00 A9 FF 20 A2 F1 A2 00 A9 00 20 9C F1 A2 00 A9
FF 20 A2 F1 20 1C FC 60 20 97 FD A2 00 A9 FF 20
A2 F1 A2 00 A9 00 20 96 F1 A2 00 A9 FF 20 A2 F1
A2 00 A9 0D 20 81 FD A2 00 86 02 86 03 A9 00 20
91 FC A2 00 A9 00 20 CE F0 A0 01 20 44 FC 20 FA
F0 A2 00 A9 FF 20 A2 F1 A2 00 A9 00 20 9C F1 A2
00 A9 FF 20 A2 F1 20 1C FC 60 20 97 FD 20 D7 FB
A2 00 A9 FF 20 A2 F1 A2 00 A9 00 20 96 F1 A2 00
A9 FF 20 A2 F1 A0 00 91 00 A0 00 A2 00 B1 00 C9
FF 20 3E FD D0 03 4C 0A F5 4C FC F4 A2 00 A9 FF
20 A2 F1 C9 FF 20 3E FD D0 F2 A2 00 A9 3A 20 81
FD A2 00 86 02 86 03 A9 00 20 91 FC A2 00 A9 00
20 CE F0 A0 02 20 44 FC 20 25 F1 A2 00 A9 FF 20
A2 F1 A2 00 A9 00 20 9C F1 A2 00 A9 FF 20 A2 F1
20 2A FC 60 A2 00 A9 37 20 81 FD A2 00 86 02 86
03 A9 00 20 91 FC A2 00 A9 00 20 43 F1 4C 60 F5
60 A2 00 A9 29 20 81 FD A2 00 86 02 A9 40 85 03
A9 00 20 91 FC A2 00 A9 00 20 43 F1 4C 7F F5 60
20 97 FD 20 FA FB A0 07 20 44 FC 20 97 FD A2 00
A9 FF A0 00 20 AD FD A2 00 A9 FF 20 A2 F1 A2 00
A9 00 20 96 F1 A2 00 A9 FF 20 A2 F1 A2 00 A9 11
20 81 FD A0 0E 20 4D FC 20 91 FC A2 00 A9 00 20
CE F0 20 EB F0 A0 05 91 00 A0 05 A2 00 B1 00 C9
FF 20 3E FD D0 03 4C 88 F6 A2 00 A9 00 A0 02 20
C5 FD 4C FD F5 A2 00 A9 FF 20 A2 F1 A0 04 91 00
C9 FF 20 3E FD D0 03 4C FD F5 4C 11 F6 A0 02 A2
00 A9 01 20 FB FA E0 06 D0 02 C9 1B 20 3E FD D0
D4 A0 04 A2 00 B1 00 C9 FE 20 44 FD D0 03 4C 75
F6 A2 00 A9 00 A0 00 20 C5 FD A0 01 20 44 FC E0
02 20 5D FD F0 03 4C 3C F6 4C 67 F6 A0 09 20 44
FC 20 97 FD A2 00 A9 FF 48 A0 0A A2 00 A9 01 20
FB FA 68 20 A2 F1 A0 00 20 AD FD A0 00 A2 00 A9
01 20 FB FA 4C 2A F6 A2 00 A9 FF 20 A2 F1 A2 00
A9 FF 20 A2 F1 A0 07 20 44 FC 20 97 FD A0 06 A2
00 B1 00 A0 00 20 AD FD A2 00 A9 FF 20 A2 F1 A2
00 A9 00 20 9C F1 A2 00 A9 FF 20 A2 F1 A0 05 A2
00 B1 00 4C A6 F6 A0 0E 20 0B FB 60 20 97 FD 20
FA FB A0 03 A2 00 B1 00 4C BB F6 A0 0E 20 0B FB
60 20 97 FD A9 00 20 81 FD 20 E0 FB A2 00 A9 00
A0 00 20 C5 FD A0 01 20 44 FC E0 02 20 5D FD F0
03 4C E7 F6 4C 49 F7 A9 16 A2 FF 20 97 FD A0 06
20 44 FC A0 00 20 39 FC 20 97 FD A0 07 A2 00 A9
01 20 FB FA A0 04 20 6C FB A0 02 A2 00 B1 00 C9
1F 20 44 FD D0 03 4C 2B F7 A9 1A A2 FF 20 A0 FB
A2 00 A9 00 A0 02 91 00 4C 3D F7 A2 00 A9 20 20
68 F0 A0 02 A2 00 18 A9 01 71 00 91 00 A0 00 A2
00 A9 01 20 FB FA 4C D5 F6 A9 1A A2 FF 20 A0 FB
20 2F FC 60 A0 00 B1 16 E6 16 D0 02 E6 17 60 AD
3D 02 8D 38 02 20 00 F8 A9 38 A2 02 20 97 FD 20
78 FD 4C 02 02 A5 14 38 E9 02 85 14 B0 02 C6 15
60 AD 42 02 D0 11 20 9E F7 4C 1E FB AD 42 02 D0
06 20 9E F7 4C 18 FB 20 9E F7 85 02 86 03 20 75
F7 A0 01 B1 14 AA 88 B1 14 60 A0 00 84 08 84 09
B1 16 38 E9 30 90 2C C9 0A B0 28 20 58 F7 48 A5
08 A6 09 06 08 26 09 06 08 26 09 65 08 85 08 8A
65 09 85 09 06 08 26 09 68 65 08 85 08 90 D1 E6
09 B0 CD A5 08 A6 09 60 AC 44 02 EE 44 02 99 45
02 60 A9 45 A2 02 18 6D 44 02 90 01 E8 4C 97 FD
A5 18 A6 19 4C 97 FD 20 5F F7 EE 3E 02 D0 F8 EE
3F 02 D0 F3 60 20 00 F8 AD 59 02 AE 5A 02 20 97
FD AD 5B 02 AE 5C 02 20 97 FD 4C 02 02 84 08 20
91 FC 20 F2 F7 A5 08 4C C1 FC 84 08 20 91 FC 20
F2 F7 A5 08 4C 02 FD 48 A0 05 B9 14 00 99 32 02
88 10 F7 68 85 14 86 15 20 14 FC 85 16 86 17 20
14 FC 85 18 86 19 A9 00 A8 91 18 C8 91 18 C8 B1
18 8D 03 02 C8 B1 18 8D 04 02 A5 16 85 08 A5 17
85 09 A0 00 B1 16 F0 0B C9 25 F0 07 C8 D0 F5 E6
17 D0 F1 98 18 65 16 85 16 90 02 E6 17 38 E5 08
85 0A A5 17 E5 09 85 0B 05 0A F0 25 20 FA FB A0
05 A5 19 91 00 88 A5 18 91 00 88 A5 09 91 00 88
A5 08 91 00 88 A5 0B 91 00 88 A5 0A 91 00 20 02
02 20 54 F7 AA D0 0B A2 05 BD 32 02 95 14 CA 10
F8 60 C9 25 D0 09 B1 16 C9 25 D0 09 20 58 F7 20
62 F7 4C 7A F8 A9 00 A2 0B 9D 39 02 CA 10 FA B1
16 C9 2D D0 05 8E 39 02 F0 19 C9 2B D0 05 8E 3A
02 F0 10 C9 20 D0 05 8E 3B 02 F0 07 C9 23 D0 09
8E 3C 02 20 58 F7 4C FF F8 A2 20 C9 30 D0 06 AA
20 58 F7 B1 16 8E 3D 02 C9 2A D0 09 20 58 F7 20
9E F7 4C 48 F9 20 AA F7 8D 3E 02 8E 3F 02 8C 40
02 8C 41 02 B1 16 C9 2E D0 1B 20 58 F7 B1 16 C9
2A D0 09 20 58 F7 20 9E F7 4C 6F F9 20 AA F7 8D
40 02 8E 41 02 B1 16 C9 7A F0 19 C9 68 F0 15 C9
74 F0 11 C9 6A F0 08 C9 4C F0 04 C9 6C D0 0B A9
FF 8D 42 02 20 58 F7 4C 75 F9 8C 44 02 A2 45 8E
59 02 A2 02 8E 5A 02 20 58 F7 C9 63 D0 0E 20 9E
F7 8D 45 02 A9 00 8D 46 02 4C 99 FA C9 64 F0 04
C9 69 D0 2D A2 00 AD 3B 02 F0 02 A2 20 AD 3A 02
F0 02 A2 2B 8E 43 02 20 8C F7 A4 03 30 0B AC 43
02 F0 06 8C 45 02 EE 44 02 A0 0A 20 2D F8 4C 99
FA C9 6E D0 15 20 9E F7 85 08 86 09 A0 00 B1 18
91 08 C8 B1 18 91 08 4C 7A F8 C9 6F D0 27 20 8C
F7 AC 3C 02 F0 17 48 86 10 05 10 05 02 05 03 0D
40 02 0D 41 02 F0 06 A9 30 20 E8 F7 68 A0 08 20
2D F8 4C 99 FA C9 70 D0 0D A2 00 8E 42 02 E8 8E
3C 02 A9 78 D0 27 C9 73 D0 0C 20 9E F7 8D 59 02
8E 5A 02 4C 99 FA C9 75 D0 0B 20 81 F7 A0 0A 20
3A F8 4C 99 FA C9 78 F0 04 C9 58 D0 29 48 AD 3C
02 F0 0A A9 30 20 E8 F7 A9 58 20 E8 F7 20 81 F7
A0 10 20 3A F8 68 C9 78 D0 09 AD 59 02 AE 5A 02
20 E4 FD 4C 99 FA 4C 7A F8 AD 59 02 AE 5A 02 20
CE FD 8D 5B 02 8E 5C 02 AD 40 02 0D 41 02 F0 15
AE 40 02 EC 5B 02 AD 41 02 A8 ED 5C 02 B0 06 8E
5B 02 8C 5C 02 38 AD 3E 02 ED 5B 02 AA AD 3F 02
ED 5C 02 B0 03 A9 00 AA 49 FF 8D 3F 02 8A 49 FF
8D 3E 02 AD 39 02 D0 03 20 0A F8 20 15 F8 AD 39
02 F0 03 20 0A F8 4C 7A F8 A0 00 18 71 00 91 00
48 C8 8A 71 00 91 00 AA 68 60 C8 48 18 98 65 00
85 00 90 02 E6 01 68 60 A0 FF E0 80 B0 02 A0 00
84 02 84 03 60 E0 00 D0 06 AA D0 03 A9 01 60 A2
00 8A 60 A0 00 F0 07 A9 52 A2 F0 4C 05 02 60 A9
00 85 08 A9 F0 85 09 A9 00 85 0A A9 02 85 0B A2
CD A9 FF 85 10 A0 00 E8 F0 0D B1 08 91 0A C8 D0
F6 E6 09 E6 0B D0 F0 E6 10 D0 EF 60 8C 5D 02 88
88 98 18 65 00 85 08 A6 01 90 01 E8 86 09 A0 01
B1 08 AA 88 B1 08 20 97 FD A5 08 A6 09 20 53 FE
AC 5D 02 4C 0B FB 85 08 86 09 20 75 F0 4C A4 FB
85 08 86 09 A0 00 B1 08 F0 0E C8 84 10 20 68 F0
A4 10 D0 F2 E6 09 D0 EE 60 E0 00 D0 15 4A AA BD
44 FF 90 05 4A 4A 4A 4A 18 29 0F AA BD 39 FF A2
00 60 38 A9 00 AA 60 A4 00 D0 02 C6 01 C6 00 60
A5 00 38 E9 02 85 00 90 01 60 C6 01 60 A5 00 38
E9 04 85 00 90 01 60 C6 01 60 A5 00 38 E9 06 85
00 90 01 60 C6 01 60 A5 00 38 E9 07 85 00 90 01
60 C6 01 60 A0 01 B1 00 AA 88 B1 00 E6 00 F0 05
E6 00 F0 03 60 E6 00 E6 01 60 A0 03 4C 0B FB A0
05 4C 0B FB A0 08 4C 0B FB 85 08 86 09 A2 00 B1
08 60 A0 01 B1 00 AA 88 B1 00 60 A0 03 B1 00 85
03 88 B1 00 85 02 88 B1 00 AA 88 B1 00 60 A2 00
18 65 00 48 8A 65 01 AA 68 60 18 49 FF 69 01 48
8A 49 FF 69 00 AA A5 02 49 FF 69 00 85 02 A5 03
49 FF 69 00 85 03 68 60 A9 00 AA A0 00 84 02 84
03 48 20 ED FB A0 03 A5 03 91 00 88 A5 02 91 00
88 8A 91 00 68 88 91 00 60 85 10 20 14 FC 85 0A
86 0B 85 0C 86 0D 20 6A FD 20 14 FC 85 02 86 03
60 20 A9 FC A6 03 A4 10 C0 0A D0 39 A5 02 05 09
05 08 D0 11 E0 80 D0 0D A0 0B B9 2D FF 91 0A 88
10 F8 4C 39 FD 8A 10 1D A9 2D A0 00 91 0A E6 0A
D0 02 E6 0B A5 08 A6 09 20 6A FC 85 08 86 09 4C
05 FD 20 A9 FC A9 00 48 A0 20 A9 00 06 08 26 09
26 02 26 03 2A C5 10 90 04 E5 10 E6 08 88 D0 EC
A8 B9 1D FF 48 A5 08 05 09 05 02 05 03 D0 D9 A0
00 68 91 0A F0 03 C8 D0 F8 A5 0C A6 0D 60 D0 06
A2 00 8A 60 D0 FA A2 00 A9 01 60 F0 F9 30 F7 A2
00 8A 60 F0 02 10 EF A2 00 8A 60 F0 E9 90 E7 A2
00 8A 60 F0 DB A2 00 8A 2A 60 A0 01 B1 00 85 09
88 B1 00 85 08 4C 1C FC A9 01 4C 95 FD A0 00 B1
00 A4 00 F0 07 C6 00 A0 00 91 00 60 C6 01 C6 00
91 00 60 A9 00 A2 00 48 A5 00 38 E9 02 85 00 B0
02 C6 01 A0 01 8A 91 00 68 88 91 00 60 48 84 10
A0 01 B1 00 85 09 88 B1 00 85 08 A4 10 68 91 08
4C 1C FC A0 00 91 00 C8 48 8A 91 00 68 60 85 0A
86 0B A2 00 A0 00 B1 0A F0 08 C8 D0 F9 E6 0B E8
D0 F4 98 60 85 08 86 09 85 0A 86 0B A0 00 B1 08
F0 14 20 BD FB 29 02 F0 06 B1 08 69 20 91 08 C8
D0 EC E6 09 D0 E8 A5 0A A6 0B 60 20 14 FC 85 0A
86 0B E8 8E 31 02 AA E8 8E 30 02 20 6A FD 20 14
FC 85 0C 86 0D A0 00 84 10 B1 0C 18 65 0A 91 0C
C8 B1 0C 65 0B 91 0C CE 30 02 F0 11 A4 10 B1 08
C8 D0 02 E6 09 84 10 20 68 F0 4C 37 FE CE 31 02
D0 EA 60 85 08 86 09 A9 00 8D 2A 02 8D 2B 02 A0
01 B1 00 AA 88 B1 00 20 97 FD A0 02 A9 2A 91 00
C8 A9 02 91 00 A5 08 A6 09 20 47 F8 AD 2A 02 AE
2B 02 60 A9 32 85 08 A9 02 85 09 A9 00 A8 A2 00
F0 0A 91 08 C8 D0 FB E6 09 CA D0 F6 C0 2C F0 05
91 08 C8 D0 F7 60 0D 0A 52 65 61 64 69 6E 67 20
73 65 63 74 6F 72 3A 20 30 78 00 45 72 72 6F 72
20 74 6F 6B 65 6E 3A 0D 0A 00 0D 0A 52 65 73 70
6F 6E 73 65 3A 0D 0A 00 53 75 63 63 65 73 73 0D
0A 00 45 72 72 6F 72 0D 0A 00 53 74 61 72 74 0D
0A 00 6F 70 5F 63 6F 6E 64 20 65 72 72 6F 72 0D
0A 00 49 46 20 43 6F 6E 64 0D 0A 00 47 6F 20 49
44 4C 45 0D 0A 00 25 32 78 00 0D 0A 00 30 31 32
33 34 35 36 37 38 39 41 42 43 44 45 46 2D 32 31
34 37 34 38 33 36 34 38 00 00 01 02 0C 09 0A 10
40 50 A0 D0 66 66 66 66 A6 88 88 66 66 66 66 66
66 66 66 66 09 00 00 00 00 00 00 00 33 33 33 33
33 00 00 00 50 55 55 25 22 22 22 22 22 22 22 22
22 02 00 00 40 44 44 14 11 11 11 11 11 11 11 11
11 01 00 70 00 00 00 00 00 00 00 00 00 00 00 00
E6 08 D0 02 E6 08 A5 08 A6 09 20 12 FD A9 04 20
10 F1 60 48 A9 FF 20 3F F2 A9 00 20 33 F2 A9 FF
20 3F F2 68 20 CE F0 20 EB F0 A8 A9 FF 20 3F F2
A9 00 20 39 F2 A9 FF 20 3F F2 98 A2 00 60 A9 00
20 39 F2 20 8B F1 A9 FF 20 3F F2 A9 00 20 39 F2
A2 50 A9 FF 20 3F F2 CA D0 F8 60 A2 01 A9 C8 3A
D0 FD CA D0 F8 60 85 0A 86 0B A9 FF 92 0A 20 E5
FC A5 00 85 0C A5 01 85 0D 20 52 FB A0 00 B1 0C
91 00 C8 B1 0C 91 00 C8 B1 0C 91 00 C8 B1 0C 91
00 A9 FF 20 3F F2 A9 00 20 33 F2 A9 FF 20 3F F2
A9 11 A0 04 91 00 A9 00 20 CE F0 20 EB F0 C9 FF
F0 3F 85 12 A0 00 A9 FF 20 3F F2 85 11 A5 11 C9
FF D0 05 C8 D0 F0 80 23 A2 02 A0 00 A9 FF 20 3F
F2 92 08 E6 08 D0 02 E6 09 88 D0 F0 A0 00 CA D0
EB A9 FF 20 3F F2 A9 FF 20 3F F2 A5 11 92 0A A5
12 48 A9 FF 20 3F F2 A9 00 20 39 F2 A9 FF 20 3F
F2 68 60 A9 01 8D DB EF 60 9C DB EF 60 A9 00 8D
DA EF AD DB EF 30 FB AD D9 EF 60 8D E6 EF 60 48
8D E6 EF AD E7 EF 89 02 D0 F9 68 60 AD E6 EF A2
00 60 AD E7 EF A2 00 60 60 20 75 FB A2 00 86 02
86 03 A9 00 20 0C FC 20 5B FB A9 2D A2 FE 20 1B
FB 20 3A F3 C9 00 20 B9 FC D0 03 4C 98 F2 A9 25
A2 FE 20 1B FB 4C 2E F3 A9 1B A2 FE 20 1B FB A0
05 20 C8 FB 20 0C FC AD 00 02 AE 01 02 20 12 FD
A9 0C 20 D9 FB 20 96 F1 A0 07 91 00 A0 07 A2 00
B1 00 C9 00 20 BF FC D0 03 4C DC F2 A0 06 A2 00
B1 00 C9 FE 20 BF FC F0 03 4C E5 F2 A2 00 A9 00
D0 03 4C E9 F2 A2 00 A9 01 D0 03 4C FA F2 AD 00
02 AE 01 02 20 3C F6 4C 2B F3 A0 06 A2 00 B1 00
A2 00 29 F0 20 A0 FA D0 03 4C 16 F3 A9 25 A2 FE
20 1B FB 4C 2B F3 A9 0B A2 FE 20 12 FD A0 08 A2
00 B1 00 20 12 FD A0 04 20 E7 FA 6C 00 02 4C 31
F3 4C 31 F3 A0 0C 20 86 FA 60 20 82 FB A9 00 20
FC FC 20 6E F1 4C 71 F3 A0 00 A2 00 18 A9 01 71
00 91 00 A0 00 A2 00 B1 00 C9 FF 20 BF FC D0 03
4C 71 F3 A9 4F A2 FE 20 1B FB A2 00 A9 01 4C A8
F4 20 AC F4 A0 01 91 00 C9 01 20 B9 FC D0 C9 A2
00 A9 00 A0 06 20 2A FD A0 07 20 BF FB E0 03 D0
02 C9 E8 20 D8 FC F0 03 4C 9E F3 4C AA F3 A0 06
A2 00 A9 01 20 76 FA 4C 88 F3 A9 01 20 D9 FB 20
C9 F4 A0 01 A2 00 B1 00 C9 01 20 B9 FC D0 03 4C
D0 F3 A9 45 A2 FE 20 1B FB A2 00 A9 01 4C A8 F4
A0 05 A2 00 B1 00 C9 AA 20 B9 FC D0 03 4C E7 F3
A2 00 A9 01 4C A8 F4 A2 00 A9 00 A0 00 91 00 A0
00 A2 00 B1 00 C9 FF 20 BF FC D0 03 4C 0D F4 A9
35 A2 FE 20 1B FB A2 00 A9 01 4C A8 F4 20 EB F5
A0 01 91 00 A0 01 A2 00 B1 00 C9 02 20 D8 FC D0
03 4C 2B F4 20 08 F6 A0 01 91 00 A2 00 A9 00 A0
06 20 2A FD A0 07 20 BF FB E0 03 D0 02 C9 E8 20
D8 FC F0 03 4C 4A F4 4C 56 F4 A0 06 A2 00 A9 01
20 76 FA 4C 34 F4 A0 00 A2 00 18 A9 01 71 00 91
00 A0 01 A2 00 B1 00 C9 00 20 B9 FC D0 81 A2 00
A9 00 A0 06 20 2A FD A0 07 20 BF FB E0 03 D0 02
C9 E8 20 D8 FC F0 03 4C 8D F4 4C 99 F4 A0 06 A2
00 A9 01 20 76 FA 4C 77 F4 A9 01 20 D9 FB 20 71
F5 A2 00 A9 00 4C A8 F4 20 AF FB 60 A2 00 A9 00
20 FC FC A2 00 86 02 86 03 A9 00 20 0C FC A2 00
A9 94 20 43 F1 4C C8 F4 60 20 12 FD A2 00 A9 FF
20 3F F2 A2 00 A9 00 20 33 F2 A2 00 A9 FF 20 3F
F2 A2 00 A9 08 20 FC FC A2 01 A9 00 85 02 A9 00
85 03 A9 AA 20 0C FC A2 00 A9 86 20 CE F0 A0 01
20 BF FB 20 25 F1 A2 00 A9 FF 20 3F F2 A2 00 A9
00 20 39 F2 A2 00 A9 FF 20 3F F2 20 97 FB 60 20
12 FD A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 33 F2
A2 00 A9 FF 20 3F F2 A2 00 A9 0D 20 FC FC A2 00
86 02 86 03 A9 00 20 0C FC A2 00 A9 00 20 CE F0
A0 01 20 BF FB 20 FA F0 A2 00 A9 FF 20 3F F2 A2
00 A9 00 20 39 F2 A2 00 A9 FF 20 3F F2 20 97 FB
60 20 12 FD 20 52 FB A2 00 A9 FF 20 3F F2 A2 00
A9 00 20 33 F2 A2 00 A9 FF 20 3F F2 A0 00 91 00
A0 00 A2 00 B1 00 C9 FF 20 B9 FC D0 03 4C B1 F5
4C A3 F5 A2 00 A9 FF 20 3F F2 C9 FF 20 B9 FC D0
F2 A2 00 A9 3A 20 FC FC A2 00 86 02 86 03 A9 00
20 0C FC A2 00 A9 00 20 CE F0 A0 02 20 BF FB 20
25 F1 A2 00 A9 FF 20 3F F2 A2 00 A9 00 20 39 F2
A2 00 A9 FF 20 3F F2 20 A5 FB 60 A2 00 A9 37 20
FC FC A2 00 86 02 86 03 A9 00 20 0C FC A2 00 A9
00 20 43 F1 4C 07 F6 60 A2 00 A9 29 20 FC FC A2
00 86 02 A9 40 85 03 A9 00 20 0C FC A2 00 A9 00
20 43 F1 4C 26 F6 60 20 12 FD 20 75 FB A0 03 A2
00 B1 00 4C 36 F6 A0 0E 20 86 FA 60 20 12 FD A9
00 20 FC FC 20 5B FB A2 00 A9 00 A0 00 20 2A FD
A0 01 20 BF FB E0 02 20 D8 FC F0 03 4C 62 F6 4C
C4 F6 A9 59 A2 FE 20 12 FD A0 06 20 BF FB A0 00
20 B4 FB 20 12 FD A0 07 A2 00 A9 01 20 76 FA A0
04 20 E7 FA A0 02 A2 00 B1 00 C9 1F 20 BF FC D0
03 4C A6 F6 A9 5D A2 FE 20 1B FB A2 00 A9 00 A0
02 91 00 4C B8 F6 A2 00 A9 20 20 68 F0 A0 02 A2
00 18 A9 01 71 00 91 00 A0 00 A2 00 A9 01 20 76
FA 4C 50 F6 A9 5D A2 FE 20 1B FB 20 AA FB 60 A0
00 B1 16 E6 16 D0 02 E6 17 60 AD 3D 02 8D 38 02
20 7B F7 A9 38 A2 02 20 12 FD 20 F3 FC 4C 02 02
A5 14 38 E9 02 85 14 B0 02 C6 15 60 AD 42 02 D0
11 20 19 F7 4C 99 FA AD 42 02 D0 06 20 19 F7 4C
93 FA 20 19 F7 85 02 86 03 20 F0 F6 A0 01 B1 14
AA 88 B1 14 60 A0 00 84 08 84 09 B1 16 38 E9 30
90 2C C9 0A B0 28 20 D3 F6 48 A5 08 A6 09 06 08
26 09 06 08 26 09 65 08 85 08 8A 65 09 85 09 06
08 26 09 68 65 08 85 08 90 D1 E6 09 B0 CD A5 08
A6 09 60 AC 44 02 EE 44 02 99 45 02 60 A9 45 A2
02 18 6D 44 02 90 01 E8 4C 12 FD A5 18 A6 19 4C
12 FD 20 DA F6 EE 3E 02 D0 F8 EE 3F 02 D0 F3 60
20 7B F7 AD 59 02 AE 5A 02 20 12 FD AD 5B 02 AE
5C 02 20 12 FD 4C 02 02 84 08 20 0C FC 20 6D F7
A5 08 4C 3C FC 84 08 20 0C FC 20 6D F7 A5 08 4C
7D FC 48 A0 05 B9 14 00 99 32 02 88 10 F7 68 85
14 86 15 20 8F FB 85 16 86 17 20 8F FB 85 18 86
19 A9 00 A8 91 18 C8 91 18 C8 B1 18 8D 03 02 C8
B1 18 8D 04 02 A5 16 85 08 A5 17 85 09 A0 00 B1
16 F0 0B C9 25 F0 07 C8 D0 F5 E6 17 D0 F1 98 18
65 16 85 16 90 02 E6 17 38 E5 08 85 0A A5 17 E5
09 85 0B 05 0A F0 25 20 75 FB A0 05 A5 19 91 00
88 A5 18 91 00 88 A5 09 91 00 88 A5 08 91 00 88
A5 0B 91 00 88 A5 0A 91 00 20 02 02 20 CF F6 AA
D0 0B A2 05 BD 32 02 95 14 CA 10 F8 60 C9 25 D0
09 B1 16 C9 25 D0 09 20 D3 F6 20 DD F6 4C F5 F7
A9 00 A2 0B 9D 39 02 CA 10 FA B1 16 C9 2D D0 05
8E 39 02 F0 19 C9 2B D0 05 8E 3A 02 F0 10 C9 20
D0 05 8E 3B 02 F0 07 C9 23 D0 09 8E 3C 02 20 D3
F6 4C 7A F8 A2 20 C9 30 D0 06 AA 20 D3 F6 B1 16
8E 3D 02 C9 2A D0 09 20 D3 F6 20 19 F7 4C C3 F8
20 25 F7 8D 3E 02 8E 3F 02 8C 40 02 8C 41 02 B1
16 C9 2E D0 1B 20 D3 F6 B1 16 C9 2A D0 09 20 D3
F6 20 19 F7 4C EA F8 20 25 F7 8D 40 02 8E 41 02
B1 16 C9 7A F0 19 C9 68 F0 15 C9 74 F0 11 C9 6A
F0 08 C9 4C F0 04 C9 6C D0 0B A9 FF 8D 42 02 20
D3 F6 4C F0 F8 8C 44 02 A2 45 8E 59 02 A2 02 8E
5A 02 20 D3 F6 C9 63 D0 0E 20 19 F7 8D 45 02 A9
00 8D 46 02 4C 14 FA C9 64 F0 04 C9 69 D0 2D A2
00 AD 3B 02 F0 02 A2 20 AD 3A 02 F0 02 A2 2B 8E
43 02 20 07 F7 A4 03 30 0B AC 43 02 F0 06 8C 45
02 EE 44 02 A0 0A 20 A8 F7 4C 14 FA C9 6E D0 15
20 19 F7 85 08 86 09 A0 00 B1 18 91 08 C8 B1 18
91 08 4C F5 F7 C9 6F D0 27 20 07 F7 AC 3C 02 F0
17 48 86 10 05 10 05 02 05 03 0D 40 02 0D 41 02
F0 06 A9 30 20 63 F7 68 A0 08 20 A8 F7 4C 14 FA
C9 70 D0 0D A2 00 8E 42 02 E8 8E 3C 02 A9 78 D0
27 C9 73 D0 0C 20 19 F7 8D 59 02 8E 5A 02 4C 14
FA C9 75 D0 0B 20 FC F6 A0 0A 20 B5 F7 4C 14 FA
C9 78 F0 04 C9 58 D0 29 48 AD 3C 02 F0 0A A9 30
20 63 F7 A9 58 20 63 F7 20 FC F6 A0 10 20 B5 F7
68 C9 78 D0 09 AD 59 02 AE 5A 02 20 49 FD 4C 14
FA 4C F5 F7 AD 59 02 AE 5A 02 20 33 FD 8D 5B 02
8E 5C 02 AD 40 02 0D 41 02 F0 15 AE 40 02 EC 5B
02 AD 41 02 A8 ED 5C 02 B0 06 8E 5B 02 8C 5C 02
38 AD 3E 02 ED 5B 02 AA AD 3F 02 ED 5C 02 B0 03
A9 00 AA 49 FF 8D 3F 02 8A 49 FF 8D 3E 02 AD 39
02 D0 03 20 85 F7 20 90 F7 AD 39 02 F0 03 20 85
F7 4C F5 F7 A0 00 18 71 00 91 00 48 C8 8A 71 00
91 00 AA 68 60 C8 48 18 98 65 00 85 00 90 02 E6
01 68 60 A0 FF E0 80 B0 02 A0 00 84 02 84 03 60
E0 00 D0 06 AA D0 03 A9 01 60 A2 00 8A 60 A0 00
F0 07 A9 52 A2 F0 4C 05 02 60 A9 00 85 08 A9 F0
85 09 A9 00 85 0A A9 02 85 0B A2 CD A9 FF 85 10
A0 00 E8 F0 0D B1 08 91 0A C8 D0 F6 E6 09 E6 0B
D0 F0 E6 10 D0 EF 60 8C 5D 02 88 88 98 18 65 00
85 08 A6 01 90 01 E8 86 09 A0 01 B1 08 AA 88 B1
08 20 12 FD A5 08 A6 09 20 B8 FD AC 5D 02 4C 86
FA 85 08 86 09 20 75 F0 4C 1F FB 85 08 86 09 A0
00 B1 08 F0 0E C8 84 10 20 68 F0 A4 10 D0 F2 E6
09 D0 EE 60 E0 00 D0 15 4A AA BD 87 FE 90 05 4A
4A 4A 4A 18 29 0F AA BD 7C FE A2 00 60 38 A9 00
AA 60 A4 00 D0 02 C6 01 C6 00 60 A5 00 38 E9 02
85 00 90 01 60 C6 01 60 A5 00 38 E9 04 85 00 90
01 60 C6 01 60 A5 00 38 E9 06 85 00 90 01 60 C6
01 60 A5 00 38 E9 07 85 00 90 01 60 C6 01 60 A0
01 B1 00 AA 88 B1 00 E6 00 F0 05 E6 00 F0 03 60
E6 00 E6 01 60 A0 03 4C 86 FA A0 05 4C 86 FA A0
08 4C 86 FA 85 08 86 09 A2 00 B1 08 60 A0 01 B1
00 AA 88 B1 00 60 A0 03 B1 00 85 03 88 B1 00 85
02 88 B1 00 AA 88 B1 00 60 A2 00 18 65 00 48 8A
65 01 AA 68 60 18 49 FF 69 01 48 8A 49 FF 69 00
AA A5 02 49 FF 69 00 85 02 A5 03 49 FF 69 00 85
03 68 60 A9 00 AA A0 00 84 02 84 03 48 20 68 FB
A0 03 A5 03 91 00 88 A5 02 91 00 88 8A 91 00 68
88 91 00 60 85 10 20 8F FB 85 0A 86 0B 85 0C 86
0D 20 E5 FC 20 8F FB 85 02 86 03 60 20 24 FC A6
03 A4 10 C0 0A D0 39 A5 02 05 09 05 08 D0 11 E0
80 D0 0D A0 0B B9 70 FE 91 0A 88 10 F8 4C B4 FC
8A 10 1D A9 2D A0 00 91 0A E6 0A D0 02 E6 0B A5
08 A6 09 20 E5 FB 85 08 86 09 4C 80 FC 20 24 FC
A9 00 48 A0 20 A9 00 06 08 26 09 26 02 26 03 2A
C5 10 90 04 E5 10 E6 08 88 D0 EC A8 B9 60 FE 48
A5 08 05 09 05 02 05 03 D0 D9 A0 00 68 91 0A F0
03 C8 D0 F8 A5 0C A6 0D 60 D0 06 A2 00 8A 60 D0
FA A2 00 A9 01 60 F0 F9 30 F7 A2 00 8A 60 F0 02
10 EF A2 00 8A 60 F0 E9 90 E7 A2 00 8A 60 F0 DB
A2 00 8A 2A 60 A0 01 B1 00 85 09 88 B1 00 85 08
4C 97 FB A9 01 4C 10 FD A0 00 B1 00 A4 00 F0 07
C6 00 A0 00 91 00 60 C6 01 C6 00 91 00 60 A9 00
A2 00 48 A5 00 38 E9 02 85 00 B0 02 C6 01 A0 01
8A 91 00 68 88 91 00 60 A0 00 91 00 C8 48 8A 91
00 68 60 85 0A 86 0B A2 00 A0 00 B1 0A F0 08 C8
D0 F9 E6 0B E8 D0 F4 98 60 85 08 86 09 85 0A 86
0B A0 00 B1 08 F0 14 20 38 FB 29 02 F0 06 B1 08
69 20 91 08 C8 D0 EC E6 09 D0 E8 A5 0A A6 0B 60
20 8F FB 85 0A 86 0B E8 8E 31 02 AA E8 8E 30 02
20 E5 FC 20 8F FB 85 0C 86 0D A0 00 84 10 B1 0C
18 65 0A 91 0C C8 B1 0C 65 0B 91 0C CE 30 02 F0
11 A4 10 B1 08 C8 D0 02 E6 09 84 10 20 68 F0 4C
9C FD CE 31 02 D0 EA 60 85 08 86 09 A9 00 8D 2A
02 8D 2B 02 A0 01 B1 00 AA 88 B1 00 20 12 FD A0
02 A9 2A 91 00 C8 A9 02 91 00 A5 08 A6 09 20 C2
F7 AD 2A 02 AE 2B 02 60 A9 32 85 08 A9 02 85 09
A9 00 A8 A2 00 F0 0A 91 08 C8 D0 FB E6 09 CA D0
F6 C0 2C F0 05 91 08 C8 D0 F7 60 62 61 64 20 74
6F 6B 65 6E 3A 20 25 78 0D 0A 00 53 75 63 63 65
73 73 0D 0A 00 45 72 72 6F 72 0D 0A 00 53 74 61
72 74 0D 0A 00 6F 70 5F 63 6F 6E 64 20 65 72 72
6F 72 0D 0A 00 49 46 20 43 6F 6E 64 0D 0A 00 47
6F 20 49 44 4C 45 0D 0A 00 25 32 78 00 0D 0A 00
30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46
2D 32 31 34 37 34 38 33 36 34 38 00 00 01 02 0C
09 0A 10 40 50 A0 D0 66 66 66 66 A6 88 88 66 66
66 66 66 66 66 66 66 09 00 00 00 00 00 00 00 33
33 33 33 33 00 00 00 50 55 55 25 22 22 22 22 22
22 22 22 22 02 00 00 40 44 44 14 11 11 11 11 11
11 11 11 11 01 00 70 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<efx:project name="super6502" description="" last_change_date="Sun August 6 2023 21:00:00" location="/home/byron/Projects/super6502/hw/efinix_fpga" sw_version="2023.1.150" last_run_state="pass" last_run_tool="efx_pgm" last_run_flow="bitstream" config_result_in_sync="true" design_ood="sync" place_ood="sync" route_ood="sync" xmlns:efx="http://www.efinixinc.com/enf_proj" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.efinixinc.com/enf_proj enf_proj.xsd">
<efx:project name="super6502" description="" last_change_date="Tue August 8 2023 19:25:59" location="/home/byron/Projects/super6502/hw/efinix_fpga" sw_version="2023.1.150" last_run_state="pass" last_run_tool="efx_pgm" last_run_flow="bitstream" config_result_in_sync="true" design_ood="sync" place_ood="sync" route_ood="sync" xmlns:efx="http://www.efinixinc.com/enf_proj" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.efinixinc.com/enf_proj enf_proj.xsd">
<efx:device_info>
<efx:family name="Trion"/>
<efx:device name="T20F256"/>
@@ -100,7 +100,7 @@
</efx:bitstream_generation>
<efx:debugger>
<efx:param name="work_dir" value="work_dbg" value_type="e_string"/>
<efx:param name="auto_instantiation" value="on" value_type="e_bool"/>
<efx:param name="auto_instantiation" value="off" value_type="e_bool"/>
<efx:param name="profile" value="debug_profile.wizard.json" value_type="e_string"/>
</efx:debugger>
</efx:project>

View File

@@ -276,56 +276,58 @@ void SD_sendStatus(uint8_t *res)
token = 0x0X - Data error
token = 0xFF - timeout
*******************************************************************************/
uint8_t SD_readSingleBlock(uint32_t addr, uint8_t *buf, uint8_t *token)
{
uint8_t res1, read;
uint16_t readAttempts;
uint16_t i;
// uint8_t SD_readSingleBlock(uint32_t addr, uint8_t *buf, uint8_t *token)
// {
// uint8_t res1, read;
// uint16_t readAttempts;
// uint16_t i;
// set token to none
*token = 0xFF;
// // set token to none
// *token = 0xFF;
// assert chip select
spi_exchange(0xFF);
spi_select(0);
spi_exchange(0xFF);
// // assert chip select
// spi_exchange(0xFF);
// spi_select(0);
// spi_exchange(0xFF);
// send CMD17
SD_command(CMD17, addr, CMD17_CRC);
// // send CMD17
// SD_command(CMD17, addr, CMD17_CRC);
// read R1
res1 = SD_readRes1();
// // read R1
// res1 = SD_readRes1();
// if response received from card
if(res1 != 0xFF)
{
// wait for a response token (timeout = 100ms)
readAttempts = 0;
while(++readAttempts != SD_MAX_READ_ATTEMPTS)
if((read = spi_exchange(0xFF)) != 0xFF) break;
// // if response received from card
// if(res1 != 0xFF)
// {
// // wait for a response token (timeout = 100ms)
// readAttempts = 0;
// while(++readAttempts != SD_MAX_READ_ATTEMPTS)
// if((read = spi_exchange(0xFF)) != 0xFF) break;
// if response token is 0xFE
if(read == SD_START_TOKEN)
{
// read 512 byte block
for(i = 0; i < SD_BLOCK_LEN; i++) *buf++ = spi_exchange(0xFF);
// cprintf("read attempts: %d\r\n", readAttempts);
// read 16-bit CRC
spi_exchange(0xFF);
spi_exchange(0xFF);
}
// // if response token is 0xFE
// if(read == SD_START_TOKEN)
// {
// // read 512 byte block
// for(i = 0; i < SD_BLOCK_LEN; i++) *buf++ = spi_exchange(0xFF);
// set token to card response
*token = read;
}
// // read 16-bit CRC
// spi_exchange(0xFF);
// spi_exchange(0xFF);
// }
// deassert chip select
spi_exchange(0xFF);
spi_deselect(0);
spi_exchange(0xFF);
// // set token to card response
// *token = read;
// }
return res1;
}
// // deassert chip select
// spi_exchange(0xFF);
// spi_deselect(0);
// spi_exchange(0xFF);
// return res1;
// }
#define SD_MAX_WRITE_ATTEMPTS 3907

View File

@@ -6,8 +6,9 @@
.export _SD_readBytes
.export _SD_powerUpSeq
.export _res1_cmd
.export _SD_readSingleBlock
.importzp sp, ptr1
.importzp sp, ptr1, ptr2, ptr3, ptr4, tmp1, tmp2, tmp3
.autoimport on
@@ -27,7 +28,7 @@
dey
arg_loop: ; send ARG
lda (sp),y
lda (sp),y ; is this sending only 3?
jsr _spi_exchange
dey
bpl arg_loop
@@ -187,4 +188,116 @@ read:
dex ; 2
bne @L1 ; 3
rts
.endproc
; ;uint8_t SD_readSingleBlock(uint32_t addr, uint8_t *buf, uint8_t *token)
.proc _SD_readSingleBlock: near
; token address in a/x
; buf address next on stack
; sd address above that
; ptr2 = *token
sta ptr2
stx ptr2 + 1
lda #$ff
sta (ptr2)
; ptr1 = *buf
jsr popptr1
; 4 bytes on stack are addr
; Move addr down on the stack
lda sp
sta ptr3
lda sp + 1
sta ptr3 + 1
; find a way to do this in a loop?
jsr decsp1
ldy #$0
lda (ptr3),y
sta (sp),y
iny
lda (ptr3),y
sta (sp),y
iny
lda (ptr3),y
sta (sp),y
iny
lda (ptr3),y
sta (sp),y
lda #$ff
jsr _spi_exchange
lda #$00 ; this gets ignored anyway
jsr _spi_select
lda #$ff
jsr _spi_exchange
; push cmd17
lda #$11
ldy #$4
sta (sp),y
; crc, 0
lda #$00
jsr _SD_command ; rely on command to teardown stack
jsr _SD_readRes1
cmp #$ff ; if 0xFF then you failed
beq end
sta tmp3 ; tmp3 = read
; y = read_attempts
ldy #$0
resp_loop:
lda #$ff
jsr _spi_exchange
sta tmp2 ; tmp2 = read
lda tmp2
cmp #$ff
bne got_resp
iny
bne resp_loop
bra after_read
got_resp:
ldx #$2
ldy #$00
load_loop:
lda #$ff
jsr _spi_exchange
sta (ptr1)
inc ptr1
bne @2
inc ptr1 + 1
@2: dey
bne load_loop
ldy #$00
dex
bne load_loop
lda #$ff
jsr _spi_exchange
lda #$ff
jsr _spi_exchange
after_read:
lda tmp2
sta (ptr2)
lda tmp3
end:
pha
lda #$ff
jsr _spi_exchange
lda #$00 ; this gets ignored anyway
jsr _spi_deselect
lda #$ff
jsr _spi_exchange
pla
rts
.endproc

View File

@@ -3,152 +3,6 @@
#include "sd_print.h"
#include "sd_card.h"
/*
void SD_printR1(uint8_t res)
{
if(res == 0xFF)
{ cputs("\tNo response\r\n"); return; }
if(res & 0x80)
{ cputs("\tError: MSB = 1\r\n"); return; }
if(res == 0)
{ cputs("\tCard Ready\r\n"); return; }
if(PARAM_ERROR(res))
cputs("\tParameter Error\r\n");
if(ADDR_ERROR(res))
cputs("\tAddress Error\r\n");
if(ERASE_SEQ_ERROR(res))
cputs("\tErase Sequence Error\r\n");
if(CRC_ERROR(res))
cputs("\tCRC Error\r\n");
if(ILLEGAL_CMD(res))
cputs("\tIllegal Command\r\n");
if(ERASE_RESET(res))
cputs("\tErase Reset Error\r\n");
if(IN_IDLE(res))
cputs("\tIn Idle State\r\n");
}
*/
/*
void SD_printR2(uint8_t *res)
{
SD_printR1(res[0]);
if(res[0] == 0xFF) return;
if(res[1] == 0x00)
cputs("\tNo R2 Error\r\n");
if(OUT_OF_RANGE(res[1]))
cputs("\tOut of Range\r\n");
if(ERASE_PARAM(res[1]))
cputs("\tErase Parameter\r\n");
if(WP_VIOLATION(res[1]))
cputs("\tWP Violation\r\n");
if(CARD_ECC_FAILED(res[1]))
cputs("\tECC Failed\r\n");
if(CC_ERROR(res[1]))
cputs("\tCC Error\r\n");
if(ERROR(res[1]))
cputs("\tError\r\n");
if(WP_ERASE_SKIP(res[1]))
cputs("\tWP Erase Skip\r\n");
if(CARD_LOCKED(res[1]))
cputs("\tCard Locked\r\n");
}
*/
/*
void SD_printR3(uint8_t *res)
{
SD_printR1(res[0]);
if(res[0] > 1) return;
cputs("\tCard Power Up Status: ");
if(POWER_UP_STATUS(res[1]))
{
cputs("READY\r\n");
cputs("\tCCS Status: ");
if(CCS_VAL(res[1])){ cputs("1\r\n"); }
else cputs("0\r\n");
}
else
{
cputs("BUSY\r\n");
}
cputs("\tVDD Window: ");
if(VDD_2728(res[3])) cputs("2.7-2.8, ");
if(VDD_2829(res[2])) cputs("2.8-2.9, ");
if(VDD_2930(res[2])) cputs("2.9-3.0, ");
if(VDD_3031(res[2])) cputs("3.0-3.1, ");
if(VDD_3132(res[2])) cputs("3.1-3.2, ");
if(VDD_3233(res[2])) cputs("3.2-3.3, ");
if(VDD_3334(res[2])) cputs("3.3-3.4, ");
if(VDD_3435(res[2])) cputs("3.4-3.5, ");
if(VDD_3536(res[2])) cputs("3.5-3.6");
cputs("\r\n");
}
*/
/*
void SD_printR7(uint8_t *res)
{
SD_printR1(res[0]);
if(res[0] > 1) return;
cputs("\tCommand Version: ");
cprintf("%x", CMD_VER(res[1]));
cputs("\r\n");
cputs("\tVoltage Accepted: ");
if(VOL_ACC(res[3]) == VOLTAGE_ACC_27_33) {
cputs("2.7-3.6V\r\n");
} else if(VOL_ACC(res[3]) == VOLTAGE_ACC_LOW) {
cputs("LOW VOLTAGE\r\n");
} else if(VOL_ACC(res[3]) == VOLTAGE_ACC_RES1) {
cputs("RESERVED\r\n");
} else if(VOL_ACC(res[3]) == VOLTAGE_ACC_RES2) {
cputs("RESERVED\r\n");
} else {
cputs("NOT DEFINED\r\n");
}
cputs("\tEcho: ");
cprintf("%x", res[4]);
cputs("\r\n");
}
*/
/*
void SD_printCSD(uint8_t *buf)
{
cputs("CSD:\r\n");
cputs("\tCSD Structure: ");
cprintf("%x", (buf[0] & 0b11000000) >> 6);
cputs("\r\n");
cputs("\tTAAC: ");
cprintf("%x", buf[1]);
cputs("\r\n");
cputs("\tNSAC: ");
cprintf("%x", buf[2]);
cputs("\r\n");
cputs("\tTRAN_SPEED: ");
cprintf("%x", buf[3]);
cputs("\r\n");
cputs("\tDevice Size: ");
cprintf("%x", buf[7] & 0b00111111);
cprintf("%x", buf[8]);
cprintf("%x", buf[9]);
cputs("\r\n");
}
*/
void SD_printBuf(uint8_t *buf)
{
@@ -170,19 +24,3 @@ void SD_printBuf(uint8_t *buf)
}
cputs("\r\n");
}
/*
void SD_printDataErrToken(uint8_t token)
{
if(token & 0xF0)
cputs("\tNot Error token\r\n");
if(SD_TOKEN_OOR(token))
cputs("\tData out of range\r\n");
if(SD_TOKEN_CECC(token))
cputs("\tCard ECC failed\r\n");
if(SD_TOKEN_CC(token))
cputs("\tCC Error\r\n");
if(SD_TOKEN_ERROR(token))
cputs("\tError\r\n");
}
*/

View File

@@ -31,24 +31,17 @@ int main() {
{
cputs("Success\r\n");
// read sector 0
cputs("\r\nReading sector: 0x");
// ((uint8_t)(addr >> 24));
// cprintf("%x", (uint8_t)(addr >> 16));
// cprintf("%x", (uint8_t)(addr >> 8));
// cprintf("%x", (uint8_t)addr);
res[0] = SD_readSingleBlock(addr, buf, &token);
cputs("\r\nResponse:\r\n");
//SD_printR1(res[0]);
res[0] = SD_readSingleBlock(addr, buf, &token);
// if no error, print buffer
if((res[0] == 0x00) && (token == SD_START_TOKEN))
SD_printBuf(buf);
//else if error token received, print
else if(!(token & 0xF0))
{
cputs("Error token:\r\n");
//SD_printDataErrToken(token);
cputs("Error\r\n");
} else {
cprintf("bad token: %x\r\n", token);
}
__asm__ ("jmp (%v)", buf);