Add support for CellularRAM on Nexys2.
authorJoshua Wise <joshua@escape.joshuawise.com>
Fri, 12 Mar 2010 15:09:29 +0000 (10:09 -0500)
committerJoshua Wise <joshua@escape.joshuawise.com>
Fri, 12 Mar 2010 15:09:29 +0000 (10:09 -0500)
13 files changed:
BigBlockRAM.v
CellularRAM.v [new file with mode: 0644]
Makefile
ram.hex
system.v
tests/Makefile
tests/testbench.c
tests/testbench.hex
tests/testbench.pad.hex
xst/Console.nexys2.v [new file with mode: 0644]
xst/FireARM.ucf
xst/FireARM.xst
xst/Makefile

index 7e6ea99..7b8275a 100644 (file)
@@ -10,9 +10,10 @@ module BigBlockRAM(
        
        /* This module is mapped in physical memory from 0x00000000 to
         * 0x00800000.  rdata and ready must be driven to zero if the
-        * address is not within the range of this module.
+        * address is not within the range of this module.  There also
+        * exists a shadow up at 0x80000000.
         */
-       wire decode = bus_addr[31:23] == 9'b0;
+       wire decode = bus_addr[30:23] == 8'b0;
        wire [22:0] ramaddr = {bus_addr[22:2], 2'b0};   /* mask off lower two bits
                                                         * for word alignment */
 
diff --git a/CellularRAM.v b/CellularRAM.v
new file mode 100644 (file)
index 0000000..81622cd
--- /dev/null
@@ -0,0 +1,50 @@
+module CellularRAM(
+       input clk,
+       input [31:0] bus_addr,
+       output wire [31:0] bus_rdata,
+       input [31:0] bus_wdata,
+       input bus_rd,
+       input bus_wr,
+       output wire bus_ready,
+       
+       output wire cr_nADV, cr_nCE, cr_nOE, cr_nWE, cr_CRE, cr_nLB, cr_nUB, cr_CLK,
+       inout wire [15:0] cr_DQ,
+       output wire [22:0] cr_A,
+       output wire st_nCE
+       );
+       
+       /* This module is mapped in physical memory from 0x80000000 to
+        * 0x80FFFFFF.  rdata and ready must be driven to zero if the
+        * address is not within the range of this module.
+        */
+       wire decode = bus_addr[31:24] == 8'h80;
+       assign cr_A = bus_addr[23:1];
+       reg [22:0] cr_A_1a = 23'h7FFFFF;
+       reg [22:0] cr_A_2a = 23'h7FFFFF;
+       wire active = (decode && (bus_rd || bus_wr));
+       reg active_1a = 0;
+       reg active_2a = 0;
+       
+       always @(posedge clk)
+       begin
+               cr_A_1a <= cr_A;
+               cr_A_2a <= cr_A_1a;
+               active_1a <= active;
+               active_2a <= active_1a;
+       end
+       
+       assign bus_rdata = (bus_rd && decode) ? {16'h0000, cr_DQ} : 32'h0;
+       assign cr_DQ = (bus_wr && decode) ? bus_wdata : 16'hzzzz;
+       
+       assign bus_ready = active && active_1a && active_2a && (cr_A_1a == cr_A) && (cr_A_2a == cr_A);
+       
+       assign st_nCE = 0;
+       assign cr_nADV = ~decode;
+       assign cr_nCE = 0;
+       assign cr_nOE = ~bus_rd;
+       assign cr_nWE = ~bus_wr;
+       assign cr_CRE = 0;
+       assign cr_nLB = 0;
+       assign cr_nUB = 0;
+       assign cr_CLK = 0;
+endmodule
index 2c4bf60..7649562 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-VLOGS = ARM_Constants.v BigBlockRAM.v BlockRAM.v BusArbiter.v DCache.v Decode.v Execute.v Fetch.v ICache.v Issue.v Memory.v Minishift.v RegFile.v Terminal.v Writeback.v system.v
+VLOGS = ARM_Constants.v BigBlockRAM.v BlockRAM.v BusArbiter.v DCache.v Decode.v Execute.v Fetch.v ICache.v Issue.v Memory.v Minishift.v RegFile.v Terminal.v Writeback.v system.v CellularRAM.v
 
 all: Vsystem
 
diff --git a/ram.hex b/ram.hex
index aa3a6ed..5d115b1 120000 (symlink)
--- a/ram.hex
+++ b/ram.hex
@@ -1 +1 @@
-tests/testbench.pad.hex
\ No newline at end of file
+tests/ram.hex
\ No newline at end of file
index 8205a15..97880c9 100644 (file)
--- a/system.v
+++ b/system.v
@@ -6,7 +6,12 @@ module System(input clk, input rst
 `else
        , output wire [8:0] sys_odata,
        input [8:0] sys_idata,
-       output wire sys_tookdata
+       output wire sys_tookdata,
+
+       output wire cr_nADV, cr_nCE, cr_nOE, cr_nWE, cr_CRE, cr_nLB, cr_nUB, cr_CLK,
+       inout wire [15:0] cr_DQ,
+       output wire [22:0] cr_A,
+       output wire st_nCE
 `endif
        );
        
@@ -34,15 +39,15 @@ module System(input clk, input rst
        wire bus_rd_dcache;
        wire bus_wr_dcache;
        
-       wire [31:0] bus_rdata_blockram;
-       wire bus_ready_blockram;
+       wire [31:0] bus_rdata_blockram, bus_rdata_cellularram;
+       wire bus_ready_blockram, bus_ready_cellularram;
        
        assign bus_addr = bus_addr_icache | bus_addr_dcache;
-       assign bus_rdata = bus_rdata_blockram;
+       assign bus_rdata = bus_rdata_blockram | bus_rdata_cellularram;
        assign bus_wdata = bus_wdata_icache | bus_wdata_dcache;
        assign bus_rd = bus_rd_icache | bus_rd_dcache;
        assign bus_wr = bus_wr_icache | bus_wr_dcache;
-       assign bus_ready = bus_ready_blockram;
+       assign bus_ready = bus_ready_blockram | bus_ready_cellularram;
 
        wire [31:0] icache_rd_addr;
        wire icache_rd_req;
@@ -239,6 +244,40 @@ module System(input clk, input rst
                .bus_wdata(bus_wdata), .bus_rd(bus_rd), .bus_wr(bus_wr),
                .bus_ready(bus_ready_blockram));
 
+`ifdef verilator
+       assign bus_rdata_cellularram = 32'h00000000;
+       assign bus_ready_cellularram = 0;
+`else
+       /* CellularRAM AUTO_TEMPLATE (
+               .bus_rdata(bus_rdata_cellularram),
+               .bus_ready(bus_ready_cellularram),
+               );
+       */
+       CellularRAM cellularram(
+               /*AUTOINST*/
+                               // Outputs
+                               .bus_rdata      (bus_rdata_cellularram), // Templated
+                               .bus_ready      (bus_ready_cellularram), // Templated
+                               .cr_nADV        (cr_nADV),
+                               .cr_nCE         (cr_nCE),
+                               .cr_nOE         (cr_nOE),
+                               .cr_nWE         (cr_nWE),
+                               .cr_CRE         (cr_CRE),
+                               .cr_nLB         (cr_nLB),
+                               .cr_nUB         (cr_nUB),
+                               .cr_CLK         (cr_CLK),
+                               .cr_A           (cr_A[22:0]),
+                               .st_nCE         (st_nCE),
+                               // Inouts
+                               .cr_DQ          (cr_DQ[15:0]),
+                               // Inputs
+                               .clk            (clk),
+                               .bus_addr       (bus_addr[31:0]),
+                               .bus_wdata      (bus_wdata[31:0]),
+                               .bus_rd         (bus_rd),
+                               .bus_wr         (bus_wr));
+`endif
+
        /* Fetch AUTO_TEMPLATE (
                .jmp_0a(jmp),
                .jmppc_0a(jmppc),
index 471a83e..774222d 100644 (file)
@@ -1,6 +1,6 @@
 CFLAGS=-mno-thumb-interwork -march=armv4
 
-all: costas.hex testbench.hex
+all: costas.hex testbench.pad.hex testbench.hex
 
 %.o: %.c
        arm-elf-gcc $(CFLAGS) -c -o $@ $<
index e708df6..f078ecd 100644 (file)
@@ -102,10 +102,30 @@ void ldm_tester()
                puts("PASS\n");
 }
 
+void cellularram()
+{
+       volatile int *p = 0x80010000;
+       
+       puts("[writing] ");
+       p[0] = 0x12345678;
+       p[1] = 0x87654321;
+       p[2] = 0xAAAA5555;
+       p[3] = 0x5555AAAA;
+       puts("[cache flush] ");
+       p[0x1000] = 0x00000000;
+       puts("[reading: ");
+       puthex(p[0]);
+       puthex(p[1]);
+       puthex(p[2]);
+       puthex(p[3]);
+       puts("]\n");
+}
+
 struct tests tlist[] = {
        {"ldm pc/mul", ldm_tester},
        {"fact", facttest},
        {"j4cbo", j4cbo},
+       {"cellularram", cellularram},
        {"ack", acktest},
        {"miniblarg", testmain},
        {"corecurse", corecurse},
index 1335254..37a227a 100644 (file)
@@ -1,5 +1,5 @@
 e59fd00c
-eb0005e4
+eb000651
 eafffffe
 ee000510
 e1a0f00e
@@ -8,114 +8,131 @@ e1a0c00d
 e92dd800
 e24cb004
 e24dd004
+ee113531
+e50b3010
+e51b3010
+e2033c01
+e3530000
+0afffff9
+e51b3010
+e20330ff
+e1a00003
+e89da808
+e1a0c00d
+e92dd800
+e24cb004
+e24dd004
 e50b0010
+ea000007
 e51b3010
 e5d33000
-e3530000
-0a000008
-e24b1010
-e5913000
 e1a02003
-e5d22000
+e51b3010
 e2833001
-e5813000
+e50b3010
 e1a00002
-ebffffeb
-eafffff2
+ebffffe0
+e51b3010
+e5d33000
+e3530000
+1afffff3
 e89da808
 e1a0c00d
 e92dd800
 e24cb004
 e24dd00c
-e50b0010
+e50b0018
 e59f3054
 e50b3014
 e3a03007
-e50b3018
-e51b3018
-e3530000
-ba00000d
-e51b3018
-e1a02103
+e50b3010
+ea00000c
 e51b3010
+e1a02103
+e51b3018
 e1a03233
 e203200f
 e51b3014
-e0823003
+e0833002
 e5d33000
 e1a00003
-ebffffd3
-e51b3018
+ebffffc7
+e51b3010
 e2433001
-e50b3018
-eaffffee
+e50b3010
+e51b3010
+e3530000
+aaffffef
 e24bd00c
 e89da800
-00001830
+000019f4
 e1a0c00d
-e92dd800
+e92dd810
 e24cb004
 e24dd00c
-e50b0010
-e50b1014
-e51b3010
+e50b0014
+e50b1018
+e51b3014
 e3530000
 1a000003
-e51b3014
+e51b3018
 e2833001
-e50b3018
+e50b301c
 ea000017
-e51b3014
+e51b3018
 e3530000
 1a000007
-e51b3010
+e51b3014
 e2433001
 e1a00003
 e3a01001
 ebffffea
 e1a03000
-e50b3018
+e50b301c
 ea00000c
 e51b3014
+e2434001
+e51b3018
 e2433001
-e51b0010
+e51b0014
+e1a01003
+ebffffe0
+e1a03000
+e1a00004
 e1a01003
-ebffffe2
-e1a02000
-e51b3010
-e2433001
-e1a00003
-e1a01002
 ebffffdc
 e1a03000
-e50b3018
-e51b0018
-e24bd00c
-e89da800
+e50b301c
+e51b301c
+e1a00003
+e24bd010
+e89da810
 e1a0c00d
 e92dd800
 e24cb004
 e24dd004
 e3a00003
 e3a01003
-ebffffd0
+ebffffcf
 e1a03000
 e50b3010
 e51b3010
 e353003d
-0a000006
-e51b0010
-ebffffac
-e59f0018
-ebffff97
-e51b0010
-ebffffa8
+0a000008
+e51b3010
+e1a00003
+ebffffaa
+e59f001c
+ebffff95
+e51b3010
+e1a00003
+ebffffa5
 ea000001
 e59f0008
-ebffff92
+ebffff8f
 e89da808
-00001844
-00001850
+00001a08
+00001a14
 e1a0c00d
 e92dd800
 e24cb004
@@ -126,141 +143,142 @@ e3530000
 1a000002
 e3a0306a
 e50b3014
-ea00006a
+ea00006b
 e51b3010
 e3530001
 1a000002
 e3a0308b
 e50b3014
-ea000064
+ea000065
 e51b3010
 e3530002
 1a000002
 e3a03078
 e50b3014
-ea00005e
+ea00005f
 e51b3010
 e3530003
 1a000002
 e3a030b7
 e50b3014
-ea000058
+ea000059
 e51b3010
 e3530004
 1a000002
 e3a03045
 e50b3014
-ea000052
+ea000053
 e51b3010
 e3530005
 1a000002
 e3a030c5
 e50b3014
-ea00004c
+ea00004d
 e51b3010
 e3530006
 1a000002
 e3a03093
 e50b3014
-ea000046
+ea000047
 e51b3010
 e3530007
 1a000002
 e3a030cf
 e50b3014
-ea000040
+ea000041
 e51b3010
 e3530008
 1a000002
 e3a03023
 e50b3014
-ea00003a
+ea00003b
 e51b3010
 e3530009
 1a000002
 e3a0309b
 e50b3014
-ea000034
+ea000035
 e51b3010
 e353000a
 1a000002
 e3a0307a
 e50b3014
-ea00002e
+ea00002f
 e51b3010
 e353000b
 1a000002
 e3a030f4
 e50b3014
-ea000028
+ea000029
 e51b3010
 e353000c
 1a000002
 e3a0307d
 e50b3014
-ea000022
+ea000023
 e51b3010
 e353000d
 1a000002
 e3a030d7
 e50b3014
-ea00001c
+ea00001d
 e51b3010
 e353000e
 1a000002
 e3a03045
 e50b3014
-ea000016
+ea000017
 e51b3010
 e353000f
 1a000002
 e3a030db
 e50b3014
-ea000010
+ea000011
 e51b3010
 e3530010
 1a000002
 e3a03002
 e50b3014
-ea00000a
+ea00000b
 e51b3010
 e3530011
 1a000002
 e3a030e0
 e50b3014
-ea000004
-e59f0018
-ebffff1c
-e51b0010
-ebffff2d
+ea000005
+e59f0020
+ebffff19
+e51b3010
+e1a00003
+ebffff29
 eafffffe
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
-00001858
+00001a1c
 e1a0c00d
 e92dd800
 e24cb004
 e24dd008
-e50b0010
-e51b2010
-e1a03fc2
-e1a03ea3
-e0823003
+e50b0014
+e51b3014
+e2832007
+e3530000
+b1a03002
 e1a031c3
 e1a00003
-ebffff79
+ebffff77
 e1a03000
-e50b3014
-e51b2010
+e50b3010
+e51b2014
 e1a03fc2
-e1a03ea3
-e0823003
-e1a031c3
-e1a03183
-e0633002
+e1a01ea3
+e0823001
+e2033007
+e0613003
 e2632007
-e51b3014
+e51b3010
 e1a03253
 e2033001
 e1a00003
@@ -272,24 +290,25 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffffdc
+ebffffdd
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb0000ae
+eb0000b5
 e1a03000
 e50b3014
 ea000005
 e51b3010
 e2833001
 e1a00003
-eb000004
+eb000005
 e1a03000
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -305,17 +324,18 @@ e3530000
 e51b3010
 e2833001
 e1a00003
-eb00005d
+eb000061
 e1a03000
 e50b3014
 ea000005
 e51b3010
 e2833001
 e1a00003
-eb000004
+eb000005
 e1a03000
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -324,25 +344,26 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffffa8
+ebffffa7
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb00000c
+eb00000d
 e1a03000
 e50b3014
 ea000006
 e51b3010
 e2833001
 e1a00003
-ebffffb6
+ebffffb4
 e1a03000
 e2833045
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -351,25 +372,26 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffff8d
+ebffff8b
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb00000c
+eb00000d
 e1a03000
 e50b3014
 ea000006
 e51b3010
 e2833001
 e1a00003
-ebffff9b
+ebffff98
 e1a03000
 e283304e
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -378,14 +400,14 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffff72
+ebffff6f
 e1a03000
 e3530000
 0a000007
 e51b3010
 e2833001
 e1a00003
-ebffff87
+ebffff83
 e1a03000
 e283304f
 e50b3014
@@ -393,11 +415,12 @@ ea000006
 e51b3010
 e2833001
 e1a00003
-ebffff7f
+ebffff7b
 e1a03000
 e2833055
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -406,25 +429,26 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffff56
+ebffff52
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb00000c
+eb00000d
 e1a03000
 e50b3014
 ea000006
 e51b3010
 e2833001
 e1a00003
-ebffff64
+ebffff5f
 e1a03000
 e2833041
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -433,14 +457,14 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffff3b
+ebffff36
 e1a03000
 e3530000
 0a000007
 e51b3010
 e2833001
 e1a00003
-ebffff50
+ebffff4a
 e1a03000
 e283304d
 e50b3014
@@ -448,11 +472,12 @@ ea000006
 e51b3010
 e2833001
 e1a00003
-ebffff48
+ebffff42
 e1a03000
 e2833054
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -461,24 +486,25 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffff1f
+ebffff19
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb00008f
+eb000097
 e1a03000
 e50b3014
 ea000005
 e51b3010
 e2833001
 e1a00003
-eb000004
+eb000005
 e1a03000
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -487,24 +513,25 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebffff05
+ebfffefe
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb000042
+eb000045
 e1a03000
 e50b3014
 ea000005
 e51b3010
 e2833001
 e1a00003
-eb000004
+eb000005
 e1a03000
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -513,25 +540,26 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebfffeeb
+ebfffee3
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb00000c
+eb00000d
 e1a03000
 e50b3014
 ea000006
 e51b3010
 e2833001
 e1a00003
-ebfffef9
+ebfffef0
 e1a03000
 e2833049
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -540,14 +568,14 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebfffed0
+ebfffec7
 e1a03000
 e3530000
 0a000007
 e51b3010
 e2833001
 e1a00003
-ebfffee5
+ebfffedb
 e1a03000
 e2833050
 e50b3014
@@ -555,11 +583,12 @@ ea000006
 e51b3010
 e2833001
 e1a00003
-ebfffedd
+ebfffed3
 e1a03000
 e2833058
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -568,25 +597,26 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebfffeb4
+ebfffeaa
 e1a03000
 e3530000
 0a000006
 e51b3010
 e2833001
 e1a00003
-eb00000c
+eb00000d
 e1a03000
 e50b3014
 ea000006
 e51b3010
 e2833001
 e1a00003
-ebfffec2
+ebfffeb7
 e1a03000
 e2833048
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -595,38 +625,41 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebfffe99
+ebfffe8e
 e1a03000
 e3530000
-0a000002
-e59f302c
+0a000005
+e3e03e87
+e50b3014
+e51b3014
+e2433008
 e50b3014
 ea000006
 e51b3010
 e2833001
 e1a00003
-ebfffeab
+ebfffe9c
 e1a03000
 e2833053
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
-fffff787
 e1a0c00d
 e92dd800
 e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebfffe81
+ebfffe73
 e1a03000
 e3530000
 0a000007
 e51b3010
 e2833001
 e1a00003
-ebfffe96
+ebfffe87
 e1a03000
 e2833020
 e50b3014
@@ -634,10 +667,11 @@ ea000005
 e51b3010
 e2833001
 e1a00003
-eb000004
+eb000005
 e1a03000
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -646,14 +680,14 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebfffe66
+ebfffe57
 e1a03000
 e3530000
 0a000007
 e51b3010
 e2833001
 e1a00003
-ebfffe7b
+ebfffe6b
 e1a03000
 e2833046
 e50b3014
@@ -661,10 +695,11 @@ ea000005
 e51b3010
 e2833001
 e1a00003
-eb000004
+eb000005
 e1a03000
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -673,14 +708,14 @@ e24cb004
 e24dd008
 e50b0010
 e51b0010
-ebfffe4b
+ebfffe3b
 e1a03000
 e3530000
 0a000007
 e51b3010
 e2833001
 e1a00003
-ebfffe60
+ebfffe4f
 e1a03000
 e283304c
 e50b3014
@@ -688,11 +723,12 @@ ea000006
 e51b3010
 e2833001
 e1a00003
-ebfffe58
+ebfffe47
 e1a03000
 e2833052
 e50b3014
-e51b0014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -700,22 +736,23 @@ e92dd800
 e24cb004
 e24dd004
 e3a00000
-ebfffe4c
+ebfffe3a
 e1a03000
 e50b3010
 e51b3010
 e3530097
-0a000004
-e51b0010
-ebfffd52
+0a000005
+e51b3010
+e1a00003
+ebfffd3b
 e59f0010
-ebfffd3d
+ebfffd26
 ea000001
 e59f0008
-ebfffd3a
+ebfffd23
 e89da808
-00001844
-00001850
+00001a08
+00001a14
 e1a0c00d
 e92dd810
 e24cb004
@@ -723,26 +760,26 @@ e24dd008
 e50b0014
 e51b3014
 e3530000
-0a00000f
+0a00000e
 e51b2014
-e1a03fc2
-e1a03fa3
-e0823003
+e1a03fa2
+e0833002
 e1a030c3
 e1a00003
-eb00000d
+eb00000e
 e1a04000
 e51b3014
 e2433001
 e1a00003
-ebffffeb
+ebffffec
 e1a03000
 e0844003
 e50b4018
 ea000001
 e3a03001
 e50b3018
-e51b0018
+e51b3018
+e1a00003
 e24bd010
 e89da810
 e1a0c00d
@@ -766,86 +803,88 @@ e50b4018
 ea000001
 e3a03000
 e50b3018
-e51b0018
+e51b3018
+e1a00003
 e24bd010
 e89da810
 e1a0c00d
 e92dd810
 e24cb004
-e24dd004
+e24dd008
 e3a00023
-ebffffc4
+ebffffc3
 e1a04000
 e3a00020
-ebffffde
+ebffffdd
 e1a03000
 e0843003
 e243309e
 e50b3014
 e51b2014
-e59f3020
+e3a03b0f
+e2833033
 e1520003
 1a000002
-e59f0018
-ebfffcef
+e59f0014
+ebfffcd6
 ea000001
-e59f0010
-ebfffcec
-e1a00003
-e89da818
-00003c33
-00001850
-0000187c
+e59f000c
+ebfffcd3
+e24bd010
+e89da810
+00001a14
+00001a40
 e1a0c00d
 e92dd800
 e24cb004
 e59f000c
-ebfffce2
+ebfffcca
 e3a03000
 e1a00003
 e89da800
-00001884
+00001a48
 e1a0c00d
 e92dd800
 e24cb004
 e59f3004
 e1a00003
 e89da800
-00001918
+00001b28
 e1a0c00d
 e92dd800
 e24cb004
 e24dd010
-e50b0010
-e50b1014
-e51b2010
-e51b3014
+e50b0018
+e50b101c
+e51b2018
+e51b301c
 e0223003
-e50b3010
-e3a03000
 e50b3018
+e3a03000
+e50b3014
+ea000011
 e51b3018
-e3530007
-ca000011
-e51b3010
 e2033001
+e20330ff
 e3530000
 0a000002
-e59f3040
-e50b301c
+e59f3048
+e50b3010
 ea000001
 e3a03000
-e50b301c
-e51b3010
-e1a020c3
-e51b301c
-e0223003
 e50b3010
 e51b3018
-e2833001
-e50b3018
-eaffffea
+e1a020c3
 e51b3010
+e0223003
+e50b3018
+e51b3014
+e2833001
+e50b3014
+e51b3014
+e3530007
+daffffea
+e51b3018
 e1a00003
 e24bd00c
 e89da800
@@ -905,10 +944,11 @@ e51b3014
 e5933018
 e50b3018
 ea000002
-ebffff91
+ebffff90
 e1a03000
 e50b3018
-e51b0018
+e51b3018
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
@@ -975,15 +1015,16 @@ e3530000
 1a000002
 e3a03000
 e50b3018
-ea00002a
+ea00002b
 e51b3010
 e3530001
-1a000006
+1a000007
 e51b3014
 e5933010
-e1a03123
-e2233001
-e2033001
+e2033004
+e3530000
+13a03000
+03a03001
 e50b3018
 ea000020
 e51b3010
@@ -1016,409 +1057,411 @@ e3530007
 e3a03001
 e50b3018
 ea000002
-ebffff22
+ebffff1f
 e1a03000
 e50b3018
-e51b0018
+e51b3018
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
 e92dd800
 e24cb004
 e24dd040
-e24b3028
-e50b302c
-e3a03000
+e24b304c
 e50b3030
 e3a03000
-e50b3034
+e50b302c
 e3a03000
-e50b3038
-e51b202c
+e50b3028
+e3a03000
+e50b3024
+e51b2030
 e3a03000
 e5823014
-e51b202c
+e51b2030
 e3a03000
 e5823000
-e51b202c
+e51b2030
 e3a03000
 e5823004
-e51b202c
+e51b2030
 e3a03000
 e5823008
-e51b202c
+e51b2030
 e3a03000
 e582300c
-e51b202c
+e51b2030
 e3a03000
 e5823010
-e51b202c
+e51b2030
 e3a03000
 e5823018
-ebffff04
+ebffff00
 e1a03000
-e50b304c
-e51b3038
-e353000f
-0a000155
-e51b302c
+e50b3010
+ea000154
+e51b3030
 e5933014
 e1a02103
-e51b304c
-e0823003
+e51b3010
+e0833002
 e5933000
-e50b3034
-e51b3034
+e50b3028
+e51b3028
 e1a03643
-e50b3038
-e51b3034
+e50b3024
+e51b3028
 e1a034c3
 e2033007
-e50b303c
-e51b3034
+e50b3020
+e51b3028
 e1a03243
 e203300f
-e50b3040
-e51b3034
+e50b301c
+e51b3028
 e203300f
-e50b3044
-e51b302c
-e51b0030
-e5931000
-ebfffeed
-e1a03000
-e50b3030
-e51b302c
-e51b0030
-e5931004
-ebfffee7
+e50b3018
+e51b3030
+e5933000
+e51b002c
+e1a01003
+ebfffeea
 e1a03000
-e50b3030
-e51b302c
-e51b0030
-e5931008
-ebfffee1
+e50b302c
+e51b3030
+e5933004
+e51b002c
+e1a01003
+ebfffee3
 e1a03000
-e50b3030
-e51b302c
-e51b0030
-e593100c
-ebfffedb
+e50b302c
+e51b3030
+e5933008
+e51b002c
+e1a01003
+ebfffedc
 e1a03000
-e50b3030
-e51b302c
-e51b0030
-e5931010
+e50b302c
+e51b3030
+e593300c
+e51b002c
+e1a01003
 ebfffed5
 e1a03000
-e50b3030
-e51b302c
-e51b0030
-e5931018
-ebfffecf
+e50b302c
+e51b3030
+e5933010
+e51b002c
+e1a01003
+ebfffece
 e1a03000
-e50b3030
-e51b302c
-e51b0030
-e5931014
-ebfffec9
+e50b302c
+e51b3030
+e5933018
+e51b002c
+e1a01003
+ebfffec7
 e1a03000
-e50b3030
-e51b3038
+e50b302c
+e51b3030
+e5933014
+e51b002c
+e1a01003
+ebfffec0
+e1a03000
+e50b302c
+e51b3024
 e3530000
 1a000021
-e51b202c
-e51b302c
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebffff54
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebffff4d
 e1a03000
 e3530000
 1a000005
-e51b202c
-e51b302c
+e51b3030
 e5933014
-e2833001
-e5823014
-eaffffa9
-e51b302c
+e2832001
+e51b3030
+e5832014
+ea0000fa
+e51b3030
 e5933014
 e1a02103
-e51b304c
-e0823003
+e51b3010
+e0833002
 e5933000
-e50b3048
-e51b202c
-e51b302c
+e50b3014
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b0040
-e51b1048
-e51b202c
-ebffff06
-eaffff98
-e51b3038
+e2832001
+e51b3030
+e5832014
+e51b001c
+e51b1014
+e51b2030
+ebfffeff
+ea0000e9
+e51b3024
 e3530001
-1a000019
-e51b202c
-e51b302c
+1a000018
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebffff2f
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebffff28
 e1a03000
 e3530000
-1a000000
-eaffff89
-e51b0044
-e51b102c
-ebfffeb6
+0a0000db
+e51b0018
+e51b1030
+ebfffeaf
 e1a03000
 e1a02103
-e51b304c
-e0823003
+e51b3010
+e0833002
 e5933000
-e50b3048
-e51b0040
-e51b1048
-e51b202c
-ebfffee9
-eaffff7b
-e51b3038
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffee3
+ea0000cd
+e51b3024
 e3530002
-1a00001d
-e51b202c
-e51b302c
+1a00001c
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebffff12
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebffff0c
 e1a03000
 e3530000
-1a000000
-eaffff6c
-e51b0044
-e51b102c
-ebfffe99
+0a0000bf
+e51b0018
+e51b1030
+ebfffe93
 e1a03000
-e50b3048
-e51b0040
-e51b102c
-ebfffe94
+e50b3014
+e51b001c
+e51b1030
+ebfffe8e
 e1a03000
 e3530901
 0a000001
-ebfffe5a
-ea0000c3
-e51b3048
+ebfffe53
+ea0000c1
+e51b3014
 e20330ff
 e1a00003
-ebfffb3a
-eaffff5a
-e51b3038
+ebfffb0d
+ea0000ad
+e51b3024
 e3530003
-1a000015
-e51b202c
-e51b302c
+1a000014
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebfffef1
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffeec
 e1a03000
 e3530000
-1a000000
-eaffff4b
-e51b0044
-e51b102c
-ebfffe78
-e1a03000
-e50b3048
-e51b0040
-e51b1048
-e51b202c
-ebfffeaf
-eaffff41
-e51b3038
+0a00009f
+e51b0018
+e51b1030
+ebfffe73
+e1a03000
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffeab
+ea000095
+e51b3024
 e3530004
-1a000020
-e51b202c
-e51b302c
+1a00001f
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebfffed8
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffed4
 e1a03000
 e3530000
-1a000000
-eaffff32
-e51b0044
-e51b102c
-ebfffe5f
-e1a03000
-e50b3048
-e51b0040
-e51b102c
-ebfffe5a
+0a000087
+e51b0018
+e51b1030
+ebfffe5b
+e1a03000
+e50b3014
+e51b001c
+e51b1030
+ebfffe56
 e1a02000
-e51b3048
+e51b3014
 e0833002
-e50b3048
-e51b3048
+e50b3014
+e51b3014
 e1a03803
 e1a03823
-e50b3048
-e51b0040
-e51b1048
-e51b202c
-ebfffe8b
-eaffff1d
-e51b3038
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffe88
+ea000072
+e51b3024
 e3530005
-1a000033
-e51b202c
-e51b302c
+1a000032
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebfffeb4
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffeb1
 e1a03000
 e3530000
-1a000000
-eaffff0e
-e51b0044
-e51b102c
-ebfffe3b
+0a000064
+e51b0018
+e51b1030
+ebfffe38
 e1a03000
-e50b3048
-e51b0040
-e51b102c
-ebfffe36
+e50b3014
+e51b001c
+e51b1030
+ebfffe33
 e1a02000
-e51b3048
+e51b3014
 e0623003
-e50b3048
-e51b202c
+e50b3014
+e51b2030
 e3a03000
 e5823010
-e51b3048
+e51b3014
 e3530000
 1a000004
-e51b202c
-e51b302c
+e51b3030
 e5933010
-e3833004
-e5823010
-e51b3048
+e3832004
+e51b3030
+e5832010
+e51b3014
 e3530000
 da000004
-e51b202c
-e51b302c
+e51b3030
 e5933010
-e3833001
-e5823010
-e51b3048
+e3832001
+e51b3030
+e5832010
+e51b3014
 e3530000
-aafffeec
-e51b202c
-e51b302c
+aa000042
+e51b3030
 e5933010
-e3833002
-e5823010
-eafffee6
-e51b3038
+e3832002
+e51b3030
+e5832010
+ea00003c
+e51b3024
 e3530006
-1a00001c
-e51b202c
-e51b302c
+1a00001b
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebfffe7d
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffe7b
 e1a03000
 e3530000
-1a000000
-eafffed7
-e51b0044
-e51b102c
-ebfffe04
-e1a03000
-e50b3048
-e51b0040
-e51b102c
-ebfffdff
+0a00002e
+e51b0018
+e51b1030
+ebfffe02
+e1a03000
+e50b3014
+e51b001c
+e51b1030
+ebfffdfd
 e1a02000
-e51b3048
+e51b3014
 e0033002
-e50b3048
-e51b0040
-e51b1048
-e51b202c
-ebfffe34
-eafffec6
-e51b3038
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffe33
+ea00001d
+e51b3024
 e3530007
-1afffec3
-e51b202c
-e51b302c
+1a00001a
+e51b3030
 e5933014
-e2833001
-e5823014
-e51b003c
-e51b102c
-ebfffe5d
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffe5c
 e1a03000
 e3530000
-1a000000
-eafffeb7
-e51b0040
-e51b102c
-ebfffde4
-e1a03000
-e50b3048
-e51b3048
+0a00000f
+e51b001c
+e51b1030
+ebfffde3
+e1a03000
+e50b3014
+e51b3014
 e1e03003
-e50b3048
-e51b3048
+e50b3014
+e51b3014
 e1a03803
 e1a03823
-e50b3048
-e51b0040
-e51b1048
-e51b202c
-ebfffe14
-eafffea6
+e50b3014
+e51b001c
+e51b1014
 e51b2030
-e59f3028
+ebfffe14
+e51b3024
+e353000f
+1afffea7
+e51b202c
+e59f302c
 e1520003
-0a000004
-e51b0030
-ebfffa95
+0a000005
+e51b302c
+e1a00003
+ebfffa78
 e59f0018
-ebfffa80
+ebfffa63
 ea000001
 e59f0010
-ebfffa7d
+ebfffa60
 e24bd00c
 e89da800
 ee861173
-00001894
-00001850
+00001a58
+00001a14
 e1a0c00d
 e92dd800
 e24cb004
@@ -1427,41 +1470,43 @@ e50b0010
 e51b3010
 e3530000
 1a000002
-e3a03001
-e50b3014
+e3a01001
+e50b1014
 ea000007
 e51b3010
 e2433001
 e1a00003
 ebfffff0
-e1a03000
-e51b2010
-e0030392
-e50b3014
-e51b0014
+e1a02000
+e51b3010
+e0010293
+e50b1014
+e51b3014
+e1a00003
 e24bd00c
 e89da800
 e1a0c00d
 e92dd800
 e24cb004
 e3a0000a
-ebffffe4
+ebffffe3
 e1a02000
-e59f301c
+e3a039dd
+e2833c1f
 e1520003
 0a000002
-e59f0014
-ebfffa57
+e59f0010
+ebfffa38
 ea000001
-e59f000c
-ebfffa54
+e59f0008
+ebfffa35
 e89da800
-00375f00
-0000187c
-00001850
+00001a40
+00001a14
 e1a0c00d
 e92dd800
 e24cb004
+e24dd004
 e1a0300e
 eb000009
 e1a00000
@@ -1484,50 +1529,112 @@ e89da800
 e0000291
 e1a00000
 e1a00000
-e1a00003
-e89da800
+e89da808
 e1a0c00d
 e92dd800
 e24cb004
 e24dd004
-ebffffe2
+ebffffe3
 e1a03000
 e50b3010
 e51b3010
 e3530722
-0a000006
-e59f0020
-ebfffa29
-e51b0010
-ebfffa3a
+0a000007
+e59f0024
+ebfffa0b
+e51b3010
+e1a00003
+ebfffa1b
 e59f0014
-ebfffa25
+ebfffa06
 ea000001
 e59f000c
-ebfffa22
+ebfffa03
 e89da808
-0000189c
-000018b0
-00001850
+00001a60
+00001a74
+00001a14
 e1a0c00d
 e92dd800
 e24cb004
 e24dd004
-e59f0068
-ebfffa18
-e59f3064
+e3a03102
+e2833801
 e50b3010
+e59f00c4
+ebfff9f6
+e51b2010
+e59f30bc
+e5823000
+e51b3010
+e2832004
+e59f30b0
+e5823000
+e51b3010
+e2832008
+e3a03c55
+e2833055
+e1833883
+e5823000
+e51b3010
+e283200c
+e3a03caa
+e28330aa
+e1833783
+e5823000
+e59f007c
+ebfff9e1
+e51b3010
+e2832901
+e3a03000
+e5823000
+e59f0068
+ebfff9db
 e51b3010
 e5933000
-e3530000
-0a00000e
-e59f0050
-ebfffa10
+e1a00003
+ebfff9ea
 e51b3010
-e5930000
-ebfffa0d
-e59f0040
-ebfffa0b
+e2833004
+e5933000
+e1a00003
+ebfff9e5
+e51b3010
+e2833008
+e5933000
+e1a00003
+ebfff9e0
+e51b3010
+e283300c
+e5933000
+e1a00003
+ebfff9db
+e59f0018
+ebfff9c6
+e89da808
+00001a78
+12345678
+87654321
+00001a84
+00001a94
+00001aa0
+e1a0c00d
+e92dd800
+e24cb004
+e24dd004
+e59f0078
+ebfff9b9
+e59f3074
+e50b3010
+ea00000e
+e59f006c
+ebfff9b4
+e51b3010
+e5933000
+e1a00003
+ebfff9b0
+e59f0058
+ebfff9ae
 e51b3010
 e5933004
 e1a0e00f
@@ -1535,17 +1642,23 @@ e1a0f003
 e51b3010
 e2833008
 e50b3010
-eaffffec
-e59f001c
-ebfffa01
-e3a03000
+e51b3010
+e5933000
+e3530000
+1affffec
+e59f0028
+ebfff9a1
+ebfff992
+e1a03000
+e20330ff
 e1a00003
-e89da808
-000018ec
-00001960
-00001900
-0000190c
-00001910
+ebfff98b
+eafffff9
+00001ae8
+00001b70
+00001afc
+00001b08
+00001b0c
 33323130
 37363534
 42413938
@@ -1579,6 +1692,17 @@ e89da808
 73617720
 00000020
 0000000a
+6972775b
+676e6974
+0000205d
+6361635b
+66206568
+6873756c
+0000205d
+6165725b
+676e6964
+0000203a
+00000a5d
 206d646c
 6d2f6370
 00006c75
@@ -1586,6 +1710,9 @@ e89da808
 00000000
 6263346a
 0000006f
+6c6c6563
+72616c75
+006d6172
 006b6361
 696e696d
 72616c62
@@ -1603,7 +1730,12 @@ e89da808
 00000000
 0000203a
 656e6f44
-00000a21
+63452021
+6e696f68
+68632067
+63617261
+73726574
+00000a2e
 00000e30
 00000009
 00000e00
@@ -1622,17 +1754,19 @@ e89da808
 0000000a
 00002e10
 0000ffff
-000018b4
-00001740
-000018c0
-0000168c
-000018c8
-00000ae4
-000018d0
-00000178
-000018d4
-00001000
-000018e0
-00000c0c
+00001aa4
+000017f0
+00001ab0
+0000173c
+00001ab8
+00000b74
+00001ac0
+00001850
+00001acc
+000001b4
+00001ad0
+000010a8
+00001adc
+00000ca4
 00000000
 00000000
index eecc6d5..bf3d259 100644 (file)
 e59fd00c
-eb000499
+eb000651
 eafffffe
 ee000510
 e1a0f00e
 00003ffc
-ee110531
-e3100c01
-0afffffc
-e20000ff
-e1a0f00e
 e1a0c00d
-e92dd810
-e1a04000
-e5d00000
+e92dd800
 e24cb004
-e3500000
-089da810
-ebffffef
-e5f40001
-e3500000
-1afffffb
-e89da810
+e24dd004
+ee113531
+e50b3010
+e51b3010
+e2033c01
+e3530000
+0afffff9
+e51b3010
+e20330ff
+e1a00003
+e89da808
 e1a0c00d
-e92dd870
-e59f6028
+e92dd800
 e24cb004
-e1a05000
-e3a04007
-e1a01104
-e1a00135
-e200300f
-e7d30006
+e24dd004
+e50b0010
+ea000007
+e51b3010
+e5d33000
+e1a02003
+e51b3010
+e2833001
+e50b3010
+e1a00002
 ebffffe0
-e2544001
-5afffff8
-e89da870
-00001338
+e51b3010
+e5d33000
+e3530000
+1afffff3
+e89da808
+e1a0c00d
+e92dd800
+e24cb004
+e24dd00c
+e50b0018
+e59f3054
+e50b3014
+e3a03007
+e50b3010
+ea00000c
+e51b3010
+e1a02103
+e51b3018
+e1a03233
+e203200f
+e51b3014
+e0833002
+e5d33000
+e1a00003
+ebffffc7
+e51b3010
+e2433001
+e50b3010
+e51b3010
+e3530000
+aaffffef
+e24bd00c
+e89da800
+000019f4
 e1a0c00d
 e92dd810
-e1a03000
 e24cb004
-e1a02001
+e24dd00c
+e50b0014
+e50b1018
+e51b3014
 e3530000
-e1a00003
-e2421001
-e2434001
-0a00000b
-e3520000
-02433001
-02822001
-0afffff6
-ebfffff0
-e1a03004
-e1a02000
+1a000003
+e51b3018
+e2833001
+e50b301c
+ea000017
+e51b3018
 e3530000
+1a000007
+e51b3014
+e2433001
 e1a00003
-e2421001
+e3a01001
+ebffffea
+e1a03000
+e50b301c
+ea00000c
+e51b3014
 e2434001
-1afffff3
-e2820001
+e51b3018
+e2433001
+e51b0014
+e1a01003
+ebffffe0
+e1a03000
+e1a00004
+e1a01003
+ebffffdc
+e1a03000
+e50b301c
+e51b301c
+e1a00003
+e24bd010
 e89da810
 e1a0c00d
-e3a00003
-e92dd810
-e1a01000
+e92dd800
 e24cb004
-ebffffe1
-e350003d
-e1a04000
-0a000005
-ebffffce
-e59f0018
-ebffffc0
-e1a00004
-e89d6810
-eaffffc9
+e24dd004
+e3a00003
+e3a01003
+ebffffcf
+e1a03000
+e50b3010
+e51b3010
+e353003d
+0a000008
+e51b3010
+e1a00003
+ebffffaa
+e59f001c
+ebffff95
+e51b3010
+e1a00003
+ebffffa5
+ea000001
 e59f0008
-e89d6810
-eaffffba
-0000134c
-00001358
+ebffff8f
+e89da808
+00001a08
+00001a14
 e1a0c00d
-e92dd810
-e2504000
+e92dd800
 e24cb004
-0280006a
-089da810
-e3540001
-03a0008b
-089da810
-e3540002
-03a00078
-089da810
-e3540003
-03a000b7
-089da810
-e3540004
-0a00002a
-e3540005
-03a000c5
-089da810
-e3540006
-03a00093
-089da810
-e3540007
-03a000cf
-089da810
-e3540008
-03a00023
-089da810
-e3540009
-03a0009b
-089da810
-e354000a
-03a0007a
-089da810
-e354000b
-03a000f4
-089da810
-e354000c
-03a0007d
-089da810
-e354000d
-03a000d7
-089da810
-e354000e
-0a00000d
-e354000f
-03a000db
-089da810
-e3540010
-03a00002
-089da810
-e3540011
-03a000e0
-089da810
-e59f0014
-ebffff7f
-e1a00004
-ebffff89
+e24dd008
+e50b0010
+e51b3010
+e3530000
+1a000002
+e3a0306a
+e50b3014
+ea00006b
+e51b3010
+e3530001
+1a000002
+e3a0308b
+e50b3014
+ea000065
+e51b3010
+e3530002
+1a000002
+e3a03078
+e50b3014
+ea00005f
+e51b3010
+e3530003
+1a000002
+e3a030b7
+e50b3014
+ea000059
+e51b3010
+e3530004
+1a000002
+e3a03045
+e50b3014
+ea000053
+e51b3010
+e3530005
+1a000002
+e3a030c5
+e50b3014
+ea00004d
+e51b3010
+e3530006
+1a000002
+e3a03093
+e50b3014
+ea000047
+e51b3010
+e3530007
+1a000002
+e3a030cf
+e50b3014
+ea000041
+e51b3010
+e3530008
+1a000002
+e3a03023
+e50b3014
+ea00003b
+e51b3010
+e3530009
+1a000002
+e3a0309b
+e50b3014
+ea000035
+e51b3010
+e353000a
+1a000002
+e3a0307a
+e50b3014
+ea00002f
+e51b3010
+e353000b
+1a000002
+e3a030f4
+e50b3014
+ea000029
+e51b3010
+e353000c
+1a000002
+e3a0307d
+e50b3014
+ea000023
+e51b3010
+e353000d
+1a000002
+e3a030d7
+e50b3014
+ea00001d
+e51b3010
+e353000e
+1a000002
+e3a03045
+e50b3014
+ea000017
+e51b3010
+e353000f
+1a000002
+e3a030db
+e50b3014
+ea000011
+e51b3010
+e3530010
+1a000002
+e3a03002
+e50b3014
+ea00000b
+e51b3010
+e3530011
+1a000002
+e3a030e0
+e50b3014
+ea000005
+e59f0020
+ebffff19
+e51b3010
+e1a00003
+ebffff29
 eafffffe
-e3a00045
-e89da810
-00001360
-e1a0c00d
-e1a01fc0
-e92dd830
-e0805ea1
-e1a051c5
-e24cb004
-e1a04000
-e1a00005
-ebffffb7
-e0444185
-e2644007
-e1a00450
-e2000001
-e89da830
+e51b3014
+e1a00003
+e24bd00c
+e89da800
+00001a1c
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebffffec
-e3500000
-e2840001
-0a000002
-eb000074
-e280004c
-e89da810
-e2840001
-eb000070
-e2800052
-e89da810
+e24dd008
+e50b0014
+e51b3014
+e2832007
+e3530000
+b1a03002
+e1a031c3
+e1a00003
+ebffff77
+e1a03000
+e50b3010
+e51b2014
+e1a03fc2
+e1a01ea3
+e0823001
+e2033007
+e0613003
+e2632007
+e51b3010
+e1a03253
+e2033001
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
+e24dd008
+e50b0010
+e51b0010
 ebffffdd
-e3500000
-e2840001
-1a000001
-e89d6810
-eaffffe6
-eb000063
-e2800046
-e89da810
+e1a03000
+e3530000
+0a000006
+e51b3010
+e2833001
+e1a00003
+eb0000b5
+e1a03000
+e50b3014
+ea000005
+e51b3010
+e2833001
+e1a00003
+eb000005
+e1a03000
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd830
+e92dd800
 e24cb004
-e1a04000
-e2805001
-ebffffcf
-e3500000
-e2840001
-0a000002
-eb000057
-e2800020
-e89da830
-e1a00005
-ebffffc7
-e3500000
-e2850001
-0a000002
-eb00004f
-e2800046
-e89da830
-e2850001
-ebffffcd
-e89da830
+e24dd008
+e50b0010
+e51b0010
+ebffffc2
+e1a03000
+e3530000
+0a000006
+e51b3010
+e2833001
+e1a00003
+eb000061
+e1a03000
+e50b3014
+ea000005
+e51b3010
+e2833001
+e1a00003
+eb000005
+e1a03000
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebffffb9
-e3500000
-0a000008
-e2844001
-e1a00004
+e24dd008
+e50b0010
+e51b0010
+ebffffa7
+e1a03000
+e3530000
+0a000006
+e51b3010
+e2833001
+e1a00003
+eb00000d
+e1a03000
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
 ebffffb4
-e3500000
-0a000025
-e2840001
-eb00003c
-e2800020
-e89da810
-e2844001
-e1a00004
-ebffffab
-e3500000
-0a00000e
-e2844001
-e1a00004
-ebffffa6
-e3500000
-0a000023
-e2844001
-e1a00004
-ebffffa1
-e3500000
-159f00a8
-189da810
-e2840001
-eb000028
-e2800053
-e89da810
-e2844001
-e1a00004
-ebffff97
-e3500000
-0a000018
-e2844001
-e1a00004
-ebffff92
-e3500000
-0a000017
-e2840001
-eb00001a
-e2800050
-e89da810
-e2844001
-e1a00004
-ebffff89
-e3500000
-0a000003
-e2840001
-eb000011
-e2800046
-e89da810
-e2840001
-ebffff8f
-e89da810
-e2840001
-eb00000a
-e2800048
-e89da810
-e2840001
-eb000006
-e2800049
-e89da810
-e2840001
-eb000002
-e2800058
-e89da810
-fffff787
+e1a03000
+e2833045
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebffff6e
-e3500000
-0a000012
-e2844001
-e1a00004
-ebffff69
-e3500000
-0a000033
-e2844001
-e1a00004
-ebffff64
-e3500000
-1a000042
-e2844001
-e1a00004
-ebffff5f
-e3500000
-0a000057
-e2840001
-ebffffe7
-e2800046
-e89da810
-e2844001
-e1a00004
-ebffff56
-e3500000
-0a00000d
-e2844001
-e1a00004
-ebffff51
-e3500000
-0a000041
-e2844001
-e1a00004
-ebffff4c
-e3500000
-0a000053
-e2840001
-ebffffd4
-e280004d
-e89da810
-e2844001
-e1a00004
-ebffff43
-e3500000
-0a000037
-e2844001
-e1a00004
-ebffff3e
-e3500000
-0a00003d
-e2844001
-e1a00004
-ebffff39
-e3500000
-0a000044
-e2840001
-ebffffc1
-e280004f
-e89da810
-e2844001
-e1a00004
-ebffff30
-e3500000
-0a000012
-e2844001
-e1a00004
-ebffff2b
-e3500000
-0a000026
-e2844001
-e1a00004
-ebffff26
-e3500000
-159f00e4
-189da810
-e2840001
-ebffffad
-e2800053
-e89da810
-e2840001
-ebffffa9
-e2800020
-e89da810
-e2844001
-e1a00004
-ebffff18
-e3500000
-0a00001b
-e2844001
-e1a00004
-ebffff13
-e3500000
-0a000022
-e2840001
-ebffff9b
-e2800050
-e89da810
-e2840001
-ebffff97
-e2800041
-e89da810
-e2840001
-ebffff93
-e2800045
-e89da810
-e2840001
-ebffff11
-e89da810
-e2840001
-ebffff8c
-e2800048
-e89da810
-e2840001
-ebffff88
-e280004e
-e89da810
-e2840001
-ebffff84
-e2800049
-e89da810
-e2840001
-ebffff80
-e2800054
-e89da810
-e2840001
-ebffff7c
-e2800055
-e89da810
-e2840001
-ebffff78
-e2800058
-e89da810
-fffff787
+e24dd008
+e50b0010
+e51b0010
+ebffff8b
+e1a03000
+e3530000
+0a000006
+e51b3010
+e2833001
+e1a00003
+eb00000d
+e1a03000
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebffff98
+e1a03000
+e283304e
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebfffee4
-e3500000
-e59f3014
-e2840001
-1a000001
-ebffff6b
-e2803053
+e24dd008
+e50b0010
+e51b0010
+ebffff6f
+e1a03000
+e3530000
+0a000007
+e51b3010
+e2833001
 e1a00003
-e89da810
-fffff787
+ebffff83
+e1a03000
+e283304f
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebffff7b
+e1a03000
+e2833055
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd830
+e92dd800
 e24cb004
-e2805001
-e1a04000
-ebfffed5
-e3500000
-e1a00005
+e24dd008
+e50b0010
+e51b0010
+ebffff52
+e1a03000
+e3530000
 0a000006
-ebfffed1
-e3500000
-e59f302c
-e2850001
-0a000005
+e51b3010
+e2833001
 e1a00003
-e89da830
-e2840001
-ebffff55
-e2800048
-e89da830
-ebffff52
-e2803053
+eb00000d
+e1a03000
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebffff5f
+e1a03000
+e2833041
+e50b3014
+e51b3014
 e1a00003
-e89da830
-fffff787
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebfffebd
-e3500000
-e2840001
-0a000002
-ebffff45
-e2800050
-e89da810
-e2840001
-ebffff41
-e2800058
-e89da810
+e24dd008
+e50b0010
+e51b0010
+ebffff36
+e1a03000
+e3530000
+0a000007
+e51b3010
+e2833001
+e1a00003
+ebffff4a
+e1a03000
+e283304d
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebffff42
+e1a03000
+e2833054
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd830
+e92dd800
 e24cb004
-e2804001
-e1a05000
-ebfffead
-e3500000
-e1a00004
-0a000006
-ebfffea9
-e3500000
-e2840001
+e24dd008
+e50b0010
+e51b0010
+ebffff19
+e1a03000
+e3530000
 0a000006
-ebffff31
-e2800050
-e89da830
-e2850001
-ebffff2d
-e2800049
-e89da830
-e2840001
-ebffff29
-e2800058
-e89da830
-e1a0c00d
-e92dd810
-e24cb004
-e1a04000
-ebfffe96
-e3500000
-0a00000e
-e2844001
-e1a00004
-ebfffe91
-e3500000
-0a00001b
-e2844001
-e1a00004
-ebfffe8c
-e3500000
-159f0078
-189da810
-e2840001
-ebffff13
-e2800053
-e89da810
-e2844001
-e1a00004
-ebfffe82
-e3500000
-0a000008
-e2844001
-e1a00004
-ebfffe7d
-e3500000
-0a00000b
-e2840001
-ebffff05
-e2800050
-e89da810
-e2840001
-ebffff01
-e2800049
-e89da810
-e2840001
-ebfffefd
-e2800048
-e89da810
-e2840001
-ebfffef9
-e2800058
-e89da810
-fffff787
+e51b3010
+e2833001
+e1a00003
+eb000097
+e1a03000
+e50b3014
+ea000005
+e51b3010
+e2833001
+e1a00003
+eb000005
+e1a03000
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebfffe65
-e3500000
-e2840001
-0a000002
-ebfffeed
-e280004d
-e89da810
-e2840001
-ebfffee9
-e2800054
-e89da810
+e24dd008
+e50b0010
+e51b0010
+ebfffefe
+e1a03000
+e3530000
+0a000006
+e51b3010
+e2833001
+e1a00003
+eb000045
+e1a03000
+e50b3014
+ea000005
+e51b3010
+e2833001
+e1a00003
+eb000005
+e1a03000
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd830
+e92dd800
 e24cb004
-e2804001
-e1a05000
-ebfffe55
-e3500000
-e1a00004
-0a000006
-ebfffe51
-e3500000
-e2840001
+e24dd008
+e50b0010
+e51b0010
+ebfffee3
+e1a03000
+e3530000
 0a000006
-ebfffed9
-e280004d
-e89da830
-e2850001
-ebfffed5
-e2800041
-e89da830
-e2840001
-ebfffed1
-e2800054
-e89da830
+e51b3010
+e2833001
+e1a00003
+eb00000d
+e1a03000
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebfffef0
+e1a03000
+e2833049
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebfffe3e
-e3500000
-e2840001
-0a000002
-ebfffec6
-e280004f
-e89da810
-e2840001
-ebfffec2
-e2800055
-e89da810
+e24dd008
+e50b0010
+e51b0010
+ebfffec7
+e1a03000
+e3530000
+0a000007
+e51b3010
+e2833001
+e1a00003
+ebfffedb
+e1a03000
+e2833050
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebfffed3
+e1a03000
+e2833058
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd830
+e92dd800
 e24cb004
-e2804001
-e1a05000
-ebfffe2e
-e3500000
-e1a00004
-0a000006
-ebfffe2a
-e3500000
-e2840001
-0a000006
-ebfffeb2
-e280004f
-e89da830
-e2850001
-ebfffeae
-e280004e
-e89da830
-e2840001
+e24dd008
+e50b0010
+e51b0010
 ebfffeaa
-e2800055
-e89da830
+e1a03000
+e3530000
+0a000006
+e51b3010
+e2833001
+e1a00003
+eb00000d
+e1a03000
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebfffeb7
+e1a03000
+e2833048
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd830
+e92dd800
 e24cb004
-e2804001
-e1a05000
-ebfffe16
-e3500000
-e1a00004
-0a00000b
-ebfffe12
-e2845001
-e3500000
-e1a00005
-0a00000a
-ebfffe0d
-e3500000
-e2850001
-0a00000a
-ebfffe95
-e280004f
-e89da830
-e2850001
-ebfffe91
-e2800045
-e89da830
-e2840001
-ebfffe8d
-e280004e
-e89da830
-e2850001
-ebfffe89
-e2800055
-e89da830
+e24dd008
+e50b0010
+e51b0010
+ebfffe8e
+e1a03000
+e3530000
+0a000005
+e3e03e87
+e50b3014
+e51b3014
+e2433008
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebfffe9c
+e1a03000
+e2833053
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-e1a04000
-ebfffdf6
-e3500000
-0a00000d
-e2844001
-e1a00004
-ebfffdf1
-e3500000
-0a00001f
-e2844001
-e1a00004
-ebfffdec
-e3500000
-0a00001e
-e2840001
-ebfffe74
-e280004d
-e89da810
-e2844001
-e1a00004
-ebfffde3
-e3500000
-0a00000d
-e2844001
-e1a00004
-ebfffdde
-e3500000
-0a000014
-e2844001
-e1a00004
-ebfffdd9
-e3500000
-0a000013
-e2840001
-ebfffe61
-e280004f
-e89da810
-e2840001
-ebfffe5d
-e2800045
-e89da810
-e2840001
-ebfffe59
-e2800041
-e89da810
-e2840001
-ebfffe55
-e2800054
-e89da810
-e2840001
-ebfffe51
-e280004e
-e89da810
-e2840001
-ebfffe4d
-e2800055
-e89da810
+e24dd008
+e50b0010
+e51b0010
+ebfffe73
+e1a03000
+e3530000
+0a000007
+e51b3010
+e2833001
+e1a00003
+ebfffe87
+e1a03000
+e2833020
+e50b3014
+ea000005
+e51b3010
+e2833001
+e1a00003
+eb000005
+e1a03000
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
 e1a0c00d
 e92dd800
-e3a00000
 e24cb004
-ebfffe46
-e3500097
-059f0010
-0a000001
-ebfffd3c
+e24dd008
+e50b0010
+e51b0010
+ebfffe57
+e1a03000
+e3530000
+0a000007
+e51b3010
+e2833001
+e1a00003
+ebfffe6b
+e1a03000
+e2833046
+e50b3014
+ea000005
+e51b3010
+e2833001
+e1a00003
+eb000005
+e1a03000
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
+e1a0c00d
+e92dd800
+e24cb004
+e24dd008
+e50b0010
+e51b0010
+ebfffe3b
+e1a03000
+e3530000
+0a000007
+e51b3010
+e2833001
+e1a00003
+ebfffe4f
+e1a03000
+e283304c
+e50b3014
+ea000006
+e51b3010
+e2833001
+e1a00003
+ebfffe47
+e1a03000
+e2833052
+e50b3014
+e51b3014
+e1a00003
+e24bd00c
+e89da800
+e1a0c00d
+e92dd800
+e24cb004
+e24dd004
+e3a00000
+ebfffe3a
+e1a03000
+e50b3010
+e51b3010
+e3530097
+0a000005
+e51b3010
+e1a00003
+ebfffd3b
+e59f0010
+ebfffd26
+ea000001
 e59f0008
-e89d6800
-eafffd2d
-00001358
-0000134c
+ebfffd23
+e89da808
+00001a08
+00001a14
 e1a0c00d
-e92dd830
-e2505000
-e0850fa5
-e1a000c0
+e92dd810
 e24cb004
-03a00001
-089da830
-eb000004
+e24dd008
+e50b0014
+e51b3014
+e3530000
+0a00000e
+e51b2014
+e1a03fa2
+e0833002
+e1a030c3
+e1a00003
+eb00000e
 e1a04000
-e2450001
-ebfffff3
-e0840000
-e89da830
+e51b3014
+e2433001
+e1a00003
+ebffffec
+e1a03000
+e0844003
+e50b4018
+ea000001
+e3a03001
+e50b3018
+e51b3018
+e1a00003
+e24bd010
+e89da810
 e1a0c00d
-e92dd830
-e2505000
+e92dd810
 e24cb004
-01a00005
-089da830
-ebffffea
+e24dd008
+e50b0014
+e51b3014
+e3530000
+0a00000a
+e51b0014
+ebffffd8
 e1a04000
-e2450001
-ebffffe7
-e0840000
-e89da830
+e51b3014
+e2433001
+e1a00003
+ebffffd3
+e1a03000
+e0844003
+e50b4018
+ea000001
+e3a03000
+e50b3018
+e51b3018
+e1a00003
+e24bd010
+e89da810
 e1a0c00d
 e92dd810
-e3a00023
 e24cb004
-ebffffe0
+e24dd008
+e3a00023
+ebffffc3
 e1a04000
 e3a00020
-ebffffeb
-e59f3020
-e0844000
-e1540003
-e59f0018
-0a000002
+ebffffdd
+e1a03000
+e0843003
+e243309e
+e50b3014
+e51b2014
+e3a03b0f
+e2833033
+e1520003
+1a000002
 e59f0014
-ebfffd02
-e89da810
-ebfffd00
+ebfffcd6
+ea000001
+e59f000c
+ebfffcd3
+e24bd010
 e89da810
-00003cd1
-00001358
-00001350
+00001a14
+00001a40
 e1a0c00d
 e92dd800
+e24cb004
 e59f000c
+ebfffcca
+e3a03000
+e1a00003
+e89da800
+00001a48
+e1a0c00d
+e92dd800
 e24cb004
-ebfffcf7
-e3a00000
+e59f3004
+e1a00003
+e89da800
+00001b28
+e1a0c00d
+e92dd800
+e24cb004
+e24dd010
+e50b0018
+e50b101c
+e51b2018
+e51b301c
+e0223003
+e50b3018
+e3a03000
+e50b3014
+ea000011
+e51b3018
+e2033001
+e20330ff
+e3530000
+0a000002
+e59f3048
+e50b3010
+ea000001
+e3a03000
+e50b3010
+e51b3018
+e1a020c3
+e51b3010
+e0223003
+e50b3018
+e51b3014
+e2833001
+e50b3014
+e51b3014
+e3530007
+daffffea
+e51b3018
+e1a00003
+e24bd00c
 e89da800
-00001384
-e59f0000
-e1a0f00e
-00001428
-e0200001
-e3a01007
-e59f2014
-e2103001
-11a03002
-e2511001
-e02300c0
-5afffff9
-e1a0f00e
 edb88320
 e1a0c00d
-e3500000
 e92dd800
-05910000
 e24cb004
-089da800
-e3500001
-05910004
-089da800
-e3500002
-05910008
-089da800
-e3500003
-0591000c
-089da800
-e3500004
-05910010
-089da800
-e3500005
-05910014
-089da800
-e3500006
-05910018
-089da800
-e59f0008
-ebfffccd
-e3a00000
+e24dd00c
+e50b0010
+e50b1014
+e51b3010
+e3530000
+1a000003
+e51b3014
+e5933000
+e50b3018
+ea00002c
+e51b3010
+e3530001
+1a000003
+e51b3014
+e5933004
+e50b3018
+ea000025
+e51b3010
+e3530002
+1a000003
+e51b3014
+e5933008
+e50b3018
+ea00001e
+e51b3010
+e3530003
+1a000003
+e51b3014
+e593300c
+e50b3018
+ea000017
+e51b3010
+e3530004
+1a000003
+e51b3014
+e5933010
+e50b3018
+ea000010
+e51b3010
+e3530005
+1a000003
+e51b3014
+e5933014
+e50b3018
+ea000009
+e51b3010
+e3530006
+1a000003
+e51b3014
+e5933018
+e50b3018
+ea000002
+ebffff90
+e1a03000
+e50b3018
+e51b3018
+e1a00003
+e24bd00c
 e89da800
-00001384
-e3500000
-05821000
-0a000010
-e3500001
-05821004
-0a00000d
-e3500002
-05821008
-0a00000a
-e3500003
-0582100c
-0a000007
-e3500004
-05821010
-0a000004
-e3500005
-05821014
-0a000001
-e3500006
-05821018
-e3a00000
-e1a0f00e
 e1a0c00d
-e3500000
 e92dd800
 e24cb004
-089da800
-e3500001
-05913010
-01a03123
-02233001
-0a000011
-e3500002
-05913010
-02030004
-089da800
-e3500003
-0a00000a
-e3500004
-05913010
-02030002
-089da800
-e3500007
-02400006
-089da800
-e59f0014
-ebfffc9b
-e3a00000
+e24dd00c
+e50b0010
+e50b1014
+e50b2018
+e51b3010
+e3530000
+1a000002
+e51b2018
+e51b3014
+e5823000
+e51b3010
+e3530001
+1a000002
+e51b2018
+e51b3014
+e5823004
+e51b3010
+e3530002
+1a000002
+e51b2018
+e51b3014
+e5823008
+e51b3010
+e3530003
+1a000002
+e51b2018
+e51b3014
+e582300c
+e51b3010
+e3530004
+1a000002
+e51b2018
+e51b3014
+e5823010
+e51b3010
+e3530005
+1a000002
+e51b2018
+e51b3014
+e5823014
+e51b3010
+e3530006
+1a000002
+e51b2018
+e51b3014
+e5823018
+e3a03000
+e1a00003
+e24bd00c
 e89da800
-e5913010
-e2030001
+e1a0c00d
+e92dd800
+e24cb004
+e24dd00c
+e50b0010
+e50b1014
+e51b3010
+e3530000
+1a000002
+e3a03000
+e50b3018
+ea00002b
+e51b3010
+e3530001
+1a000007
+e51b3014
+e5933010
+e2033004
+e3530000
+13a03000
+03a03001
+e50b3018
+ea000020
+e51b3010
+e3530002
+1a000004
+e51b3014
+e5933010
+e2033004
+e50b3018
+ea000018
+e51b3010
+e3530003
+1a000004
+e51b3014
+e5933010
+e2033001
+e50b3018
+ea000010
+e51b3010
+e3530004
+1a000004
+e51b3014
+e5933010
+e2033002
+e50b3018
+ea000008
+e51b3010
+e3530007
+1a000002
+e3a03001
+e50b3018
+ea000002
+ebffff1f
+e1a03000
+e50b3018
+e51b3018
+e1a00003
+e24bd00c
 e89da800
-00001384
 e1a0c00d
-e92ddff0
+e92dd800
 e24cb004
-e3a0a000
-e24dd01c
-e59f9354
-e24b5044
-e50ba030
-e50ba044
-e50ba040
-e50ba03c
-e50ba038
-e50ba034
-e50ba02c
-e5951014
-e1a0000a
-e7993101
-e5951000
-e1a024c3
-e1a0c243
-e1a04643
-e2026007
-e20c800f
-e203700f
-ebffff8a
-e5951004
-ebffff88
-e5951008
-ebffff86
-e595100c
-ebffff84
-e5951010
-ebffff82
-e5951018
-ebffff80
-e5951014
-ebffff7e
-e3540000
-e1a0a000
-0a000018
-e3540001
-0a000029
-e3540002
-0a000037
-e3540003
-0a000049
-e3540004
-0a000055
-e3540005
-0a000069
-e3540006
-0a000082
-e3540007
-0a000093
-e354000f
-1affffd5
-e59f328c
-e1500003
-059f0288
+e24dd040
+e24b304c
+e50b3030
+e3a03000
+e50b302c
+e3a03000
+e50b3028
+e3a03000
+e50b3024
+e51b2030
+e3a03000
+e5823014
+e51b2030
+e3a03000
+e5823000
+e51b2030
+e3a03000
+e5823004
+e51b2030
+e3a03000
+e5823008
+e51b2030
+e3a03000
+e582300c
+e51b2030
+e3a03000
+e5823010
+e51b2030
+e3a03000
+e5823018
+ebffff00
+e1a03000
+e50b3010
+ea000154
+e51b3030
+e5933014
+e1a02103
+e51b3010
+e0833002
+e5933000
+e50b3028
+e51b3028
+e1a03643
+e50b3024
+e51b3028
+e1a034c3
+e2033007
+e50b3020
+e51b3028
+e1a03243
+e203300f
+e50b301c
+e51b3028
+e203300f
+e50b3018
+e51b3030
+e5933000
+e51b002c
+e1a01003
+ebfffeea
+e1a03000
+e50b302c
+e51b3030
+e5933004
+e51b002c
+e1a01003
+ebfffee3
+e1a03000
+e50b302c
+e51b3030
+e5933008
+e51b002c
+e1a01003
+ebfffedc
+e1a03000
+e50b302c
+e51b3030
+e593300c
+e51b002c
+e1a01003
+ebfffed5
+e1a03000
+e50b302c
+e51b3030
+e5933010
+e51b002c
+e1a01003
+ebfffece
+e1a03000
+e50b302c
+e51b3030
+e5933018
+e51b002c
+e1a01003
+ebfffec7
+e1a03000
+e50b302c
+e51b3030
+e5933014
+e51b002c
+e1a01003
+ebfffec0
+e1a03000
+e50b302c
+e51b3024
+e3530000
+1a000021
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebffff4d
+e1a03000
+e3530000
+1a000005
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+ea0000fa
+e51b3030
+e5933014
+e1a02103
+e51b3010
+e0833002
+e5933000
+e50b3014
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b001c
+e51b1014
+e51b2030
+ebfffeff
+ea0000e9
+e51b3024
+e3530001
+1a000018
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebffff28
+e1a03000
+e3530000
+0a0000db
+e51b0018
+e51b1030
+ebfffeaf
+e1a03000
+e1a02103
+e51b3010
+e0833002
+e5933000
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffee3
+ea0000cd
+e51b3024
+e3530002
+1a00001c
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebffff0c
+e1a03000
+e3530000
+0a0000bf
+e51b0018
+e51b1030
+ebfffe93
+e1a03000
+e50b3014
+e51b001c
+e51b1030
+ebfffe8e
+e1a03000
+e3530901
 0a000001
-ebfffc64
-e59f0280
-ebfffc56
-e24bd028
-e89daff0
-e5957014
-e1a00006
-e2874001
-e1a01005
-e5854014
-ebffff99
-e3500000
-05953014
-02833001
-05853014
-0affffc1
-e595e014
-e1a00008
-e28e6001
-e799110e
-e1a02005
-e5856014
-ebffff77
-eaffffb9
-e595c014
-e1a00006
-e28c3001
-e1a01005
-e5853014
-ebffff86
-e3500000
-0affffb1
-e1a01005
-e1a00007
-ebffff4e
-e7991100
-e1a00008
-e1a02005
-ebffff67
-eaffffa9
-e5951014
-e1a00006
-e2812001
-e1a01005
-e5852014
-ebffff76
-e3500000
-0affffa1
-e1a01005
-e1a00007
-ebffff3e
-e1a01005
-e1a04000
-e1a00008
-ebffff3a
-e3500901
-1a000064
-e20400ff
-ebfffc16
-eaffff95
-e595e014
-e1a00006
-e28e4001
-e1a01005
-e5854014
-ebffff62
-e3500000
-0affff8d
-e1a01005
-e1a00007
-ebffff2a
-e1a01000
-e1a00008
-eaffffda
-e5953014
-e1a00006
-e1a01005
-e2836001
-e5856014
-ebffff54
-e3500000
-0affff7f
-e1a00007
-e1a01005
-ebffff1c
-e1a01005
-e1a04000
-e1a00008
-ebffff18
-e084c000
-e1a0080c
-e1a07820
-e1a01007
-e1a00008
-e1a02005
-eaffffc5
-e5951014
-e1a00006
-e2812001
-e1a01005
-e5852014
-ebffff3e
-e3500000
-0affff69
-e1a01005
-e1a00007
-ebffff06
-e1a01005
-e1a06000
-e1a00008
-ebffff02
-e060e006
-e35e0000
-e3a02000
-e1a08002
-02822004
-01a08002
-c3882001
-c1a08002
-b3888002
-b5858010
-a5852010
-eaffff56
-e595c014
-e1a00006
-e28c3001
-e1a01005
-e5853014
-ebffff23
-e3500000
-0affff4e
-e1a00007
-e1a01005
-ebfffeeb
-e1a01005
-e1a04000
-e1a00008
-ebfffee7
-e0047000
-e1a01007
-e1a00008
-eaffff96
-e5951014
-e1a00006
-e2812001
-e1a01005
-e5852014
-ebffff10
-e3500000
-0affff3b
-e1a01005
-e1a00008
-ebfffed8
-e1e0e000
-e1a0080e
-e1a01820
-e1a00008
-eaffff86
+ebfffe53
+ea0000c1
+e51b3014
+e20330ff
+e1a00003
+ebfffb0d
+ea0000ad
+e51b3024
+e3530003
+1a000014
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffeec
+e1a03000
+e3530000
+0a00009f
+e51b0018
+e51b1030
+ebfffe73
+e1a03000
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffeab
+ea000095
+e51b3024
+e3530004
+1a00001f
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffed4
+e1a03000
+e3530000
+0a000087
+e51b0018
+e51b1030
+ebfffe5b
+e1a03000
+e50b3014
+e51b001c
+e51b1030
+ebfffe56
+e1a02000
+e51b3014
+e0833002
+e50b3014
+e51b3014
+e1a03803
+e1a03823
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffe88
+ea000072
+e51b3024
+e3530005
+1a000032
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffeb1
+e1a03000
+e3530000
+0a000064
+e51b0018
+e51b1030
+ebfffe38
+e1a03000
+e50b3014
+e51b001c
+e51b1030
+ebfffe33
+e1a02000
+e51b3014
+e0623003
+e50b3014
+e51b2030
+e3a03000
+e5823010
+e51b3014
+e3530000
+1a000004
+e51b3030
+e5933010
+e3832004
+e51b3030
+e5832010
+e51b3014
+e3530000
+da000004
+e51b3030
+e5933010
+e3832001
+e51b3030
+e5832010
+e51b3014
+e3530000
+aa000042
+e51b3030
+e5933010
+e3832002
+e51b3030
+e5832010
+ea00003c
+e51b3024
+e3530006
+1a00001b
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffe7b
+e1a03000
+e3530000
+0a00002e
+e51b0018
+e51b1030
+ebfffe02
+e1a03000
+e50b3014
+e51b001c
+e51b1030
+ebfffdfd
+e1a02000
+e51b3014
+e0033002
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffe33
+ea00001d
+e51b3024
+e3530007
+1a00001a
+e51b3030
+e5933014
+e2832001
+e51b3030
+e5832014
+e51b0020
+e51b1030
+ebfffe5c
+e1a03000
+e3530000
+0a00000f
+e51b001c
+e51b1030
+ebfffde3
+e1a03000
+e50b3014
+e51b3014
+e1e03003
+e50b3014
+e51b3014
+e1a03803
+e1a03823
+e50b3014
+e51b001c
+e51b1014
+e51b2030
+ebfffe14
+e51b3024
+e353000f
+1afffea7
+e51b202c
+e59f302c
+e1520003
+0a000005
+e51b302c
+e1a00003
+ebfffa78
+e59f0018
+ebfffa63
+ea000001
 e59f0010
-eaffff61
-00001428
+ebfffa60
+e24bd00c
+e89da800
 ee861173
-00001358
-00001394
-00001384
+00001a58
+00001a14
 e1a0c00d
-e92dd810
-e2504000
+e92dd800
 e24cb004
-e2440001
-e3a03001
-1a000001
+e24dd008
+e50b0010
+e51b3010
+e3530000
+1a000002
+e3a01001
+e50b1014
+ea000007
+e51b3010
+e2433001
 e1a00003
-e89da810
-ebfffff5
-e0030094
+ebfffff0
+e1a02000
+e51b3010
+e0010293
+e50b1014
+e51b3014
 e1a00003
-e89da810
+e24bd00c
+e89da800
 e1a0c00d
 e92dd800
-e3a00009
 e24cb004
-ebffffed
-e3a0100a
-e0020190
-e59f3010
-e59f0010
+e3a0000a
+ebffffe3
+e1a02000
+e3a039dd
+e2833c1f
 e1520003
-059f000c
-e89d6800
-eafffb9a
-00375f00
-00001350
-00001358
+0a000002
+e59f0010
+ebfffa38
+ea000001
+e59f0008
+ebfffa35
+e89da800
+00001a40
+00001a14
+e1a0c00d
+e92dd800
+e24cb004
+e24dd004
 e1a0300e
 eb000009
 e1a00000
@@ -1159,75 +1529,136 @@ e89da800
 e0000291
 e1a00000
 e1a00000
-e1a0f00e
+e89da808
 e1a0c00d
-e92dd810
+e92dd800
 e24cb004
-ebffffe4
-e1a04000
-e3540722
-e59f001c
-059f001c
-0a000003
-ebfffb76
-e1a00004
-ebfffb80
+e24dd004
+ebffffe3
+e1a03000
+e50b3010
+e51b3010
+e3530722
+0a000007
+e59f0024
+ebfffa0b
+e51b3010
+e1a00003
+ebfffa1b
+e59f0014
+ebfffa06
+ea000001
 e59f000c
-e89d6810
-eafffb71
-0000139c
-00001358
-00001354
+ebfffa03
+e89da808
+00001a60
+00001a74
+00001a14
 e1a0c00d
-e92dd810
-e59f406c
+e92dd800
 e24cb004
+e24dd004
+e3a03102
+e2833801
+e50b3010
+e59f00c4
+ebfff9f6
+e51b2010
+e59f30bc
+e5823000
+e51b3010
+e2832004
+e59f30b0
+e5823000
+e51b3010
+e2832008
+e3a03c55
+e2833055
+e1833883
+e5823000
+e51b3010
+e283200c
+e3a03caa
+e28330aa
+e1833783
+e5823000
+e59f007c
+ebfff9e1
+e51b3010
+e2832901
+e3a03000
+e5823000
 e59f0068
-ebfffb68
-e5943000
-e3530000
-0a000009
+ebfff9db
+e51b3010
+e5933000
+e1a00003
+ebfff9ea
+e51b3010
+e2833004
+e5933000
+e1a00003
+ebfff9e5
+e51b3010
+e2833008
+e5933000
+e1a00003
+ebfff9e0
+e51b3010
+e283300c
+e5933000
+e1a00003
+ebfff9db
+e59f0018
+ebfff9c6
+e89da808
+00001a78
+12345678
+87654321
+00001a84
+00001a94
+00001aa0
+e1a0c00d
+e92dd800
+e24cb004
+e24dd004
+e59f0078
+ebfff9b9
+e59f3074
+e50b3010
+ea00000e
+e59f006c
+ebfff9b4
+e51b3010
+e5933000
+e1a00003
+ebfff9b0
 e59f0058
-ebfffb63
-e5940000
-ebfffb61
-e59f004c
-ebfffb5f
+ebfff9ae
+e51b3010
+e5933004
 e1a0e00f
-e594f004
-e5b43008
-eafffff3
-e59f0038
-ebfffb59
-ee113531
-e3130c01
-e20300ff
-0afffffb
-ebfffb4c
-ee113531
-e3130c01
-e20300ff
-0afffff6
+e1a0f003
+e51b3010
+e2833008
+e50b3010
+e51b3010
+e5933000
+e3530000
+1affffec
+e59f0028
+ebfff9a1
+ebfff992
+e1a03000
+e20330ff
+e1a00003
+ebfff98b
 eafffff9
-000013f0
-000013b0
-000013c4
-000013d0
-000013d4
-206d646c
-6d2f6370
-00006c75
-74636166
-00000000
-6263346a
-0000006f
-006b6361
-696e696d
-72616c62
-00000067
-65726f63
-73727563
-00000065
+00001ae8
+00001b70
+00001afc
+00001b08
+00001b0c
 33323130
 37363534
 42413938
@@ -1248,6 +1679,8 @@ eafffff9
 23206574
 00000000
 4c494146
+0000000a
+4c494146
 62615b20
 5d74726f
 0000000a
@@ -1258,6 +1691,35 @@ eafffff9
 746c7573
 73617720
 00000020
+0000000a
+6972775b
+676e6974
+0000205d
+6361635b
+66206568
+6873756c
+0000205d
+6165725b
+676e6964
+0000203a
+00000a5d
+206d646c
+6d2f6370
+00006c75
+74636166
+00000000
+6263346a
+0000006f
+6c6c6563
+72616c75
+006d6172
+006b6361
+696e696d
+72616c62
+00000067
+65726f63
+73727563
+00000065
 74736554
 636e6562
 75722068
@@ -1274,20 +1736,6 @@ eafffff9
 63617261
 73726574
 00000a2e
-00001300
-00001228
-0000130c
-0000118c
-00001314
-00000b44
-0000131c
-000000f8
-00001320
-00000dd4
-0000132c
-00000be4
-00000000
-00000000
 00000e30
 00000009
 00000e00
@@ -1306,468 +1754,20 @@ eafffff9
 0000000a
 00002e10
 0000ffff
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
-00000000
+00001aa4
+000017f0
+00001ab0
+0000173c
+00001ab8
+00000b74
+00001ac0
+00001850
+00001acc
+000001b4
+00001ad0
+000010a8
+00001adc
+00000ca4
 00000000
 00000000
 00000000
diff --git a/xst/Console.nexys2.v b/xst/Console.nexys2.v
new file mode 100644 (file)
index 0000000..bf42439
--- /dev/null
@@ -0,0 +1,406 @@
+module MulDivDCM(input xtal, output clk);
+       parameter div = 5;
+       parameter mul = 2;
+       
+       wire CLKFX_BUF;
+       wire GND_BIT = 0;
+       BUFG CLKFX_BUFG_INST (.I(CLKFX_BUF),
+                               .O(clk));
+       DCM_SP DCM_SP_INST (.CLKFB(GND_BIT), 
+                       .CLKIN(xtal), 
+                       .DSSEN(GND_BIT), 
+                       .PSCLK(GND_BIT), 
+                       .PSEN(GND_BIT), 
+                       .PSINCDEC(GND_BIT), 
+                       .RST(GND_BIT), 
+                       .CLKFX(CLKFX_BUF));
+       defparam DCM_SP_INST.CLK_FEEDBACK = "NONE";
+       defparam DCM_SP_INST.CLKDV_DIVIDE = 2.0;
+       defparam DCM_SP_INST.CLKFX_DIVIDE = div;
+       defparam DCM_SP_INST.CLKFX_MULTIPLY = mul;
+       defparam DCM_SP_INST.CLKIN_DIVIDE_BY_2 = "FALSE";
+       defparam DCM_SP_INST.CLKIN_PERIOD = 20.000;
+       defparam DCM_SP_INST.CLKOUT_PHASE_SHIFT = "NONE";
+       defparam DCM_SP_INST.DESKEW_ADJUST = "SYSTEM_SYNCHRONOUS";
+       defparam DCM_SP_INST.DFS_FREQUENCY_MODE = "LOW";
+       defparam DCM_SP_INST.DLL_FREQUENCY_MODE = "LOW";
+       defparam DCM_SP_INST.DUTY_CYCLE_CORRECTION = "TRUE";
+       defparam DCM_SP_INST.FACTORY_JF = 16'hC080;
+       defparam DCM_SP_INST.PHASE_SHIFT = 0;
+       defparam DCM_SP_INST.STARTUP_WAIT = "TRUE";
+endmodule
+
+module Console(
+       input xtal,
+       input rst,
+       output wire rstact,
+       output wire vs, hs,
+       output wire [2:0] r, g,
+       output wire [1:0] b,
+       input ps2c, ps2d,
+       output wire cr_nADV, cr_nCE, cr_nOE, cr_nWE, cr_CRE, cr_nLB, cr_nUB, cr_CLK,
+       inout wire [15:0] cr_DQ,
+       output wire [22:0] cr_A,
+       output wire st_nCE);
+       
+       wire pixclk, coreclk;
+
+       wire [11:0] x, y;
+       wire border;
+
+       assign coreclk = pixclk;
+       MulDivDCM dcm31_25(xtal, pixclk);
+       defparam dcm31_25.div = 4;
+       defparam dcm31_25.mul = 2;
+       
+       SyncGen sync(pixclk, vs, hs, x, y, border);
+       
+       wire [7:0] cschar;
+       wire [2:0] csrow;
+       wire [7:0] csdata;
+       
+       wire [10:0] vraddr;
+       wire [7:0] vrdata;
+       
+       wire [10:0] vwaddr;
+       wire [7:0] vwdata;
+       wire [7:0] serdata;
+       wire vwr, serwr;
+       wire [10:0] vscroll;
+       
+       wire odata;
+       
+       wire [6:0] vcursx;
+       wire [4:0] vcursy;
+       
+       reg [16:0] rsttimer = 17'h3FFFF;
+       always @(posedge coreclk)
+               if (rst)
+                       rsttimer <= 17'h3FFFF;
+               else if (rsttimer)
+                       rsttimer <= rsttimer - 1;
+       assign rstact = rsttimer != 17'h0;
+       
+       wire tookdata;
+       reg ps2_hasd = 0;
+       reg [7:0] ps2_d = 0;
+       wire sertxwr;
+       wire [7:0] sertxdata;
+       
+       CharSet cs(cschar, csrow, csdata);
+       VideoRAM vram(pixclk, vraddr + vscroll, vrdata, coreclk, vwaddr, vwdata, vwr);
+       VDisplay dpy(pixclk, x, y, vraddr, vrdata, cschar, csrow, csdata, vcursx, vcursy, odata);
+       RXState rxsm(coreclk, vwr, vwaddr, vwdata, vscroll, vcursx, vcursy, serwr, serdata);
+       PS2 ps2(coreclk, ps2c, ps2d, sertxwr, sertxdata);
+       System sys(.clk(coreclk), .rst(rstact), .sys_odata({serwr, serdata}), .sys_idata({ps2_hasd, ps2_d}), .sys_tookdata(tookdata),
+               .cr_nADV        (cr_nADV),
+               .cr_nCE         (cr_nCE),
+               .cr_nOE         (cr_nOE),
+               .cr_nWE         (cr_nWE),
+               .cr_CRE         (cr_CRE),
+               .cr_nLB         (cr_nLB),
+               .cr_nUB         (cr_nUB),
+               .cr_CLK         (cr_CLK),
+               .cr_A           (cr_A),
+               .st_nCE         (st_nCE),
+               .cr_DQ          (cr_DQ));
+       
+       always @(posedge coreclk)
+               if (sertxwr)
+                       {ps2_hasd, ps2_d} <= {1'b1, sertxdata};
+               else if (tookdata)
+                       {ps2_hasd, ps2_d} <= {1'b0, 8'hxxxxxxxx};
+       
+       wire [7:0] red, green, blue;
+       assign r = (odata ? 3'b111 : 0) | (x[8:7] ^ y[7:6]);
+       assign g = (odata ? 3'b111 : 0) | (x[7:6] ^ y[8:7]);
+       assign b = (odata ?  2'b11 : 0) | (x[8  ] ^ y[8  ]);
+endmodule
+
+module SyncGen(
+       input pixclk,
+       output reg vs, hs,
+       output reg [11:0] x, y,
+       output reg border);
+       
+       parameter XRES = 640;
+       parameter XFPORCH = 16;
+       parameter XSYNC = 96;
+       parameter XBPORCH = 48;
+       
+       parameter YRES = 480;
+       parameter YFPORCH = 10;
+       parameter YSYNC = 2;
+       parameter YBPORCH = 29;
+       
+       always @(posedge pixclk)
+       begin
+               if (x >= (XRES + XFPORCH + XSYNC + XBPORCH))
+               begin
+                       if (y >= (YRES + YFPORCH + YSYNC + YBPORCH))
+                               y = 0;
+                       else
+                               y = y + 1;
+                       x = 0;
+               end else
+                       x = x + 1;
+               hs <= (x >= (XRES + XFPORCH)) && (x < (XRES + XFPORCH + XSYNC));
+               vs <= (y >= (YRES + YFPORCH)) && (y < (YRES + YFPORCH + YSYNC));
+               border <= (x > XRES) || (y > YRES);
+       end
+endmodule
+
+module CharSet(
+       input [7:0] char,
+       input [2:0] row,
+       output wire [7:0] data);
+
+       reg [7:0] rom [(256 * 8 - 1):0];
+       
+       initial
+               $readmemb("ibmpc1.mem", rom);
+
+       assign data = rom[{char, row}];
+endmodule
+
+module VideoRAM(
+       input pixclk,
+       input [10:0] raddr,
+       output reg [7:0] rdata,
+       input wclk,
+       input [10:0] waddr,
+       input [7:0] wdata,
+       input wr);
+       
+       reg [7:0] ram [2047 : 0];
+       
+       always @(posedge pixclk)
+               rdata <= ram[raddr];
+       
+       always @(posedge wclk)
+               if (wr)
+                       ram[waddr] <= wdata;
+endmodule
+
+module VDisplay(
+       input pixclk,
+       input [11:0] x,
+       input [11:0] y,
+       output wire [10:0] raddr,
+       input [7:0] rchar,
+       output wire [7:0] cschar,
+       output wire [2:0] csrow,
+       input [7:0] csdata,
+       input [6:0] cursx,
+       input [4:0] cursy,
+       output reg data);
+
+       wire [7:0] col = x[11:3];
+       wire [5:0] row = y[10:4];
+       reg [7:0] ch;
+       reg [11:0] xdly;
+
+       assign raddr = ({row,4'b0} + {row,6'b0} + {4'h0,col});
+       assign cschar = rchar;
+       assign csrow = y[3:1];
+       
+       reg [23:0] blinktime = 0;
+       
+       always @(posedge pixclk) blinktime <= blinktime + 1;
+       
+       wire curssel = (cursx == col) && (cursy == row) && blinktime[23];
+       
+       always @(posedge pixclk)
+               xdly <= x;
+       
+       always @(posedge pixclk)
+               data = ((xdly < 80 * 8) && (y < 25 * 16)) ? (csdata[7 - xdly[2:0]] ^ curssel) : 0;
+endmodule
+
+module RXState(
+       input clk25,
+       output reg vwr = 0,
+       output reg [10:0] vwaddr = 0,
+       output reg [7:0] vwdata = 0,
+       output reg [10:0] vscroll = 0,
+       output wire [6:0] vcursx,
+       output wire [4:0] vcursy,
+       input serwr,
+       input [7:0] serdata);
+
+       parameter STATE_IDLE = 4'b0000;
+       parameter STATE_NEWLINE = 4'b0001;
+       parameter STATE_CLEAR = 4'b0010;
+
+       reg [3:0] state = STATE_CLEAR;
+       
+       reg [6:0] x = 0;
+       reg [4:0] y = 0;
+       
+       assign vcursx = x;
+       assign vcursy = y;
+       
+       reg [10:0] clearstart = 0;
+       reg [10:0] clearend = 11'b11111111111;
+       
+       always @(posedge clk25)
+               case (state)
+               STATE_IDLE:     if (serwr) begin
+                                       if (serdata == 8'h0A) begin
+                                               state <= STATE_NEWLINE;
+                                               x <= 0;
+                                               vwr <= 0;
+                                       end else if (serdata == 8'h0D) begin
+                                               x <= 0;
+                                               vwr <= 0;
+                                       end else if (serdata == 8'h0C) begin
+                                               clearstart <= 0;
+                                               clearend <= 11'b11111111111;
+                                               x <= 0;
+                                               y <= 0;
+                                               vscroll <= 0;
+                                               state <= STATE_CLEAR;
+                                       end else if (serdata == 8'h08) begin
+                                               if (x != 0)
+                                                       x <= x - 1;
+                                               vwr <= 0;
+                                       end else begin
+                                               vwr <= 1;
+                                               vwaddr <= ({y,4'b0} + {y,6'b0} + {4'h0,x}) + vscroll;
+                                               vwdata <= serdata;
+                                               if (x == 79) begin
+                                                       x <= 0;
+                                                       state <= STATE_NEWLINE;
+                                               end else 
+                                                       x <= x + 1;
+                                       end
+                               end
+               STATE_NEWLINE:
+                       begin
+                               vwr <= 0;
+                               if (y == 24) begin
+                                       vscroll <= vscroll + 80;
+                                       clearstart <= (25 * 80) + vscroll;
+                                       clearend <= (26*80) + vscroll;
+                                       state <= STATE_CLEAR;
+                               end else begin
+                                       y <= y + 1;
+                                       state <= STATE_IDLE;
+                               end
+                       end
+               STATE_CLEAR:
+                       begin
+                               vwr <= 1;
+                               vwaddr <= clearstart;
+                               vwdata <= 8'h20;
+                               clearstart <= clearstart + 1;
+                               if (clearstart == clearend)
+                                       state <= STATE_IDLE;
+                       end
+               endcase
+endmodule
+
+module PS2(
+       input pixclk,
+       input inclk,
+       input indata,
+       output reg wr,
+       output reg [7:0] data
+       );
+
+       reg [3:0] bitcount = 0;
+       reg [7:0] key = 0;
+       reg keyarrow = 0, keyup = 0, parity = 0;
+
+       
+       /* Clock debouncing */
+       reg lastinclk = 0;
+       reg [6:0] debounce = 0;
+       reg fixedclk = 0;
+       reg [11:0] resetcountdown = 0;
+       
+       reg [6:0] unshiftedrom [127:0]; initial $readmemh("scancodes.unshifted.hex", unshiftedrom);
+       reg [6:0] shiftedrom [127:0];   initial $readmemh("scancodes.shifted.hex", shiftedrom);
+       
+       reg mod_lshift = 0;
+       reg mod_rshift = 0;
+       reg mod_capslock = 0;
+       wire mod_shifted = (mod_lshift | mod_rshift) ^ mod_capslock;
+       
+       reg nd = 0;
+       reg lastnd = 0;
+       
+       always @(posedge pixclk) begin
+               if (inclk != lastinclk) begin
+                       lastinclk <= inclk;
+                       debounce <= 1;
+                       resetcountdown <= 12'b111111111111;
+               end else if (debounce == 0) begin
+                       fixedclk <= inclk;
+                       resetcountdown <= resetcountdown - 1;
+               end else
+                       debounce <= debounce + 1;
+               
+               if (nd ^ lastnd) begin
+                       lastnd <= nd;
+                       wr <= 1;
+               end else
+                       wr <= 0;
+       end
+
+       always @(negedge fixedclk) begin
+               if (resetcountdown == 0)
+                       bitcount <= 0;
+               else if (bitcount == 10) begin
+                       bitcount <= 0;
+                       if(parity != (^ key)) begin
+                               if(keyarrow) begin
+                                       casex(key)
+                                               8'hF0: keyup <= 1;
+                                               8'hxx: keyarrow <= 0;
+                                       endcase
+                               end
+                               else begin
+                                       if(keyup) begin
+                                               keyup <= 0;
+                                               keyarrow <= 0;
+                                               casex (key)
+                                               8'h12: mod_lshift <= 0;
+                                               8'h59: mod_rshift <= 0;
+                                               endcase
+                                               // handle this? I don't fucking know
+                                       end
+                                       else begin
+                                               casex(key)
+                                                       8'hE0: keyarrow <= 1;   // handle these? I don't fucking know
+                                                       8'hF0: keyup <= 1;
+                                                       8'h12: mod_lshift <= 1;
+                                                       8'h59: mod_rshift <= 1;
+                                                       8'h14: mod_capslock <= ~mod_capslock;
+                                                       8'b0xxxxxxx: begin nd <= ~nd; data <= mod_shifted ? shiftedrom[key] : unshiftedrom[key]; end
+                                                       8'b1xxxxxxx: begin /* AAAAAAASSSSSSSS */ end
+                                               endcase
+                                       end
+                               end
+                       end
+                       else begin
+                               keyarrow <= 0;
+                               keyup <= 0;
+                       end
+               end else
+                       bitcount <= bitcount + 1;
+
+               case(bitcount)
+                       1: key[0] <= indata;
+                       2: key[1] <= indata;
+                       3: key[2] <= indata;
+                       4: key[3] <= indata;
+                       5: key[4] <= indata;
+                       6: key[5] <= indata;
+                       7: key[6] <= indata;
+                       8: key[7] <= indata;
+                       9: parity <= indata;
+               endcase
+       end
+
+endmodule
index d26adb9..e0c4f58 100644 (file)
@@ -1,33 +1,77 @@
-NET "xtal" LOC="ah15" | CLOCK_DEDICATED_ROUTE = FALSE | TNM_NET = xtal;
-TIMESPEC "TS_xtal"=PERIOD "xtal" 100 MHz HIGH 50%;
-
-NET "dvi_d<11>" LOC="AN14" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<10>" LOC="AP14" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<9>" LOC="AB10" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<8>" LOC="AA10" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<7>" LOC="AN13" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<6>" LOC="AM13" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<5>" LOC="AA8" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<4>" LOC="AA9" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<3>" LOC="AP12" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<2>" LOC="AN12" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<1>" LOC="AC8" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_d<0>" LOC="AB8" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_xclk_p" LOC="AL11" | TNM="dvi_c" | IOSTANDARD=LVDCI_33;
-NET "dvi_xclk_n" LOC="AL10" | TNM="dvi_c" | IOSTANDARD=LVDCI_33;
-NET "dvi_hs" LOC="AM12" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_vs" LOC="AM11" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_de" LOC="AE8" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-NET "dvi_reset_b" LOC="AK6" | TNM="dvi_d" | IOSTANDARD=LVDCI_33;
-
-NET "dvi_scl" LOC="u27" | SLEW=fast | PULLUP;
-NET "dvi_sda" LOC="t29" | SLEW=fast | PULLUP;
-
-TIMESPEC "TS_dvi_setup" = FROM dvi_c TO dvi_d 500 ps;
-TIMESPEC "TS_dvi_hold" = FROM dvi_d TO dvi_c 500 ps;
-
-NET "rst" LOC="E9";
-NET "rstact" LOC="F6";
-
-NET "ps2c" LOC="T26" | CLOCK_DEDICATED_ROUTE = FALSE;
-NET "ps2d" LOC="T25";
+NET "xtal" LOC="B8" | CLOCK_DEDICATED_ROUTE = FALSE | TNM_NET = xtal;
+TIMESPEC "TS_xtal"=PERIOD "xtal" 50 MHz HIGH 50%;
+//NET "coreclk" TNM = coreclk;
+
+//TIMESPEC TSctl = FROM coreclk TO CR_CTL 5ns;
+//TIMESPEC TSdatao = FROM coreclk TO CR_DATA 5ns;
+//TIMESPEC TSdatai = FROM CR_DATA TO coreclk 5ns;
+//TIMESPEC TSaddr = FROM coreclk TO CR_ADDR 5ns;
+
+NET "cr_nADV" LOC="J4" | SLEW="fast" | TNM = CR_CTL;
+NET "cr_nCE" LOC="R6" | SLEW="fast" | TNM = CR_CTL;
+NET "cr_nOE" LOC="T2" | SLEW="fast" | TNM = CR_CTL;
+NET "cr_nWE" LOC="N7" | SLEW="fast" | TNM = CR_CTL;
+NET "cr_CRE" LOC="P7" | SLEW="fast" | TNM = CR_CTL;
+NET "cr_nLB" LOC="K5" | SLEW="fast" | TNM = CR_CTL;
+NET "cr_nUB" LOC="K4" | SLEW="fast" | TNM = CR_CTL;
+NET "cr_CLK" LOC="H5" | SLEW="fast" | TNM = CR_CTL;
+
+NET "cr_DQ<0>" LOC="L1" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<1>" LOC="L4" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<2>" LOC="L6" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<3>" LOC="M4" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<4>" LOC="N5" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<5>" LOC="P1" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<6>" LOC="P2" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<7>" LOC="R2" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<8>" LOC="L3" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<9>" LOC="L5" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<10>" LOC="M3" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<11>" LOC="M6" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<12>" LOC="L2" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<13>" LOC="N4" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<14>" LOC="R3" | SLEW="fast" | TNM = CR_DATA;
+NET "cr_DQ<15>" LOC="T1" | SLEW="fast" | TNM = CR_DATA;
+
+NET "cr_A<0>" LOC="J1" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<1>" LOC="J2" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<2>" LOC="H4" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<3>" LOC="H1" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<4>" LOC="H2" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<5>" LOC="J5" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<6>" LOC="H3" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<7>" LOC="H6" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<8>" LOC="F1" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<9>" LOC="G3" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<10>" LOC="G6" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<11>" LOC="G5" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<12>" LOC="G4" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<13>" LOC="F2" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<14>" LOC="E1" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<15>" LOC="M5" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<16>" LOC="E2" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<17>" LOC="C2" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<18>" LOC="C1" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<19>" LOC="D2" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<20>" LOC="K3" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<21>" LOC="D1" | SLEW="fast" | TNM = CR_ADDR;
+NET "cr_A<22>" LOC="K6" | SLEW="fast" | TNM = CR_ADDR;
+NET "st_nCE" LOC="R5" | SLEW="fast" | TNM = CR_CTL;
+
+NET "vs" LOC = "u3" |SLEW = "fast";
+NET "hs" LOC = "t4" |SLEW = "fast";
+NET "r<2>" LOC = "r8";
+NET "r<1>" LOC = "t8";
+NET "r<0>" LOC = "r9";
+NET "g<2>" LOC = "p6";
+NET "g<1>" LOC = "p8";
+NET "g<0>" LOC = "n8";
+NET "b<1>" LOC = "u4";
+NET "b<0>" LOC = "u5";
+
+NET "rst" LOC="H13";
+NET "rstact" LOC="J14";
+
+NET "ps2c" LOC="R12" | CLOCK_DEDICATED_ROUTE = FALSE;
+NET "ps2d" LOC="P11";
+
index 01b1093..5850e94 100644 (file)
@@ -5,7 +5,7 @@ run
 -ifmt mixed
 -ofn FireARM
 -ofmt NGC
--p xc5vlx110t-1-ff1136
+-p xc3s1200e-5-fg320
 -top Console
 -opt_mode Speed
 -opt_level 1
index e4cd3a3..1c86905 100644 (file)
@@ -1,8 +1,9 @@
 TARGET = FireARM
-VLOGS = Console.v \
+VLOGS = Console.nexys2.v \
         ../ARM_Constants.v \
         ../BigBlockRAM.v \
         ../BlockRAM.v \
+        ../CellularRAM.v \
         ../BusArbiter.v \
         ../DCache.v \
         ../Decode.v \
@@ -41,7 +42,7 @@ BITGEN_OPTS = \
        -g Match_cycle:2 \
        -g DriveDone:No
 
-fpga_target: $(TARGET).bit
+fpga_target: $(TARGET).svf
 
 $(TARGET).ngc: $(TARGET).xst $(VLOGS_ALL)
        @mkdir -p xst/projnav.tmp
@@ -71,10 +72,10 @@ sim/%.v: %.ngc
        netgen -ofmt verilog -w -dir sim $<
 
 $(TARGET).ngd: $(TARGET).ngc $(TARGET).ucf
-       ngdbuild -dd _ngo -uc $(TARGET).ucf -nt timestamp -p xc5vlx110t-ff1136-1 "$(TARGET).ngc" $(TARGET).ngd
+       ngdbuild -dd _ngo -uc $(TARGET).ucf -nt timestamp -p xc3s1200e-fg320-5 "$(TARGET).ngc" $(TARGET).ngd
 
 $(TARGET)_map.ncd: $(TARGET).ngd
-       map -w -p xc5vlx110t-ff1136-1 -cm area -pr off -k 4 -c 100 -o $(TARGET)_map.ncd $(TARGET).ngd $(TARGET).pcf
+       map -w -p xc3s1200e-fg320-5 -cm area -pr off -k 4 -c 100 -o $(TARGET)_map.ncd $(TARGET).ngd $(TARGET).pcf
 
 $(TARGET).ncd: $(TARGET)_map.ncd
        par -w -ol std -t 1 $(TARGET)_map.ncd $(TARGET).ncd $(TARGET).pcf
This page took 0.176855 seconds and 4 git commands to generate.