basic ROM & SRAM mirroring [refactoring needed]

This commit is contained in:
ikari
2009-09-07 10:47:51 +02:00
parent be0fde297d
commit 66b0f0350e
12 changed files with 151 additions and 23 deletions

View File

@@ -31,7 +31,9 @@ module address(
output IS_ROM, // address mapped as ROM?
input [23:0] AVR_ADDR, // allow address to be set externally
input ADDR_WRITE,
output SRAM_ADDR0
output SRAM_ADDR0,
input [23:0] SAVERAM_MASK,
input [23:0] ROM_MASK
);
reg [22:0] SRAM_ADDR_BUF;
@@ -80,11 +82,11 @@ assign IS_ROM = ( (MAPPER == 3'b000) ? ( (!SNES_ADDR[22]
assign SRAM_ADDR_FULL = (MODE) ? AVR_ADDR
: ((MAPPER == 3'b000) ?
(IS_SAVERAM ? SNES_ADDR[14:0] - 15'h6000
: (SNES_ADDR[22:0] & 23'b00111111111111111111111))
(IS_SAVERAM ? (SNES_ADDR[14:0] - 15'h6000) & SAVERAM_MASK
: (SNES_ADDR[22:0] & ROM_MASK))
:(MAPPER == 3'b001) ?
(IS_SAVERAM ? SNES_ADDR[14:0]
: {1'b0, SNES_ADDR[22:16], SNES_ADDR[14:0]})
(IS_SAVERAM ? SNES_ADDR[14:0] & SAVERAM_MASK
: {1'b0, SNES_ADDR[22:16], SNES_ADDR[14:0]} & ROM_MASK)
: 21'b0);
assign SRAM_BANK = SRAM_ADDR_FULL[22:21];

View File

@@ -36,7 +36,9 @@ module avr_cmd(
output [23:0] addr_out,
output [3:0] mapper,
input endmessage,
input startmessage
input startmessage,
output [23:0] saveram_mask_out,
output [23:0] rom_mask_out
);
reg [3:0] MAPPER_BUF;
@@ -49,6 +51,10 @@ reg [7:0] AVR_DATA_IN_BUF;
reg [1:0] avr_nextaddr_buf;
wire avr_nextaddr;
reg [1:0] SRAM_MASK_IDX;
reg [23:0] SAVERAM_MASK;
reg [23:0] ROM_MASK;
assign spi_data_out = AVR_DATA_IN_BUF;
initial begin
@@ -58,8 +64,6 @@ end
always @(posedge clk) begin
if (cmd_ready) begin
case (cmd_data[7:4])
4'h2:
SRAM_SIZE_BUF <= cmd_data[3:0];
4'h3:
MAPPER_BUF <= cmd_data[3:0];
4'h8:
@@ -78,6 +82,24 @@ always @(posedge clk) begin
32'h4:
ADDR_OUT_BUF[7:0] <= param_data;
endcase
4'h1:
case (spi_byte_cnt)
32'h2:
ROM_MASK[23:16] <= param_data;
32'h3:
ROM_MASK[15:8] <= param_data;
32'h4:
ROM_MASK[7:0] <= param_data;
endcase
4'h2:
case (spi_byte_cnt)
32'h2:
SAVERAM_MASK[23:16] <= param_data;
32'h3:
SAVERAM_MASK[15:8] <= param_data;
32'h4:
SAVERAM_MASK[7:0] <= param_data;
endcase
4'h8:
AVR_DATA_IN_BUF <= avr_data_in;
4'h9:
@@ -114,5 +136,7 @@ assign addr_out = ADDR_OUT_BUF;
assign avr_data_out = AVR_DATA_OUT_BUF;
assign avr_mapper = MAPPER_BUF;
assign avr_sram_size = SRAM_SIZE_BUF;
assign rom_mask_out = ROM_MASK;
assign saveram_mask_out = SAVERAM_MASK;
endmodule

View File

@@ -65,6 +65,8 @@ wire [7:0] avr_data_out;
wire [7:0] AVR_IN_DATA;
wire [7:0] AVR_OUT_DATA;
wire [3:0] MAPPER;
wire [23:0] SAVERAM_MASK;
wire [23:0] ROM_MASK;
spi snes_spi(.clk(CLK2),
.MOSI(SPI_MOSI),
@@ -100,7 +102,9 @@ avr_cmd snes_avr_cmd(
.spi_data_out(spi_input_data),
.addr_out(AVR_ADDR),
.endmessage(spi_endmessage),
.startmessage(spi_startmessage)
.startmessage(spi_startmessage),
.saveram_mask_out(SAVERAM_MASK),
.rom_mask_out(ROM_MASK)
);
my_dcm snes_dcm(.CLKIN(CLKIN),
@@ -145,7 +149,9 @@ address snes_addr(
.IS_SAVERAM(IS_SAVERAM),
.IS_ROM(IS_ROM),
.AVR_ADDR(AVR_ADDR),
.SRAM_ADDR0(SRAM_ADDR0)
.SRAM_ADDR0(SRAM_ADDR0),
.SAVERAM_MASK(SAVERAM_MASK),
.ROM_MASK(ROM_MASK)
);
data snes_data(.CLK(CLK2),