diff --git a/lib/SSRAM/sim/ModelSim SE .lnk b/lib/SSRAM/sim/ModelSim SE .lnk
new file mode 100644
index 0000000..0cc072f
Binary files /dev/null and b/lib/SSRAM/sim/ModelSim SE .lnk differ
diff --git a/lib/SSRAM/sim/tb_ssram_frontend_wb.fdo b/lib/SSRAM/sim/tb_ssram_frontend_wb.fdo
new file mode 100644
index 0000000..9aafbb0
--- /dev/null
+++ b/lib/SSRAM/sim/tb_ssram_frontend_wb.fdo
@@ -0,0 +1,17 @@
+## NOTE: Do not edit this file.
+##
+vlib work
+
+# Top and TB
+vcom -explicit -93 "../src/package_utility.vhd"
+vcom -explicit -93 "../src/CY7C1354B.vhd"
+vcom -explicit -93 "../src/ssram_frontend_wb.vhd"
+vcom -explicit -93 "../src/tb_ssram_frontend_wb.vhd"
+
+vsim -t 1ps -lib work tb_ssram_frontend_wb
+do {tb_ssram_frontend_wb.wdo}
+view wave
+view structure
+view signals
+run 6us
+
\ No newline at end of file
diff --git a/lib/SSRAM/sim/tb_ssram_frontend_wb.wdo b/lib/SSRAM/sim/tb_ssram_frontend_wb.wdo
new file mode 100644
index 0000000..71718ed
--- /dev/null
+++ b/lib/SSRAM/sim/tb_ssram_frontend_wb.wdo
@@ -0,0 +1,47 @@
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/clk_o
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/rst_o
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/cyc_o
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/stb_o
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/we_o
+add wave -noupdate -format Literal /tb_ssram_frontend_wb/sel_o
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ack_i
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/mrdy_o
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/srdy_i
+add wave -noupdate -format Literal -radix hexadecimal /tb_ssram_frontend_wb/addr_o
+add wave -noupdate -format Literal -radix hexadecimal /tb_ssram_frontend_wb/dat_i
+add wave -noupdate -format Literal -radix hexadecimal /tb_ssram_frontend_wb/dat_o
+add wave -noupdate -format Literal -radix hexadecimal /tb_ssram_frontend_wb/ssram_d
+add wave -noupdate -format Literal /tb_ssram_frontend_wb/ssram_dp
+add wave -noupdate -format Literal -radix hexadecimal /tb_ssram_frontend_wb/ssram_a
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_clk
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_cke_n
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_adv
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_mode
+add wave -noupdate -format Literal /tb_ssram_frontend_wb/ssram_bw_n
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_we_n
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_oe_n
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_ce_n
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_zz
+add wave -noupdate -format Literal -radix hexadecimal /tb_ssram_frontend_wb/dout_reg
+add wave -noupdate -format Literal -radix unsigned /tb_ssram_frontend_wb/dout_cnt
+add wave -noupdate -format Literal /tb_ssram_frontend_wb/inst_ssram_frontend_wb/vld_pipe
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_clk_fb
+add wave -noupdate -format Logic /tb_ssram_frontend_wb/ssram_clk
+TreeUpdate [SetDefaultTree]
+WaveRestoreCursors {{Cursor 1} {1343191 ps} 0} {{Cursor 2} {178651436 ps} 0}
+configure wave -namecolwidth 150
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 1
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+update
+WaveRestoreZoom {0 ps} {6300 ns}
diff --git a/lib/SSRAM/src/CY7C1354B.vhd b/lib/SSRAM/src/CY7C1354B.vhd
new file mode 100644
index 0000000..d652656
--- /dev/null
+++ b/lib/SSRAM/src/CY7C1354B.vhd
@@ -0,0 +1,388 @@
+-----------------------------------------------------------------------------------------
+--
+-- File Name: CY7C1354B.VHD
+-- Version: 2.0
+-- Date: Nov 22nd, 2004
+-- Model: BUS Functional
+--
+--
+-- Author: RKF
+-- Company: Cypress Semiconductor
+-- Model: CY7C1354B (256k x 36)
+-- Mode: Pipelined
+--
+-- Description: NoBL SRAM VHDL Model
+--
+-- Limitation: None
+--
+-- Note: - BSDL Model available separately
+-- - Set simulator resolution to "ps" timescale
+--
+-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY
+-- WHATSOEVER AND CYPRESS SPECIFICALLY DISCLAIMS ANY
+-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
+-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.
+--
+-- Copyright (c) 2004 Cypress Semiconductor
+-- All rights reserved
+--
+-- Trademarks: NoBL and No Bus Latency are trademarks of Cypress Semiconductor
+--
+-- Rev Author Date Changes
+-- --- -------- ------- ----------
+-- 2.0 RKF 11/22/2004 - Second Release
+-- - Fully Tested with New Test Bench and Test Vectors
+-----------------------------------------------------------------------------------------
+
+LIBRARY ieee,work;
+ USE ieee.std_logic_1164.all;
+ USE ieee.std_logic_unsigned.all;
+ Use IEEE.Std_Logic_Arith.all;
+-- Use work.all;
+ USE work.package_utility.all;
+
+ENTITY cy7c1354 IS
+
+ GENERIC (
+
+ -- Constant parameters
+ addr_bits : INTEGER := 18;
+ data_bits : INTEGER := 32;
+ par_bits : INTEGER := 4;
+
+ -- Timing parameters for -5 (225 Mhz)
+-- tCYC : TIME := 4.4 ns;
+-- tCH : TIME := 1.8 ns;
+-- tCL : TIME := 1.8 ns;
+-- tCO : TIME := 2.8 ns;
+-- tAS : TIME := 1.4 ns;
+-- tCENS : TIME := 1.4 ns;
+-- tWES : TIME := 1.4 ns;
+-- tDS : TIME := 1.4 ns;
+-- tAH : TIME := 0.4 ns;
+-- tCENH : TIME := 0.4 ns;
+-- tWEH : TIME := 0.4 ns;
+-- tDH : TIME := 0.4 ns
+
+
+
+ -- Timing parameters for -6 (200 Mhz)
+ --tCYC : TIME := 5.0 ns;
+ --tCH : TIME := 2.0 ns;
+ --tCL : TIME := 2.0 ns;
+ --tCO : TIME := 3.2 ns;
+ --tAS : TIME := 1.5 ns;
+ --tCENS : TIME := 1.5 ns;
+ --tWES : TIME := 1.5 ns;
+ --tDS : TIME := 1.5 ns;
+ --tAH : TIME := 0.5 ns;
+ --tCENH : TIME := 0.5 ns;
+ --tWEH : TIME := 0.5 ns;
+ --tDH : TIME := 0.5 ns
+
+
+ -- Timing parameters for -7 (166 Mhz)
+ tCYC : TIME := 6.0 ns;
+ tCH : TIME := 2.4 ns;
+ tCL : TIME := 2.4 ns;
+ tCO : TIME := 3.5 ns;
+ tAS : TIME := 1.5 ns;
+ tCENS : TIME := 1.5 ns;
+ tWES : TIME := 1.5 ns;
+ tDS : TIME := 1.5 ns;
+ tAH : TIME := 0.5 ns;
+ tCENH : TIME := 0.5 ns;
+ tWEH : TIME := 0.5 ns;
+ tDH : TIME := 0.5 ns
+
+
+
+ );
+
+ -- Port Declarations
+ PORT (
+ Dq : INOUT STD_LOGIC_VECTOR ((data_bits - 1) DOWNTO 0); -- Data I/O
+ Dpq : INOUT STD_LOGIC_VECTOR ((par_bits - 1) DOWNTO 0); -- Data parity I/O
+ Addr : IN STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0); -- Address
+ Mode : IN STD_LOGIC := '1'; -- Burst Mode
+ Clk : IN STD_LOGIC; -- Clk
+ CEN_n : IN STD_LOGIC; -- CEN#
+ AdvLd_n : IN STD_LOGIC; -- Adv/Ld#
+ Bwa_n : IN STD_LOGIC; -- Bwa#
+ Bwb_n : IN STD_LOGIC; -- BWb#
+ Bwc_n : IN STD_LOGIC; -- Bwc#
+ Bwd_n : IN STD_LOGIC; -- BWd#
+ Rw_n : IN STD_LOGIC; -- RW#
+ Oe_n : IN STD_LOGIC; -- OE#
+ Ce1_n : IN STD_LOGIC; -- CE1#
+ Ce2 : IN STD_LOGIC; -- CE2
+ Ce3_n : IN STD_LOGIC; -- CE3#
+ Zz : IN STD_LOGIC -- Snooze Mode
+ );
+END cy7c1354;
+
+ARCHITECTURE behave OF cy7c1354 IS
+ SIGNAL ce : STD_LOGIC := '0';
+ SIGNAL doe : STD_LOGIC := '0';
+ SIGNAL dout : STD_LOGIC_VECTOR ((data_bits - 1) DOWNTO 0) := (OTHERS => 'Z');
+ SIGNAL dout_p : STD_LOGIC_VECTOR ((par_bits - 1) DOWNTO 0) := (OTHERS => 'Z');
+ SIGNAL Addr_read_sig : STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => 'Z');
+
+BEGIN
+
+
+ ce <= NOT(Ce1_n) AND NOT(Ce3_n) AND Ce2;
+
+ doe <= NOT(Oe_n) AND NOT(Zz);
+
+ -- Output Buffers
+ WITH doe SELECT
+ Dq <= TRANSPORT dout AFTER (tCO) WHEN '1',
+ (OTHERS => 'Z') AFTER (tCO) WHEN OTHERS;
+
+ WITH doe SELECT
+ Dpq <= TRANSPORT dout_p AFTER (tCO) WHEN '1',
+ (OTHERS => 'Z') AFTER (tCO) WHEN OTHERS;
+
+
+ -- Check for Clock Timing Violation
+ clk_check : PROCESS
+ VARIABLE clk_high, clk_low : TIME := 0 ns;
+ BEGIN
+ WAIT ON Clk;
+ IF Clk = '1' AND NOW >= tCYC THEN
+ ASSERT (NOW - clk_low >= tCH)
+ REPORT "Clk width low - tCH violation"
+ SEVERITY ERROR;
+ ASSERT (NOW - clk_high >= tCYC)
+ REPORT "Clk period high - tCYC violation"
+ SEVERITY ERROR;
+ clk_high := NOW;
+ ELSIF Clk = '0' AND NOW /= 0 ns THEN
+ ASSERT (NOW - clk_high >= tCL)
+ REPORT "Clk width high - tCL violation"
+ SEVERITY ERROR;
+ ASSERT (NOW - clk_low >= tCYC)
+ REPORT "Clk period low - tCYC violation"
+ SEVERITY ERROR;
+ clk_low := NOW;
+ END IF;
+ END PROCESS;
+
+ -- Check for Setup Timing Violation
+ setup_check : PROCESS
+ BEGIN
+ WAIT ON Clk;
+ IF Clk = '1' and (Ce1_n = '0' and Ce2 = '1' and Ce3_n = '0') THEN
+ ASSERT (Addr'LAST_EVENT >= tAS)
+ REPORT "Addr - tAS violation"
+ SEVERITY ERROR;
+ ASSERT (CEN_n'LAST_EVENT >= tCENS)
+ REPORT "CKE# - tCENS violation"
+ SEVERITY ERROR;
+ ASSERT (Ce1_n'LAST_EVENT >= tWES)
+ REPORT "CE1# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Ce2'LAST_EVENT >= tWES)
+ REPORT "CE2 - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Ce3_n'LAST_EVENT >= tWES)
+ REPORT "CE3# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (AdvLd_n'LAST_EVENT >= tWES)
+ REPORT "ADV/LD# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Rw_n'LAST_EVENT >= tWES)
+ REPORT "RW# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Bwa_n'LAST_EVENT >= tWES)
+ REPORT "BWa# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Bwb_n'LAST_EVENT >= tWES)
+ REPORT "BWb# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Bwc_n'LAST_EVENT >= tWES)
+ REPORT "BWc# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Bwd_n'LAST_EVENT >= tWES)
+ REPORT "BWd# - tWES violation"
+ SEVERITY ERROR;
+ ASSERT (Dq'LAST_EVENT >= tDS)
+ REPORT "Dq - tDS violation"
+ SEVERITY ERROR;
+ END IF;
+ END PROCESS;
+
+ -- Check for Hold Timing Violation
+ hold_check : PROCESS
+ BEGIN
+ WAIT ON Clk'DELAYED(tAH), Clk'DELAYED(tCENH), Clk'DELAYED(tWEH), Clk'DELAYED(tDH);
+ IF Clk'DELAYED(tAH) = '1' THEN
+ ASSERT (Addr'LAST_EVENT > tAH)
+ REPORT "Addr - tAH violation"
+ SEVERITY ERROR;
+ END IF;
+ IF Clk'DELAYED(tCENH) = '1' THEN
+ ASSERT (CEN_n'LAST_EVENT > tCENH)
+ REPORT "CKE# - tCENH violation"
+ SEVERITY ERROR;
+ END IF;
+ IF Clk'DELAYED(tDH) = '1' THEN
+ ASSERT (Dq'LAST_EVENT > tDH)
+ REPORT "Dq - tDH violation"
+ SEVERITY ERROR;
+ END IF;
+ IF Clk'DELAYED(tWEH) = '1' THEN
+ ASSERT (Ce1_n'LAST_EVENT > tWEH)
+ REPORT "CE1# - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (Ce2'LAST_EVENT > tWEH)
+ REPORT "CE2 - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (Ce3_n'LAST_EVENT > tWEH)
+ REPORT "CE3 - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (AdvLd_n'LAST_EVENT > tWEH)
+ REPORT "ADV/LD# - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (Rw_n'LAST_EVENT > tWEH)
+ REPORT "RW# - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (Bwa_n'LAST_EVENT > tWEH)
+ REPORT "BWa# - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (Bwb_n'LAST_EVENT > tWEH)
+ REPORT "BWb# - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (Bwc_n'LAST_EVENT > tWEH)
+ REPORT "BWc# - tWEH violation"
+ SEVERITY ERROR;
+ ASSERT (Bwd_n'LAST_EVENT > tWEH)
+ REPORT "BWd# - tWEH violation"
+ SEVERITY ERROR;
+ END IF;
+
+ END PROCESS;
+
+ -- Main Program
+ main : PROCESS
+
+ TYPE memory_array IS ARRAY ((2**addr_bits) - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (((data_bits+par_bits) / 4) - 1 DOWNTO 0);
+
+ VARIABLE Addr_in : STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => '0');
+ VARIABLE first_Addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := (OTHERS => '0');
+ VARIABLE Addr_read : STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => '0');
+ VARIABLE Addr_write : STD_LOGIC_VECTOR ((addr_bits - 1) DOWNTO 0) := (OTHERS => '0');
+ VARIABLE bAddr0, bAddr1 : STD_LOGIC := '0';
+ VARIABLE bank0 : memory_array;
+ VARIABLE bank1 : memory_array;
+ VARIABLE bank2 : memory_array;
+ VARIABLE bank3 : memory_array;
+
+ VARIABLE ce_in : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+ VARIABLE rw_in : STD_LOGIC_VECTOR (2 DOWNTO 0) := "111";
+ VARIABLE bwa_in : STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";
+ VARIABLE bwb_in : STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";
+ VARIABLE bwc_in : STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";
+ VARIABLE bwd_in : STD_LOGIC_VECTOR (2 DOWNTO 0) := "000";
+ VARIABLE bcnt : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+
+ BEGIN
+ WAIT ON Clk;
+ IF Clk'EVENT AND Clk = '1' THEN
+ IF CEN_n = '0' AND Zz = '0' THEN
+ -- Write Address Register
+ Addr_write := Addr_read;
+
+ -- Read Address Register
+ Addr_read := Addr_in ((addr_bits - 1) DOWNTO 2) & bAddr1 & bAddr0;
+
+ -- Address Register
+ IF AdvLd_n = '0' and ce = '1' THEN
+ Addr_in := Addr;
+ first_Addr := Addr(1 DOWNTO 0);
+ bcnt := Addr(1 DOWNTO 0);
+ END IF;
+
+
+ -- Burst Logic
+ IF Mode = '0' AND AdvLd_n = '1' THEN
+ bcnt := bcnt + 1;
+ ELSIF Mode = '1' AND AdvLd_n = '1' THEN
+ IF (CONV_INTEGER1 (first_Addr) REM 2 = 0) THEN
+ bcnt := bcnt + 1;
+ ELSIF (CONV_INTEGER1 (first_Addr) REM 2 = 1) THEN
+ bcnt := bcnt - 1;
+ END IF;
+ END IF;
+
+
+ bAddr1 := bcnt (1);
+ bAddr0 := bcnt (0);
+
+ -- Read Logic
+ ce_in (0) := ce_in (1);
+
+ IF AdvLd_n = '0' THEN
+ ce_in (1) := ce;
+ END IF;
+
+ rw_in (0) := rw_in (1);
+ rw_in (1) := rw_in (2);
+
+ IF AdvLd_n = '0' THEN
+ rw_in (2) := NOT(ce AND NOT(Rw_n));
+ END IF;
+
+ -- Write Registry and Data Coherency Control Logic
+ bwa_in (0) := bwa_in (1);
+ bwb_in (0) := bwb_in (1);
+ bwc_in (0) := bwc_in (1);
+ bwd_in (0) := bwd_in (1);
+ bwa_in (1) := bwa_in (2);
+ bwb_in (1) := bwb_in (2);
+ bwc_in (1) := bwc_in (2);
+ bwd_in (1) := bwd_in (2);
+ bwa_in (2) := Bwa_n;
+ bwb_in (2) := Bwb_n;
+ bwc_in (2) := Bwc_n;
+ bwd_in (2) := Bwd_n;
+
+ -- Write Data to Memory
+ IF rw_in (0) = '0' AND bwa_in (0) = '0' THEN
+ bank0 (CONV_INTEGER1 (Addr_write)) := Dpq(0) & Dq ( (data_bits / 4) - 1 DOWNTO 0);
+ END IF;
+ IF rw_in (0) = '0' AND bwb_in (0) = '0' THEN
+ bank1 (CONV_INTEGER1 (Addr_write)) := Dpq(1) & Dq ((data_bits / 2 - 1) DOWNTO (data_bits / 4));
+ END IF;
+ IF rw_in (0) = '0' AND bwc_in (0) = '0' THEN
+ bank2 (CONV_INTEGER1 (Addr_write)) := Dpq(2) & Dq ((3 * (data_bits / 4)) - 1 DOWNTO (data_bits / 2));
+ END IF;
+ IF rw_in (0) = '0' AND bwd_in (0) = '0' THEN
+ bank3 (CONV_INTEGER1 (Addr_write)) := Dpq(3) & Dq (data_bits - 1 DOWNTO (3 * (data_bits / 4)));
+ END IF;
+ END IF;
+
+ Addr_read_sig <= Addr_read;
+
+ -- Read Data from Memory Array
+ IF ce_in (0) = '1' AND rw_in (1) = '1' THEN
+ dout ((data_bits / 4) - 1 DOWNTO 0) <= bank0 (CONV_INTEGER1 (Addr_read))( (data_bits / 4) - 1 DOWNTO 0);
+ dout ((data_bits / 2 - 1) DOWNTO (data_bits / 4)) <= bank1 (CONV_INTEGER1 (Addr_read))( (data_bits / 4) - 1 DOWNTO 0);
+ dout ((3 * (data_bits / 4)) - 1 DOWNTO (data_bits / 2)) <= bank2 (CONV_INTEGER1 (Addr_read))( (data_bits / 4) - 1 DOWNTO 0);
+ dout (data_bits - 1 DOWNTO (3 * (data_bits / 4))) <= bank3 (CONV_INTEGER1 (Addr_read))( (data_bits / 4) - 1 DOWNTO 0);
+ dout_p(0) <= bank0 (CONV_INTEGER1 (Addr_read))(data_bits / 4);
+ dout_p(1) <= bank1 (CONV_INTEGER1 (Addr_read))(data_bits / 4);
+ dout_p(2) <= bank2 (CONV_INTEGER1 (Addr_read))(data_bits / 4);
+ dout_p(3) <= bank3 (CONV_INTEGER1 (Addr_read))(data_bits / 4);
+ ELSE
+ dout <= (OTHERS => 'Z');
+ dout_p <= (OTHERS => 'Z');
+ END IF;
+ END IF;
+ END PROCESS;
+
+END behave;
+
+
+
diff --git a/lib/SSRAM/src/package_utility.vhd b/lib/SSRAM/src/package_utility.vhd
new file mode 100644
index 0000000..9fb543f
--- /dev/null
+++ b/lib/SSRAM/src/package_utility.vhd
@@ -0,0 +1,73 @@
+--****************************************************************
+--** MODEL : package_utility **
+--** COMPANY : Cypress Semiconductor **
+--** REVISION: 1.0 Created new package utility model **
+--** **
+--****************************************************************
+Library ieee,work;
+ Use ieee.std_logic_1164.all;
+ Use IEEE.Std_Logic_Arith.all;
+ Use IEEE.std_logic_TextIO.all;
+ --- Use work.package_timing.all;
+
+Library Std;
+ Use STD.TextIO.all;
+
+Package package_utility is
+
+FUNCTION convert_string( S: in STRING) RETURN STD_LOGIC_VECTOR;
+FUNCTION CONV_INTEGER1(S : STD_LOGIC_VECTOR) RETURN INTEGER;
+
+End; -- package package_utility
+
+Package body package_utility is
+
+
+------------------------------------------------------------------------------------------------
+--Converts string into std_logic_vector
+------------------------------------------------------------------------------------------------
+
+FUNCTION convert_string(S: in STRING) RETURN STD_LOGIC_VECTOR IS
+ VARIABLE result : STD_LOGIC_VECTOR(S'RANGE);
+ BEGIN
+ FOR i IN S'RANGE LOOP
+ IF S(i) = '0' THEN
+ result(i) := '0';
+ ELSIF S(i) = '1' THEN
+ result(i) := '1';
+ ELSIF S(i) = 'X' THEN
+ result(i) := 'X';
+ ELSE
+ result(i) := 'Z';
+ END IF;
+ END LOOP;
+ RETURN result;
+END convert_string;
+
+------------------------------------------------------------------------------------------------
+--Converts std_logic_vector into integer
+------------------------------------------------------------------------------------------------
+
+FUNCTION CONV_INTEGER1(S : STD_LOGIC_VECTOR) RETURN INTEGER IS
+ VARIABLE result : INTEGER := 0;
+ BEGIN
+ FOR i IN S'RANGE LOOP
+ IF S(i) = '1' THEN
+ result := result + (2**i);
+ ELSIF S(i) = '0' THEN
+ result := result;
+ ELSE
+ result := 0;
+ END IF;
+ END LOOP;
+ RETURN result;
+ END CONV_INTEGER1;
+
+
+
+
+end package_utility;
+
+
+
+
diff --git a/lib/SSRAM/src/ssram_frontend_wb.vhd b/lib/SSRAM/src/ssram_frontend_wb.vhd
new file mode 100644
index 0000000..056b328
--- /dev/null
+++ b/lib/SSRAM/src/ssram_frontend_wb.vhd
@@ -0,0 +1,181 @@
+LIBRARY IEEE;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE IEEE.NUMERIC_STD.ALL;
+
+Library UNISIM;
+use UNISIM.vcomponents.all;
+
+ENTITY ssram_frontend_wb IS
+ Generic
+ (
+ latency : natural := 2; -- clock cycles
+ addr_width : natural := 20;
+ data_width : natural := 32;
+ parity_width : natural := 4
+ );
+ Port
+ (
+ -- J-Bus domain
+ CLK_I : in STD_LOGIC;
+ RST_I : in STD_LOGIC;
+ CYC_I : in STD_LOGIC;
+ STB_I : in STD_LOGIC;
+ SEL_I : in unsigned(3 downto 0);
+ WE_I : in STD_LOGIC;
+ ACK_O : out STD_LOGIC;
+ SRDY_O : out STD_LOGIC;
+ MRDY_I : in STD_LOGIC;
+ ADDR_I : in unsigned(31 downto 0);
+ DAT_I : in unsigned(31 downto 0);
+ DAT_O : out unsigned(31 downto 0);
+
+ -- Sync SRAM domain
+ ssram_clk_o : out std_logic;
+ ssram_clk_fb : in std_logic;
+ ssram_cke_n : out std_logic;
+ ssram_ce_n : out std_logic;
+ ssram_oe_n : out std_logic;
+ ssram_we_n : out std_logic;
+ ssram_adv : out std_logic;
+ ssram_mode : out std_logic;
+ ssram_zz : out std_logic;
+ ssram_a : out unsigned(addr_width-1 downto 0);
+ ssram_d : inout unsigned(data_width-1 downto 0);
+ ssram_dp : inout unsigned(parity_width-1 downto 0);
+ ssram_bw_n : out unsigned(3 downto 0)
+ );
+END ssram_frontend_wb;
+
+ARCHITECTURE behavior OF ssram_frontend_wb IS
+
+ constant topad : time := 3 ns;
+ subtype ssram_d_t is unsigned(data_width+parity_width-1 downto 0);
+ type data_pipe_t is array (latency downto 0) of ssram_d_t;
+
+ signal ssram_clk : std_logic;
+ signal dcm_locked : std_logic;
+ signal dcm_clk0 : std_logic;
+ signal dcm_clk1 : std_logic;
+ signal data_en : std_logic;
+ signal drive : std_logic;
+ signal vld_pipe : unsigned(latency downto 0);
+ signal drive_pipe : unsigned(latency downto 0);
+ signal data_pipe : data_pipe_t;
+ signal ssram_dout : ssram_d_t;
+
+begin
+
+ SRDY_O <= CYC_I and dcm_locked;
+ ACK_O <= vld_pipe(vld_pipe'left);
+ DAT_O(data_width-1 downto 0) <= ssram_d;
+
+ data_en <= CYC_I and STB_I;
+ ssram_dout <= "0000" & DAT_I(data_width-1 downto 0);
+ drive <= drive_pipe(drive_pipe'left);
+
+ ssram_clk_o <= ssram_clk after topad;
+ ssram_cke_n <= not dcm_locked after topad;
+ ssram_oe_n <= not vld_pipe(vld_pipe'left-1) after topad;
+
+inst_clock_out : ODDR
+ generic map
+ (
+ DDR_CLK_EDGE => "OPPOSITE_EDGE", -- "OPPOSITE_EDGE" or "SAME_EDGE"
+ INIT => '0', -- Initial value for Q port ('1' or '0')
+ SRTYPE => "SYNC" -- Reset Type ("ASYNC" or "SYNC")
+ )
+ port map (
+ Q => ssram_clk, -- 1-bit DDR output
+ C => dcm_clk1, -- 1-bit clock input
+ CE => '1', -- 1-bit clock enable input
+ D1 => '1', -- 1-bit data input (positive edge)
+ D2 => '0', -- 1-bit data input (negative edge)
+ R => '0', -- 1-bit reset input
+ S => '0' -- 1-bit set input
+ );
+
+ssram_bufg: bufg
+ port map
+ (
+ o => dcm_clk1,
+ i => dcm_clk0
+ );
+
+inst_DCM_BASE_0 : DCM_BASE
+ generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 2 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 10.0 , -- Specify period of input clock in ns from 1.25 to 1000.00
+ CLKOUT_PHASE_SHIFT => "FIXED", -- Specify phase shift mode of NONE or FIXED
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE or 1X
+ DCM_AUTOCALIBRATION => TRUE, -- DCM calibrartion circuitry TRUE/FALSE
+ DCM_PERFORMANCE_MODE => "MAX_SPEED", -- Can be MAX_SPEED or MAX_RANGE
+ DESKEW_ADJUST => "SOURCE_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- LOW or HIGH frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- LOW, HIGH, or HIGH_SER frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"F0F0", -- FACTORY JF Values Suggested to be set to X"F0F0"
+ PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 1023
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_clk0, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => open, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => dcm_locked, -- DCM LOCK status output
+ CLKFB => ssram_clk_fb, -- DCM clock feedback
+ CLKIN => CLK_I, -- Clock input (from IBUFG, BUFG or DCM)
+ RST => RST_I -- DCM asynchronous reset input
+ );
+
+
+data_valid_pipeline:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ if RST_I = '1' then
+ vld_pipe <= (others => '0');
+ else
+ vld_pipe <= vld_pipe(vld_pipe'left-1 downto 0) & (data_en and MRDY_I and not WE_I);
+ end if;
+ end if;
+ end process;
+
+data_out_pipeline:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ if RST_I = '1' then
+ ssram_ce_n <= '1' after topad;
+ ssram_we_n <= '1' after topad;
+ ssram_adv <= '0' after topad;
+ ssram_mode <= '0' after topad;
+ ssram_zz <= '1' after topad;
+ drive_pipe <= (others => '0');
+ elsif dcm_locked = '1' then
+ ssram_ce_n <= not data_en after topad;
+ ssram_we_n <= not (WE_I and data_en) after topad;
+ ssram_adv <= '0' after topad;
+ ssram_mode <= '0' after topad;
+ ssram_zz <= '0' after topad;
+ ssram_a <= ADDR_I(addr_width-1 downto 0) after topad;
+ ssram_bw_n <= not SEL_I after topad;
+ drive_pipe <= drive_pipe(drive_pipe'left-1 downto 0) & (data_en and WE_I);
+ data_pipe <= data_pipe(data_pipe'left-1 downto 0) & ssram_dout;
+ end if;
+ end if;
+ end process;
+
+ ssram_d <= data_pipe(data_pipe'left)(data_width-1 downto 0) after topad when drive = '1' else (others => 'Z') after topad;
+ ssram_dp <= data_pipe(data_pipe'left)(data_width+parity_width-1 downto data_width) after topad when drive = '1' else (others => 'Z') after topad;
+
+end behavior;
diff --git a/lib/SSRAM/src/tb_ssram_frontend_wb.vhd b/lib/SSRAM/src/tb_ssram_frontend_wb.vhd
new file mode 100644
index 0000000..86f1411
--- /dev/null
+++ b/lib/SSRAM/src/tb_ssram_frontend_wb.vhd
@@ -0,0 +1,457 @@
+-------------------------------------------------------------------------
+-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL
+-- This file: testbench for system test using Xilinx ML-402
+
+-- Copyright (C) 2007 J. Ahrensfeld
+
+-- This library is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+
+-- This library 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
+-- Lesser General Public License for more details.
+
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this library; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-- For questions and ideas, please contact the author at jens@jayfield.org
+
+-----------------------------------------------------------------------
+
+LIBRARY ieee;
+use IEEE.STD_LOGIC_1164.ALL;
+USE ieee.numeric_std.ALL;
+USE work.package_utility.all;
+
+Library UNISIM;
+use UNISIM.vcomponents.all;
+
+ENTITY tb_ssram_frontend_wb IS
+END tb_ssram_frontend_wb;
+
+ARCHITECTURE behavior OF tb_ssram_frontend_wb IS
+
+ constant CLK_PERIOD : time := 10 ns;
+ signal CLK_O : std_logic := '1';
+ signal RST_O : std_logic := '1';
+ signal CYC_O : std_logic := '0';
+ signal STB_O : std_logic := '0';
+ signal WE_O : std_logic := '0';
+ signal SEL_O : unsigned(3 downto 0) := (others => '1');
+ signal ACK_I : std_logic;
+ signal MRDY_O : std_logic := '1';
+ signal SRDY_I : std_logic;
+ signal ADDR_O : unsigned(31 downto 0) := (others => '-');
+ signal DAT_I : unsigned(31 downto 0);
+ signal DAT_O : unsigned(31 downto 0) := (others => '-');
+
+ SIGNAL ssram_d : unsigned (32 - 1 DOWNTO 0) := (OTHERS => 'Z');
+ SIGNAL ssram_dp : unsigned (4 - 1 DOWNTO 0) := (OTHERS => 'Z');
+ SIGNAL ssram_a : unsigned (20 - 1 DOWNTO 0) := (OTHERS => '0');
+ SIGNAL ssram_clk : STD_LOGIC := '0';
+ SIGNAL ssram_cke_n : STD_LOGIC;
+ SIGNAL ssram_adv : STD_LOGIC;
+ SIGNAL ssram_mode : STD_LOGIC;
+ SIGNAL ssram_bw_n : unsigned(3 downto 0);
+ SIGNAL ssram_we_n : STD_LOGIC;
+ SIGNAL ssram_oe_n : STD_LOGIC;
+ SIGNAL ssram_ce_n : STD_LOGIC;
+ SIGNAL ssram_zz : STD_LOGIC;
+
+ SIGNAL ssram_clk_fb : STD_LOGIC;
+
+ signal dout_rst : std_logic := '0';
+ signal dout_reg : unsigned(31 downto 0);
+ signal dout_cnt : natural range 0 to 255;
+
+BEGIN
+
+ ssram_clk_fb <= ssram_clk after 0.5 ns;
+
+inst_ssram_frontend_wb : entity work.ssram_frontend_wb
+ GENERIC MAP
+ (
+ addr_width => 20,
+ data_width => 32,
+ parity_width => 4
+ )
+ PORT MAP
+ (
+ -- J-Bus domain
+ RST_I => RST_O,
+ CLK_I => CLK_O,
+ CYC_I => CYC_O,
+ STB_I => STB_O,
+ SEL_I => SEL_O,
+ WE_I => WE_O,
+ ACK_O => ACK_I,
+ SRDY_O => SRDY_I,
+ MRDY_I => MRDY_O,
+ ADDR_I => ADDR_O,
+ DAT_I => DAT_O,
+ DAT_O => DAT_I,
+
+ -- Sync SRAM domain
+ ssram_clk_o => ssram_clk,
+ ssram_clk_fb => ssram_clk_fb,
+ ssram_cke_n => ssram_cke_n,
+ ssram_ce_n => ssram_ce_n,
+ ssram_oe_n => ssram_oe_n,
+ ssram_we_n => ssram_we_n,
+ ssram_adv => ssram_adv,
+ ssram_mode => ssram_mode,
+ ssram_zz => ssram_zz,
+ ssram_a => ssram_a,
+ ssram_d => ssram_d,
+ ssram_dp => ssram_dp,
+ ssram_bw_n => ssram_bw_n
+ );
+
+inst_ssram : entity work.cy7c1354
+ -- PORT MAP Declarations
+ PORT MAP
+ (
+ Dq => STD_LOGIC_VECTOR(ssram_d), -- Data I/O
+ Dpq => STD_LOGIC_VECTOR(ssram_dp), -- Data I/O
+ Addr => STD_LOGIC_VECTOR(ssram_a(19 downto 2)), -- Address
+ Mode => ssram_mode, -- Burst Mode
+ Clk => ssram_clk, -- Clk
+ CEN_n => ssram_cke_n, -- CEN#
+ AdvLd_n => ssram_adv, -- Adv/Ld#
+ Bwa_n => ssram_bw_n(0), -- Bwa#
+ Bwb_n => ssram_bw_n(1), -- BWb#
+ Bwc_n => ssram_bw_n(2), -- Bwc#
+ Bwd_n => ssram_bw_n(3), -- BWd#
+ Rw_n => ssram_we_n, -- RW#
+ Oe_n => ssram_oe_n, -- OE#
+ Ce1_n => ssram_ce_n, -- CE1#
+ Ce2 => '1', -- CE2
+ Ce3_n => '0', -- CE3#
+ Zz => ssram_zz
+ );
+
+read_register:
+ process(CLK_O)
+ begin
+ if rising_edge(CLK_O) then
+ if dout_rst = '1' then
+ dout_cnt <= 0;
+ elsif ACK_I = '1' and WE_O = '0' then
+ dout_reg <= DAT_I;
+ dout_cnt <= dout_cnt + 1;
+ end if;
+ end if;
+ end process;
+
+CLK_GEN: process
+ begin
+ wait for CLK_PERIOD/2;
+ CLK_O <= not CLK_O;
+ end process;
+
+STIMULUS: process
+
+ begin
+
+ wait for 5*CLK_PERIOD;
+ RST_O <= '0';
+
+ wait until rising_edge(CLK_O);
+ -- 8 single cycles
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ DAT_O <= X"1234_0000";
+ ADDR_O <= X"0000_0000";
+
+ for i in 0 to 31 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O);
+ CYC_O <= '0';
+
+ ------------------------------------------------------------
+ wait for 3*CLK_PERIOD;
+ ------------------------------------------------------------
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0000";
+
+ for i in 0 to 31 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 31;
+ CYC_O <= '0';
+
+ ------------------------------------------------------------
+ wait for 3*CLK_PERIOD;
+ ------------------------------------------------------------
+
+ wait until rising_edge(CLK_O);
+ -- 1-word burst cycle
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ SEL_O <= "0011";
+ ADDR_O <= X"0000_0010";
+ DAT_O <= X"DEADBEEF";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+ wait until rising_edge(CLK_O);
+ CYC_O <= '0';
+
+ ------------------------------------------------------------
+ wait for 3*CLK_PERIOD;
+ ------------------------------------------------------------
+
+ wait until rising_edge(CLK_O);
+ -- 1-word burst cycle
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0010";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and ACK_I = '1';
+ CYC_O <= '0';
+
+ ------------------------------------------------------------
+ wait for 3*CLK_PERIOD;
+ ------------------------------------------------------------
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0000";
+
+ for i in 0 to 31 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 31;
+ CYC_O <= '0';
+
+ ------------------------------------------------------------
+ wait for 10*CLK_PERIOD;
+ ------------------------------------------------------------
+
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0000";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 7;
+ CYC_O <= '0';
+
+
+ ------------------------------------------------------------
+ wait for 10*CLK_PERIOD;
+ ------------------------------------------------------------
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ SEL_O <= "1111";
+ DAT_O <= X"1111_0000";
+ ADDR_O <= X"0000_0000";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ WE_O <= '0';
+ ADDR_O <= X"0000_0000";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 7;
+ CYC_O <= '0';
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ SEL_O <= "1111";
+ DAT_O <= X"2222_0000";
+ ADDR_O <= X"0000_0400";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ WE_O <= '0';
+ ADDR_O <= X"0000_0400";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 7;
+ CYC_O <= '0';
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ SEL_O <= "1111";
+ DAT_O <= X"3333_0000";
+ ADDR_O <= X"0000_0800";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ WE_O <= '0';
+ ADDR_O <= X"0000_0800";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 7;
+ CYC_O <= '0';
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ SEL_O <= "1111";
+ DAT_O <= X"4444_0000";
+ ADDR_O <= X"0000_0C00";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ WE_O <= '0';
+ ADDR_O <= X"0000_0C00";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 7;
+ CYC_O <= '0';
+
+ ------------------------------------------------------------
+ wait for 10*CLK_PERIOD;
+ ------------------------------------------------------------
+
+ -- 8-word burst cycle
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0000";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ ADDR_O <= X"0000_0400";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+
+ ADDR_O <= X"0000_0800";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+
+ ADDR_O <= X"0000_0C00";
+
+ for i in 0 to 7 loop
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ end loop;
+
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and dout_cnt = 31;
+ CYC_O <= '0';
+
+ wait;
+
+ end process;
+
+END;
diff --git a/lib/VGA_ctrl/sim/ModelSim SE .lnk b/lib/VGA_ctrl/sim/ModelSim SE .lnk
new file mode 100644
index 0000000..6ece033
Binary files /dev/null and b/lib/VGA_ctrl/sim/ModelSim SE .lnk differ
diff --git a/lib/misc/bbfifo.vhd b/lib/misc/bbfifo.vhd
new file mode 100644
index 0000000..aa8799f
--- /dev/null
+++ b/lib/misc/bbfifo.vhd
@@ -0,0 +1,123 @@
+-------------------------------------------------------------------------
+-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL
+-- This file: Dual-ported register file with asynchrous read
+
+-- Copyright (C) 2007 J. Ahrensfeld
+
+-- This library is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+
+-- This library 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
+-- Lesser General Public License for more details.
+
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this library; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-- For questions and ideas, please contact the author at jens@jayfield.org
+
+-----------------------------------------------------------------------
+-- $Header: /tmp/cvsroot/VHDL/lib/misc/bbfifo.vhd,v 1.1 2008-10-20 19:26:01 Jens Exp $
+-----------------------------------------------------------------------
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.numeric_std.ALL;
+
+entity bbfifo is
+ Generic
+ (
+ depth : integer := 2;
+ data_width : integer := 8
+ );
+ Port
+ (
+ rst : in STD_LOGIC;
+ clk : in STD_LOGIC;
+ re : in STD_LOGIC;
+ we : in STD_LOGIC;
+ ready : out STD_LOGIC;
+ avail : out STD_LOGIC;
+ din : in unsigned(data_width-1 downto 0);
+ dout : out unsigned(data_width-1 downto 0)
+ );
+end bbfifo;
+
+architecture Behavioral of bbfifo is
+
+ type bucket_array_t is array (0 to depth) of unsigned(data_width-1 downto 0);
+ signal req : unsigned(0 to depth);
+ signal rdy : unsigned(1 to depth+1);
+ signal bucket_array : bucket_array_t;
+ signal ce_in : unsigned(1 to depth);
+ signal ce_out : unsigned(1 to depth);
+
+begin
+
+ req(0) <= we;
+ rdy(depth+1) <= re;
+ ready <= '1' when req(0 to depth-1) /= (0 to depth-1 => '1') else '0';
+ avail <= req(depth);
+ bucket_array(0) <= din;
+ dout <= bucket_array(depth);
+
+gen_ce:
+ for i in 1 to depth generate
+ begin
+ process (rdy, req)
+ begin
+ ce_in(i) <= not req(i) and req(i-1);
+ end process;
+ end generate;
+
+gen_rdy:
+ for i in 1 to depth generate
+ begin
+ process (clk)
+ begin
+ if rising_edge(clk) then
+ if rst = '1' then
+ rdy(i) <= '1';
+ elsif req(i-1) = '1' then
+ rdy(i) <= rdy(i+1);
+ end if;
+ end if;
+ end process;
+ end generate;
+
+gen_req:
+ for i in 1 to depth generate
+ begin
+ process (clk)
+ begin
+ if rising_edge(clk) then
+ if rst = '1' then
+ req(i) <= '0';
+ elsif rdy(i+1) = '1' then
+ req(i) <= req(i-1);
+ end if;
+ end if;
+ end process;
+ end generate;
+
+gen_data:
+ for i in 1 to depth generate
+ begin
+ process (clk)
+ begin
+ if rising_edge(clk) then
+ if rst = '1' then
+ bucket_array(i) <= (others => '0');
+ elsif req(i-1) = '1' then
+ bucket_array(i) <= bucket_array(i-1);
+ end if;
+ end if;
+ end process;
+ end generate;
+
+end Behavioral;
+
diff --git a/lib/misc/gpio_wb.vhd b/lib/misc/gpio_wb.vhd
new file mode 100644
index 0000000..4f358b1
--- /dev/null
+++ b/lib/misc/gpio_wb.vhd
@@ -0,0 +1,211 @@
+LIBRARY IEEE;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE IEEE.NUMERIC_STD.ALL;
+
+ENTITY gpio_wb IS
+ Port
+ (
+ CLK_I : in STD_LOGIC;
+ RST_I : in STD_LOGIC;
+ CYC_I : in STD_LOGIC;
+ STB_I : in STD_LOGIC;
+ SEL_I : in unsigned(3 downto 0);
+ WE_I : in STD_LOGIC;
+ ACK_O : out STD_LOGIC;
+ SRDY_O : out STD_LOGIC;
+ MRDY_I : in STD_LOGIC;
+ ADDR_I : in unsigned(31 downto 0);
+ DAT_I : in unsigned(31 downto 0);
+ DAT_O : out unsigned(31 downto 0);
+
+ sys_gpo0 : out unsigned(31 downto 0);
+ sys_gpo1 : out unsigned(31 downto 0);
+ sys_gpi0 : in unsigned(31 downto 0);
+ sys_gpi1 : in unsigned(31 downto 0)
+
+ );
+END gpio_wb;
+
+ARCHITECTURE behavior OF gpio_wb IS
+
+ signal gpo0_reg : unsigned(31 downto 0);
+ signal gpo1_reg : unsigned(31 downto 0);
+ signal gpi0_reg : unsigned(31 downto 0);
+ signal gpi1_reg : unsigned(31 downto 0);
+ -- Signals to form an timer generating an interrupt every microsecond
+ subtype tick_usec_t is natural range 0 to 99;
+ signal tick_usec : tick_usec_t;
+ signal cnt_usec : unsigned(31 downto 0);
+ signal cnt_sec : unsigned(31 downto 0);
+ signal cnt_usec_preset : unsigned(31 downto 0);
+ signal cnt_sec_preset : unsigned(31 downto 0);
+ signal cnt_usec_en : std_logic;
+ signal cnt_usec_we : std_logic;
+ signal cnt_sec_en : std_logic;
+ signal cnt_sec_we : std_logic;
+
+begin
+
+ SRDY_O <= CYC_I;
+
+------------------------------------------------------------------
+led_out:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ sys_gpo0 <= gpo0_reg;
+ sys_gpo1 <= gpo1_reg;
+ end if;
+ end process;
+
+------------------------------------------------------------------
+btn_ps2_in:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ gpi0_reg <= sys_gpi0;
+ gpi1_reg <= sys_gpi1;
+ end if;
+ end process;
+
+------------------------------------------------------------------
+registers_write:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ cnt_usec_we <= '0';
+ cnt_sec_we <= '0';
+ if RST_I = '1' then
+ gpo0_reg <= (others => '0');
+ gpo1_reg <= (others => '0');
+ elsif (STB_I and CYC_I and WE_I) = '1' then
+ case ADDR_I(5 downto 2) is
+
+ when "0000" =>
+ if SEL_I(0) = '1' then
+ gpo0_reg(7 downto 0) <= DAT_I(7 downto 0);
+ end if;
+ if SEL_I(1) = '1' then
+ gpo0_reg(15 downto 8) <= DAT_I(15 downto 8);
+ end if;
+ if SEL_I(2) = '1' then
+ gpo0_reg(23 downto 16) <= DAT_I(23 downto 16);
+ end if;
+ if SEL_I(3) = '1' then
+ gpo0_reg(31 downto 24) <= DAT_I(31 downto 24);
+ end if;
+
+ when "0001" =>
+ if SEL_I(0) = '1' then
+ gpo1_reg(7 downto 0) <= DAT_I(7 downto 0);
+ end if;
+ if SEL_I(1) = '1' then
+ gpo1_reg(15 downto 8) <= DAT_I(15 downto 8);
+ end if;
+ if SEL_I(2) = '1' then
+ gpo1_reg(23 downto 16) <= DAT_I(23 downto 16);
+ end if;
+ if SEL_I(3) = '1' then
+ gpo1_reg(31 downto 24) <= DAT_I(31 downto 24);
+ end if;
+
+ when "0010" =>
+ if SEL_I(3) = '1' then
+ cnt_usec_we <= '1';
+ cnt_usec_preset <= DAT_I;
+ end if;
+
+ when "0011" =>
+ if SEL_I(3) = '1' then
+ cnt_sec_we <= '1';
+ cnt_sec_preset <= DAT_I;
+ end if;
+
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end process;
+
+registers_read:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ ACK_O <= '0';
+ if (STB_I and CYC_I) = '1' then
+ ACK_O <= not WE_I;
+ DAT_O <= (others => '0');
+ case ADDR_I(5 downto 2) is
+
+ when "0000" =>
+ DAT_O <= gpi0_reg;
+
+ when "0001" =>
+ DAT_O <= gpi1_reg;
+
+ when "0010" =>
+ DAT_O <= cnt_usec;
+
+ when "0011" =>
+ DAT_O <= cnt_sec;
+
+ when others => null;
+ end case;
+ end if;
+ end if;
+ end process;
+
+tick_usec_timer:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ cnt_usec_en <= '0';
+ if RST_I = '1' then
+ tick_usec <= 0;
+ cnt_usec_en <= '0';
+ elsif tick_usec = tick_usec_t'high then
+ tick_usec <= 0;
+ cnt_usec_en <= '1';
+ else
+ tick_usec <= tick_usec + 1;
+ end if;
+ end if;
+ end process;
+
+cnt_usec_timer:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ cnt_sec_en <= '0';
+ if RST_I = '1' then
+ cnt_usec <= (others => '0');
+ cnt_sec_en <= '0';
+ elsif cnt_usec_we = '1' then
+ cnt_usec <= cnt_usec_preset;
+ elsif cnt_usec_en = '1' then
+ if cnt_usec = to_unsigned(1E6 - 1, 32) then
+ cnt_usec <= (others => '0');
+ cnt_sec_en <= '1';
+ else
+ cnt_usec <= cnt_usec + 1;
+ end if;
+ end if;
+ end if;
+ end process;
+
+cnt_sec_timer:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ if RST_I = '1' then
+ cnt_sec <= (others => '0');
+ elsif cnt_sec_we = '1' then
+ cnt_sec <= cnt_sec_preset;
+ elsif cnt_sec_en = '1' then
+ cnt_sec <= cnt_sec + 1;
+ end if;
+ end if;
+ end process;
+
+------------------------------------------------------------------
+end behavior;
diff --git a/lib/misc/ram_sim.vhd b/lib/misc/ram_sim.vhd
new file mode 100644
index 0000000..6d26672
--- /dev/null
+++ b/lib/misc/ram_sim.vhd
@@ -0,0 +1,88 @@
+-------------------------------------------------------------------------
+-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL
+-- This file: The ROM file for use in your VHDL design
+--
+-- Copyright (C) 2007 J. Ahrensfeld
+--
+-- This program 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 program 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 .
+--
+-- For questions and ideas, please contact the author at jens@jayfield.org
+--
+--------------------------------------------------------------------------
+
+LIBRARY ieee;
+use IEEE.STD_LOGIC_1164.ALL;
+USE ieee.numeric_std.ALL;
+
+
+ENTITY ram IS
+ Generic
+ (
+ word_addr_width : integer := 6
+ );
+ Port
+ (
+ clk : in STD_LOGIC;
+ ce : in STD_LOGIC;
+ we : in unsigned(3 downto 0);
+ addr : in unsigned(31 downto 0);
+ din : in unsigned(31 downto 0);
+ dout : out unsigned(31 downto 0)
+ );
+END ram;
+
+ARCHITECTURE behavior OF ram IS
+
+ constant depth : natural := 2**word_addr_width;
+
+ type sram_t is array (0 to depth-1) of unsigned(31 downto 0);
+
+ function sram_clear return sram_t is
+
+ variable result : sram_t;
+ begin
+ for i in 0 to sram_t'length-1 loop
+ result(i) := (others => '0');
+ end loop;
+ return result;
+ end sram_clear;
+
+ signal sram : sram_t := sram_clear;
+
+BEGIN
+
+
+SRAM_RW:
+ process(clk)
+ variable index : natural range 0 to depth-1;
+ begin
+ if rising_edge(clk) and ce = '1' then
+ index := to_integer(addr(word_addr_width+1 downto 2));
+ if we(0) = '1' then
+ sram(index)(7 downto 0) <= din(7 downto 0);
+ end if;
+ if we(1) = '1' then
+ sram(index)(15 downto 8) <= din(15 downto 8);
+ end if;
+ if we(2) = '1' then
+ sram(index)(23 downto 16) <= din(23 downto 16);
+ end if;
+ if we(3) = '1' then
+ sram(index)(31 downto 24) <= din(31 downto 24);
+ end if;
+ dout <= sram(index);
+ end if;
+ end process;
+
+end behavior;
diff --git a/lib/misc/ram_wb.vhd b/lib/misc/ram_wb.vhd
new file mode 100644
index 0000000..2ebf242
--- /dev/null
+++ b/lib/misc/ram_wb.vhd
@@ -0,0 +1,80 @@
+LIBRARY IEEE;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE IEEE.NUMERIC_STD.ALL;
+
+ENTITY ram_wb IS
+ Port
+ (
+ CLK_I : in STD_LOGIC;
+ RST_I : in STD_LOGIC;
+ CYC_I : in STD_LOGIC;
+ STB_I : in STD_LOGIC;
+ SEL_I : in unsigned(3 downto 0);
+ WE_I : in STD_LOGIC;
+ ACK_O : out STD_LOGIC;
+ SRDY_O : out STD_LOGIC;
+ MRDY_I : in STD_LOGIC;
+ ADDR_I : in unsigned(31 downto 0);
+ DAT_I : in unsigned(31 downto 0);
+ DAT_O : out unsigned(31 downto 0)
+ );
+END ram_wb;
+
+ARCHITECTURE behavior OF ram_wb IS
+
+ COMPONENT ram
+ GENERIC
+ (
+ word_addr_width : integer
+ );
+ PORT
+ (
+ clk : in STD_LOGIC;
+ ce : in STD_LOGIC;
+ we : in unsigned(3 downto 0);
+ addr : in unsigned(31 downto 0);
+ din : in unsigned(31 downto 0);
+ dout : out unsigned(31 downto 0)
+ );
+ END COMPONENT;
+
+ signal data_en : std_logic;
+ signal we : unsigned(3 downto 0);
+
+begin
+
+ we <= SEL_I and (3 downto 0 => WE_I);
+
+ data_en <= CYC_I and STB_I and MRDY_I;
+ SRDY_O <= CYC_I;
+
+data_valid_register:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ if RST_I = '1' then
+ ACK_O <= '0';
+ else
+ ACK_O <= data_en and not WE_I;
+ end if;
+ end if;
+ end process;
+
+inst_ram : ram
+ GENERIC MAP
+ (
+ word_addr_width => 6
+ )
+ PORT MAP
+ (
+ clk => CLK_I,
+ ce => data_en,
+ we => we,
+ addr => ADDR_I,
+ din => DAT_I,
+ dout => DAT_O
+ );
+
+
+
+end behavior;
diff --git a/lib/misc/rom_sim.vhd b/lib/misc/rom_sim.vhd
new file mode 100644
index 0000000..98c0484
--- /dev/null
+++ b/lib/misc/rom_sim.vhd
@@ -0,0 +1,2082 @@
+LIBRARY IEEE;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE IEEE.NUMERIC_STD.ALL;
+
+ENTITY rom IS
+ Port
+ (
+ clk : in STD_LOGIC;
+ ce : in STD_LOGIC;
+ addr : in unsigned(31 downto 0);
+ dout : out unsigned(31 downto 0)
+ );
+END rom;
+
+ARCHITECTURE data OF rom IS
+
+ subtype word_t is unsigned(31 downto 0);
+ type word_array_t is array (0 to 2047) of word_t;
+ constant word_array : word_array_t :=
+ (
+
+ X"3C1A1040", -- 00000000
+ X"375A000C", -- 00000004
+ X"409A6000", -- 00000008
+ X"241A0000", -- 0000000C
+ X"409A6800", -- 00000010
+ X"401A7800", -- 00000014
+ X"00000000", -- 00000018
+ X"409AF800", -- 0000001C
+ X"3C1ABFC0", -- 00000020
+ X"275A01C4", -- 00000024
+ X"03400008", -- 00000028
+ X"00000000", -- 0000002C
+ X"00000000", -- 00000030
+ X"00000000", -- 00000034
+ X"00000000", -- 00000038
+ X"00000000", -- 0000003C
+ X"00000000", -- 00000040
+ X"00000000", -- 00000044
+ X"00000000", -- 00000048
+ X"00000000", -- 0000004C
+ X"00000000", -- 00000050
+ X"00000000", -- 00000054
+ X"00000000", -- 00000058
+ X"00000000", -- 0000005C
+ X"00000000", -- 00000060
+ X"00000000", -- 00000064
+ X"00000000", -- 00000068
+ X"00000000", -- 0000006C
+ X"00000000", -- 00000070
+ X"00000000", -- 00000074
+ X"00000000", -- 00000078
+ X"00000000", -- 0000007C
+ X"00000000", -- 00000080
+ X"00000000", -- 00000084
+ X"00000000", -- 00000088
+ X"00000000", -- 0000008C
+ X"00000000", -- 00000090
+ X"00000000", -- 00000094
+ X"00000000", -- 00000098
+ X"00000000", -- 0000009C
+ X"00000000", -- 000000A0
+ X"00000000", -- 000000A4
+ X"00000000", -- 000000A8
+ X"00000000", -- 000000AC
+ X"00000000", -- 000000B0
+ X"00000000", -- 000000B4
+ X"00000000", -- 000000B8
+ X"00000000", -- 000000BC
+ X"00000000", -- 000000C0
+ X"00000000", -- 000000C4
+ X"00000000", -- 000000C8
+ X"00000000", -- 000000CC
+ X"00000000", -- 000000D0
+ X"00000000", -- 000000D4
+ X"00000000", -- 000000D8
+ X"00000000", -- 000000DC
+ X"00000000", -- 000000E0
+ X"00000000", -- 000000E4
+ X"00000000", -- 000000E8
+ X"00000000", -- 000000EC
+ X"00000000", -- 000000F0
+ X"00000000", -- 000000F4
+ X"00000000", -- 000000F8
+ X"00000000", -- 000000FC
+ X"00000000", -- 00000100
+ X"00000000", -- 00000104
+ X"00000000", -- 00000108
+ X"00000000", -- 0000010C
+ X"00000000", -- 00000110
+ X"00000000", -- 00000114
+ X"00000000", -- 00000118
+ X"00000000", -- 0000011C
+ X"00000000", -- 00000120
+ X"00000000", -- 00000124
+ X"00000000", -- 00000128
+ X"00000000", -- 0000012C
+ X"00000000", -- 00000130
+ X"00000000", -- 00000134
+ X"00000000", -- 00000138
+ X"00000000", -- 0000013C
+ X"00000000", -- 00000140
+ X"00000000", -- 00000144
+ X"00000000", -- 00000148
+ X"00000000", -- 0000014C
+ X"00000000", -- 00000150
+ X"00000000", -- 00000154
+ X"00000000", -- 00000158
+ X"00000000", -- 0000015C
+ X"00000000", -- 00000160
+ X"00000000", -- 00000164
+ X"00000000", -- 00000168
+ X"00000000", -- 0000016C
+ X"00000000", -- 00000170
+ X"00000000", -- 00000174
+ X"00000000", -- 00000178
+ X"00000000", -- 0000017C
+ X"401A6800", -- 00000180
+ X"3C1BA000", -- 00000184
+ X"277B0000", -- 00000188
+ X"001AD082", -- 0000018C
+ X"335A000F", -- 00000190
+ X"035BD025", -- 00000194
+ X"AF7A0000", -- 00000198
+ X"401A6800", -- 0000019C
+ X"00000000", -- 000001A0
+ X"001AD202", -- 000001A4
+ X"335A00FF", -- 000001A8
+ X"1740FFFB", -- 000001AC
+ X"00000000", -- 000001B0
+ X"401A7000", -- 000001B4
+ X"00000000", -- 000001B8
+ X"03400008", -- 000001BC
+ X"42000010", -- 000001C0
+ X"3C1AA001", -- 000001C4
+ X"275A0008", -- 000001C8
+ X"241B000D", -- 000001CC
+ X"A35B0000", -- 000001D0
+ X"3C1DBFD0", -- 000001D4
+ X"27BDFFF0", -- 000001D8
+ X"241A0005", -- 000001DC
+ X"1340009F", -- 000001E0
+ X"241AFFFB", -- 000001E4
+ X"1340009D", -- 000001E8
+ X"241A0000", -- 000001EC
+ X"13400003", -- 000001F0
+ X"00000000", -- 000001F4
+ X"0BF00118", -- 000001F8
+ X"00000000", -- 000001FC
+ X"241A0005", -- 00000200
+ X"241B0006", -- 00000204
+ X"135B0095", -- 00000208
+ X"241AFFFB", -- 0000020C
+ X"135B0093", -- 00000210
+ X"241A0000", -- 00000214
+ X"135B0091", -- 00000218
+ X"241A0006", -- 0000021C
+ X"135B0003", -- 00000220
+ X"00000000", -- 00000224
+ X"0BF00118", -- 00000228
+ X"00000000", -- 0000022C
+ X"241AFFFB", -- 00000230
+ X"0741008A", -- 00000234
+ X"241A0005", -- 00000238
+ X"07410002", -- 0000023C
+ X"00000000", -- 00000240
+ X"0BF00118", -- 00000244
+ X"241A0000", -- 00000248
+ X"07410002", -- 0000024C
+ X"00000000", -- 00000250
+ X"0BF00118", -- 00000254
+ X"241AFFFB", -- 00000258
+ X"1F400080", -- 0000025C
+ X"241A0000", -- 00000260
+ X"1F40007E", -- 00000264
+ X"241A0005", -- 00000268
+ X"1F400002", -- 0000026C
+ X"00000000", -- 00000270
+ X"0BF00118", -- 00000274
+ X"241A0005", -- 00000278
+ X"1B400078", -- 0000027C
+ X"241A0000", -- 00000280
+ X"1B400002", -- 00000284
+ X"00000000", -- 00000288
+ X"0BF00118", -- 0000028C
+ X"241AFFFB", -- 00000290
+ X"1B400002", -- 00000294
+ X"00000000", -- 00000298
+ X"0BF00118", -- 0000029C
+ X"241A0005", -- 000002A0
+ X"0740006E", -- 000002A4
+ X"241A0000", -- 000002A8
+ X"0740006C", -- 000002AC
+ X"241AFFFB", -- 000002B0
+ X"07400002", -- 000002B4
+ X"00000000", -- 000002B8
+ X"0BF00118", -- 000002BC
+ X"241A0005", -- 000002C0
+ X"241B0006", -- 000002C4
+ X"175B0002", -- 000002C8
+ X"00000000", -- 000002CC
+ X"0BF00118", -- 000002D0
+ X"241AFFFB", -- 000002D4
+ X"175B0002", -- 000002D8
+ X"00000000", -- 000002DC
+ X"0BF00118", -- 000002E0
+ X"241AFFFA", -- 000002E4
+ X"175B0002", -- 000002E8
+ X"00000000", -- 000002EC
+ X"0BF00118", -- 000002F0
+ X"241A0000", -- 000002F4
+ X"175B0002", -- 000002F8
+ X"00000000", -- 000002FC
+ X"0BF00118", -- 00000300
+ X"241A0006", -- 00000304
+ X"175B0055", -- 00000308
+ X"241A0005", -- 0000030C
+ X"17400002", -- 00000310
+ X"00000000", -- 00000314
+ X"0BF00118", -- 00000318
+ X"241AFFFB", -- 0000031C
+ X"17400002", -- 00000320
+ X"00000000", -- 00000324
+ X"0BF00118", -- 00000328
+ X"241A0000", -- 0000032C
+ X"1740004B", -- 00000330
+ X"241B0005", -- 00000334
+ X"2F7A0006", -- 00000338
+ X"2F7AFFFA", -- 0000033C
+ X"241BFFFB", -- 00000340
+ X"2F7A0006", -- 00000344
+ X"2F7AFFFA", -- 00000348
+ X"241B0006", -- 0000034C
+ X"2F7A0005", -- 00000350
+ X"2F7AFFFB", -- 00000354
+ X"241BFFFA", -- 00000358
+ X"2F7A0005", -- 0000035C
+ X"2F7AFFFB", -- 00000360
+ X"241B0005", -- 00000364
+ X"2B7A0006", -- 00000368
+ X"2B7AFFFA", -- 0000036C
+ X"241BFFFB", -- 00000370
+ X"2B7A0006", -- 00000374
+ X"2B7AFFFA", -- 00000378
+ X"241B0006", -- 0000037C
+ X"2B7A0005", -- 00000380
+ X"2B7AFFFB", -- 00000384
+ X"241BFFFA", -- 00000388
+ X"2B7A0005", -- 0000038C
+ X"2B7AFFFB", -- 00000390
+ X"241A0005", -- 00000394
+ X"241B0006", -- 00000398
+ X"035BD02B", -- 0000039C
+ X"241A0005", -- 000003A0
+ X"241BFFFA", -- 000003A4
+ X"035BD02B", -- 000003A8
+ X"241AFFFB", -- 000003AC
+ X"241B0006", -- 000003B0
+ X"035BD02B", -- 000003B4
+ X"241AFFFB", -- 000003B8
+ X"241BFFFA", -- 000003BC
+ X"035BD02B", -- 000003C0
+ X"241A0006", -- 000003C4
+ X"241B0005", -- 000003C8
+ X"035BD02B", -- 000003CC
+ X"241A0006", -- 000003D0
+ X"241BFFFB", -- 000003D4
+ X"035BD02B", -- 000003D8
+ X"241AFFFA", -- 000003DC
+ X"241B0005", -- 000003E0
+ X"035BD02B", -- 000003E4
+ X"241AFFFA", -- 000003E8
+ X"241BFFFB", -- 000003EC
+ X"035BD02B", -- 000003F0
+ X"241A0005", -- 000003F4
+ X"241B0006", -- 000003F8
+ X"035BD02A", -- 000003FC
+ X"241A0005", -- 00000400
+ X"241BFFFA", -- 00000404
+ X"035BD02A", -- 00000408
+ X"241AFFFB", -- 0000040C
+ X"241B0006", -- 00000410
+ X"035BD02A", -- 00000414
+ X"241AFFFB", -- 00000418
+ X"241BFFFA", -- 0000041C
+ X"035BD02A", -- 00000420
+ X"241A0006", -- 00000424
+ X"241B0005", -- 00000428
+ X"035BD02A", -- 0000042C
+ X"241A0006", -- 00000430
+ X"241BFFFB", -- 00000434
+ X"035BD02A", -- 00000438
+ X"241AFFFA", -- 0000043C
+ X"241B0005", -- 00000440
+ X"035BD02A", -- 00000444
+ X"241AFFFA", -- 00000448
+ X"241BFFFB", -- 0000044C
+ X"035BD02A", -- 00000450
+ X"3C1ABFC0", -- 00000454
+ X"275A0F2C", -- 00000458
+ X"0340F809", -- 0000045C
+ X"00000000", -- 00000460
+ X"0BF00118", -- 00000464
+ X"00000000", -- 00000468
+ X"27BDFFF0", -- 0000046C
+ X"AFBE000C", -- 00000470
+ X"03A0F021", -- 00000474
+ X"40026000", -- 00000478
+ X"03C0E821", -- 0000047C
+ X"8FBE000C", -- 00000480
+ X"03E00008", -- 00000484
+ X"27BD0010", -- 00000488
+ X"27BDFFF0", -- 0000048C
+ X"AFBE000C", -- 00000490
+ X"03A0F021", -- 00000494
+ X"40027800", -- 00000498
+ X"03C0E821", -- 0000049C
+ X"8FBE000C", -- 000004A0
+ X"03E00008", -- 000004A4
+ X"27BD0010", -- 000004A8
+ X"27BDFFF0", -- 000004AC
+ X"AFBE000C", -- 000004B0
+ X"03A0F021", -- 000004B4
+ X"3C02A001", -- 000004B8
+ X"34420004", -- 000004BC
+ X"AFC20004", -- 000004C0
+ X"3C02A001", -- 000004C4
+ X"AFC20000", -- 000004C8
+ X"8FC20004", -- 000004CC
+ X"00000000", -- 000004D0
+ X"8C420000", -- 000004D4
+ X"00000000", -- 000004D8
+ X"30420010", -- 000004DC
+ X"1040FFFA", -- 000004E0
+ X"00000000", -- 000004E4
+ X"8FC20000", -- 000004E8
+ X"00000000", -- 000004EC
+ X"8C420000", -- 000004F0
+ X"00000000", -- 000004F4
+ X"00021600", -- 000004F8
+ X"00021603", -- 000004FC
+ X"03C0E821", -- 00000500
+ X"8FBE000C", -- 00000504
+ X"27BD0010", -- 00000508
+ X"03E00008", -- 0000050C
+ X"00000000", -- 00000510
+ X"27BDFFE8", -- 00000514
+ X"AFBE0014", -- 00000518
+ X"03A0F021", -- 0000051C
+ X"00801021", -- 00000520
+ X"A3C20008", -- 00000524
+ X"3C02A001", -- 00000528
+ X"34420004", -- 0000052C
+ X"AFC20004", -- 00000530
+ X"3C02A001", -- 00000534
+ X"AFC20000", -- 00000538
+ X"8FC20004", -- 0000053C
+ X"00000000", -- 00000540
+ X"8C420000", -- 00000544
+ X"00000000", -- 00000548
+ X"30420002", -- 0000054C
+ X"1440FFFA", -- 00000550
+ X"00000000", -- 00000554
+ X"83C30008", -- 00000558
+ X"8FC20000", -- 0000055C
+ X"00000000", -- 00000560
+ X"AC430000", -- 00000564
+ X"03C0E821", -- 00000568
+ X"8FBE0014", -- 0000056C
+ X"27BD0018", -- 00000570
+ X"03E00008", -- 00000574
+ X"00000000", -- 00000578
+ X"27BDFFF0", -- 0000057C
+ X"AFBF000C", -- 00000580
+ X"AFBE0008", -- 00000584
+ X"03A0F021", -- 00000588
+ X"00801021", -- 0000058C
+ X"A3C20000", -- 00000590
+ X"83C30000", -- 00000594
+ X"2402000A", -- 00000598
+ X"1462000B", -- 0000059C
+ X"00000000", -- 000005A0
+ X"2404000D", -- 000005A4
+ X"0FF00145", -- 000005A8
+ X"00000000", -- 000005AC
+ X"83C20000", -- 000005B0
+ X"00000000", -- 000005B4
+ X"00402021", -- 000005B8
+ X"0FF00145", -- 000005BC
+ X"00000000", -- 000005C0
+ X"0BF00178", -- 000005C4
+ X"00000000", -- 000005C8
+ X"83C20000", -- 000005CC
+ X"00000000", -- 000005D0
+ X"00402021", -- 000005D4
+ X"0FF00145", -- 000005D8
+ X"00000000", -- 000005DC
+ X"03C0E821", -- 000005E0
+ X"8FBF000C", -- 000005E4
+ X"8FBE0008", -- 000005E8
+ X"27BD0010", -- 000005EC
+ X"03E00008", -- 000005F0
+ X"00000000", -- 000005F4
+ X"27BDFFE8", -- 000005F8
+ X"AFBF0014", -- 000005FC
+ X"AFBE0010", -- 00000600
+ X"03A0F021", -- 00000604
+ X"AFC40008", -- 00000608
+ X"8FC20008", -- 0000060C
+ X"00000000", -- 00000610
+ X"AFC20000", -- 00000614
+ X"0BF00194", -- 00000618
+ X"00000000", -- 0000061C
+ X"8FC20008", -- 00000620
+ X"00000000", -- 00000624
+ X"80420000", -- 00000628
+ X"00000000", -- 0000062C
+ X"00401821", -- 00000630
+ X"8FC20008", -- 00000634
+ X"00000000", -- 00000638
+ X"24420001", -- 0000063C
+ X"AFC20008", -- 00000640
+ X"00602021", -- 00000644
+ X"0FF0015F", -- 00000648
+ X"00000000", -- 0000064C
+ X"8FC20008", -- 00000650
+ X"00000000", -- 00000654
+ X"80420000", -- 00000658
+ X"00000000", -- 0000065C
+ X"1440FFEF", -- 00000660
+ X"00000000", -- 00000664
+ X"8FC30008", -- 00000668
+ X"8FC20000", -- 0000066C
+ X"00000000", -- 00000670
+ X"00621023", -- 00000674
+ X"03C0E821", -- 00000678
+ X"8FBF0014", -- 0000067C
+ X"8FBE0010", -- 00000680
+ X"27BD0018", -- 00000684
+ X"03E00008", -- 00000688
+ X"00000000", -- 0000068C
+ X"27BDFFE8", -- 00000690
+ X"AFBF0014", -- 00000694
+ X"AFBE0010", -- 00000698
+ X"03A0F021", -- 0000069C
+ X"00801021", -- 000006A0
+ X"A3C20008", -- 000006A4
+ X"AFC00004", -- 000006A8
+ X"0BF001CD", -- 000006AC
+ X"00000000", -- 000006B0
+ X"93C20008", -- 000006B4
+ X"00000000", -- 000006B8
+ X"00021102", -- 000006BC
+ X"A3C20000", -- 000006C0
+ X"83C20008", -- 000006C4
+ X"00000000", -- 000006C8
+ X"00021100", -- 000006CC
+ X"A3C20008", -- 000006D0
+ X"93C20000", -- 000006D4
+ X"00000000", -- 000006D8
+ X"2C42000A", -- 000006DC
+ X"10400007", -- 000006E0
+ X"00000000", -- 000006E4
+ X"93C20000", -- 000006E8
+ X"00000000", -- 000006EC
+ X"24420030", -- 000006F0
+ X"A3C20001", -- 000006F4
+ X"0BF001C4", -- 000006F8
+ X"00000000", -- 000006FC
+ X"93C20000", -- 00000700
+ X"00000000", -- 00000704
+ X"24420037", -- 00000708
+ X"A3C20001", -- 0000070C
+ X"83C20001", -- 00000710
+ X"00000000", -- 00000714
+ X"00402021", -- 00000718
+ X"0FF00145", -- 0000071C
+ X"00000000", -- 00000720
+ X"8FC20004", -- 00000724
+ X"00000000", -- 00000728
+ X"24420001", -- 0000072C
+ X"AFC20004", -- 00000730
+ X"8FC20004", -- 00000734
+ X"00000000", -- 00000738
+ X"28420002", -- 0000073C
+ X"1440FFDC", -- 00000740
+ X"00000000", -- 00000744
+ X"03C0E821", -- 00000748
+ X"8FBF0014", -- 0000074C
+ X"8FBE0010", -- 00000750
+ X"27BD0018", -- 00000754
+ X"03E00008", -- 00000758
+ X"00000000", -- 0000075C
+ X"27BDFFE8", -- 00000760
+ X"AFBF0014", -- 00000764
+ X"AFBE0010", -- 00000768
+ X"03A0F021", -- 0000076C
+ X"AFC40008", -- 00000770
+ X"AFC00004", -- 00000774
+ X"0BF001F1", -- 00000778
+ X"00000000", -- 0000077C
+ X"8FC20008", -- 00000780
+ X"00000000", -- 00000784
+ X"00021603", -- 00000788
+ X"A3C20001", -- 0000078C
+ X"83C20001", -- 00000790
+ X"00000000", -- 00000794
+ X"00402021", -- 00000798
+ X"0FF001A4", -- 0000079C
+ X"00000000", -- 000007A0
+ X"8FC20008", -- 000007A4
+ X"00000000", -- 000007A8
+ X"00021200", -- 000007AC
+ X"AFC20008", -- 000007B0
+ X"8FC20004", -- 000007B4
+ X"00000000", -- 000007B8
+ X"24420001", -- 000007BC
+ X"AFC20004", -- 000007C0
+ X"8FC20004", -- 000007C4
+ X"00000000", -- 000007C8
+ X"28420004", -- 000007CC
+ X"1440FFEB", -- 000007D0
+ X"00000000", -- 000007D4
+ X"03C0E821", -- 000007D8
+ X"8FBF0014", -- 000007DC
+ X"8FBE0010", -- 000007E0
+ X"27BD0018", -- 000007E4
+ X"03E00008", -- 000007E8
+ X"00000000", -- 000007EC
+ X"27BDFFE8", -- 000007F0
+ X"AFBE0014", -- 000007F4
+ X"03A0F021", -- 000007F8
+ X"AFC40008", -- 000007FC
+ X"A3C00000", -- 00000800
+ X"AFC00004", -- 00000804
+ X"0BF00229", -- 00000808
+ X"00000000", -- 0000080C
+ X"8FC30004", -- 00000810
+ X"8FC20008", -- 00000814
+ X"00000000", -- 00000818
+ X"00431021", -- 0000081C
+ X"90420000", -- 00000820
+ X"00000000", -- 00000824
+ X"A3C20001", -- 00000828
+ X"93C20001", -- 0000082C
+ X"00000000", -- 00000830
+ X"2C420041", -- 00000834
+ X"14400007", -- 00000838
+ X"00000000", -- 0000083C
+ X"93C20001", -- 00000840
+ X"00000000", -- 00000844
+ X"2442FFC9", -- 00000848
+ X"A3C20001", -- 0000084C
+ X"0BF0021A", -- 00000850
+ X"00000000", -- 00000854
+ X"93C20001", -- 00000858
+ X"00000000", -- 0000085C
+ X"2442FFD0", -- 00000860
+ X"A3C20001", -- 00000864
+ X"93C20000", -- 00000868
+ X"00000000", -- 0000086C
+ X"00021100", -- 00000870
+ X"00021E00", -- 00000874
+ X"00031E03", -- 00000878
+ X"83C20001", -- 0000087C
+ X"00000000", -- 00000880
+ X"00621025", -- 00000884
+ X"00021600", -- 00000888
+ X"00021603", -- 0000088C
+ X"A3C20000", -- 00000890
+ X"8FC20004", -- 00000894
+ X"00000000", -- 00000898
+ X"24420001", -- 0000089C
+ X"AFC20004", -- 000008A0
+ X"8FC20004", -- 000008A4
+ X"00000000", -- 000008A8
+ X"28420002", -- 000008AC
+ X"1440FFD7", -- 000008B0
+ X"00000000", -- 000008B4
+ X"93C20000", -- 000008B8
+ X"03C0E821", -- 000008BC
+ X"8FBE0014", -- 000008C0
+ X"27BD0018", -- 000008C4
+ X"03E00008", -- 000008C8
+ X"00000000", -- 000008CC
+ X"27BDFFD8", -- 000008D0
+ X"AFBF0024", -- 000008D4
+ X"AFBE0020", -- 000008D8
+ X"03A0F021", -- 000008DC
+ X"AFC40010", -- 000008E0
+ X"AFC50014", -- 000008E4
+ X"AFC60018", -- 000008E8
+ X"8FC20018", -- 000008EC
+ X"00000000", -- 000008F0
+ X"14400004", -- 000008F4
+ X"00000000", -- 000008F8
+ X"AFC0001C", -- 000008FC
+ X"0BF00321", -- 00000900
+ X"00000000", -- 00000904
+ X"8FC30010", -- 00000908
+ X"24020003", -- 0000090C
+ X"AC620008", -- 00000910
+ X"AFC00004", -- 00000914
+ X"8FC20014", -- 00000918
+ X"00000000", -- 0000091C
+ X"24420001", -- 00000920
+ X"90420000", -- 00000924
+ X"00000000", -- 00000928
+ X"2C420031", -- 0000092C
+ X"14400015", -- 00000930
+ X"00000000", -- 00000934
+ X"8FC20014", -- 00000938
+ X"00000000", -- 0000093C
+ X"24420001", -- 00000940
+ X"90420000", -- 00000944
+ X"00000000", -- 00000948
+ X"2C420034", -- 0000094C
+ X"1040000D", -- 00000950
+ X"00000000", -- 00000954
+ X"8FC20014", -- 00000958
+ X"00000000", -- 0000095C
+ X"24420001", -- 00000960
+ X"90420000", -- 00000964
+ X"00000000", -- 00000968
+ X"2442FFD1", -- 0000096C
+ X"AFC20004", -- 00000970
+ X"8FC30010", -- 00000974
+ X"24020002", -- 00000978
+ X"AC620008", -- 0000097C
+ X"0BF0028C", -- 00000980
+ X"00000000", -- 00000984
+ X"8FC20014", -- 00000988
+ X"00000000", -- 0000098C
+ X"24420001", -- 00000990
+ X"90420000", -- 00000994
+ X"00000000", -- 00000998
+ X"2C420037", -- 0000099C
+ X"14400017", -- 000009A0
+ X"00000000", -- 000009A4
+ X"8FC20014", -- 000009A8
+ X"00000000", -- 000009AC
+ X"24420001", -- 000009B0
+ X"90420000", -- 000009B4
+ X"00000000", -- 000009B8
+ X"2C42003A", -- 000009BC
+ X"1040000F", -- 000009C0
+ X"00000000", -- 000009C4
+ X"8FC20014", -- 000009C8
+ X"00000000", -- 000009CC
+ X"24420001", -- 000009D0
+ X"90420000", -- 000009D4
+ X"00000000", -- 000009D8
+ X"00401821", -- 000009DC
+ X"2402003B", -- 000009E0
+ X"00431023", -- 000009E4
+ X"AFC20004", -- 000009E8
+ X"8FC30010", -- 000009EC
+ X"24020004", -- 000009F0
+ X"AC620008", -- 000009F4
+ X"0BF0028C", -- 000009F8
+ X"00000000", -- 000009FC
+ X"8FC20014", -- 00000A00
+ X"00000000", -- 00000A04
+ X"24420001", -- 00000A08
+ X"90430000", -- 00000A0C
+ X"24020030", -- 00000A10
+ X"14620006", -- 00000A14
+ X"00000000", -- 00000A18
+ X"24020002", -- 00000A1C
+ X"AFC20004", -- 00000A20
+ X"8FC30010", -- 00000A24
+ X"24020001", -- 00000A28
+ X"AC620008", -- 00000A2C
+ X"8FC20014", -- 00000A30
+ X"00000000", -- 00000A34
+ X"24420002", -- 00000A38
+ X"00402021", -- 00000A3C
+ X"0FF001FC", -- 00000A40
+ X"00000000", -- 00000A44
+ X"A3C20008", -- 00000A48
+ X"93C30008", -- 00000A4C
+ X"8FC20010", -- 00000A50
+ X"00000000", -- 00000A54
+ X"AC430004", -- 00000A58
+ X"93C20008", -- 00000A5C
+ X"00000000", -- 00000A60
+ X"A3C20009", -- 00000A64
+ X"8FC20010", -- 00000A68
+ X"00000000", -- 00000A6C
+ X"AC400000", -- 00000A70
+ X"AFC00000", -- 00000A74
+ X"0BF002C0", -- 00000A78
+ X"00000000", -- 00000A7C
+ X"8FC20000", -- 00000A80
+ X"00000000", -- 00000A84
+ X"24420002", -- 00000A88
+ X"00021040", -- 00000A8C
+ X"00401821", -- 00000A90
+ X"8FC20014", -- 00000A94
+ X"00000000", -- 00000A98
+ X"00431021", -- 00000A9C
+ X"00402021", -- 00000AA0
+ X"0FF001FC", -- 00000AA4
+ X"00000000", -- 00000AA8
+ X"A3C20008", -- 00000AAC
+ X"8FC20010", -- 00000AB0
+ X"00000000", -- 00000AB4
+ X"8C420000", -- 00000AB8
+ X"00000000", -- 00000ABC
+ X"00021A00", -- 00000AC0
+ X"93C20008", -- 00000AC4
+ X"00000000", -- 00000AC8
+ X"00621825", -- 00000ACC
+ X"8FC20010", -- 00000AD0
+ X"00000000", -- 00000AD4
+ X"AC430000", -- 00000AD8
+ X"93C30009", -- 00000ADC
+ X"93C20008", -- 00000AE0
+ X"00000000", -- 00000AE4
+ X"00621021", -- 00000AE8
+ X"A3C20009", -- 00000AEC
+ X"8FC20000", -- 00000AF0
+ X"00000000", -- 00000AF4
+ X"24420001", -- 00000AF8
+ X"AFC20000", -- 00000AFC
+ X"8FC20000", -- 00000B00
+ X"8FC30004", -- 00000B04
+ X"00000000", -- 00000B08
+ X"0043102A", -- 00000B0C
+ X"1440FFDB", -- 00000B10
+ X"00000000", -- 00000B14
+ X"8FC20010", -- 00000B18
+ X"00000000", -- 00000B1C
+ X"8C430004", -- 00000B20
+ X"8FC20004", -- 00000B24
+ X"00000000", -- 00000B28
+ X"00021027", -- 00000B2C
+ X"00621821", -- 00000B30
+ X"8FC20010", -- 00000B34
+ X"00000000", -- 00000B38
+ X"AC430004", -- 00000B3C
+ X"8FC20004", -- 00000B40
+ X"00000000", -- 00000B44
+ X"24420002", -- 00000B48
+ X"00021040", -- 00000B4C
+ X"00401821", -- 00000B50
+ X"8FC20014", -- 00000B54
+ X"00000000", -- 00000B58
+ X"00431821", -- 00000B5C
+ X"8FC20010", -- 00000B60
+ X"00000000", -- 00000B64
+ X"AC43000C", -- 00000B68
+ X"AFC00000", -- 00000B6C
+ X"0BF002FB", -- 00000B70
+ X"00000000", -- 00000B74
+ X"8FC20010", -- 00000B78
+ X"00000000", -- 00000B7C
+ X"8C43000C", -- 00000B80
+ X"8FC20000", -- 00000B84
+ X"00000000", -- 00000B88
+ X"00021040", -- 00000B8C
+ X"00621021", -- 00000B90
+ X"00402021", -- 00000B94
+ X"0FF001FC", -- 00000B98
+ X"00000000", -- 00000B9C
+ X"A3C20008", -- 00000BA0
+ X"8FC20010", -- 00000BA4
+ X"00000000", -- 00000BA8
+ X"8C43000C", -- 00000BAC
+ X"8FC20000", -- 00000BB0
+ X"00000000", -- 00000BB4
+ X"00621821", -- 00000BB8
+ X"93C20008", -- 00000BBC
+ X"00000000", -- 00000BC0
+ X"A0620000", -- 00000BC4
+ X"93C30009", -- 00000BC8
+ X"93C20008", -- 00000BCC
+ X"00000000", -- 00000BD0
+ X"00621021", -- 00000BD4
+ X"A3C20009", -- 00000BD8
+ X"8FC20000", -- 00000BDC
+ X"00000000", -- 00000BE0
+ X"24420001", -- 00000BE4
+ X"AFC20000", -- 00000BE8
+ X"8FC20010", -- 00000BEC
+ X"00000000", -- 00000BF0
+ X"8C420004", -- 00000BF4
+ X"00000000", -- 00000BF8
+ X"00401821", -- 00000BFC
+ X"8FC20000", -- 00000C00
+ X"00000000", -- 00000C04
+ X"0043102A", -- 00000C08
+ X"1440FFDA", -- 00000C0C
+ X"00000000", -- 00000C10
+ X"93C20009", -- 00000C14
+ X"00000000", -- 00000C18
+ X"00021027", -- 00000C1C
+ X"A3C20009", -- 00000C20
+ X"8FC20010", -- 00000C24
+ X"00000000", -- 00000C28
+ X"8C43000C", -- 00000C2C
+ X"8FC20000", -- 00000C30
+ X"00000000", -- 00000C34
+ X"00021040", -- 00000C38
+ X"00621021", -- 00000C3C
+ X"00402021", -- 00000C40
+ X"0FF001FC", -- 00000C44
+ X"00000000", -- 00000C48
+ X"A3C20008", -- 00000C4C
+ X"93C30009", -- 00000C50
+ X"93C20008", -- 00000C54
+ X"00000000", -- 00000C58
+ X"10620004", -- 00000C5C
+ X"00000000", -- 00000C60
+ X"AFC0001C", -- 00000C64
+ X"0BF00321", -- 00000C68
+ X"00000000", -- 00000C6C
+ X"8FC20010", -- 00000C70
+ X"00000000", -- 00000C74
+ X"8C420008", -- 00000C78
+ X"00000000", -- 00000C7C
+ X"AFC2001C", -- 00000C80
+ X"8FC2001C", -- 00000C84
+ X"03C0E821", -- 00000C88
+ X"8FBF0024", -- 00000C8C
+ X"8FBE0020", -- 00000C90
+ X"27BD0028", -- 00000C94
+ X"03E00008", -- 00000C98
+ X"00000000", -- 00000C9C
+ X"27BDFFE8", -- 00000CA0
+ X"AFBF0014", -- 00000CA4
+ X"AFBE0010", -- 00000CA8
+ X"03A0F021", -- 00000CAC
+ X"AFC40008", -- 00000CB0
+ X"AFC00000", -- 00000CB4
+ X"0FF0012B", -- 00000CB8
+ X"00000000", -- 00000CBC
+ X"A3C20004", -- 00000CC0
+ X"83C30004", -- 00000CC4
+ X"24020073", -- 00000CC8
+ X"10620015", -- 00000CCC
+ X"00000000", -- 00000CD0
+ X"83C30004", -- 00000CD4
+ X"24020053", -- 00000CD8
+ X"1462FFF6", -- 00000CDC
+ X"00000000", -- 00000CE0
+ X"0BF00349", -- 00000CE4
+ X"00000000", -- 00000CE8
+ X"8FC30000", -- 00000CEC
+ X"8FC20008", -- 00000CF0
+ X"00000000", -- 00000CF4
+ X"00431821", -- 00000CF8
+ X"93C20004", -- 00000CFC
+ X"00000000", -- 00000D00
+ X"A0620000", -- 00000D04
+ X"8FC20000", -- 00000D08
+ X"00000000", -- 00000D0C
+ X"24420001", -- 00000D10
+ X"AFC20000", -- 00000D14
+ X"0FF0012B", -- 00000D18
+ X"00000000", -- 00000D1C
+ X"A3C20004", -- 00000D20
+ X"83C30004", -- 00000D24
+ X"2402000D", -- 00000D28
+ X"10620005", -- 00000D2C
+ X"00000000", -- 00000D30
+ X"83C30004", -- 00000D34
+ X"2402000A", -- 00000D38
+ X"1462FFEB", -- 00000D3C
+ X"00000000", -- 00000D40
+ X"8FC20000", -- 00000D44
+ X"03C0E821", -- 00000D48
+ X"8FBF0014", -- 00000D4C
+ X"8FBE0010", -- 00000D50
+ X"27BD0018", -- 00000D54
+ X"03E00008", -- 00000D58
+ X"00000000", -- 00000D5C
+ X"27BDFFF0", -- 00000D60
+ X"AFBE000C", -- 00000D64
+ X"03A0F021", -- 00000D68
+ X"AFC40000", -- 00000D6C
+ X"401A6000", -- 00000D70
+ X"3C1BFFBF", -- 00000D74
+ X"377BFFFF", -- 00000D78
+ X"035BD024", -- 00000D7C
+ X"409A6000", -- 00000D80
+ X"00800008", -- 00000D84
+ X"42000010", -- 00000D88
+ X"03C0E821", -- 00000D8C
+ X"8FBE000C", -- 00000D90
+ X"03E00008", -- 00000D94
+ X"27BD0010", -- 00000D98
+ X"27BDFFD0", -- 00000D9C
+ X"AFBF002C", -- 00000DA0
+ X"AFBE0028", -- 00000DA4
+ X"03A0F021", -- 00000DA8
+ X"3C02BFC0", -- 00000DAC
+ X"244215D0", -- 00000DB0
+ X"AFC20008", -- 00000DB4
+ X"3C02BFC0", -- 00000DB8
+ X"244215D8", -- 00000DBC
+ X"AFC2000C", -- 00000DC0
+ X"3C02BFC0", -- 00000DC4
+ X"244215E0", -- 00000DC8
+ X"AFC20010", -- 00000DCC
+ X"3C02BFC0", -- 00000DD0
+ X"244215E8", -- 00000DD4
+ X"AFC20014", -- 00000DD8
+ X"3C02BFC0", -- 00000DDC
+ X"244215F0", -- 00000DE0
+ X"AFC20018", -- 00000DE4
+ X"3C02BFC0", -- 00000DE8
+ X"244215F8", -- 00000DEC
+ X"AFC2001C", -- 00000DF0
+ X"3C02BFC0", -- 00000DF4
+ X"24421604", -- 00000DF8
+ X"AFC20020", -- 00000DFC
+ X"0FF0011B", -- 00000E00
+ X"00000000", -- 00000E04
+ X"AFC20004", -- 00000E08
+ X"3C02BFC0", -- 00000E0C
+ X"2444160C", -- 00000E10
+ X"0FF0017E", -- 00000E14
+ X"00000000", -- 00000E18
+ X"8FC40004", -- 00000E1C
+ X"0FF001D8", -- 00000E20
+ X"00000000", -- 00000E24
+ X"3C02BFC0", -- 00000E28
+ X"24441618", -- 00000E2C
+ X"0FF0017E", -- 00000E30
+ X"00000000", -- 00000E34
+ X"0FF00123", -- 00000E38
+ X"00000000", -- 00000E3C
+ X"AFC20004", -- 00000E40
+ X"8FC20004", -- 00000E44
+ X"00000000", -- 00000E48
+ X"00021203", -- 00000E4C
+ X"304200FF", -- 00000E50
+ X"AFC20000", -- 00000E54
+ X"3C02BFC0", -- 00000E58
+ X"2444161C", -- 00000E5C
+ X"0FF0017E", -- 00000E60
+ X"00000000", -- 00000E64
+ X"8FC20000", -- 00000E68
+ X"00000000", -- 00000E6C
+ X"18400020", -- 00000E70
+ X"00000000", -- 00000E74
+ X"8FC20000", -- 00000E78
+ X"00000000", -- 00000E7C
+ X"28420007", -- 00000E80
+ X"1040001B", -- 00000E84
+ X"00000000", -- 00000E88
+ X"8FC20000", -- 00000E8C
+ X"00000000", -- 00000E90
+ X"00021080", -- 00000E94
+ X"03C21021", -- 00000E98
+ X"8C420008", -- 00000E9C
+ X"00000000", -- 00000EA0
+ X"00402021", -- 00000EA4
+ X"0FF0017E", -- 00000EA8
+ X"00000000", -- 00000EAC
+ X"3C02BFC0", -- 00000EB0
+ X"24441628", -- 00000EB4
+ X"0FF0017E", -- 00000EB8
+ X"00000000", -- 00000EBC
+ X"8FC20004", -- 00000EC0
+ X"00000000", -- 00000EC4
+ X"304200FF", -- 00000EC8
+ X"AFC20000", -- 00000ECC
+ X"8FC20000", -- 00000ED0
+ X"00000000", -- 00000ED4
+ X"00021600", -- 00000ED8
+ X"00021603", -- 00000EDC
+ X"00402021", -- 00000EE0
+ X"0FF001A4", -- 00000EE4
+ X"00000000", -- 00000EE8
+ X"0BF003C1", -- 00000EEC
+ X"00000000", -- 00000EF0
+ X"3C02BFC0", -- 00000EF4
+ X"24441630", -- 00000EF8
+ X"0FF0017E", -- 00000EFC
+ X"00000000", -- 00000F00
+ X"3C02BFC0", -- 00000F04
+ X"24441618", -- 00000F08
+ X"0FF0017E", -- 00000F0C
+ X"00000000", -- 00000F10
+ X"03C0E821", -- 00000F14
+ X"8FBF002C", -- 00000F18
+ X"8FBE0028", -- 00000F1C
+ X"27BD0030", -- 00000F20
+ X"03E00008", -- 00000F24
+ X"00000000", -- 00000F28
+ X"27BDFEA8", -- 00000F2C
+ X"AFBF0154", -- 00000F30
+ X"AFBE0150", -- 00000F34
+ X"03A0F021", -- 00000F38
+ X"AFC40140", -- 00000F3C
+ X"AFC50144", -- 00000F40
+ X"3C02A000", -- 00000F44
+ X"AFC20020", -- 00000F48
+ X"3C02A400", -- 00000F4C
+ X"AFC20010", -- 00000F50
+ X"3C02A002", -- 00000F54
+ X"AFC2000C", -- 00000F58
+ X"3C024000", -- 00000F5C
+ X"AFC20008", -- 00000F60
+ X"3C024000", -- 00000F64
+ X"AFC20004", -- 00000F68
+ X"3C024000", -- 00000F6C
+ X"AFC20000", -- 00000F70
+ X"8FC20020", -- 00000F74
+ X"00000000", -- 00000F78
+ X"AC400000", -- 00000F7C
+ X"AFC00024", -- 00000F80
+ X"3C02BFC0", -- 00000F84
+ X"24441638", -- 00000F88
+ X"0FF0017E", -- 00000F8C
+ X"00000000", -- 00000F90
+ X"3C024000", -- 00000F94
+ X"AFC20014", -- 00000F98
+ X"AFC00018", -- 00000F9C
+ X"AFC00028", -- 00000FA0
+ X"0BF003FD", -- 00000FA4
+ X"00000000", -- 00000FA8
+ X"8FC20018", -- 00000FAC
+ X"00000000", -- 00000FB0
+ X"8C430000", -- 00000FB4
+ X"8FC20014", -- 00000FB8
+ X"00000000", -- 00000FBC
+ X"AC430000", -- 00000FC0
+ X"8FC20014", -- 00000FC4
+ X"00000000", -- 00000FC8
+ X"24420004", -- 00000FCC
+ X"AFC20014", -- 00000FD0
+ X"8FC20018", -- 00000FD4
+ X"00000000", -- 00000FD8
+ X"24420004", -- 00000FDC
+ X"AFC20018", -- 00000FE0
+ X"8FC20028", -- 00000FE4
+ X"00000000", -- 00000FE8
+ X"24420004", -- 00000FEC
+ X"AFC20028", -- 00000FF0
+ X"8FC20028", -- 00000FF4
+ X"00000000", -- 00000FF8
+ X"28423500", -- 00000FFC
+ X"1440FFEA", -- 00001000
+ X"00000000", -- 00001004
+ X"3C044000", -- 00001008
+ X"0FF00358", -- 0000100C
+ X"00000000", -- 00001010
+ X"3C02BFC0", -- 00001014
+ X"24441640", -- 00001018
+ X"0FF0017E", -- 0000101C
+ X"00000000", -- 00001020
+ X"3C02BFC0", -- 00001024
+ X"24441654", -- 00001028
+ X"0FF0017E", -- 0000102C
+ X"00000000", -- 00001030
+ X"AFC00028", -- 00001034
+ X"0BF0041C", -- 00001038
+ X"00000000", -- 0000103C
+ X"8FC30028", -- 00001040
+ X"8FC20008", -- 00001044
+ X"00000000", -- 00001048
+ X"00431821", -- 0000104C
+ X"8FC20028", -- 00001050
+ X"00000000", -- 00001054
+ X"304200FF", -- 00001058
+ X"A0620000", -- 0000105C
+ X"8FC20028", -- 00001060
+ X"00000000", -- 00001064
+ X"24420001", -- 00001068
+ X"AFC20028", -- 0000106C
+ X"8FC20028", -- 00001070
+ X"3C030010", -- 00001074
+ X"0043102A", -- 00001078
+ X"1440FFF0", -- 0000107C
+ X"00000000", -- 00001080
+ X"3C02BFC0", -- 00001084
+ X"2444166C", -- 00001088
+ X"0FF0017E", -- 0000108C
+ X"00000000", -- 00001090
+ X"3C02BFC0", -- 00001094
+ X"24441674", -- 00001098
+ X"0FF0017E", -- 0000109C
+ X"00000000", -- 000010A0
+ X"3C02000F", -- 000010A4
+ X"3442FFFF", -- 000010A8
+ X"AFC20028", -- 000010AC
+ X"0BF0043E", -- 000010B0
+ X"00000000", -- 000010B4
+ X"8FC30028", -- 000010B8
+ X"8FC20008", -- 000010BC
+ X"00000000", -- 000010C0
+ X"00431021", -- 000010C4
+ X"90420000", -- 000010C8
+ X"00000000", -- 000010CC
+ X"304300FF", -- 000010D0
+ X"8FC20028", -- 000010D4
+ X"00000000", -- 000010D8
+ X"304200FF", -- 000010DC
+ X"14620009", -- 000010E0
+ X"00000000", -- 000010E4
+ X"8FC20028", -- 000010E8
+ X"00000000", -- 000010EC
+ X"2442FFFF", -- 000010F0
+ X"AFC20028", -- 000010F4
+ X"8FC20028", -- 000010F8
+ X"00000000", -- 000010FC
+ X"0441FFED", -- 00001100
+ X"00000000", -- 00001104
+ X"8FC20028", -- 00001108
+ X"00000000", -- 0000110C
+ X"24420001", -- 00001110
+ X"AFC20028", -- 00001114
+ X"8FC20028", -- 00001118
+ X"00000000", -- 0000111C
+ X"10400007", -- 00001120
+ X"00000000", -- 00001124
+ X"3C02BFC0", -- 00001128
+ X"24441690", -- 0000112C
+ X"0FF0017E", -- 00001130
+ X"00000000", -- 00001134
+ X"0BF00454", -- 00001138
+ X"00000000", -- 0000113C
+ X"3C02BFC0", -- 00001140
+ X"2444169C", -- 00001144
+ X"0FF0017E", -- 00001148
+ X"00000000", -- 0000114C
+ X"3C02BFC0", -- 00001150
+ X"244416A8", -- 00001154
+ X"0FF0017E", -- 00001158
+ X"00000000", -- 0000115C
+ X"AFC00028", -- 00001160
+ X"0BF00469", -- 00001164
+ X"00000000", -- 00001168
+ X"8FC20028", -- 0000116C
+ X"00000000", -- 00001170
+ X"00021840", -- 00001174
+ X"8FC20004", -- 00001178
+ X"00000000", -- 0000117C
+ X"00431821", -- 00001180
+ X"8FC20028", -- 00001184
+ X"00000000", -- 00001188
+ X"3042FFFF", -- 0000118C
+ X"A4620000", -- 00001190
+ X"8FC20028", -- 00001194
+ X"00000000", -- 00001198
+ X"24420001", -- 0000119C
+ X"AFC20028", -- 000011A0
+ X"8FC20028", -- 000011A4
+ X"3C030008", -- 000011A8
+ X"0043102A", -- 000011AC
+ X"1440FFEE", -- 000011B0
+ X"00000000", -- 000011B4
+ X"3C02BFC0", -- 000011B8
+ X"2444166C", -- 000011BC
+ X"0FF0017E", -- 000011C0
+ X"00000000", -- 000011C4
+ X"3C02BFC0", -- 000011C8
+ X"244416C4", -- 000011CC
+ X"0FF0017E", -- 000011D0
+ X"00000000", -- 000011D4
+ X"3C020007", -- 000011D8
+ X"3442FFFF", -- 000011DC
+ X"AFC20028", -- 000011E0
+ X"0BF0048D", -- 000011E4
+ X"00000000", -- 000011E8
+ X"8FC20028", -- 000011EC
+ X"00000000", -- 000011F0
+ X"00021840", -- 000011F4
+ X"8FC20004", -- 000011F8
+ X"00000000", -- 000011FC
+ X"00431021", -- 00001200
+ X"94420000", -- 00001204
+ X"00000000", -- 00001208
+ X"3043FFFF", -- 0000120C
+ X"8FC20028", -- 00001210
+ X"00000000", -- 00001214
+ X"3042FFFF", -- 00001218
+ X"14620009", -- 0000121C
+ X"00000000", -- 00001220
+ X"8FC20028", -- 00001224
+ X"00000000", -- 00001228
+ X"2442FFFF", -- 0000122C
+ X"AFC20028", -- 00001230
+ X"8FC20028", -- 00001234
+ X"00000000", -- 00001238
+ X"0441FFEB", -- 0000123C
+ X"00000000", -- 00001240
+ X"8FC20028", -- 00001244
+ X"00000000", -- 00001248
+ X"24420001", -- 0000124C
+ X"AFC20028", -- 00001250
+ X"8FC20028", -- 00001254
+ X"00000000", -- 00001258
+ X"10400007", -- 0000125C
+ X"00000000", -- 00001260
+ X"3C02BFC0", -- 00001264
+ X"24441690", -- 00001268
+ X"0FF0017E", -- 0000126C
+ X"00000000", -- 00001270
+ X"0BF004A3", -- 00001274
+ X"00000000", -- 00001278
+ X"3C02BFC0", -- 0000127C
+ X"2444169C", -- 00001280
+ X"0FF0017E", -- 00001284
+ X"00000000", -- 00001288
+ X"3C02BFC0", -- 0000128C
+ X"244416E0", -- 00001290
+ X"0FF0017E", -- 00001294
+ X"00000000", -- 00001298
+ X"AFC00028", -- 0000129C
+ X"0BF004B7", -- 000012A0
+ X"00000000", -- 000012A4
+ X"8FC20028", -- 000012A8
+ X"00000000", -- 000012AC
+ X"00021880", -- 000012B0
+ X"8FC20000", -- 000012B4
+ X"00000000", -- 000012B8
+ X"00431821", -- 000012BC
+ X"8FC20028", -- 000012C0
+ X"00000000", -- 000012C4
+ X"AC620000", -- 000012C8
+ X"8FC20028", -- 000012CC
+ X"00000000", -- 000012D0
+ X"24420001", -- 000012D4
+ X"AFC20028", -- 000012D8
+ X"8FC20028", -- 000012DC
+ X"3C030004", -- 000012E0
+ X"0043102A", -- 000012E4
+ X"1440FFEF", -- 000012E8
+ X"00000000", -- 000012EC
+ X"3C02BFC0", -- 000012F0
+ X"2444166C", -- 000012F4
+ X"0FF0017E", -- 000012F8
+ X"00000000", -- 000012FC
+ X"3C02BFC0", -- 00001300
+ X"244416FC", -- 00001304
+ X"0FF0017E", -- 00001308
+ X"00000000", -- 0000130C
+ X"3C020003", -- 00001310
+ X"3442FFFF", -- 00001314
+ X"AFC20028", -- 00001318
+ X"0BF004D8", -- 0000131C
+ X"00000000", -- 00001320
+ X"8FC20028", -- 00001324
+ X"00000000", -- 00001328
+ X"00021880", -- 0000132C
+ X"8FC20000", -- 00001330
+ X"00000000", -- 00001334
+ X"00431021", -- 00001338
+ X"8C430000", -- 0000133C
+ X"8FC20028", -- 00001340
+ X"00000000", -- 00001344
+ X"14620009", -- 00001348
+ X"00000000", -- 0000134C
+ X"8FC20028", -- 00001350
+ X"00000000", -- 00001354
+ X"2442FFFF", -- 00001358
+ X"AFC20028", -- 0000135C
+ X"8FC20028", -- 00001360
+ X"00000000", -- 00001364
+ X"0441FFEE", -- 00001368
+ X"00000000", -- 0000136C
+ X"8FC20028", -- 00001370
+ X"00000000", -- 00001374
+ X"24420001", -- 00001378
+ X"AFC20028", -- 0000137C
+ X"8FC20028", -- 00001380
+ X"00000000", -- 00001384
+ X"10400007", -- 00001388
+ X"00000000", -- 0000138C
+ X"3C02BFC0", -- 00001390
+ X"24441690", -- 00001394
+ X"0FF0017E", -- 00001398
+ X"00000000", -- 0000139C
+ X"0BF004EE", -- 000013A0
+ X"00000000", -- 000013A4
+ X"3C02BFC0", -- 000013A8
+ X"2444169C", -- 000013AC
+ X"0FF0017E", -- 000013B0
+ X"00000000", -- 000013B4
+ X"AFC00028", -- 000013B8
+ X"0BF004FC", -- 000013BC
+ X"00000000", -- 000013C0
+ X"8FC20028", -- 000013C4
+ X"00000000", -- 000013C8
+ X"00021880", -- 000013CC
+ X"8FC20000", -- 000013D0
+ X"00000000", -- 000013D4
+ X"00431021", -- 000013D8
+ X"AC400000", -- 000013DC
+ X"8FC20028", -- 000013E0
+ X"00000000", -- 000013E4
+ X"24420001", -- 000013E8
+ X"AFC20028", -- 000013EC
+ X"8FC20028", -- 000013F0
+ X"3C030004", -- 000013F4
+ X"0043102A", -- 000013F8
+ X"1440FFF1", -- 000013FC
+ X"00000000", -- 00001400
+ X"3C02BFC0", -- 00001404
+ X"24441638", -- 00001408
+ X"0FF0017E", -- 0000140C
+ X"00000000", -- 00001410
+ X"27C20030", -- 00001414
+ X"00402021", -- 00001418
+ X"0FF00328", -- 0000141C
+ X"00000000", -- 00001420
+ X"AFC2002C", -- 00001424
+ X"27C20130", -- 00001428
+ X"27C30030", -- 0000142C
+ X"00402021", -- 00001430
+ X"00602821", -- 00001434
+ X"8FC6002C", -- 00001438
+ X"0FF00234", -- 0000143C
+ X"00000000", -- 00001440
+ X"AFC2002C", -- 00001444
+ X"8FC20020", -- 00001448
+ X"00000000", -- 0000144C
+ X"AC400000", -- 00001450
+ X"8FC2002C", -- 00001454
+ X"00000000", -- 00001458
+ X"AFC20148", -- 0000145C
+ X"24020002", -- 00001460
+ X"8FC30148", -- 00001464
+ X"00000000", -- 00001468
+ X"10620008", -- 0000146C
+ X"00000000", -- 00001470
+ X"24020004", -- 00001474
+ X"8FC30148", -- 00001478
+ X"00000000", -- 0000147C
+ X"1062002F", -- 00001480
+ X"00000000", -- 00001484
+ X"0BF0056B", -- 00001488
+ X"00000000", -- 0000148C
+ X"8FC30130", -- 00001490
+ X"8FC20134", -- 00001494
+ X"00000000", -- 00001498
+ X"00621821", -- 0000149C
+ X"8FC20024", -- 000014A0
+ X"00000000", -- 000014A4
+ X"0043102B", -- 000014A8
+ X"10400006", -- 000014AC
+ X"00000000", -- 000014B0
+ X"8FC20130", -- 000014B4
+ X"8FC30134", -- 000014B8
+ X"00000000", -- 000014BC
+ X"00431021", -- 000014C0
+ X"AFC20024", -- 000014C4
+ X"8FC20130", -- 000014C8
+ X"00000000", -- 000014CC
+ X"AFC2001C", -- 000014D0
+ X"AFC00028", -- 000014D4
+ X"0BF00548", -- 000014D8
+ X"00000000", -- 000014DC
+ X"8FC3013C", -- 000014E0
+ X"8FC20028", -- 000014E4
+ X"00000000", -- 000014E8
+ X"00621021", -- 000014EC
+ X"90430000", -- 000014F0
+ X"8FC2001C", -- 000014F4
+ X"00000000", -- 000014F8
+ X"A0430000", -- 000014FC
+ X"8FC2001C", -- 00001500
+ X"00000000", -- 00001504
+ X"24420001", -- 00001508
+ X"AFC2001C", -- 0000150C
+ X"8FC20028", -- 00001510
+ X"00000000", -- 00001514
+ X"24420001", -- 00001518
+ X"AFC20028", -- 0000151C
+ X"8FC20028", -- 00001520
+ X"8FC30134", -- 00001524
+ X"00000000", -- 00001528
+ X"0043102B", -- 0000152C
+ X"1440FFEB", -- 00001530
+ X"00000000", -- 00001534
+ X"0BF0056B", -- 00001538
+ X"00000000", -- 0000153C
+ X"8FC30020", -- 00001540
+ X"24020001", -- 00001544
+ X"AC620000", -- 00001548
+ X"8FC20130", -- 0000154C
+ X"00000000", -- 00001550
+ X"00402021", -- 00001554
+ X"0FF001D8", -- 00001558
+ X"00000000", -- 0000155C
+ X"3C02BFC0", -- 00001560
+ X"24441718", -- 00001564
+ X"0FF0017E", -- 00001568
+ X"00000000", -- 0000156C
+ X"8FC20024", -- 00001570
+ X"00000000", -- 00001574
+ X"2442FFFC", -- 00001578
+ X"00402021", -- 0000157C
+ X"0FF001D8", -- 00001580
+ X"00000000", -- 00001584
+ X"3C02BFC0", -- 00001588
+ X"24441720", -- 0000158C
+ X"0FF0017E", -- 00001590
+ X"00000000", -- 00001594
+ X"8FC20130", -- 00001598
+ X"00000000", -- 0000159C
+ X"00402021", -- 000015A0
+ X"0FF00358", -- 000015A4
+ X"00000000", -- 000015A8
+ X"8FC2002C", -- 000015AC
+ X"00000000", -- 000015B0
+ X"1440FF97", -- 000015B4
+ X"00000000", -- 000015B8
+ X"8FC30020", -- 000015BC
+ X"3C024000", -- 000015C0
+ X"AC620000", -- 000015C4
+ X"0BF00501", -- 000015C8
+ X"00000000", -- 000015CC
+ X"61766E69", -- 000015D0
+ X"0064696C", -- 000015D4
+ X"30303252", -- 000015D8
+ X"00000030", -- 000015DC
+ X"30303352", -- 000015E0
+ X"00000030", -- 000015E4
+ X"30303652", -- 000015E8
+ X"00000030", -- 000015EC
+ X"30303452", -- 000015F0
+ X"00000030", -- 000015F4
+ X"65736572", -- 000015F8
+ X"64657672", -- 000015FC
+ X"00000000", -- 00001600
+ X"30303652", -- 00001604
+ X"00004130", -- 00001608
+ X"74617453", -- 0000160C
+ X"20207375", -- 00001610
+ X"0000203A", -- 00001614
+ X"0000000A", -- 00001618
+ X"20555043", -- 0000161C
+ X"65707974", -- 00001620
+ X"0000203A", -- 00001624
+ X"76655220", -- 00001628
+ X"0000002E", -- 0000162C
+ X"6E6B6E55", -- 00001630
+ X"006E776F", -- 00001634
+ X"544F4F42", -- 00001638
+ X"00000020", -- 0000163C
+ X"41524453", -- 00001640
+ X"654D204D", -- 00001644
+ X"79726F6D", -- 00001648
+ X"73655420", -- 0000164C
+ X"000A0D74", -- 00001650
+ X"74697257", -- 00001654
+ X"38282065", -- 00001658
+ X"7469422D", -- 0000165C
+ X"63636120", -- 00001660
+ X"29737365", -- 00001664
+ X"002E2E2E", -- 00001668
+ X"656E6F64", -- 0000166C
+ X"00000A0D", -- 00001670
+ X"69726556", -- 00001674
+ X"28207966", -- 00001678
+ X"69422D38", -- 0000167C
+ X"63612074", -- 00001680
+ X"73736563", -- 00001684
+ X"2E2E2E29", -- 00001688
+ X"00000000", -- 0000168C
+ X"6C696166", -- 00001690
+ X"0A0D6465", -- 00001694
+ X"00000000", -- 00001698
+ X"73736170", -- 0000169C
+ X"0A0D6465", -- 000016A0
+ X"00000000", -- 000016A4
+ X"74697257", -- 000016A8
+ X"31282065", -- 000016AC
+ X"69422D36", -- 000016B0
+ X"63612074", -- 000016B4
+ X"73736563", -- 000016B8
+ X"2E2E2E29", -- 000016BC
+ X"00000000", -- 000016C0
+ X"69726556", -- 000016C4
+ X"28207966", -- 000016C8
+ X"422D3631", -- 000016CC
+ X"61207469", -- 000016D0
+ X"73656363", -- 000016D4
+ X"2E2E2973", -- 000016D8
+ X"0000002E", -- 000016DC
+ X"74697257", -- 000016E0
+ X"33282065", -- 000016E4
+ X"69422D32", -- 000016E8
+ X"63612074", -- 000016EC
+ X"73736563", -- 000016F0
+ X"2E2E2E29", -- 000016F4
+ X"00000000", -- 000016F8
+ X"69726556", -- 000016FC
+ X"28207966", -- 00001700
+ X"422D3233", -- 00001704
+ X"61207469", -- 00001708
+ X"73656363", -- 0000170C
+ X"2E2E2973", -- 00001710
+ X"0000002E", -- 00001714
+ X"206F7420", -- 00001718
+ X"00000000", -- 0000171C
+ X"00000A0D", -- 00001720
+ X"00000000", -- 00001724
+ X"00000000", -- 00001728
+ X"00000000", -- 0000172C
+ X"00000000", -- 00001730
+ X"00000000", -- 00001734
+ X"00000000", -- 00001738
+ X"00000000", -- 0000173C
+ X"00000000", -- 00001740
+ X"00000000", -- 00001744
+ X"00000000", -- 00001748
+ X"00000000", -- 0000174C
+ X"00000000", -- 00001750
+ X"00000000", -- 00001754
+ X"00000000", -- 00001758
+ X"00000000", -- 0000175C
+ X"00000000", -- 00001760
+ X"00000000", -- 00001764
+ X"00000000", -- 00001768
+ X"00000000", -- 0000176C
+ X"00000000", -- 00001770
+ X"00000000", -- 00001774
+ X"00000000", -- 00001778
+ X"00000000", -- 0000177C
+ X"00000000", -- 00001780
+ X"00000000", -- 00001784
+ X"00000000", -- 00001788
+ X"00000000", -- 0000178C
+ X"00000000", -- 00001790
+ X"00000000", -- 00001794
+ X"00000000", -- 00001798
+ X"00000000", -- 0000179C
+ X"00000000", -- 000017A0
+ X"00000000", -- 000017A4
+ X"00000000", -- 000017A8
+ X"00000000", -- 000017AC
+ X"00000000", -- 000017B0
+ X"00000000", -- 000017B4
+ X"00000000", -- 000017B8
+ X"00000000", -- 000017BC
+ X"00000000", -- 000017C0
+ X"00000000", -- 000017C4
+ X"00000000", -- 000017C8
+ X"00000000", -- 000017CC
+ X"00000000", -- 000017D0
+ X"00000000", -- 000017D4
+ X"00000000", -- 000017D8
+ X"00000000", -- 000017DC
+ X"00000000", -- 000017E0
+ X"00000000", -- 000017E4
+ X"00000000", -- 000017E8
+ X"00000000", -- 000017EC
+ X"00000000", -- 000017F0
+ X"00000000", -- 000017F4
+ X"00000000", -- 000017F8
+ X"00000000", -- 000017FC
+ X"00000000", -- 00001800
+ X"00000000", -- 00001804
+ X"00000000", -- 00001808
+ X"00000000", -- 0000180C
+ X"00000000", -- 00001810
+ X"00000000", -- 00001814
+ X"00000000", -- 00001818
+ X"00000000", -- 0000181C
+ X"00000000", -- 00001820
+ X"00000000", -- 00001824
+ X"00000000", -- 00001828
+ X"00000000", -- 0000182C
+ X"00000000", -- 00001830
+ X"00000000", -- 00001834
+ X"00000000", -- 00001838
+ X"00000000", -- 0000183C
+ X"00000000", -- 00001840
+ X"00000000", -- 00001844
+ X"00000000", -- 00001848
+ X"00000000", -- 0000184C
+ X"00000000", -- 00001850
+ X"00000000", -- 00001854
+ X"00000000", -- 00001858
+ X"00000000", -- 0000185C
+ X"00000000", -- 00001860
+ X"00000000", -- 00001864
+ X"00000000", -- 00001868
+ X"00000000", -- 0000186C
+ X"00000000", -- 00001870
+ X"00000000", -- 00001874
+ X"00000000", -- 00001878
+ X"00000000", -- 0000187C
+ X"00000000", -- 00001880
+ X"00000000", -- 00001884
+ X"00000000", -- 00001888
+ X"00000000", -- 0000188C
+ X"00000000", -- 00001890
+ X"00000000", -- 00001894
+ X"00000000", -- 00001898
+ X"00000000", -- 0000189C
+ X"00000000", -- 000018A0
+ X"00000000", -- 000018A4
+ X"00000000", -- 000018A8
+ X"00000000", -- 000018AC
+ X"00000000", -- 000018B0
+ X"00000000", -- 000018B4
+ X"00000000", -- 000018B8
+ X"00000000", -- 000018BC
+ X"00000000", -- 000018C0
+ X"00000000", -- 000018C4
+ X"00000000", -- 000018C8
+ X"00000000", -- 000018CC
+ X"00000000", -- 000018D0
+ X"00000000", -- 000018D4
+ X"00000000", -- 000018D8
+ X"00000000", -- 000018DC
+ X"00000000", -- 000018E0
+ X"00000000", -- 000018E4
+ X"00000000", -- 000018E8
+ X"00000000", -- 000018EC
+ X"00000000", -- 000018F0
+ X"00000000", -- 000018F4
+ X"00000000", -- 000018F8
+ X"00000000", -- 000018FC
+ X"00000000", -- 00001900
+ X"00000000", -- 00001904
+ X"00000000", -- 00001908
+ X"00000000", -- 0000190C
+ X"00000000", -- 00001910
+ X"00000000", -- 00001914
+ X"00000000", -- 00001918
+ X"00000000", -- 0000191C
+ X"00000000", -- 00001920
+ X"00000000", -- 00001924
+ X"00000000", -- 00001928
+ X"00000000", -- 0000192C
+ X"00000000", -- 00001930
+ X"00000000", -- 00001934
+ X"00000000", -- 00001938
+ X"00000000", -- 0000193C
+ X"00000000", -- 00001940
+ X"00000000", -- 00001944
+ X"00000000", -- 00001948
+ X"00000000", -- 0000194C
+ X"00000000", -- 00001950
+ X"00000000", -- 00001954
+ X"00000000", -- 00001958
+ X"00000000", -- 0000195C
+ X"00000000", -- 00001960
+ X"00000000", -- 00001964
+ X"00000000", -- 00001968
+ X"00000000", -- 0000196C
+ X"00000000", -- 00001970
+ X"00000000", -- 00001974
+ X"00000000", -- 00001978
+ X"00000000", -- 0000197C
+ X"00000000", -- 00001980
+ X"00000000", -- 00001984
+ X"00000000", -- 00001988
+ X"00000000", -- 0000198C
+ X"00000000", -- 00001990
+ X"00000000", -- 00001994
+ X"00000000", -- 00001998
+ X"00000000", -- 0000199C
+ X"00000000", -- 000019A0
+ X"00000000", -- 000019A4
+ X"00000000", -- 000019A8
+ X"00000000", -- 000019AC
+ X"00000000", -- 000019B0
+ X"00000000", -- 000019B4
+ X"00000000", -- 000019B8
+ X"00000000", -- 000019BC
+ X"00000000", -- 000019C0
+ X"00000000", -- 000019C4
+ X"00000000", -- 000019C8
+ X"00000000", -- 000019CC
+ X"00000000", -- 000019D0
+ X"00000000", -- 000019D4
+ X"00000000", -- 000019D8
+ X"00000000", -- 000019DC
+ X"00000000", -- 000019E0
+ X"00000000", -- 000019E4
+ X"00000000", -- 000019E8
+ X"00000000", -- 000019EC
+ X"00000000", -- 000019F0
+ X"00000000", -- 000019F4
+ X"00000000", -- 000019F8
+ X"00000000", -- 000019FC
+ X"00000000", -- 00001A00
+ X"00000000", -- 00001A04
+ X"00000000", -- 00001A08
+ X"00000000", -- 00001A0C
+ X"00000000", -- 00001A10
+ X"00000000", -- 00001A14
+ X"00000000", -- 00001A18
+ X"00000000", -- 00001A1C
+ X"00000000", -- 00001A20
+ X"00000000", -- 00001A24
+ X"00000000", -- 00001A28
+ X"00000000", -- 00001A2C
+ X"00000000", -- 00001A30
+ X"00000000", -- 00001A34
+ X"00000000", -- 00001A38
+ X"00000000", -- 00001A3C
+ X"00000000", -- 00001A40
+ X"00000000", -- 00001A44
+ X"00000000", -- 00001A48
+ X"00000000", -- 00001A4C
+ X"00000000", -- 00001A50
+ X"00000000", -- 00001A54
+ X"00000000", -- 00001A58
+ X"00000000", -- 00001A5C
+ X"00000000", -- 00001A60
+ X"00000000", -- 00001A64
+ X"00000000", -- 00001A68
+ X"00000000", -- 00001A6C
+ X"00000000", -- 00001A70
+ X"00000000", -- 00001A74
+ X"00000000", -- 00001A78
+ X"00000000", -- 00001A7C
+ X"00000000", -- 00001A80
+ X"00000000", -- 00001A84
+ X"00000000", -- 00001A88
+ X"00000000", -- 00001A8C
+ X"00000000", -- 00001A90
+ X"00000000", -- 00001A94
+ X"00000000", -- 00001A98
+ X"00000000", -- 00001A9C
+ X"00000000", -- 00001AA0
+ X"00000000", -- 00001AA4
+ X"00000000", -- 00001AA8
+ X"00000000", -- 00001AAC
+ X"00000000", -- 00001AB0
+ X"00000000", -- 00001AB4
+ X"00000000", -- 00001AB8
+ X"00000000", -- 00001ABC
+ X"00000000", -- 00001AC0
+ X"00000000", -- 00001AC4
+ X"00000000", -- 00001AC8
+ X"00000000", -- 00001ACC
+ X"00000000", -- 00001AD0
+ X"00000000", -- 00001AD4
+ X"00000000", -- 00001AD8
+ X"00000000", -- 00001ADC
+ X"00000000", -- 00001AE0
+ X"00000000", -- 00001AE4
+ X"00000000", -- 00001AE8
+ X"00000000", -- 00001AEC
+ X"00000000", -- 00001AF0
+ X"00000000", -- 00001AF4
+ X"00000000", -- 00001AF8
+ X"00000000", -- 00001AFC
+ X"00000000", -- 00001B00
+ X"00000000", -- 00001B04
+ X"00000000", -- 00001B08
+ X"00000000", -- 00001B0C
+ X"00000000", -- 00001B10
+ X"00000000", -- 00001B14
+ X"00000000", -- 00001B18
+ X"00000000", -- 00001B1C
+ X"00000000", -- 00001B20
+ X"00000000", -- 00001B24
+ X"00000000", -- 00001B28
+ X"00000000", -- 00001B2C
+ X"00000000", -- 00001B30
+ X"00000000", -- 00001B34
+ X"00000000", -- 00001B38
+ X"00000000", -- 00001B3C
+ X"00000000", -- 00001B40
+ X"00000000", -- 00001B44
+ X"00000000", -- 00001B48
+ X"00000000", -- 00001B4C
+ X"00000000", -- 00001B50
+ X"00000000", -- 00001B54
+ X"00000000", -- 00001B58
+ X"00000000", -- 00001B5C
+ X"00000000", -- 00001B60
+ X"00000000", -- 00001B64
+ X"00000000", -- 00001B68
+ X"00000000", -- 00001B6C
+ X"00000000", -- 00001B70
+ X"00000000", -- 00001B74
+ X"00000000", -- 00001B78
+ X"00000000", -- 00001B7C
+ X"00000000", -- 00001B80
+ X"00000000", -- 00001B84
+ X"00000000", -- 00001B88
+ X"00000000", -- 00001B8C
+ X"00000000", -- 00001B90
+ X"00000000", -- 00001B94
+ X"00000000", -- 00001B98
+ X"00000000", -- 00001B9C
+ X"00000000", -- 00001BA0
+ X"00000000", -- 00001BA4
+ X"00000000", -- 00001BA8
+ X"00000000", -- 00001BAC
+ X"00000000", -- 00001BB0
+ X"00000000", -- 00001BB4
+ X"00000000", -- 00001BB8
+ X"00000000", -- 00001BBC
+ X"00000000", -- 00001BC0
+ X"00000000", -- 00001BC4
+ X"00000000", -- 00001BC8
+ X"00000000", -- 00001BCC
+ X"00000000", -- 00001BD0
+ X"00000000", -- 00001BD4
+ X"00000000", -- 00001BD8
+ X"00000000", -- 00001BDC
+ X"00000000", -- 00001BE0
+ X"00000000", -- 00001BE4
+ X"00000000", -- 00001BE8
+ X"00000000", -- 00001BEC
+ X"00000000", -- 00001BF0
+ X"00000000", -- 00001BF4
+ X"00000000", -- 00001BF8
+ X"00000000", -- 00001BFC
+ X"00000000", -- 00001C00
+ X"00000000", -- 00001C04
+ X"00000000", -- 00001C08
+ X"00000000", -- 00001C0C
+ X"00000000", -- 00001C10
+ X"00000000", -- 00001C14
+ X"00000000", -- 00001C18
+ X"00000000", -- 00001C1C
+ X"00000000", -- 00001C20
+ X"00000000", -- 00001C24
+ X"00000000", -- 00001C28
+ X"00000000", -- 00001C2C
+ X"00000000", -- 00001C30
+ X"00000000", -- 00001C34
+ X"00000000", -- 00001C38
+ X"00000000", -- 00001C3C
+ X"00000000", -- 00001C40
+ X"00000000", -- 00001C44
+ X"00000000", -- 00001C48
+ X"00000000", -- 00001C4C
+ X"00000000", -- 00001C50
+ X"00000000", -- 00001C54
+ X"00000000", -- 00001C58
+ X"00000000", -- 00001C5C
+ X"00000000", -- 00001C60
+ X"00000000", -- 00001C64
+ X"00000000", -- 00001C68
+ X"00000000", -- 00001C6C
+ X"00000000", -- 00001C70
+ X"00000000", -- 00001C74
+ X"00000000", -- 00001C78
+ X"00000000", -- 00001C7C
+ X"00000000", -- 00001C80
+ X"00000000", -- 00001C84
+ X"00000000", -- 00001C88
+ X"00000000", -- 00001C8C
+ X"00000000", -- 00001C90
+ X"00000000", -- 00001C94
+ X"00000000", -- 00001C98
+ X"00000000", -- 00001C9C
+ X"00000000", -- 00001CA0
+ X"00000000", -- 00001CA4
+ X"00000000", -- 00001CA8
+ X"00000000", -- 00001CAC
+ X"00000000", -- 00001CB0
+ X"00000000", -- 00001CB4
+ X"00000000", -- 00001CB8
+ X"00000000", -- 00001CBC
+ X"00000000", -- 00001CC0
+ X"00000000", -- 00001CC4
+ X"00000000", -- 00001CC8
+ X"00000000", -- 00001CCC
+ X"00000000", -- 00001CD0
+ X"00000000", -- 00001CD4
+ X"00000000", -- 00001CD8
+ X"00000000", -- 00001CDC
+ X"00000000", -- 00001CE0
+ X"00000000", -- 00001CE4
+ X"00000000", -- 00001CE8
+ X"00000000", -- 00001CEC
+ X"00000000", -- 00001CF0
+ X"00000000", -- 00001CF4
+ X"00000000", -- 00001CF8
+ X"00000000", -- 00001CFC
+ X"00000000", -- 00001D00
+ X"00000000", -- 00001D04
+ X"00000000", -- 00001D08
+ X"00000000", -- 00001D0C
+ X"00000000", -- 00001D10
+ X"00000000", -- 00001D14
+ X"00000000", -- 00001D18
+ X"00000000", -- 00001D1C
+ X"00000000", -- 00001D20
+ X"00000000", -- 00001D24
+ X"00000000", -- 00001D28
+ X"00000000", -- 00001D2C
+ X"00000000", -- 00001D30
+ X"00000000", -- 00001D34
+ X"00000000", -- 00001D38
+ X"00000000", -- 00001D3C
+ X"00000000", -- 00001D40
+ X"00000000", -- 00001D44
+ X"00000000", -- 00001D48
+ X"00000000", -- 00001D4C
+ X"00000000", -- 00001D50
+ X"00000000", -- 00001D54
+ X"00000000", -- 00001D58
+ X"00000000", -- 00001D5C
+ X"00000000", -- 00001D60
+ X"00000000", -- 00001D64
+ X"00000000", -- 00001D68
+ X"00000000", -- 00001D6C
+ X"00000000", -- 00001D70
+ X"00000000", -- 00001D74
+ X"00000000", -- 00001D78
+ X"00000000", -- 00001D7C
+ X"00000000", -- 00001D80
+ X"00000000", -- 00001D84
+ X"00000000", -- 00001D88
+ X"00000000", -- 00001D8C
+ X"00000000", -- 00001D90
+ X"00000000", -- 00001D94
+ X"00000000", -- 00001D98
+ X"00000000", -- 00001D9C
+ X"00000000", -- 00001DA0
+ X"00000000", -- 00001DA4
+ X"00000000", -- 00001DA8
+ X"00000000", -- 00001DAC
+ X"00000000", -- 00001DB0
+ X"00000000", -- 00001DB4
+ X"00000000", -- 00001DB8
+ X"00000000", -- 00001DBC
+ X"00000000", -- 00001DC0
+ X"00000000", -- 00001DC4
+ X"00000000", -- 00001DC8
+ X"00000000", -- 00001DCC
+ X"00000000", -- 00001DD0
+ X"00000000", -- 00001DD4
+ X"00000000", -- 00001DD8
+ X"00000000", -- 00001DDC
+ X"00000000", -- 00001DE0
+ X"00000000", -- 00001DE4
+ X"00000000", -- 00001DE8
+ X"00000000", -- 00001DEC
+ X"00000000", -- 00001DF0
+ X"00000000", -- 00001DF4
+ X"00000000", -- 00001DF8
+ X"00000000", -- 00001DFC
+ X"00000000", -- 00001E00
+ X"00000000", -- 00001E04
+ X"00000000", -- 00001E08
+ X"00000000", -- 00001E0C
+ X"00000000", -- 00001E10
+ X"00000000", -- 00001E14
+ X"00000000", -- 00001E18
+ X"00000000", -- 00001E1C
+ X"00000000", -- 00001E20
+ X"00000000", -- 00001E24
+ X"00000000", -- 00001E28
+ X"00000000", -- 00001E2C
+ X"00000000", -- 00001E30
+ X"00000000", -- 00001E34
+ X"00000000", -- 00001E38
+ X"00000000", -- 00001E3C
+ X"00000000", -- 00001E40
+ X"00000000", -- 00001E44
+ X"00000000", -- 00001E48
+ X"00000000", -- 00001E4C
+ X"00000000", -- 00001E50
+ X"00000000", -- 00001E54
+ X"00000000", -- 00001E58
+ X"00000000", -- 00001E5C
+ X"00000000", -- 00001E60
+ X"00000000", -- 00001E64
+ X"00000000", -- 00001E68
+ X"00000000", -- 00001E6C
+ X"00000000", -- 00001E70
+ X"00000000", -- 00001E74
+ X"00000000", -- 00001E78
+ X"00000000", -- 00001E7C
+ X"00000000", -- 00001E80
+ X"00000000", -- 00001E84
+ X"00000000", -- 00001E88
+ X"00000000", -- 00001E8C
+ X"00000000", -- 00001E90
+ X"00000000", -- 00001E94
+ X"00000000", -- 00001E98
+ X"00000000", -- 00001E9C
+ X"00000000", -- 00001EA0
+ X"00000000", -- 00001EA4
+ X"00000000", -- 00001EA8
+ X"00000000", -- 00001EAC
+ X"00000000", -- 00001EB0
+ X"00000000", -- 00001EB4
+ X"00000000", -- 00001EB8
+ X"00000000", -- 00001EBC
+ X"00000000", -- 00001EC0
+ X"00000000", -- 00001EC4
+ X"00000000", -- 00001EC8
+ X"00000000", -- 00001ECC
+ X"00000000", -- 00001ED0
+ X"00000000", -- 00001ED4
+ X"00000000", -- 00001ED8
+ X"00000000", -- 00001EDC
+ X"00000000", -- 00001EE0
+ X"00000000", -- 00001EE4
+ X"00000000", -- 00001EE8
+ X"00000000", -- 00001EEC
+ X"00000000", -- 00001EF0
+ X"00000000", -- 00001EF4
+ X"00000000", -- 00001EF8
+ X"00000000", -- 00001EFC
+ X"00000000", -- 00001F00
+ X"00000000", -- 00001F04
+ X"00000000", -- 00001F08
+ X"00000000", -- 00001F0C
+ X"00000000", -- 00001F10
+ X"00000000", -- 00001F14
+ X"00000000", -- 00001F18
+ X"00000000", -- 00001F1C
+ X"00000000", -- 00001F20
+ X"00000000", -- 00001F24
+ X"00000000", -- 00001F28
+ X"00000000", -- 00001F2C
+ X"00000000", -- 00001F30
+ X"00000000", -- 00001F34
+ X"00000000", -- 00001F38
+ X"00000000", -- 00001F3C
+ X"00000000", -- 00001F40
+ X"00000000", -- 00001F44
+ X"00000000", -- 00001F48
+ X"00000000", -- 00001F4C
+ X"00000000", -- 00001F50
+ X"00000000", -- 00001F54
+ X"00000000", -- 00001F58
+ X"00000000", -- 00001F5C
+ X"00000000", -- 00001F60
+ X"00000000", -- 00001F64
+ X"00000000", -- 00001F68
+ X"00000000", -- 00001F6C
+ X"00000000", -- 00001F70
+ X"00000000", -- 00001F74
+ X"00000000", -- 00001F78
+ X"00000000", -- 00001F7C
+ X"00000000", -- 00001F80
+ X"00000000", -- 00001F84
+ X"00000000", -- 00001F88
+ X"00000000", -- 00001F8C
+ X"00000000", -- 00001F90
+ X"00000000", -- 00001F94
+ X"00000000", -- 00001F98
+ X"00000000", -- 00001F9C
+ X"00000000", -- 00001FA0
+ X"00000000", -- 00001FA4
+ X"00000000", -- 00001FA8
+ X"00000000", -- 00001FAC
+ X"00000000", -- 00001FB0
+ X"00000000", -- 00001FB4
+ X"00000000", -- 00001FB8
+ X"00000000", -- 00001FBC
+ X"00000000", -- 00001FC0
+ X"00000000", -- 00001FC4
+ X"00000000", -- 00001FC8
+ X"00000000", -- 00001FCC
+ X"00000000", -- 00001FD0
+ X"00000000", -- 00001FD4
+ X"00000000", -- 00001FD8
+ X"00000000", -- 00001FDC
+ X"00000000", -- 00001FE0
+ X"00000000", -- 00001FE4
+ X"00000000", -- 00001FE8
+ X"00000000", -- 00001FEC
+ X"00000000", -- 00001FF0
+ X"00000000", -- 00001FF4
+ X"00000000", -- 00001FF8
+ X"00000000" -- 00001FFC
+ );
+
+begin
+
+PROM_READ:
+ process(clk)
+ begin
+ if rising_edge(clk) and ce = '1' then
+ dout <= word_array(to_integer(addr(12 downto 2)));
+ end if;
+ end process;
+
+end data;
diff --git a/lib/misc/rom_wb.vhd b/lib/misc/rom_wb.vhd
new file mode 100644
index 0000000..9fa3715
--- /dev/null
+++ b/lib/misc/rom_wb.vhd
@@ -0,0 +1,61 @@
+LIBRARY IEEE;
+USE IEEE.STD_LOGIC_1164.ALL;
+USE IEEE.NUMERIC_STD.ALL;
+
+ENTITY rom_wb IS
+ Port
+ (
+ CLK_I : in STD_LOGIC;
+ RST_I : in STD_LOGIC;
+ CYC_I : in STD_LOGIC;
+ STB_I : in STD_LOGIC;
+ ACK_O : out STD_LOGIC;
+ MRDY_I : in STD_LOGIC;
+ SRDY_O : out STD_LOGIC;
+ ADDR_I : in unsigned(31 downto 0);
+ DAT_O : out unsigned(31 downto 0)
+ );
+END rom_wb;
+
+ARCHITECTURE behavior OF rom_wb IS
+
+ COMPONENT rom
+ PORT
+ (
+ clk : in STD_LOGIC;
+ ce : in STD_LOGIC;
+ addr : in unsigned(31 downto 0);
+ dout : out unsigned(31 downto 0)
+ );
+ END COMPONENT;
+
+ signal data_en : std_logic;
+
+begin
+
+ data_en <= CYC_I and STB_I and MRDY_I;
+ SRDY_O <= CYC_I;
+
+data_valid_register:
+ process(CLK_I)
+ begin
+ if rising_edge(CLK_I) then
+ if RST_I = '1' then
+ ACK_O <= '0';
+ else
+ ACK_O <= data_en; -- and not WE_I;
+ end if;
+ end if;
+ end process;
+
+inst_rom : rom
+ PORT MAP
+ (
+ clk => CLK_I,
+ ce => data_en,
+ addr => ADDR_I,
+ dout => DAT_O
+ );
+
+
+end behavior;
diff --git a/lib/misc/sim/ModelSim SE .lnk b/lib/misc/sim/ModelSim SE .lnk
new file mode 100644
index 0000000..2b9e5b5
Binary files /dev/null and b/lib/misc/sim/ModelSim SE .lnk differ
diff --git a/lib/misc/sim/tb_bbfifo.fdo b/lib/misc/sim/tb_bbfifo.fdo
new file mode 100644
index 0000000..5a23c76
--- /dev/null
+++ b/lib/misc/sim/tb_bbfifo.fdo
@@ -0,0 +1,14 @@
+## NOTE: Do not edit this file.
+##
+
+vlib work
+vcom -explicit -93 "../bbfifo.vhd"
+vcom -explicit -93 "../tb_bbfifo.vhd"
+
+#restart -force
+vsim -t 1ps -lib work tb_bbfifo
+do {tb_bbfifo.wdo}
+view wave
+view structure
+view signals
+run 1us
diff --git a/lib/misc/sim/tb_bbfifo.wdo b/lib/misc/sim/tb_bbfifo.wdo
new file mode 100644
index 0000000..06b107e
--- /dev/null
+++ b/lib/misc/sim/tb_bbfifo.wdo
@@ -0,0 +1,31 @@
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+add wave -noupdate -format Logic /tb_bbfifo/rst
+add wave -noupdate -format Logic /tb_bbfifo/clk
+add wave -noupdate -format Logic /tb_bbfifo/re
+add wave -noupdate -format Logic /tb_bbfifo/we
+add wave -noupdate -format Logic /tb_bbfifo/ready
+add wave -noupdate -format Logic /tb_bbfifo/avail
+add wave -noupdate -format Literal -radix hexadecimal /tb_bbfifo/din
+add wave -noupdate -format Literal -radix hexadecimal /tb_bbfifo/dout
+add wave -noupdate -format Literal /tb_bbfifo/inst_bbfifo/req
+add wave -noupdate -format Literal /tb_bbfifo/inst_bbfifo/rdy
+add wave -noupdate -format Literal -radix hexadecimal -expand /tb_bbfifo/inst_bbfifo/bucket_array
+add wave -noupdate -format Literal /tb_bbfifo/inst_bbfifo/ce_in
+add wave -noupdate -format Literal /tb_bbfifo/inst_bbfifo/ce_out
+TreeUpdate [SetDefaultTree]
+WaveRestoreCursors {{Cursor 1} {170000 ps} 0}
+configure wave -namecolwidth 150
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 1
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+update
+WaveRestoreZoom {76738 ps} {299465 ps}
diff --git a/lib/misc/sim/tb_ram_wb.fdo b/lib/misc/sim/tb_ram_wb.fdo
new file mode 100644
index 0000000..1174591
--- /dev/null
+++ b/lib/misc/sim/tb_ram_wb.fdo
@@ -0,0 +1,16 @@
+## NOTE: Do not edit this file.
+##
+vlib work
+
+# Top and TB
+vcom -explicit -93 "../ram_sim.vhd"
+vcom -explicit -93 "../ram_wb.vhd"
+vcom -explicit -93 "../tb_ram_wb.vhd"
+
+vsim -t 1ps -lib work tb_ram_wb
+do {tb_ram_wb.wdo}
+view wave
+view structure
+view signals
+run 1.5us
+
\ No newline at end of file
diff --git a/lib/misc/sim/tb_ram_wb.wdo b/lib/misc/sim/tb_ram_wb.wdo
new file mode 100644
index 0000000..2cdca8e
--- /dev/null
+++ b/lib/misc/sim/tb_ram_wb.wdo
@@ -0,0 +1,32 @@
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+add wave -noupdate -format Logic /tb_ram_wb/clk_o
+add wave -noupdate -format Logic /tb_ram_wb/rst_o
+add wave -noupdate -format Logic /tb_ram_wb/cyc_o
+add wave -noupdate -format Logic /tb_ram_wb/stb_o
+add wave -noupdate -format Logic /tb_ram_wb/we_o
+add wave -noupdate -format Literal /tb_ram_wb/sel_o
+add wave -noupdate -format Logic /tb_ram_wb/ack_i
+add wave -noupdate -format Logic /tb_ram_wb/mrdy_o
+add wave -noupdate -format Logic /tb_ram_wb/srdy_i
+add wave -noupdate -format Literal -radix hexadecimal /tb_ram_wb/addr_o
+add wave -noupdate -format Literal -radix hexadecimal /tb_ram_wb/dat_i
+add wave -noupdate -format Literal -radix hexadecimal /tb_ram_wb/dat_o
+add wave -noupdate -format Literal -radix hexadecimal /tb_ram_wb/dout_reg
+add wave -noupdate -format Literal /tb_ram_wb/dout_cnt
+TreeUpdate [SetDefaultTree]
+WaveRestoreCursors {{Cursor 1} {950000 ps} 0}
+configure wave -namecolwidth 150
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 1
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+update
+WaveRestoreZoom {0 ps} {1575 ns}
diff --git a/lib/misc/sim/tb_rom_wb.fdo b/lib/misc/sim/tb_rom_wb.fdo
new file mode 100644
index 0000000..e8732f0
--- /dev/null
+++ b/lib/misc/sim/tb_rom_wb.fdo
@@ -0,0 +1,16 @@
+## NOTE: Do not edit this file.
+##
+vlib work
+
+# Top and TB
+vcom -explicit -93 "../rom_sim.vhd"
+vcom -explicit -93 "../rom_wb.vhd"
+vcom -explicit -93 "../tb_rom_wb.vhd"
+
+vsim -t 1ps -lib work tb_rom_wb
+do {tb_rom_wb.wdo}
+view wave
+view structure
+view signals
+run 1us
+
\ No newline at end of file
diff --git a/lib/misc/sim/tb_rom_wb.wdo b/lib/misc/sim/tb_rom_wb.wdo
new file mode 100644
index 0000000..b8663ed
--- /dev/null
+++ b/lib/misc/sim/tb_rom_wb.wdo
@@ -0,0 +1,29 @@
+onerror {resume}
+quietly WaveActivateNextPane {} 0
+add wave -noupdate -format Logic /tb_rom_wb/clk_o
+add wave -noupdate -format Logic /tb_rom_wb/rst_o
+add wave -noupdate -format Logic /tb_rom_wb/cyc_o
+add wave -noupdate -format Logic /tb_rom_wb/stb_o
+add wave -noupdate -format Logic /tb_rom_wb/ack_i
+add wave -noupdate -format Logic /tb_rom_wb/mrdy_o
+add wave -noupdate -format Logic /tb_rom_wb/srdy_i
+add wave -noupdate -format Literal -radix hexadecimal /tb_rom_wb/addr_o
+add wave -noupdate -format Literal -radix hexadecimal /tb_rom_wb/dat_i
+add wave -noupdate -format Literal -radix hexadecimal /tb_rom_wb/dout_reg
+add wave -noupdate -format Literal /tb_rom_wb/dout_cnt
+TreeUpdate [SetDefaultTree]
+WaveRestoreCursors {{Cursor 1} {796036 ps} 0}
+configure wave -namecolwidth 150
+configure wave -valuecolwidth 100
+configure wave -justifyvalue left
+configure wave -signalnamewidth 1
+configure wave -snapdistance 10
+configure wave -datasetprefix 0
+configure wave -rowmargin 4
+configure wave -childrowmargin 2
+configure wave -gridoffset 0
+configure wave -gridperiod 1
+configure wave -griddelta 40
+configure wave -timeline 0
+update
+WaveRestoreZoom {0 ps} {1050 ns}
diff --git a/lib/misc/tb_bbfifo.vhd b/lib/misc/tb_bbfifo.vhd
new file mode 100644
index 0000000..95fa7b9
--- /dev/null
+++ b/lib/misc/tb_bbfifo.vhd
@@ -0,0 +1,136 @@
+-------------------------------------------------------------------------
+-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL
+-- This file: cpu_embedded using cpu_core and rom
+--
+-- Copyright (C) 2007 J. Ahrensfeld
+--
+-- This program 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 program 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 .
+--
+-- For questions and ideas, please contact the author at jens@jayfield.org
+--
+--------------------------------------------------------------------------
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.numeric_std.ALL;
+
+entity tb_bbfifo is
+end;
+
+architecture behave of tb_bbfifo is
+
+ -- Number of user data words for simulation
+ constant CLK_PERIOD : time := 10 ns;
+
+ signal rst : std_logic := '1';
+ signal clk : std_logic := '1';
+ signal re : std_logic := '0';
+ signal we : std_logic := '0';
+ signal ready : std_logic;
+ signal avail : std_logic;
+ signal din : unsigned(7 downto 0) := (others => '0');
+ signal dout : unsigned(7 downto 0);
+ signal dout_reg : unsigned(7 downto 0);
+
+
+begin
+
+inst_bbfifo : entity work.bbfifo
+ GENERIC MAP
+ (
+ depth => 4,
+ data_width => 8
+ )
+ PORT MAP
+ (
+ rst => rst,
+ clk => clk,
+ re => re,
+ we => we,
+ ready => ready,
+ avail => avail,
+ din => din,
+ dout => dout
+ );
+
+
+CLK_GEN: process
+ begin
+ wait for CLK_PERIOD/2;
+ clk <= not clk;
+ end process;
+
+RE_GEN: process
+ begin
+ wait for 2*CLK_PERIOD;
+ wait until rising_edge(clk) and avail = '1';
+ re <= '0';
+ dout_reg <= dout;
+ wait until rising_edge(clk);
+ re <= '0';
+ end process;
+
+------------------------------------------------------------------------------------------
+
+STIMULUS: process
+
+
+ begin
+
+ wait for 3*CLK_PERIOD;
+ rst <= '0';
+ din <= X"10";
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ wait until rising_edge(clk) and ready = '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ we <= '0';
+ wait until rising_edge(clk) and ready = '1';
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ we <= '0';
+ wait until rising_edge(clk) and ready = '1';
+ wait until rising_edge(clk) and ready = '1';
+ wait until rising_edge(clk) and ready = '1';
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+ we <= '1';
+ din <= din + 1;
+ wait until rising_edge(clk) and ready = '1';
+
+
+ wait;
+
+ end process;
+
+end architecture behave;
diff --git a/lib/misc/tb_ram_wb.vhd b/lib/misc/tb_ram_wb.vhd
new file mode 100644
index 0000000..b165069
--- /dev/null
+++ b/lib/misc/tb_ram_wb.vhd
@@ -0,0 +1,408 @@
+-------------------------------------------------------------------------
+-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL
+-- This file: testbench for system test using Xilinx ML-402
+
+-- Copyright (C) 2007 J. Ahrensfeld
+
+-- This library is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+
+-- This library 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
+-- Lesser General Public License for more details.
+
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this library; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-- For questions and ideas, please contact the author at jens@jayfield.org
+
+-----------------------------------------------------------------------
+
+LIBRARY ieee;
+use IEEE.STD_LOGIC_1164.ALL;
+USE ieee.numeric_std.ALL;
+use std.textio.all; -- Imports the standard textio package.
+
+ENTITY tb_ram_wb IS
+END tb_ram_wb;
+
+ARCHITECTURE behavior OF tb_ram_wb IS
+
+ constant CLK_PERIOD : time := 10 ns;
+ signal CLK_O : std_logic := '1';
+ signal RST_O : std_logic := '1';
+ signal CYC_O : std_logic := '0';
+ signal STB_O : std_logic := '0';
+ signal WE_O : std_logic := '0';
+ signal SEL_O : unsigned(3 downto 0) := (others => '1');
+ signal ACK_I : std_logic;
+ signal MRDY_O : std_logic := '1';
+ signal SRDY_I : std_logic;
+ signal ADDR_O : unsigned(31 downto 0) := (others => '-');
+ signal DAT_I : unsigned(31 downto 0);
+ signal DAT_O : unsigned(31 downto 0) := (others => '-');
+
+ signal dout_rst : std_logic := '0';
+ signal dout_reg : unsigned(31 downto 0);
+ signal dout_cnt : natural range 0 to 255;
+
+BEGIN
+
+inst_ram_wb : entity work.ram_wb
+ PORT MAP
+ (
+ RST_I => RST_O,
+ CLK_I => CLK_O,
+ CYC_I => CYC_O,
+ STB_I => STB_O,
+ SEL_I => SEL_O,
+ WE_I => WE_O,
+ ACK_O => ACK_I,
+ SRDY_O => SRDY_I,
+ MRDY_I => MRDY_O,
+ ADDR_I => ADDR_O,
+ DAT_I => DAT_O,
+ DAT_O => DAT_I
+ );
+
+read_register:
+ process(CLK_O)
+ begin
+ if rising_edge(CLK_O) then
+ if dout_rst = '1' then
+ dout_cnt <= 0;
+ elsif ACK_I = '1' and WE_O = '0' then
+ dout_reg <= DAT_I;
+ dout_cnt <= dout_cnt + 1;
+ end if;
+ end if;
+ end process;
+
+CLK_GEN: process
+ begin
+ wait for CLK_PERIOD/2;
+ CLK_O <= not CLK_O;
+ end process;
+
+STIMULUS: process
+
+ begin
+
+ wait for 3*CLK_PERIOD;
+ RST_O <= '0';
+
+ -- 8 single cycles
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ DAT_O <= X"1234_0000";
+ ADDR_O <= X"0000_0000";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ DAT_O <= DAT_O + 1;
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and ACK_I = '1';
+ CYC_O <= '0';
+
+
+ -- 8-word burst cycle
+ wait for 3*CLK_PERIOD;
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0000";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+
+ wait until rising_edge(CLK_O) and dout_cnt = 7;
+ CYC_O <= '0';
+
+ wait for 3*CLK_PERIOD;
+ wait until rising_edge(CLK_O);
+ -- 1-word burst cycle
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '1';
+ SEL_O <= "0011";
+ ADDR_O <= X"0000_0080";
+ DAT_O <= X"DEADBEEF";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and ACK_I = '1';
+ CYC_O <= '0';
+
+ wait for 3*CLK_PERIOD;
+ wait until rising_edge(CLK_O);
+ -- 1-word burst cycle
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0080";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+ wait until rising_edge(CLK_O) and ACK_I = '1';
+ CYC_O <= '0';
+
+ -- 8-word burst cycle
+ wait for 3*CLK_PERIOD;
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+ CYC_O <= '1';
+ STB_O <= '1';
+ WE_O <= '0';
+ ADDR_O <= X"0000_0000";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+ MRDY_O <= '0';
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '1';
+ MRDY_O <= '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+
+ wait until rising_edge(CLK_O) and dout_cnt = 54;
+ CYC_O <= '0';
+
+ wait;
+
+ end process;
+
+END;
diff --git a/lib/misc/tb_rom_wb.vhd b/lib/misc/tb_rom_wb.vhd
new file mode 100644
index 0000000..0e414f9
--- /dev/null
+++ b/lib/misc/tb_rom_wb.vhd
@@ -0,0 +1,223 @@
+-------------------------------------------------------------------------
+-- Project: JCPU, a portable 8-bit RISC CPU written in VHDL
+-- This file: testbench for system test using Xilinx ML-402
+
+-- Copyright (C) 2007 J. Ahrensfeld
+
+-- This library is free software; you can redistribute it and/or
+-- modify it under the terms of the GNU Lesser General Public
+-- License as published by the Free Software Foundation; either
+-- version 2.1 of the License, or (at your option) any later version.
+
+-- This library 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
+-- Lesser General Public License for more details.
+
+-- You should have received a copy of the GNU Lesser General Public
+-- License along with this library; if not, write to the Free Software
+-- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+-- For questions and ideas, please contact the author at jens@jayfield.org
+
+-----------------------------------------------------------------------
+
+LIBRARY ieee;
+use IEEE.STD_LOGIC_1164.ALL;
+USE ieee.numeric_std.ALL;
+use std.textio.all; -- Imports the standard textio package.
+
+ENTITY tb_rom_wb IS
+END tb_rom_wb;
+
+ARCHITECTURE behavior OF tb_rom_wb IS
+
+ constant CLK_PERIOD : time := 10 ns;
+ signal CLK_O : std_logic := '1';
+ signal RST_O : std_logic := '1';
+ signal CYC_O : std_logic := '0';
+ signal STB_O : std_logic := '0';
+ signal ACK_I : std_logic;
+ signal MRDY_O : std_logic := '1';
+ signal SRDY_I : std_logic;
+ signal ADDR_O : unsigned(31 downto 0) := (others => '-');
+ signal DAT_I : unsigned(31 downto 0);
+
+ signal dout_rst : std_logic := '0';
+ signal dout_reg : unsigned(31 downto 0);
+ signal dout_cnt : natural range 0 to 255;
+
+BEGIN
+
+inst_rom_wb : entity work.rom_wb
+ PORT MAP
+ (
+ RST_I => RST_O,
+ CLK_I => CLK_O,
+ CYC_I => CYC_O,
+ STB_I => STB_O,
+ ACK_O => ACK_I,
+ SRDY_O => SRDY_I,
+ MRDY_I => MRDY_O,
+ ADDR_I => ADDR_O,
+ DAT_O => DAT_I
+ );
+
+read_register:
+ process(CLK_O)
+ begin
+ if rising_edge(CLK_O) then
+ if dout_rst = '1' then
+ dout_cnt <= 0;
+ elsif ACK_I = '1' then
+ dout_reg <= DAT_I;
+ dout_cnt <= dout_cnt + 1;
+ end if;
+ end if;
+ end process;
+
+CLK_GEN: process
+ begin
+ wait for CLK_PERIOD/2;
+ CLK_O <= not CLK_O;
+ end process;
+
+STIMULUS: process
+
+ begin
+
+ wait for 3*CLK_PERIOD;
+ RST_O <= '0';
+
+ -- 8-word burst cycle
+ wait for 3*CLK_PERIOD;
+ dout_rst <= '1';
+ wait until rising_edge(CLK_O);
+ dout_rst <= '0';
+ CYC_O <= '1';
+ STB_O <= '1';
+ ADDR_O <= X"0000_0180";
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+ MRDY_O <= '0';
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '1';
+ MRDY_O <= '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ ADDR_O <= ADDR_O + 4;
+ wait until rising_edge(CLK_O) and SRDY_I = '1';
+ STB_O <= '0';
+
+ wait until rising_edge(CLK_O) and dout_cnt = 54;
+ CYC_O <= '0';
+
+ wait;
+
+ end process;
+
+END;