From cc51f206de71b5e0200e1d5f7cfd4b92825dc49c Mon Sep 17 00:00:00 2001 From: bacon Date: Mon, 8 Sep 2025 23:16:59 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=AD=A3clk=E4=BB=BF=E7=9C=9F?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=8F=AF=E4=BB=A5=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/ShinTopSpiTb_clk.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tb/shinTest/ShinTopSpiTb_clk.v b/tb/shinTest/ShinTopSpiTb_clk.v index 0f86e4c..d789922 100644 --- a/tb/shinTest/ShinTopSpiTb_clk.v +++ b/tb/shinTest/ShinTopSpiTb_clk.v @@ -607,7 +607,7 @@ always @(posedge sck) begin rxBuf[byteCnt] <= exChangeRegi; //$display("spi read out %x", exChangeRegi); end - if( txBuf[2] === 8'h80 & nextByteCnt >= 4) begin + if( txBuf[2] === 8'h80 & nextByteCnt >= 3) begin exChangeRegi <= isQspi ? {exChangeRegi[3:0], qspi_mux_miso} : {exChangeRegi[6:0], spi_mux_miso}; end else begin exChangeRegi <= 0; @@ -627,7 +627,7 @@ end //mst slv0~slv3的 内部qspi调用即设置 //sidx为0~4;外部spi为5~9,外部qspi为10~15 -task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength,input [16:0] sidx ); +task spi_trans( input [15:0] saddress, input [7:0] scmd, input [12:0] slength, input [16:0] sidx ); begin txBuf[0] <= saddress[15:8]; txBuf[1] <= saddress[7:0]; From b51b56688a7145e504b80854babde90000b1f42c Mon Sep 17 00:00:00 2001 From: bacon Date: Mon, 8 Sep 2025 23:41:59 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=BC=82=E9=A2=91?= =?UTF-8?q?=E5=BC=82=E7=9B=B8=E6=97=B6=E9=92=9F=E7=9A=84=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/shinTest/Makefile_vcs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tb/shinTest/Makefile_vcs b/tb/shinTest/Makefile_vcs index 080ef36..099e6fb 100644 --- a/tb/shinTest/Makefile_vcs +++ b/tb/shinTest/Makefile_vcs @@ -33,7 +33,7 @@ testShinClk_vcs: mv spi_trans_data.txt generated/spi_trans_data1.txt mv generated/wave.vcd generated/wave1.vcd \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 180 --dev3 25 -180 -8b10b + python3 ./shinTest/gen_pkt_clk.py --dev1 45 180 --dev3 70 -180 -8b10b mkdir -p generated/log rm -rf generated/log/* ${VCS} -f ./shinTestClk_vcs.f @@ -51,7 +51,7 @@ testShinClk_vcs: mv spi_trans_data.txt generated/spi_trans_data3.txt mv generated/wave.vcd generated/wave3.vcd \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 186 --dev3 25 -186 + python3 ./shinTest/gen_pkt_clk.py --dev1 60 186 --dev3 15 -186 mkdir -p generated/log rm -rf generated/log/* ${VCS} -f ./shinTestClk_vcs.f @@ -60,7 +60,7 @@ testShinClk_vcs: mv spi_trans_data.txt generated/spi_trans_data4.txt mv generated/wave.vcd generated/wave4.vcd \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 187 --dev3 25 -187 + python3 ./shinTest/gen_pkt_clk.py --dev1 80 187 --dev2 30 -187 mkdir -p generated/log rm -rf generated/log/* ${VCS} -f ./shinTestClk_vcs.f @@ -69,7 +69,7 @@ testShinClk_vcs: mv spi_trans_data.txt generated/spi_trans_data5.txt mv generated/wave.vcd generated/wave5.vcd \ - python3 ./shinTest/gen_pkt_clk.py --dev1 45 188 --dev3 25 -188 -8b10b + python3 ./shinTest/gen_pkt_clk.py --dev1 70 188 --dev3 223 -188 -8b10b mkdir -p generated/log rm -rf generated/log/* ${VCS} -f ./shinTestClk_vcs.f From 58b65da1299c3aab634e502f0e5243f7ac53384d Mon Sep 17 00:00:00 2001 From: bacon Date: Tue, 9 Sep 2025 01:21:02 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A08b10b=E7=9A=84=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B=EF=BC=8C=E5=B9=B6=E4=B8=8E4b5b?= =?UTF-8?q?=E5=85=B1=E4=BA=AB=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 14 ++++++++++ tb/shinTest/Makefile_vcs | 10 +++++++ tb/shinTest/gen_pkt.py | 18 +++++++++++- tb/shinTest/testcase/base.py | 8 +++++- tb/shinTest/testcase/environment.py | 25 +++++++++++++++-- tb/shinTest/testcase/rwregs.py | 28 +++++++++++++++++++ tb/shinTest/testcase/sync.py | 6 ++-- .../testcase_result/base_tc02_result.log | 2 +- .../testcase_result/base_tc08_result.log | 2 +- 9 files changed, 104 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 9800a10..65abac1 100644 --- a/Makefile +++ b/Makefile @@ -54,6 +54,20 @@ testShin: vvp -N ./tb/build/shinTest.iverilog -lxt2 -fst || true python3 ./tb/shinTest/check_testcase.py +testShin8b10b: + python3 ./tb/shinTest/gen_pkt.py -8b10b + mkdir -p generated/log + rm -rf generated/log/* + iverilog -Wall \ + -o ./tb/build/shinTest.iverilog \ + -y ./generated/shin \ + -I ./generated/shin \ + -D RANDOMIZE_REG_INIT \ + -D IVERILOG_COMPILE \ + ./tb/shinTest/ShinTopSpiTb.v + vvp -N ./tb/build/shinTest.iverilog -lxt2 -fst || true + python3 ./tb/shinTest/check_testcase.py + testShinClk: python3 ./tb/shinTest/gen_pkt_clk.py --dev1 0 92 --dev2 0 -92 -8b10b mkdir -p generated/log diff --git a/tb/shinTest/Makefile_vcs b/tb/shinTest/Makefile_vcs index 099e6fb..df609fe 100644 --- a/tb/shinTest/Makefile_vcs +++ b/tb/shinTest/Makefile_vcs @@ -23,6 +23,16 @@ testShin_vcs: python3 ./shinTest/check_testcase.py +testShin8b10b_vcs: + python3 ./shinTest/gen_pkt.py -8b10b + mkdir -p generated/log + rm -rf generated/log/* + @echo "Available CPUs: ${CPU_COUNT}" + ${VCS} -f ./shinTest_vcs.f + ${SIM} + python3 ./shinTest/check_testcase.py + + testShinClk_vcs: python3 ./shinTest/gen_pkt_clk.py --dev1 0 90 --dev2 0 -90 mkdir -p generated/log diff --git a/tb/shinTest/gen_pkt.py b/tb/shinTest/gen_pkt.py index 7742156..9a607ef 100755 --- a/tb/shinTest/gen_pkt.py +++ b/tb/shinTest/gen_pkt.py @@ -2,14 +2,28 @@ #encoding=utf-8 from pyutils import * from testcase import environment, rwregs, ebmmu, errorPkt, watchdog, broadcast, sync, base, mac +import argparse + if __name__ == '__main__': + parser = argparse.ArgumentParser() + + # 可选参数 + parser.add_argument("-8b10b", action="store_true", dest="use_8b10b", default=False, help="使用8b10b编码") + + # 解析参数 + args = parser.parse_args() + + #if args.use_8b10b: + # add_tc_2_runlist(rwregs.tc1()) + environment.gen_slv_dev_num(4) + environment.set_using_8b10b(args.use_8b10b) environment.bringup() #add_tc_2_runlist(rwregs.tc1()) - ''' + #''' add_tc_2_runlist(errorPkt.tc1()) add_tc_2_runlist(errorPkt.tc2()) add_tc_2_runlist(errorPkt.tc3()) @@ -50,6 +64,8 @@ if __name__ == '__main__': add_tc_2_runlist(errorPkt.tc38()) #''' + #add_tc_2_runlist(rwregs.tc2()) + #''' add_tc_2_runlist(base.tc1()) add_tc_2_runlist(base.tc2()) diff --git a/tb/shinTest/testcase/base.py b/tb/shinTest/testcase/base.py index 5d5b73a..c55e0d9 100644 --- a/tb/shinTest/testcase/base.py +++ b/tb/shinTest/testcase/base.py @@ -1,5 +1,5 @@ from pyutils import * - +from .environment import * def tc1(): genPkt = GenPkt() @@ -510,6 +510,8 @@ def tc8(): +"\n#5000\n" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) +genIFRwDataCode(2, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) + +using_proper_code(2) +genMessageCode("--读取中断") +genIFRwDataCode(0, 0x74, False, 4) @@ -2118,6 +2120,8 @@ def tc28(): +"#5000" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) +genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) + +using_proper_code(4) +genMessageCode("--读取中断") +genIFRwDataCode(0, 0x74, False, 4) @@ -2332,6 +2336,8 @@ def tc28(): +"#5000" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) +genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) + +using_proper_code(4) +genMessageCode("--读取中断") +genIFRwDataCode(0, 0x74, False, 4) diff --git a/tb/shinTest/testcase/environment.py b/tb/shinTest/testcase/environment.py index 67a1e08..81f9863 100644 --- a/tb/shinTest/testcase/environment.py +++ b/tb/shinTest/testcase/environment.py @@ -3,8 +3,7 @@ from pyutils import * global_dev_num = 4 global_setting_dev_clk = dict() - - +global_using_8b10b = False def bringup(): gen_file_def = "sys_bringup" @@ -30,6 +29,12 @@ def bringup(): +genIFRwDataCode(2, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(3, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) + +genMessageCode("--设置合适的底层编码4b5b or 8b10b") + +using_proper_code(0) + +using_proper_code(1) + +using_proper_code(2) + +using_proper_code(3) + +using_proper_code(4) ) main_dev = [0x01, ] @@ -404,4 +409,18 @@ def __gen_slv_clk(clk, ph, period): def teardown(): #add_tc_2_runlist("") - pass \ No newline at end of file + pass + + +def set_using_8b10b(isUsing8b10b): + global global_using_8b10b + global_using_8b10b = isUsing8b10b + +def using_proper_code(dev): + global global_using_8b10b + if global_using_8b10b: + return genIFRwDataCode(dev, 0x004c, True, 2, [0x1, 0x59], wlog = False) + else: + return genIFRwDataCode(dev, 0x004c, True, 2, [0x0, 0x59], wlog = False) + + \ No newline at end of file diff --git a/tb/shinTest/testcase/rwregs.py b/tb/shinTest/testcase/rwregs.py index 036f988..7ac5b0d 100644 --- a/tb/shinTest/testcase/rwregs.py +++ b/tb/shinTest/testcase/rwregs.py @@ -30,3 +30,31 @@ def tc1(): +genTcEndFrameCode(gen_file_def)) genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) return gen_file_def + + +def tc2(): + gen_file_def = "regtest_tc02" + sm_idx = 0 + tc_des = "测试寄存器的读写状态,将系统改为4B5B进行通信\\n" + + genPkt = GenPkt() + genPkt.clean() + + dev_num = get_slv_dev_num() + + genPkt.addBeforeExc(genTcStartFrameCode(gen_file_def, tc_des)) + + change_4b5b_code = "" + for i in range(dev_num + 1): + change_4b5b_code = change_4b5b_code + genIFRwDataCode(i, 0x004c, True, 2, [0x0, 0x59])\ + +genIFRwDataCode(i, 0x004c, False, 2) + + + genPkt.addAfterExc(#genWriteTransLenCode(gen_file_def, sm_idx) + #+genWriteTransPktCode(gen_file_def, sm_idx) + #+genTrgTransPktCode(gen_file_def, sm_idx) + #+genReadAckPktCode(gen_file_def, sm_idx) + change_4b5b_code + +genTcEndFrameCode(gen_file_def)) + genPkt.gen("./generated/shin/%s.vh"%(gen_file_def, ), 1) + return gen_file_def \ No newline at end of file diff --git a/tb/shinTest/testcase/sync.py b/tb/shinTest/testcase/sync.py index 0d5ac25..edd7b43 100644 --- a/tb/shinTest/testcase/sync.py +++ b/tb/shinTest/testcase/sync.py @@ -1,5 +1,5 @@ from pyutils import * - +from .environment import * def tc1(): genPkt = GenPkt() @@ -822,6 +822,7 @@ def tc5(): +genIFRwDataCode(3, 0xc0, False, 4) +genIFRwDataCode(4, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(4) +genIFRwDataCode(4, 0x00, True, 1, [0x2, ]) +genIFRwDataCode(4, 0x78, True, 4, [0xff, 0xff, 0xff, 0xff]) @@ -1319,9 +1320,10 @@ def tc7(): genPkt.addBeforeExc("\n#5000\n" +genIFRwDataCode(0, 0x09, True, 1, [0, ], False, iface=1) + +using_proper_code(0) +genIFRwDataCode(0, 0x74, False, 4) - +genIFRwDataCode(0, 0x40, False, 4) + #+genIFRwDataCode(0, 0x40, False, 4) +genIFRwDataCode(0, 0x00, True, 1, [0x1, ]) ) diff --git a/tb/shinTest/testcase_result/base_tc02_result.log b/tb/shinTest/testcase_result/base_tc02_result.log index 1330c11..914cb8f 100644 --- a/tb/shinTest/testcase_result/base_tc02_result.log +++ b/tb/shinTest/testcase_result/base_tc02_result.log @@ -3,7 +3,7 @@ 16'h0316 8'h00 16'h0002 8'h8c 8'h00 16'h3000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h00 8'h01 8'h02 8'h03 8'h04 8'h05 8'h06 8'h07 8'h08 8'h09 8'h0a 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h44 8'h45 8'h46 8'h47 8'h48 8'h49 8'h4a 8'h4b 8'h4c 8'h4d 8'h4e 8'h4f 8'h50 8'h51 8'h52 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'h73 8'h74 8'h75 8'h76 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'h7d 8'h7e 8'h7f 8'h00 8'h00 16'h0020 8'h00 16'h0001 8'h15 -16'h2800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4e 8'h5b 8'h54 8'h35 8'h36 8'h37 8'h5d 8'h09 8'h0f 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h7c 8'h75 8'h46 8'hc7 8'h5d 8'h4d 8'h4a 8'h4b 8'h4c 8'h4d 8'h4e 8'h4f 8'h50 8'hd7 8'hd7 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'hf3 8'h74 8'h75 8'h77 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'hfd 8'h7e 8'h7f 8'h00 8'h04 +16'h2800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h04 8'h00 8'h04 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4e 8'h5b 8'h54 8'h35 8'h36 8'h37 8'h5d 8'h09 8'h0f 8'h0b 8'h0c 8'h0d 8'h0e 8'h0f 8'h10 8'h11 8'h12 8'h13 8'h14 8'h15 8'h16 8'h17 8'h18 8'h19 8'h1a 8'h1b 8'h1c 8'h1d 8'h1e 8'h1f 8'h20 8'h21 8'h22 8'h23 8'h24 8'h25 8'h26 8'h27 8'h28 8'h29 8'h2a 8'h2b 8'h2c 8'h2d 8'h2e 8'h2f 8'h30 8'h31 8'h32 8'h33 8'h34 8'h35 8'h36 8'h37 8'h38 8'h39 8'h3a 8'h3b 8'h3c 8'h3d 8'h3e 8'h3f 8'h40 8'h41 8'h42 8'h43 8'h7c 8'h75 8'h46 8'hc7 8'h5d 8'h4d 8'h4a 8'h4b 8'hxx 8'h4d 8'h4e 8'h4f 8'h50 8'hd7 8'hd7 8'h53 8'h54 8'h55 8'h56 8'h57 8'h58 8'h59 8'h5a 8'h5b 8'h5c 8'h5d 8'h5e 8'h5f 8'h60 8'h61 8'h62 8'h63 8'h64 8'h65 8'h66 8'h67 8'h68 8'h69 8'h6a 8'h6b 8'h6c 8'h6d 8'h6e 8'h6f 8'h70 8'h71 8'h72 8'hf3 8'h74 8'h75 8'h77 8'h77 8'h78 8'h79 8'h7a 8'h7b 8'h7c 8'hfd 8'h7e 8'h7f 8'h00 8'h04 16'h0074 8'h80 16'h0004 8'h03 8'h00 8'h06 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 16'h0074 8'h80 16'h0004 8'h00 8'h00 8'h0f 8'h00 diff --git a/tb/shinTest/testcase_result/base_tc08_result.log b/tb/shinTest/testcase_result/base_tc08_result.log index 6d6f3ff..f6578cd 100644 --- a/tb/shinTest/testcase_result/base_tc08_result.log +++ b/tb/shinTest/testcase_result/base_tc08_result.log @@ -16,7 +16,7 @@ 16'h0306 8'h00 16'h0002 8'h8c 8'h00 16'h1000 8'h00 16'h008c 8'h08 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 16'h0020 8'h00 16'h0001 8'h01 -16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01 +16'h0800 8'h80 16'h008c 8'h08 8'h80 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'hd0 8'h80 8'h02 8'h01 8'h4c 8'h58 8'h50 8'h30 8'h30 8'h31 8'h55 8'h00 8'h01 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h3c 8'h31 8'h00 8'h80 8'h15 8'h05 8'h00 8'h00 8'hxx 8'h00 8'h00 8'h00 8'h00 8'h87 8'h87 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'hf0 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h00 8'h10 8'h80 8'h00 8'h00 8'h00 8'h01 16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff 16'h0078 8'h00 16'h0004 8'hff 8'hff 8'hff 8'hff 16'h007c 8'h00 16'h0002 8'h00 8'h81