Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/coolgirl-multicart/coolgirl-famicom-multicart.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-12 23:48:20 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-09-12 23:48:20 +0300
commitafe9ad0edfd0def4cbd8ec2ba4d88846eedf4aa0 (patch)
treeebf792aabf3effe79532a2553b4f6d20c4b0399b
parent6a29ed68ce3caaa7a3306c851f446ed9f48b4e99 (diff)
New mappers: 13, 113, 184, 206 and some fixes
-rw-r--r--CoolGirl.qsf2
-rw-r--r--CoolGirl.v7
-rw-r--r--mappers.vh87
3 files changed, 70 insertions, 26 deletions
diff --git a/CoolGirl.qsf b/CoolGirl.qsf
index 5de33e3..6416f94 100644
--- a/CoolGirl.qsf
+++ b/CoolGirl.qsf
@@ -42,7 +42,7 @@ set_global_assignment -name DEVICE EPM1270T144C5
set_global_assignment -name TOP_LEVEL_ENTITY CoolGirl
set_global_assignment -name ORIGINAL_QUARTUS_VERSION 15.1.0
set_global_assignment -name PROJECT_CREATION_TIME_DATE "19:53:22 MAY 05, 2016"
-set_global_assignment -name LAST_QUARTUS_VERSION "19.1.0 Standard Edition"
+set_global_assignment -name LAST_QUARTUS_VERSION "20.1.0 Lite Edition"
set_global_assignment -name VERILOG_FILE CoolGirl.v
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
diff --git a/CoolGirl.v b/CoolGirl.v
index b59d138..bd8d143 100644
--- a/CoolGirl.v
+++ b/CoolGirl.v
@@ -6,6 +6,7 @@ module CoolGirl # (
parameter USE_MAPPER_005 = 1, // MMC5 (partical support): Castlevania 3 only
parameter USE_MAPPER_009_010 = 1, // mappers #009 - MMC2, #010 - MMC4
parameter USE_MAPPER_011 = 1, // mapper #011 - Color Dreams
+ parameter USE_MAPPER_013 = 0, // mapper #113 - NINA-03/06
parameter USE_MAPPER_018 = 0, // mapper #018 - Jaleco SS 88006
parameter USE_MAPPER_021_022_023_025 = 1, // mappers #021, #022, #023, #025 - VRC2, VRC4
parameter USE_MAPPER_022 = 1, // mapper #022 - VRC2a (shifted CHR lines)
@@ -28,12 +29,16 @@ module CoolGirl # (
parameter USE_MAPPER_087 = 1, // mapper #087 - Jaleco
parameter USE_MAPPER_090 = 1, // mapper #090 - JY (partical support): Aladdin only
parameter USE_MAPPER_093 = 1, // mapper #093 - Sunsoft-2: Shanghai, Fantasy Zone
- parameter USE_MAPPER_097 = 0, // mapper #097 - IREM TAMS1
+ parameter USE_MAPPER_097 = 0, // mapper #097 - IREM TAMS1: only Kaiketsu Yanchamaru
parameter USE_MAPPER_112 = 0, // mapper #112 - NTDEC
+ parameter USE_MAPPER_113 = 0, // mapper #113 - NINA-03/06
parameter USE_MAPPER_118 = 1, // mapper #118 - TxSROM
+ parameter USE_MAPPER_133 = 0, // mapper #133 - Sachen, 72-pin version only
parameter USE_MAPPER_152 = 1, // mapper #152 - Bandai
parameter USE_MAPPER_163 = 1, // mapper #163 - Nanjing
+ parameter USE_MAPPER_184 = 0, // mapper #184
parameter USE_MAPPER_189 = 1, // mapper #189 - TXC
+ parameter USE_MAPPER_206 = 0, // mapper #206 - the simpler predecessor of the MMC3
parameter USE_MAPPER_228 = 0, // mapper #228 - Action52: Cheetahmen II only
parameter USE_FOUR_SCREEN = 1, // Enable four-screen support, required by some games
diff --git a/mappers.vh b/mappers.vh
index 9c22805..ca4b252 100644
--- a/mappers.vh
+++ b/mappers.vh
@@ -97,8 +97,9 @@
9'b000000000
): 9'b000000000;
+ // Mirroring: 00=vertical, 01=horizontal, 10=1Sa, 11=1Sb
assign ppu_ciram_a10 = (USE_MAPPER_118 & (mapper == 6'b010100) & flags[0]) ? ppu_addr_mapped[17] :
- (mirroring[1] ? mirroring[0] : (mirroring[0] ? ppu_addr_in[11] : ppu_addr_in[10])); // vertical / horizontal, 1Sa, 1Sb
+ (mirroring[1] ? mirroring[0] : (mirroring[0] ? ppu_addr_in[11] : ppu_addr_in[10]));
wire [20:13] cpu_addr_mapped = (map_rom_on_6000 & romsel & m2) ? prg_bank_6000 :
(
@@ -368,17 +369,7 @@
mul2 = cpu_data_in;
end
*/
-
- // Mapper #189
- // It's MMC3 with flag1
- if (USE_MAPPER_189 & flags[1] & (mapper == 6'b010100))
- begin
- if (cpu_addr_in[14:0] >= 15'h4120) // $4120-$7FFF
- begin
- prg_bank_a[5:2] = cpu_data_in[3:0] | cpu_data_in[7:4];
- end
- end
-
+
// MMC5
if (USE_MAPPER_005 && mapper == 6'b001111)
begin
@@ -434,6 +425,48 @@
end
end
+ // Mapper #189
+ // It's MMC3 with flag1
+ if (USE_MAPPER_189 & flags[1] & (mapper == 6'b010100))
+ begin
+ if (cpu_addr_in[14:0] >= 15'h4120) // $4120-$7FFF
+ begin
+ prg_bank_a[5:2] = cpu_data_in[3:0] | cpu_data_in[7:4];
+ end
+ end
+
+ // Mapper #113 - NINA-03/06
+ if (USE_MAPPER_013 && mapper == 6'b011011)
+ begin
+ if ({cpu_addr_in[14:13], cpu_addr_in[8]} == 3'b101)
+ begin
+ // That is, $4100-$41FF, $4300-$43FF, $45xx, $47xx, ..., $5Dxx, and $5Fxx.
+ chr_bank_a[5:3] = cpu_data_in[2:0];
+ prg_bank_a[4:2] = cpu_data_in[5:3];
+ mirroring = {1'b0, ~cpu_data_in[7]};
+ end
+ end
+
+ // Mapper #133
+ if (USE_MAPPER_133 && mapper == 6'b011100)
+ begin
+ if ({cpu_addr_in[14:13], cpu_addr_in[8]} == 3'b101)
+ begin
+ chr_bank_a[4:3] = cpu_data_in[1:0];
+ prg_bank_a[2] = cpu_data_in[2];
+ end
+ end
+
+ // Mapper #184
+ if (USE_MAPPER_184 && mapper == 6'b011111)
+ begin
+ if (cpu_addr_in[14:13] == 2'b11)
+ begin
+ chr_bank_a[4:2] = cpu_data_in[2:0];
+ chr_bank_e[4:2] = {1'b1, cpu_data_in[5:4]};
+ end
+ end
+
// temp/test
/*
if (mapper == 6'b011111)
@@ -490,8 +523,8 @@
// Mapper #97 - Irem's TAM-S1
if (USE_MAPPER_097 && mapper == 6'b000100)
begin
- prg_bank_a[4:1] = cpu_data_in[3:0];
- mirroring = cpu_data_in[7:6] ^ {~cpu_data_in[6], 1'b0};
+ prg_bank_a[5:1] = cpu_data_in[4:0];
+ mirroring = {1'b0, ~cpu_data_in[7]};
end
// Mapper #93 - Sunsoft-2
@@ -761,23 +794,27 @@
r0[2:0] - internal register
flag0 - TxSROM
flag1 - mapper #189
+ flag2 - mapper #206 (disable most features)
*/
if (mapper == 6'b010100)
begin
case ({cpu_addr_in[14:13], cpu_addr_in[0]})
3'b000: begin // $8000-$9FFE, even
r0[2:0] = cpu_data_in[2:0];
- if (!USE_MAPPER_189 | ~flags[1])
+ if ((!USE_MAPPER_189 | ~flags[1]) & (!USE_MAPPER_206 | ~flags[2])) // disabled for mappers #189 & #206
begin
if (cpu_data_in[6])
prg_mode = 3'b101;
else
prg_mode = 3'b100;
end
- if (cpu_data_in[7])
- chr_mode = 3'b011;
- else
- chr_mode = 3'b010;
+ if (!USE_MAPPER_206 | ~flags[2]) // disabled for mapper #206
+ begin
+ if (cpu_data_in[7])
+ chr_mode = 3'b011;
+ else
+ chr_mode = 3'b010;
+ end
end
3'b001: begin // $8001-$9FFF, odd
case (r0[2:0])
@@ -791,11 +828,13 @@
3'b111: if (!USE_MAPPER_189 | ~flags[1]) prg_bank_b[(MMC3_BITSIZE-1):0] = cpu_data_in[(MMC3_BITSIZE-1):0];
endcase
end
- 3'b010: mirroring = {1'b0, cpu_data_in[0]}; // $A000-$BFFE, even (mirroring)
+ 3'b010: if (!USE_MAPPER_206 | ~flags[2]) // disabled for mapper #206
+ mirroring = {1'b0, cpu_data_in[0]}; // $A000-$BFFE, even (mirroring)
3'b100: irq_scanline_latch = cpu_data_in; // $C000-$DFFE, even (IRQ latch)
3'b101: irq_scanline_reload = 1; // $C001-$DFFF, odd
3'b110: irq_scanline_enabled = 0; // $E000-$FFFE, even
- 3'b111: irq_scanline_enabled = 1; // $E001-$FFFF, odd
+ 3'b111: if (!USE_MAPPER_206 | ~flags[2]) // disabled for mapper #206
+ irq_scanline_enabled = 1; // $E001-$FFFF, odd
endcase
end
@@ -1013,8 +1052,8 @@
end
endcase
end
-
- // Mapper #36
+
+ // Mapper #36 - TXC's PCB 01-22000-400
if (USE_MAPPER_036 && mapper == 6'b011101)
begin
if (cpu_addr_in[14:1] != 14'b11111111111111)
@@ -1024,7 +1063,7 @@
end
end
- // Mapper #70
+ // Mapper #70 - Bandai
if (USE_MAPPER_070 && mapper == 6'b011110)
begin
prg_bank_a[4:1] = cpu_data_in[7:4];