diff --git a/Commodore - 64_MiST/C64_mist.qsf b/Commodore - 64_MiST/C64_mist.qsf index 51757546..58e63505 100644 --- a/Commodore - 64_MiST/C64_mist.qsf +++ b/Commodore - 64_MiST/C64_mist.qsf @@ -41,9 +41,8 @@ # ======================== set_global_assignment -name ORIGINAL_QUARTUS_VERSION 13.1 set_global_assignment -name PROJECT_CREATION_TIME_DATE "21:40:24 MAY 17, 2014" -set_global_assignment -name LAST_QUARTUS_VERSION 13.1 +set_global_assignment -name LAST_QUARTUS_VERSION "13.0 SP1" set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files -set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL set_global_assignment -name SMART_RECOMPILE ON set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS ON @@ -312,59 +311,53 @@ set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to CONF_DATA0 # Incremental Compilation Assignments # =================================== -set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top -set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top -set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top # end DESIGN_PARTITION(Top) # ------------------------- # end ENTITY(C64_MiST) # ---------------------- +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top +set_global_assignment -name VERILOG_FILE rtl/1541/trkbuf.v +set_global_assignment -name VHDL_FILE rtl/1541/rom_C1541.vhd +set_global_assignment -name VHDL_FILE rtl/1541/c1541_sd.vhd +set_global_assignment -name VHDL_FILE rtl/1541/c1541_rom.vhd +set_global_assignment -name VHDL_FILE rtl/1541/c1541_logic.vhd set_global_assignment -name VHDL_FILE rtl/c64_mist.vhd -set_global_assignment -name VHDL_FILE rtl/sid/wave_map.vhd -set_global_assignment -name VHDL_FILE rtl/sid/sid_top.vhd -set_global_assignment -name VHDL_FILE rtl/sid/sid_regs.vhd -set_global_assignment -name VHDL_FILE rtl/sid/sid_mixer.vhd -set_global_assignment -name VHDL_FILE rtl/sid/sid_filter.vhd -set_global_assignment -name VHDL_FILE rtl/sid/sid_debug_pkg.vhd -set_global_assignment -name VHDL_FILE rtl/sid/sid_ctrl.vhd -set_global_assignment -name VHDL_FILE rtl/sid/Q_table.vhd -set_global_assignment -name VHDL_FILE rtl/sid/oscillator.vhd -set_global_assignment -name VHDL_FILE rtl/sid/my_math_pkg.vhd -set_global_assignment -name VHDL_FILE rtl/sid/mult_acc.vhd -set_global_assignment -name VHDL_FILE rtl/sid/adsr_multi.vhd +set_global_assignment -name VHDL_FILE rtl/fpga64_sid_iec.vhd set_global_assignment -name VHDL_FILE rtl/video_vicII_656x_e.vhd set_global_assignment -name VHDL_FILE rtl/video_vicII_656x_a.vhd -set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv -set_global_assignment -name VERILOG_FILE rtl/trkbuf.v -set_global_assignment -name VERILOG_FILE rtl/sigma_delta_dac.v -set_global_assignment -name VERILOG_FILE rtl/sdram.v -set_global_assignment -name SYSTEMVERILOG_FILE rtl/sd_card.sv -set_global_assignment -name VERILOG_FILE rtl/scandoubler.v -set_global_assignment -name VHDL_FILE rtl/rom_C1541.vhd -set_global_assignment -name VHDL_FILE rtl/rom_c64_chargen.vhd -set_global_assignment -name VHDL_FILE rtl/rom_C64.vhd -set_global_assignment -name VHDL_FILE rtl/pll.vhd -set_global_assignment -name VERILOG_FILE rtl/osd.v -set_global_assignment -name VERILOG_FILE rtl/mist_io.v -set_global_assignment -name VHDL_FILE rtl/m6522.vhd -set_global_assignment -name VHDL_FILE rtl/io_ps2_keyboard.vhd -set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv -set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd -set_global_assignment -name VHDL_FILE rtl/gcr_floppy.vhd -set_global_assignment -name VHDL_FILE rtl/fpga64_sid_iec.vhd set_global_assignment -name VHDL_FILE rtl/fpga64_rgbcolor.vhd set_global_assignment -name VHDL_FILE rtl/fpga64_keyboard_matrix_mark_mcdougall.vhd set_global_assignment -name VHDL_FILE rtl/fpga64_bustiming.vhd set_global_assignment -name VHDL_FILE rtl/fpga64_buslogic_roms_mmu.vhd set_global_assignment -name VHDL_FILE rtl/cpu65xx_fast.vhd set_global_assignment -name VHDL_FILE rtl/cpu65xx_e.vhd -set_global_assignment -name VHDL_FILE rtl/cpu_6510.vhd -set_global_assignment -name VHDL_FILE rtl/composite_sync.vhd set_global_assignment -name VHDL_FILE rtl/cia6526.vhd +set_global_assignment -name VHDL_FILE rtl/cpu_6510.vhd +set_global_assignment -name VHDL_FILE rtl/m6522.vhd set_global_assignment -name VERILOG_FILE rtl/cartridge.v -set_global_assignment -name VHDL_FILE rtl/c1541_sd.vhd -set_global_assignment -name VHDL_FILE rtl/c1541_logic.vhd +set_global_assignment -name VHDL_FILE rtl/rom_c64_chargen.vhd +set_global_assignment -name VHDL_FILE rtl/rom_C64.vhd set_global_assignment -name VHDL_FILE rtl/rom_GS64.vhd +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sid8580.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sid_voice.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sid_filters.sv +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sid_envelope.sv +set_global_assignment -name VERILOG_FILE rtl/sigma_delta_dac.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/video_mixer.sv +set_global_assignment -name VERILOG_FILE rtl/sdram.v +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sd_card.sv +set_global_assignment -name VERILOG_FILE rtl/scandoubler.v +set_global_assignment -name VHDL_FILE rtl/pll.vhd +set_global_assignment -name VERILOG_FILE rtl/osd.v +set_global_assignment -name VERILOG_FILE rtl/mist_io.v +set_global_assignment -name VHDL_FILE rtl/io_ps2_keyboard.vhd +set_global_assignment -name SYSTEMVERILOG_FILE rtl/hq2x.sv +set_global_assignment -name VHDL_FILE rtl/gen_ram.vhd +set_global_assignment -name VHDL_FILE rtl/composite_sync.vhd +set_global_assignment -name TEXT_FILE ../Text1.txt +set_global_assignment -name VHDL_FILE rtl/1541/gcr_floppy.vhd set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Commodore - 64_MiST/C64_mist.srf b/Commodore - 64_MiST/C64_mist.srf new file mode 100644 index 00000000..cf803e2f --- /dev/null +++ b/Commodore - 64_MiST/C64_mist.srf @@ -0,0 +1,6 @@ +{ "" "" "" "Verilog HDL macro warning at hq2x.sv(26): overriding existing definition for macro \"BITS_TO_FIT\", which was defined in \"rtl/scandoubler.v\", line 109" { } { } 0 10274 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "Verilog HDL warning at hq2x.sv(247): extended using \"x\" or \"z\"" { } { } 0 10273 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "Verilog HDL information at scandoubler.v(102): always construct contains both blocking and non-blocking assignments" { } { } 0 10268 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "2 hierarchies have connectivity warnings - see the Connectivity Checks report folder" { } { } 0 12241 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "*" { } { } 0 10230 "" 0 0 "Quartus II" 0 -1 0 ""} +{ "" "" "" "*" { } { } 0 332060 "" 0 0 "Quartus II" 0 -1 0 ""} diff --git a/Commodore - 64_MiST/release/C64GS_mist.rbf b/Commodore - 64_MiST/release/C64GS_mist.rbf index db2383f0..ecdced35 100644 Binary files a/Commodore - 64_MiST/release/C64GS_mist.rbf and b/Commodore - 64_MiST/release/C64GS_mist.rbf differ diff --git a/Commodore - 64_MiST/release/C64_mist.rbf b/Commodore - 64_MiST/release/C64_mist.rbf index 0a012e95..a096a81a 100644 Binary files a/Commodore - 64_MiST/release/C64_mist.rbf and b/Commodore - 64_MiST/release/C64_mist.rbf differ diff --git a/Commodore - 64_MiST/rtl/c1541_logic.vhd b/Commodore - 64_MiST/rtl/1541/c1541_logic.vhd similarity index 100% rename from Commodore - 64_MiST/rtl/c1541_logic.vhd rename to Commodore - 64_MiST/rtl/1541/c1541_logic.vhd diff --git a/Commodore - 64_MiST/rtl/1541/c1541_rom.vhd b/Commodore - 64_MiST/rtl/1541/c1541_rom.vhd new file mode 100644 index 00000000..173b81ab --- /dev/null +++ b/Commodore - 64_MiST/rtl/1541/c1541_rom.vhd @@ -0,0 +1,51 @@ +library ieee; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.ALL; +use IEEE.numeric_std.all; + +entity c1541_rom is + port + ( + wrclock : in std_logic; + wraddress : in std_logic_vector(13 downto 0); + data : in std_logic_vector(7 downto 0); + wren : in std_logic := '0'; + + rdclock : in std_logic; + rdaddress : in std_logic_vector(13 downto 0); + q : out std_logic_vector(7 downto 0) + ); + +end; + +architecture rtl of c1541_rom is + + subtype word_t is std_logic_vector(7 downto 0); + type memory_t is array(16383 downto 0) of word_t; + + shared variable ram : memory_t; + + attribute ram_init_file : string; + attribute ram_init_file of ram : variable is "c1541/c1541_rom.mif"; + +begin + + -- Port A + process(wrclock) + begin + if(rising_edge(wrclock)) then + if(wren = '1') then + ram(to_integer(unsigned(wraddress))) := data; + end if; + end if; + end process; + + -- Port B + process(rdclock) + begin + if(rising_edge(rdclock)) then + q <= ram(to_integer(unsigned(rdaddress))); + end if; + end process; + +end rtl; diff --git a/Commodore - 64_MiST/rtl/c1541_sd.vhd b/Commodore - 64_MiST/rtl/1541/c1541_sd.vhd similarity index 100% rename from Commodore - 64_MiST/rtl/c1541_sd.vhd rename to Commodore - 64_MiST/rtl/1541/c1541_sd.vhd diff --git a/Commodore - 64_MiST/rtl/gcr_floppy.vhd b/Commodore - 64_MiST/rtl/1541/gcr_floppy.vhd similarity index 100% rename from Commodore - 64_MiST/rtl/gcr_floppy.vhd rename to Commodore - 64_MiST/rtl/1541/gcr_floppy.vhd diff --git a/Commodore - 64_MiST/rtl/rom_C1541.vhd b/Commodore - 64_MiST/rtl/1541/rom_C1541.vhd similarity index 100% rename from Commodore - 64_MiST/rtl/rom_C1541.vhd rename to Commodore - 64_MiST/rtl/1541/rom_C1541.vhd diff --git a/Commodore - 64_MiST/rtl/trkbuf.v b/Commodore - 64_MiST/rtl/1541/trkbuf.v similarity index 100% rename from Commodore - 64_MiST/rtl/trkbuf.v rename to Commodore - 64_MiST/rtl/1541/trkbuf.v diff --git a/Commodore - 64_MiST/rtl/c1541/c1541.qip b/Commodore - 64_MiST/rtl/c1541/c1541.qip new file mode 100644 index 00000000..77129bd0 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/c1541.qip @@ -0,0 +1,18 @@ +set_global_assignment -name VHDL_FILE c1541/cpu/shifter.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/proc_registers.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/proc_interrupt.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/proc_control.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/pkg_6502_opcodes.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/pkg_6502_defs.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/pkg_6502_decode.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/implied.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/data_oper.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/bit_cpx_cpy.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/alu.vhd +set_global_assignment -name VHDL_FILE c1541/cpu/proc_core.vhd +set_global_assignment -name VHDL_FILE c1541/c1541_via6522.vhd +set_global_assignment -name VHDL_FILE c1541/c1541_rom.vhd +set_global_assignment -name VHDL_FILE c1541/gcr_floppy.vhd +set_global_assignment -name SYSTEMVERILOG_FILE c1541/c1541_track.sv +set_global_assignment -name VHDL_FILE c1541/c1541_logic.vhd +set_global_assignment -name VHDL_FILE c1541/c1541_sd.vhd diff --git a/Commodore - 64_MiST/rtl/c1541/c1541_logic.vhd b/Commodore - 64_MiST/rtl/c1541/c1541_logic.vhd new file mode 100644 index 00000000..98ea7151 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/c1541_logic.vhd @@ -0,0 +1,301 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.numeric_std.all; + +-- +-- Model 1541B +-- +entity c1541_logic is +port +( + clk_32M : in std_logic; + reset : in std_logic; + + -- serial bus + sb_data_oe : out std_logic; + sb_data_in : in std_logic; + sb_clk_oe : out std_logic; + sb_clk_in : in std_logic; + sb_atn_in : in std_logic; + + c1541rom_clk : in std_logic; + c1541rom_addr : in std_logic_vector(13 downto 0); + c1541rom_data : in std_logic_vector(7 downto 0); + c1541rom_wr : in std_logic; + + -- drive-side interface + ds : in std_logic_vector(1 downto 0); -- device select + di : in std_logic_vector(7 downto 0); -- disk read data + do : out std_logic_vector(7 downto 0); -- disk write data + mode : out std_logic; -- read/write + stp : out std_logic_vector(1 downto 0); -- stepper motor control + mtr : out std_logic; -- stepper motor on/off + freq : out std_logic_vector(1 downto 0); -- motor frequency + sync_n : in std_logic; -- reading SYNC bytes + byte_n : in std_logic; -- byte ready + wps_n : in std_logic; -- write-protect sense + tr00_sense_n : in std_logic; -- track 0 sense (unused?) + act : out std_logic -- activity LED +); +end c1541_logic; + +architecture SYN of c1541_logic is + + -- clocks + signal p2_h_r : std_logic; + signal p2_h_f : std_logic; + + -- cpu signals + signal cpu_a : std_logic_vector(16 downto 0); + signal cpu_di : std_logic_vector(7 downto 0); + signal cpu_do : std_logic_vector(7 downto 0); + signal cpu_rw : std_logic; + signal cpu_irq_n : std_logic; + signal cpu_so_n : std_logic; + + -- rom signals + signal rom_cs : std_logic; + signal rom_do : std_logic_vector(cpu_di'range); + + -- ram signals + signal ram_cs : std_logic; + signal ram_wr : std_logic; + signal ram_do : std_logic_vector(cpu_di'range); + + -- UC1 (VIA6522) signals + signal uc1_do : std_logic_vector(7 downto 0); + signal uc1_cs : std_logic; + signal uc1_irq_n : std_logic; + signal uc1_pa_i : std_logic_vector(7 downto 0) := (others => '0'); + signal uc1_pb_i : std_logic_vector(7 downto 0) := (others => '0'); + signal uc1_pb_o : std_logic_vector(7 downto 0); + signal uc1_pb_oe_n : std_logic_vector(7 downto 0); + + -- UC3 (VIA6522) signals + signal uc3_do : std_logic_vector(7 downto 0); + signal uc3_cs : std_logic; + signal uc3_irq_n : std_logic; + signal uc3_ca1_i : std_logic; + signal uc3_ca2_o : std_logic; + signal uc3_ca2_oe_n : std_logic; + signal uc3_pa_i : std_logic_vector(7 downto 0); + signal uc3_pa_o : std_logic_vector(7 downto 0); + signal uc3_cb2_o : std_logic; + signal uc3_cb2_oe_n : std_logic; + signal uc3_pa_oe_n : std_logic_vector(7 downto 0); + signal uc3_pb_i : std_logic_vector(7 downto 0); + signal uc3_pb_o : std_logic_vector(7 downto 0); + signal uc3_pb_oe_n : std_logic_vector(7 downto 0); + + -- internal signals + signal atna : std_logic; -- ATN ACK - input gate array + signal atn : std_logic; -- attention + signal soe : std_logic; -- set overflow enable + + type t_byte_array is array(2047 downto 0) of std_logic_vector(7 downto 0); + signal ram : t_byte_array; + + signal sb_data : std_logic; + signal sb_clk : std_logic; + + signal iec_atn_d1 : std_logic; + signal iec_data_d1 : std_logic; + signal iec_clk_d1 : std_logic; + signal iec_atn_d2 : std_logic; + signal iec_data_d2 : std_logic; + signal iec_clk_d2 : std_logic; + signal iec_atn : std_logic; + signal iec_data : std_logic; + signal iec_clk : std_logic; + +begin + process (clk_32M) begin + if rising_edge(clk_32M) then + iec_atn_d1 <=sb_atn_in; + iec_atn_d2 <=iec_atn_d1; + iec_atn <=iec_atn_d2; + + iec_data_d1<=sb_data_in; + iec_data_d2<=iec_data_d1; + iec_data <=iec_data_d2; + + iec_clk_d1 <=sb_clk_in; + iec_clk_d2 <=iec_clk_d1; + iec_clk <=iec_clk_d2; + end if; + end process; + + process (clk_32M, reset) + variable count : std_logic_vector(4 downto 0) := (others => '0'); + begin + if rising_edge(clk_32M) then + count := std_logic_vector(unsigned(count) + 1); + + p2_h_r <= '0'; if count = "00000" then p2_h_r <= '1'; end if; + p2_h_f <= '0'; if count = "10000" then p2_h_f <= '1'; end if; + end if; + end process; + + -- decode logic + ram_cs <= '1' when STD_MATCH(cpu_a(15 downto 0), "00000-----------") else '0'; -- RAM $0000-$07FF (2KB) + uc1_cs <= '1' when STD_MATCH(cpu_a(15 downto 0), "000110000000----") else '0'; -- UC1 $1800-$180F + uc3_cs <= '1' when STD_MATCH(cpu_a(15 downto 0), "000111000000----") else '0'; -- UC3 $1C00-$1C0F + rom_cs <= '1' when STD_MATCH(cpu_a(15 downto 0), "11--------------") else '0'; -- ROM $C000-$FFFF (16KB) + + -- qualified write signals + ram_wr <= '1' when ram_cs = '1' and cpu_rw = '0' else '0'; + + -- + -- hook up UC1 ports + -- + sb_data <= (uc1_pb_o(1) and not uc1_pb_oe_n(1)) or atn; + sb_clk <= uc1_pb_o(3) and not uc1_pb_oe_n(3); + atna <= uc1_pb_o(4); + + uc1_pa_i(0) <= tr00_sense_n; + uc1_pb_i(0) <= not iec_data or sb_data; + uc1_pb_i(2) <= not iec_clk or sb_clk; + uc1_pb_i(7) <= not iec_atn; + uc1_pb_i(6 downto 5) <= ds; + + sb_data_oe <= sb_data; + sb_clk_oe <= sb_clk; + + -- + -- hook up UC3 ports + -- + uc3_ca1_i <= cpu_so_n; -- byte ready gated with soe + soe <= uc3_ca2_o or uc3_ca2_oe_n; + uc3_pa_i <= di; + do <= uc3_pa_o or uc3_pa_oe_n; + mode <= uc3_cb2_o or uc3_cb2_oe_n; + + stp(1) <= uc3_pb_o(0) or uc3_pb_oe_n(0); + stp(0) <= uc3_pb_o(1) or uc3_pb_oe_n(1); + mtr <= uc3_pb_o(2) or uc3_pb_oe_n(2); + act <= uc3_pb_o(3) or uc3_pb_oe_n(3); + freq <= uc3_pb_o(6 downto 5) or uc3_pb_oe_n(6 downto 5); + uc3_pb_i <= sync_n & "11" & wps_n & "1111"; + + -- + -- CPU connections + -- + cpu_di <= rom_do when rom_cs = '1' else + ram_do when ram_cs = '1' else + uc1_do when uc1_cs = '1' else + uc3_do when uc3_cs = '1' else + (others => '1'); + + cpu_irq_n <= uc1_irq_n and uc3_irq_n; + cpu_so_n <= byte_n or not soe; + + -- internal connections + atn <= atna xor (not sb_atn_in); + + cpu: work.proc_core + port map( + reset => reset, + clock_en => p2_h_f, + clock => clk_32M, + so_n => cpu_so_n, + irq_n => cpu_irq_n, + read_write_n => cpu_rw, + addr_out => cpu_a, + data_in => cpu_di, + data_out => cpu_do + ); + + rom_inst: entity work.C1541_rom + port map ( + wrclock => c1541rom_clk, + + wren => c1541rom_wr, + data => c1541rom_data, + wraddress => c1541rom_addr, + + rdclock => clk_32M, + rdaddress => cpu_a(13 downto 0), + q => rom_do + ); + + process (clk_32M) + begin + if rising_edge(clk_32M) then + ram_do <= ram(to_integer(unsigned(cpu_a(13 downto 0)))); + if ram_wr = '1' then + ram(to_integer(unsigned(cpu_a(13 downto 0)))) <= cpu_do; + end if; + end if; + end process; + + uc1_via6522_inst : entity work.c1541_via6522 + port map + ( + addr => cpu_a(3 downto 0), + data_in => cpu_do, + data_out => uc1_do, + + ren => cpu_rw and uc1_cs, + wen => not cpu_rw and uc1_cs, + + irq_l => uc1_irq_n, + + -- port a + ca1_i => not sb_atn_in, + ca2_i => '0', + + port_a_i => uc1_pa_i, + + -- port b + cb1_i => '0', + cb2_i => '0', + + port_b_i => uc1_pb_i, + port_b_o => uc1_pb_o, + port_b_t_l => uc1_pb_oe_n, + + reset => reset, + clock => clk_32M, + rising => p2_h_r, + falling => p2_h_f + ); + + uc3_via6522_inst : entity work.c1541_via6522 + port map + ( + addr => cpu_a(3 downto 0), + data_in => cpu_do, + data_out => uc3_do, + + ren => cpu_rw and uc3_cs, + wen => not cpu_rw and uc3_cs, + + irq_l => uc3_irq_n, + + -- port a + ca1_i => uc3_ca1_i, + ca2_i => '0', + ca2_o => uc3_ca2_o, + ca2_t_l => uc3_ca2_oe_n, + + port_a_i => uc3_pa_i, + port_a_o => uc3_pa_o, + port_a_t_l => uc3_pa_oe_n, + + -- port b + cb1_i => '0', + cb2_i => '0', + cb2_o => uc3_cb2_o, + cb2_t_l => uc3_cb2_oe_n, + + port_b_i => uc3_pb_i, + port_b_o => uc3_pb_o, + port_b_t_l => uc3_pb_oe_n, + + reset => reset, + clock => clk_32M, + rising => p2_h_r, + falling => p2_h_f + ); + +end SYN; diff --git a/Commodore - 64_MiST/rtl/c1541/c1541_rom.mif b/Commodore - 64_MiST/rtl/c1541/c1541_rom.mif new file mode 100644 index 00000000..d0d3cf05 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/c1541_rom.mif @@ -0,0 +1,15762 @@ +-- Copyright (C) 1991-2014 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- Quartus II generated Memory Initialization File (.mif) + +WIDTH=8; +DEPTH=16384; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 0000 : 97; + [0001..00FF] : AA; + 0100 : 78; + 0101 : A9; + 0102 : F7; + 0103 : 2D; + 0104 : 00; + 0105 : 1C; + 0106 : 48; + 0107 : A5; + 0108 : 7F; + 0109 : F0; + 010A : 05; + 010B : 68; + 010C : 09; + 010D : 00; + 010E : D0; + 010F : 03; + 0110 : 68; + 0111 : 09; + 0112 : 08; + 0113 : 8D; + 0114 : 00; + 0115 : 1C; + 0116 : 58; + 0117 : 60; + 0118 : 78; + 0119 : A9; + 011A : 08; + 011B : 0D; + 011C : 00; + 011D : 1C; + 011E : 8D; + 011F : 00; + 0120 : 1C; + 0121 : 58; + 0122 : 60; + 0123 : A9; + 0124 : 00; + 0125 : 8D; + 0126 : 6C; + 0127 : 02; + 0128 : 8D; + 0129 : 6D; + 012A : 02; + 012B : 60; + 012C : 78; + 012D : 8A; + 012E : 48; + 012F : A9; + 0130 : 50; + 0131 : 8D; + 0132 : 6C; + 0133 : 02; + 0134 : A2; + 0135 : 00; + 0136 : BD; + 0137 : CA; + 0138 : FE; + 0139 : 8D; + 013A : 6D; + 013B : 02; + 013C : 0D; + 013D : 00; + 013E : 1C; + 013F : 8D; + 0140 : 00; + 0141 : 1C; + 0142 : 68; + 0143 : AA; + 0144 : 58; + 0145 : 60; + 0146 : A9; + 0147 : 00; + 0148 : 8D; + 0149 : F9; + 014A : 02; + 014B : AD; + 014C : 8E; + 014D : 02; + 014E : 85; + 014F : 7F; + 0150 : 20; + 0151 : BC; + 0152 : E6; + 0153 : A5; + 0154 : 84; + 0155 : 10; + 0156 : 09; + 0157 : 29; + 0158 : 0F; + 0159 : C9; + 015A : 0F; + 015B : F0; + 015C : 03; + 015D : 4C; + 015E : B4; + 015F : D7; + 0160 : 20; + 0161 : B3; + 0162 : C2; + 0163 : B1; + 0164 : A3; + 0165 : 8D; + 0166 : 75; + 0167 : 02; + 0168 : A2; + 0169 : 0B; + 016A : BD; + 016B : 89; + 016C : FE; + 016D : CD; + 016E : 75; + 016F : 02; + 0170 : F0; + 0171 : 08; + 0172 : CA; + 0173 : 10; + 0174 : F5; + 0175 : A9; + 0176 : 31; + 0177 : 4C; + 0178 : C8; + 0179 : C1; + 017A : 8E; + 017B : 2A; + 017C : 02; + 017D : E0; + 017E : 09; + 017F : 90; + 0180 : 03; + 0181 : 20; + 0182 : EE; + 0183 : C1; + 0184 : AE; + 0185 : 2A; + 0186 : 02; + 0187 : BD; + 0188 : 95; + 0189 : FE; + 018A : 85; + 018B : 6F; + 018C : BD; + 018D : A1; + 018E : FE; + 018F : 85; + 0190 : 70; + 0191 : 6C; + 0192 : 6F; + 0193 : 00; + 0194 : A9; + 0195 : 00; + 0196 : 8D; + 0197 : F9; + 0198 : 02; + 0199 : AD; + 019A : 6C; + 019B : 02; + 019C : D0; + 019D : 2A; + 019E : A0; + 019F : 00; + 01A0 : 98; + 01A1 : 84; + 01A2 : 80; + 01A3 : 84; + 01A4 : 81; + 01A5 : 84; + 01A6 : A3; + 01A7 : 20; + 01A8 : C7; + 01A9 : E6; + 01AA : 20; + 01AB : 23; + 01AC : C1; + 01AD : A5; + 01AE : 7F; + 01AF : 8D; + 01B0 : 8E; + 01B1 : 02; + 01B2 : AA; + 01B3 : A9; + 01B4 : 00; + 01B5 : 95; + 01B6 : FF; + 01B7 : 20; + 01B8 : BD; + 01B9 : C1; + 01BA : 4C; + 01BB : DA; + 01BC : D4; + 01BD : A0; + 01BE : 28; + 01BF : A9; + 01C0 : 00; + 01C1 : 99; + 01C2 : 00; + 01C3 : 02; + 01C4 : 88; + 01C5 : 10; + 01C6 : FA; + 01C7 : 60; + 01C8 : A0; + 01C9 : 00; + 01CA : 84; + 01CB : 80; + 01CC : 84; + 01CD : 81; + 01CE : 4C; + 01CF : 45; + 01D0 : E6; + 01D1 : A2; + 01D2 : 00; + 01D3 : 8E; + 01D4 : 7A; + 01D5 : 02; + 01D6 : A9; + 01D7 : 3A; + 01D8 : 20; + 01D9 : 68; + 01DA : C2; + 01DB : F0; + 01DC : 05; + [01DD..01DE] : 88; + 01DF : 8C; + 01E0 : 7A; + 01E1 : 02; + 01E2 : 4C; + 01E3 : 68; + 01E4 : C3; + 01E5 : A0; + 01E6 : 00; + 01E7 : A2; + 01E8 : 00; + 01E9 : A9; + 01EA : 3A; + 01EB : 4C; + 01EC : 68; + 01ED : C2; + 01EE : 20; + 01EF : E5; + 01F0 : C1; + 01F1 : D0; + 01F2 : 05; + 01F3 : A9; + 01F4 : 34; + 01F5 : 4C; + 01F6 : C8; + 01F7 : C1; + [01F8..01F9] : 88; + 01FA : 8C; + 01FB : 7A; + 01FC : 02; + 01FD : 8A; + 01FE : D0; + 01FF : F3; + 0200 : A9; + 0201 : 3D; + 0202 : 20; + 0203 : 68; + 0204 : C2; + 0205 : 8A; + 0206 : F0; + 0207 : 02; + 0208 : A9; + 0209 : 40; + 020A : 09; + 020B : 21; + 020C : 8D; + 020D : 8B; + 020E : 02; + 020F : E8; + 0210 : 8E; + 0211 : 77; + 0212 : 02; + 0213 : 8E; + 0214 : 78; + 0215 : 02; + 0216 : AD; + 0217 : 8A; + 0218 : 02; + 0219 : F0; + 021A : 0D; + 021B : A9; + 021C : 80; + 021D : 0D; + 021E : 8B; + 021F : 02; + 0220 : 8D; + 0221 : 8B; + 0222 : 02; + 0223 : A9; + 0224 : 00; + 0225 : 8D; + 0226 : 8A; + 0227 : 02; + 0228 : 98; + 0229 : F0; + 022A : 29; + 022B : 9D; + 022C : 7A; + 022D : 02; + 022E : AD; + 022F : 77; + 0230 : 02; + 0231 : 8D; + 0232 : 79; + 0233 : 02; + 0234 : A9; + 0235 : 8D; + 0236 : 20; + 0237 : 68; + 0238 : C2; + 0239 : E8; + 023A : 8E; + 023B : 78; + 023C : 02; + 023D : CA; + 023E : AD; + 023F : 8A; + 0240 : 02; + 0241 : F0; + 0242 : 02; + 0243 : A9; + 0244 : 08; + 0245 : EC; + 0246 : 77; + 0247 : 02; + 0248 : F0; + 0249 : 02; + 024A : 09; + 024B : 04; + 024C : 09; + 024D : 03; + 024E : 4D; + 024F : 8B; + 0250 : 02; + 0251 : 8D; + 0252 : 8B; + 0253 : 02; + 0254 : AD; + 0255 : 8B; + 0256 : 02; + 0257 : AE; + 0258 : 2A; + 0259 : 02; + 025A : 3D; + 025B : A5; + 025C : FE; + 025D : D0; + 025E : 01; + 025F : 60; + 0260 : 8D; + 0261 : 6C; + 0262 : 02; + 0263 : A9; + 0264 : 30; + 0265 : 4C; + 0266 : C8; + 0267 : C1; + 0268 : 8D; + 0269 : 75; + 026A : 02; + 026B : CC; + 026C : 74; + 026D : 02; + 026E : B0; + 026F : 2E; + 0270 : B1; + 0271 : A3; + 0272 : C8; + 0273 : CD; + 0274 : 75; + 0275 : 02; + 0276 : F0; + 0277 : 28; + 0278 : C9; + 0279 : 2A; + 027A : F0; + 027B : 04; + 027C : C9; + 027D : 3F; + 027E : D0; + 027F : 03; + 0280 : EE; + 0281 : 8A; + 0282 : 02; + 0283 : C9; + 0284 : 2C; + 0285 : D0; + 0286 : E4; + 0287 : 98; + 0288 : 9D; + 0289 : 7B; + 028A : 02; + 028B : AD; + 028C : 8A; + 028D : 02; + 028E : 29; + 028F : 7F; + 0290 : F0; + 0291 : 07; + 0292 : A9; + 0293 : 80; + 0294 : 95; + 0295 : E7; + 0296 : 8D; + 0297 : 8A; + 0298 : 02; + 0299 : E8; + 029A : E0; + 029B : 04; + 029C : 90; + 029D : CD; + 029E : A0; + 029F : 00; + 02A0 : AD; + 02A1 : 74; + 02A2 : 02; + 02A3 : 9D; + 02A4 : 7B; + 02A5 : 02; + 02A6 : AD; + 02A7 : 8A; + 02A8 : 02; + 02A9 : 29; + 02AA : 7F; + 02AB : F0; + 02AC : 04; + 02AD : A9; + 02AE : 80; + 02AF : 95; + 02B0 : E7; + 02B1 : 98; + 02B2 : 60; + 02B3 : A4; + 02B4 : A3; + 02B5 : F0; + 02B6 : 14; + 02B7 : 88; + 02B8 : F0; + 02B9 : 10; + 02BA : B9; + 02BB : 00; + 02BC : 02; + 02BD : C9; + 02BE : 0D; + 02BF : F0; + 02C0 : 0A; + 02C1 : 88; + 02C2 : B9; + 02C3 : 00; + 02C4 : 02; + 02C5 : C9; + 02C6 : 0D; + 02C7 : F0; + 02C8 : 02; + [02C9..02CA] : C8; + 02CB : 8C; + 02CC : 74; + 02CD : 02; + 02CE : C0; + 02CF : 2A; + 02D0 : A0; + 02D1 : FF; + 02D2 : 90; + 02D3 : 08; + 02D4 : 8C; + 02D5 : 2A; + 02D6 : 02; + 02D7 : A9; + 02D8 : 32; + 02D9 : 4C; + 02DA : C8; + 02DB : C1; + 02DC : A0; + 02DD : 00; + 02DE : 98; + 02DF : 85; + 02E0 : A3; + 02E1 : 8D; + 02E2 : 58; + 02E3 : 02; + 02E4 : 8D; + 02E5 : 4A; + 02E6 : 02; + 02E7 : 8D; + 02E8 : 96; + 02E9 : 02; + 02EA : 85; + 02EB : D3; + 02EC : 8D; + 02ED : 79; + 02EE : 02; + 02EF : 8D; + 02F0 : 77; + 02F1 : 02; + 02F2 : 8D; + 02F3 : 78; + 02F4 : 02; + 02F5 : 8D; + 02F6 : 8A; + 02F7 : 02; + 02F8 : 8D; + 02F9 : 6C; + 02FA : 02; + 02FB : A2; + 02FC : 05; + 02FD : 9D; + 02FE : 79; + 02FF : 02; + 0300 : 95; + 0301 : D7; + 0302 : 95; + 0303 : DC; + 0304 : 95; + 0305 : E1; + 0306 : 95; + 0307 : E6; + 0308 : 9D; + 0309 : 7F; + 030A : 02; + 030B : 9D; + 030C : 84; + 030D : 02; + 030E : CA; + 030F : D0; + 0310 : EC; + 0311 : 60; + 0312 : AD; + 0313 : 78; + 0314 : 02; + 0315 : 8D; + 0316 : 77; + 0317 : 02; + 0318 : A9; + 0319 : 01; + 031A : 8D; + 031B : 78; + 031C : 02; + 031D : 8D; + 031E : 79; + 031F : 02; + 0320 : AC; + 0321 : 8E; + 0322 : 02; + 0323 : A2; + 0324 : 00; + 0325 : 86; + 0326 : D3; + 0327 : BD; + 0328 : 7A; + 0329 : 02; + 032A : 20; + 032B : 3C; + 032C : C3; + 032D : A6; + 032E : D3; + 032F : 9D; + 0330 : 7A; + 0331 : 02; + 0332 : 98; + 0333 : 95; + 0334 : E2; + 0335 : E8; + 0336 : EC; + 0337 : 78; + 0338 : 02; + 0339 : 90; + 033A : EA; + 033B : 60; + 033C : AA; + 033D : A0; + 033E : 00; + 033F : A9; + 0340 : 3A; + 0341 : DD; + 0342 : 01; + 0343 : 02; + 0344 : F0; + 0345 : 0C; + 0346 : DD; + 0347 : 00; + 0348 : 02; + 0349 : D0; + 034A : 16; + 034B : E8; + 034C : 98; + 034D : 29; + 034E : 01; + 034F : A8; + 0350 : 8A; + 0351 : 60; + 0352 : BD; + 0353 : 00; + 0354 : 02; + [0355..0356] : E8; + 0357 : C9; + 0358 : 30; + 0359 : F0; + 035A : F2; + 035B : C9; + 035C : 31; + 035D : F0; + 035E : EE; + 035F : D0; + 0360 : EB; + 0361 : 98; + 0362 : 09; + 0363 : 80; + 0364 : 29; + 0365 : 81; + 0366 : D0; + 0367 : E7; + 0368 : A9; + 0369 : 00; + 036A : 8D; + 036B : 8B; + 036C : 02; + 036D : AC; + 036E : 7A; + 036F : 02; + 0370 : B1; + 0371 : A3; + 0372 : 20; + 0373 : BD; + 0374 : C3; + 0375 : 10; + 0376 : 11; + 0377 : C8; + 0378 : CC; + 0379 : 74; + 037A : 02; + 037B : B0; + 037C : 06; + 037D : AC; + 037E : 74; + 037F : 02; + 0380 : 88; + 0381 : D0; + 0382 : ED; + 0383 : CE; + 0384 : 8B; + 0385 : 02; + 0386 : A9; + 0387 : 00; + 0388 : 29; + 0389 : 01; + 038A : 85; + 038B : 7F; + 038C : 4C; + 038D : 00; + 038E : C1; + 038F : A5; + 0390 : 7F; + 0391 : 49; + 0392 : 01; + 0393 : 29; + 0394 : 01; + 0395 : 85; + 0396 : 7F; + 0397 : 60; + 0398 : A0; + 0399 : 00; + 039A : AD; + 039B : 77; + 039C : 02; + 039D : CD; + 039E : 78; + 039F : 02; + 03A0 : F0; + 03A1 : 16; + 03A2 : CE; + 03A3 : 78; + 03A4 : 02; + 03A5 : AC; + 03A6 : 78; + 03A7 : 02; + 03A8 : B9; + 03A9 : 7A; + 03AA : 02; + 03AB : A8; + 03AC : B1; + 03AD : A3; + 03AE : A0; + 03AF : 04; + 03B0 : D9; + 03B1 : BB; + 03B2 : FE; + 03B3 : F0; + 03B4 : 03; + 03B5 : 88; + 03B6 : D0; + 03B7 : F8; + 03B8 : 98; + 03B9 : 8D; + 03BA : 96; + 03BB : 02; + 03BC : 60; + 03BD : C9; + 03BE : 30; + 03BF : F0; + 03C0 : 06; + 03C1 : C9; + 03C2 : 31; + 03C3 : F0; + 03C4 : 02; + 03C5 : 09; + 03C6 : 80; + 03C7 : 29; + 03C8 : 81; + 03C9 : 60; + 03CA : A9; + 03CB : 00; + 03CC : 85; + 03CD : 6F; + [03CE..03CF] : 8D; + 03D0 : 02; + 03D1 : 48; + 03D2 : AE; + 03D3 : 78; + 03D4 : 02; + 03D5 : 68; + 03D6 : 05; + 03D7 : 6F; + 03D8 : 48; + 03D9 : A9; + 03DA : 01; + 03DB : 85; + 03DC : 6F; + 03DD : CA; + 03DE : 30; + 03DF : 0F; + 03E0 : B5; + 03E1 : E2; + 03E2 : 10; + 03E3 : 04; + 03E4 : 06; + 03E5 : 6F; + 03E6 : 06; + 03E7 : 6F; + 03E8 : 4A; + 03E9 : 90; + 03EA : EA; + 03EB : 06; + 03EC : 6F; + 03ED : D0; + 03EE : E6; + 03EF : 68; + 03F0 : AA; + 03F1 : BD; + 03F2 : 3F; + 03F3 : C4; + 03F4 : 48; + 03F5 : 29; + 03F6 : 03; + 03F7 : 8D; + 03F8 : 8C; + 03F9 : 02; + 03FA : 68; + 03FB : 0A; + 03FC : 10; + 03FD : 3E; + 03FE : A5; + 03FF : E2; + 0400 : 29; + 0401 : 01; + 0402 : 85; + 0403 : 7F; + 0404 : AD; + 0405 : 8C; + 0406 : 02; + 0407 : F0; + 0408 : 2B; + 0409 : 20; + 040A : 3D; + 040B : C6; + 040C : F0; + 040D : 12; + 040E : 20; + 040F : 8F; + 0410 : C3; + 0411 : A9; + 0412 : 00; + 0413 : 8D; + 0414 : 8C; + 0415 : 02; + 0416 : 20; + 0417 : 3D; + 0418 : C6; + 0419 : F0; + 041A : 1E; + 041B : A9; + 041C : 74; + 041D : 20; + 041E : C8; + 041F : C1; + 0420 : 20; + 0421 : 8F; + 0422 : C3; + 0423 : 20; + 0424 : 3D; + 0425 : C6; + 0426 : 08; + 0427 : 20; + 0428 : 8F; + 0429 : C3; + 042A : 28; + 042B : F0; + 042C : 0C; + 042D : A9; + 042E : 00; + 042F : 8D; + 0430 : 8C; + 0431 : 02; + 0432 : F0; + 0433 : 05; + 0434 : 20; + 0435 : 3D; + 0436 : C6; + 0437 : D0; + 0438 : E2; + 0439 : 4C; + 043A : 00; + 043B : C1; + 043C : 2A; + 043D : 4C; + 043E : 00; + 043F : C4; + 0440 : 00; + 0441 : 80; + 0442 : 41; + [0443..0446] : 01; + [0447..044A] : 81; + [044B..044E] : 42; + 044F : 20; + 0450 : CA; + 0451 : C3; + 0452 : A9; + 0453 : 00; + 0454 : 8D; + 0455 : 92; + 0456 : 02; + 0457 : 20; + 0458 : AC; + 0459 : C5; + 045A : D0; + 045B : 19; + 045C : CE; + 045D : 8C; + 045E : 02; + 045F : 10; + 0460 : 01; + 0461 : 60; + 0462 : A9; + 0463 : 01; + [0464..0465] : 8D; + 0466 : 02; + 0467 : 20; + 0468 : 8F; + 0469 : C3; + 046A : 20; + 046B : 00; + 046C : C1; + 046D : 4C; + 046E : 52; + 046F : C4; + 0470 : 20; + 0471 : 17; + 0472 : C6; + 0473 : F0; + 0474 : 10; + 0475 : 20; + 0476 : D8; + 0477 : C4; + 0478 : AD; + 0479 : 8F; + 047A : 02; + 047B : F0; + 047C : 01; + 047D : 60; + 047E : AD; + 047F : 53; + 0480 : 02; + 0481 : 30; + 0482 : ED; + 0483 : 10; + 0484 : F0; + 0485 : AD; + 0486 : 8F; + 0487 : 02; + 0488 : F0; + 0489 : D2; + 048A : 60; + 048B : 20; + 048C : 04; + 048D : C6; + 048E : F0; + 048F : 1A; + 0490 : D0; + 0491 : 28; + 0492 : A9; + 0493 : 01; + [0494..0495] : 8D; + 0496 : 02; + 0497 : 20; + 0498 : 8F; + 0499 : C3; + 049A : 20; + 049B : 00; + 049C : C1; + 049D : A9; + 049E : 00; + 049F : 8D; + 04A0 : 92; + 04A1 : 02; + 04A2 : 20; + 04A3 : AC; + 04A4 : C5; + 04A5 : D0; + 04A6 : 13; + 04A7 : 8D; + 04A8 : 8F; + 04A9 : 02; + 04AA : AD; + 04AB : 8F; + 04AC : 02; + 04AD : D0; + 04AE : 28; + 04AF : CE; + 04B0 : 8C; + 04B1 : 02; + 04B2 : 10; + 04B3 : DE; + 04B4 : 60; + 04B5 : 20; + 04B6 : 17; + 04B7 : C6; + [04B8..04B9] : F0; + 04BA : 20; + 04BB : D8; + 04BC : C4; + 04BD : AE; + 04BE : 53; + 04BF : 02; + 04C0 : 10; + 04C1 : 07; + 04C2 : AD; + 04C3 : 8F; + 04C4 : 02; + 04C5 : F0; + 04C6 : EE; + 04C7 : D0; + 04C8 : 0E; + 04C9 : AD; + 04CA : 96; + 04CB : 02; + 04CC : F0; + 04CD : 09; + 04CE : B5; + 04CF : E7; + 04D0 : 29; + 04D1 : 07; + 04D2 : CD; + 04D3 : 96; + 04D4 : 02; + 04D5 : D0; + 04D6 : DE; + 04D7 : 60; + 04D8 : A2; + 04D9 : FF; + 04DA : 8E; + 04DB : 53; + 04DC : 02; + 04DD : E8; + 04DE : 8E; + 04DF : 8A; + 04E0 : 02; + 04E1 : 20; + 04E2 : 89; + 04E3 : C5; + 04E4 : F0; + 04E5 : 06; + 04E6 : 60; + 04E7 : 20; + 04E8 : 94; + 04E9 : C5; + 04EA : D0; + 04EB : FA; + 04EC : A5; + 04ED : 7F; + 04EE : 55; + 04EF : E2; + 04F0 : 4A; + 04F1 : 90; + 04F2 : 0B; + 04F3 : 29; + 04F4 : 40; + [04F5..04F6] : F0; + 04F7 : A9; + 04F8 : 02; + 04F9 : CD; + 04FA : 8C; + 04FB : 02; + 04FC : F0; + 04FD : E9; + 04FE : BD; + 04FF : 7A; + 0500 : 02; + 0501 : AA; + 0502 : 20; + 0503 : A6; + 0504 : C6; + 0505 : A0; + 0506 : 03; + 0507 : 4C; + 0508 : 1D; + 0509 : C5; + 050A : BD; + 050B : 00; + 050C : 02; + 050D : D1; + 050E : 94; + 050F : F0; + 0510 : 0A; + 0511 : C9; + 0512 : 3F; + 0513 : D0; + 0514 : D2; + 0515 : B1; + 0516 : 94; + 0517 : C9; + 0518 : A0; + 0519 : F0; + 051A : CC; + 051B : E8; + 051C : C8; + 051D : EC; + 051E : 76; + 051F : 02; + 0520 : B0; + 0521 : 09; + 0522 : BD; + 0523 : 00; + 0524 : 02; + 0525 : C9; + 0526 : 2A; + 0527 : F0; + 0528 : 0C; + 0529 : D0; + 052A : DF; + 052B : C0; + 052C : 13; + 052D : B0; + 052E : 06; + 052F : B1; + 0530 : 94; + 0531 : C9; + 0532 : A0; + 0533 : D0; + 0534 : B2; + 0535 : AE; + 0536 : 79; + 0537 : 02; + 0538 : 8E; + 0539 : 53; + 053A : 02; + 053B : B5; + 053C : E7; + 053D : 29; + 053E : 80; + 053F : 8D; + 0540 : 8A; + 0541 : 02; + 0542 : AD; + 0543 : 94; + 0544 : 02; + 0545 : 95; + 0546 : DD; + 0547 : A5; + 0548 : 81; + 0549 : 95; + 054A : D8; + 054B : A0; + 054C : 00; + 054D : B1; + 054E : 94; + 054F : C8; + 0550 : 48; + 0551 : 29; + 0552 : 40; + 0553 : 85; + 0554 : 6F; + 0555 : 68; + 0556 : 29; + 0557 : DF; + 0558 : 30; + 0559 : 02; + 055A : 09; + 055B : 20; + 055C : 29; + 055D : 27; + 055E : 05; + 055F : 6F; + 0560 : 85; + 0561 : 6F; + 0562 : A9; + 0563 : 80; + 0564 : 35; + 0565 : E7; + 0566 : 05; + 0567 : 6F; + 0568 : 95; + 0569 : E7; + 056A : B5; + 056B : E2; + 056C : 29; + 056D : 80; + 056E : 05; + 056F : 7F; + 0570 : 95; + 0571 : E2; + 0572 : B1; + 0573 : 94; + 0574 : 9D; + 0575 : 80; + 0576 : 02; + 0577 : C8; + 0578 : B1; + 0579 : 94; + 057A : 9D; + 057B : 85; + 057C : 02; + 057D : AD; + 057E : 58; + 057F : 02; + 0580 : D0; + 0581 : 07; + 0582 : A0; + 0583 : 15; + 0584 : B1; + 0585 : 94; + 0586 : 8D; + 0587 : 58; + 0588 : 02; + 0589 : A9; + 058A : FF; + 058B : 8D; + 058C : 8F; + 058D : 02; + 058E : AD; + 058F : 78; + 0590 : 02; + 0591 : 8D; + 0592 : 79; + 0593 : 02; + 0594 : CE; + 0595 : 79; + 0596 : 02; + 0597 : 10; + 0598 : 01; + 0599 : 60; + 059A : AE; + 059B : 79; + 059C : 02; + 059D : B5; + 059E : E7; + 059F : 30; + 05A0 : 05; + 05A1 : BD; + 05A2 : 80; + 05A3 : 02; + 05A4 : D0; + 05A5 : EE; + 05A6 : A9; + 05A7 : 00; + 05A8 : 8D; + 05A9 : 8F; + 05AA : 02; + 05AB : 60; + 05AC : A0; + 05AD : 00; + 05AE : 8C; + 05AF : 91; + 05B0 : 02; + 05B1 : 88; + 05B2 : 8C; + 05B3 : 53; + 05B4 : 02; + 05B5 : AD; + 05B6 : 85; + 05B7 : FE; + 05B8 : 85; + 05B9 : 80; + 05BA : A9; + 05BB : 01; + 05BC : 85; + 05BD : 81; + 05BE : 8D; + 05BF : 93; + 05C0 : 02; + 05C1 : 20; + 05C2 : 75; + 05C3 : D4; + 05C4 : AD; + 05C5 : 93; + 05C6 : 02; + 05C7 : D0; + 05C8 : 01; + 05C9 : 60; + 05CA : A9; + 05CB : 07; + 05CC : 8D; + 05CD : 95; + 05CE : 02; + 05CF : A9; + 05D0 : 00; + 05D1 : 20; + 05D2 : F6; + 05D3 : D4; + 05D4 : 8D; + 05D5 : 93; + 05D6 : 02; + 05D7 : 20; + 05D8 : E8; + 05D9 : D4; + 05DA : CE; + 05DB : 95; + 05DC : 02; + 05DD : A0; + 05DE : 00; + 05DF : B1; + 05E0 : 94; + 05E1 : D0; + 05E2 : 18; + 05E3 : AD; + 05E4 : 91; + 05E5 : 02; + 05E6 : D0; + 05E7 : 2F; + 05E8 : 20; + 05E9 : 3B; + 05EA : DE; + 05EB : A5; + 05EC : 81; + 05ED : 8D; + 05EE : 91; + 05EF : 02; + 05F0 : A5; + 05F1 : 94; + 05F2 : AE; + 05F3 : 92; + 05F4 : 02; + 05F5 : 8D; + 05F6 : 92; + 05F7 : 02; + 05F8 : F0; + 05F9 : 1D; + 05FA : 60; + 05FB : A2; + 05FC : 01; + 05FD : EC; + 05FE : 92; + 05FF : 02; + 0600 : D0; + 0601 : 2D; + 0602 : F0; + 0603 : 13; + 0604 : AD; + 0605 : 85; + 0606 : FE; + 0607 : 85; + 0608 : 80; + 0609 : AD; + 060A : 90; + 060B : 02; + 060C : 85; + 060D : 81; + 060E : 20; + 060F : 75; + 0610 : D4; + 0611 : AD; + 0612 : 94; + 0613 : 02; + 0614 : 20; + 0615 : C8; + 0616 : D4; + 0617 : A9; + 0618 : FF; + 0619 : 8D; + 061A : 53; + 061B : 02; + 061C : AD; + 061D : 95; + 061E : 02; + 061F : 30; + 0620 : 08; + 0621 : A9; + [0622..0623] : 20; + 0624 : C6; + 0625 : D1; + 0626 : 4C; + 0627 : D7; + 0628 : C5; + 0629 : 20; + 062A : 4D; + 062B : D4; + 062C : 4C; + 062D : C4; + 062E : C5; + 062F : A5; + 0630 : 94; + 0631 : 8D; + 0632 : 94; + 0633 : 02; + 0634 : 20; + 0635 : 3B; + 0636 : DE; + 0637 : A5; + 0638 : 81; + 0639 : 8D; + 063A : 90; + 063B : 02; + 063C : 60; + 063D : A5; + 063E : 68; + 063F : D0; + 0640 : 28; + 0641 : A6; + 0642 : 7F; + 0643 : 56; + 0644 : 1C; + 0645 : 90; + 0646 : 22; + 0647 : A9; + 0648 : FF; + 0649 : 8D; + 064A : 98; + 064B : 02; + 064C : 20; + 064D : 0E; + 064E : D0; + 064F : A0; + 0650 : FF; + 0651 : C9; + 0652 : 02; + 0653 : F0; + 0654 : 0A; + 0655 : C9; + 0656 : 03; + 0657 : F0; + 0658 : 06; + 0659 : C9; + 065A : 0F; + 065B : F0; + 065C : 02; + 065D : A0; + 065E : 00; + 065F : A6; + 0660 : 7F; + 0661 : 98; + 0662 : 95; + 0663 : FF; + 0664 : D0; + 0665 : 03; + 0666 : 20; + 0667 : 42; + 0668 : D0; + 0669 : A6; + 066A : 7F; + 066B : B5; + 066C : FF; + 066D : 60; + 066E : 48; + 066F : 20; + 0670 : A6; + 0671 : C6; + 0672 : 20; + 0673 : 88; + 0674 : C6; + 0675 : 68; + 0676 : 38; + 0677 : ED; + 0678 : 4B; + 0679 : 02; + 067A : AA; + 067B : F0; + 067C : 0A; + 067D : 90; + 067E : 08; + 067F : A9; + 0680 : A0; + 0681 : 91; + 0682 : 94; + 0683 : C8; + 0684 : CA; + 0685 : D0; + 0686 : FA; + 0687 : 60; + 0688 : 98; + 0689 : 0A; + 068A : A8; + 068B : B9; + 068C : 99; + 068D : 00; + 068E : 85; + 068F : 94; + 0690 : B9; + 0691 : 9A; + 0692 : 00; + 0693 : 85; + 0694 : 95; + 0695 : A0; + 0696 : 00; + 0697 : BD; + 0698 : 00; + 0699 : 02; + 069A : 91; + 069B : 94; + 069C : C8; + 069D : F0; + 069E : 06; + 069F : E8; + 06A0 : EC; + 06A1 : 76; + 06A2 : 02; + 06A3 : 90; + 06A4 : F2; + 06A5 : 60; + 06A6 : A9; + 06A7 : 00; + 06A8 : 8D; + 06A9 : 4B; + 06AA : 02; + 06AB : 8A; + 06AC : 48; + 06AD : BD; + 06AE : 00; + 06AF : 02; + 06B0 : C9; + 06B1 : 2C; + 06B2 : F0; + 06B3 : 14; + 06B4 : C9; + 06B5 : 3D; + 06B6 : F0; + 06B7 : 10; + 06B8 : EE; + 06B9 : 4B; + 06BA : 02; + 06BB : E8; + 06BC : A9; + 06BD : 0F; + 06BE : CD; + 06BF : 4B; + 06C0 : 02; + 06C1 : 90; + 06C2 : 05; + 06C3 : EC; + 06C4 : 74; + 06C5 : 02; + 06C6 : 90; + 06C7 : E5; + 06C8 : 8E; + 06C9 : 76; + 06CA : 02; + 06CB : 68; + 06CC : AA; + 06CD : 60; + 06CE : A5; + 06CF : 83; + 06D0 : 48; + 06D1 : A5; + 06D2 : 82; + 06D3 : 48; + 06D4 : 20; + 06D5 : DE; + 06D6 : C6; + 06D7 : 68; + 06D8 : 85; + 06D9 : 82; + 06DA : 68; + 06DB : 85; + 06DC : 83; + 06DD : 60; + 06DE : A9; + 06DF : 11; + 06E0 : 85; + 06E1 : 83; + 06E2 : 20; + 06E3 : EB; + 06E4 : D0; + 06E5 : 20; + 06E6 : E8; + 06E7 : D4; + 06E8 : AD; + 06E9 : 53; + 06EA : 02; + 06EB : 10; + 06EC : 0A; + 06ED : AD; + 06EE : 8D; + 06EF : 02; + 06F0 : D0; + 06F1 : 0A; + 06F2 : 20; + 06F3 : 06; + 06F4 : C8; + 06F5 : 18; + 06F6 : 60; + 06F7 : AD; + 06F8 : 8D; + 06F9 : 02; + 06FA : F0; + 06FB : 1F; + 06FC : CE; + 06FD : 8D; + 06FE : 02; + 06FF : D0; + 0700 : 0D; + 0701 : CE; + 0702 : 8D; + 0703 : 02; + 0704 : 20; + 0705 : 8F; + 0706 : C3; + 0707 : 20; + 0708 : 06; + 0709 : C8; + 070A : 38; + 070B : 4C; + 070C : 8F; + 070D : C3; + 070E : A9; + 070F : 00; + 0710 : 8D; + 0711 : 73; + 0712 : 02; + [0713..0714] : 8D; + 0715 : 02; + 0716 : 20; + 0717 : B7; + 0718 : C7; + 0719 : 38; + 071A : 60; + 071B : A2; + 071C : 18; + 071D : A0; + 071E : 1D; + 071F : B1; + 0720 : 94; + 0721 : 8D; + 0722 : 73; + 0723 : 02; + 0724 : F0; + 0725 : 02; + 0726 : A2; + 0727 : 16; + 0728 : 88; + 0729 : B1; + 072A : 94; + 072B : 8D; + 072C : 72; + 072D : 02; + 072E : E0; + 072F : 16; + 0730 : F0; + 0731 : 0A; + 0732 : C9; + 0733 : 0A; + 0734 : 90; + 0735 : 06; + 0736 : CA; + 0737 : C9; + 0738 : 64; + 0739 : 90; + 073A : 01; + 073B : CA; + 073C : 20; + 073D : AC; + 073E : C7; + 073F : B1; + 0740 : 94; + 0741 : 48; + 0742 : 0A; + 0743 : 10; + 0744 : 05; + 0745 : A9; + 0746 : 3C; + 0747 : 9D; + 0748 : B2; + 0749 : 02; + 074A : 68; + 074B : 29; + 074C : 0F; + 074D : A8; + 074E : B9; + 074F : C5; + 0750 : FE; + 0751 : 9D; + 0752 : B1; + 0753 : 02; + 0754 : CA; + 0755 : B9; + 0756 : C0; + 0757 : FE; + 0758 : 9D; + 0759 : B1; + 075A : 02; + 075B : CA; + 075C : B9; + 075D : BB; + 075E : FE; + 075F : 9D; + 0760 : B1; + 0761 : 02; + [0762..0763] : CA; + 0764 : B0; + 0765 : 05; + 0766 : A9; + 0767 : 2A; + 0768 : 9D; + 0769 : B2; + 076A : 02; + 076B : A9; + 076C : A0; + 076D : 9D; + 076E : B1; + 076F : 02; + 0770 : CA; + 0771 : A0; + 0772 : 12; + 0773 : B1; + 0774 : 94; + 0775 : 9D; + 0776 : B1; + 0777 : 02; + 0778 : CA; + 0779 : 88; + 077A : C0; + 077B : 03; + 077C : B0; + 077D : F5; + 077E : A9; + 077F : 22; + 0780 : 9D; + 0781 : B1; + 0782 : 02; + 0783 : E8; + 0784 : E0; + 0785 : 20; + 0786 : B0; + 0787 : 0B; + 0788 : BD; + 0789 : B1; + 078A : 02; + 078B : C9; + 078C : 22; + 078D : F0; + 078E : 04; + 078F : C9; + 0790 : A0; + 0791 : D0; + 0792 : F0; + 0793 : A9; + 0794 : 22; + 0795 : 9D; + 0796 : B1; + 0797 : 02; + 0798 : E8; + 0799 : E0; + 079A : 20; + 079B : B0; + 079C : 0A; + 079D : A9; + 079E : 7F; + 079F : 3D; + 07A0 : B1; + 07A1 : 02; + 07A2 : 9D; + 07A3 : B1; + 07A4 : 02; + 07A5 : 10; + 07A6 : F1; + 07A7 : 20; + 07A8 : B5; + 07A9 : C4; + 07AA : 38; + 07AB : 60; + 07AC : A0; + 07AD : 1B; + 07AE : A9; + 07AF : 20; + 07B0 : 99; + 07B1 : B0; + 07B2 : 02; + 07B3 : 88; + 07B4 : D0; + 07B5 : FA; + 07B6 : 60; + 07B7 : 20; + 07B8 : 19; + 07B9 : F1; + 07BA : 20; + 07BB : DF; + 07BC : F0; + 07BD : 20; + 07BE : AC; + 07BF : C7; + 07C0 : A9; + 07C1 : FF; + 07C2 : 85; + 07C3 : 6F; + 07C4 : A6; + 07C5 : 7F; + 07C6 : 8E; + 07C7 : 72; + 07C8 : 02; + 07C9 : A9; + 07CA : 00; + 07CB : 8D; + 07CC : 73; + 07CD : 02; + 07CE : A6; + 07CF : F9; + 07D0 : BD; + 07D1 : E0; + 07D2 : FE; + 07D3 : 85; + 07D4 : 95; + 07D5 : AD; + 07D6 : 88; + 07D7 : FE; + 07D8 : 85; + 07D9 : 94; + 07DA : A0; + 07DB : 16; + 07DC : B1; + 07DD : 94; + 07DE : C9; + 07DF : A0; + 07E0 : D0; + 07E1 : 0B; + 07E2 : A9; + 07E3 : 31; + 07E4 : 2C; + 07E5 : B1; + 07E6 : 94; + 07E7 : C9; + 07E8 : A0; + 07E9 : D0; + 07EA : 02; + 07EB : A9; + 07EC : 20; + 07ED : 99; + 07EE : B3; + 07EF : 02; + 07F0 : 88; + 07F1 : 10; + 07F2 : F2; + 07F3 : A9; + 07F4 : 12; + 07F5 : 8D; + 07F6 : B1; + 07F7 : 02; + 07F8 : A9; + 07F9 : 22; + 07FA : 8D; + 07FB : B2; + 07FC : 02; + 07FD : 8D; + 07FE : C3; + 07FF : 02; + 0800 : A9; + 0801 : 20; + 0802 : 8D; + 0803 : C4; + 0804 : 02; + 0805 : 60; + 0806 : 20; + 0807 : AC; + 0808 : C7; + 0809 : A0; + 080A : 0B; + 080B : B9; + 080C : 17; + 080D : C8; + 080E : 99; + 080F : B1; + 0810 : 02; + 0811 : 88; + 0812 : 10; + 0813 : F7; + 0814 : 4C; + 0815 : 4D; + 0816 : EF; + 0817 : 42; + 0818 : 4C; + 0819 : 4F; + 081A : 43; + 081B : 4B; + 081C : 53; + 081D : 20; + 081E : 46; + 081F : 52; + [0820..0821] : 45; + 0822 : 2E; + 0823 : 20; + 0824 : 98; + 0825 : C3; + [0826..0827] : 20; + 0828 : C3; + 0829 : 20; + 082A : CA; + 082B : C3; + 082C : A9; + 082D : 00; + 082E : 85; + 082F : 86; + 0830 : 20; + 0831 : 9D; + 0832 : C4; + 0833 : 30; + 0834 : 3D; + 0835 : 20; + 0836 : B7; + 0837 : DD; + 0838 : 90; + 0839 : 33; + 083A : A0; + 083B : 00; + 083C : B1; + 083D : 94; + 083E : 29; + 083F : 40; + 0840 : D0; + 0841 : 2B; + 0842 : 20; + 0843 : B6; + 0844 : C8; + 0845 : A0; + 0846 : 13; + 0847 : B1; + 0848 : 94; + 0849 : F0; + 084A : 0A; + 084B : 85; + 084C : 80; + 084D : C8; + 084E : B1; + 084F : 94; + 0850 : 85; + 0851 : 81; + 0852 : 20; + 0853 : 7D; + 0854 : C8; + 0855 : AE; + 0856 : 53; + 0857 : 02; + 0858 : A9; + 0859 : 20; + 085A : 35; + 085B : E7; + 085C : D0; + 085D : 0D; + 085E : BD; + 085F : 80; + 0860 : 02; + 0861 : 85; + 0862 : 80; + 0863 : BD; + 0864 : 85; + 0865 : 02; + 0866 : 85; + 0867 : 81; + 0868 : 20; + 0869 : 7D; + 086A : C8; + 086B : E6; + 086C : 86; + 086D : 20; + 086E : 8B; + 086F : C4; + 0870 : 10; + 0871 : C3; + 0872 : A5; + 0873 : 86; + 0874 : 85; + 0875 : 80; + 0876 : A9; + 0877 : 01; + 0878 : A0; + 0879 : 00; + 087A : 4C; + 087B : A3; + 087C : C1; + 087D : 20; + 087E : 5F; + 087F : EF; + 0880 : 20; + 0881 : 75; + 0882 : D4; + 0883 : 20; + 0884 : 19; + 0885 : F1; + 0886 : B5; + 0887 : A7; + 0888 : C9; + 0889 : FF; + 088A : F0; + 088B : 08; + 088C : AD; + 088D : F9; + 088E : 02; + 088F : 09; + 0890 : 40; + 0891 : 8D; + 0892 : F9; + 0893 : 02; + 0894 : A9; + 0895 : 00; + 0896 : 20; + 0897 : C8; + 0898 : D4; + 0899 : 20; + 089A : 56; + 089B : D1; + 089C : 85; + 089D : 80; + 089E : 20; + 089F : 56; + 08A0 : D1; + 08A1 : 85; + 08A2 : 81; + 08A3 : A5; + 08A4 : 80; + 08A5 : D0; + 08A6 : 06; + 08A7 : 20; + 08A8 : F4; + 08A9 : EE; + 08AA : 4C; + 08AB : 27; + 08AC : D2; + 08AD : 20; + 08AE : 5F; + 08AF : EF; + 08B0 : 20; + 08B1 : 4D; + 08B2 : D4; + 08B3 : 4C; + 08B4 : 94; + 08B5 : C8; + 08B6 : A0; + 08B7 : 00; + 08B8 : 98; + 08B9 : 91; + 08BA : 94; + 08BB : 20; + 08BC : 5E; + 08BD : DE; + 08BE : 4C; + 08BF : 99; + 08C0 : D5; + 08C1 : A9; + 08C2 : 31; + 08C3 : 4C; + 08C4 : C8; + 08C5 : C1; + 08C6 : A9; + 08C7 : 4C; + 08C8 : 8D; + 08C9 : 00; + 08CA : 06; + 08CB : A9; + 08CC : C7; + 08CD : 8D; + 08CE : 01; + 08CF : 06; + 08D0 : A9; + 08D1 : FA; + 08D2 : 8D; + 08D3 : 02; + 08D4 : 06; + 08D5 : A9; + 08D6 : 03; + 08D7 : 20; + 08D8 : D3; + 08D9 : D6; + 08DA : A5; + 08DB : 7F; + 08DC : 09; + 08DD : E0; + 08DE : 85; + 08DF : 03; + 08E0 : A5; + 08E1 : 03; + 08E2 : 30; + 08E3 : FC; + 08E4 : C9; + 08E5 : 02; + 08E6 : 90; + 08E7 : 07; + 08E8 : A9; + 08E9 : 03; + 08EA : A2; + 08EB : 00; + 08EC : 4C; + 08ED : 0A; + 08EE : E6; + 08EF : 60; + 08F0 : A9; + 08F1 : E0; + 08F2 : 8D; + 08F3 : 4F; + 08F4 : 02; + 08F5 : 20; + 08F6 : D1; + 08F7 : F0; + 08F8 : 20; + 08F9 : 19; + 08FA : F1; + 08FB : A9; + 08FC : FF; + 08FD : 95; + 08FE : A7; + 08FF : A9; + 0900 : 0F; + 0901 : 8D; + 0902 : 56; + 0903 : 02; + 0904 : 20; + 0905 : E5; + 0906 : C1; + 0907 : D0; + 0908 : 03; + 0909 : 4C; + 090A : C1; + 090B : C8; + 090C : 20; + 090D : F8; + 090E : C1; + [090F..0910] : 20; + 0911 : C3; + 0912 : AD; + 0913 : 8B; + 0914 : 02; + 0915 : 29; + 0916 : 55; + 0917 : D0; + 0918 : 0F; + 0919 : AE; + 091A : 7A; + 091B : 02; + 091C : BD; + 091D : 00; + 091E : 02; + 091F : C9; + 0920 : 2A; + 0921 : D0; + 0922 : 05; + 0923 : A9; + 0924 : 30; + 0925 : 4C; + 0926 : C8; + 0927 : C1; + 0928 : AD; + 0929 : 8B; + 092A : 02; + 092B : 29; + 092C : D9; + 092D : D0; + 092E : F4; + 092F : 4C; + 0930 : 52; + 0931 : C9; + 0932 : A9; + 0933 : 00; + 0934 : 8D; + 0935 : 58; + 0936 : 02; + 0937 : 8D; + 0938 : 8C; + 0939 : 02; + 093A : 8D; + 093B : 80; + 093C : 02; + 093D : 8D; + 093E : 81; + 093F : 02; + 0940 : A5; + 0941 : E3; + 0942 : 29; + 0943 : 01; + 0944 : 85; + 0945 : 7F; + 0946 : 09; + 0947 : 01; + 0948 : 8D; + 0949 : 91; + 094A : 02; + 094B : AD; + 094C : 7B; + 094D : 02; + 094E : 8D; + 094F : 7A; + 0950 : 02; + 0951 : 60; + 0952 : 20; + 0953 : 4F; + 0954 : C4; + 0955 : AD; + 0956 : 78; + 0957 : 02; + 0958 : C9; + 0959 : 03; + 095A : 90; + 095B : 45; + 095C : A5; + 095D : E2; + 095E : C5; + 095F : E3; + 0960 : D0; + 0961 : 3F; + 0962 : A5; + 0963 : DD; + 0964 : C5; + 0965 : DE; + 0966 : D0; + 0967 : 39; + 0968 : A5; + 0969 : D8; + 096A : C5; + 096B : D9; + 096C : D0; + 096D : 33; + 096E : 20; + 096F : CC; + 0970 : CA; + 0971 : A9; + 0972 : 01; + 0973 : 8D; + 0974 : 79; + 0975 : 02; + 0976 : 20; + 0977 : FA; + 0978 : C9; + 0979 : 20; + 097A : 25; + 097B : D1; + 097C : F0; + 097D : 04; + 097E : C9; + 097F : 02; + 0980 : D0; + 0981 : 05; + 0982 : A9; + 0983 : 64; + 0984 : 20; + 0985 : C8; + 0986 : C1; + 0987 : A9; + 0988 : 12; + 0989 : 85; + 098A : 83; + 098B : AD; + 098C : 3C; + 098D : 02; + 098E : 8D; + 098F : 3D; + 0990 : 02; + 0991 : A9; + 0992 : FF; + 0993 : 8D; + 0994 : 3C; + 0995 : 02; + 0996 : 20; + 0997 : 2A; + 0998 : DA; + 0999 : A2; + 099A : 02; + 099B : 20; + 099C : B9; + 099D : C9; + 099E : 4C; + 099F : 94; + 09A0 : C1; + 09A1 : 20; + 09A2 : A7; + 09A3 : C9; + 09A4 : 4C; + 09A5 : 94; + 09A6 : C1; + 09A7 : 20; + 09A8 : E7; + 09A9 : CA; + 09AA : A5; + 09AB : E2; + 09AC : 29; + 09AD : 01; + 09AE : 85; + 09AF : 7F; + 09B0 : 20; + 09B1 : 86; + 09B2 : D4; + 09B3 : 20; + 09B4 : E4; + 09B5 : D6; + 09B6 : AE; + 09B7 : 77; + 09B8 : 02; + 09B9 : 8E; + 09BA : 79; + 09BB : 02; + 09BC : 20; + 09BD : FA; + 09BE : C9; + 09BF : A9; + 09C0 : 11; + 09C1 : 85; + 09C2 : 83; + 09C3 : 20; + 09C4 : EB; + 09C5 : D0; + 09C6 : 20; + 09C7 : 25; + 09C8 : D1; + 09C9 : D0; + 09CA : 03; + 09CB : 20; + 09CC : 53; + 09CD : CA; + 09CE : A9; + 09CF : 08; + 09D0 : 85; + 09D1 : F8; + 09D2 : 4C; + 09D3 : D8; + 09D4 : C9; + 09D5 : 20; + 09D6 : 9B; + 09D7 : CF; + 09D8 : 20; + 09D9 : 35; + 09DA : CA; + 09DB : A9; + 09DC : 80; + 09DD : 20; + 09DE : A6; + 09DF : DD; + 09E0 : F0; + 09E1 : F3; + 09E2 : 20; + 09E3 : 25; + 09E4 : D1; + 09E5 : F0; + 09E6 : 03; + 09E7 : 20; + 09E8 : 9B; + 09E9 : CF; + 09EA : AE; + 09EB : 79; + 09EC : 02; + 09ED : E8; + 09EE : EC; + 09EF : 78; + 09F0 : 02; + 09F1 : 90; + 09F2 : C6; + 09F3 : A9; + 09F4 : 12; + 09F5 : 85; + 09F6 : 83; + 09F7 : 4C; + 09F8 : 02; + 09F9 : DB; + 09FA : AE; + 09FB : 79; + 09FC : 02; + 09FD : B5; + 09FE : E2; + 09FF : 29; + 0A00 : 01; + 0A01 : 85; + 0A02 : 7F; + 0A03 : AD; + 0A04 : 85; + 0A05 : FE; + 0A06 : 85; + 0A07 : 80; + 0A08 : B5; + 0A09 : D8; + 0A0A : 85; + 0A0B : 81; + 0A0C : 20; + 0A0D : 75; + 0A0E : D4; + 0A0F : AE; + 0A10 : 79; + 0A11 : 02; + 0A12 : B5; + 0A13 : DD; + 0A14 : 20; + 0A15 : C8; + 0A16 : D4; + 0A17 : AE; + 0A18 : 79; + 0A19 : 02; + 0A1A : B5; + 0A1B : E7; + 0A1C : 29; + 0A1D : 07; + 0A1E : 8D; + 0A1F : 4A; + 0A20 : 02; + 0A21 : A9; + 0A22 : 00; + 0A23 : 8D; + 0A24 : 58; + 0A25 : 02; + 0A26 : 20; + 0A27 : A0; + 0A28 : D9; + 0A29 : A0; + 0A2A : 01; + 0A2B : 20; + 0A2C : 25; + 0A2D : D1; + 0A2E : F0; + 0A2F : 01; + 0A30 : C8; + 0A31 : 98; + 0A32 : 4C; + 0A33 : C8; + 0A34 : D4; + 0A35 : A9; + 0A36 : 11; + 0A37 : 85; + 0A38 : 83; + 0A39 : 20; + 0A3A : 9B; + 0A3B : D3; + [0A3C..0A3D] : 85; + 0A3E : A6; + 0A3F : 82; + 0A40 : B5; + 0A41 : F2; + 0A42 : 29; + 0A43 : 08; + 0A44 : 85; + 0A45 : F8; + 0A46 : D0; + 0A47 : 0A; + 0A48 : 20; + 0A49 : 25; + 0A4A : D1; + 0A4B : F0; + 0A4C : 05; + 0A4D : A9; + 0A4E : 80; + 0A4F : 20; + 0A50 : 97; + 0A51 : DD; + 0A52 : 60; + 0A53 : 20; + 0A54 : D3; + 0A55 : D1; + 0A56 : 20; + 0A57 : CB; + 0A58 : E1; + 0A59 : A5; + 0A5A : D6; + 0A5B : 48; + 0A5C : A5; + 0A5D : D5; + 0A5E : 48; + 0A5F : A9; + 0A60 : 12; + 0A61 : 85; + 0A62 : 83; + 0A63 : 20; + 0A64 : 07; + 0A65 : D1; + 0A66 : 20; + 0A67 : D3; + 0A68 : D1; + 0A69 : 20; + 0A6A : CB; + 0A6B : E1; + 0A6C : 20; + 0A6D : 9C; + 0A6E : E2; + 0A6F : A5; + 0A70 : D6; + 0A71 : 85; + 0A72 : 87; + 0A73 : A5; + 0A74 : D5; + 0A75 : 85; + 0A76 : 86; + 0A77 : A9; + 0A78 : 00; + 0A79 : 85; + 0A7A : 88; + 0A7B : 85; + 0A7C : D4; + 0A7D : 85; + 0A7E : D7; + 0A7F : 68; + 0A80 : 85; + 0A81 : D5; + 0A82 : 68; + 0A83 : 85; + 0A84 : D6; + 0A85 : 4C; + 0A86 : 3B; + 0A87 : E3; + [0A88..0A89] : 20; + 0A8A : C3; + 0A8B : A5; + 0A8C : E3; + 0A8D : 29; + 0A8E : 01; + 0A8F : 85; + 0A90 : E3; + 0A91 : C5; + 0A92 : E2; + 0A93 : F0; + 0A94 : 02; + 0A95 : 09; + 0A96 : 80; + 0A97 : 85; + 0A98 : E2; + 0A99 : 20; + 0A9A : 4F; + 0A9B : C4; + 0A9C : 20; + 0A9D : E7; + 0A9E : CA; + 0A9F : A5; + 0AA0 : E3; + 0AA1 : 29; + 0AA2 : 01; + 0AA3 : 85; + 0AA4 : 7F; + 0AA5 : A5; + 0AA6 : D9; + 0AA7 : 85; + 0AA8 : 81; + 0AA9 : 20; + 0AAA : 57; + 0AAB : DE; + 0AAC : 20; + 0AAD : 99; + 0AAE : D5; + 0AAF : A5; + 0AB0 : DE; + 0AB1 : 18; + 0AB2 : 69; + 0AB3 : 03; + 0AB4 : 20; + 0AB5 : C8; + 0AB6 : D4; + 0AB7 : 20; + 0AB8 : 93; + 0AB9 : DF; + 0ABA : A8; + 0ABB : AE; + 0ABC : 7A; + 0ABD : 02; + 0ABE : A9; + 0ABF : 10; + 0AC0 : 20; + 0AC1 : 6E; + 0AC2 : C6; + 0AC3 : 20; + 0AC4 : 5E; + 0AC5 : DE; + 0AC6 : 20; + 0AC7 : 99; + 0AC8 : D5; + 0AC9 : 4C; + 0ACA : 94; + 0ACB : C1; + 0ACC : A5; + 0ACD : E8; + 0ACE : 29; + 0ACF : 07; + 0AD0 : 8D; + 0AD1 : 4A; + 0AD2 : 02; + 0AD3 : AE; + 0AD4 : 78; + 0AD5 : 02; + 0AD6 : CA; + 0AD7 : EC; + 0AD8 : 77; + 0AD9 : 02; + 0ADA : 90; + 0ADB : 0A; + 0ADC : BD; + 0ADD : 80; + 0ADE : 02; + 0ADF : D0; + 0AE0 : F5; + 0AE1 : A9; + 0AE2 : 62; + 0AE3 : 4C; + 0AE4 : C8; + 0AE5 : C1; + 0AE6 : 60; + 0AE7 : 20; + 0AE8 : CC; + 0AE9 : CA; + 0AEA : BD; + 0AEB : 80; + 0AEC : 02; + 0AED : F0; + 0AEE : 05; + 0AEF : A9; + 0AF0 : 63; + 0AF1 : 4C; + 0AF2 : C8; + 0AF3 : C1; + 0AF4 : CA; + 0AF5 : 10; + 0AF6 : F3; + 0AF7 : 60; + 0AF8 : AD; + 0AF9 : 01; + 0AFA : 02; + 0AFB : C9; + 0AFC : 2D; + 0AFD : D0; + 0AFE : 4C; + 0AFF : AD; + 0B00 : 03; + 0B01 : 02; + 0B02 : 85; + 0B03 : 6F; + 0B04 : AD; + 0B05 : 04; + 0B06 : 02; + 0B07 : 85; + 0B08 : 70; + 0B09 : A0; + 0B0A : 00; + 0B0B : AD; + [0B0C..0B0D] : 02; + 0B0E : C9; + 0B0F : 52; + 0B10 : F0; + 0B11 : 0E; + 0B12 : 20; + 0B13 : 58; + 0B14 : F2; + 0B15 : C9; + 0B16 : 57; + 0B17 : F0; + 0B18 : 37; + 0B19 : C9; + 0B1A : 45; + 0B1B : D0; + 0B1C : 2E; + 0B1D : 6C; + 0B1E : 6F; + 0B1F : 00; + 0B20 : B1; + 0B21 : 6F; + [0B22..0B23] : 85; + 0B24 : AD; + 0B25 : 74; + 0B26 : 02; + 0B27 : C9; + 0B28 : 06; + 0B29 : 90; + 0B2A : 1A; + 0B2B : AE; + 0B2C : 05; + 0B2D : 02; + 0B2E : CA; + 0B2F : F0; + 0B30 : 14; + 0B31 : 8A; + 0B32 : 18; + 0B33 : 65; + 0B34 : 6F; + 0B35 : E6; + 0B36 : 6F; + 0B37 : 8D; + 0B38 : 49; + 0B39 : 02; + 0B3A : A5; + 0B3B : 6F; + 0B3C : 85; + [0B3D..0B3E] : A5; + 0B3F : 70; + 0B40 : 85; + 0B41 : A6; + 0B42 : 4C; + 0B43 : 43; + 0B44 : D4; + 0B45 : 20; + 0B46 : EB; + 0B47 : D0; + 0B48 : 4C; + 0B49 : 3A; + 0B4A : D4; + 0B4B : A9; + 0B4C : 31; + 0B4D : 4C; + 0B4E : C8; + 0B4F : C1; + 0B50 : B9; + 0B51 : 06; + 0B52 : 02; + 0B53 : 91; + 0B54 : 6F; + 0B55 : C8; + 0B56 : CC; + 0B57 : 05; + 0B58 : 02; + 0B59 : 90; + 0B5A : F5; + 0B5B : 60; + 0B5C : AC; + 0B5D : 01; + 0B5E : 02; + 0B5F : C0; + 0B60 : 30; + 0B61 : D0; + 0B62 : 09; + 0B63 : A9; + 0B64 : EA; + 0B65 : 85; + 0B66 : 6B; + 0B67 : A9; + 0B68 : FF; + 0B69 : 85; + 0B6A : 6C; + 0B6B : 60; + 0B6C : 20; + 0B6D : 72; + 0B6E : CB; + 0B6F : 4C; + 0B70 : 94; + 0B71 : C1; + 0B72 : 88; + 0B73 : 98; + 0B74 : 29; + 0B75 : 0F; + 0B76 : 0A; + 0B77 : A8; + 0B78 : B1; + 0B79 : 6B; + 0B7A : 85; + 0B7B : 75; + 0B7C : C8; + 0B7D : B1; + 0B7E : 6B; + 0B7F : 85; + 0B80 : 76; + 0B81 : 6C; + 0B82 : 75; + 0B83 : 00; + 0B84 : AD; + 0B85 : 8E; + 0B86 : 02; + 0B87 : 85; + 0B88 : 7F; + 0B89 : A5; + 0B8A : 83; + 0B8B : 48; + 0B8C : 20; + 0B8D : 3D; + 0B8E : C6; + 0B8F : 68; + 0B90 : 85; + 0B91 : 83; + 0B92 : AE; + 0B93 : 74; + 0B94 : 02; + 0B95 : CA; + 0B96 : D0; + 0B97 : 0D; + 0B98 : A9; + 0B99 : 01; + 0B9A : 20; + 0B9B : E2; + 0B9C : D1; + 0B9D : 4C; + 0B9E : F1; + 0B9F : CB; + 0BA0 : A9; + 0BA1 : 70; + 0BA2 : 4C; + 0BA3 : C8; + 0BA4 : C1; + 0BA5 : A0; + 0BA6 : 01; + 0BA7 : 20; + 0BA8 : 7C; + 0BA9 : CC; + 0BAA : AE; + 0BAB : 85; + 0BAC : 02; + 0BAD : E0; + 0BAE : 05; + 0BAF : B0; + 0BB0 : EF; + 0BB1 : A9; + 0BB2 : 00; + 0BB3 : 85; + 0BB4 : 6F; + 0BB5 : 85; + 0BB6 : 70; + 0BB7 : 38; + 0BB8 : 26; + 0BB9 : 6F; + 0BBA : 26; + 0BBB : 70; + 0BBC : CA; + 0BBD : 10; + 0BBE : F9; + 0BBF : A5; + 0BC0 : 6F; + 0BC1 : 2D; + 0BC2 : 4F; + 0BC3 : 02; + 0BC4 : D0; + 0BC5 : DA; + 0BC6 : A5; + 0BC7 : 70; + 0BC8 : 2D; + 0BC9 : 50; + 0BCA : 02; + 0BCB : D0; + 0BCC : D3; + 0BCD : A5; + 0BCE : 6F; + 0BCF : 0D; + 0BD0 : 4F; + 0BD1 : 02; + 0BD2 : 8D; + 0BD3 : 4F; + 0BD4 : 02; + 0BD5 : A5; + 0BD6 : 70; + 0BD7 : 0D; + 0BD8 : 50; + 0BD9 : 02; + 0BDA : 8D; + 0BDB : 50; + 0BDC : 02; + 0BDD : A9; + 0BDE : 00; + 0BDF : 20; + 0BE0 : E2; + 0BE1 : D1; + 0BE2 : A6; + 0BE3 : 82; + 0BE4 : AD; + 0BE5 : 85; + 0BE6 : 02; + 0BE7 : 95; + 0BE8 : A7; + 0BE9 : AA; + 0BEA : A5; + 0BEB : 7F; + 0BEC : 95; + 0BED : 00; + 0BEE : 9D; + 0BEF : 5B; + 0BF0 : 02; + 0BF1 : A6; + 0BF2 : 83; + 0BF3 : BD; + 0BF4 : 2B; + 0BF5 : 02; + 0BF6 : 09; + 0BF7 : 40; + 0BF8 : 9D; + 0BF9 : 2B; + 0BFA : 02; + 0BFB : A4; + 0BFC : 82; + 0BFD : A9; + 0BFE : FF; + 0BFF : 99; + 0C00 : 44; + 0C01 : 02; + 0C02 : A9; + 0C03 : 89; + 0C04 : 99; + 0C05 : F2; + 0C06 : 00; + 0C07 : B9; + 0C08 : A7; + 0C09 : 00; + 0C0A : 99; + 0C0B : 3E; + 0C0C : 02; + 0C0D : 0A; + 0C0E : AA; + 0C0F : A9; + 0C10 : 01; + 0C11 : 95; + 0C12 : 99; + 0C13 : A9; + 0C14 : 0E; + 0C15 : 99; + 0C16 : EC; + 0C17 : 00; + 0C18 : 4C; + 0C19 : 94; + 0C1A : C1; + 0C1B : A0; + 0C1C : 00; + 0C1D : A2; + 0C1E : 00; + 0C1F : A9; + 0C20 : 2D; + 0C21 : 20; + 0C22 : 68; + 0C23 : C2; + 0C24 : D0; + 0C25 : 0A; + 0C26 : A9; + 0C27 : 31; + 0C28 : 4C; + 0C29 : C8; + 0C2A : C1; + 0C2B : A9; + 0C2C : 30; + 0C2D : 4C; + 0C2E : C8; + 0C2F : C1; + 0C30 : 8A; + 0C31 : D0; + 0C32 : F8; + 0C33 : A2; + 0C34 : 05; + 0C35 : B9; + 0C36 : 00; + 0C37 : 02; + 0C38 : DD; + 0C39 : 5D; + 0C3A : CC; + 0C3B : F0; + 0C3C : 05; + 0C3D : CA; + 0C3E : 10; + 0C3F : F8; + 0C40 : 30; + 0C41 : E4; + 0C42 : 8A; + 0C43 : 09; + 0C44 : 80; + 0C45 : 8D; + 0C46 : 2A; + 0C47 : 02; + 0C48 : 20; + 0C49 : 6F; + 0C4A : CC; + 0C4B : AD; + 0C4C : 2A; + 0C4D : 02; + 0C4E : 0A; + 0C4F : AA; + 0C50 : BD; + 0C51 : 64; + 0C52 : CC; + 0C53 : 85; + 0C54 : 70; + 0C55 : BD; + 0C56 : 63; + 0C57 : CC; + 0C58 : 85; + 0C59 : 6F; + 0C5A : 6C; + 0C5B : 6F; + 0C5C : 00; + 0C5D : 41; + 0C5E : 46; + 0C5F : 52; + 0C60 : 57; + 0C61 : 45; + 0C62 : 50; + 0C63 : 03; + 0C64 : CD; + 0C65 : F5; + 0C66 : CC; + 0C67 : 56; + 0C68 : CD; + 0C69 : 73; + 0C6A : CD; + 0C6B : A3; + 0C6C : CD; + 0C6D : BD; + 0C6E : CD; + 0C6F : A0; + 0C70 : 00; + 0C71 : A2; + 0C72 : 00; + 0C73 : A9; + 0C74 : 3A; + 0C75 : 20; + 0C76 : 68; + 0C77 : C2; + 0C78 : D0; + 0C79 : 02; + 0C7A : A0; + 0C7B : 03; + 0C7C : B9; + 0C7D : 00; + 0C7E : 02; + 0C7F : C9; + 0C80 : 20; + 0C81 : F0; + 0C82 : 08; + 0C83 : C9; + 0C84 : 1D; + 0C85 : F0; + 0C86 : 04; + 0C87 : C9; + 0C88 : 2C; + 0C89 : D0; + 0C8A : 07; + 0C8B : C8; + 0C8C : CC; + 0C8D : 74; + 0C8E : 02; + 0C8F : 90; + 0C90 : EB; + 0C91 : 60; + 0C92 : 20; + 0C93 : A1; + 0C94 : CC; + 0C95 : EE; + 0C96 : 77; + 0C97 : 02; + 0C98 : AC; + 0C99 : 79; + 0C9A : 02; + 0C9B : E0; + 0C9C : 04; + 0C9D : 90; + 0C9E : EC; + 0C9F : B0; + 0CA0 : 8A; + 0CA1 : A9; + 0CA2 : 00; + 0CA3 : 85; + 0CA4 : 6F; + 0CA5 : 85; + 0CA6 : 70; + 0CA7 : 85; + 0CA8 : 72; + 0CA9 : A2; + 0CAA : FF; + 0CAB : B9; + 0CAC : 00; + 0CAD : 02; + 0CAE : C9; + 0CAF : 40; + 0CB0 : B0; + 0CB1 : 18; + 0CB2 : C9; + 0CB3 : 30; + 0CB4 : 90; + 0CB5 : 14; + 0CB6 : 29; + 0CB7 : 0F; + 0CB8 : 48; + 0CB9 : A5; + 0CBA : 70; + 0CBB : 85; + 0CBC : 71; + 0CBD : A5; + 0CBE : 6F; + 0CBF : 85; + 0CC0 : 70; + 0CC1 : 68; + 0CC2 : 85; + 0CC3 : 6F; + 0CC4 : C8; + 0CC5 : CC; + 0CC6 : 74; + 0CC7 : 02; + 0CC8 : 90; + 0CC9 : E1; + 0CCA : 8C; + 0CCB : 79; + 0CCC : 02; + 0CCD : 18; + 0CCE : A9; + 0CCF : 00; + 0CD0 : E8; + 0CD1 : E0; + 0CD2 : 03; + 0CD3 : B0; + 0CD4 : 0F; + 0CD5 : B4; + 0CD6 : 6F; + 0CD7 : 88; + 0CD8 : 30; + 0CD9 : F6; + 0CDA : 7D; + 0CDB : F2; + 0CDC : CC; + 0CDD : 90; + 0CDE : F8; + 0CDF : 18; + 0CE0 : E6; + 0CE1 : 72; + 0CE2 : D0; + 0CE3 : F3; + 0CE4 : 48; + 0CE5 : AE; + 0CE6 : 77; + 0CE7 : 02; + 0CE8 : A5; + 0CE9 : 72; + 0CEA : 9D; + 0CEB : 80; + 0CEC : 02; + 0CED : 68; + 0CEE : 9D; + 0CEF : 85; + 0CF0 : 02; + 0CF1 : 60; + 0CF2 : 01; + 0CF3 : 0A; + 0CF4 : 64; + 0CF5 : 20; + 0CF6 : F5; + 0CF7 : CD; + 0CF8 : 20; + 0CF9 : 5F; + 0CFA : EF; + 0CFB : 4C; + 0CFC : 94; + 0CFD : C1; + 0CFE : A9; + 0CFF : 01; + 0D00 : 8D; + 0D01 : F9; + 0D02 : 02; + 0D03 : 20; + 0D04 : F5; + 0D05 : CD; + 0D06 : A5; + 0D07 : 81; + 0D08 : 48; + 0D09 : 20; + 0D0A : FA; + 0D0B : F1; + 0D0C : F0; + 0D0D : 0B; + 0D0E : 68; + 0D0F : C5; + 0D10 : 81; + 0D11 : D0; + 0D12 : 19; + 0D13 : 20; + 0D14 : 90; + 0D15 : EF; + 0D16 : 4C; + 0D17 : 94; + 0D18 : C1; + 0D19 : 68; + 0D1A : A9; + 0D1B : 00; + 0D1C : 85; + 0D1D : 81; + 0D1E : E6; + 0D1F : 80; + 0D20 : A5; + 0D21 : 80; + 0D22 : CD; + 0D23 : D7; + 0D24 : FE; + 0D25 : B0; + 0D26 : 0A; + 0D27 : 20; + 0D28 : FA; + 0D29 : F1; + 0D2A : F0; + 0D2B : EE; + 0D2C : A9; + 0D2D : 65; + 0D2E : 20; + 0D2F : 45; + 0D30 : E6; + 0D31 : A9; + 0D32 : 65; + 0D33 : 20; + 0D34 : C8; + 0D35 : C1; + 0D36 : 20; + 0D37 : F2; + 0D38 : CD; + 0D39 : 4C; + 0D3A : 60; + 0D3B : D4; + 0D3C : 20; + 0D3D : 2F; + 0D3E : D1; + 0D3F : A1; + 0D40 : 99; + 0D41 : 60; + 0D42 : 20; + 0D43 : 36; + 0D44 : CD; + 0D45 : A9; + 0D46 : 00; + 0D47 : 20; + 0D48 : C8; + 0D49 : D4; + 0D4A : 20; + 0D4B : 3C; + 0D4C : CD; + 0D4D : 99; + 0D4E : 44; + 0D4F : 02; + 0D50 : A9; + 0D51 : 89; + 0D52 : 99; + 0D53 : F2; + 0D54 : 00; + 0D55 : 60; + 0D56 : 20; + 0D57 : 42; + 0D58 : CD; + 0D59 : 20; + 0D5A : EC; + 0D5B : D3; + 0D5C : 4C; + 0D5D : 94; + 0D5E : C1; + 0D5F : 20; + 0D60 : 6F; + 0D61 : CC; + 0D62 : 20; + 0D63 : 42; + 0D64 : CD; + 0D65 : B9; + 0D66 : 44; + 0D67 : 02; + 0D68 : 99; + 0D69 : 3E; + 0D6A : 02; + 0D6B : A9; + 0D6C : FF; + 0D6D : 99; + 0D6E : 44; + 0D6F : 02; + 0D70 : 4C; + 0D71 : 94; + 0D72 : C1; + 0D73 : 20; + 0D74 : F2; + 0D75 : CD; + 0D76 : 20; + 0D77 : E8; + 0D78 : D4; + 0D79 : A8; + 0D7A : 88; + 0D7B : C9; + 0D7C : 02; + 0D7D : B0; + 0D7E : 02; + 0D7F : A0; + 0D80 : 01; + 0D81 : A9; + 0D82 : 00; + 0D83 : 20; + 0D84 : C8; + 0D85 : D4; + 0D86 : 98; + 0D87 : 20; + 0D88 : F1; + 0D89 : CF; + 0D8A : 8A; + 0D8B : 48; + 0D8C : 20; + 0D8D : 64; + 0D8E : D4; + 0D8F : 68; + 0D90 : AA; + 0D91 : 20; + 0D92 : EE; + 0D93 : D3; + 0D94 : 4C; + 0D95 : 94; + 0D96 : C1; + 0D97 : 20; + 0D98 : 6F; + 0D99 : CC; + 0D9A : 20; + 0D9B : F2; + 0D9C : CD; + 0D9D : 20; + 0D9E : 64; + 0D9F : D4; + 0DA0 : 4C; + 0DA1 : 94; + 0DA2 : C1; + 0DA3 : 20; + 0DA4 : 58; + 0DA5 : F2; + 0DA6 : 20; + 0DA7 : 36; + 0DA8 : CD; + 0DA9 : A9; + 0DAA : 00; + 0DAB : 85; + 0DAC : 6F; + 0DAD : A6; + 0DAE : F9; + 0DAF : BD; + 0DB0 : E0; + 0DB1 : FE; + 0DB2 : 85; + 0DB3 : 70; + 0DB4 : 20; + 0DB5 : BA; + 0DB6 : CD; + 0DB7 : 4C; + 0DB8 : 94; + 0DB9 : C1; + 0DBA : 6C; + 0DBB : 6F; + 0DBC : 00; + 0DBD : 20; + 0DBE : D2; + 0DBF : CD; + 0DC0 : A5; + 0DC1 : F9; + 0DC2 : 0A; + 0DC3 : AA; + 0DC4 : AD; + 0DC5 : 86; + 0DC6 : 02; + 0DC7 : 95; + 0DC8 : 99; + 0DC9 : 20; + 0DCA : 2F; + 0DCB : D1; + 0DCC : 20; + 0DCD : EE; + 0DCE : D3; + 0DCF : 4C; + 0DD0 : 94; + 0DD1 : C1; + 0DD2 : A6; + 0DD3 : D3; + 0DD4 : E6; + 0DD5 : D3; + 0DD6 : BD; + 0DD7 : 85; + 0DD8 : 02; + 0DD9 : A8; + [0DDA..0DDB] : 88; + 0DDC : C0; + 0DDD : 0C; + 0DDE : 90; + 0DDF : 05; + 0DE0 : A9; + 0DE1 : 70; + 0DE2 : 4C; + 0DE3 : C8; + 0DE4 : C1; + 0DE5 : 85; + 0DE6 : 83; + 0DE7 : 20; + 0DE8 : EB; + 0DE9 : D0; + 0DEA : B0; + 0DEB : F4; + 0DEC : 20; + 0DED : 93; + 0DEE : DF; + 0DEF : 85; + 0DF0 : F9; + 0DF1 : 60; + 0DF2 : 20; + 0DF3 : D2; + 0DF4 : CD; + 0DF5 : A6; + 0DF6 : D3; + 0DF7 : BD; + 0DF8 : 85; + 0DF9 : 02; + 0DFA : 29; + 0DFB : 01; + 0DFC : 85; + 0DFD : 7F; + 0DFE : BD; + 0DFF : 87; + 0E00 : 02; + 0E01 : 85; + 0E02 : 81; + 0E03 : BD; + 0E04 : 86; + 0E05 : 02; + 0E06 : 85; + 0E07 : 80; + 0E08 : 20; + 0E09 : 5F; + 0E0A : D5; + 0E0B : 4C; + 0E0C : 00; + 0E0D : C1; + 0E0E : 20; + 0E0F : 2C; + 0E10 : CE; + 0E11 : 20; + 0E12 : 6E; + 0E13 : CE; + 0E14 : A5; + 0E15 : 90; + 0E16 : 85; + 0E17 : D7; + 0E18 : 20; + 0E19 : 71; + 0E1A : CE; + 0E1B : E6; + 0E1C : D7; + 0E1D : E6; + 0E1E : D7; + 0E1F : A5; + 0E20 : 8B; + 0E21 : 85; + 0E22 : D5; + 0E23 : A5; + 0E24 : 90; + 0E25 : 0A; + 0E26 : 18; + 0E27 : 69; + 0E28 : 10; + 0E29 : 85; + 0E2A : D6; + 0E2B : 60; + 0E2C : 20; + 0E2D : D9; + 0E2E : CE; + 0E2F : 85; + 0E30 : 92; + 0E31 : A6; + 0E32 : 82; + [0E33..0E34] : B5; + 0E35 : 85; + 0E36 : 90; + 0E37 : B5; + 0E38 : BB; + 0E39 : 85; + 0E3A : 91; + 0E3B : D0; + 0E3C : 04; + 0E3D : A5; + 0E3E : 90; + 0E3F : F0; + 0E40 : 0B; + 0E41 : A5; + 0E42 : 90; + 0E43 : 38; + 0E44 : E9; + 0E45 : 01; + 0E46 : 85; + 0E47 : 90; + 0E48 : B0; + 0E49 : 02; + 0E4A : C6; + 0E4B : 91; + 0E4C : B5; + 0E4D : C7; + 0E4E : 85; + 0E4F : 6F; + 0E50 : 46; + 0E51 : 6F; + 0E52 : 90; + 0E53 : 03; + 0E54 : 20; + 0E55 : ED; + 0E56 : CE; + 0E57 : 20; + 0E58 : E5; + 0E59 : CE; + 0E5A : A5; + 0E5B : 6F; + 0E5C : D0; + 0E5D : F2; + 0E5E : A5; + 0E5F : D4; + 0E60 : 18; + 0E61 : 65; + 0E62 : 8B; + 0E63 : 85; + 0E64 : 8B; + 0E65 : 90; + 0E66 : 06; + 0E67 : E6; + 0E68 : 8C; + 0E69 : D0; + 0E6A : 02; + 0E6B : E6; + 0E6C : 8D; + 0E6D : 60; + 0E6E : A9; + 0E6F : FE; + 0E70 : 2C; + 0E71 : A9; + 0E72 : 78; + 0E73 : 85; + 0E74 : 6F; + 0E75 : A2; + 0E76 : 03; + 0E77 : B5; + 0E78 : 8F; + 0E79 : 48; + 0E7A : B5; + 0E7B : 8A; + 0E7C : 95; + 0E7D : 8F; + 0E7E : 68; + 0E7F : 95; + 0E80 : 8A; + 0E81 : CA; + 0E82 : D0; + 0E83 : F3; + 0E84 : 20; + 0E85 : D9; + 0E86 : CE; + 0E87 : A2; + 0E88 : 00; + 0E89 : B5; + 0E8A : 90; + 0E8B : 95; + 0E8C : 8F; + 0E8D : E8; + 0E8E : E0; + 0E8F : 04; + 0E90 : 90; + 0E91 : F7; + 0E92 : A9; + 0E93 : 00; + 0E94 : 85; + 0E95 : 92; + 0E96 : 24; + 0E97 : 6F; + 0E98 : 30; + 0E99 : 09; + 0E9A : 06; + 0E9B : 8F; + 0E9C : 08; + 0E9D : 46; + 0E9E : 8F; + 0E9F : 28; + 0EA0 : 20; + 0EA1 : E6; + 0EA2 : CE; + 0EA3 : 20; + 0EA4 : ED; + 0EA5 : CE; + 0EA6 : 20; + 0EA7 : E5; + 0EA8 : CE; + 0EA9 : 24; + 0EAA : 6F; + 0EAB : 30; + 0EAC : 03; + 0EAD : 20; + 0EAE : E2; + 0EAF : CE; + 0EB0 : A5; + 0EB1 : 8F; + 0EB2 : 18; + 0EB3 : 65; + 0EB4 : 90; + 0EB5 : 85; + [0EB6..0EB7] : 90; + 0EB8 : 06; + 0EB9 : E6; + 0EBA : 91; + 0EBB : D0; + 0EBC : 02; + 0EBD : E6; + 0EBE : 92; + 0EBF : A5; + 0EC0 : 92; + 0EC1 : 05; + 0EC2 : 91; + 0EC3 : D0; + 0EC4 : C2; + 0EC5 : A5; + 0EC6 : 90; + 0EC7 : 38; + 0EC8 : E5; + 0EC9 : 6F; + 0ECA : 90; + 0ECB : 0C; + 0ECC : E6; + 0ECD : 8B; + 0ECE : D0; + 0ECF : 06; + 0ED0 : E6; + 0ED1 : 8C; + 0ED2 : D0; + 0ED3 : 02; + 0ED4 : E6; + 0ED5 : 8D; + 0ED6 : 85; + 0ED7 : 90; + 0ED8 : 60; + 0ED9 : A9; + 0EDA : 00; + 0EDB : 85; + 0EDC : 8B; + 0EDD : 85; + 0EDE : 8C; + 0EDF : 85; + 0EE0 : 8D; + 0EE1 : 60; + 0EE2 : 20; + 0EE3 : E5; + 0EE4 : CE; + 0EE5 : 18; + 0EE6 : 26; + 0EE7 : 90; + 0EE8 : 26; + 0EE9 : 91; + 0EEA : 26; + 0EEB : 92; + 0EEC : 60; + 0EED : 18; + 0EEE : A2; + 0EEF : FD; + 0EF0 : B5; + 0EF1 : 8E; + 0EF2 : 75; + 0EF3 : 93; + 0EF4 : 95; + 0EF5 : 8E; + 0EF6 : E8; + 0EF7 : D0; + 0EF8 : F7; + 0EF9 : 60; + 0EFA : A2; + 0EFB : 00; + 0EFC : 8A; + 0EFD : 95; + 0EFE : FA; + 0EFF : E8; + 0F00 : E0; + 0F01 : 04; + 0F02 : D0; + 0F03 : F8; + 0F04 : A9; + 0F05 : 06; + 0F06 : 95; + 0F07 : FA; + 0F08 : 60; + 0F09 : A0; + 0F0A : 04; + 0F0B : A6; + 0F0C : 82; + 0F0D : B9; + 0F0E : FA; + 0F0F : 00; + 0F10 : 96; + 0F11 : FA; + 0F12 : C5; + 0F13 : 82; + 0F14 : F0; + 0F15 : 07; + 0F16 : 88; + 0F17 : 30; + 0F18 : E1; + 0F19 : AA; + 0F1A : 4C; + 0F1B : 0D; + 0F1C : CF; + 0F1D : 60; + 0F1E : 20; + 0F1F : 09; + 0F20 : CF; + 0F21 : 20; + 0F22 : B7; + 0F23 : DF; + 0F24 : D0; + 0F25 : 46; + 0F26 : 20; + 0F27 : D3; + 0F28 : D1; + 0F29 : 20; + 0F2A : 8E; + 0F2B : D2; + 0F2C : 30; + 0F2D : 48; + 0F2E : 20; + 0F2F : C2; + 0F30 : DF; + 0F31 : A5; + 0F32 : 80; + 0F33 : 48; + 0F34 : A5; + 0F35 : 81; + 0F36 : 48; + 0F37 : A9; + 0F38 : 01; + 0F39 : 20; + 0F3A : F6; + 0F3B : D4; + 0F3C : 85; + 0F3D : 81; + 0F3E : A9; + 0F3F : 00; + 0F40 : 20; + 0F41 : F6; + 0F42 : D4; + 0F43 : 85; + 0F44 : 80; + 0F45 : F0; + 0F46 : 1F; + 0F47 : 20; + 0F48 : 25; + 0F49 : D1; + 0F4A : F0; + 0F4B : 0B; + 0F4C : 20; + 0F4D : AB; + 0F4E : DD; + 0F4F : D0; + 0F50 : 06; + 0F51 : 20; + 0F52 : 8C; + 0F53 : CF; + 0F54 : 4C; + 0F55 : 5D; + 0F56 : CF; + 0F57 : 20; + 0F58 : 8C; + 0F59 : CF; + 0F5A : 20; + 0F5B : 57; + 0F5C : DE; + 0F5D : 68; + 0F5E : 85; + 0F5F : 81; + 0F60 : 68; + 0F61 : 85; + 0F62 : 80; + 0F63 : 4C; + 0F64 : 6F; + 0F65 : CF; + 0F66 : 68; + 0F67 : 85; + 0F68 : 81; + 0F69 : 68; + 0F6A : 85; + 0F6B : 80; + 0F6C : 20; + 0F6D : 8C; + 0F6E : CF; + 0F6F : 20; + 0F70 : 93; + 0F71 : DF; + 0F72 : AA; + 0F73 : 4C; + 0F74 : 99; + 0F75 : D5; + 0F76 : A9; + 0F77 : 70; + 0F78 : 4C; + 0F79 : C8; + 0F7A : C1; + 0F7B : 20; + 0F7C : 09; + 0F7D : CF; + 0F7E : 20; + 0F7F : B7; + 0F80 : DF; + 0F81 : D0; + 0F82 : 08; + 0F83 : 20; + 0F84 : 8E; + 0F85 : D2; + 0F86 : 30; + 0F87 : EE; + 0F88 : 20; + 0F89 : C2; + 0F8A : DF; + 0F8B : 60; + 0F8C : A6; + 0F8D : 82; + 0F8E : B5; + 0F8F : A7; + 0F90 : 49; + 0F91 : 80; + 0F92 : 95; + 0F93 : A7; + 0F94 : B5; + 0F95 : AE; + 0F96 : 49; + 0F97 : 80; + 0F98 : 95; + 0F99 : AE; + 0F9A : 60; + 0F9B : A2; + 0F9C : 12; + 0F9D : 86; + 0F9E : 83; + 0F9F : 20; + 0FA0 : 07; + 0FA1 : D1; + 0FA2 : 20; + 0FA3 : 00; + 0FA4 : C1; + 0FA5 : 20; + 0FA6 : 25; + 0FA7 : D1; + 0FA8 : 90; + 0FA9 : 05; + 0FAA : A9; + [0FAB..0FAC] : 20; + 0FAD : 9D; + 0FAE : DD; + 0FAF : A5; + 0FB0 : 83; + 0FB1 : C9; + 0FB2 : 0F; + 0FB3 : F0; + 0FB4 : 23; + 0FB5 : D0; + 0FB6 : 08; + 0FB7 : A5; + 0FB8 : 84; + 0FB9 : 29; + 0FBA : 8F; + 0FBB : C9; + 0FBC : 0F; + 0FBD : B0; + 0FBE : 19; + 0FBF : 20; + 0FC0 : 25; + 0FC1 : D1; + 0FC2 : B0; + 0FC3 : 05; + 0FC4 : A5; + 0FC5 : 85; + 0FC6 : 4C; + 0FC7 : 9D; + 0FC8 : D1; + 0FC9 : D0; + 0FCA : 03; + 0FCB : 4C; + 0FCC : AB; + 0FCD : E0; + 0FCE : A5; + 0FCF : 85; + 0FD0 : 20; + 0FD1 : F1; + 0FD2 : CF; + 0FD3 : A4; + 0FD4 : 82; + 0FD5 : 4C; + 0FD6 : EE; + 0FD7 : D3; + 0FD8 : A9; + 0FD9 : 04; + 0FDA : 85; + 0FDB : 82; + 0FDC : 20; + 0FDD : E8; + 0FDE : D4; + 0FDF : C9; + 0FE0 : 2A; + 0FE1 : F0; + 0FE2 : 05; + 0FE3 : A5; + 0FE4 : 85; + 0FE5 : 20; + 0FE6 : F1; + 0FE7 : CF; + 0FE8 : A5; + 0FE9 : F8; + 0FEA : F0; + 0FEB : 01; + 0FEC : 60; + 0FED : EE; + 0FEE : 55; + 0FEF : 02; + 0FF0 : 60; + 0FF1 : 48; + 0FF2 : 20; + 0FF3 : 93; + 0FF4 : DF; + 0FF5 : 10; + 0FF6 : 06; + 0FF7 : 68; + 0FF8 : A9; + 0FF9 : 61; + 0FFA : 4C; + 0FFB : C8; + 0FFC : C1; + 0FFD : 0A; + 0FFE : AA; + 0FFF : 68; + 1000 : 81; + 1001 : 99; + 1002 : F6; + 1003 : 99; + 1004 : 60; + 1005 : 20; + 1006 : D1; + 1007 : C1; + 1008 : 20; + 1009 : 42; + 100A : D0; + 100B : 4C; + 100C : 94; + 100D : C1; + 100E : 20; + 100F : 0F; + 1010 : F1; + 1011 : A8; + 1012 : B6; + 1013 : A7; + 1014 : E0; + 1015 : FF; + 1016 : D0; + 1017 : 14; + 1018 : 48; + 1019 : 20; + 101A : 8E; + 101B : D2; + 101C : AA; + 101D : 10; + 101E : 05; + 101F : A9; + 1020 : 70; + 1021 : 20; + 1022 : 48; + 1023 : E6; + 1024 : 68; + 1025 : A8; + 1026 : 8A; + 1027 : 09; + 1028 : 80; + 1029 : 99; + 102A : A7; + 102B : 00; + 102C : 8A; + 102D : 29; + 102E : 0F; + 102F : 85; + 1030 : F9; + 1031 : A2; + 1032 : 00; + 1033 : 86; + 1034 : 81; + 1035 : AE; + 1036 : 85; + 1037 : FE; + 1038 : 86; + 1039 : 80; + 103A : 20; + 103B : D3; + 103C : D6; + 103D : A9; + 103E : B0; + 103F : 4C; + 1040 : 8C; + 1041 : D5; + 1042 : 20; + 1043 : D1; + 1044 : F0; + 1045 : 20; + 1046 : 13; + 1047 : D3; + 1048 : 20; + 1049 : 0E; + 104A : D0; + 104B : A6; + 104C : 7F; + 104D : A9; + 104E : 00; + 104F : 9D; + 1050 : 51; + 1051 : 02; + 1052 : 8A; + 1053 : 0A; + 1054 : AA; + 1055 : A5; + 1056 : 16; + 1057 : 95; + 1058 : 12; + 1059 : A5; + 105A : 17; + 105B : 95; + 105C : 13; + 105D : 20; + 105E : 86; + 105F : D5; + 1060 : A5; + 1061 : F9; + 1062 : 0A; + 1063 : AA; + 1064 : A9; + 1065 : 02; + 1066 : 95; + 1067 : 99; + 1068 : A1; + 1069 : 99; + 106A : A6; + 106B : 7F; + 106C : 9D; + [106D..106E] : 01; + 106F : A9; + 1070 : 00; + 1071 : 95; + 1072 : 1C; + 1073 : 95; + 1074 : FF; + 1075 : 20; + 1076 : 3A; + 1077 : EF; + 1078 : A0; + 1079 : 04; + 107A : A9; + 107B : 00; + 107C : AA; + 107D : 18; + 107E : 71; + 107F : 6D; + 1080 : 90; + 1081 : 01; + 1082 : E8; + [1083..1086] : C8; + 1087 : C0; + 1088 : 48; + 1089 : F0; + 108A : F8; + 108B : C0; + 108C : 90; + 108D : D0; + 108E : EE; + 108F : 48; + 1090 : 8A; + 1091 : A6; + 1092 : 7F; + 1093 : 9D; + 1094 : FC; + 1095 : 02; + 1096 : 68; + 1097 : 9D; + 1098 : FA; + 1099 : 02; + 109A : 60; + 109B : 20; + 109C : D0; + 109D : D6; + 109E : 20; + 109F : C3; + 10A0 : D0; + 10A1 : 20; + 10A2 : 99; + 10A3 : D5; + 10A4 : 20; + 10A5 : 37; + 10A6 : D1; + 10A7 : 85; + 10A8 : 80; + 10A9 : 20; + 10AA : 37; + 10AB : D1; + 10AC : 85; + 10AD : 81; + 10AE : 60; + 10AF : 20; + 10B0 : 9B; + 10B1 : D0; + 10B2 : A5; + 10B3 : 80; + 10B4 : D0; + 10B5 : 01; + 10B6 : 60; + 10B7 : 20; + 10B8 : 1E; + 10B9 : CF; + 10BA : 20; + 10BB : D0; + 10BC : D6; + 10BD : 20; + 10BE : C3; + 10BF : D0; + 10C0 : 4C; + 10C1 : 1E; + 10C2 : CF; + 10C3 : A9; + 10C4 : 80; + 10C5 : D0; + 10C6 : 02; + 10C7 : A9; + 10C8 : 90; + 10C9 : 8D; + 10CA : 4D; + 10CB : 02; + 10CC : 20; + 10CD : 93; + 10CE : DF; + 10CF : AA; + 10D0 : 20; + 10D1 : 06; + 10D2 : D5; + 10D3 : 8A; + 10D4 : 48; + 10D5 : 0A; + 10D6 : AA; + 10D7 : A9; + 10D8 : 00; + 10D9 : 95; + 10DA : 99; + 10DB : 20; + 10DC : 25; + 10DD : D1; + 10DE : C9; + 10DF : 04; + 10E0 : B0; + 10E1 : 06; + 10E2 : F6; + 10E3 : B5; + 10E4 : D0; + 10E5 : 02; + 10E6 : F6; + 10E7 : BB; + 10E8 : 68; + 10E9 : AA; + 10EA : 60; + 10EB : A5; + 10EC : 83; + 10ED : C9; + 10EE : 13; + 10EF : 90; + 10F0 : 02; + 10F1 : 29; + 10F2 : 0F; + 10F3 : C9; + 10F4 : 0F; + 10F5 : D0; + 10F6 : 02; + 10F7 : A9; + 10F8 : 10; + 10F9 : AA; + 10FA : 38; + 10FB : BD; + 10FC : 2B; + 10FD : 02; + 10FE : 30; + 10FF : 06; + 1100 : 29; + 1101 : 0F; + 1102 : 85; + 1103 : 82; + 1104 : AA; + 1105 : 18; + 1106 : 60; + 1107 : A5; + 1108 : 83; + 1109 : C9; + 110A : 13; + 110B : 90; + 110C : 02; + 110D : 29; + 110E : 0F; + 110F : AA; + 1110 : BD; + 1111 : 2B; + 1112 : 02; + 1113 : A8; + 1114 : 0A; + 1115 : 90; + 1116 : 0A; + 1117 : 30; + 1118 : 0A; + 1119 : 98; + 111A : 29; + 111B : 0F; + 111C : 85; + 111D : 82; + 111E : AA; + 111F : 18; + 1120 : 60; + 1121 : 30; + 1122 : F6; + 1123 : 38; + 1124 : 60; + 1125 : A6; + 1126 : 82; + 1127 : B5; + 1128 : EC; + 1129 : 4A; + 112A : 29; + 112B : 07; + 112C : C9; + 112D : 04; + 112E : 60; + 112F : 20; + 1130 : 93; + 1131 : DF; + 1132 : 0A; + 1133 : AA; + 1134 : A4; + 1135 : 82; + 1136 : 60; + 1137 : 20; + 1138 : 2F; + 1139 : D1; + 113A : B9; + 113B : 44; + 113C : 02; + 113D : F0; + 113E : 12; + 113F : A1; + 1140 : 99; + 1141 : 48; + 1142 : B5; + 1143 : 99; + 1144 : D9; + 1145 : 44; + 1146 : 02; + 1147 : D0; + 1148 : 04; + 1149 : A9; + 114A : FF; + 114B : 95; + 114C : 99; + 114D : 68; + 114E : F6; + 114F : 99; + 1150 : 60; + 1151 : A1; + 1152 : 99; + 1153 : F6; + 1154 : 99; + 1155 : 60; + 1156 : 20; + 1157 : 37; + 1158 : D1; + 1159 : D0; + 115A : 36; + [115B..115C] : 85; + 115D : B9; + 115E : 44; + 115F : 02; + 1160 : F0; + 1161 : 08; + 1162 : A9; + 1163 : 80; + 1164 : 99; + 1165 : F2; + 1166 : 00; + 1167 : A5; + 1168 : 85; + 1169 : 60; + 116A : 20; + 116B : 1E; + 116C : CF; + 116D : A9; + 116E : 00; + 116F : 20; + 1170 : C8; + 1171 : D4; + 1172 : 20; + 1173 : 37; + 1174 : D1; + 1175 : C9; + 1176 : 00; + 1177 : F0; + 1178 : 19; + 1179 : 85; + 117A : 80; + 117B : 20; + 117C : 37; + 117D : D1; + 117E : 85; + 117F : 81; + 1180 : 20; + 1181 : 1E; + 1182 : CF; + 1183 : 20; + 1184 : D3; + 1185 : D1; + 1186 : 20; + 1187 : D0; + 1188 : D6; + 1189 : 20; + 118A : C3; + 118B : D0; + 118C : 20; + 118D : 1E; + 118E : CF; + 118F : A5; + 1190 : 85; + 1191 : 60; + 1192 : 20; + 1193 : 37; + 1194 : D1; + 1195 : A4; + 1196 : 82; + 1197 : 99; + 1198 : 44; + 1199 : 02; + 119A : A5; + 119B : 85; + 119C : 60; + 119D : 20; + 119E : F1; + 119F : CF; + 11A0 : F0; + 11A1 : 01; + 11A2 : 60; + 11A3 : 20; + 11A4 : D3; + 11A5 : D1; + 11A6 : 20; + 11A7 : 1E; + 11A8 : F1; + 11A9 : A9; + 11AA : 00; + 11AB : 20; + 11AC : C8; + 11AD : D4; + 11AE : A5; + 11AF : 80; + 11B0 : 20; + 11B1 : F1; + 11B2 : CF; + 11B3 : A5; + 11B4 : 81; + 11B5 : 20; + 11B6 : F1; + 11B7 : CF; + 11B8 : 20; + 11B9 : C7; + 11BA : D0; + 11BB : 20; + 11BC : 1E; + 11BD : CF; + 11BE : 20; + 11BF : D0; + 11C0 : D6; + 11C1 : A9; + 11C2 : 02; + 11C3 : 4C; + 11C4 : C8; + 11C5 : D4; + 11C6 : 85; + 11C7 : 6F; + 11C8 : 20; + 11C9 : E8; + 11CA : D4; + 11CB : 18; + 11CC : 65; + 11CD : 6F; + 11CE : 95; + 11CF : 99; + 11D0 : 85; + 11D1 : 94; + 11D2 : 60; + 11D3 : 20; + 11D4 : 93; + 11D5 : DF; + 11D6 : AA; + 11D7 : BD; + 11D8 : 5B; + 11D9 : 02; + 11DA : 29; + 11DB : 01; + 11DC : 85; + 11DD : 7F; + 11DE : 60; + 11DF : 38; + 11E0 : B0; + 11E1 : 01; + 11E2 : 18; + 11E3 : 08; + 11E4 : 85; + 11E5 : 6F; + 11E6 : 20; + 11E7 : 27; + 11E8 : D2; + 11E9 : 20; + 11EA : 7F; + 11EB : D3; + 11EC : 85; + 11ED : 82; + 11EE : A6; + 11EF : 83; + 11F0 : 28; + 11F1 : 90; + 11F2 : 02; + 11F3 : 09; + 11F4 : 80; + 11F5 : 9D; + 11F6 : 2B; + 11F7 : 02; + 11F8 : 29; + 11F9 : 3F; + 11FA : A8; + 11FB : A9; + 11FC : FF; + 11FD : 99; + 11FE : A7; + 11FF : 00; + 1200 : 99; + 1201 : AE; + 1202 : 00; + 1203 : 99; + 1204 : CD; + 1205 : 00; + 1206 : C6; + 1207 : 6F; + 1208 : 30; + 1209 : 1C; + 120A : 20; + 120B : 8E; + 120C : D2; + 120D : 10; + 120E : 08; + 120F : 20; + 1210 : 5A; + 1211 : D2; + 1212 : A9; + 1213 : 70; + 1214 : 4C; + 1215 : C8; + 1216 : C1; + 1217 : 99; + 1218 : A7; + 1219 : 00; + 121A : C6; + 121B : 6F; + 121C : 30; + 121D : 08; + 121E : 20; + 121F : 8E; + 1220 : D2; + 1221 : 30; + 1222 : EC; + 1223 : 99; + 1224 : AE; + 1225 : 00; + 1226 : 60; + 1227 : A5; + 1228 : 83; + 1229 : C9; + 122A : 0F; + 122B : D0; + 122C : 01; + 122D : 60; + 122E : A6; + 122F : 83; + 1230 : BD; + 1231 : 2B; + 1232 : 02; + 1233 : C9; + 1234 : FF; + 1235 : F0; + 1236 : 22; + 1237 : 29; + 1238 : 3F; + 1239 : 85; + 123A : 82; + 123B : A9; + 123C : FF; + 123D : 9D; + 123E : 2B; + 123F : 02; + 1240 : A6; + 1241 : 82; + 1242 : A9; + 1243 : 00; + 1244 : 95; + 1245 : F2; + 1246 : 20; + 1247 : 5A; + 1248 : D2; + 1249 : A6; + 124A : 82; + 124B : A9; + 124C : 01; + 124D : CA; + 124E : 30; + 124F : 03; + 1250 : 0A; + 1251 : D0; + 1252 : FA; + 1253 : 0D; + 1254 : 56; + 1255 : 02; + 1256 : 8D; + 1257 : 56; + 1258 : 02; + 1259 : 60; + 125A : A6; + 125B : 82; + 125C : B5; + 125D : A7; + 125E : C9; + 125F : FF; + 1260 : F0; + 1261 : 09; + 1262 : 48; + 1263 : A9; + 1264 : FF; + 1265 : 95; + 1266 : A7; + 1267 : 68; + 1268 : 20; + 1269 : F3; + 126A : D2; + 126B : A6; + 126C : 82; + 126D : B5; + 126E : AE; + 126F : C9; + 1270 : FF; + 1271 : F0; + 1272 : 09; + 1273 : 48; + 1274 : A9; + 1275 : FF; + 1276 : 95; + 1277 : AE; + 1278 : 68; + 1279 : 20; + 127A : F3; + 127B : D2; + 127C : A6; + 127D : 82; + 127E : B5; + 127F : CD; + 1280 : C9; + 1281 : FF; + 1282 : F0; + 1283 : 09; + 1284 : 48; + 1285 : A9; + 1286 : FF; + 1287 : 95; + 1288 : CD; + 1289 : 68; + 128A : 20; + 128B : F3; + 128C : D2; + 128D : 60; + 128E : 98; + 128F : 48; + 1290 : A0; + 1291 : 01; + 1292 : 20; + 1293 : BA; + 1294 : D2; + 1295 : 10; + 1296 : 0C; + 1297 : 88; + 1298 : 20; + 1299 : BA; + 129A : D2; + 129B : 10; + 129C : 06; + 129D : 20; + 129E : 39; + 129F : D3; + 12A0 : AA; + 12A1 : 30; + 12A2 : 13; + 12A3 : B5; + 12A4 : 00; + 12A5 : 30; + 12A6 : FC; + 12A7 : A5; + 12A8 : 7F; + 12A9 : 95; + 12AA : 00; + 12AB : 9D; + 12AC : 5B; + 12AD : 02; + 12AE : 8A; + 12AF : 0A; + 12B0 : A8; + 12B1 : A9; + 12B2 : 02; + [12B3..12B4] : 99; + 12B5 : 00; + 12B6 : 68; + 12B7 : A8; + 12B8 : 8A; + 12B9 : 60; + 12BA : A2; + 12BB : 07; + 12BC : B9; + 12BD : 4F; + 12BE : 02; + 12BF : 3D; + 12C0 : E9; + 12C1 : EF; + 12C2 : F0; + 12C3 : 04; + 12C4 : CA; + 12C5 : 10; + 12C6 : F5; + 12C7 : 60; + 12C8 : B9; + 12C9 : 4F; + 12CA : 02; + 12CB : 5D; + 12CC : E9; + 12CD : EF; + 12CE : 99; + 12CF : 4F; + 12D0 : 02; + 12D1 : 8A; + 12D2 : 88; + 12D3 : 30; + 12D4 : 03; + 12D5 : 18; + 12D6 : 69; + 12D7 : 08; + 12D8 : AA; + 12D9 : 60; + 12DA : A6; + 12DB : 82; + 12DC : B5; + 12DD : A7; + 12DE : 30; + 12DF : 09; + 12E0 : 8A; + 12E1 : 18; + 12E2 : 69; + 12E3 : 07; + 12E4 : AA; + 12E5 : B5; + 12E6 : A7; + 12E7 : 10; + 12E8 : F0; + 12E9 : C9; + 12EA : FF; + 12EB : F0; + 12EC : EC; + 12ED : 48; + 12EE : A9; + 12EF : FF; + 12F0 : 95; + 12F1 : A7; + 12F2 : 68; + 12F3 : 29; + 12F4 : 0F; + 12F5 : A8; + 12F6 : C8; + 12F7 : A2; + 12F8 : 10; + 12F9 : 6E; + 12FA : 50; + 12FB : 02; + 12FC : 6E; + 12FD : 4F; + 12FE : 02; + 12FF : 88; + 1300 : D0; + 1301 : 01; + 1302 : 18; + 1303 : CA; + 1304 : 10; + 1305 : F3; + 1306 : 60; + 1307 : A9; + 1308 : 0E; + 1309 : 85; + 130A : 83; + 130B : 20; + 130C : 27; + 130D : D2; + 130E : C6; + 130F : 83; + 1310 : D0; + 1311 : F9; + 1312 : 60; + 1313 : A9; + 1314 : 0E; + 1315 : 85; + 1316 : 83; + 1317 : A6; + 1318 : 83; + 1319 : BD; + 131A : 2B; + 131B : 02; + 131C : C9; + 131D : FF; + 131E : F0; + 131F : 14; + 1320 : 29; + 1321 : 3F; + 1322 : 85; + 1323 : 82; + 1324 : 20; + 1325 : 93; + 1326 : DF; + 1327 : AA; + 1328 : BD; + 1329 : 5B; + 132A : 02; + 132B : 29; + 132C : 01; + 132D : C5; + 132E : 7F; + 132F : D0; + 1330 : 03; + 1331 : 20; + 1332 : 27; + 1333 : D2; + 1334 : C6; + 1335 : 83; + 1336 : 10; + 1337 : DF; + 1338 : 60; + 1339 : A5; + 133A : 6F; + 133B : 48; + 133C : A0; + 133D : 00; + 133E : B6; + 133F : FA; + 1340 : B5; + 1341 : A7; + 1342 : 10; + 1343 : 04; + 1344 : C9; + 1345 : FF; + 1346 : D0; + 1347 : 16; + 1348 : 8A; + 1349 : 18; + 134A : 69; + 134B : 07; + 134C : AA; + 134D : B5; + 134E : A7; + 134F : 10; + 1350 : 04; + 1351 : C9; + 1352 : FF; + 1353 : D0; + 1354 : 09; + 1355 : C8; + 1356 : C0; + 1357 : 05; + 1358 : 90; + 1359 : E4; + 135A : A2; + 135B : FF; + 135C : D0; + 135D : 1C; + 135E : 86; + 135F : 6F; + 1360 : 29; + 1361 : 3F; + 1362 : AA; + 1363 : B5; + 1364 : 00; + 1365 : 30; + 1366 : FC; + 1367 : C9; + 1368 : 02; + 1369 : 90; + 136A : 08; + 136B : A6; + 136C : 6F; + 136D : E0; + 136E : 07; + 136F : 90; + 1370 : D7; + 1371 : B0; + 1372 : E2; + 1373 : A4; + 1374 : 6F; + 1375 : A9; + 1376 : FF; + 1377 : 99; + 1378 : A7; + 1379 : 00; + 137A : 68; + 137B : 85; + 137C : 6F; + 137D : 8A; + 137E : 60; + 137F : A0; + 1380 : 00; + 1381 : A9; + 1382 : 01; + 1383 : 2C; + 1384 : 56; + 1385 : 02; + 1386 : D0; + 1387 : 09; + 1388 : C8; + 1389 : 0A; + 138A : D0; + 138B : F7; + 138C : A9; + 138D : 70; + 138E : 4C; + 138F : C8; + 1390 : C1; + 1391 : 49; + 1392 : FF; + 1393 : 2D; + 1394 : 56; + 1395 : 02; + 1396 : 8D; + 1397 : 56; + 1398 : 02; + 1399 : 98; + 139A : 60; + 139B : 20; + 139C : EB; + 139D : D0; + 139E : 20; + 139F : 00; + 13A0 : C1; + 13A1 : 20; + 13A2 : AA; + 13A3 : D3; + 13A4 : A6; + 13A5 : 82; + 13A6 : BD; + 13A7 : 3E; + 13A8 : 02; + 13A9 : 60; + 13AA : A6; + 13AB : 82; + 13AC : 20; + 13AD : 25; + 13AE : D1; + 13AF : D0; + 13B0 : 03; + 13B1 : 4C; + 13B2 : 20; + 13B3 : E1; + 13B4 : A5; + 13B5 : 83; + 13B6 : C9; + 13B7 : 0F; + 13B8 : F0; + 13B9 : 5A; + 13BA : B5; + 13BB : F2; + 13BC : 29; + 13BD : 08; + 13BE : D0; + 13BF : 13; + 13C0 : 20; + 13C1 : 25; + 13C2 : D1; + 13C3 : C9; + 13C4 : 07; + 13C5 : D0; + 13C6 : 07; + 13C7 : A9; + 13C8 : 89; + 13C9 : 95; + 13CA : F2; + 13CB : 4C; + 13CC : DE; + 13CD : D3; + 13CE : A9; + 13CF : 00; + 13D0 : 95; + 13D1 : F2; + 13D2 : 60; + 13D3 : A5; + 13D4 : 83; + 13D5 : F0; + 13D6 : 32; + 13D7 : 20; + 13D8 : 25; + 13D9 : D1; + 13DA : C9; + 13DB : 04; + 13DC : 90; + 13DD : 22; + 13DE : 20; + 13DF : 2F; + 13E0 : D1; + 13E1 : B5; + 13E2 : 99; + 13E3 : D9; + 13E4 : 44; + 13E5 : 02; + 13E6 : D0; + 13E7 : 04; + 13E8 : A9; + 13E9 : 00; + 13EA : 95; + 13EB : 99; + 13EC : F6; + 13ED : 99; + 13EE : A1; + [13EF..13F0] : 99; + 13F1 : 3E; + 13F2 : 02; + 13F3 : B5; + 13F4 : 99; + 13F5 : D9; + 13F6 : 44; + 13F7 : 02; + 13F8 : D0; + 13F9 : 05; + 13FA : A9; + 13FB : 81; + 13FC : 99; + 13FD : F2; + 13FE : 00; + 13FF : 60; + 1400 : 20; + 1401 : 56; + 1402 : D1; + 1403 : A6; + 1404 : 82; + 1405 : 9D; + 1406 : 3E; + 1407 : 02; + 1408 : 60; + 1409 : AD; + 140A : 54; + 140B : 02; + 140C : F0; + 140D : F2; + 140E : 20; + 140F : 67; + 1410 : ED; + 1411 : 4C; + 1412 : 03; + 1413 : D4; + 1414 : 20; + 1415 : E8; + 1416 : D4; + 1417 : C9; + 1418 : D4; + 1419 : D0; + 141A : 18; + 141B : A5; + 141C : 95; + 141D : C9; + 141E : 02; + 141F : D0; + 1420 : 12; + 1421 : A9; + 1422 : 0D; + [1423..1424] : 85; + 1425 : 20; + 1426 : 23; + 1427 : C1; + 1428 : A9; + 1429 : 00; + 142A : 20; + 142B : C1; + 142C : E6; + 142D : C6; + 142E : A5; + 142F : A9; + 1430 : 80; + 1431 : D0; + 1432 : 12; + 1433 : 20; + 1434 : 37; + 1435 : D1; + [1436..1437] : 85; + 1438 : D0; + 1439 : 09; + 143A : A9; + 143B : D4; + 143C : 20; + 143D : C8; + 143E : D4; + 143F : A9; + 1440 : 02; + 1441 : 95; + 1442 : 9A; + 1443 : A9; + 1444 : 88; + 1445 : 85; + 1446 : F7; + 1447 : A5; + 1448 : 85; + 1449 : 8D; + 144A : 43; + 144B : 02; + 144C : 60; + 144D : 20; + 144E : 93; + 144F : DF; + 1450 : 0A; + 1451 : AA; + 1452 : A9; + 1453 : 00; + 1454 : 95; + 1455 : 99; + 1456 : A1; + 1457 : 99; + 1458 : F0; + 1459 : 05; + 145A : D6; + 145B : 99; + 145C : 4C; + 145D : 56; + 145E : D1; + 145F : 60; + 1460 : A9; + 1461 : 80; + 1462 : D0; + 1463 : 02; + 1464 : A9; + 1465 : 90; + 1466 : 05; + 1467 : 7F; + 1468 : 8D; + 1469 : 4D; + 146A : 02; + 146B : A5; + 146C : F9; + 146D : 20; + 146E : D3; + 146F : D6; + 1470 : A6; + 1471 : F9; + 1472 : 4C; + 1473 : 93; + 1474 : D5; + 1475 : A9; + 1476 : 01; + 1477 : 8D; + 1478 : 4A; + 1479 : 02; + 147A : A9; + 147B : 11; + 147C : 85; + 147D : 83; + 147E : 20; + 147F : 46; + 1480 : DC; + 1481 : A9; + 1482 : 02; + 1483 : 4C; + 1484 : C8; + 1485 : D4; + 1486 : A9; + 1487 : 12; + 1488 : 85; + 1489 : 83; + 148A : 4C; + 148B : DA; + 148C : DC; + 148D : 20; + 148E : 3B; + 148F : DE; + 1490 : A9; + 1491 : 01; + 1492 : 85; + 1493 : 6F; + 1494 : A5; + 1495 : 69; + 1496 : 48; + 1497 : A9; + 1498 : 03; + 1499 : 85; + 149A : 69; + 149B : 20; + 149C : 2D; + 149D : F1; + 149E : 68; + 149F : 85; + 14A0 : 69; + 14A1 : A9; + 14A2 : 00; + 14A3 : 20; + 14A4 : C8; + 14A5 : D4; + 14A6 : A5; + 14A7 : 80; + 14A8 : 20; + 14A9 : F1; + 14AA : CF; + 14AB : A5; + 14AC : 81; + 14AD : 20; + 14AE : F1; + 14AF : CF; + 14B0 : 20; + 14B1 : C7; + 14B2 : D0; + 14B3 : 20; + 14B4 : 99; + 14B5 : D5; + 14B6 : A9; + 14B7 : 00; + 14B8 : 20; + 14B9 : C8; + 14BA : D4; + 14BB : 20; + 14BC : F1; + 14BD : CF; + 14BE : D0; + 14BF : FB; + 14C0 : 20; + 14C1 : F1; + 14C2 : CF; + 14C3 : A9; + 14C4 : FF; + 14C5 : 4C; + 14C6 : F1; + 14C7 : CF; + 14C8 : 85; + 14C9 : 6F; + 14CA : 20; + 14CB : 93; + 14CC : DF; + 14CD : 0A; + 14CE : AA; + 14CF : B5; + 14D0 : 9A; + 14D1 : 85; + 14D2 : 95; + 14D3 : A5; + 14D4 : 6F; + 14D5 : 95; + 14D6 : 99; + 14D7 : 85; + 14D8 : 94; + 14D9 : 60; + 14DA : A9; + 14DB : 11; + 14DC : 85; + 14DD : 83; + 14DE : 20; + 14DF : 27; + 14E0 : D2; + 14E1 : A9; + 14E2 : 12; + 14E3 : 85; + 14E4 : 83; + 14E5 : 4C; + 14E6 : 27; + 14E7 : D2; + 14E8 : 20; + 14E9 : 93; + 14EA : DF; + 14EB : 0A; + 14EC : AA; + 14ED : B5; + 14EE : 9A; + 14EF : 85; + 14F0 : 95; + 14F1 : B5; + 14F2 : 99; + 14F3 : 85; + 14F4 : 94; + 14F5 : 60; + 14F6 : 85; + 14F7 : 71; + 14F8 : 20; + 14F9 : 93; + 14FA : DF; + 14FB : AA; + 14FC : BD; + 14FD : E0; + 14FE : FE; + 14FF : 85; + 1500 : 72; + 1501 : A0; + 1502 : 00; + 1503 : B1; + 1504 : 71; + 1505 : 60; + 1506 : BD; + 1507 : 5B; + 1508 : 02; + 1509 : 29; + 150A : 01; + 150B : 0D; + 150C : 4D; + 150D : 02; + 150E : 48; + 150F : 86; + 1510 : F9; + 1511 : 8A; + 1512 : 0A; + 1513 : AA; + 1514 : B5; + 1515 : 07; + 1516 : 8D; + 1517 : 4D; + 1518 : 02; + 1519 : B5; + 151A : 06; + 151B : F0; + 151C : 2D; + 151D : CD; + 151E : D7; + 151F : FE; + 1520 : B0; + 1521 : 28; + 1522 : AA; + 1523 : 68; + 1524 : 48; + 1525 : 29; + 1526 : F0; + 1527 : C9; + 1528 : 90; + 1529 : D0; + 152A : 4F; + 152B : 68; + 152C : 48; + 152D : 4A; + 152E : B0; + 152F : 05; + 1530 : AD; + [1531..1532] : 01; + 1533 : 90; + 1534 : 03; + 1535 : AD; + 1536 : 02; + 1537 : 01; + 1538 : F0; + 1539 : 05; + 153A : CD; + 153B : D5; + 153C : FE; + 153D : D0; + 153E : 33; + 153F : 8A; + 1540 : 20; + 1541 : 4B; + 1542 : F2; + 1543 : CD; + 1544 : 4D; + 1545 : 02; + 1546 : F0; + 1547 : 02; + 1548 : B0; + 1549 : 30; + 154A : 20; + 154B : 52; + 154C : D5; + 154D : A9; + 154E : 66; + 154F : 4C; + 1550 : 45; + 1551 : E6; + 1552 : A5; + 1553 : F9; + 1554 : 0A; + 1555 : AA; + 1556 : B5; + 1557 : 06; + 1558 : 85; + 1559 : 80; + 155A : B5; + 155B : 07; + 155C : 85; + 155D : 81; + 155E : 60; + 155F : A5; + 1560 : 80; + 1561 : F0; + 1562 : EA; + 1563 : CD; + 1564 : D7; + 1565 : FE; + 1566 : B0; + 1567 : E5; + 1568 : 20; + 1569 : 4B; + 156A : F2; + 156B : C5; + 156C : 81; + 156D : F0; + 156E : DE; + 156F : 90; + 1570 : DC; + 1571 : 60; + 1572 : 20; + 1573 : 52; + 1574 : D5; + 1575 : A9; + 1576 : 73; + 1577 : 4C; + 1578 : 45; + 1579 : E6; + 157A : A6; + 157B : F9; + 157C : 68; + 157D : 8D; + 157E : 4D; + 157F : 02; + 1580 : 95; + 1581 : 00; + 1582 : 9D; + 1583 : 5B; + 1584 : 02; + 1585 : 60; + 1586 : A9; + 1587 : 80; + 1588 : D0; + 1589 : 02; + 158A : A9; + 158B : 90; + 158C : 05; + 158D : 7F; + 158E : A6; + 158F : F9; + 1590 : 8D; + 1591 : 4D; + 1592 : 02; + 1593 : AD; + 1594 : 4D; + 1595 : 02; + 1596 : 20; + 1597 : 0E; + 1598 : D5; + 1599 : 20; + 159A : A6; + 159B : D5; + 159C : B0; + 159D : FB; + 159E : 48; + 159F : A9; + 15A0 : 00; + 15A1 : 8D; + 15A2 : 98; + 15A3 : 02; + 15A4 : 68; + 15A5 : 60; + 15A6 : B5; + 15A7 : 00; + 15A8 : 30; + 15A9 : 1A; + 15AA : C9; + 15AB : 02; + 15AC : 90; + 15AD : 14; + 15AE : C9; + 15AF : 08; + 15B0 : F0; + 15B1 : 08; + 15B2 : C9; + 15B3 : 0B; + 15B4 : F0; + 15B5 : 04; + 15B6 : C9; + 15B7 : 0F; + 15B8 : D0; + 15B9 : 0C; + 15BA : 2C; + 15BB : 98; + 15BC : 02; + 15BD : 30; + 15BE : 03; + 15BF : 4C; + 15C0 : 3F; + 15C1 : D6; + 15C2 : 18; + 15C3 : 60; + 15C4 : 38; + 15C5 : 60; + 15C6 : 98; + 15C7 : 48; + 15C8 : A5; + 15C9 : 7F; + 15CA : 48; + 15CB : BD; + 15CC : 5B; + 15CD : 02; + 15CE : 29; + 15CF : 01; + 15D0 : 85; + 15D1 : 7F; + 15D2 : A8; + 15D3 : B9; + 15D4 : CA; + 15D5 : FE; + 15D6 : 8D; + 15D7 : 6D; + 15D8 : 02; + 15D9 : 20; + 15DA : A6; + 15DB : D6; + 15DC : C9; + 15DD : 02; + 15DE : B0; + 15DF : 03; + 15E0 : 4C; + 15E1 : 6D; + 15E2 : D6; + 15E3 : BD; + 15E4 : 5B; + 15E5 : 02; + 15E6 : 29; + 15E7 : F0; + 15E8 : 48; + 15E9 : C9; + 15EA : 90; + 15EB : D0; + 15EC : 07; + 15ED : A5; + 15EE : 7F; + 15EF : 09; + 15F0 : B8; + 15F1 : 9D; + 15F2 : 5B; + 15F3 : 02; + 15F4 : 24; + 15F5 : 6A; + 15F6 : 70; + 15F7 : 39; + 15F8 : A9; + 15F9 : 00; + 15FA : 8D; + 15FB : 99; + 15FC : 02; + 15FD : 8D; + 15FE : 9A; + 15FF : 02; + 1600 : AC; + 1601 : 99; + 1602 : 02; + 1603 : AD; + 1604 : 9A; + 1605 : 02; + 1606 : 38; + 1607 : F9; + 1608 : DB; + 1609 : FE; + 160A : 8D; + 160B : 9A; + 160C : 02; + 160D : B9; + 160E : DB; + 160F : FE; + 1610 : 20; + 1611 : 76; + 1612 : D6; + 1613 : EE; + 1614 : 99; + 1615 : 02; + 1616 : 20; + 1617 : A6; + 1618 : D6; + 1619 : C9; + 161A : 02; + 161B : 90; + 161C : 08; + 161D : AC; + 161E : 99; + 161F : 02; + 1620 : B9; + 1621 : DB; + 1622 : FE; + 1623 : D0; + 1624 : DB; + 1625 : AD; + 1626 : 9A; + 1627 : 02; + 1628 : 20; + 1629 : 76; + 162A : D6; + 162B : B5; + 162C : 00; + 162D : C9; + 162E : 02; + 162F : 90; + 1630 : 2B; + 1631 : 24; + 1632 : 6A; + 1633 : 10; + 1634 : 0F; + 1635 : 68; + 1636 : C9; + 1637 : 90; + 1638 : D0; + [1639..163A] : 05; + 163B : 7F; + 163C : 9D; + 163D : 5B; + 163E : 02; + 163F : B5; + 1640 : 00; + 1641 : 20; + 1642 : 0A; + 1643 : E6; + 1644 : 68; + 1645 : 2C; + 1646 : 98; + 1647 : 02; + 1648 : 30; + 1649 : 23; + 164A : 48; + 164B : A9; + 164C : C0; + 164D : 05; + 164E : 7F; + 164F : 95; + 1650 : 00; + 1651 : B5; + 1652 : 00; + 1653 : 30; + 1654 : FC; + 1655 : 20; + 1656 : A6; + 1657 : D6; + 1658 : C9; + 1659 : 02; + 165A : B0; + 165B : D9; + 165C : 68; + 165D : C9; + 165E : 90; + 165F : D0; + 1660 : 0C; + 1661 : 05; + 1662 : 7F; + 1663 : 9D; + 1664 : 5B; + 1665 : 02; + 1666 : 20; + 1667 : A6; + 1668 : D6; + 1669 : C9; + 166A : 02; + 166B : B0; + 166C : D2; + 166D : 68; + 166E : 85; + 166F : 7F; + 1670 : 68; + 1671 : A8; + 1672 : B5; + 1673 : 00; + 1674 : 18; + 1675 : 60; + 1676 : C9; + 1677 : 00; + 1678 : F0; + 1679 : 18; + 167A : 30; + 167B : 0C; + 167C : A0; + 167D : 01; + 167E : 20; + 167F : 93; + 1680 : D6; + 1681 : 38; + 1682 : E9; + 1683 : 01; + 1684 : D0; + 1685 : F6; + 1686 : F0; + 1687 : 0A; + 1688 : A0; + 1689 : FF; + 168A : 20; + 168B : 93; + 168C : D6; + 168D : 18; + 168E : 69; + 168F : 01; + 1690 : D0; + 1691 : F6; + 1692 : 60; + 1693 : 48; + 1694 : 98; + 1695 : A4; + 1696 : 7F; + 1697 : 99; + 1698 : FE; + 1699 : 02; + 169A : D9; + 169B : FE; + 169C : 02; + 169D : F0; + 169E : FB; + 169F : A9; + 16A0 : 00; + 16A1 : 99; + 16A2 : FE; + 16A3 : 02; + 16A4 : 68; + 16A5 : 60; + 16A6 : A5; + 16A7 : 6A; + 16A8 : 29; + 16A9 : 3F; + 16AA : A8; + 16AB : AD; + 16AC : 6D; + 16AD : 02; + 16AE : 4D; + 16AF : 00; + 16B0 : 1C; + 16B1 : 8D; + 16B2 : 00; + 16B3 : 1C; + 16B4 : BD; + 16B5 : 5B; + 16B6 : 02; + 16B7 : 95; + 16B8 : 00; + 16B9 : B5; + 16BA : 00; + 16BB : 30; + 16BC : FC; + 16BD : C9; + 16BE : 02; + 16BF : 90; + 16C0 : 03; + 16C1 : 88; + 16C2 : D0; + 16C3 : E7; + 16C4 : 48; + 16C5 : AD; + 16C6 : 6D; + 16C7 : 02; + 16C8 : 0D; + 16C9 : 00; + 16CA : 1C; + 16CB : 8D; + 16CC : 00; + 16CD : 1C; + 16CE : 68; + 16CF : 60; + 16D0 : 20; + 16D1 : 93; + 16D2 : DF; + 16D3 : 0A; + 16D4 : A8; + 16D5 : A5; + 16D6 : 80; + 16D7 : 99; + 16D8 : 06; + 16D9 : 00; + 16DA : A5; + 16DB : 81; + 16DC : 99; + 16DD : 07; + 16DE : 00; + 16DF : A5; + 16E0 : 7F; + 16E1 : 0A; + 16E2 : AA; + 16E3 : 60; + 16E4 : A5; + 16E5 : 83; + 16E6 : 48; + 16E7 : A5; + 16E8 : 82; + 16E9 : 48; + 16EA : A5; + 16EB : 81; + 16EC : 48; + 16ED : A5; + 16EE : 80; + 16EF : 48; + 16F0 : A9; + 16F1 : 11; + 16F2 : 85; + 16F3 : 83; + 16F4 : 20; + 16F5 : 3B; + 16F6 : DE; + 16F7 : AD; + 16F8 : 4A; + 16F9 : 02; + 16FA : 48; + 16FB : A5; + 16FC : E2; + 16FD : 29; + 16FE : 01; + 16FF : 85; + 1700 : 7F; + 1701 : A6; + 1702 : F9; + 1703 : 5D; + 1704 : 5B; + 1705 : 02; + 1706 : 4A; + 1707 : 90; + 1708 : 0C; + 1709 : A2; + 170A : 01; + 170B : 8E; + 170C : 92; + 170D : 02; + 170E : 20; + 170F : AC; + 1710 : C5; + 1711 : F0; + 1712 : 1D; + 1713 : D0; + 1714 : 28; + 1715 : AD; + 1716 : 91; + 1717 : 02; + 1718 : F0; + 1719 : 0C; + 171A : C5; + 171B : 81; + 171C : F0; + 171D : 1F; + 171E : 85; + 171F : 81; + 1720 : 20; + 1721 : 60; + 1722 : D4; + 1723 : 4C; + 1724 : 3D; + 1725 : D7; + 1726 : A9; + 1727 : 01; + 1728 : 8D; + 1729 : 92; + 172A : 02; + 172B : 20; + 172C : 17; + 172D : C6; + 172E : D0; + 172F : 0D; + 1730 : 20; + 1731 : 8D; + 1732 : D4; + 1733 : A5; + 1734 : 81; + 1735 : 8D; + 1736 : 91; + 1737 : 02; + 1738 : A9; + 1739 : 02; + 173A : 8D; + 173B : 92; + 173C : 02; + 173D : AD; + 173E : 92; + 173F : 02; + 1740 : 20; + 1741 : C8; + 1742 : D4; + 1743 : 68; + 1744 : 8D; + 1745 : 4A; + 1746 : 02; + 1747 : C9; + 1748 : 04; + 1749 : D0; + 174A : 02; + 174B : 09; + 174C : 80; + 174D : 20; + 174E : F1; + 174F : CF; + 1750 : 68; + 1751 : 8D; + 1752 : 80; + 1753 : 02; + 1754 : 20; + 1755 : F1; + 1756 : CF; + 1757 : 68; + 1758 : 8D; + 1759 : 85; + 175A : 02; + 175B : 20; + 175C : F1; + 175D : CF; + 175E : 20; + 175F : 93; + 1760 : DF; + 1761 : A8; + 1762 : AD; + 1763 : 7A; + 1764 : 02; + 1765 : AA; + 1766 : A9; + 1767 : 10; + 1768 : 20; + 1769 : 6E; + 176A : C6; + 176B : A0; + 176C : 10; + 176D : A9; + 176E : 00; + 176F : 91; + 1770 : 94; + 1771 : C8; + 1772 : C0; + 1773 : 1B; + 1774 : 90; + 1775 : F9; + 1776 : AD; + 1777 : 4A; + 1778 : 02; + 1779 : C9; + 177A : 04; + 177B : D0; + 177C : 13; + 177D : A0; + 177E : 10; + 177F : AD; + 1780 : 59; + 1781 : 02; + 1782 : 91; + 1783 : 94; + 1784 : C8; + 1785 : AD; + 1786 : 5A; + 1787 : 02; + 1788 : 91; + 1789 : 94; + 178A : C8; + 178B : AD; + 178C : 58; + 178D : 02; + 178E : 91; + 178F : 94; + 1790 : 20; + 1791 : 64; + 1792 : D4; + 1793 : 68; + 1794 : 85; + 1795 : 82; + 1796 : AA; + 1797 : 68; + 1798 : 85; + 1799 : 83; + 179A : AD; + 179B : 91; + 179C : 02; + 179D : 85; + 179E : D8; + 179F : 9D; + 17A0 : 60; + 17A1 : 02; + 17A2 : AD; + 17A3 : 92; + 17A4 : 02; + 17A5 : 85; + 17A6 : DD; + 17A7 : 9D; + 17A8 : 66; + 17A9 : 02; + 17AA : AD; + 17AB : 4A; + 17AC : 02; + 17AD : 85; + 17AE : E7; + 17AF : A5; + 17B0 : 7F; + 17B1 : 85; + 17B2 : E2; + 17B3 : 60; + 17B4 : A5; + 17B5 : 83; + 17B6 : 8D; + 17B7 : 4C; + 17B8 : 02; + 17B9 : 20; + 17BA : B3; + 17BB : C2; + 17BC : 8E; + 17BD : 2A; + 17BE : 02; + 17BF : AE; + 17C0 : 00; + 17C1 : 02; + 17C2 : AD; + 17C3 : 4C; + 17C4 : 02; + 17C5 : D0; + 17C6 : 2C; + 17C7 : E0; + 17C8 : 2A; + 17C9 : D0; + 17CA : 28; + 17CB : A5; + 17CC : 7E; + 17CD : F0; + 17CE : 4D; + 17CF : 85; + 17D0 : 80; + 17D1 : AD; + 17D2 : 6E; + 17D3 : 02; + 17D4 : 85; + 17D5 : 7F; + 17D6 : 85; + 17D7 : E2; + 17D8 : A9; + 17D9 : 02; + 17DA : 85; + 17DB : E7; + 17DC : AD; + 17DD : 6F; + 17DE : 02; + 17DF : 85; + 17E0 : 81; + 17E1 : 20; + 17E2 : 00; + 17E3 : C1; + 17E4 : 20; + 17E5 : 46; + 17E6 : DC; + 17E7 : A9; + 17E8 : 04; + 17E9 : 05; + 17EA : 7F; + 17EB : A6; + 17EC : 82; + 17ED : 99; + 17EE : EC; + 17EF : 00; + 17F0 : 4C; + 17F1 : 94; + 17F2 : C1; + 17F3 : E0; + 17F4 : 24; + 17F5 : D0; + 17F6 : 1E; + 17F7 : AD; + 17F8 : 4C; + 17F9 : 02; + 17FA : D0; + 17FB : 03; + 17FC : 4C; + 17FD : 55; + 17FE : DA; + 17FF : 20; + 1800 : D1; + 1801 : C1; + 1802 : AD; + 1803 : 85; + 1804 : FE; + 1805 : 85; + 1806 : 80; + 1807 : A9; + 1808 : 00; + 1809 : 85; + 180A : 81; + 180B : 20; + 180C : 46; + 180D : DC; + 180E : A5; + 180F : 7F; + 1810 : 09; + 1811 : 02; + 1812 : 4C; + 1813 : EB; + 1814 : D7; + 1815 : E0; + 1816 : 23; + 1817 : D0; + 1818 : 12; + 1819 : 4C; + 181A : 84; + 181B : CB; + 181C : A9; + 181D : 02; + 181E : 8D; + 181F : 96; + 1820 : 02; + 1821 : A9; + 1822 : 00; + 1823 : 85; + 1824 : 7F; + 1825 : 8D; + 1826 : 8E; + 1827 : 02; + 1828 : 20; + 1829 : 42; + 182A : D0; + 182B : 20; + 182C : E5; + 182D : C1; + 182E : D0; + 182F : 04; + 1830 : A2; + 1831 : 00; + 1832 : F0; + 1833 : 0C; + 1834 : 8A; + 1835 : F0; + 1836 : 05; + 1837 : A9; + 1838 : 30; + 1839 : 4C; + 183A : C8; + 183B : C1; + 183C : 88; + 183D : F0; + 183E : 01; + 183F : 88; + 1840 : 8C; + 1841 : 7A; + 1842 : 02; + 1843 : A9; + 1844 : 8D; + 1845 : 20; + 1846 : 68; + 1847 : C2; + 1848 : E8; + 1849 : 8E; + 184A : 78; + 184B : 02; + 184C : 20; + 184D : 12; + 184E : C3; + 184F : 20; + 1850 : CA; + 1851 : C3; + 1852 : 20; + 1853 : 9D; + 1854 : C4; + 1855 : A2; + 1856 : 00; + 1857 : 8E; + 1858 : 58; + 1859 : 02; + 185A : 8E; + 185B : 97; + 185C : 02; + 185D : 8E; + 185E : 4A; + 185F : 02; + 1860 : E8; + 1861 : EC; + 1862 : 77; + 1863 : 02; + 1864 : B0; + 1865 : 10; + 1866 : 20; + 1867 : 09; + 1868 : DA; + 1869 : E8; + 186A : EC; + 186B : 77; + 186C : 02; + 186D : B0; + 186E : 07; + 186F : C0; + 1870 : 04; + 1871 : F0; + 1872 : 3E; + 1873 : 20; + 1874 : 09; + 1875 : DA; + 1876 : AE; + 1877 : 4C; + 1878 : 02; + 1879 : 86; + 187A : 83; + 187B : E0; + 187C : 02; + 187D : B0; + 187E : 12; + 187F : 8E; + 1880 : 97; + 1881 : 02; + 1882 : A9; + 1883 : 40; + 1884 : 8D; + 1885 : F9; + 1886 : 02; + 1887 : AD; + 1888 : 4A; + 1889 : 02; + 188A : D0; + 188B : 1B; + 188C : A9; + 188D : 02; + 188E : 8D; + 188F : 4A; + 1890 : 02; + 1891 : AD; + 1892 : 4A; + 1893 : 02; + 1894 : D0; + 1895 : 11; + 1896 : A5; + 1897 : E7; + 1898 : 29; + 1899 : 07; + 189A : 8D; + 189B : 4A; + 189C : 02; + 189D : AD; + 189E : 80; + 189F : 02; + 18A0 : D0; + 18A1 : 05; + 18A2 : A9; + 18A3 : 01; + 18A4 : 8D; + 18A5 : 4A; + 18A6 : 02; + 18A7 : AD; + 18A8 : 97; + 18A9 : 02; + 18AA : C9; + 18AB : 01; + 18AC : F0; + 18AD : 18; + 18AE : 4C; + 18AF : 40; + 18B0 : D9; + 18B1 : BC; + 18B2 : 7A; + 18B3 : 02; + 18B4 : B9; + 18B5 : 00; + 18B6 : 02; + 18B7 : 8D; + 18B8 : 58; + 18B9 : 02; + 18BA : AD; + 18BB : 80; + 18BC : 02; + 18BD : D0; + 18BE : B7; + 18BF : A9; + 18C0 : 01; + 18C1 : 8D; + 18C2 : 97; + 18C3 : 02; + 18C4 : D0; + 18C5 : B0; + 18C6 : A5; + 18C7 : E7; + 18C8 : 29; + 18C9 : 80; + 18CA : AA; + 18CB : D0; + 18CC : 14; + 18CD : A9; + 18CE : 20; + 18CF : 24; + 18D0 : E7; + 18D1 : F0; + 18D2 : 06; + 18D3 : 20; + 18D4 : B6; + 18D5 : C8; + 18D6 : 4C; + 18D7 : E3; + 18D8 : D9; + 18D9 : AD; + 18DA : 80; + 18DB : 02; + 18DC : D0; + 18DD : 03; + 18DE : 4C; + 18DF : E3; + 18E0 : D9; + 18E1 : AD; + 18E2 : 00; + 18E3 : 02; + 18E4 : C9; + 18E5 : 40; + 18E6 : F0; + 18E7 : 0D; + 18E8 : 8A; + 18E9 : D0; + 18EA : 05; + 18EB : A9; + 18EC : 63; + 18ED : 4C; + 18EE : C8; + 18EF : C1; + 18F0 : A9; + 18F1 : 33; + 18F2 : 4C; + 18F3 : C8; + 18F4 : C1; + 18F5 : A5; + 18F6 : E7; + 18F7 : 29; + 18F8 : 07; + 18F9 : CD; + 18FA : 4A; + 18FB : 02; + 18FC : D0; + 18FD : 67; + 18FE : C9; + 18FF : 04; + 1900 : F0; + 1901 : 63; + 1902 : 20; + 1903 : DA; + 1904 : DC; + 1905 : A5; + 1906 : 82; + 1907 : 8D; + 1908 : 70; + 1909 : 02; + 190A : A9; + 190B : 11; + 190C : 85; + 190D : 83; + 190E : 20; + 190F : EB; + 1910 : D0; + 1911 : AD; + 1912 : 94; + 1913 : 02; + 1914 : 20; + 1915 : C8; + 1916 : D4; + 1917 : A0; + 1918 : 00; + 1919 : B1; + 191A : 94; + 191B : 09; + 191C : 20; + 191D : 91; + 191E : 94; + 191F : A0; + 1920 : 1A; + 1921 : A5; + 1922 : 80; + 1923 : 91; + 1924 : 94; + 1925 : C8; + 1926 : A5; + 1927 : 81; + 1928 : 91; + 1929 : 94; + 192A : AE; + 192B : 70; + 192C : 02; + 192D : A5; + 192E : D8; + 192F : 9D; + 1930 : 60; + 1931 : 02; + 1932 : A5; + 1933 : DD; + 1934 : 9D; + 1935 : 66; + 1936 : 02; + 1937 : 20; + 1938 : 3B; + 1939 : DE; + 193A : 20; + 193B : 64; + 193C : D4; + 193D : 4C; + 193E : EF; + 193F : D9; + 1940 : AD; + 1941 : 80; + 1942 : 02; + 1943 : D0; + 1944 : 05; + 1945 : A9; + 1946 : 62; + 1947 : 4C; + 1948 : C8; + 1949 : C1; + 194A : AD; + 194B : 97; + 194C : 02; + 194D : C9; + 194E : 03; + 194F : F0; + 1950 : 0B; + 1951 : A9; + 1952 : 20; + 1953 : 24; + 1954 : E7; + 1955 : F0; + 1956 : 05; + 1957 : A9; + 1958 : 60; + 1959 : 4C; + 195A : C8; + 195B : C1; + 195C : A5; + 195D : E7; + 195E : 29; + 195F : 07; + 1960 : CD; + 1961 : 4A; + 1962 : 02; + 1963 : F0; + 1964 : 05; + 1965 : A9; + 1966 : 64; + 1967 : 4C; + 1968 : C8; + 1969 : C1; + 196A : A0; + 196B : 00; + 196C : 8C; + 196D : 79; + 196E : 02; + 196F : AE; + 1970 : 97; + 1971 : 02; + 1972 : E0; + 1973 : 02; + 1974 : D0; + 1975 : 1A; + 1976 : C9; + 1977 : 04; + 1978 : F0; + 1979 : EB; + 197A : B1; + 197B : 94; + 197C : 29; + 197D : 4F; + 197E : 91; + 197F : 94; + 1980 : A5; + 1981 : 83; + 1982 : 48; + 1983 : A9; + 1984 : 11; + 1985 : 85; + 1986 : 83; + 1987 : 20; + 1988 : 3B; + 1989 : DE; + 198A : 20; + 198B : 64; + 198C : D4; + 198D : 68; + 198E : 85; + 198F : 83; + 1990 : 20; + 1991 : A0; + 1992 : D9; + 1993 : AD; + 1994 : 97; + 1995 : 02; + 1996 : C9; + 1997 : 02; + 1998 : D0; + 1999 : 55; + 199A : 20; + 199B : 2A; + 199C : DA; + 199D : 4C; + 199E : 94; + 199F : C1; + 19A0 : A0; + 19A1 : 13; + 19A2 : B1; + 19A3 : 94; + 19A4 : 8D; + 19A5 : 59; + 19A6 : 02; + 19A7 : C8; + 19A8 : B1; + 19A9 : 94; + 19AA : 8D; + 19AB : 5A; + 19AC : 02; + 19AD : C8; + 19AE : B1; + 19AF : 94; + 19B0 : AE; + 19B1 : 58; + 19B2 : 02; + 19B3 : 8D; + 19B4 : 58; + 19B5 : 02; + 19B6 : 8A; + 19B7 : F0; + 19B8 : 0A; + 19B9 : CD; + 19BA : 58; + 19BB : 02; + 19BC : F0; + 19BD : 05; + 19BE : A9; + 19BF : 50; + 19C0 : 20; + 19C1 : C8; + 19C2 : C1; + 19C3 : AE; + 19C4 : 79; + 19C5 : 02; + 19C6 : BD; + 19C7 : 80; + 19C8 : 02; + 19C9 : 85; + 19CA : 80; + 19CB : BD; + 19CC : 85; + 19CD : 02; + 19CE : 85; + 19CF : 81; + 19D0 : 20; + 19D1 : 46; + 19D2 : DC; + 19D3 : A4; + 19D4 : 82; + 19D5 : AE; + 19D6 : 79; + 19D7 : 02; + 19D8 : B5; + 19D9 : D8; + 19DA : 99; + 19DB : 60; + 19DC : 02; + 19DD : B5; + 19DE : DD; + 19DF : 99; + 19E0 : 66; + 19E1 : 02; + 19E2 : 60; + 19E3 : A5; + 19E4 : E2; + 19E5 : 29; + 19E6 : 01; + 19E7 : 85; + 19E8 : 7F; + 19E9 : 20; + 19EA : DA; + 19EB : DC; + 19EC : 20; + 19ED : E4; + 19EE : D6; + 19EF : A5; + 19F0 : 83; + 19F1 : C9; + 19F2 : 02; + 19F3 : B0; + 19F4 : 11; + 19F5 : 20; + 19F6 : 3E; + 19F7 : DE; + 19F8 : A5; + 19F9 : 80; + 19FA : 85; + 19FB : 7E; + 19FC : A5; + 19FD : 7F; + 19FE : 8D; + 19FF : 6E; + 1A00 : 02; + 1A01 : A5; + 1A02 : 81; + 1A03 : 8D; + 1A04 : 6F; + 1A05 : 02; + 1A06 : 4C; + 1A07 : 99; + 1A08 : C1; + 1A09 : BC; + 1A0A : 7A; + 1A0B : 02; + 1A0C : B9; + 1A0D : 00; + 1A0E : 02; + 1A0F : A0; + 1A10 : 04; + 1A11 : 88; + 1A12 : 30; + 1A13 : 08; + 1A14 : D9; + 1A15 : B2; + 1A16 : FE; + 1A17 : D0; + 1A18 : F8; + 1A19 : 8C; + 1A1A : 97; + 1A1B : 02; + 1A1C : A0; + 1A1D : 05; + 1A1E : 88; + 1A1F : 30; + 1A20 : 08; + 1A21 : D9; + 1A22 : B6; + 1A23 : FE; + 1A24 : D0; + 1A25 : F8; + 1A26 : 8C; + 1A27 : 4A; + 1A28 : 02; + 1A29 : 60; + 1A2A : 20; + 1A2B : 39; + 1A2C : CA; + 1A2D : A9; + 1A2E : 80; + 1A2F : 20; + 1A30 : A6; + 1A31 : DD; + 1A32 : F0; + 1A33 : F6; + 1A34 : 20; + 1A35 : 95; + 1A36 : DE; + 1A37 : A6; + 1A38 : 81; + 1A39 : E8; + 1A3A : 8A; + 1A3B : D0; + 1A3C : 05; + 1A3D : 20; + 1A3E : A3; + 1A3F : D1; + 1A40 : A9; + 1A41 : 02; + 1A42 : 20; + 1A43 : C8; + 1A44 : D4; + 1A45 : A6; + 1A46 : 82; + 1A47 : A9; + 1A48 : 01; + 1A49 : 95; + 1A4A : F2; + 1A4B : A9; + 1A4C : 80; + 1A4D : 05; + 1A4E : 82; + 1A4F : A6; + 1A50 : 83; + 1A51 : 9D; + 1A52 : 2B; + 1A53 : 02; + 1A54 : 60; + 1A55 : A9; + 1A56 : 0C; + 1A57 : 8D; + 1A58 : 2A; + 1A59 : 02; + 1A5A : A9; + 1A5B : 00; + 1A5C : AE; + 1A5D : 74; + 1A5E : 02; + 1A5F : CA; + 1A60 : F0; + 1A61 : 0B; + 1A62 : CA; + 1A63 : D0; + 1A64 : 21; + 1A65 : AD; + 1A66 : 01; + 1A67 : 02; + 1A68 : 20; + 1A69 : BD; + 1A6A : C3; + 1A6B : 30; + 1A6C : 19; + 1A6D : 85; + 1A6E : E2; + 1A6F : EE; + 1A70 : 77; + 1A71 : 02; + 1A72 : EE; + 1A73 : 78; + 1A74 : 02; + 1A75 : EE; + 1A76 : 7A; + 1A77 : 02; + 1A78 : A9; + 1A79 : 80; + 1A7A : 85; + 1A7B : E7; + 1A7C : A9; + 1A7D : 2A; + 1A7E : 8D; + 1A7F : 00; + 1A80 : 02; + 1A81 : 8D; + 1A82 : 01; + 1A83 : 02; + 1A84 : D0; + 1A85 : 18; + 1A86 : 20; + 1A87 : E5; + 1A88 : C1; + 1A89 : D0; + 1A8A : 05; + 1A8B : 20; + 1A8C : DC; + 1A8D : C2; + 1A8E : A0; + 1A8F : 03; + [1A90..1A91] : 88; + 1A92 : 8C; + 1A93 : 7A; + 1A94 : 02; + 1A95 : 20; + 1A96 : 00; + 1A97 : C2; + 1A98 : 20; + 1A99 : 98; + 1A9A : C3; + [1A9B..1A9C] : 20; + 1A9D : C3; + 1A9E : 20; + 1A9F : CA; + 1AA0 : C3; + 1AA1 : 20; + 1AA2 : B7; + 1AA3 : C7; + 1AA4 : 20; + 1AA5 : 9D; + 1AA6 : C4; + 1AA7 : 20; + 1AA8 : 9E; + 1AA9 : EC; + 1AAA : 20; + 1AAB : 37; + 1AAC : D1; + 1AAD : A6; + 1AAE : 82; + 1AAF : 9D; + 1AB0 : 3E; + 1AB1 : 02; + 1AB2 : A5; + 1AB3 : 7F; + 1AB4 : 8D; + 1AB5 : 8E; + 1AB6 : 02; + 1AB7 : 09; + 1AB8 : 04; + 1AB9 : 95; + 1ABA : EC; + 1ABB : A9; + 1ABC : 00; + 1ABD : 85; + 1ABE : A3; + 1ABF : 60; + 1AC0 : A9; + 1AC1 : 00; + 1AC2 : 8D; + 1AC3 : F9; + 1AC4 : 02; + 1AC5 : A5; + 1AC6 : 83; + 1AC7 : D0; + 1AC8 : 0B; + 1AC9 : A9; + 1ACA : 00; + 1ACB : 8D; + 1ACC : 54; + 1ACD : 02; + 1ACE : 20; + 1ACF : 27; + 1AD0 : D2; + 1AD1 : 4C; + 1AD2 : DA; + 1AD3 : D4; + 1AD4 : C9; + 1AD5 : 0F; + 1AD6 : F0; + 1AD7 : 14; + 1AD8 : 20; + 1AD9 : 02; + 1ADA : DB; + 1ADB : A5; + 1ADC : 83; + 1ADD : C9; + 1ADE : 02; + 1ADF : 90; + 1AE0 : F0; + 1AE1 : AD; + 1AE2 : 6C; + 1AE3 : 02; + 1AE4 : D0; + 1AE5 : 03; + 1AE6 : 4C; + 1AE7 : 94; + 1AE8 : C1; + 1AE9 : 4C; + 1AEA : AD; + 1AEB : C1; + 1AEC : A9; + 1AED : 0E; + 1AEE : 85; + 1AEF : 83; + 1AF0 : 20; + 1AF1 : 02; + 1AF2 : DB; + 1AF3 : C6; + 1AF4 : 83; + 1AF5 : 10; + 1AF6 : F9; + 1AF7 : AD; + 1AF8 : 6C; + 1AF9 : 02; + 1AFA : D0; + 1AFB : 03; + 1AFC : 4C; + 1AFD : 94; + 1AFE : C1; + 1AFF : 4C; + 1B00 : AD; + 1B01 : C1; + 1B02 : A6; + 1B03 : 83; + 1B04 : BD; + 1B05 : 2B; + 1B06 : 02; + 1B07 : C9; + 1B08 : FF; + 1B09 : D0; + 1B0A : 01; + 1B0B : 60; + 1B0C : 29; + 1B0D : 0F; + 1B0E : 85; + 1B0F : 82; + 1B10 : 20; + 1B11 : 25; + 1B12 : D1; + 1B13 : C9; + 1B14 : 07; + 1B15 : F0; + 1B16 : 0F; + 1B17 : C9; + 1B18 : 04; + 1B19 : F0; + 1B1A : 11; + 1B1B : 20; + 1B1C : 07; + 1B1D : D1; + 1B1E : B0; + 1B1F : 09; + 1B20 : 20; + 1B21 : 62; + 1B22 : DB; + 1B23 : 20; + 1B24 : A5; + 1B25 : DB; + 1B26 : 20; + 1B27 : F4; + 1B28 : EE; + 1B29 : 4C; + 1B2A : 27; + 1B2B : D2; + 1B2C : 20; + 1B2D : F1; + 1B2E : DD; + 1B2F : 20; + 1B30 : 1E; + 1B31 : CF; + 1B32 : 20; + 1B33 : CB; + 1B34 : E1; + 1B35 : A6; + 1B36 : D5; + 1B37 : 86; + 1B38 : 73; + 1B39 : E6; + 1B3A : 73; + 1B3B : A9; + 1B3C : 00; + 1B3D : 85; + 1B3E : 70; + 1B3F : 85; + 1B40 : 71; + 1B41 : A5; + 1B42 : D6; + 1B43 : 38; + 1B44 : E9; + 1B45 : 0E; + 1B46 : 85; + 1B47 : 72; + 1B48 : 20; + 1B49 : 51; + 1B4A : DF; + 1B4B : A6; + 1B4C : 82; + 1B4D : A5; + 1B4E : 70; + 1B4F : 95; + 1B50 : B5; + 1B51 : A5; + 1B52 : 71; + 1B53 : 95; + 1B54 : BB; + 1B55 : A9; + 1B56 : 40; + 1B57 : 20; + 1B58 : A6; + 1B59 : DD; + 1B5A : F0; + 1B5B : 03; + 1B5C : 20; + 1B5D : A5; + 1B5E : DB; + 1B5F : 4C; + 1B60 : 27; + 1B61 : D2; + 1B62 : A6; + 1B63 : 82; + [1B64..1B65] : B5; + 1B66 : 15; + 1B67 : BB; + 1B68 : D0; + 1B69 : 0C; + 1B6A : 20; + 1B6B : E8; + 1B6C : D4; + 1B6D : C9; + 1B6E : 02; + 1B6F : D0; + 1B70 : 05; + 1B71 : A9; + 1B72 : 0D; + 1B73 : 20; + 1B74 : F1; + 1B75 : CF; + 1B76 : 20; + 1B77 : E8; + 1B78 : D4; + 1B79 : C9; + 1B7A : 02; + 1B7B : D0; + 1B7C : 0F; + 1B7D : 20; + 1B7E : 1E; + 1B7F : CF; + 1B80 : A6; + 1B81 : 82; + [1B82..1B83] : B5; + 1B84 : D0; + 1B85 : 02; + 1B86 : D6; + 1B87 : BB; + 1B88 : D6; + 1B89 : B5; + 1B8A : A9; + 1B8B : 00; + 1B8C : 38; + 1B8D : E9; + 1B8E : 01; + 1B8F : 48; + 1B90 : A9; + 1B91 : 00; + 1B92 : 20; + 1B93 : C8; + 1B94 : D4; + 1B95 : 20; + 1B96 : F1; + 1B97 : CF; + 1B98 : 68; + 1B99 : 20; + 1B9A : F1; + 1B9B : CF; + 1B9C : 20; + 1B9D : C7; + 1B9E : D0; + 1B9F : 20; + 1BA0 : 99; + 1BA1 : D5; + 1BA2 : 4C; + 1BA3 : 1E; + 1BA4 : CF; + 1BA5 : A6; + 1BA6 : 82; + 1BA7 : 8E; + 1BA8 : 70; + 1BA9 : 02; + 1BAA : A5; + 1BAB : 83; + 1BAC : 48; + 1BAD : BD; + 1BAE : 60; + 1BAF : 02; + 1BB0 : 85; + 1BB1 : 81; + 1BB2 : BD; + 1BB3 : 66; + 1BB4 : 02; + 1BB5 : 8D; + 1BB6 : 94; + 1BB7 : 02; + 1BB8 : B5; + 1BB9 : EC; + 1BBA : 29; + 1BBB : 01; + 1BBC : 85; + 1BBD : 7F; + 1BBE : AD; + 1BBF : 85; + 1BC0 : FE; + 1BC1 : 85; + 1BC2 : 80; + 1BC3 : 20; + 1BC4 : 93; + 1BC5 : DF; + 1BC6 : 48; + 1BC7 : 85; + 1BC8 : F9; + 1BC9 : 20; + 1BCA : 60; + 1BCB : D4; + 1BCC : A0; + 1BCD : 00; + 1BCE : BD; + 1BCF : E0; + 1BD0 : FE; + 1BD1 : 85; + 1BD2 : 87; + 1BD3 : AD; + 1BD4 : 94; + 1BD5 : 02; + 1BD6 : 85; + 1BD7 : 86; + 1BD8 : B1; + 1BD9 : 86; + 1BDA : 29; + 1BDB : 20; + 1BDC : F0; + 1BDD : 43; + 1BDE : 20; + 1BDF : 25; + 1BE0 : D1; + 1BE1 : C9; + 1BE2 : 04; + 1BE3 : F0; + 1BE4 : 44; + 1BE5 : B1; + 1BE6 : 86; + 1BE7 : 29; + 1BE8 : 8F; + 1BE9 : 91; + 1BEA : 86; + 1BEB : C8; + 1BEC : B1; + 1BED : 86; + 1BEE : 85; + 1BEF : 80; + 1BF0 : 84; + 1BF1 : 71; + 1BF2 : A0; + 1BF3 : 1B; + 1BF4 : B1; + 1BF5 : 86; + 1BF6 : 48; + 1BF7 : 88; + 1BF8 : B1; + 1BF9 : 86; + 1BFA : D0; + 1BFB : 0A; + 1BFC : 85; + 1BFD : 80; + 1BFE : 68; + 1BFF : 85; + 1C00 : 81; + 1C01 : A9; + 1C02 : 67; + 1C03 : 20; + 1C04 : 45; + 1C05 : E6; + 1C06 : 48; + 1C07 : A9; + 1C08 : 00; + 1C09 : 91; + 1C0A : 86; + 1C0B : C8; + 1C0C : 91; + 1C0D : 86; + 1C0E : 68; + 1C0F : A4; + 1C10 : 71; + 1C11 : 91; + 1C12 : 86; + 1C13 : C8; + 1C14 : B1; + 1C15 : 86; + 1C16 : 85; + 1C17 : 81; + 1C18 : 68; + 1C19 : 91; + 1C1A : 86; + 1C1B : 20; + 1C1C : 7D; + 1C1D : C8; + 1C1E : 4C; + 1C1F : 29; + 1C20 : DC; + 1C21 : B1; + 1C22 : 86; + 1C23 : 29; + 1C24 : 0F; + 1C25 : 09; + 1C26 : 80; + 1C27 : 91; + 1C28 : 86; + 1C29 : AE; + 1C2A : 70; + 1C2B : 02; + 1C2C : A0; + 1C2D : 1C; + [1C2E..1C2F] : B5; + 1C30 : 91; + 1C31 : 86; + 1C32 : C8; + 1C33 : B5; + 1C34 : BB; + 1C35 : 91; + 1C36 : 86; + 1C37 : 68; + 1C38 : AA; + 1C39 : A9; + 1C3A : 90; + 1C3B : 05; + 1C3C : 7F; + 1C3D : 20; + 1C3E : 90; + 1C3F : D5; + 1C40 : 68; + 1C41 : 85; + 1C42 : 83; + 1C43 : 4C; + 1C44 : 07; + 1C45 : D1; + 1C46 : A9; + 1C47 : 01; + 1C48 : 20; + 1C49 : E2; + 1C4A : D1; + 1C4B : 20; + 1C4C : B6; + 1C4D : DC; + 1C4E : AD; + 1C4F : 4A; + 1C50 : 02; + 1C51 : 48; + 1C52 : 0A; + 1C53 : 05; + 1C54 : 7F; + 1C55 : 95; + 1C56 : EC; + 1C57 : 20; + 1C58 : 9B; + 1C59 : D0; + 1C5A : A6; + 1C5B : 82; + 1C5C : A5; + 1C5D : 80; + 1C5E : D0; + 1C5F : 05; + 1C60 : A5; + 1C61 : 81; + 1C62 : 9D; + 1C63 : 44; + 1C64 : 02; + 1C65 : 68; + 1C66 : C9; + 1C67 : 04; + 1C68 : D0; + 1C69 : 3F; + 1C6A : A4; + 1C6B : 83; + 1C6C : B9; + 1C6D : 2B; + 1C6E : 02; + 1C6F : 09; + 1C70 : 40; + 1C71 : 99; + 1C72 : 2B; + 1C73 : 02; + 1C74 : AD; + 1C75 : 58; + 1C76 : 02; + 1C77 : 95; + 1C78 : C7; + 1C79 : 20; + 1C7A : 8E; + 1C7B : D2; + 1C7C : 10; + 1C7D : 03; + 1C7E : 4C; + 1C7F : 0F; + 1C80 : D2; + 1C81 : A6; + 1C82 : 82; + 1C83 : 95; + 1C84 : CD; + 1C85 : AC; + 1C86 : 59; + 1C87 : 02; + 1C88 : 84; + 1C89 : 80; + 1C8A : AC; + 1C8B : 5A; + 1C8C : 02; + 1C8D : 84; + 1C8E : 81; + 1C8F : 20; + 1C90 : D3; + 1C91 : D6; + 1C92 : 20; + 1C93 : 73; + 1C94 : DE; + 1C95 : 20; + 1C96 : 99; + 1C97 : D5; + 1C98 : A6; + 1C99 : 82; + 1C9A : A9; + 1C9B : 02; + 1C9C : 95; + 1C9D : C1; + 1C9E : A9; + 1C9F : 00; + 1CA0 : 20; + 1CA1 : C8; + 1CA2 : D4; + 1CA3 : 20; + 1CA4 : 53; + 1CA5 : E1; + 1CA6 : 4C; + 1CA7 : 3E; + 1CA8 : DE; + 1CA9 : 20; + 1CAA : 56; + 1CAB : D1; + 1CAC : A6; + 1CAD : 82; + 1CAE : 9D; + 1CAF : 3E; + 1CB0 : 02; + 1CB1 : A9; + 1CB2 : 88; + 1CB3 : 95; + 1CB4 : F2; + 1CB5 : 60; + 1CB6 : A6; + 1CB7 : 82; + 1CB8 : B5; + 1CB9 : A7; + 1CBA : 0A; + 1CBB : A8; + 1CBC : A9; + 1CBD : 02; + [1CBE..1CBF] : 99; + 1CC0 : 00; + 1CC1 : B5; + 1CC2 : AE; + 1CC3 : 09; + 1CC4 : 80; + 1CC5 : 95; + 1CC6 : AE; + 1CC7 : 0A; + 1CC8 : A8; + 1CC9 : A9; + 1CCA : 02; + [1CCB..1CCC] : 99; + 1CCD : 00; + 1CCE : A9; + 1CCF : 00; + 1CD0 : 95; + 1CD1 : B5; + 1CD2 : 95; + 1CD3 : BB; + 1CD4 : A9; + 1CD5 : 00; + 1CD6 : 9D; + 1CD7 : 44; + 1CD8 : 02; + 1CD9 : 60; + 1CDA : 20; + 1CDB : A9; + 1CDC : F1; + 1CDD : A9; + 1CDE : 01; + 1CDF : 20; + 1CE0 : DF; + 1CE1 : D1; + 1CE2 : 20; + 1CE3 : D0; + 1CE4 : D6; + 1CE5 : 20; + 1CE6 : B6; + 1CE7 : DC; + 1CE8 : A6; + 1CE9 : 82; + 1CEA : AD; + 1CEB : 4A; + 1CEC : 02; + 1CED : 48; + 1CEE : 0A; + 1CEF : 05; + 1CF0 : 7F; + 1CF1 : 95; + 1CF2 : EC; + 1CF3 : 68; + 1CF4 : C9; + 1CF5 : 04; + 1CF6 : F0; + 1CF7 : 05; + 1CF8 : A9; + 1CF9 : 01; + 1CFA : 95; + 1CFB : F2; + 1CFC : 60; + 1CFD : A4; + 1CFE : 83; + 1CFF : B9; + 1D00 : 2B; + 1D01 : 02; + 1D02 : 29; + 1D03 : 3F; + 1D04 : 09; + 1D05 : 40; + 1D06 : 99; + 1D07 : 2B; + 1D08 : 02; + 1D09 : AD; + 1D0A : 58; + 1D0B : 02; + 1D0C : 95; + 1D0D : C7; + 1D0E : 20; + 1D0F : 8E; + 1D10 : D2; + 1D11 : 10; + 1D12 : 03; + 1D13 : 4C; + 1D14 : 0F; + 1D15 : D2; + 1D16 : A6; + 1D17 : 82; + 1D18 : 95; + 1D19 : CD; + 1D1A : 20; + 1D1B : C1; + 1D1C : DE; + 1D1D : 20; + 1D1E : 1E; + 1D1F : F1; + 1D20 : A5; + 1D21 : 80; + 1D22 : 8D; + 1D23 : 59; + 1D24 : 02; + 1D25 : A5; + 1D26 : 81; + 1D27 : 8D; + 1D28 : 5A; + 1D29 : 02; + 1D2A : A6; + 1D2B : 82; + 1D2C : B5; + 1D2D : CD; + 1D2E : 20; + 1D2F : D3; + 1D30 : D6; + 1D31 : A9; + 1D32 : 00; + 1D33 : 20; + 1D34 : E9; + 1D35 : DE; + 1D36 : A9; + 1D37 : 00; + 1D38 : 20; + 1D39 : 8D; + 1D3A : DD; + 1D3B : A9; + 1D3C : 11; + 1D3D : 20; + 1D3E : 8D; + 1D3F : DD; + 1D40 : A9; + 1D41 : 00; + 1D42 : 20; + 1D43 : 8D; + 1D44 : DD; + 1D45 : AD; + 1D46 : 58; + 1D47 : 02; + 1D48 : 20; + 1D49 : 8D; + 1D4A : DD; + 1D4B : A5; + 1D4C : 80; + 1D4D : 20; + 1D4E : 8D; + 1D4F : DD; + 1D50 : A5; + 1D51 : 81; + 1D52 : 20; + 1D53 : 8D; + 1D54 : DD; + 1D55 : A9; + 1D56 : 10; + 1D57 : 20; + 1D58 : E9; + 1D59 : DE; + 1D5A : 20; + 1D5B : 3E; + 1D5C : DE; + 1D5D : A5; + 1D5E : 80; + 1D5F : 20; + 1D60 : 8D; + 1D61 : DD; + 1D62 : A5; + 1D63 : 81; + 1D64 : 20; + 1D65 : 8D; + 1D66 : DD; + 1D67 : 20; + 1D68 : 6C; + 1D69 : DE; + 1D6A : 20; + 1D6B : 99; + 1D6C : D5; + 1D6D : A9; + 1D6E : 02; + 1D6F : 20; + 1D70 : C8; + 1D71 : D4; + 1D72 : A6; + 1D73 : 82; + 1D74 : 38; + 1D75 : A9; + 1D76 : 00; + 1D77 : F5; + 1D78 : C7; + 1D79 : 95; + 1D7A : C1; + 1D7B : 20; + [1D7C..1D7D] : E2; + 1D7E : 20; + 1D7F : 19; + 1D80 : DE; + 1D81 : 20; + 1D82 : 5E; + 1D83 : DE; + 1D84 : 20; + 1D85 : 99; + 1D86 : D5; + 1D87 : 20; + 1D88 : F4; + 1D89 : EE; + 1D8A : 4C; + 1D8B : 98; + 1D8C : DC; + 1D8D : 48; + 1D8E : A6; + 1D8F : 82; + 1D90 : B5; + 1D91 : CD; + 1D92 : 4C; + 1D93 : FD; + 1D94 : CF; + 1D95 : 90; + 1D96 : 06; + 1D97 : A6; + 1D98 : 82; + 1D99 : 15; + 1D9A : EC; + 1D9B : D0; + 1D9C : 06; + 1D9D : A6; + 1D9E : 82; + 1D9F : 49; + 1DA0 : FF; + 1DA1 : 35; + 1DA2 : EC; + 1DA3 : 95; + 1DA4 : EC; + 1DA5 : 60; + 1DA6 : A6; + 1DA7 : 82; + 1DA8 : 35; + 1DA9 : EC; + 1DAA : 60; + 1DAB : 20; + 1DAC : 93; + 1DAD : DF; + 1DAE : AA; + 1DAF : BD; + 1DB0 : 5B; + 1DB1 : 02; + 1DB2 : 29; + 1DB3 : F0; + 1DB4 : C9; + 1DB5 : 90; + 1DB6 : 60; + 1DB7 : A2; + 1DB8 : 00; + 1DB9 : 86; + 1DBA : 71; + 1DBB : BD; + 1DBC : 2B; + 1DBD : 02; + 1DBE : C9; + 1DBF : FF; + 1DC0 : D0; + 1DC1 : 08; + 1DC2 : A6; + 1DC3 : 71; + 1DC4 : E8; + 1DC5 : E0; + 1DC6 : 10; + 1DC7 : 90; + 1DC8 : F0; + 1DC9 : 60; + 1DCA : 86; + 1DCB : 71; + 1DCC : 29; + 1DCD : 3F; + 1DCE : A8; + 1DCF : B9; + 1DD0 : EC; + 1DD1 : 00; + 1DD2 : 29; + 1DD3 : 01; + 1DD4 : 85; + 1DD5 : 70; + 1DD6 : AE; + 1DD7 : 53; + 1DD8 : 02; + 1DD9 : B5; + 1DDA : E2; + 1DDB : 29; + 1DDC : 01; + 1DDD : C5; + 1DDE : 70; + 1DDF : D0; + 1DE0 : E1; + 1DE1 : B9; + 1DE2 : 60; + 1DE3 : 02; + 1DE4 : D5; + 1DE5 : D8; + 1DE6 : D0; + 1DE7 : DA; + 1DE8 : B9; + 1DE9 : 66; + 1DEA : 02; + 1DEB : D5; + 1DEC : DD; + 1DED : D0; + 1DEE : D3; + 1DEF : 18; + 1DF0 : 60; + 1DF1 : 20; + 1DF2 : 9E; + 1DF3 : DF; + 1DF4 : 50; + 1DF5 : 06; + 1DF6 : 20; + 1DF7 : 5E; + 1DF8 : DE; + 1DF9 : 20; + 1DFA : 99; + 1DFB : D5; + 1DFC : 60; + 1DFD : 20; + 1DFE : 2B; + 1DFF : DE; + 1E00 : A5; + 1E01 : 80; + 1E02 : 91; + 1E03 : 94; + 1E04 : C8; + 1E05 : A5; + 1E06 : 81; + 1E07 : 91; + 1E08 : 94; + 1E09 : 4C; + 1E0A : 05; + 1E0B : E1; + 1E0C : 20; + 1E0D : 2B; + 1E0E : DE; + 1E0F : B1; + 1E10 : 94; + 1E11 : 85; + 1E12 : 80; + 1E13 : C8; + 1E14 : B1; + 1E15 : 94; + 1E16 : 85; + 1E17 : 81; + 1E18 : 60; + 1E19 : 20; + 1E1A : 2B; + 1E1B : DE; + 1E1C : A9; + 1E1D : 00; + 1E1E : 91; + 1E1F : 94; + 1E20 : C8; + 1E21 : A6; + 1E22 : 82; + 1E23 : B5; + 1E24 : C1; + 1E25 : AA; + 1E26 : CA; + 1E27 : 8A; + 1E28 : 91; + 1E29 : 94; + 1E2A : 60; + 1E2B : 20; + 1E2C : 93; + 1E2D : DF; + 1E2E : 0A; + 1E2F : AA; + 1E30 : B5; + 1E31 : 9A; + 1E32 : 85; + 1E33 : 95; + 1E34 : A9; + 1E35 : 00; + 1E36 : 85; + 1E37 : 94; + 1E38 : A0; + 1E39 : 00; + 1E3A : 60; + 1E3B : 20; + 1E3C : EB; + 1E3D : D0; + 1E3E : 20; + 1E3F : 93; + 1E40 : DF; + 1E41 : 85; + 1E42 : F9; + 1E43 : 0A; + 1E44 : A8; + 1E45 : B9; + 1E46 : 06; + 1E47 : 00; + 1E48 : 85; + 1E49 : 80; + 1E4A : B9; + 1E4B : 07; + 1E4C : 00; + 1E4D : 85; + 1E4E : 81; + 1E4F : 60; + 1E50 : A9; + 1E51 : 90; + 1E52 : 8D; + 1E53 : 4D; + 1E54 : 02; + 1E55 : D0; + 1E56 : 28; + 1E57 : A9; + 1E58 : 80; + 1E59 : 8D; + 1E5A : 4D; + 1E5B : 02; + 1E5C : D0; + 1E5D : 21; + 1E5E : A9; + 1E5F : 90; + 1E60 : 8D; + 1E61 : 4D; + 1E62 : 02; + 1E63 : D0; + 1E64 : 26; + 1E65 : A9; + 1E66 : 80; + 1E67 : 8D; + 1E68 : 4D; + 1E69 : 02; + 1E6A : D0; + 1E6B : 1F; + 1E6C : A9; + 1E6D : 90; + 1E6E : 8D; + 1E6F : 4D; + 1E70 : 02; + 1E71 : D0; + 1E72 : 02; + 1E73 : A9; + 1E74 : 80; + 1E75 : 8D; + 1E76 : 4D; + 1E77 : 02; + 1E78 : A6; + 1E79 : 82; + 1E7A : B5; + 1E7B : CD; + 1E7C : AA; + 1E7D : 10; + 1E7E : 13; + 1E7F : 20; + 1E80 : D0; + 1E81 : D6; + 1E82 : 20; + 1E83 : 93; + 1E84 : DF; + 1E85 : AA; + 1E86 : A5; + 1E87 : 7F; + 1E88 : 9D; + 1E89 : 5B; + 1E8A : 02; + 1E8B : 20; + 1E8C : 15; + 1E8D : E1; + 1E8E : 20; + 1E8F : 93; + 1E90 : DF; + 1E91 : AA; + 1E92 : 4C; + 1E93 : 06; + 1E94 : D5; + 1E95 : A9; + 1E96 : 00; + 1E97 : 20; + 1E98 : C8; + 1E99 : D4; + 1E9A : 20; + 1E9B : 37; + 1E9C : D1; + 1E9D : 85; + 1E9E : 80; + 1E9F : 20; + 1EA0 : 37; + 1EA1 : D1; + 1EA2 : 85; + 1EA3 : 81; + 1EA4 : 60; + 1EA5 : 48; + 1EA6 : A9; + 1EA7 : 00; + 1EA8 : 85; + 1EA9 : 6F; + 1EAA : 85; + 1EAB : 71; + 1EAC : B9; + 1EAD : E0; + 1EAE : FE; + 1EAF : 85; + 1EB0 : 70; + 1EB1 : BD; + 1EB2 : E0; + 1EB3 : FE; + 1EB4 : 85; + 1EB5 : 72; + 1EB6 : 68; + 1EB7 : A8; + 1EB8 : 88; + 1EB9 : B1; + 1EBA : 6F; + 1EBB : 91; + 1EBC : 71; + 1EBD : 88; + 1EBE : 10; + 1EBF : F9; + 1EC0 : 60; + 1EC1 : A8; + 1EC2 : B9; + 1EC3 : E0; + 1EC4 : FE; + 1EC5 : 85; + 1EC6 : 70; + 1EC7 : A9; + 1EC8 : 00; + 1EC9 : 85; + 1ECA : 6F; + 1ECB : A8; + 1ECC : 91; + 1ECD : 6F; + 1ECE : C8; + 1ECF : D0; + 1ED0 : FB; + 1ED1 : 60; + 1ED2 : A9; + 1ED3 : 00; + 1ED4 : 20; + 1ED5 : DC; + 1ED6 : DE; + 1ED7 : A0; + 1ED8 : 02; + 1ED9 : B1; + 1EDA : 94; + 1EDB : 60; + 1EDC : 85; + 1EDD : 94; + 1EDE : A6; + 1EDF : 82; + 1EE0 : B5; + 1EE1 : CD; + 1EE2 : AA; + 1EE3 : BD; + 1EE4 : E0; + 1EE5 : FE; + 1EE6 : 85; + 1EE7 : 95; + 1EE8 : 60; + 1EE9 : 48; + 1EEA : 20; + 1EEB : DC; + 1EEC : DE; + 1EED : 48; + 1EEE : 8A; + 1EEF : 0A; + 1EF0 : AA; + 1EF1 : 68; + 1EF2 : 95; + 1EF3 : 9A; + 1EF4 : 68; + 1EF5 : 95; + 1EF6 : 99; + 1EF7 : 60; + 1EF8 : 20; + 1EF9 : 66; + 1EFA : DF; + 1EFB : 30; + 1EFC : 0E; + 1EFD : 50; + 1EFE : 13; + 1EFF : A6; + 1F00 : 82; + 1F01 : B5; + 1F02 : CD; + 1F03 : 20; + 1F04 : 1B; + 1F05 : DF; + 1F06 : 20; + 1F07 : 66; + 1F08 : DF; + 1F09 : 10; + 1F0A : 07; + 1F0B : 20; + 1F0C : CB; + 1F0D : E1; + 1F0E : 2C; + 1F0F : CE; + 1F10 : FE; + 1F11 : 60; + 1F12 : A5; + 1F13 : D6; + 1F14 : 20; + 1F15 : E9; + 1F16 : DE; + 1F17 : 2C; + 1F18 : CD; + 1F19 : FE; + 1F1A : 60; + 1F1B : 85; + 1F1C : F9; + 1F1D : A9; + 1F1E : 80; + 1F1F : D0; + 1F20 : 04; + 1F21 : 85; + 1F22 : F9; + 1F23 : A9; + 1F24 : 90; + 1F25 : 48; + 1F26 : B5; + 1F27 : EC; + 1F28 : 29; + 1F29 : 01; + 1F2A : 85; + 1F2B : 7F; + 1F2C : 68; + 1F2D : 05; + 1F2E : 7F; + 1F2F : 8D; + 1F30 : 4D; + 1F31 : 02; + 1F32 : B1; + 1F33 : 94; + 1F34 : 85; + 1F35 : 80; + 1F36 : C8; + 1F37 : B1; + 1F38 : 94; + 1F39 : 85; + 1F3A : 81; + 1F3B : A5; + 1F3C : F9; + 1F3D : 20; + 1F3E : D3; + 1F3F : D6; + 1F40 : A6; + 1F41 : F9; + 1F42 : 4C; + 1F43 : 93; + 1F44 : D5; + 1F45 : A6; + 1F46 : 82; + 1F47 : B5; + 1F48 : CD; + 1F49 : 4C; + 1F4A : EB; + 1F4B : D4; + 1F4C : A9; + 1F4D : 78; + 1F4E : 20; + 1F4F : 5C; + 1F50 : DF; + 1F51 : CA; + 1F52 : 10; + 1F53 : F8; + 1F54 : A5; + 1F55 : 72; + 1F56 : 4A; + 1F57 : 20; + 1F58 : 5C; + 1F59 : DF; + 1F5A : A5; + 1F5B : 73; + 1F5C : 18; + 1F5D : 65; + 1F5E : 70; + 1F5F : 85; + 1F60 : 70; + 1F61 : 90; + 1F62 : 02; + 1F63 : E6; + 1F64 : 71; + 1F65 : 60; + 1F66 : 20; + 1F67 : D2; + 1F68 : DE; + 1F69 : C5; + 1F6A : D5; + 1F6B : D0; + 1F6C : 0E; + 1F6D : A4; + 1F6E : D6; + 1F6F : B1; + 1F70 : 94; + 1F71 : F0; + 1F72 : 04; + 1F73 : 2C; + 1F74 : CD; + 1F75 : FE; + 1F76 : 60; + 1F77 : 2C; + 1F78 : CF; + 1F79 : FE; + 1F7A : 60; + 1F7B : A5; + 1F7C : D5; + 1F7D : C9; + 1F7E : 06; + 1F7F : B0; + [1F80..1F81] : 0A; + 1F82 : A8; + 1F83 : A9; + 1F84 : 04; + 1F85 : 85; + 1F86 : 94; + 1F87 : B1; + 1F88 : 94; + 1F89 : D0; + 1F8A : 04; + 1F8B : 2C; + 1F8C : D0; + 1F8D : FE; + 1F8E : 60; + 1F8F : 2C; + 1F90 : CE; + 1F91 : FE; + 1F92 : 60; + 1F93 : A6; + 1F94 : 82; + 1F95 : B5; + 1F96 : A7; + 1F97 : 10; + 1F98 : 02; + 1F99 : B5; + 1F9A : AE; + 1F9B : 29; + 1F9C : BF; + 1F9D : 60; + 1F9E : A6; + 1F9F : 82; + 1FA0 : 8E; + 1FA1 : 57; + 1FA2 : 02; + 1FA3 : B5; + 1FA4 : A7; + 1FA5 : 10; + 1FA6 : 09; + 1FA7 : 8A; + 1FA8 : 18; + 1FA9 : 69; + 1FAA : 07; + 1FAB : 8D; + 1FAC : 57; + 1FAD : 02; + 1FAE : B5; + 1FAF : AE; + 1FB0 : 85; + 1FB1 : 70; + 1FB2 : 29; + 1FB3 : 1F; + 1FB4 : 24; + 1FB5 : 70; + 1FB6 : 60; + 1FB7 : A6; + 1FB8 : 82; + 1FB9 : B5; + 1FBA : A7; + 1FBB : 30; + 1FBC : 02; + 1FBD : B5; + 1FBE : AE; + 1FBF : C9; + 1FC0 : FF; + 1FC1 : 60; + 1FC2 : A6; + 1FC3 : 82; + 1FC4 : 09; + 1FC5 : 80; + 1FC6 : B4; + 1FC7 : A7; + 1FC8 : 10; + 1FC9 : 03; + 1FCA : 95; + 1FCB : A7; + 1FCC : 60; + 1FCD : 95; + 1FCE : AE; + 1FCF : 60; + 1FD0 : A9; + [1FD1..1FD2] : 20; + 1FD3 : 9D; + 1FD4 : DD; + 1FD5 : A9; + 1FD6 : 80; + 1FD7 : 20; + 1FD8 : A6; + 1FD9 : DD; + 1FDA : D0; + 1FDB : 41; + 1FDC : A6; + 1FDD : 82; + 1FDE : F6; + 1FDF : B5; + 1FE0 : D0; + 1FE1 : 02; + 1FE2 : F6; + 1FE3 : BB; + 1FE4 : A6; + 1FE5 : 82; + 1FE6 : B5; + 1FE7 : C1; + 1FE8 : F0; + 1FE9 : 2E; + 1FEA : 20; + 1FEB : E8; + 1FEC : D4; + 1FED : A6; + 1FEE : 82; + 1FEF : D5; + 1FF0 : C1; + 1FF1 : 90; + 1FF2 : 03; + 1FF3 : 20; + 1FF4 : 3C; + 1FF5 : E0; + 1FF6 : A6; + 1FF7 : 82; + 1FF8 : B5; + 1FF9 : C1; + 1FFA : 20; + 1FFB : C8; + 1FFC : D4; + 1FFD : A1; + 1FFE : 99; + [1FFF..2000] : 85; + 2001 : A9; + [2002..2003] : 20; + 2004 : 9D; + 2005 : DD; + 2006 : 20; + 2007 : 04; + 2008 : E3; + 2009 : 48; + 200A : 90; + 200B : 28; + 200C : A9; + 200D : 00; + 200E : 20; + 200F : F6; + 2010 : D4; + 2011 : D0; + 2012 : 21; + 2013 : 68; + 2014 : C9; + 2015 : 02; + 2016 : F0; + 2017 : 12; + 2018 : A9; + 2019 : 80; + 201A : 20; + 201B : 97; + 201C : DD; + 201D : 20; + 201E : 2F; + 201F : D1; + 2020 : B5; + [2021..2022] : 99; + 2023 : 44; + 2024 : 02; + 2025 : A9; + 2026 : 0D; + [2027..2028] : 85; + 2029 : 60; + 202A : 20; + 202B : 35; + 202C : E0; + 202D : A6; + 202E : 82; + 202F : A9; + 2030 : 00; + 2031 : 95; + 2032 : C1; + 2033 : 60; + 2034 : 68; + 2035 : A6; + 2036 : 82; + 2037 : 95; + 2038 : C1; + 2039 : 4C; + 203A : 6E; + 203B : E1; + 203C : 20; + 203D : D3; + 203E : D1; + 203F : 20; + 2040 : 95; + 2041 : DE; + 2042 : 20; + 2043 : 9E; + 2044 : DF; + 2045 : 50; + 2046 : 16; + 2047 : 20; + 2048 : 5E; + 2049 : DE; + 204A : 20; + 204B : 1E; + 204C : CF; + 204D : A9; + 204E : 02; + 204F : 20; + 2050 : C8; + 2051 : D4; + 2052 : 20; + 2053 : AB; + 2054 : DD; + 2055 : D0; + 2056 : 24; + 2057 : 20; + 2058 : 57; + 2059 : DE; + 205A : 4C; + 205B : 99; + 205C : D5; + 205D : 20; + 205E : 1E; + 205F : CF; + 2060 : 20; + 2061 : AB; + 2062 : DD; + 2063 : D0; + 2064 : 06; + 2065 : 20; + 2066 : 57; + 2067 : DE; + 2068 : 20; + 2069 : 99; + 206A : D5; + 206B : 20; + 206C : 95; + 206D : DE; + 206E : A5; + 206F : 80; + 2070 : F0; + 2071 : 09; + 2072 : 20; + 2073 : 1E; + 2074 : CF; + 2075 : 20; + 2076 : 57; + 2077 : DE; + 2078 : 20; + 2079 : 1E; + 207A : CF; + 207B : 60; + 207C : 20; + 207D : 05; + 207E : E1; + 207F : 20; + 2080 : 93; + 2081 : DF; + 2082 : 0A; + 2083 : AA; + 2084 : A5; + 2085 : 85; + 2086 : 81; + 2087 : 99; + 2088 : B4; + 2089 : 99; + 208A : C8; + 208B : D0; + 208C : 09; + 208D : A4; + 208E : 82; + 208F : B9; + 2090 : C1; + 2091 : 00; + 2092 : F0; + 2093 : 0A; + 2094 : A0; + 2095 : 02; + 2096 : 98; + 2097 : A4; + 2098 : 82; + 2099 : D9; + 209A : C1; + 209B : 00; + 209C : D0; + 209D : 05; + 209E : A9; + 209F : 20; + 20A0 : 4C; + 20A1 : 97; + 20A2 : DD; + 20A3 : F6; + 20A4 : 99; + 20A5 : D0; + 20A6 : 03; + 20A7 : 20; + 20A8 : 3C; + 20A9 : E0; + 20AA : 60; + 20AB : A9; + 20AC : A0; + 20AD : 20; + 20AE : A6; + 20AF : DD; + 20B0 : D0; + 20B1 : 27; + 20B2 : A5; + 20B3 : 85; + 20B4 : 20; + 20B5 : 7C; + 20B6 : E0; + 20B7 : A5; + 20B8 : F8; + 20B9 : F0; + 20BA : 0D; + 20BB : 60; + 20BC : A9; + [20BD..20BE] : 20; + 20BF : A6; + 20C0 : DD; + 20C1 : F0; + 20C2 : 05; + 20C3 : A9; + 20C4 : 51; + 20C5 : 8D; + 20C6 : 6C; + 20C7 : 02; + 20C8 : 20; + 20C9 : F3; + 20CA : E0; + 20CB : 20; + 20CC : 53; + 20CD : E1; + 20CE : AD; + 20CF : 6C; + 20D0 : 02; + 20D1 : F0; + 20D2 : 03; + 20D3 : 4C; + 20D4 : C8; + 20D5 : C1; + 20D6 : 4C; + 20D7 : BC; + 20D8 : E6; + 20D9 : 29; + 20DA : 80; + 20DB : D0; + 20DC : 05; + 20DD : A5; + 20DE : F8; + 20DF : F0; + 20E0 : DB; + 20E1 : 60; + 20E2 : A5; + 20E3 : 85; + 20E4 : 48; + 20E5 : 20; + 20E6 : 1C; + 20E7 : E3; + 20E8 : 68; + [20E9..20EA] : 85; + 20EB : A9; + 20EC : 80; + 20ED : 20; + 20EE : 9D; + 20EF : DD; + 20F0 : 4C; + 20F1 : B2; + 20F2 : E0; + 20F3 : A9; + [20F4..20F5] : 20; + 20F6 : A6; + 20F7 : DD; + 20F8 : D0; + 20F9 : 0A; + 20FA : A9; + 20FB : 00; + [20FC..20FD] : 85; + 20FE : 20; + 20FF : 7C; + 2100 : E0; + 2101 : 4C; + 2102 : F3; + 2103 : E0; + 2104 : 60; + 2105 : A9; + 2106 : 40; + 2107 : 20; + 2108 : 97; + 2109 : DD; + 210A : 20; + 210B : 9E; + 210C : DF; + 210D : 09; + 210E : 40; + 210F : AE; + 2110 : 57; + 2111 : 02; + 2112 : 95; + 2113 : A7; + 2114 : 60; + 2115 : 20; + 2116 : 9E; + 2117 : DF; + 2118 : 29; + 2119 : BF; + 211A : AE; + 211B : 57; + 211C : 02; + 211D : 95; + 211E : A7; + 211F : 60; + 2120 : A9; + 2121 : 80; + 2122 : 20; + 2123 : A6; + 2124 : DD; + 2125 : D0; + 2126 : 37; + 2127 : 20; + 2128 : 2F; + 2129 : D1; + 212A : B5; + 212B : 99; + 212C : D9; + 212D : 44; + 212E : 02; + 212F : F0; + 2130 : 22; + 2131 : F6; + 2132 : 99; + 2133 : D0; + 2134 : 06; + 2135 : 20; + 2136 : 3C; + 2137 : E0; + 2138 : 20; + 2139 : 2F; + 213A : D1; + 213B : A1; + [213C..213D] : 99; + 213E : 3E; + 213F : 02; + 2140 : A9; + 2141 : 89; + 2142 : 99; + 2143 : F2; + 2144 : 00; + 2145 : B5; + 2146 : 99; + 2147 : D9; + 2148 : 44; + 2149 : 02; + 214A : F0; + 214B : 01; + 214C : 60; + 214D : A9; + 214E : 81; + 214F : 99; + 2150 : F2; + 2151 : 00; + 2152 : 60; + 2153 : 20; + 2154 : D0; + 2155 : DF; + 2156 : 20; + 2157 : 2F; + 2158 : D1; + 2159 : A5; + 215A : 85; + 215B : 4C; + 215C : 3D; + 215D : E1; + 215E : A6; + 215F : 82; + 2160 : A9; + 2161 : 0D; + 2162 : 9D; + 2163 : 3E; + 2164 : 02; + 2165 : A9; + 2166 : 81; + 2167 : 95; + 2168 : F2; + 2169 : A9; + 216A : 50; + 216B : 20; + 216C : C8; + 216D : C1; + 216E : A6; + 216F : 82; + 2170 : B5; + 2171 : C1; + 2172 : 85; + 2173 : 87; + 2174 : C6; + 2175 : 87; + 2176 : C9; + 2177 : 02; + 2178 : D0; + 2179 : 04; + 217A : A9; + 217B : FF; + 217C : 85; + 217D : 87; + 217E : B5; + 217F : C7; + 2180 : 85; + 2181 : 88; + 2182 : 20; + 2183 : E8; + 2184 : D4; + 2185 : A6; + 2186 : 82; + 2187 : C5; + 2188 : 87; + 2189 : 90; + 218A : 19; + 218B : F0; + 218C : 17; + 218D : 20; + 218E : 1E; + 218F : CF; + 2190 : 20; + 2191 : B2; + 2192 : E1; + 2193 : 90; + 2194 : 08; + 2195 : A6; + 2196 : 82; + 2197 : 9D; + 2198 : 44; + 2199 : 02; + 219A : 4C; + 219B : 1E; + 219C : CF; + 219D : 20; + 219E : 1E; + 219F : CF; + 21A0 : A9; + 21A1 : FF; + 21A2 : 85; + 21A3 : 87; + 21A4 : 20; + 21A5 : B2; + 21A6 : E1; + 21A7 : B0; + 21A8 : 03; + 21A9 : 20; + 21AA : E8; + 21AB : D4; + 21AC : A6; + 21AD : 82; + 21AE : 9D; + 21AF : 44; + 21B0 : 02; + 21B1 : 60; + 21B2 : 20; + 21B3 : 2B; + 21B4 : DE; + 21B5 : A4; + 21B6 : 87; + 21B7 : B1; + 21B8 : 94; + 21B9 : D0; + 21BA : 0D; + 21BB : 88; + 21BC : C0; + 21BD : 02; + 21BE : 90; + 21BF : 04; + 21C0 : C6; + 21C1 : 88; + 21C2 : D0; + 21C3 : F3; + 21C4 : C6; + 21C5 : 88; + 21C6 : 18; + 21C7 : 60; + 21C8 : 98; + 21C9 : 38; + 21CA : 60; + 21CB : 20; + 21CC : D2; + 21CD : DE; + 21CE : 85; + 21CF : D5; + 21D0 : A9; + 21D1 : 04; + 21D2 : 85; + 21D3 : 94; + 21D4 : A0; + 21D5 : 0A; + 21D6 : D0; + 21D7 : 04; + [21D8..21D9] : 88; + 21DA : 30; + 21DB : 26; + 21DC : B1; + 21DD : 94; + 21DE : F0; + 21DF : F8; + 21E0 : 98; + 21E1 : 4A; + 21E2 : C5; + 21E3 : D5; + 21E4 : F0; + 21E5 : 09; + 21E6 : 85; + 21E7 : D5; + 21E8 : A6; + 21E9 : 82; + 21EA : B5; + 21EB : CD; + 21EC : 20; + 21ED : 1B; + 21EE : DF; + 21EF : A0; + 21F0 : 00; + 21F1 : 84; + 21F2 : 94; + 21F3 : B1; + 21F4 : 94; + 21F5 : D0; + 21F6 : 0B; + 21F7 : C8; + 21F8 : B1; + 21F9 : 94; + 21FA : A8; + 21FB : 88; + 21FC : 84; + 21FD : D6; + 21FE : 98; + 21FF : 4C; + 2200 : E9; + 2201 : DE; + 2202 : A9; + 2203 : 67; + 2204 : 20; + 2205 : 45; + 2206 : E6; + 2207 : 20; + 2208 : B3; + 2209 : C2; + 220A : AD; + 220B : 01; + 220C : 02; + 220D : 85; + 220E : 83; + 220F : 20; + 2210 : EB; + 2211 : D0; + 2212 : 90; + 2213 : 05; + 2214 : A9; + 2215 : 70; + 2216 : 20; + 2217 : C8; + 2218 : C1; + 2219 : A9; + 221A : A0; + 221B : 20; + 221C : 9D; + 221D : DD; + 221E : 20; + 221F : 25; + 2220 : D1; + 2221 : F0; + 2222 : 05; + 2223 : A9; + 2224 : 64; + 2225 : 20; + 2226 : C8; + 2227 : C1; + 2228 : B5; + 2229 : EC; + 222A : 29; + 222B : 01; + 222C : 85; + 222D : 7F; + 222E : AD; + [222F..2230] : 02; + 2231 : 95; + 2232 : B5; + 2233 : AD; + 2234 : 03; + 2235 : 02; + 2236 : 95; + 2237 : BB; + 2238 : A6; + 2239 : 82; + 223A : A9; + 223B : 89; + 223C : 95; + 223D : F2; + 223E : AD; + 223F : 04; + 2240 : 02; + 2241 : F0; + 2242 : 10; + 2243 : 38; + 2244 : E9; + 2245 : 01; + 2246 : F0; + 2247 : 0B; + 2248 : D5; + 2249 : C7; + 224A : 90; + 224B : 07; + 224C : A9; + 224D : 51; + 224E : 8D; + 224F : 6C; + 2250 : 02; + 2251 : A9; + 2252 : 00; + 2253 : 85; + 2254 : D4; + 2255 : 20; + 2256 : 0E; + 2257 : CE; + 2258 : 20; + 2259 : F8; + 225A : DE; + 225B : 50; + 225C : 08; + 225D : A9; + 225E : 80; + 225F : 20; + 2260 : 97; + 2261 : DD; + 2262 : 4C; + 2263 : 5E; + 2264 : E1; + 2265 : 20; + 2266 : 75; + 2267 : E2; + 2268 : A9; + 2269 : 80; + 226A : 20; + 226B : A6; + 226C : DD; + 226D : F0; + 226E : 03; + 226F : 4C; + 2270 : 5E; + 2271 : E1; + 2272 : 4C; + 2273 : 94; + 2274 : C1; + 2275 : 20; + 2276 : 9C; + 2277 : E2; + 2278 : A5; + 2279 : D7; + 227A : 20; + 227B : C8; + 227C : D4; + 227D : A6; + 227E : 82; + 227F : B5; + 2280 : C7; + 2281 : 38; + 2282 : E5; + 2283 : D4; + 2284 : B0; + 2285 : 03; + 2286 : 4C; + 2287 : 02; + 2288 : E2; + 2289 : 18; + 228A : 65; + 228B : D7; + 228C : 90; + 228D : 03; + 228E : 69; + 228F : 01; + 2290 : 38; + 2291 : 20; + 2292 : 09; + 2293 : E0; + 2294 : 4C; + 2295 : 38; + 2296 : E1; + 2297 : A9; + 2298 : 51; + 2299 : 20; + 229A : C8; + 229B : C1; + 229C : A5; + 229D : 94; + 229E : 85; + 229F : 89; + 22A0 : A5; + 22A1 : 95; + 22A2 : 85; + 22A3 : 8A; + 22A4 : 20; + 22A5 : D0; + 22A6 : E2; + 22A7 : D0; + 22A8 : 01; + 22A9 : 60; + 22AA : 20; + 22AB : F1; + 22AC : DD; + 22AD : 20; + 22AE : 0C; + 22AF : DE; + 22B0 : A5; + 22B1 : 80; + 22B2 : F0; + 22B3 : 0E; + 22B4 : 20; + 22B5 : D3; + 22B6 : E2; + 22B7 : D0; + 22B8 : 06; + 22B9 : 20; + 22BA : 1E; + 22BB : CF; + 22BC : 4C; + 22BD : DA; + 22BE : D2; + 22BF : 20; + 22C0 : DA; + 22C1 : D2; + 22C2 : A0; + 22C3 : 00; + 22C4 : B1; + 22C5 : 89; + 22C6 : 85; + 22C7 : 80; + 22C8 : C8; + 22C9 : B1; + 22CA : 89; + 22CB : 85; + 22CC : 81; + 22CD : 4C; + 22CE : AF; + 22CF : D0; + 22D0 : 20; + 22D1 : 3E; + 22D2 : DE; + 22D3 : A0; + 22D4 : 00; + 22D5 : B1; + 22D6 : 89; + 22D7 : C5; + 22D8 : 80; + 22D9 : F0; + 22DA : 01; + 22DB : 60; + 22DC : C8; + 22DD : B1; + 22DE : 89; + 22DF : C5; + 22E0 : 81; + 22E1 : 60; + 22E2 : 20; + 22E3 : 2B; + 22E4 : DE; + 22E5 : A0; + 22E6 : 02; + 22E7 : A9; + 22E8 : 00; + 22E9 : 91; + 22EA : 94; + 22EB : C8; + 22EC : D0; + 22ED : FB; + 22EE : 20; + 22EF : 04; + 22F0 : E3; + 22F1 : 95; + 22F2 : C1; + 22F3 : A8; + 22F4 : A9; + 22F5 : FF; + 22F6 : 91; + 22F7 : 94; + 22F8 : 20; + 22F9 : 04; + 22FA : E3; + 22FB : 90; + 22FC : F4; + 22FD : D0; + 22FE : 04; + 22FF : A9; + 2300 : 00; + 2301 : 95; + 2302 : C1; + 2303 : 60; + 2304 : A6; + 2305 : 82; + 2306 : B5; + 2307 : C1; + 2308 : 38; + 2309 : F0; + 230A : 0D; + 230B : 18; + 230C : 75; + 230D : C7; + 230E : 90; + 230F : 0B; + 2310 : D0; + 2311 : 06; + 2312 : A9; + 2313 : 02; + 2314 : 2C; + 2315 : CC; + 2316 : FE; + 2317 : 60; + 2318 : 69; + 2319 : 01; + 231A : 38; + 231B : 60; + 231C : 20; + 231D : D3; + 231E : D1; + 231F : 20; + 2320 : CB; + 2321 : E1; + 2322 : 20; + 2323 : 9C; + 2324 : E2; + 2325 : 20; + 2326 : 7B; + 2327 : CF; + 2328 : A5; + 2329 : D6; + 232A : 85; + 232B : 87; + 232C : A5; + 232D : D5; + 232E : 85; + 232F : 86; + 2330 : A9; + 2331 : 00; + 2332 : 85; + 2333 : 88; + 2334 : A9; + 2335 : 00; + 2336 : 85; + 2337 : D4; + 2338 : 20; + 2339 : 0E; + 233A : CE; + 233B : 20; + 233C : 4D; + 233D : EF; + 233E : A4; + 233F : 82; + 2340 : B6; + 2341 : C7; + 2342 : CA; + 2343 : 8A; + 2344 : 18; + 2345 : 65; + 2346 : D7; + 2347 : 90; + 2348 : 0C; + 2349 : E6; + 234A : D6; + 234B : E6; + 234C : D6; + 234D : D0; + 234E : 06; + 234F : E6; + 2350 : D5; + 2351 : A9; + 2352 : 10; + 2353 : 85; + 2354 : D6; + 2355 : A5; + 2356 : 87; + 2357 : 18; + 2358 : 69; + 2359 : 02; + 235A : 20; + 235B : E9; + 235C : DE; + 235D : A5; + 235E : D5; + 235F : C9; + 2360 : 06; + 2361 : 90; + 2362 : 05; + 2363 : A9; + 2364 : 52; + 2365 : 20; + 2366 : C8; + 2367 : C1; + 2368 : A5; + 2369 : D6; + 236A : 38; + 236B : E5; + 236C : 87; + 236D : B0; + 236E : 03; + 236F : E9; + 2370 : 0F; + 2371 : 18; + 2372 : 85; + 2373 : 72; + 2374 : A5; + 2375 : D5; + 2376 : E5; + 2377 : 86; + 2378 : 85; + 2379 : 73; + 237A : A2; + 237B : 00; + 237C : 86; + 237D : 70; + 237E : 86; + 237F : 71; + 2380 : AA; + 2381 : 20; + 2382 : 51; + 2383 : DF; + 2384 : A5; + 2385 : 71; + 2386 : D0; + 2387 : 07; + 2388 : A6; + 2389 : 70; + 238A : CA; + 238B : D0; + 238C : 02; + 238D : E6; + 238E : 88; + 238F : CD; + 2390 : 73; + 2391 : 02; + 2392 : 90; + 2393 : 09; + 2394 : D0; + 2395 : CD; + 2396 : AD; + 2397 : 72; + 2398 : 02; + 2399 : C5; + 239A : 70; + 239B : 90; + 239C : C6; + 239D : A9; + 239E : 01; + 239F : 20; + 23A0 : F6; + 23A1 : D4; + 23A2 : 18; + 23A3 : 69; + 23A4 : 01; + 23A5 : A6; + 23A6 : 82; + 23A7 : 95; + 23A8 : C1; + 23A9 : 20; + 23AA : 1E; + 23AB : F1; + 23AC : 20; + 23AD : FD; + 23AE : DD; + 23AF : A5; + 23B0 : 88; + 23B1 : D0; + 23B2 : 15; + 23B3 : 20; + 23B4 : 5E; + 23B5 : DE; + 23B6 : 20; + 23B7 : 1E; + 23B8 : CF; + 23B9 : 20; + 23BA : D0; + 23BB : D6; + 23BC : 20; + 23BD : 1E; + 23BE : F1; + 23BF : 20; + 23C0 : FD; + 23C1 : DD; + 23C2 : 20; + [23C3..23C4] : E2; + 23C5 : 4C; + 23C6 : D4; + 23C7 : E3; + 23C8 : 20; + 23C9 : 1E; + 23CA : CF; + 23CB : 20; + 23CC : D0; + 23CD : D6; + 23CE : 20; + [23CF..23D0] : E2; + 23D1 : 20; + 23D2 : 19; + 23D3 : DE; + 23D4 : 20; + 23D5 : 5E; + 23D6 : DE; + 23D7 : 20; + 23D8 : 0C; + 23D9 : DE; + 23DA : A5; + 23DB : 80; + 23DC : 48; + 23DD : A5; + 23DE : 81; + 23DF : 48; + 23E0 : 20; + 23E1 : 3E; + 23E2 : DE; + 23E3 : A5; + 23E4 : 81; + 23E5 : 48; + 23E6 : A5; + 23E7 : 80; + 23E8 : 48; + 23E9 : 20; + 23EA : 45; + 23EB : DF; + 23EC : AA; + 23ED : D0; + 23EE : 0A; + 23EF : 20; + 23F0 : 4E; + 23F1 : E4; + 23F2 : A9; + 23F3 : 10; + 23F4 : 20; + 23F5 : E9; + 23F6 : DE; + 23F7 : E6; + 23F8 : 86; + 23F9 : 68; + 23FA : 20; + 23FB : 8D; + 23FC : DD; + 23FD : 68; + 23FE : 20; + 23FF : 8D; + 2400 : DD; + 2401 : 68; + 2402 : 85; + 2403 : 81; + 2404 : 68; + 2405 : 85; + 2406 : 80; + 2407 : F0; + 2408 : 0F; + 2409 : A5; + 240A : 86; + 240B : C5; + 240C : D5; + 240D : D0; + 240E : A7; + 240F : 20; + 2410 : 45; + 2411 : DF; + 2412 : C5; + 2413 : D6; + 2414 : 90; + 2415 : A0; + 2416 : F0; + 2417 : B0; + 2418 : 20; + 2419 : 45; + 241A : DF; + 241B : 48; + 241C : A9; + 241D : 00; + 241E : 20; + 241F : DC; + 2420 : DE; + 2421 : A9; + 2422 : 00; + 2423 : A8; + 2424 : 91; + 2425 : 94; + 2426 : C8; + 2427 : 68; + 2428 : 38; + 2429 : E9; + 242A : 01; + 242B : 91; + 242C : 94; + 242D : 20; + 242E : 6C; + 242F : DE; + 2430 : 20; + 2431 : 99; + 2432 : D5; + 2433 : 20; + 2434 : F4; + 2435 : EE; + 2436 : 20; + 2437 : 0E; + 2438 : CE; + 2439 : 20; + 243A : 1E; + 243B : CF; + 243C : 20; + 243D : F8; + 243E : DE; + 243F : 70; + 2440 : 03; + 2441 : 4C; + 2442 : 75; + 2443 : E2; + 2444 : A9; + 2445 : 80; + 2446 : 20; + 2447 : 97; + 2448 : DD; + 2449 : A9; + 244A : 50; + 244B : 20; + 244C : C8; + 244D : C1; + 244E : 20; + 244F : 1E; + 2450 : F1; + 2451 : 20; + 2452 : 1E; + 2453 : CF; + 2454 : 20; + 2455 : F1; + 2456 : DD; + 2457 : 20; + 2458 : 93; + 2459 : DF; + 245A : 48; + 245B : 20; + 245C : C1; + 245D : DE; + 245E : A6; + 245F : 82; + 2460 : B5; + 2461 : CD; + 2462 : A8; + 2463 : 68; + 2464 : AA; + 2465 : A9; + 2466 : 10; + 2467 : 20; + 2468 : A5; + 2469 : DE; + 246A : A9; + 246B : 00; + 246C : 20; + 246D : DC; + 246E : DE; + 246F : A0; + 2470 : 02; + 2471 : B1; + 2472 : 94; + 2473 : 48; + 2474 : A9; + 2475 : 00; + 2476 : 20; + 2477 : C8; + 2478 : D4; + 2479 : 68; + 247A : 18; + 247B : 69; + 247C : 01; + 247D : 91; + 247E : 94; + 247F : 0A; + 2480 : 69; + 2481 : 04; + 2482 : 85; + 2483 : 89; + 2484 : A8; + 2485 : 38; + 2486 : E9; + 2487 : 02; + 2488 : 85; + 2489 : 8A; + 248A : A5; + 248B : 80; + 248C : 85; + 248D : 87; + 248E : 91; + 248F : 94; + 2490 : C8; + 2491 : A5; + 2492 : 81; + 2493 : 85; + 2494 : 88; + 2495 : 91; + 2496 : 94; + 2497 : A0; + 2498 : 00; + 2499 : 98; + 249A : 91; + 249B : 94; + 249C : C8; + 249D : A9; + 249E : 11; + 249F : 91; + 24A0 : 94; + 24A1 : A9; + 24A2 : 10; + 24A3 : 20; + 24A4 : C8; + 24A5 : D4; + 24A6 : 20; + 24A7 : 50; + 24A8 : DE; + 24A9 : 20; + 24AA : 99; + 24AB : D5; + 24AC : A6; + 24AD : 82; + 24AE : B5; + 24AF : CD; + 24B0 : 48; + 24B1 : 20; + 24B2 : 9E; + 24B3 : DF; + 24B4 : A6; + 24B5 : 82; + 24B6 : 95; + 24B7 : CD; + 24B8 : 68; + 24B9 : AE; + 24BA : 57; + 24BB : 02; + 24BC : 95; + 24BD : A7; + 24BE : A9; + 24BF : 00; + 24C0 : 20; + 24C1 : C8; + 24C2 : D4; + 24C3 : A0; + 24C4 : 00; + 24C5 : A5; + 24C6 : 80; + 24C7 : 91; + 24C8 : 94; + 24C9 : C8; + 24CA : A5; + 24CB : 81; + 24CC : 91; + 24CD : 94; + 24CE : 4C; + 24CF : DE; + 24D0 : E4; + 24D1 : 20; + 24D2 : 93; + 24D3 : DF; + 24D4 : A6; + 24D5 : 82; + 24D6 : 20; + 24D7 : 1B; + 24D8 : DF; + 24D9 : A9; + 24DA : 00; + 24DB : 20; + 24DC : C8; + 24DD : D4; + 24DE : C6; + 24DF : 8A; + 24E0 : C6; + 24E1 : 8A; + 24E2 : A4; + 24E3 : 89; + 24E4 : A5; + 24E5 : 87; + 24E6 : 91; + 24E7 : 94; + 24E8 : C8; + 24E9 : A5; + 24EA : 88; + 24EB : 91; + 24EC : 94; + 24ED : 20; + 24EE : 5E; + 24EF : DE; + 24F0 : 20; + 24F1 : 99; + 24F2 : D5; + 24F3 : A4; + 24F4 : 8A; + 24F5 : C0; + 24F6 : 03; + 24F7 : B0; + 24F8 : D8; + 24F9 : 4C; + 24FA : 1E; + 24FB : CF; + 24FC : 00; + 24FD : A0; + 24FE : 4F; + 24FF : CB; + 2500 : 20; + 2501 : 21; + 2502 : 22; + 2503 : 23; + 2504 : 24; + 2505 : 27; + 2506 : D2; + 2507 : 45; + 2508 : 41; + 2509 : 44; + 250A : 89; + 250B : 52; + 250C : 83; + 250D : 20; + 250E : 54; + [250F..2510] : 4F; + 2511 : 20; + 2512 : 4C; + 2513 : 41; + 2514 : 52; + 2515 : 47; + 2516 : C5; + 2517 : 50; + 2518 : 8B; + 2519 : 06; + 251A : 20; + 251B : 50; + 251C : 52; + 251D : 45; + 251E : 53; + 251F : 45; + 2520 : 4E; + 2521 : D4; + 2522 : 51; + 2523 : CF; + 2524 : 56; + 2525 : 45; + 2526 : 52; + 2527 : 46; + 2528 : 4C; + 2529 : 4F; + 252A : 57; + 252B : 20; + 252C : 49; + 252D : 4E; + 252E : 8B; + 252F : 25; + 2530 : 28; + 2531 : 8A; + 2532 : 89; + 2533 : 26; + 2534 : 8A; + 2535 : 20; + 2536 : 50; + 2537 : 52; + 2538 : 4F; + 2539 : 54; + 253A : 45; + 253B : 43; + 253C : 54; + 253D : 20; + 253E : 4F; + 253F : CE; + 2540 : 29; + 2541 : 88; + 2542 : 20; + 2543 : 49; + 2544 : 44; + 2545 : 85; + 2546 : 30; + 2547 : 31; + 2548 : 32; + 2549 : 33; + 254A : 34; + 254B : D3; + 254C : 59; + 254D : 4E; + 254E : 54; + 254F : 41; + 2550 : 58; + 2551 : 89; + 2552 : 60; + 2553 : 8A; + 2554 : 03; + 2555 : 84; + 2556 : 63; + 2557 : 83; + 2558 : 20; + 2559 : 45; + 255A : 58; + 255B : 49; + 255C : 53; + 255D : 54; + 255E : D3; + 255F : 64; + 2560 : 83; + 2561 : 20; + 2562 : 54; + 2563 : 59; + 2564 : 50; + 2565 : 45; + 2566 : 85; + 2567 : 65; + 2568 : CE; + 2569 : 4F; + 256A : 20; + 256B : 42; + 256C : 4C; + 256D : 4F; + 256E : 43; + 256F : CB; + 2570 : 66; + 2571 : 67; + 2572 : C9; + [2573..2574] : 4C; + 2575 : 45; + 2576 : 47; + 2577 : 41; + 2578 : 4C; + 2579 : 20; + 257A : 54; + 257B : 52; + 257C : 41; + 257D : 43; + 257E : 4B; + 257F : 20; + 2580 : 4F; + 2581 : 52; + 2582 : 20; + 2583 : 53; + 2584 : 45; + 2585 : 43; + 2586 : 54; + 2587 : 4F; + 2588 : D2; + 2589 : 61; + 258A : 83; + 258B : 06; + 258C : 84; + 258D : 39; + 258E : 62; + 258F : 83; + 2590 : 06; + 2591 : 87; + 2592 : 01; + 2593 : 83; + 2594 : 53; + 2595 : 20; + 2596 : 53; + 2597 : 43; + 2598 : 52; + 2599 : 41; + 259A : 54; + 259B : 43; + 259C : 48; + 259D : 45; + 259E : C4; + 259F : 70; + 25A0 : CE; + 25A1 : 4F; + 25A2 : 20; + 25A3 : 43; + 25A4 : 48; + 25A5 : 41; + [25A6..25A7] : 4E; + 25A8 : 45; + 25A9 : CC; + 25AA : 71; + 25AB : C4; + 25AC : 49; + 25AD : 52; + 25AE : 89; + 25AF : 72; + 25B0 : 88; + 25B1 : 20; + 25B2 : 46; + 25B3 : 55; + 25B4 : 4C; + 25B5 : CC; + 25B6 : 73; + 25B7 : C3; + 25B8 : 42; + 25B9 : 4D; + 25BA : 20; + 25BB : 44; + 25BC : 4F; + 25BD : 53; + 25BE : 20; + 25BF : 56; + 25C0 : 32; + 25C1 : 2E; + 25C2 : 36; + 25C3 : 20; + 25C4 : 31; + 25C5 : 35; + 25C6 : 34; + 25C7 : B1; + 25C8 : 74; + 25C9 : C4; + 25CA : 52; + 25CB : 49; + 25CC : 56; + 25CD : 45; + 25CE : 06; + 25CF : 20; + 25D0 : 52; + 25D1 : 45; + 25D2 : 41; + 25D3 : 44; + 25D4 : D9; + 25D5 : 09; + 25D6 : C5; + [25D7..25D8] : 52; + 25D9 : 4F; + 25DA : D2; + 25DB : 0A; + 25DC : D7; + 25DD : 52; + 25DE : 49; + 25DF : 54; + 25E0 : C5; + 25E1 : 03; + 25E2 : C6; + 25E3 : 49; + 25E4 : 4C; + 25E5 : C5; + 25E6 : 04; + 25E7 : CF; + 25E8 : 50; + 25E9 : 45; + 25EA : CE; + 25EB : 05; + 25EC : CD; + 25ED : 49; + 25EE : 53; + 25EF : 4D; + 25F0 : 41; + 25F1 : 54; + 25F2 : 43; + 25F3 : C8; + 25F4 : 06; + 25F5 : CE; + 25F6 : 4F; + 25F7 : D4; + 25F8 : 07; + 25F9 : C6; + 25FA : 4F; + 25FB : 55; + 25FC : 4E; + 25FD : C4; + 25FE : 08; + 25FF : C4; + 2600 : 49; + 2601 : 53; + 2602 : CB; + 2603 : 0B; + 2604 : D2; + 2605 : 45; + 2606 : 43; + 2607 : 4F; + 2608 : 52; + 2609 : C4; + 260A : 48; + 260B : 86; + 260C : F9; + 260D : 8A; + 260E : 0A; + 260F : AA; + 2610 : B5; + 2611 : 06; + 2612 : 85; + 2613 : 80; + 2614 : B5; + 2615 : 07; + 2616 : 85; + 2617 : 81; + 2618 : 68; + 2619 : 29; + 261A : 0F; + 261B : F0; + 261C : 08; + 261D : C9; + 261E : 0F; + 261F : D0; + 2620 : 06; + 2621 : A9; + 2622 : 74; + 2623 : D0; + 2624 : 08; + 2625 : A9; + 2626 : 06; + 2627 : 09; + 2628 : 20; + 2629 : AA; + [262A..262B] : CA; + 262C : 8A; + 262D : 48; + 262E : AD; + 262F : 2A; + 2630 : 02; + 2631 : C9; + 2632 : 00; + 2633 : D0; + 2634 : 0F; + 2635 : A9; + 2636 : FF; + 2637 : 8D; + 2638 : 2A; + 2639 : 02; + 263A : 68; + 263B : 20; + 263C : C7; + 263D : E6; + 263E : 20; + 263F : 42; + 2640 : D0; + 2641 : 4C; + 2642 : 48; + 2643 : E6; + 2644 : 68; + 2645 : 20; + 2646 : C7; + 2647 : E6; + 2648 : 20; + 2649 : BD; + 264A : C1; + 264B : A9; + 264C : 00; + 264D : 8D; + 264E : F9; + 264F : 02; + 2650 : 20; + 2651 : 2C; + 2652 : C1; + 2653 : 20; + 2654 : DA; + 2655 : D4; + 2656 : A9; + 2657 : 00; + 2658 : 85; + 2659 : A3; + 265A : A2; + 265B : 45; + 265C : 9A; + 265D : A5; + 265E : 84; + 265F : 29; + 2660 : 0F; + 2661 : 85; + 2662 : 83; + 2663 : C9; + 2664 : 0F; + 2665 : F0; + 2666 : 31; + 2667 : 78; + 2668 : A5; + 2669 : 79; + 266A : D0; + 266B : 1C; + 266C : A5; + 266D : 7A; + 266E : D0; + 266F : 10; + 2670 : A6; + 2671 : 83; + 2672 : BD; + 2673 : 2B; + 2674 : 02; + 2675 : C9; + 2676 : FF; + 2677 : F0; + 2678 : 1F; + 2679 : 29; + 267A : 0F; + 267B : 85; + 267C : 82; + 267D : 4C; + 267E : 8E; + 267F : E6; + 2680 : 20; + 2681 : EB; + 2682 : D0; + [2683..2685] : EA; + 2686 : D0; + 2687 : 06; + 2688 : 20; + 2689 : 07; + 268A : D1; + [268B..268D] : EA; + 268E : 20; + 268F : 25; + 2690 : D1; + 2691 : C9; + 2692 : 04; + 2693 : B0; + 2694 : 03; + 2695 : 20; + 2696 : 27; + 2697 : D2; + 2698 : 4C; + 2699 : E7; + 269A : EB; + 269B : AA; + 269C : A9; + 269D : 00; + 269E : F8; + 269F : E0; + 26A0 : 00; + 26A1 : F0; + 26A2 : 07; + 26A3 : 18; + 26A4 : 69; + 26A5 : 01; + 26A6 : CA; + 26A7 : 4C; + 26A8 : 9F; + 26A9 : E6; + 26AA : D8; + 26AB : AA; + [26AC..26AF] : 4A; + 26B0 : 20; + 26B1 : B4; + 26B2 : E6; + 26B3 : 8A; + 26B4 : 29; + 26B5 : 0F; + 26B6 : 09; + 26B7 : 30; + 26B8 : 91; + 26B9 : A5; + 26BA : C8; + 26BB : 60; + 26BC : 20; + 26BD : 23; + 26BE : C1; + 26BF : A9; + 26C0 : 00; + 26C1 : A0; + 26C2 : 00; + 26C3 : 84; + 26C4 : 80; + 26C5 : 84; + 26C6 : 81; + 26C7 : A0; + 26C8 : 00; + 26C9 : A2; + 26CA : D5; + 26CB : 86; + 26CC : A5; + 26CD : A2; + 26CE : 02; + 26CF : 86; + 26D0 : A6; + 26D1 : 20; + 26D2 : AB; + 26D3 : E6; + 26D4 : A9; + 26D5 : 2C; + 26D6 : 91; + 26D7 : A5; + 26D8 : C8; + 26D9 : AD; + 26DA : D5; + 26DB : 02; + 26DC : 8D; + 26DD : 43; + 26DE : 02; + 26DF : 8A; + 26E0 : 20; + 26E1 : 06; + 26E2 : E7; + 26E3 : A9; + 26E4 : 2C; + 26E5 : 91; + 26E6 : A5; + 26E7 : C8; + 26E8 : A5; + 26E9 : 80; + 26EA : 20; + 26EB : 9B; + 26EC : E6; + 26ED : A9; + 26EE : 2C; + 26EF : 91; + 26F0 : A5; + 26F1 : C8; + 26F2 : A5; + 26F3 : 81; + 26F4 : 20; + 26F5 : 9B; + 26F6 : E6; + 26F7 : 88; + 26F8 : 98; + 26F9 : 18; + 26FA : 69; + 26FB : D5; + 26FC : 8D; + 26FD : 49; + 26FE : 02; + 26FF : E6; + 2700 : A5; + 2701 : A9; + 2702 : 88; + 2703 : 85; + 2704 : F7; + 2705 : 60; + 2706 : AA; + 2707 : A5; + 2708 : 86; + 2709 : 48; + 270A : A5; + 270B : 87; + 270C : 48; + 270D : A9; + 270E : FC; + 270F : 85; + 2710 : 86; + 2711 : A9; + 2712 : E4; + 2713 : 85; + 2714 : 87; + 2715 : 8A; + 2716 : A2; + 2717 : 00; + 2718 : C1; + 2719 : 86; + 271A : F0; + 271B : 21; + 271C : 48; + 271D : 20; + 271E : 75; + 271F : E7; + 2720 : 90; + 2721 : 05; + 2722 : 20; + 2723 : 75; + 2724 : E7; + 2725 : 90; + 2726 : FB; + 2727 : A5; + 2728 : 87; + 2729 : C9; + 272A : E6; + 272B : 90; + 272C : 08; + 272D : D0; + 272E : 0A; + 272F : A9; + 2730 : 0A; + 2731 : C5; + 2732 : 86; + 2733 : 90; + 2734 : 04; + 2735 : 68; + 2736 : 4C; + 2737 : 18; + 2738 : E7; + 2739 : 68; + 273A : 4C; + 273B : 4D; + 273C : E7; + 273D : 20; + 273E : 67; + 273F : E7; + 2740 : 90; + 2741 : FB; + 2742 : 20; + 2743 : 54; + 2744 : E7; + 2745 : 20; + 2746 : 67; + 2747 : E7; + 2748 : 90; + 2749 : F8; + 274A : 20; + 274B : 54; + 274C : E7; + 274D : 68; + 274E : 85; + 274F : 87; + 2750 : 68; + 2751 : 85; + 2752 : 86; + 2753 : 60; + 2754 : C9; + 2755 : 20; + 2756 : B0; + 2757 : 0B; + 2758 : AA; + 2759 : A9; + 275A : 20; + 275B : 91; + 275C : A5; + 275D : C8; + 275E : 8A; + 275F : 20; + 2760 : 06; + 2761 : E7; + 2762 : 60; + 2763 : 91; + 2764 : A5; + 2765 : C8; + 2766 : 60; + 2767 : E6; + 2768 : 86; + 2769 : D0; + 276A : 02; + 276B : E6; + 276C : 87; + 276D : A1; + 276E : 86; + 276F : 0A; + 2770 : A1; + 2771 : 86; + 2772 : 29; + 2773 : 7F; + 2774 : 60; + 2775 : 20; + 2776 : 6D; + 2777 : E7; + 2778 : E6; + 2779 : 86; + 277A : D0; + 277B : 02; + 277C : E6; + 277D : 87; + [277E..2780] : 60; + [2781..27A1] : EA; + 27A2 : 60; + 27A3 : A9; + 27A4 : 8D; + 27A5 : 20; + 27A6 : 68; + 27A7 : C2; + 27A8 : 20; + 27A9 : 58; + 27AA : F2; + 27AB : AD; + 27AC : 78; + 27AD : 02; + 27AE : 48; + 27AF : A9; + 27B0 : 01; + 27B1 : 8D; + 27B2 : 78; + 27B3 : 02; + 27B4 : A9; + 27B5 : FF; + 27B6 : 85; + 27B7 : 86; + 27B8 : 20; + 27B9 : 4F; + 27BA : C4; + 27BB : AD; + 27BC : 80; + 27BD : 02; + 27BE : D0; + 27BF : 05; + 27C0 : A9; + 27C1 : 39; + 27C2 : 20; + 27C3 : C8; + 27C4 : C1; + 27C5 : 68; + 27C6 : 8D; + 27C7 : 78; + 27C8 : 02; + 27C9 : AD; + 27CA : 80; + 27CB : 02; + 27CC : 85; + 27CD : 80; + 27CE : AD; + 27CF : 85; + 27D0 : 02; + 27D1 : 85; + 27D2 : 81; + 27D3 : A9; + 27D4 : 03; + 27D5 : 20; + 27D6 : 77; + 27D7 : D4; + 27D8 : A9; + 27D9 : 00; + 27DA : 85; + 27DB : 87; + 27DC : 20; + 27DD : 39; + 27DE : E8; + 27DF : 85; + 27E0 : 88; + 27E1 : 20; + 27E2 : 4B; + 27E3 : E8; + 27E4 : 20; + 27E5 : 39; + 27E6 : E8; + 27E7 : 85; + 27E8 : 89; + 27E9 : 20; + 27EA : 4B; + 27EB : E8; + 27EC : A5; + 27ED : 86; + 27EE : F0; + 27EF : 0A; + 27F0 : A5; + 27F1 : 88; + 27F2 : 48; + 27F3 : A5; + 27F4 : 89; + 27F5 : 48; + 27F6 : A9; + 27F7 : 00; + 27F8 : 85; + 27F9 : 86; + 27FA : 20; + 27FB : 39; + 27FC : E8; + 27FD : 85; + 27FE : 8A; + 27FF : 20; + 2800 : 4B; + 2801 : E8; + 2802 : 20; + 2803 : 39; + 2804 : E8; + 2805 : A0; + 2806 : 00; + 2807 : 91; + 2808 : 88; + 2809 : 20; + 280A : 4B; + 280B : E8; + 280C : A5; + 280D : 88; + 280E : 18; + 280F : 69; + 2810 : 01; + 2811 : 85; + 2812 : 88; + 2813 : 90; + 2814 : 02; + 2815 : E6; + 2816 : 89; + 2817 : C6; + 2818 : 8A; + 2819 : D0; + 281A : E7; + 281B : 20; + 281C : 35; + 281D : CA; + 281E : A5; + 281F : 85; + 2820 : C5; + 2821 : 87; + 2822 : F0; + 2823 : 08; + 2824 : 20; + 2825 : 3E; + 2826 : DE; + 2827 : A9; + 2828 : 50; + 2829 : 20; + 282A : 45; + 282B : E6; + 282C : A5; + 282D : F8; + 282E : D0; + 282F : A8; + 2830 : 68; + 2831 : 85; + 2832 : 89; + 2833 : 68; + 2834 : 85; + 2835 : 88; + 2836 : 6C; + 2837 : 88; + 2838 : 00; + 2839 : 20; + 283A : 35; + 283B : CA; + 283C : A5; + 283D : F8; + 283E : D0; + 283F : 08; + 2840 : 20; + 2841 : 3E; + 2842 : DE; + 2843 : A9; + 2844 : 51; + 2845 : 20; + 2846 : 45; + 2847 : E6; + 2848 : A5; + 2849 : 85; + 284A : 60; + 284B : 18; + 284C : 65; + 284D : 87; + 284E : 69; + 284F : 00; + 2850 : 85; + 2851 : 87; + 2852 : 60; + 2853 : AD; + 2854 : 01; + 2855 : 18; + 2856 : A9; + 2857 : 01; + 2858 : 85; + 2859 : 7C; + 285A : 60; + 285B : 78; + 285C : A9; + 285D : 00; + 285E : 85; + 285F : 7C; + 2860 : 85; + 2861 : 79; + 2862 : 85; + 2863 : 7A; + 2864 : A2; + 2865 : 45; + 2866 : 9A; + 2867 : A9; + 2868 : 80; + 2869 : 85; + 286A : F8; + 286B : 85; + 286C : 7D; + 286D : 20; + 286E : B7; + 286F : E9; + 2870 : 20; + 2871 : A5; + 2872 : E9; + 2873 : AD; + 2874 : 00; + 2875 : 18; + 2876 : 09; + 2877 : 10; + 2878 : 8D; + 2879 : 00; + 287A : 18; + 287B : AD; + 287C : 00; + 287D : 18; + 287E : 10; + 287F : 57; + 2880 : 29; + 2881 : 04; + 2882 : D0; + 2883 : F7; + 2884 : 20; + 2885 : C9; + 2886 : E9; + 2887 : C9; + 2888 : 3F; + 2889 : D0; + 288A : 06; + 288B : A9; + 288C : 00; + 288D : 85; + 288E : 79; + 288F : F0; + 2890 : 71; + 2891 : C9; + 2892 : 5F; + 2893 : D0; + 2894 : 06; + 2895 : A9; + 2896 : 00; + 2897 : 85; + 2898 : 7A; + 2899 : F0; + 289A : 67; + 289B : C5; + 289C : 78; + 289D : D0; + 289E : 0A; + 289F : A9; + 28A0 : 01; + 28A1 : 85; + 28A2 : 7A; + 28A3 : A9; + 28A4 : 00; + 28A5 : 85; + 28A6 : 79; + 28A7 : F0; + 28A8 : 29; + 28A9 : C5; + 28AA : 77; + 28AB : D0; + 28AC : 0A; + 28AD : A9; + 28AE : 01; + 28AF : 85; + 28B0 : 79; + 28B1 : A9; + 28B2 : 00; + 28B3 : 85; + 28B4 : 7A; + 28B5 : F0; + 28B6 : 1B; + 28B7 : AA; + 28B8 : 29; + 28B9 : 60; + 28BA : C9; + 28BB : 60; + 28BC : D0; + 28BD : 3F; + 28BE : 8A; + 28BF : 85; + 28C0 : 84; + 28C1 : 29; + 28C2 : 0F; + 28C3 : 85; + 28C4 : 83; + 28C5 : A5; + 28C6 : 84; + 28C7 : 29; + 28C8 : F0; + 28C9 : C9; + 28CA : E0; + 28CB : D0; + 28CC : 35; + 28CD : 58; + 28CE : 20; + 28CF : C0; + 28D0 : DA; + 28D1 : 78; + 28D2 : 2C; + 28D3 : 00; + 28D4 : 18; + 28D5 : 30; + 28D6 : AD; + 28D7 : A9; + 28D8 : 00; + 28D9 : 85; + 28DA : 7D; + 28DB : AD; + 28DC : 00; + 28DD : 18; + 28DE : 29; + 28DF : EF; + 28E0 : 8D; + 28E1 : 00; + 28E2 : 18; + 28E3 : A5; + 28E4 : 79; + 28E5 : F0; + 28E6 : 06; + 28E7 : 20; + 28E8 : 2E; + 28E9 : EA; + 28EA : 4C; + 28EB : E7; + 28EC : EB; + 28ED : A5; + 28EE : 7A; + 28EF : F0; + 28F0 : 09; + 28F1 : 20; + 28F2 : 9C; + 28F3 : E9; + 28F4 : 20; + 28F5 : AE; + 28F6 : E9; + 28F7 : 20; + 28F8 : 09; + 28F9 : E9; + 28FA : 4C; + 28FB : 4E; + 28FC : EA; + 28FD : A9; + 28FE : 10; + 28FF : 8D; + 2900 : 00; + 2901 : 18; + 2902 : 2C; + 2903 : 00; + 2904 : 18; + 2905 : 10; + 2906 : D0; + 2907 : 30; + 2908 : F9; + 2909 : 78; + 290A : 20; + 290B : EB; + 290C : D0; + 290D : B0; + 290E : 06; + 290F : A6; + 2910 : 82; + 2911 : B5; + 2912 : F2; + 2913 : 30; + 2914 : 01; + 2915 : 60; + 2916 : 20; + 2917 : 59; + 2918 : EA; + 2919 : 20; + 291A : C0; + 291B : E9; + 291C : 29; + 291D : 01; + 291E : 08; + 291F : 20; + 2920 : B7; + 2921 : E9; + 2922 : 28; + 2923 : F0; + 2924 : 12; + 2925 : 20; + 2926 : 59; + 2927 : EA; + 2928 : 20; + 2929 : C0; + 292A : E9; + 292B : 29; + 292C : 01; + 292D : D0; + 292E : F6; + 292F : A6; + 2930 : 82; + 2931 : B5; + 2932 : F2; + 2933 : 29; + 2934 : 08; + 2935 : D0; + 2936 : 14; + 2937 : 20; + 2938 : 59; + 2939 : EA; + 293A : 20; + 293B : C0; + 293C : E9; + 293D : 29; + 293E : 01; + 293F : D0; + 2940 : F6; + 2941 : 20; + 2942 : 59; + 2943 : EA; + 2944 : 20; + 2945 : C0; + 2946 : E9; + 2947 : 29; + 2948 : 01; + 2949 : F0; + 294A : F6; + 294B : 20; + 294C : AE; + 294D : E9; + 294E : 20; + 294F : 59; + 2950 : EA; + 2951 : 20; + 2952 : C0; + 2953 : E9; + 2954 : 29; + 2955 : 01; + 2956 : D0; + 2957 : F3; + 2958 : A9; + 2959 : 08; + 295A : 85; + 295B : 98; + 295C : 20; + 295D : C0; + 295E : E9; + 295F : 29; + 2960 : 01; + 2961 : D0; + 2962 : 36; + 2963 : A6; + 2964 : 82; + 2965 : BD; + 2966 : 3E; + 2967 : 02; + 2968 : 6A; + 2969 : 9D; + 296A : 3E; + 296B : 02; + 296C : B0; + 296D : 05; + 296E : 20; + 296F : A5; + 2970 : E9; + 2971 : D0; + 2972 : 03; + 2973 : 20; + 2974 : 9C; + 2975 : E9; + 2976 : 20; + 2977 : B7; + 2978 : E9; + 2979 : A5; + 297A : 23; + 297B : D0; + 297C : 03; + 297D : 20; + 297E : F3; + 297F : FE; + 2980 : 20; + 2981 : FB; + 2982 : FE; + 2983 : C6; + 2984 : 98; + 2985 : D0; + 2986 : D5; + 2987 : 20; + 2988 : 59; + 2989 : EA; + 298A : 20; + 298B : C0; + 298C : E9; + 298D : 29; + 298E : 01; + 298F : F0; + 2990 : F6; + 2991 : 58; + 2992 : 20; + 2993 : AA; + 2994 : D3; + 2995 : 78; + 2996 : 4C; + 2997 : 0F; + 2998 : E9; + 2999 : 4C; + 299A : 4E; + 299B : EA; + 299C : AD; + 299D : 00; + 299E : 18; + 299F : 29; + 29A0 : FD; + 29A1 : 8D; + 29A2 : 00; + 29A3 : 18; + 29A4 : 60; + 29A5 : AD; + 29A6 : 00; + 29A7 : 18; + 29A8 : 09; + 29A9 : 02; + 29AA : 8D; + 29AB : 00; + 29AC : 18; + 29AD : 60; + 29AE : AD; + 29AF : 00; + 29B0 : 18; + 29B1 : 09; + 29B2 : 08; + 29B3 : 8D; + 29B4 : 00; + 29B5 : 18; + 29B6 : 60; + 29B7 : AD; + 29B8 : 00; + 29B9 : 18; + 29BA : 29; + 29BB : F7; + 29BC : 8D; + 29BD : 00; + 29BE : 18; + 29BF : 60; + 29C0 : AD; + 29C1 : 00; + 29C2 : 18; + 29C3 : CD; + 29C4 : 00; + 29C5 : 18; + 29C6 : D0; + 29C7 : F8; + 29C8 : 60; + 29C9 : A9; + 29CA : 08; + 29CB : 85; + 29CC : 98; + 29CD : 20; + 29CE : 59; + 29CF : EA; + 29D0 : 20; + 29D1 : C0; + 29D2 : E9; + 29D3 : 29; + 29D4 : 04; + 29D5 : D0; + 29D6 : F6; + 29D7 : 20; + 29D8 : 9C; + 29D9 : E9; + 29DA : A9; + 29DB : 01; + 29DC : 4C; + 29DD : 20; + 29DE : FF; + 29DF : 20; + 29E0 : 59; + 29E1 : EA; + 29E2 : AD; + 29E3 : 0D; + 29E4 : 18; + 29E5 : 29; + 29E6 : 40; + 29E7 : D0; + 29E8 : 09; + 29E9 : 20; + 29EA : C0; + 29EB : E9; + 29EC : 29; + 29ED : 04; + 29EE : F0; + 29EF : EF; + 29F0 : D0; + 29F1 : 19; + 29F2 : 20; + 29F3 : A5; + 29F4 : E9; + 29F5 : A2; + 29F6 : 0A; + 29F7 : CA; + 29F8 : D0; + 29F9 : FD; + 29FA : 20; + 29FB : 9C; + 29FC : E9; + 29FD : 20; + 29FE : 59; + 29FF : EA; + 2A00 : 20; + 2A01 : C0; + 2A02 : E9; + 2A03 : 29; + 2A04 : 04; + 2A05 : F0; + 2A06 : F6; + 2A07 : A9; + 2A08 : 00; + 2A09 : 85; + 2A0A : F8; + 2A0B : AD; + 2A0C : 00; + 2A0D : 18; + 2A0E : 49; + 2A0F : 01; + 2A10 : 4A; + 2A11 : 29; + 2A12 : 02; + 2A13 : D0; + 2A14 : F6; + [2A15..2A17] : EA; + 2A18 : 66; + 2A19 : 85; + 2A1A : 20; + 2A1B : 59; + 2A1C : EA; + 2A1D : 20; + 2A1E : C0; + 2A1F : E9; + 2A20 : 29; + 2A21 : 04; + 2A22 : F0; + 2A23 : F6; + 2A24 : C6; + 2A25 : 98; + 2A26 : D0; + 2A27 : E3; + 2A28 : 20; + 2A29 : A5; + 2A2A : E9; + 2A2B : A5; + 2A2C : 85; + 2A2D : 60; + 2A2E : 78; + 2A2F : 20; + 2A30 : 07; + 2A31 : D1; + 2A32 : B0; + 2A33 : 05; + 2A34 : B5; + 2A35 : F2; + 2A36 : 6A; + 2A37 : B0; + 2A38 : 0B; + 2A39 : A5; + 2A3A : 84; + 2A3B : 29; + 2A3C : F0; + 2A3D : C9; + [2A3E..2A3F] : F0; + 2A40 : 03; + 2A41 : 4C; + 2A42 : 4E; + 2A43 : EA; + 2A44 : 20; + 2A45 : C9; + 2A46 : E9; + 2A47 : 58; + 2A48 : 20; + 2A49 : B7; + 2A4A : CF; + 2A4B : 4C; + 2A4C : 2E; + 2A4D : EA; + 2A4E : A9; + 2A4F : 00; + 2A50 : 8D; + 2A51 : 00; + 2A52 : 18; + 2A53 : 4C; + 2A54 : E7; + 2A55 : EB; + 2A56 : 4C; + 2A57 : 5B; + 2A58 : E8; + 2A59 : A5; + 2A5A : 7D; + 2A5B : F0; + 2A5C : 06; + 2A5D : AD; + 2A5E : 00; + 2A5F : 18; + 2A60 : 10; + 2A61 : 09; + 2A62 : 60; + 2A63 : AD; + 2A64 : 00; + 2A65 : 18; + 2A66 : 10; + 2A67 : FA; + 2A68 : 4C; + 2A69 : 5B; + 2A6A : E8; + 2A6B : 4C; + 2A6C : D7; + 2A6D : E8; + 2A6E : A2; + 2A6F : 00; + 2A70 : 2C; + 2A71 : A6; + 2A72 : 6F; + 2A73 : 9A; + 2A74 : BA; + 2A75 : A9; + 2A76 : 08; + 2A77 : 0D; + 2A78 : 00; + 2A79 : 1C; + 2A7A : 4C; + 2A7B : EA; + 2A7C : FE; + 2A7D : 98; + 2A7E : 18; + 2A7F : 69; + 2A80 : 01; + 2A81 : D0; + 2A82 : FC; + 2A83 : 88; + 2A84 : D0; + 2A85 : F8; + 2A86 : AD; + 2A87 : 00; + 2A88 : 1C; + 2A89 : 29; + 2A8A : F7; + 2A8B : 8D; + 2A8C : 00; + 2A8D : 1C; + 2A8E : 98; + 2A8F : 18; + 2A90 : 69; + 2A91 : 01; + 2A92 : D0; + 2A93 : FC; + 2A94 : 88; + 2A95 : D0; + 2A96 : F8; + 2A97 : CA; + 2A98 : 10; + 2A99 : DB; + 2A9A : E0; + 2A9B : FC; + 2A9C : D0; + [2A9D..2A9E] : F0; + 2A9F : D4; + 2AA0 : 78; + 2AA1 : D8; + 2AA2 : A2; + 2AA3 : FF; + 2AA4 : 4C; + 2AA5 : 10; + 2AA6 : FF; + 2AA7 : E8; + 2AA8 : A0; + 2AA9 : 00; + 2AAA : A2; + 2AAB : 00; + 2AAC : 8A; + 2AAD : 95; + 2AAE : 00; + 2AAF : E8; + 2AB0 : D0; + 2AB1 : FA; + 2AB2 : 8A; + 2AB3 : D5; + 2AB4 : 00; + 2AB5 : D0; + 2AB6 : B7; + 2AB7 : F6; + 2AB8 : 00; + 2AB9 : C8; + 2ABA : D0; + 2ABB : FB; + 2ABC : D5; + 2ABD : 00; + 2ABE : D0; + 2ABF : AE; + 2AC0 : 94; + 2AC1 : 00; + 2AC2 : B5; + 2AC3 : 00; + 2AC4 : D0; + 2AC5 : A8; + 2AC6 : E8; + 2AC7 : D0; + 2AC8 : E9; + 2AC9 : E6; + 2ACA : 6F; + 2ACB : 86; + 2ACC : 76; + 2ACD : A9; + 2ACE : 00; + 2ACF : 85; + 2AD0 : 75; + 2AD1 : A8; + 2AD2 : A2; + 2AD3 : 20; + 2AD4 : 18; + 2AD5 : C6; + 2AD6 : 76; + 2AD7 : 71; + 2AD8 : 75; + 2AD9 : C8; + 2ADA : D0; + 2ADB : FB; + 2ADC : CA; + 2ADD : D0; + 2ADE : F6; + 2ADF : 69; + 2AE0 : 00; + 2AE1 : AA; + 2AE2 : C5; + 2AE3 : 76; + 2AE4 : D0; + 2AE5 : 39; + 2AE6 : E0; + 2AE7 : C0; + 2AE8 : D0; + 2AE9 : DF; + 2AEA : A9; + 2AEB : 01; + 2AEC : 85; + 2AED : 76; + 2AEE : E6; + 2AEF : 6F; + 2AF0 : A2; + 2AF1 : 07; + 2AF2 : 98; + 2AF3 : 18; + 2AF4 : 65; + 2AF5 : 76; + 2AF6 : 91; + 2AF7 : 75; + 2AF8 : C8; + 2AF9 : D0; + 2AFA : F7; + 2AFB : E6; + 2AFC : 76; + 2AFD : CA; + 2AFE : D0; + 2AFF : F2; + 2B00 : A2; + 2B01 : 07; + 2B02 : C6; + 2B03 : 76; + 2B04 : 88; + 2B05 : 98; + 2B06 : 18; + 2B07 : 65; + 2B08 : 76; + 2B09 : D1; + 2B0A : 75; + 2B0B : D0; + 2B0C : 12; + 2B0D : 49; + 2B0E : FF; + 2B0F : 91; + 2B10 : 75; + 2B11 : 51; + 2B12 : 75; + 2B13 : 91; + 2B14 : 75; + 2B15 : D0; + 2B16 : 08; + 2B17 : 98; + 2B18 : D0; + 2B19 : EA; + 2B1A : CA; + 2B1B : D0; + 2B1C : E5; + 2B1D : F0; + 2B1E : 03; + 2B1F : 4C; + 2B20 : 71; + 2B21 : EA; + 2B22 : A2; + 2B23 : 45; + 2B24 : 9A; + 2B25 : AD; + 2B26 : 00; + 2B27 : 1C; + 2B28 : 29; + 2B29 : F7; + 2B2A : 8D; + 2B2B : 00; + 2B2C : 1C; + 2B2D : A9; + 2B2E : 01; + 2B2F : 8D; + 2B30 : 0C; + 2B31 : 18; + 2B32 : A9; + 2B33 : 82; + 2B34 : 8D; + 2B35 : 0D; + 2B36 : 18; + 2B37 : 8D; + 2B38 : 0E; + 2B39 : 18; + 2B3A : AD; + 2B3B : 00; + 2B3C : 18; + 2B3D : 29; + 2B3E : 60; + 2B3F : 0A; + [2B40..2B42] : 2A; + 2B43 : 09; + 2B44 : 48; + 2B45 : 85; + 2B46 : 78; + 2B47 : 49; + 2B48 : 60; + 2B49 : 85; + 2B4A : 77; + 2B4B : A2; + 2B4C : 00; + 2B4D : A0; + 2B4E : 00; + 2B4F : A9; + 2B50 : 00; + 2B51 : 95; + 2B52 : 99; + 2B53 : E8; + 2B54 : B9; + 2B55 : E0; + 2B56 : FE; + 2B57 : 95; + 2B58 : 99; + 2B59 : E8; + 2B5A : C8; + 2B5B : C0; + 2B5C : 05; + 2B5D : D0; + 2B5E : F0; + 2B5F : A9; + 2B60 : 00; + 2B61 : 95; + 2B62 : 99; + 2B63 : E8; + 2B64 : A9; + 2B65 : 02; + 2B66 : 95; + 2B67 : 99; + 2B68 : E8; + 2B69 : A9; + 2B6A : D5; + 2B6B : 95; + 2B6C : 99; + 2B6D : E8; + 2B6E : A9; + 2B6F : 02; + 2B70 : 95; + 2B71 : 99; + 2B72 : A9; + 2B73 : FF; + 2B74 : A2; + 2B75 : 12; + 2B76 : 9D; + 2B77 : 2B; + 2B78 : 02; + 2B79 : CA; + 2B7A : 10; + 2B7B : FA; + 2B7C : A2; + 2B7D : 05; + 2B7E : 95; + 2B7F : A7; + 2B80 : 95; + 2B81 : AE; + 2B82 : 95; + 2B83 : CD; + 2B84 : CA; + 2B85 : 10; + 2B86 : F7; + 2B87 : A9; + 2B88 : 05; + 2B89 : 85; + 2B8A : AB; + 2B8B : A9; + 2B8C : 06; + 2B8D : 85; + 2B8E : AC; + 2B8F : A9; + 2B90 : FF; + 2B91 : 85; + 2B92 : AD; + 2B93 : 85; + 2B94 : B4; + 2B95 : A9; + 2B96 : 05; + 2B97 : 8D; + 2B98 : 3B; + 2B99 : 02; + 2B9A : A9; + 2B9B : 84; + 2B9C : 8D; + 2B9D : 3A; + 2B9E : 02; + 2B9F : A9; + 2BA0 : 0F; + 2BA1 : 8D; + 2BA2 : 56; + 2BA3 : 02; + 2BA4 : A9; + 2BA5 : 01; + 2BA6 : 85; + 2BA7 : F6; + 2BA8 : A9; + 2BA9 : 88; + 2BAA : 85; + 2BAB : F7; + 2BAC : A9; + 2BAD : E0; + 2BAE : 8D; + 2BAF : 4F; + 2BB0 : 02; + 2BB1 : A9; + 2BB2 : FF; + 2BB3 : 8D; + 2BB4 : 50; + 2BB5 : 02; + 2BB6 : A9; + 2BB7 : 01; + 2BB8 : 85; + 2BB9 : 1C; + 2BBA : 85; + 2BBB : 1D; + 2BBC : 20; + 2BBD : 63; + 2BBE : CB; + 2BBF : 20; + 2BC0 : FA; + 2BC1 : CE; + 2BC2 : 20; + 2BC3 : 59; + 2BC4 : F2; + 2BC5 : A9; + 2BC6 : 22; + 2BC7 : 85; + 2BC8 : 65; + 2BC9 : A9; + 2BCA : EB; + 2BCB : 85; + 2BCC : 66; + 2BCD : A9; + 2BCE : 0A; + 2BCF : 85; + 2BD0 : 69; + 2BD1 : A9; + 2BD2 : 05; + 2BD3 : 85; + 2BD4 : 6A; + 2BD5 : A9; + 2BD6 : 73; + 2BD7 : 20; + 2BD8 : C1; + 2BD9 : E6; + 2BDA : A9; + 2BDB : 00; + 2BDC : 8D; + 2BDD : 00; + 2BDE : 18; + 2BDF : A9; + 2BE0 : 1A; + 2BE1 : 8D; + 2BE2 : 02; + 2BE3 : 18; + 2BE4 : 20; + 2BE5 : 80; + 2BE6 : E7; + 2BE7 : 58; + 2BE8 : AD; + 2BE9 : 00; + 2BEA : 18; + 2BEB : 29; + 2BEC : E5; + 2BED : 8D; + 2BEE : 00; + 2BEF : 18; + 2BF0 : AD; + 2BF1 : 55; + 2BF2 : 02; + 2BF3 : F0; + 2BF4 : 0A; + 2BF5 : A9; + 2BF6 : 00; + 2BF7 : 8D; + 2BF8 : 55; + 2BF9 : 02; + 2BFA : 85; + 2BFB : 67; + 2BFC : 20; + 2BFD : 46; + 2BFE : C1; + 2BFF : 58; + 2C00 : A5; + 2C01 : 7C; + 2C02 : F0; + 2C03 : 03; + 2C04 : 4C; + 2C05 : 5B; + 2C06 : E8; + 2C07 : 58; + 2C08 : A9; + 2C09 : 0E; + 2C0A : 85; + 2C0B : 72; + 2C0C : A9; + 2C0D : 00; + 2C0E : 85; + 2C0F : 6F; + 2C10 : 85; + 2C11 : 70; + 2C12 : A6; + 2C13 : 72; + 2C14 : BD; + 2C15 : 2B; + 2C16 : 02; + 2C17 : C9; + 2C18 : FF; + 2C19 : F0; + 2C1A : 10; + 2C1B : 29; + 2C1C : 3F; + 2C1D : 85; + 2C1E : 82; + 2C1F : 20; + 2C20 : 93; + 2C21 : DF; + 2C22 : AA; + 2C23 : BD; + 2C24 : 5B; + 2C25 : 02; + 2C26 : 29; + 2C27 : 01; + 2C28 : AA; + 2C29 : F6; + 2C2A : 6F; + 2C2B : C6; + 2C2C : 72; + 2C2D : 10; + 2C2E : E3; + 2C2F : A0; + 2C30 : 04; + 2C31 : B9; + [2C32..2C33] : 00; + 2C34 : 10; + 2C35 : 05; + 2C36 : 29; + 2C37 : 01; + 2C38 : AA; + 2C39 : F6; + 2C3A : 6F; + 2C3B : 88; + 2C3C : 10; + 2C3D : F3; + 2C3E : 78; + 2C3F : AD; + 2C40 : 00; + 2C41 : 1C; + 2C42 : 29; + 2C43 : F7; + 2C44 : 48; + 2C45 : A5; + 2C46 : 7F; + 2C47 : 85; + 2C48 : 86; + 2C49 : A9; + 2C4A : 00; + 2C4B : 85; + 2C4C : 7F; + 2C4D : A5; + 2C4E : 6F; + 2C4F : F0; + 2C50 : 0B; + 2C51 : A5; + 2C52 : 1C; + 2C53 : F0; + 2C54 : 03; + 2C55 : 20; + 2C56 : 13; + 2C57 : D3; + 2C58 : 68; + 2C59 : 09; + 2C5A : 08; + 2C5B : 48; + 2C5C : E6; + 2C5D : 7F; + 2C5E : A5; + 2C5F : 70; + 2C60 : F0; + 2C61 : 0B; + 2C62 : A5; + 2C63 : 1D; + 2C64 : F0; + 2C65 : 03; + 2C66 : 20; + 2C67 : 13; + 2C68 : D3; + 2C69 : 68; + 2C6A : 09; + 2C6B : 00; + 2C6C : 48; + 2C6D : A5; + 2C6E : 86; + 2C6F : 85; + 2C70 : 7F; + 2C71 : 68; + 2C72 : AE; + 2C73 : 6C; + 2C74 : 02; + 2C75 : F0; + 2C76 : 21; + 2C77 : AD; + 2C78 : 00; + 2C79 : 1C; + 2C7A : E0; + 2C7B : 80; + 2C7C : D0; + 2C7D : 03; + 2C7E : 4C; + 2C7F : 8B; + 2C80 : EC; + 2C81 : AE; + 2C82 : 05; + 2C83 : 18; + 2C84 : 30; + 2C85 : 12; + 2C86 : A2; + 2C87 : A0; + 2C88 : 8E; + 2C89 : 05; + 2C8A : 18; + 2C8B : CE; + 2C8C : 6C; + 2C8D : 02; + 2C8E : D0; + 2C8F : 08; + 2C90 : 4D; + 2C91 : 6D; + 2C92 : 02; + 2C93 : A2; + 2C94 : 10; + 2C95 : 8E; + 2C96 : 6C; + 2C97 : 02; + 2C98 : 8D; + 2C99 : 00; + 2C9A : 1C; + 2C9B : 4C; + 2C9C : FF; + 2C9D : EB; + 2C9E : A9; + 2C9F : 00; + 2CA0 : 85; + 2CA1 : 83; + 2CA2 : A9; + 2CA3 : 01; + 2CA4 : 20; + 2CA5 : E2; + 2CA6 : D1; + 2CA7 : A9; + 2CA8 : 00; + 2CA9 : 20; + 2CAA : C8; + 2CAB : D4; + 2CAC : A6; + 2CAD : 82; + 2CAE : A9; + 2CAF : 00; + 2CB0 : 9D; + 2CB1 : 44; + 2CB2 : 02; + 2CB3 : 20; + 2CB4 : 93; + 2CB5 : DF; + 2CB6 : AA; + 2CB7 : A5; + 2CB8 : 7F; + 2CB9 : 9D; + 2CBA : 5B; + 2CBB : 02; + 2CBC : A9; + 2CBD : 01; + 2CBE : 20; + 2CBF : F1; + 2CC0 : CF; + 2CC1 : A9; + 2CC2 : 04; + 2CC3 : 20; + 2CC4 : F1; + 2CC5 : CF; + 2CC6 : A9; + 2CC7 : 01; + 2CC8 : 20; + 2CC9 : F1; + 2CCA : CF; + 2CCB : 20; + 2CCC : F1; + 2CCD : CF; + 2CCE : AD; + 2CCF : 72; + 2CD0 : 02; + 2CD1 : 20; + 2CD2 : F1; + 2CD3 : CF; + 2CD4 : A9; + 2CD5 : 00; + 2CD6 : 20; + 2CD7 : F1; + 2CD8 : CF; + 2CD9 : 20; + 2CDA : 59; + 2CDB : ED; + 2CDC : 20; + 2CDD : 93; + 2CDE : DF; + 2CDF : 0A; + 2CE0 : AA; + 2CE1 : D6; + 2CE2 : 99; + 2CE3 : D6; + 2CE4 : 99; + 2CE5 : A9; + 2CE6 : 00; + 2CE7 : 20; + 2CE8 : F1; + 2CE9 : CF; + 2CEA : A9; + 2CEB : 01; + 2CEC : 20; + 2CED : F1; + 2CEE : CF; + 2CEF : 20; + 2CF0 : F1; + 2CF1 : CF; + 2CF2 : 20; + 2CF3 : CE; + 2CF4 : C6; + 2CF5 : 90; + 2CF6 : 2C; + 2CF7 : AD; + 2CF8 : 72; + 2CF9 : 02; + 2CFA : 20; + 2CFB : F1; + 2CFC : CF; + 2CFD : AD; + 2CFE : 73; + 2CFF : 02; + 2D00 : 20; + 2D01 : F1; + 2D02 : CF; + 2D03 : 20; + 2D04 : 59; + 2D05 : ED; + 2D06 : A9; + 2D07 : 00; + 2D08 : 20; + 2D09 : F1; + 2D0A : CF; + 2D0B : D0; + 2D0C : DD; + 2D0D : 20; + 2D0E : 93; + 2D0F : DF; + 2D10 : 0A; + 2D11 : AA; + 2D12 : A9; + 2D13 : 00; + 2D14 : 95; + 2D15 : 99; + 2D16 : A9; + 2D17 : 88; + 2D18 : A4; + 2D19 : 82; + 2D1A : 8D; + 2D1B : 54; + 2D1C : 02; + 2D1D : 99; + 2D1E : F2; + 2D1F : 00; + 2D20 : A5; + 2D21 : 85; + 2D22 : 60; + 2D23 : AD; + 2D24 : 72; + 2D25 : 02; + 2D26 : 20; + 2D27 : F1; + 2D28 : CF; + 2D29 : AD; + 2D2A : 73; + 2D2B : 02; + 2D2C : 20; + 2D2D : F1; + 2D2E : CF; + 2D2F : 20; + 2D30 : 59; + 2D31 : ED; + 2D32 : 20; + 2D33 : 93; + 2D34 : DF; + 2D35 : 0A; + 2D36 : AA; + 2D37 : D6; + 2D38 : 99; + 2D39 : D6; + 2D3A : 99; + 2D3B : A9; + 2D3C : 00; + 2D3D : 20; + 2D3E : F1; + 2D3F : CF; + 2D40 : 20; + 2D41 : F1; + 2D42 : CF; + 2D43 : 20; + 2D44 : F1; + 2D45 : CF; + 2D46 : 20; + 2D47 : 93; + 2D48 : DF; + 2D49 : 0A; + 2D4A : A8; + 2D4B : B9; + 2D4C : 99; + 2D4D : 00; + 2D4E : A6; + 2D4F : 82; + 2D50 : 9D; + 2D51 : 44; + 2D52 : 02; + 2D53 : DE; + 2D54 : 44; + 2D55 : 02; + 2D56 : 4C; + 2D57 : 0D; + 2D58 : ED; + 2D59 : A0; + 2D5A : 00; + 2D5B : B9; + 2D5C : B1; + 2D5D : 02; + 2D5E : 20; + 2D5F : F1; + 2D60 : CF; + 2D61 : C8; + 2D62 : C0; + 2D63 : 1B; + 2D64 : D0; + 2D65 : F5; + 2D66 : 60; + 2D67 : 20; + 2D68 : 37; + 2D69 : D1; + 2D6A : F0; + 2D6B : 01; + 2D6C : 60; + [2D6D..2D6E] : 85; + 2D6F : A4; + 2D70 : 82; + 2D71 : B9; + 2D72 : 44; + 2D73 : 02; + 2D74 : F0; + 2D75 : 08; + 2D76 : A9; + 2D77 : 80; + 2D78 : 99; + 2D79 : F2; + 2D7A : 00; + 2D7B : A5; + 2D7C : 85; + 2D7D : 60; + 2D7E : 48; + 2D7F : 20; + 2D80 : EA; + 2D81 : EC; + 2D82 : 68; + 2D83 : 60; + 2D84 : 20; + 2D85 : D1; + 2D86 : C1; + 2D87 : 20; + 2D88 : 42; + 2D89 : D0; + 2D8A : A9; + 2D8B : 40; + 2D8C : 8D; + 2D8D : F9; + 2D8E : 02; + 2D8F : 20; + 2D90 : B7; + 2D91 : EE; + 2D92 : A9; + 2D93 : 00; + 2D94 : 8D; + 2D95 : 92; + 2D96 : 02; + 2D97 : 20; + 2D98 : AC; + 2D99 : C5; + 2D9A : D0; + 2D9B : 3D; + 2D9C : A9; + 2D9D : 00; + 2D9E : 85; + 2D9F : 81; + 2DA0 : AD; + 2DA1 : 85; + 2DA2 : FE; + 2DA3 : 85; + 2DA4 : 80; + 2DA5 : 20; + 2DA6 : E5; + 2DA7 : ED; + 2DA8 : A9; + 2DA9 : 00; + 2DAA : 8D; + 2DAB : F9; + 2DAC : 02; + 2DAD : 20; + 2DAE : FF; + 2DAF : EE; + 2DB0 : 4C; + 2DB1 : 94; + 2DB2 : C1; + 2DB3 : C8; + 2DB4 : B1; + 2DB5 : 94; + 2DB6 : 48; + 2DB7 : C8; + 2DB8 : B1; + 2DB9 : 94; + 2DBA : 48; + 2DBB : A0; + 2DBC : 13; + 2DBD : B1; + 2DBE : 94; + 2DBF : F0; + 2DC0 : 0A; + 2DC1 : 85; + 2DC2 : 80; + 2DC3 : C8; + 2DC4 : B1; + 2DC5 : 94; + 2DC6 : 85; + 2DC7 : 81; + 2DC8 : 20; + 2DC9 : E5; + 2DCA : ED; + 2DCB : 68; + 2DCC : 85; + 2DCD : 81; + 2DCE : 68; + 2DCF : 85; + 2DD0 : 80; + 2DD1 : 20; + 2DD2 : E5; + 2DD3 : ED; + 2DD4 : 20; + 2DD5 : 04; + 2DD6 : C6; + 2DD7 : F0; + 2DD8 : C3; + 2DD9 : A0; + 2DDA : 00; + 2DDB : B1; + 2DDC : 94; + 2DDD : 30; + 2DDE : D4; + 2DDF : 20; + 2DE0 : B6; + 2DE1 : C8; + 2DE2 : 4C; + 2DE3 : D4; + 2DE4 : ED; + 2DE5 : 20; + 2DE6 : 5F; + 2DE7 : D5; + 2DE8 : 20; + 2DE9 : 90; + 2DEA : EF; + 2DEB : 20; + 2DEC : 75; + 2DED : D4; + 2DEE : A9; + 2DEF : 00; + 2DF0 : 20; + 2DF1 : C8; + 2DF2 : D4; + 2DF3 : 20; + 2DF4 : 37; + 2DF5 : D1; + 2DF6 : 85; + 2DF7 : 80; + 2DF8 : 20; + 2DF9 : 37; + 2DFA : D1; + 2DFB : 85; + 2DFC : 81; + 2DFD : A5; + 2DFE : 80; + 2DFF : D0; + 2E00 : 03; + 2E01 : 4C; + 2E02 : 27; + 2E03 : D2; + 2E04 : 20; + 2E05 : 90; + 2E06 : EF; + 2E07 : 20; + 2E08 : 4D; + 2E09 : D4; + 2E0A : 4C; + 2E0B : EE; + 2E0C : ED; + 2E0D : 20; + 2E0E : 12; + 2E0F : C3; + 2E10 : A5; + 2E11 : E2; + 2E12 : 10; + 2E13 : 05; + 2E14 : A9; + 2E15 : 33; + 2E16 : 4C; + 2E17 : C8; + 2E18 : C1; + 2E19 : 29; + 2E1A : 01; + 2E1B : 85; + 2E1C : 7F; + 2E1D : 20; + 2E1E : 00; + 2E1F : C1; + 2E20 : A5; + 2E21 : 7F; + 2E22 : 0A; + 2E23 : AA; + 2E24 : AC; + 2E25 : 7B; + 2E26 : 02; + 2E27 : CC; + 2E28 : 74; + 2E29 : 02; + 2E2A : F0; + 2E2B : 1A; + 2E2C : B9; + 2E2D : 00; + 2E2E : 02; + 2E2F : 95; + 2E30 : 12; + 2E31 : B9; + 2E32 : 01; + 2E33 : 02; + 2E34 : 95; + 2E35 : 13; + 2E36 : 20; + 2E37 : 07; + 2E38 : D3; + 2E39 : A9; + 2E3A : 01; + 2E3B : 85; + 2E3C : 80; + 2E3D : 20; + 2E3E : 2F; + 2E3F : FF; + 2E40 : 20; + 2E41 : 05; + 2E42 : F0; + 2E43 : 4C; + 2E44 : 56; + 2E45 : EE; + 2E46 : 20; + 2E47 : 42; + 2E48 : D0; + 2E49 : A6; + 2E4A : 7F; + 2E4B : BD; + [2E4C..2E4D] : 01; + 2E4E : CD; + 2E4F : D5; + 2E50 : FE; + 2E51 : F0; + 2E52 : 03; + 2E53 : 4C; + 2E54 : 72; + 2E55 : D5; + 2E56 : 20; + 2E57 : B7; + 2E58 : EE; + 2E59 : A5; + 2E5A : F9; + 2E5B : A8; + 2E5C : 0A; + 2E5D : AA; + 2E5E : AD; + 2E5F : 88; + 2E60 : FE; + 2E61 : 95; + 2E62 : 99; + 2E63 : AE; + 2E64 : 7A; + 2E65 : 02; + 2E66 : A9; + 2E67 : 1B; + 2E68 : 20; + 2E69 : 6E; + 2E6A : C6; + 2E6B : A0; + 2E6C : 12; + 2E6D : A6; + 2E6E : 7F; + 2E6F : AD; + 2E70 : D5; + 2E71 : FE; + 2E72 : 9D; + [2E73..2E74] : 01; + 2E75 : 8A; + 2E76 : 0A; + 2E77 : AA; + 2E78 : B5; + 2E79 : 12; + 2E7A : 91; + 2E7B : 94; + 2E7C : C8; + 2E7D : B5; + 2E7E : 13; + 2E7F : 91; + 2E80 : 94; + [2E81..2E82] : C8; + 2E83 : A9; + 2E84 : 32; + 2E85 : 91; + 2E86 : 94; + 2E87 : C8; + 2E88 : AD; + 2E89 : D5; + 2E8A : FE; + 2E8B : 91; + 2E8C : 94; + 2E8D : A0; + 2E8E : 02; + 2E8F : 91; + 2E90 : 6D; + 2E91 : AD; + 2E92 : 85; + 2E93 : FE; + 2E94 : 85; + 2E95 : 80; + 2E96 : 20; + 2E97 : 93; + 2E98 : EF; + 2E99 : A9; + 2E9A : 01; + 2E9B : 85; + 2E9C : 81; + 2E9D : 20; + 2E9E : 93; + 2E9F : EF; + 2EA0 : 20; + 2EA1 : FF; + 2EA2 : EE; + 2EA3 : 20; + 2EA4 : 05; + 2EA5 : F0; + 2EA6 : A0; + 2EA7 : 01; + 2EA8 : A9; + 2EA9 : FF; + 2EAA : 91; + 2EAB : 6D; + 2EAC : 20; + 2EAD : 64; + 2EAE : D4; + 2EAF : C6; + 2EB0 : 81; + 2EB1 : 20; + 2EB2 : 60; + 2EB3 : D4; + 2EB4 : 4C; + 2EB5 : 94; + 2EB6 : C1; + 2EB7 : 20; + 2EB8 : D1; + 2EB9 : F0; + 2EBA : A0; + 2EBB : 00; + 2EBC : A9; + 2EBD : 12; + 2EBE : 91; + 2EBF : 6D; + 2EC0 : C8; + 2EC1 : 98; + 2EC2 : 91; + 2EC3 : 6D; + [2EC4..2EC6] : C8; + 2EC7 : A9; + 2EC8 : 00; + 2EC9 : 85; + 2ECA : 6F; + 2ECB : 85; + 2ECC : 70; + 2ECD : 85; + 2ECE : 71; + 2ECF : 98; + [2ED0..2ED1] : 4A; + 2ED2 : 20; + 2ED3 : 4B; + 2ED4 : F2; + 2ED5 : 91; + 2ED6 : 6D; + 2ED7 : C8; + 2ED8 : AA; + 2ED9 : 38; + 2EDA : 26; + 2EDB : 6F; + 2EDC : 26; + 2EDD : 70; + 2EDE : 26; + 2EDF : 71; + 2EE0 : CA; + 2EE1 : D0; + 2EE2 : F6; + 2EE3 : B5; + 2EE4 : 6F; + 2EE5 : 91; + 2EE6 : 6D; + 2EE7 : C8; + 2EE8 : E8; + 2EE9 : E0; + 2EEA : 03; + 2EEB : 90; + 2EEC : F6; + 2EED : C0; + [2EEE..2EEF] : 90; + 2EF0 : D6; + 2EF1 : 4C; + 2EF2 : 75; + 2EF3 : D0; + 2EF4 : 20; + 2EF5 : 93; + 2EF6 : DF; + 2EF7 : AA; + 2EF8 : BD; + 2EF9 : 5B; + 2EFA : 02; + 2EFB : 29; + 2EFC : 01; + 2EFD : 85; + 2EFE : 7F; + 2EFF : A4; + 2F00 : 7F; + 2F01 : B9; + 2F02 : 51; + 2F03 : 02; + 2F04 : D0; + 2F05 : 01; + 2F06 : 60; + 2F07 : A9; + 2F08 : 00; + 2F09 : 99; + 2F0A : 51; + 2F0B : 02; + 2F0C : 20; + 2F0D : 3A; + 2F0E : EF; + 2F0F : A5; + 2F10 : 7F; + 2F11 : 0A; + 2F12 : 48; + 2F13 : 20; + 2F14 : A5; + 2F15 : F0; + 2F16 : 68; + 2F17 : 18; + 2F18 : 69; + 2F19 : 01; + 2F1A : 20; + 2F1B : A5; + 2F1C : F0; + 2F1D : A5; + 2F1E : 80; + 2F1F : 48; + 2F20 : A9; + 2F21 : 01; + 2F22 : 85; + 2F23 : 80; + [2F24..2F25] : 0A; + 2F26 : 85; + 2F27 : 6D; + [2F28..2F29] : 20; + 2F2A : F2; + 2F2B : E6; + 2F2C : 80; + 2F2D : A5; + 2F2E : 80; + 2F2F : CD; + 2F30 : D7; + 2F31 : FE; + 2F32 : 90; + 2F33 : F0; + 2F34 : 68; + 2F35 : 85; + 2F36 : 80; + 2F37 : 4C; + 2F38 : 8A; + 2F39 : D5; + 2F3A : 20; + 2F3B : 0F; + 2F3C : F1; + 2F3D : AA; + 2F3E : 20; + 2F3F : DF; + 2F40 : F0; + 2F41 : A6; + 2F42 : F9; + 2F43 : BD; + 2F44 : E0; + 2F45 : FE; + 2F46 : 85; + 2F47 : 6E; + 2F48 : A9; + 2F49 : 00; + 2F4A : 85; + 2F4B : 6D; + 2F4C : 60; + 2F4D : A6; + 2F4E : 7F; + 2F4F : BD; + 2F50 : FA; + 2F51 : 02; + 2F52 : 8D; + 2F53 : 72; + 2F54 : 02; + 2F55 : BD; + 2F56 : FC; + 2F57 : 02; + 2F58 : 8D; + 2F59 : 73; + 2F5A : 02; + 2F5B : 60; + 2F5C : 20; + 2F5D : F1; + 2F5E : EF; + 2F5F : 20; + 2F60 : CF; + 2F61 : EF; + 2F62 : 38; + 2F63 : D0; + 2F64 : 22; + 2F65 : B1; + 2F66 : 6D; + 2F67 : 1D; + 2F68 : E9; + 2F69 : EF; + 2F6A : 91; + 2F6B : 6D; + 2F6C : 20; + 2F6D : 88; + 2F6E : EF; + 2F6F : A4; + 2F70 : 6F; + 2F71 : 18; + 2F72 : B1; + 2F73 : 6D; + 2F74 : 69; + 2F75 : 01; + 2F76 : 91; + 2F77 : 6D; + 2F78 : A5; + 2F79 : 80; + 2F7A : CD; + 2F7B : 85; + 2F7C : FE; + 2F7D : F0; + 2F7E : 3B; + 2F7F : FE; + 2F80 : FA; + 2F81 : 02; + 2F82 : D0; + 2F83 : 03; + 2F84 : FE; + 2F85 : FC; + 2F86 : 02; + 2F87 : 60; + 2F88 : A6; + 2F89 : 7F; + 2F8A : A9; + 2F8B : 01; + 2F8C : 9D; + 2F8D : 51; + 2F8E : 02; + 2F8F : 60; + 2F90 : 20; + 2F91 : F1; + 2F92 : EF; + 2F93 : 20; + 2F94 : CF; + 2F95 : EF; + 2F96 : F0; + 2F97 : 36; + 2F98 : B1; + 2F99 : 6D; + 2F9A : 5D; + 2F9B : E9; + 2F9C : EF; + 2F9D : 91; + 2F9E : 6D; + 2F9F : 20; + 2FA0 : 88; + 2FA1 : EF; + 2FA2 : A4; + 2FA3 : 6F; + 2FA4 : B1; + 2FA5 : 6D; + 2FA6 : 38; + 2FA7 : E9; + 2FA8 : 01; + 2FA9 : 91; + 2FAA : 6D; + 2FAB : A5; + 2FAC : 80; + 2FAD : CD; + 2FAE : 85; + 2FAF : FE; + 2FB0 : F0; + 2FB1 : 0B; + 2FB2 : BD; + 2FB3 : FA; + 2FB4 : 02; + 2FB5 : D0; + 2FB6 : 03; + 2FB7 : DE; + 2FB8 : FC; + 2FB9 : 02; + 2FBA : DE; + 2FBB : FA; + 2FBC : 02; + 2FBD : BD; + 2FBE : FC; + 2FBF : 02; + 2FC0 : D0; + 2FC1 : 0C; + 2FC2 : BD; + 2FC3 : FA; + 2FC4 : 02; + 2FC5 : C9; + 2FC6 : 03; + 2FC7 : B0; + 2FC8 : 05; + 2FC9 : A9; + 2FCA : 72; + 2FCB : 20; + 2FCC : C7; + 2FCD : E6; + 2FCE : 60; + 2FCF : 20; + 2FD0 : 11; + 2FD1 : F0; + 2FD2 : 98; + 2FD3 : 85; + 2FD4 : 6F; + 2FD5 : A5; + 2FD6 : 81; + [2FD7..2FD9] : 4A; + 2FDA : 38; + 2FDB : 65; + 2FDC : 6F; + 2FDD : A8; + 2FDE : A5; + 2FDF : 81; + 2FE0 : 29; + 2FE1 : 07; + 2FE2 : AA; + 2FE3 : B1; + 2FE4 : 6D; + 2FE5 : 3D; + 2FE6 : E9; + 2FE7 : EF; + 2FE8 : 60; + 2FE9 : 01; + 2FEA : 02; + 2FEB : 04; + 2FEC : 08; + 2FED : 10; + 2FEE : 20; + 2FEF : 40; + 2FF0 : 80; + 2FF1 : A9; + 2FF2 : FF; + 2FF3 : 2C; + 2FF4 : F9; + 2FF5 : 02; + 2FF6 : F0; + 2FF7 : 0C; + 2FF8 : 10; + 2FF9 : 0A; + 2FFA : 70; + 2FFB : 08; + 2FFC : A9; + 2FFD : 00; + 2FFE : 8D; + 2FFF : F9; + 3000 : 02; + 3001 : 4C; + 3002 : 8A; + 3003 : D5; + 3004 : 60; + 3005 : 20; + 3006 : 3A; + 3007 : EF; + 3008 : A0; + 3009 : 00; + 300A : 98; + 300B : 91; + 300C : 6D; + 300D : C8; + 300E : D0; + 300F : FB; + 3010 : 60; + 3011 : A5; + 3012 : 6F; + 3013 : 48; + 3014 : A5; + 3015 : 70; + 3016 : 48; + 3017 : A6; + 3018 : 7F; + 3019 : B5; + 301A : FF; + 301B : F0; + 301C : 05; + 301D : A9; + 301E : 74; + 301F : 20; + 3020 : 48; + 3021 : E6; + 3022 : 20; + 3023 : 0F; + 3024 : F1; + 3025 : 85; + 3026 : 6F; + 3027 : 8A; + 3028 : 0A; + 3029 : 85; + 302A : 70; + 302B : AA; + 302C : A5; + 302D : 80; + 302E : DD; + 302F : 9D; + 3030 : 02; + 3031 : F0; + 3032 : 0B; + 3033 : E8; + 3034 : 86; + 3035 : 70; + 3036 : DD; + 3037 : 9D; + 3038 : 02; + 3039 : F0; + 303A : 03; + 303B : 20; + 303C : 5B; + 303D : F0; + 303E : A5; + 303F : 70; + 3040 : A6; + 3041 : 7F; + 3042 : 9D; + 3043 : 9B; + 3044 : 02; + [3045..3046] : 0A; + 3047 : 18; + 3048 : 69; + 3049 : A1; + 304A : 85; + 304B : 6D; + 304C : A9; + 304D : 02; + 304E : 69; + 304F : 00; + 3050 : 85; + 3051 : 6E; + 3052 : A0; + 3053 : 00; + 3054 : 68; + 3055 : 85; + 3056 : 70; + 3057 : 68; + 3058 : 85; + 3059 : 6F; + 305A : 60; + 305B : A6; + 305C : 6F; + 305D : 20; + 305E : DF; + 305F : F0; + 3060 : A5; + 3061 : 7F; + 3062 : AA; + 3063 : 0A; + 3064 : 1D; + 3065 : 9B; + 3066 : 02; + 3067 : 49; + 3068 : 01; + 3069 : 29; + 306A : 03; + 306B : 85; + 306C : 70; + 306D : 20; + 306E : A5; + 306F : F0; + 3070 : A5; + 3071 : F9; + 3072 : 0A; + 3073 : AA; + 3074 : A5; + 3075 : 80; + [3076..3077] : 0A; + 3078 : 95; + 3079 : 99; + 307A : A5; + 307B : 70; + [307C..307D] : 0A; + 307E : A8; + 307F : A1; + [3080..3081] : 99; + 3082 : A1; + 3083 : 02; + 3084 : A9; + 3085 : 00; + 3086 : 81; + 3087 : 99; + 3088 : F6; + 3089 : 99; + 308A : C8; + 308B : 98; + 308C : 29; + 308D : 03; + 308E : D0; + 308F : EF; + 3090 : A6; + 3091 : 70; + 3092 : A5; + 3093 : 80; + [3094..3095] : 9D; + 3096 : 02; + 3097 : AD; + 3098 : F9; + 3099 : 02; + 309A : D0; + 309B : 03; + 309C : 4C; + 309D : 8A; + 309E : D5; + 309F : 09; + 30A0 : 80; + 30A1 : 8D; + 30A2 : F9; + 30A3 : 02; + 30A4 : 60; + 30A5 : A8; + 30A6 : B9; + 30A7 : 9D; + 30A8 : 02; + 30A9 : F0; + 30AA : 25; + 30AB : 48; + 30AC : A9; + 30AD : 00; + 30AE : 99; + 30AF : 9D; + 30B0 : 02; + 30B1 : A5; + 30B2 : F9; + 30B3 : 0A; + 30B4 : AA; + 30B5 : 68; + [30B6..30B7] : 0A; + 30B8 : 95; + 30B9 : 99; + 30BA : 98; + [30BB..30BC] : 0A; + 30BD : A8; + 30BE : B9; + 30BF : A1; + 30C0 : 02; + 30C1 : 81; + 30C2 : 99; + 30C3 : A9; + 30C4 : 00; + 30C5 : 99; + 30C6 : A1; + 30C7 : 02; + 30C8 : F6; + 30C9 : 99; + 30CA : C8; + 30CB : 98; + 30CC : 29; + 30CD : 03; + 30CE : D0; + 30CF : EE; + 30D0 : 60; + 30D1 : A5; + 30D2 : 7F; + 30D3 : 0A; + 30D4 : AA; + 30D5 : A9; + 30D6 : 00; + [30D7..30D8] : 9D; + 30D9 : 02; + 30DA : E8; + [30DB..30DC] : 9D; + 30DD : 02; + 30DE : 60; + 30DF : B5; + 30E0 : A7; + 30E1 : C9; + 30E2 : FF; + 30E3 : D0; + 30E4 : 25; + 30E5 : 8A; + 30E6 : 48; + 30E7 : 20; + 30E8 : 8E; + 30E9 : D2; + 30EA : AA; + 30EB : 10; + 30EC : 05; + 30ED : A9; + 30EE : 70; + 30EF : 20; + 30F0 : C8; + 30F1 : C1; + 30F2 : 86; + 30F3 : F9; + 30F4 : 68; + 30F5 : A8; + 30F6 : 8A; + 30F7 : 09; + 30F8 : 80; + 30F9 : 99; + 30FA : A7; + 30FB : 00; + 30FC : 0A; + 30FD : AA; + 30FE : AD; + 30FF : 85; + 3100 : FE; + 3101 : 95; + 3102 : 06; + 3103 : A9; + 3104 : 00; + 3105 : 95; + 3106 : 07; + 3107 : 4C; + 3108 : 86; + 3109 : D5; + 310A : 29; + 310B : 0F; + 310C : 85; + 310D : F9; + 310E : 60; + 310F : A9; + 3110 : 06; + 3111 : A6; + 3112 : 7F; + 3113 : D0; + 3114 : 03; + 3115 : 18; + 3116 : 69; + 3117 : 07; + 3118 : 60; + 3119 : 20; + 311A : 0F; + 311B : F1; + 311C : AA; + 311D : 60; + 311E : 20; + 311F : 3E; + 3120 : DE; + 3121 : A9; + 3122 : 03; + 3123 : 85; + 3124 : 6F; + 3125 : A9; + 3126 : 01; + 3127 : 0D; + 3128 : F9; + 3129 : 02; + 312A : 8D; + 312B : F9; + 312C : 02; + 312D : A5; + 312E : 6F; + 312F : 48; + 3130 : 20; + 3131 : 11; + 3132 : F0; + 3133 : 68; + 3134 : 85; + 3135 : 6F; + 3136 : B1; + 3137 : 6D; + 3138 : D0; + 3139 : 39; + 313A : A5; + 313B : 80; + 313C : CD; + 313D : 85; + 313E : FE; + 313F : F0; + 3140 : 19; + 3141 : 90; + 3142 : 1C; + 3143 : E6; + 3144 : 80; + 3145 : A5; + 3146 : 80; + 3147 : CD; + 3148 : D7; + 3149 : FE; + 314A : D0; + 314B : E1; + 314C : AE; + 314D : 85; + 314E : FE; + 314F : CA; + 3150 : 86; + 3151 : 80; + 3152 : A9; + 3153 : 00; + 3154 : 85; + 3155 : 81; + 3156 : C6; + 3157 : 6F; + 3158 : D0; + 3159 : D3; + 315A : A9; + 315B : 72; + 315C : 20; + 315D : C8; + 315E : C1; + 315F : C6; + 3160 : 80; + 3161 : D0; + 3162 : CA; + 3163 : AE; + 3164 : 85; + 3165 : FE; + 3166 : E8; + 3167 : 86; + 3168 : 80; + 3169 : A9; + 316A : 00; + 316B : 85; + 316C : 81; + 316D : C6; + 316E : 6F; + 316F : D0; + 3170 : BC; + 3171 : F0; + 3172 : E7; + 3173 : A5; + 3174 : 81; + 3175 : 18; + 3176 : 65; + 3177 : 69; + 3178 : 85; + 3179 : 81; + 317A : A5; + 317B : 80; + 317C : 20; + 317D : 4B; + 317E : F2; + 317F : 8D; + 3180 : 4E; + 3181 : 02; + 3182 : 8D; + 3183 : 4D; + 3184 : 02; + 3185 : C5; + 3186 : 81; + 3187 : B0; + 3188 : 0C; + 3189 : 38; + 318A : A5; + 318B : 81; + 318C : ED; + 318D : 4E; + 318E : 02; + 318F : 85; + 3190 : 81; + 3191 : F0; + 3192 : 02; + 3193 : C6; + 3194 : 81; + 3195 : 20; + 3196 : FA; + 3197 : F1; + 3198 : F0; + 3199 : 03; + 319A : 4C; + 319B : 90; + 319C : EF; + 319D : A9; + 319E : 00; + 319F : 85; + 31A0 : 81; + 31A1 : 20; + 31A2 : FA; + 31A3 : F1; + 31A4 : D0; + 31A5 : F4; + 31A6 : 4C; + 31A7 : F5; + 31A8 : F1; + 31A9 : A9; + 31AA : 01; + 31AB : 0D; + 31AC : F9; + 31AD : 02; + 31AE : 8D; + 31AF : F9; + 31B0 : 02; + 31B1 : A5; + 31B2 : 86; + 31B3 : 48; + 31B4 : A9; + 31B5 : 01; + 31B6 : 85; + 31B7 : 86; + 31B8 : AD; + 31B9 : 85; + 31BA : FE; + 31BB : 38; + 31BC : E5; + 31BD : 86; + 31BE : 85; + 31BF : 80; + 31C0 : 90; + 31C1 : 09; + 31C2 : F0; + 31C3 : 07; + 31C4 : 20; + 31C5 : 11; + 31C6 : F0; + 31C7 : B1; + 31C8 : 6D; + 31C9 : D0; + 31CA : 1B; + 31CB : AD; + 31CC : 85; + 31CD : FE; + 31CE : 18; + 31CF : 65; + 31D0 : 86; + 31D1 : 85; + 31D2 : 80; + 31D3 : E6; + 31D4 : 86; + 31D5 : CD; + 31D6 : D7; + 31D7 : FE; + 31D8 : 90; + 31D9 : 05; + 31DA : A9; + 31DB : 67; + 31DC : 20; + 31DD : 45; + 31DE : E6; + 31DF : 20; + 31E0 : 11; + 31E1 : F0; + 31E2 : B1; + 31E3 : 6D; + 31E4 : F0; + 31E5 : D2; + 31E6 : 68; + 31E7 : 85; + 31E8 : 86; + 31E9 : A9; + 31EA : 00; + 31EB : 85; + 31EC : 81; + 31ED : 20; + 31EE : FA; + 31EF : F1; + 31F0 : F0; + 31F1 : 03; + 31F2 : 4C; + 31F3 : 90; + 31F4 : EF; + 31F5 : A9; + 31F6 : 71; + 31F7 : 20; + 31F8 : 45; + 31F9 : E6; + 31FA : 20; + 31FB : 11; + 31FC : F0; + 31FD : 98; + 31FE : 48; + [31FF..3200] : 20; + 3201 : F2; + 3202 : A5; + 3203 : 80; + 3204 : 20; + 3205 : 4B; + 3206 : F2; + 3207 : 8D; + 3208 : 4E; + 3209 : 02; + 320A : 68; + 320B : 85; + 320C : 6F; + 320D : A5; + 320E : 81; + 320F : CD; + 3210 : 4E; + 3211 : 02; + 3212 : B0; + 3213 : 09; + 3214 : 20; + 3215 : D5; + 3216 : EF; + 3217 : D0; + 3218 : 06; + 3219 : E6; + 321A : 81; + 321B : D0; + 321C : F0; + 321D : A9; + 321E : 00; + 321F : 60; + 3220 : A5; + 3221 : 6F; + 3222 : 48; + 3223 : A9; + 3224 : 00; + 3225 : 85; + 3226 : 6F; + 3227 : AC; + 3228 : 86; + 3229 : FE; + 322A : 88; + 322B : A2; + 322C : 07; + 322D : B1; + 322E : 6D; + 322F : 3D; + 3230 : E9; + 3231 : EF; + 3232 : F0; + 3233 : 02; + 3234 : E6; + 3235 : 6F; + 3236 : CA; + 3237 : 10; + 3238 : F4; + 3239 : 88; + 323A : D0; + 323B : EF; + 323C : B1; + 323D : 6D; + 323E : C5; + 323F : 6F; + 3240 : D0; + 3241 : 04; + 3242 : 68; + 3243 : 85; + 3244 : 6F; + 3245 : 60; + 3246 : A9; + 3247 : 71; + 3248 : 20; + 3249 : 45; + 324A : E6; + 324B : AE; + 324C : D6; + 324D : FE; + 324E : DD; + 324F : D6; + 3250 : FE; + 3251 : CA; + 3252 : B0; + 3253 : FA; + 3254 : BD; + 3255 : D1; + 3256 : FE; + [3257..3258] : 60; + 3259 : A9; + 325A : 6F; + 325B : 8D; + 325C : 02; + 325D : 1C; + 325E : 29; + 325F : F0; + 3260 : 8D; + 3261 : 00; + 3262 : 1C; + 3263 : AD; + 3264 : 0C; + 3265 : 1C; + 3266 : 29; + 3267 : FE; + 3268 : 09; + 3269 : 0E; + 326A : 09; + 326B : E0; + 326C : 8D; + 326D : 0C; + 326E : 1C; + 326F : A9; + 3270 : 41; + 3271 : 8D; + 3272 : 0B; + 3273 : 1C; + 3274 : A9; + 3275 : 00; + 3276 : 8D; + 3277 : 06; + 3278 : 1C; + 3279 : A9; + 327A : 3A; + 327B : 8D; + 327C : 07; + 327D : 1C; + 327E : 8D; + 327F : 05; + 3280 : 1C; + 3281 : A9; + 3282 : 7F; + 3283 : 8D; + 3284 : 0E; + 3285 : 1C; + 3286 : A9; + 3287 : C0; + 3288 : 8D; + 3289 : 0D; + 328A : 1C; + 328B : 8D; + 328C : 0E; + 328D : 1C; + 328E : A9; + 328F : FF; + 3290 : 85; + 3291 : 3E; + 3292 : 85; + 3293 : 51; + 3294 : A9; + 3295 : 08; + 3296 : 85; + 3297 : 39; + 3298 : A9; + 3299 : 07; + 329A : 85; + 329B : 47; + 329C : A9; + 329D : 05; + 329E : 85; + 329F : 62; + 32A0 : A9; + 32A1 : FA; + 32A2 : 85; + 32A3 : 63; + 32A4 : A9; + 32A5 : C8; + 32A6 : 85; + 32A7 : 64; + 32A8 : A9; + 32A9 : 04; + 32AA : 85; + 32AB : 5E; + 32AC : A9; + 32AD : 04; + 32AE : 85; + 32AF : 5F; + 32B0 : BA; + 32B1 : 86; + 32B2 : 49; + 32B3 : AD; + 32B4 : 04; + 32B5 : 1C; + 32B6 : AD; + 32B7 : 0C; + 32B8 : 1C; + 32B9 : 09; + 32BA : 0E; + 32BB : 8D; + 32BC : 0C; + 32BD : 1C; + 32BE : A0; + 32BF : 05; + 32C0 : B9; + [32C1..32C2] : 00; + 32C3 : 10; + 32C4 : 2E; + 32C5 : C9; + [32C6..32C7] : D0; + 32C8 : 04; + 32C9 : 98; + 32CA : 4C; + 32CB : 70; + 32CC : F3; + 32CD : 29; + 32CE : 01; + 32CF : F0; + 32D0 : 07; + 32D1 : 84; + 32D2 : 3F; + 32D3 : A9; + 32D4 : 0F; + 32D5 : 4C; + 32D6 : 69; + 32D7 : F9; + 32D8 : AA; + 32D9 : 85; + 32DA : 3D; + 32DB : C5; + 32DC : 3E; + 32DD : F0; + 32DE : 0A; + 32DF : 20; + 32E0 : 7E; + 32E1 : F9; + 32E2 : A5; + 32E3 : 3D; + 32E4 : 85; + 32E5 : 3E; + 32E6 : 4C; + 32E7 : 9C; + 32E8 : F9; + 32E9 : A5; + 32EA : 20; + 32EB : 30; + 32EC : 03; + 32ED : 0A; + 32EE : 10; + 32EF : 09; + 32F0 : 4C; + 32F1 : 9C; + 32F2 : F9; + 32F3 : 88; + 32F4 : 10; + 32F5 : CA; + 32F6 : 4C; + 32F7 : 9C; + 32F8 : F9; + 32F9 : A9; + 32FA : 20; + 32FB : 85; + 32FC : 20; + 32FD : A0; + 32FE : 05; + 32FF : 84; + 3300 : 3F; + 3301 : 20; + 3302 : 93; + 3303 : F3; + 3304 : 30; + 3305 : 1A; + 3306 : C6; + 3307 : 3F; + 3308 : 10; + 3309 : F7; + 330A : A4; + 330B : 41; + 330C : 20; + 330D : 95; + 330E : F3; + 330F : A5; + 3310 : 42; + 3311 : 85; + 3312 : 4A; + 3313 : 06; + 3314 : 4A; + 3315 : A9; + 3316 : 60; + 3317 : 85; + 3318 : 20; + 3319 : B1; + 331A : 32; + 331B : 85; + 331C : 22; + 331D : 4C; + 331E : 9C; + 331F : F9; + 3320 : 29; + 3321 : 01; + 3322 : C5; + 3323 : 3D; + 3324 : D0; + 3325 : E0; + 3326 : A5; + 3327 : 22; + 3328 : F0; + 3329 : 12; + 332A : 38; + 332B : F1; + 332C : 32; + 332D : F0; + 332E : 0D; + 332F : 49; + 3330 : FF; + 3331 : 85; + 3332 : 42; + 3333 : E6; + 3334 : 42; + 3335 : A5; + 3336 : 3F; + 3337 : 85; + 3338 : 41; + 3339 : 4C; + 333A : 06; + 333B : F3; + 333C : A2; + 333D : 04; + 333E : B1; + 333F : 32; + 3340 : 85; + 3341 : 40; + 3342 : DD; + 3343 : D6; + 3344 : FE; + 3345 : CA; + 3346 : B0; + 3347 : FA; + 3348 : BD; + 3349 : D1; + 334A : FE; + 334B : 85; + 334C : 43; + 334D : 8A; + [334E..3352] : 0A; + 3353 : 85; + 3354 : 44; + 3355 : AD; + 3356 : 00; + 3357 : 1C; + 3358 : 29; + 3359 : 9F; + 335A : 05; + 335B : 44; + 335C : 8D; + 335D : 00; + 335E : 1C; + 335F : A6; + 3360 : 3D; + 3361 : A5; + 3362 : 45; + 3363 : C9; + 3364 : 40; + 3365 : F0; + 3366 : 15; + 3367 : C9; + 3368 : 60; + 3369 : F0; + 336A : 03; + 336B : 4C; + 336C : B1; + 336D : F3; + 336E : A5; + 336F : 3F; + 3370 : 18; + 3371 : 69; + 3372 : 03; + 3373 : 85; + 3374 : 31; + 3375 : A9; + 3376 : 00; + 3377 : 85; + 3378 : 30; + 3379 : 6C; + 337A : 30; + 337B : 00; + 337C : A9; + 337D : 60; + 337E : 85; + 337F : 20; + 3380 : AD; + 3381 : 00; + 3382 : 1C; + 3383 : 29; + 3384 : FC; + 3385 : 8D; + 3386 : 00; + 3387 : 1C; + 3388 : A9; + 3389 : A4; + 338A : 85; + 338B : 4A; + 338C : A9; + 338D : 01; + 338E : 85; + 338F : 22; + 3390 : 4C; + 3391 : 69; + 3392 : F9; + 3393 : A4; + 3394 : 3F; + 3395 : B9; + [3396..3397] : 00; + 3398 : 48; + [3399..339A] : 10; + 339B : 29; + 339C : 78; + 339D : 85; + 339E : 45; + 339F : 98; + 33A0 : 0A; + 33A1 : 69; + 33A2 : 06; + 33A3 : 85; + 33A4 : 32; + 33A5 : 98; + 33A6 : 18; + 33A7 : 69; + 33A8 : 03; + 33A9 : 85; + 33AA : 31; + 33AB : A0; + 33AC : 00; + 33AD : 84; + 33AE : 30; + 33AF : 68; + 33B0 : 60; + 33B1 : A2; + 33B2 : 5A; + 33B3 : 86; + 33B4 : 4B; + 33B5 : A2; + 33B6 : 00; + 33B7 : A9; + 33B8 : 52; + 33B9 : 85; + 33BA : 24; + 33BB : 20; + 33BC : 56; + 33BD : F5; + 33BE : 50; + 33BF : FE; + 33C0 : B8; + 33C1 : AD; + 33C2 : 01; + 33C3 : 1C; + 33C4 : C5; + 33C5 : 24; + 33C6 : D0; + 33C7 : 3F; + 33C8 : 50; + 33C9 : FE; + 33CA : B8; + 33CB : AD; + 33CC : 01; + 33CD : 1C; + 33CE : 95; + 33CF : 25; + 33D0 : E8; + 33D1 : E0; + 33D2 : 07; + 33D3 : D0; + 33D4 : F3; + 33D5 : 20; + 33D6 : 97; + 33D7 : F4; + 33D8 : A0; + 33D9 : 04; + 33DA : A9; + 33DB : 00; + 33DC : 59; + 33DD : 16; + 33DE : 00; + 33DF : 88; + 33E0 : 10; + 33E1 : FA; + 33E2 : C9; + 33E3 : 00; + 33E4 : D0; + 33E5 : 38; + 33E6 : A6; + 33E7 : 3E; + 33E8 : A5; + 33E9 : 18; + 33EA : 95; + 33EB : 22; + 33EC : A5; + 33ED : 45; + 33EE : C9; + 33EF : 30; + 33F0 : F0; + 33F1 : 1E; + 33F2 : A5; + 33F3 : 3E; + 33F4 : 0A; + 33F5 : A8; + 33F6 : B9; + 33F7 : 12; + 33F8 : 00; + 33F9 : C5; + 33FA : 16; + 33FB : D0; + 33FC : 1E; + 33FD : B9; + 33FE : 13; + 33FF : 00; + 3400 : C5; + 3401 : 17; + 3402 : D0; + 3403 : 17; + 3404 : 4C; + 3405 : 23; + 3406 : F4; + 3407 : C6; + 3408 : 4B; + 3409 : D0; + 340A : B0; + 340B : A9; + 340C : 02; + 340D : 20; + 340E : 69; + 340F : F9; + 3410 : A5; + 3411 : 16; + 3412 : 85; + 3413 : 12; + 3414 : A5; + 3415 : 17; + 3416 : 85; + 3417 : 13; + 3418 : A9; + 3419 : 01; + 341A : 2C; + 341B : A9; + 341C : 0B; + 341D : 2C; + 341E : A9; + 341F : 09; + 3420 : 4C; + 3421 : 69; + 3422 : F9; + 3423 : A9; + 3424 : 7F; + 3425 : 85; + 3426 : 4C; + 3427 : A5; + 3428 : 19; + 3429 : 18; + 342A : 69; + 342B : 02; + 342C : C5; + 342D : 43; + 342E : 90; + 342F : 02; + 3430 : E5; + 3431 : 43; + 3432 : 85; + 3433 : 4D; + 3434 : A2; + 3435 : 05; + 3436 : 86; + 3437 : 3F; + 3438 : A2; + 3439 : FF; + 343A : 20; + 343B : 93; + 343C : F3; + 343D : 10; + 343E : 44; + 343F : 85; + 3440 : 44; + 3441 : 29; + 3442 : 01; + 3443 : C5; + 3444 : 3E; + 3445 : D0; + 3446 : 3C; + 3447 : A0; + 3448 : 00; + 3449 : B1; + 344A : 32; + 344B : C5; + 344C : 40; + 344D : D0; + 344E : 34; + 344F : A5; + 3450 : 45; + 3451 : C9; + 3452 : 60; + 3453 : F0; + 3454 : 0C; + 3455 : A0; + 3456 : 01; + 3457 : 38; + 3458 : B1; + 3459 : 32; + 345A : E5; + 345B : 4D; + 345C : 10; + 345D : 03; + 345E : 18; + 345F : 65; + 3460 : 43; + 3461 : C5; + 3462 : 4C; + 3463 : B0; + 3464 : 1E; + 3465 : 48; + 3466 : A5; + 3467 : 45; + 3468 : F0; + 3469 : 14; + 346A : 68; + 346B : C9; + 346C : 09; + 346D : 90; + 346E : 14; + 346F : C9; + 3470 : 0C; + 3471 : B0; + 3472 : 10; + 3473 : 85; + 3474 : 4C; + 3475 : A5; + 3476 : 3F; + 3477 : AA; + 3478 : 69; + 3479 : 03; + 347A : 85; + 347B : 31; + 347C : D0; + 347D : 05; + 347E : 68; + 347F : C9; + 3480 : 06; + 3481 : 90; + 3482 : F0; + 3483 : C6; + 3484 : 3F; + 3485 : 10; + 3486 : B3; + 3487 : 8A; + 3488 : 10; + 3489 : 03; + 348A : 4C; + 348B : 9C; + 348C : F9; + 348D : 86; + 348E : 3F; + 348F : 20; + 3490 : 93; + 3491 : F3; + 3492 : A5; + 3493 : 45; + 3494 : 4C; + 3495 : CA; + 3496 : F4; + 3497 : A5; + 3498 : 30; + 3499 : 48; + 349A : A5; + 349B : 31; + 349C : 48; + 349D : A9; + 349E : 24; + 349F : 85; + 34A0 : 30; + 34A1 : A9; + 34A2 : 00; + 34A3 : 85; + 34A4 : 31; + 34A5 : A9; + 34A6 : 00; + 34A7 : 85; + 34A8 : 34; + 34A9 : 20; + 34AA : E6; + 34AB : F7; + 34AC : A5; + 34AD : 55; + 34AE : 85; + 34AF : 18; + 34B0 : A5; + 34B1 : 54; + 34B2 : 85; + 34B3 : 19; + 34B4 : A5; + 34B5 : 53; + 34B6 : 85; + 34B7 : 1A; + 34B8 : 20; + 34B9 : E6; + 34BA : F7; + 34BB : A5; + 34BC : 52; + 34BD : 85; + 34BE : 17; + 34BF : A5; + 34C0 : 53; + 34C1 : 85; + 34C2 : 16; + 34C3 : 68; + 34C4 : 85; + 34C5 : 31; + 34C6 : 68; + 34C7 : 85; + 34C8 : 30; + 34C9 : 60; + 34CA : C9; + 34CB : 00; + 34CC : F0; + 34CD : 03; + 34CE : 4C; + 34CF : 6E; + 34D0 : F5; + 34D1 : 20; + 34D2 : 0A; + 34D3 : F5; + 34D4 : 50; + 34D5 : FE; + 34D6 : B8; + 34D7 : AD; + 34D8 : 01; + 34D9 : 1C; + 34DA : 91; + 34DB : 30; + 34DC : C8; + 34DD : D0; + 34DE : F5; + 34DF : A0; + 34E0 : BA; + 34E1 : 50; + 34E2 : FE; + 34E3 : B8; + 34E4 : AD; + 34E5 : 01; + 34E6 : 1C; + 34E7 : 99; + 34E8 : 00; + 34E9 : 01; + 34EA : C8; + 34EB : D0; + 34EC : F4; + 34ED : 20; + 34EE : E0; + 34EF : F8; + 34F0 : A5; + 34F1 : 38; + 34F2 : C5; + 34F3 : 47; + 34F4 : F0; + 34F5 : 05; + 34F6 : A9; + 34F7 : 04; + 34F8 : 4C; + 34F9 : 69; + 34FA : F9; + 34FB : 20; + 34FC : E9; + 34FD : F5; + 34FE : C5; + 34FF : 3A; + 3500 : F0; + 3501 : 03; + 3502 : A9; + 3503 : 05; + 3504 : 2C; + 3505 : A9; + 3506 : 01; + 3507 : 4C; + 3508 : 69; + 3509 : F9; + 350A : 20; + 350B : 10; + 350C : F5; + 350D : 4C; + 350E : 56; + 350F : F5; + 3510 : A5; + 3511 : 3D; + 3512 : 0A; + 3513 : AA; + 3514 : B5; + 3515 : 12; + 3516 : 85; + 3517 : 16; + 3518 : B5; + 3519 : 13; + 351A : 85; + 351B : 17; + 351C : A0; + 351D : 00; + 351E : B1; + 351F : 32; + 3520 : 85; + 3521 : 18; + 3522 : C8; + 3523 : B1; + 3524 : 32; + 3525 : 85; + 3526 : 19; + 3527 : A9; + 3528 : 00; + 3529 : 45; + 352A : 16; + 352B : 45; + 352C : 17; + 352D : 45; + 352E : 18; + 352F : 45; + 3530 : 19; + 3531 : 85; + 3532 : 1A; + 3533 : 20; + 3534 : 34; + 3535 : F9; + 3536 : A2; + 3537 : 5A; + 3538 : 20; + 3539 : 56; + 353A : F5; + 353B : A0; + 353C : 00; + 353D : 50; + 353E : FE; + 353F : B8; + 3540 : AD; + 3541 : 01; + 3542 : 1C; + 3543 : D9; + 3544 : 24; + 3545 : 00; + 3546 : D0; + 3547 : 06; + 3548 : C8; + 3549 : C0; + 354A : 08; + 354B : D0; + 354C : F0; + 354D : 60; + 354E : CA; + 354F : D0; + 3550 : E7; + 3551 : A9; + 3552 : 02; + 3553 : 4C; + 3554 : 69; + 3555 : F9; + 3556 : A9; + 3557 : D0; + 3558 : 8D; + 3559 : 05; + 355A : 18; + 355B : A9; + 355C : 03; + 355D : 2C; + 355E : 05; + 355F : 18; + 3560 : 10; + 3561 : F1; + 3562 : 2C; + 3563 : 00; + 3564 : 1C; + 3565 : 30; + 3566 : F6; + 3567 : AD; + 3568 : 01; + 3569 : 1C; + 356A : B8; + 356B : A0; + 356C : 00; + 356D : 60; + 356E : C9; + 356F : 10; + 3570 : F0; + 3571 : 03; + 3572 : 4C; + 3573 : 91; + 3574 : F6; + 3575 : 20; + 3576 : E9; + 3577 : F5; + 3578 : 85; + 3579 : 3A; + 357A : AD; + 357B : 00; + 357C : 1C; + 357D : 29; + 357E : 10; + 357F : D0; + 3580 : 05; + 3581 : A9; + 3582 : 08; + 3583 : 4C; + 3584 : 69; + 3585 : F9; + 3586 : 20; + 3587 : 8F; + 3588 : F7; + 3589 : 20; + 358A : 10; + 358B : F5; + 358C : A2; + 358D : 09; + 358E : 50; + 358F : FE; + 3590 : B8; + 3591 : CA; + 3592 : D0; + 3593 : FA; + 3594 : A9; + 3595 : FF; + 3596 : 8D; + 3597 : 03; + 3598 : 1C; + 3599 : AD; + 359A : 0C; + 359B : 1C; + 359C : 29; + 359D : 1F; + 359E : 09; + 359F : C0; + 35A0 : 8D; + 35A1 : 0C; + 35A2 : 1C; + 35A3 : A9; + 35A4 : FF; + 35A5 : A2; + 35A6 : 05; + 35A7 : 8D; + 35A8 : 01; + 35A9 : 1C; + 35AA : B8; + 35AB : 50; + 35AC : FE; + 35AD : B8; + 35AE : CA; + 35AF : D0; + 35B0 : FA; + 35B1 : A0; + 35B2 : BB; + 35B3 : B9; + 35B4 : 00; + 35B5 : 01; + 35B6 : 50; + 35B7 : FE; + 35B8 : B8; + 35B9 : 8D; + 35BA : 01; + 35BB : 1C; + 35BC : C8; + 35BD : D0; + 35BE : F4; + 35BF : B1; + 35C0 : 30; + 35C1 : 50; + 35C2 : FE; + 35C3 : B8; + 35C4 : 8D; + 35C5 : 01; + 35C6 : 1C; + 35C7 : C8; + 35C8 : D0; + 35C9 : F5; + 35CA : 50; + 35CB : FE; + 35CC : AD; + 35CD : 0C; + 35CE : 1C; + 35CF : 09; + 35D0 : E0; + 35D1 : 8D; + 35D2 : 0C; + 35D3 : 1C; + 35D4 : A9; + 35D5 : 00; + 35D6 : 8D; + 35D7 : 03; + 35D8 : 1C; + 35D9 : 20; + 35DA : F2; + 35DB : F5; + 35DC : A4; + 35DD : 3F; + 35DE : B9; + [35DF..35E0] : 00; + 35E1 : 49; + 35E2 : 30; + 35E3 : 99; + [35E4..35E5] : 00; + 35E6 : 4C; + 35E7 : B1; + 35E8 : F3; + 35E9 : A9; + 35EA : 00; + 35EB : A8; + 35EC : 51; + 35ED : 30; + 35EE : C8; + 35EF : D0; + 35F0 : FB; + 35F1 : 60; + 35F2 : A9; + 35F3 : 00; + 35F4 : 85; + 35F5 : 2E; + 35F6 : 85; + 35F7 : 30; + 35F8 : 85; + 35F9 : 4F; + 35FA : A5; + 35FB : 31; + 35FC : 85; + 35FD : 4E; + 35FE : A9; + 35FF : 01; + 3600 : 85; + 3601 : 31; + 3602 : 85; + 3603 : 2F; + 3604 : A9; + 3605 : BB; + 3606 : 85; + 3607 : 34; + 3608 : 85; + 3609 : 36; + 360A : 20; + 360B : E6; + 360C : F7; + 360D : A5; + 360E : 52; + 360F : 85; + 3610 : 38; + 3611 : A4; + 3612 : 36; + 3613 : A5; + 3614 : 53; + 3615 : 91; + 3616 : 2E; + 3617 : C8; + 3618 : A5; + 3619 : 54; + 361A : 91; + 361B : 2E; + 361C : C8; + 361D : A5; + 361E : 55; + 361F : 91; + 3620 : 2E; + 3621 : C8; + 3622 : 84; + 3623 : 36; + 3624 : 20; + 3625 : E6; + 3626 : F7; + 3627 : A4; + 3628 : 36; + 3629 : A5; + 362A : 52; + 362B : 91; + 362C : 2E; + 362D : C8; + 362E : A5; + 362F : 53; + 3630 : 91; + 3631 : 2E; + 3632 : C8; + 3633 : F0; + 3634 : 0E; + 3635 : A5; + 3636 : 54; + 3637 : 91; + 3638 : 2E; + 3639 : C8; + 363A : A5; + 363B : 55; + 363C : 91; + 363D : 2E; + 363E : C8; + 363F : 84; + 3640 : 36; + 3641 : D0; + 3642 : E1; + 3643 : A5; + 3644 : 54; + 3645 : 91; + 3646 : 30; + 3647 : C8; + 3648 : A5; + 3649 : 55; + 364A : 91; + 364B : 30; + 364C : C8; + 364D : 84; + 364E : 36; + 364F : 20; + 3650 : E6; + 3651 : F7; + 3652 : A4; + 3653 : 36; + 3654 : A5; + 3655 : 52; + 3656 : 91; + 3657 : 30; + 3658 : C8; + 3659 : A5; + 365A : 53; + 365B : 91; + 365C : 30; + 365D : C8; + 365E : A5; + 365F : 54; + 3660 : 91; + 3661 : 30; + 3662 : C8; + 3663 : A5; + 3664 : 55; + 3665 : 91; + 3666 : 30; + 3667 : C8; + 3668 : 84; + 3669 : 36; + 366A : C0; + 366B : BB; + 366C : 90; + 366D : E1; + 366E : A9; + 366F : 45; + 3670 : 85; + 3671 : 2E; + 3672 : A5; + 3673 : 31; + 3674 : 85; + 3675 : 2F; + 3676 : A0; + 3677 : BA; + 3678 : B1; + 3679 : 30; + 367A : 91; + 367B : 2E; + 367C : 88; + 367D : D0; + 367E : F9; + 367F : B1; + 3680 : 30; + 3681 : 91; + 3682 : 2E; + 3683 : A2; + 3684 : BB; + 3685 : BD; + 3686 : 00; + 3687 : 01; + 3688 : 91; + 3689 : 30; + 368A : C8; + 368B : E8; + 368C : D0; + 368D : F7; + 368E : 86; + 368F : 50; + 3690 : 60; + 3691 : C9; + 3692 : 20; + 3693 : F0; + 3694 : 03; + 3695 : 4C; + 3696 : CA; + 3697 : F6; + 3698 : 20; + 3699 : E9; + 369A : F5; + 369B : 85; + 369C : 3A; + 369D : 20; + 369E : 8F; + 369F : F7; + 36A0 : 20; + 36A1 : 0A; + 36A2 : F5; + 36A3 : A0; + 36A4 : BB; + 36A5 : B9; + 36A6 : 00; + 36A7 : 01; + 36A8 : 50; + 36A9 : FE; + 36AA : B8; + 36AB : 4D; + 36AC : 01; + 36AD : 1C; + 36AE : D0; + 36AF : 15; + 36B0 : C8; + 36B1 : D0; + 36B2 : F2; + 36B3 : B1; + 36B4 : 30; + 36B5 : 50; + 36B6 : FE; + 36B7 : B8; + 36B8 : 4D; + 36B9 : 01; + 36BA : 1C; + 36BB : D0; + 36BC : 08; + 36BD : C8; + 36BE : C0; + 36BF : FD; + 36C0 : D0; + 36C1 : F1; + 36C2 : 4C; + 36C3 : 18; + 36C4 : F4; + 36C5 : A9; + 36C6 : 07; + 36C7 : 4C; + 36C8 : 69; + 36C9 : F9; + 36CA : 20; + 36CB : 10; + 36CC : F5; + 36CD : 4C; + 36CE : 18; + 36CF : F4; + 36D0 : A9; + 36D1 : 00; + 36D2 : 85; + 36D3 : 57; + 36D4 : 85; + 36D5 : 5A; + 36D6 : A4; + 36D7 : 34; + 36D8 : A5; + 36D9 : 52; + 36DA : 29; + 36DB : F0; + [36DC..36DF] : 4A; + 36E0 : AA; + 36E1 : BD; + 36E2 : 7F; + 36E3 : F7; + [36E4..36E6] : 0A; + 36E7 : 85; + 36E8 : 56; + 36E9 : A5; + 36EA : 52; + 36EB : 29; + 36EC : 0F; + 36ED : AA; + 36EE : BD; + 36EF : 7F; + 36F0 : F7; + 36F1 : 6A; + 36F2 : 66; + 36F3 : 57; + 36F4 : 6A; + 36F5 : 66; + 36F6 : 57; + 36F7 : 29; + 36F8 : 07; + 36F9 : 05; + 36FA : 56; + 36FB : 91; + 36FC : 30; + 36FD : C8; + 36FE : A5; + 36FF : 53; + 3700 : 29; + 3701 : F0; + [3702..3705] : 4A; + 3706 : AA; + 3707 : BD; + 3708 : 7F; + 3709 : F7; + 370A : 0A; + 370B : 05; + 370C : 57; + 370D : 85; + 370E : 57; + 370F : A5; + 3710 : 53; + 3711 : 29; + 3712 : 0F; + 3713 : AA; + 3714 : BD; + 3715 : 7F; + 3716 : F7; + [3717..371A] : 2A; + 371B : 85; + 371C : 58; + 371D : 2A; + 371E : 29; + 371F : 01; + 3720 : 05; + 3721 : 57; + 3722 : 91; + 3723 : 30; + 3724 : C8; + 3725 : A5; + 3726 : 54; + 3727 : 29; + 3728 : F0; + [3729..372C] : 4A; + 372D : AA; + 372E : BD; + 372F : 7F; + 3730 : F7; + 3731 : 18; + 3732 : 6A; + 3733 : 05; + 3734 : 58; + 3735 : 91; + 3736 : 30; + 3737 : C8; + 3738 : 6A; + 3739 : 29; + 373A : 80; + 373B : 85; + 373C : 59; + 373D : A5; + 373E : 54; + 373F : 29; + 3740 : 0F; + 3741 : AA; + 3742 : BD; + 3743 : 7F; + 3744 : F7; + [3745..3746] : 0A; + 3747 : 29; + 3748 : 7C; + 3749 : 05; + 374A : 59; + 374B : 85; + 374C : 59; + 374D : A5; + 374E : 55; + 374F : 29; + 3750 : F0; + [3751..3754] : 4A; + 3755 : AA; + 3756 : BD; + 3757 : 7F; + 3758 : F7; + 3759 : 6A; + 375A : 66; + 375B : 5A; + 375C : 6A; + 375D : 66; + 375E : 5A; + 375F : 6A; + 3760 : 66; + 3761 : 5A; + 3762 : 29; + 3763 : 03; + 3764 : 05; + 3765 : 59; + 3766 : 91; + 3767 : 30; + 3768 : C8; + 3769 : D0; + 376A : 04; + 376B : A5; + 376C : 2F; + 376D : 85; + 376E : 31; + 376F : A5; + 3770 : 55; + 3771 : 29; + 3772 : 0F; + 3773 : AA; + 3774 : BD; + 3775 : 7F; + 3776 : F7; + 3777 : 05; + 3778 : 5A; + 3779 : 91; + 377A : 30; + 377B : C8; + 377C : 84; + 377D : 34; + 377E : 60; + 377F : 0A; + 3780 : 0B; + 3781 : 12; + 3782 : 13; + 3783 : 0E; + 3784 : 0F; + 3785 : 16; + 3786 : 17; + 3787 : 09; + 3788 : 19; + 3789 : 1A; + 378A : 1B; + 378B : 0D; + 378C : 1D; + 378D : 1E; + 378E : 15; + 378F : A9; + 3790 : 00; + 3791 : 85; + 3792 : 30; + 3793 : 85; + 3794 : 2E; + 3795 : 85; + 3796 : 36; + 3797 : A9; + 3798 : BB; + 3799 : 85; + 379A : 34; + 379B : 85; + 379C : 50; + 379D : A5; + 379E : 31; + 379F : 85; + 37A0 : 2F; + 37A1 : A9; + 37A2 : 01; + 37A3 : 85; + 37A4 : 31; + 37A5 : A5; + 37A6 : 47; + 37A7 : 85; + 37A8 : 52; + 37A9 : A4; + 37AA : 36; + 37AB : B1; + 37AC : 2E; + 37AD : 85; + 37AE : 53; + 37AF : C8; + 37B0 : B1; + 37B1 : 2E; + 37B2 : 85; + 37B3 : 54; + 37B4 : C8; + 37B5 : B1; + 37B6 : 2E; + 37B7 : 85; + 37B8 : 55; + 37B9 : C8; + 37BA : 84; + 37BB : 36; + 37BC : 20; + 37BD : D0; + 37BE : F6; + 37BF : A4; + 37C0 : 36; + 37C1 : B1; + 37C2 : 2E; + 37C3 : 85; + 37C4 : 52; + 37C5 : C8; + 37C6 : F0; + 37C7 : 11; + 37C8 : B1; + 37C9 : 2E; + 37CA : 85; + 37CB : 53; + 37CC : C8; + 37CD : B1; + 37CE : 2E; + 37CF : 85; + 37D0 : 54; + 37D1 : C8; + 37D2 : B1; + 37D3 : 2E; + 37D4 : 85; + 37D5 : 55; + 37D6 : C8; + 37D7 : D0; + 37D8 : E1; + 37D9 : A5; + 37DA : 3A; + 37DB : 85; + 37DC : 53; + 37DD : A9; + 37DE : 00; + 37DF : 85; + 37E0 : 54; + 37E1 : 85; + 37E2 : 55; + 37E3 : 4C; + 37E4 : D0; + 37E5 : F6; + 37E6 : A4; + 37E7 : 34; + 37E8 : B1; + 37E9 : 30; + 37EA : 29; + 37EB : F8; + [37EC..37EE] : 4A; + 37EF : 85; + 37F0 : 56; + 37F1 : B1; + 37F2 : 30; + 37F3 : 29; + 37F4 : 07; + [37F5..37F6] : 0A; + 37F7 : 85; + 37F8 : 57; + 37F9 : C8; + 37FA : D0; + 37FB : 06; + 37FC : A5; + 37FD : 4E; + 37FE : 85; + 37FF : 31; + 3800 : A4; + 3801 : 4F; + 3802 : B1; + 3803 : 30; + 3804 : 29; + 3805 : C0; + [3806..3808] : 2A; + 3809 : 05; + 380A : 57; + 380B : 85; + 380C : 57; + 380D : B1; + 380E : 30; + 380F : 29; + 3810 : 3E; + 3811 : 4A; + 3812 : 85; + 3813 : 58; + 3814 : B1; + 3815 : 30; + 3816 : 29; + 3817 : 01; + [3818..381B] : 0A; + 381C : 85; + 381D : 59; + 381E : C8; + 381F : B1; + 3820 : 30; + 3821 : 29; + 3822 : F0; + [3823..3826] : 4A; + 3827 : 05; + 3828 : 59; + 3829 : 85; + 382A : 59; + 382B : B1; + 382C : 30; + 382D : 29; + 382E : 0F; + 382F : 0A; + 3830 : 85; + 3831 : 5A; + 3832 : C8; + 3833 : B1; + 3834 : 30; + 3835 : 29; + 3836 : 80; + 3837 : 18; + [3838..3839] : 2A; + 383A : 29; + 383B : 01; + 383C : 05; + 383D : 5A; + 383E : 85; + 383F : 5A; + 3840 : B1; + 3841 : 30; + 3842 : 29; + 3843 : 7C; + [3844..3845] : 4A; + 3846 : 85; + 3847 : 5B; + 3848 : B1; + 3849 : 30; + 384A : 29; + 384B : 03; + [384C..384E] : 0A; + 384F : 85; + 3850 : 5C; + 3851 : C8; + 3852 : D0; + 3853 : 06; + 3854 : A5; + 3855 : 4E; + 3856 : 85; + 3857 : 31; + 3858 : A4; + 3859 : 4F; + 385A : B1; + 385B : 30; + 385C : 29; + 385D : E0; + [385E..3861] : 2A; + 3862 : 05; + 3863 : 5C; + 3864 : 85; + 3865 : 5C; + 3866 : B1; + 3867 : 30; + 3868 : 29; + 3869 : 1F; + 386A : 85; + 386B : 5D; + 386C : C8; + 386D : 84; + 386E : 34; + 386F : A6; + 3870 : 56; + 3871 : BD; + 3872 : A0; + 3873 : F8; + 3874 : A6; + 3875 : 57; + 3876 : 1D; + 3877 : C0; + 3878 : F8; + 3879 : 85; + 387A : 52; + 387B : A6; + 387C : 58; + 387D : BD; + 387E : A0; + 387F : F8; + 3880 : A6; + 3881 : 59; + 3882 : 1D; + 3883 : C0; + 3884 : F8; + 3885 : 85; + 3886 : 53; + 3887 : A6; + 3888 : 5A; + 3889 : BD; + 388A : A0; + 388B : F8; + 388C : A6; + 388D : 5B; + 388E : 1D; + 388F : C0; + 3890 : F8; + 3891 : 85; + 3892 : 54; + 3893 : A6; + 3894 : 5C; + 3895 : BD; + 3896 : A0; + 3897 : F8; + 3898 : A6; + 3899 : 5D; + 389A : 1D; + 389B : C0; + 389C : F8; + 389D : 85; + 389E : 55; + 389F : 60; + [38A0..38A8] : FF; + 38A9 : 80; + 38AA : 00; + 38AB : 10; + 38AC : FF; + 38AD : C0; + 38AE : 40; + 38AF : 50; + [38B0..38B1] : FF; + 38B2 : 20; + 38B3 : 30; + 38B4 : FF; + 38B5 : F0; + 38B6 : 60; + 38B7 : 70; + 38B8 : FF; + 38B9 : 90; + 38BA : A0; + 38BB : B0; + 38BC : FF; + 38BD : D0; + 38BE : E0; + [38BF..38C8] : FF; + 38C9 : 08; + 38CA : 00; + 38CB : 01; + 38CC : FF; + 38CD : 0C; + 38CE : 04; + 38CF : 05; + [38D0..38D1] : FF; + 38D2 : 02; + 38D3 : 03; + 38D4 : FF; + 38D5 : 0F; + 38D6 : 06; + 38D7 : 07; + 38D8 : FF; + 38D9 : 09; + 38DA : 0A; + 38DB : 0B; + 38DC : FF; + 38DD : 0D; + 38DE : 0E; + 38DF : FF; + 38E0 : A9; + 38E1 : 00; + 38E2 : 85; + 38E3 : 34; + 38E4 : 85; + 38E5 : 2E; + 38E6 : 85; + 38E7 : 36; + 38E8 : A9; + 38E9 : 01; + 38EA : 85; + 38EB : 4E; + 38EC : A9; + 38ED : BA; + 38EE : 85; + 38EF : 4F; + 38F0 : A5; + 38F1 : 31; + 38F2 : 85; + 38F3 : 2F; + 38F4 : 20; + 38F5 : E6; + 38F6 : F7; + 38F7 : A5; + 38F8 : 52; + 38F9 : 85; + 38FA : 38; + 38FB : A4; + 38FC : 36; + 38FD : A5; + 38FE : 53; + 38FF : 91; + 3900 : 2E; + 3901 : C8; + 3902 : A5; + 3903 : 54; + 3904 : 91; + 3905 : 2E; + 3906 : C8; + 3907 : A5; + 3908 : 55; + 3909 : 91; + 390A : 2E; + 390B : C8; + 390C : 84; + 390D : 36; + 390E : 20; + 390F : E6; + 3910 : F7; + 3911 : A4; + 3912 : 36; + 3913 : A5; + 3914 : 52; + 3915 : 91; + 3916 : 2E; + 3917 : C8; + 3918 : F0; + 3919 : 11; + 391A : A5; + 391B : 53; + 391C : 91; + 391D : 2E; + 391E : C8; + 391F : A5; + 3920 : 54; + 3921 : 91; + 3922 : 2E; + 3923 : C8; + 3924 : A5; + 3925 : 55; + 3926 : 91; + 3927 : 2E; + 3928 : C8; + 3929 : D0; + 392A : E1; + 392B : A5; + 392C : 53; + 392D : 85; + 392E : 3A; + 392F : A5; + 3930 : 2F; + 3931 : 85; + 3932 : 31; + 3933 : 60; + 3934 : A5; + 3935 : 31; + 3936 : 85; + 3937 : 2F; + 3938 : A9; + 3939 : 00; + 393A : 85; + 393B : 31; + 393C : A9; + 393D : 24; + 393E : 85; + 393F : 34; + 3940 : A5; + 3941 : 39; + 3942 : 85; + 3943 : 52; + 3944 : A5; + 3945 : 1A; + 3946 : 85; + 3947 : 53; + 3948 : A5; + 3949 : 19; + 394A : 85; + 394B : 54; + 394C : A5; + 394D : 18; + 394E : 85; + 394F : 55; + 3950 : 20; + 3951 : D0; + 3952 : F6; + 3953 : A5; + 3954 : 17; + 3955 : 85; + 3956 : 52; + 3957 : A5; + 3958 : 16; + 3959 : 85; + 395A : 53; + 395B : A9; + 395C : 00; + 395D : 85; + 395E : 54; + 395F : 85; + 3960 : 55; + 3961 : 20; + 3962 : D0; + 3963 : F6; + 3964 : A5; + 3965 : 2F; + 3966 : 85; + 3967 : 31; + 3968 : 60; + 3969 : A4; + 396A : 3F; + 396B : 99; + [396C..396D] : 00; + 396E : A5; + 396F : 50; + 3970 : F0; + 3971 : 03; + 3972 : 20; + 3973 : F2; + 3974 : F5; + 3975 : 20; + 3976 : 8F; + 3977 : F9; + 3978 : A6; + 3979 : 49; + 397A : 9A; + 397B : 4C; + 397C : BE; + 397D : F2; + 397E : A9; + 397F : A0; + 3980 : 85; + 3981 : 20; + 3982 : AD; + 3983 : 00; + 3984 : 1C; + 3985 : 09; + 3986 : 04; + 3987 : 8D; + 3988 : 00; + 3989 : 1C; + 398A : A9; + 398B : 3C; + 398C : 85; + 398D : 48; + 398E : 60; + 398F : A6; + 3990 : 3E; + 3991 : A5; + 3992 : 20; + 3993 : 09; + 3994 : 10; + 3995 : 85; + 3996 : 20; + 3997 : A9; + 3998 : FF; + 3999 : 85; + 399A : 48; + 399B : 60; + 399C : AD; + 399D : 07; + 399E : 1C; + 399F : 8D; + 39A0 : 05; + 39A1 : 1C; + 39A2 : AD; + 39A3 : 00; + 39A4 : 1C; + 39A5 : 29; + 39A6 : 10; + 39A7 : C5; + 39A8 : 1E; + 39A9 : 85; + 39AA : 1E; + 39AB : F0; + 39AC : 04; + 39AD : A9; + 39AE : 01; + 39AF : 85; + 39B0 : 1C; + 39B1 : AD; + 39B2 : FE; + 39B3 : 02; + 39B4 : F0; + 39B5 : 15; + 39B6 : C9; + 39B7 : 02; + 39B8 : D0; + 39B9 : 07; + 39BA : A9; + 39BB : 00; + 39BC : 8D; + 39BD : FE; + 39BE : 02; + 39BF : F0; + 39C0 : 0A; + 39C1 : 85; + 39C2 : 4A; + 39C3 : A9; + 39C4 : 02; + 39C5 : 8D; + 39C6 : FE; + 39C7 : 02; + 39C8 : 4C; + 39C9 : 2E; + 39CA : FA; + 39CB : A6; + 39CC : 3E; + 39CD : 30; + 39CE : 07; + 39CF : A5; + 39D0 : 20; + 39D1 : A8; + 39D2 : C9; + 39D3 : 20; + 39D4 : D0; + 39D5 : 03; + 39D6 : 4C; + 39D7 : BE; + 39D8 : FA; + 39D9 : C6; + 39DA : 48; + 39DB : D0; + 39DC : 1D; + 39DD : 98; + 39DE : 10; + 39DF : 04; + 39E0 : 29; + 39E1 : 7F; + 39E2 : 85; + 39E3 : 20; + 39E4 : 29; + 39E5 : 10; + 39E6 : F0; + 39E7 : 12; + 39E8 : AD; + 39E9 : 00; + 39EA : 1C; + 39EB : 29; + 39EC : FB; + 39ED : 8D; + 39EE : 00; + 39EF : 1C; + 39F0 : A9; + 39F1 : FF; + 39F2 : 85; + 39F3 : 3E; + 39F4 : A9; + 39F5 : 00; + 39F6 : 85; + 39F7 : 20; + 39F8 : F0; + 39F9 : DC; + 39FA : 98; + 39FB : 29; + 39FC : 40; + 39FD : D0; + 39FE : 03; + 39FF : 4C; + 3A00 : BE; + 3A01 : FA; + 3A02 : 6C; + 3A03 : 62; + 3A04 : 00; + 3A05 : A5; + 3A06 : 4A; + 3A07 : 10; + 3A08 : 05; + 3A09 : 49; + 3A0A : FF; + 3A0B : 18; + 3A0C : 69; + 3A0D : 01; + 3A0E : C5; + 3A0F : 64; + 3A10 : B0; + 3A11 : 0A; + 3A12 : A9; + 3A13 : 3B; + 3A14 : 85; + 3A15 : 62; + 3A16 : A9; + 3A17 : FA; + 3A18 : 85; + 3A19 : 63; + 3A1A : D0; + 3A1B : 12; + 3A1C : E5; + 3A1D : 5E; + 3A1E : E5; + 3A1F : 5E; + 3A20 : 85; + 3A21 : 61; + 3A22 : A5; + 3A23 : 5E; + 3A24 : 85; + 3A25 : 60; + 3A26 : A9; + 3A27 : 7B; + 3A28 : 85; + 3A29 : 62; + 3A2A : A9; + 3A2B : FA; + 3A2C : 85; + 3A2D : 63; + 3A2E : A5; + 3A2F : 4A; + 3A30 : 10; + 3A31 : 31; + 3A32 : E6; + 3A33 : 4A; + 3A34 : AE; + 3A35 : 00; + 3A36 : 1C; + 3A37 : CA; + 3A38 : 4C; + 3A39 : 69; + 3A3A : FA; + 3A3B : A5; + 3A3C : 4A; + 3A3D : D0; + 3A3E : EF; + 3A3F : A9; + 3A40 : 4E; + 3A41 : 85; + 3A42 : 62; + 3A43 : A9; + 3A44 : FA; + 3A45 : 85; + 3A46 : 63; + 3A47 : A9; + 3A48 : 05; + 3A49 : 85; + 3A4A : 60; + 3A4B : 4C; + 3A4C : BE; + 3A4D : FA; + 3A4E : C6; + 3A4F : 60; + 3A50 : D0; + 3A51 : 6C; + 3A52 : A5; + 3A53 : 20; + 3A54 : 29; + 3A55 : BF; + 3A56 : 85; + 3A57 : 20; + 3A58 : A9; + 3A59 : 05; + 3A5A : 85; + 3A5B : 62; + 3A5C : A9; + 3A5D : FA; + 3A5E : 85; + 3A5F : 63; + 3A60 : 4C; + 3A61 : BE; + 3A62 : FA; + 3A63 : C6; + 3A64 : 4A; + 3A65 : AE; + 3A66 : 00; + 3A67 : 1C; + 3A68 : E8; + 3A69 : 8A; + 3A6A : 29; + 3A6B : 03; + 3A6C : 85; + 3A6D : 4B; + 3A6E : AD; + 3A6F : 00; + 3A70 : 1C; + 3A71 : 29; + 3A72 : FC; + 3A73 : 05; + 3A74 : 4B; + 3A75 : 8D; + 3A76 : 00; + 3A77 : 1C; + 3A78 : 4C; + 3A79 : BE; + 3A7A : FA; + 3A7B : 38; + 3A7C : AD; + 3A7D : 07; + 3A7E : 1C; + 3A7F : E5; + 3A80 : 5F; + 3A81 : 8D; + 3A82 : 05; + 3A83 : 1C; + 3A84 : C6; + 3A85 : 60; + 3A86 : D0; + 3A87 : 0C; + 3A88 : A5; + 3A89 : 5E; + 3A8A : 85; + 3A8B : 60; + 3A8C : A9; + 3A8D : 97; + 3A8E : 85; + 3A8F : 62; + 3A90 : A9; + 3A91 : FA; + 3A92 : 85; + 3A93 : 63; + 3A94 : 4C; + 3A95 : 2E; + 3A96 : FA; + 3A97 : C6; + 3A98 : 61; + 3A99 : D0; + 3A9A : F9; + 3A9B : A9; + 3A9C : A5; + 3A9D : 85; + 3A9E : 62; + 3A9F : A9; + 3AA0 : FA; + 3AA1 : 85; + 3AA2 : 63; + 3AA3 : D0; + 3AA4 : EF; + 3AA5 : AD; + 3AA6 : 07; + 3AA7 : 1C; + 3AA8 : 18; + 3AA9 : 65; + 3AAA : 5F; + 3AAB : 8D; + 3AAC : 05; + 3AAD : 1C; + 3AAE : C6; + 3AAF : 60; + 3AB0 : D0; + 3AB1 : E2; + 3AB2 : A9; + 3AB3 : 4E; + 3AB4 : 85; + 3AB5 : 62; + 3AB6 : A9; + 3AB7 : FA; + 3AB8 : 85; + 3AB9 : 63; + 3ABA : A9; + 3ABB : 05; + 3ABC : 85; + 3ABD : 60; + 3ABE : AD; + 3ABF : 0C; + 3AC0 : 1C; + 3AC1 : 29; + 3AC2 : FD; + 3AC3 : 8D; + 3AC4 : 0C; + 3AC5 : 1C; + 3AC6 : 60; + 3AC7 : A5; + 3AC8 : 51; + 3AC9 : 10; + 3ACA : 2A; + 3ACB : A6; + 3ACC : 3D; + 3ACD : A9; + 3ACE : 60; + 3ACF : 95; + 3AD0 : 20; + 3AD1 : A9; + 3AD2 : 01; + 3AD3 : 95; + 3AD4 : 22; + 3AD5 : 85; + 3AD6 : 51; + 3AD7 : A9; + 3AD8 : A4; + 3AD9 : 85; + 3ADA : 4A; + 3ADB : AD; + 3ADC : 00; + 3ADD : 1C; + 3ADE : 29; + 3ADF : FC; + 3AE0 : 8D; + 3AE1 : 00; + 3AE2 : 1C; + 3AE3 : A9; + 3AE4 : 0A; + 3AE5 : 8D; + 3AE6 : 20; + 3AE7 : 06; + 3AE8 : A9; + 3AE9 : A0; + 3AEA : 8D; + 3AEB : 21; + 3AEC : 06; + 3AED : A9; + 3AEE : 0F; + 3AEF : 8D; + 3AF0 : 22; + 3AF1 : 06; + 3AF2 : 4C; + 3AF3 : 9C; + 3AF4 : F9; + 3AF5 : A0; + 3AF6 : 00; + 3AF7 : D1; + 3AF8 : 32; + 3AF9 : F0; + 3AFA : 05; + 3AFB : 91; + 3AFC : 32; + 3AFD : 4C; + 3AFE : 9C; + 3AFF : F9; + 3B00 : AD; + 3B01 : 00; + 3B02 : 1C; + 3B03 : 29; + 3B04 : 10; + 3B05 : D0; + 3B06 : 05; + 3B07 : A9; + 3B08 : 08; + 3B09 : 4C; + 3B0A : D3; + 3B0B : FD; + 3B0C : 20; + 3B0D : A3; + 3B0E : FD; + 3B0F : 20; + 3B10 : C3; + 3B11 : FD; + 3B12 : A9; + 3B13 : 55; + 3B14 : 8D; + 3B15 : 01; + 3B16 : 1C; + 3B17 : 20; + 3B18 : C3; + 3B19 : FD; + 3B1A : 20; + 3B1B : 00; + 3B1C : FE; + 3B1D : 20; + 3B1E : 56; + 3B1F : F5; + 3B20 : A9; + 3B21 : 40; + 3B22 : 0D; + 3B23 : 0B; + 3B24 : 18; + 3B25 : 8D; + 3B26 : 0B; + 3B27 : 18; + 3B28 : A9; + 3B29 : 62; + 3B2A : 8D; + 3B2B : 06; + 3B2C : 18; + 3B2D : A9; + 3B2E : 00; + 3B2F : 8D; + 3B30 : 07; + 3B31 : 18; + 3B32 : 8D; + 3B33 : 05; + 3B34 : 18; + 3B35 : A0; + 3B36 : 00; + 3B37 : A2; + 3B38 : 00; + 3B39 : 2C; + 3B3A : 00; + 3B3B : 1C; + 3B3C : 30; + 3B3D : FB; + 3B3E : 2C; + 3B3F : 00; + 3B40 : 1C; + 3B41 : 10; + 3B42 : FB; + 3B43 : AD; + 3B44 : 04; + 3B45 : 18; + 3B46 : 2C; + 3B47 : 00; + 3B48 : 1C; + 3B49 : 10; + 3B4A : 11; + 3B4B : AD; + 3B4C : 0D; + 3B4D : 18; + 3B4E : 0A; + 3B4F : 10; + 3B50 : F5; + 3B51 : E8; + 3B52 : D0; + 3B53 : EF; + 3B54 : C8; + 3B55 : D0; + 3B56 : EC; + 3B57 : A9; + 3B58 : 02; + 3B59 : 4C; + 3B5A : D3; + 3B5B : FD; + 3B5C : 86; + 3B5D : 71; + 3B5E : 84; + 3B5F : 72; + 3B60 : A2; + 3B61 : 00; + 3B62 : A0; + 3B63 : 00; + 3B64 : AD; + 3B65 : 04; + 3B66 : 18; + 3B67 : 2C; + 3B68 : 00; + 3B69 : 1C; + 3B6A : 30; + 3B6B : 11; + 3B6C : AD; + 3B6D : 0D; + 3B6E : 18; + 3B6F : 0A; + 3B70 : 10; + 3B71 : F5; + 3B72 : E8; + 3B73 : D0; + 3B74 : EF; + 3B75 : C8; + 3B76 : D0; + 3B77 : EC; + 3B78 : A9; + 3B79 : 02; + 3B7A : 4C; + 3B7B : D3; + 3B7C : FD; + 3B7D : 38; + 3B7E : 8A; + 3B7F : E5; + 3B80 : 71; + 3B81 : AA; + 3B82 : 85; + 3B83 : 70; + 3B84 : 98; + 3B85 : E5; + 3B86 : 72; + 3B87 : A8; + 3B88 : 85; + 3B89 : 71; + 3B8A : 10; + 3B8B : 0B; + 3B8C : 49; + 3B8D : FF; + 3B8E : A8; + 3B8F : 8A; + 3B90 : 49; + 3B91 : FF; + 3B92 : AA; + 3B93 : E8; + 3B94 : D0; + 3B95 : 01; + 3B96 : C8; + 3B97 : 98; + 3B98 : D0; + 3B99 : 04; + 3B9A : E0; + 3B9B : 04; + 3B9C : 90; + 3B9D : 18; + 3B9E : 06; + 3B9F : 70; + 3BA0 : 26; + 3BA1 : 71; + 3BA2 : 18; + 3BA3 : A5; + 3BA4 : 70; + 3BA5 : 6D; + 3BA6 : 21; + 3BA7 : 06; + 3BA8 : 8D; + 3BA9 : 21; + 3BAA : 06; + 3BAB : A5; + 3BAC : 71; + 3BAD : 6D; + 3BAE : 22; + 3BAF : 06; + 3BB0 : 8D; + 3BB1 : 22; + 3BB2 : 06; + 3BB3 : 4C; + 3BB4 : 0C; + 3BB5 : FB; + 3BB6 : A2; + 3BB7 : 00; + 3BB8 : A0; + 3BB9 : 00; + 3BBA : B8; + 3BBB : AD; + 3BBC : 00; + 3BBD : 1C; + 3BBE : 10; + 3BBF : 0E; + 3BC0 : 50; + 3BC1 : F9; + 3BC2 : B8; + 3BC3 : E8; + 3BC4 : D0; + 3BC5 : F5; + 3BC6 : C8; + 3BC7 : D0; + 3BC8 : F2; + 3BC9 : A9; + 3BCA : 03; + 3BCB : 4C; + 3BCC : D3; + 3BCD : FD; + 3BCE : 8A; + 3BCF : 0A; + 3BD0 : 8D; + 3BD1 : 25; + 3BD2 : 06; + 3BD3 : 98; + 3BD4 : 2A; + 3BD5 : 8D; + 3BD6 : 24; + 3BD7 : 06; + 3BD8 : A9; + 3BD9 : BF; + 3BDA : 2D; + 3BDB : 0B; + 3BDC : 18; + 3BDD : 8D; + 3BDE : 0B; + 3BDF : 18; + 3BE0 : A9; + 3BE1 : 66; + 3BE2 : 8D; + 3BE3 : 26; + 3BE4 : 06; + 3BE5 : A6; + 3BE6 : 43; + 3BE7 : A0; + 3BE8 : 00; + 3BE9 : 98; + 3BEA : 18; + 3BEB : 6D; + 3BEC : 26; + 3BED : 06; + 3BEE : 90; + 3BEF : 01; + [3BF0..3BF1] : C8; + 3BF2 : CA; + 3BF3 : D0; + 3BF4 : F5; + 3BF5 : 49; + 3BF6 : FF; + 3BF7 : 38; + 3BF8 : 69; + 3BF9 : 00; + 3BFA : 18; + 3BFB : 6D; + 3BFC : 25; + 3BFD : 06; + 3BFE : B0; + 3BFF : 03; + 3C00 : CE; + 3C01 : 24; + 3C02 : 06; + 3C03 : AA; + 3C04 : 98; + 3C05 : 49; + 3C06 : FF; + 3C07 : 38; + 3C08 : 69; + 3C09 : 00; + 3C0A : 18; + 3C0B : 6D; + 3C0C : 24; + 3C0D : 06; + 3C0E : 10; + 3C0F : 05; + 3C10 : A9; + 3C11 : 04; + 3C12 : 4C; + 3C13 : D3; + 3C14 : FD; + 3C15 : A8; + 3C16 : 8A; + 3C17 : A2; + 3C18 : 00; + 3C19 : 38; + 3C1A : E5; + 3C1B : 43; + 3C1C : B0; + 3C1D : 03; + 3C1E : 88; + 3C1F : 30; + 3C20 : 03; + 3C21 : E8; + 3C22 : D0; + 3C23 : F5; + 3C24 : 8E; + 3C25 : 26; + 3C26 : 06; + 3C27 : E0; + 3C28 : 04; + 3C29 : B0; + 3C2A : 05; + 3C2B : A9; + 3C2C : 05; + 3C2D : 4C; + 3C2E : D3; + 3C2F : FD; + 3C30 : 18; + 3C31 : 65; + 3C32 : 43; + 3C33 : 8D; + 3C34 : 27; + 3C35 : 06; + 3C36 : A9; + 3C37 : 00; + 3C38 : 8D; + 3C39 : 28; + 3C3A : 06; + 3C3B : A0; + 3C3C : 00; + 3C3D : A6; + 3C3E : 3D; + 3C3F : A5; + 3C40 : 39; + 3C41 : 99; + 3C42 : 00; + 3C43 : 03; + [3C44..3C45] : C8; + 3C46 : AD; + 3C47 : 28; + 3C48 : 06; + 3C49 : 99; + 3C4A : 00; + 3C4B : 03; + 3C4C : C8; + 3C4D : A5; + 3C4E : 51; + 3C4F : 99; + 3C50 : 00; + 3C51 : 03; + 3C52 : C8; + 3C53 : B5; + 3C54 : 13; + 3C55 : 99; + 3C56 : 00; + 3C57 : 03; + 3C58 : C8; + 3C59 : B5; + 3C5A : 12; + 3C5B : 99; + 3C5C : 00; + 3C5D : 03; + 3C5E : C8; + 3C5F : A9; + 3C60 : 0F; + 3C61 : 99; + 3C62 : 00; + 3C63 : 03; + 3C64 : C8; + 3C65 : 99; + 3C66 : 00; + 3C67 : 03; + 3C68 : C8; + 3C69 : A9; + 3C6A : 00; + 3C6B : 59; + 3C6C : FA; + 3C6D : 02; + 3C6E : 59; + 3C6F : FB; + 3C70 : 02; + 3C71 : 59; + 3C72 : FC; + 3C73 : 02; + 3C74 : 59; + 3C75 : FD; + 3C76 : 02; + 3C77 : 99; + 3C78 : F9; + 3C79 : 02; + 3C7A : EE; + 3C7B : 28; + 3C7C : 06; + 3C7D : AD; + 3C7E : 28; + 3C7F : 06; + 3C80 : C5; + 3C81 : 43; + 3C82 : 90; + 3C83 : BB; + 3C84 : 98; + 3C85 : 48; + 3C86 : E8; + 3C87 : 8A; + 3C88 : 9D; + 3C89 : 00; + 3C8A : 05; + 3C8B : E8; + 3C8C : D0; + 3C8D : FA; + 3C8E : A9; + 3C8F : 03; + 3C90 : 85; + 3C91 : 31; + 3C92 : 20; + 3C93 : 30; + 3C94 : FE; + 3C95 : 68; + 3C96 : A8; + 3C97 : 88; + 3C98 : 20; + 3C99 : E5; + 3C9A : FD; + 3C9B : 20; + 3C9C : F5; + 3C9D : FD; + 3C9E : A9; + 3C9F : 05; + 3CA0 : 85; + 3CA1 : 31; + 3CA2 : 20; + 3CA3 : E9; + 3CA4 : F5; + 3CA5 : 85; + 3CA6 : 3A; + 3CA7 : 20; + 3CA8 : 8F; + 3CA9 : F7; + 3CAA : A9; + 3CAB : 00; + 3CAC : 85; + 3CAD : 32; + 3CAE : 20; + 3CAF : 0E; + 3CB0 : FE; + 3CB1 : A9; + 3CB2 : FF; + 3CB3 : 8D; + 3CB4 : 01; + 3CB5 : 1C; + 3CB6 : A2; + 3CB7 : 05; + 3CB8 : 50; + 3CB9 : FE; + 3CBA : B8; + 3CBB : CA; + 3CBC : D0; + 3CBD : FA; + 3CBE : A2; + 3CBF : 0A; + 3CC0 : A4; + 3CC1 : 32; + 3CC2 : 50; + 3CC3 : FE; + 3CC4 : B8; + 3CC5 : B9; + 3CC6 : 00; + 3CC7 : 03; + 3CC8 : 8D; + 3CC9 : 01; + 3CCA : 1C; + 3CCB : C8; + 3CCC : CA; + 3CCD : D0; + 3CCE : F3; + 3CCF : A2; + 3CD0 : 09; + 3CD1 : 50; + 3CD2 : FE; + 3CD3 : B8; + 3CD4 : A9; + 3CD5 : 55; + 3CD6 : 8D; + 3CD7 : 01; + 3CD8 : 1C; + 3CD9 : CA; + 3CDA : D0; + 3CDB : F5; + 3CDC : A9; + 3CDD : FF; + 3CDE : A2; + 3CDF : 05; + 3CE0 : 50; + 3CE1 : FE; + 3CE2 : B8; + 3CE3 : 8D; + 3CE4 : 01; + 3CE5 : 1C; + 3CE6 : CA; + 3CE7 : D0; + 3CE8 : F7; + 3CE9 : A2; + 3CEA : BB; + 3CEB : 50; + 3CEC : FE; + 3CED : B8; + 3CEE : BD; + 3CEF : 00; + 3CF0 : 01; + 3CF1 : 8D; + 3CF2 : 01; + 3CF3 : 1C; + 3CF4 : E8; + 3CF5 : D0; + 3CF6 : F4; + 3CF7 : A0; + 3CF8 : 00; + 3CF9 : 50; + 3CFA : FE; + 3CFB : B8; + 3CFC : B1; + 3CFD : 30; + 3CFE : 8D; + 3CFF : 01; + 3D00 : 1C; + 3D01 : C8; + 3D02 : D0; + 3D03 : F5; + 3D04 : A9; + 3D05 : 55; + 3D06 : AE; + 3D07 : 26; + 3D08 : 06; + 3D09 : 50; + 3D0A : FE; + 3D0B : B8; + 3D0C : 8D; + 3D0D : 01; + 3D0E : 1C; + 3D0F : CA; + 3D10 : D0; + 3D11 : F7; + 3D12 : A5; + 3D13 : 32; + 3D14 : 18; + 3D15 : 69; + 3D16 : 0A; + 3D17 : 85; + 3D18 : 32; + 3D19 : CE; + 3D1A : 28; + 3D1B : 06; + 3D1C : D0; + 3D1D : 93; + 3D1E : 50; + 3D1F : FE; + 3D20 : B8; + 3D21 : 50; + 3D22 : FE; + 3D23 : B8; + 3D24 : 20; + 3D25 : 00; + 3D26 : FE; + 3D27 : A9; + 3D28 : C8; + 3D29 : 8D; + 3D2A : 23; + 3D2B : 06; + 3D2C : A9; + 3D2D : 00; + 3D2E : 85; + 3D2F : 30; + 3D30 : A9; + 3D31 : 03; + 3D32 : 85; + 3D33 : 31; + 3D34 : A5; + 3D35 : 43; + 3D36 : 8D; + 3D37 : 28; + 3D38 : 06; + 3D39 : 20; + 3D3A : 56; + 3D3B : F5; + 3D3C : A2; + 3D3D : 0A; + 3D3E : A0; + 3D3F : 00; + 3D40 : 50; + 3D41 : FE; + 3D42 : B8; + 3D43 : AD; + 3D44 : 01; + 3D45 : 1C; + 3D46 : D1; + 3D47 : 30; + 3D48 : D0; + 3D49 : 0E; + 3D4A : C8; + 3D4B : CA; + 3D4C : D0; + 3D4D : F2; + 3D4E : 18; + 3D4F : A5; + 3D50 : 30; + 3D51 : 69; + 3D52 : 0A; + 3D53 : 85; + 3D54 : 30; + 3D55 : 4C; + 3D56 : 62; + 3D57 : FD; + 3D58 : CE; + 3D59 : 23; + 3D5A : 06; + 3D5B : D0; + 3D5C : CF; + 3D5D : A9; + 3D5E : 06; + 3D5F : 4C; + 3D60 : D3; + 3D61 : FD; + 3D62 : 20; + 3D63 : 56; + 3D64 : F5; + 3D65 : A0; + 3D66 : BB; + 3D67 : 50; + 3D68 : FE; + 3D69 : B8; + 3D6A : AD; + 3D6B : 01; + 3D6C : 1C; + 3D6D : D9; + 3D6E : 00; + 3D6F : 01; + 3D70 : D0; + 3D71 : E6; + 3D72 : C8; + 3D73 : D0; + 3D74 : F2; + 3D75 : A2; + 3D76 : FC; + 3D77 : 50; + 3D78 : FE; + 3D79 : B8; + 3D7A : AD; + 3D7B : 01; + 3D7C : 1C; + 3D7D : D9; + 3D7E : 00; + 3D7F : 05; + 3D80 : D0; + 3D81 : D6; + 3D82 : C8; + 3D83 : CA; + 3D84 : D0; + 3D85 : F1; + 3D86 : CE; + 3D87 : 28; + 3D88 : 06; + 3D89 : D0; + 3D8A : AE; + 3D8B : E6; + 3D8C : 51; + 3D8D : A5; + 3D8E : 51; + 3D8F : C9; + 3D90 : 24; + 3D91 : B0; + 3D92 : 03; + 3D93 : 4C; + 3D94 : 9C; + 3D95 : F9; + 3D96 : A9; + 3D97 : FF; + 3D98 : 85; + 3D99 : 51; + 3D9A : A9; + 3D9B : 00; + 3D9C : 85; + 3D9D : 50; + 3D9E : A9; + 3D9F : 01; + 3DA0 : 4C; + 3DA1 : 69; + 3DA2 : F9; + 3DA3 : AD; + 3DA4 : 0C; + 3DA5 : 1C; + 3DA6 : 29; + 3DA7 : 1F; + 3DA8 : 09; + 3DA9 : C0; + 3DAA : 8D; + 3DAB : 0C; + 3DAC : 1C; + 3DAD : A9; + 3DAE : FF; + 3DAF : 8D; + 3DB0 : 03; + 3DB1 : 1C; + 3DB2 : 8D; + 3DB3 : 01; + 3DB4 : 1C; + 3DB5 : A2; + 3DB6 : 28; + 3DB7 : A0; + 3DB8 : 00; + 3DB9 : 50; + 3DBA : FE; + 3DBB : B8; + 3DBC : 88; + 3DBD : D0; + 3DBE : FA; + 3DBF : CA; + 3DC0 : D0; + 3DC1 : F7; + 3DC2 : 60; + 3DC3 : AE; + 3DC4 : 21; + 3DC5 : 06; + 3DC6 : AC; + 3DC7 : 22; + 3DC8 : 06; + 3DC9 : 50; + 3DCA : FE; + 3DCB : B8; + 3DCC : CA; + 3DCD : D0; + 3DCE : FA; + 3DCF : 88; + 3DD0 : 10; + 3DD1 : F7; + 3DD2 : 60; + 3DD3 : CE; + 3DD4 : 20; + 3DD5 : 06; + 3DD6 : F0; + 3DD7 : 03; + 3DD8 : 4C; + 3DD9 : 9C; + 3DDA : F9; + 3DDB : A0; + 3DDC : FF; + 3DDD : 84; + 3DDE : 51; + 3DDF : C8; + 3DE0 : 84; + 3DE1 : 50; + 3DE2 : 4C; + 3DE3 : 69; + 3DE4 : F9; + 3DE5 : B9; + 3DE6 : 00; + 3DE7 : 03; + 3DE8 : 99; + 3DE9 : 45; + 3DEA : 03; + 3DEB : 88; + 3DEC : D0; + 3DED : F7; + 3DEE : AD; + 3DEF : 00; + 3DF0 : 03; + 3DF1 : 8D; + 3DF2 : 45; + 3DF3 : 03; + 3DF4 : 60; + 3DF5 : A0; + 3DF6 : 44; + 3DF7 : B9; + 3DF8 : BB; + 3DF9 : 01; + 3DFA : 91; + 3DFB : 30; + 3DFC : 88; + 3DFD : 10; + 3DFE : F8; + 3DFF : 60; + 3E00 : AD; + 3E01 : 0C; + 3E02 : 1C; + 3E03 : 09; + 3E04 : E0; + 3E05 : 8D; + 3E06 : 0C; + 3E07 : 1C; + 3E08 : A9; + 3E09 : 00; + 3E0A : 8D; + 3E0B : 03; + 3E0C : 1C; + 3E0D : 60; + 3E0E : AD; + 3E0F : 0C; + 3E10 : 1C; + 3E11 : 29; + 3E12 : 1F; + 3E13 : 09; + 3E14 : C0; + 3E15 : 8D; + 3E16 : 0C; + 3E17 : 1C; + 3E18 : A9; + 3E19 : FF; + 3E1A : 8D; + 3E1B : 03; + 3E1C : 1C; + 3E1D : A9; + 3E1E : 55; + 3E1F : 8D; + 3E20 : 01; + 3E21 : 1C; + 3E22 : A2; + 3E23 : 28; + 3E24 : A0; + 3E25 : 00; + 3E26 : 50; + 3E27 : FE; + 3E28 : B8; + 3E29 : 88; + 3E2A : D0; + 3E2B : FA; + 3E2C : CA; + 3E2D : D0; + 3E2E : F7; + 3E2F : 60; + 3E30 : A9; + 3E31 : 00; + 3E32 : 85; + 3E33 : 30; + 3E34 : 85; + 3E35 : 2E; + 3E36 : 85; + 3E37 : 36; + 3E38 : A9; + 3E39 : BB; + 3E3A : 85; + 3E3B : 34; + 3E3C : A5; + 3E3D : 31; + 3E3E : 85; + 3E3F : 2F; + 3E40 : A9; + 3E41 : 01; + 3E42 : 85; + 3E43 : 31; + 3E44 : A4; + 3E45 : 36; + 3E46 : B1; + 3E47 : 2E; + 3E48 : 85; + 3E49 : 52; + 3E4A : C8; + 3E4B : B1; + 3E4C : 2E; + 3E4D : 85; + 3E4E : 53; + 3E4F : C8; + 3E50 : B1; + 3E51 : 2E; + 3E52 : 85; + 3E53 : 54; + 3E54 : C8; + 3E55 : B1; + 3E56 : 2E; + 3E57 : 85; + 3E58 : 55; + 3E59 : C8; + 3E5A : F0; + 3E5B : 08; + 3E5C : 84; + 3E5D : 36; + 3E5E : 20; + 3E5F : D0; + 3E60 : F6; + 3E61 : 4C; + 3E62 : 44; + 3E63 : FE; + 3E64 : 4C; + 3E65 : D0; + 3E66 : F6; + 3E67 : 48; + 3E68 : 8A; + 3E69 : 48; + 3E6A : 98; + 3E6B : 48; + 3E6C : AD; + 3E6D : 0D; + 3E6E : 18; + 3E6F : 29; + 3E70 : 02; + 3E71 : F0; + 3E72 : 03; + 3E73 : 20; + 3E74 : 53; + 3E75 : E8; + 3E76 : AD; + 3E77 : 0D; + 3E78 : 1C; + 3E79 : 0A; + 3E7A : 10; + 3E7B : 03; + 3E7C : 20; + 3E7D : B0; + 3E7E : F2; + 3E7F : 68; + 3E80 : A8; + 3E81 : 68; + 3E82 : AA; + 3E83 : 68; + 3E84 : 40; + 3E85 : 12; + [3E86..3E87] : 04; + 3E88 : 90; + 3E89 : 56; + 3E8A : 49; + 3E8B : 44; + 3E8C : 4D; + 3E8D : 42; + 3E8E : 55; + 3E8F : 50; + 3E90 : 26; + 3E91 : 43; + 3E92 : 52; + 3E93 : 53; + 3E94 : 4E; + 3E95 : 84; + 3E96 : 05; + 3E97 : C1; + 3E98 : F8; + 3E99 : 1B; + 3E9A : 5C; + 3E9B : 07; + 3E9C : A3; + 3E9D : F0; + 3E9E : 88; + 3E9F : 23; + 3EA0 : 0D; + 3EA1 : ED; + 3EA2 : D0; + 3EA3 : C8; + 3EA4 : CA; + 3EA5 : CC; + 3EA6 : CB; + 3EA7 : E2; + 3EA8 : E7; + 3EA9 : C8; + 3EAA : CA; + 3EAB : C8; + 3EAC : EE; + 3EAD : 51; + 3EAE : DD; + 3EAF : 1C; + 3EB0 : 9E; + 3EB1 : 1C; + 3EB2 : 52; + 3EB3 : 57; + 3EB4 : 41; + 3EB5 : 4D; + 3EB6 : 44; + 3EB7 : 53; + 3EB8 : 50; + 3EB9 : 55; + 3EBA : 4C; + 3EBB : 44; + 3EBC : 53; + 3EBD : 50; + 3EBE : 55; + 3EBF : 52; + [3EC0..3EC1] : 45; + 3EC2 : 52; + 3EC3 : 53; + 3EC4 : 45; + 3EC5 : 4C; + 3EC6 : 51; + 3EC7 : 47; + 3EC8 : 52; + 3EC9 : 4C; + 3ECA : 08; + [3ECB..3ECC] : 00; + 3ECD : 3F; + 3ECE : 7F; + 3ECF : BF; + 3ED0 : FF; + 3ED1 : 11; + 3ED2 : 12; + 3ED3 : 13; + 3ED4 : 15; + 3ED5 : 41; + 3ED6 : 04; + 3ED7 : 24; + 3ED8 : 1F; + 3ED9 : 19; + 3EDA : 12; + 3EDB : 01; + [3EDC..3EDD] : FF; + 3EDE : 01; + 3EDF : 00; + 3EE0 : 03; + 3EE1 : 04; + 3EE2 : 05; + 3EE3 : 06; + [3EE4..3EE5] : 07; + 3EE6 : EC; + 3EE7 : 6C; + 3EE8 : 65; + 3EE9 : 00; + 3EEA : 8D; + 3EEB : 00; + 3EEC : 1C; + 3EED : 8D; + 3EEE : 02; + 3EEF : 1C; + 3EF0 : 4C; + 3EF1 : 7D; + 3EF2 : EA; + 3EF3 : 8A; + 3EF4 : A2; + 3EF5 : 05; + 3EF6 : CA; + 3EF7 : D0; + 3EF8 : FD; + 3EF9 : AA; + 3EFA : 60; + 3EFB : 20; + 3EFC : AE; + 3EFD : E9; + 3EFE : 4C; + 3EFF : 9C; + 3F00 : E9; + 3F01 : AD; + [3F02..3F03] : 02; + 3F04 : C9; + 3F05 : 2D; + 3F06 : F0; + 3F07 : 05; + 3F08 : 38; + 3F09 : E9; + 3F0A : 2B; + 3F0B : D0; + 3F0C : DA; + 3F0D : 85; + 3F0E : 23; + 3F0F : 60; + 3F10 : 8E; + 3F11 : 03; + 3F12 : 18; + 3F13 : A9; + 3F14 : 02; + 3F15 : 8D; + 3F16 : 00; + 3F17 : 18; + 3F18 : A9; + 3F19 : 1A; + 3F1A : 8D; + 3F1B : 02; + 3F1C : 18; + 3F1D : 4C; + 3F1E : A7; + 3F1F : EA; + 3F20 : AD; + 3F21 : 00; + 3F22 : 18; + 3F23 : 29; + 3F24 : 01; + 3F25 : D0; + 3F26 : F9; + 3F27 : A9; + 3F28 : 01; + 3F29 : 8D; + 3F2A : 05; + 3F2B : 18; + 3F2C : 4C; + 3F2D : DF; + 3F2E : E9; + 3F2F : A9; + 3F30 : FF; + 3F31 : 85; + 3F32 : 51; + 3F33 : 4C; + 3F34 : C6; + 3F35 : C8; + [3F36..3FE5] : AA; + 3FE6 : C6; + 3FE7 : C8; + 3FE8 : 8F; + 3FE9 : F9; + 3FEA : 5F; + 3FEB : CD; + 3FEC : 97; + 3FED : CD; + 3FEE : 00; + 3FEF : 05; + 3FF0 : 03; + 3FF1 : 05; + 3FF2 : 06; + 3FF3 : 05; + 3FF4 : 09; + 3FF5 : 05; + 3FF6 : 0C; + 3FF7 : 05; + 3FF8 : 0F; + 3FF9 : 05; + 3FFA : 01; + 3FFB : FF; + 3FFC : A0; + 3FFD : EA; + 3FFE : 67; + 3FFF : FE; +END; diff --git a/Commodore - 64_MiST/rtl/c1541/c1541_rom.vhd b/Commodore - 64_MiST/rtl/c1541/c1541_rom.vhd new file mode 100644 index 00000000..173b81ab --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/c1541_rom.vhd @@ -0,0 +1,51 @@ +library ieee; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.ALL; +use IEEE.numeric_std.all; + +entity c1541_rom is + port + ( + wrclock : in std_logic; + wraddress : in std_logic_vector(13 downto 0); + data : in std_logic_vector(7 downto 0); + wren : in std_logic := '0'; + + rdclock : in std_logic; + rdaddress : in std_logic_vector(13 downto 0); + q : out std_logic_vector(7 downto 0) + ); + +end; + +architecture rtl of c1541_rom is + + subtype word_t is std_logic_vector(7 downto 0); + type memory_t is array(16383 downto 0) of word_t; + + shared variable ram : memory_t; + + attribute ram_init_file : string; + attribute ram_init_file of ram : variable is "c1541/c1541_rom.mif"; + +begin + + -- Port A + process(wrclock) + begin + if(rising_edge(wrclock)) then + if(wren = '1') then + ram(to_integer(unsigned(wraddress))) := data; + end if; + end if; + end process; + + -- Port B + process(rdclock) + begin + if(rising_edge(rdclock)) then + q <= ram(to_integer(unsigned(rdaddress))); + end if; + end process; + +end rtl; diff --git a/Commodore - 64_MiST/rtl/c1541/c1541_sd.vhd b/Commodore - 64_MiST/rtl/c1541/c1541_sd.vhd new file mode 100644 index 00000000..3a0e68ab --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/c1541_sd.vhd @@ -0,0 +1,279 @@ +--------------------------------------------------------------------------------- +-- +-- Reworked and adapted to MiSTer by Sorgelig@MiSTer (31.08.2018) +-- +-- Commodore 1541 to SD card by Dar (darfpga@aol.fr) +-- http://darfpga.blogspot.fr +-- +-- c1541_logic from : Mark McDougall +-- via6522 from : Gideon Zweijtzer +-- cpu from : Gideon Zweijtzer +-- c1541_track from : Sorgelig@MiSTer +-- +-- c1541_logic modified for : slow down CPU (EOI ack missed by real c64) +-- : remove iec internal OR wired +-- : synched atn_in (sometime no IRQ with real c64) +-- +-- Input clk 32MHz +-- +--------------------------------------------------------------------------------- + +library IEEE; +use IEEE.std_logic_1164.all; +use IEEE.std_logic_unsigned.ALL; +use IEEE.numeric_std.all; + +entity c1541_sd is +port +( + clk32 : in std_logic; + + disk_change : in std_logic; + disk_readonly : in std_logic; + drive_num : in std_logic_vector(1 downto 0) := "00"; + + iec_reset_i : in std_logic; + iec_atn_i : in std_logic; + iec_data_i : in std_logic; + iec_clk_i : in std_logic; + iec_data_o : out std_logic; + iec_clk_o : out std_logic; + + sd_lba : out std_logic_vector(31 downto 0); + sd_rd : out std_logic; + sd_wr : out std_logic; + sd_ack : in std_logic; + + sd_buff_addr : in std_logic_vector(8 downto 0); + sd_buff_dout : in std_logic_vector(7 downto 0); + sd_buff_din : out std_logic_vector(7 downto 0); + sd_buff_wr : in std_logic; + + led : out std_logic; + + c1541rom_clk : in std_logic; + c1541rom_addr : in std_logic_vector(13 downto 0); + c1541rom_data : in std_logic_vector(7 downto 0); + c1541rom_wr : in std_logic +); +end; + +architecture struct of c1541_sd is + + component c1541_track port + ( + sd_lba : out std_logic_vector(31 downto 0); + sd_rd : out std_logic; + sd_wr : out std_logic; + sd_ack : in std_logic; + + sd_buff_addr : in std_logic_vector(8 downto 0); + sd_buff_dout : in std_logic_vector(7 downto 0); + sd_buff_din : out std_logic_vector(7 downto 0); + sd_buff_wr : in std_logic; + + buff_addr : in std_logic_vector(7 downto 0); + buff_dout : out std_logic_vector(7 downto 0); + buff_din : in std_logic_vector(7 downto 0); + buff_we : in std_logic; + + save_track : in std_logic; + change : in std_logic; -- Force reload as disk may have changed + track : in std_logic_vector(5 downto 0); -- Track number (0-34) + sector : in std_logic_vector(4 downto 0); -- Sector number (0-20) + busy : out std_logic; + + clk : in std_logic; -- System clock + reset : in std_logic + ); + end component; + + signal buff_dout : std_logic_vector(7 downto 0); + signal buff_din : std_logic_vector(7 downto 0); + signal buff_we : std_logic; + signal do : std_logic_vector(7 downto 0); -- disk read data + signal di : std_logic_vector(7 downto 0); -- disk write data + signal mode : std_logic; -- read/write + signal stp : std_logic_vector(1 downto 0); -- stepper motor control + signal stp_r : std_logic_vector(1 downto 0); -- stepper motor control + signal mtr : std_logic; -- stepper motor on/off + signal sync_n : std_logic; -- reading SYNC bytes + signal byte_n : std_logic; -- byte ready + signal act : std_logic; -- activity LED + signal act_r : std_logic; + signal sd_busy : std_logic; + signal sector : std_logic_vector(4 downto 0); + signal byte_addr : std_logic_vector(7 downto 0); + signal track_num_dbl : std_logic_vector(6 downto 0); + signal track : std_logic_vector(5 downto 0); + + signal tr00_sense_n : std_logic; + signal save_track : std_logic; + signal track_modified : std_logic; + + signal ch_timeout : integer := 0; + signal prev_change : std_logic := '0'; + signal ch_state : std_logic := '0'; + + signal reset, reset_r : std_logic; +begin + + tr00_sense_n <= '1' when (track > "000000") else '0'; + + process(clk32) begin + if rising_edge(clk32) then + reset_r <= iec_reset_i; + reset <= reset_r; + end if; + end process; + + process(clk32) begin + if rising_edge(clk32) then + prev_change <= disk_change; + if ch_timeout > 0 then + ch_timeout <= ch_timeout - 1; + ch_state <= '1'; + else + ch_state <= '0'; + end if; + if prev_change = '0' and disk_change = '1' then + ch_timeout <= 15000000; + end if; + end if; + end process; + + c1541 : entity work.c1541_logic + port map + ( + clk_32M => clk32, + reset => reset, + + -- serial bus + sb_data_oe => iec_data_o, + sb_clk_oe => iec_clk_o, + + sb_data_in => not iec_data_i, + sb_clk_in => not iec_clk_i, + sb_atn_in => not iec_atn_i, + + c1541rom_clk => c1541rom_clk, + c1541rom_addr => c1541rom_addr, + c1541rom_data => c1541rom_data, + c1541rom_wr => c1541rom_wr, + + -- drive-side interface + ds => drive_num, -- device select + di => do, -- disk read data + do => di, -- disk write data + mode => mode, -- read/write + stp => stp, -- stepper motor control + mtr => mtr, -- motor on/off + freq => open, -- motor frequency + sync_n => sync_n, -- reading SYNC bytes + byte_n => byte_n, -- byte ready + wps_n => (not disk_readonly) xor ch_state, -- write-protect sense + tr00_sense_n => tr00_sense_n, -- track 0 sense + act => act -- activity LED + ); + + floppy : entity work.gcr_floppy + port map + ( + clk32 => clk32, + + dout => do, -- disk read data + din => di, + mode => mode, + mtr => mtr, -- stepper motor on/off + sync_n => sync_n, -- reading SYNC bytes + byte_n => byte_n, -- byte ready + + track => track, + sector => sector, + + byte_addr => byte_addr, + ram_do => buff_dout, + ram_di => buff_din, + ram_we => buff_we, + + ram_ready => not sd_busy + ); + + track_buf : c1541_track + port map + ( + sd_lba => sd_lba, + sd_rd => sd_rd, + sd_wr => sd_wr, + sd_ack => sd_ack, + + sd_buff_addr => sd_buff_addr, + sd_buff_dout => sd_buff_dout, + sd_buff_din => sd_buff_din, + sd_buff_wr => sd_buff_wr, + + buff_addr => byte_addr, + buff_dout => buff_dout, + buff_din => buff_din, + buff_we => buff_we, + + save_track => save_track, + change => disk_change, + track => track, + sector => sector, + + clk => clk32, + reset => reset, + busy => sd_busy + ); + + led <= act or sd_busy; + + process (clk32) + begin + if rising_edge(clk32) then + stp_r <= stp; + act_r <= act; + save_track <= '0'; + track <= track_num_dbl(6 downto 1); + + if buff_we = '1' then track_modified <= '1'; end if; + if disk_change = '1' then track_modified <= '0'; end if; + + if reset = '1' then + track_num_dbl <= "0100100";--"0000010"; + track_modified <= '0'; + else + if mtr = '1' then + if( (stp_r = "00" and stp = "10") + or (stp_r = "10" and stp = "01") + or (stp_r = "01" and stp = "11") + or (stp_r = "11" and stp = "00")) then + if track_num_dbl < "1010000" then + track_num_dbl <= track_num_dbl + '1'; + end if; + save_track <= track_modified; + track_modified <= '0'; + end if; + + if( (stp_r = "00" and stp = "11") + or (stp_r = "10" and stp = "00") + or (stp_r = "01" and stp = "10") + or (stp_r = "11" and stp = "01")) then + if track_num_dbl > "0000001" then + track_num_dbl <= track_num_dbl - '1'; + end if; + save_track <= track_modified; + track_modified <= '0'; + end if; + end if; + + if act_r = '1' and act = '0' then -- stopping activity + save_track <= track_modified; + track_modified <= '0'; + end if; + end if; + end if; -- rising edge clock + end process; + +end struct; diff --git a/Commodore - 64_MiST/rtl/c1541/c1541_track.sv b/Commodore - 64_MiST/rtl/c1541/c1541_track.sv new file mode 100644 index 00000000..a71f0071 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/c1541_track.sv @@ -0,0 +1,174 @@ +// +// c1541_track +// Copyright (c) 2016 Sorgelig +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the Lesser GNU General Public License as published +// by the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This source file is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . +// +// +///////////////////////////////////////////////////////////////////////// + +module c1541_track +( + input clk, + input reset, + + output [31:0] sd_lba, + output reg sd_rd, + output reg sd_wr, + input sd_ack, + + input [8:0] sd_buff_addr, + input [7:0] sd_buff_dout, + output [7:0] sd_buff_din, + input sd_buff_wr, + + input save_track, + input change, + input [5:0] track, + input [4:0] sector, + input [7:0] buff_addr, + output [7:0] buff_dout, + input [7:0] buff_din, + input buff_we, + output reg busy +); + +assign sd_lba = lba; + +trk_dpram buffer +( + .clock(clk), + + .address_a(sd_buff_base + base_fix + sd_buff_addr), + .data_a(sd_buff_dout), + .wren_a(sd_ack & sd_buff_wr), + .q_a(sd_buff_din), + + .address_b({sector, buff_addr}), + .data_b(buff_din), + .wren_b(buff_we), + .q_b(buff_dout) +); + +wire [9:0] start_sectors[41] = + '{ 0, 0, 21, 42, 63, 84,105,126,147,168,189,210,231,252,273,294,315,336,357,376,395, + 414,433,452,471,490,508,526,544,562,580,598,615,632,649,666,683,700,717,734,751}; + +reg [31:0] lba; +reg [12:0] base_fix; +reg [12:0] sd_buff_base; + +always @(posedge clk) begin + reg old_ack; + reg [5:0] cur_track = 0; + reg old_change, ready = 0; + reg saving = 0; + + old_change <= change; + if(~old_change & change) ready <= 1; + + old_ack <= sd_ack; + if(sd_ack) {sd_rd,sd_wr} <= 0; + + if(reset) begin + cur_track <= 'b111111; + busy <= 0; + sd_rd <= 0; + sd_wr <= 0; + saving<= 0; + end + else + if(busy) begin + if(old_ack && ~sd_ack) begin + if(sd_buff_base < 'h1800) begin + sd_buff_base <= sd_buff_base + 13'd512; + lba <= lba + 1'd1; + if(saving) sd_wr <= 1; + else sd_rd <= 1; + end + else + if(saving && (cur_track != track)) begin + saving <= 0; + cur_track <= track; + sd_buff_base <= 0; + base_fix <= start_sectors[track][0] ? 13'h1F00 : 13'h0000; + lba <= start_sectors[track][9:1]; + sd_rd <= 1; + end + else + begin + busy <= 0; + end + end + end + else + if(ready) begin + if(save_track && cur_track != 'b111111) begin + saving <= 1; + sd_buff_base <= 0; + lba <= start_sectors[cur_track][9:1]; + sd_wr <= 1; + busy <= 1; + end + else + if((cur_track != track) || (old_change && ~change)) begin + saving <= 0; + cur_track <= track; + sd_buff_base <= 0; + base_fix <= start_sectors[track][0] ? 13'h1F00 : 13'h0000; + lba <= start_sectors[track][9:1]; + sd_rd <= 1; + busy <= 1; + end + end +end + +endmodule + +module trk_dpram #(parameter DATAWIDTH=8, ADDRWIDTH=13) +( + input clock, + + input [ADDRWIDTH-1:0] address_a, + input [DATAWIDTH-1:0] data_a, + input wren_a, + output reg [DATAWIDTH-1:0] q_a, + + input [ADDRWIDTH-1:0] address_b, + input [DATAWIDTH-1:0] data_b, + input wren_b, + output reg [DATAWIDTH-1:0] q_b +); + +logic [DATAWIDTH-1:0] ram[0:(1< +------------------------------------------------------------------------------- +-- Description: This module implements the 6522 VIA chip. +-- Please note: A LOT OF REVERSE ENGINEERING has been done to +-- make this module as accurate as it is now. Please do not copy +-- (use in your own projects) without written permission of the +-- author. +------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +entity c1541_via6522 is +port ( + clock : in std_logic; + rising : in std_logic; + falling : in std_logic; + reset : in std_logic; + + addr : in std_logic_vector(3 downto 0); + wen : in std_logic; + ren : in std_logic; + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + + phi2_ref : out std_logic; + + -- pio -- + port_a_o : out std_logic_vector(7 downto 0); + port_a_t_l : out std_logic_vector(7 downto 0); + port_a_i : in std_logic_vector(7 downto 0); + + port_b_o : out std_logic_vector(7 downto 0); + port_b_t_l : out std_logic_vector(7 downto 0); + port_b_i : in std_logic_vector(7 downto 0); + + -- handshake pins + ca1_i : in std_logic; + + ca2_o : out std_logic; + ca2_i : in std_logic; + ca2_t_l : out std_logic; + + cb1_o : out std_logic; + cb1_i : in std_logic; + cb1_t_l : out std_logic; + + cb2_o : out std_logic; + cb2_i : in std_logic; + cb2_t_l : out std_logic; + + irq_l : out std_logic ); + +end c1541_via6522; + +architecture Gideon of c1541_via6522 is + + type pio_t is + record + pra : std_logic_vector(7 downto 0); + ddra : std_logic_vector(7 downto 0); + prb : std_logic_vector(7 downto 0); + ddrb : std_logic_vector(7 downto 0); + end record; + + constant pio_default : pio_t := (others => (others => '0')); + constant latch_reset_pattern : std_logic_vector(15 downto 0) := X"5550"; + + signal pio_i : pio_t; + signal port_a_c : std_logic_vector(7 downto 0) := (others => '0'); + signal port_b_c : std_logic_vector(7 downto 0) := (others => '0'); + + signal irq_mask : std_logic_vector(6 downto 0) := (others => '0'); + signal irq_flags : std_logic_vector(6 downto 0) := (others => '0'); + signal irq_events : std_logic_vector(6 downto 0) := (others => '0'); + signal irq_out : std_logic; + + signal timer_a_latch : std_logic_vector(15 downto 0) := latch_reset_pattern; + signal timer_b_latch : std_logic_vector(15 downto 0) := latch_reset_pattern; + signal timer_a_count : std_logic_vector(15 downto 0) := latch_reset_pattern; + signal timer_b_count : std_logic_vector(15 downto 0) := latch_reset_pattern; + signal timer_a_out : std_logic; + signal timer_b_tick : std_logic; + + signal acr, pcr : std_logic_vector(7 downto 0) := X"00"; + signal shift_reg : std_logic_vector(7 downto 0) := X"00"; + signal serport_en : std_logic; + signal ser_cb2_o : std_logic; + signal hs_cb2_o : std_logic; + signal trigger_serial: std_logic; + + alias ca2_event : std_logic is irq_events(0); + alias ca1_event : std_logic is irq_events(1); + alias serial_event : std_logic is irq_events(2); + alias cb2_event : std_logic is irq_events(3); + alias cb1_event : std_logic is irq_events(4); + alias timer_b_event : std_logic is irq_events(5); + alias timer_a_event : std_logic is irq_events(6); + + alias ca2_flag : std_logic is irq_flags(0); + alias ca1_flag : std_logic is irq_flags(1); + alias serial_flag : std_logic is irq_flags(2); + alias cb2_flag : std_logic is irq_flags(3); + alias cb1_flag : std_logic is irq_flags(4); + alias timer_b_flag : std_logic is irq_flags(5); + alias timer_a_flag : std_logic is irq_flags(6); + + alias tmr_a_output_en : std_logic is acr(7); + alias tmr_a_freerun : std_logic is acr(6); + alias tmr_b_count_mode : std_logic is acr(5); + alias shift_dir : std_logic is acr(4); + alias shift_clk_sel : std_logic_vector(1 downto 0) is acr(3 downto 2); + alias shift_mode_control : std_logic_vector(2 downto 0) is acr(4 downto 2); + alias pb_latch_en : std_logic is acr(1); + alias pa_latch_en : std_logic is acr(0); + + alias cb2_is_output : std_logic is pcr(7); + alias cb2_edge_select : std_logic is pcr(6); -- for when CB2 is input + alias cb2_no_irq_clr : std_logic is pcr(5); -- for when CB2 is input + alias cb2_out_mode : std_logic_vector(1 downto 0) is pcr(6 downto 5); + alias cb1_edge_select : std_logic is pcr(4); + + alias ca2_is_output : std_logic is pcr(3); + alias ca2_edge_select : std_logic is pcr(2); -- for when CA2 is input + alias ca2_no_irq_clr : std_logic is pcr(1); -- for when CA2 is input + alias ca2_out_mode : std_logic_vector(1 downto 0) is pcr(2 downto 1); + alias ca1_edge_select : std_logic is pcr(0); + + signal ira, irb : std_logic_vector(7 downto 0) := (others => '0'); + + signal write_t1c_h : std_logic; + signal write_t2c_h : std_logic; + + signal ca1_c, ca2_c : std_logic; + signal cb1_c, cb2_c : std_logic; + signal ca1_d, ca2_d : std_logic; + signal cb1_d, cb2_d : std_logic; + + signal ca2_handshake_o : std_logic; + signal ca2_pulse_o : std_logic; + signal cb2_handshake_o : std_logic; + signal cb2_pulse_o : std_logic; + signal shift_active : std_logic; +begin + irq_l <= not irq_out; + + write_t1c_h <= '1' when addr = X"5" and wen='1' and falling = '1' else '0'; + write_t2c_h <= '1' when addr = X"9" and wen='1' and falling = '1' else '0'; + + ca1_event <= (ca1_c xor ca1_d) and (ca1_d xor ca1_edge_select); + ca2_event <= (ca2_c xor ca2_d) and (ca2_d xor ca2_edge_select); + cb1_event <= (cb1_c xor cb1_d) and (cb1_d xor cb1_edge_select); + cb2_event <= (cb2_c xor cb2_d) and (cb2_d xor cb2_edge_select); + + ca2_t_l <= not ca2_is_output; + cb2_t_l <= not cb2_is_output when serport_en='0' else shift_dir; + cb2_o <= hs_cb2_o when serport_en='0' else ser_cb2_o; + + with ca2_out_mode select ca2_o <= + ca2_handshake_o when "00", + ca2_pulse_o when "01", + '0' when "10", + '1' when others; + + with cb2_out_mode select hs_cb2_o <= + cb2_handshake_o when "00", + cb2_pulse_o when "01", + '0' when "10", + '1' when others; + + process(irq_flags, irq_mask) + begin + if (irq_flags and irq_mask) = "0000000" then + irq_out <= '0'; + else + irq_out <= '1'; + end if; + end process; + + process(clock) + begin + if rising_edge(clock) then + if rising = '1' then + phi2_ref <= '1'; + elsif falling = '1' then + phi2_ref <= '0'; + end if; + end if; + end process; + + + process(clock) + begin + if rising_edge(clock) then + -- CA1/CA2/CB1/CB2 edge detect flipflops + ca1_c <= To_X01(ca1_i); + ca2_c <= To_X01(ca2_i); + cb1_c <= To_X01(cb1_i); + cb2_c <= To_X01(cb2_i); + + ca1_d <= ca1_c; + ca2_d <= ca2_c; + cb1_d <= cb1_c; + cb2_d <= cb2_c; + + -- input registers + port_a_c <= port_a_i; + port_b_c <= port_b_i; + + -- input latch emulation + if pa_latch_en = '0' or ca1_event = '1' then + ira <= port_a_c; + end if; + + if pb_latch_en = '0' or cb1_event = '1' then + irb <= port_b_c; + end if; + + -- CA2 logic + if ca1_event = '1' then + ca2_handshake_o <= '1'; + elsif (ren = '1' or wen = '1') and addr = X"1" and falling = '1' then + ca2_handshake_o <= '0'; + end if; + + if falling = '1' then + if (ren = '1' or wen = '1') and addr = X"1" then + ca2_pulse_o <= '0'; + else + ca2_pulse_o <= '1'; + end if; + end if; + + -- CB2 logic + if cb1_event = '1' then + cb2_handshake_o <= '1'; + elsif (ren = '1' or wen = '1') and addr = X"0" and falling = '1' then + cb2_handshake_o <= '0'; + end if; + + if falling = '1' then + if (ren = '1' or wen = '1') and addr = X"0" then + cb2_pulse_o <= '0'; + else + cb2_pulse_o <= '1'; + end if; + end if; + + -- Interrupt logic + irq_flags <= irq_flags or irq_events; + + if falling = '1' then + trigger_serial <= '0'; + end if; + + -- Writes -- + if wen='1' and falling = '1' then + case addr is + when X"0" => -- ORB + pio_i.prb <= data_in; + if cb2_no_irq_clr='0' then + cb2_flag <= '0'; + end if; + cb1_flag <= '0'; + + when X"1" => -- ORA + pio_i.pra <= data_in; + if ca2_no_irq_clr='0' then + ca2_flag <= '0'; + end if; + ca1_flag <= '0'; + + when X"2" => -- DDRB + pio_i.ddrb <= data_in; + + when X"3" => -- DDRA + pio_i.ddra <= data_in; + + when X"4" => -- TA LO counter (write=latch) + timer_a_latch(7 downto 0) <= data_in; + + when X"5" => -- TA HI counter + timer_a_latch(15 downto 8) <= data_in; + timer_a_flag <= '0'; + + when X"6" => -- TA LO latch + timer_a_latch(7 downto 0) <= data_in; + + when X"7" => -- TA HI latch + timer_a_latch(15 downto 8) <= data_in; + timer_a_flag <= '0'; + + when X"8" => -- TB LO latch + timer_b_latch(7 downto 0) <= data_in; + + when X"9" => -- TB HI counter + timer_b_flag <= '0'; + + when X"A" => -- Serial port + serial_flag <= '0'; + if shift_active = '0' then + trigger_serial <= '1'; + end if; + + when X"B" => -- ACR (Auxiliary Control Register) + acr <= data_in; + + when X"C" => -- PCR (Peripheral Control Register) + pcr <= data_in; + + when X"D" => -- IFR + irq_flags <= irq_flags and not data_in(6 downto 0); + + when X"E" => -- IER + if data_in(7)='1' then -- set + irq_mask <= irq_mask or data_in(6 downto 0); + else -- clear + irq_mask <= irq_mask and not data_in(6 downto 0); + end if; + + when X"F" => -- ORA no handshake + pio_i.pra <= data_in; + + when others => + null; + end case; + end if; + + -- Reads - Output only -- + data_out <= X"00"; + case addr is + when X"0" => -- ORB + --Port B reads its own output register for pins set to output. + data_out <= (pio_i.prb and pio_i.ddrb) or (irb and not pio_i.ddrb); + when X"1" => -- ORA + data_out <= ira; + when X"2" => -- DDRB + data_out <= pio_i.ddrb; + when X"3" => -- DDRA + data_out <= pio_i.ddra; + when X"4" => -- TA LO counter + data_out <= timer_a_count(7 downto 0); + when X"5" => -- TA HI counter + data_out <= timer_a_count(15 downto 8); + when X"6" => -- TA LO latch + data_out <= timer_a_latch(7 downto 0); + when X"7" => -- TA HI latch + data_out <= timer_a_latch(15 downto 8); + when X"8" => -- TA LO counter + data_out <= timer_b_count(7 downto 0); + when X"9" => -- TA HI counter + data_out <= timer_b_count(15 downto 8); + when X"A" => -- SR + data_out <= shift_reg; + when X"B" => -- ACR + data_out <= acr; + when X"C" => -- PCR + data_out <= pcr; + when X"D" => -- IFR + data_out <= irq_out & irq_flags; + when X"E" => -- IER + data_out <= '0' & irq_mask; + when X"F" => -- ORA + data_out <= ira; + when others => + null; + end case; + + -- Read actions -- + if ren = '1' and falling = '1' then + case addr is + when X"0" => -- ORB + if cb2_no_irq_clr='0' then + cb2_flag <= '0'; + end if; + cb1_flag <= '0'; + + when X"1" => -- ORA + if ca2_no_irq_clr='0' then + ca2_flag <= '0'; + end if; + ca1_flag <= '0'; + + when X"4" => -- TA LO counter + timer_a_flag <= '0'; + + when X"8" => -- TB LO counter + timer_b_flag <= '0'; + + when X"A" => -- SR + serial_flag <= '0'; + trigger_serial <= '1'; + + when others => + null; + end case; + end if; + + if reset='1' then + pio_i <= pio_default; + irq_mask <= (others => '0'); + irq_flags <= (others => '0'); + acr <= (others => '0'); + pcr <= (others => '0'); + ca2_handshake_o <= '1'; + ca2_pulse_o <= '1'; + cb2_handshake_o <= '1'; + cb2_pulse_o <= '1'; + timer_a_latch <= latch_reset_pattern; + timer_b_latch <= latch_reset_pattern; + trigger_serial <= '0'; + end if; + end if; + end process; + + -- PIO Out select -- + port_a_o <= pio_i.pra; + port_b_o(6 downto 0) <= pio_i.prb(6 downto 0); + port_b_o(7) <= pio_i.prb(7) when tmr_a_output_en='0' else timer_a_out; + + port_a_t_l <= not pio_i.ddra; + port_b_t_l(6 downto 0) <= not pio_i.ddrb(6 downto 0); + port_b_t_l(7) <= not (pio_i.ddrb(7) or tmr_a_output_en); + + + -- Timer A + tmr_a: block + signal timer_a_reload : std_logic; + signal timer_a_oneshot_trig : std_logic; + signal timer_a_toggle : std_logic; + begin + process(clock) + begin + if rising_edge(clock) then + if falling = '1' then + -- always count, or load + + if timer_a_reload = '1' then + timer_a_count <= timer_a_latch; + timer_a_reload <= '0'; + timer_a_oneshot_trig <= '0'; + else + if timer_a_count = X"0000" then + -- generate an event if we were triggered + timer_a_reload <= '1'; + end if; + --Timer coutinues to count in both free run and one shot. + timer_a_count <= timer_a_count - X"0001"; + end if; + end if; + + if rising = '1' then + if timer_a_event = '1' then + timer_a_toggle <= not timer_a_toggle; + end if; + end if; + + if write_t1c_h = '1' then + timer_a_toggle <= '0'; + timer_a_count <= data_in & timer_a_latch(7 downto 0); + timer_a_reload <= '0'; + timer_a_oneshot_trig <= '1'; + end if; + + if reset='1' then + timer_a_toggle <= '1'; + timer_a_count <= latch_reset_pattern; + timer_a_reload <= '0'; + timer_a_oneshot_trig <= '0'; + end if; + end if; + end process; + + timer_a_out <= timer_a_toggle; + timer_a_event <= rising and timer_a_reload and (tmr_a_freerun or timer_a_oneshot_trig); + + end block tmr_a; + + -- Timer B + tmr_b: block + signal timer_b_reload_lo : std_logic; + signal timer_b_oneshot_trig : std_logic; + signal timer_b_timeout : std_logic; + signal pb6_c, pb6_d : std_logic; + begin + process(clock) + variable timer_b_decrement : std_logic; + begin + if rising_edge(clock) then + timer_b_decrement := '0'; + + if rising = '1' then + pb6_c <= To_X01(port_b_i(6)); + pb6_d <= pb6_c; + end if; + + if falling = '1' then + timer_b_timeout <= '0'; + timer_b_tick <= '0'; + + if tmr_b_count_mode = '1' then + if (pb6_d='1' and pb6_c='0') then + timer_b_decrement := '1'; + end if; + else -- one shot or used for shift register + timer_b_decrement := '1'; + end if; + + if timer_b_decrement = '1' then + if timer_b_count = X"0000" then + if timer_b_oneshot_trig = '1' then + timer_b_oneshot_trig <= '0'; + timer_b_timeout <= '1'; + end if; + end if; + if timer_b_count(7 downto 0) = X"00" then + case shift_mode_control is + when "001" | "101" | "100" => + timer_b_reload_lo <= '1'; + timer_b_tick <= '1'; + when others => + null; + end case; + end if; + timer_b_count <= timer_b_count - X"0001"; + end if; + if timer_b_reload_lo = '1' then + timer_b_count(7 downto 0) <= timer_b_latch(7 downto 0); + timer_b_reload_lo <= '0'; + end if; + end if; + + if write_t2c_h = '1' then + timer_b_count <= data_in & timer_b_latch(7 downto 0); + timer_b_oneshot_trig <= '1'; + end if; + + if reset='1' then + timer_b_count <= latch_reset_pattern; + timer_b_reload_lo <= '0'; + timer_b_oneshot_trig <= '0'; + end if; + end if; + end process; + + timer_b_event <= rising and timer_b_timeout; + + end block tmr_b; + + ser: block + signal shift_clock_d : std_logic; + signal shift_clock : std_logic; + signal shift_tick_r : std_logic; + signal shift_tick_f : std_logic; + signal cb2_c : std_logic := '0'; + signal bit_cnt : integer range 0 to 7; + signal shift_pulse : std_logic; + begin + process(shift_active, timer_b_tick, shift_clk_sel, shift_clock, shift_clock_d) + begin + case shift_clk_sel is + when "10" => + shift_pulse <= '1'; + + when "00"|"01" => + shift_pulse <= timer_b_tick; + + when others => + shift_pulse <= shift_clock and not shift_clock_d; + + end case; + + if shift_active = '0' then + shift_pulse <= '0'; + end if; + end process; + + process(clock) + begin + if rising_edge(clock) then + if rising = '1' then + cb2_c <= To_X01(cb2_i); + + if shift_active='0' then + shift_clock <= '1'; + elsif shift_clk_sel = "11" then + shift_clock <= To_X01(cb1_i); + elsif shift_pulse = '1' then + shift_clock <= not shift_clock; + end if; + + shift_clock_d <= shift_clock; + + if shift_tick_f = '1' then + ser_cb2_o <= shift_reg(7); + end if; + end if; + if reset = '1' then + shift_clock <= '1'; + shift_clock_d <= '1'; + ser_cb2_o <= '1'; + end if; + end if; + end process; + + cb1_t_l <= '1' when shift_clk_sel="11" else not serport_en; + cb1_o <= shift_clock_d; + + serport_en <= shift_dir or shift_clk_sel(1) or shift_clk_sel(0); + + process(clock) + begin + if rising_edge(clock) then + if reset = '1' then + shift_reg <= X"FF"; + shift_tick_r <= '0'; + shift_tick_f <= '0'; + elsif falling = '1' then + shift_tick_r <= not shift_clock_d and shift_clock; + shift_tick_f <= shift_clock_d and not shift_clock; + + if wen = '1' and addr = X"A" then + shift_reg <= data_in; + elsif shift_tick_r = '1' then + if shift_dir='1' then -- output + shift_reg <= shift_reg(6 downto 0) & shift_reg(7); + else + shift_reg <= shift_reg(6 downto 0) & cb2_c; + end if; + end if; + end if; + end if; + end process; + + -- tell people that we're ready! + serial_event <= shift_tick_r and not shift_active and rising; + + process(clock) + begin + if rising_edge(clock) then + if falling = '1' then + if shift_active = '0' then + if trigger_serial = '1' then + bit_cnt <= 7; + shift_active <= '1'; + end if; + else -- we're active + if shift_clk_sel = "00" then + shift_active <= shift_dir; -- when '1' we're active, but for mode 000 we go inactive. + elsif shift_pulse = '1' and shift_clock = '1' then + if bit_cnt = 0 then + shift_active <= '0'; + else + bit_cnt <= bit_cnt - 1; + end if; + end if; + end if; + end if; + + if reset='1' then + shift_active <= '0'; + bit_cnt <= 0; + end if; + end if; + end process; + end block ser; +end Gideon; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/alu.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/alu.vhd new file mode 100644 index 00000000..a48200b6 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/alu.vhd @@ -0,0 +1,137 @@ + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity alu is +generic ( + support_bcd : boolean := true ); +port ( + operation : in std_logic_vector(2 downto 0); + enable : in std_logic; + + n_in : in std_logic; + v_in : in std_logic; + z_in : in std_logic; + c_in : in std_logic; + d_in : in std_logic; + + data_a : in std_logic_vector(7 downto 0); + data_b : in std_logic_vector(7 downto 0); + + n_out : out std_logic; + v_out : out std_logic; + z_out : out std_logic; + c_out : out std_logic; + + data_out : out std_logic_vector(7 downto 0)); + +end alu; + +architecture gideon of alu is + signal data_out_i : std_logic_vector(7 downto 0) := X"FF"; + signal zero : std_logic; + signal sum_c : std_logic; + signal sum_n : std_logic; + signal sum_z : std_logic; + signal sum_v : std_logic; + signal sum_result : std_logic_vector(7 downto 0) := X"FF"; + signal oper4 : std_logic_vector(3 downto 0); +begin + +-- ORA $nn AND $nn EOR $nn ADC $nn STA $nn LDA $nn CMP $nn SBC $nn + + with oper4 select data_out_i <= + data_a or data_b when "1000", + data_a and data_b when "1001", + data_a xor data_b when "1010", + sum_result when "1011" | "1110" | "1111", + data_b when others; + + zero <= '1' when data_out_i = X"00" else '0'; + + sum: process(data_a, data_b, c_in, operation, d_in) + variable b : std_logic_vector(7 downto 0); + variable sum_l : std_logic_vector(4 downto 0); + variable sum_h : std_logic_vector(4 downto 0); + begin + -- for subtraction invert second operand + if operation(2)='1' then -- invert b + b := not data_b; + else + b := data_b; + end if; + + -- sum_l(4) = carry of lower end, carry in is masked to '1' for CMP + sum_l := ('0' & data_a(3 downto 0)) + ('0' & b(3 downto 0)) + (c_in or not operation(0)); + sum_h := ('0' & data_a(7 downto 4)) + ('0' & b(7 downto 4)) + sum_l(4); + + if sum_l(3 downto 0)="0000" and sum_h(3 downto 0)="0000" then + sum_z <= '1'; + else + sum_z <= '0'; + end if; + + sum_n <= sum_h(3); + sum_c <= sum_h(4); + sum_v <= (sum_h(3) xor data_a(7)) and (sum_h(3) xor data_b(7) xor operation(2)); + + -- fix up in decimal mode (not for CMP!) + if d_in='1' and support_bcd then + if operation(2)='0' then -- ADC + sum_h := ('0' & data_a(7 downto 4)) + ('0' & b(7 downto 4)); + + if sum_l(4) = '1' or sum_l(3 downto 2)="11" or sum_l(3 downto 1)="101" then -- >9 (10-11, 12-15) + sum_l := sum_l + ('0' & X"6"); + sum_l(4) := '1'; + end if; + + -- negative when sum_h + sum_l(4) = 8 + sum_h := sum_h + sum_l(4); + sum_n <= sum_h(3); + + if sum_h(4) = '1' or sum_h(3 downto 2)="11" or sum_h(3 downto 1)="101" then -- + sum_h := sum_h + 6; + sum_c <= '1'; + end if; + + -- carry and overflow are output after fix +-- sum_c <= sum_h(4); +-- sum_v <= (sum_h(3) xor data_a(7)) and (sum_h(3) xor data_b(7) xor operation(2)); + + elsif operation(0)='1' then -- SBC + -- flags are not adjusted in subtract mode + if sum_l(4) = '0' then + sum_l := sum_l - 6; + end if; + if sum_h(4) = '0' then + sum_h := sum_h - 6; + end if; + end if; + end if; + + sum_result <= sum_h(3 downto 0) & sum_l(3 downto 0); + end process; + + oper4 <= enable & operation; + + with oper4 select c_out <= + sum_c when "1011" | "1111" | "1110", + c_in when others; + + with oper4 select z_out <= + sum_z when "1011" | "1111" | "1110", + zero when "1000" | "1001" | "1010" | "1101", + z_in when others; + + with oper4 select n_out <= + sum_n when "1011" | "1111", + data_out_i(7) when "1000" | "1001" | "1010" | "1101" | "1110", + n_in when others; + + with oper4 select v_out <= + sum_v when "1011" | "1111", + v_in when others; + + data_out <= data_out_i; +end gideon; \ No newline at end of file diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/bit_cpx_cpy.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/bit_cpx_cpy.vhd new file mode 100644 index 00000000..7396a509 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/bit_cpx_cpy.vhd @@ -0,0 +1,66 @@ + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity bit_cpx_cpy is +port ( + operation : in std_logic_vector(2 downto 0); + enable : in std_logic := '1'; -- instruction(1 downto 0)="00" + + n_in : in std_logic; + v_in : in std_logic; + z_in : in std_logic; + c_in : in std_logic; + + data_in : in std_logic_vector(7 downto 0); + a_reg : in std_logic_vector(7 downto 0); + x_reg : in std_logic_vector(7 downto 0); + y_reg : in std_logic_vector(7 downto 0); + + n_out : out std_logic; + v_out : out std_logic; + z_out : out std_logic; + c_out : out std_logic ); + +end bit_cpx_cpy; + +architecture gideon of bit_cpx_cpy is + signal reg : std_logic_vector(7 downto 0) := (others => '0'); + signal diff : std_logic_vector(8 downto 0) := (others => '0'); + signal zero_cmp : std_logic; + signal zero_ld : std_logic; + signal zero_bit : std_logic; + + signal oper4 : std_logic_vector(3 downto 0); +begin +-- *** BIT *** *** STY LDY CPY CPX + reg <= x_reg when operation(0)='1' else y_reg; + + diff <= ('1' & reg) - ('0' & data_in); + zero_cmp <= '1' when diff(7 downto 0)=X"00" else '0'; + zero_ld <= '1' when data_in=X"00" else '0'; + zero_bit <= '1' when (data_in and a_reg)=X"00" else '0'; + + oper4 <= enable & operation; + + with oper4 select c_out <= + diff(8) when "1110" | "1111", -- CPX / CPY + c_in when others; + + with oper4 select z_out <= + zero_cmp when "1110" | "1111", -- CPX / CPY + zero_ld when "1101", + zero_bit when "1001", + z_in when others; + + with oper4 select n_out <= + diff(7) when "1110" | "1111", -- CPX / CPY + data_in(7) when "1101" | "1001", -- LDY / BIT + n_in when others; + + with oper4 select v_out <= + data_in(6) when "1001", -- BIT + v_in when others; + +end gideon; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/data_oper.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/data_oper.vhd new file mode 100644 index 00000000..ca9a1573 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/data_oper.vhd @@ -0,0 +1,193 @@ + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +library work; +use work.pkg_6502_decode.all; + +-- this module puts the alu, shifter and bit/compare unit together + +entity data_oper is +generic ( + support_bcd : boolean := true ); +port ( + inst : in std_logic_vector(7 downto 0); + + n_in : in std_logic; + v_in : in std_logic; + z_in : in std_logic; + c_in : in std_logic; + d_in : in std_logic; + i_in : in std_logic; + + data_in : in std_logic_vector(7 downto 0); + a_reg : in std_logic_vector(7 downto 0); + x_reg : in std_logic_vector(7 downto 0); + y_reg : in std_logic_vector(7 downto 0); + s_reg : in std_logic_vector(7 downto 0); + + alu_out : out std_logic_vector(7 downto 0); + mem_out : out std_logic_vector(7 downto 0); + impl_out : out std_logic_vector(7 downto 0); + + set_a : out std_logic; + set_x : out std_logic; + set_y : out std_logic; + set_s : out std_logic; + + n_out : out std_logic; + v_out : out std_logic; + z_out : out std_logic; + c_out : out std_logic; + d_out : out std_logic; + i_out : out std_logic ); +end data_oper; + +architecture gideon of data_oper is + signal shift_sel : std_logic_vector(1 downto 0) := "00"; + signal shift_din : std_logic_vector(7 downto 0) := X"00"; + signal shift_dout: std_logic_vector(7 downto 0) := X"00"; + signal alu_data_a: std_logic_vector(7 downto 0) := X"00"; + signal row0_n : std_logic; + signal row0_v : std_logic; + signal row0_z : std_logic; + signal row0_c : std_logic; + + signal shft_n : std_logic; + signal shft_z : std_logic; + signal shft_c : std_logic; + + signal alu_n : std_logic; + signal alu_v : std_logic; + signal alu_z : std_logic; + signal alu_c : std_logic; + + signal impl_n : std_logic; + signal impl_z : std_logic; + signal impl_c : std_logic; + signal impl_v : std_logic; + signal impl_i : std_logic; + signal impl_d : std_logic; + + signal shift_en : std_logic; + signal alu_en : std_logic; + signal impl_en : std_logic; + signal impl_flags: boolean; +begin + shift_sel <= shifter_in_select(inst); + with shift_sel select shift_din <= + data_in when "01", + a_reg when "10", + data_in and a_reg when "11", + X"FF" when others; + + shift_en <= '1' when is_shift(inst) else '0'; + alu_en <= '1' when is_alu(inst) else '0'; + + row0: entity work.bit_cpx_cpy + port map ( + operation => inst(7 downto 5), + enable => '1', + + n_in => n_in, + v_in => v_in, + z_in => z_in, + c_in => c_in, + + data_in => data_in, + a_reg => a_reg, + x_reg => x_reg, + y_reg => y_reg, + + n_out => row0_n, + v_out => row0_v, + z_out => row0_z, + c_out => row0_c ); + + shft: entity work.shifter + port map ( + operation => inst(7 downto 5), + enable => shift_en, + + c_in => c_in, + n_in => n_in, + z_in => z_in, + + data_in => shift_din, + + c_out => shft_c, + n_out => shft_n, + z_out => shft_z, + + data_out => shift_dout ); + + alu_data_a <= a_reg and x_reg when x_to_alu(inst) else a_reg; + + alu1: entity work.alu + generic map ( + support_bcd => support_bcd ) + port map ( + operation => inst(7 downto 5), + enable => alu_en, + + n_in => shft_n, + v_in => v_in, + z_in => shft_z, + c_in => shft_c, + d_in => d_in, + + data_a => alu_data_a, + data_b => shift_dout, + + n_out => alu_n, + v_out => alu_v, + z_out => alu_z, + c_out => alu_c, + + data_out => alu_out ); + + mem_out <= shift_dout; + + impl_en <= '1' when is_implied(inst) else '0'; + impl_flags <= is_implied(inst) and (inst(4)='1' or inst(7)='1'); + + impl: entity work.implied + port map ( + inst => inst, + enable => impl_en, + + c_in => c_in, + i_in => i_in, + n_in => n_in, + z_in => z_in, + d_in => d_in, + v_in => v_in, + + reg_a => a_reg, + reg_x => x_reg, + reg_y => y_reg, + reg_s => s_reg, + + i_out => impl_i, + d_out => impl_d, + c_out => impl_c, + n_out => impl_n, + z_out => impl_z, + v_out => impl_v, + + set_a => set_a, + set_x => set_x, + set_y => set_y, + set_s => set_s, + + data_out => impl_out ); + + n_out <= impl_n when impl_flags else row0_n when inst(1 downto 0)="00" else alu_n; + v_out <= impl_v when impl_flags else row0_v when inst(1 downto 0)="00" else alu_v; + z_out <= impl_z when impl_flags else row0_z when inst(1 downto 0)="00" else alu_z; + c_out <= impl_c when impl_flags else row0_c when inst(1 downto 0)="00" else alu_c; + i_out <= impl_i when impl_flags else i_in; + d_out <= impl_d when impl_flags else d_in; + +end gideon; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/implied.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/implied.vhd new file mode 100644 index 00000000..0a11aebb --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/implied.vhd @@ -0,0 +1,114 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity implied is +port ( + inst : in std_logic_vector(7 downto 0); + enable : in std_logic; + + c_in : in std_logic; + i_in : in std_logic; + n_in : in std_logic; + z_in : in std_logic; + d_in : in std_logic; + v_in : in std_logic; + + reg_a : in std_logic_vector(7 downto 0); + reg_x : in std_logic_vector(7 downto 0); + reg_y : in std_logic_vector(7 downto 0); + reg_s : in std_logic_vector(7 downto 0); + + c_out : out std_logic; + i_out : out std_logic; + n_out : out std_logic; + z_out : out std_logic; + d_out : out std_logic; + v_out : out std_logic; + + set_a : out std_logic; + set_x : out std_logic; + set_y : out std_logic; + set_s : out std_logic; + + data_out : out std_logic_vector(7 downto 0)); + +end implied; + +architecture gideon of implied is + type t_int4_array is array(natural range <>) of integer range 0 to 3; + -- ROMS for the upper (negative) implied instructions + constant reg_sel_rom : t_int4_array(0 to 15) := ( 2,0,2,1,1,0,1,1,2,0,2,1,1,3,1,1 ); -- 0=A, 1=X, 2=Y, 3=S + constant decr_rom : std_logic_vector(0 to 15) := "1000001000000000"; + constant incr_rom : std_logic_vector(0 to 15) := "0011000000000000"; + constant nz_flags : std_logic_vector(0 to 15) := "1111111010000100"; + constant v_flag : std_logic_vector(0 to 15) := "0000000001000000"; + constant d_flag : std_logic_vector(0 to 15) := "0000000000110000"; + constant set_a_rom : std_logic_vector(0 to 15) := "0000100010000000"; + constant set_x_rom : std_logic_vector(0 to 15) := "0001011000000100"; + constant set_y_rom : std_logic_vector(0 to 15) := "1110000000000000"; + constant set_s_rom : std_logic_vector(0 to 15) := "0000000000001000"; + + -- ROMS for the lower (positive) implied instructions + constant shft_rom : std_logic_vector(0 to 15) := "0000111100000000"; + constant c_flag : std_logic_vector(0 to 15) := "0000000011000000"; + constant i_flag : std_logic_vector(0 to 15) := "0000000000110000"; + + signal selected_reg : std_logic_vector(7 downto 0) := X"00"; + signal operation : integer range 0 to 15; + signal reg_sel : integer range 0 to 3; + signal result : std_logic_vector(7 downto 0) := X"00"; + signal add : std_logic_vector(7 downto 0) := X"00"; + signal carry : std_logic := '0'; + signal zero : std_logic := '0'; + + signal n_hi : std_logic; + signal z_hi : std_logic; + signal v_hi : std_logic; + signal d_hi : std_logic; + + signal n_lo : std_logic; + signal z_lo : std_logic; + signal c_lo : std_logic; + signal i_lo : std_logic; +begin + operation <= conv_integer(inst(4) & inst(1) & inst(6 downto 5)); + reg_sel <= reg_sel_rom(operation); + with reg_sel select selected_reg <= + reg_a when 0, + reg_x when 1, + reg_y when 2, + reg_s when others; + + add <= (others => decr_rom(operation)); + carry <= incr_rom(operation); + + result <= selected_reg + add + carry; + + zero <= '1' when result = X"00" else '0'; + + data_out <= result; + + n_hi <= result(7) when nz_flags(operation)='1' else n_in; + z_hi <= zero when nz_flags(operation)='1' else z_in; + v_hi <= '0' when v_flag(operation)='1' else v_in; + d_hi <= inst(5) when d_flag(operation)='1' else d_in; + -- in high, C and I are never set + + c_lo <= inst(5) when c_flag(operation)='1' else c_in; + i_lo <= inst(5) when i_flag(operation)='1' else i_in; + -- in low, V, N, Z and D are never set + + set_a <= set_a_rom(operation) and inst(7) and enable; + set_x <= set_x_rom(operation) and inst(7) and enable; + set_y <= set_y_rom(operation) and inst(7) and enable; + set_s <= set_s_rom(operation) and inst(7) and enable; + + c_out <= c_in when inst(7)='1' else c_lo; -- C can only be set in lo + i_out <= i_in when inst(7)='1' else i_lo; -- I can only be set in lo + v_out <= v_hi when inst(7)='1' else v_in; -- V can only be set in hi + d_out <= d_hi when inst(7)='1' else d_in; -- D can only be set in hi + n_out <= n_hi when inst(7)='1' else n_in; -- N can only be set in hi + z_out <= z_hi when inst(7)='1' else z_in; -- Z can only be set in hi + +end gideon; \ No newline at end of file diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_decode.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_decode.vhd new file mode 100644 index 00000000..00597c12 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_decode.vhd @@ -0,0 +1,248 @@ + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +package pkg_6502_decode is + + function is_absolute(inst: std_logic_vector(7 downto 0)) return boolean; + function is_abs_jump(inst: std_logic_vector(7 downto 0)) return boolean; + function is_immediate(inst: std_logic_vector(7 downto 0)) return boolean; + function is_implied(inst: std_logic_vector(7 downto 0)) return boolean; + function is_stack(inst: std_logic_vector(7 downto 0)) return boolean; + function is_push(inst: std_logic_vector(7 downto 0)) return boolean; + function is_zeropage(inst: std_logic_vector(7 downto 0)) return boolean; + function is_indirect(inst: std_logic_vector(7 downto 0)) return boolean; + function is_relative(inst: std_logic_vector(7 downto 0)) return boolean; + function is_load(inst: std_logic_vector(7 downto 0)) return boolean; + function is_store(inst: std_logic_vector(7 downto 0)) return boolean; + function is_shift(inst: std_logic_vector(7 downto 0)) return boolean; + function is_alu(inst: std_logic_vector(7 downto 0)) return boolean; + function is_rmw(inst: std_logic_vector(7 downto 0)) return boolean; + function is_jump(inst: std_logic_vector(7 downto 0)) return boolean; + function is_postindexed(inst: std_logic_vector(7 downto 0)) return boolean; + function is_illegal(inst: std_logic_vector(7 downto 0)) return boolean; + + function stack_idx(inst: std_logic_vector(7 downto 0)) return std_logic_vector; + + constant c_stack_idx_brk : std_logic_vector(1 downto 0) := "00"; + constant c_stack_idx_jsr : std_logic_vector(1 downto 0) := "01"; + constant c_stack_idx_rti : std_logic_vector(1 downto 0) := "10"; + constant c_stack_idx_rts : std_logic_vector(1 downto 0) := "11"; + + function select_index_y (inst: std_logic_vector(7 downto 0)) return boolean; + function store_a_from_alu (inst: std_logic_vector(7 downto 0)) return boolean; + function load_a (inst: std_logic_vector(7 downto 0)) return boolean; + function load_x (inst: std_logic_vector(7 downto 0)) return boolean; + function load_y (inst: std_logic_vector(7 downto 0)) return boolean; + function shifter_in_select (inst: std_logic_vector(7 downto 0)) return std_logic_vector; + function x_to_alu (inst: std_logic_vector(7 downto 0)) return boolean; +end; + +package body pkg_6502_decode is + + function is_absolute(inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 4320 = X11X | 1101 + if inst(3 downto 2)="11" then + return true; + elsif inst(4 downto 2)="110" and inst(0)='1' then + return true; + end if; + return false; + end function; + + function is_jump(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return inst(7 downto 6)="01" and inst(3 downto 0)=X"C"; + end function; + + function is_immediate(inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 76543210 = 1XX000X0 + if inst(7)='1' and inst(4 downto 2)="000" and inst(0)='0' then + return true; + -- 76543210 = XXX010X1 + elsif inst(4 downto 2)="010" and inst(0)='1' then + return true; + end if; + return false; + end function; + + function is_implied(inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 4320 = X100 + return inst(3 downto 2)="10" and inst(0)='0'; + end function; + + function is_stack(inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 76543210 + -- 0xx0x000 + return inst(7)='0' and inst(4)='0' and inst(2 downto 0)="000"; + end function; + + function is_push(inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- we already know it's a stack operation, so only the direction is important + return inst(5)='0'; + end function; + + function is_zeropage(inst: std_logic_vector(7 downto 0)) return boolean is + begin + if inst(3 downto 2)="01" then + return true; + elsif inst(3 downto 2)="00" and inst(0)='1' then + return true; + end if; + return false; + end function; + + function is_indirect(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return (inst(3 downto 2)="00" and inst(0)='1'); + end function; + + function is_relative(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return (inst(4 downto 0)="10000"); + end function; + + function is_store(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return (inst(7 downto 5)="100"); + end function; + + function is_shift(inst: std_logic_vector(7 downto 0)) return boolean is + begin + if inst(7)='1' and inst(4 downto 2)="010" then + return false; + end if; + return (inst(1)='1'); + end function; + + function is_alu(inst: std_logic_vector(7 downto 0)) return boolean is + begin + if inst(7)='0' and inst(4 downto 1)="0101" then + return false; + end if; + return (inst(0)='1'); + end function; + + function is_load(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return not is_store(inst) and not is_rmw(inst); + end function; + + function is_rmw(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return inst(1)='1' and inst(7 downto 6)/="10"; + end function; + + function is_abs_jump(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return is_jump(inst) and inst(5)='0'; + end function; + + function is_postindexed(inst: std_logic_vector(7 downto 0)) return boolean is + begin + return inst(4)='1'; + end function; + + function stack_idx(inst: std_logic_vector(7 downto 0)) return std_logic_vector is + begin + return inst(6 downto 5); + end function; + + function select_index_y (inst: std_logic_vector(7 downto 0)) return boolean is + begin + if inst(4)='1' and inst(2)='0' and inst(0)='1' then -- XXX1X0X1 + return true; + elsif inst(7 downto 6)="10" and inst(2 downto 1)="11" then -- 10XXX11X + return true; + end if; + return false; + end function; + +-- function flags_bit_group (inst: std_logic_vector(7 downto 0)) return boolean is +-- begin +-- return inst(2 downto 0)="100"; +-- end function; +-- +-- function flags_alu_group (inst: std_logic_vector(7 downto 0)) return boolean is +-- begin +-- return inst(1 downto 0)="01"; -- could also choose not to look at bit 1 (overlap) +-- end function; +-- +-- function flags_shift_group (inst: std_logic_vector(7 downto 0)) return boolean is +-- begin +-- return inst(1 downto 0)="10"; -- could also choose not to look at bit 0 (overlap) +-- end function; + + function load_a (inst: std_logic_vector(7 downto 0)) return boolean is + begin + return (inst = X"68"); + end function; + + function store_a_from_alu (inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 0XXXXXX1 or alu operations "lo" + -- 1X100001 or alu operations "hi" (except store and cmp) + -- 0XX01010 (implied) + return (inst(7)='0' and inst(4 downto 0)="01010") or + (inst(7)='0' and inst(0)='1') or + (inst(7)='1' and inst(0)='1' and inst(5)='1'); + end function; + + function load_x (inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 101XXX1X or 1100101- (for SAX #) + if inst(7 downto 1)="1100101" then + return true; + end if; + return inst(7 downto 5)="101" and inst(1)='1' and not is_implied(inst); + end function; + + function load_y (inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 101XXX00 + return inst(7 downto 5)="101" and inst(1 downto 0)="00" and not is_implied(inst); + end function; + + function shifter_in_select (inst: std_logic_vector(7 downto 0)) return std_logic_vector is + begin + -- 00 = none, 01 = memory, 10 = A, 11 = A & M + if inst(4 downto 2)="010" and inst(7)='0' then + return inst(1 downto 0); + end if; + return "01"; + end function; + +-- function shifter_in_select (inst: std_logic_vector(7 downto 0)) return std_logic_vector is +-- begin +-- -- 0=memory, 1=A +-- if inst(4 downto 1)="0101" and inst(7)='0' then +-- return "01"; +-- end if; +-- return "10"; +-- end function; + + function is_illegal (inst: std_logic_vector(7 downto 0)) return boolean is + type t_my16bit_array is array(natural range <>) of std_logic_vector(15 downto 0); + constant c_illegal_map : t_my16bit_array(0 to 15) := ( + X"989C", X"9C9C", X"888C", X"9C9C", X"889C", X"9C9C", X"889C", X"9C9C", + X"8A8D", X"D88C", X"8888", X"888C", X"888C", X"9C9C", X"888C", X"9C9C" ); + variable row : std_logic_vector(15 downto 0); + begin + row := c_illegal_map(conv_integer(inst(7 downto 4))); + return (row(conv_integer(inst(3 downto 0))) = '1'); + end function; + + function x_to_alu (inst: std_logic_vector(7 downto 0)) return boolean is + begin + -- 1-00101- 8A,8B,CA,CB + return inst(5 downto 1)="00101" and inst(7)='1'; + end function; + +end; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_defs.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_defs.vhd new file mode 100644 index 00000000..77b99fe9 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_defs.vhd @@ -0,0 +1,18 @@ + +library ieee; +use ieee.std_logic_1164.all; + +package pkg_6502_defs is + + subtype t_amux is integer range 0 to 3; + constant c_amux_vector : t_amux := 0; + constant c_amux_addr : t_amux := 1; + constant c_amux_stack : t_amux := 2; + constant c_amux_pc : t_amux := 3; + + type t_pc_oper is (keep, increment, copy, from_alu); + type t_adl_oper is (keep, increment, add_idx, load_bus, copy_dreg); + type t_adh_oper is (keep, increment, clear, load_bus); + type t_sp_oper is (keep, increment, decrement); + type t_dout_mux is (reg_d, reg_accu, reg_axy, reg_flags, reg_pcl, reg_pch, shift_res); +end; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_opcodes.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_opcodes.vhd new file mode 100644 index 00000000..a8d30516 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/pkg_6502_opcodes.vhd @@ -0,0 +1,88 @@ + +package pkg_6502_opcodes is + +type t_opcode_array is array(0 to 255) of string(1 to 13); + +constant opcode_array : t_opcode_array := ( + + "BRK ", "ORA ($nn,X) ", "HLT* ", "ASO*($nn,X) ", + "BOT*$nn ", "ORA $nn ", "ASL $nn ", "ASO*$nn ", + "PHP ", "ORA # ", "ASL A ", "ORA*# ", + "BOT*$nnnnn ", "ORA $nnnn ", "ASL $nnnn ", "ASO*$nnnn ", + + "BPL rel ", "ORA ($nn),Y ", "HLT* ", "ASO*($nn),Y ", + "BOT*$nn,X ", "ORA $nn,X ", "ASL $nn,X ", "ASO*$nn,X ", + "CLC ", "ORA $nnnn,Y ", "NOP* ", "ASO*$nnnn,Y ", + "BOT*$nnnn,X ", "ORA $nnnn,X ", "ASL $nnnn,X ", "ASO*$nnnn,X ", + + "JSR $nnnn ", "AND ($nn,X) ", "HLT* ", "RLA*($nn,X) ", + "BIT $nn ", "AND $nn ", "ROL $nn ", "RLA*$nn ", + "PLP ", "AND # ", "ROL A ", "AND*# ", + "BIT $nnnn ", "AND $nnnn ", "ROL $nnnn ", "RLA*$nnnn ", + + "BMI rel ", "AND ($nn),Y ", "HLT* ", "RLA*($nn),Y ", + "BIT*$nn,X ", "AND $nn,X ", "ROL $nn,X ", "RLA*$nn,X ", + "SEC ", "AND $nnnn,Y ", "NOP* ", "RLA*$nnnn,Y ", + "BIT*$nnnn,X ", "AND $nnnn,X ", "ROL $nnnn,X ", "RLA*$nnnn,X ", + + "RTI ", "EOR ($nn,X) ", "HLT* ", "LSE*($nn,X) ", + "RDM* ", "EOR $nn ", "LSR $nn ", "LSE*$nn ", + "PHA ", "EOR # ", "LSR A ", "EOR*# ", + "JMP $nnnn ", "EOR $nnnn ", "LSR $nnnn ", "LSE*$nnnn ", + + "BVC rel ", "EOR ($nn),Y ", "HLT* ", "LSE*($nn),Y ", + "RDM* ", "EOR $nn,X ", "LSR $nn,X ", "LSE*$nn,X ", + "CLI ", "EOR $nnnn,Y ", "NOP* ", "LSE*$nnnn,Y ", + "JMP*$nnnn ", "EOR $nnnn,X ", "LSR $nnnn,X ", "LSE*$nnnn,X ", + + "RTS ", "ADC ($nn,X) ", "HLT* ", "RRA*($nn,X) ", + "RDM* ", "ADC $nn ", "ROR $nn ", "RRA*$nn ", + "PLA ", "ADC # ", "ROR A ", "ADC*# ", + "JMP ($nnnn) ", "ADC $nnnn ", "ROR $nnnn ", "RRA*$nnnn ", + + "BVS rel ", "ADC ($nn),Y ", "HLT* ", "RRA*($nn),Y ", + "RDM* ", "ADC $nn,X ", "ROR $nn,X ", "RRA*$nn,X ", + "SEI ", "ADC $nnnn,Y ", "NOP* ", "RRA*$nnnn,Y ", + "JMP*($nnnn,X)", "ADC $nnnn,X ", "ROR $nnnn,X ", "RRA*$nnnn,X ", + + "SKB* ", "STA ($nn,X) ", "SKB* ", "AXS*($nn,X) ", + "STY $nn ", "STA $nn ", "STX $nn ", "AXS*$nn ", + "DEY ", "SKB* ", "TXA ", "???* ", + "STY $nnnn ", "STA $nnnn ", "STX $nnnn ", "AXS*$nnnn ", + + "BCC ", "STA ($nn),Y ", "HLT* ", "AXS*($nn),Y ", + "STY $nn,X ", "STA $nn,X ", "STX $nn,Y ", "AXS*$nn,Y ", + "TYA ", "STA $nnnn,Y ", "TXS ", "AXS*$nnnn,Y ", + "STY*$nnnn,X ", "STA $nnnn,X ", "STX*$nnnn,Y ", "AXS*$nnnn,Y ", + + "LDY # ", "LDA ($nn,X) ", "LDX # ", "LAX*($nn,X) ", + "LDY $nn ", "LDA $nn ", "LDX $nn ", "LAX*$nn ", + "TAY ", "LDA # ", "TAX ", "LAX*# ", + "LDY $nnnn ", "LDA $nnnn ", "LDX $nnnn ", "LAX*$nnnn ", + + "BCS ", "LDA ($nn),Y ", "HLT* ", "LAX*($nn),Y ", + "LDY $nn,X ", "LDA $nn,X ", "LDX $nn,Y ", "LAX*$nn,Y ", + "CLV ", "LDA $nnnn,Y ", "TSX ", "LAX*$nnnn,Y ", + "LDY $nnnn,X ", "LDA $nnnn,X ", "LDX $nnnn,Y ", "LAX*$nnnn,Y ", + + "CPY # ", "CMP ($nn,X) ", "SKB* ", "DCM*($nn,X) ", + "CPY $nn ", "CMP $nn ", "DEC $nn ", "DCM*$nn ", + "INY ", "CMP # ", "DEX ", "SAX*# (used!)", + "CPY $nnnn ", "CMP $nnnn ", "DEC $nnnn ", "DCM*$nnnn ", + + "BNE ", "CMP ($nn),Y ", "HLT* ", "DCM*($nn),Y ", + "RDM* ", "CMP $nn,X ", "DEC $nn,X ", "DCM*$nn,X ", + "CLD ", "CMP $nnnn,Y ", "NOP* ", "DCM*$nnnn,Y ", + "RDM*$nnnn,X ", "CMP $nnnn,X ", "DEC $nnnn,X ", "DCM*$nnnn,X ", + + "CPX # ", "SBC ($nn,X) ", "SKB* ", "INS*($nn,X) ", + "CPX $nn ", "SBC $nn ", "INC $nn ", "INS*$nn ", + "INX ", "SBC # ", "NOP ", "SBC*# ", + "CPX $nnnn ", "SBC $nnnn ", "INC $nnnn ", "INS*$nnnn ", + + "BEQ ", "SBC ($nn),Y ", "HLT* ", "INS*($nn),Y ", + "RDM* ", "SBC $nn,X ", "INC $nn,X ", "INS*$nn,X ", + "SED ", "SBC $nnnn,Y ", "NOP* ", "INS*$nnnn,Y ", + "RDM*$nnnn,X ", "SBC $nnnn,X ", "INC $nnnn,X ", "INS*$nnnn,X " ); + +end; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/proc_control.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/proc_control.vhd new file mode 100644 index 00000000..b27603bb --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/proc_control.vhd @@ -0,0 +1,472 @@ + +library ieee; +use ieee.std_logic_1164.all; + +library work; +use work.pkg_6502_defs.all; +use work.pkg_6502_decode.all; + +entity proc_control is +port ( + clock : in std_logic; + clock_en : in std_logic; + reset : in std_logic; + + interrupt : in std_logic; + i_reg : in std_logic_vector(7 downto 0); + index_carry : in std_logic; + pc_carry : in std_logic; + branch_taken : in boolean; + + sync : out std_logic; + dummy_cycle : out std_logic; + set_b : out std_logic; + latch_dreg : out std_logic; + copy_d2p : out std_logic; + reg_update : out std_logic; + rwn : out std_logic; + vect_bit : out std_logic := '0'; + a16 : out std_logic; + a_mux : out t_amux := c_amux_pc; + dout_mux : out t_dout_mux; + pc_oper : out t_pc_oper; + s_oper : out t_sp_oper; + adl_oper : out t_adl_oper; + adh_oper : out t_adh_oper ); + +end proc_control; + + +architecture gideon of proc_control is + + type t_state is (fetch, decode, absolute, abs_hi, abs_fix, branch, branch_fix, + indir1, indir2, jump_sub, jump, retrn, rmw1, rmw2, vector, startup, + zp, zp_idx, zp_indir, push1, push2, push3, pull1, pull2, pull3 ); + + signal state : t_state; + signal next_state : t_state; + + signal next_cp_p : std_logic; + signal next_rwn : std_logic; + signal next_dreg : std_logic; + signal next_amux : t_amux; + signal next_dout : t_dout_mux; + signal next_set_b : std_logic; + signal next_dummy : std_logic; + signal vectoring : std_logic; +begin + -- combinatroial process + process(state, i_reg, index_carry, pc_carry, branch_taken, interrupt, vectoring) + variable v_stack_idx : std_logic_vector(1 downto 0); + begin + -- defaults + sync <= '0'; + pc_oper <= increment; + next_amux <= c_amux_pc; + next_rwn <= '1'; + next_state <= state; + adl_oper <= keep; + adh_oper <= keep; + s_oper <= keep; + next_dreg <= '1'; + next_cp_p <= '0'; + next_dout <= reg_d; + next_set_b <= '0'; + next_dummy <= '0'; + + v_stack_idx := stack_idx(i_reg); + + case state is + when fetch => + sync <= '1'; + + if interrupt='1' then + pc_oper <= keep; + next_rwn <= '0'; + next_dout <= reg_pch; + next_state <= push1; + next_amux <= c_amux_stack; + else + next_state <= decode; + next_set_b <= '1'; + end if; + + when decode => + adl_oper <= load_bus; + adh_oper <= clear; + + if is_absolute(i_reg) then + if is_abs_jump(i_reg) then + next_state <= jump; + else + next_state <= absolute; + end if; + elsif is_implied(i_reg) then + pc_oper <= keep; + if is_stack(i_reg) then -- PHP, PLP, PHA, PLA + next_amux <= c_amux_stack; + case v_stack_idx is + when "00" => -- PHP + next_state <= push3; + next_rwn <= '0'; + next_dout <= reg_flags; + + when "10" => -- PHA + next_state <= push3; + next_rwn <= '0'; + next_dout <= reg_accu; + + when others => + next_state <= pull1; + end case; + else + next_state <= fetch; + end if; + elsif is_zeropage(i_reg) then + next_amux <= c_amux_addr; + if is_indirect(i_reg) then + if is_postindexed(i_reg) then + next_state <= zp_indir; + else + next_state <= zp; + next_dummy <= '1'; + end if; + else + next_state <= zp; + if is_store(i_reg) and not is_postindexed(i_reg) then + next_rwn <= '0'; + next_dout <= reg_axy; + end if; + end if; + elsif is_relative(i_reg) then + next_state <= branch; + elsif is_stack(i_reg) then -- non-implied stack operations like BRK, JSR, RTI and RTS + next_amux <= c_amux_stack; + case v_stack_idx is + when c_stack_idx_brk => +-- next_set_b <= '1'; + next_rwn <= '0'; + next_dout <= reg_pch; + next_state <= push1; + when c_stack_idx_jsr => + next_dreg <= '0'; + next_dout <= reg_pch; + next_state <= jump_sub; + when c_stack_idx_rti => + next_state <= pull1; + when c_stack_idx_rts => + next_state <= pull2; + when others => + null; + end case; + elsif is_immediate(i_reg) then + next_state <= fetch; + end if; + + when absolute => + next_state <= abs_hi; + next_amux <= c_amux_addr; + adh_oper <= load_bus; + if is_postindexed(i_reg) then + adl_oper <= add_idx; + elsif not is_zeropage(i_reg) then + if is_store(i_reg) then + next_rwn <='0'; + next_dout <= reg_axy; + end if; + end if; + if is_zeropage(i_reg) then + pc_oper <= keep; + else + pc_oper <= increment; + end if; + + when abs_hi => + pc_oper <= keep; + if is_postindexed(i_reg) then + if is_load(i_reg) and index_carry='0' then + next_amux <= c_amux_pc; + next_state <= fetch; + else + next_amux <= c_amux_addr; + next_state <= abs_fix; + if index_carry='1' then + adh_oper <= increment; + end if; + end if; + if is_store(i_reg) then + next_rwn <= '0'; + next_dout <= reg_axy; + end if; + else -- not post-indexed + if is_jump(i_reg) then + next_amux <= c_amux_addr; + next_state <= jump; + adl_oper <= increment; + elsif is_rmw(i_reg) then + next_rwn <= '0'; + next_dout <= reg_d; + next_dummy <= '1'; + next_state <= rmw1; + next_amux <= c_amux_addr; + else + next_state <= fetch; + next_amux <= c_amux_pc; + end if; + end if; + + when abs_fix => + pc_oper <= keep; + + if is_rmw(i_reg) then + next_state <= rmw1; + next_amux <= c_amux_addr; + next_rwn <= '0'; + next_dout <= reg_d; + next_dummy <= '1'; + else + next_state <= fetch; + next_amux <= c_amux_pc; + end if; + + when branch => + next_amux <= c_amux_pc; + if branch_taken then + pc_oper <= from_alu; -- add offset + next_state <= branch_fix; + else + pc_oper <= increment; + next_state <= decode; + sync <= '1'; + end if; + + when branch_fix => + next_amux <= c_amux_pc; + + if pc_carry='1' then + next_state <= fetch; + pc_oper <= keep; -- this will fix the PCH, since the carry is set + else + sync <= '1'; + next_state <= decode; + pc_oper <= increment; + end if; + + when indir1 => + pc_oper <= keep; + next_state <= indir2; + next_amux <= c_amux_addr; + adl_oper <= copy_dreg; + adh_oper <= load_bus; + + if is_store(i_reg) then + next_rwn <= '0'; + next_dout <= reg_axy; + end if; + + when indir2 => + pc_oper <= keep; + if is_rmw(i_reg) then + next_dummy <= '1'; + next_rwn <= '0'; + next_dout <= reg_d; + next_state <= rmw1; + next_amux <= c_amux_addr; + else + next_state <= fetch; + next_amux <= c_amux_pc; + end if; + + when jump_sub => + next_state <= push1; + pc_oper <= keep; + next_dout <= reg_pch; + next_rwn <= '0'; + next_dreg <= '0'; + next_amux <= c_amux_stack; + + when jump => + pc_oper <= copy; + next_amux <= c_amux_pc; + if is_stack(i_reg) and v_stack_idx=c_stack_idx_rts and vectoring='0' then + next_state <= retrn; + else + next_state <= fetch; + end if; + + when retrn => + pc_oper <= increment; + next_state <= fetch; + + when pull1 => + s_oper <= increment; + next_state <= pull2; + next_amux <= c_amux_stack; + pc_oper <= keep; + + when pull2 => + pc_oper <= keep; + if is_implied(i_reg) then + next_state <= fetch; + next_amux <= c_amux_pc; + next_cp_p <= not v_stack_idx(1); -- only for PLP + else -- it was a stack operation, but not implied (RTS/RTI) + s_oper <= increment; + next_state <= pull3; + next_amux <= c_amux_stack; + next_cp_p <= not v_stack_idx(0); -- only for RTI + end if; + + when pull3 => + pc_oper <= keep; + s_oper <= increment; + next_state <= jump; + next_amux <= c_amux_stack; + + when push1 => + pc_oper <= keep; + s_oper <= decrement; + next_state <= push2; + next_amux <= c_amux_stack; + next_rwn <= '0'; + next_dreg <= '0'; + next_dout <= reg_pcl; + + when push2 => + pc_oper <= keep; + s_oper <= decrement; + if (v_stack_idx=c_stack_idx_jsr) and vectoring='0' then + next_state <= jump; + next_amux <= c_amux_pc; + else + next_state <= push3; + next_rwn <= '0'; + next_dout <= reg_flags; + next_amux <= c_amux_stack; + end if; + + when push3 => + pc_oper <= keep; + s_oper <= decrement; + if is_implied(i_reg) and vectoring='0' then -- PHP, PHA + next_amux <= c_amux_pc; + next_state <= fetch; + else + next_state <= vector; + next_amux <= c_amux_vector; + end if; + + when rmw1 => + pc_oper <= keep; + next_state <= rmw2; + next_amux <= c_amux_addr; + next_rwn <= '0'; + next_dout <= shift_res; + + when rmw2 => + pc_oper <= keep; + next_state <= fetch; + next_amux <= c_amux_pc; + + when vector => + next_state <= jump; + pc_oper <= keep; + next_amux <= c_amux_vector; + + when startup => + next_state <= vector; + pc_oper <= keep; + next_amux <= c_amux_vector; + + when zp => + pc_oper <= keep; + if is_postindexed(i_reg) or is_indirect(i_reg) then + adl_oper <= add_idx; + next_state <= zp_idx; + next_amux <= c_amux_addr; + if is_postindexed(i_reg) and is_store(i_reg) then + next_rwn <= '0'; + next_dout <= reg_axy; + end if; + elsif is_rmw(i_reg) then + next_dummy <= '1'; + next_state <= rmw1; + next_amux <= c_amux_addr; + next_rwn <= '0'; + next_dout <= reg_d; + else + next_state <= fetch; + next_amux <= c_amux_pc; + end if; + + when zp_idx => + pc_oper <= keep; + if is_indirect(i_reg) then + next_state <= indir1; + adl_oper <= increment; + next_amux <= c_amux_addr; + elsif is_rmw(i_reg) then + next_state <= rmw1; + next_amux <= c_amux_addr; + next_rwn <= '0'; + next_dout <= reg_d; + else + next_state <= fetch; + next_amux <= c_amux_pc; + end if; + + when zp_indir => + pc_oper <= keep; + next_state <= absolute; + next_amux <= c_amux_addr; + adl_oper <= increment; + + when others => + null; + end case; + end process; + + reg_update <= '1' when (state = fetch) and vectoring='0' and + not is_stack(i_reg) and not is_relative(i_reg) else '0'; + + vect_bit <= '0' when state = vector else '1'; + + process(clock) + begin + if rising_edge(clock) then + if clock_en='1' then + state <= next_state; + a_mux <= next_amux; + dout_mux <= next_dout; + rwn <= next_rwn; + latch_dreg <= next_dreg and next_rwn; -- disable dreg latch for writes + copy_d2p <= next_cp_p; + set_b <= next_set_b; + dummy_cycle <= next_dummy; + + if next_amux = c_amux_vector or next_amux = c_amux_pc then + a16 <= '1'; + else + a16 <= '0'; + end if; + + if state = fetch then + vectoring <= interrupt; + end if; + end if; + if reset='1' then + a16 <= '1'; + state <= startup; --vector; + a_mux <= c_amux_vector; + rwn <= '1'; + latch_dreg <= '1'; + dout_mux <= reg_d; + copy_d2p <= '0'; + set_b <= '0'; + vectoring <= '0'; + dummy_cycle <= '0'; + end if; + end if; + end process; +end gideon; + diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/proc_core.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/proc_core.vhd new file mode 100644 index 00000000..5b429015 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/proc_core.vhd @@ -0,0 +1,233 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; + +library work; +use work.pkg_6502_defs.all; + +entity proc_core is +generic ( + vector_page : std_logic_vector(15 downto 4) := X"FFF"; + support_bcd : boolean := true ); +port( + clock : in std_logic; + clock_en : in std_logic; + reset : in std_logic; + + irq_n : in std_logic := '1'; + nmi_n : in std_logic := '1'; + so_n : in std_logic := '1'; + + sync_out : out std_logic; + pc_out : out std_logic_vector(15 downto 0); + inst_out : out std_logic_vector(7 downto 0); + addr_out : out std_logic_vector(16 downto 0); + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + read_write_n : out std_logic ); + +end proc_core; + +architecture structural of proc_core is + signal index_carry : std_logic; + signal pc_carry : std_logic; + signal branch_taken : boolean; + signal i_reg : std_logic_vector(7 downto 0); + signal d_reg : std_logic_vector(7 downto 0); + signal a_reg : std_logic_vector(7 downto 0); + signal x_reg : std_logic_vector(7 downto 0); + signal y_reg : std_logic_vector(7 downto 0); + signal s_reg : std_logic_vector(7 downto 0); + signal p_reg : std_logic_vector(7 downto 0); + + signal latch_dreg : std_logic; + signal reg_update : std_logic; + signal copy_d2p : std_logic; + signal sync : std_logic; + signal rwn : std_logic; + signal vect_bit : std_logic; + signal a_mux : t_amux; + signal pc_oper : t_pc_oper; + signal s_oper : t_sp_oper; + signal adl_oper : t_adl_oper; + signal adh_oper : t_adh_oper; + signal dout_mux : t_dout_mux; + + signal alu_out : std_logic_vector(7 downto 0); + signal mem_out : std_logic_vector(7 downto 0); + signal impl_out : std_logic_vector(7 downto 0); + + signal set_a : std_logic; + signal set_x : std_logic; + signal set_y : std_logic; + signal set_s : std_logic; + + signal vect_addr : std_logic_vector(3 downto 0); + signal interrupt : std_logic; + + signal new_flags : std_logic_vector(7 downto 0); + signal n_out : std_logic; + signal v_out : std_logic; + signal c_out : std_logic; + signal z_out : std_logic; + signal d_out : std_logic; + signal i_out : std_logic; + signal set_b : std_logic; + signal clear_b : std_logic; + signal a16 : std_logic; +begin + inst_out <= i_reg; -- for debug only + + new_flags(7) <= n_out; + new_flags(6) <= v_out; + new_flags(5) <= '1'; + new_flags(4) <= p_reg(4); + new_flags(3) <= d_out; + new_flags(2) <= i_out; + new_flags(1) <= z_out; + new_flags(0) <= c_out; + + ctrl: entity work.proc_control + port map ( + clock => clock, + clock_en => clock_en, + reset => reset, + + interrupt => interrupt, + i_reg => i_reg, + index_carry => index_carry, + pc_carry => pc_carry, + branch_taken => branch_taken, + + sync => sync, + latch_dreg => latch_dreg, + reg_update => reg_update, + set_b => set_b, + copy_d2p => copy_d2p, + vect_bit => vect_bit, + a16 => a16, + rwn => rwn, + a_mux => a_mux, + dout_mux => dout_mux, + pc_oper => pc_oper, + s_oper => s_oper, + adl_oper => adl_oper, + adh_oper => adh_oper ); + + oper: entity work.data_oper + generic map ( + support_bcd => support_bcd ) + port map ( + inst => i_reg, + + n_in => p_reg(7), + v_in => p_reg(6), + z_in => p_reg(1), + c_in => p_reg(0), + d_in => p_reg(3), + i_in => p_reg(2), + + data_in => d_reg, + a_reg => a_reg, + x_reg => x_reg, + y_reg => y_reg, + s_reg => s_reg, + + alu_out => alu_out, + mem_out => mem_out, + impl_out => impl_out, + + set_a => set_a, + set_x => set_x, + set_y => set_y, + set_s => set_s, + + n_out => n_out, + v_out => v_out, + z_out => z_out, + c_out => c_out, + d_out => d_out, + i_out => i_out ); + + regs: entity work.proc_registers + generic map ( + vector_page => vector_page ) + port map ( + clock => clock, + clock_en => clock_en, + reset => reset, + + -- package pins + data_in => data_in, + data_out => data_out, + so_n => so_n, + + -- data from "data_oper" + alu_data => alu_out, + mem_data => mem_out, + new_flags => new_flags, + + -- from implied handler + set_a => set_a, + set_x => set_x, + set_y => set_y, + set_s => set_s, + set_data => impl_out, + + -- from interrupt controller + vect_addr => vect_addr, + interrupt => interrupt, + set_b => set_b, + clear_b => clear_b, + + -- from processor state machine and decoder + sync => sync, + latch_dreg => latch_dreg, + vect_bit => vect_bit, + reg_update => reg_update, + copy_d2p => copy_d2p, + a_mux => a_mux, + dout_mux => dout_mux, + pc_oper => pc_oper, + s_oper => s_oper, + adl_oper => adl_oper, + adh_oper => adh_oper, + + -- outputs to processor state machine + i_reg => i_reg, + index_carry => index_carry, + pc_carry => pc_carry, + branch_taken => branch_taken, + + -- register outputs + addr_out => addr_out(15 downto 0), + + d_reg => d_reg, + a_reg => a_reg, + x_reg => x_reg, + y_reg => y_reg, + s_reg => s_reg, + p_reg => p_reg, + pc_out => pc_out ); + + intr: entity work.proc_interrupt + port map ( + clock => clock, + clock_en => clock_en, + reset => reset, + + irq_n => irq_n, + nmi_n => nmi_n, + + i_flag => p_reg(2), + clear_b => clear_b, + + vect_bit => vect_bit, + interrupt => interrupt, + vect_addr => vect_addr ); + + read_write_n <= rwn; + addr_out(16) <= a16; + sync_out <= sync; +end structural; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/proc_interrupt.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/proc_interrupt.vhd new file mode 100644 index 00000000..baba8be8 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/proc_interrupt.vhd @@ -0,0 +1,83 @@ +library ieee; +use ieee.std_logic_1164.all; + +entity proc_interrupt is +port ( + clock : in std_logic; + clock_en : in std_logic; + reset : in std_logic; + + irq_n : in std_logic; + nmi_n : in std_logic; + + i_flag : in std_logic; + clear_b : out std_logic; + + vect_bit : in std_logic; + interrupt : out std_logic; + vect_addr : out std_logic_vector(3 downto 0) ); + +end proc_interrupt; + +architecture gideon of proc_interrupt is + signal irq_c : std_logic := '0'; + signal nmi_c : std_logic := '0'; + signal nmi_d : std_logic := '0'; + signal nmi_act : std_logic := '0'; + signal vect_h : std_logic_vector(1 downto 0) := "00"; + type state_t is (idle, do_irq, do_nmi); + signal state : state_t; +begin + vect_addr <= '1' & vect_h & vect_bit; + interrupt <= irq_c or nmi_act; + + process(clock) + begin + if rising_edge(clock) then + irq_c <= not (irq_n or i_flag); + nmi_c <= not nmi_n; + clear_b <= '0'; + + if clock_en='1' then + nmi_d <= nmi_c; + if nmi_d = '0' and nmi_c = '1' then -- edge + nmi_act <= '1'; + end if; + + case state is + when idle => + vect_h <= "11"; -- FE/FF + if nmi_act = '1' then + vect_h <= "01"; -- FA/FB + state <= do_nmi; + elsif irq_c = '1' then + state <= do_irq; + clear_b <= '1'; + end if; + + when do_irq => + if vect_bit='0' or irq_c='0' then + state <= idle; + end if; + + when do_nmi => + if vect_bit='0' then + nmi_act <= '0'; + state <= idle; + end if; + + when others => + state <= idle; + + end case; + end if; + + if reset='1' then + vect_h <= "10"; -- FC/FD 1100 + state <= do_nmi; + nmi_act <= '0'; + end if; + end if; + end process; + +end gideon; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/proc_registers.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/proc_registers.vhd new file mode 100644 index 00000000..f5b7d048 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/proc_registers.vhd @@ -0,0 +1,303 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.std_logic_arith.all; + +library work; +use work.pkg_6502_defs.all; +use work.pkg_6502_decode.all; + +entity proc_registers is +generic ( + vector_page : std_logic_vector(15 downto 4) := X"FFF" ); +port ( + clock : in std_logic; + clock_en : in std_logic; + reset : in std_logic; + + -- package pins + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + + so_n : in std_logic := '1'; + + -- data from "data_oper" + alu_data : in std_logic_vector(7 downto 0); + mem_data : in std_logic_vector(7 downto 0); + new_flags : in std_logic_vector(7 downto 0); + + -- from implied handler + set_a : in std_logic; + set_x : in std_logic; + set_y : in std_logic; + set_s : in std_logic; + set_data : in std_logic_vector(7 downto 0); + + -- interrupt pins + interrupt : in std_logic; + vect_addr : in std_logic_vector(3 downto 0); + set_b : in std_logic; + clear_b : in std_logic; + + -- from processor state machine and decoder + sync : in std_logic; -- latch ireg + latch_dreg : in std_logic; + vect_bit : in std_logic; + reg_update : in std_logic; + copy_d2p : in std_logic; + a_mux : in t_amux; + dout_mux : in t_dout_mux; + pc_oper : in t_pc_oper; + s_oper : in t_sp_oper; + adl_oper : in t_adl_oper; + adh_oper : in t_adh_oper; + + -- outputs to processor state machine + i_reg : out std_logic_vector(7 downto 0) := X"00"; + index_carry : out std_logic; + pc_carry : out std_logic; + branch_taken : out boolean; + + -- register outputs + addr_out : out std_logic_vector(15 downto 0) := X"FFFF"; + + d_reg : out std_logic_vector(7 downto 0) := X"00"; + a_reg : out std_logic_vector(7 downto 0) := X"00"; + x_reg : out std_logic_vector(7 downto 0) := X"00"; + y_reg : out std_logic_vector(7 downto 0) := X"00"; + s_reg : out std_logic_vector(7 downto 0) := X"00"; + p_reg : out std_logic_vector(7 downto 0) := X"00"; + pc_out : out std_logic_vector(15 downto 0) ); +end proc_registers; + +architecture gideon of proc_registers is +-- signal a_reg : std_logic_vector(7 downto 0); + signal dreg : std_logic_vector(7 downto 0) := X"00"; + signal a_reg_i : std_logic_vector(7 downto 0) := X"00"; + signal x_reg_i : std_logic_vector(7 downto 0) := X"00"; + signal y_reg_i : std_logic_vector(7 downto 0) := X"00"; + signal selected_idx : std_logic_vector(7 downto 0) := X"00"; + signal i_reg_i : std_logic_vector(7 downto 0) := X"00"; + signal s_reg_i : std_logic_vector(7 downto 0) := X"00"; + signal p_reg_i : std_logic_vector(7 downto 0) := X"30"; + signal pcl, pch : std_logic_vector(7 downto 0) := X"FF"; + signal adl, adh : std_logic_vector(7 downto 0) := X"00"; + signal pc_carry_i : std_logic; + signal pc_carry_d : std_logic; + signal branch_flag : std_logic; + signal reg_out : std_logic_vector(7 downto 0); + signal vect : std_logic_vector(3 downto 0) := "1111"; + signal dreg_zero : std_logic; + + alias C_flag : std_logic is p_reg_i(0); + alias Z_flag : std_logic is p_reg_i(1); + alias I_flag : std_logic is p_reg_i(2); + alias D_flag : std_logic is p_reg_i(3); + alias B_flag : std_logic is p_reg_i(4); + alias V_flag : std_logic is p_reg_i(6); + alias N_flag : std_logic is p_reg_i(7); + +begin + dreg_zero <= '1' when dreg=X"00" else '0'; + + process(clock) + variable pcl_t : std_logic_vector(8 downto 0); + variable adl_t : std_logic_vector(8 downto 0); + begin + if rising_edge(clock) then + if clock_en='1' then + -- Data Register + if latch_dreg='1' then + dreg <= data_in; + end if; + + -- Flags Register + if copy_d2p = '1' then + p_reg_i <= dreg; + elsif reg_update='1' then + p_reg_i <= new_flags; + end if; + + if vect_bit='0' then + I_flag <= '1'; + end if; + + if set_b='1' then + B_flag <= '1'; + elsif clear_b='1' then + B_flag <= '0'; + end if; + + if so_n='0' then -- only 1 bit is affected, so no syncronization needed + V_flag <= '1'; + end if; + + -- Instruction Register + if sync='1' then + i_reg_i <= data_in; + + -- Fix for PLA only :( + if load_a(i_reg_i) then + a_reg_i <= dreg; + N_flag <= dreg(7); + Z_flag <= dreg_zero; + end if; + end if; + + -- Logic for the Program Counter + pc_carry_i <= '0'; + case pc_oper is + when increment => + if pcl = X"FF" then + pch <= pch + 1; + end if; + pcl <= pcl + 1; + + when copy => + pcl <= dreg; + pch <= data_in; + + when from_alu => + pcl_t := ('0' & pcl) + (dreg(7) & dreg); -- sign extended 1 bit + pcl <= pcl_t(7 downto 0); + pc_carry_i <= pcl_t(8); + pc_carry_d <= dreg(7); + + when others => -- keep (and fix) + if pc_carry_i='1' then + if pc_carry_d='1' then + pch <= pch - 1; + else + pch <= pch + 1; + end if; + end if; + end case; + + -- Logic for the Address register + case adl_oper is + when increment => + adl <= adl + 1; + + when add_idx => + adl_t := ('0' & dreg) + ('0' & selected_idx); + adl <= adl_t(7 downto 0); + index_carry <= adl_t(8); + + when load_bus => + adl <= data_in; + + when copy_dreg => + adl <= dreg; + + when others => + null; + + end case; + + case adh_oper is + when increment => + adh <= adh + 1; + + when clear => + adh <= (others => '0'); + + when load_bus => + adh <= data_in; + + when others => + null; + end case; + + -- Logic for ALU register + if reg_update='1' then + if set_a='1' then + a_reg_i <= set_data; + elsif store_a_from_alu(i_reg_i) then + a_reg_i <= alu_data; + end if; + end if; + + -- Logic for Index registers + if reg_update='1' then + if set_x='1' then + x_reg_i <= set_data; + elsif load_x(i_reg_i) then + x_reg_i <= alu_data; --dreg; -- alu is okay, too (they should be the same) + end if; + end if; + + if reg_update='1' then + if set_y='1' then + y_reg_i <= set_data; + elsif load_y(i_reg_i) then + y_reg_i <= dreg; + end if; + end if; + + -- Logic for the Stack Pointer + if set_s='1' then + s_reg_i <= set_data; + else + case s_oper is + when increment => + s_reg_i <= s_reg_i + 1; + + when decrement => + s_reg_i <= s_reg_i - 1; + + when others => + null; + end case; + end if; + end if; + -- Reset + if reset='1' then + p_reg_i <= X"34"; -- I=1 + index_carry <= '0'; + end if; + end if; + end process; + + with i_reg_i(7 downto 6) select branch_flag <= + N_flag when "00", + V_flag when "01", + C_flag when "10", + Z_flag when "11", + '0' when others; + + branch_taken <= (branch_flag xor not i_reg_i(5))='1'; + + with a_mux select addr_out <= + vector_page & vect_addr when 0, + adh & adl when 1, + X"01" & s_reg_i when 2, + pch & pcl when 3; + + with i_reg_i(1 downto 0) select reg_out <= + y_reg_i when "00", + a_reg_i when "01", + x_reg_i when "10", + a_reg_i and x_reg_i when others; + + with dout_mux select data_out <= + dreg when reg_d, + a_reg_i when reg_accu, + reg_out when reg_axy, + p_reg_i or X"20" when reg_flags, + pcl when reg_pcl, + pch when reg_pch, + mem_data when shift_res, + X"FF" when others; + + selected_idx <= y_reg_i when select_index_y(i_reg_i) else x_reg_i; + + pc_carry <= pc_carry_i; + s_reg <= s_reg_i; + p_reg <= p_reg_i; + i_reg <= i_reg_i; + a_reg <= a_reg_i; + x_reg <= x_reg_i; + y_reg <= y_reg_i; + d_reg <= dreg; + pc_out <= pch & pcl; +end gideon; diff --git a/Commodore - 64_MiST/rtl/c1541/cpu/shifter.vhd b/Commodore - 64_MiST/rtl/c1541/cpu/shifter.vhd new file mode 100644 index 00000000..267e1fac --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/cpu/shifter.vhd @@ -0,0 +1,60 @@ + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity shifter is +port ( + operation : in std_logic_vector(2 downto 0); + enable : in std_logic := '1'; -- instruction(1) + + c_in : in std_logic; + n_in : in std_logic; + z_in : in std_logic; + + data_in : in std_logic_vector(7 downto 0); + + c_out : out std_logic; + n_out : out std_logic; + z_out : out std_logic; + + data_out : out std_logic_vector(7 downto 0) := X"00"); + +end shifter; + +architecture gideon of shifter is + signal data_out_i : std_logic_vector(7 downto 0) := X"00"; + signal zero : std_logic := '0'; + signal oper4 : std_logic_vector(3 downto 0) := X"0"; +begin +-- ASL $nn ROL $nn LSR $nn ROR $nn STX $nn LDX $nn DEC $nn INC $nn + + with operation select data_out_i <= + data_in(6 downto 0) & '0' when "000", + data_in(6 downto 0) & c_in when "001", + '0' & data_in(7 downto 1) when "010", + c_in & data_in(7 downto 1) when "011", + data_in - 1 when "110", + data_in + 1 when "111", + data_in when others; + + zero <= '1' when data_out_i = X"00" else '0'; + + oper4 <= enable & operation; + + with oper4 select c_out <= + data_in(7) when "1000" | "1001", + data_in(0) when "1010" | "1011", + c_in when others; + + with oper4 select z_out <= + zero when "1000" | "1001" | "1010" | "1011" | "1101" | "1110" | "1111", + z_in when others; + + with oper4 select n_out <= + data_out_i(7) when "1000" | "1001" | "1010" | "1011" | "1101" | "1110" | "1111", + n_in when others; + + data_out <= data_out_i when enable='1' else data_in; + +end gideon; \ No newline at end of file diff --git a/Commodore - 64_MiST/rtl/c1541/gcr_floppy.vhd b/Commodore - 64_MiST/rtl/c1541/gcr_floppy.vhd new file mode 100644 index 00000000..37f47686 --- /dev/null +++ b/Commodore - 64_MiST/rtl/c1541/gcr_floppy.vhd @@ -0,0 +1,316 @@ +--------------------------------------------------------------------------------- +-- Commodore 1541 gcr floppy (read/write) by Dar (darfpga@aol.fr) 23-May-2017 +-- http://darfpga.blogspot.fr +-- +-- produces GCR data, byte(ready) and sync signal to feed c1541_logic from current +-- track buffer ram which contains D64 data +-- +-- gets GCR data from c1541_logic, while producing byte(ready) signal. Data feed +-- track buffer ram after conversion +-- +-- Input clk 32MHz +-- +--------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; + +entity gcr_floppy is +port( + clk32 : in std_logic; + dout : out std_logic_vector(7 downto 0); -- data from ram to 1541 logic + din : in std_logic_vector(7 downto 0); -- data from 1541 logic to ram + mode : in std_logic; -- read/write + mtr : in std_logic; -- stepper motor on/off + sync_n : out std_logic; -- reading SYNC bytes + byte_n : out std_logic; -- byte ready + + track : in std_logic_vector(5 downto 0); + sector : out std_logic_vector(4 downto 0); + byte_addr : out std_logic_vector(7 downto 0); + + ram_do : in std_logic_vector(7 downto 0); + ram_di : buffer std_logic_vector(7 downto 0); + ram_we : out std_logic; + ram_ready : in std_logic +); +end gcr_floppy; + +architecture struct of gcr_floppy is + +signal bit_clk_en : std_logic; +signal sync_cnt : std_logic_vector(5 downto 0) := (others => '0'); +signal byte_cnt : std_logic_vector(8 downto 0) := (others => '0'); +signal nibble : std_logic := '0'; +signal gcr_bit_cnt : std_logic_vector(3 downto 0) := (others => '0'); +signal bit_cnt : std_logic_vector(2 downto 0) := (others => '0'); + +signal sync_in_n : std_logic; +signal byte_in_n : std_logic; + +signal sector_dbl : std_logic_vector(4 downto 0) := (others => '0'); +signal state : std_logic := '0'; + +signal data_header : std_logic_vector(7 downto 0); +signal data_body : std_logic_vector(7 downto 0); +signal data : std_logic_vector(7 downto 0); +signal data_cks : std_logic_vector(7 downto 0); +signal gcr_nibble : std_logic_vector(4 downto 0); +signal gcr_bit : std_logic; +signal gcr_byte : std_logic_vector(7 downto 0); + +signal mode_r1 : std_logic; +signal mode_r2 : std_logic; + +type gcr_array is array(0 to 15) of std_logic_vector(4 downto 0); + +signal gcr_lut : gcr_array := + ("01010","11010","01001","11001", + "01110","11110","01101","11101", + "10010","10011","01011","11011", + "10110","10111","01111","10101"); + +signal sector_max : std_logic_vector(4 downto 0); + +signal gcr_byte_out : std_logic_vector(7 downto 0); +signal gcr_bit_out : std_logic; +signal gcr_nibble_out : std_logic_vector(4 downto 0); +signal nibble_out : std_logic_vector(3 downto 0); + +signal autorise_write : std_logic; +signal autorise_count : std_logic; + +begin + +sync_n <= sync_in_n when mtr = '1' and ram_ready = '1' else '1'; + +sector <= sector_dbl; + +with byte_cnt select + data_header <= + X"08" when "000000000", + "00"&track xor "000"§or_dbl when "000000001", + "000"§or_dbl when "000000010", + "00"&track when "000000011", + X"20" when "000000100", + X"20" when "000000101", + X"0F" when others; + +with byte_cnt select + data_body <= + X"07" when "000000000", + data_cks when "100000001", + X"00" when "100000010", + X"00" when "100000011", + X"0F" when "100000100", + X"0F" when "100000101", + X"0F" when "100000110", + X"0F" when "100000111", + X"0F" when "100001000", + X"0F" when "100001001", + X"0F" when "100001010", + X"0F" when "100001011", + X"0F" when "100001100", + X"0F" when "100001101", + X"0F" when "100001110", + X"0F" when "100001111", + X"0F" when "100010000", + X"0F" when "100010001", + ram_do when others; + +with state select + data <= data_header when '0', data_body when others; + +with nibble select + gcr_nibble <= + gcr_lut(to_integer(unsigned(data(7 downto 4)))) when '0', + gcr_lut(to_integer(unsigned(data(3 downto 0)))) when others; + +gcr_bit <= gcr_nibble(to_integer(unsigned(gcr_bit_cnt))); + +sector_max <= "10100" when track < std_logic_vector(to_unsigned(18,6)) else + "10010" when track < std_logic_vector(to_unsigned(25,6)) else + "10001" when track < std_logic_vector(to_unsigned(31,6)) else + "10000" ; + +gcr_bit_out <= gcr_byte_out(to_integer(unsigned(not bit_cnt))); + +with gcr_nibble_out select + nibble_out <= X"0" when "01010",--"01010", + X"1" when "01011",--"11010", + X"2" when "10010",--"01001", + X"3" when "10011",--"11001", + X"4" when "01110",--"01110", + X"5" when "01111",--"11110", + X"6" when "10110",--"01101", + X"7" when "10111",--"11101", + X"8" when "01001",--"10010", + X"9" when "11001",--"10011", + X"A" when "11010",--"01011", + X"B" when "11011",--"11011", + X"C" when "01101",--"10110", + X"D" when "11101",--"10111", + X"E" when "11110",--"01111", + X"F" when others; --"10101", + +process (clk32) + variable bit_clk_cnt : std_logic_vector(7 downto 0) := (others => '0'); +begin + if rising_edge(clk32) then + + mode_r1 <= mode; + + if (mode_r1 xor mode) = '1' then -- read <-> write change + bit_clk_cnt := (others => '0'); + byte_n <= '1'; + bit_clk_en <= '0'; + else + bit_clk_en <= '0'; + if bit_clk_cnt = X"6F" then + bit_clk_en <= '1'; + bit_clk_cnt := (others => '0'); + else + bit_clk_cnt := bit_clk_cnt + '1'; + end if; + + byte_n <= '1'; + if byte_in_n = '0' and mtr = '1' and ram_ready = '1' then + if bit_clk_cnt > X"10" then + if bit_clk_cnt < X"5E" then + byte_n <= '0'; + end if; + end if; + end if; + + end if; + + end if; +end process; + +read_write_process : process (clk32, bit_clk_en) +begin + if rising_edge(clk32) then + + ram_we <= '0'; + if bit_clk_en = '1' then + mode_r2 <= mode; + if mode = '1' then autorise_write <= '0'; end if; + + if (mode xor mode_r2) = '1' then + if mode = '1' then -- leaving write mode + sync_in_n <= '0'; + sync_cnt <= (others => '0'); + state <= '0'; + else -- entering write mode + byte_cnt <= (others => '0'); + nibble <= '0'; + gcr_bit_cnt <= (others => '0'); + bit_cnt <= (others => '0'); + gcr_byte <= (others => '0'); + data_cks <= (others => '0'); + end if; + end if; + + if sync_in_n = '0' and mode = '1' then + + byte_cnt <= (others => '0'); + nibble <= '0'; + gcr_bit_cnt <= (others => '0'); + bit_cnt <= (others => '0'); + dout <= (others => '0'); + gcr_byte <= (others => '0'); + data_cks <= (others => '0'); + + if sync_cnt = X"31" then + sync_cnt <= (others => '0'); + sync_in_n <= '1'; + else + sync_cnt <= sync_cnt + '1'; + end if; + + end if; + + if sync_in_n = '1' or mode = '0' then + + gcr_bit_cnt <= gcr_bit_cnt + '1'; + if gcr_bit_cnt = X"4" then + gcr_bit_cnt <= (others => '0'); + if nibble = '1' then + nibble <= '0'; + byte_addr <= byte_cnt(7 downto 0); + if byte_cnt = "000000000" then + data_cks <= (others => '0'); + else + data_cks <= data_cks xor data; + end if; + if mode = '1' or (mode = '0' and autorise_count = '1') then + byte_cnt <= byte_cnt + '1'; + end if; + else + nibble <= '1'; + if mode = '0' and ram_di = X"07" then + autorise_write <= '1'; + autorise_count <= '1'; + end if; + if byte_cnt >= "100000000" then + autorise_write <= '0'; + autorise_count <= '0'; + end if; + end if; + end if; + + bit_cnt <= bit_cnt + '1'; + byte_in_n <= '1'; + if bit_cnt = X"7" then + byte_in_n <= '0'; + gcr_byte_out <= din; + end if; + + if state = '0' then + if byte_cnt = "000010000" then + sync_in_n <= '0'; + state<= '1'; + end if; + else + if byte_cnt = "100010001" then + sync_in_n <= '0'; + state <= '0'; + if sector_dbl = sector_max then + sector_dbl <= (others=>'0'); + else + sector_dbl <= sector_dbl + '1'; + end if; + end if; + end if; + + -- demux byte from floppy (ram) + gcr_byte <= gcr_byte(6 downto 0) & gcr_bit; + + if bit_cnt = X"7" then + dout <= gcr_byte(6 downto 0) & gcr_bit; + end if; + + -- serialise/convert byte to floppy (ram) + gcr_nibble_out <= gcr_nibble_out(3 downto 0) & gcr_bit_out; + + if gcr_bit_cnt = X"0" then + if nibble = '0' then + ram_di(3 downto 0) <= nibble_out; + else + ram_di(7 downto 4) <= nibble_out; + end if; + end if; + + if gcr_bit_cnt = X"1" and nibble = '0' then + if autorise_write = '1' then + ram_we <= '1'; + end if; + end if; + + end if; + end if; + end if; +end process; + +end struct; diff --git a/Commodore - 64_MiST/rtl/c64_mist.vhd b/Commodore - 64_MiST/rtl/c64_mist.vhd index ece31cac..86d8b887 100644 --- a/Commodore - 64_MiST/rtl/c64_mist.vhd +++ b/Commodore - 64_MiST/rtl/c64_mist.vhd @@ -121,23 +121,20 @@ component sram is port ); end component; ---------- --- Mist IO ---------- - --- config string used by the io controller to fill the OSD ---constant CONF_STR : string := "C64;PRG;S1,D64;O2,Video standard,PAL,NTSC;O8A,Scandoubler Fx,None,HQ2x-320,HQ2x-160,CRT 25%,CRT 50%;O3,Joysticks,normal,swapped;O6,Audio filter,On,Off;T5,Reset;V0,v0.27.33"; -constant CONF_STR : string := "C64;;"& -"S,D64,Mount Disk;"& -"F,PRG,Load File;"& -"F,CRT,Load Cartridge;" & -"O2,Video standard,PAL,NTSC;"& -"O8A,Scandoubler Fx,None,HQ2x-320,HQ2x-160,CRT 25%,CRT 50%;"& -"O3,Joysticks,normal,swapped;"& -"O6,Audio filter,On,Off;"& ---"OB,BIOS,C64,C64GS;" & ---"T5,Reset;"& -"V0,v0.30.30"; +constant CONF_STR : string := + "C64;;"& + "S,D64,Mount Disk;"& + "F,PRG,Load File;"& + "F,CRT,Load Cartridge;" &--3 +-- "F,TAP,Load File;"&--4 +-- "F,T64,Load File;"&--5 + "O2,Video standard,PAL,NTSC;"& + "O8A,Scandoubler Fx,None,HQ2x-320,HQ2x-160,CRT 25%,CRT 50%;"& + "O3,Joysticks,normal,swapped;"& + "O6,Audio filter,On,Off;"& +-- "OB,BIOS,C64,C64GS;" & + "T5,Reset & Detach Cartridge;"& + "V0,v0.35.00"; -- convert string to std_logic_vector to be given to user_io function to_slv(s: string) return std_logic_vector is @@ -278,14 +275,15 @@ end component; --------- -- audio ---------- +-------- component sigma_delta_dac port ( - CLK : in std_logic; - RESET : in std_logic; - DACin : in std_logic_vector(14 downto 0); - DACout : out std_logic + clk : in std_logic; + ldatasum : in std_logic_vector(14 downto 0); + rdatasum : in std_logic_vector(14 downto 0); + aleft : out std_logic; + aright : out std_logic ); end component sigma_delta_dac; @@ -431,7 +429,6 @@ end component cartridge; signal sd_change : std_logic; signal disk_readonly : std_logic; signal old_download : std_logic; - -- these need to be redirected to the SDRAM signal sdram_we : std_logic; signal sdram_ce : std_logic; @@ -483,7 +480,7 @@ end component cartridge; signal hsync_out : std_logic; signal vsync_out : std_logic; - signal audio_data : std_logic_vector(17 downto 0); + signal audio_data : std_logic_vector(15 downto 0); signal reset_counter : integer; signal reset_n : std_logic; @@ -492,7 +489,6 @@ end component cartridge; signal nmi : std_logic; signal nmi_ack : std_logic; signal erasing : std_logic; --- temporary signal to extend c64_addr to 24bit LCA signal c64_addr_temp : std_logic_vector(24 downto 0); signal cart_blk_len : std_logic_vector(31 downto 0); signal cart_hdr_cnt : std_logic_vector(3 downto 0); @@ -503,7 +499,7 @@ end component cartridge; begin -- 1541 activity led - LED <= not led_disk; + LED <= not ioctl_download; iec_cycle <= '1' when ces = "1011" else '0'; @@ -638,7 +634,7 @@ begin end if; if ioctl_wr='1' then - if ioctl_index = 2 then + if ioctl_index = 2 then--prg if ioctl_addr = 0 then ioctl_load_addr(7 downto 0) <= ioctl_data; elsif(ioctl_addr = 1) then @@ -688,6 +684,15 @@ begin ioctl_ram_wr <= '1'; end if; end if; + + if ioctl_index = 4 then + if ioctl_addr = 0 then + ioctl_load_addr <= '0' & X"200000"; + ioctl_ram_data <= ioctl_data; + else + ioctl_ram_wr <= '1'; + end if; + end if; end if; end if; @@ -806,29 +811,21 @@ begin ce => sdram_ce ); + dac : sigma_delta_dac + port map ( + clk => clk32, + ldatasum => audio_data(15 downto 1), + rdatasum => audio_data(15 downto 1), + aleft => AUDIO_L, + aright => AUDIO_R + ); - -- decode audio - dac_l : sigma_delta_dac - port map ( - CLK => clk32, - DACin => not audio_data(17) & audio_data(16 downto 3), - DACout => AUDIO_L, - RESET => '0' - ); - - dac_r : sigma_delta_dac - port map ( - CLK => clk32, - DACin => not audio_data(17) & audio_data(16 downto 3), - DACout => AUDIO_R, - RESET => '0' - ); fpga64 : entity work.fpga64_sid_iec port map( clk32 => clk32, reset_n => reset_n, - c64gs => status(11), + c64gs => status(11),-- not enough BRAM kbd_clk => not ps2_clk, kbd_dat => ps2_dat, ramAddr => c64_addr_int, @@ -873,12 +870,12 @@ begin iec_clk_o => c64_iec_clk_o, iec_data_i => not c64_iec_data_i, iec_clk_i => not c64_iec_clk_i, - iec_atn_i => not c64_iec_atn_i, +-- iec_atn_i => not c64_iec_atn_i, disk_num => open, c64rom_addr => ioctl_addr(13 downto 0), c64rom_data => ioctl_data, c64rom_wr => c64rom_wr, - cart_detach_key => cart_detach_key, +-- cart_detach_key => cart_detach_key, reset_key => reset_key ); diff --git a/Commodore - 64_MiST/rtl/fpga64_buslogic_roms_mmu.vhd b/Commodore - 64_MiST/rtl/fpga64_buslogic_roms_mmu.vhd index 933c436e..fc53f1cc 100644 --- a/Commodore - 64_MiST/rtl/fpga64_buslogic_roms_mmu.vhd +++ b/Commodore - 64_MiST/rtl/fpga64_buslogic_roms_mmu.vhd @@ -141,7 +141,8 @@ begin rdaddress => std_logic_vector(cpuAddr(14) & cpuAddr(12 downto 0)), q => romData_c64 ); - + +-- not enough BRAM on MIST FPGA -- kernelromGS: entity work.rom_GS64 -- port map -- ( @@ -157,6 +158,7 @@ begin romData <= romData_c64gs when c64gs_ena = '1' else romData_c64; + process(clk) begin if rising_edge(clk) then diff --git a/Commodore - 64_MiST/rtl/fpga64_sid_iec.vhd b/Commodore - 64_MiST/rtl/fpga64_sid_iec.vhd index 29787b61..6ca3a3da 100644 --- a/Commodore - 64_MiST/rtl/fpga64_sid_iec.vhd +++ b/Commodore - 64_MiST/rtl/fpga64_sid_iec.vhd @@ -91,9 +91,9 @@ entity fpga64_sid_iec is ces : out std_logic_vector(3 downto 0); --Connector to the SID - SIDclk : out std_logic; + SIDclk : buffer std_logic; still : out unsigned(15 downto 0); - audio_data : out std_logic_vector(17 downto 0); + audio_data : out std_logic_vector(15 downto 0); extfilter_en: in std_logic; -- IEC @@ -102,7 +102,7 @@ entity fpga64_sid_iec is iec_clk_o : out std_logic; iec_clk_i : in std_logic; iec_atn_o : out std_logic; - iec_atn_i : in std_logic; +-- iec_atn_i : in std_logic; disk_num : out std_logic_vector(7 downto 0); @@ -212,6 +212,10 @@ architecture rtl of fpga64_sid_iec is signal cpuDi: unsigned(7 downto 0); signal cpuDo: unsigned(7 downto 0); signal cpuIO: unsigned(7 downto 0); + + signal ioF_ext: std_logic; + signal ioE_ext: std_logic; + signal io_data: unsigned(7 downto 0); signal vicDi: unsigned(7 downto 0); signal vicAddr: unsigned(15 downto 0); @@ -246,9 +250,28 @@ architecture rtl of fpga64_sid_iec is signal ntscMode : std_logic; signal ntscModeInvert : std_logic := '0' ; signal restore_key : std_logic; - + signal clk_1MHz : std_logic_vector(31 downto 0); signal voice_volume : signed(17 downto 0); + signal pot_x : std_logic_vector(7 downto 0); + signal pot_y : std_logic_vector(7 downto 0); + + component sid8580 + port ( + reset : in std_logic; + clk : in std_logic; + ce_1m : in std_logic; + we : in std_logic; + addr : in std_logic_vector(4 downto 0); + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + pot_x : in std_logic_vector(7 downto 0); + pot_y : in std_logic_vector(7 downto 0); + audio_data : out std_logic_vector(15 downto 0); + extfilter_en : in std_logic + ); + end component sid8580; + begin -- ----------------------------------------------------------------------- -- Local signal to outside world @@ -402,6 +425,9 @@ begin max_ram => max_ram, ramData => ramDataReg, +-- ioF_ext => ioF_ext, +-- ioE_ext => ioE_ext, +-- io_data => io_data, cpuWe => cpuWe, cpuAddr => cpuAddr, @@ -523,7 +549,7 @@ begin -- ----------------------------------------------------------------------- -- SID -- ----------------------------------------------------------------------- - div1m: process(clk32) -- this process devides 32 MHz to 1MHz (for the SID) +div1m: process(clk32) -- this process devides 32 MHz to 1MHz (for the SID) begin if (rising_edge(clk32)) then if (reset = '1') then @@ -535,30 +561,23 @@ begin end if; end process; - audio_data <= std_logic_vector(voice_volume); - - sid: entity work.sid_top +sid_8580 : sid8580 port map ( - clock => clk32, reset => reset, - - addr => "000" & cpuAddr(4 downto 0), - wren => pulseWrRam and phi0_cpu and cs_sid, - wdata => std_logic_vector(cpuDo), - rdata => sid_do, - - potx => not std_logic((cia1_pao(7) and JoyA(5)) or (cia1_pao(6) and JoyB(5))), - poty => not std_logic((cia1_pao(7) and JoyA(6)) or (cia1_pao(6) and JoyB(6))), - comb_wave_l => '0', - comb_wave_r => '0', - - extfilter_en => extfilter_en, - - start_iter => clk_1MHz(31), - sample_left => voice_volume, - sample_right => open + clk => clk32, + ce_1m => clk_1MHz(31), + we => pulseWrRam and phi0_cpu and cs_sid, + addr => std_logic_vector(cpuAddr(4 downto 0)), + data_in => std_logic_vector(cpuDo), + data_out => sid_do, + pot_x => pot_x, + pot_y => pot_y, + audio_data => audio_data, + extfilter_en => extfilter_en ); - + + pot_x <= X"FF" when ((cia1_pao(7) and JoyA(5)) or (cia1_pao(6) and JoyB(5))) = '0' else X"00"; + pot_y <= X"FF" when ((cia1_pao(7) and JoyA(6)) or (cia1_pao(6) and JoyB(6))) = '0' else X"00"; -- ----------------------------------------------------------------------- -- CIAs -- ----------------------------------------------------------------------- diff --git a/Commodore - 64_MiST/rtl/sid8580.sv b/Commodore - 64_MiST/rtl/sid8580.sv new file mode 100644 index 00000000..8f27acf4 --- /dev/null +++ b/Commodore - 64_MiST/rtl/sid8580.sv @@ -0,0 +1,226 @@ + +module sid8580 +( + input reset, + + input clk, + input ce_1m, + + input we, + input [4:0] addr, + input [7:0] data_in, + output [ 7:0] data_out, + + input [7:0] pot_x, + input [7:0] pot_y, + + input extfilter_en, + output [15:0] audio_data +); + +// Internal Signals +reg [7:0] Voice_1_Freq_lo; +reg [7:0] Voice_1_Freq_hi; +reg [7:0] Voice_1_Pw_lo; +reg [3:0] Voice_1_Pw_hi; +reg [7:0] Voice_1_Control; +reg [7:0] Voice_1_Att_dec; +reg [7:0] Voice_1_Sus_Rel; + +reg [7:0] Voice_2_Freq_lo; +reg [7:0] Voice_2_Freq_hi; +reg [7:0] Voice_2_Pw_lo; +reg [3:0] Voice_2_Pw_hi; +reg [7:0] Voice_2_Control; +reg [7:0] Voice_2_Att_dec; +reg [7:0] Voice_2_Sus_Rel; + +reg [7:0] Voice_3_Freq_lo; +reg [7:0] Voice_3_Freq_hi; +reg [7:0] Voice_3_Pw_lo; +reg [3:0] Voice_3_Pw_hi; +reg [7:0] Voice_3_Control; +reg [7:0] Voice_3_Att_dec; +reg [7:0] Voice_3_Sus_Rel; + +reg [7:0] Filter_Fc_lo; +reg [7:0] Filter_Fc_hi; +reg [7:0] Filter_Res_Filt; +reg [7:0] Filter_Mode_Vol; + +wire [7:0] Misc_Osc3_Random; +wire [7:0] Misc_Env3; + +reg [7:0] do_buf; +reg [7:0] sidrandom; + +wire [11:0] voice_1; +wire [11:0] voice_2; +wire [11:0] voice_3; +wire [17:0] voice_mixed; +reg [17:0] voice_volume; + +wire voice_1_PA_MSB; +wire voice_2_PA_MSB; +wire voice_3_PA_MSB; + +wire [18:0] filtered_audio; +wire [17:0] unsigned_audio; +wire [18:0] unsigned_filt; + +localparam DC_offset = 14'b00111111111111; + +// Voice 1 Instantiation +sid_voice v1 +( + .clock(clk), + .ce_1m(ce_1m), + .reset(reset), + .freq_lo(Voice_1_Freq_lo), + .freq_hi(Voice_1_Freq_hi), + .pw_lo(Voice_1_Pw_lo), + .pw_hi(Voice_1_Pw_hi), + .control(Voice_1_Control), + .att_dec(Voice_1_Att_dec), + .sus_rel(Voice_1_Sus_Rel), + .osc_msb_in(voice_3_PA_MSB), + .osc_msb_out(voice_1_PA_MSB), + .signal_out(voice_1) +); + +// Voice 2 Instantiation +sid_voice v2 +( + .clock(clk), + .ce_1m(ce_1m), + .reset(reset), + .freq_lo(Voice_2_Freq_lo), + .freq_hi(Voice_2_Freq_hi), + .pw_lo(Voice_2_Pw_lo), + .pw_hi(Voice_2_Pw_hi), + .control(Voice_2_Control), + .att_dec(Voice_2_Att_dec), + .sus_rel(Voice_2_Sus_Rel), + .osc_msb_in(voice_1_PA_MSB), + .osc_msb_out(voice_2_PA_MSB), + .signal_out(voice_2) +); + +// Voice 3 Instantiation +sid_voice v3 +( + .clock(clk), + .ce_1m(ce_1m), + .reset(reset), + .freq_lo(Voice_3_Freq_lo), + .freq_hi(Voice_3_Freq_hi), + .pw_lo(Voice_3_Pw_lo), + .pw_hi(Voice_3_Pw_hi), + .control(Voice_3_Control), + .att_dec(Voice_3_Att_dec), + .sus_rel(Voice_3_Sus_Rel), + .osc_msb_in(voice_2_PA_MSB), + .osc_msb_out(voice_3_PA_MSB), + .signal_out(voice_3), + .osc_out(Misc_Osc3_Random), + .env_out(Misc_Env3) +); + +// Filter Instantiation +sid_filters filters +( + .clk(clk), + .rst(reset), + .Fc_lo(Filter_Fc_lo), + .Fc_hi(Filter_Fc_hi), + .Res_Filt(Filter_Res_Filt), + .Mode_Vol(Filter_Mode_Vol), + .voice1(voice_1), + .voice2(voice_2), + .voice3(voice_3), + .input_valid(ce_1m), + .ext_in(12'hfff), + .sound(audio_data), + .extfilter_en(extfilter_en) +); + +assign data_out = do_buf; +//assign audio_data = {1'b0, (filtered_audio[18:5] + 14'b1000000000000000)}; +//assign unsigned_filt = filtered_audio + 19'b1000000000000000000; +//assign unsigned_audio = unsigned_filt[18:1]; +//assign audio_data = filtered_audio[18:3];// + 15'h4000;//{1'b0, unsigned_audio[17:1]}; + +always @(*) begin + case (addr) + 5'h19: do_buf = pot_x; + 5'h1a: do_buf = pot_y; + 5'h1b: do_buf = Misc_Osc3_Random; + 5'h1c: do_buf = Misc_Env3; + default: do_buf = 0; + endcase +end + + +// Register Decoding +always @(posedge clk) begin + if (reset) begin + Voice_1_Freq_lo <= 0; + Voice_1_Freq_hi <= 0; + Voice_1_Pw_lo <= 0; + Voice_1_Pw_hi <= 0; + Voice_1_Control <= 0; + Voice_1_Att_dec <= 0; + Voice_1_Sus_Rel <= 0; + Voice_2_Freq_lo <= 0; + Voice_2_Freq_hi <= 0; + Voice_2_Pw_lo <= 0; + Voice_2_Pw_hi <= 0; + Voice_2_Control <= 0; + Voice_2_Att_dec <= 0; + Voice_2_Sus_Rel <= 0; + Voice_3_Freq_lo <= 0; + Voice_3_Freq_hi <= 0; + Voice_3_Pw_lo <= 0; + Voice_3_Pw_hi <= 0; + Voice_3_Control <= 0; + Voice_3_Att_dec <= 0; + Voice_3_Sus_Rel <= 0; + Filter_Fc_lo <= 0; + Filter_Fc_hi <= 0; + Filter_Res_Filt <= 0; + Filter_Mode_Vol <= 0; + end + else begin + if (we) begin + case (addr) + 5'h00: Voice_1_Freq_lo <= data_in; + 5'h01: Voice_1_Freq_hi <= data_in; + 5'h02: Voice_1_Pw_lo <= data_in; + 5'h03: Voice_1_Pw_hi <= data_in[3:0]; + 5'h04: Voice_1_Control <= data_in; + 5'h05: Voice_1_Att_dec <= data_in; + 5'h06: Voice_1_Sus_Rel <= data_in; + 5'h07: Voice_2_Freq_lo <= data_in; + 5'h08: Voice_2_Freq_hi <= data_in; + 5'h09: Voice_2_Pw_lo <= data_in; + 5'h0a: Voice_2_Pw_hi <= data_in[3:0]; + 5'h0b: Voice_2_Control <= data_in; + 5'h0c: Voice_2_Att_dec <= data_in; + 5'h0d: Voice_2_Sus_Rel <= data_in; + 5'h0e: Voice_3_Freq_lo <= data_in; + 5'h0f: Voice_3_Freq_hi <= data_in; + 5'h10: Voice_3_Pw_lo <= data_in; + 5'h11: Voice_3_Pw_hi <= data_in[3:0]; + 5'h12: Voice_3_Control <= data_in; + 5'h13: Voice_3_Att_dec <= data_in; + 5'h14: Voice_3_Sus_Rel <= data_in; + 5'h15: Filter_Fc_lo <= data_in; + 5'h16: Filter_Fc_hi <= data_in; + 5'h17: Filter_Res_Filt <= data_in; + 5'h18: Filter_Mode_Vol <= data_in; + endcase + end + end +end + +endmodule diff --git a/Commodore - 64_MiST/rtl/sid_envelope.sv b/Commodore - 64_MiST/rtl/sid_envelope.sv new file mode 100644 index 00000000..451aeba2 --- /dev/null +++ b/Commodore - 64_MiST/rtl/sid_envelope.sv @@ -0,0 +1,178 @@ + +module sid_envelope +( + input clock, + input ce_1m, + + input reset, + input gate, + input [ 7:0] att_dec, + input [ 7:0] sus_rel, + + output reg [7:0] envelope +); + +// Internal Signals +reg [ 1:0] state; +reg gate_edge; +reg [14:0] rate_counter; +reg [14:0] rate_period; +wire [14:0] adsrtable [0:15]; +reg [ 7:0] exponential_counter; +reg [ 7:0] exponential_counter_period; +reg hold_zero; +reg envelope_pipeline; + +`define ST_ATTACK 2'b00 +`define ST_DEC_SUS 2'b01 +`define ST_RELEASE 2'b10 + +assign adsrtable[4'h0] = 15'h007f; +assign adsrtable[4'h1] = 15'h3000; +assign adsrtable[4'h2] = 15'h1e00; +assign adsrtable[4'h3] = 15'h0660; +assign adsrtable[4'h4] = 15'h0182; +assign adsrtable[4'h5] = 15'h5573; +assign adsrtable[4'h6] = 15'h000e; +assign adsrtable[4'h7] = 15'h3805; +assign adsrtable[4'h8] = 15'h2424; +assign adsrtable[4'h9] = 15'h2220; +assign adsrtable[4'ha] = 15'h090c; +assign adsrtable[4'hb] = 15'h0ecd; +assign adsrtable[4'hc] = 15'h010e; +assign adsrtable[4'hd] = 15'h23f7; +assign adsrtable[4'he] = 15'h5237; +assign adsrtable[4'hf] = 15'h64a8; + +// State Logic +always @(posedge clock) begin + if (reset) + state <= `ST_RELEASE; + else if(ce_1m) begin + if (gate_edge != gate) + if (gate) state <= `ST_ATTACK; + else state <= `ST_RELEASE; + + if (((rate_counter == rate_period) && + (state == `ST_ATTACK || + (exponential_counter + 1'b1) == exponential_counter_period) && + (!hold_zero))) + case (state) + `ST_ATTACK: if (envelope + 1'b1 == 8'hff) state <= `ST_DEC_SUS; + endcase + end +end + +// Gate Switch Detection +always @(posedge clock) begin + if (reset) gate_edge <= 1'b0; + else if(ce_1m) begin + if (gate_edge != gate) gate_edge <= gate; + end +end + +// Envelope +always @(posedge clock) begin + if (reset) + envelope <= 8'h00; + else if(ce_1m) begin + if (envelope_pipeline) envelope <= envelope - 1'b1; + if (((rate_counter == rate_period) && + (state == `ST_ATTACK || + (exponential_counter + 1'b1) == exponential_counter_period) && + (!hold_zero))) + case (state) + `ST_ATTACK: envelope <= envelope + 1'b1; + `ST_DEC_SUS: if (envelope != {2{sus_rel[7:4]}} && exponential_counter_period == 1) envelope <= envelope - 1'b1; + `ST_RELEASE: if (exponential_counter_period == 1) envelope <= envelope - 1'b1; + endcase + end +end + +// Envelope Pipeline +always @(posedge clock) begin + if (reset) + envelope_pipeline <= 1'b0; + else if(ce_1m) begin + if (gate_edge != gate) + if (gate) envelope_pipeline <= 1'b0; + if (envelope_pipeline) envelope_pipeline <= 1'b0; + if (((rate_counter == rate_period) && + (state == `ST_ATTACK || + (exponential_counter + 1'b1) == exponential_counter_period) && + (!hold_zero))) + case (state) + `ST_DEC_SUS: if (envelope != {2{sus_rel[7:4]}} && exponential_counter_period != 1) envelope_pipeline <= 1'b1; + `ST_RELEASE: if(exponential_counter_period != 1) envelope_pipeline <= 1'b1; + endcase + end +end + +// Exponential Counter +always @(posedge clock) begin + if (reset) + exponential_counter <= 8'h00; + else if(ce_1m) begin + if (rate_counter == rate_period) begin + exponential_counter <= exponential_counter + 1'b1; + if (state == `ST_ATTACK || (exponential_counter + 1'b1) == exponential_counter_period) exponential_counter <= 8'h00; + end + end +end + +// Exponential Counter Period +always @(posedge clock) begin + if (reset) begin + hold_zero <= 1'b1; + exponential_counter_period <= 8'h00; + end + else if(ce_1m) begin + if (gate_edge != gate) if (gate) hold_zero <= 1'b0; + if ((envelope_pipeline) || ((rate_counter == rate_period) && + (state == `ST_ATTACK || + (exponential_counter + 1'b1) == exponential_counter_period) && + (!hold_zero))) + begin + case (state == `ST_ATTACK ? envelope + 1'b1 : envelope - 1'b1) + 8'hff: exponential_counter_period <= 8'd1; + 8'h5d: exponential_counter_period <= 8'd2; + 8'h36: exponential_counter_period <= 8'd4; + 8'h1a: exponential_counter_period <= 8'd8; + 8'h0e: exponential_counter_period <= 8'd16; + 8'h06: exponential_counter_period <= 8'd30; + 8'h00: begin + exponential_counter_period <= 8'd1; + hold_zero <= 1'b1; + end + endcase + end + end +end + +// Rate Counter +always @(posedge clock) begin + if (reset) rate_counter <= 15'h7fff; + else if(ce_1m) begin + if (rate_counter == rate_period) rate_counter <= 15'h7fff; + else rate_counter <= {rate_counter[1] ^ rate_counter[0], rate_counter[14:1]}; + end +end + +// Rate Period +always @(posedge clock) begin + if (reset) + rate_period <= adsrtable[sus_rel[3:0]]; + else if(ce_1m) begin + if (gate_edge != gate) begin + if (gate) rate_period <= adsrtable[att_dec[7:4]]; + else rate_period <= adsrtable[sus_rel[3:0]]; + end + case (state) + `ST_ATTACK: rate_period <= adsrtable[att_dec[7:4]]; + `ST_DEC_SUS: rate_period <= adsrtable[att_dec[3:0]]; + default: rate_period <= adsrtable[sus_rel[3:0]]; + endcase + end +end + +endmodule diff --git a/Commodore - 64_MiST/rtl/sid_filters.sv b/Commodore - 64_MiST/rtl/sid_filters.sv new file mode 100644 index 00000000..aed096c4 --- /dev/null +++ b/Commodore - 64_MiST/rtl/sid_filters.sv @@ -0,0 +1,129 @@ + +module sid_filters +( + input clk, + input rst, + input [ 7:0] Fc_lo, + input [ 7:0] Fc_hi, + input [ 7:0] Res_Filt, + input [ 7:0] Mode_Vol, + input [11:0] voice1, + input [11:0] voice2, + input [11:0] voice3, + input input_valid, + input [11:0] ext_in, + input extfilter_en, + + output reg [15:0] sound +); + +reg signed [17:0] Vhp; +reg signed [17:0] Vbp; +reg signed [17:0] w0; +reg signed [17:0] q; + +wire [10:0] divmul[16]; +assign divmul[0] = 1448; +assign divmul[1] = 1328; +assign divmul[2] = 1218; +assign divmul[3] = 1117; +assign divmul[4] = 1024; +assign divmul[5] = 939; +assign divmul[6] = 861; +assign divmul[7] = 790; +assign divmul[8] = 724; +assign divmul[9] = 664; +assign divmul[10] = 609; +assign divmul[11] = 558; +assign divmul[12] = 512; +assign divmul[13] = 470; +assign divmul[14] = 431; +assign divmul[15] = 395; + +wire [35:0] mul1 = w0 * Vhp; +wire [35:0] mul2 = w0 * Vbp; +wire [35:0] mul3 = q * Vbp; +wire [35:0] mul4 = 18'd82355 * ({Fc_hi, Fc_lo[2:0]} + 1'b1); + +// Filter +always @(posedge clk) begin + reg [17:0] dVbp; + reg [17:0] Vlp; + reg [17:0] dVlp; + reg [17:0] Vi; + reg [17:0] Vnf; + reg [17:0] Vf; + reg [21:0] mulr; + reg [3:0] state; + + if (rst) begin + state <= 0; + Vlp <= 0; + Vbp <= 0; + Vhp <= 0; + end + else begin + case (state) + 0: if (input_valid) begin + if(mulr[21] == mulr[20]) sound <= mulr[20:5]; + state <= state + 1'd1; + Vi <= 0; + Vnf <= 0; + end + 1: state <= state + 1'd1; + 2: begin + state <= state + 1'd1; + w0 <= {mul4[35], mul4[28:12]}; + if (Res_Filt[0]) Vi <= Vi + (voice1 << 2); + else Vnf <= Vnf + (voice1 << 2); + end + 3: begin + state <= state + 1'd1; + if (Res_Filt[1]) Vi <= Vi + (voice2 << 2); + else Vnf <= Vnf + (voice2 << 2); + end + 4: begin + state <= state + 1'd1; + if (Res_Filt[2]) Vi <= Vi + (voice3 << 2); + else if (!Mode_Vol[7]) Vnf <= Vnf + (voice3 << 2); + dVbp <= {mul1[35], mul1[35:19]}; + end + 5: begin + state <= state + 1'd1; + if (Res_Filt[3]) Vi <= Vi + (ext_in << 2); + else Vnf <= Vnf + (ext_in << 2); + dVlp <= {mul2[35], mul2[35:19]}; + Vbp <= Vbp - dVbp; + q <= divmul[Res_Filt[7:4]]; + end + 6: begin + state <= state + 1'd1; + Vlp <= Vlp - dVlp; + Vf <= (Mode_Vol[5]) ? Vbp : 18'h00000; + end + 7: begin + state <= state + 1'd1; + Vhp <= {mul3[35], mul3[26:10]} - Vlp; + if(Mode_Vol[4]) Vf <= Vf + Vlp; + end + 8: begin + state <= state + 1'd1; + Vhp <= Vhp - Vi; + end + 9: begin + state <= state + 1'd1; + if(Mode_Vol[6]) Vf <= Vf + Vhp; + end + 10: begin + state <= state + 1'd1; + Vf <= (extfilter_en) ? {~Vf + 1'b1} + Vnf : Vi + Vnf; + end + 11: begin + state <= 0; + mulr <= Vf * Mode_Vol[3:0]; + end + endcase + end +end + +endmodule diff --git a/Commodore - 64_MiST/rtl/sid_voice.sv b/Commodore - 64_MiST/rtl/sid_voice.sv new file mode 100644 index 00000000..d12c8267 --- /dev/null +++ b/Commodore - 64_MiST/rtl/sid_voice.sv @@ -0,0 +1,353 @@ + +// altera message_off 10030 +module sid_voice +( + input clock, + input ce_1m, + input reset, + input [7:0] freq_lo, + input [7:0] freq_hi, + input [7:0] pw_lo, + input [3:0] pw_hi, + input [7:0] control, + input [7:0] att_dec, + input [7:0] sus_rel, + input osc_msb_in, + + output osc_msb_out, + output [11:0] signal_out, + output [ 7:0] osc_out, + output [ 7:0] env_out +); + +// Internal Signals +reg [23:0] oscillator; +reg osc_edge; +reg osc_msb_in_prv; +reg [11:0] triangle; +reg [11:0] sawtooth; +reg [11:0] pulse; +reg [11:0] noise; +reg [22:0] lfsr_noise; +wire [ 7:0] envelope; +reg [11:0] wave_out; +reg [19:0] dca_out; + +`define noise_ctrl control[7] +`define pulse_ctrl control[6] +`define saw_ctrl control[5] +`define tri_ctrl control[4] +`define test_ctrl control[3] +`define ringmod_ctrl control[2] +`define sync_ctrl control[1] + +// Signal Assignments +assign osc_msb_out = oscillator[23]; +assign signal_out = dca_out[19:8]; +assign osc_out = wave_out[11:4]; +assign env_out = envelope; + +// Digital Controlled Amplifier +always @(posedge clock) if(ce_1m) dca_out <= wave_out * envelope; + +// Envelope Instantiation +sid_envelope adsr +( + .clock(clock), + .ce_1m(ce_1m), + .reset(reset), + .gate(control[0]), + .att_dec(att_dec), + .sus_rel(sus_rel), + .envelope(envelope) +); + +// Phase Accumulating Oscillator +always @(posedge clock) begin + if(ce_1m) begin + osc_msb_in_prv <= osc_msb_in; + if (reset || `test_ctrl || ((`sync_ctrl) && (!osc_msb_in) && (osc_msb_in != osc_msb_in_prv))) + oscillator <= 0; + else + oscillator <= oscillator + {freq_hi, freq_lo}; + end +end + +// Waveform Generator +always @(posedge clock) begin + if (reset) begin + triangle <= 0; + sawtooth <= 0; + pulse <= 0; + noise <= 0; + osc_edge <= 0; + lfsr_noise <= 23'h7fffff; + end + else if(ce_1m) begin + triangle <= (`ringmod_ctrl) ? + {({11{osc_msb_in}} ^ {{11{oscillator[23]}}}) ^ oscillator[22:12], 1'b0} : + {{11{oscillator[23]}} ^ oscillator[22:12], 1'b0}; + + sawtooth <= oscillator[23:12]; + + pulse <= (`test_ctrl) ? 12'hfff : + (oscillator[23:12] >= {pw_hi, pw_lo}) ? {12{1'b1}} : + {12{1'b0}}; + + noise <= {lfsr_noise[21], lfsr_noise[19], lfsr_noise[15], + lfsr_noise[12], lfsr_noise[10], lfsr_noise[6], + lfsr_noise[3], lfsr_noise[1], 4'b0000}; + + osc_edge <= (oscillator[19] && !osc_edge) ? 1'b1 : + (!oscillator[19] && osc_edge) ? 1'b0 : + osc_edge; + + lfsr_noise <= (oscillator[19] && !osc_edge) ? + {lfsr_noise[21:0], (lfsr_noise[22] | `test_ctrl) ^ lfsr_noise[17]} : + lfsr_noise; + end +end + +// Waveform Output Selector +always @(*) begin + case (control[7:4]) + 4'b0001: wave_out = triangle; + 4'b0010: wave_out = sawtooth; + 4'b0011: wave_out = {wave__st[sawtooth], 4'b0000}; + 4'b0100: wave_out = pulse; + 4'b0101: wave_out = {wave_p_t[triangle[11:1]], 4'b0000} & pulse; + 4'b0110: wave_out = {wave_ps_[sawtooth], 4'b0000} & pulse; + 4'b0111: wave_out = {wave_pst[sawtooth], 4'b0000} & pulse; + 4'b1000: wave_out = noise; + default: wave_out = 0; + endcase +end + +// +// convert combinatorial logic to ROM (Sorgelig) +// + +reg [7:0] wave__st[4096]; +reg [7:0] wave_p_t[2048]; +reg [7:0] wave_ps_[4096]; +reg [7:0] wave_pst[4096]; + +initial begin + integer i; + for(i = 0; i<4096; i=i+1) wave__st[i] = + (i < 'h07e) ? 8'h00 : (i < 'h080) ? 8'h03 : (i < 'h0fc) ? 8'h00 : (i < 'h100) ? 8'h07 : + (i < 'h17e) ? 8'h00 : (i < 'h180) ? 8'h03 : (i < 'h1f8) ? 8'h00 : (i < 'h1fc) ? 8'h0e : + (i < 'h200) ? 8'h0f : (i < 'h27e) ? 8'h00 : (i < 'h280) ? 8'h03 : (i < 'h2fc) ? 8'h00 : + (i < 'h300) ? 8'h07 : (i < 'h37e) ? 8'h00 : (i < 'h380) ? 8'h03 : (i < 'h3bf) ? 8'h00 : + (i < 'h3c0) ? 8'h01 : (i < 'h3f0) ? 8'h00 : (i < 'h3f8) ? 8'h1c : (i < 'h3fa) ? 8'h1e : + (i < 'h400) ? 8'h1f : (i < 'h47e) ? 8'h00 : (i < 'h480) ? 8'h03 : (i < 'h4fc) ? 8'h00 : + (i < 'h500) ? 8'h07 : (i < 'h57e) ? 8'h00 : (i < 'h580) ? 8'h03 : (i < 'h5f8) ? 8'h00 : + (i < 'h5fc) ? 8'h0e : (i < 'h5ff) ? 8'h0f : (i < 'h600) ? 8'h1f : (i < 'h67e) ? 8'h00 : + (i < 'h680) ? 8'h03 : (i < 'h6fc) ? 8'h00 : (i < 'h700) ? 8'h07 : (i < 'h77e) ? 8'h00 : + (i < 'h780) ? 8'h03 : (i < 'h7bf) ? 8'h00 : (i < 'h7c0) ? 8'h01 : (i < 'h7e0) ? 8'h00 : + (i < 'h7f0) ? 8'h38 : (i < 'h7f7) ? 8'h3c : (i < 'h7f8) ? 8'h3e : (i < 'h800) ? 8'h7f : + (i < 'h87e) ? 8'h00 : (i < 'h880) ? 8'h03 : (i < 'h8fc) ? 8'h00 : (i < 'h900) ? 8'h07 : + (i < 'h97e) ? 8'h00 : (i < 'h980) ? 8'h03 : (i < 'h9f8) ? 8'h00 : (i < 'h9fc) ? 8'h0e : + (i < 'ha00) ? 8'h0f : (i < 'ha7e) ? 8'h00 : (i < 'ha80) ? 8'h03 : (i < 'hafc) ? 8'h00 : + (i < 'hb00) ? 8'h07 : (i < 'hb7e) ? 8'h00 : (i < 'hb80) ? 8'h03 : (i < 'hbbf) ? 8'h00 : + (i < 'hbc0) ? 8'h01 : (i < 'hbf0) ? 8'h00 : (i < 'hbf8) ? 8'h1c : (i < 'hbfa) ? 8'h1e : + (i < 'hbfe) ? 8'h1f : (i < 'hc00) ? 8'h3f : (i < 'hc7e) ? 8'h00 : (i < 'hc80) ? 8'h03 : + (i < 'hcfc) ? 8'h00 : (i < 'hd00) ? 8'h07 : (i < 'hd7e) ? 8'h00 : (i < 'hd80) ? 8'h03 : + (i < 'hdbf) ? 8'h00 : (i < 'hdc0) ? 8'h01 : (i < 'hdf8) ? 8'h00 : (i < 'hdfc) ? 8'h0e : + (i < 'hdfe) ? 8'h0f : (i < 'he00) ? 8'h1f : (i < 'he7c) ? 8'h00 : (i < 'he7d) ? 8'h80 : + (i < 'he7e) ? 8'h00 : (i < 'he80) ? 8'h83 : (i < 'hefc) ? 8'h80 : (i < 'heff) ? 8'h87 : + (i < 'hf00) ? 8'h8f : (i < 'hf01) ? 8'hc0 : (i < 'hf03) ? 8'he0 : (i < 'hf05) ? 8'hc0 : + (i < 'hf09) ? 8'he0 : (i < 'hf11) ? 8'hc0 : (i < 'hf13) ? 8'he0 : (i < 'hf18) ? 8'hc0 : + (i < 'hf19) ? 8'he0 : (i < 'hf21) ? 8'hc0 : (i < 'hf23) ? 8'he0 : (i < 'hf25) ? 8'hc0 : + (i < 'hf2b) ? 8'he0 : (i < 'hf2c) ? 8'hc0 : (i < 'hf2d) ? 8'he0 : (i < 'hf2e) ? 8'hc0 : + (i < 'hf7e) ? 8'he0 : (i < 'hf80) ? 8'he3 : (i < 'hfbf) ? 8'hf0 : (i < 'hfc0) ? 8'hf1 : + (i < 'hfe0) ? 8'hf8 : (i < 'hff0) ? 8'hfc : (i < 'hff8) ? 8'hfe : 8'hff; + + for(i = 0; i<2048; i=i+1) wave_p_t[i] = + (i < 'h0ff) ? 8'h00 : (i < 'h100) ? 8'h07 : (i < 'h1fb) ? 8'h00 : (i < 'h1fc) ? 8'h1c : + (i < 'h1fd) ? 8'h00 : (i < 'h1fe) ? 8'h3c : (i < 'h200) ? 8'h3f : (i < 'h2fd) ? 8'h00 : + (i < 'h2fe) ? 8'h0c : (i < 'h2ff) ? 8'h5e : (i < 'h300) ? 8'h5f : (i < 'h377) ? 8'h00 : + (i < 'h378) ? 8'h40 : (i < 'h37b) ? 8'h00 : (i < 'h37d) ? 8'h40 : (i < 'h37f) ? 8'h60 : + (i < 'h380) ? 8'h6f : (i < 'h39f) ? 8'h00 : (i < 'h3a0) ? 8'h40 : (i < 'h3ae) ? 8'h00 : + (i < 'h3b0) ? 8'h40 : (i < 'h3b3) ? 8'h00 : (i < 'h3b7) ? 8'h40 : (i < 'h3b8) ? 8'h60 : + (i < 'h3ba) ? 8'h40 : (i < 'h3be) ? 8'h60 : (i < 'h3bf) ? 8'h70 : (i < 'h3c0) ? 8'h77 : + (i < 'h3c5) ? 8'h00 : (i < 'h3cd) ? 8'h40 : (i < 'h3d0) ? 8'h60 : (i < 'h3d3) ? 8'h40 : + (i < 'h3d7) ? 8'h60 : (i < 'h3d8) ? 8'h70 : (i < 'h3db) ? 8'h60 : (i < 'h3de) ? 8'h70 : + (i < 'h3df) ? 8'h78 : (i < 'h3e0) ? 8'h7b : (i < 'h3e3) ? 8'h60 : (i < 'h3e4) ? 8'h70 : + (i < 'h3e5) ? 8'h60 : (i < 'h3eb) ? 8'h70 : (i < 'h3ef) ? 8'h78 : (i < 'h3f0) ? 8'h7c : + (i < 'h3f3) ? 8'h78 : (i < 'h3f4) ? 8'h7c : (i < 'h3f5) ? 8'h78 : (i < 'h3f7) ? 8'h7c : + (i < 'h3f8) ? 8'h7e : (i < 'h3f9) ? 8'h7c : (i < 'h3fb) ? 8'h7e : (i < 'h400) ? 8'h7f : + (i < 'h47f) ? 8'h00 : (i < 'h480) ? 8'h80 : (i < 'h4bd) ? 8'h00 : (i < 'h4c0) ? 8'h80 : + (i < 'h4cf) ? 8'h00 : (i < 'h4d0) ? 8'h80 : (i < 'h4d7) ? 8'h00 : (i < 'h4d8) ? 8'h80 : + (i < 'h4da) ? 8'h00 : (i < 'h4e0) ? 8'h80 : (i < 'h4e3) ? 8'h00 : (i < 'h4fe) ? 8'h80 : + (i < 'h4ff) ? 8'h8e : (i < 'h500) ? 8'h9f : (i < 'h51f) ? 8'h00 : (i < 'h520) ? 8'h80 : + (i < 'h52b) ? 8'h00 : (i < 'h52c) ? 8'h80 : (i < 'h52d) ? 8'h00 : (i < 'h530) ? 8'h80 : + (i < 'h532) ? 8'h00 : (i < 'h540) ? 8'h80 : (i < 'h543) ? 8'h00 : (i < 'h544) ? 8'h80 : + (i < 'h545) ? 8'h00 : (i < 'h57f) ? 8'h80 : (i < 'h580) ? 8'haf : (i < 'h5bb) ? 8'h80 : + (i < 'h5bf) ? 8'ha0 : (i < 'h5c0) ? 8'hb7 : (i < 'h5cf) ? 8'h80 : (i < 'h5d0) ? 8'ha0 : + (i < 'h5d6) ? 8'h80 : (i < 'h5db) ? 8'ha0 : (i < 'h5dc) ? 8'hb0 : (i < 'h5dd) ? 8'ha0 : + (i < 'h5df) ? 8'hb0 : (i < 'h5e0) ? 8'hbb : (i < 'h5e6) ? 8'ha0 : (i < 'h5e8) ? 8'hb0 : + (i < 'h5e9) ? 8'ha0 : (i < 'h5eb) ? 8'hb0 : (i < 'h5ec) ? 8'hb8 : (i < 'h5ed) ? 8'hb0 : + (i < 'h5ef) ? 8'hb8 : (i < 'h5f0) ? 8'hbc : (i < 'h5f1) ? 8'hb0 : (i < 'h5f5) ? 8'hb8 : + (i < 'h5f7) ? 8'hbc : (i < 'h5f8) ? 8'hbe : (i < 'h5fa) ? 8'hbc : (i < 'h5fb) ? 8'hbe : + (i < 'h5fc) ? 8'hbf : (i < 'h5fd) ? 8'hbe : (i < 'h600) ? 8'hbf : (i < 'h63e) ? 8'h80 : + (i < 'h640) ? 8'hc0 : (i < 'h657) ? 8'h80 : (i < 'h658) ? 8'hc0 : (i < 'h65a) ? 8'h80 : + (i < 'h660) ? 8'hc0 : (i < 'h663) ? 8'h80 : (i < 'h664) ? 8'hc0 : (i < 'h665) ? 8'h80 : + (i < 'h67f) ? 8'hc0 : (i < 'h680) ? 8'hcf : (i < 'h686) ? 8'h80 : (i < 'h689) ? 8'hc0 : + (i < 'h68a) ? 8'h80 : (i < 'h6bf) ? 8'hc0 : (i < 'h6c0) ? 8'hd7 : (i < 'h6dd) ? 8'hc0 : + (i < 'h6df) ? 8'hd0 : (i < 'h6e0) ? 8'hd9 : (i < 'h6e7) ? 8'hc0 : (i < 'h6e8) ? 8'hd0 : + (i < 'h6e9) ? 8'hc0 : (i < 'h6ed) ? 8'hd0 : (i < 'h6ef) ? 8'hd8 : (i < 'h6f0) ? 8'hdc : + (i < 'h6f2) ? 8'hd0 : (i < 'h6f5) ? 8'hd8 : (i < 'h6f7) ? 8'hdc : (i < 'h6f8) ? 8'hde : + (i < 'h6fa) ? 8'hdc : (i < 'h6fb) ? 8'hde : (i < 'h6fc) ? 8'hdf : (i < 'h6fd) ? 8'hde : + (i < 'h700) ? 8'hdf : (i < 'h71b) ? 8'hc0 : (i < 'h71c) ? 8'he0 : (i < 'h71d) ? 8'hc0 : + (i < 'h720) ? 8'he0 : (i < 'h727) ? 8'hc0 : (i < 'h728) ? 8'he0 : (i < 'h72a) ? 8'hc0 : + (i < 'h73f) ? 8'he0 : (i < 'h740) ? 8'he7 : (i < 'h75f) ? 8'he0 : (i < 'h760) ? 8'he8 : + (i < 'h76e) ? 8'he0 : (i < 'h76f) ? 8'he8 : (i < 'h770) ? 8'hec : (i < 'h773) ? 8'he0 : + (i < 'h776) ? 8'he8 : (i < 'h777) ? 8'hec : (i < 'h778) ? 8'hee : (i < 'h77b) ? 8'hec : + (i < 'h77d) ? 8'hee : (i < 'h780) ? 8'hef : (i < 'h78d) ? 8'he0 : (i < 'h790) ? 8'hf0 : + (i < 'h792) ? 8'he0 : (i < 'h7af) ? 8'hf0 : (i < 'h7b0) ? 8'hf4 : (i < 'h7b7) ? 8'hf0 : + (i < 'h7b8) ? 8'hf4 : (i < 'h7b9) ? 8'hf0 : (i < 'h7bb) ? 8'hf4 : (i < 'h7bd) ? 8'hf6 : + (i < 'h7c0) ? 8'hf7 : (i < 'h7c3) ? 8'hf0 : (i < 'h7c4) ? 8'hf8 : (i < 'h7c5) ? 8'hf0 : + (i < 'h7db) ? 8'hf8 : (i < 'h7dd) ? 8'hfa : (i < 'h7e0) ? 8'hfb : (i < 'h7e1) ? 8'hf8 : + (i < 'h7ed) ? 8'hfc : (i < 'h7f0) ? 8'hfd : (i < 'h7f8) ? 8'hfe : 8'hff; + + for(i = 0; i<4096; i=i+1) wave_ps_[i] = + (i < 'h07f) ? 8'h00 : (i < 'h080) ? 8'h03 : (i < 'h0bf) ? 8'h00 : (i < 'h0c0) ? 8'h01 : + (i < 'h0ff) ? 8'h00 : (i < 'h100) ? 8'h0f : (i < 'h17f) ? 8'h00 : (i < 'h180) ? 8'h07 : + (i < 'h1bf) ? 8'h00 : (i < 'h1c0) ? 8'h03 : (i < 'h1df) ? 8'h00 : (i < 'h1e0) ? 8'h01 : + (i < 'h1fd) ? 8'h00 : (i < 'h1ff) ? 8'h07 : (i < 'h200) ? 8'h1f : (i < 'h27f) ? 8'h00 : + (i < 'h280) ? 8'h03 : (i < 'h2bf) ? 8'h00 : (i < 'h2c0) ? 8'h03 : (i < 'h2df) ? 8'h00 : + (i < 'h2e0) ? 8'h01 : (i < 'h2fe) ? 8'h00 : (i < 'h2ff) ? 8'h01 : (i < 'h300) ? 8'h0f : + (i < 'h33f) ? 8'h00 : (i < 'h340) ? 8'h01 : (i < 'h37f) ? 8'h00 : (i < 'h380) ? 8'h17 : + (i < 'h3bf) ? 8'h00 : (i < 'h3c0) ? 8'h3b : (i < 'h3df) ? 8'h00 : (i < 'h3e0) ? 8'h3d : + (i < 'h3ef) ? 8'h00 : (i < 'h3f0) ? 8'h3e : (i < 'h3f7) ? 8'h00 : (i < 'h3f8) ? 8'h3f : + (i < 'h3f9) ? 8'h00 : (i < 'h3fa) ? 8'h0c : (i < 'h3fb) ? 8'h1c : (i < 'h3fc) ? 8'h3f : + (i < 'h3fd) ? 8'h1e : (i < 'h400) ? 8'h3f : (i < 'h47f) ? 8'h00 : (i < 'h480) ? 8'h03 : + (i < 'h4bf) ? 8'h00 : (i < 'h4c0) ? 8'h01 : (i < 'h4ff) ? 8'h00 : (i < 'h500) ? 8'h0f : + (i < 'h53f) ? 8'h00 : (i < 'h540) ? 8'h01 : (i < 'h57f) ? 8'h00 : (i < 'h580) ? 8'h07 : + (i < 'h5bf) ? 8'h00 : (i < 'h5c0) ? 8'h0b : (i < 'h5df) ? 8'h00 : (i < 'h5e0) ? 8'h0a : + (i < 'h5ef) ? 8'h00 : (i < 'h5f0) ? 8'h5e : (i < 'h5f7) ? 8'h00 : (i < 'h5f8) ? 8'h5f : + (i < 'h5fb) ? 8'h00 : (i < 'h5fc) ? 8'h5f : (i < 'h5fd) ? 8'h0c : (i < 'h600) ? 8'h5f : + (i < 'h63f) ? 8'h00 : (i < 'h640) ? 8'h01 : (i < 'h67f) ? 8'h00 : (i < 'h680) ? 8'h47 : + (i < 'h6bf) ? 8'h00 : (i < 'h6c0) ? 8'h43 : (i < 'h6df) ? 8'h00 : (i < 'h6e0) ? 8'h65 : + (i < 'h6ef) ? 8'h00 : (i < 'h6f0) ? 8'h6e : (i < 'h6f7) ? 8'h00 : (i < 'h6f8) ? 8'h6f : + (i < 'h6f9) ? 8'h00 : (i < 'h6fb) ? 8'h40 : (i < 'h6fc) ? 8'h6f : (i < 'h6fd) ? 8'h40 : + (i < 'h700) ? 8'h6f : (i < 'h73f) ? 8'h00 : (i < 'h740) ? 8'h63 : (i < 'h75e) ? 8'h00 : + (i < 'h75f) ? 8'h40 : (i < 'h760) ? 8'h61 : (i < 'h767) ? 8'h00 : (i < 'h768) ? 8'h40 : + (i < 'h76b) ? 8'h00 : (i < 'h76c) ? 8'h40 : (i < 'h76d) ? 8'h00 : (i < 'h76f) ? 8'h40 : + (i < 'h770) ? 8'h70 : (i < 'h772) ? 8'h00 : (i < 'h777) ? 8'h40 : (i < 'h778) ? 8'h70 : + (i < 'h779) ? 8'h40 : (i < 'h77b) ? 8'h60 : (i < 'h77c) ? 8'h77 : (i < 'h77d) ? 8'h60 : + (i < 'h780) ? 8'h77 : (i < 'h78f) ? 8'h00 : (i < 'h790) ? 8'h40 : (i < 'h796) ? 8'h00 : + (i < 'h797) ? 8'h40 : (i < 'h798) ? 8'h60 : (i < 'h799) ? 8'h00 : (i < 'h79b) ? 8'h40 : + (i < 'h79c) ? 8'h60 : (i < 'h79d) ? 8'h40 : (i < 'h79f) ? 8'h60 : (i < 'h7a0) ? 8'h79 : + (i < 'h7a1) ? 8'h00 : (i < 'h7a7) ? 8'h40 : (i < 'h7a8) ? 8'h60 : (i < 'h7ab) ? 8'h40 : + (i < 'h7af) ? 8'h60 : (i < 'h7b0) ? 8'h78 : (i < 'h7b1) ? 8'h40 : (i < 'h7b7) ? 8'h60 : + (i < 'h7b8) ? 8'h78 : (i < 'h7b9) ? 8'h60 : (i < 'h7bb) ? 8'h70 : (i < 'h7bc) ? 8'h78 : + (i < 'h7bd) ? 8'h70 : (i < 'h7be) ? 8'h79 : (i < 'h7c0) ? 8'h7b : (i < 'h7c7) ? 8'h60 : + (i < 'h7c8) ? 8'h70 : (i < 'h7cb) ? 8'h60 : (i < 'h7cc) ? 8'h70 : (i < 'h7cd) ? 8'h60 : + (i < 'h7cf) ? 8'h70 : (i < 'h7d0) ? 8'h7c : (i < 'h7d1) ? 8'h60 : (i < 'h7d7) ? 8'h70 : + (i < 'h7d8) ? 8'h7c : (i < 'h7d9) ? 8'h70 : (i < 'h7db) ? 8'h78 : (i < 'h7dc) ? 8'h7c : + (i < 'h7dd) ? 8'h78 : (i < 'h7df) ? 8'h7c : (i < 'h7e0) ? 8'h7d : (i < 'h7e1) ? 8'h70 : + (i < 'h7e7) ? 8'h78 : (i < 'h7e8) ? 8'h7c : (i < 'h7e9) ? 8'h78 : (i < 'h7eb) ? 8'h7c : + (i < 'h7ec) ? 8'h7e : (i < 'h7ed) ? 8'h7c : (i < 'h7f0) ? 8'h7e : (i < 'h7f3) ? 8'h7c : + (i < 'h7f5) ? 8'h7e : (i < 'h7f8) ? 8'h7f : (i < 'h7f9) ? 8'h7e : (i < 'h7ff) ? 8'h7f : + (i < 'h800) ? 8'hff : (i < 'h87f) ? 8'h00 : (i < 'h880) ? 8'h03 : (i < 'h8bf) ? 8'h00 : + (i < 'h8c0) ? 8'h01 : (i < 'h8ff) ? 8'h00 : (i < 'h900) ? 8'h8f : (i < 'h93f) ? 8'h00 : + (i < 'h940) ? 8'h01 : (i < 'h97f) ? 8'h00 : (i < 'h980) ? 8'h87 : (i < 'h9bf) ? 8'h00 : + (i < 'h9c0) ? 8'h83 : (i < 'h9de) ? 8'h00 : (i < 'h9df) ? 8'h80 : (i < 'h9e0) ? 8'h8d : + (i < 'h9e7) ? 8'h00 : (i < 'h9e8) ? 8'h80 : (i < 'h9eb) ? 8'h00 : (i < 'h9ec) ? 8'h80 : + (i < 'h9ed) ? 8'h00 : (i < 'h9ef) ? 8'h80 : (i < 'h9f0) ? 8'h8e : (i < 'h9f3) ? 8'h00 : + (i < 'h9f7) ? 8'h80 : (i < 'h9f8) ? 8'h8f : (i < 'h9fb) ? 8'h80 : (i < 'h9fc) ? 8'h9f : + (i < 'h9fd) ? 8'h80 : (i < 'ha00) ? 8'h9f : (i < 'ha3f) ? 8'h00 : (i < 'ha40) ? 8'h01 : + (i < 'ha6f) ? 8'h00 : (i < 'ha70) ? 8'h80 : (i < 'ha77) ? 8'h00 : (i < 'ha78) ? 8'h80 : + (i < 'ha7b) ? 8'h00 : (i < 'ha7c) ? 8'h80 : (i < 'ha7d) ? 8'h00 : (i < 'ha7f) ? 8'h80 : + (i < 'ha80) ? 8'h87 : (i < 'ha9f) ? 8'h00 : (i < 'haa0) ? 8'h80 : (i < 'haaf) ? 8'h00 : + (i < 'hab0) ? 8'h80 : (i < 'hab7) ? 8'h00 : (i < 'hab8) ? 8'h80 : (i < 'habb) ? 8'h00 : + (i < 'habf) ? 8'h80 : (i < 'hac0) ? 8'h83 : (i < 'hacf) ? 8'h00 : (i < 'had0) ? 8'h80 : + (i < 'had5) ? 8'h00 : (i < 'had8) ? 8'h80 : (i < 'had9) ? 8'h00 : (i < 'hadf) ? 8'h80 : + (i < 'hae0) ? 8'h81 : (i < 'haef) ? 8'h80 : (i < 'haf0) ? 8'h84 : (i < 'haf7) ? 8'h80 : + (i < 'haf8) ? 8'h87 : (i < 'hafb) ? 8'h80 : (i < 'hafc) ? 8'h87 : (i < 'hafd) ? 8'h80 : + (i < 'hafe) ? 8'h8f : (i < 'hb00) ? 8'haf : (i < 'hb0f) ? 8'h00 : (i < 'hb10) ? 8'h80 : + (i < 'hb17) ? 8'h00 : (i < 'hb18) ? 8'h80 : (i < 'hb1b) ? 8'h00 : (i < 'hb20) ? 8'h80 : + (i < 'hb23) ? 8'h00 : (i < 'hb24) ? 8'h80 : (i < 'hb26) ? 8'h00 : (i < 'hb28) ? 8'h80 : + (i < 'hb29) ? 8'h00 : (i < 'hb3f) ? 8'h80 : (i < 'hb40) ? 8'h83 : (i < 'hb5f) ? 8'h80 : + (i < 'hb60) ? 8'h81 : (i < 'hb6f) ? 8'h80 : (i < 'hb70) ? 8'ha0 : (i < 'hb77) ? 8'h80 : + (i < 'hb78) ? 8'ha0 : (i < 'hb7b) ? 8'h80 : (i < 'hb7c) ? 8'ha0 : (i < 'hb7d) ? 8'h80 : + (i < 'hb7e) ? 8'ha3 : (i < 'hb80) ? 8'hb7 : (i < 'hb9f) ? 8'h80 : (i < 'hba0) ? 8'hb1 : + (i < 'hbaf) ? 8'h80 : (i < 'hbb0) ? 8'hb0 : (i < 'hbb7) ? 8'h80 : (i < 'hbb8) ? 8'hb0 : + (i < 'hbb9) ? 8'h80 : (i < 'hbbb) ? 8'ha0 : (i < 'hbbc) ? 8'hb0 : (i < 'hbbd) ? 8'ha0 : + (i < 'hbbe) ? 8'hb8 : (i < 'hbbf) ? 8'hb9 : (i < 'hbc0) ? 8'hbb : (i < 'hbc7) ? 8'h80 : + (i < 'hbc8) ? 8'ha0 : (i < 'hbcb) ? 8'h80 : (i < 'hbcc) ? 8'ha0 : (i < 'hbcd) ? 8'h80 : + (i < 'hbcf) ? 8'ha0 : (i < 'hbd0) ? 8'hb8 : (i < 'hbd1) ? 8'h80 : (i < 'hbd7) ? 8'ha0 : + (i < 'hbd8) ? 8'hb8 : (i < 'hbd9) ? 8'ha0 : (i < 'hbdb) ? 8'hb0 : (i < 'hbdc) ? 8'hb8 : + (i < 'hbdd) ? 8'hb0 : (i < 'hbdf) ? 8'hbc : (i < 'hbe0) ? 8'hbd : (i < 'hbe1) ? 8'ha0 : + (i < 'hbe5) ? 8'hb0 : (i < 'hbe7) ? 8'hb8 : (i < 'hbe8) ? 8'hbc : (i < 'hbe9) ? 8'hb0 : + (i < 'hbeb) ? 8'hb8 : (i < 'hbec) ? 8'hbc : (i < 'hbed) ? 8'hb8 : (i < 'hbee) ? 8'hbc : + (i < 'hbf0) ? 8'hbe : (i < 'hbf1) ? 8'hb8 : (i < 'hbf3) ? 8'hbc : (i < 'hbf4) ? 8'hbe : + (i < 'hbf5) ? 8'hbc : (i < 'hbf7) ? 8'hbe : (i < 'hbf8) ? 8'hbf : (i < 'hbf9) ? 8'hbe : + (i < 'hc00) ? 8'hbf : (i < 'hc03) ? 8'h00 : (i < 'hc04) ? 8'h80 : (i < 'hc07) ? 8'h00 : + (i < 'hc08) ? 8'h80 : (i < 'hc0b) ? 8'h00 : (i < 'hc0c) ? 8'h80 : (i < 'hc0f) ? 8'h00 : + (i < 'hc10) ? 8'h80 : (i < 'hc11) ? 8'h00 : (i < 'hc18) ? 8'h80 : (i < 'hc19) ? 8'h00 : + (i < 'hc3f) ? 8'h80 : (i < 'hc40) ? 8'h81 : (i < 'hc7f) ? 8'h80 : (i < 'hc80) ? 8'hc7 : + (i < 'hcbe) ? 8'h80 : (i < 'hcbf) ? 8'hc0 : (i < 'hcc0) ? 8'hc3 : (i < 'hccf) ? 8'h80 : + (i < 'hcd0) ? 8'hc0 : (i < 'hcd7) ? 8'h80 : (i < 'hcd8) ? 8'hc0 : (i < 'hcdb) ? 8'h80 : + (i < 'hcdc) ? 8'hc0 : (i < 'hcdd) ? 8'h80 : (i < 'hcdf) ? 8'hc0 : (i < 'hce0) ? 8'hc1 : + (i < 'hce7) ? 8'h80 : (i < 'hce8) ? 8'hc0 : (i < 'hceb) ? 8'h80 : (i < 'hcf7) ? 8'hc0 : + (i < 'hcf8) ? 8'hc7 : (i < 'hcfb) ? 8'hc0 : (i < 'hcfc) ? 8'hc7 : (i < 'hcfd) ? 8'hc0 : + (i < 'hd00) ? 8'hcf : (i < 'hd1f) ? 8'h80 : (i < 'hd20) ? 8'hc0 : (i < 'hd2f) ? 8'h80 : + (i < 'hd30) ? 8'hc0 : (i < 'hd36) ? 8'h80 : (i < 'hd38) ? 8'hc0 : (i < 'hd39) ? 8'h80 : + (i < 'hd3f) ? 8'hc0 : (i < 'hd40) ? 8'hc3 : (i < 'hd47) ? 8'h80 : (i < 'hd48) ? 8'hc0 : + (i < 'hd4b) ? 8'h80 : (i < 'hd4c) ? 8'hc0 : (i < 'hd4d) ? 8'h80 : (i < 'hd50) ? 8'hc0 : + (i < 'hd51) ? 8'h80 : (i < 'hd5f) ? 8'hc0 : (i < 'hd60) ? 8'hc1 : (i < 'hd7d) ? 8'hc0 : + (i < 'hd7e) ? 8'hc1 : (i < 'hd7f) ? 8'hc7 : (i < 'hd80) ? 8'hd7 : (i < 'hdaf) ? 8'hc0 : + (i < 'hdb0) ? 8'hd0 : (i < 'hdb7) ? 8'hc0 : (i < 'hdb8) ? 8'hd0 : (i < 'hdbb) ? 8'hc0 : + (i < 'hdbc) ? 8'hd0 : (i < 'hdbd) ? 8'hc0 : (i < 'hdbe) ? 8'hd0 : (i < 'hdbf) ? 8'hd8 : + (i < 'hdc0) ? 8'hdb : (i < 'hdcf) ? 8'hc0 : (i < 'hdd0) ? 8'hd8 : (i < 'hdd7) ? 8'hc0 : + (i < 'hdd8) ? 8'hd8 : (i < 'hddb) ? 8'hc0 : (i < 'hddc) ? 8'hd8 : (i < 'hddd) ? 8'hd0 : + (i < 'hddf) ? 8'hd8 : (i < 'hde0) ? 8'hdd : (i < 'hde3) ? 8'hc0 : (i < 'hde4) ? 8'hd0 : + (i < 'hde5) ? 8'hc0 : (i < 'hde7) ? 8'hd0 : (i < 'hde8) ? 8'hdc : (i < 'hde9) ? 8'hd0 : + (i < 'hdeb) ? 8'hd8 : (i < 'hdec) ? 8'hdc : (i < 'hded) ? 8'hd8 : (i < 'hdef) ? 8'hdc : + (i < 'hdf0) ? 8'hde : (i < 'hdf1) ? 8'hd8 : (i < 'hdf3) ? 8'hdc : (i < 'hdf4) ? 8'hde : + (i < 'hdf5) ? 8'hdc : (i < 'hdf7) ? 8'hde : (i < 'hdf8) ? 8'hdf : (i < 'hdf9) ? 8'hde : + (i < 'he00) ? 8'hdf : (i < 'he3f) ? 8'hc0 : (i < 'he40) ? 8'he3 : (i < 'he57) ? 8'hc0 : + (i < 'he58) ? 8'he0 : (i < 'he5b) ? 8'hc0 : (i < 'he5c) ? 8'he0 : (i < 'he5d) ? 8'hc0 : + (i < 'he5f) ? 8'he0 : (i < 'he60) ? 8'he1 : (i < 'he67) ? 8'hc0 : (i < 'he68) ? 8'he0 : + (i < 'he6b) ? 8'hc0 : (i < 'he70) ? 8'he0 : (i < 'he71) ? 8'hc0 : (i < 'he7d) ? 8'he0 : + (i < 'he7e) ? 8'he1 : (i < 'he7f) ? 8'he3 : (i < 'he80) ? 8'he7 : (i < 'he87) ? 8'hc0 : + (i < 'he88) ? 8'he0 : (i < 'he8b) ? 8'hc0 : (i < 'he8c) ? 8'he0 : (i < 'he8d) ? 8'hc0 : + (i < 'he90) ? 8'he0 : (i < 'he93) ? 8'hc0 : (i < 'he94) ? 8'he0 : (i < 'he95) ? 8'hc0 : + (i < 'hebf) ? 8'he0 : (i < 'hec0) ? 8'heb : (i < 'hedb) ? 8'he0 : (i < 'hedc) ? 8'he8 : + (i < 'hedd) ? 8'he0 : (i < 'hedf) ? 8'he8 : (i < 'hee0) ? 8'hed : (i < 'hee7) ? 8'he0 : + (i < 'hee8) ? 8'hec : (i < 'heeb) ? 8'he0 : (i < 'heec) ? 8'hec : (i < 'heed) ? 8'he8 : + (i < 'heef) ? 8'hec : (i < 'hef0) ? 8'hee : (i < 'hef3) ? 8'he8 : (i < 'hef5) ? 8'hec : + (i < 'hef7) ? 8'hee : (i < 'hef8) ? 8'hef : (i < 'hef9) ? 8'hec : (i < 'hf00) ? 8'hef : + (i < 'hf1f) ? 8'he0 : (i < 'hf20) ? 8'hf0 : (i < 'hf27) ? 8'he0 : (i < 'hf28) ? 8'hf0 : + (i < 'hf2b) ? 8'he0 : (i < 'hf2c) ? 8'hf0 : (i < 'hf2d) ? 8'he0 : (i < 'hf30) ? 8'hf0 : + (i < 'hf33) ? 8'he0 : (i < 'hf3f) ? 8'hf0 : (i < 'hf40) ? 8'hf3 : (i < 'hf43) ? 8'he0 : + (i < 'hf5f) ? 8'hf0 : (i < 'hf60) ? 8'hf5 : (i < 'hf6d) ? 8'hf0 : (i < 'hf6f) ? 8'hf4 : + (i < 'hf70) ? 8'hf6 : (i < 'hf73) ? 8'hf0 : (i < 'hf74) ? 8'hf4 : (i < 'hf75) ? 8'hf0 : + (i < 'hf76) ? 8'hf4 : (i < 'hf77) ? 8'hf6 : (i < 'hf78) ? 8'hf7 : (i < 'hf79) ? 8'hf4 : + (i < 'hf7b) ? 8'hf6 : (i < 'hf80) ? 8'hf7 : (i < 'hf87) ? 8'hf0 : (i < 'hf88) ? 8'hf8 : + (i < 'hf8d) ? 8'hf0 : (i < 'hf90) ? 8'hf8 : (i < 'hf93) ? 8'hf0 : (i < 'hf94) ? 8'hf8 : + (i < 'hf95) ? 8'hf0 : (i < 'hf9f) ? 8'hf8 : (i < 'hfa0) ? 8'hf9 : (i < 'hfaf) ? 8'hf8 : + (i < 'hfb0) ? 8'hfa : (i < 'hfb7) ? 8'hf8 : (i < 'hfb8) ? 8'hfb : (i < 'hfb9) ? 8'hf8 : + (i < 'hfbb) ? 8'hfa : (i < 'hfc0) ? 8'hfb : (i < 'hfc3) ? 8'hf8 : (i < 'hfc4) ? 8'hfc : + (i < 'hfc5) ? 8'hf8 : (i < 'hfd7) ? 8'hfc : (i < 'hfd8) ? 8'hfd : (i < 'hfdb) ? 8'hfc : + (i < 'hfe0) ? 8'hfd : (i < 'hfe2) ? 8'hfc : (i < 'hff0) ? 8'hfe : 8'hff; + + for(i = 0; i<4096; i=i+1) wave_pst[i] = + (i < 'h3ff) ? 8'h00 : (i < 'h400) ? 8'h1f : (i < 'h7ee) ? 8'h00 : (i < 'h7ef) ? 8'h20 : + (i < 'h7f0) ? 8'h70 : (i < 'h7f1) ? 8'h60 : (i < 'h7f2) ? 8'h20 : (i < 'h7f7) ? 8'h70 : + (i < 'h7fa) ? 8'h78 : (i < 'h7fc) ? 8'h7c : (i < 'h7fe) ? 8'h7e : (i < 'h800) ? 8'h7f : + (i < 'hbfd) ? 8'h00 : (i < 'hbfe) ? 8'h08 : (i < 'hbff) ? 8'h1e : (i < 'hc00) ? 8'h3f : + (i < 'hdf7) ? 8'h00 : (i < 'hdfe) ? 8'h80 : (i < 'hdff) ? 8'h8c : (i < 'he00) ? 8'h9f : + (i < 'he3e) ? 8'h00 : (i < 'he40) ? 8'h80 : (i < 'he5e) ? 8'h00 : (i < 'he60) ? 8'h80 : + (i < 'he66) ? 8'h00 : (i < 'he67) ? 8'h80 : (i < 'he6a) ? 8'h00 : (i < 'he80) ? 8'h80 : + (i < 'he82) ? 8'h00 : (i < 'he83) ? 8'h80 : (i < 'he85) ? 8'h00 : (i < 'he89) ? 8'h80 : + (i < 'he8a) ? 8'h00 : (i < 'heee) ? 8'h80 : (i < 'heff) ? 8'hc0 : (i < 'hf00) ? 8'hcf : + (i < 'hf6f) ? 8'hc0 : (i < 'hf70) ? 8'he0 : (i < 'hf74) ? 8'hc0 : (i < 'hf7f) ? 8'he0 : + (i < 'hf80) ? 8'he3 : (i < 'hfb6) ? 8'he0 : (i < 'hfda) ? 8'hf0 : (i < 'hfeb) ? 8'hf8 : + (i < 'hff5) ? 8'hfc : (i < 'hff9) ? 8'hfe : 8'hff; +end + +endmodule diff --git a/Commodore - 64_MiST/rtl/sigma_delta_dac.v b/Commodore - 64_MiST/rtl/sigma_delta_dac.v index d692f3a0..b7ae41d1 100644 --- a/Commodore - 64_MiST/rtl/sigma_delta_dac.v +++ b/Commodore - 64_MiST/rtl/sigma_delta_dac.v @@ -1,29 +1,130 @@ -module sigma_delta_dac #(parameter MSBI=14, parameter INV=1'b1) -( - output reg DACout = INV, //Average Output feeding analog lowpass - input [MSBI:0] DACin, //DAC input (excess 2**MSBI) - input CLK, - input RESET +// sigmadelta.v +// two channel second order sigma delta dac +// taken from Minimig + +// audio data processing +// stereo sigma/delta bitstream modulator +module sigma_delta_dac ( + input clk, // bus clock + input [14:0] ldatasum, // left channel data + input [14:0] rdatasum, // right channel data + output reg aleft=0, // left bitstream output + output reg aright=0 // right bitsteam output ); -reg [MSBI+2:0] DeltaAdder; //Output of Delta Adder -reg [MSBI+2:0] SigmaAdder; //Output of Sigma Adder -reg [MSBI+2:0] SigmaLatch; //Latches output of Sigma Adder -reg [MSBI+2:0] DeltaB; //B input of Delta Adder +//-------------------------------------------------------------------------------------- -always @(*) DeltaB = {SigmaLatch[MSBI+2], SigmaLatch[MSBI+2]} << (MSBI+1); -always @(*) DeltaAdder = DACin + DeltaB; -always @(*) SigmaAdder = DeltaAdder + SigmaLatch; +// local signals +localparam DW = 15; +localparam CW = 2; +localparam RW = 4; +localparam A1W = 2; +localparam A2W = 5; -always @(posedge CLK or posedge RESET) begin - if(RESET) begin - SigmaLatch <= 1'b1 << (MSBI+1); - DACout <= INV; - end else begin - SigmaLatch <= SigmaAdder; - DACout <= SigmaLatch[MSBI+2] ^ INV; - end +wire [DW+2+0 -1:0] sd_l_er0, sd_r_er0; +reg [DW+2+0 -1:0] sd_l_er0_prev=0, sd_r_er0_prev=0; +wire [DW+A1W+2-1:0] sd_l_aca1, sd_r_aca1; +wire [DW+A2W+2-1:0] sd_l_aca2, sd_r_aca2; +reg [DW+A1W+2-1:0] sd_l_ac1=0, sd_r_ac1=0; +reg [DW+A2W+2-1:0] sd_l_ac2=0, sd_r_ac2=0; +wire [DW+A2W+3-1:0] sd_l_quant, sd_r_quant; + +// LPF noise LFSR +reg [24-1:0] seed1 = 24'h654321; +reg [19-1:0] seed2 = 19'h12345; +reg [24-1:0] seed_sum=0, seed_prev=0, seed_out=0; +always @ (posedge clk) begin + if (&seed1) + seed1 <= #1 24'h654321; + else + seed1 <= #1 {seed1[22:0], ~(seed1[23] ^ seed1[22] ^ seed1[21] ^ seed1[16])}; +end +always @ (posedge clk) begin + if (&seed2) + seed2 <= #1 19'h12345; + else + seed2 <= #1 {seed2[17:0], ~(seed2[18] ^ seed2[17] ^ seed2[16] ^ seed2[13] ^ seed2[0])}; +end +always @ (posedge clk) begin + seed_sum <= #1 seed1 + {5'b0, seed2}; + seed_prev <= #1 seed_sum; + seed_out <= #1 seed_sum - seed_prev; end -endmodule +// linear interpolate +localparam ID=4; // counter size, also 2^ID = interpolation rate +reg [ID+0-1:0] int_cnt = 0; +always @ (posedge clk) int_cnt <= #1 int_cnt + 'd1; + +reg [DW+0-1:0] ldata_cur=0, ldata_prev=0; +reg [DW+0-1:0] rdata_cur=0, rdata_prev=0; +wire [DW+1-1:0] ldata_step, rdata_step; +reg [DW+ID-1:0] ldata_int=0, rdata_int=0; +wire [DW+0-1:0] ldata_int_out, rdata_int_out; +assign ldata_step = {ldata_cur[DW-1], ldata_cur} - {ldata_prev[DW-1], ldata_prev}; // signed subtract +assign rdata_step = {rdata_cur[DW-1], rdata_cur} - {rdata_prev[DW-1], rdata_prev}; // signed subtract +always @ (posedge clk) begin + if (~|int_cnt) begin + ldata_prev <= #1 ldata_cur; + ldata_cur <= #1 ldatasum; //{~ldatasum[DW-1], ldatasum[DW-2:0]}; // convert to offset binary, samples no longer signed! + rdata_prev <= #1 rdata_cur; + rdata_cur <= #1 rdatasum; //{~rdatasum[DW-1], rdatasum[DW-2:0]}; // convert to offset binary, samples no longer signed! + ldata_int <= #1 {ldata_cur[DW-1], ldata_cur, {ID{1'b0}}}; + rdata_int <= #1 {rdata_cur[DW-1], rdata_cur, {ID{1'b0}}}; + end else begin + ldata_int <= #1 ldata_int + {{ID{ldata_step[DW+1-1]}}, ldata_step}; + rdata_int <= #1 rdata_int + {{ID{rdata_step[DW+1-1]}}, rdata_step}; + end +end +assign ldata_int_out = ldata_int[DW+ID-1:ID]; +assign rdata_int_out = rdata_int[DW+ID-1:ID]; + +// input gain x3 +wire [DW+2-1:0] ldata_gain, rdata_gain; +assign ldata_gain = {ldata_int_out[DW-1], ldata_int_out, 1'b0} + {{(2){ldata_int_out[DW-1]}}, ldata_int_out}; +assign rdata_gain = {rdata_int_out[DW-1], rdata_int_out, 1'b0} + {{(2){rdata_int_out[DW-1]}}, rdata_int_out}; + +/* +// random dither to 15 bits +reg [DW-1:0] ldata=0, rdata=0; +always @ (posedge clk) begin + ldata <= #1 ldata_gain[DW+2-1:2] + ( (~(&ldata_gain[DW+2-1-1:2]) && (ldata_gain[1:0] > seed_out[1:0])) ? 15'd1 : 15'd0 ); + rdata <= #1 rdata_gain[DW+2-1:2] + ( (~(&ldata_gain[DW+2-1-1:2]) && (ldata_gain[1:0] > seed_out[1:0])) ? 15'd1 : 15'd0 ); +end +*/ + +// accumulator adders +assign sd_l_aca1 = {{(A1W){ldata_gain[DW+2-1]}}, ldata_gain} - {{(A1W){sd_l_er0[DW+2-1]}}, sd_l_er0} + sd_l_ac1; +assign sd_r_aca1 = {{(A1W){rdata_gain[DW+2-1]}}, rdata_gain} - {{(A1W){sd_r_er0[DW+2-1]}}, sd_r_er0} + sd_r_ac1; + +assign sd_l_aca2 = {{(A2W-A1W){sd_l_aca1[DW+A1W+2-1]}}, sd_l_aca1} - {{(A2W){sd_l_er0[DW+2-1]}}, sd_l_er0} - {{(A2W+1){sd_l_er0_prev[DW+2-1]}}, sd_l_er0_prev[DW+2-1:1]} + sd_l_ac2; +assign sd_r_aca2 = {{(A2W-A1W){sd_r_aca1[DW+A1W+2-1]}}, sd_r_aca1} - {{(A2W){sd_r_er0[DW+2-1]}}, sd_r_er0} - {{(A2W+1){sd_r_er0_prev[DW+2-1]}}, sd_r_er0_prev[DW+2-1:1]} + sd_r_ac2; + +// accumulators +always @ (posedge clk) begin + sd_l_ac1 <= #1 sd_l_aca1; + sd_r_ac1 <= #1 sd_r_aca1; + sd_l_ac2 <= #1 sd_l_aca2; + sd_r_ac2 <= #1 sd_r_aca2; +end + +// value for quantizaton +assign sd_l_quant = {sd_l_ac2[DW+A2W+2-1], sd_l_ac2} + {{(DW+A2W+3-RW){seed_out[RW-1]}}, seed_out[RW-1:0]}; +assign sd_r_quant = {sd_r_ac2[DW+A2W+2-1], sd_r_ac2} + {{(DW+A2W+3-RW){seed_out[RW-1]}}, seed_out[RW-1:0]}; + +// error feedback +assign sd_l_er0 = sd_l_quant[DW+A2W+3-1] ? {1'b1, {(DW+2-1){1'b0}}} : {1'b0, {(DW+2-1){1'b1}}}; +assign sd_r_er0 = sd_r_quant[DW+A2W+3-1] ? {1'b1, {(DW+2-1){1'b0}}} : {1'b0, {(DW+2-1){1'b1}}}; +always @ (posedge clk) begin + sd_l_er0_prev <= #1 (&sd_l_er0) ? sd_l_er0 : sd_l_er0+1; + sd_r_er0_prev <= #1 (&sd_r_er0) ? sd_r_er0 : sd_r_er0+1; +end + +// output +always @ (posedge clk) begin + aleft <= #1 (~|ldata_gain) ? ~aleft : ~sd_l_er0[DW+2-1]; + aright <= #1 (~|rdata_gain) ? ~aright : ~sd_r_er0[DW+2-1]; +end + +endmodule \ No newline at end of file diff --git a/Commodore - 64_MiST/rtl/unused/Header_buffer.sv b/Commodore - 64_MiST/rtl/unused/Header_buffer.sv deleted file mode 100644 index 2058965a..00000000 --- a/Commodore - 64_MiST/rtl/unused/Header_buffer.sv +++ /dev/null @@ -1,20 +0,0 @@ -// 64 byte buffer for loading files -// used to interrogate file type -// L.C.Ashmore 17 -// -// - - -module header_buffer -( -inout reg [7:0] header_buff [0:63] -); - -integer i; - -initial begin - for (i = 0; i < 64; i = i +1) - header_buff [i] = 0; - end -endmodule - \ No newline at end of file diff --git a/Commodore - 64_MiST/rtl/unused/block_transfer.v b/Commodore - 64_MiST/rtl/unused/block_transfer.v deleted file mode 100644 index 5db33b45..00000000 --- a/Commodore - 64_MiST/rtl/unused/block_transfer.v +++ /dev/null @@ -1,46 +0,0 @@ -// memory block transfer routine -// L.C.Ashmore feb17 -// -// PRG T64 CRT TAP files load to intermediate buffer 0x200000 (2m) -// -// this routine reads 1st 16bytes to determine file type then either: -// 1, if CRT or TAP move to 0x100000 (1m) and sets cartridge or tap attached flags -// 2, if PRG or T64 moves directly into c64 memory map (injection) -// T64 format pain in the arse so only basic function !! - -module block_transfer -( -input clk32, -input [31:0] addr_total_size, -input sdram_we, -input sdram_data_out, -output cart_attached, -output reg [24:0] sdram_read_addr, -output reg [24:0] sdram_write_addr, -inout reg [7:0] sdram_data -); - -localparam buffer_address2m = 'h200000; -localparam buffer_address1m = 'h100000; - -reg [24:0] block_addr; -//reg [24:0] sdram_read_addr; -//reg [24:0] sdram_write_addr; -//reg [7:0] sdram_data; -reg transfer_active; -reg read_flag; - -always @(negedge clk32) - begin - if (sdram_we == 1 && transfer_active && !read_flag) //sdram in read cycle - not yet read - begin - sdram_read_addr <= block_addr + buffer_address2m; - sdram_data <= sdram_data_out; - read_flag = 1; - end - if (sdram_we == 0 && read_flag) - begin - sdram_write_addr <= block_addr +buffer_address1m; - end - end -endmodule