1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-03-07 19:20:57 +00:00

Add Mario Bros Project Files

This commit is contained in:
Marcel
2021-03-30 19:51:58 +02:00
parent f70d4b47b7
commit 1debc30d46
38 changed files with 7162 additions and 0 deletions

View File

@@ -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"

View File

@@ -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

Binary file not shown.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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"]

View File

@@ -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

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 <till@harbaum.org>
// 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 <http://www.gnu.org/licenses/>.
//
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