OpenCores
URL https://opencores.org/ocsvn/jt51/jt51/trunk

Subversion Repositories jt51

[/] [jt51/] [trunk/] [contra/] [bus_manager.v] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 gryzor
`timescale 1ns / 1ps
2
 
3
module bus_manager #(parameter RAM_MSB=10)(
4
        input           rst50,
5
        input           clk50,
6
        input           clk_per,
7
        input [7:0] cpu_data_out,
8
        input [7:0] ROM_data_out,
9
        input [7:0]      RAM_data,
10
        input [7:0] jt_data_out,
11
        // Other system elements
12
        input [1:0] sw_sel,
13
        input [7:0]      sound_latch,
14
        output          clear_irq,
15
        // CPU control
16
        output reg [7:0] cpu_data_in,
17
        input [15:0]addr,
18
        input           cpu_vma,
19
        input           cpu_rw,
20
        // select signals
21
        output  reg     RAM_cs,
22
        output  reg     opm_cs_n
23
 
24
);
25
 
26
wire ROM_cs = addr[15];
27
 
28
parameter RAM_START = 16'h6000;
29
parameter RAM_END = RAM_START+(2**(RAM_MSB+1));
30
parameter ROM_START=16'h8000;
31
 
32
wire [15:0] ram_start_contra     = 16'h6000;
33
wire [15:0] ram_end_contra               = 16'h7FFF;
34
wire [15:0] ram_start_ddragon    = 16'h0000;
35
wire [15:0] ram_end_ddragon              = 16'h0FFF;
36
 
37
// wire [15:0] rom_start_addr = ROM_START;
38
// wire [15:0] ym_start_addr    = 16'h2000;
39
// wire [15:0] ym_end_addr              = 16'h2002;
40
reg [15:0] irq_clear_addr;
41
 
42
reg LATCH_rd;
43
 
44
reg     [7:0]    ym_final_d;
45
 
46
always @(*) begin
47
        if( cpu_rw && cpu_vma)
48
                casex( {~opm_cs_n, RAM_cs, ROM_cs, LATCH_rd } )
49
                        4'b1XXX: cpu_data_in <= jt_data_out;
50
                        4'b01XX: cpu_data_in <= RAM_data;
51
                        4'b001X: cpu_data_in <= ROM_data_out;
52
                        4'b0001: cpu_data_in <= sound_latch;
53
                        default: cpu_data_in <= {8{sw_sel[1]}};
54
                endcase
55
        else
56
                cpu_data_in <= 8'h0;
57
end
58
 
59
// RAM
60
wire opm_cs_contra = !addr[15] && !addr[14] && addr[13];
61
wire opm_cs_ddragon= addr>=16'h2800 && addr<=16'h2801;
62
 
63
always @(*)
64
        if( sw_sel[0] ) begin
65
                RAM_cs  <= cpu_vma && (addr>=ram_start_ddragon && addr<=ram_end_ddragon);
66
                opm_cs_n<= !(cpu_vma && opm_cs_ddragon);
67
                LATCH_rd<= cpu_vma && addr==16'h1000; // Sound latch at $1000
68
                irq_clear_addr <= 16'h1000;
69
        end
70
        else begin
71
                RAM_cs  <= cpu_vma && (addr>=ram_start_contra && addr<=ram_end_contra);
72
                opm_cs_n<= !(cpu_vma && opm_cs_contra);
73
                LATCH_rd<= cpu_vma && addr==16'h0; // Sound latch at $0000
74
                irq_clear_addr <= 16'h4000;
75
        end
76
 
77
// Clear IRQ
78
assign clear_irq = (addr==irq_clear_addr) && cpu_vma ? 1'b1 : 1'b0;
79
 
80
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.