diff --git a/Arcade_MiST/Nintendo Mario Bros/MarioBros.qpf b/Arcade_MiST/Nintendo Mario Bros/MarioBros.qpf new file mode 100644 index 00000000..56cabc47 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/MarioBros.qpf @@ -0,0 +1,30 @@ +# -------------------------------------------------------------------------- # +# +# 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 64-Bit +# Version 13.1.4 Build 182 03/12/2014 SJ Web Edition +# Date created = 16:52:48 September 16, 2019 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "13.1" +DATE = "16:52:48 September 16, 2019" + +# Revisions + +PROJECT_REVISION = "MarioBros" diff --git a/Arcade_MiST/Nintendo Mario Bros/MarioBros.qsf b/Arcade_MiST/Nintendo Mario Bros/MarioBros.qsf new file mode 100644 index 00000000..5a15b6be --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/MarioBros.qsf @@ -0,0 +1,262 @@ +# -------------------------------------------------------------------------- # +# +# 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 64-Bit +# Version 13.1.4 Build 182 03/12/2014 SJ Full Version +# Date created = 19:25:53 March 30, 2021 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# MarioBros_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 16.1.2 +set_global_assignment -name LAST_QUARTUS_VERSION 13.1 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "01:53:30 APRIL 20, 2017" +set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files +set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL +set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl" + +# Pin & Location Assignments +# ========================== +set_location_assignment PIN_7 -to LED +set_location_assignment PIN_54 -to CLOCK_27 +set_location_assignment PIN_144 -to VGA_R[5] +set_location_assignment PIN_143 -to VGA_R[4] +set_location_assignment PIN_142 -to VGA_R[3] +set_location_assignment PIN_141 -to VGA_R[2] +set_location_assignment PIN_137 -to VGA_R[1] +set_location_assignment PIN_135 -to VGA_R[0] +set_location_assignment PIN_133 -to VGA_B[5] +set_location_assignment PIN_132 -to VGA_B[4] +set_location_assignment PIN_125 -to VGA_B[3] +set_location_assignment PIN_121 -to VGA_B[2] +set_location_assignment PIN_120 -to VGA_B[1] +set_location_assignment PIN_115 -to VGA_B[0] +set_location_assignment PIN_114 -to VGA_G[5] +set_location_assignment PIN_113 -to VGA_G[4] +set_location_assignment PIN_112 -to VGA_G[3] +set_location_assignment PIN_111 -to VGA_G[2] +set_location_assignment PIN_110 -to VGA_G[1] +set_location_assignment PIN_106 -to VGA_G[0] +set_location_assignment PIN_136 -to VGA_VS +set_location_assignment PIN_119 -to VGA_HS +set_location_assignment PIN_65 -to AUDIO_L +set_location_assignment PIN_80 -to AUDIO_R +set_location_assignment PIN_105 -to SPI_DO +set_location_assignment PIN_88 -to SPI_DI +set_location_assignment PIN_126 -to SPI_SCK +set_location_assignment PIN_127 -to SPI_SS2 +set_location_assignment PIN_91 -to SPI_SS3 +set_location_assignment PIN_13 -to CONF_DATA0 +set_location_assignment PIN_49 -to SDRAM_A[0] +set_location_assignment PIN_44 -to SDRAM_A[1] +set_location_assignment PIN_42 -to SDRAM_A[2] +set_location_assignment PIN_39 -to SDRAM_A[3] +set_location_assignment PIN_4 -to SDRAM_A[4] +set_location_assignment PIN_6 -to SDRAM_A[5] +set_location_assignment PIN_8 -to SDRAM_A[6] +set_location_assignment PIN_10 -to SDRAM_A[7] +set_location_assignment PIN_11 -to SDRAM_A[8] +set_location_assignment PIN_28 -to SDRAM_A[9] +set_location_assignment PIN_50 -to SDRAM_A[10] +set_location_assignment PIN_30 -to SDRAM_A[11] +set_location_assignment PIN_32 -to SDRAM_A[12] +set_location_assignment PIN_83 -to SDRAM_DQ[0] +set_location_assignment PIN_79 -to SDRAM_DQ[1] +set_location_assignment PIN_77 -to SDRAM_DQ[2] +set_location_assignment PIN_76 -to SDRAM_DQ[3] +set_location_assignment PIN_72 -to SDRAM_DQ[4] +set_location_assignment PIN_71 -to SDRAM_DQ[5] +set_location_assignment PIN_69 -to SDRAM_DQ[6] +set_location_assignment PIN_68 -to SDRAM_DQ[7] +set_location_assignment PIN_86 -to SDRAM_DQ[8] +set_location_assignment PIN_87 -to SDRAM_DQ[9] +set_location_assignment PIN_98 -to SDRAM_DQ[10] +set_location_assignment PIN_99 -to SDRAM_DQ[11] +set_location_assignment PIN_100 -to SDRAM_DQ[12] +set_location_assignment PIN_101 -to SDRAM_DQ[13] +set_location_assignment PIN_103 -to SDRAM_DQ[14] +set_location_assignment PIN_104 -to SDRAM_DQ[15] +set_location_assignment PIN_58 -to SDRAM_BA[0] +set_location_assignment PIN_51 -to SDRAM_BA[1] +set_location_assignment PIN_85 -to SDRAM_DQMH +set_location_assignment PIN_67 -to SDRAM_DQML +set_location_assignment PIN_60 -to SDRAM_nRAS +set_location_assignment PIN_64 -to SDRAM_nCAS +set_location_assignment PIN_66 -to SDRAM_nWE +set_location_assignment PIN_59 -to SDRAM_nCS +set_location_assignment PIN_33 -to SDRAM_CKE +set_location_assignment PIN_43 -to SDRAM_CLK +set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component" + +# Classic Timing Assignments +# ========================== +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name FAMILY "Cyclone III" +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144 +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8 +set_global_assignment -name TOP_LEVEL_ENTITY MarioBros_MiST +set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE EP3C25E144C8 +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" +set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF +set_global_assignment -name ENABLE_NCE_PIN OFF +set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" +set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF +set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON +set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO" + +# Assembler Assignments +# ===================== +set_global_assignment -name GENERATE_RBF_FILE ON +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF + +# SignalTap II Assignments +# ======================== +set_global_assignment -name ENABLE_SIGNALTAP OFF +set_global_assignment -name USE_SIGNALTAP_FILE output_files/gberet.stp + +# Power Estimation Assignments +# ============================ +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" + +# Advanced I/O Timing Assignments +# =============================== +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall + +# ---------------------------- +# start ENTITY(MarioBros_MiST) + + # Pin & Location Assignments + # ========================== + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQ[*] + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_A[*] + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[0] + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_BA[1] + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQMH + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_DQML + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nRAS + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCAS + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nWE + set_instance_assignment -name FAST_OUTPUT_REGISTER ON -to SDRAM_nCS + set_instance_assignment -name FAST_OUTPUT_ENABLE_REGISTER ON -to SDRAM_DQ[*] + set_instance_assignment -name FAST_INPUT_REGISTER ON -to SDRAM_DQ[*] + + # Fitter Assignments + # ================== + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_A[*] + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_DQ[*] + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_BA[*] + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_DQML + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_DQMH + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nRAS + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nCAS + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nWE + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_nCS + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_CKE + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to SDRAM_CLK + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_R[*] + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_G[*] + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_B[*] + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_HS + set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_VS + set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to AUDIO_L + set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to AUDIO_R + set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SPI_DO + + # start DESIGN_PARTITION(Top) + # --------------------------- + + # 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(MarioBros_MiST) +# -------------------------- +set_global_assignment -name SYSTEMVERILOG_FILE rtl/MarioBros_MiST.sv +set_global_assignment -name VERILOG_FILE rtl/mario_top.v +set_global_assignment -name VERILOG_FILE rtl/mario_main.v +set_global_assignment -name VERILOG_FILE rtl/mario_input.v +set_global_assignment -name VERILOG_FILE rtl/mario_video.v +set_global_assignment -name VERILOG_FILE rtl/mario_hv_generator.v +set_global_assignment -name VERILOG_FILE rtl/mario_adec.v +set_global_assignment -name VERILOG_FILE rtl/mario_dma.v +set_global_assignment -name VERILOG_FILE rtl/mario_obj.v +set_global_assignment -name VERILOG_FILE rtl/mario_col_pal.v +set_global_assignment -name VERILOG_FILE rtl/mario_vram.v +set_global_assignment -name VERILOG_FILE rtl/mario_logic.v +set_global_assignment -name VERILOG_FILE rtl/mario_sound.v +set_global_assignment -name VERILOG_FILE rtl/mario_sound_mixer.v +set_global_assignment -name VERILOG_FILE rtl/mario_sound_digital.v +set_global_assignment -name VHDL_FILE rtl/rom/snd_rom.vhd +set_global_assignment -name VERILOG_FILE rtl/m58715ip.v +set_global_assignment -name VERILOG_FILE rtl/mario_iir_filter.v +set_global_assignment -name VERILOG_FILE rtl/mario_bram.v +set_global_assignment -name VHDL_FILE rtl/dpram.vhd +set_global_assignment -name VHDL_FILE rtl/rom/obj_7u.vhd +set_global_assignment -name VHDL_FILE rtl/rom/obj_7t.vhd +set_global_assignment -name VHDL_FILE rtl/rom/obj_7s.vhd +set_global_assignment -name VHDL_FILE rtl/rom/obj_7p.vhd +set_global_assignment -name VHDL_FILE rtl/rom/obj_7n.vhd +set_global_assignment -name VHDL_FILE rtl/rom/obj_7m.vhd +set_global_assignment -name VHDL_FILE rtl/rom/gfx_3j.vhd +set_global_assignment -name VHDL_FILE rtl/rom/gfx_3f.vhd +set_global_assignment -name VHDL_FILE rtl/rom/clut_4p.vhd +set_global_assignment -name VHDL_FILE rtl/rom/adec_5p.vhd +set_global_assignment -name SYSTEMVERILOG_FILE rtl/sdram.sv +set_global_assignment -name VERILOG_FILE rtl/pll.v +set_global_assignment -name QIP_FILE "D:/GitHub/Mist_FPGA/common/CPU/T80/T80.qip" +set_global_assignment -name QIP_FILE ../../common/CPU/t48/T48.qip +set_global_assignment -name QIP_FILE "D:/GitHub/Mist_FPGA/common/mist/mist.qip" +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/Arcade_MiST/Nintendo Mario Bros/Snapshot/MarioBros.rbf b/Arcade_MiST/Nintendo Mario Bros/Snapshot/MarioBros.rbf new file mode 100644 index 00000000..18ac933a Binary files /dev/null and b/Arcade_MiST/Nintendo Mario Bros/Snapshot/MarioBros.rbf differ diff --git a/Arcade_MiST/Nintendo Mario Bros/clean.bat b/Arcade_MiST/Nintendo Mario Bros/clean.bat new file mode 100644 index 00000000..b3b7c3b5 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/clean.bat @@ -0,0 +1,37 @@ +@echo off +del /s *.bak +del /s *.orig +del /s *.rej +del /s *~ +rmdir /s /q db +rmdir /s /q incremental_db +rmdir /s /q output_files +rmdir /s /q simulation +rmdir /s /q greybox_tmp +rmdir /s /q hc_output +rmdir /s /q .qsys_edit +rmdir /s /q hps_isw_handoff +rmdir /s /q sys\.qsys_edit +rmdir /s /q sys\vip +cd sys +for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" +cd .. +for /d %%i in (*_sim) do rmdir /s /q "%%~nxi" +del build_id.v +del c5_pin_model_dump.txt +del PLLJ_PLLSPE_INFO.txt +del /s *.qws +del /s *.ppf +del /s *.ddb +del /s *.csv +del /s *.cmp +del /s *.sip +del /s *.spd +del /s *.bsf +del /s *.f +del /s *.sopcinfo +del /s *.xml +del /s new_rtl_netlist +del /s old_rtl_netlist + +pause diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/MarioBros_MiST.sv b/Arcade_MiST/Nintendo Mario Bros/rtl/MarioBros_MiST.sv new file mode 100644 index 00000000..2a306502 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/MarioBros_MiST.sv @@ -0,0 +1,259 @@ +module MarioBros_MiST( + output LED, + output [5:0] VGA_R, + output [5:0] VGA_G, + output [5:0] VGA_B, + output VGA_HS, + output VGA_VS, + output AUDIO_L, + output AUDIO_R, + input SPI_SCK, + output SPI_DO, + input SPI_DI, + input SPI_SS2, + input SPI_SS3, + input SPI_SS4, + input CONF_DATA0, + input CLOCK_27, + output [12:0] SDRAM_A, + inout [15:0] SDRAM_DQ, + output SDRAM_DQML, + output SDRAM_DQMH, + output SDRAM_nWE, + output SDRAM_nCAS, + output SDRAM_nRAS, + output SDRAM_nCS, + output [1:0] SDRAM_BA, + output SDRAM_CLK, + output SDRAM_CKE +); + + +`include "rtl\build_id.v" + +localparam CONF_STR = { + "MARIO;ROM;", + "O34,Scanlines,Off,25%,50%,75%;", + "O5,Blending,Off,On;", + "O6,Service,Off,On;", + "O7A,Analogue Sound Vol,100%,Off,10%,20%,30%,40%,50%,60%,70%,80%,90%,;", + + "T0,Reset;", + "V,v1.00.",`BUILD_DATE +}; + +assign LED = ~ioctl_downl; +assign AUDIO_R = AUDIO_L; +assign SDRAM_CLK = ~clk_sys; +assign SDRAM_CKE = 1; + +wire clk_sys, clk_sd, pll_locked; +pll pll( + .inclk0(CLOCK_27), + .c0(clk_sd),//96 + .c1(clk_sys),//48 + .locked(pll_locked) + ); + +wire [31:0] status; +wire [1:0] buttons; +wire [1:0] switches; +wire [7:0] joystick_0; +wire [7:0] joystick_1; +wire scandoublerD; +wire ypbpr; +wire [15:0] audio; +wire hs_n, vs_n; +wire hb, vb; +wire blankn = ~vb;//~(hb | vb); +wire [2:0] r, g; +wire [1:0] b; + +wire ioctl_downl; +wire [7:0] ioctl_index; +wire ioctl_wr; +wire [24:0] ioctl_addr; +wire [7:0] ioctl_dout; +reg port1_req, port2_req; +reg [23:0] port1_a, port2_a; +wire [15:0] cpu_rom_addr; +wire [15:0] cpu_rom_do; +wire [11:0] bg_rom_addr; +wire [15:0] bg_rom_do; + +data_io #(.ROM_DIRECT_UPLOAD(0)) data_io( + .clk_sys ( clk_sys ), + .SPI_SCK ( SPI_SCK ), + .SPI_SS2 ( SPI_SS2 ), + .SPI_SS4 ( SPI_SS4 ), + .SPI_DI ( SPI_DI ), + .SPI_DO ( SPI_DO ), + .ioctl_download( ioctl_downl ), + .ioctl_index ( ioctl_index ), + .ioctl_wr ( ioctl_wr ), + .ioctl_addr ( ioctl_addr ), + .ioctl_dout ( ioctl_dout ) +); + +sdram sdram( + .*, + .init_n ( pll_locked ), + .clk ( clk_sys ), + + // port1 used for main CPU + .port1_req ( port1_req ), + .port1_ack ( ), + .port1_a ( ioctl_addr[23:1] ), + .port1_ds ( {ioctl_addr[0], ~ioctl_addr[0]} ), + .port1_we ( ioctl_downl ), + .port1_d ( {ioctl_dout, ioctl_dout} ), + .port1_q ( ), + + .cpu1_addr ( ioctl_downl ? 15'h7fff : cpu_rom_addr[15:1] ), + .cpu1_q ( cpu_rom_do ), + + // port2 for sound board + .port2_req ( port2_req ), + .port2_ack ( ), + .port2_a ( ioctl_addr[23:1] - 17'h10000 ), + .port2_ds ( {ioctl_addr[0], ~ioctl_addr[0]} ), + .port2_we ( ioctl_downl ), + .port2_d ( {ioctl_dout, ioctl_dout} ), + .port2_q ( ), + + .snd_addr ( ioctl_downl ? 15'h7fff : bg_rom_addr[11:1] ), + .snd_q ( bg_rom_do ) +); + + +// ROM download controller +always @(posedge clk_sys) begin + reg ioctl_wr_last = 0; + + ioctl_wr_last <= ioctl_wr; + if (ioctl_downl) begin + if (~ioctl_wr_last && ioctl_wr) begin + port1_req <= ~port1_req; + port2_req <= ~port2_req; + end + end +end + +// reset signal generation +reg reset = 1; +reg rom_loaded = 0; +always @(posedge clk_sys) begin + reg ioctl_downlD; + reg [15:0] reset_count; + ioctl_downlD <= ioctl_downl; + + // generate a second reset signal - needed for some reason + if (status[0] | buttons[1] | ~rom_loaded) reset_count <= 16'hffff; + else if (reset_count != 0) reset_count <= reset_count - 1'd1; + + if (ioctl_downlD & ~ioctl_downl) rom_loaded <= 1; + reset <= status[0] | buttons[1] | ioctl_downl | ~rom_loaded | (reset_count == 16'h0001); +end + +mario_top mario_top( + .I_CLK_48M(clk_sys), + .I_RESETn(~reset), + + .I_ANLG_VOL(status[11:8]), + .I_SW1(m_sw1), + .I_SW2(m_sw2), + .I_DIPSW(8'b0_000_00_00),//Upright,Coins,Coins,Coins,Bonus,Bonus,Player,Player + .O_VGA_R(r), + .O_VGA_G(g), + .O_VGA_B(b), + .O_HBLANK(hb), + .O_VBLANK(vb), + .O_VGA_HSYNCn(hs_n), + .O_VGA_VSYNCn(vs_n), + .O_SOUND_DAT(audio), + .cpu_rom_addr(cpu_rom_addr), + .cpu_rom_do(cpu_rom_addr[0] ? cpu_rom_do[15:8] : cpu_rom_do[7:0]), + .bg_rom_addr(bg_rom_addr), + .bg_rom_do(bg_rom_do) + +); + +mist_video #(.COLOR_DEPTH(3),.SD_HCNT_WIDTH(11)) mist_video( + .clk_sys(clk_sys), + .SPI_SCK(SPI_SCK), + .SPI_SS3(SPI_SS3), + .SPI_DI(SPI_DI), + .R(blankn ? r : 0), + .G(blankn ? g : 0), + .B(blankn ? {b[1], b} : 0), + .HSync(~hs_n), + .VSync(~vs_n), + .VGA_R(VGA_R), + .VGA_G(VGA_G), + .VGA_B(VGA_B), + .VGA_VS(VGA_VS), + .VGA_HS(VGA_HS), + .ce_divider(1'b1), + .blend(status[5]), + .scandoubler_disable(scandoublerD), + .scanlines(status[4:3]), + .ypbpr(ypbpr) + ); + +user_io #( + .STRLEN(($size(CONF_STR)>>3))) +user_io( + .clk_sys (clk_sys ), + .conf_str (CONF_STR ), + .SPI_CLK (SPI_SCK ), + .SPI_SS_IO (CONF_DATA0 ), + .SPI_MISO (SPI_DO ), + .SPI_MOSI (SPI_DI ), + .buttons (buttons ), + .switches (switches ), + .scandoubler_disable (scandoublerD ), + .ypbpr (ypbpr ), + .key_strobe (key_strobe ), + .key_pressed (key_pressed ), + .key_code (key_code ), + .joystick_0 (joystick_0 ), + .joystick_1 (joystick_1 ), + .status (status ) + ); + +dac #( + .C_bits(16)) +dac( + .clk_i(clk_sys), + .res_n_i(1'b1), + .dac_i({~audio[15],audio[14:0]}), + .dac_o(AUDIO_L) + ); + +wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF; +wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F; +wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players; + +wire [7:0]m_sw1={~status[6],~{m_two_players},~{m_one_player},~m_fireC,1'b1,1'b1,~m_left,~m_right}; +wire [7:0]m_sw2={1'b1,1'b1,~{m_coin1},~m_fire2C,1'b1,1'b1,~m_left2,~m_right2}; +wire key_pressed; +wire [7:0] key_code; +wire key_strobe; +arcade_inputs inputs ( + .clk ( clk_sys ), + .key_strobe ( key_strobe ), + .key_pressed ( key_pressed ), + .key_code ( key_code ), + .joystick_0 ( joystick_0 ), + .joystick_1 ( joystick_1 ), + .rotate ( 1'b0 ), + .orientation ( 2'b10 ), + .joyswap ( 1'b0 ), + .oneplayer ( 1'b1 ), + .controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ), + .player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ), + .player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} ) +); + + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/build_id.tcl b/Arcade_MiST/Nintendo Mario Bros/rtl/build_id.tcl new file mode 100644 index 00000000..938515d8 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/build_id.tcl @@ -0,0 +1,35 @@ +# ================================================================================ +# +# Build ID Verilog Module Script +# Jeff Wiencrot - 8/1/2011 +# +# Generates a Verilog module that contains a timestamp, +# from the current build. These values are available from the build_date, build_time, +# physical_address, and host_name output ports of the build_id module in the build_id.v +# Verilog source file. +# +# ================================================================================ + +proc generateBuildID_Verilog {} { + + # Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html) + set buildDate [ clock format [ clock seconds ] -format %y%m%d ] + set buildTime [ clock format [ clock seconds ] -format %H%M%S ] + + # Create a Verilog file for output + set outputFileName "rtl/build_id.v" + set outputFile [open $outputFileName "w"] + + # Output the Verilog source + puts $outputFile "`define BUILD_DATE \"$buildDate\"" + puts $outputFile "`define BUILD_TIME \"$buildTime\"" + close $outputFile + + # Send confirmation message to the Messages window + post_message "Generated build identification Verilog module: [pwd]/$outputFileName" + post_message "Date: $buildDate" + post_message "Time: $buildTime" +} + +# Comment out this line to prevent the process from automatically executing when the file is sourced: +generateBuildID_Verilog \ No newline at end of file diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/dpram.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/dpram.vhd new file mode 100644 index 00000000..fb0bfc8b --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/dpram.vhd @@ -0,0 +1,75 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.altera_mf_components.all; + +entity dpram is + generic ( + addr_width_g : integer := 8; + data_width_g : integer := 8 + ); + PORT + ( + address_a : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (addr_width_g-1 DOWNTO 0); + clock_a : IN STD_LOGIC := '1'; + clock_b : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) := (others => '0'); + enable_a : IN STD_LOGIC := '1'; + enable_b : IN STD_LOGIC := '1'; + wren_a : IN STD_LOGIC := '0'; + wren_b : IN STD_LOGIC := '0'; + q_a : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (data_width_g-1 DOWNTO 0) + ); +END dpram; + + +ARCHITECTURE SYN OF dpram IS +BEGIN + altsyncram_component : altsyncram + GENERIC MAP ( + address_reg_b => "CLOCK1", + clock_enable_input_a => "NORMAL", + clock_enable_input_b => "NORMAL", + clock_enable_output_a => "BYPASS", + clock_enable_output_b => "BYPASS", + indata_reg_b => "CLOCK1", + intended_device_family => "Cyclone III", + lpm_type => "altsyncram", + numwords_a => 2**addr_width_g, + numwords_b => 2**addr_width_g, + operation_mode => "BIDIR_DUAL_PORT", + outdata_aclr_a => "NONE", + outdata_aclr_b => "NONE", + outdata_reg_a => "UNREGISTERED", + outdata_reg_b => "UNREGISTERED", + power_up_uninitialized => "FALSE", + read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ", + read_during_write_mode_port_b => "NEW_DATA_NO_NBE_READ", + widthad_a => addr_width_g, + widthad_b => addr_width_g, + width_a => data_width_g, + width_b => data_width_g, + width_byteena_a => 1, + width_byteena_b => 1, + wrcontrol_wraddress_reg_b => "CLOCK1" + ) + PORT MAP ( + address_a => address_a, + address_b => address_b, + clock0 => clock_a, + clock1 => clock_b, + clocken0 => enable_a, + clocken1 => enable_b, + data_a => data_a, + data_b => data_b, + wren_a => wren_a, + wren_b => wren_b, + q_a => q_a, + q_b => q_b + ); + +END SYN; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/m58715ip.v b/Arcade_MiST/Nintendo Mario Bros/rtl/m58715ip.v new file mode 100644 index 00000000..a1015902 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/m58715ip.v @@ -0,0 +1,129 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// M58715 module. +// The M58715 chip produces the digital sounds (music and most +// of the sound effects). It is an 8039 with embedded RAM and ROM. +// The embedded ROM appears to only be used for protection. +// see mario_roms.v for more information. +//---------------------------------------------------------------------------- + +module M58715IP( + input I_CLK, + input I_CLK_EN, + input I_RSTn, + input I_INTn, + input I_EA, + output O_PSENn, + output O_RDn, + output O_WRn, + output O_ALE, + output O_PROGn, + input I_T0, + output O_T0, + input I_T1, + input [7:0] I_DB, + output [7:0] O_DB, + input [7:0] I_P1, + output [7:0] O_P1, + input [7:0] I_P2, + output [7:0] O_P2 +); + + + +wire W_PSENn; +assign O_PSENn = W_PSENn ; + +//---------------------------------- +// M58715 has 128-Byte internal RAM +//---------------------------------- + +wire [7:0]t48_ram_a; +wire t48_ram_we; +wire [7:0]t48_ram_do; +wire [7:0]t48_ram_di; + +ram_128_8 t48_ram +( + .I_CLK(I_CLK), + .I_ADDR(t48_ram_a[6:0]), + .I_D(t48_ram_di), + .I_CE(1'b1), + .I_WE(t48_ram_we), + .O_D(t48_ram_do) +); + +//----------------------------------- +// M58715 has 2KB internal ROM +// +// * Using the 8039 hack to bypass +// the internal ROM until the pmem +// interface can be made to work. +// All ROM accesses are external. +//------------------------------------ + +//wire [10:0]t48_int_rom_a; +//wire [7:0]t48_int_rom_do; +// +//SUB_INT_ROM bootrom +//( +// .CLK(I_CLK), +// .AD(t48_int_rom_a), +// .DO(t48_int_rom_do) +//); + +//---------- +// T48 Core +//---------- + +wire xtal3_s; + +t48_core t48_core +( + .xtal_i(I_CLK), + .xtal_en_i(I_CLK_EN), + .reset_i(I_RSTn), + .t0_i(I_T0), + .t0_o(O_T0), + .t0_dir_o(), + .int_n_i(I_INTn), + //.ea_i(I_EA), + .ea_i(1'b1), // 8039 hack + .rd_n_o(O_RDn), + .psen_n_o(W_PSENn), + .wr_n_o(O_WRn), + .ale_o(O_ALE), + .db_i(I_DB), + .db_o(O_DB), + .db_dir_o(), + .t1_i(I_T1), + .p2_i(I_P2), + .p2_o(O_P2), + .p2_low_imp_o(), + .p1_i(I_P1), + .p1_o(O_P1), + .p1_low_imp_o(), + .prog_n_o(O_PROGn), + .clk_i(I_CLK), + .en_clk_i(xtal3_s), + .xtal3_o(xtal3_s), + .dmem_addr_o(t48_ram_a), + .dmem_we_o(t48_ram_we), + .dmem_data_i(t48_ram_do), + .dmem_data_o(t48_ram_di), + .pmem_addr_o(), + .pmem_data_i(8'h00) +); + +endmodule + + + + + + + + diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_adec.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_adec.v new file mode 100644 index 00000000..9ddfe7a5 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_adec.v @@ -0,0 +1,323 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Address decoding. +//---------------------------------------------------------------------------- + +module mario_adec +( + input I_CLK_48M, + input I_CEN_12M, + input I_CEN_4Mp, + input I_CEN_4Mn, + input I_RESET_n, + input [15:0]I_AB, + input [7:0]I_DB, + input I_MREQ_n, + input I_RFSH_n, + input I_RD_n, + input I_WR_n, + input I_VRAMBUSY_n, + input I_VBLK_n, + output O_WAIT_n, + output O_NMI_n, + output [3:0]O_MROM_CSn, + output [1:0]O_MRAM_CSn, + output O_3J_G_n, // To LS245. Not used? + output O_OBJ_RQ_n, // 7000 H - 73FF H + output O_OBJ_RD_n, // 7000 H - 73FF H (R mode) + output O_OBJ_WR_n, // 7000 H - 73FF H (W mode) + output O_VRAM_RD_n, // 7400 H - 77FF H (R mode) + output O_VRAM_WR_n, // 7400 H - 77FF H (W mode) + output O_SW1_OE_n, // 7C00 H (R mode) + output O_SW2_OE_n, // 7C80 H (R mode) + output O_DIPSW_OE_n, // 7F80 H (R mode) + output [7:0]O_4C_Q, // Misc addressing + output [7:0]O_2L_Q, // Misc control signals + output [7:0]O_7M_Q, // Sound control signals + output [7:0]O_7J_Q // Sound data +); + +//---------- +// CPU WAIT +//---------- + +reg W_3D_Q; +reg W_4D1_Qn; +assign O_WAIT_n = W_4D1_Qn; + +always@(posedge I_CLK_48M or negedge I_VBLK_n) +begin + if(I_VBLK_n == 1'b0) + W_4D1_Qn <= 1'b1; + else if (I_CEN_4Mp) + W_4D1_Qn <= I_VRAMBUSY_n | W_4A2_Q[1] | ~I_RFSH_n; +end + +// Enable signal for writing to VRAM and OBJRAM. +always@(posedge I_CLK_48M) +begin + W_3D_Q <= W_4D1_Qn; +end + +//----------------------------------------------- +// CPU NMI +// NMI is activated at the start of each VBLANK. +// CPU can clear the NMI via register @ 2L. +//----------------------------------------------- + +wire W_VBLK = ~I_VBLK_n; +reg W_VBLK_q; +reg W_4D2_Q; + +always@(posedge I_CLK_48M) begin + W_VBLK_q <= W_VBLK; +end +wire W_VBLK_rise = ~W_VBLK_q & W_VBLK; + +always@(posedge I_CLK_48M or negedge W_2L_Q[4]) +begin + if(~W_2L_Q[4]) + W_4D2_Q <= 1'b1; + else if (W_VBLK_rise) + W_4D2_Q <= 1'b0; +end + +assign O_NMI_n = W_4D2_Q; + +//--------------------------- +// Address Decoder PROM @ 5B +//--------------------------- + +wire [7:0]W_PROM5B_Q; + +//ADEC_PROM prom5b(I_CLK_48M, I_AB[15:11], W_PROM5B_Q, +// I_DLCLK, I_DLADDR, I_DLDATA, I_DLWR); + +adec_5p adec_5p( + .clk(I_CLK_48M), + .addr(I_AB[15:11]), + .data(W_PROM5B_Q) +); + +assign O_MROM_CSn = {W_PROM5B_Q[7],W_PROM5B_Q[2:0]}; + +//-------------- +// 74LS139 @ 4A +//-------------- + +wire [3:0]W_4A1_Q, W_4A2_Q; + +logic_74xx139 U_4A_1 +( + .I_G(W_PROM5B_Q[4]), + .I_Sel({1'b0,I_AB[11]}), + .O_Q(W_4A1_Q) +); + +// This output goes to a LS245 @ 7H enable which is not used in the FPGA implementation. +assign O_3J_G_n = W_4A1_Q[0] & W_4C_Q[2] & W_4C_Q[3]; + +logic_74xx139 U_4A_2 +( + .I_G(W_PROM5B_Q[4] | I_MREQ_n), + .I_Sel(I_AB[11:10]), + .O_Q(W_4A2_Q) +); + +assign O_OBJ_RQ_n = W_4A2_Q[0]; + +//------------------------------------ +// 74LS138 @ 3A +// Address decoding 7000H - 7FFFH (R) +//------------------------------------ + +wire [7:0]W_3A_Q; + +logic_74xx138 U_3A +( + .I_G1(1'b1), + .I_G2a(I_RD_n), + .I_G2b(I_MREQ_n), + .I_Sel({W_PROM5B_Q[4],I_AB[11:10]}), + .O_Q(W_3A_Q) +); + +assign O_OBJ_RD_n = W_3A_Q[0]; // 7000H - 73FFH - Sprite RAM (R) +assign O_VRAM_RD_n = W_3A_Q[1]; // 7400H - 77FFH - VRAM (R) + +//------------------------------------ +// 74LS138 @ 3B +// Address decoding 7000H - 7FFFH (W) +//------------------------------------ + +wire [7:0]W_3B_Q; + +logic_74xx138 U_3B +( + .I_G1(W_3D_Q), + //.I_G1(1'b1), // No Wait + .I_G2a(I_WR_n), + .I_G2b(I_MREQ_n), + .I_Sel({W_PROM5B_Q[4],I_AB[11:10]}), + .O_Q(W_3B_Q) +); + +assign O_OBJ_WR_n = W_3B_Q[0]; // 7000H - 73FFH - Sprite RAM (W) +assign O_VRAM_WR_n = W_3B_Q[1]; // 7400H - 77FFH - VRAM (W) + +//-------------------------------------- +// 74LS138 @ 3C +// Address decoding 6000H - 6FFFH (R/W) +// RAM0 @ 7B - 6000H - 67FFH +// RAM1 @ 7A - 6800H - 6FFFH +//-------------------------------------- + +wire [7:0]W_3C_Q; + +logic_74xx138 U_3C +( + .I_G1(1'b1), + .I_G2a(I_MREQ_n), + .I_G2b(I_RD_n & I_WR_n), + .I_Sel({W_PROM5B_Q[3],1'b0, I_AB[11]}), + .O_Q(W_3C_Q) +); + +assign O_MRAM_CSn = W_3C_Q[1:0]; + +//------------------------------------ +// 74LS138 @ 4B +// Address decoding 7C00H - 7FFFH (R) +// Enable signals for reading inputs +// and and DIP switches +//------------------------------------ + +wire [7:0]W_4B_Q; + +logic_74xx138 U_4B +( + .I_G1(1'b1), + .I_G2a(I_RD_n), + .I_G2b(W_4A2_Q[3]), + .I_Sel(I_AB[9:7]), + .O_Q(W_4B_Q) +); + +assign O_SW1_OE_n = W_4B_Q[0]; // 7C00H - Service,2P Start,1P Start,Jump,D,U,L,R +assign O_SW2_OE_n = W_4B_Q[1]; // 7C80H - x,Coin 2,Coin 1,Jump2,2D,2U,2L,2R +assign O_DIPSW_OE_n = W_4B_Q[7]; // 7F80H - Dip switches + +//------------------------------------ +// 74LS138 @ 4C +// Address decoding 7C00H - 7FFFH (W) +// Miscellaneous addressing. +//------------------------------------ + +wire [7:0]W_4C_Q; + +logic_74xx138 U_4C +( + .I_G1(1'b1), + .I_G2a(I_WR_n), + .I_G2b(W_4A2_Q[3]), + .I_Sel(I_AB[9:7]), + .O_Q(W_4C_Q) +); + +// W_4C_Q[0] - 7C00H - Mario Walk analogue sound trigger +// W_4C_Q[1] - 7C80H - Luigi Walk analogue sound trigger +// W_4C_Q[2] - 7D00H - V MOV, Vertical scroll register select +// W_4C_Q[3] - 7D80H - ??? Write to video. +// W_4C_Q[4] - 7E00H - Write to sound register (sound select) (7J). +// W_4C_Q[5] - 7E80H - Enable for misc. control signals (2L). +// W_4C_Q[6] - 7F00H - Enable for sound port (7M). +assign O_4C_Q = W_4C_Q; + +//-------------------------------------- +// 74LS259 @ 2L +// Misc control signals (7E80H - 7E87H) +//-------------------------------------- + +reg [7:0]W_2L_Q; + +always@(posedge I_CLK_48M or negedge I_RESET_n) +begin + if(I_RESET_n == 1'b0) begin + W_2L_Q <= 0; + end + else if (I_CEN_12M) begin + if(W_4C_Q[5] == 1'b0) begin + case(I_AB[2:0]) + 3'h0 : W_2L_Q[0] <= I_DB[0]; // 7E80H - T ROM - GFX bank select + 3'h1 : W_2L_Q[1] <= I_DB[0]; // 7E81H - 2PSL - sprite bank select + 3'h2 : W_2L_Q[2] <= I_DB[0]; // 7E82H - Flip (must be inverted) + 3'h3 : W_2L_Q[3] <= I_DB[0]; // 7E83H - CREF 0 - colour palette bank select. + 3'h4 : W_2L_Q[4] <= I_DB[0]; // 7E84H - Reset NMI (Sets flip flop) + 3'h5 : W_2L_Q[5] <= I_DB[0]; // 7E85H - Z80 DMA RDY write + 3'h6 : W_2L_Q[6] <= I_DB[0]; // 7E86H - Coin counter 1 (misnumbered on schematic) + 3'h7 : W_2L_Q[7] <= I_DB[0]; // 7E87H - Coin counter 2 (misnumbered on schematic) + endcase + end + end +end + +assign O_2L_Q = W_2L_Q; + +//---------------------------- +// 74LS259 @ 7M +// Sound Port (7F00H - 7F07H) +// Tiggers sound effects. +//---------------------------- + +reg [7:0]W_7M_Q; + +always@(posedge I_CLK_48M or negedge I_RESET_n) +begin + if(I_RESET_n == 1'b0) begin + W_7M_Q <= 0; + end + else if (I_CEN_12M) begin + if(W_4C_Q[6] == 1'b0) begin + case(I_AB[2:0]) + 3'h0 : W_7M_Q[0] <= I_DB[0]; // 7F00H - /INT + 3'h1 : W_7M_Q[1] <= I_DB[0]; // 7F01H - T0 + 3'h2 : W_7M_Q[2] <= I_DB[0]; // 7F02H - T1 + 3'h3 : W_7M_Q[3] <= I_DB[0]; // 7F03H - PA0 + 3'h4 : W_7M_Q[4] <= I_DB[0]; // 7F04H - PA1 + 3'h5 : W_7M_Q[5] <= I_DB[0]; // 7F05H - PA2 + 3'h6 : W_7M_Q[6] <= I_DB[0]; // 7F06H - PA3 + 3'h7 : W_7M_Q[7] <= I_DB[0]; // 7F07H - Skid analogue sound trigger. + endcase + end + end +end + +assign O_7M_Q = W_7M_Q; + + +//-------------------------- +// 74LS374 @ 7J +// Sound data (7E00H) +// Data latch for sound CPU +//-------------------------- + +reg [7:0]W_7J_Q; + +reg W_4C_Q4q; +always@(posedge I_CLK_48M) begin + W_4C_Q4q <= W_4C_Q[4]; +end +wire W_4C_Q4_rise = ~W_4C_Q4q & W_4C_Q[4]; + +always@(posedge I_CLK_48M) begin + if (W_4C_Q4_rise) + W_7J_Q <= I_DB; +end + +assign O_7J_Q = W_7J_Q; + + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_bram.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_bram.v new file mode 100644 index 00000000..a38d98b0 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_bram.v @@ -0,0 +1,324 @@ +//------------------- +// Block RAM modules +//------------------- + +module ram_1024_8_8 +( + input I_CLKA,I_CLKB, + input [9:0]I_ADDRA,I_ADDRB, + input [7:0]I_DA,I_DB, + input I_CEA,I_CEB, + input I_WEA,I_WEB, + output [7:0]O_DA,O_DB +); + +wire [7:0]W_DOA,W_DOB; +assign O_DA = I_CEA ? W_DOA : 8'h00; +assign O_DB = I_CEB ? W_DOB : 8'h00; + +dpram #(10,8) ram_1024_8_8 +( + .clock_a(I_CLKA), + .address_a(I_ADDRA), + .data_a(I_DA), + .enable_a(I_CEA), + .wren_a(I_WEA), + .q_a(W_DOA), + + .clock_b(I_CLKB), + .address_b(I_ADDRB), + .data_b(I_DB), + .enable_b(I_CEB), + .wren_b(I_WEB), + .q_b(W_DOB) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_1024_8 +( + input I_CLK, + input [9:0]I_ADDR, + input [7:0]I_D, + input I_CE, + input I_WE, + output [7:0]O_D +); + +wire [7:0]W_DO; +assign O_D = I_CE ? W_DO : 8'h00; + +dpram #(10,8) ram_1024_8 +( + .clock_a(I_CLK), + .address_a(I_ADDR), + .data_a(I_D), + .wren_a(I_WE), + .enable_a(I_CE), + .q_a(W_DO), + + .clock_b(I_CLK) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_2N +( + input I_CLK, + input [7:0]I_ADDR, + input [3:0]I_D, + input I_CE, + input I_WE, + output [3:0]O_D +); + +dpram #(8,4) ram_256_4 +( + .clock_a(I_CLK), + .address_a(I_ADDR), + .data_a(I_D), + .wren_a(I_WE), + .enable_a(I_CE), + .q_a(O_D), + + .clock_b(I_CLK) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_256_8 +( + input I_CLKA, + input [7:0]I_ADDRA, + input [7:0]I_DA, + input I_CEA, + input I_WEA, + output [7:0]O_DA +); + +dpram #(8,8) ram_256_8 +( + .clock_a(I_CLKA), + .address_a(I_ADDRA), + .data_a(I_DA), + .enable_a(I_CEA), + .wren_a(I_WEA), + .q_a(O_DA), + + .clock_b(I_CLKA) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_64_9 +( + input I_CLKA, + input [5:0]I_ADDRA, + input [8:0]I_DA, + input I_CEA, + input I_WEA, + output [8:0]O_DA +); + + +dpram #(6,9) ram_64x9 +( + .clock_a(I_CLKA), + .address_a(I_ADDRA), + .data_a(I_DA), + .enable_a(I_CEA), + .wren_a(I_WEA), + .q_a(O_DA), + + .clock_b(I_CLKA) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_2EF +( + input I_CLKA,I_CLKB, + input [7:0]I_ADDRA,I_ADDRB, + input [7:0]I_DA,I_DB, + input I_CEA,I_CEB, + input I_WEA,I_WEB, + output [7:0]O_DA,O_DB +); + +dpram #(9,8) ram_512_8 +( + .clock_a(I_CLKA), + .address_a({1'b0,I_ADDRA}), + .data_a(I_DA), + .enable_a(I_CEA), + .wren_a(I_WEA), + .q_a(O_DA), + + .clock_b(I_CLKB), + .address_b({1'b1,I_ADDRB}), + .data_b(I_DB), + .enable_b(I_CEB), + .wren_b(I_WEB), + .q_b(O_DB) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module double_scan +( + input I_CLKA,I_CLKB, + input [8:0]I_ADDRA,I_ADDRB, + input [7:0]I_DA,I_DB, + input I_CEA,I_CEB, + input I_WEA,I_WEB, + output [7:0]O_DA,O_DB +); + +dpram #(9,8) ram_512_8 +( + .clock_a(I_CLKA), + .address_a(I_ADDRA), + .data_a(I_DA), + .enable_a(I_CEA), + .wren_a(I_WEA), + .q_a(O_DA), + + .clock_b(I_CLKB), + .address_b(I_ADDRB), + .data_b(I_DB), + .enable_b(I_CEB), + .wren_b(I_WEB), + .q_b(O_DB) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_128_8 +( + input I_CLK, + input [6:0]I_ADDR, + input [7:0]I_D, + input I_CE, + input I_WE, + output [7:0]O_D +); + +dpram #(7,8) ram_128_8 +( + .clock_a(I_CLK), + .address_a(I_ADDR), + .data_a(I_D), + .wren_a(I_WE), + .enable_a(I_CE), + .q_a(O_D), + + .clock_b(I_CLK) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_2048_8_8 +( + input I_CLKA,I_CLKB, + input [10:0]I_ADDRA,I_ADDRB, + input [7:0]I_DA,I_DB, + input I_CEA,I_CEB, + input I_OEA,I_OEB, + input I_WEA,I_WEB, + output [7:0]O_DA,O_DB +); + +wire [7:0]W_DOA,W_DOB; +assign O_DA = I_CEA & I_OEA ? W_DOA : 8'h00; +assign O_DB = I_CEB & I_OEB ? W_DOB : 8'h00; + +dpram #(11,8) ram_2048_8_8 +( + .clock_a(I_CLKA), + .address_a(I_ADDRA), + .data_a(I_DA), + .enable_a(I_CEA), + .wren_a(I_WEA), + .q_a(W_DOA), + + .clock_b(I_CLKB), + .address_b(I_ADDRB), + .data_b(I_DB), + .enable_b(I_CEB), + .wren_b(I_WEB), + .q_b(W_DOB) +); + +endmodule + + +///////////////////////////////////////////////////////////////////// + + +module ram_2048_8 +( + input I_CLK, + input [10:0]I_ADDR, + input [7:0]I_D, + input I_CE, + input I_WE, + output [7:0]O_D +); + +dpram #(11,8) ram_2048_8 +( + .clock_a(I_CLK), + .address_a(I_ADDR), + .data_a(I_D), + .wren_a(I_WE), + .enable_a(I_CE), + .q_a(O_D), + + .clock_b(I_CLK) +); + +endmodule + +///////////////////////////////////////////////////////////////////// + +module ram_4096_8 +( + input I_CLK, + input [11:0]I_ADDR, + input [7:0]I_D, + input I_CE, + input I_WE, + output [7:0]O_D +); + + +dpram #(12,8) ram_4096_8 +( + .clock_a(I_CLK), + .address_a(I_ADDR), + .data_a(I_D), + .wren_a(I_WE), + .enable_a(I_CE), + .q_a(O_D), + + .clock_b(I_CLK) +); + +endmodule + diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_col_pal.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_col_pal.v new file mode 100644 index 00000000..20586d63 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_col_pal.v @@ -0,0 +1,78 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Colour palette. +// Based on the Donkey Kong version by Katsumi Degawa. +//---------------------------------------------------------------------------- + +module mario_col_pal +( + input I_CLK_48M, + input I_CEN_24Mn, + input I_CEN_6M, + input [6:0]I_VRAM_D, + input [6:0]I_OBJ_D, + input I_CMPBLKn, + input I_CPAL_SEL, + output [2:0]O_R, + output [2:0]O_G, + output [1:0]O_B +); + +// Link CL2 on the schematics +// Uncut = 0 - Inverted colour palette +// Cut = 1 - Standard colour palette +parameter CL2 = 1'b1; + +//------------------------------------- +// Parts 4U, 5T (74LS157) +// Selects sprites or backgound pixels +// Sprites take priority +//------------------------------------- + +wire [6:0]W_4U5T_Y = (~(I_OBJ_D[0]|I_OBJ_D[1]|I_OBJ_D[2])) ? I_VRAM_D: I_OBJ_D; + +//-------------- +// Parts 6T, 6U +//-------------- + +wire [8:0]W_6TU_D = {I_CPAL_SEL,W_4U5T_Y[6:0],I_CMPBLKn}; +reg [8:0]W_6TU_Q; +wire W_6TU_RST = I_CMPBLKn | W_6TU_Q[0]; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_24Mn) begin + if(W_6TU_RST == 1'b0) + W_6TU_Q <= 9'b0; + else if (I_CEN_6M) + W_6TU_Q <= W_6TU_D; + end +end + +//-------------------------------------------------------------- +// Colour PROM 4P (512 x 8bit) +// The PROM actually contains 2 versions of the colour palette: +// 0 - 255 = Inverted palette +// 256 - 512 = Standard palette +// Link CL2 on the PCB is used for selecting the palette. +//-------------------------------------------------------------- + +wire [8:0]W_PAL_AB = {CL2,W_6TU_Q[8:1]}; +wire [7:0]W_4P_DO; + +//CLUT_PROM_512_8 prom4p(I_CLK_48M, W_PAL_AB, W_4P_DO, +// I_DLCLK, I_DLADDR, I_DLDATA, I_DLWR); + +clut_4p clut_4p( + .clk(I_CLK_48M), + .addr(W_PAL_AB), + .data(W_4P_DO) +); + +assign {O_R, O_G, O_B} = W_4P_DO; // 3R:3G:2B + +endmodule + diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_dma.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_dma.v new file mode 100644 index 00000000..2afa2971 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_dma.v @@ -0,0 +1,76 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Simplified sprite DMA. +// To Do: Implement full z80 DMA controller. +// Mario Bros transfers $180 bytes from $6900 to $7000 +// when DMA is triggered. +//---------------------------------------------------------------------------- + +module mario_dma +( + input I_CLK_48M, + input I_CEN_4M, + input I_RSTn, + input I_DMA_TRIG, + input [7:0]I_DMA_DS, + + output [9:0]O_DMA_AS, + output [9:0]O_DMA_AD, + output [7:0]O_DMA_DD, + output O_DMA_CES, + output O_DMA_CED +); + +parameter dma_cnt_end = 10'h180; + +reg W_DMA_EN = 1'b0; +reg [10:0]W_DMA_CNT; +reg [7:0]W_DMA_DATA; +reg [9:0]DMA_ASr; +reg [9:0]DMA_ADr; +reg [7:0]DMA_DDr; +reg DMA_CESr, DMA_CEDr; + +always @(posedge I_CLK_48M) +begin + if (I_CEN_4M) begin + reg old_trig; + old_trig <= I_DMA_TRIG; +if(~old_trig & I_DMA_TRIG) + begin + DMA_ASr <= 10'h100; + DMA_ADr <= 0; + W_DMA_CNT <= 0; + W_DMA_EN <= 1'b1; + DMA_CESr <= 1'b1; + DMA_CEDr <= 1'b1; + end + else if(W_DMA_EN == 1'b1) + begin + case(W_DMA_CNT[1:0]) + 1: DMA_DDr <= I_DMA_DS; + 2: DMA_ASr <= DMA_ASr + 1'd1; + 3: DMA_ADr <= DMA_ADr + 1'd1; + default:; + endcase + W_DMA_CNT <= W_DMA_CNT + 1'd1; + W_DMA_EN <= W_DMA_CNT==dma_cnt_end*4 ? 1'b0 : 1'b1; + end + else + begin + DMA_CESr <= 1'b0; + DMA_CEDr <= 1'b0; + end + end +end + +assign O_DMA_AS = DMA_ASr; +assign O_DMA_AD = DMA_ADr; +assign O_DMA_DD = DMA_DDr; +assign O_DMA_CES = DMA_CESr; +assign O_DMA_CED = DMA_CEDr; + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_hv_generator.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_hv_generator.v new file mode 100644 index 00000000..34acb068 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_hv_generator.v @@ -0,0 +1,111 @@ +//=============================================================================== +// FPGA DONKEY KONG H&V COUNTER +// +// Version : 2.00 +// +// Copyright(c) 2003 - 2004 Katsumi Degawa , All rights reserved +// +// Important ! +// +// This program is freeware for non-commercial use. +// An author does no guarantee about this program. +// You can use this under your own risk. +// +// 2005- 2- 9 some changed. +//================================================================================ +//----------------------------------------------------------------------------------------- +// H_CNT[0],H_CNT[1],H_CNT[2],H_CNT[3],H_CNT[4],H_CNT[5],H_CNT[6],H_CNT[7],H_CNT[8],H_CNT[9] +// 1/2 H 1 H 2 H 4H 8H 16 H 32H 64 H 128 H 256 H +//----------------------------------------------------------------------------------------- +// V_CNT[0], V_CNT[1], V_CNT[2], V_CNT[3], V_CNT[4], V_CNT[5], V_CNT[6], V_CNT[7] +// 1 V 2 V 4 V 8 V 16 V 32 V 64 V 128 V +//----------------------------------------------------------------------------------------- +// VF_CNT[0],VF_CNT[1],VF_CNT[2],VF_CNT[3],VF_CNT[4],VF_CNT[5],VF_CNT[6],VF_CNT[7] +// 1 VF 2 VF 4 VF 8 VF 16 VF 32 VF 64 VF 128 VF + +module mario_hv_generator( + input I_CLK, + input I_CEN, + input I_RST_n, + input I_VFLIP, + output [9:0]H_CNT, + output [7:0]V_CNT, + output [7:0]VF_CNT, + output H_BLANKn, + output V_BLANKn, + output C_BLANKn, + output H_SYNCn, + output V_SYNCn, + output VCKn +); + +parameter H_count = 768; +parameter H_BL_P = 511; +parameter H_BL_W = 767; +parameter V_CL_P = 576; +parameter V_CL_W = 640; + +parameter V_BL_P = 239; +parameter V_BL_W = 15; + +reg [9:0]H_CNT_r = 0; +always@(posedge I_CLK) +begin + if (I_CEN) + H_CNT_r <= (H_CNT_r == H_count - 1'd1)? 0 : H_CNT_r + 1'd1 ; +end + + +assign H_CNT = H_CNT_r; + +reg H_BLANK = 1'b0; +reg V_CLK = 1'b0; +reg V_CLK_q; + +always@(posedge I_CLK) begin + if (H_CNT == H_BL_P) + H_BLANK <= 1'b1; + else if (H_CNT == H_BL_W) + H_BLANK <= 1'b0; + + if (H_CNT == V_CL_P) + V_CLK <= 1'b1; + else if (H_CNT == V_CL_W) + V_CLK <= 1'b0; + V_CLK_q <= V_CLK; +end + +assign H_SYNCn = ~V_CLK; +assign H_BLANKn = ~H_BLANK; +wire V_CLK_EN = ~V_CLK_q & V_CLK; + +reg [8:0]V_CNT_r; +always@(posedge I_CLK or negedge I_RST_n) +begin + if(I_RST_n == 1'b0) + V_CNT_r <= 0 ; + else if (V_CLK_EN) + V_CNT_r <= (V_CNT_r == 255)? 9'd504 : V_CNT_r + 1'd1; +end + +reg V_BLANK; +always@(posedge I_CLK or negedge I_RST_n) +begin + if(I_RST_n == 1'b0)begin + V_BLANK <= 1'b0; + end + else if (V_CLK_EN) begin + if (V_CNT_r == V_BL_P) + V_BLANK <= 1'b1; + else if (V_CNT_r == V_BL_W) + V_BLANK <= 1'b0; + end +end + +assign V_CNT[7:0] = V_CNT_r[7:0]; +assign V_SYNCn = ~V_CNT_r[8]; +assign V_BLANKn = ~V_BLANK; +assign C_BLANKn = ~(H_BLANK | V_BLANK); +assign VF_CNT[7:0]= V_CNT ^ {8{I_VFLIP}}; +assign VCKn = V_CLK; +endmodule \ No newline at end of file diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_iir_filter.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_iir_filter.v new file mode 100644 index 00000000..b8ff3dac --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_iir_filter.v @@ -0,0 +1,171 @@ +/*MIT License +Copyright (c) 2019 Gregory Hogan (Soltan_G42) +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.*/ + +module iir_1st_order +#( + parameter COEFF_WIDTH = 18, + parameter COEFF_SCALE = 15, + parameter DATA_WIDTH = 16, + parameter COUNT_BITS = 11 +) +( + input clk, + input reset, + input [COUNT_BITS - 1 : 0] div, + input signed [COEFF_WIDTH - 1 : 0] A2, B1, B2, + input signed [DATA_WIDTH - 1 :0] in, + output signed [DATA_WIDTH - 1:0] out +); + + reg signed [DATA_WIDTH-1:0] x0,x1,y0; + reg signed [DATA_WIDTH + COEFF_WIDTH - 1 : 0] out32; + reg [COUNT_BITS - 1:0] count; + + // Usage: + // Design your 1st order iir low/high-pass with a tool that will give you the + // filter coefficients for the difference equation. Filter coefficients can + // be generated in Octave/matlab/scipy using a command similar to + // [B, A] = butter( 1, 3500/(106528/2), 'low') for a 3500 hz 1st order low-pass + // assuming 106528Hz sample rate. + // + // The Matlab output is: + // B = [0.093863 0.093863] + // A = [1.00000 -0.81227] + // + // Then scale coefficients by multiplying by 2^COEFF_SCALE and round to nearest integer + // + // B = [3076 3076] + // A = [32768 -26616] + // + // Discard A(1) because it is assumed 1.0 before scaling + // + // This leaves you with A2 = -26616 , B1 = 3076 , B2 = 3076 + // B1 + B2 - A2 should sum to 2^COEFF_SCALE = 32768 + // + // Sample frequency is "clk rate/div": for Genesis this is 53.69mhz/504 = 106528hz + // + // COEFF_WIDTH must be at least COEFF_SCALE+1 and must be large enough to + // handle temporary overflow during this computation: out32 <= (B1*x0 + B2*x1) - A2*y0 + + assign out = y0; + + always @ (*) begin + out32 <= (B1*x0 + B2*x1) - A2*y0; //Previous output is y0 not y1 + end + + always @ (posedge clk) begin + if(reset) begin + count <= 0; + x0 <= 0; + x1 <= 0; + y0 <= 0; + end + else begin + count <= count + 1'd1; + if (count == div - 1) begin + count <= 0; + y0 <= {out32[DATA_WIDTH + COEFF_WIDTH - 1] , out32[COEFF_SCALE + DATA_WIDTH - 2 : COEFF_SCALE]}; + x1 <= x0; + x0 <= in; + end + end + end + +endmodule //iir_1st_order + + + +module iir_2nd_order +#( + parameter COEFF_WIDTH = 18, + parameter COEFF_SCALE = 14, + parameter DATA_WIDTH = 16, + parameter COUNT_BITS = 10 +) +( + input clk, + input reset, + input [COUNT_BITS - 1 : 0] div, + input signed [COEFF_WIDTH - 1 : 0] A2, A3, B1, B2, B3, + input signed [DATA_WIDTH - 1 : 0] in, + output [DATA_WIDTH - 1 : 0] out +); + + reg signed [DATA_WIDTH-1 : 0] x0,x1,x2; + reg signed [DATA_WIDTH-1 : 0] y0,y1; + reg signed [(DATA_WIDTH + COEFF_WIDTH - 1) : 0] out32; + reg [COUNT_BITS : 0] count; + + + // Usage: + // Design your 1st order iir low/high-pass with a tool that will give you the + // filter coefficients for the difference equation. Filter coefficients can + // be generated in Octave/matlab/scipy using a command similar to + // [B, A] = butter( 2, 5000/(48000/2), 'low') for a 5000 hz 2nd order low-pass + // assuming 48000Hz sample rate. + // + // Output is: + // B = [ 0.072231 0.144462 0.072231] + // A = [1.00000 -1.10923 0.39815] + // + // Then scale coefficients by multiplying by 2^COEFF_SCALE and round to nearest integer + // Make sure your coefficients can be stored as a signed number with COEFF_WIDTH bits. + // + // B = [1183 2367 1183] + // A = [16384 -18174 6523] + // + // Discard A(1) because it is assumed 1.0 before scaling + // + // This leaves you with A2 = -18174 , A3 = 6523, B1 = 1183 , B2 = 2367 , B3 = 1183 + // B1 + B2 + B3 - A2 - A3 should sum to 2^COEFF_SCALE = 16384 + // + // Sample frequency is "clk rate/div" + // + // COEFF_WIDTH must be at least COEFF_SCALE+1 and must be large enough to + // handle temporary overflow during this computation: + // out32 <= (B1*x0 + B2*x1 + B3*x2) - (A2*y0 + A3*y1); + + assign out = y0; + + always @ (*) begin + out32 <= (B1*x0 + B2*x1 + B3*x2) - (A2*y0 + A3*y1); //Previous output is y0 not y1 + end + + always @ (posedge clk) begin + if(reset) begin + count <= 0; + x0 <= 0; + x1 <= 0; + x2 <= 0; + y0 <= 0; + y1 <= 0; + end + else begin + count <= count + 1'd1; + if (count == div - 1) begin + count <= 0; + y1 <= y0; + y0 <= {out32[DATA_WIDTH + COEFF_WIDTH - 1] , out32[(DATA_WIDTH + COEFF_SCALE - 2) : COEFF_SCALE]}; + x2 <= x1; + x1 <= x0; + x0 <= in; + end + end + end + +endmodule //iir_2nd_order diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_input.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_input.v new file mode 100644 index 00000000..b3ec621d --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_input.v @@ -0,0 +1,74 @@ +//--------------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Controls and DIP Switches. +//--------------------------------------------------------------------------------- + +//--------------------------------------------------------------------------------- +// CONTROLS +// +// BIT 0 1 2 3 4 5 6 7 +//--------------------------------------------------------------------------------- +// SW1(MAIN) RIGHT LEFT - - JUMP 1P START 2P START TEST +// SW2(SUB) RIGHT2 LEFT2 - - JUMP2 COIN - - +//--------------------------------------------------------------------------------- + +//--------------------------------------------------------------------------------- +// DIP SWITCHES +// +// Toggle (DIP1) Settings: +// A B C D E F G H Option +//--------------------------------------------------------------------------------- +// Number of Players per Game +// -------------------------- +// Off Off 3 +// On Off 4 +// Off On 5 +// On On 6 +// +// Coin/Credit +// ---------- +// Off Off 1/1 +// On Off 2/1 +// Off On 1/2 +// On On 1/3 +// +// Extra Life +// ---------- +// Off Off 20,000 points +// On Off 30,000 points +// Off On 40,000 points +// On On No extra life +// +// Difficulty +// ---------- +// Off Off (1) Easy +// On Off (3) Hard +// Off On (2) Medium +// On On (4) Hardest +// +//--------------------------------------------------------------------------------- +// NOTE: Mario Bros does not have a cocktail mode. + +module mario_inport +( + input [7:0]I_SW1, + input [7:0]I_SW2, + input [7:0]I_DIPSW, + input I_SW1_OEn, + input I_SW2_OEn, + input I_DIPSW_OEn, + + output [7:0]O_D +); + +wire [7:0]W_SW1 = I_SW1_OEn ? 8'h00: ~I_SW1; +wire [7:0]W_SW2 = I_SW2_OEn ? 8'h00: ~I_SW2; + +wire [7:0]W_DIPSW = I_DIPSW_OEn ? 8'h00: {I_DIPSW[6],I_DIPSW[7],I_DIPSW[5:0]}; + +assign O_D = W_SW1 | W_SW2 | W_DIPSW; + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_logic.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_logic.v new file mode 100644 index 00000000..b5c227d4 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_logic.v @@ -0,0 +1,117 @@ +//=============================================================================== +// FPGA DONKEY KONG used LOGIC IP +// +// Version : 1.00 +// +// Copyright(c) 2003 - 2004 Katsumi Degawa , All rights reserved +// +// Important ! +// +// This program is freeware for non-commercial use. +// An author does no guarantee about this program. +// You can use this under your own risk. +// +//================================================================================ + +//================================================ +// 74xx109 +// JK FLIP-FLOPS with PRESET & RST +// PRESET NO USE +//================================================ + +module logic_74xx109( +input FAST_CLK, +input CLK, +input RST, +input I_J, +input I_K, +output O_Q +); + +reg CLK_q; +reg Q; + +assign O_Q = Q; + +always@(posedge FAST_CLK)begin + CLK_q <= CLK; +end + +wire CLK_rise = ~CLK_q & CLK; + +always@(posedge FAST_CLK or negedge RST) +begin + if(RST == 1'b0) Q <= 1'b0; + else if (CLK_rise) begin + case({I_J,I_K}) + 2'b00: Q <= 1'b0; + 2'b01: Q <= Q; + 2'b10: Q <= ~Q; + 2'b11: Q <= 1'b1; + endcase + end +end + +endmodule + +//================================================ +// 74xx138 +// 3-to-8 line decoder +//================================================ + +module logic_74xx138( +input I_G1, +input I_G2a, +input I_G2b, +input [2:0]I_Sel, +output reg [7:0]O_Q +); + +wire [2:0]I_G = {I_G1,I_G2a,I_G2b}; +always@(I_G or I_Sel or O_Q) +begin + if(I_G == 3'b100 )begin + case(I_Sel) + 3'b000: O_Q = 8'b11111110; + 3'b001: O_Q = 8'b11111101; + 3'b010: O_Q = 8'b11111011; + 3'b011: O_Q = 8'b11110111; + 3'b100: O_Q = 8'b11101111; + 3'b101: O_Q = 8'b11011111; + 3'b110: O_Q = 8'b10111111; + 3'b111: O_Q = 8'b01111111; + endcase + end + else begin + O_Q = 8'b11111111; + end +end +endmodule + +//================================================ +// 74xx139 +// 2-to-4 line decoder +//================================================ + +module logic_74xx139( +input I_G, +input [1:0]I_Sel, +output reg [3:0]O_Q +); + +always@(I_G or I_Sel or O_Q) +begin + if(I_G == 1'b0 )begin + case(I_Sel) + 2'b00: O_Q = 4'b1110; + 2'b01: O_Q = 4'b1101; + 2'b10: O_Q = 4'b1011; + 2'b11: O_Q = 4'b0111; + endcase + end + else begin + O_Q = 4'b1111; + end +end + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_main.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_main.v new file mode 100644 index 00000000..1357d668 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_main.v @@ -0,0 +1,272 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Main CPU, ROM, RAM, address decoding, DMA and inputs. +//---------------------------------------------------------------------------- + +module mario_main +( + input I_CLK_48M, + input I_CEN_12M, + input I_MCPU_CEN4Mp, + input I_MCPU_CEN4Mn, + input I_MCPU_RESETn, + + input I_VRAMBUSY_n, + input I_VBLK_n, + input [7:0]I_SW1, + input [7:0]I_SW2, + input [7:0]I_DIPSW, + input [7:0]I_VRAM_DB, + + output [15:0]O_MCPU_A, + output [7:0]WI_D, + output [15:0]cpu_rom_addr, + input [7:0]cpu_rom_do, + output O_MCPU_RDn, + output O_MCPU_WRn, + + output [9:0]O_DMAD_A, + output [7:0]O_DMAD_D, + output O_DMAD_CE, + + output O_OBJ_RQn, + output O_OBJ_RDn, + output O_OBJ_WRn, + output O_VRAM_RDn, + output O_VRAM_WRn, + output [7:0]O_4C_Q, + output [7:0]O_2L_Q, + output [7:0]O_7M_Q, + output [7:0]O_7J_Q +); + +//----------------------- +// Main CPU - Z80 (4MHz) +//----------------------- + +wire W_MCPU_WAITn; +wire W_MCPU_RFSHn; +wire W_MCPU_M1n; +wire W_MCPU_NMIn; +wire W_MCPU_MREQn; +wire W_MCPU_RDn; +wire W_MCPU_WRn; +wire [15:0]W_MCPU_A; + +// INPUT DATA BUS +wire [7:0]ZDO, ZDI; +assign WI_D = ZDI; + +T80pa z80core( + .RESET_n(I_MCPU_RESETn), + .CLK(I_CLK_48M), + .CEN_p(I_MCPU_CEN4Mp), + .CEN_n(I_MCPU_CEN4Mn), + .WAIT_n(W_MCPU_WAITn), + .INT_n(1'b1), + .NMI_n(W_MCPU_NMIn), + .BUSRQ_n(), + .BUSAK_n(), + .M1_n(W_MCPU_M1n), + .IORQ_n(), + .MREQ_n(W_MCPU_MREQn), + .RD_n(W_MCPU_RDn), + .WR_n(W_MCPU_WRn), + .RFSH_n(W_MCPU_RFSHn), + .A(W_MCPU_A), + .DI(ZDO), + .DO(ZDI) + ); + +assign O_MCPU_A = W_MCPU_A; +assign O_MCPU_RDn = W_MCPU_RDn; +assign O_MCPU_WRn = W_MCPU_WRn; +assign cpu_rom_addr = W_MCPU_A; +// CPU Data Bus (Data In) +wire [7:0]WO_D = W_MROM_DO | W_MRAM7B_DO | W_MRAM7A_DO | W_SW_DO | I_VRAM_DB; +assign ZDO = WO_D; + +//------------------ +// Address decoding +//------------------ + +wire [3:0]W_MROM_CS_n; +wire [1:0]W_MRAM_CS_n; + +wire W_OBJ_RQn; +wire W_OBJ_RDn; +wire W_OBJ_WRn; +wire W_VRAM_RDn; +wire W_VRAM_WRn; +wire W_SW1_OEn; +wire W_SW2_OEn; +wire W_DIPSW_OEn; +wire [7:0]W_4C_Q; +wire [7:0]W_2L_Q; +wire [7:0]W_7M_Q; +wire [7:0]W_7J_Q; + +mario_adec adec +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_12M(I_CEN_12M), + .I_CEN_4Mp(I_MCPU_CEN4Mp), + .I_CEN_4Mn(I_MCPU_CEN4Mn), + .I_RESET_n(I_MCPU_RESETn), + .I_AB(W_MCPU_A), + .I_DB(WI_D), + .I_MREQ_n(W_MCPU_MREQn), + .I_RFSH_n(W_MCPU_RFSHn), + .I_RD_n(W_MCPU_RDn), + .I_WR_n(W_MCPU_WRn), + .I_VRAMBUSY_n(I_VRAMBUSY_n), + .I_VBLK_n(I_VBLK_n), + .O_WAIT_n(W_MCPU_WAITn), + .O_NMI_n(W_MCPU_NMIn), + + .O_MROM_CSn(W_MROM_CS_n), + .O_MRAM_CSn(W_MRAM_CS_n), + + .O_3J_G_n(/*W_3J_G_n*/), + .O_OBJ_RQ_n(W_OBJ_RQn), + .O_OBJ_RD_n(W_OBJ_RDn), + .O_OBJ_WR_n(W_OBJ_WRn), + .O_VRAM_RD_n(W_VRAM_RDn), + .O_VRAM_WR_n(W_VRAM_WRn), + .O_SW1_OE_n(W_SW1_OEn), + .O_SW2_OE_n(W_SW2_OEn), + .O_DIPSW_OE_n(W_DIPSW_OEn), + .O_4C_Q(W_4C_Q), + .O_2L_Q(W_2L_Q), + .O_7M_Q(W_7M_Q), + .O_7J_Q(W_7J_Q) +); + +assign O_OBJ_RQn = W_OBJ_RQn; +assign O_OBJ_RDn = W_OBJ_RDn; +assign O_OBJ_WRn = W_OBJ_WRn; +assign O_VRAM_RDn = W_VRAM_RDn; +assign O_VRAM_WRn = W_VRAM_WRn; +assign O_4C_Q = W_4C_Q; +assign O_2L_Q = W_2L_Q; +assign O_7M_Q = W_7M_Q; +assign O_7J_Q = W_7J_Q; + +//---------- +// Main ROM +//---------- + +wire [7:0]W_MROM_DO; + +assign cpu_rom_addr = W_MCPU_A; + +assign W_MROM_DO = (W_MROM_CS_n[0] == 1'b0 & W_MCPU_RDn == 1'b0) ? cpu_rom_do : + (W_MROM_CS_n[1] == 1'b0 & W_MCPU_RDn == 1'b0) ? cpu_rom_do : + (W_MROM_CS_n[2] == 1'b0 & W_MCPU_RDn == 1'b0) ? cpu_rom_do : + (W_MROM_CS_n[3] == 1'b0 & W_MCPU_RDn == 1'b0) ? cpu_rom_do : + 8'h00; + +//--------------------- +// Main CPU RAM 7A, 7B +// 2 x 2KB (6116) +//--------------------- + +wire [7:0]W_7B_DO; +reg [7:0]W_MRAM7B_DO; + +ram_2048_8 U_7B // 6000H - 67FFH +( + .I_CLK(I_CLK_48M), + .I_ADDR(W_MCPU_A[10:0]), + .I_D(WI_D), + .I_CE(~W_MRAM_CS_n[0]), + .I_WE(~W_MCPU_WRn), + .O_D(W_7B_DO) +); + +wire [7:0]W_7A_DO; +reg [7:0]W_MRAM7A_DO; + +ram_2048_8_8 U_7A // 6800H - 6FFFH +( + // A Port + .I_CLKA(I_CLK_48M), + .I_ADDRA(W_MCPU_A[10:0]), + .I_DA(WI_D), + .I_CEA(~W_MRAM_CS_n[1]), + .I_OEA(~W_MCPU_RDn), + .I_WEA(~W_MCPU_WRn), + .O_DA(W_7A_DO), + + // B Port - DMA port (read-only) + .I_CLKB(I_CLK_48M), + .I_ADDRB(W_DMAS_A), + .I_DB(8'h00), + .I_CEB(W_DMAS_CE), + .I_OEB(1'b1), + .I_WEB(1'b0), + .O_DB(W_DMAS_D) +); + +always@(posedge I_CLK_48M) +begin + if (I_CEN_12M) begin + W_MRAM7B_DO <= (W_MCPU_RDn == 1'b0 & W_MRAM_CS_n[0] == 1'b0) ? W_7B_DO : 8'h00; + W_MRAM7A_DO <= (W_MCPU_RDn == 1'b0 & W_MRAM_CS_n[1] == 1'b0) ? W_7A_DO : 8'h00; + end +end + +//------------------------------------------ +// Sprite DMA +// transfers $180 bytes from $6900 to $7000 +//------------------------------------------ + +wire [9:0]W_DMAS_A; +wire [7:0]W_DMAS_D; +wire W_DMAS_CE; +wire [9:0]W_DMAD_A; +wire [7:0]W_DMAD_D; +wire W_DMAD_CE; + +mario_dma sprite_dma +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_4M(I_MCPU_CEN4Mn), + .I_DMA_TRIG(W_2L_Q[5]), + .I_DMA_DS(W_DMAS_D), + + .O_DMA_AS(W_DMAS_A), + .O_DMA_CES(W_DMAS_CE), + .O_DMA_AD(W_DMAD_A), + .O_DMA_DD(W_DMAD_D), + .O_DMA_CED(W_DMAD_CE) +); + +assign O_DMAD_A = W_DMAD_A; +assign O_DMAD_D = W_DMAD_D; +assign O_DMAD_CE = W_DMAD_CE; + +//--------------------------- +// Inputs +// Controls and dip switches +//--------------------------- + +wire [7:0]W_SW_DO; + +mario_inport inport +( + .I_SW1(I_SW1), + .I_SW2(I_SW2), + .I_DIPSW(I_DIPSW), + .I_SW1_OEn(W_SW1_OEn), + .I_SW2_OEn(W_SW2_OEn), + .I_DIPSW_OEn(W_DIPSW_OEn), + + .O_D(W_SW_DO) +); + + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_obj.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_obj.v new file mode 100644 index 00000000..1f08c4e0 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_obj.v @@ -0,0 +1,626 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Objects (sprites) +// Based on the Donkey Kong version by Katsumi Degawa. +//---------------------------------------------------------------------------- + +//----------------------------------------------------------------------------------------- +// H_CNT[0],H_CNT[1],H_CNT[2],H_CNT[3],H_CNT[4],H_CNT[5],H_CNT[6],H_CNT[7],H_CNT[8],H_CNT[9] +// 1/2H 1H 2H 4H 8H 16H 32H 64H 128H 256H +//----------------------------------------------------------------------------------------- +// V_CNT[0],V_CNT[1],V_CNT[2],V_CNT[3],V_CNT[4],V_CNT[5],V_CNT[6],V_CNT[7] +// 1V 2V 4V 8V 16V 32V 64V 128V +//----------------------------------------------------------------------------------------- +// VF_CNT[0],VF_CNT[1],VF_CNT[2],VF_CNT[3],VF_CNT[4],VF_CNT[5],VF_CNT[6],VF_CNT[7] +// 1 VF 2 VF 4 VF 8 VF 16 VF 32 VF 64 VF 128 VF +//----------------------------------------------------------------------------------------- + +module mario_obj +( + input I_CLK_48M, + input I_CEN_24Mp, + input I_CEN_24Mn, + input I_CEN_12M, + input [9:0]I_AB, + input [7:0]I_DB, + //input [7:0]I_OBJ_D, + input I_OBJ_WRn, + input I_OBJ_RDn, + input I_OBJ_RQn, + input I_2PSL, + input I_FLIPn, + input I_CMPBLKn, + input [9:0]I_H_CNT, + input [7:0]I_VF_CNT, + input [9:0]I_OBJ_DMA_A, + input [7:0]I_OBJ_DMA_D, + input I_OBJ_DMA_CE, + output [7:0]O_DB, // Not used + output [6:0]O_OBJ_DO, + output O_FLIP_VRAM, + output O_FLIP_HV, + output O_L_CMPBLKn +); + +reg [1:0] cnt; +always@(posedge I_CLK_48M) begin + cnt <= cnt + 1'd1; +end +wire I_CLK_12M; // as data not clock +assign I_CLK_12M = (cnt == 0) || (cnt == 1); + + +// Add a bit delay to make it work correctly +reg I_CMPBLKn_delayed; +always@(posedge I_CLK_48M) begin + I_CMPBLKn_delayed <= I_CMPBLKn; +end + +//------------ +// Part 6P(1) +//------------ + +reg W_6P1; +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) begin + W_6P1 <= ~(I_H_CNT[0]&I_H_CNT[1]&I_H_CNT[2]&I_H_CNT[3]); + end +end + +//----------------- +// Part 4K (LS139) +//----------------- + +wire W_4K1_G = ~(I_H_CNT[0]&I_H_CNT[1]&I_H_CNT[2]&I_H_CNT[3]); + +wire [3:0]W_4K1_Q; +wire [3:0]W_4K2_QB; + +logic_74xx139 U_4K1 +( + .I_G(W_4K1_G), + .I_Sel({~I_H_CNT[9],I_H_CNT[3]}), + .O_Q(W_4K1_Q) + +); + +// The outputs from this are wired +// differently from DK, DKJ and DK3. +logic_74xx139 U_4K2 +( + .I_G(1'b0), + .I_Sel({I_H_CNT[3],I_H_CNT[2]}), + .O_Q(W_4K2_QB) +); + +reg [3:0]W_4K2_Q; +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) begin + W_4K2_Q <= W_4K2_QB; + end +end + +//------ +// Flip +//------ + +wire W_FLIP_1 = ~I_FLIPn; // INV +wire W_FLIP_2 = W_FLIP_1 ^ 1'b1; // INV => XOR +wire W_FLIP_3 = ~W_FLIP_2; // INV => XOR => INV +wire W_FLIP_4 = W_FLIP_3 | W_4K2_Q[0]; +wire W_FLIP_5 = ~W_FLIP_4; + +assign O_FLIP_VRAM = W_FLIP_1; +assign O_FLIP_HV = W_FLIP_3; + +//------------ +// DB CONTROL +//------------ + +wire [7:0]WI_DB = I_OBJ_WRn ? 8'h00: I_DB; +wire [7:0]WO_DB; +//assign O_DB = I_OBJ_RDn ? 8'h00: WO_DB; + +//------------------------------------------------ +// Object RAM 8B, 8C +// 2 x 2148 (1KB) +// Sprite data is written to these RAM's via DMA. +//------------------------------------------------ + +wire [9:0]W_OBJ_AB = {I_2PSL, I_H_CNT[8:0]}; +wire [7:0]W_OBJ_DI; + +ram_1024_8_8 U_8BC +( + // A Port - DMA port (write) + .I_CLKA(I_CLK_48M), + .I_ADDRA(I_OBJ_DMA_A), + .I_DA(I_OBJ_DMA_D), + .I_CEA(I_OBJ_DMA_CE), + .I_WEA(1'b1), + .O_DA(), + + // B Port (read) + .I_CLKB(I_CLK_48M), + .I_ADDRB(W_OBJ_AB[9:0]), + .I_DB(8'h00), + .I_CEB(1'b1), + .I_WEB(1'b0), + .O_DB(W_OBJ_DI) +); + +//------------ +// AB CONTROL +//------------ + +wire W_AB_SEL = I_OBJ_WRn & I_OBJ_RDn & I_OBJ_RQn; +wire [9:0]W_obj_AB = W_AB_SEL ? {I_2PSL,I_H_CNT[8:0]} : I_AB ; +wire W_obj_CS = W_AB_SEL ? 1'b0 : I_OBJ_WRn & I_OBJ_RDn; + +//-------------- +// VFC_CNT[7:0] +//-------------- + +reg I_H_CNT9_q; +wire I_H_CNT9_fall = I_H_CNT9_q & ~I_H_CNT[9]; +always@(posedge I_CLK_48M) begin + I_H_CNT9_q <= I_H_CNT[9]; +end + +reg [7:0]W_VFC_CNT; +always@(posedge I_CLK_48M) begin + if (I_H_CNT9_fall) begin + W_VFC_CNT <= I_VF_CNT; // 6J, 7J + end +end + +//----------------- +// Part 7D (LS273) +//----------------- + +reg [7:0]W_7D_Q; +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) begin + if (I_CLK_12M == 1'b0) + W_7D_Q <= W_OBJ_DI; + end +end + +//---------------------- +// Parts 6E,7E,6F,7F +// 4-bit adders (LS283) +//---------------------- + +wire [7:0]W_67E_A = W_7D_Q; +wire [7:0]W_67E_B = {4'b1111,I_FLIPn,W_FLIP_1,W_FLIP_1,1'b1}; +wire [8:0]W_67E_Q = W_67E_A + W_67E_B + 8'b00000001; + +wire [7:0]W_67F_A = W_67E_Q[7:0]; +wire [7:0]W_67F_B = I_VF_CNT[7:0]; +wire [8:0]W_67F_Q = W_67F_A + W_67F_B; + +//---- + +reg W_5F; +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) begin + if (I_CLK_12M) + W_5F <= ~(W_67F_Q[7]&W_67F_Q[6]&W_67F_Q[5]&W_67F_Q[4]); + end +end + +reg CLK_4F; +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) begin + CLK_4F = ~(I_H_CNT[0] & (~I_H_CNT[1])); + end +end +wire W_5E = ~(W_5CD_Q[6] | W_5CD_Q[7]); +wire W_4J = ~(I_H_CNT[2]&I_H_CNT[3]&I_H_CNT[4]&I_H_CNT[5]&I_H_CNT[6]&I_H_CNT[7]&I_H_CNT[8] & W_5E); + +//--------------- +//Part 4F (LS74) +//--------------- + +reg W_4F_Q; +wire W_RST_4F = ~I_H_CNT[9]; + +reg CLK_4F_q; +wire CLK_4F_rise = ~CLK_4F_q & CLK_4F; +always@(posedge I_CLK_48M) begin + CLK_4F_q <= CLK_4F; +end + +always@(posedge I_CLK_48M or negedge W_RST_4F) +begin + if(W_RST_4F == 0) W_4F_Q <= 1'b0; + else if (CLK_4F_rise) W_4F_Q <= ~(W_5F & W_4J); +end + +//----------------- +// Counters 5C, 5D +//----------------- + +wire CLK_5CD = ~(I_CLK_12M & (~I_H_CNT[9]) & W_4F_Q & W_5E); +wire W_5CD_RST = ~I_H_CNT[9]; +reg [7:0]W_5CD_Q; + +reg CLK_5CD_q; +wire CLK_5CD_rise = ~CLK_5CD_q & CLK_5CD; +always@(posedge I_CLK_48M) begin + CLK_5CD_q <= CLK_5CD; +end + +always@(posedge I_CLK_48M or negedge W_5CD_RST) +begin + if(W_5CD_RST == 1'b0) W_5CD_Q <= 0; + else if (CLK_5CD_rise) W_5CD_Q <= W_5CD_Q + 1'd1; +end + +//--------- +// Part 8D +//--------- + +reg [7:0]W_8D_Q; +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) begin + if (I_CLK_12M == 1'b0) + W_8D_Q <= W_7D_Q; + end +end + +//---------------------------------------------------- +// RAM 8E +// 64 x 9 bits bipolar RAM with inverted O/C outputs. +// A LS240 is used to re-invert the outputs. +//---------------------------------------------------- + +wire [5:0]W_RAM_8E_AB = ~I_H_CNT[9] ? W_5CD_Q[5:0] : I_H_CNT[7:2]; +wire [8:0]W_RAM_8E_DIB = {W_8D_Q[7:0],W_4J}; +wire [8:0]W_RAM_8E_DOB; + +ram_64_9 U_8E +( + .I_CLKA(I_CLK_48M), + .I_ADDRA(W_RAM_8E_AB), + .I_DA(W_RAM_8E_DIB), + .I_CEA(1'b1), + .I_WEA(~CLK_5CD), + .O_DA(W_RAM_8E_DOB) +); + +reg [7:0]W_HD; +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) + W_HD <= W_RAM_8E_DOB[8:1]; // Not on the schematics? +end + +// Add a bit delay to make it work correctly +reg [8:0] W_RAM_8E_DOB_delayed; +always@(posedge I_CLK_48M) begin + W_RAM_8E_DOB_delayed <= W_RAM_8E_DOB; +end + +//---------------------- +// Parts 6K,7K,6L,7L +// 4-bit adders (LS283) +//---------------------- + +wire [7:0]W_67K_A = W_RAM_8E_DOB_delayed[8:1]; +wire [7:0]W_67K_B = {4'b1111,W_FLIP_5,W_FLIP_4,W_FLIP_4,1'b1}; +wire [8:0]W_67K_Q = W_67K_A + W_67K_B + 8'b00000001; + +wire [7:0]W_67L_A = W_67K_Q[7:0]; +wire [7:0]W_67L_B = W_VFC_CNT[7:0]; +wire [8:0]W_67L_Q = W_67L_A + W_67L_B; + +//------------------- +// Part 6M (LS273) +//------------------- + +wire [7:0]W_6M_D = W_67L_Q[7:0]; +reg [7:0]W_6M_Q; +reg W_4K2_Q0_q; +wire W_4K2_Q0_rise = ~W_4K2_Q0_q & W_4K2_Q[0]; +always@(posedge I_CLK_48M) begin + W_4K2_Q0_q <= W_4K2_Q[0]; +end + +always@(posedge I_CLK_48M) begin + if (W_4K2_Q0_rise) + W_6M_Q <= W_6M_D; +end + +//------------------- +// Part 8J (LS273) +//------------------- + +reg [7:0]W_8J_Q; + +reg W_4K2_Q1_q; +wire W_4K2_Q1_rise = ~W_4K2_Q1_q & W_4K2_Q[1]; +always@(posedge I_CLK_48M) begin + W_4K2_Q1_q <= W_4K2_Q[1]; +end + +always@(posedge I_CLK_48M) begin + if (W_4K2_Q1_rise) + W_8J_Q <= W_HD[7:0]; +end + +//------------------- +// Part 6R (LS377) +//------------------- + +wire [7:0]W_6R_D = {W_8J_Q[7],I_CMPBLKn_delayed,~I_H_CNT[9], + ~(I_H_CNT[9]|W_FLIP_2),W_8J_Q[3:0]}; +reg [7:0]W_6R_Q; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_12M) begin + if(W_6P1 == 1'b0) + W_6R_Q <= W_6R_D; + else + W_6R_Q <= W_6R_Q; + end +end + +assign O_L_CMPBLKn = W_6R_Q[6]; + +//--------------- +// Part 3M +// J-K flip flop +//--------------- + +wire W_3M_Q; + +logic_74xx109 U_3M +( + .FAST_CLK(I_CLK_48M), + .CLK(W_4K2_Q[0]), + .RST(I_H_CNT[9]), + .I_J(~W_RAM_8E_DOB[0]), + .I_K(1'b1), + .O_Q(W_3M_Q) +); + +wire W_6P2 = ~(W_6M_Q[4]&W_6M_Q[5]&W_6M_Q[6]&W_6M_Q[7]); +wire W_4L = W_3M_Q | W_6P2; +wire W_6S = ~(W_4L | W_6P1); + +//----------------- +// Part 8K (LS373) +//----------------- + +wire W_8K_G = ~W_4K2_Q[2]; +reg [7:0]W_8K_Q; + +always@(W_8K_G or W_HD[7:0]) +begin + if(W_8K_G) + W_8K_Q <= W_HD[7:0]; + else + W_8K_Q <= W_8K_Q; +end + +//------------------------ +// Object ROMs (6 x 2732) +//------------------------ + +wire [11:0]W_ROM_OBJ_AB; +assign W_ROM_OBJ_AB[3:0] = W_6M_Q[3:0]^{W_8J_Q[6],W_8J_Q[6],W_8J_Q[6],W_8J_Q[6]}; +assign W_ROM_OBJ_AB[11:4] = W_8K_Q; +wire [47:0]W_ROM_OBJ_D; + +//OBJ_ROM objrom(I_CLK_48M, W_ROM_OBJ_AB, W_ROM_OBJ_D, +// I_CLK_48M, I_DLADDR, I_DLDATA, I_DLWR); + +obj_7m obj_7m( + .clk(I_CLK_48M), + .addr(W_ROM_OBJ_AB), + .data(W_ROM_OBJ_D[47:40]) +); + +obj_7n obj_7n( + .clk(I_CLK_48M), + .addr(W_ROM_OBJ_AB), + .data(W_ROM_OBJ_D[39:32]) +); + +obj_7p obj_7p( + .clk(I_CLK_48M), + .addr(W_ROM_OBJ_AB), + .data(W_ROM_OBJ_D[31:24]) +); + +obj_7s obj_7s( + .clk(I_CLK_48M), + .addr(W_ROM_OBJ_AB), + .data(W_ROM_OBJ_D[23:16]) +); + +obj_7t obj_7t( + .clk(I_CLK_48M), + .addr(W_ROM_OBJ_AB), + .data(W_ROM_OBJ_D[15:8]) +); + +obj_7u obj_7u( + .clk(I_CLK_48M), + .addr(W_ROM_OBJ_AB), + .data(W_ROM_OBJ_D[7:0]) +); + +//----------------------------- +// Parts 8N, 8P +// Shift registers (2 x LS299) +//----------------------------- + +wire W_8N_Qa, W_8P_Qh; + +wire [1:0]C_8NP = W_8LM_Y[1:0]; +wire [15:0]W_8NP = W_ROM_OBJ_D[47:32]; +reg [15:0]reg_8NP; + +assign W_8N_Qa = reg_8NP[15]; +assign W_8P_Qh = reg_8NP[0]; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_12M) begin + case(C_8NP) + 2'b00: reg_8NP <= reg_8NP; + 2'b10: reg_8NP <= {reg_8NP[14:0],1'b0}; + 2'b01: reg_8NP <= {1'b0,reg_8NP[15:1]}; + 2'b11: reg_8NP <= W_8NP; + endcase + end +end + +//----------------------------- +// Parts 8R, 8S +// Shift registers (2 x LS299) +//----------------------------- + +wire W_8R_Qa, W_8S_Qh; + +wire [1:0]C_8RS = W_8LM_Y[1:0]; +wire [15:0]W_8RS = W_ROM_OBJ_D[31:16]; +reg [15:0]reg_8RS; + +assign W_8R_Qa = reg_8RS[15]; +assign W_8S_Qh = reg_8RS[0]; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_12M) begin + case(C_8RS) + 2'b00: reg_8RS <= reg_8RS; + 2'b10: reg_8RS <= {reg_8RS[14:0],1'b0}; + 2'b01: reg_8RS <= {1'b0,reg_8RS[15:1]}; + 2'b11: reg_8RS <= W_8RS; + endcase + end +end + +//----------------------------- +// Parts 8T, 8U +// Shift registers (2 x LS299) +//----------------------------- + +wire W_8T_Qa, W_8U_Qh; + +wire [1:0]C_8TU = W_8LM_Y[1:0]; +wire [15:0]W_8TU = W_ROM_OBJ_D[15:0]; +reg [15:0]reg_8TU; + +assign W_8T_Qa = reg_8TU[15]; +assign W_8U_Qh = reg_8TU[0]; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_12M) begin + case(C_8TU) + 2'b00: reg_8TU <= reg_8TU; + 2'b10: reg_8TU <= {reg_8TU[14:0],1'b0}; + 2'b01: reg_8TU <= {1'b0,reg_8TU[15:1]}; + 2'b11: reg_8TU <= W_8TU; + endcase + end +end + +//-------------- +// Parts 8L, 8M +// 2 x LS157 +//-------------- + +wire [4:0]W_8LM_A, W_8LM_B, W_8LM_Y; + +assign W_8LM_A = {W_8N_Qa,W_8R_Qa,W_8T_Qa,1'b1,W_6S}; +assign W_8LM_B = {W_8P_Qh,W_8S_Qh,W_8U_Qh,W_6S,1'b1}; +assign W_8LM_Y = W_6R_Q[7] ? W_8LM_B : W_8LM_A; + +//-------------- +// Parts 4M, 5M +// 2 x LS163 +//-------------- + +reg CLK_4M5M; + +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) + CLK_4M5M <= ~(~(I_H_CNT[0] & W_6R_Q[5]) & I_CLK_12M); +end + +wire [7:0]W_4M5M_DI = W_67K_Q[7:0]; + +wire W_4M5M_RST = W_4K1_Q[3] | W_6R_Q[5]; +wire W_4M5M_LD = W_4K1_Q[1]; + +reg [7:0]W_4M5M_Q; + +reg CLK_4M5M_q; +wire CLK_4M5M_rise = ~CLK_4M5M_q & CLK_4M5M; +always@(posedge I_CLK_48M) begin + CLK_4M5M_q <= CLK_4M5M; +end + +always@(posedge I_CLK_48M) +begin + if (CLK_4M5M_rise) begin + if(W_4M5M_LD == 1'b0) + W_4M5M_Q <= W_4M5M_DI; + else begin + if(W_4M5M_RST == 1'b0) + W_4M5M_Q <= 0 ; + else + W_4M5M_Q <= W_4M5M_Q + 1'd1; + end + end +end + +//------------------------------- +// ECL RAM (2 x 256x4bit) 3R, 3P +//------------------------------- + +wire [7:0]W_RAM_3RP_AB = W_4M5M_Q[7:0]^{8{W_6R_Q[4]}}; + +wire [6:0]W_4S5S_A = {W_6R_Q[3:0],W_8LM_Y[2],W_8LM_Y[3],W_8LM_Y[4]}; +wire [6:0]W_RAM_3RP_DI = W_6R_Q[5] ? 7'h00 :(W_8LM_Y[2]|W_8LM_Y[3]|W_8LM_Y[4])? W_4S5S_A : W_RAM_3RP_DO; +wire [6:0]W_RAM_3RP_DO; + +ram_256_8 U_3RP +( + .I_CLKA(I_CLK_48M), + .I_ADDRA(W_RAM_3RP_AB), + .I_DA(W_RAM_3RP_DI), + .I_CEA(1'b1), + .I_WEA(~CLK_4M5M), + .O_DA(W_RAM_3RP_DO) +); + +//----------------- +// Part 4T (LS373) +//----------------- + +reg [6:0]W_OBJ_DO; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_24Mp) begin + if(~I_CLK_12M) + W_OBJ_DO <= W_RAM_3RP_DO; + else + W_OBJ_DO <= W_OBJ_DO ; + end +end + +assign O_OBJ_DO = W_OBJ_DO; + + +endmodule + diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound.v new file mode 100644 index 00000000..7638c511 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound.v @@ -0,0 +1,84 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Top level sound module. +//---------------------------------------------------------------------------- + +module mario_sound +( + input I_CLK_48M, + input I_CEN_12M, + input I_CEN_11M, + input I_RESETn, + input [7:0]I_SND_DATA, + input [9:0]I_SND_CTRL, + input [3:0]I_ANLG_VOL, + input [3:0]I_H_CNT, + output signed [15:0]O_SND_DAT +); + +//------------------------------------------------ +// Digital sound +// Background music and some of the sound effects +//------------------------------------------------ + +wire [15:0]W_D_S_DATA; + +mario_sound_digital digital_sound +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_12M(I_CEN_12M), + .I_CEN_11M(I_CEN_11M), + .I_RST(I_RESETn), + .I_SND_DATA(I_SND_DATA), + .I_SND_CTRL(I_SND_CTRL[6:0]), + + .O_SND_OUT(W_D_S_DATA) +); + +//-------------------------------------- +// Analogue Sounds (samples) +// Mario run, Luigi run and skid sounds +//-------------------------------------- + +wire signed [15:0]W_WAVROM_DS[0:2]; + +//mario_sound_analog analog_sound +//( +// .I_CLK_48M(I_CLK_48M), +// .I_RESETn(I_RESETn), +// +// .I_SND_CTRL(I_SND_CTRL[9:7]), +// .I_ANLG_VOL(I_ANLG_VOL), +// .I_H_CNT(I_H_CNT), +// +// .I_DLADDR(I_DLADDR), +// .I_DLDATA(I_DLDATA), +// .I_DLWR(I_DLWR), +// +// .O_WAVROM_DS0(W_WAVROM_DS[0]), +// .O_WAVROM_DS1(W_WAVROM_DS[1]), +// .O_WAVROM_DS2(W_WAVROM_DS[2]) +//); + +//---------------------------------- +// Sound Mixer (Analogue & Digital) +//---------------------------------- + +wire signed [15:0]W_SND_MIX; + +mario_sound_mixer mixer +( + .I_CLK_48M(I_CLK_48M), + .I_SND1(W_WAVROM_DS[0]), + .I_SND2(W_WAVROM_DS[1]), + .I_SND3(W_WAVROM_DS[2]), + .I_SND4(W_D_S_DATA), + .O_SND_DAT(W_SND_MIX) +); + +assign O_SND_DAT = W_SND_MIX; + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound_digital.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound_digital.v new file mode 100644 index 00000000..d370debd --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound_digital.v @@ -0,0 +1,160 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Digital sound module. +//---------------------------------------------------------------------------- + +module mario_sound_digital +( + input I_CLK_48M, + input I_CEN_12M, + input I_CEN_11M, + input I_RST, + input I_DLCLK, + input [16:0]I_DLADDR, + input [7:0]I_DLDATA, + input I_DLWR, + input [7:0]I_SND_DATA, + input [6:0]I_SND_CTRL, + + output signed [15:0]O_SND_DAC, + output signed [15:0]O_SND_OUT +); + +//---------------- +// Sub CPU M58715 +//---------------- + +wire [7:0]M58715_DBI; +wire [7:0]M58715_DBO; +wire [7:0]M58715_PAI; +wire [7:0]M58715_PBI; +wire M58715_ALE; +wire M58715_RDn; +wire M58715_WRn; +wire M58715_PSENn; + +wire [7:0]M58715_PAO = {4'b0000, I_SND_CTRL[6:3]}; + +M58715IP SOUND_CPU +( + .I_CLK(I_CLK_48M), + .I_CLK_EN(I_CEN_11M), + .I_RSTn(I_RST), + .I_INTn(~I_SND_CTRL[0]), + .I_EA(~M58715_PBI[5]), + .O_PSENn(M58715_PSENn), + .O_RDn(M58715_RDn), + .O_WRn(M58715_WRn), + .O_ALE(M58715_ALE), + .O_PROGn(), + .I_T0(I_SND_CTRL[1]), + .O_T0(), + .I_T1(I_SND_CTRL[2]), + .I_DB(M58715_DBO), + .O_DB(M58715_DBI), + .I_P1(M58715_PAO), + .O_P1(M58715_PAI), + .I_P2(8'h00), + .O_P2(M58715_PBI) +); + +//-------------------------------------------- +// The Mario Bros schematics show a sound ROM +// labelled as 2732 with the pinout of a 2764. +// A 2732 is used on the real board with the +// option of using a 2764. +// M58715 has 2KB internal ROM. The External +// 4KB ROM is accessed as 2 banks of 2KB. +//-------------------------------------------- + +wire [11:0]S_ROM_A; +reg [7:0]L_ROM_A; + +reg M58715_ALE_q; +wire M58715_ALE_fall = M58715_ALE_q & ~M58715_ALE; +always@(posedge I_CLK_48M) begin + M58715_ALE_q <= M58715_ALE; +end + +always@(posedge I_CLK_48M) begin + if (M58715_ALE_fall) + L_ROM_A <= M58715_DBI; +end + +wire A12 = ~M58715_RDn & ~M58715_PBI[7]; +wire S_ROM_OE = ~A12 & M58715_PSENn; + +assign S_ROM_A = {M58715_PBI[3:0],L_ROM_A[7:0]}; + + +reg S_7J_OC; +always@(posedge I_CLK_48M) begin + if (I_CEN_12M) + S_7J_OC <= ~(~M58715_RDn & M58715_PBI[7]); +end + +wire [7:0]S_PROG_D ; + +//SUB_EXT_ROM srom5k(I_CLK_48M, S_ROM_A, 1'b0, S_ROM_OE, S_PROG_D, +// I_CLK_48M, I_DLADDR, I_DLDATA, I_DLWR); +snd_rom snd_rom( + .clk(I_CLK_48M), + .addr(S_ROM_A), + .data(S_PROG_D) +); + + + +// M58715 Data Bus +wire [7:0]M58715_DO = S_7J_OC == 1'b0 ? I_SND_DATA : S_PROG_D; + +reg [7:0]DO; +always@(posedge I_CLK_48M) begin + if (I_CEN_12M) + DO <= M58715_DO; +end + +assign M58715_DBO = DO; + +// Sound out +reg [15:0]SND_DAC; + +reg M58715_WRn_q; +wire M58715_WRn_rise = ~M58715_WRn_q & M58715_WRn; +always@(posedge I_CLK_48M) begin + M58715_WRn_q <= M58715_WRn; +end + +always@(posedge I_CLK_48M) begin + if (M58715_WRn_rise) + SND_DAC <= {2{~M58715_DBI[7],M58715_DBI[6:0]}}; // 16-bit signed; +end + +//----------------------------------------------------- +// Sound filter +// Low pass filter. f= 1178.9 Hz @ 48KHz. +//----------------------------------------------------- + +// Reduce volume +wire [15:0]W_SND_IN = {SND_DAC[15],SND_DAC[15:1]} + {{3{SND_DAC[15]}}, SND_DAC[15:3]}; + +wire [15:0]W_FILT_OUT; + +iir_1st_order filter +( + .clk(I_CLK_48M), + .reset(~I_RST), + .div(12'd1000), // 48Mhz / 1000 = 48KHz + .A2(-18'sd28065), + .B1(18'sd2352), + .B2(18'sd2352), + .in(W_SND_IN), + .out(W_FILT_OUT) +); + +assign O_SND_OUT = W_FILT_OUT; + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound_mixer.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound_mixer.v new file mode 100644 index 00000000..7bf0c684 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_sound_mixer.v @@ -0,0 +1,38 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Sound mixer. +// Mixes the analogue sounds (samples) with the digital +// sound produced by the M58715 chip. +//---------------------------------------------------------------------------- + +module mario_sound_mixer +( + input I_CLK_48M, + input [15:0]I_SND1,I_SND2,I_SND3,I_SND4, + output signed [15:0]O_SND_DAT +); + +wire signed [18:0]sound_mix = {{3{I_SND1[15]}}, I_SND1} + + {{3{I_SND2[15]}}, I_SND2} + + {{3{I_SND3[15]}}, I_SND3} + + {{3{I_SND4[15]}}, I_SND4}; + +reg signed [15:0]dac_di; + +always@(posedge I_CLK_48M) +begin + if(sound_mix >= 19'sh07FFF) + dac_di <= 16'sh7FFF; + else if(sound_mix <= -19'sh08000) + dac_di <= -16'sh8000; + else + dac_di <= sound_mix[15:0]; +end + + +assign O_SND_DAT = dac_di; + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_top.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_top.v new file mode 100644 index 00000000..745f68e9 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_top.v @@ -0,0 +1,249 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Top level module +//---------------------------------------------------------------------------- + +module mario_top +( + input I_CLK_48M, + input I_RESETn, + + input [3:0] I_ANLG_VOL, + input [7:0] I_SW1, + input [7:0] I_SW2, + input [7:0] I_DIPSW, + + output [15:0] cpu_rom_addr, + input [7:0] cpu_rom_do, + output [11:0] bg_rom_addr, + input [15:0] bg_rom_do, + + output [2:0] O_VGA_R, + output [2:0] O_VGA_G, + output [1:0] O_VGA_B, + output O_HBLANK, + output O_VBLANK, + output O_VGA_HSYNCn, + output O_VGA_VSYNCn, + output O_PIX, + + output signed [15:0] O_SOUND_DAT +); + +wire W_RESETn = I_RESETn; +wire W_CPU_RESETn = W_RESETn; +wire W_CLK_48M = I_CLK_48M; +wire cen24p, cen24n, cen12p, cen12n, cen11, cen6, cen4p, cen4n; + +reg [2:0] div8; + +always @(posedge W_CLK_48M) begin + div8 <= div8 + 1'd1; +end + +assign cen24p = div8[0]; +assign cen24n = ~div8[0]; +assign cen12p = div8[0] & div8[1]; +assign cen12n = div8[0] & ~div8[1]; +assign cen6 = div8 == 0; + +reg [3:0] div12; + +always @(posedge W_CLK_48M) begin + div12 <= div12 + 1'd1; + if (div12 == 4'd11) begin + div12 <= 0; + end +end + +assign cen4p = div12 == 0; +assign cen4n = div12 == 6; + +reg [2:0] div8b; +reg [2:0] div5; +reg flip; + +always @(posedge W_CLK_48M) begin + if (flip) begin + div8b <= div8b + 1'd1; + if (div8b == 7) begin + flip <= 1'b0; + div5 <= 0; + end + end else begin + div5 <= div5 + 1'd1; + if (div5 == 4) begin + flip <= 1'b1; + div8b <= 0; + end + end +end + +assign cen11 = flip ? (div8b == 0 || div8b == 4) : (div5 == 0); + +//----------------- +// Video timing +//----------------- + + +wire [9:0]W_H_CNT; +wire [7:0]W_V_CNT; +wire [7:0]W_VF_CNT; +wire W_HBLANKn; +wire W_VBLANKn; +wire W_CBLANKn; +wire W_HSYNCn; +wire W_VSYNCn; +wire W_VCKn; + +mario_hv_generator hv +( + .I_CLK(W_CLK_48M), + .I_CEN(cen12n), + .I_RST_n(W_RESETn), + .I_VFLIP(W_FLIP_HV), + .H_CNT(W_H_CNT), + .V_CNT(W_V_CNT), // Not used + .VF_CNT(W_VF_CNT), + .H_BLANKn(W_HBLANKn), + .V_BLANKn(W_VBLANKn), + .C_BLANKn(W_CBLANKn), + .H_SYNCn(W_HSYNCn), + .V_SYNCn(W_VSYNCn), + .VCKn(W_VCKn) +); + +assign O_PIX = W_H_CNT[0]; + +assign O_HBLANK = ~W_HBLANKn; +assign O_VBLANK = ~W_VBLANKn; +assign O_VGA_HSYNCn = W_HSYNCn; +assign O_VGA_VSYNCn = W_VSYNCn; + +//----------------------------------------- +// Main CPU +// ROM, RAM, address decoding, inputs etc. +//----------------------------------------- + +wire [15:0]W_MCPU_A; +wire [7:0]ZDI; +wire [7:0]WI_D = ZDI; +wire W_MCPU_RDn; +wire W_MCPU_WRn; + +wire [9:0]W_DMAD_A; +wire [7:0]W_DMAD_D; +wire W_DMAD_CE; + +wire W_OBJ_RQn; +wire W_OBJ_RDn; +wire W_OBJ_WRn; +wire W_VRAM_RDn; +wire W_VRAM_WRn; + +wire [7:0]W_4C_Q; +wire [7:0]W_2L_Q; +wire [7:0]W_7M_Q; +wire [7:0]W_7J_Q; + +mario_main maincpu +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_12M(cen12p), + .I_MCPU_CEN4Mp(cen4p), + .I_MCPU_CEN4Mn(cen4n), + .I_MCPU_RESETn(W_CPU_RESETn), + .I_VRAMBUSY_n(W_VRAMBUSYn), + .I_VBLK_n(W_VBLANKn), + .I_VRAM_DB(W_VRAM_DB), + .I_SW1(I_SW1), + .I_SW2(I_SW2), + .I_DIPSW(I_DIPSW), + .cpu_rom_addr(cpu_rom_addr), + .cpu_rom_do(cpu_rom_do), + .O_MCPU_A(W_MCPU_A), + .WI_D(ZDI), + .O_MCPU_RDn(W_MCPU_RDn), + .O_MCPU_WRn(W_MCPU_WRn), + .O_DMAD_A(W_DMAD_A), + .O_DMAD_D(W_DMAD_D), + .O_DMAD_CE(W_DMAD_CE), + .O_OBJ_RQn(W_OBJ_RQn), + .O_OBJ_RDn(W_OBJ_RDn), + .O_OBJ_WRn(W_OBJ_WRn), + .O_VRAM_RDn(W_VRAM_RDn), + .O_VRAM_WRn(W_VRAM_WRn), + .O_4C_Q(W_4C_Q), + .O_2L_Q(W_2L_Q), + .O_7M_Q(W_7M_Q), + .O_7J_Q(W_7J_Q) +); + +//------------------------------------ +// Video +// Background tiles, sprites, colours +//------------------------------------ + +wire W_VRAMBUSYn; +wire [7:0]W_VRAM_DB; +wire [7:0]W_OBJ_DB; +wire W_FLIP_HV; + +mario_video vid +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_24Mp(cen24p), + .I_CEN_24Mn(cen24n), + .I_CEN_12M(cen12p), + .I_CEN_6M(cen6), + .I_RESETn(W_RESETn), + .I_CPU_A(W_MCPU_A[9:0]), + .I_CPU_D(WI_D), + + .I_VRAM_WRn(W_VRAM_WRn), + .I_VRAM_RDn(W_VRAM_RDn), + .I_2L_Q(W_2L_Q), + .I_VMOV(W_4C_Q[2]), + + .I_H_CNT(W_H_CNT), + .I_VF_CNT(W_VF_CNT), + .I_CBLANKn(W_CBLANKn), + .I_VBLKn(W_VBLANKn), + .I_VCKn(W_VCKn), + .I_OBJDMA_A(W_DMAD_A), + .I_OBJDMA_D(W_DMAD_D), + .I_OBJDMA_CE(W_DMAD_CE), + .bg_rom_addr(bg_rom_addr), + .bg_rom_do(bg_rom_do), + .O_VRAM_DB(W_VRAM_DB), + .O_VRAMBUSYn(W_VRAMBUSYn), + .O_FLIP_HV(W_FLIP_HV), + .O_OBJ_DB(W_OBJ_DB), // Not used + .O_VGA_RED(O_VGA_R), + .O_VGA_GRN(O_VGA_G), + .O_VGA_BLU(O_VGA_B) +); + + +//------- +// Sound +//------- + +mario_sound sound +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_12M(cen12p), + .I_CEN_11M(cen11), + .I_RESETn(W_RESETn), + .I_SND_DATA(W_7J_Q), + .I_SND_CTRL({W_4C_Q[1:0],W_7M_Q}), + .I_ANLG_VOL(I_ANLG_VOL), + .I_H_CNT(W_H_CNT[3:0]), + .O_SND_DAT(O_SOUND_DAT) +); + + +endmodule \ No newline at end of file diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_video.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_video.v new file mode 100644 index 00000000..eeaedb4f --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_video.v @@ -0,0 +1,149 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Top level video module. +//---------------------------------------------------------------------------- + +module mario_video +( + input I_CLK_48M, + input I_CEN_24Mp, + input I_CEN_24Mn, + input I_CEN_6M, + input I_CEN_12M, + input I_RESETn, + input [9:0]I_CPU_A, + input [7:0]I_CPU_D, + input I_VRAM_WRn, + input I_VRAM_RDn, + input [7:0]I_2L_Q, + input I_VMOV, + input [9:0]I_H_CNT, + input [7:0]I_VF_CNT, + input I_CBLANKn, + input I_VBLKn, + input I_VCKn, + input [9:0]I_OBJDMA_A, + input [7:0]I_OBJDMA_D, + input I_OBJDMA_CE, + output [7:0]O_VRAM_DB, + output O_VRAMBUSYn, + output O_FLIP_HV, + output [7:0]O_OBJ_DB, + output [2:0]O_VGA_RED, + output [2:0]O_VGA_GRN, + output [1:0]O_VGA_BLU, + output [15:0]bg_rom_addr, + input [15:0]bg_rom_do +); + +//------------------ +// VRAM +// Background tiles +//------------------ + +wire [3:0]W_VRAM_COL; +wire [1:0]W_VRAM_VID; +wire [7:0]W_VRAM_DB; +wire W_VRAMBUSYn; +wire W_TROMn = I_2L_Q[0]; + +mario_vram vram +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_24Mp(I_CEN_24Mp), + .I_CEN_24Mn(I_CEN_24Mn), + .I_AB(I_CPU_A), + .I_DB(I_CPU_D), + .I_VRAM_WRn(I_VRAM_WRn), + .I_VRAM_RDn(I_VRAM_RDn), + .I_FLIP(W_FLIP_VRAM), + .I_H_CNT(I_H_CNT), + .I_CMPBLK(I_CBLANKn), + .I_VBLKn(I_VBLKn), + .I_VCKn(I_VCKn), + .I_GFXBANK(W_TROMn), + .I_VMOV(I_VMOV), + .O_DB(W_VRAM_DB), + .O_COL(W_VRAM_COL), + .O_VID(W_VRAM_VID), + .O_VRAMBUSYn(W_VRAMBUSYn), + .bg_rom_addr(bg_rom_addr), + .bg_rom_do(bg_rom_do) +); + +wire [6:0]W_VRAM_DAT = {W_VRAM_COL[3:0],1'b0,W_VRAM_VID[1:0]}; + +assign O_VRAM_DB = W_VRAM_DB; +assign O_VRAMBUSYn = W_VRAMBUSYn; + +//------------------- +// Objects / Sprites +//------------------- + +wire [6:0]W_OBJ_DAT; +wire W_FLIP_VRAM; +wire W_FLIP_HV; +wire W_FLIPn = ~I_2L_Q[2]; +wire W_2PSL = I_2L_Q[1]; +wire W_L_CMPBLKn; +wire [7:0]W_OBJ_DB; + +mario_obj sprites +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_24Mp(I_CEN_24Mp), + .I_CEN_24Mn(I_CEN_24Mn), + .I_CEN_12M(I_CEN_12M), + .I_AB(), // Not used + .I_DB(/*W_2N_DO*/), // Not used + .I_OBJ_WRn(1'b1), // Not used + .I_OBJ_RDn(1'b1), // Not used + .I_OBJ_RQn(1'b1), // Not used + .I_2PSL(W_2PSL), + .I_FLIPn(W_FLIPn), + .I_CMPBLKn(I_CBLANKn), + .I_H_CNT(I_H_CNT), + .I_VF_CNT(I_VF_CNT), + .I_OBJ_DMA_A(I_OBJDMA_A), + .I_OBJ_DMA_D(I_OBJDMA_D), + .I_OBJ_DMA_CE(I_OBJDMA_CE), + .O_DB(W_OBJ_DB), // Not used + .O_OBJ_DO(W_OBJ_DAT), + .O_FLIP_VRAM(W_FLIP_VRAM), + .O_FLIP_HV(W_FLIP_HV), + .O_L_CMPBLKn(W_L_CMPBLKn) +); + +assign O_OBJ_DB = W_OBJ_DB; +assign O_FLIP_HV = W_FLIP_HV; + +//---------------- +// Colour Palette +//---------------- + +wire [2:0]W_R; +wire [2:0]W_G; +wire [1:0]W_B; + +mario_col_pal cpal +( + .I_CLK_48M(I_CLK_48M), + .I_CEN_24Mn(I_CEN_24Mn), + .I_CEN_6M(I_CEN_6M), + .I_VRAM_D(W_VRAM_DAT), + .I_OBJ_D(W_OBJ_DAT), + .I_CMPBLKn(W_L_CMPBLKn), + .I_CPAL_SEL(I_2L_Q[3]), + .O_R(W_R), + .O_G(W_G), + .O_B(W_B) +); + +assign O_VGA_RED = W_R; +assign O_VGA_GRN = W_G; +assign O_VGA_BLU = W_B; + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/mario_vram.v b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_vram.v new file mode 100644 index 00000000..a0e8c4de --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/mario_vram.v @@ -0,0 +1,233 @@ +//---------------------------------------------------------------------------- +// Mario Bros Arcade +// +// Author: gaz68 (https://github.com/gaz68) June 2020 +// +// Video RAM (background tiles) +// Based on the Donkey Kong version by Katsumi Degawa. +//---------------------------------------------------------------------------- + +//----------------------------------------------------------------------------------------- +// H_CNT[0],H_CNT[1],H_CNT[2],H_CNT[3],H_CNT[4],H_CNT[5],H_CNT[6],H_CNT[7],H_CNT[8],H_CNT[9] +// 1/2 H 1 H 2 H 4H 8H 16 H 32H 64 H 128 H 256 H +//----------------------------------------------------------------------------------------- +// V_CNT[0], V_CNT[1], V_CNT[2], V_CNT[3], V_CNT[4], V_CNT[5], V_CNT[6], V_CNT[7] +// 1 V 2 V 4 V 8 V 16 V 32 V 64 V 128 V +//----------------------------------------------------------------------------------------- +// VF_CNT[0],VF_CNT[1],VF_CNT[2],VF_CNT[3],VF_CNT[4],VF_CNT[5],VF_CNT[6],VF_CNT[7] +// 1 VF 2 VF 4 VF 8 VF 16 VF 32 VF 64 VF 128 VF +//----------------------------------------------------------------------------------------- + +module mario_vram( + input I_CLK_48M, + input I_CEN_24Mp, + input I_CEN_24Mn, + input [9:0]I_AB, + input [7:0]I_DB, + input I_VRAM_WRn, + input I_VRAM_RDn, + input I_FLIP, + input [9:0]I_H_CNT, + input I_CMPBLK, + input I_VBLKn, + input I_VCKn, + input I_GFXBANK, + input I_VMOV, + + output [7:0]O_DB, + output reg [3:0]O_COL, + output [1:0]O_VID, + output O_VRAMBUSYn, + output [15:0]bg_rom_addr, + input [15:0]bg_rom_do +); + +//--------------------------------------------------- +// Vertical scroll register +// Used to make screen bounce when POW block is used +//--------------------------------------------------- + +reg [7:0]W_1E_Q; +reg [7:0]W_1AC_Q; +wire [7:0]W_1BD_Q = W_1E_Q[7:0]^{8{I_FLIP}}; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_24Mn) begin + reg VCKnp, VBLKnp, VMOVp; + VCKnp <= I_VCKn; + VBLKnp <= I_VBLKn; + VMOVp <= I_VMOV; + + if(I_VMOV && !VMOVp) W_1E_Q <= I_DB; + + if(I_VBLKn && !VBLKnp) + W_1AC_Q <= W_1BD_Q; // Load + else + if(!VCKnp && I_VCKn) + W_1AC_Q <= W_1AC_Q + 8'd1; + end +end + + +wire [7:0]W_VF_CNT = W_1AC_Q[7:0]^{8{I_FLIP}}; + +//------------------------- +// VRAM +// 2 x 2114 @ 3D, 3E (1KB) +//------------------------- + +wire [7:0]WI_DB = I_VRAM_WRn ? 8'h00: I_DB; +wire [7:0]WO_DB; + +assign O_DB = I_VRAM_RDn ? 8'h00: WO_DB; + +wire [4:0]W_HF_CNT = I_H_CNT[8:4]^{I_FLIP,I_FLIP,I_FLIP,I_FLIP,I_FLIP}; +wire [9:0]W_CNT_AB = {W_VF_CNT[7:3],W_HF_CNT[4:0]}; +wire [9:0]W_VRAM_AB = I_CMPBLK ? W_CNT_AB : I_AB ; +wire W_VRAM_CS = I_CMPBLK ? 1'b0 : I_VRAM_WRn & I_VRAM_RDn; +wire W_2S4 = I_CMPBLK ? 1'b0 : 1'b1 ; + +ram_1024_8 U_3DE( + + .I_CLK(I_CLK_48M), + .I_ADDR(W_VRAM_AB), + .I_D(WI_DB), + .I_CE(~W_VRAM_CS), + .I_WE(~I_VRAM_WRn), + .O_D(WO_DB) + +); + +reg CLK_3K; + +// TCOL 0-2 connections to 3K are numbered +// in the wrong order on the schematics +reg [3:0]TCOL; + +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mn) begin + reg CLK_3Kp, H_CNT0p; + + CLK_3K <= ~(I_H_CNT[1]&I_H_CNT[2]&I_H_CNT[3]); + CLK_3Kp <= CLK_3K; + + if (CLK_3Kp && !CLK_3K) TCOL <= {1'b1,WO_DB[7:5]}; + + // Fix for timing issue + H_CNT0p <= I_H_CNT[0]; + if (!H_CNT0p && I_H_CNT[0]) O_COL <= TCOL; + end +end + +//------------------- +// Video ROMs 3F, 3J +//------------------- + +wire [11:0]W_VROM_AB = {I_GFXBANK,WO_DB[7:0],W_VF_CNT[2:0]}; +wire [15:0]W_3FJ_DO; + +//VID_ROM roms3FJ(I_CLK_48M, W_VROM_AB, 1'b0, W_3FJ_DO, +// I_DLCLK, I_DLADDR, I_DLDATA, I_DLWR); + +gfx_3f gfx_3f( + .clk(I_CLK_48M), + .addr(W_VROM_AB), + .data(W_3FJ_DO[15:8]) +); + +gfx_3j gfx_3j( + .clk(I_CLK_48M), + .addr(W_VROM_AB), + .data(W_3FJ_DO[7:0]) +); + +//assign bg_rom_addr = W_VROM_AB; +//assign W_3FJ_DO = bg_rom_do; + +//------------------- +// Shift register 2H +//------------------- + +wire W_2H_Qa, W_2H_Qh; + +wire [1:0]C_2H = W_2K_Y[1:0]; +wire [7:0]W_2H = W_3FJ_DO[7:0]; +reg [7:0]reg_2H; + +assign W_2H_Qa = reg_2H[7]; +assign W_2H_Qh = reg_2H[0]; + +//------------------- +// Shift register 2J +//------------------- + +wire W_2J_Qa, W_2J_Qh; + +wire [1:0]C_2J = W_2K_Y[1:0]; +wire [7:0]W_2J = W_3FJ_DO[15:8]; +reg [7:0]reg_2J; + +assign W_2J_Qa = reg_2J[7]; +assign W_2J_Qh = reg_2J[0]; + +always@(posedge I_CLK_48M) begin + if (I_CEN_24Mp) begin + reg H_CNT0p; + H_CNT0p <= I_H_CNT[0]; + + if (!H_CNT0p && I_H_CNT[0]) begin + case(C_2H) + 2'b00: reg_2H <= reg_2H; + 2'b10: reg_2H <= {reg_2H[6:0],1'b0}; + 2'b01: reg_2H <= {1'b0,reg_2H[7:1]}; + 2'b11: reg_2H <= W_2H; + endcase + + case(C_2J) + 2'b00: reg_2J <= reg_2J; + 2'b10: reg_2J <= {reg_2J[6:0],1'b0}; + 2'b01: reg_2J <= {1'b0,reg_2J[7:1]}; + 2'b11: reg_2J <= W_2J; + endcase + end + end +end + +//--------- +// Part 2K +//--------- + +wire [3:0]W_2K_a,W_2K_b; +wire [3:0]W_2K_Y; + +assign W_2K_a = {W_2H_Qa,W_2J_Qa,1'b1,~(CLK_3K|W_2S4)}; +assign W_2K_b = {W_2H_Qh,W_2J_Qh,~(CLK_3K|W_2S4),1'b1}; +assign W_2K_Y = I_FLIP ? W_2K_b : W_2K_a; + +assign O_VID[0] = W_2K_Y[2]; +assign O_VID[1] = W_2K_Y[3]; + +//------------------ +// VRAM BUSY signal +//------------------ + +reg W_VRAMBUSY; + +always@(posedge I_CLK_48M) +begin + if (I_CEN_24Mp) begin + reg last_HCNT2; + last_HCNT2 <= I_H_CNT[2]; + + if(I_H_CNT[9] == 1'b0) + W_VRAMBUSY <= 1'b1; + else if (I_H_CNT[2] && !last_HCNT2) + W_VRAMBUSY <= I_H_CNT[4]&I_H_CNT[5]&I_H_CNT[6]&I_H_CNT[7]; + end +end + +assign O_VRAMBUSYn = ~W_VRAMBUSY; + + +endmodule diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/pll.qip b/Arcade_MiST/Nintendo Mario Bros/rtl/pll.qip new file mode 100644 index 00000000..afd958be --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/pll.qip @@ -0,0 +1,4 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "13.1" +set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "pll.v"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"] diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/pll.v b/Arcade_MiST/Nintendo Mario Bros/rtl/pll.v new file mode 100644 index 00000000..db4af42f --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/pll.v @@ -0,0 +1,337 @@ +// megafunction wizard: %ALTPLL% +// GENERATION: STANDARD +// VERSION: WM1.0 +// MODULE: altpll + +// ============================================================ +// File Name: pll.v +// Megafunction Name(s): +// altpll +// +// Simulation Library Files(s): +// altera_mf +// ============================================================ +// ************************************************************ +// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +// +// 13.1.4 Build 182 03/12/2014 SJ Full Version +// ************************************************************ + + +//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. + + +// synopsys translate_off +`timescale 1 ps / 1 ps +// synopsys translate_on +module pll ( + inclk0, + c0, + c1, + locked); + + input inclk0; + output c0; + output c1; + output locked; + + wire [4:0] sub_wire0; + wire sub_wire2; + wire [0:0] sub_wire6 = 1'h0; + wire [0:0] sub_wire3 = sub_wire0[0:0]; + wire [1:1] sub_wire1 = sub_wire0[1:1]; + wire c1 = sub_wire1; + wire locked = sub_wire2; + wire c0 = sub_wire3; + wire sub_wire4 = inclk0; + wire [1:0] sub_wire5 = {sub_wire6, sub_wire4}; + + altpll altpll_component ( + .inclk (sub_wire5), + .clk (sub_wire0), + .locked (sub_wire2), + .activeclock (), + .areset (1'b0), + .clkbad (), + .clkena ({6{1'b1}}), + .clkloss (), + .clkswitch (1'b0), + .configupdate (1'b0), + .enable0 (), + .enable1 (), + .extclk (), + .extclkena ({4{1'b1}}), + .fbin (1'b1), + .fbmimicbidir (), + .fbout (), + .fref (), + .icdrclk (), + .pfdena (1'b1), + .phasecounterselect ({4{1'b1}}), + .phasedone (), + .phasestep (1'b1), + .phaseupdown (1'b1), + .pllena (1'b1), + .scanaclr (1'b0), + .scanclk (1'b0), + .scanclkena (1'b1), + .scandata (1'b0), + .scandataout (), + .scandone (), + .scanread (1'b0), + .scanwrite (1'b0), + .sclkout0 (), + .sclkout1 (), + .vcooverrange (), + .vcounderrange ()); + defparam + altpll_component.bandwidth_type = "AUTO", + altpll_component.clk0_divide_by = 9, + altpll_component.clk0_duty_cycle = 50, + altpll_component.clk0_multiply_by = 32, + altpll_component.clk0_phase_shift = "0", + altpll_component.clk1_divide_by = 9, + altpll_component.clk1_duty_cycle = 50, + altpll_component.clk1_multiply_by = 16, + altpll_component.clk1_phase_shift = "0", + altpll_component.compensate_clock = "CLK0", + altpll_component.inclk0_input_frequency = 37037, + altpll_component.intended_device_family = "Cyclone III", + altpll_component.lpm_hint = "CBX_MODULE_PREFIX=pll", + altpll_component.lpm_type = "altpll", + altpll_component.operation_mode = "NORMAL", + altpll_component.pll_type = "AUTO", + altpll_component.port_activeclock = "PORT_UNUSED", + altpll_component.port_areset = "PORT_UNUSED", + altpll_component.port_clkbad0 = "PORT_UNUSED", + altpll_component.port_clkbad1 = "PORT_UNUSED", + altpll_component.port_clkloss = "PORT_UNUSED", + altpll_component.port_clkswitch = "PORT_UNUSED", + altpll_component.port_configupdate = "PORT_UNUSED", + altpll_component.port_fbin = "PORT_UNUSED", + altpll_component.port_inclk0 = "PORT_USED", + altpll_component.port_inclk1 = "PORT_UNUSED", + altpll_component.port_locked = "PORT_USED", + altpll_component.port_pfdena = "PORT_UNUSED", + altpll_component.port_phasecounterselect = "PORT_UNUSED", + altpll_component.port_phasedone = "PORT_UNUSED", + altpll_component.port_phasestep = "PORT_UNUSED", + altpll_component.port_phaseupdown = "PORT_UNUSED", + altpll_component.port_pllena = "PORT_UNUSED", + altpll_component.port_scanaclr = "PORT_UNUSED", + altpll_component.port_scanclk = "PORT_UNUSED", + altpll_component.port_scanclkena = "PORT_UNUSED", + altpll_component.port_scandata = "PORT_UNUSED", + altpll_component.port_scandataout = "PORT_UNUSED", + altpll_component.port_scandone = "PORT_UNUSED", + altpll_component.port_scanread = "PORT_UNUSED", + altpll_component.port_scanwrite = "PORT_UNUSED", + altpll_component.port_clk0 = "PORT_USED", + altpll_component.port_clk1 = "PORT_USED", + altpll_component.port_clk2 = "PORT_UNUSED", + altpll_component.port_clk3 = "PORT_UNUSED", + altpll_component.port_clk4 = "PORT_UNUSED", + altpll_component.port_clk5 = "PORT_UNUSED", + altpll_component.port_clkena0 = "PORT_UNUSED", + altpll_component.port_clkena1 = "PORT_UNUSED", + altpll_component.port_clkena2 = "PORT_UNUSED", + altpll_component.port_clkena3 = "PORT_UNUSED", + altpll_component.port_clkena4 = "PORT_UNUSED", + altpll_component.port_clkena5 = "PORT_UNUSED", + altpll_component.port_extclk0 = "PORT_UNUSED", + altpll_component.port_extclk1 = "PORT_UNUSED", + altpll_component.port_extclk2 = "PORT_UNUSED", + altpll_component.port_extclk3 = "PORT_UNUSED", + altpll_component.self_reset_on_loss_lock = "OFF", + altpll_component.width_clock = 5; + + +endmodule + +// ============================================================ +// CNX file retrieval info +// ============================================================ +// Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +// Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +// Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +// Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +// Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +// Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +// Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +// Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +// Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +// Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +// Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +// Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +// Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "9" +// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "9" +// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +// Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "96.000000" +// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "48.000000" +// Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +// Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +// Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +// Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "27.000" +// Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +// Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +// Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +// Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available" +// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" +// Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +// Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "32" +// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "16" +// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "96.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "48.00000000" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +// Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +// Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps" +// Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +// Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +// Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +// Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +// Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif" +// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +// Retrieval info: PRIVATE: SPREAD_USE STRING "0" +// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +// Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +// Retrieval info: PRIVATE: USE_CLK0 STRING "1" +// Retrieval info: PRIVATE: USE_CLK1 STRING "1" +// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +// Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +// Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +// Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "9" +// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "32" +// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "9" +// Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "16" +// Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037" +// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +// Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +// Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +// Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +// Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +// Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" +// Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +// Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +// Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +// Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +// Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +// Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.v TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.v FALSE +// Retrieval info: GEN_FILE: TYPE_NORMAL pll_bb.v FALSE +// Retrieval info: LIB_FILE: altera_mf +// Retrieval info: CBX_MODULE_PREFIX: ON diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/adec_5p.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/adec_5p.vhd new file mode 100644 index 00000000..5b6bf9bf --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/adec_5p.vhd @@ -0,0 +1,24 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity adec_5p is +port ( + clk : in std_logic; + addr : in std_logic_vector(4 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of adec_5p is + type rom is array(0 to 31) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"FE",X"FE",X"FE",X"FE",X"FD",X"FD",X"FD",X"FD",X"FB",X"FB",X"FB",X"FB",X"F7",X"F7",X"EF",X"EF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"7F",X"7F"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/clut_4p.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/clut_4p.vhd new file mode 100644 index 00000000..79ff92c6 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/clut_4p.vhd @@ -0,0 +1,54 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity clut_4p is +port ( + clk : in std_logic; + addr : in std_logic_vector(8 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of clut_4p is + type rom is array(0 to 511) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"FF",X"D7",X"6B",X"00",X"1F",X"93",X"FB",X"FF",X"FF",X"E3",X"00",X"4F",X"00",X"FF",X"7F",X"FE", + X"FF",X"74",X"08",X"0F",X"00",X"FF",X"7F",X"FE",X"FF",X"1F",X"00",X"0F",X"00",X"FF",X"7F",X"FE", + X"FF",X"00",X"03",X"1F",X"7F",X"13",X"92",X"FE",X"FF",X"00",X"E0",X"F4",X"FE",X"EC",X"92",X"5F", + X"FF",X"00",X"08",X"1C",X"9E",X"5E",X"92",X"FE",X"FF",X"FC",X"E4",X"E3",X"F3",X"00",X"B2",X"DF", + X"FF",X"00",X"FE",X"FF",X"1C",X"1F",X"03",X"6C",X"FF",X"00",X"FE",X"FF",X"E3",X"E0",X"00",X"6C", + X"FF",X"FE",X"9B",X"0A",X"00",X"1F",X"13",X"FF",X"FF",X"E3",X"9B",X"0E",X"00",X"DF",X"BC",X"FF", + X"FF",X"1F",X"C8",X"00",X"FC",X"F1",X"EA",X"E3",X"FF",X"17",X"7F",X"00",X"FF",X"0F",X"1F",X"97", + X"FF",X"E8",X"FE",X"00",X"FF",X"6F",X"FC",X"7A",X"FF",X"07",X"B7",X"00",X"FF",X"BF",X"FC",X"7A", + X"FF",X"FE",X"9B",X"0A",X"00",X"1F",X"13",X"7A",X"FF",X"E3",X"9B",X"0E",X"00",X"DF",X"BC",X"FF", + X"FF",X"00",X"6E",X"92",X"DB",X"1F",X"9F",X"8E",X"FF",X"FF",X"FF",X"FF",X"FF",X"7F",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"BF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FE",X"FF",X"FF", + X"FF",X"00",X"92",X"FE",X"DB",X"00",X"00",X"92",X"FF",X"FF",X"FF",X"FF",X"FF",X"EC",X"FF",X"FF", + X"FF",X"00",X"FE",X"FF",X"00",X"8C",X"F9",X"FE",X"FF",X"00",X"FE",X"FF",X"F7",X"00",X"F9",X"FE", + X"FF",X"A0",X"FE",X"FF",X"EF",X"F7",X"00",X"8C",X"FF",X"A0",X"FE",X"FF",X"83",X"EF",X"F7",X"00", + X"FF",X"0F",X"5F",X"FF",X"00",X"83",X"EF",X"F7",X"FF",X"0F",X"5F",X"FF",X"FE",X"00",X"83",X"EF", + X"FF",X"00",X"1E",X"FF",X"F9",X"FE",X"00",X"83",X"FF",X"00",X"1E",X"FF",X"8C",X"F9",X"FE",X"00", + X"00",X"28",X"94",X"FF",X"E0",X"6C",X"04",X"00",X"00",X"1C",X"FF",X"B0",X"FF",X"00",X"80",X"01", + X"00",X"8B",X"F7",X"F0",X"FF",X"00",X"80",X"01",X"00",X"E0",X"FF",X"F0",X"FF",X"00",X"80",X"01", + X"00",X"FF",X"FC",X"E0",X"80",X"EC",X"6D",X"01",X"00",X"FF",X"1F",X"0B",X"01",X"13",X"6D",X"A0", + X"00",X"FF",X"F7",X"E3",X"61",X"A1",X"6D",X"01",X"00",X"03",X"1B",X"1C",X"0C",X"FF",X"4D",X"20", + X"00",X"FF",X"01",X"00",X"E3",X"E0",X"FC",X"93",X"00",X"FF",X"01",X"00",X"1C",X"1F",X"FF",X"93", + X"00",X"01",X"64",X"F5",X"FF",X"E0",X"EC",X"00",X"00",X"1C",X"64",X"F1",X"FF",X"20",X"43",X"00", + X"00",X"E0",X"37",X"FF",X"03",X"0E",X"15",X"1C",X"00",X"E8",X"80",X"FF",X"00",X"F0",X"E0",X"68", + X"00",X"17",X"01",X"FF",X"00",X"90",X"03",X"85",X"00",X"F8",X"48",X"FF",X"00",X"40",X"03",X"85", + X"00",X"01",X"64",X"F5",X"FF",X"E0",X"EC",X"85",X"00",X"1C",X"64",X"F1",X"FF",X"20",X"43",X"00", + X"00",X"FF",X"91",X"6D",X"24",X"E0",X"60",X"71",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00", + X"00",X"FF",X"6D",X"01",X"24",X"FF",X"FF",X"6D",X"00",X"00",X"00",X"00",X"00",X"13",X"00",X"00", + X"00",X"FF",X"01",X"00",X"FF",X"73",X"06",X"01",X"00",X"FF",X"01",X"00",X"08",X"FF",X"06",X"01", + X"00",X"5F",X"01",X"00",X"10",X"08",X"FF",X"73",X"00",X"5F",X"01",X"00",X"7C",X"10",X"08",X"FF", + X"00",X"F0",X"A0",X"00",X"FF",X"7C",X"10",X"08",X"00",X"F0",X"A0",X"00",X"01",X"FF",X"7C",X"10", + X"00",X"FF",X"E1",X"00",X"06",X"01",X"FF",X"7C",X"00",X"FF",X"E1",X"00",X"73",X"06",X"01",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/gfx_3f.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/gfx_3f.vhd new file mode 100644 index 00000000..f044ace1 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/gfx_3f.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity gfx_3f is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of gfx_3f is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"1C",X"26",X"63",X"63",X"63",X"32",X"1C",X"00",X"7E",X"18",X"18",X"18",X"18",X"1C",X"18", + X"00",X"7F",X"07",X"1E",X"3C",X"70",X"63",X"3E",X"00",X"3E",X"63",X"60",X"3C",X"18",X"30",X"7E", + X"00",X"30",X"30",X"7F",X"33",X"36",X"3C",X"38",X"00",X"3E",X"63",X"60",X"60",X"3F",X"03",X"3F", + X"00",X"3E",X"63",X"63",X"3F",X"03",X"06",X"3C",X"00",X"0C",X"0C",X"0C",X"18",X"30",X"63",X"7F", + X"00",X"3E",X"61",X"61",X"1E",X"27",X"23",X"1E",X"00",X"1E",X"30",X"60",X"7E",X"63",X"63",X"3E", + X"00",X"00",X"00",X"00",X"00",X"24",X"36",X"36",X"00",X"00",X"00",X"00",X"3E",X"00",X"00",X"00", + X"00",X"38",X"1C",X"0E",X"07",X"0E",X"1C",X"38",X"00",X"00",X"00",X"3E",X"00",X"00",X"3E",X"00", + X"00",X"0E",X"1C",X"38",X"70",X"38",X"1C",X"0E",X"00",X"18",X"00",X"18",X"38",X"63",X"63",X"3E", + X"3C",X"42",X"99",X"A5",X"85",X"99",X"42",X"3C",X"00",X"63",X"63",X"7F",X"63",X"63",X"36",X"1C", + X"00",X"3F",X"63",X"63",X"3F",X"63",X"63",X"3F",X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C", + X"00",X"1F",X"33",X"63",X"63",X"63",X"33",X"1F",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F",X"00",X"7C",X"66",X"63",X"73",X"03",X"06",X"7C", + X"00",X"63",X"63",X"63",X"7F",X"63",X"63",X"63",X"00",X"7E",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"3E",X"63",X"63",X"60",X"60",X"60",X"60",X"00",X"73",X"3B",X"1F",X"0F",X"1B",X"33",X"63", + X"00",X"7E",X"06",X"06",X"06",X"06",X"06",X"06",X"00",X"63",X"63",X"6B",X"7F",X"7F",X"77",X"63", + X"00",X"63",X"73",X"7B",X"7F",X"6F",X"67",X"63",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"3E", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"5E",X"33",X"7B",X"63",X"63",X"63",X"3E", + X"00",X"73",X"3B",X"1F",X"73",X"63",X"63",X"3F",X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1E", + X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"63", + X"00",X"08",X"1C",X"3E",X"77",X"63",X"63",X"63",X"00",X"63",X"77",X"7F",X"7F",X"6B",X"63",X"63", + X"00",X"63",X"77",X"3E",X"1C",X"3C",X"77",X"63",X"00",X"18",X"18",X"18",X"3C",X"66",X"66",X"66", + X"00",X"7F",X"07",X"0E",X"1C",X"38",X"70",X"7F",X"00",X"08",X"06",X"06",X"00",X"00",X"00",X"00", + X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"00", + X"00",X"00",X"18",X"18",X"00",X"00",X"00",X"00",X"00",X"7E",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"18",X"0C",X"0C",X"0C",X"0C",X"0C",X"18",X"00",X"0C",X"18",X"18",X"18",X"18",X"18",X"0C", + X"00",X"5E",X"46",X"46",X"CE",X"C6",X"C6",X"5E",X"00",X"3A",X"5B",X"5B",X"5B",X"5A",X"5A",X"3A", + X"00",X"96",X"D6",X"D6",X"CE",X"D6",X"D6",X"CE",X"00",X"39",X"5A",X"5A",X"3A",X"5A",X"5A",X"3A", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"18",X"18",X"00",X"18",X"38",X"38",X"38", + X"00",X"00",X"22",X"14",X"08",X"14",X"22",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"20",X"30",X"30",X"00",X"54",X"54",X"54",X"54",X"54",X"40",X"28", + X"00",X"24",X"24",X"24",X"20",X"24",X"20",X"10",X"00",X"12",X"12",X"12",X"08",X"12",X"10",X"08", + X"00",X"41",X"91",X"91",X"91",X"91",X"81",X"41",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"EF",X"EF",X"FF",X"FF",X"EF",X"EF",X"FF",X"BC", + X"FB",X"FB",X"FB",X"FF",X"EF",X"FB",X"FF",X"EF",X"0E",X"1F",X"37",X"37",X"37",X"37",X"3F",X"1E", + X"00",X"00",X"F0",X"80",X"D8",X"A0",X"F8",X"E0",X"00",X"00",X"01",X"01",X"02",X"00",X"03",X"01", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"00",X"42",X"00",X"24",X"00",X"18",X"24", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"7C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"00",X"8E",X"93",X"93",X"93",X"93",X"93",X"93", + X"00",X"F1",X"99",X"99",X"D9",X"19",X"19",X"F1",X"00",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C", + X"00",X"00",X"F0",X"80",X"D8",X"A0",X"F8",X"E0",X"00",X"00",X"01",X"01",X"02",X"00",X"03",X"01", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"D3",X"D3",X"D3",X"8F",X"00",X"FE",X"FE",X"00",X"AA",X"AA",X"AA",X"A9",X"00",X"7F",X"7F",X"00", + X"00",X"FE",X"FE",X"00",X"81",X"C1",X"CF",X"D3",X"24",X"00",X"42",X"00",X"24",X"00",X"18",X"24", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"63",X"63",X"7F",X"63",X"63",X"36",X"1C",X"00",X"3F",X"63",X"63",X"3F",X"63",X"63",X"3F", + X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C",X"00",X"1F",X"33",X"63",X"63",X"63",X"33",X"1F", + X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F",X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"7C",X"66",X"63",X"73",X"03",X"06",X"7C",X"00",X"63",X"63",X"63",X"7F",X"63",X"63",X"63", + X"00",X"7E",X"18",X"18",X"18",X"18",X"18",X"7E",X"00",X"3E",X"63",X"63",X"60",X"60",X"60",X"60", + X"00",X"73",X"3B",X"1F",X"0F",X"1B",X"33",X"63",X"00",X"7E",X"06",X"06",X"06",X"06",X"06",X"06", + X"00",X"63",X"63",X"6B",X"7F",X"7F",X"77",X"63",X"00",X"63",X"73",X"7B",X"7F",X"6F",X"67",X"63", + X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"3E",X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F", + X"00",X"5E",X"33",X"7B",X"63",X"63",X"63",X"3E",X"00",X"73",X"3B",X"1F",X"73",X"63",X"63",X"3F", + X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1E",X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"63",X"00",X"08",X"1C",X"3E",X"77",X"63",X"63",X"63", + X"00",X"63",X"77",X"7F",X"7F",X"6B",X"63",X"63",X"00",X"63",X"77",X"3E",X"1C",X"3C",X"77",X"63", + X"00",X"18",X"18",X"18",X"3C",X"66",X"66",X"66",X"00",X"7F",X"07",X"0E",X"1C",X"38",X"70",X"7F", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"00",X"06",X"06",X"00",X"00",X"00",X"00", + X"F8",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"F8",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"1F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"1F", + X"FC",X"06",X"03",X"01",X"FF",X"FF",X"FE",X"FC",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", + X"3F",X"60",X"C0",X"80",X"FF",X"FF",X"7F",X"3F",X"FF",X"00",X"00",X"3C",X"3C",X"3C",X"7E",X"FF", + X"FF",X"00",X"00",X"3C",X"3C",X"3C",X"7E",X"FF",X"FF",X"00",X"00",X"3C",X"3C",X"3C",X"7E",X"FF", + X"00",X"00",X"08",X"0E",X"00",X"00",X"80",X"E0",X"2C",X"6C",X"6C",X"EC",X"1C",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"78",X"F0",X"C0",X"F0",X"F8",X"FC",X"FB",X"B7",X"7F",X"67",X"4E",X"4E",X"04",X"00",X"00", + X"00",X"00",X"08",X"0E",X"00",X"00",X"80",X"E0",X"2C",X"6C",X"6C",X"EC",X"1C",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"02",X"02",X"66",X"77",X"FF",X"FF",X"FF",X"FE",X"20",X"22",X"66",X"76",X"7F",X"FF",X"FF",X"FF", + X"40",X"40",X"66",X"EE",X"FF",X"FF",X"FF",X"7F",X"7F",X"01",X"03",X"07",X"0F",X"1F",X"3F",X"7F", + X"7F",X"01",X"03",X"07",X"0F",X"1F",X"3F",X"7F",X"7F",X"01",X"03",X"07",X"0F",X"1F",X"3F",X"7F", + X"FC",X"06",X"03",X"01",X"FF",X"FF",X"FE",X"FC",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", + X"3F",X"60",X"C0",X"80",X"FF",X"FF",X"7F",X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7C",X"3F",X"F3",X"BD",X"FF",X"FF",X"C7",X"01", + X"00",X"18",X"18",X"18",X"3C",X"66",X"66",X"66",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"3E", + X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"63",X"00",X"1F",X"33",X"63",X"63",X"63",X"33",X"1F", + X"00",X"7E",X"18",X"18",X"18",X"18",X"18",X"7E",X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"73",X"3B",X"1F",X"0F",X"1B",X"33",X"63",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"7C",X"66",X"63",X"73",X"03",X"06",X"7C", + X"00",X"63",X"73",X"7B",X"7F",X"6F",X"67",X"63",X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1E", + X"00",X"63",X"63",X"63",X"7F",X"63",X"63",X"63",X"00",X"00",X"06",X"06",X"00",X"00",X"00",X"00", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"18",X"18",X"00",X"18",X"38",X"38",X"38", + X"FC",X"06",X"03",X"01",X"FF",X"FF",X"FE",X"FC",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF", + X"3F",X"60",X"C0",X"80",X"FF",X"FF",X"7F",X"3F",X"00",X"00",X"77",X"77",X"77",X"77",X"77",X"77", + X"00",X"00",X"77",X"77",X"77",X"77",X"77",X"77",X"00",X"00",X"77",X"77",X"77",X"77",X"77",X"77", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"73",X"3B",X"1F",X"73",X"63",X"63",X"3F",X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C",X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1F",X"00",X"00",X"00",X"00",X"00",X"20",X"30",X"30", + X"00",X"1C",X"26",X"63",X"63",X"63",X"32",X"1C",X"00",X"7E",X"18",X"18",X"18",X"18",X"1C",X"18", + X"00",X"7F",X"07",X"1E",X"3C",X"70",X"63",X"3E",X"00",X"3E",X"63",X"60",X"3C",X"18",X"30",X"7E", + X"00",X"30",X"30",X"7F",X"33",X"36",X"3C",X"38",X"00",X"3E",X"63",X"60",X"60",X"3F",X"03",X"3F", + X"00",X"3E",X"63",X"63",X"3F",X"03",X"06",X"3C",X"00",X"0C",X"0C",X"0C",X"18",X"30",X"63",X"7F", + X"00",X"3E",X"61",X"61",X"1E",X"27",X"23",X"1E",X"00",X"1E",X"30",X"60",X"7E",X"63",X"63",X"3E", + X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F",X"00",X"63",X"63",X"7F",X"63",X"63",X"36",X"1C", + X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"18",X"18",X"00",X"18",X"38",X"38",X"38", + X"00",X"1C",X"26",X"63",X"63",X"63",X"32",X"1C",X"00",X"7E",X"18",X"18",X"18",X"18",X"1C",X"18", + X"00",X"7F",X"07",X"1E",X"3C",X"70",X"63",X"3E",X"00",X"3E",X"63",X"60",X"3C",X"18",X"30",X"7E", + X"00",X"30",X"30",X"7F",X"33",X"36",X"3C",X"38",X"00",X"3E",X"63",X"60",X"60",X"3F",X"03",X"3F", + X"00",X"3E",X"63",X"63",X"3F",X"03",X"06",X"3C",X"00",X"0C",X"0C",X"0C",X"18",X"30",X"63",X"7F", + X"00",X"3E",X"61",X"61",X"1E",X"27",X"23",X"1E",X"00",X"1E",X"30",X"60",X"7E",X"63",X"63",X"3E", + X"00",X"00",X"00",X"00",X"00",X"24",X"36",X"36",X"00",X"00",X"00",X"00",X"3E",X"00",X"00",X"00", + X"00",X"38",X"1C",X"0E",X"07",X"0E",X"1C",X"38",X"00",X"00",X"00",X"3E",X"00",X"00",X"3E",X"00", + X"00",X"0E",X"1C",X"38",X"70",X"38",X"1C",X"0E",X"00",X"18",X"00",X"18",X"38",X"63",X"63",X"3E", + X"00",X"6E",X"31",X"39",X"4E",X"14",X"14",X"08",X"00",X"63",X"63",X"7F",X"63",X"63",X"36",X"1C", + X"00",X"3F",X"63",X"63",X"3F",X"63",X"63",X"3F",X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C", + X"00",X"1F",X"33",X"63",X"63",X"63",X"33",X"1F",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F",X"00",X"7C",X"66",X"63",X"73",X"03",X"06",X"7C", + X"00",X"63",X"63",X"63",X"7F",X"63",X"63",X"63",X"00",X"7E",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"3E",X"63",X"63",X"60",X"60",X"60",X"60",X"00",X"73",X"3B",X"1F",X"0F",X"1B",X"33",X"63", + X"00",X"7E",X"06",X"06",X"06",X"06",X"06",X"06",X"00",X"63",X"63",X"6B",X"7F",X"7F",X"77",X"63", + X"00",X"63",X"73",X"7B",X"7F",X"6F",X"67",X"63",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"3E", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"5E",X"33",X"7B",X"63",X"63",X"63",X"3E", + X"00",X"73",X"3B",X"1F",X"73",X"63",X"63",X"3F",X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1E", + X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"63", + X"00",X"08",X"1C",X"3E",X"77",X"63",X"63",X"63",X"00",X"63",X"77",X"7F",X"7F",X"6B",X"63",X"63", + X"00",X"63",X"77",X"3E",X"1C",X"3C",X"77",X"63",X"00",X"18",X"18",X"18",X"3C",X"66",X"66",X"66", + X"00",X"7F",X"07",X"0E",X"1C",X"38",X"70",X"7F",X"00",X"08",X"06",X"06",X"00",X"00",X"00",X"00", + X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"00", + X"00",X"00",X"18",X"18",X"00",X"00",X"00",X"00",X"00",X"7E",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"18",X"0C",X"0C",X"0C",X"0C",X"0C",X"18",X"00",X"0C",X"18",X"18",X"18",X"18",X"18",X"0C", + X"00",X"5E",X"46",X"46",X"CE",X"C6",X"C6",X"5E",X"00",X"3A",X"5B",X"5B",X"5B",X"5A",X"5A",X"3A", + X"00",X"96",X"D6",X"D6",X"CE",X"D6",X"D6",X"CE",X"00",X"39",X"5A",X"5A",X"3A",X"5A",X"5A",X"3A", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"18",X"18",X"00",X"18",X"38",X"38",X"38", + X"00",X"00",X"22",X"14",X"08",X"14",X"22",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", + X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"FF",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"FF", + X"FF",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"FF",X"01",X"01",X"01",X"01",X"01",X"01",X"01", + X"00",X"04",X"26",X"3C",X"66",X"3C",X"64",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"1C",X"26",X"63",X"63",X"63",X"32",X"1C",X"00",X"7E",X"18",X"18",X"18",X"18",X"1C",X"18", + X"00",X"7F",X"07",X"1E",X"3C",X"70",X"63",X"3E",X"00",X"3E",X"63",X"60",X"3C",X"18",X"30",X"7E", + X"00",X"30",X"30",X"7F",X"33",X"36",X"3C",X"38",X"00",X"3E",X"63",X"60",X"60",X"3F",X"03",X"3F", + X"00",X"3E",X"63",X"63",X"3F",X"03",X"06",X"3C",X"00",X"0C",X"0C",X"0C",X"18",X"30",X"63",X"7F", + X"00",X"3E",X"61",X"61",X"1E",X"27",X"23",X"1E",X"00",X"1E",X"30",X"60",X"7E",X"63",X"63",X"3E", + X"00",X"00",X"00",X"00",X"00",X"24",X"36",X"36",X"00",X"00",X"00",X"00",X"3E",X"00",X"00",X"00", + X"00",X"38",X"1C",X"0E",X"07",X"0E",X"1C",X"38",X"00",X"0E",X"1C",X"38",X"70",X"38",X"1C",X"0E", + X"00",X"0E",X"1C",X"38",X"70",X"38",X"1C",X"0E",X"00",X"18",X"00",X"18",X"38",X"63",X"63",X"3E", + X"00",X"6E",X"31",X"39",X"4E",X"14",X"14",X"08",X"00",X"63",X"63",X"7F",X"63",X"63",X"36",X"1C", + X"00",X"3F",X"63",X"63",X"3F",X"63",X"63",X"3F",X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C", + X"00",X"1F",X"33",X"63",X"63",X"63",X"33",X"1F",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F",X"00",X"7C",X"66",X"63",X"73",X"03",X"06",X"7C", + X"00",X"63",X"63",X"63",X"7F",X"63",X"63",X"63",X"00",X"7E",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"3E",X"63",X"63",X"60",X"60",X"60",X"60",X"00",X"73",X"3B",X"1F",X"0F",X"1B",X"33",X"63", + X"00",X"7E",X"06",X"06",X"06",X"06",X"06",X"06",X"00",X"63",X"63",X"6B",X"7F",X"7F",X"77",X"63", + X"00",X"63",X"73",X"7B",X"7F",X"6F",X"67",X"63",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"3E", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"5E",X"33",X"7B",X"63",X"63",X"63",X"3E", + X"00",X"73",X"3B",X"1F",X"73",X"63",X"63",X"3F",X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1E", + X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"63", + X"00",X"08",X"1C",X"3E",X"77",X"63",X"63",X"63",X"00",X"63",X"77",X"7F",X"7F",X"6B",X"63",X"63", + X"00",X"63",X"77",X"3E",X"1C",X"3C",X"77",X"63",X"00",X"18",X"18",X"18",X"3C",X"66",X"66",X"66", + X"00",X"7F",X"07",X"0E",X"1C",X"38",X"70",X"7F",X"00",X"08",X"06",X"06",X"00",X"00",X"00",X"00", + X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"00", + X"00",X"B6",X"B7",X"B7",X"B6",X"B6",X"06",X"36",X"00",X"7E",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"18",X"0C",X"0C",X"0C",X"0C",X"0C",X"18",X"00",X"0C",X"18",X"18",X"18",X"18",X"18",X"0C", + X"00",X"5E",X"46",X"46",X"CE",X"C6",X"C6",X"5E",X"00",X"3A",X"5B",X"5B",X"5B",X"5A",X"5A",X"3A", + X"00",X"96",X"D6",X"D6",X"CE",X"D6",X"D6",X"CE",X"00",X"39",X"5A",X"5A",X"3A",X"5A",X"5A",X"3A", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"18",X"18",X"00",X"18",X"38",X"38",X"38", + X"00",X"00",X"22",X"14",X"08",X"14",X"22",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", + X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"FF",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"FF", + X"FF",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"FF",X"01",X"01",X"01",X"01",X"01",X"01",X"01", + X"00",X"04",X"26",X"3C",X"66",X"3C",X"64",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"1C",X"26",X"63",X"63",X"63",X"32",X"1C",X"00",X"7E",X"18",X"18",X"18",X"18",X"1C",X"18", + X"00",X"7F",X"07",X"1E",X"3C",X"70",X"63",X"3E",X"00",X"3E",X"63",X"60",X"3C",X"18",X"30",X"7E", + X"00",X"30",X"30",X"7F",X"33",X"36",X"3C",X"38",X"00",X"3E",X"63",X"60",X"60",X"3F",X"03",X"3F", + X"00",X"3E",X"63",X"63",X"3F",X"03",X"06",X"3C",X"00",X"0C",X"0C",X"0C",X"18",X"30",X"63",X"7F", + X"00",X"3E",X"61",X"61",X"1E",X"27",X"23",X"1E",X"00",X"1E",X"30",X"60",X"7E",X"63",X"63",X"3E", + X"00",X"00",X"00",X"00",X"00",X"24",X"36",X"36",X"00",X"00",X"00",X"00",X"3E",X"00",X"00",X"00", + X"00",X"3E",X"41",X"5D",X"45",X"5D",X"41",X"3E",X"00",X"F6",X"06",X"06",X"E6",X"36",X"37",X"E6", + X"00",X"F1",X"9B",X"9B",X"F3",X"9B",X"9B",X"F1",X"00",X"78",X"CD",X"CD",X"60",X"C1",X"CC",X"78", + X"3C",X"42",X"99",X"A5",X"85",X"99",X"42",X"3C",X"00",X"63",X"63",X"7F",X"63",X"63",X"36",X"1C", + X"00",X"3F",X"63",X"63",X"3F",X"63",X"63",X"3F",X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C", + X"00",X"1F",X"33",X"63",X"63",X"63",X"33",X"1F",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F",X"00",X"7C",X"66",X"63",X"73",X"03",X"06",X"7C", + X"00",X"63",X"63",X"63",X"7F",X"63",X"63",X"63",X"00",X"7E",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"3E",X"63",X"63",X"60",X"60",X"60",X"60",X"00",X"73",X"3B",X"1F",X"0F",X"1B",X"33",X"63", + X"00",X"7E",X"06",X"06",X"06",X"06",X"06",X"06",X"00",X"63",X"63",X"6B",X"7F",X"7F",X"77",X"63", + X"00",X"63",X"73",X"7B",X"7F",X"6F",X"67",X"63",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"3E", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"5E",X"33",X"7B",X"63",X"63",X"63",X"3E", + X"00",X"73",X"3B",X"1F",X"73",X"63",X"63",X"3F",X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1E", + X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"63", + X"00",X"08",X"1C",X"3E",X"77",X"63",X"63",X"63",X"00",X"63",X"77",X"7F",X"7F",X"6B",X"63",X"63", + X"00",X"63",X"77",X"3E",X"1C",X"3C",X"77",X"63",X"00",X"18",X"18",X"18",X"3C",X"66",X"66",X"66", + X"00",X"7F",X"07",X"0E",X"1C",X"38",X"70",X"7F",X"00",X"08",X"06",X"06",X"00",X"00",X"00",X"00", + X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"30",X"30",X"B0",X"B0",X"F0",X"70",X"30", + X"00",X"B6",X"B7",X"B7",X"B6",X"B6",X"06",X"36",X"00",X"99",X"99",X"99",X"99",X"CF",X"80",X"00", + X"00",X"F1",X"19",X"F9",X"99",X"F3",X"01",X"00",X"00",X"CD",X"CC",X"CD",X"CD",X"7C",X"00",X"00", + X"00",X"7C",X"66",X"66",X"66",X"7C",X"60",X"60",X"00",X"1E",X"33",X"33",X"33",X"1E",X"00",X"00", + X"00",X"3C",X"66",X"66",X"66",X"3C",X"00",X"00",X"00",X"86",X"86",X"86",X"86",X"8F",X"06",X"0C", + X"00",X"D9",X"DF",X"DF",X"D9",X"D9",X"0F",X"06",X"00",X"9A",X"DA",X"DA",X"DA",X"8D",X"00",X"00", + X"00",X"6F",X"60",X"EF",X"EC",X"67",X"00",X"00",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", + X"00",X"98",X"D8",X"D8",X"DB",X"9B",X"00",X"18",X"00",X"C7",X"30",X"30",X"30",X"E7",X"00",X"00", + X"00",X"C6",X"C7",X"C3",X"C3",X"C3",X"C0",X"C0",X"00",X"66",X"66",X"66",X"66",X"3E",X"00",X"00", + X"00",X"5E",X"03",X"03",X"03",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"1C",X"26",X"63",X"63",X"63",X"32",X"1C",X"00",X"7E",X"18",X"18",X"18",X"18",X"1C",X"18", + X"00",X"7F",X"07",X"1E",X"3C",X"70",X"63",X"3E",X"00",X"3E",X"63",X"60",X"3C",X"18",X"30",X"7E", + X"00",X"30",X"30",X"7F",X"33",X"36",X"3C",X"38",X"00",X"3E",X"63",X"60",X"60",X"3F",X"03",X"3F", + X"00",X"3E",X"63",X"63",X"3F",X"03",X"06",X"3C",X"00",X"0C",X"0C",X"0C",X"18",X"30",X"63",X"7F", + X"00",X"3E",X"61",X"61",X"1E",X"27",X"23",X"1E",X"00",X"1E",X"30",X"60",X"7E",X"63",X"63",X"3E", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"00",X"00",X"00",X"3E",X"00",X"00",X"00", + X"00",X"38",X"1C",X"0E",X"07",X"0E",X"1C",X"38",X"00",X"00",X"00",X"3E",X"00",X"00",X"3E",X"00", + X"00",X"0E",X"1C",X"38",X"70",X"38",X"1C",X"0E",X"00",X"18",X"00",X"18",X"38",X"63",X"63",X"3E", + X"3C",X"42",X"99",X"A5",X"85",X"99",X"42",X"3C",X"00",X"63",X"63",X"7F",X"63",X"63",X"36",X"1C", + X"00",X"3F",X"63",X"63",X"3F",X"63",X"63",X"3F",X"00",X"3C",X"66",X"03",X"03",X"03",X"66",X"3C", + X"00",X"1F",X"33",X"63",X"63",X"63",X"33",X"1F",X"00",X"7F",X"03",X"03",X"3F",X"03",X"03",X"7F", + X"00",X"03",X"03",X"03",X"3F",X"03",X"03",X"7F",X"00",X"7C",X"66",X"63",X"73",X"03",X"06",X"7C", + X"00",X"63",X"63",X"63",X"7F",X"63",X"63",X"63",X"00",X"7E",X"18",X"18",X"18",X"18",X"18",X"7E", + X"00",X"3E",X"63",X"63",X"60",X"60",X"60",X"60",X"00",X"73",X"3B",X"1F",X"0F",X"1B",X"33",X"63", + X"00",X"7E",X"06",X"06",X"06",X"06",X"06",X"06",X"00",X"63",X"63",X"6B",X"7F",X"7F",X"77",X"63", + X"00",X"63",X"73",X"7B",X"7F",X"6F",X"67",X"63",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"3E", + X"00",X"03",X"03",X"3F",X"63",X"63",X"63",X"3F",X"00",X"5E",X"33",X"7B",X"63",X"63",X"63",X"3E", + X"00",X"73",X"3B",X"1F",X"73",X"63",X"63",X"3F",X"00",X"3E",X"63",X"60",X"3E",X"03",X"33",X"1E", + X"00",X"18",X"18",X"18",X"18",X"18",X"18",X"7E",X"00",X"3E",X"63",X"63",X"63",X"63",X"63",X"63", + X"00",X"08",X"1C",X"3E",X"77",X"63",X"63",X"63",X"00",X"63",X"77",X"7F",X"7F",X"6B",X"63",X"63", + X"00",X"63",X"77",X"3E",X"1C",X"3C",X"77",X"63",X"00",X"18",X"18",X"18",X"3C",X"66",X"66",X"66", + X"00",X"7F",X"07",X"0E",X"1C",X"38",X"70",X"7F",X"00",X"08",X"06",X"06",X"00",X"00",X"00",X"00", + X"00",X"30",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"00", + X"00",X"00",X"18",X"18",X"00",X"00",X"00",X"00",X"00",X"7E",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"18",X"0C",X"0C",X"0C",X"0C",X"0C",X"18",X"00",X"0C",X"18",X"18",X"18",X"18",X"18",X"0C", + X"00",X"5E",X"46",X"46",X"CE",X"C6",X"C6",X"5E",X"00",X"3A",X"5B",X"5B",X"5B",X"5A",X"5A",X"3A", + X"00",X"96",X"D6",X"D6",X"CE",X"D6",X"D6",X"CE",X"00",X"39",X"5A",X"5A",X"3A",X"5A",X"5A",X"3A", + X"00",X"33",X"33",X"00",X"33",X"77",X"77",X"77",X"00",X"00",X"00",X"00",X"00",X"20",X"30",X"30", + X"00",X"00",X"00",X"00",X"00",X"02",X"06",X"06",X"00",X"00",X"00",X"18",X"18",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/gfx_3j.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/gfx_3j.vhd new file mode 100644 index 00000000..6d85a848 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/gfx_3j.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity gfx_3j is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of gfx_3j is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"3C",X"62",X"C8",X"84",X"84",X"94",X"4C",X"20",X"FE",X"80",X"20",X"20",X"20",X"24",X"20",X"20", + X"FF",X"80",X"38",X"60",X"C0",X"87",X"9C",X"40",X"7E",X"C1",X"84",X"9C",X"00",X"60",X"CE",X"80", + X"70",X"40",X"CF",X"80",X"4C",X"48",X"40",X"40",X"7E",X"C1",X"80",X"80",X"9F",X"00",X"7C",X"40", + X"7E",X"C1",X"84",X"9C",X"00",X"0C",X"78",X"40",X"1C",X"10",X"10",X"30",X"60",X"C7",X"9C",X"80", + X"7E",X"C1",X"82",X"86",X"61",X"48",X"5C",X"20",X"3E",X"60",X"C0",X"9E",X"81",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"6C",X"5A",X"48",X"48",X"00",X"00",X"00",X"7E",X"40",X"00",X"00",X"00", + X"78",X"40",X"20",X"10",X"18",X"30",X"60",X"40",X"00",X"00",X"7E",X"40",X"00",X"7E",X"40",X"00", + X"1E",X"30",X"60",X"C0",X"80",X"40",X"20",X"10",X"38",X"20",X"38",X"60",X"C7",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E7",X"84",X"9C",X"80",X"84",X"8C",X"48",X"20", + X"7F",X"C0",X"84",X"9C",X"40",X"84",X"9C",X"40",X"7C",X"C2",X"89",X"04",X"04",X"EC",X"98",X"00", + X"3F",X"60",X"C4",X"84",X"84",X"94",X"4C",X"20",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80",X"FC",X"82",X"89",X"94",X"84",X"04",X"F8",X"80", + X"E7",X"84",X"84",X"9C",X"80",X"84",X"84",X"84",X"FE",X"80",X"20",X"20",X"20",X"20",X"E6",X"80", + X"7E",X"C1",X"84",X"84",X"80",X"80",X"80",X"80",X"F7",X"84",X"04",X"00",X"30",X"64",X"C4",X"84", + X"FE",X"80",X"08",X"08",X"08",X"08",X"08",X"08",X"E7",X"84",X"9C",X"94",X"80",X"80",X"88",X"84", + X"E7",X"84",X"84",X"84",X"80",X"90",X"88",X"84",X"3E",X"41",X"84",X"84",X"84",X"84",X"9C",X"40", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"DE",X"A1",X"CC",X"84",X"84",X"84",X"9C",X"40", + X"F7",X"84",X"04",X"E0",X"84",X"84",X"9C",X"40",X"7E",X"C1",X"84",X"9E",X"41",X"74",X"4C",X"20", + X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80",X"7E",X"C1",X"84",X"84",X"84",X"84",X"84",X"84", + X"18",X"30",X"60",X"C0",X"88",X"84",X"84",X"84",X"E7",X"8C",X"88",X"80",X"80",X"94",X"84",X"84", + X"E7",X"8C",X"88",X"00",X"60",X"C0",X"88",X"84",X"38",X"20",X"20",X"64",X"C2",X"88",X"88",X"88", + X"FF",X"80",X"18",X"30",X"60",X"C0",X"8F",X"80",X"18",X"16",X"08",X"08",X"00",X"00",X"00",X"00", + X"70",X"40",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"40",X"00", + X"00",X"38",X"20",X"20",X"00",X"00",X"00",X"00",X"FE",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"38",X"24",X"10",X"10",X"10",X"10",X"10",X"20",X"1C",X"30",X"20",X"20",X"20",X"20",X"24",X"10", + X"FE",X"A0",X"80",X"98",X"10",X"00",X"38",X"A0",X"3E",X"44",X"A4",X"A4",X"A4",X"A5",X"A5",X"44", + X"BE",X"68",X"28",X"28",X"10",X"28",X"28",X"10",X"7B",X"46",X"A5",X"A5",X"45",X"A5",X"A5",X"45", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"38",X"20",X"20",X"18",X"60",X"40",X"40",X"40", + X"00",X"62",X"44",X"28",X"10",X"28",X"44",X"00",X"00",X"00",X"38",X"20",X"20",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"60",X"50",X"40",X"40",X"00",X"2B",X"2B",X"2B",X"2B",X"2B",X"3F",X"16", + X"00",X"93",X"93",X"93",X"9F",X"93",X"9F",X"8E",X"00",X"C9",X"C9",X"C9",X"C7",X"C9",X"CF",X"C7", + X"00",X"38",X"4C",X"4C",X"4C",X"4C",X"7C",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"50",X"50",X"50",X"50",X"50",X"00",X"A0",X"EF",X"49",X"59",X"41",X"49",X"49",X"59",X"20", + X"FB",X"92",X"92",X"96",X"88",X"92",X"96",X"88",X"0E",X"11",X"24",X"24",X"24",X"24",X"2C",X"10", + X"00",X"00",X"F0",X"F0",X"F8",X"A0",X"00",X"00",X"00",X"00",X"07",X"07",X"07",X"03",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"24",X"24",X"42",X"42",X"24",X"24",X"18", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FC",X"80",X"10",X"10",X"10",X"10",X"10",X"10",X"8E",X"11",X"20",X"20",X"20",X"20",X"20",X"20", + X"F3",X"0A",X"22",X"62",X"22",X"22",X"E2",X"02",X"1D",X"11",X"11",X"11",X"11",X"10",X"11",X"11", + X"00",X"00",X"F0",X"F0",X"F8",X"A0",X"00",X"00",X"00",X"00",X"07",X"07",X"07",X"03",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"D3",X"D3",X"D3",X"8F",X"00",X"01",X"01",X"FE",X"AA",X"AA",X"AA",X"A9",X"00",X"80",X"80",X"7F", + X"FE",X"01",X"01",X"00",X"81",X"C1",X"CF",X"D3",X"18",X"24",X"24",X"42",X"42",X"24",X"24",X"18", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"E7",X"84",X"9C",X"80",X"84",X"8C",X"48",X"20",X"7F",X"C0",X"84",X"9C",X"40",X"84",X"9C",X"40", + X"7C",X"C2",X"89",X"04",X"04",X"EC",X"98",X"00",X"3F",X"60",X"C4",X"84",X"84",X"94",X"4C",X"20", + X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80",X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"FC",X"82",X"89",X"94",X"84",X"04",X"F8",X"80",X"E7",X"84",X"84",X"9C",X"80",X"84",X"84",X"84", + X"FE",X"80",X"20",X"20",X"20",X"20",X"E6",X"80",X"7E",X"C1",X"84",X"84",X"80",X"80",X"80",X"80", + X"F7",X"84",X"04",X"00",X"30",X"64",X"C4",X"84",X"FE",X"80",X"08",X"08",X"08",X"08",X"08",X"08", + X"E7",X"84",X"9C",X"94",X"80",X"80",X"88",X"84",X"E7",X"84",X"84",X"84",X"80",X"90",X"88",X"84", + X"3E",X"41",X"84",X"84",X"84",X"84",X"9C",X"40",X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40", + X"DE",X"A1",X"CC",X"84",X"84",X"84",X"9C",X"40",X"F7",X"84",X"04",X"E0",X"84",X"84",X"9C",X"40", + X"7E",X"C1",X"84",X"9E",X"41",X"74",X"4C",X"20",X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80", + X"7E",X"C1",X"84",X"84",X"84",X"84",X"84",X"84",X"18",X"30",X"60",X"C0",X"88",X"84",X"84",X"84", + X"E7",X"8C",X"88",X"80",X"80",X"94",X"84",X"84",X"E7",X"8C",X"88",X"00",X"60",X"C0",X"88",X"84", + X"38",X"20",X"20",X"64",X"C2",X"88",X"88",X"88",X"FF",X"80",X"18",X"30",X"60",X"C0",X"8F",X"80", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"00",X"0E",X"08",X"08",X"00",X"00",X"00",X"00", + X"00",X"C0",X"C0",X"C0",X"C0",X"C0",X"F0",X"00",X"00",X"E1",X"31",X"31",X"31",X"31",X"E7",X"00", + X"00",X"E3",X"E6",X"E6",X"E6",X"E6",X"E3",X"00",X"00",X"00",X"00",X"0F",X"1C",X"1C",X"0F",X"00", + X"00",X"E0",X"F0",X"00",X"06",X"F6",X"F0",X"00",X"00",X"FF",X"FF",X"00",X"00",X"FF",X"FF",X"00", + X"00",X"07",X"0F",X"00",X"60",X"6F",X"0F",X"00",X"00",X"81",X"C3",X"C3",X"C3",X"FF",X"FF",X"00", + X"00",X"81",X"C3",X"C3",X"C3",X"FF",X"FF",X"00",X"00",X"81",X"C3",X"C3",X"C3",X"FF",X"FF",X"00", + X"00",X"EF",X"E7",X"E1",X"00",X"FE",X"7E",X"1E",X"2E",X"6E",X"6E",X"EE",X"1E",X"02",X"00",X"FF", + X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"1A",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", + X"C0",X"F8",X"F0",X"C0",X"F0",X"78",X"7C",X"7B",X"37",X"7F",X"65",X"46",X"46",X"04",X"00",X"00", + X"00",X"EF",X"E7",X"E1",X"00",X"FE",X"7E",X"1E",X"2E",X"6E",X"6E",X"EE",X"1E",X"02",X"00",X"FF", + X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"1A",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FE",X"FE",X"BA",X"BB",X"77",X"FF",X"FF",X"FE",X"FF",X"FF",X"BB",X"BB",X"B7",X"7F",X"DD",X"EF", + X"7F",X"7F",X"7B",X"77",X"FF",X"FF",X"FF",X"7F",X"80",X"C0",X"E0",X"F0",X"E8",X"DC",X"BE",X"80", + X"80",X"C0",X"E0",X"F0",X"E8",X"DC",X"BE",X"80",X"80",X"C0",X"E0",X"F0",X"E8",X"DC",X"BE",X"80", + X"00",X"E0",X"F0",X"00",X"06",X"F6",X"F0",X"00",X"00",X"FF",X"FF",X"00",X"00",X"FF",X"FF",X"00", + X"00",X"07",X"0F",X"00",X"60",X"6F",X"0F",X"00",X"FF",X"01",X"01",X"01",X"01",X"03",X"06",X"FC", + X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"80",X"80",X"80",X"80",X"C0",X"60",X"3F", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"83",X"C0",X"0C",X"5E",X"82",X"00",X"78",X"00", + X"38",X"20",X"20",X"64",X"C2",X"88",X"88",X"88",X"3E",X"41",X"84",X"84",X"84",X"84",X"9C",X"40", + X"7E",X"C1",X"84",X"84",X"84",X"84",X"84",X"84",X"3F",X"60",X"C4",X"84",X"84",X"94",X"4C",X"20", + X"FE",X"80",X"20",X"20",X"20",X"20",X"E6",X"80",X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80", + X"F7",X"84",X"04",X"00",X"30",X"64",X"C4",X"84",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"FC",X"82",X"89",X"94",X"84",X"04",X"F8",X"80", + X"E7",X"84",X"84",X"84",X"80",X"90",X"88",X"84",X"7E",X"C1",X"84",X"9E",X"41",X"74",X"4C",X"20", + X"E7",X"84",X"84",X"9C",X"80",X"84",X"84",X"84",X"00",X"0E",X"08",X"08",X"00",X"00",X"00",X"00", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"38",X"20",X"20",X"18",X"60",X"40",X"40",X"40", + X"00",X"E0",X"F0",X"00",X"06",X"F6",X"F0",X"00",X"00",X"FF",X"FF",X"00",X"00",X"FF",X"FF",X"00", + X"00",X"07",X"0F",X"00",X"60",X"6F",X"0F",X"00",X"77",X"77",X"00",X"88",X"88",X"00",X"77",X"77", + X"77",X"77",X"00",X"88",X"88",X"00",X"77",X"77",X"77",X"77",X"00",X"08",X"08",X"00",X"77",X"77", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"F7",X"84",X"04",X"E0",X"84",X"84",X"9C",X"40",X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"7C",X"C0",X"88",X"04",X"04",X"EC",X"98",X"00",X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80", + X"7E",X"C0",X"84",X"9E",X"40",X"74",X"4C",X"20",X"00",X"00",X"00",X"00",X"60",X"50",X"40",X"40", + X"3C",X"62",X"C8",X"84",X"84",X"94",X"4C",X"20",X"FE",X"80",X"20",X"20",X"20",X"24",X"20",X"20", + X"FF",X"80",X"38",X"60",X"C0",X"87",X"9C",X"40",X"7E",X"C0",X"84",X"9C",X"00",X"60",X"CE",X"80", + X"70",X"40",X"CF",X"80",X"4C",X"48",X"40",X"40",X"7E",X"C0",X"80",X"80",X"9F",X"00",X"7C",X"40", + X"7E",X"C0",X"84",X"9C",X"00",X"0C",X"78",X"40",X"1C",X"10",X"10",X"30",X"60",X"C7",X"9C",X"80", + X"7E",X"C0",X"82",X"86",X"60",X"48",X"5C",X"20",X"3E",X"60",X"C0",X"9E",X"80",X"84",X"9C",X"40", + X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80",X"E7",X"84",X"9C",X"80",X"84",X"8C",X"48",X"20", + X"7C",X"C0",X"88",X"04",X"04",X"EC",X"98",X"00",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"38",X"20",X"20",X"18",X"60",X"40",X"40",X"40", + X"3C",X"62",X"C8",X"84",X"84",X"94",X"4C",X"20",X"FE",X"80",X"20",X"20",X"20",X"24",X"20",X"20", + X"FF",X"80",X"38",X"60",X"C0",X"87",X"9C",X"40",X"7E",X"C1",X"84",X"9C",X"00",X"60",X"CE",X"80", + X"70",X"40",X"CF",X"80",X"4C",X"48",X"40",X"40",X"7E",X"C1",X"80",X"80",X"9F",X"00",X"7C",X"40", + X"7E",X"C1",X"84",X"9C",X"00",X"0C",X"78",X"40",X"1C",X"10",X"10",X"30",X"60",X"C7",X"9C",X"80", + X"7E",X"C1",X"82",X"86",X"61",X"48",X"5C",X"20",X"3E",X"60",X"C0",X"9E",X"81",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"6C",X"5A",X"48",X"48",X"00",X"00",X"00",X"7E",X"40",X"00",X"00",X"00", + X"78",X"40",X"20",X"10",X"18",X"30",X"60",X"40",X"00",X"00",X"7E",X"40",X"00",X"7E",X"40",X"00", + X"1E",X"30",X"60",X"C0",X"80",X"40",X"20",X"10",X"38",X"20",X"38",X"60",X"C7",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E7",X"84",X"9C",X"80",X"84",X"8C",X"48",X"20", + X"7F",X"C0",X"84",X"9C",X"40",X"84",X"9C",X"40",X"7C",X"C2",X"89",X"04",X"04",X"EC",X"98",X"00", + X"3F",X"60",X"C4",X"84",X"84",X"94",X"4C",X"20",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80",X"FC",X"82",X"89",X"94",X"84",X"04",X"F8",X"80", + X"E7",X"84",X"84",X"9C",X"80",X"84",X"84",X"84",X"FE",X"80",X"20",X"20",X"20",X"20",X"E6",X"80", + X"7E",X"C1",X"84",X"84",X"80",X"80",X"80",X"80",X"F7",X"84",X"04",X"00",X"30",X"64",X"C4",X"84", + X"FE",X"80",X"08",X"08",X"08",X"08",X"08",X"08",X"E7",X"84",X"9C",X"94",X"80",X"80",X"88",X"84", + X"E7",X"84",X"84",X"84",X"80",X"90",X"88",X"84",X"3E",X"41",X"84",X"84",X"84",X"84",X"9C",X"40", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"DE",X"A1",X"CC",X"84",X"84",X"84",X"9C",X"40", + X"F7",X"84",X"04",X"E0",X"84",X"84",X"9C",X"40",X"7E",X"C1",X"84",X"9E",X"41",X"74",X"4C",X"20", + X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80",X"7E",X"C1",X"84",X"84",X"84",X"84",X"84",X"84", + X"18",X"30",X"60",X"C0",X"88",X"84",X"84",X"84",X"E7",X"8C",X"88",X"80",X"80",X"94",X"84",X"84", + X"E7",X"8C",X"88",X"00",X"60",X"C0",X"88",X"84",X"38",X"20",X"20",X"64",X"C2",X"88",X"88",X"88", + X"FF",X"80",X"18",X"30",X"60",X"C0",X"8F",X"80",X"18",X"16",X"08",X"08",X"00",X"00",X"00",X"00", + X"70",X"40",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"40",X"00", + X"00",X"38",X"20",X"20",X"00",X"00",X"00",X"00",X"FE",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"38",X"24",X"10",X"10",X"10",X"10",X"10",X"20",X"1C",X"30",X"20",X"20",X"20",X"20",X"24",X"10", + X"FE",X"A0",X"80",X"98",X"10",X"00",X"38",X"A0",X"3E",X"44",X"A4",X"A4",X"A4",X"A5",X"A5",X"44", + X"BE",X"68",X"28",X"28",X"10",X"28",X"28",X"10",X"7B",X"46",X"A5",X"A5",X"45",X"A5",X"A5",X"45", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"38",X"20",X"20",X"18",X"60",X"40",X"40",X"40", + X"00",X"62",X"44",X"28",X"10",X"28",X"44",X"00",X"00",X"00",X"38",X"20",X"20",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"3C",X"62",X"C8",X"84",X"84",X"94",X"4C",X"20",X"FE",X"80",X"20",X"20",X"20",X"24",X"20",X"20", + X"FF",X"80",X"38",X"60",X"C0",X"87",X"9C",X"40",X"7E",X"C1",X"84",X"9C",X"00",X"60",X"CE",X"80", + X"70",X"40",X"CF",X"80",X"4C",X"48",X"40",X"40",X"7E",X"C1",X"80",X"80",X"9F",X"00",X"7C",X"40", + X"7E",X"C1",X"84",X"9C",X"00",X"0C",X"78",X"40",X"1C",X"10",X"10",X"30",X"60",X"C7",X"9C",X"80", + X"7E",X"C1",X"82",X"86",X"61",X"48",X"5C",X"20",X"3E",X"60",X"C0",X"9E",X"81",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"6C",X"5A",X"48",X"48",X"00",X"00",X"00",X"7E",X"40",X"00",X"00",X"00", + X"78",X"40",X"20",X"10",X"18",X"30",X"60",X"40",X"1E",X"30",X"60",X"C0",X"80",X"40",X"20",X"10", + X"1E",X"30",X"60",X"C0",X"80",X"40",X"20",X"10",X"38",X"20",X"38",X"60",X"C7",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E7",X"84",X"9C",X"80",X"84",X"8C",X"48",X"20", + X"7F",X"C0",X"84",X"9C",X"40",X"84",X"9C",X"40",X"7C",X"C2",X"89",X"04",X"04",X"EC",X"98",X"00", + X"3F",X"60",X"C4",X"84",X"84",X"94",X"4C",X"20",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80",X"FC",X"82",X"89",X"94",X"84",X"04",X"F8",X"80", + X"E7",X"84",X"84",X"9C",X"80",X"84",X"84",X"84",X"FE",X"80",X"20",X"20",X"20",X"20",X"E6",X"80", + X"7E",X"C1",X"84",X"84",X"80",X"80",X"80",X"80",X"F7",X"84",X"04",X"00",X"30",X"64",X"C4",X"84", + X"FE",X"80",X"08",X"08",X"08",X"08",X"08",X"08",X"E7",X"84",X"9C",X"94",X"80",X"80",X"88",X"84", + X"E7",X"84",X"84",X"84",X"80",X"90",X"88",X"84",X"3E",X"41",X"84",X"84",X"84",X"84",X"9C",X"40", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"DE",X"A1",X"CC",X"84",X"84",X"84",X"9C",X"40", + X"F7",X"84",X"04",X"E0",X"84",X"84",X"9C",X"40",X"7E",X"C1",X"84",X"9E",X"41",X"74",X"4C",X"20", + X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80",X"7E",X"C1",X"84",X"84",X"84",X"84",X"84",X"84", + X"18",X"30",X"60",X"C0",X"88",X"84",X"84",X"84",X"E7",X"8C",X"88",X"80",X"80",X"94",X"84",X"84", + X"E7",X"8C",X"88",X"00",X"60",X"C0",X"88",X"84",X"38",X"20",X"20",X"64",X"C2",X"88",X"88",X"88", + X"FF",X"80",X"18",X"30",X"60",X"C0",X"8F",X"80",X"18",X"16",X"08",X"08",X"00",X"00",X"00",X"00", + X"70",X"40",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"40",X"00", + X"FE",X"48",X"48",X"48",X"49",X"48",X"78",X"48",X"FE",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"38",X"24",X"10",X"10",X"10",X"10",X"10",X"20",X"1C",X"30",X"20",X"20",X"20",X"20",X"24",X"10", + X"FE",X"A0",X"80",X"98",X"10",X"00",X"38",X"A0",X"3E",X"44",X"A4",X"A4",X"A4",X"A5",X"A5",X"44", + X"BE",X"68",X"28",X"28",X"10",X"28",X"28",X"10",X"7B",X"46",X"A5",X"A5",X"45",X"A5",X"A5",X"45", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"38",X"20",X"20",X"18",X"60",X"40",X"40",X"40", + X"00",X"62",X"44",X"28",X"10",X"28",X"44",X"00",X"00",X"00",X"38",X"20",X"20",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"3C",X"62",X"C8",X"84",X"84",X"94",X"4C",X"20",X"FE",X"80",X"20",X"20",X"20",X"24",X"20",X"20", + X"FF",X"80",X"38",X"60",X"C0",X"87",X"9C",X"40",X"7E",X"C1",X"84",X"9C",X"00",X"60",X"CE",X"80", + X"70",X"40",X"CF",X"80",X"4C",X"48",X"40",X"40",X"7E",X"C1",X"80",X"80",X"9F",X"00",X"7C",X"40", + X"7E",X"C1",X"84",X"9C",X"00",X"0C",X"78",X"40",X"1C",X"10",X"10",X"30",X"60",X"C7",X"9C",X"80", + X"7E",X"C1",X"82",X"86",X"61",X"48",X"5C",X"20",X"3E",X"60",X"C0",X"9E",X"81",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"6C",X"5A",X"48",X"48",X"00",X"00",X"00",X"7E",X"40",X"00",X"00",X"00", + X"3E",X"41",X"BE",X"A2",X"BA",X"A2",X"BE",X"40",X"FE",X"08",X"08",X"F8",X"18",X"49",X"C8",X"08", + X"F1",X"0A",X"24",X"64",X"0C",X"24",X"64",X"02",X"78",X"85",X"12",X"32",X"81",X"1E",X"33",X"81", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E7",X"84",X"9C",X"80",X"84",X"8C",X"48",X"20", + X"7F",X"C0",X"84",X"9C",X"40",X"84",X"9C",X"40",X"7C",X"C2",X"89",X"04",X"04",X"EC",X"98",X"00", + X"3F",X"60",X"C4",X"84",X"84",X"94",X"4C",X"20",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80",X"FC",X"82",X"89",X"94",X"84",X"04",X"F8",X"80", + X"E7",X"84",X"84",X"9C",X"80",X"84",X"84",X"84",X"FE",X"80",X"20",X"20",X"20",X"20",X"E6",X"80", + X"7E",X"C1",X"84",X"84",X"80",X"80",X"80",X"80",X"F7",X"84",X"04",X"00",X"30",X"64",X"C4",X"84", + X"FE",X"80",X"08",X"08",X"08",X"08",X"08",X"08",X"E7",X"84",X"9C",X"94",X"80",X"80",X"88",X"84", + X"E7",X"84",X"84",X"84",X"80",X"90",X"88",X"84",X"3E",X"41",X"84",X"84",X"84",X"84",X"9C",X"40", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"DE",X"A1",X"CC",X"84",X"84",X"84",X"9C",X"40", + X"F7",X"84",X"04",X"E0",X"84",X"84",X"9C",X"40",X"7E",X"C1",X"84",X"9E",X"41",X"74",X"4C",X"20", + X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80",X"7E",X"C1",X"84",X"84",X"84",X"84",X"84",X"84", + X"18",X"30",X"60",X"C0",X"88",X"84",X"84",X"84",X"E7",X"8C",X"88",X"80",X"80",X"94",X"84",X"84", + X"E7",X"8C",X"88",X"00",X"60",X"C0",X"88",X"84",X"38",X"20",X"20",X"64",X"C2",X"88",X"88",X"88", + X"FF",X"80",X"18",X"30",X"60",X"C0",X"8F",X"80",X"18",X"16",X"08",X"08",X"00",X"00",X"00",X"00", + X"70",X"40",X"40",X"00",X"00",X"00",X"00",X"00",X"70",X"40",X"41",X"41",X"40",X"01",X"81",X"40", + X"FE",X"48",X"48",X"48",X"49",X"48",X"78",X"48",X"BB",X"22",X"22",X"22",X"66",X"10",X"00",X"00", + X"F3",X"0A",X"E2",X"02",X"66",X"04",X"00",X"00",X"DF",X"12",X"13",X"12",X"32",X"80",X"00",X"00", + X"FD",X"83",X"89",X"89",X"99",X"80",X"80",X"80",X"1E",X"21",X"44",X"44",X"4C",X"20",X"00",X"00", + X"3C",X"42",X"88",X"88",X"98",X"40",X"00",X"00",X"8E",X"08",X"08",X"08",X"19",X"10",X"08",X"10", + X"FB",X"26",X"20",X"20",X"22",X"26",X"10",X"08",X"BF",X"65",X"25",X"25",X"25",X"12",X"00",X"00", + X"FF",X"90",X"9F",X"10",X"13",X"88",X"00",X"00",X"00",X"00",X"38",X"20",X"20",X"00",X"00",X"00", + X"B8",X"60",X"20",X"27",X"24",X"24",X"38",X"20",X"EF",X"38",X"41",X"41",X"CF",X"08",X"00",X"00", + X"CF",X"09",X"08",X"04",X"04",X"04",X"00",X"00",X"EF",X"89",X"89",X"89",X"99",X"41",X"01",X"01", + X"FE",X"A1",X"04",X"04",X"3C",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"3C",X"62",X"C8",X"84",X"84",X"94",X"4C",X"20",X"FE",X"80",X"20",X"20",X"20",X"24",X"20",X"20", + X"FF",X"80",X"38",X"60",X"C0",X"87",X"9C",X"40",X"7E",X"C1",X"84",X"9C",X"00",X"60",X"CE",X"80", + X"70",X"40",X"CF",X"80",X"4C",X"48",X"40",X"40",X"7E",X"C1",X"80",X"80",X"9F",X"00",X"7C",X"40", + X"7E",X"C1",X"84",X"9C",X"00",X"0C",X"78",X"40",X"1C",X"10",X"10",X"30",X"60",X"C7",X"9C",X"80", + X"7E",X"C1",X"82",X"86",X"61",X"48",X"5C",X"20",X"3E",X"60",X"C0",X"9E",X"81",X"84",X"9C",X"40", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"00",X"00",X"00",X"7E",X"40",X"00",X"00",X"00", + X"78",X"40",X"20",X"10",X"18",X"30",X"60",X"40",X"00",X"00",X"7E",X"40",X"00",X"7E",X"40",X"00", + X"1E",X"30",X"60",X"C0",X"80",X"40",X"20",X"10",X"38",X"20",X"38",X"60",X"C7",X"84",X"9C",X"40", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E7",X"84",X"9C",X"80",X"84",X"8C",X"48",X"20", + X"7F",X"C0",X"84",X"9C",X"40",X"84",X"9C",X"40",X"7C",X"C2",X"89",X"04",X"04",X"EC",X"98",X"00", + X"3F",X"60",X"C4",X"84",X"84",X"94",X"4C",X"20",X"FF",X"80",X"04",X"7C",X"40",X"04",X"FC",X"80", + X"07",X"04",X"04",X"7C",X"40",X"04",X"FC",X"80",X"FC",X"82",X"89",X"94",X"84",X"04",X"F8",X"80", + X"E7",X"84",X"84",X"9C",X"80",X"84",X"84",X"84",X"FE",X"80",X"20",X"20",X"20",X"20",X"E6",X"80", + X"7E",X"C1",X"84",X"84",X"80",X"80",X"80",X"80",X"F7",X"84",X"04",X"00",X"30",X"64",X"C4",X"84", + X"FE",X"80",X"08",X"08",X"08",X"08",X"08",X"08",X"E7",X"84",X"9C",X"94",X"80",X"80",X"88",X"84", + X"E7",X"84",X"84",X"84",X"80",X"90",X"88",X"84",X"3E",X"41",X"84",X"84",X"84",X"84",X"9C",X"40", + X"07",X"04",X"7C",X"C0",X"84",X"84",X"9C",X"40",X"DE",X"A1",X"CC",X"84",X"84",X"84",X"9C",X"40", + X"F7",X"84",X"04",X"E0",X"84",X"84",X"9C",X"40",X"7E",X"C1",X"84",X"9E",X"41",X"74",X"4C",X"20", + X"38",X"20",X"20",X"20",X"20",X"20",X"E6",X"80",X"7E",X"C1",X"84",X"84",X"84",X"84",X"84",X"84", + X"18",X"30",X"60",X"C0",X"88",X"84",X"84",X"84",X"E7",X"8C",X"88",X"80",X"80",X"94",X"84",X"84", + X"E7",X"8C",X"88",X"00",X"60",X"C0",X"88",X"84",X"38",X"20",X"20",X"64",X"C2",X"88",X"88",X"88", + X"FF",X"80",X"18",X"30",X"60",X"C0",X"8F",X"80",X"18",X"16",X"08",X"08",X"00",X"00",X"00",X"00", + X"70",X"40",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"04",X"08",X"10",X"20",X"40",X"00", + X"00",X"38",X"20",X"20",X"00",X"00",X"00",X"00",X"FE",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"38",X"24",X"10",X"10",X"10",X"10",X"10",X"20",X"1C",X"30",X"20",X"20",X"20",X"20",X"24",X"10", + X"FE",X"A0",X"80",X"98",X"10",X"00",X"38",X"A0",X"3E",X"44",X"A4",X"A4",X"A4",X"A5",X"A5",X"44", + X"BE",X"68",X"28",X"28",X"10",X"28",X"28",X"10",X"7B",X"46",X"A5",X"A5",X"45",X"A5",X"A5",X"45", + X"77",X"44",X"44",X"33",X"C4",X"88",X"88",X"88",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"20",X"20",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7m.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7m.vhd new file mode 100644 index 00000000..7d3bd15e --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7m.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity obj_7m is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of obj_7m is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"0D",X"00",X"0F",X"07",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"0F",X"0F",X"0F",X"0F",X"0F",X"1F",X"1F",X"1F",X"0F",X"07",X"07",X"0F",X"06",X"0D", + X"00",X"00",X"00",X"07",X"0F",X"0F",X"0F",X"4F",X"EF",X"FF",X"7F",X"3F",X"07",X"0F",X"06",X"0D", + X"00",X"00",X"1E",X"1F",X"1F",X"1F",X"1F",X"3F",X"7F",X"7F",X"3F",X"0A",X"07",X"0F",X"06",X"0D", + X"00",X"00",X"3C",X"3F",X"1F",X"4F",X"EF",X"EF",X"FF",X"7F",X"3F",X"0F",X"07",X"0F",X"07",X"0E", + X"00",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"03",X"07",X"17",X"3F",X"3F",X"3F",X"1F",X"07",X"07",X"03",X"07",X"03",X"06",X"06", + X"00",X"00",X"0C",X"0F",X"07",X"07",X"07",X"07",X"07",X"07",X"03",X"03",X"07",X"03",X"06",X"06", + X"00",X"00",X"00",X"1F",X"1F",X"4F",X"FF",X"FF",X"7F",X"0F",X"1D",X"1B",X"00",X"0F",X"07",X"00", + X"34",X"06",X"3F",X"07",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"06",X"0F",X"0F",X"07",X"0F",X"4F",X"EF",X"FF",X"7F",X"3F",X"1F",X"3F",X"1A",X"37", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"2D",X"6F",X"63",X"FD",X"FF",X"FD",X"F9",X"2D",X"2D",X"2D",X"0D",X"04",X"01",X"01",X"01", + X"35",X"04",X"3F",X"1F",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"27",X"EF",X"FF",X"EF",X"FF",X"FF",X"7F",X"3F",X"1F",X"3F",X"1A",X"37", + X"00",X"00",X"00",X"03",X"27",X"EF",X"FF",X"EF",X"FF",X"FF",X"7F",X"3F",X"1F",X"3F",X"1A",X"37", + X"00",X"00",X"00",X"03",X"27",X"EF",X"FF",X"EF",X"EF",X"FF",X"7F",X"3F",X"1F",X"3F",X"1A",X"37", + X"00",X"3C",X"3F",X"3F",X"1F",X"DF",X"FE",X"FF",X"7F",X"0F",X"06",X"0D",X"0D",X"00",X"0F",X"07", + X"00",X"3F",X"3F",X"DF",X"FE",X"FF",X"3F",X"0F",X"1D",X"1B",X"00",X"0F",X"07",X"00",X"00",X"00", + X"0F",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"03",X"07",X"1F",X"1F",X"3D",X"3F",X"3F",X"0F",X"0B",X"1F",X"1C",X"39",X"F9",X"ED",X"24",X"04", + X"03",X"07",X"1F",X"1F",X"3D",X"BF",X"FF",X"EF",X"7B",X"7F",X"3C",X"19",X"09",X"0D",X"04",X"04", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE", + X"00",X"00",X"00",X"00",X"1F",X"3F",X"3F",X"3F",X"1F",X"1F",X"4F",X"FF",X"FF",X"FF",X"03",X"03", + X"06",X"06",X"06",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"07",X"0F",X"0F",X"0F",X"0F",X"0F",X"1F",X"7F",X"FF",X"FF",X"6F",X"06",X"0D", + X"00",X"00",X"02",X"0F",X"0F",X"0F",X"0F",X"0F",X"0F",X"07",X"07",X"03",X"07",X"03",X"06",X"06", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"0F",X"0E",X"1D",X"3F",X"33",X"60",X"60",X"60",X"60",X"60",X"60",X"30",X"38",X"1C",X"0F",X"07", + X"6B",X"DE",X"0B",X"12",X"43",X"07",X"07",X"05",X"17",X"06",X"0D",X"0B",X"0B",X"1B",X"17",X"0F", + X"0D",X"0F",X"1F",X"3F",X"31",X"60",X"60",X"60",X"60",X"60",X"60",X"30",X"38",X"1C",X"0F",X"07", + X"FC",X"75",X"22",X"17",X"07",X"27",X"86",X"0D",X"0B",X"0B",X"0B",X"17",X"17",X"0F",X"0F",X"0E", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"3E",X"7E",X"FE",X"FE",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"40",X"4E",X"0E",X"0E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"40",X"40",X"4E",X"0E",X"0E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"40",X"40",X"4E",X"0E",X"0E", + X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"40",X"4E",X"0E",X"0E", + X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"40",X"40",X"4E",X"0E",X"0E", + X"00",X"00",X"02",X"02",X"00",X"40",X"40",X"4E",X"0E",X"00",X"00",X"40",X"40",X"4E",X"0E",X"0E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"4E",X"4E",X"4E",X"4E",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"4F",X"4F",X"4F",X"4F",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"00",X"06",X"1E",X"3E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"44",X"AA",X"AA",X"AA",X"AA",X"44",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"31",X"4A",X"4A",X"4A",X"4A",X"31",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"31",X"4A",X"4A",X"4A",X"4A",X"31",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"31",X"4A",X"4A",X"4A",X"4A",X"31",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"31",X"4A",X"4A",X"4A",X"4A",X"31",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"22",X"55",X"55",X"55",X"55",X"22",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"22",X"55",X"55",X"55",X"55",X"22",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"44",X"AA",X"AA",X"AA",X"AA",X"44",X"00",X"00", + X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"13",X"17",X"3F",X"3F",X"FF",X"3C",X"3B",X"0C",X"0F",X"0F",X"08",X"03",X"D3",X"DD",X"4F",X"07", + X"13",X"17",X"3F",X"3F",X"FF",X"BC",X"FB",X"C4",X"0F",X"0F",X"08",X"03",X"03",X"1D",X"0F",X"07", + X"07",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"04",X"44",X"9F",X"BF",X"BF",X"7F",X"1B",X"11",X"41",X"C1",X"C1",X"C1",X"03",X"03", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00", + X"01",X"01",X"01",X"01",X"03",X"03",X"0F",X"FE",X"F8",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00", + X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01", + X"07",X"0F",X"1F",X"1F",X"3F",X"BF",X"7F",X"3F",X"7F",X"7F",X"F3",X"E7",X"4F",X"0E",X"06",X"00", + X"07",X"0F",X"1F",X"1F",X"3F",X"3F",X"7F",X"BF",X"3F",X"3F",X"33",X"73",X"71",X"21",X"00",X"00", + X"E0",X"7F",X"7F",X"FF",X"7F",X"FF",X"7F",X"3F",X"3F",X"1F",X"0E",X"00",X"00",X"00",X"00",X"00", + X"70",X"61",X"7F",X"7F",X"FF",X"7F",X"FF",X"7F",X"3F",X"3F",X"1F",X"0E",X"00",X"00",X"00",X"00", + X"E3",X"7F",X"7F",X"FF",X"7F",X"FF",X"7F",X"3F",X"3F",X"1F",X"0E",X"00",X"00",X"00",X"00",X"00", + X"00",X"38",X"7F",X"7F",X"FF",X"7F",X"FF",X"7F",X"3F",X"3F",X"1F",X"0E",X"00",X"00",X"00",X"00", + X"38",X"7F",X"7F",X"FF",X"FF",X"FF",X"7F",X"3F",X"3F",X"1F",X"0E",X"00",X"00",X"00",X"00",X"00", + X"1E",X"1C",X"41",X"21",X"00",X"03",X"07",X"0E",X"0D",X"03",X"03",X"03",X"03",X"01",X"01",X"00", + X"01",X"0D",X"0E",X"23",X"40",X"03",X"07",X"0E",X"0D",X"03",X"03",X"03",X"03",X"01",X"01",X"00", + X"0E",X"1C",X"00",X"10",X"21",X"03",X"07",X"06",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00", + X"F4",X"72",X"30",X"00",X"00",X"00",X"CB",X"CB",X"7B",X"37",X"03",X"03",X"03",X"01",X"01",X"00", + X"03",X"03",X"02",X"00",X"00",X"00",X"06",X"1D",X"3D",X"7B",X"F7",X"E7",X"67",X"26",X"02",X"01", + X"01",X"07",X"0F",X"1F",X"1F",X"1F",X"0F",X"0F",X"03",X"3D",X"0F",X"07",X"34",X"7E",X"3F",X"0F", + X"01",X"07",X"0F",X"1F",X"1F",X"1F",X"1F",X"0F",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"07",X"0F",X"1F",X"1F",X"3F",X"3F",X"3F",X"3F",X"7F",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"07",X"0F",X"1F",X"1F",X"3F",X"3F",X"7F",X"3F",X"7F",X"7F",X"37",X"00",X"00",X"00",X"00",X"00", + X"07",X"0F",X"1F",X"1F",X"3F",X"BF",X"7F",X"3F",X"7F",X"7F",X"73",X"27",X"01",X"00",X"00",X"00", + X"01",X"03",X"0B",X"0F",X"0F",X"0F",X"0F",X"0F",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"01",X"03",X"03",X"07",X"07",X"07",X"0F",X"0F",X"07",X"03",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"07",X"07",X"0F",X"0F",X"0F",X"0F",X"07",X"07",X"07",X"03",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"07",X"0F",X"1F",X"1F",X"1F",X"1F",X"0F",X"03",X"01", + X"00",X"00",X"00",X"00",X"01",X"07",X"0F",X"1F",X"1F",X"1F",X"1F",X"0F",X"03",X"01",X"00",X"00", + X"00",X"00",X"01",X"07",X"0F",X"1F",X"1F",X"1F",X"1F",X"0F",X"03",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"08",X"44",X"62",X"61",X"30",X"32",X"14",X"18",X"1A",X"0A",X"03",X"03",X"01",X"01", + X"20",X"11",X"0A",X"44",X"62",X"61",X"20",X"32",X"15",X"1B",X"1A",X"0A",X"02",X"02",X"01",X"01", + X"20",X"30",X"58",X"48",X"62",X"61",X"20",X"30",X"10",X"00",X"10",X"08",X"00",X"02",X"01",X"01", + X"00",X"30",X"08",X"00",X"42",X"40",X"40",X"70",X"00",X"00",X"00",X"42",X"62",X"03",X"08",X"00", + X"20",X"20",X"08",X"00",X"00",X"80",X"40",X"00",X"00",X"00",X"00",X"80",X"40",X"00",X"02",X"11", + X"4C",X"08",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"01",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"30",X"0C",X"03",X"01",X"07",X"7F",X"FF",X"3F",X"0F",X"03",X"00", + X"00",X"00",X"00",X"00",X"80",X"40",X"20",X"F8",X"F7",X"F0",X"F0",X"F0",X"70",X"31",X"1B",X"07", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"01",X"03",X"07",X"0F",X"1F",X"3F",X"FF", + X"00",X"00",X"00",X"00",X"00",X"80",X"60",X"10",X"0F",X"80",X"E0",X"F8",X"FF",X"7F",X"1F",X"07", + X"00",X"00",X"00",X"00",X"00",X"80",X"60",X"18",X"07",X"80",X"E0",X"F8",X"FF",X"7F",X"1F",X"07", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3F",X"60",X"C0",X"80",X"FF",X"FF",X"7F",X"3F", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"E0",X"EE",X"EE",X"EE",X"EE",X"0E",X"0E", + X"00",X"00",X"00",X"00",X"00",X"E0",X"EE",X"EE",X"EE",X"EE",X"EE",X"0E",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"0E",X"EE",X"EE",X"EE",X"EE",X"E0",X"E0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"22",X"66",X"76",X"7F",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"22",X"66",X"76",X"7F",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"40",X"66",X"EE",X"FF",X"FF",X"FF",X"7F", + X"00",X"00",X"00",X"00",X"00",X"08",X"05",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"40",X"21",X"19",X"8B",X"6D",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"01",X"B1",X"69",X"16",X"36",X"30",X"27",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"81",X"63",X"9E",X"6D",X"21",X"74",X"86",X"77",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"30",X"0C",X"03",X"30",X"3C",X"7C",X"FC",X"3C",X"0E",X"03",X"00", + X"00",X"00",X"00",X"00",X"80",X"40",X"20",X"98",X"C7",X"C0",X"C0",X"C3",X"63",X"23",X"1F",X"07", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"3C",X"3C",X"3C",X"7E",X"FF", + X"00",X"03",X"0F",X"1F",X"1D",X"39",X"35",X"34",X"36",X"37",X"37",X"1B",X"1C",X"0F",X"03",X"00", + X"00",X"00",X"00",X"01",X"03",X"03",X"23",X"37",X"3E",X"1E",X"1C",X"0F",X"07",X"03",X"00",X"00", + X"00",X"03",X"0F",X"0C",X"19",X"1B",X"1B",X"1C",X"0F",X"03",X"00",X"00",X"20",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"0E",X"0E",X"1B",X"19",X"1A",X"1A",X"0C",X"0F",X"07",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"0B",X"0F",X"06",X"03",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"07",X"06",X"06",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"07",X"07",X"06",X"03",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"01",X"03",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"03",X"04",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"04",X"03",X"00",X"00",X"00",X"00", + X"00",X"02",X"04",X"04",X"08",X"08",X"00",X"00",X"00",X"04",X"04",X"00",X"00",X"00",X"00",X"00", + X"00",X"01",X"02",X"02",X"02",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"30",X"30",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"54",X"54",X"50",X"43",X"37",X"07",X"17",X"27",X"72",X"56",X"56",X"46",X"26",X"00",X"00",X"00", + X"A4",X"A4",X"90",X"43",X"37",X"07",X"37",X"67",X"E2",X"A6",X"86",X"C6",X"06",X"00",X"00",X"00", + X"04",X"A8",X"A8",X"50",X"43",X"17",X"07",X"37",X"27",X"72",X"2E",X"26",X"16",X"0E",X"00",X"00", + X"A8",X"A8",X"9D",X"4D",X"35",X"25",X"57",X"E7",X"F7",X"52",X"56",X"05",X"37",X"07",X"04",X"08", + X"54",X"54",X"2D",X"1D",X"05",X"05",X"37",X"67",X"C7",X"E2",X"F6",X"D5",X"57",X"67",X"34",X"18", + X"24",X"48",X"4D",X"0D",X"35",X"05",X"77",X"C7",X"E7",X"F2",X"56",X"55",X"27",X"37",X"04",X"08", + X"0E",X"20",X"4E",X"7E",X"E3",X"C7",X"57",X"67",X"0F",X"37",X"48",X"90",X"20",X"00",X"00",X"00", + X"0E",X"20",X"4E",X"7E",X"E3",X"C7",X"57",X"67",X"0F",X"17",X"08",X"28",X"24",X"20",X"10",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"F1",X"FF",X"7F",X"FF",X"7F",X"7F",X"7F",X"3F",X"3F",X"1F",X"0F",X"0E",X"00",X"00",X"00",X"00", + X"CF",X"67",X"3F",X"7F",X"3F",X"3F",X"1F",X"1F",X"0F",X"0F",X"0E",X"05",X"01",X"00",X"00",X"00", + X"38",X"1C",X"3C",X"1C",X"1C",X"1F",X"3F",X"7F",X"7F",X"7F",X"7B",X"31",X"39",X"18",X"00",X"00", + X"38",X"1C",X"18",X"1F",X"0F",X"4F",X"CF",X"FF",X"FF",X"FF",X"EE",X"C6",X"66",X"64",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"FF",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00",X"FF", + X"00",X"00",X"0C",X"0C",X"00",X"0C",X"0E",X"06",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00", + X"18",X"18",X"18",X"7F",X"04",X"08",X"00",X"00",X"0F",X"08",X"00",X"08",X"04",X"03",X"00",X"00", + X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"00",X"FF",X"00",X"00",X"00",X"F0",X"F8",X"1C",X"0F",X"00", + X"00",X"00",X"0C",X"0C",X"00",X"0C",X"0E",X"06",X"07",X"03",X"01",X"00",X"00",X"00",X"00",X"00", + X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0F",X"00",X"18",X"18",X"18",X"7F", + X"00",X"18",X"18",X"18",X"7F",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C", + X"00",X"00",X"01",X"02",X"04",X"09",X"10",X"01",X"04",X"0C",X"0C",X"0C",X"0C",X"0C",X"0C",X"0F", + X"FF",X"FF",X"FF",X"FF",X"07",X"78",X"C7",X"00",X"00",X"00",X"00",X"C7",X"FF",X"78",X"00",X"03", + X"FF",X"FF",X"FF",X"FF",X"F0",X"07",X"F8",X"00",X"00",X"00",X"00",X"F8",X"FF",X"0F",X"00",X"E0", + X"FF",X"FF",X"FF",X"FF",X"FE",X"00",X"FF",X"00",X"00",X"00",X"00",X"FF",X"FF",X"01",X"00",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"10",X"88",X"6D",X"1D",X"0D",X"3D",X"27",X"73",X"77",X"FA",X"5E",X"4F",X"4F",X"27",X"24",X"18", + X"04",X"08",X"08",X"0B",X"03",X"02",X"01",X"01",X"01",X"03",X"07",X"06",X"06",X"06",X"06",X"02", + X"05",X"09",X"08",X"03",X"03",X"03",X"1B",X"33",X"63",X"F1",X"FB",X"5B",X"4A",X"2A",X"20",X"10", + X"04",X"08",X"08",X"0B",X"03",X"02",X"01",X"01",X"01",X"03",X"07",X"06",X"06",X"06",X"06",X"02", + X"00",X"03",X"04",X"04",X"0F",X"1A",X"1A",X"0E",X"03",X"01",X"05",X"19",X"37",X"0E",X"3E",X"1C", + X"00",X"03",X"04",X"04",X"0F",X"1A",X"1A",X"0E",X"13",X"71",X"F5",X"F1",X"E3",X"40",X"00",X"00", + X"00",X"03",X"04",X"04",X"0F",X"3A",X"9A",X"CE",X"F3",X"71",X"05",X"01",X"03",X"00",X"00",X"00", + X"07",X"08",X"8F",X"D7",X"79",X"2C",X"03",X"11",X"05",X"01",X"03",X"00",X"00",X"00",X"00",X"00", + X"41",X"E5",X"F1",X"13",X"0E",X"1A",X"1A",X"0F",X"08",X"04",X"03",X"00",X"00",X"00",X"00",X"00", + X"41",X"E5",X"F1",X"13",X"0E",X"1A",X"1A",X"0F",X"08",X"04",X"03",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"40",X"40",X"60",X"60",X"30",X"30",X"10",X"10",X"1F",X"0B",X"03",X"03",X"01",X"01", + X"00",X"00",X"40",X"40",X"60",X"60",X"3F",X"3C",X"1C",X"1C",X"1F",X"0B",X"03",X"03",X"01",X"01", + X"00",X"00",X"40",X"7F",X"7A",X"7D",X"3F",X"3C",X"1C",X"1C",X"1F",X"0B",X"03",X"03",X"01",X"01", + X"3F",X"60",X"7F",X"7A",X"7D",X"7F",X"3F",X"3C",X"1C",X"1C",X"1F",X"0B",X"03",X"03",X"01",X"01", + X"3F",X"60",X"7F",X"7F",X"7A",X"7D",X"3F",X"3C",X"1C",X"1C",X"1F",X"0B",X"03",X"03",X"01",X"01", + X"00",X"00",X"40",X"40",X"60",X"60",X"30",X"30",X"10",X"10",X"1A",X"0A",X"03",X"03",X"01",X"01", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", + X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", + X"00",X"08",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"08",X"00", + X"00",X"0C",X"0C",X"0C",X"0C",X"4C",X"4C",X"4C",X"4C",X"4C",X"4C",X"4C",X"0C",X"0C",X"0C",X"00", + X"02",X"06",X"06",X"26",X"26",X"66",X"66",X"66",X"66",X"66",X"66",X"26",X"26",X"06",X"06",X"02", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"03",X"04",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"0B",X"04",X"03",X"00",X"00",X"00", + X"00",X"00",X"02",X"04",X"04",X"08",X"08",X"00",X"00",X"00",X"04",X"04",X"00",X"00",X"00",X"00", + X"00",X"00",X"01",X"02",X"02",X"02",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"04",X"05",X"05",X"05",X"05",X"05",X"04",X"03",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"0F",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"07",X"0E",X"0D",X"FF",X"0D",X"0E",X"07",X"03",X"00",X"00",X"00",X"00", + X"00",X"00",X"07",X"0F",X"1C",X"19",X"1B",X"FF",X"1B",X"19",X"1C",X"0F",X"07",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"03",X"07",X"07",X"07",X"07",X"07",X"03",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"08",X"00",X"01",X"03",X"23",X"03",X"01",X"00",X"00",X"08",X"00",X"00",X"00", + X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"20",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"05",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"03",X"03",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"03",X"03",X"03",X"01",X"00",X"00",X"01",X"01",X"00", + X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"04",X"04",X"04",X"0C",X"0C",X"0C",X"0C",X"14", + X"00",X"00",X"00",X"00",X"20",X"22",X"72",X"22",X"24",X"04",X"04",X"0C",X"0C",X"0C",X"0C",X"14", + X"20",X"20",X"20",X"20",X"20",X"22",X"FA",X"22",X"24",X"24",X"24",X"2C",X"2C",X"2C",X"0C",X"14", + X"07",X"0F",X"1F",X"1F",X"3F",X"3F",X"7F",X"BF",X"7F",X"3F",X"33",X"73",X"71",X"21",X"00",X"00", + X"31",X"07",X"3F",X"3F",X"3F",X"7F",X"7F",X"27",X"1F",X"3F",X"38",X"13",X"07",X"07",X"07",X"03", + X"00",X"00",X"00",X"06",X"0F",X"07",X"03",X"31",X"7B",X"F3",X"FF",X"CF",X"EF",X"66",X"04",X"00", + X"00",X"03",X"1B",X"1B",X"3D",X"3C",X"14",X"B3",X"FF",X"FF",X"7F",X"37",X"03",X"01",X"01",X"00", + X"00",X"06",X"01",X"1F",X"1E",X"0F",X"0F",X"07",X"07",X"0F",X"0F",X"0F",X"0F",X"07",X"07",X"03", + X"00",X"00",X"06",X"1F",X"7F",X"7F",X"7F",X"7F",X"7F",X"7F",X"3F",X"7C",X"9C",X"0E",X"0E",X"04", + X"07",X"25",X"57",X"57",X"F3",X"E7",X"DF",X"77",X"07",X"1B",X"2C",X"48",X"90",X"00",X"00",X"00", + X"0C",X"10",X"2C",X"78",X"60",X"3F",X"07",X"1F",X"07",X"2B",X"09",X"00",X"03",X"00",X"00",X"01", + X"01",X"00",X"00",X"03",X"00",X"08",X"2B",X"07",X"1F",X"07",X"1F",X"23",X"7C",X"70",X"3C",X"10", + X"00",X"00",X"00",X"10",X"92",X"4A",X"14",X"0F",X"6F",X"DF",X"EF",X"67",X"3F",X"CF",X"6A",X"0E", + X"00",X"20",X"32",X"6A",X"24",X"A5",X"8F",X"0F",X"3F",X"7F",X"5F",X"77",X"2F",X"0B",X"0E",X"06", + X"06",X"0F",X"0D",X"37",X"7A",X"6F",X"3F",X"3F",X"0F",X"2F",X"47",X"27",X"EA",X"FA",X"78",X"30", + X"01",X"05",X"01",X"13",X"4E",X"FA",X"FA",X"CF",X"08",X"04",X"03",X"00",X"00",X"00",X"00",X"00", + X"0E",X"1F",X"19",X"17",X"03",X"03",X"05",X"04",X"02",X"02",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"02",X"04",X"05",X"03",X"03",X"0F",X"1D",X"19",X"0A", + X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"04",X"47",X"DD",X"ED",X"7F",X"39",X"00",X"02",X"00", + X"00",X"30",X"78",X"18",X"4B",X"7C",X"3A",X"17",X"1D",X"2B",X"0E",X"1D",X"27",X"0B",X"00",X"00", + X"00",X"00",X"0B",X"27",X"1D",X"0E",X"2B",X"1D",X"17",X"3A",X"3C",X"2B",X"2C",X"34",X"18",X"00", + X"1B",X"09",X"0D",X"05",X"07",X"07",X"02",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"27",X"32",X"12",X"1A",X"1E",X"0A",X"0B",X"0D",X"07",X"07",X"07",X"07",X"05",X"01",X"01",X"01", + X"12",X"09",X"0D",X"05",X"07",X"07",X"03",X"03",X"03",X"03",X"0A",X"25",X"1F",X"3F",X"1F",X"0E", + X"32",X"0B",X"05",X"07",X"03",X"03",X"03",X"02",X"40",X"00",X"80",X"C0",X"60",X"7A",X"30",X"00", + X"0E",X"03",X"81",X"00",X"00",X"02",X"00",X"20",X"30",X"18",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"10",X"00",X"00",X"08",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"35",X"53",X"55",X"57",X"60",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"08",X"0E",X"02",X"0E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"07",X"0C",X"09",X"09",X"09",X"0C",X"0F",X"08",X"0F",X"0C",X"00",X"00",X"00", + X"00",X"00",X"00",X"07",X"08",X"08",X"09",X"09",X"09",X"09",X"08",X"0F",X"0C",X"00",X"00",X"00", + X"00",X"00",X"00",X"07",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"07",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"06",X"1E",X"3E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE", + X"7F",X"80",X"80",X"00",X"D9",X"FB",X"AA",X"AA",X"AA",X"AA",X"AA",X"A9",X"00",X"80",X"80",X"7F", + X"00",X"00",X"00",X"7F",X"80",X"80",X"00",X"D9",X"FA",X"AA",X"AA",X"A9",X"00",X"80",X"80",X"7F", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"80",X"80",X"FB",X"AA",X"AB",X"80",X"80",X"7F", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7n.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7n.vhd new file mode 100644 index 00000000..850cad9a --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7n.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity obj_7n is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of obj_7n is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"78",X"00",X"F0",X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"E0",X"D0",X"BC",X"BC",X"FC",X"F0",X"E0",X"C0",X"E0",X"F0",X"80",X"DC", + X"00",X"00",X"00",X"E0",X"E0",X"E0",X"F0",X"60",X"FC",X"FF",X"FF",X"C3",X"E0",X"F0",X"80",X"DC", + X"00",X"00",X"00",X"C0",X"E0",X"E0",X"E0",X"F0",X"FC",X"FE",X"FE",X"84",X"E0",X"F0",X"80",X"DC", + X"00",X"00",X"3C",X"FC",X"FC",X"FA",X"FF",X"6F",X"FE",X"FC",X"F0",X"E0",X"E0",X"F0",X"80",X"DC", + X"00",X"F8",X"E0",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"F0",X"F0",X"F8",X"F8",X"DE",X"FF",X"FB",X"F3",X"E0",X"F0",X"F8",X"40",X"EE",X"BC", + X"00",X"00",X"38",X"F8",X"F8",X"F8",X"FC",X"F8",X"F8",X"F0",X"E0",X"F0",X"F8",X"40",X"EE",X"BC", + X"00",X"00",X"00",X"FE",X"FE",X"FF",X"77",X"FF",X"FE",X"F0",X"80",X"DE",X"FC",X"F8",X"C0",X"00", + X"FC",X"1C",X"DC",X"38",X"78",X"78",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"E0",X"F8",X"F8",X"78",X"E0",X"F0",X"F0",X"F0",X"B8",X"F8",X"1C",X"7C", + X"E0",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"71",X"FF",X"FF",X"FE",X"FE",X"FF",X"FF",X"FF",X"FF",X"FF",X"DF",X"FE",X"FE",X"FC",X"F0",X"F0", + X"E0",X"00",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"20",X"F0",X"F8",X"F8",X"F0",X"F8",X"BC",X"FE",X"FE",X"EE",X"DE",X"8C",X"C0",X"00",X"70", + X"00",X"20",X"F0",X"F8",X"F8",X"F0",X"F8",X"BC",X"FE",X"F8",X"EE",X"DE",X"8C",X"C0",X"00",X"70", + X"00",X"20",X"F0",X"F8",X"F8",X"F0",X"F8",X"BC",X"FE",X"FE",X"EE",X"DE",X"8C",X"C0",X"00",X"70", + X"00",X"3C",X"FC",X"FC",X"F8",X"FB",X"EF",X"FF",X"FE",X"F0",X"80",X"DC",X"38",X"20",X"F8",X"C0", + X"00",X"FC",X"FC",X"FB",X"EF",X"FF",X"FE",X"70",X"80",X"DE",X"3C",X"F8",X"C0",X"00",X"00",X"00", + X"B0",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"C0",X"E0",X"F8",X"F8",X"DC",X"FC",X"FC",X"F8",X"F8",X"FC",X"1C",X"CE",X"CF",X"DB",X"92",X"90", + X"C0",X"E0",X"F8",X"F8",X"DC",X"FD",X"FF",X"F7",X"FE",X"FE",X"1C",X"C8",X"C8",X"D8",X"90",X"90", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE", + X"00",X"00",X"00",X"00",X"C0",X"E0",X"F0",X"F0",X"68",X"FA",X"FF",X"FF",X"FF",X"F0",X"88",X"80", + X"EE",X"9C",X"10",X"00",X"90",X"E8",X"E0",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"08",X"F8",X"FC",X"FC",X"F8",X"F0",X"FE",X"BE",X"FE",X"F8",X"F0",X"E0",X"F0",X"80",X"DC", + X"00",X"08",X"78",X"FC",X"FC",X"FC",X"FC",X"DF",X"FF",X"FC",X"F8",X"F0",X"F8",X"40",X"EE",X"9C", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"F0",X"70",X"B8",X"FC",X"4C",X"06",X"06",X"06",X"06",X"06",X"06",X"0C",X"1C",X"38",X"F0",X"C0", + X"38",X"DD",X"EA",X"C0",X"40",X"60",X"A4",X"A0",X"F0",X"F0",X"72",X"B0",X"B8",X"D8",X"D8",X"F0", + X"B0",X"F0",X"F8",X"FC",X"8C",X"06",X"06",X"06",X"06",X"06",X"06",X"0C",X"1C",X"38",X"F0",X"C0", + X"6B",X"77",X"D6",X"60",X"69",X"E0",X"F0",X"70",X"B0",X"B8",X"D8",X"D8",X"F8",X"F0",X"F0",X"70", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"7E",X"7E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FC",X"FC",X"F8",X"F0",X"C0",X"00",X"00",X"00",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"52",X"52",X"52",X"F7",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"7E",X"7E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"7E",X"7E",X"7E",X"7E", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"C0",X"F0",X"F8",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"00",X"1E",X"1E",X"1E",X"1E",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"40",X"4E",X"0E",X"0E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"00",X"10",X"F0",X"F0",X"F0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"F0",X"F0",X"F0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"7E",X"7E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"F0",X"F0",X"F0", + X"00",X"00",X"1E",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F7",X"F7", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"F0",X"F8",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"47",X"F1",X"52",X"54",X"65",X"42",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"9E",X"42",X"4C",X"50",X"52",X"8C",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"88",X"5E",X"4A",X"4A",X"4C",X"88",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"50",X"50",X"5C",X"44",X"9C",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"8C",X"52",X"52",X"4C",X"52",X"8C",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"54",X"54",X"54",X"54",X"26",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"24",X"54",X"54",X"74",X"14",X"66",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F3",X"14",X"64",X"83",X"94",X"67",X"00",X"00", + X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"C8",X"E8",X"FC",X"FC",X"FF",X"7C",X"BC",X"60",X"E0",X"E0",X"20",X"80",X"97",X"77",X"E4",X"E0", + X"C8",X"E8",X"FC",X"FC",X"FF",X"7D",X"BF",X"63",X"E0",X"E0",X"20",X"80",X"90",X"70",X"E0",X"E0", + X"0E",X"7C",X"D0",X"E0",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"E0",X"F0",X"F0",X"F8",X"9A",X"8B",X"0B",X"13",X"F0",X"88",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00", + X"86",X"86",X"86",X"86",X"86",X"06",X"06",X"06",X"0E",X"0C",X"1C",X"38",X"F8",X"E0",X"80",X"00", + X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86",X"86", + X"00",X"80",X"80",X"C0",X"E0",X"F0",X"F8",X"FC",X"DE",X"BE",X"1A",X"50",X"78",X"78",X"70",X"30", + X"00",X"80",X"80",X"C0",X"EC",X"FE",X"FF",X"FF",X"CD",X"A8",X"3C",X"BC",X"D8",X"D8",X"C0",X"00", + X"F0",X"E0",X"C0",X"F0",X"FC",X"F0",X"F0",X"B3",X"3F",X"7F",X"67",X"4E",X"4E",X"04",X"00",X"00", + X"E0",X"E0",X"C0",X"80",X"F0",X"F8",X"FC",X"FB",X"B7",X"7F",X"67",X"4E",X"4E",X"04",X"00",X"00", + X"C0",X"C0",X"80",X"F0",X"F8",X"FC",X"FB",X"B7",X"7F",X"67",X"4E",X"4E",X"04",X"00",X"00",X"00", + X"00",X"78",X"F0",X"C0",X"F0",X"F8",X"FC",X"FB",X"B7",X"7F",X"67",X"4E",X"4E",X"04",X"00",X"00", + X"78",X"F0",X"C0",X"F0",X"F8",X"FC",X"FB",X"B7",X"7F",X"67",X"4E",X"4E",X"04",X"00",X"00",X"00", + X"00",X"00",X"E0",X"C0",X"00",X"E0",X"E0",X"30",X"00",X"CC",X"9C",X"FC",X"FC",X"1C",X"18",X"80", + X"C0",X"80",X"00",X"00",X"00",X"E0",X"E0",X"30",X"00",X"CC",X"9C",X"FC",X"FC",X"1C",X"18",X"80", + X"F0",X"E0",X"00",X"00",X"F0",X"F0",X"18",X"80",X"E6",X"CE",X"FE",X"FE",X"8E",X"8C",X"40",X"00", + X"78",X"70",X"E0",X"00",X"00",X"0E",X"7C",X"78",X"80",X"CC",X"9C",X"FC",X"AC",X"AC",X"88",X"C0", + X"C0",X"80",X"00",X"08",X"0E",X"0E",X"06",X"82",X"00",X"00",X"D8",X"F8",X"F8",X"38",X"30",X"00", + X"EE",X"FE",X"EC",X"F8",X"F8",X"F8",X"FB",X"FF",X"FE",X"FC",X"E0",X"C0",X"80",X"00",X"00",X"00", + X"E0",X"F0",X"E8",X"F8",X"F8",X"F8",X"F8",X"F8",X"F0",X"E0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"80",X"80",X"C0",X"E0",X"E0",X"E0",X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"80",X"80",X"C0",X"F0",X"E8",X"E8",X"E8",X"F8",X"F0",X"20",X"00",X"00",X"00",X"00",X"00", + X"00",X"80",X"80",X"C0",X"E0",X"F8",X"F0",X"F4",X"D4",X"9A",X"3E",X"9E",X"0C",X"00",X"00",X"00", + X"C0",X"E0",X"F0",X"F0",X"F8",X"F8",X"F8",X"F8",X"FC",X"F0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"80",X"E0",X"F0",X"F8",X"F8",X"FC",X"FC",X"F8",X"F0",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"F0",X"FC",X"FC",X"FC",X"F8",X"F8",X"F0",X"E0",X"C0",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"20",X"E0",X"F0",X"F8",X"F8",X"F8",X"F8",X"F8",X"F8",X"F0",X"E0", + X"00",X"00",X"00",X"20",X"E0",X"F0",X"F8",X"F8",X"F8",X"F8",X"F8",X"F8",X"F0",X"E0",X"00",X"00", + X"00",X"20",X"E0",X"F0",X"F8",X"F8",X"F8",X"F8",X"F8",X"F8",X"F0",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"20",X"C0",X"00",X"40",X"40",X"40",X"20",X"00",X"00",X"00",X"00",X"00", + X"80",X"00",X"08",X"10",X"20",X"C0",X"00",X"40",X"40",X"40",X"A0",X"50",X"20",X"00",X"00",X"00", + X"00",X"0A",X"12",X"26",X"46",X"8C",X"04",X"40",X"40",X"30",X"10",X"00",X"00",X"00",X"00",X"00", + X"20",X"20",X"40",X"70",X"00",X"40",X"10",X"10",X"10",X"08",X"00",X"30",X"20",X"00",X"00",X"00", + X"00",X"08",X"08",X"5C",X"00",X"00",X"00",X"04",X"02",X"00",X"00",X"00",X"00",X"0C",X"00",X"00", + X"04",X"1C",X"88",X"02",X"00",X"00",X"60",X"22",X"04",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"01",X"03",X"07",X"0F",X"1F",X"3F",X"FF", + X"00",X"00",X"00",X"00",X"01",X"02",X"04",X"18",X"F0",X"11",X"31",X"73",X"F2",X"F4",X"F8",X"E0", + X"00",X"00",X"00",X"00",X"03",X"0D",X"33",X"C3",X"07",X"0F",X"0F",X"1F",X"3C",X"30",X"C0",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"06",X"08",X"F0",X"01",X"07",X"1F",X"FF",X"FE",X"F8",X"E0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"06",X"03",X"01",X"FF",X"FF",X"FE",X"FC", + X"00",X"00",X"00",X"00",X"00",X"01",X"06",X"18",X"E0",X"01",X"07",X"1F",X"FF",X"FE",X"F8",X"E0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"0E",X"EE",X"EE",X"EE",X"EE",X"E0",X"E0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"E0",X"EE",X"EE",X"EE",X"EE",X"0E",X"0E", + X"00",X"00",X"00",X"00",X"00",X"0E",X"EE",X"EE",X"EE",X"EE",X"EE",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"66",X"77",X"FF",X"FF",X"FF",X"FE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"22",X"66",X"76",X"7F",X"7F",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"22",X"66",X"76",X"7F",X"7F",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"90",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"80",X"02",X"04",X"48",X"F8",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"80",X"01",X"02",X"8E",X"FC",X"14",X"4E",X"EC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"87",X"8F",X"F9",X"F2",X"E6",X"CF",X"11",X"F6",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"3C",X"3C",X"3C",X"7E",X"FF", + X"00",X"00",X"00",X"00",X"01",X"02",X"04",X"19",X"E3",X"03",X"03",X"C3",X"C6",X"C4",X"F8",X"E0", + X"00",X"00",X"00",X"00",X"03",X"0C",X"30",X"C0",X"0C",X"3C",X"3E",X"3F",X"3C",X"70",X"C0",X"00", + X"00",X"E0",X"F0",X"C8",X"80",X"80",X"80",X"C4",X"60",X"70",X"30",X"32",X"60",X"C0",X"80",X"00", + X"00",X"60",X"F0",X"98",X"0C",X"6C",X"6C",X"6C",X"4C",X"9C",X"38",X"F8",X"F0",X"E0",X"00",X"00", + X"00",X"E0",X"F0",X"38",X"98",X"CC",X"EC",X"2C",X"8C",X"EC",X"FC",X"78",X"70",X"60",X"80",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"70",X"F0",X"98",X"58",X"58",X"38",X"F0",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"C0",X"E0",X"30",X"B0",X"30",X"B0",X"E0",X"60",X"20",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"F0",X"B0",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"80",X"C0",X"60",X"E0",X"60",X"20",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"20",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"80",X"08",X"00",X"00",X"00",X"04",X"00",X"00",X"00",X"08",X"80",X"00",X"00",X"00", + X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"20",X"20",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"80",X"40",X"40",X"40",X"40",X"48",X"08",X"10",X"00",X"00",X"00",X"00",X"00", + X"00",X"E0",X"10",X"E8",X"68",X"A8",X"A8",X"A8",X"A8",X"E8",X"10",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"0C",X"0C",X"00",X"0A",X"00",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"2A",X"2A",X"12",X"C4",X"F8",X"E0",X"DC",X"C6",X"8E",X"D4",X"C8",X"D0",X"C0",X"00",X"00",X"00", + X"20",X"29",X"12",X"C2",X"F8",X"E0",X"D8",X"C4",X"8E",X"CE",X"CA",X"C0",X"C0",X"00",X"00",X"00", + X"94",X"54",X"54",X"14",X"C0",X"F8",X"E0",X"DC",X"CE",X"8B",X"C9",X"C5",X"C0",X"C0",X"00",X"00", + X"29",X"29",X"72",X"66",X"78",X"60",X"F8",X"CC",X"C6",X"8F",X"DF",X"7B",X"E3",X"C6",X"5C",X"38", + X"52",X"52",X"64",X"70",X"60",X"6E",X"F7",X"CF",X"CB",X"8A",X"C2",X"46",X"C4",X"C0",X"40",X"20", + X"48",X"24",X"64",X"60",X"78",X"60",X"FC",X"C6",X"CF",X"9F",X"DB",X"56",X"C6",X"CC",X"40",X"20", + X"E0",X"04",X"EA",X"EA",X"CF",X"E7",X"FB",X"EE",X"E0",X"D8",X"24",X"12",X"09",X"00",X"00",X"00", + X"E0",X"04",X"EA",X"EA",X"CF",X"E7",X"FB",X"EE",X"E0",X"D0",X"20",X"28",X"48",X"08",X"10",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"E0",X"C0",X"9C",X"BE",X"E0",X"E0",X"E0",X"F0",X"F1",X"FF",X"1F",X"3F",X"3E",X"5E",X"1C",X"18", + X"0E",X"1C",X"08",X"04",X"6C",X"FC",X"FC",X"FC",X"F8",X"F8",X"78",X"30",X"30",X"20",X"40",X"00", + X"1E",X"38",X"1E",X"1C",X"1C",X"9C",X"F8",X"F0",X"E0",X"E0",X"E0",X"80",X"00",X"00",X"00",X"00", + X"3B",X"36",X"3E",X"7E",X"FF",X"FE",X"FE",X"FE",X"FC",X"F8",X"E0",X"60",X"00",X"00",X"00",X"00", + X"FF",X"EF",X"EF",X"EF",X"E0",X"0F",X"E0",X"20",X"20",X"20",X"20",X"E1",X"EF",X"2F",X"21",X"F0", + X"5F",X"5F",X"5F",X"2F",X"17",X"08",X"07",X"00",X"00",X"80",X"E0",X"FF",X"3F",X"00",X"00",X"00", + X"2F",X"2F",X"2F",X"E0",X"DE",X"0E",X"46",X"52",X"5A",X"1A",X"82",X"1A",X"5A",X"52",X"46",X"0E", + X"00",X"00",X"80",X"E0",X"F0",X"F8",X"FC",X"7C",X"BC",X"5E",X"5E",X"5E",X"5E",X"5E",X"DE",X"00", + X"5E",X"5F",X"5F",X"2F",X"17",X"0B",X"04",X"03",X"00",X"80",X"E0",X"FF",X"3F",X"00",X"00",X"00", + X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"DE",X"00",X"2F",X"2F",X"2F",X"E0", + X"00",X"2F",X"2F",X"2F",X"E0",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E",X"5E", + X"00",X"60",X"80",X"7F",X"FF",X"80",X"FF",X"00",X"00",X"00",X"00",X"00",X"0D",X"1E",X"1F",X"FF", + X"FF",X"EF",X"EF",X"EF",X"E0",X"0F",X"E0",X"20",X"20",X"20",X"20",X"E1",X"EF",X"2F",X"21",X"F0", + X"FF",X"EF",X"EF",X"EF",X"60",X"8F",X"60",X"20",X"20",X"20",X"20",X"61",X"EF",X"AF",X"21",X"70", + X"EF",X"EF",X"EF",X"E0",X"0F",X"E0",X"A0",X"20",X"20",X"20",X"20",X"E1",X"EF",X"EF",X"2F",X"21", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"10",X"24",X"68",X"70",X"64",X"6C",X"ED",X"D9",X"FB",X"BB",X"FE",X"DE",X"DE",X"CC",X"48",X"20", + X"40",X"20",X"A0",X"A0",X"80",X"80",X"80",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"80",X"80",X"80", + X"50",X"48",X"08",X"F0",X"F0",X"E0",X"EC",X"C6",X"83",X"47",X"6D",X"6A",X"4A",X"44",X"0C",X"00", + X"40",X"20",X"A0",X"A0",X"80",X"80",X"80",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"80",X"80",X"80", + X"00",X"80",X"40",X"40",X"E0",X"B0",X"B0",X"E0",X"80",X"00",X"40",X"30",X"D8",X"E0",X"F8",X"70", + X"00",X"80",X"40",X"40",X"E0",X"B0",X"B0",X"E0",X"90",X"1C",X"5E",X"1E",X"8E",X"04",X"00",X"00", + X"00",X"80",X"40",X"40",X"E0",X"B8",X"B2",X"E6",X"9E",X"1C",X"40",X"00",X"80",X"00",X"00",X"00", + X"C0",X"20",X"E2",X"D6",X"3C",X"68",X"80",X"10",X"40",X"00",X"80",X"00",X"00",X"00",X"00",X"00", + X"03",X"4F",X"1E",X"90",X"E0",X"B0",X"B0",X"E0",X"20",X"40",X"80",X"00",X"00",X"00",X"00",X"00", + X"03",X"4F",X"1E",X"90",X"E0",X"B0",X"B0",X"E0",X"20",X"40",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"F0",X"A0",X"80",X"80",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FC",X"18",X"18",X"18",X"F0",X"F0",X"A0",X"80",X"80",X"00", + X"00",X"00",X"00",X"FE",X"AE",X"5C",X"FC",X"18",X"18",X"18",X"F0",X"F0",X"A0",X"80",X"80",X"00", + X"FC",X"06",X"FA",X"AE",X"5E",X"FC",X"FC",X"18",X"18",X"18",X"F0",X"F0",X"A0",X"80",X"80",X"00", + X"FC",X"06",X"FA",X"FE",X"AE",X"5C",X"FC",X"18",X"18",X"18",X"F0",X"F0",X"A0",X"80",X"80",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"20",X"20",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"06",X"03",X"FF",X"FF",X"FF",X"FE",X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FE",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"FE", + X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", + X"00",X"10",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"18",X"10",X"00", + X"00",X"30",X"30",X"30",X"30",X"32",X"32",X"32",X"32",X"32",X"32",X"30",X"30",X"30",X"30",X"00", + X"40",X"60",X"60",X"64",X"64",X"66",X"66",X"66",X"66",X"66",X"66",X"64",X"64",X"60",X"60",X"40", + X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"80",X"80",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"20",X"20",X"00",X"80",X"80",X"80", + X"00",X"00",X"00",X"00",X"80",X"40",X"40",X"40",X"40",X"48",X"08",X"10",X"00",X"80",X"80",X"80", + X"00",X"00",X"E0",X"10",X"E8",X"68",X"A8",X"A8",X"A8",X"A8",X"E8",X"10",X"E0",X"80",X"80",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80", + X"00",X"00",X"00",X"E0",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"80",X"80",X"80",X"80",X"C0",X"F8",X"C0",X"80",X"80",X"80",X"80",X"80",X"00",X"00", + X"80",X"80",X"80",X"E0",X"F0",X"B8",X"D8",X"FF",X"D8",X"B8",X"F0",X"E0",X"80",X"80",X"80",X"80", + X"80",X"80",X"F0",X"F8",X"9C",X"CC",X"EC",X"FF",X"EC",X"CC",X"9C",X"F8",X"F0",X"80",X"80",X"80", + X"00",X"00",X"00",X"00",X"E0",X"F0",X"F0",X"F0",X"F0",X"F0",X"E0",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"80",X"10",X"00",X"C0",X"E0",X"E4",X"E0",X"C0",X"00",X"00",X"10",X"80",X"00",X"00", + X"80",X"00",X"04",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"04",X"00",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"E0",X"C0",X"C0",X"C0",X"C0",X"E0",X"00", + X"00",X"00",X"00",X"40",X"60",X"F0",X"E0",X"E0",X"E0",X"C0",X"C0",X"80",X"80",X"C0",X"E0",X"00", + X"80",X"80",X"80",X"80",X"90",X"B0",X"B8",X"B0",X"B0",X"B0",X"B0",X"B0",X"B0",X"B8",X"B8",X"B0", + X"80",X"80",X"90",X"90",X"90",X"90",X"FC",X"B0",X"B0",X"B0",X"B0",X"B0",X"B0",X"B8",X"B8",X"B0", + X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"A0",X"A0",X"A0",X"B0",X"B0",X"B0",X"B8",X"B8",X"B0", + X"00",X"80",X"80",X"C0",X"EC",X"FE",X"FF",X"FF",X"CD",X"A8",X"3C",X"BC",X"D8",X"D8",X"C0",X"00", + X"C0",X"E0",X"E0",X"F0",X"F0",X"F0",X"F0",X"E0",X"E0",X"F0",X"F0",X"78",X"F8",X"80",X"60",X"00", + X"20",X"70",X"70",X"39",X"3E",X"FC",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FC",X"78",X"00",X"00", + X"00",X"00",X"84",X"8E",X"CE",X"CC",X"FC",X"FE",X"FF",X"FE",X"FC",X"FC",X"FC",X"FC",X"F8",X"F8", + X"C0",X"E0",X"E0",X"E0",X"C0",X"10",X"F8",X"F8",X"E4",X"FE",X"FE",X"FC",X"FC",X"FC",X"F0",X"EC", + X"00",X"20",X"66",X"F7",X"F3",X"FF",X"CF",X"DE",X"8C",X"C0",X"E0",X"F0",X"60",X"00",X"00",X"00", + X"70",X"54",X"72",X"7E",X"C7",X"E3",X"EA",X"E6",X"F0",X"EC",X"12",X"09",X"04",X"00",X"00",X"00", + X"60",X"F0",X"B0",X"EC",X"6E",X"96",X"DC",X"EC",X"E2",X"F3",X"E0",X"E4",X"56",X"5C",X"0E",X"00", + X"04",X"0E",X"5F",X"57",X"14",X"C4",X"E2",X"E0",X"E8",X"FC",X"F6",X"DE",X"EC",X"B0",X"F0",X"60", + X"00",X"00",X"00",X"10",X"92",X"A4",X"10",X"C0",X"CE",X"F3",X"E7",X"CF",X"EA",X"EA",X"A4",X"E8", + X"80",X"00",X"00",X"C0",X"00",X"10",X"94",X"C0",X"D8",X"C0",X"F8",X"CC",X"1C",X"28",X"18",X"60", + X"08",X"1C",X"66",X"1E",X"04",X"98",X"C0",X"D8",X"E0",X"D4",X"90",X"00",X"C0",X"00",X"00",X"80", + X"00",X"40",X"00",X"90",X"E6",X"BF",X"BF",X"E6",X"20",X"40",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"80",X"D0",X"E4",X"B8",X"70",X"D4",X"B8",X"E8",X"5C",X"3C",X"D4",X"34",X"2C",X"18",X"00", + X"00",X"0C",X"1E",X"18",X"D2",X"3C",X"5C",X"E8",X"B8",X"D4",X"70",X"B8",X"E4",X"D0",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"C0",X"20",X"10",X"F1",X"5D",X"5B",X"7E",X"CC",X"80",X"A0",X"80", + X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"40",X"20",X"A0",X"C0",X"C0",X"F0",X"B8",X"98",X"50", + X"30",X"F8",X"98",X"E8",X"C0",X"C0",X"A0",X"20",X"40",X"40",X"80",X"00",X"00",X"00",X"00",X"00", + X"98",X"90",X"30",X"60",X"60",X"C0",X"80",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"34",X"28",X"60",X"50",X"E0",X"A0",X"E0",X"E0",X"C0",X"C0",X"C0",X"C0",X"80",X"80",X"00",X"00", + X"CC",X"98",X"90",X"A0",X"20",X"40",X"40",X"C0",X"40",X"40",X"00",X"A4",X"F8",X"FC",X"78",X"30", + X"CC",X"98",X"30",X"60",X"E0",X"40",X"C0",X"80",X"00",X"04",X"00",X"81",X"07",X"1E",X"0C",X"00", + X"70",X"C0",X"82",X"00",X"00",X"00",X"18",X"30",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"04",X"20",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"8C",X"52",X"22",X"32",X"2C",X"20",X"10",X"08",X"05",X"03",X"07",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"6D",X"AF",X"AB",X"A9",X"A0",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"F0",X"B0",X"80",X"80",X"F0",X"30",X"F0",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"D8",X"D8",X"58",X"58",X"58",X"58",X"D8",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"FC",X"26",X"26",X"E6",X"26",X"26",X"26",X"26",X"FE",X"06",X"00",X"00",X"00", + X"00",X"00",X"00",X"FC",X"42",X"42",X"72",X"66",X"5E",X"52",X"42",X"FE",X"06",X"00",X"00",X"00", + X"00",X"00",X"00",X"1B",X"9B",X"9B",X"9F",X"8F",X"87",X"8F",X"9B",X"13",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FE",X"01",X"01",X"00",X"83",X"C3",X"CF",X"D3",X"D3",X"D3",X"D3",X"8F",X"00",X"01",X"01",X"FE", + X"00",X"00",X"00",X"FE",X"01",X"01",X"00",X"83",X"CF",X"D3",X"D3",X"8F",X"00",X"01",X"01",X"FE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"01",X"01",X"CF",X"D3",X"DF",X"01",X"01",X"FE", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7p.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7p.vhd new file mode 100644 index 00000000..646c43f5 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7p.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity obj_7p is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of obj_7p is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"1F",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"07",X"07",X"00",X"00",X"03",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"07",X"1F",X"3F",X"1F", + X"0C",X"18",X"1C",X"18",X"00",X"00",X"00",X"40",X"E0",X"C0",X"00",X"00",X"07",X"1F",X"3F",X"1F", + X"30",X"60",X"60",X"60",X"00",X"00",X"00",X"20",X"60",X"40",X"00",X"00",X"07",X"1F",X"3F",X"1F", + X"78",X"38",X"00",X"00",X"00",X"40",X"E0",X"C0",X"80",X"00",X"00",X"00",X"07",X"1F",X"3F",X"1F", + X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"10",X"1C",X"08",X"18",X"38",X"38",X"30",X"00",X"00",X"00",X"03",X"0F",X"1F",X"0F",X"0F", + X"00",X"00",X"20",X"30",X"18",X"08",X"00",X"00",X"00",X"00",X"00",X"03",X"0F",X"1F",X"0F",X"0F", + X"00",X"00",X"3C",X"00",X"00",X"40",X"E0",X"C0",X"00",X"1F",X"7F",X"3B",X"1E",X"00",X"00",X"00", + X"7C",X"3E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"40",X"70",X"38",X"10",X"40",X"E0",X"C0",X"00",X"00",X"1F",X"7F",X"FF",X"7F", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"0F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"0F",X"0F",X"0F",X"0E",X"04",X"00",X"00",X"00", + X"7D",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"20",X"E0",X"F0",X"00",X"00",X"00",X"00",X"00",X"1F",X"7F",X"FF",X"7F", + X"00",X"00",X"00",X"00",X"20",X"E0",X"F0",X"00",X"00",X"00",X"00",X"00",X"1F",X"7F",X"FF",X"7F", + X"00",X"00",X"00",X"00",X"20",X"E0",X"F0",X"00",X"00",X"00",X"00",X"00",X"1F",X"7F",X"FF",X"7F", + X"78",X"00",X"00",X"00",X"00",X"C0",X"E0",X"00",X"00",X"0F",X"3F",X"1F",X"1F",X"0F",X"00",X"00", + X"78",X"00",X"00",X"C0",X"C0",X"00",X"00",X"1F",X"7F",X"3F",X"1E",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"09",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"30",X"70",X"E0",X"E0",X"C0",X"00",X"01",X"03",X"03",X"07",X"07",X"07",X"EF",X"ED",X"2C",X"07", + X"30",X"70",X"E0",X"E0",X"C0",X"80",X"C1",X"C3",X"03",X"07",X"07",X"07",X"0F",X"0D",X"0C",X"07", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE",X"11",X"11",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"11",X"11",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"11",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"06",X"47",X"E0",X"C0",X"C0",X"40",X"00",X"00",X"40",X"C0",X"C0",X"C1",X"0B",X"1F", + X"0F",X"0F",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"E0",X"EF",X"7F",X"3F",X"1F", + X"00",X"00",X"02",X"0E",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"0F",X"1F",X"0F",X"0F", + X"00",X"00",X"3F",X"40",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"40",X"3F", + X"08",X"09",X"06",X"04",X"03",X"00",X"00",X"00",X"00",X"40",X"40",X"20",X"20",X"10",X"08",X"06", + X"5B",X"BF",X"1B",X"11",X"41",X"01",X"01",X"02",X"12",X"03",X"02",X"02",X"06",X"06",X"1A",X"0A", + X"0A",X"09",X"09",X"06",X"01",X"00",X"00",X"00",X"00",X"40",X"40",X"20",X"20",X"10",X"08",X"06", + X"35",X"7F",X"23",X"11",X"01",X"24",X"85",X"0A",X"0C",X"0C",X"0C",X"19",X"19",X"09",X"09",X"09", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"BE",X"BE",X"3E",X"3E",X"1E", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FF",X"FF",X"FF",X"FF",X"FC",X"FC",X"BE",X"BE",X"3E",X"3E",X"1E", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"FE",X"FC",X"FC",X"BE",X"BE",X"3E",X"3E",X"1E", + X"1E",X"7E",X"FE",X"FE",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"BE",X"BE",X"3E",X"3E",X"1E", + X"1E",X"7E",X"FE",X"FE",X"FC",X"FE",X"FE",X"FE",X"FE",X"FC",X"FC",X"BE",X"BE",X"3E",X"3E",X"1E", + X"3E",X"7E",X"FE",X"FE",X"FC",X"BE",X"BE",X"3E",X"3E",X"FC",X"FC",X"BE",X"BE",X"3E",X"3E",X"1E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"BE",X"BE",X"BE",X"BE",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"BF",X"BF",X"BF",X"BF",X"FF",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"1F",X"2F",X"4F",X"17",X"22",X"14",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"20",X"60",X"C0",X"C0",X"04",X"03",X"07",X"17",X"1F",X"3F",X"3F",X"7F",X"FF",X"DD",X"5F",X"3F", + X"20",X"60",X"C0",X"C0",X"04",X"83",X"C7",X"EF",X"7F",X"7F",X"3F",X"1F",X"0F",X"1D",X"1F",X"3F", + X"2F",X"0F",X"1F",X"0F",X"17",X"07",X"09",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"02",X"03",X"60",X"40",X"40",X"00",X"04",X"0E",X"4E",X"FE",X"FE",X"FF",X"0B",X"1F", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"FF",X"FE",X"00",X"FF",X"FF",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"08",X"10",X"20",X"20",X"00",X"80",X"40",X"00",X"70",X"7F",X"F3",X"E7",X"4F",X"0E",X"06",X"00", + X"08",X"10",X"20",X"20",X"00",X"00",X"40",X"80",X"30",X"3F",X"33",X"73",X"71",X"21",X"00",X"00", + X"E0",X"7F",X"61",X"C0",X"00",X"80",X"00",X"40",X"40",X"20",X"10",X"00",X"00",X"00",X"00",X"00", + X"70",X"7D",X"7F",X"61",X"C0",X"00",X"80",X"00",X"40",X"40",X"20",X"10",X"00",X"00",X"00",X"00", + X"FB",X"7F",X"61",X"C0",X"00",X"80",X"00",X"40",X"40",X"20",X"10",X"00",X"00",X"00",X"00",X"00", + X"E1",X"F9",X"7F",X"61",X"C0",X"00",X"80",X"00",X"40",X"40",X"20",X"10",X"00",X"00",X"00",X"00", + X"F9",X"FF",X"61",X"C0",X"00",X"80",X"00",X"40",X"40",X"20",X"10",X"00",X"00",X"00",X"00",X"00", + X"1E",X"1C",X"41",X"21",X"00",X"03",X"07",X"0E",X"0D",X"03",X"03",X"03",X"03",X"01",X"01",X"00", + X"01",X"0D",X"0E",X"23",X"40",X"03",X"07",X"0E",X"0D",X"03",X"03",X"03",X"03",X"01",X"01",X"00", + X"0E",X"1C",X"00",X"10",X"21",X"03",X"07",X"06",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00", + X"F4",X"72",X"30",X"00",X"00",X"00",X"CB",X"CB",X"7B",X"37",X"03",X"03",X"03",X"01",X"01",X"00", + X"03",X"03",X"02",X"00",X"00",X"00",X"06",X"1D",X"3D",X"7B",X"F7",X"E7",X"67",X"26",X"02",X"01", + X"06",X"08",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"3D",X"0F",X"07",X"04",X"7E",X"37",X"0F", + X"06",X"08",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"08",X"10",X"20",X"20",X"00",X"00",X"00",X"00",X"70",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"08",X"10",X"20",X"20",X"00",X"00",X"40",X"00",X"70",X"7F",X"37",X"00",X"00",X"00",X"00",X"00", + X"08",X"10",X"20",X"20",X"00",X"80",X"40",X"00",X"70",X"7F",X"73",X"27",X"01",X"00",X"00",X"00", + X"00",X"00",X"08",X"08",X"08",X"08",X"08",X"0C",X"06",X"03",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"0C",X"06",X"03",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"06",X"03",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"08",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"01", + X"00",X"00",X"00",X"00",X"06",X"08",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00", + X"00",X"00",X"06",X"08",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00", + X"3F",X"7F",X"67",X"31",X"19",X"1C",X"0E",X"0C",X"09",X"03",X"01",X"01",X"00",X"00",X"00",X"00", + X"1F",X"4E",X"64",X"31",X"19",X"1C",X"1C",X"0C",X"08",X"00",X"01",X"01",X"01",X"01",X"00",X"00", + X"1F",X"0E",X"04",X"21",X"11",X"10",X"0C",X"0C",X"00",X"09",X"0A",X"02",X"01",X"01",X"00",X"00", + X"0C",X"04",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"21",X"10",X"00",X"00",X"00",X"00", + X"10",X"01",X"00",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"08",X"40",X"00",X"01",X"00",X"00", + X"4C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"C0",X"C0",X"E0",X"F0",X"F0",X"F8",X"3C",X"0C",X"02",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"8C",X"8E",X"4F",X"0F",X"0F",X"07",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"F0",X"E8",X"DC",X"BE",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"E0",X"70",X"1F",X"87",X"E0",X"78",X"1F",X"07",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"E0",X"78",X"1F",X"87",X"E0",X"78",X"1F",X"07",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1F",X"3F",X"00",X"60",X"6F",X"0F",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"E0",X"0E",X"0E",X"10",X"11",X"E1",X"E0",X"0E",X"0E", + X"00",X"00",X"00",X"E0",X"EE",X"0E",X"10",X"10",X"01",X"E1",X"EE",X"0E",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"0E",X"E1",X"E1",X"10",X"10",X"0E",X"0E",X"E0",X"E0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"FF",X"FF",X"BB",X"BB",X"B7",X"7F",X"DD",X"EF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"FF",X"FF",X"BB",X"BB",X"B7",X"7F",X"DD",X"EF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"7F",X"7B",X"77",X"FF",X"FF",X"FF",X"7F", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"0F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"10",X"09",X"09",X"0F",X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"80",X"61",X"12",X"1E",X"0B",X"79",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C1",X"C3",X"F3",X"3F",X"0F",X"03",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"38",X"B8",X"FC",X"7C",X"3C",X"1F",X"07",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"81",X"C3",X"C3",X"C3",X"FF",X"FF",X"00", + X"00",X"03",X"0E",X"18",X"12",X"36",X"2A",X"2B",X"29",X"28",X"28",X"14",X"1B",X"0C",X"03",X"00", + X"00",X"00",X"00",X"01",X"02",X"02",X"22",X"36",X"3D",X"11",X"13",X"08",X"04",X"03",X"00",X"00", + X"00",X"03",X"0C",X"0B",X"16",X"14",X"14",X"13",X"0C",X"03",X"00",X"00",X"20",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"0E",X"0A",X"15",X"16",X"15",X"15",X"0B",X"08",X"07",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"0A",X"0E",X"05",X"02",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"04",X"05",X"05",X"04",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"05",X"04",X"05",X"02",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"01",X"02",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"01",X"03",X"03",X"06",X"06",X"06",X"06",X"06",X"03",X"03",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"08",X"08",X"00",X"00",X"02",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"02",X"01",X"00",X"00",X"00",X"00", + X"7F",X"E0",X"1F",X"30",X"3F",X"1F",X"1F",X"0F",X"07",X"07",X"03",X"01",X"00",X"00",X"00",X"00", + X"54",X"54",X"50",X"43",X"77",X"07",X"17",X"27",X"72",X"50",X"52",X"42",X"20",X"00",X"00",X"00", + X"A4",X"A4",X"90",X"43",X"77",X"07",X"37",X"67",X"E2",X"A0",X"82",X"C2",X"00",X"00",X"00",X"00", + X"04",X"A8",X"A8",X"50",X"43",X"37",X"07",X"37",X"27",X"72",X"68",X"62",X"32",X"18",X"00",X"00", + X"A8",X"A8",X"92",X"42",X"72",X"26",X"57",X"E7",X"F7",X"D2",X"D0",X"40",X"71",X"03",X"04",X"08", + X"54",X"54",X"22",X"32",X"02",X"06",X"37",X"67",X"C7",X"E2",X"F0",X"D0",X"D1",X"E3",X"74",X"38", + X"24",X"48",X"42",X"42",X"32",X"06",X"77",X"C7",X"E7",X"F2",X"D0",X"D0",X"61",X"33",X"04",X"08", + X"60",X"6A",X"C0",X"F0",X"E3",X"C7",X"57",X"67",X"0F",X"77",X"48",X"90",X"20",X"00",X"00",X"00", + X"60",X"6A",X"C0",X"F0",X"E3",X"C7",X"57",X"67",X"0F",X"17",X"28",X"28",X"24",X"20",X"10",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"F1",X"FF",X"63",X"C0",X"00",X"00",X"00",X"40",X"40",X"20",X"10",X"00",X"00",X"00",X"00",X"00", + X"CF",X"7F",X"3F",X"63",X"01",X"03",X"23",X"27",X"15",X"17",X"06",X"04",X"00",X"00",X"00",X"00", + X"38",X"1D",X"3F",X"07",X"06",X"07",X"27",X"7F",X"7F",X"7F",X"5B",X"31",X"31",X"10",X"00",X"00", + X"38",X"1F",X"1F",X"08",X"0B",X"4F",X"CF",X"FF",X"FF",X"BE",X"EE",X"C6",X"46",X"44",X"00",X"00", + X"FF",X"00",X"00",X"00",X"00",X"FF",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"1F",X"1F",X"0F",X"07",X"03",X"01",X"00",X"00", + X"7F",X"7F",X"7F",X"7F",X"3B",X"30",X"33",X"27",X"20",X"26",X"20",X"26",X"2B",X"24",X"33",X"38", + X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FC",X"3F", + X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"1F",X"1F",X"0F",X"07",X"03",X"01",X"00",X"00", + X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3C",X"3F",X"7F",X"7F",X"7F",X"7F", + X"3F",X"7F",X"7F",X"7F",X"7F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F", + X"00",X"00",X"01",X"03",X"07",X"0E",X"1F",X"1E",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3F",X"3C", + X"03",X"00",X"00",X"00",X"F8",X"87",X"38",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"E0",X"00",X"00",X"00",X"0F",X"F8",X"07",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FC",X"00",X"00",X"00",X"01",X"FF",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"10",X"88",X"62",X"32",X"0A",X"3E",X"2F",X"77",X"77",X"FA",X"D8",X"CE",X"CD",X"67",X"64",X"38", + X"04",X"08",X"08",X"0B",X"03",X"02",X"01",X"01",X"01",X"03",X"07",X"06",X"06",X"06",X"06",X"02", + X"05",X"09",X"08",X"03",X"03",X"03",X"1B",X"33",X"63",X"F1",X"FB",X"DB",X"CB",X"6B",X"63",X"30", + X"04",X"08",X"08",X"0B",X"03",X"02",X"01",X"01",X"01",X"03",X"07",X"06",X"06",X"06",X"06",X"02", + X"00",X"03",X"17",X"1F",X"00",X"05",X"05",X"01",X"0C",X"0E",X"0A",X"1E",X"34",X"0E",X"3E",X"1C", + X"00",X"0B",X"17",X"0F",X"00",X"05",X"05",X"01",X"1C",X"7E",X"FA",X"F6",X"E0",X"40",X"00",X"00", + X"00",X"03",X"17",X"1F",X"00",X"25",X"85",X"C1",X"FC",X"7E",X"0A",X"06",X"00",X"00",X"00",X"00", + X"07",X"2F",X"B0",X"C8",X"66",X"23",X"0C",X"1E",X"0A",X"06",X"00",X"00",X"00",X"00",X"00",X"00", + X"46",X"EA",X"FE",X"1C",X"01",X"05",X"05",X"00",X"1F",X"17",X"0B",X"00",X"00",X"00",X"00",X"00", + X"46",X"EA",X"FE",X"1C",X"01",X"05",X"05",X"00",X"1F",X"27",X"03",X"00",X"00",X"00",X"00",X"00", + X"3F",X"7F",X"3F",X"3F",X"1A",X"1D",X"0F",X"0E",X"0E",X"0E",X"00",X"00",X"00",X"00",X"00",X"00", + X"3F",X"7F",X"3F",X"3A",X"1D",X"1F",X"00",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"3F",X"7F",X"3F",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"1F",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"1F",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"3F",X"7F",X"3F",X"3F",X"1A",X"1D",X"0F",X"0E",X"0E",X"0E",X"05",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"02",X"07",X"0A",X"0A",X"0F",X"07",X"02",X"0A",X"07",X"02",X"00",X"00", + X"00",X"FF",X"FF",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", + X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", + X"00",X"00",X"00",X"20",X"20",X"60",X"60",X"60",X"60",X"60",X"60",X"20",X"20",X"00",X"00",X"00", + X"00",X"00",X"10",X"30",X"30",X"70",X"70",X"70",X"70",X"70",X"70",X"70",X"30",X"10",X"00",X"00", + X"00",X"08",X"18",X"38",X"38",X"78",X"78",X"78",X"78",X"78",X"78",X"38",X"38",X"18",X"08",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"01",X"03",X"03",X"06",X"06",X"06",X"06",X"06",X"03",X"03",X"01",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"08",X"08",X"00",X"00",X"02",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"02",X"01",X"00",X"00",X"00", + X"00",X"00",X"03",X"04",X"0B",X"0A",X"0A",X"0A",X"0A",X"0A",X"0B",X"04",X"03",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"00",X"02",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"04",X"09",X"0A",X"00",X"0A",X"09",X"04",X"03",X"00",X"00",X"00",X"00", + X"00",X"00",X"07",X"08",X"13",X"16",X"14",X"00",X"14",X"16",X"13",X"08",X"07",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"03",X"05",X"07",X"02",X"07",X"05",X"03",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"02",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"04",X"19",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"04",X"04",X"04",X"04",X"05",X"0B",X"00", + X"00",X"00",X"00",X"03",X"04",X"09",X"09",X"09",X"09",X"04",X"04",X"02",X"02",X"05",X"09",X"00", + X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"00", + X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"00", + X"00",X"00",X"01",X"01",X"01",X"01",X"01",X"01",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"00", + X"08",X"10",X"20",X"20",X"00",X"00",X"40",X"80",X"70",X"3F",X"33",X"73",X"71",X"21",X"00",X"00", + X"36",X"08",X"20",X"20",X"30",X"70",X"78",X"24",X"1E",X"3F",X"38",X"13",X"07",X"07",X"05",X"03", + X"00",X"00",X"00",X"06",X"0F",X"07",X"03",X"31",X"7A",X"B2",X"FE",X"FE",X"DF",X"5E",X"3C",X"18", + X"00",X"03",X"5B",X"FB",X"D5",X"DC",X"F4",X"F3",X"FE",X"FC",X"7C",X"34",X"00",X"00",X"00",X"00", + X"0F",X"19",X"1F",X"1F",X"1E",X"0F",X"0F",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"18",X"20",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"44",X"9C",X"0E",X"0E",X"04", + X"30",X"65",X"D0",X"D0",X"F3",X"E7",X"5B",X"33",X"03",X"39",X"2C",X"48",X"90",X"00",X"00",X"00", + X"3C",X"70",X"6C",X"78",X"20",X"1F",X"07",X"1B",X"23",X"29",X"09",X"00",X"03",X"00",X"00",X"01", + X"01",X"00",X"00",X"03",X"00",X"08",X"2B",X"27",X"1B",X"03",X"1B",X"21",X"7C",X"30",X"1E",X"1C", + X"00",X"00",X"00",X"10",X"92",X"4A",X"34",X"0F",X"67",X"D7",X"E7",X"E7",X"B1",X"41",X"2A",X"00", + X"00",X"61",X"F2",X"EA",X"A4",X"25",X"0F",X"0F",X"0F",X"27",X"17",X"01",X"04",X"02",X"02",X"00", + X"00",X"02",X"04",X"00",X"10",X"27",X"27",X"0F",X"0F",X"6F",X"C3",X"A1",X"EA",X"FA",X"39",X"10", + X"06",X"0A",X"0E",X"1C",X"41",X"E5",X"E5",X"C0",X"1F",X"17",X"0B",X"00",X"00",X"00",X"00",X"00", + X"0E",X"1F",X"19",X"16",X"00",X"08",X"16",X"07",X"03",X"03",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"03",X"07",X"16",X"08",X"00",X"0E",X"1D",X"19",X"0A", + X"00",X"00",X"00",X"00",X"00",X"05",X"0B",X"0F",X"40",X"D2",X"E2",X"78",X"3E",X"07",X"05",X"03", + X"00",X"30",X"79",X"1A",X"4B",X"73",X"25",X"08",X"62",X"D4",X"F1",X"62",X"18",X"34",X"3C",X"18", + X"18",X"3C",X"34",X"18",X"62",X"F1",X"D4",X"62",X"08",X"25",X"33",X"2B",X"2E",X"35",X"18",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"70",X"18",X"18",X"18",X"18",X"70",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"06",X"66",X"76",X"5E",X"4E",X"46",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"00",X"00", + X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"07",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"07",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"00",X"7F",X"7F",X"00",X"D9",X"FB",X"AA",X"AA",X"AA",X"AA",X"AA",X"A9",X"00",X"7F",X"7F",X"00", + X"00",X"00",X"00",X"00",X"7F",X"7F",X"00",X"D9",X"FA",X"AA",X"AA",X"A9",X"00",X"7F",X"7F",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7F",X"7F",X"FB",X"AA",X"AB",X"7F",X"7F",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7s.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7s.vhd new file mode 100644 index 00000000..958c2e11 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7s.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity obj_7s is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of obj_7s is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"78",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"80",X"00",X"F0",X"E0",X"00",X"00",X"0C",X"0C",X"0C",X"00",X"00",X"00",X"E0",X"F0",X"F8",X"FC", + X"00",X"00",X"00",X"1C",X"1C",X"1C",X"04",X"00",X"00",X"03",X"03",X"03",X"E0",X"F0",X"F8",X"FC", + X"00",X"00",X"10",X"38",X"1C",X"14",X"00",X"00",X"04",X"0E",X"0E",X"04",X"E0",X"F0",X"F8",X"FC", + X"1E",X"1C",X"00",X"00",X"00",X"02",X"07",X"03",X"00",X"00",X"00",X"00",X"E0",X"F0",X"F8",X"FC", + X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"F0",X"E0",X"00",X"00",X"00",X"00",X"00",X"03",X"03",X"03",X"00",X"F0",X"F8",X"FC",X"FE",X"9C", + X"3C",X"38",X"00",X"00",X"18",X"18",X"1C",X"10",X"00",X"00",X"00",X"F0",X"F8",X"FC",X"FE",X"BC", + X"00",X"00",X"0F",X"00",X"00",X"03",X"03",X"00",X"00",X"70",X"FC",X"FE",X"FC",X"00",X"00",X"00", + X"E0",X"00",X"00",X"20",X"70",X"78",X"38",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"06",X"06",X"06",X"02",X"02",X"00",X"00",X"80",X"C0",X"E0",X"F0", + X"10",X"38",X"70",X"60",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"01",X"07",X"07",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"08",X"1C",X"0E",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"0E",X"1E",X"8C",X"C0",X"E0",X"F0", + X"08",X"1C",X"0E",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"0E",X"1E",X"8C",X"C0",X"E0",X"F0", + X"08",X"1C",X"0E",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"0E",X"1E",X"8C",X"C0",X"E0",X"F0", + X"1E",X"00",X"00",X"00",X"00",X"03",X"03",X"00",X"00",X"F0",X"F8",X"FC",X"38",X"20",X"00",X"00", + X"1E",X"00",X"00",X"03",X"07",X"00",X"00",X"70",X"FC",X"FE",X"3C",X"00",X"00",X"00",X"00",X"00", + X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"0C",X"0E",X"07",X"07",X"03",X"00",X"C0",X"E0",X"F0",X"F0",X"F0",X"F0",X"FB",X"DB",X"9A",X"E0", + X"0C",X"0E",X"07",X"07",X"03",X"01",X"C3",X"E3",X"F0",X"F0",X"F0",X"F0",X"F8",X"D8",X"98",X"E0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"EE",X"10",X"10",X"EE",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"10",X"10",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"10",X"EE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"03",X"03",X"03",X"F0",X"88",X"BC", + X"FE",X"9C",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"04",X"06",X"03",X"03",X"01",X"00",X"0E",X"0E",X"06",X"00",X"00",X"E0",X"F0",X"F8",X"FC", + X"00",X"04",X"06",X"03",X"03",X"01",X"00",X"07",X"03",X"00",X"00",X"F0",X"F8",X"FC",X"FE",X"9C", + X"00",X"00",X"FC",X"02",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"02",X"FC", + X"50",X"90",X"60",X"A0",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"EC",X"FE",X"6A",X"40",X"80",X"80",X"44",X"40",X"20",X"20",X"A2",X"40",X"40",X"68",X"68",X"50", + X"70",X"30",X"20",X"60",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"7A",X"FF",X"D2",X"80",X"C9",X"40",X"40",X"90",X"D0",X"D8",X"68",X"28",X"28",X"10",X"10",X"90", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"BE",X"BE",X"3E",X"3E",X"1E", + X"7E",X"7E",X"7E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FE",X"7E",X"7E",X"FA",X"F2",X"F0",X"F0",X"F0", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"F0",X"FC",X"FE",X"FE",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"FA",X"F2",X"F0",X"F0",X"F0", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"F8",X"FC",X"FE",X"FE",X"7E",X"F0",X"FC",X"FE",X"FE",X"7E",X"7E",X"FA",X"F2",X"F0",X"F0",X"F0", + X"1E",X"1E",X"1E",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"52",X"F7",X"F7",X"F7", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"F7",X"F7",X"F7",X"F7",X"FF",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"F4",X"E2",X"F0",X"48",X"20",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"04",X"06",X"03",X"03",X"40",X"80",X"C0",X"D0",X"F0",X"F8",X"F8",X"FC",X"FF",X"77",X"F4",X"F8", + X"04",X"06",X"03",X"03",X"40",X"81",X"C3",X"D7",X"FE",X"FE",X"FC",X"F8",X"F0",X"70",X"F0",X"F8", + X"FE",X"FC",X"D0",X"E0",X"F0",X"E8",X"40",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"90",X"62",X"77",X"F7",X"EF",X"F0",X"FA",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00", + X"36",X"36",X"36",X"36",X"36",X"36",X"76",X"66",X"EE",X"CC",X"9C",X"38",X"F8",X"E0",X"80",X"00", + X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36",X"36", + X"00",X"00",X"00",X"00",X"20",X"30",X"38",X"7C",X"DE",X"BE",X"1A",X"50",X"70",X"70",X"50",X"30", + X"00",X"00",X"00",X"00",X"2C",X"3E",X"3F",X"7F",X"CD",X"A8",X"38",X"A8",X"D8",X"D8",X"C0",X"00", + X"F0",X"E0",X"C0",X"F0",X"7C",X"70",X"70",X"33",X"3F",X"7F",X"65",X"46",X"46",X"04",X"00",X"00", + X"E0",X"E0",X"DC",X"F8",X"F0",X"78",X"7C",X"7B",X"37",X"7F",X"65",X"46",X"46",X"04",X"00",X"00", + X"F0",X"E0",X"C0",X"F0",X"78",X"7C",X"7B",X"37",X"7F",X"65",X"46",X"46",X"04",X"00",X"00",X"00", + X"C0",X"F8",X"F0",X"C0",X"F0",X"78",X"7C",X"7B",X"37",X"7F",X"65",X"46",X"46",X"04",X"00",X"00", + X"F8",X"F0",X"C0",X"F0",X"78",X"7C",X"7B",X"37",X"7F",X"65",X"46",X"46",X"04",X"00",X"00",X"00", + X"00",X"00",X"E0",X"C0",X"00",X"E0",X"E0",X"30",X"00",X"CC",X"9C",X"FC",X"F4",X"0C",X"08",X"80", + X"C0",X"80",X"00",X"00",X"00",X"E0",X"E0",X"30",X"00",X"CC",X"9C",X"FC",X"F4",X"0C",X"08",X"80", + X"F0",X"E0",X"00",X"00",X"F0",X"F0",X"18",X"80",X"E6",X"CE",X"FE",X"FA",X"86",X"84",X"40",X"00", + X"78",X"70",X"E0",X"00",X"00",X"0E",X"7C",X"78",X"80",X"CC",X"9C",X"F4",X"8C",X"8C",X"88",X"C0", + X"C0",X"80",X"00",X"08",X"0E",X"0E",X"06",X"82",X"00",X"00",X"D8",X"38",X"F8",X"18",X"10",X"00", + X"2E",X"1E",X"0C",X"08",X"08",X"08",X"0B",X"1F",X"3E",X"FC",X"E0",X"C0",X"80",X"00",X"00",X"00", + X"20",X"10",X"08",X"08",X"08",X"08",X"08",X"18",X"30",X"E0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"20",X"20",X"20",X"60",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"30",X"28",X"28",X"68",X"F8",X"F0",X"20",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"20",X"38",X"30",X"70",X"D0",X"9A",X"3E",X"9E",X"0C",X"00",X"00",X"00", + X"20",X"10",X"08",X"08",X"00",X"00",X"00",X"00",X"1C",X"F0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"60",X"10",X"00",X"00",X"00",X"04",X"04",X"08",X"10",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"C0",X"20",X"00",X"04",X"04",X"04",X"08",X"08",X"10",X"20",X"C0",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"10",X"08",X"08",X"08",X"08",X"08",X"18",X"30",X"E0", + X"00",X"00",X"00",X"20",X"20",X"10",X"08",X"08",X"08",X"08",X"08",X"18",X"30",X"E0",X"00",X"00", + X"00",X"20",X"20",X"10",X"08",X"08",X"08",X"08",X"08",X"18",X"30",X"E0",X"00",X"00",X"00",X"00", + X"FC",X"FE",X"FE",X"FE",X"DE",X"1C",X"3C",X"38",X"38",X"38",X"90",X"D0",X"A0",X"80",X"80",X"00", + X"7C",X"7E",X"F6",X"E6",X"CE",X"1C",X"2C",X"B8",X"38",X"38",X"10",X"80",X"80",X"80",X"80",X"00", + X"7C",X"F0",X"E4",X"C8",X"88",X"10",X"28",X"30",X"38",X"08",X"80",X"E0",X"A0",X"80",X"80",X"00", + X"18",X"14",X"08",X"00",X"00",X"00",X"08",X"04",X"04",X"00",X"00",X"88",X"10",X"00",X"00",X"00", + X"06",X"03",X"00",X"00",X"00",X"10",X"02",X"01",X"01",X"10",X"20",X"00",X"86",X"80",X"80",X"00", + X"04",X"0C",X"80",X"02",X"00",X"00",X"60",X"02",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"E0",X"F0",X"E8",X"DC",X"BE",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"0F",X"0F",X"0F",X"0E",X"8C",X"C8",X"E0",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"F8",X"FE",X"FC",X"F0",X"C0",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"07",X"0E",X"F8",X"E1",X"07",X"1E",X"F8",X"E0",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"FC",X"00",X"06",X"F6",X"F0",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"07",X"1E",X"F8",X"E1",X"07",X"1E",X"F8",X"E0",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"0E",X"E1",X"E1",X"10",X"10",X"0E",X"0E",X"E0",X"E0", + X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"E0",X"0E",X"0E",X"10",X"10",X"E0",X"E0",X"0E",X"0E", + X"00",X"00",X"00",X"0E",X"EE",X"E1",X"11",X"10",X"00",X"0E",X"EE",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"BA",X"BB",X"77",X"FF",X"FF",X"FE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"FF",X"FF",X"BB",X"BB",X"B7",X"FF",X"DD",X"EF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"FF",X"FF",X"BB",X"BB",X"B7",X"FF",X"DD",X"EF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"E8",X"B0",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"06",X"0C",X"18",X"30",X"EE",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"81",X"C3",X"C3",X"C3",X"FF",X"FF",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1C",X"1D",X"3F",X"3E",X"3C",X"F8",X"E0",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"03",X"83",X"C3",X"CF",X"FC",X"F0",X"C0",X"00",X"00", + X"00",X"E0",X"70",X"C8",X"80",X"80",X"80",X"44",X"A0",X"B0",X"D0",X"D2",X"A0",X"40",X"80",X"00", + X"00",X"60",X"90",X"68",X"F4",X"94",X"94",X"94",X"B4",X"6C",X"C8",X"18",X"30",X"E0",X"00",X"00", + X"00",X"E0",X"10",X"C8",X"68",X"34",X"14",X"D4",X"74",X"94",X"C4",X"48",X"50",X"60",X"80",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"40",X"40",X"40",X"80",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"70",X"90",X"68",X"A8",X"A8",X"C8",X"30",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"C0",X"20",X"D0",X"50",X"D0",X"50",X"A0",X"60",X"20",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"90",X"50",X"20",X"C0",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"80",X"40",X"A0",X"A0",X"60",X"20",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"20",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"80",X"08",X"00",X"00",X"00",X"04",X"00",X"00",X"00",X"08",X"80",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00", + X"00",X"C0",X"E0",X"60",X"B0",X"B0",X"B0",X"B0",X"B0",X"F0",X"E0",X"C0",X"00",X"00",X"00",X"00", + X"00",X"00",X"20",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"20",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"3C",X"E0",X"0A",X"E0",X"FE",X"7E",X"FC",X"F8",X"F0",X"80",X"00",X"00",X"00",X"00",X"00", + X"2A",X"2A",X"12",X"C4",X"FC",X"C0",X"9C",X"C6",X"8E",X"16",X"8C",X"98",X"00",X"00",X"00",X"00", + X"20",X"29",X"12",X"C2",X"FC",X"C0",X"98",X"C4",X"8E",X"0E",X"8A",X"82",X"04",X"00",X"00",X"00", + X"94",X"54",X"54",X"14",X"C4",X"F8",X"C0",X"9C",X"CE",X"8B",X"09",X"85",X"80",X"00",X"00",X"00", + X"29",X"29",X"92",X"86",X"BC",X"E0",X"D8",X"8C",X"C6",X"8F",X"1F",X"3B",X"23",X"87",X"5F",X"3C", + X"52",X"52",X"84",X"98",X"A0",X"EE",X"D7",X"8F",X"CB",X"8B",X"03",X"07",X"06",X"80",X"40",X"20", + X"48",X"24",X"84",X"84",X"B8",X"E0",X"DC",X"86",X"CF",X"9F",X"1B",X"17",X"07",X"8E",X"4C",X"20", + X"0C",X"A6",X"0B",X"0B",X"CF",X"E7",X"DA",X"CC",X"C0",X"9C",X"24",X"12",X"09",X"00",X"00",X"00", + X"0C",X"A6",X"0B",X"0B",X"CF",X"E7",X"DA",X"CC",X"C0",X"90",X"28",X"28",X"48",X"08",X"10",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"E0",X"C0",X"9C",X"BE",X"60",X"60",X"60",X"70",X"71",X"7F",X"1F",X"1F",X"16",X"1E",X"1C",X"18", + X"0E",X"FC",X"F8",X"FC",X"F8",X"F8",X"F0",X"F8",X"F8",X"F8",X"78",X"30",X"30",X"20",X"40",X"00", + X"1E",X"F8",X"FE",X"F0",X"70",X"B0",X"E0",X"C8",X"D0",X"D0",X"C0",X"80",X"00",X"00",X"00",X"00", + X"3B",X"FE",X"FE",X"E2",X"41",X"C0",X"C0",X"80",X"00",X"04",X"18",X"00",X"00",X"00",X"00",X"00", + X"F0",X"10",X"10",X"10",X"1F",X"F0",X"1F",X"DF",X"DF",X"DF",X"DF",X"FF",X"FF",X"DF",X"DF",X"FF", + X"A0",X"A0",X"A0",X"D0",X"E8",X"F7",X"F8",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"7F",X"00", + X"D0",X"D0",X"D0",X"FF",X"20",X"00",X"20",X"20",X"20",X"20",X"80",X"20",X"20",X"20",X"20",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"A0",X"A0",X"A0",X"A0",X"A0",X"20",X"FE", + X"A0",X"A0",X"A0",X"D0",X"E8",X"F4",X"FB",X"FC",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"7F",X"00", + X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"20",X"FE",X"D0",X"D0",X"D0",X"FF", + X"FE",X"D3",X"D3",X"D3",X"FF",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0",X"A0", + X"00",X"7F",X"FF",X"80",X"00",X"7F",X"00",X"FF",X"FF",X"FF",X"FF",X"FF",X"F3",X"E1",X"E0",X"00", + X"F0",X"10",X"10",X"10",X"1F",X"F0",X"1F",X"DF",X"DF",X"DF",X"DF",X"FF",X"FF",X"DF",X"DF",X"FF", + X"70",X"10",X"10",X"10",X"9F",X"70",X"9F",X"DF",X"DF",X"DF",X"DF",X"FF",X"FF",X"DF",X"DF",X"FF", + X"10",X"10",X"10",X"1F",X"F0",X"1F",X"5F",X"DF",X"DF",X"DF",X"DF",X"DF",X"FF",X"FF",X"DF",X"DF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"10",X"24",X"88",X"98",X"A4",X"EC",X"ED",X"D9",X"FB",X"BB",X"3F",X"9F",X"1F",X"8E",X"4C",X"20", + X"40",X"20",X"A0",X"E0",X"C0",X"C0",X"C0",X"C0",X"80",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"80", + X"50",X"48",X"08",X"F0",X"F0",X"E0",X"FC",X"E6",X"E3",X"47",X"6D",X"6B",X"6B",X"67",X"6E",X"00", + X"40",X"20",X"A0",X"E0",X"C0",X"C0",X"C0",X"C0",X"80",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"80", + X"00",X"80",X"D0",X"F0",X"00",X"40",X"40",X"00",X"60",X"E0",X"A0",X"F0",X"58",X"E0",X"F8",X"70", + X"00",X"80",X"D0",X"F0",X"00",X"40",X"40",X"00",X"70",X"FC",X"BE",X"DE",X"0E",X"04",X"00",X"00", + X"00",X"A0",X"D0",X"E0",X"00",X"48",X"42",X"06",X"7E",X"FC",X"A0",X"C0",X"00",X"00",X"00",X"00", + X"C0",X"E8",X"1A",X"26",X"CC",X"88",X"60",X"F0",X"A0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00", + X"C3",X"AF",X"FE",X"70",X"00",X"40",X"40",X"00",X"F0",X"D0",X"A0",X"00",X"00",X"00",X"00",X"00", + X"C3",X"AF",X"FE",X"70",X"00",X"40",X"40",X"00",X"F0",X"C8",X"80",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FE",X"FE",X"FE",X"AE",X"5C",X"FC",X"B8",X"B8",X"B8",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FE",X"FE",X"AE",X"5E",X"FC",X"00",X"A0",X"A0",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FE",X"FE",X"00",X"00",X"00",X"00",X"A0",X"A0",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"F8",X"04",X"00",X"00",X"00",X"00",X"A0",X"A0",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"F8",X"04",X"00",X"00",X"00",X"00",X"A0",X"A0",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FE",X"FE",X"FE",X"AE",X"5C",X"FC",X"B8",X"B8",X"B8",X"B0",X"D0",X"80",X"80",X"00",X"00", + X"00",X"00",X"00",X"00",X"80",X"C0",X"A0",X"80",X"C0",X"E0",X"A0",X"A0",X"C0",X"80",X"00",X"00", + X"00",X"F8",X"FC",X"06",X"06",X"00",X"FC",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"FE",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"02",X"FE",X"00", + X"00",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00", + X"00",X"10",X"18",X"1C",X"1C",X"1E",X"1E",X"1E",X"1E",X"1E",X"1E",X"1C",X"1C",X"18",X"10",X"00", + X"00",X"30",X"38",X"3C",X"3C",X"3C",X"3C",X"3C",X"3C",X"3C",X"3C",X"3C",X"3C",X"38",X"30",X"00", + X"40",X"70",X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"78",X"70",X"40", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80", + X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"80",X"80",X"80",X"80", + X"00",X"00",X"C0",X"E0",X"60",X"B0",X"B0",X"B0",X"B0",X"B0",X"F0",X"E0",X"C0",X"80",X"80",X"80", + X"00",X"00",X"00",X"20",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"20",X"00",X"80",X"80",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",X"80", + X"00",X"00",X"E0",X"10",X"68",X"A8",X"A8",X"A8",X"A8",X"A8",X"E8",X"10",X"E0",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"40",X"20",X"00",X"20",X"40",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"60",X"10",X"48",X"28",X"00",X"28",X"48",X"10",X"60",X"00",X"00",X"00",X"00", + X"00",X"00",X"70",X"08",X"64",X"34",X"14",X"00",X"14",X"34",X"64",X"08",X"70",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"60",X"D0",X"70",X"20",X"70",X"D0",X"60",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"C0",X"60",X"20",X"60",X"C0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"20",X"C8",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"00",X"80",X"A0",X"A0",X"A0",X"20",X"10",X"00", + X"00",X"00",X"00",X"80",X"00",X"00",X"10",X"10",X"90",X"A0",X"A0",X"C0",X"C0",X"A0",X"90",X"00", + X"00",X"00",X"00",X"00",X"00",X"20",X"00",X"20",X"20",X"20",X"20",X"28",X"28",X"20",X"20",X"24", + X"00",X"00",X"00",X"00",X"00",X"20",X"00",X"20",X"20",X"20",X"20",X"28",X"28",X"20",X"20",X"24", + X"00",X"00",X"00",X"00",X"00",X"20",X"20",X"20",X"30",X"30",X"20",X"28",X"28",X"20",X"20",X"24", + X"00",X"00",X"00",X"00",X"2C",X"3E",X"3F",X"7F",X"CF",X"AF",X"3B",X"AB",X"DF",X"DA",X"C0",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"F0",X"F0",X"78",X"F8",X"F8",X"98",X"F0", + X"20",X"70",X"70",X"39",X"22",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"84",X"8E",X"CE",X"CC",X"FC",X"0E",X"03",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"C0",X"A0",X"E0",X"E0",X"C0",X"10",X"F8",X"78",X"24",X"1E",X"0E",X"0C",X"04",X"04",X"00",X"0C", + X"18",X"3C",X"7A",X"FB",X"7F",X"7F",X"4D",X"5E",X"8C",X"C0",X"E0",X"F0",X"60",X"00",X"00",X"00", + X"06",X"56",X"03",X"0F",X"C7",X"E3",X"EA",X"E6",X"F0",X"EE",X"12",X"09",X"04",X"00",X"00",X"00", + X"00",X"40",X"20",X"20",X"08",X"84",X"C4",X"E0",X"E2",X"F3",X"E1",X"E5",X"57",X"5F",X"8E",X"00", + X"04",X"8E",X"5F",X"57",X"15",X"C5",X"E3",X"E2",X"E0",X"E4",X"E4",X"88",X"00",X"20",X"40",X"00", + X"00",X"00",X"00",X"10",X"92",X"A4",X"18",X"C0",X"CE",X"F3",X"E7",X"CF",X"0B",X"0B",X"A6",X"0C", + X"80",X"00",X"00",X"C0",X"00",X"10",X"94",X"C4",X"D8",X"C0",X"F8",X"CC",X"1C",X"2C",X"1C",X"78", + X"38",X"3C",X"66",X"1E",X"04",X"98",X"C0",X"D8",X"E4",X"D4",X"90",X"00",X"C0",X"00",X"00",X"80", + X"C0",X"A0",X"E0",X"70",X"06",X"4F",X"4F",X"06",X"F0",X"D0",X"A0",X"00",X"00",X"00",X"00",X"00", + X"18",X"BC",X"2C",X"18",X"46",X"8F",X"2B",X"46",X"10",X"A4",X"CC",X"D4",X"F4",X"AC",X"18",X"00", + X"00",X"0C",X"9E",X"58",X"D2",X"CC",X"A4",X"10",X"46",X"2B",X"8F",X"46",X"18",X"2C",X"3C",X"18", + X"00",X"00",X"00",X"00",X"00",X"D0",X"E8",X"F8",X"01",X"A5",X"A3",X"8E",X"3C",X"70",X"50",X"60", + X"00",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"E0",X"68",X"18",X"00",X"70",X"B8",X"98",X"50", + X"30",X"F8",X"98",X"68",X"00",X"10",X"68",X"E0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"0E",X"D3",X"D3",X"D3",X"D3",X"CE",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00", + X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"1B",X"9B",X"9B",X"9F",X"8F",X"87",X"8F",X"9B",X"13",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"FE",X"FE",X"00",X"83",X"C3",X"CF",X"D3",X"D3",X"D3",X"D3",X"8F",X"00",X"FE",X"FE",X"00", + X"00",X"00",X"00",X"00",X"FE",X"FE",X"00",X"83",X"CF",X"D3",X"D3",X"8F",X"00",X"FE",X"FE",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"CF",X"D3",X"DF",X"FE",X"FE",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7t.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7t.vhd new file mode 100644 index 00000000..9d89ae50 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7t.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity obj_7t is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of obj_7t is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"07",X"07",X"00",X"00",X"00",X"00",X"0C",X"1E",X"1C",X"1F",X"0F",X"06",X"00",X"00",X"00",X"00", + X"0C",X"18",X"1C",X"18",X"00",X"00",X"00",X"04",X"0E",X"3E",X"7C",X"3D",X"00",X"00",X"00",X"00", + X"30",X"60",X"60",X"60",X"00",X"00",X"01",X"03",X"17",X"37",X"37",X"0A",X"00",X"00",X"00",X"00", + X"78",X"38",X"00",X"00",X"00",X"00",X"00",X"24",X"7E",X"7E",X"3C",X"0D",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"10",X"1C",X"08",X"08",X"00",X"00",X"0D",X"1F",X"07",X"07",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"20",X"30",X"18",X"08",X"03",X"07",X"07",X"07",X"02",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"3C",X"00",X"00",X"00",X"1E",X"3E",X"78",X"00",X"00",X"00",X"01",X"00",X"00",X"00", + X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"40",X"70",X"38",X"10",X"04",X"0E",X"3E",X"7C",X"39",X"00",X"00",X"00",X"00", + X"0E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"08",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"0E", + X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"04",X"EE",X"FE",X"FE",X"7D",X"33",X"00",X"03",X"02",X"00", + X"00",X"02",X"08",X"00",X"00",X"00",X"04",X"EE",X"FE",X"FE",X"7D",X"33",X"00",X"03",X"02",X"00", + X"10",X"80",X"20",X"00",X"00",X"00",X"04",X"EE",X"EE",X"FE",X"7D",X"33",X"00",X"03",X"02",X"00", + X"78",X"00",X"00",X"00",X"00",X"18",X"1D",X"FE",X"7D",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"78",X"00",X"00",X"00",X"3D",X"FC",X"39",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"09",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"10",X"10",X"20",X"20",X"C2",X"01",X"02",X"09",X"09",X"18",X"18",X"38",X"10",X"03",X"03",X"00", + X"10",X"10",X"20",X"20",X"C2",X"01",X"02",X"29",X"79",X"78",X"38",X"18",X"00",X"03",X"03",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"06",X"47",X"E0",X"C0",X"C0",X"40",X"04",X"0E",X"0E",X"3E",X"3E",X"3E",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"06",X"1F",X"3E",X"1C",X"10",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"0E",X"0E",X"0F",X"0F",X"07",X"06",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"3F",X"7F",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"7F",X"3F", + X"00",X"00",X"18",X"38",X"3C",X"7F",X"7F",X"7F",X"7F",X"3F",X"3F",X"1F",X"1F",X"0F",X"07",X"01", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"10",X"38",X"3E",X"7F",X"7F",X"7F",X"7F",X"3F",X"3F",X"1F",X"1F",X"0F",X"07",X"01", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"3E",X"7E",X"FE",X"FE",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FF",X"FF",X"FC",X"FC",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"7E",X"FE",X"FC",X"FC",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"00", + X"1E",X"7E",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"00", + X"1E",X"7E",X"FC",X"FC",X"FC",X"7E",X"FE",X"FC",X"FC",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"00", + X"3E",X"7E",X"FC",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"0E",X"0E",X"0E",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"0E",X"0E",X"0E",X"0E",X"FF",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"00",X"06",X"1E",X"3E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"03",X"07",X"1F",X"1F",X"3B",X"3F",X"3F",X"1F",X"1C",X"3F",X"38",X"73",X"F3",X"DB",X"49",X"07", + X"03",X"07",X"1F",X"1F",X"3B",X"BF",X"FF",X"EF",X"7C",X"7F",X"38",X"13",X"03",X"1B",X"09",X"07", + X"07",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"1F",X"3F",X"3F",X"3F",X"1F",X"1F",X"4F",X"FF",X"FF",X"FF",X"03",X"03", + X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00", + X"0D",X"0D",X"1D",X"39",X"FB",X"E3",X"0F",X"FE",X"F8",X"03",X"FF",X"FE",X"00",X"FF",X"FF",X"00", + X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D",X"0D", + X"00",X"09",X"06",X"09",X"10",X"29",X"06",X"29",X"70",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"09",X"06",X"09",X"10",X"29",X"06",X"29",X"30",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"3F",X"61",X"D2",X"0C",X"52",X"21",X"12",X"0C",X"12",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"1C",X"3F",X"61",X"D2",X"0C",X"52",X"21",X"12",X"0C",X"12",X"00",X"00",X"00",X"00",X"00", + X"18",X"3F",X"61",X"D2",X"0C",X"52",X"21",X"12",X"0C",X"12",X"00",X"00",X"00",X"00",X"00",X"00", + X"E1",X"C1",X"3F",X"61",X"D2",X"0C",X"52",X"21",X"12",X"0C",X"12",X"00",X"00",X"00",X"00",X"00", + X"C1",X"BF",X"61",X"D2",X"0C",X"52",X"21",X"12",X"0C",X"12",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"1C",X"1E",X"1F",X"0C",X"08",X"01",X"02",X"04",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"11",X"1C",X"1F",X"0C",X"08",X"01",X"02",X"04",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"0E",X"0F",X"0E",X"04",X"00",X"01",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"0F",X"3F",X"0F",X"0F",X"04",X"04",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"01",X"07",X"07",X"0F",X"09",X"02",X"02",X"04",X"00",X"00",X"00",X"01",X"01",X"00", + X"00",X"01",X"0A",X"04",X"04",X"04",X"0A",X"01",X"00",X"01",X"F0",X"F8",X"F8",X"00",X"08",X"00", + X"00",X"01",X"0A",X"04",X"04",X"04",X"0A",X"01",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"09",X"06",X"09",X"10",X"29",X"06",X"09",X"70",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"09",X"06",X"09",X"10",X"29",X"06",X"09",X"70",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"09",X"06",X"09",X"10",X"29",X"06",X"09",X"70",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"01",X"08",X"09",X"0A",X"0D",X"08",X"0D",X"06",X"03",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"01",X"00",X"01",X"02",X"02",X"09",X"0E",X"06",X"03",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"01",X"01",X"00",X"05",X"02",X"02",X"01",X"06",X"06",X"03",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"0A",X"04",X"04",X"04",X"0A",X"01",X"00",X"01", + X"00",X"00",X"00",X"00",X"00",X"01",X"0A",X"04",X"04",X"04",X"0A",X"01",X"00",X"01",X"00",X"00", + X"00",X"00",X"00",X"01",X"0A",X"04",X"04",X"04",X"0A",X"01",X"00",X"01",X"00",X"00",X"00",X"00", + X"00",X"1F",X"10",X"0A",X"04",X"02",X"01",X"01",X"02",X"04",X"04",X"00",X"00",X"00",X"00",X"00", + X"00",X"20",X"11",X"0A",X"04",X"02",X"03",X"01",X"02",X"04",X"04",X"00",X"00",X"00",X"00",X"00", + X"00",X"41",X"23",X"16",X"0C",X"0E",X"13",X"03",X"0F",X"16",X"05",X"01",X"02",X"00",X"00",X"00", + X"00",X"08",X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"21",X"01",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00", + X"00",X"08",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"3F",X"0F",X"33",X"1C",X"0E",X"08",X"00",X"00",X"C0",X"F0",X"FC",X"FF", + X"FF",X"FF",X"FF",X"FF",X"7F",X"BF",X"DF",X"07",X"00",X"03",X"01",X"00",X"80",X"C0",X"E0",X"F8", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"3E",X"1C",X"08",X"10",X"20",X"40",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"7F",X"1F",X"0F",X"80",X"60",X"18",X"07",X"00",X"80",X"E0",X"F8", + X"FF",X"FF",X"FF",X"FF",X"FF",X"7F",X"1F",X"07",X"80",X"60",X"18",X"07",X"00",X"80",X"E0",X"F8", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"C0",X"80",X"00",X"7F",X"00",X"00",X"80",X"C0", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"1F",X"1F",X"11",X"11",X"01",X"00",X"10",X"11",X"F1",X"F1", + X"FF",X"FF",X"FF",X"1F",X"11",X"11",X"01",X"01",X"10",X"10",X"11",X"F1",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"F1",X"F1",X"10",X"10",X"01",X"01",X"11",X"11",X"1F",X"1F", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"DF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"DF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"80",X"80",X"80",X"00",X"00",X"00",X"00",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"04",X"06",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"3F",X"4F",X"33",X"3C",X"0E",X"00",X"00",X"00",X"C0",X"F0",X"FC",X"FF", + X"FF",X"FF",X"FF",X"FF",X"7F",X"BF",X"DF",X"67",X"00",X"07",X"03",X"00",X"80",X"C0",X"E0",X"F8", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"7E",X"3C",X"00",X"00",X"00",X"00",X"00", + X"03",X"0C",X"11",X"27",X"2D",X"49",X"51",X"50",X"50",X"50",X"50",X"28",X"24",X"13",X"0C",X"07", + X"00",X"20",X"21",X"62",X"65",X"75",X"5D",X"49",X"42",X"6E",X"2C",X"37",X"1B",X"0C",X"07",X"00", + X"03",X"0C",X"13",X"14",X"28",X"28",X"28",X"2C",X"13",X"0C",X"07",X"80",X"00",X"01",X"0F",X"03", + X"00",X"00",X"03",X"0C",X"11",X"15",X"2A",X"29",X"28",X"28",X"14",X"17",X"08",X"07",X"00",X"00", + X"00",X"00",X"08",X"00",X"11",X"1B",X"1E",X"15",X"11",X"0A",X"0D",X"06",X"03",X"00",X"00",X"00", + X"00",X"00",X"03",X"04",X"0B",X"0A",X"0A",X"0B",X"04",X"03",X"00",X"00",X"04",X"01",X"00",X"00", + X"00",X"00",X"00",X"00",X"01",X"02",X"05",X"02",X"03",X"02",X"05",X"02",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"08",X"0D",X"06",X"05",X"02",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"02",X"05",X"05",X"02",X"01",X"00",X"00",X"02",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"04",X"00",X"00",X"08",X"00",X"00",X"04",X"00",X"00",X"00",X"00",X"00", + X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"40",X"00",X"00",X"00",X"00",X"00",X"20",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"03",X"07",X"0F",X"0F",X"0E",X"0E",X"0E",X"0E",X"0F",X"07",X"03",X"00",X"00",X"00",X"00", + X"00",X"03",X"07",X"07",X"0F",X"0F",X"07",X"07",X"07",X"03",X"03",X"01",X"00",X"00",X"00",X"00", + X"00",X"01",X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"3F",X"30",X"00",X"00",X"00",X"00",X"05",X"03",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"07",X"0C",X"08",X"08",X"02",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"00", + X"00",X"00",X"07",X"0C",X"08",X"08",X"02",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"07",X"2C",X"08",X"08",X"02",X"00",X"00",X"00",X"02",X"02",X"00",X"00",X"00", + X"00",X"00",X"42",X"02",X"0A",X"0A",X"08",X"02",X"00",X"00",X"00",X"00",X"01",X"03",X"04",X"08", + X"00",X"00",X"02",X"02",X"0A",X"0A",X"08",X"02",X"00",X"00",X"00",X"00",X"01",X"03",X"04",X"08", + X"00",X"00",X"02",X"22",X"0A",X"0A",X"08",X"02",X"00",X"00",X"00",X"00",X"01",X"03",X"04",X"08", + X"00",X"0A",X"01",X"01",X"04",X"08",X"08",X"0B",X"04",X"00",X"02",X"02",X"00",X"00",X"00",X"00", + X"00",X"0A",X"01",X"01",X"04",X"08",X"08",X"0B",X"04",X"00",X"02",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"3C",X"63",X"D4",X"09",X"49",X"36",X"09",X"09",X"16",X"09",X"00",X"00",X"00",X"00",X"00", + X"00",X"18",X"3E",X"6B",X"08",X"14",X"08",X"08",X"02",X"00",X"01",X"03",X"03",X"03",X"03",X"01", + X"00",X"01",X"3B",X"07",X"06",X"02",X"00",X"00",X"00",X"00",X"24",X"0E",X"0E",X"0E",X"0E",X"04", + X"00",X"03",X"17",X"0F",X"04",X"00",X"00",X"00",X"00",X"40",X"10",X"38",X"38",X"38",X"38",X"10", + X"FF",X"FF",X"FF",X"00",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"04",X"0F",X"0C",X"18",X"1F",X"19",X"1F",X"19",X"14",X"1B",X"0C",X"07", + X"00",X"00",X"FF",X"FF",X"00",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"3F", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"3F",X"00",X"00",X"00",X"00", + X"3F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03", + X"FF",X"FF",X"07",X"00",X"F8",X"FF",X"C7",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03", + X"FF",X"FF",X"F0",X"00",X"0F",X"FF",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"E0", + X"FF",X"FF",X"FE",X"00",X"01",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FC", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"02",X"02",X"02",X"02",X"00",X"02",X"00",X"00",X"00",X"02",X"01",X"03",X"04",X"08", + X"00",X"00",X"03",X"04",X"04",X"05",X"06",X"06",X"02",X"00",X"00",X"01",X"01",X"01",X"00",X"00", + X"00",X"00",X"03",X"04",X"04",X"04",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"03",X"04",X"04",X"05",X"06",X"06",X"02",X"00",X"00",X"01",X"01",X"01",X"00",X"00", + X"00",X"F3",X"74",X"1C",X"0F",X"50",X"70",X"3C",X"03",X"01",X"01",X"19",X"3F",X"3E",X"3E",X"1C", + X"78",X"3B",X"14",X"0C",X"4F",X"70",X"30",X"1C",X"13",X"71",X"F1",X"F1",X"EB",X"70",X"00",X"00", + X"00",X"F3",X"74",X"1C",X"0F",X"70",X"F0",X"FC",X"F3",X"71",X"01",X"01",X"0B",X"30",X"00",X"00", + X"E7",X"68",X"BF",X"D7",X"79",X"3C",X"33",X"31",X"41",X"01",X"0B",X"30",X"00",X"00",X"00",X"00", + X"41",X"E1",X"F1",X"73",X"3C",X"10",X"10",X"0F",X"18",X"14",X"0B",X"18",X"18",X"10",X"00",X"00", + X"41",X"E1",X"F1",X"73",X"3C",X"10",X"10",X"0F",X"18",X"64",X"E3",X"00",X"00",X"00",X"00",X"00", + X"00",X"1F",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"05",X"01",X"00",X"00",X"00",X"00", + X"00",X"1F",X"00",X"00",X"00",X"00",X"0F",X"0E",X"0E",X"0E",X"05",X"01",X"00",X"00",X"00",X"00", + X"00",X"1F",X"00",X"3F",X"1A",X"1D",X"0F",X"0E",X"0E",X"0E",X"05",X"01",X"00",X"00",X"00",X"00", + X"3F",X"7F",X"3F",X"3A",X"1D",X"1F",X"0F",X"0E",X"0E",X"0E",X"07",X"03",X"03",X"03",X"01",X"01", + X"00",X"1F",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"1F",X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"03",X"0F",X"1F",X"3F",X"3F",X"7F",X"7F",X"7F",X"7F",X"7F",X"7F",X"3F",X"3F",X"1F",X"0F",X"03", + X"03",X"0F",X"1F",X"3F",X"3F",X"7F",X"7F",X"7F",X"7F",X"7F",X"7F",X"7F",X"3F",X"1F",X"0F",X"03", + X"03",X"0F",X"1F",X"3F",X"3F",X"7F",X"7F",X"7F",X"7F",X"7F",X"7F",X"3F",X"3F",X"1F",X"0F",X"03", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"03",X"07",X"0F",X"0F",X"0E",X"0E",X"0E",X"0E",X"0F",X"07",X"03",X"00",X"00",X"00", + X"00",X"00",X"03",X"07",X"07",X"0F",X"0F",X"07",X"07",X"07",X"03",X"03",X"01",X"00",X"00",X"00", + X"00",X"00",X"01",X"03",X"03",X"03",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"03",X"04",X"04",X"04",X"04",X"04",X"04",X"04",X"03",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"03",X"04",X"0B",X"16",X"14",X"00",X"14",X"16",X"0B",X"04",X"03",X"00",X"00",X"00", + X"07",X"0F",X"18",X"37",X"6C",X"68",X"68",X"00",X"68",X"68",X"6C",X"37",X"18",X"0F",X"07",X"00", + X"00",X"07",X"0F",X"1F",X"3C",X"38",X"38",X"39",X"38",X"38",X"3C",X"1F",X"0F",X"07",X"00",X"00", + X"00",X"00",X"00",X"07",X"0F",X"0E",X"0C",X"0D",X"0C",X"0E",X"0F",X"07",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"03",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"03",X"02",X"02",X"02",X"00",X"04",X"00", + X"00",X"00",X"00",X"00",X"03",X"06",X"06",X"04",X"04",X"00",X"02",X"01",X"01",X"02",X"06",X"00", + X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"04",X"04",X"04",X"0C",X"0C",X"0C",X"0C",X"14", + X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"04",X"04",X"04",X"0C",X"0C",X"0C",X"0C",X"14", + X"00",X"00",X"00",X"00",X"00",X"02",X"02",X"02",X"04",X"04",X"04",X"0C",X"0C",X"0C",X"0C",X"14", + X"00",X"09",X"06",X"09",X"10",X"09",X"06",X"09",X"70",X"1F",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"02",X"25",X"22",X"12",X"15",X"08",X"05",X"02",X"01",X"00",X"00",X"00",X"00",X"02",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"42",X"02",X"02",X"21",X"20",X"00",X"00", + X"00",X"00",X"00",X"00",X"28",X"20",X"00",X"03",X"06",X"04",X"06",X"05",X"00",X"00",X"00",X"00", + X"00",X"06",X"00",X"00",X"00",X"00",X"07",X"04",X"00",X"03",X"04",X"04",X"02",X"01",X"02",X"00", + X"00",X"00",X"00",X"10",X"0D",X"12",X"22",X"25",X"18",X"25",X"02",X"04",X"18",X"00",X"00",X"00", + X"00",X"05",X"00",X"00",X"00",X"00",X"00",X"01",X"02",X"00",X"01",X"01",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"03",X"00",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"01",X"03",X"03",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"00",X"06",X"07",X"03",X"00",X"00",X"00",X"0A",X"00", + X"00",X"00",X"00",X"00",X"03",X"00",X"02",X"03",X"03",X"21",X"10",X"00",X"04",X"02",X"02",X"00", + X"00",X"02",X"04",X"00",X"15",X"20",X"20",X"01",X"02",X"02",X"02",X"00",X"00",X"00",X"00",X"00", + X"01",X"01",X"01",X"73",X"7C",X"F0",X"F0",X"CF",X"18",X"14",X"0B",X"18",X"18",X"10",X"00",X"00", + X"0E",X"1F",X"1F",X"1F",X"02",X"0A",X"35",X"74",X"02",X"02",X"01",X"00",X"00",X"01",X"01",X"01", + X"01",X"01",X"01",X"00",X"00",X"01",X"02",X"02",X"74",X"35",X"0A",X"02",X"0F",X"1F",X"1F",X"0E", + X"00",X"00",X"08",X"0C",X"0C",X"05",X"0A",X"0C",X"67",X"F8",X"F8",X"7E",X"39",X"00",X"00",X"00", + X"00",X"31",X"79",X"7A",X"7B",X"7C",X"32",X"11",X"11",X"08",X"08",X"1C",X"26",X"03",X"00",X"00", + X"00",X"00",X"03",X"26",X"1C",X"08",X"08",X"11",X"11",X"32",X"3C",X"3B",X"3E",X"3D",X"19",X"00", + X"0D",X"06",X"0E",X"06",X"06",X"03",X"03",X"01",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"3B",X"3D",X"1D",X"1D",X"1F",X"0F",X"0E",X"0F",X"07",X"06",X"07",X"05",X"01",X"01",X"00",X"00", + X"0D",X"06",X"06",X"02",X"02",X"03",X"01",X"01",X"03",X"03",X"03",X"0A",X"00",X"01",X"11",X"0E", + X"3D",X"0D",X"06",X"06",X"03",X"03",X"02",X"00",X"00",X"00",X"00",X"40",X"20",X"32",X"00",X"00", + X"07",X"00",X"00",X"00",X"00",X"02",X"00",X"20",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"1C",X"00",X"00",X"1C",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"10",X"10",X"10",X"17",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1C",X"10",X"00",X"00", + X"10",X"10",X"10",X"17",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1F",X"1C",X"10",X"00",X"00", + X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"00",X"00", + X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"10",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"06",X"1E",X"3E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FC",X"FC",X"FC",X"FC", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00", + X"80",X"00",X"00",X"FF",X"26",X"04",X"55",X"55",X"55",X"55",X"55",X"56",X"FF",X"00",X"00",X"80", + X"FF",X"FF",X"FF",X"80",X"00",X"00",X"FF",X"26",X"05",X"55",X"55",X"56",X"FF",X"00",X"00",X"80", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"80",X"00",X"00",X"04",X"55",X"54",X"00",X"00",X"80", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7u.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7u.vhd new file mode 100644 index 00000000..dfaaad9f --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/obj_7u.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity obj_7u is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of obj_7u is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"C0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"80",X"00",X"F0",X"E0",X"00",X"00",X"00",X"40",X"30",X"70",X"60",X"C0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"1C",X"1C",X"1C",X"04",X"90",X"6C",X"EC",X"DC",X"80",X"00",X"00",X"00",X"00", + X"00",X"00",X"10",X"38",X"1C",X"14",X"C0",X"F0",X"F8",X"B0",X"40",X"80",X"00",X"00",X"00",X"00", + X"1E",X"1C",X"00",X"00",X"00",X"00",X"00",X"94",X"66",X"EC",X"E0",X"C0",X"00",X"00",X"00",X"00", + X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"F0",X"E0",X"00",X"00",X"00",X"00",X"26",X"9C",X"B8",X"B0",X"60",X"00",X"00",X"00",X"00",X"40", + X"3C",X"38",X"00",X"00",X"00",X"E0",X"E0",X"C0",X"B8",X"30",X"60",X"00",X"00",X"00",X"00",X"60", + X"00",X"00",X"0F",X"00",X"00",X"00",X"8C",X"77",X"E6",X"00",X"00",X"00",X"C0",X"00",X"00",X"00", + X"1C",X"1C",X"1C",X"18",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"06",X"06",X"86",X"52",X"E2",X"C0",X"90",X"38",X"38",X"1C",X"0C", + X"10",X"38",X"70",X"60",X"C0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"70",X"F8",X"F8",X"E8",X"70",X"78",X"38",X"98",X"80",X"C0",X"A0",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"08",X"1C",X"0E",X"02",X"02",X"00",X"00",X"44",X"36",X"6E",X"C0",X"00",X"00",X"00",X"00",X"00", + X"88",X"1C",X"0E",X"02",X"02",X"00",X"00",X"44",X"36",X"68",X"C0",X"00",X"00",X"00",X"00",X"00", + X"08",X"1C",X"0E",X"02",X"02",X"00",X"00",X"44",X"06",X"6E",X"C0",X"00",X"00",X"00",X"00",X"00", + X"1E",X"00",X"00",X"00",X"00",X"00",X"54",X"EF",X"DE",X"00",X"00",X"00",X"80",X"C0",X"00",X"00", + X"1E",X"00",X"00",X"00",X"10",X"EF",X"CE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"08",X"08",X"04",X"04",X"23",X"C0",X"20",X"C8",X"C8",X"0C",X"0C",X"0E",X"04",X"60",X"60",X"00", + X"08",X"08",X"04",X"04",X"23",X"C0",X"20",X"C4",X"CE",X"0E",X"0C",X"08",X"00",X"60",X"60",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"90",X"60",X"74",X"F4",X"EC",X"00",X"00",X"00", + X"00",X"60",X"C0",X"E0",X"60",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"04",X"06",X"03",X"03",X"01",X"00",X"00",X"40",X"38",X"68",X"D0",X"00",X"00",X"00",X"00", + X"00",X"04",X"06",X"03",X"03",X"01",X"00",X"20",X"9C",X"34",X"68",X"00",X"00",X"00",X"00",X"40", + X"00",X"00",X"FC",X"FE",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"03",X"FE",X"FC", + X"00",X"00",X"18",X"1C",X"BC",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FC",X"FC",X"F8",X"F0",X"C0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"18",X"1C",X"7C",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FC",X"FC",X"F8",X"F0",X"C0", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"3E",X"1E",X"06",X"00",X"00",X"00",X"00", + X"7E",X"7E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FC",X"FC",X"F8",X"F0",X"C0",X"00",X"00",X"00",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"52",X"52",X"52",X"F7",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"7E",X"7E",X"7E",X"7E",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"7E",X"7E",X"7E",X"7E", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"C0",X"F0",X"F8",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC", + X"00",X"00",X"00",X"00",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"00",X"1E",X"1E",X"1E",X"1E",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"FC",X"7C",X"3E",X"0E",X"00",X"00",X"00", + X"7E",X"7E",X"7E",X"7E",X"7E",X"FE",X"FE",X"7E",X"7E",X"7E",X"7C",X"FC",X"EC",X"0C",X"08",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00", + X"F0",X"FC",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7E",X"7C",X"FC",X"EC",X"0C",X"08",X"00", + X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00", + X"F8",X"FC",X"7E",X"00",X"00",X"F0",X"FC",X"7E",X"7E",X"7E",X"7C",X"FC",X"EC",X"0C",X"08",X"00", + X"1E",X"1E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"52",X"F7",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"F0",X"F0",X"F0",X"F0",X"FE",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"F7",X"F7",X"F7",X"F7",X"FF",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"F0",X"F8",X"FC",X"FC",X"FE",X"FE",X"FE",X"7E",X"7E",X"7E",X"7E", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"C0",X"E0",X"F8",X"F8",X"BC",X"FC",X"FC",X"F0",X"70",X"F8",X"38",X"9C",X"9F",X"B7",X"24",X"E0", + X"C0",X"E0",X"F8",X"F8",X"BC",X"FD",X"FF",X"F7",X"7E",X"FE",X"3C",X"98",X"90",X"B0",X"20",X"E0", + X"0E",X"1C",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"E0",X"F0",X"F0",X"68",X"FA",X"FF",X"FF",X"FF",X"F0",X"F8",X"C0", + X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00",X"FF",X"FF",X"00", + X"B6",X"B6",X"B6",X"B6",X"B6",X"36",X"76",X"66",X"EE",X"CC",X"9C",X"38",X"F8",X"E0",X"80",X"00", + X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6",X"B6", + X"00",X"00",X"00",X"00",X"A0",X"60",X"20",X"60",X"C0",X"80",X"04",X"0E",X"0E",X"0E",X"2E",X"04", + X"00",X"00",X"00",X"00",X"A0",X"60",X"20",X"60",X"C2",X"87",X"07",X"17",X"07",X"02",X"00",X"00", + X"00",X"00",X"80",X"C0",X"40",X"C0",X"40",X"00",X"00",X"00",X"1A",X"38",X"38",X"38",X"38",X"10", + X"00",X"00",X"1C",X"F8",X"C0",X"40",X"C0",X"40",X"00",X"00",X"1A",X"38",X"38",X"38",X"38",X"10", + X"30",X"20",X"C0",X"C0",X"40",X"C0",X"40",X"00",X"00",X"1A",X"38",X"38",X"38",X"38",X"10",X"00", + X"C0",X"80",X"00",X"80",X"C0",X"40",X"C0",X"40",X"00",X"00",X"1A",X"38",X"38",X"38",X"38",X"10", + X"80",X"00",X"80",X"C0",X"40",X"C0",X"40",X"00",X"00",X"1A",X"38",X"38",X"38",X"38",X"10",X"00", + X"00",X"00",X"00",X"00",X"80",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"08",X"F0",X"F0",X"70", + X"00",X"00",X"80",X"C0",X"C0",X"00",X"00",X"80",X"00",X"00",X"00",X"00",X"08",X"F0",X"F0",X"70", + X"00",X"00",X"E0",X"C0",X"00",X"00",X"C0",X"00",X"00",X"00",X"00",X"04",X"78",X"78",X"38",X"00", + X"00",X"00",X"00",X"C0",X"00",X"80",X"80",X"80",X"00",X"00",X"00",X"08",X"70",X"70",X"70",X"30", + X"00",X"00",X"E0",X"F0",X"F0",X"F0",X"C0",X"00",X"00",X"01",X"02",X"C0",X"00",X"E0",X"E0",X"E0", + X"A0",X"10",X"A8",X"48",X"48",X"48",X"A8",X"18",X"B0",X"E0",X"00",X"00",X"00",X"00",X"00",X"00", + X"A0",X"10",X"A8",X"48",X"48",X"48",X"A8",X"18",X"B0",X"E0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"A0",X"60",X"20",X"60",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"A0",X"70",X"30",X"70",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"A0",X"64",X"2E",X"6E",X"CE",X"84",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"20",X"C0",X"20",X"10",X"28",X"C0",X"20",X"1C",X"F0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"20",X"20",X"5C",X"84",X"48",X"50",X"E0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"20",X"C4",X"34",X"24",X"48",X"88",X"50",X"60",X"C0",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"20",X"A0",X"10",X"A8",X"48",X"48",X"48",X"A8",X"18",X"B0",X"E0", + X"00",X"00",X"00",X"20",X"A0",X"10",X"A8",X"48",X"48",X"48",X"A8",X"18",X"B0",X"E0",X"00",X"00", + X"00",X"20",X"A0",X"10",X"A8",X"48",X"48",X"48",X"A8",X"18",X"B0",X"E0",X"00",X"00",X"00",X"00", + X"00",X"F8",X"04",X"00",X"00",X"20",X"C0",X"80",X"80",X"80",X"40",X"20",X"00",X"00",X"00",X"00", + X"00",X"80",X"00",X"08",X"10",X"20",X"D0",X"00",X"80",X"80",X"40",X"20",X"00",X"00",X"00",X"00", + X"80",X"04",X"08",X"10",X"30",X"60",X"D0",X"88",X"80",X"C0",X"60",X"10",X"00",X"00",X"00",X"00", + X"00",X"08",X"30",X"00",X"00",X"00",X"00",X"08",X"08",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"04",X"06",X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"10",X"08",X"00",X"00",X"00",X"00",X"20",X"04",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"3E",X"1C",X"08",X"10",X"20",X"40",X"00", + X"FF",X"FF",X"FF",X"FF",X"FE",X"FD",X"FB",X"E0",X"00",X"E0",X"C0",X"80",X"01",X"03",X"07",X"1F", + X"FF",X"FF",X"FF",X"FF",X"FC",X"F2",X"CC",X"3C",X"18",X"00",X"00",X"00",X"03",X"0F",X"3F",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FE",X"F8",X"F0",X"01",X"06",X"18",X"E0",X"00",X"01",X"07",X"1F", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"03",X"01",X"00",X"FE",X"00",X"00",X"01",X"03", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FE",X"F8",X"E0",X"01",X"06",X"18",X"E0",X"00",X"01",X"07",X"1F", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"F1",X"F1",X"10",X"10",X"01",X"01",X"11",X"11",X"1F",X"1F", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"1F",X"1F",X"11",X"11",X"01",X"01",X"11",X"11",X"F1",X"F1", + X"FF",X"FF",X"FF",X"F1",X"11",X"10",X"00",X"01",X"11",X"11",X"11",X"1F",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"01",X"01",X"01",X"00",X"00",X"00",X"00",X"01", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"DF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"DF",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"F0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"00",X"7E",X"3C",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FE",X"FD",X"FB",X"E6",X"00",X"E0",X"C0",X"00",X"01",X"03",X"07",X"1F", + X"FF",X"FF",X"FF",X"FF",X"FC",X"F2",X"CC",X"3C",X"70",X"00",X"00",X"00",X"03",X"0F",X"3F",X"FF", + X"E0",X"10",X"88",X"34",X"6C",X"42",X"60",X"B0",X"50",X"48",X"28",X"28",X"50",X"B0",X"60",X"80", + X"F0",X"98",X"6C",X"94",X"0A",X"0A",X"0A",X"0A",X"0A",X"12",X"34",X"E4",X"C8",X"10",X"E0",X"00", + X"F0",X"18",X"E8",X"34",X"14",X"0A",X"0A",X"0A",X"8A",X"6A",X"3A",X"B4",X"AC",X"98",X"70",X"C0", + X"00",X"00",X"80",X"E0",X"90",X"00",X"80",X"40",X"A0",X"A0",X"A0",X"A0",X"40",X"80",X"00",X"00", + X"00",X"00",X"00",X"F0",X"88",X"68",X"94",X"14",X"14",X"34",X"C8",X"10",X"E0",X"00",X"00",X"00", + X"00",X"00",X"E0",X"30",X"D0",X"28",X"28",X"28",X"A8",X"58",X"90",X"50",X"E0",X"C0",X"00",X"00", + X"00",X"00",X"00",X"00",X"A0",X"00",X"00",X"80",X"40",X"40",X"40",X"80",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"60",X"90",X"60",X"A0",X"D0",X"20",X"C0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"40",X"A0",X"50",X"50",X"90",X"50",X"60",X"C0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"80",X"10",X"00",X"00",X"08",X"00",X"00",X"10",X"80",X"00",X"00",X"00",X"00", + X"80",X"02",X"00",X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"00",X"00",X"00",X"02",X"80",X"00", + X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00",X"80",X"80",X"00",X"00",X"00",X"00", + X"00",X"40",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"20",X"40",X"00",X"00",X"00",X"00", + X"00",X"20",X"10",X"90",X"48",X"48",X"48",X"48",X"48",X"00",X"10",X"20",X"00",X"00",X"00",X"00", + X"00",X"E0",X"D0",X"E8",X"E8",X"E8",X"E8",X"E8",X"E8",X"E8",X"D0",X"E0",X"00",X"00",X"00",X"00", + X"00",X"C0",X"E0",X"E0",X"F0",X"F0",X"F0",X"F0",X"F0",X"E0",X"E0",X"C0",X"00",X"00",X"00",X"00", + X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00", + X"0C",X"0C",X"00",X"E0",X"1F",X"00",X"A0",X"70",X"E0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"C4",X"20",X"00",X"00",X"80",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"00",X"00", + X"00",X"00",X"C0",X"24",X"00",X"00",X"80",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"C0",X"28",X"00",X"00",X"80",X"00",X"00",X"00",X"80",X"80",X"00",X"00",X"00", + X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20", + X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20", + X"00",X"00",X"80",X"88",X"80",X"80",X"00",X"80",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20", + X"00",X"A0",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"00",X"80",X"80",X"00",X"00",X"00",X"00", + X"00",X"A0",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"00",X"80",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"80",X"44",X"40",X"C0",X"42",X"02",X"00",X"60",X"E0",X"E8",X"E0",X"E0",X"40", + X"00",X"E0",X"F0",X"FC",X"D8",X"48",X"00",X"00",X"00",X"00",X"80",X"C0",X"C0",X"C0",X"80",X"80", + X"00",X"C0",X"EE",X"F0",X"70",X"30",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"C8",X"FC",X"E2",X"D5",X"48",X"C8",X"B4",X"48",X"40",X"20",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"F0",X"10",X"1F",X"FF",X"F0",X"30",X"30",X"30",X"30",X"10",X"10",X"30",X"30",X"F0", + X"67",X"63",X"61",X"30",X"18",X"0F",X"07",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"33",X"33",X"33",X"00",X"E6",X"F6",X"FE",X"EE",X"E6",X"E6",X"7E",X"E6",X"E6",X"EE",X"FE",X"F6", + X"00",X"00",X"80",X"E0",X"70",X"38",X"1C",X"8C",X"CC",X"66",X"66",X"66",X"66",X"66",X"E6",X"FE", + X"66",X"67",X"63",X"31",X"18",X"0C",X"07",X"03",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"E6",X"FE",X"33",X"33",X"33",X"00", + X"FE",X"30",X"30",X"30",X"00",X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"66",X"66", + X"00",X"00",X"00",X"60",X"C0",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"0C",X"12",X"07",X"E7", + X"FF",X"FF",X"F0",X"10",X"1F",X"FF",X"F0",X"30",X"30",X"30",X"30",X"10",X"10",X"30",X"30",X"F0", + X"FF",X"FF",X"70",X"10",X"9F",X"FF",X"70",X"30",X"30",X"30",X"30",X"10",X"10",X"30",X"30",X"70", + X"FF",X"F0",X"10",X"1F",X"FF",X"F0",X"B0",X"30",X"30",X"30",X"30",X"30",X"10",X"10",X"30",X"30", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"80",X"80",X"80",X"80",X"00",X"80",X"00",X"00",X"00",X"80",X"00",X"80",X"40",X"20", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"9E",X"5C",X"70",X"E0",X"14",X"1C",X"78",X"80",X"00",X"00",X"30",X"F8",X"F8",X"F8",X"70", + X"00",X"9E",X"5C",X"70",X"E4",X"1C",X"18",X"70",X"90",X"1C",X"1E",X"1E",X"AE",X"1C",X"00",X"00", + X"3C",X"B8",X"50",X"60",X"E0",X"1C",X"1E",X"7E",X"9E",X"1C",X"00",X"00",X"A0",X"18",X"00",X"00", + X"CE",X"2C",X"FA",X"D6",X"3C",X"78",X"98",X"18",X"04",X"00",X"A0",X"18",X"00",X"00",X"00",X"00", + X"03",X"0F",X"1E",X"9C",X"78",X"10",X"10",X"E0",X"30",X"50",X"A0",X"30",X"30",X"10",X"00",X"00", + X"03",X"0F",X"1E",X"9C",X"78",X"10",X"10",X"E0",X"30",X"4C",X"8E",X"00",X"00",X"00",X"00",X"00", + X"00",X"F8",X"04",X"00",X"00",X"00",X"00",X"A0",X"A0",X"A0",X"B0",X"D0",X"80",X"80",X"80",X"00", + X"00",X"F8",X"04",X"00",X"00",X"00",X"FC",X"B8",X"B8",X"B8",X"B0",X"D0",X"80",X"80",X"80",X"00", + X"00",X"F8",X"04",X"FE",X"AE",X"5C",X"FC",X"B8",X"B8",X"B8",X"B0",X"D0",X"80",X"80",X"80",X"00", + X"FC",X"FE",X"FE",X"AE",X"5E",X"FC",X"FC",X"B8",X"B8",X"B8",X"B0",X"D0",X"80",X"80",X"80",X"00", + X"00",X"F8",X"04",X"00",X"00",X"00",X"00",X"A0",X"A0",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"F8",X"04",X"00",X"00",X"00",X"00",X"A0",X"A0",X"A0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"C0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"E0",X"C0", + X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0", + X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80", + X"00",X"00",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"00",X"80",X"80",X"80",X"80",X"80", + X"00",X"00",X"40",X"20",X"20",X"20",X"20",X"20",X"20",X"20",X"00",X"20",X"40",X"80",X"80",X"80", + X"00",X"00",X"20",X"10",X"90",X"48",X"48",X"48",X"48",X"48",X"08",X"10",X"20",X"80",X"80",X"80", + X"00",X"00",X"E0",X"D0",X"E8",X"E8",X"E8",X"E8",X"E8",X"E8",X"E8",X"D0",X"E0",X"80",X"80",X"80", + X"00",X"00",X"C0",X"E0",X"E0",X"F0",X"F0",X"F0",X"F0",X"F0",X"E0",X"E0",X"C0",X"80",X"80",X"80", + X"00",X"00",X"80",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"C0",X"80",X"80",X"80",X"80", + X"00",X"00",X"00",X"C0",X"80",X"40",X"40",X"40",X"40",X"40",X"00",X"C0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"60",X"10",X"68",X"34",X"14",X"00",X"14",X"34",X"68",X"10",X"60",X"00",X"00",X"00", + X"70",X"78",X"0C",X"76",X"1B",X"0B",X"0B",X"00",X"0B",X"0B",X"1B",X"76",X"0C",X"78",X"70",X"00", + X"00",X"F0",X"F8",X"FC",X"1E",X"0E",X"8E",X"CE",X"8E",X"0E",X"1E",X"FC",X"F8",X"F0",X"00",X"00", + X"00",X"00",X"00",X"E0",X"F8",X"38",X"98",X"D8",X"98",X"38",X"F8",X"F0",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"C0",X"E0",X"E0",X"E0",X"C0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"30",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"40",X"40",X"40",X"C0",X"E0",X"00", + X"00",X"00",X"00",X"00",X"C0",X"E0",X"E0",X"E0",X"60",X"40",X"40",X"00",X"00",X"40",X"60",X"00", + X"00",X"00",X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"50",X"50",X"50",X"50",X"58",X"58",X"10", + X"00",X"00",X"40",X"40",X"40",X"40",X"00",X"40",X"40",X"40",X"40",X"50",X"50",X"58",X"58",X"10", + X"00",X"00",X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"40",X"50",X"50",X"50",X"58",X"58",X"10", + X"00",X"00",X"00",X"00",X"A0",X"60",X"20",X"60",X"C0",X"80",X"04",X"14",X"00",X"00",X"00",X"00", + X"00",X"40",X"80",X"40",X"20",X"20",X"C0",X"00",X"20",X"E0",X"00",X"00",X"00",X"00",X"60",X"00", + X"00",X"00",X"00",X"18",X"20",X"40",X"A4",X"18",X"A4",X"44",X"48",X"B0",X"08",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"F8",X"0E",X"90",X"60",X"90",X"08",X"90",X"60",X"90",X"08", + X"00",X"40",X"00",X"00",X"00",X"00",X"80",X"40",X"A0",X"10",X"A8",X"48",X"44",X"B4",X"40",X"00", + X"00",X"00",X"04",X"84",X"40",X"40",X"42",X"40",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"50",X"80",X"80",X"20",X"10",X"10",X"D0",X"20",X"00",X"40",X"40",X"00",X"00",X"00",X"00", + X"00",X"40",X"20",X"20",X"98",X"64",X"24",X"90",X"50",X"40",X"40",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"60",X"D0",X"D0",X"D0",X"84",X"04",X"28",X"00",X"20",X"40",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"C0",X"20",X"E0",X"C0",X"80",X"00",X"00",X"00",X"A0",X"00", + X"00",X"00",X"00",X"00",X"00",X"80",X"40",X"20",X"A0",X"E0",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"C0",X"60",X"E0",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"9C",X"7E",X"1F",X"1F",X"E6",X"30",X"50",X"A0",X"30",X"30",X"10",X"00",X"00", + X"00",X"80",X"C0",X"64",X"38",X"10",X"10",X"88",X"88",X"4C",X"3C",X"DC",X"FC",X"BC",X"98",X"00", + X"00",X"8C",X"9E",X"5E",X"DE",X"3C",X"4C",X"88",X"88",X"10",X"10",X"38",X"64",X"C0",X"00",X"00", + X"00",X"00",X"08",X"18",X"18",X"D0",X"28",X"18",X"F3",X"0F",X"0F",X"3E",X"CC",X"80",X"80",X"80", + X"80",X"80",X"80",X"00",X"00",X"80",X"40",X"40",X"2E",X"AC",X"58",X"40",X"F0",X"F8",X"F8",X"70", + X"30",X"F8",X"F8",X"F8",X"40",X"50",X"AC",X"2E",X"40",X"40",X"80",X"00",X"00",X"80",X"80",X"80", + X"E0",X"E0",X"E0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"C8",X"D0",X"B0",X"A0",X"40",X"40",X"C0",X"C0",X"80",X"80",X"80",X"80",X"00",X"00",X"00",X"00", + X"F0",X"E0",X"E0",X"C0",X"C0",X"80",X"80",X"80",X"C0",X"C0",X"C0",X"50",X"00",X"80",X"40",X"20", + X"F8",X"F0",X"E0",X"C0",X"C0",X"80",X"00",X"00",X"00",X"04",X"00",X"00",X"06",X"0C",X"00",X"00", + X"80",X"00",X"02",X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"07",X"07",X"07",X"7F",X"E7",X"E7",X"E7",X"E7",X"7F",X"00",X"00",X"00",X"00", + X"01",X"01",X"01",X"FD",X"FF",X"FF",X"FF",X"CF",X"FF",X"FF",X"FF",X"FF",X"07",X"01",X"00",X"00", + X"01",X"01",X"01",X"FD",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"07",X"01",X"00",X"00", + X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00", + X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"00",X"00", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"00",X"00",X"00",X"00",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE",X"FE", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"01",X"00",X"00",X"FF",X"7C",X"3C",X"30",X"2C",X"2C",X"2C",X"2C",X"70",X"FF",X"00",X"00",X"01", + X"FF",X"FF",X"FF",X"01",X"00",X"00",X"FF",X"7C",X"30",X"2C",X"2C",X"70",X"FF",X"00",X"00",X"01", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"01",X"00",X"00",X"30",X"2C",X"20",X"00",X"00",X"01", + X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/rom/snd_rom.vhd b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/snd_rom.vhd new file mode 100644 index 00000000..86fc3197 --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/rom/snd_rom.vhd @@ -0,0 +1,278 @@ +library ieee; +use ieee.std_logic_1164.all,ieee.numeric_std.all; + +entity snd_rom is +port ( + clk : in std_logic; + addr : in std_logic_vector(11 downto 0); + data : out std_logic_vector(7 downto 0) +); +end entity; + +architecture prom of snd_rom is + type rom is array(0 to 4095) of std_logic_vector(7 downto 0); + signal rom_data: rom := ( + X"34",X"00",X"86",X"15",X"E5",X"14",X"51",X"34",X"46",X"B9",X"08",X"BA",X"04",X"BB",X"00",X"23", + X"AA",X"AF",X"AE",X"B8",X"40",X"B0",X"02",X"94",X"10",X"94",X"10",X"FA",X"97",X"A7",X"F7",X"AA", + X"94",X"10",X"94",X"10",X"FA",X"97",X"F7",X"AA",X"E9",X"17",X"86",X"2A",X"B9",X"0E",X"BA",X"30", + X"B8",X"22",X"27",X"A0",X"18",X"A0",X"B8",X"40",X"A0",X"F4",X"00",X"F4",X"00",X"F4",X"69",X"F4", + X"0D",X"F4",X"0D",X"F4",X"69",X"F4",X"1A",X"F4",X"1A",X"F4",X"69",X"E9",X"39",X"05",X"34",X"13", + X"24",X"93",X"BA",X"30",X"B8",X"22",X"B0",X"00",X"18",X"B0",X"00",X"BB",X"00",X"B8",X"40",X"B0", + X"01",X"34",X"55",X"14",X"6F",X"80",X"92",X"63",X"14",X"6F",X"80",X"92",X"52",X"04",X"68",X"34", + X"55",X"B8",X"23",X"F0",X"03",X"1C",X"A0",X"F6",X"A5",X"83",X"B9",X"0C",X"BA",X"10",X"27",X"B8", + X"22",X"A0",X"18",X"A0",X"AB",X"85",X"95",X"A5",X"F4",X"00",X"14",X"A8",X"E9",X"88",X"F4",X"00", + X"14",X"A8",X"80",X"B2",X"8E",X"1A",X"F4",X"00",X"14",X"A8",X"80",X"B2",X"7A",X"B8",X"23",X"F0", + X"03",X"08",X"A0",X"E6",X"95",X"34",X"13",X"B3",X"80",X"F2",X"A5",X"D2",X"A5",X"09",X"53",X"0F", + X"96",X"A5",X"36",X"A5",X"56",X"A5",X"83",X"BA",X"0A",X"B8",X"22",X"B0",X"01",X"18",X"B0",X"00", + X"85",X"95",X"A5",X"F4",X"64",X"F6",X"A5",X"B8",X"23",X"F0",X"03",X"14",X"F6",X"A5",X"F4",X"00", + X"80",X"F2",X"A5",X"F4",X"00",X"80",X"F2",X"A5",X"F4",X"00",X"80",X"F2",X"A5",X"14",X"C3",X"F6", + X"A5",X"C6",X"B9",X"60",X"BA",X"FF",X"BB",X"00",X"27",X"AE",X"AF",X"B8",X"40",X"B0",X"02",X"85", + X"94",X"10",X"C9",X"F9",X"C6",X"A5",X"53",X"0F",X"96",X"F0",X"FA",X"97",X"67",X"AA",X"04",X"F0", + X"F6",X"55",X"27",X"B8",X"20",X"A0",X"B8",X"21",X"A0",X"B8",X"24",X"A0",X"D5",X"AE",X"AF",X"C5", + X"34",X"13",X"E9",X"34",X"45",X"36",X"6B",X"56",X"C5",X"09",X"12",X"37",X"32",X"F2",X"52",X"39", + X"72",X"3B",X"80",X"F2",X"43",X"D2",X"41",X"B2",X"3F",X"92",X"3D",X"53",X"0F",X"03",X"F9",X"C6", + X"35",X"94",X"10",X"24",X"13",X"44",X"3D",X"44",X"2A",X"44",X"00",X"24",X"8D",X"04",X"52",X"04", + X"7A",X"04",X"B7",X"04",X"E2",X"05",X"C5",X"27",X"AE",X"AF",X"85",X"A5",X"B8",X"40",X"A0",X"B8", + X"22",X"A0",X"18",X"A0",X"83",X"85",X"95",X"A5",X"B5",X"F4",X"0D",X"F4",X"0D",X"83",X"85",X"95", + X"A5",X"B5",X"F4",X"0D",X"36",X"6B",X"F4",X"0D",X"36",X"6B",X"83",X"B9",X"02",X"BA",X"60",X"B8", + X"22",X"B0",X"00",X"18",X"B0",X"00",X"B8",X"40",X"B0",X"01",X"34",X"55",X"E9",X"7A",X"BA",X"80", + X"34",X"5E",X"B8",X"23",X"F0",X"03",X"0D",X"A0",X"E6",X"80",X"34",X"13",X"E9",X"B9",X"04",X"BA", + X"40",X"B8",X"22",X"B0",X"00",X"18",X"B0",X"00",X"B8",X"40",X"B0",X"01",X"34",X"B6",X"B9",X"04", + X"B8",X"23",X"B0",X"00",X"BB",X"00",X"F4",X"58",X"34",X"B6",X"B9",X"40",X"B8",X"23",X"B0",X"00", + X"BB",X"00",X"F4",X"58",X"34",X"B6",X"F4",X"64",X"34",X"5E",X"B8",X"23",X"F0",X"03",X"10",X"A0", + X"F6",X"13",X"E9",X"B6",X"83",X"B9",X"06",X"BA",X"20",X"B8",X"22",X"B0",X"00",X"18",X"B0",X"00", + X"85",X"95",X"A5",X"F4",X"00",X"E9",X"D3",X"F4",X"69",X"B8",X"23",X"F0",X"03",X"08",X"A0",X"F6", + X"13",X"F4",X"00",X"F4",X"00",X"E6",X"D7",X"C6",X"D7",X"17",X"C6",X"D7",X"F9",X"E3",X"96",X"D7", + X"24",X"D5",X"B9",X"10",X"BA",X"40",X"BB",X"00",X"F4",X"69",X"F4",X"00",X"E9",X"F8",X"24",X"13", + X"B9",X"30",X"BA",X"20",X"BB",X"40",X"B8",X"38",X"B0",X"04",X"F4",X"58",X"F4",X"1A",X"B8",X"38", + X"F0",X"07",X"A0",X"C6",X"19",X"E9",X"0A",X"24",X"13",X"B0",X"04",X"F4",X"5D",X"F4",X"1A",X"B8", + X"38",X"F0",X"07",X"A0",X"C6",X"06",X"E9",X"1B",X"24",X"13",X"B9",X"10",X"BA",X"30",X"B8",X"22", + X"B0",X"E8",X"18",X"B0",X"E0",X"F4",X"58",X"F4",X"0D",X"E9",X"35",X"24",X"13",X"B8",X"30",X"B0", + X"45",X"18",X"B0",X"0C",X"B8",X"40",X"B0",X"04",X"A5",X"27",X"62",X"44",X"68",X"80",X"F2",X"54", + X"53",X"0F",X"96",X"56",X"24",X"13",X"94",X"10",X"E5",X"B8",X"23",X"F0",X"03",X"08",X"E6",X"65", + X"27",X"AE",X"AF",X"44",X"66",X"A0",X"E9",X"4D",X"D4",X"9F",X"F8",X"C6",X"3D",X"44",X"4D",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"7F",X"04",X"08",X"0C",X"10",X"14",X"18",X"1C",X"20",X"24",X"28",X"2C",X"30",X"34",X"38",X"3C", + X"40",X"44",X"48",X"4C",X"50",X"54",X"58",X"5C",X"60",X"64",X"68",X"6C",X"70",X"74",X"78",X"7C", + X"60",X"03",X"06",X"09",X"0C",X"0F",X"12",X"15",X"18",X"1B",X"1E",X"21",X"24",X"27",X"2A",X"2D", + X"30",X"33",X"36",X"39",X"3C",X"3F",X"42",X"45",X"48",X"4B",X"4E",X"51",X"54",X"57",X"5A",X"5D", + X"40",X"02",X"04",X"06",X"08",X"0A",X"0C",X"0E",X"10",X"12",X"14",X"16",X"18",X"1A",X"1C",X"1E", + X"20",X"22",X"24",X"26",X"28",X"2A",X"2C",X"2E",X"30",X"32",X"34",X"36",X"38",X"3A",X"3C",X"3E", + X"30",X"01",X"03",X"04",X"06",X"07",X"09",X"0A",X"0C",X"0D",X"0F",X"10",X"12",X"13",X"15",X"16", + X"18",X"19",X"1B",X"1C",X"1E",X"1F",X"21",X"22",X"24",X"25",X"27",X"28",X"2A",X"2B",X"2D",X"2E", + X"20",X"01",X"02",X"03",X"04",X"05",X"06",X"07",X"08",X"09",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F", + X"10",X"11",X"12",X"13",X"14",X"15",X"16",X"17",X"18",X"19",X"1A",X"1B",X"1C",X"1D",X"1E",X"1F", + X"18",X"00",X"01",X"02",X"03",X"03",X"04",X"05",X"06",X"06",X"07",X"08",X"09",X"09",X"0A",X"0B", + X"0C",X"0C",X"0D",X"0E",X"0F",X"0F",X"10",X"11",X"12",X"12",X"13",X"14",X"15",X"15",X"16",X"17", + X"10",X"00",X"01",X"01",X"02",X"02",X"03",X"03",X"04",X"04",X"05",X"05",X"06",X"06",X"07",X"07", + X"08",X"08",X"09",X"09",X"0A",X"0A",X"0B",X"0B",X"0C",X"0C",X"0D",X"0D",X"0E",X"0E",X"0F",X"0F", + X"0C",X"00",X"00",X"01",X"01",X"01",X"02",X"02",X"03",X"03",X"03",X"04",X"04",X"04",X"05",X"05", + X"06",X"06",X"06",X"07",X"07",X"07",X"08",X"08",X"09",X"09",X"09",X"0A",X"0A",X"0A",X"0B",X"0B", + X"00",X"E0",X"01",X"80",X"20",X"40",X"C0",X"00",X"04",X"10",X"09",X"12",X"13",X"60",X"05",X"A0", + X"D5",X"B8",X"20",X"80",X"53",X"0F",X"20",X"37",X"17",X"60",X"96",X"55",X"B8",X"21",X"F0",X"C6", + X"3C",X"F2",X"E2",X"D2",X"E4",X"B2",X"E6",X"52",X"D2",X"E9",X"3C",X"FF",X"96",X"31",X"FE",X"C6", + X"91",X"FA",X"03",X"F8",X"A9",X"F6",X"39",X"B9",X"01",X"27",X"AE",X"AF",X"B8",X"40",X"F0",X"12", + X"48",X"32",X"4B",X"52",X"4E",X"F5",X"24",X"6F",X"F5",X"44",X"00",X"F5",X"44",X"7E",X"F5",X"24", + X"00",X"B8",X"21",X"B0",X"00",X"B8",X"21",X"F0",X"03",X"FC",X"C6",X"D2",X"B8",X"20",X"F0",X"A3", + X"92",X"E8",X"72",X"EA",X"F2",X"DC",X"D2",X"DE",X"B2",X"E0",X"52",X"AA",X"B8",X"21",X"F0",X"F2", + X"E2",X"D2",X"E4",X"B2",X"E6",X"52",X"D2",X"12",X"29",X"B0",X"00",X"B8",X"20",X"F0",X"A3",X"52", + X"AC",X"C6",X"EC",X"B8",X"21",X"A0",X"E7",X"43",X"F0",X"A8",X"B9",X"30",X"B1",X"03",X"19",X"B1", + X"0B",X"B8",X"30",X"D4",X"36",X"B8",X"20",X"F9",X"C6",X"51",X"B9",X"08",X"B8",X"24",X"B0",X"00", + X"FA",X"03",X"F8",X"F6",X"3C",X"FA",X"07",X"A9",X"84",X"3C",X"12",X"6C",X"B8",X"21",X"A0",X"12", + X"BA",X"B9",X"32",X"B1",X"14",X"19",X"B1",X"0B",X"84",X"C1",X"B9",X"32",X"B1",X"27",X"19",X"B1", + X"0B",X"B8",X"32",X"D4",X"36",X"B8",X"20",X"F9",X"C6",X"51",X"B8",X"24",X"B0",X"00",X"FA",X"A9", + X"84",X"3C",X"B8",X"24",X"F0",X"03",X"10",X"A0",X"E9",X"3C",X"84",X"C1",X"A4",X"00",X"A4",X"2B", + X"A4",X"4B",X"A4",X"0F",X"A4",X"38",X"A4",X"56",X"C4",X"5F",X"C4",X"B7",X"27",X"AE",X"AF",X"84", + X"3C",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"D2",X"6D",X"B8",X"21",X"A0",X"B2",X"9D",X"B9",X"18",X"BA",X"20",X"B8",X"24",X"B0",X"20",X"D2", + X"80",X"B2",X"A5",X"F4",X"3F",X"6A",X"AA",X"F6",X"F2",X"F9",X"12",X"E5",X"FA",X"03",X"80",X"E6", + X"E5",X"B8",X"24",X"F0",X"03",X"20",X"A0",X"A4",X"E5",X"84",X"3C",X"B8",X"21",X"A0",X"B2",X"B9", + X"B9",X"18",X"BA",X"40",X"B8",X"24",X"B0",X"00",X"B2",X"C1",X"F4",X"58",X"F6",X"F2",X"F9",X"03", + X"F2",X"F6",X"58",X"B8",X"24",X"F0",X"03",X"10",X"A0",X"A4",X"58",X"B8",X"21",X"A0",X"B9",X"28", + X"BA",X"60",X"B8",X"24",X"B0",X"00",X"F4",X"69",X"F9",X"53",X"03",X"C6",X"69",X"12",X"64",X"F4", + X"31",X"6A",X"A4",X"E6",X"F4",X"37",X"6A",X"A4",X"E6",X"F4",X"69",X"A4",X"E5",X"37",X"B2",X"74", + X"C5",X"F5",X"04",X"05",X"B8",X"21",X"B0",X"C0",X"B9",X"28",X"BA",X"30",X"B8",X"24",X"B0",X"00", + X"F9",X"03",X"E0",X"96",X"89",X"BA",X"48",X"A4",X"96",X"F6",X"E5",X"F9",X"53",X"03",X"96",X"96", + X"B8",X"24",X"F0",X"03",X"20",X"A0",X"F9",X"12",X"E5",X"F4",X"69",X"A4",X"E5",X"B9",X"80",X"BA", + X"E0",X"B8",X"24",X"B0",X"00",X"F9",X"12",X"AC",X"F4",X"69",X"E6",X"F2",X"F9",X"03",X"F0",X"F6", + X"E5",X"B8",X"24",X"F0",X"03",X"10",X"A0",X"A4",X"E5",X"B9",X"B0",X"BA",X"80",X"B8",X"24",X"B0", + X"00",X"F9",X"47",X"53",X"0F",X"03",X"FA",X"E6",X"D0",X"C6",X"E1",X"A8",X"E8",X"E1",X"A4",X"D0", + X"F4",X"64",X"F6",X"F2",X"F9",X"03",X"F0",X"F6",X"58",X"B8",X"24",X"F0",X"03",X"10",X"A0",X"A4", + X"58",X"F4",X"69",X"A4",X"58",X"FA",X"47",X"E7",X"AE",X"53",X"1F",X"AF",X"FE",X"53",X"E0",X"AE", + X"E9",X"29",X"B8",X"21",X"B0",X"00",X"84",X"EC",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"2D",X"24",X"2F",X"D3",X"32",X"AB",X"35",X"AF",X"38",X"E0",X"00",X"00",X"3C",X"42",X"3F",X"D7", + X"43",X"A3",X"47",X"A9",X"4B",X"EB",X"50",X"6F",X"55",X"38",X"F0",X"96",X"20",X"18",X"10",X"C8", + X"18",X"F0",X"37",X"17",X"03",X"0B",X"C6",X"2A",X"C4",X"30",X"C8",X"F0",X"10",X"F5",X"64",X"00", + X"C8",X"F0",X"10",X"F5",X"84",X"5A",X"D4",X"1A",X"A9",X"F2",X"41",X"C6",X"5E",X"AA",X"D4",X"1A", + X"A9",X"F9",X"53",X"0F",X"E7",X"A8",X"A3",X"AF",X"F8",X"17",X"A3",X"AE",X"F9",X"53",X"30",X"47", + X"A8",X"FF",X"97",X"67",X"AF",X"FE",X"67",X"AE",X"18",X"F8",X"03",X"FB",X"96",X"51",X"83",X"F4", + X"70",X"D4",X"9F",X"D4",X"AA",X"27",X"62",X"F5",X"34",X"00",X"E5",X"80",X"53",X"0F",X"03",X"F6", + X"96",X"74",X"84",X"10",X"B8",X"23",X"F0",X"03",X"08",X"E6",X"80",X"27",X"AE",X"AF",X"C4",X"81", + X"A0",X"E9",X"88",X"D4",X"9F",X"F8",X"C6",X"DC",X"D5",X"B8",X"24",X"F0",X"03",X"08",X"E6",X"95", + X"27",X"AE",X"AF",X"C4",X"96",X"A0",X"E9",X"67",X"D4",X"AA",X"F8",X"C6",X"DC",X"C4",X"67",X"B8", + X"23",X"B0",X"00",X"C5",X"B8",X"30",X"D4",X"36",X"C4",X"B3",X"B8",X"24",X"B0",X"00",X"D5",X"B8", + X"32",X"D4",X"36",X"FA",X"29",X"A8",X"83",X"F4",X"70",X"85",X"A5",X"D4",X"A3",X"B8",X"23",X"B0", + X"20",X"D4",X"AE",X"B8",X"24",X"B0",X"20",X"27",X"62",X"F5",X"34",X"00",X"E5",X"E9",X"D4",X"D4", + X"9F",X"F8",X"C6",X"DC",X"D5",X"E9",X"C9",X"D4",X"AA",X"F8",X"96",X"C9",X"27",X"D5",X"AE",X"AF", + X"C5",X"AE",X"AF",X"24",X"13",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FA",X"47",X"E7",X"AE",X"53",X"1F",X"AF",X"FE",X"53",X"E0",X"AE",X"84",X"10",X"FA",X"77",X"77", + X"AE",X"53",X"3F",X"AF",X"FE",X"53",X"C0",X"AE",X"84",X"10",X"FA",X"77",X"AE",X"53",X"7F",X"AF", + X"FE",X"53",X"80",X"AE",X"84",X"10",X"FE",X"6F",X"E6",X"2B",X"1F",X"6F",X"E6",X"2F",X"1F",X"AE", + X"83",X"FA",X"97",X"67",X"C6",X"56",X"83",X"FA",X"77",X"77",X"53",X"3F",X"C6",X"56",X"83",X"FA", + X"47",X"E7",X"53",X"1F",X"C6",X"56",X"83",X"FA",X"47",X"53",X"0F",X"C6",X"56",X"83",X"FA",X"47", + X"77",X"53",X"07",X"C6",X"56",X"83",X"17",X"83",X"F4",X"47",X"6A",X"AA",X"83",X"F4",X"47",X"37", + X"17",X"6A",X"AA",X"83",X"F4",X"4E",X"6A",X"AA",X"83",X"F4",X"4E",X"37",X"17",X"6A",X"AA",X"83", + X"53",X"07",X"E7",X"E7",X"43",X"F0",X"A8",X"B9",X"30",X"A3",X"A1",X"18",X"19",X"F8",X"A3",X"A1", + X"18",X"19",X"F8",X"A3",X"A1",X"18",X"19",X"F8",X"A3",X"A1",X"83",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"2A",X"0B",X"35",X"0B",X"43",X"0B",X"60",X"0B",X"78",X"0B",X"9E",X"0B",X"EB",X"0B",X"F7",X"0B", + X"9A",X"DF",X"E5",X"34",X"01",X"15",X"B9",X"08",X"BA",X"18",X"B8",X"23",X"B0",X"00",X"18",X"B0", + X"00",X"14",X"2A",X"B9",X"80",X"BA",X"18",X"B8",X"23",X"B0",X"00",X"18",X"B0",X"00",X"14",X"2A", + X"D5",X"BE",X"00",X"BF",X"00",X"C5",X"05",X"E5",X"34",X"13",X"FA",X"47",X"E7",X"AE",X"53",X"1F", + X"AF",X"FE",X"53",X"E0",X"AE",X"D5",X"AE",X"C5",X"FF",X"D5",X"AF",X"E5",X"F4",X"26",X"F4",X"26", + X"F5",X"C5",X"14",X"5E",X"E5",X"F4",X"4E",X"F5",X"37",X"17",X"6A",X"AA",X"E6",X"20",X"B8",X"23", + X"F0",X"03",X"10",X"A0",X"18",X"F0",X"03",X"10",X"A0",X"F6",X"20",X"E9",X"2A",X"83",X"C5",X"16", + X"61",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"E6",X"70",X"B8",X"23",X"F0",X"53",X"E0",X"AB",X"FD", + X"77",X"77",X"53",X"3F",X"B2",X"79",X"27",X"04",X"7B",X"FB",X"E3",X"A8",X"D5",X"FC",X"6E",X"AC", + X"FD",X"7F",X"AD",X"E6",X"8C",X"B8",X"24",X"F0",X"53",X"E0",X"AB",X"FD",X"77",X"77",X"53",X"3F", + X"B2",X"95",X"27",X"04",X"97",X"FB",X"E3",X"C5",X"68",X"90",X"16",X"9E",X"04",X"61",X"83",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"15",X"C5",X"16",X"04",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"F6",X"13",X"8A",X"20",X"00",X"9A", + X"DF",X"24",X"1A",X"B8",X"23",X"F0",X"53",X"E0",X"AB",X"FD",X"77",X"77",X"53",X"3F",X"96",X"28", + X"8A",X"20",X"A3",X"9A",X"DF",X"27",X"24",X"34",X"B2",X"2E",X"00",X"00",X"24",X"32",X"37",X"17", + X"53",X"1F",X"6B",X"E3",X"A8",X"D5",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"F6",X"45",X"8A",X"20", + X"00",X"9A",X"DF",X"24",X"4C",X"B8",X"24",X"F0",X"53",X"E0",X"AB",X"FD",X"77",X"77",X"53",X"3F", + X"96",X"5A",X"8A",X"20",X"A3",X"9A",X"DF",X"27",X"24",X"66",X"B2",X"60",X"00",X"00",X"24",X"64", + X"37",X"17",X"53",X"1F",X"6B",X"E3",X"C5",X"68",X"90",X"16",X"6D",X"24",X"04",X"05",X"83",X"15", + X"C5",X"16",X"73",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"E6",X"D8",X"B6",X"DA",X"B8",X"22",X"F0", + X"18",X"60",X"A0",X"53",X"E0",X"AB",X"FD",X"77",X"77",X"53",X"3F",X"96",X"95",X"8A",X"20",X"A3", + X"9A",X"DF",X"27",X"24",X"A1",X"B2",X"9B",X"00",X"00",X"24",X"9F",X"37",X"17",X"53",X"1F",X"6B", + X"E3",X"A8",X"D5",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"F6",X"AD",X"24",X"B4",X"B8",X"24",X"F0", + X"53",X"E0",X"AB",X"FD",X"77",X"77",X"53",X"3F",X"96",X"C2",X"8A",X"20",X"A3",X"9A",X"DF",X"27", + X"24",X"CE",X"B2",X"C8",X"00",X"00",X"24",X"CC",X"37",X"17",X"53",X"1F",X"6B",X"E3",X"C5",X"68", + X"90",X"16",X"D5",X"24",X"73",X"05",X"E5",X"83",X"24",X"87",X"B5",X"76",X"E6",X"FE",X"97",X"F7", + X"AE",X"FF",X"F7",X"AF",X"24",X"7D",X"FF",X"97",X"67",X"AF",X"FE",X"67",X"AE",X"24",X"7D",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"15",X"C5",X"16",X"04",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"E6",X"66",X"B6",X"68",X"B8",X"23", + X"F0",X"53",X"E0",X"AB",X"FD",X"77",X"77",X"53",X"3F",X"96",X"23",X"8A",X"20",X"A3",X"9A",X"DF", + X"27",X"44",X"2F",X"B2",X"29",X"00",X"00",X"44",X"2D",X"37",X"17",X"53",X"1F",X"6B",X"E3",X"A8", + X"D5",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"F6",X"3B",X"44",X"42",X"B8",X"24",X"F0",X"53",X"E0", + X"AB",X"FD",X"77",X"77",X"53",X"3F",X"96",X"50",X"8A",X"20",X"A3",X"9A",X"DF",X"27",X"44",X"5C", + X"B2",X"56",X"00",X"00",X"44",X"5A",X"37",X"17",X"53",X"1F",X"6B",X"E3",X"C5",X"68",X"90",X"16", + X"63",X"44",X"04",X"05",X"E5",X"83",X"44",X"15",X"76",X"74",X"FE",X"97",X"F7",X"AE",X"FF",X"F7", + X"AF",X"85",X"44",X"0E",X"FF",X"97",X"67",X"AF",X"FE",X"67",X"AE",X"A5",X"44",X"0E",X"C5",X"16", + X"81",X"FF",X"96",X"85",X"1F",X"FE",X"6C",X"AC",X"FF",X"5A",X"7D",X"AD",X"B6",X"90",X"E6",X"A7", + X"FF",X"77",X"AF",X"FE",X"67",X"AE",X"FF",X"F6",X"A1",X"12",X"A3",X"53",X"7F",X"AF",X"FD",X"44", + X"A7",X"12",X"9B",X"43",X"80",X"AF",X"FD",X"77",X"77",X"53",X"3F",X"96",X"B3",X"A3",X"A3",X"A3", + X"27",X"44",X"BF",X"B2",X"B9",X"00",X"00",X"44",X"BD",X"37",X"17",X"53",X"1F",X"6B",X"E3",X"A8", + X"D5",X"FC",X"6E",X"AC",X"FD",X"7F",X"AD",X"F6",X"CB",X"44",X"D2",X"B8",X"24",X"F0",X"53",X"E0", + X"AB",X"FD",X"77",X"77",X"53",X"3F",X"96",X"DE",X"A3",X"A3",X"A3",X"27",X"44",X"EA",X"B2",X"E4", + X"00",X"00",X"44",X"E8",X"37",X"17",X"53",X"1F",X"6B",X"E3",X"C5",X"68",X"90",X"16",X"F1",X"44", + X"85",X"E5",X"83",X"44",X"A7",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"A3",X"E5",X"83",X"0C",X"A0",X"A0",X"A4",X"18",X"A8",X"0C",X"A4",X"06",X"A8",X"A9",X"AA",X"AB", + X"AC",X"0C",X"B0",X"00",X"08",X"BC",X"B7",X"BC",X"B7",X"BC",X"B7",X"BC",X"B7",X"BC",X"B7",X"BC", + X"B7",X"BC",X"B7",X"BC",X"10",X"B7",X"00",X"08",X"BA",X"00",X"0A",X"AC",X"AA",X"14",X"A8",X"A8", + X"A8",X"AC",X"50",X"B0",X"00",X"14",X"86",X"98",X"92",X"8C",X"88",X"0A",X"80",X"82",X"84",X"88", + X"28",X"90",X"00",X"2A",X"B0",X"0E",X"A8",X"2A",X"B0",X"0E",X"A8",X"B0",X"A8",X"B0",X"B4",X"38", + X"B8",X"2A",X"B6",X"0E",X"B2",X"2A",X"B6",X"0E",X"B2",X"B6",X"B2",X"AC",X"B2",X"38",X"A8",X"00", + X"2A",X"90",X"0E",X"88",X"2A",X"90",X"0E",X"88",X"70",X"90",X"2A",X"92",X"0E",X"8C",X"2A",X"92", + X"0E",X"8C",X"1C",X"92",X"8C",X"38",X"88",X"00",X"03",X"AC",X"15",X"B0",X"18",X"AC",X"0C",X"AA", + X"24",X"A8",X"03",X"A9",X"15",X"AA",X"18",X"A8",X"0C",X"A6",X"24",X"A4",X"18",X"A2",X"A6",X"0C", + X"AA",X"24",X"B0",X"03",X"B1",X"2D",X"B2",X"03",X"B3",X"2D",X"B4",X"60",X"B0",X"00",X"18",X"A0", + X"98",X"94",X"90",X"98",X"90",X"8A",X"86",X"92",X"8A",X"86",X"82",X"06",X"98",X"96",X"98",X"96", + X"18",X"98",X"06",X"94",X"92",X"94",X"92",X"18",X"94",X"06",X"90",X"8C",X"90",X"8C",X"90",X"8C", + X"90",X"8C",X"30",X"90",X"00",X"0E",X"AA",X"A8",X"AA",X"AC",X"B0",X"B2",X"B4",X"B2",X"B0",X"AC", + X"AA",X"A8",X"1C",X"AA",X"0E",X"B6",X"B4",X"AC",X"B2",X"54",X"B0",X"00",X"1C",X"96",X"90",X"8A", + X"90",X"88",X"84",X"96",X"90",X"88",X"1C",X"90",X"38",X"90",X"00",X"0A",X"A8",X"AC",X"B2",X"B6", + X"B8",X"B6",X"B2",X"AC",X"28",X"A8",X"00",X"28",X"98",X"92",X"88",X"00",X"10",X"90",X"20",X"90", + X"10",X"88",X"90",X"80",X"80",X"80",X"10",X"90",X"20",X"90",X"10",X"90",X"08",X"98",X"10",X"96", + X"18",X"94",X"10",X"92",X"10",X"90",X"20",X"90",X"10",X"88",X"90",X"80",X"80",X"80",X"10",X"90", + X"20",X"90",X"10",X"90",X"08",X"98",X"10",X"96",X"18",X"94",X"10",X"92",X"10",X"94",X"20",X"94", + X"10",X"8C",X"94",X"84",X"84",X"84",X"10",X"94",X"20",X"94",X"10",X"94",X"08",X"9A",X"10",X"98", + X"18",X"96",X"10",X"94",X"00",X"1C",X"A0",X"0E",X"A4",X"1C",X"9B",X"0E",X"A2",X"1C",X"A0",X"0E", + X"A0",X"A4",X"A2",X"1C",X"99",X"0E",X"A4",X"1C",X"A2",X"00",X"A3",X"E5",X"83",X"A3",X"E5",X"83", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF", + X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF",X"FF"); +begin +process(clk) +begin + if rising_edge(clk) then + data <= rom_data(to_integer(unsigned(addr))); + end if; +end process; +end architecture; diff --git a/Arcade_MiST/Nintendo Mario Bros/rtl/sdram.sv b/Arcade_MiST/Nintendo Mario Bros/rtl/sdram.sv new file mode 100644 index 00000000..5299b46e --- /dev/null +++ b/Arcade_MiST/Nintendo Mario Bros/rtl/sdram.sv @@ -0,0 +1,329 @@ +// +// sdram.v +// +// sdram controller implementation for the MiST board +// https://github.com/mist-devel/mist-board +// +// Copyright (c) 2013 Till Harbaum +// Copyright (c) 2019 Gyorgy Szombathelyi +// +// This source file is free software: you can redistribute it and/or modify +// it under the terms of the 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 sdram ( + + // interface to the MT48LC16M16 chip + inout reg [15:0] SDRAM_DQ, // 16 bit bidirectional data bus + output reg [12:0] SDRAM_A, // 13 bit multiplexed address bus + output reg SDRAM_DQML, // two byte masks + output reg SDRAM_DQMH, // two byte masks + output reg [1:0] SDRAM_BA, // two banks + output SDRAM_nCS, // a single chip select + output SDRAM_nWE, // write enable + output SDRAM_nRAS, // row address select + output SDRAM_nCAS, // columns address select + + // cpu/chipset interface + input init_n, // init signal after FPGA config to initialize RAM + input clk, // sdram clock + + input port1_req, + output reg port1_ack, + input port1_we, + input [23:1] port1_a, + input [1:0] port1_ds, + input [15:0] port1_d, + output [15:0] port1_q, + + input [15:1] cpu1_addr, + output reg [15:0] cpu1_q, + + input port2_req, + output reg port2_ack, + input port2_we, + input [23:1] port2_a, + input [1:0] port2_ds, + input [15:0] port2_d, + output [15:0] port2_q, + + input [15:1] snd_addr, + output reg [15:0] snd_q +); + +parameter MHZ = 16'd50; // 80 MHz default clock, set it to proper value to calculate refresh rate + +localparam RASCAS_DELAY = 3'd2; // tRCD=20ns -> 2 cycles@<100MHz +localparam BURST_LENGTH = 3'b000; // 000=1, 001=2, 010=4, 011=8 +localparam ACCESS_TYPE = 1'b0; // 0=sequential, 1=interleaved +localparam CAS_LATENCY = 3'd2; // 2/3 allowed +localparam OP_MODE = 2'b00; // only 00 (standard operation) allowed +localparam NO_WRITE_BURST = 1'b1; // 0= write burst enabled, 1=only single access write + +localparam MODE = { 3'b000, NO_WRITE_BURST, OP_MODE, CAS_LATENCY, ACCESS_TYPE, BURST_LENGTH}; + +// 64ms/8192 rows = 7.8us +localparam RFRSH_CYCLES = 16'd78*MHZ/4'd10; + +// --------------------------------------------------------------------- +// ------------------------ cycle state machine ------------------------ +// --------------------------------------------------------------------- + +/* + SDRAM state machine for 2 bank interleaved access + 1 word burst, CL2 +cmd issued registered + 0 RAS0 cas1 + 1 ras0 + 2 CAS0 data1 returned + 3 RAS1 cas0 + 4 ras1 + 5 CAS1 data0 returned +*/ + +localparam STATE_RAS0 = 3'd0; // first state in cycle +localparam STATE_RAS1 = 3'd3; // Second ACTIVE command after RAS0 + tRRD (15ns) +localparam STATE_CAS0 = STATE_RAS0 + RASCAS_DELAY; // CAS phase - 3 +localparam STATE_CAS1 = STATE_RAS1 + RASCAS_DELAY; // CAS phase - 5 +localparam STATE_READ0 = 3'd0; //STATE_CAS0 + CAS_LATENCY + 1'd1; // 7 +localparam STATE_READ1 = 3'd3; +localparam STATE_LAST = 3'd5; + +reg [2:0] t; + +always @(posedge clk) begin + t <= t + 1'd1; + if (t == STATE_LAST) t <= STATE_RAS0; +end + +// --------------------------------------------------------------------- +// --------------------------- startup/reset --------------------------- +// --------------------------------------------------------------------- + +// wait 1ms (32 8Mhz cycles) after FPGA config is done before going +// into normal operation. Initialize the ram in the last 16 reset cycles (cycles 15-0) +reg [4:0] reset; +reg init = 1'b1; +always @(posedge clk, negedge init_n) begin + if(!init_n) begin + reset <= 5'h1f; + init <= 1'b1; + end else begin + if((t == STATE_LAST) && (reset != 0)) reset <= reset - 5'd1; + init <= !(reset == 0); + end +end + +// --------------------------------------------------------------------- +// ------------------ generate ram control signals --------------------- +// --------------------------------------------------------------------- + +// all possible commands +localparam CMD_INHIBIT = 4'b1111; +localparam CMD_NOP = 4'b0111; +localparam CMD_ACTIVE = 4'b0011; +localparam CMD_READ = 4'b0101; +localparam CMD_WRITE = 4'b0100; +localparam CMD_BURST_TERMINATE = 4'b0110; +localparam CMD_PRECHARGE = 4'b0010; +localparam CMD_AUTO_REFRESH = 4'b0001; +localparam CMD_LOAD_MODE = 4'b0000; + +reg [3:0] sd_cmd; // current command sent to sd ram +reg [15:0] sd_din; +// drive control signals according to current command +assign SDRAM_nCS = sd_cmd[3]; +assign SDRAM_nRAS = sd_cmd[2]; +assign SDRAM_nCAS = sd_cmd[1]; +assign SDRAM_nWE = sd_cmd[0]; + +reg [24:1] addr_latch[2]; +reg [24:1] addr_latch_next[2]; +reg [15:1] addr_last[2]; +reg [15:1] addr_last2[2]; +reg [15:0] din_latch[2]; +reg [1:0] oe_latch; +reg [1:0] we_latch; +reg [1:0] ds[2]; + +localparam PORT_NONE = 2'd0; +localparam PORT_CPU1 = 2'd1; +localparam PORT_REQ = 2'd2; + +localparam PORT_SND = 2'd1; + +reg [2:0] next_port[2]; +reg [2:0] port[2]; +reg port1_state; +reg port2_state; + +reg refresh; +reg [10:0] refresh_cnt; +wire need_refresh = (refresh_cnt >= RFRSH_CYCLES); + +// PORT1: bank 0,1 +always @(*) begin + if (refresh) begin + next_port[0] = PORT_NONE; + addr_latch_next[0] = addr_latch[0]; + end else if (port1_req ^ port1_state) begin + next_port[0] = PORT_REQ; + addr_latch_next[0] = { 1'b0, port1_a }; + end else if (cpu1_addr != addr_last[PORT_CPU1]) begin + next_port[0] = PORT_CPU1; + addr_latch_next[0] = { 9'd0, cpu1_addr }; + end else begin + next_port[0] = PORT_NONE; + addr_latch_next[0] = addr_latch[0]; + end +end + +// PORT2: bank 2,3 +always @(*) begin + if (port2_req ^ port2_state) begin + next_port[1] = PORT_REQ; + addr_latch_next[1] = { 1'b1, port2_a }; + end else if (snd_addr != addr_last2[PORT_SND]) begin + next_port[1] = PORT_SND; + addr_latch_next[1] = { 1'b1, 8'd0, snd_addr }; + end else begin + next_port[1] = PORT_NONE; + addr_latch_next[1] = addr_latch[1]; + end +end + +always @(posedge clk) begin + + // permanently latch ram data to reduce delays + sd_din <= SDRAM_DQ; + SDRAM_DQ <= 16'bZZZZZZZZZZZZZZZZ; + { SDRAM_DQMH, SDRAM_DQML } <= 2'b11; + sd_cmd <= CMD_NOP; // default: idle + refresh_cnt <= refresh_cnt + 1'd1; + + if(init) begin + // initialization takes place at the end of the reset phase + if(t == STATE_RAS0) begin + + if(reset == 15) begin + sd_cmd <= CMD_PRECHARGE; + SDRAM_A[10] <= 1'b1; // precharge all banks + end + + if(reset == 10 || reset == 8) begin + sd_cmd <= CMD_AUTO_REFRESH; + end + + if(reset == 2) begin + sd_cmd <= CMD_LOAD_MODE; + SDRAM_A <= MODE; + SDRAM_BA <= 2'b00; + end + end + end else begin + // RAS phase + // bank 0,1 + if(t == STATE_RAS0) begin + addr_latch[0] <= addr_latch_next[0]; + port[0] <= next_port[0]; + { oe_latch[0], we_latch[0] } <= 2'b00; + + if (next_port[0] != PORT_NONE) begin + sd_cmd <= CMD_ACTIVE; + SDRAM_A <= addr_latch_next[0][22:10]; + SDRAM_BA <= addr_latch_next[0][24:23]; + addr_last[next_port[0]] <= addr_latch_next[0][15:1]; + if (next_port[0] == PORT_REQ) begin + { oe_latch[0], we_latch[0] } <= { ~port1_we, port1_we }; + ds[0] <= port1_ds; + din_latch[0] <= port1_d; + port1_state <= port1_req; + end else begin + { oe_latch[0], we_latch[0] } <= 2'b10; + ds[0] <= 2'b11; + end + end + end + + // bank 2,3 + if(t == STATE_RAS1) begin + refresh <= 1'b0; + addr_latch[1] <= addr_latch_next[1]; + { oe_latch[1], we_latch[1] } <= 2'b00; + port[1] <= next_port[1]; + + if (next_port[1] != PORT_NONE) begin + sd_cmd <= CMD_ACTIVE; + SDRAM_A <= addr_latch_next[1][22:10]; + SDRAM_BA <= addr_latch_next[1][24:23]; + addr_last2[next_port[1]] <= addr_latch_next[1][15:1]; + if (next_port[1] == PORT_REQ) begin + { oe_latch[1], we_latch[1] } <= { ~port2_we, port2_we }; + ds[1] <= port2_ds; + din_latch[1] <= port2_d; + port2_state <= port2_req; + end else begin + { oe_latch[1], we_latch[1] } <= 2'b10; + ds[1] <= 2'b11; + end + end + + if (next_port[1] == PORT_NONE && need_refresh && !we_latch[0] && !oe_latch[0]) begin + refresh <= 1'b1; + refresh_cnt <= 0; + sd_cmd <= CMD_AUTO_REFRESH; + end + end + + // CAS phase + if(t == STATE_CAS0 && (we_latch[0] || oe_latch[0])) begin + sd_cmd <= we_latch[0]?CMD_WRITE:CMD_READ; + { SDRAM_DQMH, SDRAM_DQML } <= ~ds[0]; + if (we_latch[0]) begin + SDRAM_DQ <= din_latch[0]; + port1_ack <= port1_req; + end + SDRAM_A <= { 4'b0010, addr_latch[0][9:1] }; // auto precharge + SDRAM_BA <= addr_latch[0][24:23]; + end + + if(t == STATE_CAS1 && (we_latch[1] || oe_latch[1])) begin + sd_cmd <= we_latch[1]?CMD_WRITE:CMD_READ; + { SDRAM_DQMH, SDRAM_DQML } <= ~ds[1]; + if (we_latch[1]) begin + SDRAM_DQ <= din_latch[1]; + port2_ack <= port2_req; + end + SDRAM_A <= { 4'b0010, addr_latch[1][9:1] }; // auto precharge + SDRAM_BA <= addr_latch[1][24:23]; + end + + // Data returned + if(t == STATE_READ0 && oe_latch[0]) begin + case(port[0]) + PORT_REQ: begin port1_q <= sd_din; port1_ack <= port1_req; end + PORT_CPU1: begin cpu1_q <= sd_din; end + default: ; + endcase; + end + if(t == STATE_READ1 && oe_latch[1]) begin + case(port[1]) + PORT_REQ: begin port2_q <= sd_din; port2_ack <= port2_req; end + PORT_SND: begin snd_q <= sd_din; end + default: ; + endcase; + end + end +end + +endmodule