basic ROM & SRAM mirroring [refactoring needed]
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user