1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-01-26 11:51:45 +00:00

Add option to invert mirroring logic

This commit is contained in:
Sebastien Delestaing
2016-09-21 11:33:42 +02:00
parent d4a4654ebb
commit 74372fcb52
2 changed files with 14 additions and 12 deletions

View File

@@ -8,7 +8,7 @@
// Done is asserted when the whole game is loaded.
// This parses iNES headers too.
module GameLoader(input clk, input reset,
input [7:0] indata, input indata_clk,
input [7:0] indata, input indata_clk, input invert_mirroring,
output reg [21:0] mem_addr, output [7:0] mem_data, output mem_write,
output [31:0] mapper_flags,
output reg done,
@@ -59,7 +59,7 @@ module GameLoader(input clk, input reset,
// ines[6][0] is mirroring
// ines[6][3] is 4 screen mode
assign mapper_flags = {15'b0, ines[6][3], has_chr_ram, ines[6][0], chr_size, prg_size, mapper};
assign mapper_flags = {15'b0, ines[6][3], has_chr_ram, ines[6][0] ^ invert_mirroring, chr_size, prg_size, mapper};
always @(posedge clk) begin
if (reset) begin
@@ -152,20 +152,22 @@ parameter CONF_STR = {
"NES;NES;",
"O1,HQ2X(VGA-Only),OFF,ON;",
"O2,Scanlines,OFF,ON;",
"T3,Start;",
"T4,Select;",
"T5,Reset;"
"O3,Invert mirroring,OFF,ON;",
"T4,Start;",
"T5,Select;",
"T6,Reset;"
};
parameter CONF_STR_LEN = 8+25+20+9+10+9;
parameter CONF_STR_LEN = 8+25+20+27+9+10+9;
wire [7:0] status;
wire arm_reset = status[0];
wire smoothing_osd = status[1];
wire scanlines_osd = status[2];
wire start_osd = status[3];
wire select_osd = status[4];
wire reset_osd = status[5];
wire mirroring_osd = status[3];
wire start_osd = status[4];
wire select_osd = status[5];
wire reset_osd = status[6];
wire scandoubler_disable;
wire ps2_kbd_clk, ps2_kbd_data;
@@ -292,7 +294,7 @@ wire [7:0] nes_joy_B = reset_nes ? 8'd0 : { joyA[0], joyA[1], joyA[2], joyA[3],
wire loader_write;
wire [31:0] mapper_flags;
wire loader_done, loader_fail;
GameLoader loader(clk, loader_reset, loader_input, loader_clk,
GameLoader loader(clk, loader_reset, loader_input, loader_clk, mirroring_osd,
loader_addr, loader_write_data, loader_write,
mapper_flags, loader_done, loader_fail);

View File

@@ -308,7 +308,7 @@ module MMC3(input clk, input ce, input reset,
bank_select <= 0;
prg_rom_bank_mode <= 0;
chr_a12_invert <= 0;
mirroring <= ~flags[14]; // for mapper 206, otherwise it's mapper controlled
mirroring <= flags[14];
{irq_enable, irq_reload} <= 0;
{irq_latch, counter} <= 0;
{ram_enable, ram_protect} <= 0;
@@ -406,7 +406,7 @@ module MMC3(input clk, input ce, input reset,
assign prg_allow = prg_ain[15] && !prg_write || prg_is_ram && !mapper47;
wire [21:0] prg_ram = {9'b11_1100_000, prg_ain[12:0]};
assign prg_aout = prg_is_ram && !mapper47 && !DxROM ? prg_ram : prg_aout_tmp;
assign vram_a10 = (TxSROM == 0) ? (mirroring ? chr_ain[11] : chr_ain[10]) :
assign vram_a10 = !TxSROM ? (mirroring ? chr_ain[11] : chr_ain[10]) : // TxSROM do not support mirroring
chrsel[7];
assign vram_ce = chr_ain[13] && !four_screen_mirroring;
endmodule