From d22edb5e3462cf8a774b1c8a0d4537d8084771c6 Mon Sep 17 00:00:00 2001 From: MicroCoreLabs <54004369+MicroCoreLabs@users.noreply.github.com> Date: Mon, 17 Feb 2020 20:31:28 -0800 Subject: [PATCH] Uploaded_2_17_2020 --- MCL86/Core/Lattice_XO2_Small_Example/TEST.ASM | 92 + MCL86/Core/Lattice_XO2_Small_Example/biu.v | 463 ++ .../Core/Lattice_XO2_Small_Example/biu_ram.v | 171 + .../Lattice_XO2_Small_Example/microcode.mem | 3969 +++++++++++++++++ MCL86/Core/Lattice_XO2_Small_Example/test.hex | 41 + MCL86/Core/Lattice_XO2_Small_Example/uart.v | 277 ++ .../Lattice_XO2_Small_Example/user_code.mem | 2044 +++++++++ MCL86/Core/Lattice_XO2_Small_Example/xo2x86.v | 175 + 8 files changed, 7232 insertions(+) create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/TEST.ASM create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/biu.v create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/biu_ram.v create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/microcode.mem create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/test.hex create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/uart.v create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/user_code.mem create mode 100644 MCL86/Core/Lattice_XO2_Small_Example/xo2x86.v diff --git a/MCL86/Core/Lattice_XO2_Small_Example/TEST.ASM b/MCL86/Core/Lattice_XO2_Small_Example/TEST.ASM new file mode 100644 index 0000000..8ac37fc --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/TEST.ASM @@ -0,0 +1,92 @@ + + org 0000 ; Force A86 to locate code at address 0x0000 + +SETUP: mov si, HELLO_MSG ; Load pointer to the Hello Message + mov SP,00600 ; Locate the stack pointer + mov ax,cs ; Locate the Data Segment to CS + mov ds,ax + + +; Print the Hello Message +PRINT_MSG: lodsb ; Load a character into AL + cmp al,024 ; Look for the $ which ends the string + je MENU_POLL + mov bl,al + call PRINT_CHAR + jmp PRINT_MSG + + +MENU_POLL: in al,001 ; Load the UART Status register + and al,001 ; Isolate the RX_BYTE_AVAILABLE bit + jz MENU_POLL + in al,000 ; Retrieve the byte from the UART_RX Buffer + mov bl,al + call PRINT_CHAR ; echo the keypress back to the host + + cmp bl,031 ; Check for an ASCII 1 + je LEDS_ON + cmp bl,032 ; Check for an ASCII 2 + je LEDS_OFF + cmp bl,033 ; Check for an ASCII 3 + je PRT_ASCII + cmp bl,034 ; Check for an ASCII 4 + je SETUP + + jmp MENU_POLL ; Otherwise loop back to beginning + + +LEDS_ON: mov al,000 + out 003, al ; LEDS are located at UART register 0x3 + jmp MENU_POLL + +LEDS_OFF: mov al,0FF + out 003, al ; LEDS are located at UART register 0x3 + jmp MENU_POLL + + + +; Print the ASCII Table +PRT_ASCII: mov bl,021 + mov cx,05C +L1: call PRINT_CHAR + inc bl + loop L1 + mov bl,13 + call PRINT_CHAR + mov bl,10 + call PRINT_CHAR + jmp MENU_POLL + +; Print Character +PRINT_CHAR: in al,001 ; Load the UART Status register + and al,002 ; Isolate the TX_BUSY bit + jnz PRINT_CHAR + mov al,bl + out 002,al + ret + + + +HELLO_MSG: db 27, "[2J", 27, "[H", 13, 10 + db " __ __ _____ _ ___ __ " , 13, 10 + db "| \/ |/ ____| | / _ \ / / " , 13, 10 + db "| \ / | | | | | (_) |/ /_ " , 13, 10 + db "| |\/| | | | | > _ <| '_ \ " , 13, 10 + db "| | | | |____| |___| (_) | (_) |" , 13, 10 + db "|_| |_|\_____|______\___/ \___/ " , 13, 10, 13, 10,13,10 + db "Hello from MicroCore Labs !!!" , 13, 10 + db "-----------------------------" , 13, 10, " ", 13, 10 + db "This is the MCL86 core running on the Lattice XO2 Breakout Board.", 13, 10 + db " ", 13, 10 + db " ", 13, 10 + db " Press:", 13, 10 + db " 1) Turn on LEDs", 13, 10 + db " 2) Turn off LEDs", 13, 10 + db " 3) Print ASCII characters", 13, 10 + db " 4) Refresh screen", 13, 10 + db " All other keys will be echoed back", 13, 10 + db " ", 13, 10 + db "$" + + + \ No newline at end of file diff --git a/MCL86/Core/Lattice_XO2_Small_Example/biu.v b/MCL86/Core/Lattice_XO2_Small_Example/biu.v new file mode 100644 index 0000000..e1e4aee --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/biu.v @@ -0,0 +1,463 @@ +// +// +// File Name : biu.v +// Used on : +// Author : Ted Fried, MicroCore Labs +// Creation : 3/2/16 +// Code Type : Synthesizable +// +// Description: +// ============ +// +// Bus Interface Unit of the MCL86 processor +// ported to the Lattice XO2 Breakout Board. +// +// - All segments fixed to CS to save space. +// - UART fixed to 9600 baud +// - UART jumpers must me installed on the XO2 Breakout Board! +// +//------------------------------------------------------------------------ +// +// Modification History: +// ===================== +// +// Revision 1.0 3/2/16 +// Initial revision +// +// +//------------------------------------------------------------------------ +// +// Copyright (c) 2020 Ted Fried +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +//------------------------------------------------------------------------ + + +module biu + ( + input CORE_CLK_INT, // Core Signals + input RESET_n, + + + input UART_RX, // UART + output UART_TX, + output [7:0] LEDS, + + + input [15:0] EU_BIU_COMMAND, // EU to BIU Signals + input [15:0] EU_BIU_DATAOUT, + input [15:0] EU_REGISTER_R3, + + + output BIU_DONE, // BIU to EU Signals + output [1:0] BIU_SEGMENT, + + output [7:0] PFQ_TOP_BYTE, + output PFQ_EMPTY, + output[15:0] PFQ_ADDR_OUT, + + output [15:0] BIU_REGISTER_ES, + output [15:0] BIU_REGISTER_SS, + output [15:0] BIU_REGISTER_CS, + output [15:0] BIU_REGISTER_DS, + output [15:0] BIU_REGISTER_RM, + output [15:0] BIU_REGISTER_REG, + output [15:0] BIU_RETURN_DATA + + + ); + +//------------------------------------------------------------------------ + + +// Internal Signals + +reg biu_done_int; +reg eu_biu_req_caught; +reg eu_biu_req_d1; +reg uart_cs_n; +reg uart_wr_n; +reg word_cycle; +reg biu_ram_wr; +wire eu_biu_req; +wire eu_prefix_seg; +reg pfq_empty; +reg [15:0] biu_register_cs; +reg [15:0] biu_register_rm; +reg [15:0] biu_register_reg; +reg [15:0] biu_return_data_int; +reg [15:0] eu_register_r3_d; +reg [1:0] io_address; +reg [15:0] pfq_addr_out; +reg [3:0] biu_state; +reg [15:0] pfq_addr_out_d1; +wire [1:0] eu_biu_strobe; +wire [1:0] eu_biu_segment; +wire [4:0] eu_biu_req_code; +wire [1:0] eu_qs_out; +wire [1:0] eu_segment_override_value; +wire [19:0] code_rom_addr; +reg [19:0] memory_address; +wire [7:0] biu_ram_data; +wire [7:0] uart_dataout; +reg [7:0] memory_data; + + +//------------------------------------------------------------------------ +// +// BIU Code/Data RAM. Lattice XO2 2Kx8 DPRAM +// +// Port-A is for EU x86 user code fetching +// Port-B is for BIU data accesses +// +//------------------------------------------------------------------------ + +assign code_rom_addr = { biu_register_cs[15:0] , 4'h0 } + pfq_addr_out[15:0] ; + +biu_ram BIU_2Kx8 + ( + .ResetA (1'b0), + .ClockEnA (1'b1), + .ClockA (CORE_CLK_INT), + .AddressA (code_rom_addr[10:0]), + .DataInA (8'h0), + .QA (PFQ_TOP_BYTE), + .WrA (1'b0), + + .ResetB (1'b0), + .ClockEnB (1'b1), + .ClockB (CORE_CLK_INT), + .AddressB (memory_address[10:0]), + .DataInB (memory_data[7:0]), + .QB (biu_ram_data[7:0]), + .WrB (biu_ram_wr) + ); + + + +//------------------------------------------------------------------------ +// +// UART - Fixed 9600 baud at 26.6Mhz +// +//------------------------------------------------------------------------ + +uart BIU_UART ( + + .CLK (CORE_CLK_INT), + .RESET_n (RESET_n), + .UART_RX (UART_RX), + .UART_TX (UART_TX), + .LEDS (LEDS), + .ADDRESS (io_address[1:0]), + .DATA_IN (EU_BIU_DATAOUT[7:0]), + .DATA_OUT (uart_dataout[7:0]), + .CS_n (uart_cs_n), + .WR_n (uart_wr_n) + + ); + + + + +//------------------------------------------------------------------------ +// +// BIU Combinationals +// +//------------------------------------------------------------------------ + + + +// Outputs to the EU +// +assign BIU_DONE = biu_done_int; +assign PFQ_EMPTY = pfq_empty; +assign PFQ_ADDR_OUT = pfq_addr_out_d1; +assign BIU_SEGMENT = 'h0; +assign BIU_REGISTER_ES = biu_register_cs; +assign BIU_REGISTER_SS = biu_register_cs; +assign BIU_REGISTER_CS = biu_register_cs; +assign BIU_REGISTER_DS = biu_register_cs; +assign BIU_REGISTER_RM = biu_register_rm; +assign BIU_REGISTER_REG = biu_register_reg; +assign BIU_RETURN_DATA = biu_return_data_int; + + + +// Input signals from the EU requesting BIU processing. +// eu_biu_strobe[1:0] are available for only one clock cycle and cause BIU to take immediate action. +// eu_biu_req stays asserted until the BIU is available to service the request. +// +assign eu_prefix_seg = EU_BIU_COMMAND[14]; +assign eu_biu_strobe[1:0] = EU_BIU_COMMAND[13:12]; // 01=opcode fetch 10=clock load 11=load segment register(eu_biu_req_code has the regiter#) +assign eu_biu_segment[1:0] = EU_BIU_COMMAND[11:10]; +assign eu_biu_req = EU_BIU_COMMAND[9]; +assign eu_biu_req_code = EU_BIU_COMMAND[8:4]; +assign eu_qs_out[1:0] = EU_BIU_COMMAND[3:2]; // Updated for every opcode fetch using biu_strobe and Jump request using eu_biu_rq +assign eu_segment_override_value[1:0] = EU_BIU_COMMAND[1:0]; + + + + +//------------------------------------------------------------------------ +// +// BIU Controller +// +//------------------------------------------------------------------------ +// + +always @(posedge CORE_CLK_INT) +begin : BIU_CONTROLLER + + if (RESET_n==1'b0) + begin + eu_register_r3_d <= 'h0; + eu_biu_req_caught <= 'h0; + biu_register_cs <= 16'hFFFF; + biu_register_rm <= 'h0; + biu_register_reg <= 'h0; + pfq_addr_out <= 'h0; + biu_done_int <= 'h0; + eu_biu_req_d1 <= 'h0; + uart_cs_n <= 1'b1; + uart_wr_n <= 1'b1; + biu_return_data_int <= 'h0; + pfq_empty <= 1'b1; + memory_address <= 'h0; + word_cycle <= 'b0; + io_address <= 'h0; + biu_state <= 'h0; + biu_ram_wr <= 1'b0; + end + +else + begin + + + // These signals may be pipelined from zero to one clock. + // They are currently pipelined by one clock. + pfq_addr_out_d1 <= pfq_addr_out; + + + // Register pipelining in and out of the BIU. + eu_register_r3_d <= EU_REGISTER_R3; + + + // Capture a bus request from the EU + eu_biu_req_d1 <= eu_biu_req; + if (eu_biu_req_d1==1'b0 && eu_biu_req==1'b1) + begin + eu_biu_req_caught <= 1'b1; + end + else if (biu_done_int==1'b1) + begin + eu_biu_req_caught <= 1'b0; + end + + + // Strobe from EU to update the segment and addressing registers + // To save logic, all segments will echo the CS. + if (eu_biu_strobe==2'b11) + begin + case (eu_biu_req_code[2:0]) // synthesis parallel_case + 3'h2 : biu_register_cs <= EU_BIU_DATAOUT[15:0]; + 3'h4 : biu_register_rm <= EU_BIU_DATAOUT[15:0]; + 3'h5 : biu_register_reg <= EU_BIU_DATAOUT[15:0]; + default : ; + endcase + end + + + // Prefetch Queue + // -------------- + // Not actually a queue for this implementation. + // Increment the output address of the queue upon EU fetch request strobe. + // Reset the address when the EU asserts the Jump request. + // Data is ready when pfq_empty is a zero to adjust for RAM pipelining. + //--------------------------------------------------------------------------------- + if (eu_biu_req_caught==1'b1 && eu_biu_req_code==5'h19) + begin + pfq_addr_out <= eu_register_r3_d; // Update the prefetch queue to the new address. + pfq_empty <= 1'b1; + end + else if (eu_biu_strobe==2'b01) + begin + pfq_addr_out <= pfq_addr_out + 1; // Increment the current IP - Instruction Pointer. + pfq_empty <= 1'b1; + end + else + begin + pfq_empty <= 1'b0; // Give ROM time to respond. + end + + + // BIU State Machine + biu_state <= biu_state + 1'b1; + case (biu_state) // synthesis parallel_case + + 8'h00 : begin + + io_address[1:0] <= eu_register_r3_d[1:0]; + memory_address <= { biu_register_cs[15:0] , 4'h0 } + eu_register_r3_d[15:0]; + memory_data <= EU_BIU_DATAOUT[7:0]; + + + if (eu_biu_req_caught==1'b1) + begin + + case (eu_biu_req_code) // synthesis parallel_case + + + // IO Byte Read + 8'h08 : begin + uart_cs_n <= 1'b0; + biu_state <= 4'h1; + end + + // IO Byte Write + 8'h0A : begin + uart_cs_n <= 1'b0; + uart_wr_n <= 1'b0; + biu_state <= 4'h4; + end + + + // Memory Byte Read + 8'h0C : begin + biu_state <= 4'h1; + end + + // Memory Word Read + 8'h10 : begin + word_cycle <= 1'b1; + biu_state <= 4'h1; + end + + + // Memory Word Read from Stack Segment + 8'h11 : begin + word_cycle <= 1'b1; + biu_state <= 4'h1; + end + + // Memory Word Write to Stack Segment + 8'h14 : begin + biu_ram_wr <= 1'b1; + word_cycle <= 1'b1; + biu_state <= 4'h4; + end + + + // Memory Byte Write + 8'h0E : begin + biu_ram_wr <= 1'b1; + biu_state <= 4'h4; + end + + // Memory Word Write + 8'h13 : begin + biu_ram_wr <= 1'b1; + word_cycle <= 1'b1; + biu_state <= 4'h4; + end + + + // Jump Request + 8'h19 : begin + biu_done_int <= 1'b1; + biu_state <= 4'h5; + end + + default : ; + endcase + end + + else + begin + biu_state <= 4'h0; + end + + end + + + + // 8-bit processing + 8'h04 : + begin + uart_cs_n <= 1'b1; + uart_wr_n <= 1'b1; + + if (uart_cs_n==1'b0) + begin + biu_return_data_int <= { 8'h00 , uart_dataout[7:0] }; + end + else + begin + biu_return_data_int <= { 8'h00 , biu_ram_data[7:0] }; + end + + if (word_cycle==1'b1) + begin + memory_address <= memory_address + 1; + memory_data <= EU_BIU_DATAOUT[15:8]; + biu_state <= 4'h7; + end + else + begin + biu_ram_wr <= 1'b0; + biu_done_int <= 1'b1; + end + end + + + // Complete the cycle + 8'h05 : + begin + biu_done_int <= 1'b0; + biu_state <= 4'h0; + end + + + // 16-bit processing + 8'h08 : + begin + biu_return_data_int[15:8] <= biu_ram_data[7:0]; + biu_ram_wr <= 1'b0; + biu_done_int <= 1'b1; + word_cycle <= 1'b0; + biu_state <= 4'h5; + end + + default : ; + endcase + + + + +end + +end + + +endmodule // biu.v + + + + + \ No newline at end of file diff --git a/MCL86/Core/Lattice_XO2_Small_Example/biu_ram.v b/MCL86/Core/Lattice_XO2_Small_Example/biu_ram.v new file mode 100644 index 0000000..1c43825 --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/biu_ram.v @@ -0,0 +1,171 @@ +/* Verilog netlist generated by SCUBA Diamond (64-bit) 3.6.0.83.4 */ +/* Module Version: 7.5 */ +/* C:\lscc\diamond\3.6_x64\ispfpga\bin\nt64\scuba.exe -w -n biu_ram -lang verilog -synth synplify -bus_exp 7 -bb -arch xo2c00 -type bram -wp 11 -rp 1010 -data_width 8 -rdata_width 8 -num_rows 2048 -cascade -1 -memfile c:/mcl/mcl86/lattice_test_board/user_code.mem -memformat hex -writemodeA NORMAL -writemodeB NORMAL */ +/* Fri Mar 04 15:22:02 2016 */ + + +`timescale 1 ns / 1 ps +module biu_ram (DataInA, DataInB, AddressA, AddressB, ClockA, ClockB, + ClockEnA, ClockEnB, WrA, WrB, ResetA, ResetB, QA, QB)/* synthesis NGD_DRC_MASK=1 */; + input wire [7:0] DataInA; + input wire [7:0] DataInB; + input wire [10:0] AddressA; + input wire [10:0] AddressB; + input wire ClockA; + input wire ClockB; + input wire ClockEnA; + input wire ClockEnB; + input wire WrA; + input wire WrB; + input wire ResetA; + input wire ResetB; + output wire [7:0] QA; + output wire [7:0] QB; + + wire scuba_vhi; + wire scuba_vlo; + + VHI scuba_vhi_inst (.Z(scuba_vhi)); + + defparam biu_ram_0_0_1.INIT_DATA = "STATIC" ; + defparam biu_ram_0_0_1.ASYNC_RESET_RELEASE = "SYNC" ; + defparam biu_ram_0_0_1.INITVAL_1F = "0x0000000000000000000A000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_0_1.INITVAL_0A = "0x000000000000000000000000000000000000000000000000000000000000000000000415A000000A" ; + defparam biu_ram_0_0_1.INITVAL_09 = "0x1B631040451F03500A20198970069516025108F019810000000000A1BC5504630106520CA2012800" ; + defparam biu_ram_0_0_1.INITVAL_08 = "0x00000000AD06454062211060912631008E9040090600000000014D308AC00CCF01C4540122000000" ; + defparam biu_ram_0_0_1.INITVAL_07 = "0x0000A1A645180EF01C2508091000000000015AA306A20014D00000015A000000A1BC4203E2008AFB" ; + defparam biu_ram_0_0_1.INITVAL_06 = "0x02A22004F800A390881C00A8401CF00FC9E1CA200A4F300C8C07A051080312039108AD0000A1BADD" ; + defparam biu_ram_0_0_1.INITVAL_05 = "0x1BADD1BADD1BADD1BADD1BADD1BADD1BAAD022100641C00A2F07E2313A0D1E4601F8C5114DA1B4D0" ; + defparam biu_ram_0_0_1.INITVAL_04 = "0x1FEFF180FF1FECF1FEFF1F8FF1FEFC19EC0018FC15AC013E801809F100CF1FEC019EFF1F80C01800" ; + defparam biu_ram_0_0_1.INITVAL_03 = "0x180CA1A0C01EE0C180F01C0000180C00000180C019ECC018AD000FF01EC013E8018000180C00000C" ; + defparam biu_ram_0_0_1.INITVAL_02 = "0x0180F000C0194D001E0F000C01E0F00000C018FF1FE0F1800F1800C15A001FE00000FF1E0000000F" ; + defparam biu_ram_0_0_1.INITVAL_01 = "0x01EFF1FE001FE001FE0A1B0BB144BB064631545208249160281460711A39046E00100C122311666F" ; + defparam biu_ram_0_0_1.INITVAL_00 = "0x00EB30C00D172441603407602084B00281B000A811404148140284B0128814E441988E118601808E" ; + defparam biu_ram_0_0_1.CSDECODE_B = "0b000" ; + defparam biu_ram_0_0_1.CSDECODE_A = "0b000" ; + defparam biu_ram_0_0_1.WRITEMODE_B = "NORMAL" ; + defparam biu_ram_0_0_1.WRITEMODE_A = "NORMAL" ; + defparam biu_ram_0_0_1.GSR = "ENABLED" ; + defparam biu_ram_0_0_1.RESETMODE = "ASYNC" ; + defparam biu_ram_0_0_1.REGMODE_B = "NOREG" ; + defparam biu_ram_0_0_1.REGMODE_A = "NOREG" ; + defparam biu_ram_0_0_1.DATA_WIDTH_B = 4 ; + defparam biu_ram_0_0_1.DATA_WIDTH_A = 4 ; + DP8KC biu_ram_0_0_1 (.DIA8(scuba_vlo), .DIA7(scuba_vlo), .DIA6(scuba_vlo), + .DIA5(scuba_vlo), .DIA4(scuba_vlo), .DIA3(DataInA[3]), .DIA2(DataInA[2]), + .DIA1(DataInA[1]), .DIA0(DataInA[0]), .ADA12(AddressA[10]), .ADA11(AddressA[9]), + .ADA10(AddressA[8]), .ADA9(AddressA[7]), .ADA8(AddressA[6]), .ADA7(AddressA[5]), + .ADA6(AddressA[4]), .ADA5(AddressA[3]), .ADA4(AddressA[2]), .ADA3(AddressA[1]), + .ADA2(AddressA[0]), .ADA1(scuba_vlo), .ADA0(scuba_vlo), .CEA(ClockEnA), + .OCEA(ClockEnA), .CLKA(ClockA), .WEA(WrA), .CSA2(scuba_vlo), .CSA1(scuba_vlo), + .CSA0(scuba_vlo), .RSTA(ResetA), .DIB8(scuba_vlo), .DIB7(scuba_vlo), + .DIB6(scuba_vlo), .DIB5(scuba_vlo), .DIB4(scuba_vlo), .DIB3(DataInB[3]), + .DIB2(DataInB[2]), .DIB1(DataInB[1]), .DIB0(DataInB[0]), .ADB12(AddressB[10]), + .ADB11(AddressB[9]), .ADB10(AddressB[8]), .ADB9(AddressB[7]), .ADB8(AddressB[6]), + .ADB7(AddressB[5]), .ADB6(AddressB[4]), .ADB5(AddressB[3]), .ADB4(AddressB[2]), + .ADB3(AddressB[1]), .ADB2(AddressB[0]), .ADB1(scuba_vlo), .ADB0(scuba_vlo), + .CEB(ClockEnB), .OCEB(ClockEnB), .CLKB(ClockB), .WEB(WrB), .CSB2(scuba_vlo), + .CSB1(scuba_vlo), .CSB0(scuba_vlo), .RSTB(ResetB), .DOA8(), .DOA7(), + .DOA6(), .DOA5(), .DOA4(), .DOA3(QA[3]), .DOA2(QA[2]), .DOA1(QA[1]), + .DOA0(QA[0]), .DOB8(), .DOB7(), .DOB6(), .DOB5(), .DOB4(), .DOB3(QB[3]), + .DOB2(QB[2]), .DOB1(QB[1]), .DOB0(QB[0])) + /* synthesis MEM_LPC_FILE="biu_ram.lpc" */ + /* synthesis MEM_INIT_FILE="user_code.mem" */; + + VLO scuba_vlo_inst (.Z(scuba_vlo)); + + defparam biu_ram_0_1_0.INIT_DATA = "STATIC" ; + defparam biu_ram_0_1_0.ASYNC_RESET_RELEASE = "SYNC" ; + defparam biu_ram_0_1_0.INITVAL_1F = "0x00000000000000F0000E000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_1E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_1D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_1C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_1B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_1A = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_19 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_18 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_17 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_16 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_15 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_14 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_13 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_12 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_11 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_10 = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_0F = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_0E = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_0D = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_0C = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_0B = "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000" ; + defparam biu_ram_0_1_0.INITVAL_0A = "0x00000000000000000000000000000000000000000000000000000000000000000000020002204420" ; + defparam biu_ram_0_1_0.INITVAL_09 = "0x00C660C4660CC6604C620CC6704E760C4760CE620CC42044220442000C660EC720CE670CC5204622" ; + defparam biu_ram_0_1_0.INITVAL_08 = "0x04422044000EE670CC760CC240885404E660EA22064220442204007088420CC620CE750443204422" ; + defparam biu_ram_0_1_0.INITVAL_07 = "0x0442000E440846604C770A4230442204422000370EC7504002044220002204420004670CC420EE66" ; + defparam biu_ram_0_1_0.INITVAL_06 = "0x0CC740464504C660EE6404C6704C620CC660CE720CE6604634088260CE270C4760CA000442000422" ; + defparam biu_ram_0_1_0.INITVAL_05 = "0x04422044220442204422044220442204400044220EC6404C7608C760C8260CE620CC660800000002" ; + defparam biu_ram_0_1_0.INITVAL_04 = "0x04A550A4250AA550AA550AE550AA550EA7204E570007204A220E425044750AA720EA550AE2704E22" ; + defparam biu_ram_0_1_0.INITVAL_03 = "0x0E470004520A427064520642204E27044220E4720E45704E00044520447204A220E4220E47204427" ; + defparam biu_ram_0_1_0.INITVAL_02 = "0x04E22044520E00204422044520A4220442704E550AA220E4220A427000220AA22044550A42204425" ; + defparam biu_ram_0_1_0.INITVAL_01 = "0x04A550AA220AA220AA200085108651180EC11E70040EB1C00E016001C0BF1D8F003C05164BD1C0EF" ; + defparam biu_ram_0_1_0.INITVAL_00 = "0x17AE01C0BD1D8731F01707E810E6F802E3F1003E1B00E1EE0201CFE008ED10072074D8190001606B" ; + defparam biu_ram_0_1_0.CSDECODE_B = "0b000" ; + defparam biu_ram_0_1_0.CSDECODE_A = "0b000" ; + defparam biu_ram_0_1_0.WRITEMODE_B = "NORMAL" ; + defparam biu_ram_0_1_0.WRITEMODE_A = "NORMAL" ; + defparam biu_ram_0_1_0.GSR = "ENABLED" ; + defparam biu_ram_0_1_0.RESETMODE = "ASYNC" ; + defparam biu_ram_0_1_0.REGMODE_B = "NOREG" ; + defparam biu_ram_0_1_0.REGMODE_A = "NOREG" ; + defparam biu_ram_0_1_0.DATA_WIDTH_B = 4 ; + defparam biu_ram_0_1_0.DATA_WIDTH_A = 4 ; + DP8KC biu_ram_0_1_0 (.DIA8(scuba_vlo), .DIA7(scuba_vlo), .DIA6(scuba_vlo), + .DIA5(scuba_vlo), .DIA4(scuba_vlo), .DIA3(DataInA[7]), .DIA2(DataInA[6]), + .DIA1(DataInA[5]), .DIA0(DataInA[4]), .ADA12(AddressA[10]), .ADA11(AddressA[9]), + .ADA10(AddressA[8]), .ADA9(AddressA[7]), .ADA8(AddressA[6]), .ADA7(AddressA[5]), + .ADA6(AddressA[4]), .ADA5(AddressA[3]), .ADA4(AddressA[2]), .ADA3(AddressA[1]), + .ADA2(AddressA[0]), .ADA1(scuba_vlo), .ADA0(scuba_vlo), .CEA(ClockEnA), + .OCEA(ClockEnA), .CLKA(ClockA), .WEA(WrA), .CSA2(scuba_vlo), .CSA1(scuba_vlo), + .CSA0(scuba_vlo), .RSTA(ResetA), .DIB8(scuba_vlo), .DIB7(scuba_vlo), + .DIB6(scuba_vlo), .DIB5(scuba_vlo), .DIB4(scuba_vlo), .DIB3(DataInB[7]), + .DIB2(DataInB[6]), .DIB1(DataInB[5]), .DIB0(DataInB[4]), .ADB12(AddressB[10]), + .ADB11(AddressB[9]), .ADB10(AddressB[8]), .ADB9(AddressB[7]), .ADB8(AddressB[6]), + .ADB7(AddressB[5]), .ADB6(AddressB[4]), .ADB5(AddressB[3]), .ADB4(AddressB[2]), + .ADB3(AddressB[1]), .ADB2(AddressB[0]), .ADB1(scuba_vlo), .ADB0(scuba_vlo), + .CEB(ClockEnB), .OCEB(ClockEnB), .CLKB(ClockB), .WEB(WrB), .CSB2(scuba_vlo), + .CSB1(scuba_vlo), .CSB0(scuba_vlo), .RSTB(ResetB), .DOA8(), .DOA7(), + .DOA6(), .DOA5(), .DOA4(), .DOA3(QA[7]), .DOA2(QA[6]), .DOA1(QA[5]), + .DOA0(QA[4]), .DOB8(), .DOB7(), .DOB6(), .DOB5(), .DOB4(), .DOB3(QB[7]), + .DOB2(QB[6]), .DOB1(QB[5]), .DOB0(QB[4])) + /* synthesis MEM_LPC_FILE="biu_ram.lpc" */ + /* synthesis MEM_INIT_FILE="user_code.mem" */; + + + + // exemplar begin + // exemplar attribute biu_ram_0_0_1 MEM_LPC_FILE biu_ram.lpc + // exemplar attribute biu_ram_0_0_1 MEM_INIT_FILE user_code.mem + // exemplar attribute biu_ram_0_1_0 MEM_LPC_FILE biu_ram.lpc + // exemplar attribute biu_ram_0_1_0 MEM_INIT_FILE user_code.mem + // exemplar end + +endmodule diff --git a/MCL86/Core/Lattice_XO2_Small_Example/microcode.mem b/MCL86/Core/Lattice_XO2_Small_Example/microcode.mem new file mode 100644 index 0000000..f14b4cd --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/microcode.mem @@ -0,0 +1,3969 @@ +// Auto-generated by memint 02/29/2016 17:21:53 +#Format=Bin +#Depth=4096 +#Width=32 +#AddrRadix=2 +#DataRadix=3 +#Data +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011110000111111011111 +01001101110111110000000000000000 +01001100111011110000000000001000 +00010000000000010000010100111010 +01001100111011110000000000000010 +00010000000000010000010101100010 +01001100111011110000000100000000 +00010000000000010000010101000101 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110111011110000000010000000 +00010000000100010000000000000001 +00010000000000000000000000000110 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001101110111110000000000000000 +01001000111111110000000000000000 +01001111111111110000000000000000 +01011101111111110011000000000000 +01011101111111110011000000010000 +01011101111111110011000000110000 +01011101111111110011000000100000 +01011111111111111111111111111111 +01001101111111110000000000000000 +01001100111111110000000000000000 +01011101111111110000101110011000 +01001110111011110000000001000000 +00010000000000010000000000101110 +00010000000000000000000000101011 +01001101111111110000000000000000 +00010000000000000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000100101 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001100111011110001000000000000 +00010000000000100000000001000011 +01011101110111110001000000000100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111111111110 +00010000000000000000000001011100 +01101000100011110000000000000001 +00010000000000000000000001011100 +01011000100011110000000000000001 +00010000000000000000000001011100 +01001000100011111111101111111111 +00010000000000000000000001011100 +01011000100011110000010000000000 +00010000000000000000000001011100 +01001000100011111111110111111111 +00010000000000000000000001011100 +01011111111111111100000000001100 +00010000000000000000000001000001 +01011001000011110000000000000000 +01011010001011110000000000000000 +01010000111110100000000000000000 +01010010111110010000000000000000 +01011111111111111100000000011110 +00010000000000000000000001000001 +01011001000011110000000000000000 +01011010001111110000000000000000 +01010000111110100000000000000000 +01010011111110010000000000000000 +01011111111111111100000000011101 +00010000000000000000000001000001 +01011001000011110000000000000000 +01011010000111110000000000000000 +01010000111110100000000000000000 +01010001111110010000000000000000 +01011111111111111100000000011101 +00010000000000000000000001000001 +01011001000011110000000000000000 +01011010010011110000000000000000 +01010000111110100000000000000000 +01010100111110010000000000000000 +01011111111111111100000000011101 +00010000000000000000000001000001 +01011001000011110000000000000000 +01011010010111110000000000000000 +01010000111110100000000000000000 +01010101111110010000000000000000 +01011111111111111100000000011101 +00010000000000000000000001000001 +01011001000011110000000000000000 +01011010011011110000000000000000 +01010000111110100000000000000000 +01010110111110010000000000000000 +01011111111111111100000000011101 +00010000000000000000000001000001 +01011001000011110000000000000000 +01011010011111110000000000000000 +01010000111110100000000000000000 +01010111111110010000000000000000 +01011111111111111100000000011101 +00010000000000000000000001000001 +00100000000011110000000000000001 +00010000000000000000000010101000 +00100010001011110000000000000001 +00010000000000000000000010101000 +00100011001111110000000000000001 +00010000000000000000000010101000 +00100001000111110000000000000001 +00010000000000000000000010101000 +00100100010011110000000000000001 +00010000000000000000000010101000 +00100101010111110000000000000001 +00010000000000000000000010101000 +00100110011011110000000000000001 +00010000000000000000000010101000 +00100111011111110000000000000001 +00010000000000000000000010101000 +00100000000011111111111111111111 +00010000000000000000110110110000 +00100010001011111111111111111111 +00010000000000000000110110110000 +00100011001111111111111111111111 +00010000000000000000110110110000 +00100001000111111111111111111111 +00010000000000000000110110110000 +00100100010011111111111111111111 +00010000000000000000110110110000 +00100101010111111111111111111111 +00010000000000000000110110110000 +00100110011011111111111111111111 +00010000000000000000110110110000 +00100111011111111111111111111111 +00010000000000000000110110110000 +01011001111111010000000000000000 +01001000100011111111011100101011 +01011001111110010000000000000000 +01001010111011110000100000010100 +01011000100010100000000000000000 +01011001111110010000000000000000 +00010000000000010000000010110000 +01011000100011110000000001000000 +01001001100111111000000000000000 +00010000000000010000000010110100 +01011111111111111100000000000010 +00010000000000000000000001000001 +01011000100011110000000010000000 +01011111111111111100000000000010 +00010000000000000000000001000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011000100011110000001000000000 +00010000000000000000000001011100 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110111011110001000000000000 +00010000000000100000000010111110 +01011101110111110001000000001100 +01001101110111111100111111110011 +01001000100011111111111110111111 +01011110001111110000000000000000 +00010000000000010000000000000100 +00010000000000000000000011001000 +01011101110111110001000000001100 +01001101110111111100111111110011 +01001000100011111111111110111111 +01011110000011110000000000000000 +00010000000000010000000000000100 +01011000100011110000000001000000 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011000100011110010000000000000 +00010000000000000000000011011110 +01011000100011111000000000000000 +00010000000000000000000011011110 +01011000100011110100000000000000 +00010000000000000000000011011110 +01011101110111110100000000000000 +00010000000000000000000011011110 +01011101110111110100000000000010 +00010000000000000000000011011110 +01011101110111110100000000000001 +00010000000000000000000011011110 +01011101110111110100000000000011 +00010000000000000000000011011110 +01011111111111111100000000011100 +01011101110111110010000000000000 +01001101110111111100111111111111 +01011101110111110001000000000100 +01001101110111111100111111110011 +01001100111011110001000000000000 +00010000000000010000011101001000 +00010000000000000000000011100011 +00000000000000000000000000000001 +00000000000000000000000000000001 +01101010100111111101111010101101 +00010000000000100000000011101101 +01011111111111111100000001001111 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001001111111110000000000000000 +01011001111111111101111010101101 +01011111111111111100000001000000 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001010111011110001000000000000 +00010000000000010000000011110101 +00010000000000000000000011110010 +01001010111011110000000000100000 +00010000000000010000000000000100 +01011101110111110001000000000100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010000000000000000100110100110 +00010000000000000000100110101100 +00010000000000000000100110110010 +00010000000000000000100110111000 +00010000000000000000100110111110 +00010000000000000000100111000010 +00010000000000000000010000001010 +00010000000000000000010001010111 +00010000000000000000100100000110 +00010000000000000000100100010101 +00010000000000000000100100100100 +00010000000000000000100100110011 +00010000000000000000100101000000 +00010000000000000000100101000111 +00010000000000000000010000001111 +00010000000000000000010001011100 +00010000000000000000100111010010 +00010000000000000000100111011000 +00010000000000000000100111011110 +00010000000000000000100111100100 +00010000000000000000100111101010 +00010000000000000000100111110100 +00010000000000000000010000010100 +00010000000000000000010001100001 +00010000000000000000101010001000 +00010000000000000000101010001110 +00010000000000000000101010010100 +00010000000000000000101010011010 +00010000000000000000101010100000 +00010000000000000000101010101000 +00010000000000000000010000011001 +00010000000000000000010001100110 +00010000000000000000100101110000 +00010000000000000000100101110110 +00010000000000000000100101111100 +00010000000000000000100110000010 +00010000000000000000100111111101 +00010000000000000000100110001011 +00010000000000000000000011010110 +00010000000000000000001001110000 +00010000000000000000101000100000 +00010000000000000000101000100110 +00010000000000000000101000101100 +00010000000000000000101000110010 +00010000000000000000101000111000 +00010000000000000000101001000000 +00010000000000000000000011011000 +00010000000000000000001001110010 +00010000000000000000100101010000 +00010000000000000000100101010110 +00010000000000000000100101011100 +00010000000000000000100101100010 +00010000000000000000100101101000 +00010000000000000000100101101011 +00010000000000000000000011011010 +00010000000000000000001001000000 +00010000000000000000101001100000 +00010000000000000000101001100110 +00010000000000000000101001101100 +00010000000000000000101001110010 +00010000000000000000101001111000 +00010000000000000000101001111101 +00010000000000000000000011011100 +00010000000000000000001001010110 +00010000000000000000000010001000 +00010000000000000000000010001010 +00010000000000000000000010001100 +00010000000000000000000010001110 +00010000000000000000000010010000 +00010000000000000000000010010010 +00010000000000000000000010010100 +00010000000000000000000010010110 +00010000000000000000000010011000 +00010000000000000000000010011010 +00010000000000000000000010011100 +00010000000000000000000010011110 +00010000000000000000000010100000 +00010000000000000000000010100010 +00010000000000000000000010100100 +00010000000000000000000010100110 +00010000000000000000010000100011 +00010000000000000000010000101000 +00010000000000000000010000101101 +00010000000000000000010000110010 +00010000000000000000010001000110 +00010000000000000000010000111100 +00010000000000000000010001000001 +00010000000000000000010000110111 +00010000000000000000010010000000 +00010000000000000000010010000011 +00010000000000000000010010000110 +00010000000000000000010010001001 +00010000000000000000010010001100 +00010000000000000000010010001111 +00010000000000000000010010010010 +00010000000000000000010010010101 +00010000000000000000001101100000 +00010000000000000000001101100011 +00010000000000000000001101100110 +00010000000000000000001101101001 +00010000000000000000001101101100 +00010000000000000000001101101111 +00010000000000000000001101110010 +00010000000000000000001101110101 +00010000000000000000001101111000 +00010000000000000000001101111011 +00010000000000000000001101111110 +00010000000000000000001110000001 +00010000000000000000001110000100 +00010000000000000000001110001101 +00010000000000000000001110010110 +00010000000000000000001110011001 +00010000000000000000001101100000 +00010000000000000000001101100011 +00010000000000000000001101100110 +00010000000000000000001101101001 +00010000000000000000001101101100 +00010000000000000000001101101111 +00010000000000000000001101110010 +00010000000000000000001101110101 +00010000000000000000001101111000 +00010000000000000000001101111011 +00010000000000000000001101111110 +00010000000000000000001110000001 +00010000000000000000001110000100 +00010000000000000000001110001101 +00010000000000000000001110010110 +00010000000000000000001110011001 +00010000000000000000101011010000 +00010000000000000000101011100000 +00010000000000000000101011010000 +00010000000000000000101011110000 +00010000000000000000110100001010 +00010000000000000000110100010000 +00010000000000000000110100011000 +00010000000000000000110100011111 +00010000000000000000110011110000 +00010000000000000000110011110011 +00010000000000000000110011110110 +00010000000000000000110011111001 +00010000000000000000110101110000 +00010000000000000000110011111101 +00010000000000000000110101010000 +00010000000000000000110101000100 +00010000000000000000000001000000 +00010000000000000000000001011110 +00010000000000000000000001100100 +00010000000000000000000001101010 +00010000000000000000000001110000 +00010000000000000000000001110110 +00010000000000000000000001111100 +00010000000000000000000010000010 +00010000000000000000001000110000 +00010000000000000000001000110111 +00010000000000000000010010100110 +00010000000000000000000011101000 +00010000000000000000010000011110 +00010000000000000000010010011000 +00010000000000000000001000100000 +00010000000000000000001000010000 +00010000000000000000110100101000 +00010000000000000000110100110010 +00010000000000000000110100111000 +00010000000000000000110100111101 +00010000000000000000010111110000 +00010000000000000000011000010100 +00010000000000000000011000110111 +00010000000000000000011001100000 +00010000000000000000110100000010 +00010000000000000000110100000110 +00010000000000000000011100000000 +00010000000000000000011100100000 +00010000000000000000011011000110 +00010000000000000000011011100100 +00010000000000000000011010000110 +00010000000000000000011010101000 +00010000000000000000001011111000 +00010000000000000000001011111100 +00010000000000000000001100000000 +00010000000000000000001100000100 +00010000000000000000001100001000 +00010000000000000000001100001101 +00010000000000000000001100010010 +00010000000000000000001100010111 +00010000000000000000001100011110 +00010000000000000000001100100001 +00010000000000000000001100100100 +00010000000000000000001100100111 +00010000000000000000001100101010 +00010000000000000000001100101101 +00010000000000000000001100110000 +00010000000000000000001100110011 +00010000000000000000010011010101 +00010000000000000000010010111100 +00010000000000000000010011010101 +00010000000000000000010010111100 +00010000000000000000110011000110 +00010000000000000000110011010110 +00010000000000000000110011100111 +00010000000000000000110011101011 +00010000000000000000010011100110 +00010000000000000000010011000111 +00010000000000000000010011100110 +00010000000000000000010011000111 +00010000000000000000010100011011 +00010000000000000000010101011010 +00010000000000000000010101001100 +00010000000000000000010100100101 +00010000000000000000101011110111 +00010000000000000000101111100110 +00010000000000000000101011111100 +00010000000000000000101111101010 +00010000000000000000001011000111 +00010000000000000000001010101111 +00010000000000000000110010111110 +00010000000000000000010101110000 +00010000000000000000110010111001 +00010000000000000000110010111001 +00010000000000000000110010111001 +00010000000000000000110010111001 +00010000000000000000110010111001 +00010000000000000000110010111001 +00010000000000000000110010111001 +00010000000000000000110010111001 +00010000000000000000001111100101 +00010000000000000000001110101000 +00010000000000000000001110100010 +00010000000000000000001110011101 +00010000000000000000010110101100 +00010000000000000000010110111011 +00010000000000000000010111011101 +00010000000000000000010111101001 +00010000000000000000010010100000 +00010000000000000000001110110110 +00010000000000000000001111000001 +00010000000000000000001110110011 +00010000000000000000010110010000 +00010000000000000000010110100000 +00010000000000000000010111000111 +00010000000000000000010111010100 +00010000000000000000000011010000 +00010000000000000000000011010000 +00010000000000000000000011010010 +00010000000000000000000011010100 +00010000000000000000001000000000 +00010000000000000000000001010010 +00010000000000000000111000010010 +00010000000000000000111010000011 +00010000000000000000000001010000 +00010000000000000000000001010100 +00010000000000000000000001011010 +00010000000000000000000010111010 +00010000000000000000000001010110 +00010000000000000000000001011000 +00010000000000000000110111110000 +00010000000000000000110110001011 +01011101110111110001000000000100 +01001101110111111100111111110011 +01011111111111111100000000011010 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001100111011110001000000000000 +00010000000000100000001000000101 +01001100111011110000000000000010 +00010000000000010000010101100010 +01001100111011110000000000001000 +00010000000000010000010100111010 +01011101110111110000001110000000 +01001110111011110000000001000000 +00010000000000100000001000001100 +01001101110111110000000000000000 +00010000000000000000001000000010 +00111001100011110000000000000000 +01001001100111111101010100000000 +01001010000011110000000011111111 +01010000100110100000000000000000 +01011111111111111100000000101110 +00010000000000000000000001000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011001000011110000000000000000 +01111001100111110000000000000000 +01111001100111110000000000000000 +01111001100111110000000000000000 +01111001100111110000000000000000 +01111001100111110000000000000000 +01111001100111110000000000000000 +01111001100111110000000000000000 +01111001100111110000000000000000 +01001000100011111111111100000000 +01001001100111110000000011010101 +01011000100010010000000000000000 +01011111111111111100000000101100 +00010000000000000000000001000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000001000 +01001001000011110000000010000000 +00010000000000010000001000110101 +01000000000011110000000011111111 +00010000000000000000000001000001 +01010000000011111111111100000000 +00010000000000000000000001000001 +01011111111111111100000000001010 +01001001000011111000000000000000 +00010000000000010000001000111100 +01000011111111110000000000000000 +00010000000000000000000001000001 +01010011111111111111111111111111 +00010000000000000000000001000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000101100 +01001001100011110000000000010000 +00010000000000010000001001000111 +01001001000011110000000000001111 +00101010100111110000000000000110 +01001010101011110000000000010000 +00010000000000100000001001001110 +01001001000011110000000011111111 +00101001100111110000000000000110 +01001001100111110000000011111111 +01000000000011111111111100000000 +01010000000010010000000000000000 +00100000000011110000000100000000 +01011000100011110000000000010000 +01000000000011111111111100001111 +01011000100011110000000000000001 +01001001100011110000000000010000 +00010000000000010000000001000001 +01001000100011111111111111111110 +00010000000000000000000001000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000101100 +01001001100011110000000000010000 +00010000000000010000001001011101 +01001001000011110000000000001111 +00101010100111110000000000000110 +01001010101011110000000000010000 +00010000000000100000001001100100 +01001001000011110000000011111111 +00101001100111111111111111111010 +01000000000011111111111100000000 +01001001100111110000000011111111 +01010000000010010000000000000000 +00100000000011111111111100000000 +01011000100011110000000000010000 +01000000000011111111111100001111 +01011000100011110000000000000001 +01001001100011110000000000010000 +00010000000000010000000001000001 +01001000100011111111111111111110 +00010000000000000000000001000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011100111111110000000000000000 +00010000000000000000001001110011 +01011100111111110000000000000001 +01001011100011110000000000010001 +01001000100011111111111111101110 +01001010000011110000000011111111 +01001001000011110000000000001111 +01001110101111110000000000010000 +00010000000000010000001001111100 +00101001100111110000000000000110 +01001110100111110000000000010000 +00010000000000100000001010000101 +01011000100011110000000000010000 +01011110110011000000000000000000 +00010000000000010000001010000001 +00101001101011110000000000000110 +00010000000000000000001010000010 +00101001101011111111111111111010 +01000000000011111111111100000000 +01001001100111110000000011111111 +01010000000010010000000000000000 +01101110101111110000000000010000 +00010000000000010000001010001110 +01001001101011110000000011110000 +00101001100111111111111101110000 +00010000000000010000001010001110 +01001001101011110000000000001111 +00101001100111110000000000000110 +01001110100111110000000000010000 +00010000000000010000001010011101 +01001110101111110000000000000001 +00010000000000010000001010010011 +00101001101011110000000001100110 +01001110100111110000000100000000 +00010000000000100000001010011101 +01011000100011110000000000000001 +01011110110011000000000000000000 +00010000000000010000001010011000 +00101001000011110000000001100000 +00010000000000000000001010011010 +01001010000011110000000011111111 +00101001101011111111111110100000 +01000000000011111111111100000000 +01001001100111110000000011111111 +01010000000010010000000000000000 +01011111111111111100000000101100 +00010000000000000000111100100000 +00000000000000000000000000000001 +01011101110111110001000000000100 +01001101110111111100111111110011 +01001100111011110000000010000000 +00010000000000100000001010100010 +00010000000000000000001010101001 +01011101110111110001000000001100 +01001101110111111100111111110011 +01001100111011110000000010000000 +00010000000000100000001010100111 +01001100110011110000000000000000 +01011100111101000000000000000000 +01001100110011110000000011111111 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001011101111110000000000000000 +00010001000000000000001010100000 +00010000000000010000001010110100 +01000000000011110000000011111111 +00010000000000000000001011000000 +00111001000011110000000000000000 +01001001100111110000000011111111 +01011010111101000000000000000000 +00000000000000000000001010111001 +00101011101110010000000000000000 +00101010101011111111111111111111 +00010000000000010000001010111000 +01000000000011110000000011111111 +00100000000010110000000000000000 +01000000000011110000000011111111 +01011111111111111100010010010010 +01011110000011110000000000000000 +00010001000000000000001111010011 +00010000000000000000001101010000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001010100000 +01011001111101000000000000000000 +01001010000011110000000011111111 +01001011101111110000000000000000 +01101001100111111111111111111111 +00101001100111110000000000000001 +00101010101010010000000000000000 +01001100101011111000000000000000 +00010000000000010000001011010010 +00101011101111110000000000000001 +00010000000000010000001011001101 +00101010101001000000000000000000 +00111011101111110000000000000000 +01001011101111111111111100000000 +01010000101110100000000000000000 +01011111111111111100011001110101 +01011110000011110000000000000000 +00010001000000000000001111010011 +00010000000000000000001101010000 +00010000000000000000001101010000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011101110111110001000000000100 +01001101110111111100111111110011 +01001110111011110000000010000000 +00010000000000100000001011100010 +00010000000000000000001011101001 +01011101110111110001000000001100 +01001101110111111100111111110011 +01001110111011110000000010000000 +00010000000000100000001011100111 +00101100111101000000000000000000 +00111100110011110000000000000000 +01011101110111110001000000001100 +01001101110111111100111111110011 +01001110111011110000000010000000 +00010000000000100000001011101101 +00101100110001000000000000000000 +00111100110011110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001010100000 +01000000000011111111111100000000 +00100000000011000000000000000000 +00010000000000000000001100011100 +00010001000000000000001010100000 +01000010001011111111111100000000 +00100010001011000000000000000000 +00010000000000000000001100011100 +00010001000000000000001010100000 +01000011001111111111111100000000 +00100011001111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001010100000 +01000001000111111111111100000000 +00100001000111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001010100000 +00111100110011110000000000000000 +01000000000011110000000011111111 +00100000000011000000000000000000 +00010000000000000000001100011100 +00010001000000000000001010100000 +00111100110011110000000000000000 +01000010001011110000000011111111 +00100010001011000000000000000000 +00010000000000000000001100011100 +00010001000000000000001010100000 +00111100110011110000000000000000 +01000011001111110000000011111111 +00100011001111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001010100000 +00111100110011110000000000000000 +01000001000111110000000011111111 +00100001000111000000000000000000 +00000000000000000000000000000001 +01011111111111111100000000100111 +00010000000000000000001101010000 +00010001000000000000001011100000 +01010000111111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001011100000 +01010010111111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001011100000 +01010011111111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001011100000 +01010001111111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001011100000 +01010100111111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001011100000 +01010101111111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001011100000 +01010110111111000000000000000000 +00010000000000000000001100011100 +00010001000000000000001011100000 +01010111111111000000000000000000 +00010000000000000000001100011100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001100110011110000000011111111 +01001110110011110000000010000000 +00010000001100100000000000000000 +01011100110011111111111100000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00010001000000000000001010100000 +01011111111111111100000000101001 +00010000000000000000001101010000 +01011111111111111100000100010100 +00010001000000000000001010100000 +01011101110111110001000000001100 +01001101110111110000000000000000 +00010001000000000000001100111010 +00101100110010000000000000000000 +01001101110111110000000000000000 +01011101110111110000001110011000 +01001110111011110000000001000000 +00010000000000100000001101001011 +01001101110111110000000000000000 +00010000000000000000001101010010 +00000000000000000000000000000001 +01011101110111110001000000001100 +01001101110111111100111111110011 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001100111011110001000000000000 +00010000000000100000001101010100 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011110000100000000000 +00010000000000010000001101000011 +00010000000000000000001101000000 +01001110100011110000100000000000 +00010000000000100000001101000011 +00010000000000000000001101000000 +01001110100011110000000000000001 +00010000000000010000001101000011 +00010000000000000000001101000000 +01001110100011110000000000000001 +00010000000000100000001101000011 +00010000000000000000001101000000 +01001110100011110000000001000000 +00010000000000010000001101000011 +00010000000000000000001101000000 +01001110100011110000000001000000 +00010000000000100000001101000011 +00010000000000000000001101000000 +01001110100011110000000001000001 +00010000000000010000001101000011 +00010000000000000000001101000000 +01001110100011110000000001000001 +00010000000000100000001101000011 +00010000000000000000001101000000 +01001110100011110000000010000000 +00010000000000010000001101000011 +00010000000000000000001101000000 +01001110100011110000000010000000 +00010000000000100000001101000011 +00010000000000000000001101000000 +01001110100011110000000000000100 +00010000000000010000001101000011 +00010000000000000000001101000000 +01001110100011110000000000000100 +00010000000000100000001101000011 +00010000000000000000001101000000 +01001001100011110000000010000000 +01001010100011110000100000000000 +01111010101011110000000000000000 +01111010101011110000000000000000 +01111010101011110000000000000000 +01111010101011110000000000000000 +01101110100110100000000000000000 +00010000000000010000001101000011 +00010000000000000000001101000000 +01001001100011110000000010000000 +01001010100011110000100000000000 +01111010101011110000000000000000 +01111010101011110000000000000000 +01111010101011110000000000000000 +01111010101011110000000000000000 +01101110100110100000000000000000 +00010000000000100000001101000011 +00010000000000000000001101000000 +01001110100011110000000001000000 +00010000000000010000001101000011 +00010000000000000000001110000100 +01001110100011110000000001000000 +00010000000000010000001101000000 +00010000000000000000001110001101 +00000000000000000000000000000001 +01011111111111111100000000011101 +00010001000000000000001111110010 +01011110001011110000000000000000 +00010000000000100000001101000011 +00010000000000000000001101000000 +01011111111111111100000000000111 +00010001000000000000001111110010 +00100010001011111111111111111111 +00010000000000010000001101000011 +00010000000000000000001101000000 +00000000000000000000000000000001 +01011111111111111100000000011101 +00010001000000000000001111110010 +00100010001011111111111111111111 +00010000000000100000001101000000 +01001110100011110000000001000000 +00010000000000010000001101000011 +00010000000000000000001101000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000011111000 +00010000000000000000001101000100 +00000000000000000000000000000001 +00010001000000000000001011100000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00101100110010000000000000000000 +00101100110011110000000000000001 +01011101110111110000001110011000 +01001110111011110000000001000000 +00010000000000100000001110111100 +01001101110111110000000000000000 +01011111111111111100000011111111 +00010000000000000000001101010010 +00010001000000000000001011100000 +01011011111111000000000000000000 +00010001000000000000001011100101 +01011111111111000000000000000000 +01011101110111110011000000100000 +01001101110111110000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011100101111110000000000000000 +01011101111111110000001110011000 +01001110111011110000000001000000 +00010000000000100000001111001100 +01001101110111110000000000000000 +01011111111111111100000011111010 +00010000000000000000001101010010 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111010000000000000000 +01001000100011111111011100101010 +01001110101111111000000000000000 +00010000000000100000001111011000 +01011000100011110000000010000000 +01011011111110110000000000000000 +01001100111011110000100000010101 +01011000100011000000000000000000 +01011011111110110000000000000000 +00010000000000010000001111011110 +01011000100011110000000001000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000001010 +00010001000000000000001111110010 +00100010001011111111111111111111 +00010000000000100000001101000000 +01001110100011110000000001000000 +00010000000000010000001101000000 +01011111111111111100000000011101 +00010001000000000000001111110010 +00010000000000000000001101000011 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001110111011110001000000000000 +00010000000000100000001111110100 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00100100010011111111111111111110 +01011100010011110000000000000000 +01011101110111110000001101000000 +01001110111011110000000001000000 +00010000000000100000010000000011 +01001101110111110100000000000011 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000001010011 +00010001000000000000001111110010 +01011111111100000000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001010011 +00010001000000000000001111110010 +01011111111100100000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001010011 +00010001000000000000001111110010 +01011111111100010000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001010011 +00010001000000000000001111110010 +01011111111100110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001010011 +00010001000000000000001111110010 +01011111100011111111000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +01011111000011110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +01011111001011110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +01011111001111110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +01011111000111110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +01011111011111110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +01011111010111110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +01011111011011110000000000000000 +00010001000000000000010000000000 +00010000000000000000000001000101 +01011111111111111100000001111011 +00010001000000000000001111110010 +00101111010011111111111111111110 +00010001000000000000010000000000 +00010000000000000000000001000101 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011100010011110000000000000000 +01011101110111110000001100010000 +01001110111011110000000001000000 +00010000000000100000010001010010 +01001101110111110100000000000011 +00100100010011110000000000000010 +00010000001100000000000000000000 +00010001000000000000010001010000 +01011111111101110000000000000000 +01011101110111110011000000000000 +01001101110111111100111111110011 +00010000000000000000010001110000 +00010001000000000000010001010000 +01011111111101110000000000000000 +01011101110111110011000000100000 +01001101110111111100111111010011 +00010000000000000000010001110000 +00010001000000000000010001010000 +01011111111101110000000000000000 +01011101110111110011000000010000 +01001101110111111100111111100011 +00010000000000000000010001110000 +00010001000000000000010001010000 +01011111111101110000000000000000 +01011101110111110011000000110000 +01001101110111111100111111000011 +00010000000000000000010001110000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000101011 +00010001000000000000001111110010 +01011101110111110001000000000100 +01001101110111110000000000000000 +01001110111011110000000010000000 +00010000000000100000010001110100 +01001000100011110000111111010101 +01001101110111110000000000000000 +00010000000000000000000000010001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000010001010000 +01010000111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01010010111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01010011111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01010001111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01010100111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01010101111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01010110111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01010111111101110000000000000000 +00010000000000000000000001000000 +00010001000000000000010001010000 +01011000111101110000000000000000 +01001000100011110000111111010101 +00010000000000000000000001000101 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011001111111110000000000000011 +00101111100110000000000000000000 +00010001000000000000010000000000 +00010000000000000000001110110110 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111100100000000000000000 +00010001000000000000010000000000 +01011001111111110000000000000101 +00101111100110000000000000000000 +00010001000000000000010000000000 +00010000000000000000001111000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000001010011 +00010001000000000000001111110010 +00010001000000000000010001010000 +01011100111101110000000000000000 +00000000000000000000000000000001 +01001101110111110000000000000000 +01011101110111110000001110010000 +01001110111011110000000001000000 +00010000000000100000010011000011 +01001101110111110000000000000000 +00010000000000000000000000000100 +01011111111111111100000001100011 +00010001000000000000001111110010 +00010001000000000000010001010000 +01011011111101110000000000000000 +00010001000000000000010001010000 +01011111111101110000000000000000 +01011101110111110011000000100000 +01001101110111111100111111010011 +01001101110111110000000000000000 +01011100111110110000000000000000 +00010000000000000000010011000010 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000111111 +00010001000000000000001111110010 +00010001000000000000010001010000 +01011001111101110000000000000000 +00010001000000000000001011100000 +00100100010011000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011100111110010000000000000000 +01011101110111110000001110011000 +01001110111011110000000001000000 +00010000000000100000010011011111 +01001101110111110000000000000000 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000001100011 +00010001000000000000001111110010 +00010001000000000000010001010000 +01011001111101110000000000000000 +00010001000000000000010001010000 +01011111111101110000000000000000 +00010001000000000000001011100000 +00100100010011000000000000000000 +01011101110111110011000000100000 +01001101110111111100111111010011 +01001101110111110000000000000000 +00010000000000000000010011011101 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000111100010 +00010001000000000000001111110010 +01011111100011111111000000000000 +00010001000000000000010000000000 +01001000100011111111110011111111 +01011111111100100000000000000000 +00010001000000000000010000000000 +00101001100110010000000000000000 +00101001100110010000000000000000 +00101100100111110000000000000010 +01011101111111110000001100100000 +01001110111011110000000001000000 +00010000000000100000010011111111 +01001101110111110100000000000011 +01011111111101110000000000000000 +01011101110111110011000000100000 +01001101110111111100111111010011 +01011010111110000000000000000000 +01001110100011111110000000000000 +00010000000000010000010100001010 +01001110110111110100000000000000 +00010000000000100000010100001011 +00101010101011111111111111111111 +01011111111110100000000000000000 +00010001000000000000010000000000 +01011100100111110000000000000000 +01011101111111110000001100100000 +01001110111011110000000001000000 +00010000000000100000010100001111 +01001101110111110100000000000011 +01011100111101110000000000000000 +01011101110111110000001110011000 +01001110111011110000000001000000 +00010000000000100000010100010100 +01001101110111110100000000000011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000001100100 +00010001000000000000001111110010 +01011101110111110001000000000100 +01001101110111111100111111110011 +01011001111111110000000000000011 +00000000000000000000000000000001 +00010001000000000000010011110100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000100101011 +00010001000000000000001111110010 +00010001000000000000010001010000 +01011011111101110000000000000000 +00010001000000000000010001010000 +01011111111101110000000000000000 +01001101110111110000000000000000 +01011101110111110011000000100000 +01001101110111110000000000000000 +00010001000000000000010001010000 +01011001111101110000000000000000 +01001001100111110000111111010101 +01001000100011110000000000000000 +01011000100010010000000000000000 +01001000100011110000111111010101 +01011100111110110000000000000000 +01011101110111110000001110010000 +01001110111011110000000001000000 +00010000000000100000010100110110 +01001101110111110000000000000000 +00010000000000000000010001110100 +01011111111111111100000000010100 +00010001000000000000001111110010 +01011001111111110000000000000010 +01011000100011110001000000000000 +01001000100011111110111111111111 +00010001000000000000010011110100 +01011111111111111100000000010100 +00010001000000000000001111110010 +01011001111111110000000000000000 +00000000000000000000000000000001 +00010001000000000000010011110100 +01011111111111111100000000010100 +00010001000000000000001111110010 +01011001111111110000000000000001 +01011000100011110000000000100000 +01001000100011111111111111011111 +00010001000000000000010011110100 +00000000000000000000000000000001 +01001110100011110000100000000000 +00010000000000010000010101010001 +01011111111111111100000001000000 +00010001000000000000001111110010 +00010000000000000000000001000101 +01011111111111111100000010001100 +00010001000000000000001111110010 +01011001111111110000000000000100 +00000000000000000000000000000001 +01011101110111110001000000000100 +01001101110111111100111111110011 +00010001000000000000010011110100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001010100000 +01011001110011110000000000000000 +00000000000000000000000000000001 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010001000000000000010011110100 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000010100 +00010001000000000000001111110010 +01011101111111110000101101100000 +01001110111011110000000001000000 +00010000000000100000010101100101 +01001101110111110100000000000011 +01011001111101110000000000000000 +00000000000000000000000000000001 +00010001000000000000010011110100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000011011100 +00010001000000000000001111110010 +01001001000011110000000011111111 +00101100000110010000000000000000 +01011101110111110000110000000000 +00010001000000000000010110000000 +01011100111101110000000000000000 +01001100110011110000000011111111 +01000000000011111111111100000000 +00100000000011000000000000000000 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011101110111110000001011000000 +01001110111011110000000001000000 +00010000000000100000010110000001 +01001101110111110100000000000011 +00010000001100000000000000000000 +01011101110111110000001100000000 +00010000000000000000010110000001 +01011101110111110000001011100000 +00010000000000000000010110000001 +01011101110111110000001100110000 +00010000000000000000010110000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000010001100 +00010001000000000000001111110010 +01011100001111110000000000000000 +01011101111111110000101010000000 +01001110111011110000000001000000 +00010000000000100000010110010100 +01001101110111110100000000000011 +01011100111101110000000000000000 +01001100110011110000000011111111 +01000000000011111111111100000000 +00100000000011000000000000000000 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000010001100 +00010001000000000000001111110010 +01011100001111110000000000000000 +01011101111111110000101110100000 +01001110111011110000000001000000 +00010000000000100000010110100100 +01001101110111110100000000000011 +01010000111101110000000000000000 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000011001000 +00010001000000000000001111110010 +00010001000000000000001010100000 +01011101111111110000101010000000 +01001110111011110000000001000000 +00010000000000100000010110110000 +01001101110111110100000000000011 +01011100111101110000000000000000 +01001100110011110000000011111111 +01000000000011111111111100000000 +00100000000011000000000000000000 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +01011111111111111100000010100000 +00010001000000000000001111110010 +00010001000000000000001010100000 +01011101111111110000101110100000 +01001110111011110000000001000000 +00010000000000100000010110111111 +01001101110111110100000000000011 +01010000111101110000000000000000 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +01011111111111111100000010100000 +00010001000000000000001111110010 +01011100001111110000000000000000 +01011111000011110000000000000000 +01011101111111110000101010100000 +01001110111011110000000001000000 +00010000000000100000010111001100 +01001101110111110100000000000011 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000011110000 +00010001000000000000001111110010 +01011111000011110000000000000000 +01011100001111110000000000000000 +01011101111111110000101111000000 +00010000000000000000010111001100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000010110110 +00010001000000000000001111110010 +01011111000011110000000000000000 +00010001000000000000001010100000 +01011101111111110000101010100000 +01001110111011110000000001000000 +00010000000000100000010111100010 +01001101110111110100000000000011 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +01011111111111111100000100001000 +00010001000000000000001111110010 +01011111000011110000000000000000 +00010001000000000000001010100000 +01011101111111110000101111000000 +00010000000000000000010111100010 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000010111111001 +01011110001011110000000000000000 +00010000000000100000010111110110 +00100010001011111111111111111111 +00010000000000000000010111111001 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000010000000 +00010001000000000000001111110010 +01011101110111110000110000000000 +01011100011011110000000000000000 +00010001000000000000010110000000 +00010001000000000000011101010000 +01001101110111110000000000000000 +01011100011111110000000000000000 +01011111111101110000000000000000 +00010001000000000000010110000111 +00010001000000000000011101011010 +01001110100011110000010000000000 +00010000000000010000011000001001 +00100110011011110000000000000001 +00100111011111110000000000000001 +00010000000000000000011000001011 +00100110011011111111111111111111 +00100111011111111111111111111111 +01001110100011111100000000000000 +00010000000000010000000000000110 +01011111111111111100000000010100 +00010001000000000000001111110010 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011000011101 +01011110001011110000000000000000 +00010000000000100000011000011010 +00100010001011111111111111111111 +00010000000000000000011000011101 +01011111111111111100000010110100 +00010001000000000000001111011100 +00010000000000000000000001000000 +01011111111111111100000001110000 +00010001000000000000001111110010 +01011101110111110000110000000000 +01011100011011110000000000000000 +00010001000000000000010110000101 +00010001000000000000011101010000 +01001101110111110000000000000000 +01011100011111110000000000000000 +01011111111101110000000000000000 +00010001000000000000010110001001 +00010001000000000000011101011010 +01001110100011110000010000000000 +00010000000000010000011000101101 +00100110011011110000000000000010 +00100111011111110000000000000010 +00010000000000000000011000101111 +00100110011011111111111111111110 +00100111011111111111111111111110 +01001110100011111100000000000000 +00010000000000010000000000000110 +01011111111111111100000000010100 +00010001000000000000001111110010 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011001000000 +01011110001011110000000000000000 +00010000000000100000011000111101 +00100010001011111111111111111111 +00010000000000000000011001000000 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000010111000 +00010001000000000000001111110010 +01011101110111110000110000000000 +01011100011011110000000000000000 +00010001000000000000010110000000 +01011001111101110000000000000000 +00010001000000000000011101010000 +01001101110111110000000000000000 +01011100011111110000000000000000 +00010001000000000000010110000000 +00010001000000000000011101011010 +01011010111101110000000000000000 +00010001000000000000101001000110 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011110000010000000000 +00010000000000010000011001010110 +00100110011011110000000000000001 +00100111011111110000000000000001 +00010000000000000000011001011000 +00100110011011111111111111111111 +00100111011111111111111111111111 +01001110100011111100000000000000 +00010000000000010000011101000000 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011001101001 +01011110001011110000000000000000 +00010000000000100000011001100110 +00100010001011111111111111111111 +00010000000000000000011001101001 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000010111000 +00010001000000000000001111110010 +01011101110111110000110000000000 +01011100011011110000000000000000 +00010001000000000000010110000101 +01011001111101110000000000000000 +00010001000000000000011101010000 +01001101110111110000000000000000 +01011100011111110000000000000000 +00010001000000000000010110000101 +00010001000000000000011101011010 +01011010111101110000000000000000 +00010001000000000000101001010010 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011110000010000000000 +00010000000000010000011001111111 +00100110011011110000000000000010 +00100111011111110000000000000010 +00010000000000000000011010000001 +00100110011011111111111111111110 +00100111011111111111111111111110 +01001110100011111100000000000000 +00010000000000010000011101000000 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011010001111 +01011110001011110000000000000000 +00010000000000100000011010001100 +00100010001011111111111111111111 +00010000000000000000011010001111 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000010010001 +00010001000000000000001111110010 +01001101110111110000000000000000 +01011100011111110000000000000000 +00010001000000000000010110000000 +01011010111101110000000000000000 +01001001000011110000000011111111 +00010001000000000000101001000110 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011110000010000000000 +00010000000000010000011010011111 +00100111011111110000000000000001 +00010000000000000000011010100000 +00100111011111111111111111111111 +01001110100011111100000000000000 +00010000000000010000011101000000 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011010110001 +01011110001011110000000000000000 +00010000000000100000011010101110 +00100010001011111111111111111111 +00010000000000000000011010110001 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000010010001 +00010001000000000000001111110010 +01001101110111110000000000000000 +01011100011111110000000000000000 +00010001000000000000010110000101 +01011010111101110000000000000000 +01011001000011110000000000000000 +00010001000000000000101001010010 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011110000010000000000 +00010000000000010000011011000000 +00100111011111110000000000000010 +00010000000000000000011011000001 +00100111011111111111111111111110 +01001110100011111100000000000000 +00010000000000010000011101000000 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011011001111 +01011110001011110000000000000000 +00010000000000100000011011001100 +00100010001011111111111111111111 +00010000000000000000011011001111 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000010010001 +00010001000000000000001111110010 +01011101110111110000110000000000 +01011100011011110000000000000000 +00010001000000000000010110000000 +01000000000011111111111100000000 +01010000000001110000000000000000 +01001110100011110000010000000000 +00010000000000010000011011011010 +00100110011011110000000000000001 +00010000000000000000011011011011 +00100110011011111111111111111111 +01001110100011111100000000000000 +00010000000000010000000000000110 +01011111111111111100000000010100 +00010001000000000000001111110010 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011011101101 +01011110001011110000000000000000 +00010000000000100000011011101010 +00100010001011111111111111111111 +00010000000000000000011011101101 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000010010001 +00010001000000000000001111110010 +01011101110111110000110000000000 +01011100011011110000000000000000 +00010001000000000000010110000101 +01010000111101110000000000000000 +01001110100011110000010000000000 +00010000000000010000011011110111 +00100110011011110000000000000010 +00010000000000000000011011111000 +00100110011011111111111111111110 +01001110100011111100000000000000 +00010000000000010000000000000110 +01011111111111111100000000010100 +00010001000000000000001111110010 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011100001001 +01011110001011110000000000000000 +00010000000000100000011100000110 +00100010001011111111111111111111 +00010000000000000000011100001001 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000001000100 +00010001000000000000001111110010 +00000000000000000000000000000001 +01001101110111110000000000000000 +01011100011111110000000000000000 +01011111000011110000000000000000 +00010001000000000000010110000111 +00000000000000000000000000000001 +01001110100011110000010000000000 +00010000000000010000011100010101 +00100111011111110000000000000001 +00010000000000000000011100010110 +00100111011111111111111111111111 +01001110100011111100000000000000 +00010000000000010000000000000110 +01011111111111111100000000010100 +00010001000000000000001111110010 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011111100000000000000 +00010000000000100000011100101001 +01011110001011110000000000000000 +00010000000000100000011100100110 +00100010001011111111111111111111 +00010000000000000000011100101001 +01011111111111111100000010110100 +00010001000000000000001111110010 +00010000000000000000000001000000 +01011111111111111100000001000100 +00010001000000000000001111110010 +00000000000000000000000000000001 +01001101110111110000000000000000 +01011100011111110000000000000000 +01011111000011110000000000000000 +00010001000000000000010110001001 +00000000000000000000000000000001 +01001110100011110000010000000000 +00010000000000010000011100110101 +00100111011111110000000000000010 +00010000000000000000011100110110 +00100111011111111111111111111110 +01001110100011111100000000000000 +00010000000000010000000000000110 +01011111111111111100000000010100 +00010001000000000000001111110010 +00010000000000000000000001000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011110100000000000000 +00010000000000100000011101000101 +01001110100011110000000001000000 +00010000000000100000000001000000 +00010000000000000000000000000110 +01001110100011110000000001000000 +00010000000000010000000001000000 +00010000000000000000000000000110 +01001110111011110000000010000000 +00010000000000100000011101001000 +00010000000000000000000000010001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110110111111100000000000000 +00010000000000100000011101010101 +01011000100011110000000000010000 +01001101110111111011111111111111 +00010000001100000100000000000000 +01001000100011111111111111101111 +01001101110111111011111111111111 +00010000001100000100000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100011110000000000010000 +00010000001100100000000000000000 +01011101110111110100000000000000 +00010000001100000100000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011001111111110000000000000000 +00010000000000000000011101100011 +01011001111111110000000000001000 +01001000100011110011111111111111 +00010001000000000000001010100000 +01011010111111000000000000000000 +01111100101000000000000000000000 +01111100110000000000000000000000 +01111100110000000000000000000000 +01001100110011110000000000000111 +01011111100111000000000000000000 +01011101110111110011000001010000 +01001101110111111100110000001111 +01001100101011110000000011000000 +00101110110011111111111101000000 +00010000001000010000000000001000 +01011000100011110100000000000000 +01001100101011110000000000000111 +01011111100111000000000000000000 +01011101110111110011000001000000 +01001101110111111100110000001111 +00010000001100000100000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111110010000000000000000 +01011101110111110011000001000000 +01001101110111111100000000000011 +01011111111110110000000000000000 +00010001000000000000001111110010 +00010000001100000100000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111110000000011111111 +00010000000000000000011110010011 +01011011111111111111111111111111 +01001110100011110100000000000000 +00010000000000100000011111000000 +01011111111101010000000000000000 +00010001010000000000000000111101 +01001001100110110000000000000000 +00010000001100000001000000110000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011001000011110000000000000000 +00010000001100000001000000110000 +01011001001011110000000000000000 +00010000001100000001000000110000 +01011001001111110000000000000000 +00010000001100000001000000110000 +01011001000111110000000000000000 +00010000001100000001000000110000 +00111001000011110000000000000000 +00010000001100000001000000110000 +00111001001011110000000000000000 +00010000001100000001000000110000 +00111001001111110000000000000000 +00010000001100000001000000110000 +00111001000111110000000000000000 +00010000001100000001000000110000 +01011001000011110000000000000000 +00010000001100000001000000110000 +01011001001011110000000000000000 +00010000001100000001000000110000 +01011001001111110000000000000000 +00010000001100000001000000110000 +01011001000111110000000000000000 +00010000001100000001000000110000 +01011001010011110000000000000000 +00010000001100000001000000110000 +01011001010111110000000000000000 +00010000001100000001000000110000 +01011001011011110000000000000000 +00010000001100000001000000110000 +01011001011111110000000000000000 +00010000001100000001000000110000 +01001101110111111100000000000011 +01001110100011111000000000000000 +00010000000000100000011111000101 +01011101110111110000010000000000 +00010000000000000000011111000110 +01011101110111110000110000000000 +01011100111101010000000000000000 +00101110101111110000000000000001 +00010000000000100000011111001101 +00010001000000000000010110000000 +01011001111101110000000000000000 +01001001100111110000000011111111 +00010000000000000000011111001111 +00010001000000000000010110000101 +01011001111101110000000000000000 +01011111111111111100000000010100 +00010001000000000000001111110010 +00010000001100000001000000110000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111101100000000000000000 +00010001010000000000000000111101 +01011011111101100000000000000000 +01001110101111110000000000001000 +00010000000000010000011111011010 +01001001100111110000000011111111 +00010000001100000001000000110000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111110000000011111111 +00010000000000000000011111100011 +01011011111111111111111111111111 +01001110100011110100000000000000 +00010000000000100000011111110000 +01011111111101010000000000000000 +01001001100110110000000000000000 +00010001010100000000000000100011 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001101110111111100000000000011 +01001110100011111000000000000000 +00010000000000100000011111110101 +01011101110111110000010000000000 +00010000000000000000011111110110 +01011101110111110000110000000000 +01011100111101010000000000000000 +01011111111110010000000000000000 +00101110101111110000000000000001 +00010000000000100000011111111100 +00010001000000000000010110000111 +00010000001100000000000000000000 +00010001000000000000010110001001 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000010001100 +01011001000111110000000000000000 +00101001011010010000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000010100000 +01011001000111110000000000000000 +00101001011110010000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011000100011111000000000000000 +01011011111111111100000010100000 +01011001010111110000000000000000 +00101001011010010000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011000100011111000000000000000 +01011011111111111100000010001100 +01011001010111110000000000000000 +00101001011110010000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000001100100 +01011001011011110000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000001100100 +01011001011111110000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000001111000 +00010001000000000000001011100101 +01011001111111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000001100100 +01011001000111110000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000011011100 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001000111110000000000000000 +00101001011010010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +01011011111111111100000011110000 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001000111110000000000000000 +00101001011110010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +01011000100011111000000000000000 +01011011111111111100000011110000 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001010111110000000000000000 +00101001011010010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +01011000100011111000000000000000 +01011011111111111100000011011100 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001010111110000000000000000 +00101001011110010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +01011011111111111100000010110100 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001011011110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000010110100 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001011111110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011000100011111000000000000000 +01011011111111111100000010110100 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001010111110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +01011011111111111100000010110100 +00010001000000000000001010100101 +00010001000000000000001100111010 +01011001000111110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000011011100 +00010001000000000000001011100101 +01011001000111110000000000000000 +00101001011010010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000011110000 +00010001000000000000001011100101 +01011001000111110000000000000000 +00101001011110010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011000100011111000000000000000 +01011011111111111100000011110000 +00010001000000000000001011100101 +01011001010111110000000000000000 +00101001011010010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +01011000100011111000000000000000 +01011011111111111100000011011100 +00010001000000000000001011100101 +01011001010111110000000000000000 +00101001011110010000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +01011011111111111100000010110100 +00010001000000000000001011100101 +01011001011011110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000010110100 +00010001000000000000001011100101 +01011001011111110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011000100011111000000000000000 +01011011111111111100000010110100 +00010001000000000000001011100101 +01011001010111110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111111100000010110100 +00010001000000000000001011100101 +01011001000111110000000000000000 +00101001100111000000000000000000 +00010000000000000000011110000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01000000000011111111111100000000 +01010000000010010000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +01000010001011111111111100000000 +01010010001010010000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +01000011001111111111111100000000 +01010011001110010000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +01000001000111111111111100000000 +01010001000110010000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +01000000000011110000000011111111 +00111001100110010000000000000000 +01010000000010010000000000000000 +00010000001100000000000000000000 +01000010001011110000000011111111 +00111001100110010000000000000000 +01010010001010010000000000000000 +00010000001100000000000000000000 +01000011001111110000000011111111 +00111001100110010000000000000000 +01010011001110010000000000000000 +00010000001100000000000000000000 +01000001000111110000000011111111 +00111001100110010000000000000000 +01010001000110010000000000000000 +00010000001100000000000000000000 +01010000100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01010010100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01010011100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01010001100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01010100100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01010101100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01010110100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01010111100111110000000000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001001100111110000000011111111 +01011111111101100000000000000000 +00010001010100000000000000100011 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +01011001100110100000000000000000 +00010001000000000000100110010000 +01001000100011111111011111111110 +00010001000000000000011111100000 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +01011001100110100000000000000000 +00010001000000000000001111010011 +01001000100011111111011111111110 +00010001000000000000011111100010 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +01011001100110100000000000000000 +00010001000000000000100110010000 +01001000100011111111011111111110 +00010001000000000000100100000000 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +01011001100110100000000000000000 +00010001000000000000001111010011 +01001000100011111111011111111110 +00010001000000000000100100000001 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001010100000 +01010000000011000000000000000000 +00010001000000000000100110010000 +01001000100011111111011111111110 +01011111111111111100000000100000 +00010001000000000000001111110010 +00010000000000000000100100111011 +00010001000000000000001011100000 +01010000000011000000000000000000 +00010001000000000000001111010011 +00010000000000000000100101000011 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +01101001100110100000000000000000 +00010000000000000000100100001011 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +01101001100110100000000000000000 +00010000000000000000100100011010 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +01101001100110100000000000000000 +00010000000000000000100100101001 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +01101001100110100000000000000000 +00010000000000000000100100111000 +00010001000000000000001010100000 +01100000000011000000000000000000 +00010000000000000000100101000010 +00010001000000000000001011100000 +01100000000011000000000000000000 +00010000000000000000100101001001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +01001001100110100000000000000000 +00010000000000000000100100001011 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +01001001100110100000000000000000 +00010000000000000000100100011010 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +01001001100110100000000000000000 +00010000000000000000100100101001 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +01001001100110100000000000000000 +00010000000000000000100100111000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001011100000 +01000000000011000000000000000000 +00010000000000000000100101001001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011011111111010000000000000000 +01001000100011111111011100101010 +01001110101111110000000010000000 +00010000000000100000100110010101 +01011000100011110000000010000000 +01011011111110110000000000000000 +01001100111011110000000000010100 +01011000100011000000000000000000 +01001100111011110000001000000000 +00010000000000100000100110011011 +01011000100011110000100000000000 +01001110111011110010000000000000 +00010000000000100000100110011110 +01011000100011110000000000000001 +01001011101111110000000011111111 +00010000000000010000100110100001 +01011000100011110000000001000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000100111001001 +00010000000000000000100100001101 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000100111001100 +00010000000000000000100100011100 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000100111001001 +00010000000000000000100100101011 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000100111001100 +00010000000000000000100100111010 +00010001000000000000001010100000 +00101001000011000000000000000000 +00010001000000000000100110010000 +00010000000000000000100111101110 +00010001000000000000001011100000 +00100000000011000000000000000000 +00010001000000000000001111010011 +00010000000000000000100101000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00101001100110100000000000000000 +00010001000000000000100110010000 +00010000001100000000000000000000 +00101001100110100000000000000000 +00010001000000000000001111010011 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101000000011 +00010000000000000000100100001101 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101000010010 +00010000000000000000100100011100 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101000000011 +00010000000000000000100100101011 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101000010010 +00010000000000000000100100111010 +00010001000000000000001010100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101000000011 +01001001100111110000000011111111 +01000000000011111111111100000000 +01010000000010010000000000000000 +00010000000000000000100101000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001011100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101000010010 +01010000111110010000000000000000 +00010000000000000000100101000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001010100000 +01011100110011111111111100000000 +01000000000011000000000000000000 +00010001000000000000100110010000 +00010000000000000000100101000011 +00000000000000000000000000000001 +01001100100011110000000000000001 +00101001100111000000000000000000 +00010001000000000000100110010000 +00101001100110100000000000000000 +01011011111111010000000000000000 +01001000100011111111111100111011 +00010001000000000000100110010010 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001100100011110000000000000001 +00101001100111000000000000000000 +00010001000000000000001111010011 +00101001100110100000000000000000 +01011011111111010000000000000000 +01001000100011111111111100111011 +00010001000000000000001111010101 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011111010100 +01011010111110010000000000000000 +00010001000000000000011110010000 +00010001000000000000101001000110 +00010000000000000000100100001101 +00010001000000000000011101100010 +00010001000000000000011111010100 +01011010111110010000000000000000 +00010001000000000000011110010010 +00010001000000000000101001010010 +00010000000000000000100100011100 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101001000110 +00010000000000000000100100101011 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101001010010 +00010000000000000000100100111010 +00010001000000000000001010100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101001000110 +01001001100111110000000011111111 +01000000000011111111111100000000 +01010000000010010000000000000000 +00010000000000000000100101000100 +00010001000000000000001011100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101001010010 +01010000111110010000000000000000 +00010000000000000000100101000100 +01101010101011111111111111111111 +00101001100110100000000000000000 +00010001000000000000100110010000 +00101001100111110000000000000001 +01011011111111010000000000000000 +01001000100011111111111100111011 +00010001000000000000100110010010 +01101000100011110000000000010001 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01101010101011111111111111111111 +00101001100110100000000000000000 +00010001000000000000001111010011 +00101001100111110000000000000001 +01011011111111010000000000000000 +01001000100011111111111100111011 +00010001000000000000001111010101 +01101000100011110000000000010001 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011111010100 +01011010111110010000000000000000 +00010001000000000000011110010000 +00010001000000000000101001000110 +00010000000000000000100100001110 +00010001000000000000011101100010 +00010001000000000000011111010100 +01011010111110010000000000000000 +00010001000000000000011110010010 +00010001000000000000101001010010 +00010000000000000000100100011101 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101001000110 +00010000000000000000100100101100 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101001010010 +00010000000000000000100100111011 +00010001000000000000001010100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101001000110 +00010000000000000000100101000100 +00010001000000000000001011100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101001010010 +00010000000000000000100101000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011111010100 +01011010111110010000000000000000 +00010001000000000000011110010000 +00010001000000000000101010101110 +00010000000000000000100100001101 +00010001000000000000011101100010 +00010001000000000000011111010100 +01011010111110010000000000000000 +00010001000000000000011110010010 +00010001000000000000101010111010 +00010000000000000000100100011100 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101010101110 +00010000000000000000100100101011 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000101010111010 +00010000000000000000100100111010 +00010001000000000000001010100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101010101110 +01001001100111110000000011111111 +01000000000011111111111100000000 +01010000000010010000000000000000 +00010000000000000000100101000100 +00010001000000000000001011100000 +01011001000011110000000000000000 +01011010110011110000000000000000 +00010001000000000000101010111010 +01010000111110010000000000000000 +00010000000000000000100101000100 +01101010101011111111111111111111 +00101001100110100000000000000000 +01001010100011110000000000000001 +01011110111110010000000000000000 +00010001000000000000100110010000 +01011110111110100000000000000000 +00010000000000010000101011000101 +00101001100111110000000000000001 +01011011111111010000000000000000 +01001000100011111111111100111011 +00010001000000000000100110010010 +00010000000000000000101011000101 +01101010101011111111111111111111 +00101001100110100000000000000000 +01001010100011110000000000000001 +01011110111110010000000000000000 +00010001000000000000001111010011 +01011110111110100000000000000000 +00010000000000010000101011000101 +00101001100111110000000000000001 +01011011111111010000000000000000 +01001000100011111111111100111011 +00010001000000000000001111010101 +01101000100011110000000000010001 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +00010001000000000000001010100101 +01011111111110100000000000000000 +01011010111111000000000000000000 +00010000011000000000101011011000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010000000000000000100110101010 +00010000000000000000100100001010 +00010000000000000000100111010110 +00010000000000000000101010001100 +00010000000000000000100101110100 +00010000000000000000101000100100 +00010000000000000000100101010100 +00010000000000000000101001100100 +00010001000000000000011101100010 +00010001000000000000011110010010 +00010001000000000000001011100101 +01011111111110100000000000000000 +01011010111111000000000000000000 +00010000011000000000101011101000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010000000000000000100110110000 +00010000000000000000100100011001 +00010000000000000000100111011100 +00010000000000000000101010010010 +00010000000000000000100101111010 +00010000000000000000101000101010 +00010000000000000000100101011010 +00010000000000000000101001101010 +00010001000000000000011101100010 +00010001000000000000011110010010 +00010001000000000000001010100101 +00010001000000000000001100111010 +00010000000000000000101011100011 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011111111110100000000000000000 +00010000011000000000101100000000 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011111111110100000000000000000 +00010000011000000000101100001000 +00010000000000000000101100011110 +00010000000000000000101100111101 +00010000000000000000101101011011 +00010000000000000000101101111001 +00010000000000000000101110010100 +00010000000000000000101110110100 +00010000000000000000101110110100 +00010000000000000000101111010111 +00010000000000000000101100100000 +00010000000000000000101100111111 +00010000000000000000101101011101 +00010000000000000000101101111011 +00010000000000000000101110010110 +00010000000000000000101110110110 +00010000000000000000101110110110 +00010000000000000000101111011001 +01001000100011111111011111111110 +01011010111111110000000000000000 +01001110100111110000000010000000 +00010000000000100000101100010110 +01011000100011110000000000000001 +01011010111111110000000000000001 +00101001100110010000000000000000 +01011001100110100000000000000000 +01001110111011110000001000000000 +00010000000000100000101100011011 +01011000100011110000100000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000101100010000 +00010000000000000000100100001101 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100001101 +00010001000000000000101100010000 +01011111111111111100000000100000 +00010001000000000000001111110010 +01001001100111110000000011111111 +00101100110011111111111111111111 +00010000000000000000101100100011 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111011111111110 +01011010111111110000000000000000 +01001011100111110000000010000000 +01001110100111110000000000000001 +00010000000000100000101100110111 +01011000100011110000000000000001 +01011010111111110000000010000000 +01111001100110010000000000000000 +01011001100110100000000000000000 +01101110101010110000001000000000 +00010000000000100000101100111100 +01011000100011110000100000000000 +00010000001100000000000000000000 +00010001000000000000101100110000 +00010000000000000000100100001101 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100001101 +00010001000000000000101100110000 +01011111111111111100000000100000 +00010001000000000000001111110010 +01001001100111110000000011111111 +00101100110011111111111111111111 +00010000000000000000101101000010 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001010100011110000000000000001 +01001000100011111111011111111110 +01001110100111110000000010000000 +00010000000000100000101101010101 +01011000100011110000000000000001 +00101001100110010000000000000000 +01011001100110100000000000000000 +01001110111011110000001000000000 +00010000000000100000101101011010 +01011000100011110000100000000000 +00010000001100000000000000000000 +00010001000000000000101101010000 +00010000000000000000100100001101 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100001101 +00010001000000000000101101010000 +01011111111111111100000000100000 +00010001000000000000001111110010 +01001001100111110000000011111111 +00101100110011111111111111111111 +00010000000000000000101101100000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011010111111110000000000000000 +01001110100011110000000000000001 +00010000000000100000101101101110 +01011010111111110000000010000000 +01001000100011111111011111111110 +01001011100111110000000010000000 +01001110100111110000000000000001 +00010000000000100000101101110011 +01011000100011110000000000000001 +01111001100110010000000000000000 +01011001100110100000000000000000 +01101110101010110000001000000000 +00010000000000100000101101111000 +01011000100011110000100000000000 +00010000001100000000000000000000 +00010001000000000000101101101010 +00010000000000000000100100001101 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100001101 +00010001000000000000101101101010 +01011111111111111100000000100000 +00010001000000000000001111110010 +01001001100111110000000011111111 +00101100110011111111111111111111 +00010000000000000000101101111110 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111111111101 +01001110100111110000000010000000 +00010000000000100000101110001100 +01011000100011110000000000000010 +00101001100110010000000000000000 +00010001000000000000100110010000 +01001000100011111111111111111110 +01001110100011110000000000000010 +00010000000000100000101110010010 +01011000100011110000000000000001 +01001000100011111111111111111101 +00010000001100000000000000000000 +00010001000000000000101110001000 +00010000000000000000100100001101 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001010001011110000000011111111 +00010000000000100000100100001101 +00010001000000000000101110001000 +01011111111111111100000000100000 +00010001000000000000001111110010 +01001001100111110000000011111111 +00101010101011111111111111111111 +00010000000000000000101110011001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111111111101 +01001110100111110000000000000001 +00010000000000100000101110101000 +01011000100011110000000000000010 +01111001100110010000000000000000 +00010001000000000000100110010000 +01001000100011111111011111111110 +01001110100011110000000000000010 +00010000000000100000101110101110 +01011000100011110000000000000001 +01001000100011111111111111111101 +01001110100111110000000011000000 +01001110111011110000000000000100 +00010000000000010000101110110011 +01011000100011110000100000000000 +00010000001100000000000000000000 +00010001000000000000101110100100 +00010000000000000000100100001101 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001010001011110000000011111111 +00010000000000100000100100001101 +00010001000000000000101110100100 +01011111111111111100000000100000 +00010001000000000000001111110010 +01001001100111110000000011111111 +00101010101011111111111111111111 +00010000000000000000101110111001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111111111101 +01001110100111110000000000000001 +00010000000000100000101111001000 +01011000100011110000000000000010 +01111001100110010000000000000000 +01001110100111110000000001000000 +00010000000000100000101111001100 +01011001100111110000000010000000 +01011001111110010000000000000000 +00010001000000000000100110010000 +01001000100011111111011111111110 +01001110100011110000000000000010 +00010000000000100000101111010010 +01011000100011110000000000000001 +01001000100011111111111111111101 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000101111000100 +00010000000000000000100100001101 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001010001011110000000011111111 +00010000000000100000100100001101 +00010001000000000000101111000100 +01011111111111111100000000100000 +00010001000000000000001111110010 +01001001100111110000000011111111 +00101010101011111111111111111111 +00010000000000000000101111011100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011111111110100000000000000000 +00010000011000000000101111110000 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011111111110100000000000000000 +00010000011000000000101111111000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010000000000000000110000001100 +00010000000000000000110000011000 +00010000000000000000110000110010 +00010000000000000000110001001111 +00010000000000000000110001101100 +00010000000000000000110010001101 +00010000000000000000110010001101 +00010000000000000000110010101010 +00010000000000000000110000001110 +00010000000000000000110000011010 +00010000000000000000110000110100 +00010000000000000000110001010001 +00010000000000000000110001101110 +00010000000000000000110010001111 +00010000000000000000110010001111 +00010000000000000000110010101100 +01001000100011111111011111111110 +01011010111111110000000000000000 +01001110100111111000000000000000 +00010000000000100000110000000110 +01011000100011110000000000000001 +01011010111111110000000000000001 +00101001100110010000000000000000 +01011001100110100000000000000000 +01001110111011110000100000000000 +00010000000000100000110000001011 +01011000100011110000100000000000 +00010000001100000000000000000000 +00010001000000000000110000000000 +00010000000000000000100100011100 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100011100 +00010001000000000000110000000000 +01011111111111111100000000100000 +00010001000000000000001111110010 +00101100110011111111111111111111 +00010000000000000000110000010001 +00000000000000000000000000000001 +00010001000000000000111101000110 +00010000000000000000100100011100 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100011100 +00010001000000000000111101000110 +01011111111111111100000000100000 +00010001000000000000001111110010 +00101100110011111111111111111111 +00010000000000000000110000011101 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001010100011110000000000000001 +01001000100011111111011111111110 +01001110100111111000000000000000 +00010000000000100000110000101100 +01011000100011110000000000000001 +00101001100110010000000000000000 +01011001100110100000000000000000 +01001110111011110000100000000000 +00010000000000100000110000110001 +01011000100011110000100000000000 +00010000001100000000000000000000 +00010001000000000000110000100111 +00010000000000000000100100011100 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100011100 +00010001000000000000110000100111 +01011111111111111100000000100000 +00010001000000000000001111110010 +00101100110011111111111111111111 +00010000000000000000110000110111 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011010111111110000000000000000 +01001110100011110000000000000001 +00010000000000100000110001000100 +01011010111111111000000000000000 +01001000100011111111011111111110 +01001011100111111000000000000000 +01001110100111110000000000000001 +00010000000000100000110001001001 +01011000100011110000000000000001 +01111001100110010000000000000000 +01011001100110100000000000000000 +01101110101010110000001000000000 +00010000000000100000110001001110 +01011000100011110000100000000000 +00010000001100000000000000000000 +00010001000000000000110001000000 +00010000000000000000100100011100 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001100001011110000000011111111 +00010000000000100000100100011100 +00010001000000000000110001000000 +01011111111111111100000000100000 +00010001000000000000001111110010 +00101100110011111111111111111111 +00010000000000000000110001010100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111111111101 +01001110100111111000000000000000 +00010000000000100000110001100100 +01011000100011110000000000000010 +00101001100110010000000000000000 +00010001000000000000001111010011 +01001000100011111111111111111110 +01001110100011110000000000000010 +00010000000000100000110001101010 +01011000100011110000000000000001 +01001000100011111111111111111101 +00010000001100000000000000000000 +00010001000000000000110001100000 +00010000000000000000100100011100 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001010001011110000000011111111 +00010000000000100000100100011100 +00010001000000000000110001100000 +01011111111111111100000000100000 +00010001000000000000001111110010 +00101010101011111111111111111111 +00010000000000000000110001110001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111111111101 +01001110100111110000000000000001 +00010000000000100000110001111111 +01011000100011110000000000000010 +01111001100110010000000000000000 +00010001000000000000001111010011 +01001000100011111111011111111110 +01001110100011110000000000000010 +00010000000000100000110010000101 +01011000100011110000000000000001 +01001000100011111111111111111101 +00111001100110010000000000000000 +01001110100111110000000011000000 +01001110111011110000000000000100 +00010000000000010000110010001011 +01011000100011110000100000000000 +00111001100110010000000000000000 +00010000001100000000000000000000 +00010001000000000000110001111011 +00010000000000000000100100011100 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001010001011110000000011111111 +00010000000000100000100100011100 +00010001000000000000110001111011 +01011111111111111100000000100000 +00010001000000000000001111110010 +00101010101011111111111111111111 +00010000000000000000110010010010 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111111111101 +01001110100111110000000000000001 +00010000000000100000110010011110 +01011000100011110000000000000010 +01111001100110010000000000000000 +01001110100111110100000000000000 +00010000000000100000110010100010 +01011001100111111000000000000000 +01011001111110010000000000000000 +00010001000000000000001111010011 +01001000100011111111011111111110 +01001110100011110000000000000010 +00010000000000100000110010101000 +01011000100011110000000000000001 +01001000100011111111111111111101 +00010000001100000000000000000000 +00010001000000000000110010011010 +00010000000000000000100100011100 +01011111111111111100000001000000 +00010001000000000000001111110010 +01001010001011110000000011111111 +00010000000000100000100100011100 +00010001000000000000110010011010 +01011111111111111100000000100000 +00010001000000000000001111110010 +00101010101011111111111111111111 +00010000000000000000110010101111 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +00010000000000000000100100111011 +00000000000000000000000000000001 +00000000000000000000000000000001 +01000000000011111111111100000000 +01001110100011110000000000000001 +00010000000000100000110011000010 +01010000000011110000000011111111 +00010000000000000000000001011100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +00010001000000000000100100000001 +01011001111101010000000000000000 +00101111100111110000000000000010 +01011101110111110011000001000000 +01001101110111111100110000001111 +00010001000000000000011110010010 +01011111111110010000000000000000 +01011101110111110011000000000000 +01001101110111111100111111110011 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +00010001000000000000100100000001 +01011001111101010000000000000000 +00101111100111110000000000000010 +01011101110111110011000001000000 +01001101110111111100110000001111 +00010001000000000000011110010010 +01011111111110010000000000000000 +01011101110111110011000000110000 +01001101110111111100111111000011 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000001010100101 +01011001110011110000000000000000 +00010000000000000000100100001101 +00010001000000000000011101100010 +00010001000000000000001011100101 +01011001110011110000000000000000 +00010000000000000000100100011100 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011111010100 +00010000000000000000100100001101 +00010001000000000000011101100010 +00010001000000000000011111010100 +00010000000000000000100100011100 +00010001000000000000011101100000 +00010001000000000000011110010000 +00010000000000000000100100101011 +00010001000000000000011101100010 +00010001000000000000011110010010 +00010000000000000000100100111010 +00000000000000000000000000000001 +00010001000000000000011101100010 +01011001111101010000000000000000 +00010000000000000000100100111010 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001010100000 +00000000000000000000000000000001 +01001110000011000000000000000000 +00010000000000000000100101000010 +00010001000000000000001011100000 +01001110000011000000000000000000 +00010000000000000000100101001001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +01001001100110100000000000000000 +00010000000000000000100101000010 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +01001001100110100000000000000000 +00010000000000000000100101001001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000011111100000 +01011001111110100000000000000000 +00010000000000000000100100101011 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011010111110010000000000000000 +00010001000000000000011111010100 +00010001000000000000011111100010 +01011001111110100000000000000000 +00010000000000000000100100111010 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000001011100000 +01011101110111110000110000000000 +00010001000000000000010110000000 +01011100111101110000000000000000 +01001100110011110000000011111111 +01000000000011111111111100000000 +00100000000011000000000000000000 +01011111111111111100000001001111 +00010001000000000000001111110010 +00010000000000000000100100111011 +00010001000000000000001011100000 +01011101110111110000110000000000 +00010001000000000000010110000101 +01010000111101110000000000000000 +00010000000000000000110100101111 +00000000000000000000000000000001 +00010001000000000000001011100000 +01011101110111110000110000000000 +01011111000011110000000000000000 +00010001000000000000010110000111 +00010000000000000000110100101111 +00010001000000000000001011100000 +01011101110111110000110000000000 +01011111000011110000000000000000 +00010001000000000000010110001001 +00010000000000000000110100101111 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000001100100 +00010001000000000000001111110010 +00010001000000000000011101100010 +00010001000000000000010001010000 +01011001111101110000000000000000 +01011101110111110000110000000000 +00010000000000000000100100011100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011101110111110001000000001100 +01001101110111111100111111110011 +01011111111110100000000000000000 +00010000011000000000110101011000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010000000000000000110101100000 +00010000000000000000110101100110 +00010000000000000000110101101001 +00010000000000000000110101101100 +00010000000000000000110101100000 +00010000000000000000110101100110 +00010000000000000000110101101001 +00010000000000000000110101101100 +01011111111110010000000000000000 +01011101111111110011000000000000 +01001101110111110000000000000000 +00010000000000000000010001110100 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111110010000000000000000 +01011101111111110011000000100000 +00010000000000000000110101100010 +01011111111110010000000000000000 +01011101111111110011000000010000 +00010000000000000000110101100010 +01011111111110010000000000000000 +01011101111111110011000000110000 +00010000000000000000110101100010 +00000000000000000000000000000001 +00010001000000000000011101100010 +01011111111110100000000000000000 +00010000011000000000110101111000 +00010001000000000000011111100010 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00010000000000000000110110000000 +00010000000000000000110110000010 +00010000000000000000110110000100 +00010000000000000000110110000110 +00010000000000000000110110000000 +00010000000000000000110110000010 +00010000000000000000110110000100 +00010000000000000000110110000110 +01011001111100000000000000000000 +00010000000000000000110101110011 +01011001111100100000000000000000 +00010000000000000000110101110011 +01011001111100010000000000000000 +00010000000000000000110101110011 +01011001111100110000000000000000 +00010000000000000000110101110011 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100010 +00010001000000000000011110010010 +01011111111110100000000000000000 +00010000011000000000110110011000 +00010001000000000000011111100010 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010000000000000000110110100000 +00010000000000000000110110100110 +00010000000000000000110111011000 +00010000000000000000110110111011 +00010000000000000000110111011011 +00010000000000000000110111000010 +00010000000000000000110111100110 +00010000000000000000110111100110 +01001010100011110000000000000001 +00101001100111110000000000000001 +00010001000000000000001111010011 +01001000100011111111111111111110 +01011000100010100000000000000000 +00010000000000000000110110001111 +01001010100011110000000000000001 +00101001100111111111111111111111 +00010001000000000000001111010011 +01001000100011111111111111111110 +01011000100010100000000000000000 +01101000100011110000000000010000 +00010000000000000000110110001111 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011001111111010000000000000000 +01001000100011111111011100101011 +01011001111110010000000000000000 +01001010111011110000100000010100 +01011000100010100000000000000000 +01101000100011110000000000010000 +00010000000000000000000010101101 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111100100000000000000000 +00010001000000000000010000000000 +01011100111111110000000000000001 +00101111110010000000000000000000 +00010001000000000000010000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011010111110010000000000000000 +01011001111101010000000000000000 +00101111100111110000000000000010 +01011101110111110011000001000000 +01001101110111111100000000000011 +00010001000000000000011110010010 +01011111111110010000000000000000 +01011101111111110011000000100000 +01001101110111111100000000000011 +01011101110111110001000000001100 +01001101110111111100000000000011 +01011100111110100000000000000000 +01011101110111110000001110011000 +01001110111011110000000001000000 +00010000000000100000110111001111 +01001101110111110100000000000011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011100111111110000000000000001 +00101111110010000000000000000000 +00010001000000000000010000000000 +01011010111110010000000000000000 +01011101110111110001000000001100 +01001101110111111100000000000011 +01011100111110100000000000000000 +01011101110111110000001110011000 +01001110111011110000000001000000 +00010000000000100000110111100000 +01001101110111110100000000000011 +00010000000000000000000000000100 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100000000111100 +00010001000000000000001111110010 +01011111111110010000000000000000 +00010001000000000000010000000000 +00010000000000000000110110010000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00010001000000000000011101100000 +00010001000000000000011110010000 +01011111111110100000000000000000 +00010000011000000000110111111000 +00010001000000000000011111100000 +01011101110111110001000000001100 +01001101110111111100111111110011 +00010000000000000000000000000100 +00010000000000000000111000000000 +00010000000000000000111000001001 +00010000000000000000110111111010 +00010000000000000000110111111011 +00010000000000000000110111111100 +00010000000000000000110111111101 +00010000000000000000110111111110 +00010000000000000000110111111111 +01001010100011110000000000000001 +00101001100111110000000000000001 +00010001000000000000100110010000 +01001000100011111111111111111110 +01011000100010100000000000000000 +00010000000000000000110111110100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001010100011110000000000000001 +00101001100111111111111111111111 +00010001000000000000100110010000 +01001000100011111111111111111110 +01011000100010100000000000000000 +01101000100011110000000000010000 +00010000000000000000110111110100 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111011111111110 +00010001000000000000011101100000 +00010001000000000000011110010000 +01001100111111110000000000000000 +01011111111110100000000000000000 +00010000011000000000111000011000 +00010000000000000000111000100000 +00010000000000000000111000100000 +00010000000000000000111000100110 +00010000000000000000111000101000 +00010000000000000000111001000000 +00010000000000000000111000110000 +00010000000000000000111001100011 +00010000000000000000111001010100 +00010001000000000000001010100101 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001110100111000000000000000000 +00010000000000000000100101000010 +00000000000000000000000000000001 +01101001100111111111111111111111 +00010000000000000000100100001101 +01011010100111110000000000000000 +01001001111111110000000000000000 +00010001000000000000101001000110 +00010000000000000000100100001101 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100011011110100 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001110100111110000000010000000 +00010000000000100000111000111000 +01011100111111110000000000000001 +01101001100111110000000011111111 +00101001100111110000000000000001 +01001110000011110000000010000000 +00010000000000100000111001000011 +01101100110011110000000000000001 +01100000000011111111111111111111 +00100000000011110000000000000001 +00010000000000000000111001000011 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100010111001000 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001000100011111111011111111110 +00111001100111110000000000000000 +01011010111111110000000000001000 +01011011111111110000000000000000 +01000000000011110000000011111111 +01001110000011110000000000000001 +00010000000000100000111001001110 +00100000000010010000000000000000 +01001110111011110000000000000001 +00010000000000100000111001001110 +00101011101111110000000000000001 +00010001000000000000111101101010 +00101010101011111111111111111111 +00010000000000010000111001001000 +00010000000000000000111101110000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011111111111111100100001001000 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001110100111110000000010000000 +00010000000000100000111001011101 +01011000100011110000000000000001 +01101001100111110000000011111111 +00101001100111110000000000000001 +01001110000011111000000000000000 +00010000000000100000111001100110 +01101000100011110000100000000001 +01100000000011111111111111111111 +00100000000011110000000000000001 +00010000000000000000111001100110 +01011111111111111100011010100100 +01011101110111110010000000000000 +01001101110111111100111111111111 +01011010111111110000000000010000 +01001011101111110000000000000000 +01101100100111111111111111111111 +00101100110011110000000000000001 +00010000000000100000111100010000 +00010001000000000000111101010110 +00101011101111000000000000000000 +01001110111011110000000000000001 +00010000000000100000111001110001 +01010000000011110000000000000001 +00010000000000000000111001110010 +00101011101110010000000000000000 +00101010101011111111111111111111 +00010000000000010000111001101011 +01001110000011111111111100000000 +00010000000000010000111100010000 +01001110100011110000100000000000 +00010000000000100000111001111010 +01101011101111111111111111111111 +00101011101111110000000000000001 +01001110100011110000000000000001 +00010000000000100000111001111110 +01100000000011111111111111111111 +00100000000011110000000000000001 +01000000000011110000000011111111 +00111011101100000000000000000000 +01001011101111111111111100000000 +01010000000010110000000000000000 +00010000000000000000111101110111 +00010001000000000000011101100010 +00010001000000000000011110010010 +01001100111111110000000000000000 +01011111111110100000000000000000 +00010000011000000000111010001000 +00010000000000000000111010010000 +00010000000000000000111010010000 +00010000000000000000111010010100 +00010000000000000000111010010110 +00010000000000000000111010101110 +00010000000000000000111010011110 +00010000000000000000111011100100 +00010000000000000000111011010000 +01001000100011111111011111111110 +00010001000000000000001011100101 +01001110100111000000000000000000 +00010000000000000000100101001001 +01101001100111111111111111111111 +00010000000000000000100100011100 +01011010100111110000000000000000 +01001001111111110000000000000000 +00010001000000000000101001010010 +00010000000000000000100100011100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111011111111110 +01011111111111111100101100000100 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001110100111111000000000000000 +00010000000000100000111010100111 +01011100111111110000000000000001 +01101001100111111111111111111111 +00101001100111110000000000000001 +01001110000011111000000000000000 +00010000000000100000111010110010 +01101100110011110000000000000001 +01100000000011111111111111111111 +00100000000011110000000000000001 +00010000000000000000111010110010 +00000000000000000000000000000001 +01001000100011111111011111111110 +01011111111111111100100111000100 +01011101110111110010000000000000 +01001101110111111100111111111111 +01011010111111110000000000010000 +01011011111111110000000000000000 +01010011111111110000000000000000 +01001110000011110000000000000001 +00010000000000100000111010111011 +00100011001110010000000000000000 +01001110111011110000000000000001 +00010000000000100000111010111011 +00101011101111110000000000000001 +00010001000000000000111101100000 +00101010101011111111111111111111 +00010000000000010000111010110101 +01001110001111111111111111111111 +00010000000000100000111011000001 +01011000100011110000100000000001 +01001110110011110000000000000001 +00010000000000100000111011001001 +01100011001111111111111111111111 +01100000000011111111111111111111 +00100000000011110000000000000001 +01001110111011110000000000000001 +00010000000000100000111011001001 +00100011001111110000000000000001 +01001110111011110001000000000000 +00010000000000100000111011001001 +00010000000000000000000011000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111011111111110 +00000000000000000000000000000001 +01011111111111111100110110101100 +01011101110111110010000000000000 +01001101110111111100111111111111 +01001110100111111000000000000000 +00010000000000100000111011011010 +01011000100011110000000000000001 +01101001100111111111111111111111 +00101001100111110000000000000001 +01001110001111111000000000000000 +00010000000000100000111011101001 +01101000100011110000100000000001 +01100011001111111111111111111111 +01100000000011111111111111111111 +00100000000011110000000000000001 +01001110111011110000000000000001 +00010000000000100000111011101001 +00100011001111110000000000000001 +00010000000000000000111011101001 +01001000100011111111011111111110 +00000000000000000000000000000001 +01011111111111111100101111110100 +01011101110111110010000000000000 +01001101110111111100111111111111 +01011010111111110000000000100000 +01011011111111110000000000000000 +01011100111111110000000000000000 +00010001000000000000111100110000 +01101001100111111111111111111111 +00101001100111110000000000000001 +00010000000000100000111100010000 +00101011101110010000000000000000 +01001110111011110000000000000001 +00010000000000010000111011110100 +00101100110011111111111111111111 +01001110111011110000000000000001 +00010000000000100000111011111010 +01010000000011110000000000000001 +01101001100111111111111111111111 +00101001100111110000000000000001 +00010000000000000000111011111110 +01101001100111111111111111111111 +00101001100111110000000000000001 +00101011101110010000000000000000 +00101100110011110000000000000001 +00101010101011111111111111111111 +00010000000000010000111011101100 +01011110001111110000000000000000 +00010000000000010000111100010000 +01010011111110110000000000000000 +01001110100011110000100000000000 +00010000000000100000111100000111 +01100011001111111111111111111111 +00100011001111110000000000000001 +01001110100011110000000000000001 +00010000000000100000111100001011 +01100000000011111111111111111111 +00100000000011110000000000000001 +00010000000000000000000010111110 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01011001111111110000000000000000 +00010000000000000000010101011100 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111111100111011 +01001011000011110000000011111111 +01001100111011110000000000000100 +01011000100011000000000000000000 +01001110101111110000000010000000 +00010000000000100000111100100111 +01011000100011110000000010000000 +01001011101111110000000011111111 +00010000000000010000111100101010 +01011000100011110000000001000000 +00010000000000000000000001000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00101100110011000000000000000000 +00101011101110110000000000000000 +01001110111011110000000000000001 +00010000000000100000111100110101 +01011100110011110000000000000001 +01011110001111110000000000000000 +00100011001111010000000000000000 +01001110111011110000000000000001 +00010000000000100000111100111010 +01011011101111110000000000000001 +01011110000011110000000000000000 +00100000000011010000000000000000 +01001110111011110000000000000001 +00010000000000100000111100111111 +01010011001111110000000000000001 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01001000100011111111011111111110 +01011010111111110000000000000000 +01001011100111111000000000000000 +01001110100111110000000000000001 +00010000000000100000111101001101 +01011000100011110000000000000001 +01011010111111111000000000000000 +01111001100110010000000000000000 +01011001100110100000000000000000 +01101110101010110000001000000000 +00010000000000100000111101010010 +01011000100011110000100000000000 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +00101011101110110000000000000000 +01011110000011110000000000000000 +00100000000011010000000000000000 +01001110111011110000000000000001 +00010000000000100000111101011100 +01011011101111110000000000000001 +00010000001100000000000000000000 +00000000000000000000000000000001 +00000000000000000000000000000001 +00000000000000000000000000000001 +01110000000011110000000000000000 +01001110001111110000000000000001 +00010000000000100000111101100100 +01010000000011111000000000000000 +01110011001111110000000000000000 +01001110101111110000000000000001 +00010000000000100000111101101000 +01010011001111111000000000000000 +01111011101111110000000000000000 +00010000001100000000000000000000 +01110000000011110000000000000000 +01001110101111110000000000000001 +00010000000000100000111101101110 +01010000000011111000000000000000 +01111011101111110000000000000000 +00010000001100000000000000000000 +01001110000011111111111100000000 +00010000000000100000111101110011 +01011000100011110000100000000001 +01001110110011110000000000000001 +00010000000000100000111101110111 +01100000000011111111111111111111 +00100000000011110000000000000001 +01001110111011110001000000000000 +00010000000000100000111101110111 +00010000000000000000000011000110 diff --git a/MCL86/Core/Lattice_XO2_Small_Example/test.hex b/MCL86/Core/Lattice_XO2_Small_Example/test.hex new file mode 100644 index 0000000..fd4703c --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/test.hex @@ -0,0 +1,41 @@ +BE 68 00 BC 00 06 8C C8 8E D8 AC 3C 24 74 07 8A +D8 E8 49 00 EB F4 E4 01 24 01 74 FA E4 00 8A D8 +E8 3A 00 80 FB 31 74 11 80 FB 32 74 12 80 FB 33 +74 13 80 FB 34 74 C9 EB DD B0 00 E6 03 EB D7 B0 +FF E6 03 EB D1 B3 21 B9 5C 00 E8 10 00 FE C3 E2 +F9 B3 0D E8 07 00 B3 0A E8 02 00 EB B9 E4 01 24 +02 75 FA 8A C3 E6 02 C3 1B 5B 32 4A 1B 5B 48 0D +0A 20 5F 5F 20 20 5F 5F 20 20 5F 5F 5F 5F 5F 20 +5F 20 20 20 20 20 20 5F 5F 5F 20 20 20 20 5F 5F +20 20 0D 0A 7C 20 20 5C 2F 20 20 7C 2F 20 5F 5F +5F 5F 7C 20 7C 20 20 20 20 2F 20 5F 20 5C 20 20 +2F 20 2F 20 20 0D 0A 7C 20 5C 20 20 2F 20 7C 20 +7C 20 20 20 20 7C 20 7C 20 20 20 7C 20 28 5F 29 +20 7C 2F 20 2F 5F 20 20 0D 0A 7C 20 7C 5C 2F 7C +20 7C 20 7C 20 20 20 20 7C 20 7C 20 20 20 20 3E +20 5F 20 3C 7C 20 27 5F 20 5C 20 0D 0A 7C 20 7C +20 20 7C 20 7C 20 7C 5F 5F 5F 5F 7C 20 7C 5F 5F +5F 7C 20 28 5F 29 20 7C 20 28 5F 29 20 7C 0D 0A +7C 5F 7C 20 20 7C 5F 7C 5C 5F 5F 5F 5F 5F 7C 5F +5F 5F 5F 5F 5F 5C 5F 5F 5F 2F 20 5C 5F 5F 5F 2F +20 0D 0A 0D 0A 0D 0A 48 65 6C 6C 6F 20 66 72 6F +6D 20 4D 69 63 72 6F 43 6F 72 65 20 4C 61 62 73 +20 21 21 21 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D +2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D +2D 2D 2D 0D 0A 20 20 20 0D 0A 54 68 69 73 20 69 +73 20 74 68 65 20 4D 43 4C 38 36 20 63 6F 72 65 +20 72 75 6E 6E 69 6E 67 20 6F 6E 20 74 68 65 20 +4C 61 74 74 69 63 65 20 58 4F 32 20 42 72 65 61 +6B 6F 75 74 20 42 6F 61 72 64 2E 0D 0A 20 20 20 +20 20 0D 0A 20 20 20 20 20 0D 0A 20 50 72 65 73 +73 3A 0D 0A 20 20 20 20 20 20 20 20 31 29 20 54 +75 72 6E 20 6F 6E 20 4C 45 44 73 0D 0A 20 20 20 +20 20 20 20 20 32 29 20 54 75 72 6E 20 6F 66 66 +20 4C 45 44 73 0D 0A 20 20 20 20 20 20 20 20 33 +29 20 50 72 69 6E 74 20 41 53 43 49 49 20 63 68 +61 72 61 63 74 65 72 73 0D 0A 20 20 20 20 20 20 +20 20 34 29 20 52 65 66 72 65 73 68 20 73 63 72 +65 65 6E 0D 0A 20 20 20 20 20 20 20 20 41 6C 6C +20 6F 74 68 65 72 20 6B 65 79 73 20 77 69 6C 6C +20 62 65 20 65 63 68 6F 65 64 20 62 61 63 6B 0D +0A 20 20 20 20 20 0D 0A 24 \ No newline at end of file diff --git a/MCL86/Core/Lattice_XO2_Small_Example/uart.v b/MCL86/Core/Lattice_XO2_Small_Example/uart.v new file mode 100644 index 0000000..82626dc --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/uart.v @@ -0,0 +1,277 @@ +// +// +// File Name : uart.v +// Used on : +// Author : Ted Fried, MicroCore Labs +// Creation : 3/1/16 +// Code Type : Synthesizable +// +// Description: +// ============ +// +// Fixed 9600 baud rate UART +// +// +//------------------------------------------------------------------------ +// +// Copyright (c) 2020 Ted Fried +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +//------------------------------------------------------------------------ + + +module uart + ( + input CLK, + input RESET_n, + + + input UART_RX, + output UART_TX, + output reg [7:0] LEDS, + + + + input [1:0] ADDRESS, + input [7:0] DATA_IN, + output [7:0] DATA_OUT, + input CS_n, + input WR_n + + + ); + +//------------------------------------------------------------------------ + + +// Internal Signals + +reg RX_STATE; +reg uart_rx_d; +reg uart_rx_d1; +reg uart_rx_d2; +reg bit_clk; +reg bit_clk_d; +reg rx_havebyte; +reg host_tx_go; +reg host_tx_go_d; +reg rx_byte_available; +reg [7:0] tx_byte; +reg [10:0] tx_count; +reg [10:0] tx_shift_out; +reg [8:0] rx_byte; +reg [11:0] rx_count; +reg [4:0] rx_bits; +reg [11:0] prescaler; +wire [1:0] uart_status; + + +//------------------------------------------------------------------------ +// +// Combinationals +// +//------------------------------------------------------------------------ + +assign UART_TX = tx_shift_out[0]; + +assign DATA_OUT = (ADDRESS==2'h0) ? rx_byte[7:0] : + (ADDRESS==2'h1) ? uart_status : + 8'hEE; + +assign uart_status[1] = (tx_count[9:0]==10'b0000000000) ? 1'b0 : 1'b1; // 1=TX_BUSY +assign uart_status[0] = rx_byte_available; + + +//------------------------------------------------------------------------ +// +// UART Controller +// +//------------------------------------------------------------------------ + +always @(posedge CLK) +begin : STATE_MACHINE + + if (RESET_n==1'b0) + begin + RX_STATE <= 'h0; + uart_rx_d <= 'h0; + uart_rx_d1 <= 'h0; + uart_rx_d2 <= 'h0; + bit_clk <= 'h0; + bit_clk_d <= 'h0; + prescaler <= 'h0; + rx_havebyte <= 'h0; + rx_count <= 'h0; + rx_byte <= 9'b1111_1111_1; + tx_shift_out <= 10'b1111111111; + tx_count <= 'h0; + host_tx_go <= 'h0; + host_tx_go_d <= 'h0; + tx_byte <= 8'hFF; + rx_byte_available <= 'h0; + rx_bits <= 'h0; + end + +else + begin + + +//------------------------------------------------------------------------ +// +// Host interface and prescaler +// +//------------------------------------------------------------------------ + +// Host +// Address: 0x0 - RO - RX_BYTE - reading clears the RX_HAS_BYTE bit +// 0x1 - RO - UART status [1]=TX_BUSY [0]=RX_HAS_BYTE +// 0x2 - WO - TX Byte - Automatically initiates the TX + + + + if (CS_n==1'b0 && WR_n==1'b0 && ADDRESS==2'h2) + begin + host_tx_go <= 1'b1; + tx_byte <= DATA_IN; + end + else + begin + host_tx_go <= 1'b0; + end + + + if (rx_havebyte==1'b1) + begin + rx_byte_available <= 1'b1; + end + else if (CS_n==1'b0 && ADDRESS==2'h0) + begin + rx_byte_available <= 1'b0; + end + + if (CS_n==1'b0 && WR_n==1'b0 && ADDRESS==2'h3) + begin + LEDS <= DATA_IN; + end + + + + if (prescaler[11:0]==12'hAD2) + begin + bit_clk <= ~ bit_clk; + prescaler <= 'h0; + end + else + begin + prescaler <= prescaler + 1; + end + + bit_clk_d <= bit_clk; + + +//------------------------------------------------------------------------ +// +// RX Controller +// +//------------------------------------------------------------------------ + + + uart_rx_d <= UART_RX; + uart_rx_d1 <= uart_rx_d; + uart_rx_d2 <= uart_rx_d1; + + + case (RX_STATE) // synthesis parallel_case + + 1'h0 : begin + // Debounce signals + rx_havebyte <= 1'b0; + rx_bits <= 'h0; + + // Look for start bit + if (uart_rx_d2==1'b0) + begin + rx_count <= rx_count +1; + end + + // Count half-way into the start bit + if (rx_count==12'h569) + begin + rx_count <= 'h0; + rx_byte <= 9'b1_11111111; + RX_STATE <= 1'h1; + end + end + + + 1'h1 : begin + rx_count <= rx_count + 1; + + // Count complete bit-times + if (rx_count==12'hAD2) + begin + rx_byte[8:0] <= { uart_rx_d2 , rx_byte[8:1] }; + rx_bits <= rx_bits + 1'b1; + rx_count <= 'h0; + end + + // Complete byte has been shifted in + if (rx_bits==4'h9) + begin + rx_havebyte <= 1'b1; + RX_STATE <= 1'h0; + end + end + + default : ; + endcase + + + +//------------------------------------------------------------------------ +// +// TX Controller +// +//------------------------------------------------------------------------ + + // Load transmit shifter on rising edge of host request + host_tx_go_d <= host_tx_go; + if (host_tx_go_d==1'b0 && host_tx_go==1'b1) + begin + tx_shift_out <= { 1'b1 , tx_byte , 1'b0 , 1'b1 }; + tx_count <= 11'b11111111111; + end + + // Otherwise shift out bits at each bit clock. + // When tx_count is all zeros tye byte has been sent. + else + begin + if (bit_clk_d != bit_clk) + begin + tx_shift_out[10:0] <= { 1'b1 , tx_shift_out[10:1] }; + tx_count[10:0] <= { 1'b0 , tx_count[10:1] }; + end + end + + + end +end + +endmodule diff --git a/MCL86/Core/Lattice_XO2_Small_Example/user_code.mem b/MCL86/Core/Lattice_XO2_Small_Example/user_code.mem new file mode 100644 index 0000000..31e75d5 --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/user_code.mem @@ -0,0 +1,2044 @@ +// Auto-generated by memint 03/04/2016 15:21:54 +#Format=Hex +#Depth=2048 +#Width=8 +#AddrRadix=3 +#DataRadix=3 +#Data +BE +68 +00 +BC +00 +06 +8C +C8 +8E +D8 +AC +3C +24 +74 +07 +8A +D8 +E8 +49 +00 +EB +F4 +E4 +01 +24 +01 +74 +FA +E4 +00 +8A +D8 +E8 +3A +00 +80 +FB +31 +74 +11 +80 +FB +32 +74 +12 +80 +FB +33 +74 +13 +80 +FB +34 +74 +C9 +EB +DD +B0 +00 +E6 +03 +EB +D7 +B0 +FF +E6 +03 +EB +D1 +B3 +21 +B9 +5C +00 +E8 +10 +00 +FE +C3 +E2 +F9 +B3 +0D +E8 +07 +00 +B3 +0A +E8 +02 +00 +EB +B9 +E4 +01 +24 +02 +75 +FA +8A +C3 +E6 +02 +C3 +1B +5B +32 +4A +1B +5B +48 +0D +0A +20 +5F +5F +20 +20 +5F +5F +20 +20 +5F +5F +5F +5F +5F +20 +5F +20 +20 +20 +20 +20 +20 +5F +5F +5F +20 +20 +20 +20 +5F +5F +20 +20 +0D +0A +7C +20 +20 +5C +2F +20 +20 +7C +2F +20 +5F +5F +5F +5F +7C +20 +7C +20 +20 +20 +20 +2F +20 +5F +20 +5C +20 +20 +2F +20 +2F +20 +20 +0D +0A +7C +20 +5C +20 +20 +2F +20 +7C +20 +7C +20 +20 +20 +20 +7C +20 +7C +20 +20 +20 +7C +20 +28 +5F +29 +20 +7C +2F +20 +2F +5F +20 +20 +0D +0A +7C +20 +7C +5C +2F +7C +20 +7C +20 +7C +20 +20 +20 +20 +7C +20 +7C +20 +20 +20 +20 +3E +20 +5F +20 +3C +7C +20 +27 +5F +20 +5C +20 +0D +0A +7C +20 +7C +20 +20 +7C +20 +7C +20 +7C +5F +5F +5F +5F +7C +20 +7C +5F +5F +5F +7C +20 +28 +5F +29 +20 +7C +20 +28 +5F +29 +20 +7C +0D +0A +7C +5F +7C +20 +20 +7C +5F +7C +5C +5F +5F +5F +5F +5F +7C +5F +5F +5F +5F +5F +5F +5C +5F +5F +5F +2F +20 +5C +5F +5F +5F +2F +20 +0D +0A +0D +0A +0D +0A +48 +65 +6C +6C +6F +20 +66 +72 +6F +6D +20 +4D +69 +63 +72 +6F +43 +6F +72 +65 +20 +4C +61 +62 +73 +20 +21 +21 +21 +0D +0A +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +2D +0D +0A +20 +20 +20 +0D +0A +54 +68 +69 +73 +20 +69 +73 +20 +74 +68 +65 +20 +4D +43 +4C +38 +36 +20 +63 +6F +72 +65 +20 +72 +75 +6E +6E +69 +6E +67 +20 +6F +6E +20 +74 +68 +65 +20 +4C +61 +74 +74 +69 +63 +65 +20 +58 +4F +32 +20 +42 +72 +65 +61 +6B +6F +75 +74 +20 +42 +6F +61 +72 +64 +2E +0D +0A +20 +20 +20 +20 +20 +0D +0A +20 +20 +20 +20 +20 +0D +0A +20 +50 +72 +65 +73 +73 +3A +0D +0A +20 +20 +20 +20 +20 +20 +20 +20 +31 +29 +20 +54 +75 +72 +6E +20 +6F +6E +20 +4C +45 +44 +73 +0D +0A +20 +20 +20 +20 +20 +20 +20 +20 +32 +29 +20 +54 +75 +72 +6E +20 +6F +66 +66 +20 +4C +45 +44 +73 +0D +0A +20 +20 +20 +20 +20 +20 +20 +20 +33 +29 +20 +50 +72 +69 +6E +74 +20 +41 +53 +43 +49 +49 +20 +63 +68 +61 +72 +61 +63 +74 +65 +72 +73 +0D +0A +20 +20 +20 +20 +20 +20 +20 +20 +34 +29 +20 +52 +65 +66 +72 +65 +73 +68 +20 +73 +63 +72 +65 +65 +6E +0D +0A +20 +20 +20 +20 +20 +20 +20 +20 +41 +6C +6C +20 +6F +74 +68 +65 +72 +20 +6B +65 +79 +73 +20 +77 +69 +6C +6C +20 +62 +65 +20 +65 +63 +68 +6F +65 +64 +20 +62 +61 +63 +6B +0D +0A +20 +20 +20 +20 +20 +0D +0A +24 +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 +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 +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 +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 +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 +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 +EA +00 +00 +00 +F0 diff --git a/MCL86/Core/Lattice_XO2_Small_Example/xo2x86.v b/MCL86/Core/Lattice_XO2_Small_Example/xo2x86.v new file mode 100644 index 0000000..20debde --- /dev/null +++ b/MCL86/Core/Lattice_XO2_Small_Example/xo2x86.v @@ -0,0 +1,175 @@ +// +// +// File Name : XO2x86.v +// Used on : +// Author : Ted Fried, MicroCore Labs +// Creation : 2/29/2016 +// Code Type : Synthesizable +// +// Description: +// ============ +// +// MCL86 ported to the Lattice XO2-7000 Breakout Board - Top Level +// +//------------------------------------------------------------------------ +// +// Modification History: +// ===================== +// +// Revision 1.0 3/3/15 +// Initial revision +// +// +//------------------------------------------------------------------------ +// +// Copyright (c) 2020 Ted Fried +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +//------------------------------------------------------------------------ + +`timescale 1ns/100ps + +module xo2x86 + ( + input RESET_n , + + input UART_RX, + output UART_TX, + + output [7:0] LEDS + + + ); + +//------------------------------------------------------------------------ + + +// Internal Signals + +wire clk_int; +wire t_eu_prefix_lock; +wire t_eu_flag_i; +wire t_pfq_empty; +wire t_biu_done; +wire [15:0] t_eu_biu_command; +wire [15:0] t_eu_biu_dataout; +wire [15:0] t_eu_register_r3; +wire [7:0] t_pfq_top_byte; +wire [15:0] t_pfq_addr_out; +wire [15:0] t_biu_register_es; +wire [15:0] t_biu_register_ss; +wire [15:0] t_biu_register_cs; +wire [15:0] t_biu_register_ds; +wire [15:0] t_biu_register_rm; +wire [15:0] t_biu_register_reg; +wire [15:0] t_biu_return_data; +wire [1:0] t_biu_segment; + + +//------------------------------------------------------------------------ +// GSR - Global Set/Reset for Lattice XO2 +// POR - Power On reset for Lattice XO2 +// OSCH - Internal clock oscillator for Lattice XO2 +//------------------------------------------------------------------------ + +GSR GSR_INST ( +.GSR (RESET_n) ); + + +PUR PUR_INST ( +.PUR (RESET_n) ); + + +defparam OSCILLATOR_INST.NOM_FREQ = "26.60"; +OSCH OSCILLATOR_INST + ( + .STDBY (1'b0), + .OSC (clk_int), + .SEDSTDBY () + ); + + + + + +//------------------------------------------------------------------------ +// BIU Core +//------------------------------------------------------------------------ +biu BIU_CORE + ( + .CORE_CLK_INT (clk_int), + .RESET_n (RESET_n), + .UART_RX (UART_RX), + .UART_TX (UART_TX), + .LEDS (LEDS), + .EU_BIU_COMMAND (t_eu_biu_command), + .EU_BIU_DATAOUT (t_eu_biu_dataout), + .EU_REGISTER_R3 (t_eu_register_r3), + .BIU_DONE (t_biu_done), + .BIU_SEGMENT (t_biu_segment), + .PFQ_TOP_BYTE (t_pfq_top_byte), + .PFQ_EMPTY (t_pfq_empty), + .PFQ_ADDR_OUT (t_pfq_addr_out), + .BIU_REGISTER_ES (t_biu_register_es), + .BIU_REGISTER_SS (t_biu_register_ss), + .BIU_REGISTER_CS (t_biu_register_cs), + .BIU_REGISTER_DS (t_biu_register_ds), + .BIU_REGISTER_RM (t_biu_register_rm), + .BIU_REGISTER_REG (t_biu_register_reg), + .BIU_RETURN_DATA (t_biu_return_data) + ); + + +//------------------------------------------------------------------------ +// EU Core +//------------------------------------------------------------------------ +mcl86_eu_core EU_CORE + ( + .CORE_CLK_INT (clk_int), + .RESET_n (RESET_n), + .TEST_N_INT (1'b1), + .EU_BIU_COMMAND (t_eu_biu_command), + .EU_BIU_DATAOUT (t_eu_biu_dataout), + .EU_REGISTER_R3 (t_eu_register_r3), + .EU_PREFIX_LOCK (t_eu_prefix_lock), + .EU_FLAG_I (t_eu_flag_i), + .BIU_DONE (t_biu_done), + .BIU_CLK_COUNTER_ZERO (1'b1), + .BIU_NMI_CAUGHT (1'b0), + .BIU_NMI_DEBOUNCE (), + .BIU_INTR (1'b0), + .PFQ_TOP_BYTE (t_pfq_top_byte), + .PFQ_EMPTY (t_pfq_empty), + .PFQ_ADDR_OUT (t_pfq_addr_out), + .BIU_REGISTER_ES (t_biu_register_es), + .BIU_REGISTER_SS (t_biu_register_ss), + .BIU_REGISTER_CS (t_biu_register_cs), + .BIU_REGISTER_DS (t_biu_register_ds), + .BIU_REGISTER_RM (t_biu_register_rm), + .BIU_REGISTER_REG (t_biu_register_reg), + .BIU_RETURN_DATA (t_biu_return_data) + ); + + + +endmodule + + +//------------------------------------------------------------------------