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>2016-07-31 00:15:45 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2016-07-31 00:15:45 +0300
commitbc03f3c6d81758af93d4ec0527b12bcfcf29b6a4 (patch)
treec19024a4afeb2da057515672dba7696a6d40a527
parentd5c62804bc6bbc2dd1c80592cba0035d0edc8683 (diff)
More mappers
-rw-r--r--CoolGirl.v2
-rw-r--r--mappers.vh71
2 files changed, 71 insertions, 2 deletions
diff --git a/CoolGirl.v b/CoolGirl.v
index 57e07d3..474eecf 100644
--- a/CoolGirl.v
+++ b/CoolGirl.v
@@ -13,11 +13,13 @@ module CoolGirl # (
parameter USE_MAPPER_066 = 1, // mapper #066 - GxROM
parameter USE_MAPPER_069 = 1, // mapper #069 - Sunsoft
parameter USE_MAPPER_071 = 1, // mapper #071 (for Fire Hawk only)
+ parameter USE_MAPPER_073 = 1, // mapper #073 - VRC3
parameter USE_MAPPER_078 = 1, // mapper #078 - Holy Diver
parameter USE_MAPPER_087 = 1, // mapper #087
parameter USE_MAPPER_090 = 1, // mapper #090 - JY, for Aladdin only
parameter USE_MAPPER_093 = 1, // mapper #093
parameter USE_MAPPER_097 = 1, // mapper #097 - IREM TAMS1
+ parameter USE_MAPPER_112 = 0, // mapper #112
parameter USE_MAPPER_118 = 1, // mapper #118 - TxSROM
parameter USE_MAPPER_152 = 1, // mapper #152
parameter USE_MAPPER_163 = 0, // mapper #163
diff --git a/mappers.vh b/mappers.vh
index 2420b16..a46349b 100644
--- a/mappers.vh
+++ b/mappers.vh
@@ -208,6 +208,27 @@
end
end
end
+
+ // IRQ for VRC3
+ if (USE_MAPPER_073 & (mapper == 5'b10011) & (irq_cpu_control[1]))
+ begin
+ if (irq_cpu_control[2])
+ begin // 8-bit mode
+ irq_cpu_value[7:0] = irq_cpu_value[7:0] + 1'b1;
+ if (irq_cpu_value[7:0] == 0)
+ begin
+ irq_cpu_out = 1;
+ irq_cpu_value[7:0] = irq_cpu_latch[7:0];
+ end
+ end else begin // 16-bit mode
+ irq_cpu_value[15:0] = irq_cpu_value[15:0] + 1'b1;
+ if (irq_cpu_value[15:0] == 0)
+ begin
+ irq_cpu_out = 1;
+ irq_cpu_value[15:0] = irq_cpu_latch[15:0];
+ end
+ end
+ end
// IRQ for Sunsoft FME-7
if (USE_MAPPER_069 & (mapper == 5'b11001) & (irq_cpu_control[1]))
@@ -695,11 +716,34 @@
chr_bank_a[6:3] = cpu_data_in[3:0];
prg_bank_a[3:1] = cpu_data_in[6:4];
mirroring = {1'b1, cpu_data_in[7]};
- end
+ end
+
+ // Mapper #73 - VRC3
+ if (USE_MAPPER_073 && mapper == 5'b10011)
+ begin
+ case (cpu_addr_in[14:12])
+ 3'b000: irq_cpu_latch[3:0] = cpu_data_in[3:0]; // $8000-$8FFF
+ 3'b001: irq_cpu_latch[7:4] = cpu_data_in[3:0]; // $9000-$9FFF
+ 3'b010: irq_cpu_latch[11:8] = cpu_data_in[3:0]; // $A000-$AFFF
+ 3'b011: irq_cpu_latch[15:12] = cpu_data_in[3:0]; // $B000-$BFFF
+ 3'b100: begin // $C000-$CFFF
+ irq_cpu_out = 0; // ack
+ irq_cpu_control[2:0] = cpu_data_in[2:0]; // mode, enabled, enabled after ack
+ if (irq_cpu_control[1]) // if E is set
+ irq_cpu_value[15:0] = irq_cpu_latch[15:0]; // reload with latch
+ end
+ 3'b101: begin // $D000-$DFFF
+ irq_cpu_out = 0; // ack
+ irq_cpu_control[1] = irq_cpu_control[0];
+ end
+ 3'b110: ; // $E000-$EFFF
+ 3'b111: prg_bank_a[3:1] = cpu_data_in[2:0]; // $F000-$FFFF
+ endcase
+ end
// Mapper #4 - MMC3/MMC6
/*
- r8[2:0] - bank_select
+ r0[2:0] - internal register
flag0 - TxSROM
flag1 - mapper #189
*/
@@ -739,6 +783,29 @@
3'b111: irq_scanline_enabled = 1; // $E001-$FFFF, odd
endcase
end
+
+ // Mapper #112
+ // r0[2:0] - internal register
+ if (USE_MAPPER_112 && (mapper == 5'b10101))
+ begin
+ case (cpu_addr_in[14:13])
+ 2'b00: r0[2:0] = cpu_data_in[2:0]; // $8000-$9FFF
+ 2'b01: begin // $A000-$BFFF
+ case (r0[2:0])
+ 3'b000: prg_bank_a[5:0] = cpu_data_in[5:0];
+ 3'b001: prg_bank_b[5:0] = cpu_data_in[5:0];
+ 3'b010: chr_bank_a = cpu_data_in;
+ 3'b011: chr_bank_c = cpu_data_in;
+ 3'b100: chr_bank_e = cpu_data_in;
+ 3'b101: chr_bank_f = cpu_data_in;
+ 3'b110: chr_bank_g = cpu_data_in;
+ 3'b111: chr_bank_h = cpu_data_in;
+ endcase
+ end
+ 2'b10: ; // $C000-$DFFF
+ 2'b11: mirroring = {1'b0, cpu_data_in[0]}; // $E000-$FFFF
+ endcase
+ end
// Mappers #33 + #48 - Taito
// flag0=0 - #33, flag0=1 - #48