diff options
author | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2016-07-31 00:15:45 +0300 |
---|---|---|
committer | Alexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com> | 2016-07-31 00:15:45 +0300 |
commit | bc03f3c6d81758af93d4ec0527b12bcfcf29b6a4 (patch) | |
tree | c19024a4afeb2da057515672dba7696a6d40a527 | |
parent | d5c62804bc6bbc2dd1c80592cba0035d0edc8683 (diff) |
More mappers
-rw-r--r-- | CoolGirl.v | 2 | ||||
-rw-r--r-- | mappers.vh | 71 |
2 files changed, 71 insertions, 2 deletions
@@ -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 @@ -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 |