Previous 15994 Revisions Next

r8360 Wednesday 30th June, 2010 at 19:28:57 UTC by Fabio Priuli
[NES] mapper code conversion, part 4 (last?): verified init routines and cleaned them up
[src/mess/machine]nes_ines.c nes_mmc.c nes_pcb.c nes_unif.c

src/mess/machine/nes_pcb.c
r8359r8360
1183611836int nes_pcb_reset( running_machine *machine )
1183711837{
1183811838   nes_state *state = (nes_state *)machine->driver_data;
11839   int err = 0, i;
11839   int err = 0;
1184011840   const nes_pcb_intf *intf = nes_pcb_intf_lookup(state->pcb_id);
1184111841
1184211842   if (intf == NULL)
1184311843      fatalerror("Missing PCB interface\n");
1184411844
11845   if (state->chr_chunks == 0)
11846      chr8(machine, 0, CHRRAM);
11847   else
11848      chr8(machine, 0, CHRROM);
11849
11850   /* Here, we init a few helpers: 4 prg banks and 16 chr banks - some mappers use them */
11851   for (i = 0; i < 4; i++)
11852      state->mmc_prg_bank[i] = 0;
11853   for (i = 0; i < 16; i++)
11854      state->mmc_vrom_bank[i] = 0;
11855   for (i = 0; i < 16; i++)
11856      state->mmc_extra_bank[i] = 0;
11857   
1185811845   /* Set the mapper irq callback */
1185911846   ppu2c0x_set_scanline_callback(state->ppu, intf ? intf->mmc_scanline : NULL);
1186011847   ppu2c0x_set_hblank_callback(state->ppu, intf ? intf->mmc_hblank : NULL);
1186111848
11862   /* Finally, we init IRQ-related quantities. */
11863   state->IRQ_enable = state->IRQ_enable_latch = 0;
11864   state->IRQ_count = state->IRQ_count_latch = 0;
11865   state->IRQ_toggle = 0;
11866   
11867   err = unif_initialize(machine, state->pcb_id);
11849   err = pcb_initialize(machine, state->pcb_id);
1186811850
1186911851   return err;
1187011852}
src/mess/machine/nes_unif.c
r8359r8360
154154}
155155
156156// WIP code
157static int unif_initialize( running_machine *machine, int idx )
157static int pcb_initialize( running_machine *machine, int idx )
158158{
159159   nes_state *state = (nes_state *)machine->driver_data;
160160   int err = 0, i;
161161
162   /* basic PRG config */
163   prg32(machine, 0);
164
165   /* some boards will not use this, but directly CHRROM (resp. CHRRAM) if the board only has VROM (resp. VRAM) */
166   state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
167   chr8(machine, 0, state->mmc_chr_source);
168   
169   /* Here, we init a few helpers: 4 prg banks and 16 chr banks - some mappers use them */
170   for (i = 0; i < 4; i++)
171      state->mmc_prg_bank[i] = 0;
172   for (i = 0; i < 16; i++)
173      state->mmc_vrom_bank[i] = 0;
174   for (i = 0; i < 16; i++)
175      state->mmc_extra_bank[i] = 0;
176
177   state->mmc_latch1 = 0;
178   state->mmc_latch2 = 0;
179
180   /* Finally, we init IRQ-related quantities. */
181   state->IRQ_enable = state->IRQ_enable_latch = 0;
182   state->IRQ_count = state->IRQ_count_latch = 0;
183   state->IRQ_toggle = 0;
184   
162185   switch (idx)
163186   {
187      /* many boards only needs PRG to point at first 32k and CHR at first 8k */
164188      case STD_NROM:   // mapper 0
165189      case HVC_FAMBASIC:
166190      case GG_NROM:
167         prg32(machine, 0);
191      case UXROM_CC:   // mapper 180
192      case STD_CNROM:   // mapper 3, 185
193      case BANDAI_PT554:
194      case TENGEN_800008:
195      case STD_BXROM:   // mapper 34
196      case STD_GXROM:   // mapper 66
197      case STD_MXROM:
198      case BANDAI_OEKAKIDS:   // mapper 96
199      case JALECO_JF11:   // mapper 140
200      case JALECO_JF13:   // mapper 86
201      case JALECO_JF19:   // mapper 92
202      case DIS_74X377:   // mapper 11
203      case DIS_74X161X138:   // mapper 38
204      case CALTRON_6IN1:   // mapper 41
205      case TXC_STRIKEWOLF:   // mapper 36
206      case UNL_STUDYNGAME:   // mapper 39
207      case RUMBLESTATION_BOARD:   // mapper 46
208      case BMC_GKB:   // mapper 58
209      case RCM_TETRISFAMILY:   // mapper 61
210      case BMC_SUPER_700IN1:   // mapper 62
211      case MAGICSERIES_MD:   // mapper 107
212      case HES_BOARD:   // mapper 113
213      case HES6IN1_BOARD:   // mapper 113
214      case SACHEN_SA72008:   // mapper 133
215      case SACHEN_TCU02:   // mapper 136
216      case SACHEN_SA72007:   // mapper 145
217      case SACHEN_TCU01:   // mapper 147
218      case SACHEN_SA0037:   // mapper 148
219      case SACHEN_SA0036:   // mapper 149
220      case AGCI_50282:   // mapper 144
221      case KAISER_KS7058:   // mapper 171
222      case HENGEDIANZI_BOARD:   // mapper 177
223      case WAIXING_SGZLZ:   // mapper 178
224      case HENGEDIANZI_XJZB:   // mapper 179
225      case BMC_21IN1:   // mapper 201
226      case BMC_9999999IN1:   // mapper 213
227      case RCM_GS2015:   // mapper 216
228      case BMC_72IN1:   // mapper 225
229      case BMC_76IN1:   // mapper 226
230      case BMC_SUPER_42IN1:   // mapper 226
231      case ACTENT_ACT52:   // mapper 228
232      case CNE_SHLZ:   // mapper 240
233      case TXC_MXMDHTWO:   // mapper 241
234      case WAIXING_ZS:   // mapper 242
235      case WAIXING_DQ8:   // mapper 242
236      case CNE_DECATHLON:   // mapper 244
237      case UNL_CC21:
238      case BMC_VT5201:
239      case BMC_WS:
240      case UNL_EDU2K:
168241         break;
242
243      /* other boards need additional initialization */
169244      case STD_UXROM:   // mapper 2
170245      case STD_UN1ROM:   // mapper 94
246      case STD_JXROM:      // mapper 69
247      case SUNSOFT_5B:
248      case SUNSOFT_FME7:
249      case NAMCOT_3425:   // mapper 95
250      case DIS_74X139X74:   // mapper 87
251      case DIS_74X161X161X32:   // mapper 152 & 70
252      case BANDAI_LZ93:   // mapper 16, 157
253      case BANDAI_LZ93EX:   // same + EEPROM
254      case BANDAI_DATACH:
255      case BANDAI_FCG:
256      case IREM_HOLYDIV:   // mapper 78
257      case IREM_G101:   // mapper 32
258      case IREM_H3001:   // mapper 65
259      case JALECO_SS88006:   // mapper 18
260      case JALECO_JF16:   // mapper 78
261      case JALECO_JF17:   // mapper 72
262      case KONAMI_VRC1:   // mapper 75
263      case KONAMI_VRC2:
264      case KONAMI_VRC3:   // mapper 73
265      case KONAMI_VRC4:
266      case KONAMI_VRC6:
267      case SUNSOFT_3:   // mapper 67
268      case TAITO_TC0190FMC:   // mapper 33
269      case TAITO_TC0190FMCP:   // mapper 48
270      case TAITO_X1_005:   // mapper 80
271      case TAITO_X1_005_A:   // mapper 207
272      case TAITO_X1_017:   // mapper 82
273      case NTDEC_ASDER:   // mapper 112
274      case FUTUREMEDIA_BOARD:   // mapper 117
275      case BTL_DRAGONNINJA:   // mapper 222
276      case WAIXING_SGZ:   // mapper 252
277      case UNL_T230:
278      case BMC_NTD_03:
279      case KAISER_KS7022:
280      case UNL_SHJY3:
281      case KAISER_KS7017:
282      case KAISER_KS7032:
283      case KAISER_KS202:
171284         prg16_89ab(machine, 0);
172285         prg16_cdef(machine, state->prg_chunks - 1);
173286         break;
174      case UXROM_CC:   // mapper 180
175         prg32(machine, 0);
176         break;
177      case STD_CNROM:   // mapper 3, 185
178      case BANDAI_PT554:
179      case TENGEN_800008:
180         prg32(machine, 0);
181         break;
287
182288      case STD_CPROM:   // mapper 13
183289         chr4_0(machine, 0, CHRRAM);
184290         chr4_4(machine, 0, CHRRAM);
185         prg32(machine, 0);
186291         break;
187292      case STD_AXROM:   // mapper 7
188293         set_nt_mirroring(machine, PPU_MIRROR_LOW);
189         prg32(machine, 0);
190294         break;
191      case STD_BXROM:   // mapper 34
192         prg32(machine, 0);
193         break;
194      case STD_GXROM:   // mapper 66
195      case STD_MXROM:
196         prg32(machine, 0);
197         break;
198295      case STD_SXROM:   // mapper 1, 155
199296      case STD_SOROM:
200297      case STD_SXROM_A:
201298      case STD_SOROM_A:
202         state->mmc_latch1 = 0;
203299         state->mmc_count = 0;
204300         state->mmc_reg[0] = 0x0f;
205301         state->mmc_reg[1] = state->mmc_reg[2] = state->mmc_reg[3] = 0;
206302         state->mmc1_reg_write_enable = 1;
207303         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
208         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
209304         mmc1_set_chr(machine);
210305         mmc1_set_prg(machine);
211306         wram_bank(machine, 0, (idx == STD_SOROM) ? NES_WRAM : NES_BATTERY);
r8359r8360
255350         state->mmc_latch2 = 0x80;
256351         state->mmc_prg_base = state->mmc_chr_base = 0;
257352         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;   // these could be init'ed as xxx_chunks-1 and they would work the same
258         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
259353         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
260354         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
261355         break;
r8359r8360
268362         state->mmc_latch2 = 0;
269363         state->mmc_prg_base = state->mmc_chr_base = 0;
270364         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;   // these could be init'ed as xxx_chunks-1 and they would work the same
271         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
272365         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
273366         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
274367         break;
r8359r8360
281374         state->mmc_prg_base = state->mmc_chr_base = 0;
282375         state->mmc_prg_mask = 0x07;
283376         state->mmc_chr_mask = 0x7f;
284         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
285377         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
286378         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
287379         break;
r8359r8360
294386         state->mmc_prg_base = state->mmc_chr_base = 0;
295387         state->mmc_prg_mask = 0x0f;
296388         state->mmc_chr_mask = 0x7f;
297         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
298389         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
299390         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
300391         break;
r8359r8360
306397         state->mmc5_vram_control = 0;
307398         state->mmc5_split_scr = 0;
308399         memset(state->MMC5_vrom_bank, 0, ARRAY_LENGTH(state->MMC5_vrom_bank));
309         state->mid_ram_enable = 0;
310400         state->mmc5_prg_mode = 3;
311401         state->mmc5_last_chr_a = 1;
312402         state->mmc5_prg_regs[0] = 0xfc;
r8359r8360
320410         break;
321411      case STD_NXROM:      // mapper 68
322412      case SUNSOFT_DCS:      // mapper 68
323         state->mmc_reg[0] = state->mmc_latch1 = state->mmc_latch2 = 0;
413         state->mmc_reg[0] = 0;
324414         prg16_89ab(machine, 0);
325415         prg16_cdef(machine, state->prg_chunks - 1);
326416         break;
327      case STD_JXROM:      // mapper 69
328      case SUNSOFT_5B:
329      case SUNSOFT_FME7:
330         prg16_89ab(machine, 0);
331         prg16_cdef(machine, state->prg_chunks - 1);
332         break;
333417      case NAMCOT_34X3:   // mapper 88
334418      case STD_DXROM:   // mapper 206
335419      case STD_DRROM:
r8359r8360
352436         chr2_2(machine, 1, CHRROM);
353437         chr2_4(machine, 2, CHRROM);
354438         chr2_6(machine, 3, CHRROM);
355         state->mmc_latch1 = 0;
356439         break;
357      case NAMCOT_3425:   // mapper 95
358         prg16_89ab(machine, 0);
359         prg16_cdef(machine, state->prg_chunks - 1);
360         break;
361      case DIS_74X377:   // mapper 11
362         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;   // NINA-07 has no CHRROM
363         prg32(machine, 0);
364         break;
365      case DIS_74X139X74:   // mapper 87
366         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
367         prg16_89ab(machine, 0);
368         prg16_cdef(machine, state->prg_chunks - 1);
369         break;
370      case DIS_74X161X138:   // mapper 38
371         prg32(machine, 0);
372         break;
373      case DIS_74X161X161X32:   // mapper 152 & 70
374         prg16_89ab(machine, 0);
375         prg16_cdef(machine, state->prg_chunks - 1);
376         if (state->chr_chunks)
377            chr8(machine, 0, CHRROM);
378         break;
379      case BANDAI_LZ93:   // mapper 16, 157
380      case BANDAI_LZ93EX:   // same + EEPROM
381      case BANDAI_DATACH:
382         state->mmc_latch1 = 0;
383         prg16_89ab(machine, 0);
384         prg16_cdef(machine, state->prg_chunks - 1);
385         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
386         break;
387440      case BANDAI_JUMP2:   // mapper 153
388441         for (i = 0; i < 8; i++)
389442            state->mmc_reg[i] = 0;
390         state->mmc_latch1 = 0;
391443         prg16_89ab(machine, 0);
392444         prg16_cdef(machine, state->prg_chunks - 1);
393         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
394445         fjump2_set_prg(machine);
395446         break;
396      case BANDAI_FCG:
397         state->mmc_latch1 = 0;
398         prg16_89ab(machine, 0);
399         prg16_cdef(machine, state->prg_chunks - 1);
400         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
401         break;
402      case BANDAI_OEKAKIDS:   // mapper 96
403         prg32(machine, 0);
404         break;
405447      case BANDAI_KARAOKE:   // mapper 188
406448         prg16_89ab(machine, 0);
407449         prg16_cdef(machine, (state->prg_chunks - 1) ^ 0x08);
408450         break;
409451      case IREM_LROG017:   // mapper 77
410         prg32(machine, 0);
411452         chr2_2(machine, 0, CHRROM);
412453         chr2_4(machine, 1, CHRROM);
413454         chr2_6(machine, 2, CHRROM);
414455         break;
415      case IREM_HOLYDIV:   // mapper 78
416         prg16_89ab(machine, 0);
417         prg16_cdef(machine, state->prg_chunks - 1);
418         break;
419456      case IREM_TAM_S1:   // mapper 97
420457         prg16_89ab(machine, state->prg_chunks - 1);
421458         prg16_cdef(machine, 0);
422459         break;
423      case IREM_G101:
424         state->mmc_latch1 = 0;
425         prg16_89ab(machine, 0);
426         prg16_89ab(machine, 0);
427         prg16_cdef(machine, state->prg_chunks - 1);
428         break;
429      case IREM_H3001:   // mapper 65
430         prg16_89ab(machine, 0);
431         prg16_cdef(machine, state->prg_chunks - 1);
432         break;
433      case JALECO_SS88006:   // mapper 18
434         state->mmc_latch1 = 0;
435         prg16_89ab(machine, 0);
436         prg16_cdef(machine, state->prg_chunks - 1);
437         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
438         break;
439      case JALECO_JF11:   // mapper 140
440      case JALECO_JF13:   // mapper 86
441      case JALECO_JF19:   // mapper 92
442         prg32(machine, 0);
443         break;
444      case JALECO_JF16:   // mapper 78
445      case JALECO_JF17:   // mapper 72
446         prg16_89ab(machine, 0);
447         prg16_cdef(machine, state->prg_chunks - 1);
448         break;
449      case KONAMI_VRC1:   // mapper 75
450      case KONAMI_VRC2:
451      case KONAMI_VRC3:   // mapper 73
452      case KONAMI_VRC4:
453      case KONAMI_VRC6:
454         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
455         prg16_89ab(machine, 0);
456         prg16_cdef(machine, state->prg_chunks - 1);
457         break;
458460      case KONAMI_VRC7:   // mapper 85
459         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
460461         prg8_89(machine, 0);
461462         prg8_ab(machine, 0);
462463         prg8_cd(machine, 0);
463464         prg8_ef(machine, 0xff);
464465         break;
465466      case NAMCOT_163:   // mapper 19
466         state->mmc_latch1 = 0;
467467         prg16_89ab(machine, 0);
468468         prg16_cdef(machine, state->prg_chunks - 1);
469         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
470469         set_nt_mirroring(machine, PPU_MIRROR_VERT);
471470         break;
472471      case SUNSOFT_1:   // mapper 184
r8359r8360
476475         if (!state->hard_mirroring)
477476            set_nt_mirroring(machine, PPU_MIRROR_LOW);
478477         break;
479      case SUNSOFT_3:   // mapper 67
480         prg16_89ab(machine, 0);
481         prg16_cdef(machine, state->prg_chunks - 1);
482         break;
483      case TAITO_TC0190FMC:   // mapper 33
484      case TAITO_TC0190FMCP:   // mapper 48
485      case TAITO_X1_005:   // mapper 80
486      case TAITO_X1_005_A:   // mapper 207
487      case TAITO_X1_017:   // mapper 82
488         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
489         prg16_89ab(machine, 0);
490         prg16_cdef(machine, state->prg_chunks - 1);
491         break;
478
492479// mapper 14
493480      case REXSOFT_SL1632:
494481         state->mmc_extra_bank[2] = 0xfe;
r8359r8360
502489         state->mmc_latch2 = 0x80;
503490         state->mmc_prg_base = state->mmc_chr_base = 0;
504491         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
505         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
506492         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
507493         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
508494         break;
509495// mapper 15
510496      case WAIXING_PS2:
511497         set_nt_mirroring(machine, PPU_MIRROR_VERT);
512         prg32(machine, 0);
513498         break;
514499
515500// mapper 35
516501      case UNL_SC127:
502// mapper 42
503      case BTL_MARIOBABY:
504      case BTL_AISENSHINICOL:
517505         prg32(machine, 0xff);
518506         break;
519507
520// mapper 36
521      case TXC_STRIKEWOLF:
522         break;
523508// mapper 40
524509      case BTL_SMB2A:
525510         prg8_67(machine, 0xfe);
r8359r8360
528513         prg8_cd(machine, 0xfe);
529514         prg8_ef(machine, 0xff);
530515         break;
531// mapper 41
532      case CALTRON_6IN1:
533         state->mmc_latch1 = 0;
534         prg32(machine, 0);
535         break;
536// mapper 42
537      case BTL_MARIOBABY:
538      case BTL_AISENSHINICOL:
539         prg32(machine, state->prg_chunks - 1);
540         break;
516
541517// mapper 43
542518      case UNL_SMB2J:
543         prg32(machine, 0);
544519         if (state->battery)
545520            memset(state->battery_ram, 0x2000, 0xff);
546521         else if (state->prg_ram)
r8359r8360
557532         state->mmc_prg_base = state->mmc_chr_base = 0;
558533         state->mmc_prg_mask = 0x0f;
559534         state->mmc_chr_mask = 0x7f;
560         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
561535         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
562536         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
563537         break;
r8359r8360
567541         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
568542         state->mmc_latch1 = 0;
569543         state->mmc_latch2 = 0x80;
570         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
571544         state->mapper45_reg[0] = state->mapper45_reg[1] = state->mapper45_reg[2] = state->mapper45_reg[3] = 0;
572545         state->mmc_prg_base = 0;
573546         state->mmc_prg_mask = 0x3f;
r8359r8360
576549         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
577550         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
578551         break;
579// mapper 46
580      case RUMBLESTATION_BOARD:
581         prg32(machine, 0);
582         chr8(machine, 0, CHRROM);
583         break;
552
553// mapper 50
584554      case BTL_SMB2B:
585555         prg8_67(machine, 0x0f);
586556         prg8_89(machine, 0x08);
r8359r8360
603573         state->mmc_latch1 = 0;
604574         state->mmc_latch2 = 0x80;
605575         state->map52_reg_written = 0;
606         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
607576         state->mmc_prg_base = 0;
608577         state->mmc_prg_mask = 0x1f;
609578         state->mmc_chr_base = 0;
r8359r8360
613582         break;
614583// mapper 54
615584      case BMC_NOVELDIAMOND:
616         prg32(machine, 0);
617         chr8(machine, 0, CHRROM);
618585         set_nt_mirroring(machine, PPU_MIRROR_VERT);
619586         break;
620587// mapper 57
621588      case BMC_GKA:
622         state->mmc_latch1 = 0x00;
623         state->mmc_latch2 = 0x00;
624589         prg16_89ab(machine, 0);
625590         prg16_cdef(machine, 0);
626         chr8(machine, 0, CHRROM);
627591         break;
628// mapper 58
629      case BMC_GKB:
630         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
631         prg32(machine, 0);
632         chr8(machine, 0, state->mmc_chr_source);
633         break;
634// mapper 61
635      case RCM_TETRISFAMILY:
636         prg32(machine, 0);
637         break;
638// mapper 62
639      case BMC_SUPER_700IN1:
640         prg32(machine, 0);
641         break;
592
642593// mapper 64
643594      case TENGEN_800032:
644595// mapper 158
645596      case TENGEN_800037:
646         state->mmc_latch1 = 0;
647597         prg16_89ab(machine, state->prg_chunks - 1);
648598         prg16_cdef(machine, state->prg_chunks - 1);
649599         break;
r8359r8360
657607// mapper 79 (& 146)
658608      case AVE_NINA06:
659609         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
660         chr8(machine, 0, CHRROM);
661         prg32(machine, 0);
662610         break;
663611
664612// mapper 83
665613      case CONY_BOARD:
666         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
667614         state->mapper83_reg[9] = 0x0f;
668615         prg8_cd(machine, 0x1e);
669616         prg8_ef(machine, 0x1f);
r8359r8360
688635         prg8_cd(machine, 0);
689636         prg8_ef(machine, (state->prg_chunks << 1) - 1);
690637         break;
691// mapper 107
692      case MAGICSERIES_MD:
693         prg32(machine, 0);
694         break;
695// mapper 112
696      case NTDEC_ASDER:
697         state->mmc_latch1 = 0;
698         prg16_89ab(machine, 0);
699         prg16_cdef(machine, state->prg_chunks - 1);
700         break;
701// mapper 113
702      case HES_BOARD:
703      case HES6IN1_BOARD:
704         prg32(machine, 0);
705         break;
638
706639// mapper 114
707640      case SUPERGAME_LIONKING:
708641         state->map114_reg = state->map114_reg_enabled = 0;
r8359r8360
712645         state->mmc_latch2 = 0x80;
713646         state->mmc_prg_base = state->mmc_chr_base = 0;
714647         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
715         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
716648         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
717649         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
718650         break;
r8359r8360
725657         state->mmc_latch2 = 0x80;
726658         state->mmc_prg_base = state->mmc_chr_base = 0;
727659         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
728         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
729660         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
730661         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
731662         break;
732663// mapper 116
733664//      case SOMERITEAM_SL12:
734//          mapper_initialize(machine, 116);
735665//          break;
736// mapper 117
737      case FUTUREMEDIA_BOARD:
738         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
739         prg16_89ab(machine, 0);
740         prg16_cdef(machine, state->prg_chunks - 1);
741         break;
666
742667// mapper 121
743668      case KAY_PANDAPRINCE:
744#if 0
745669         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
746670         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
747671         state->mapper121_reg[0] = state->mapper121_reg[1] = state->mapper121_reg[2] = 0;
748         state->mapper121_reg[3] = 0;
749         state->mapper121_reg[4] = state->mapper121_reg[5] = state->mapper121_reg[6] = 0;
750672         state->mmc_latch1 = 0;
751673         state->mmc_latch2 = 0x80;
752674         state->mmc_prg_base = state->mmc_chr_base = 0;
753675         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
754         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
755         kay_pp_update_reg(machine);
756         kay_pp_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
757         kay_pp_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
758#endif
759         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
760         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
761         state->mapper121_reg[0] = state->mapper121_reg[1] = state->mapper121_reg[2] = 0;
762         state->mmc_latch1 = 0;
763         state->mmc_latch2 = 0x80;
764         state->mmc_prg_base = state->mmc_chr_base = 0;
765         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
766         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
767676         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
768677         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
769678         break;
r8359r8360
774683// mapper 173
775684      case TXC_22211C:
776685         state->txc_reg[0] = state->txc_reg[1] = state->txc_reg[2] = state->txc_reg[3] = 0;
777         prg32(machine, 0);
778686         break;
779// mapper 133
780      case SACHEN_SA72008:
781// mapper 145
782      case SACHEN_SA72007:
783// mapper 147
784      case SACHEN_TCU01:
785// mapper 148
786      case SACHEN_SA0037:
787// mapper 149
788      case SACHEN_SA0036:
789         prg32(machine, 0);
790         chr8(machine, 0, CHRROM);
791         break;
687
792688// mapper 134
793689      case BMC_FAMILY_4646B:
794690         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
r8359r8360
798694         state->mmc_prg_base = state->mmc_chr_base = 0;
799695         state->mmc_prg_mask = 0x1f;
800696         state->mmc_chr_mask = 0xff;
801         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
802697         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
803698         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
804699         break;
805// mapper 136
806      case SACHEN_TCU02:
807         state->mmc_latch1 = 0;
808         prg32(machine, 0);
809         break;
700
810701// mapper 137
811702      case SACHEN_8259D:
812         state->mmc_latch1 = 0;
813         prg32(machine, 0);
814703         chr8(machine, state->chr_chunks - 1, CHRROM);
815704         set_nt_mirroring(machine, PPU_MIRROR_VERT);
816705         break;
r8359r8360
820709      case SACHEN_8259C:
821710// mapper 141
822711      case SACHEN_8259A:
823         state->mmc_latch1 = 0;
824         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
825         prg32(machine, 0);
826         chr8(machine, 0, state->mmc_chr_source);
712// mapper 150
713      case SACHEN_74LS374:
827714         set_nt_mirroring(machine, PPU_MIRROR_VERT);
828715         break;
829716// mapper 143
830717      case SACHEN_TCA01:
831718         prg16_89ab(machine, 0);
832719         prg16_cdef(machine, 1);
833         chr8(machine, 0, CHRROM);
834720         break;
835// mapper 144
836      case AGCI_50282:
837         prg32(machine, 0);
838         break;
839// mapper 150
840      case SACHEN_74LS374:
841         state->mmc_latch1 = 0;
842         prg32(machine, 0);
843         chr8(machine, 0, CHRROM);
844         set_nt_mirroring(machine, PPU_MIRROR_VERT);
845         break;
721
846722// mapper 156
847723      case OPENCORP_DAOU306:
848724         prg16_89ab(machine, state->prg_chunks - 2);
r8359r8360
854730         state->mmc_count = 0xff;
855731         state->mmc_reg[0] = 0xff;
856732         state->mmc_reg[1] = 0;
857         state->mmc_latch1 = 0;
858         state->mmc_latch2 = 0;
859733         prg16_89ab(machine, state->prg_chunks - 2);
860734         prg16_cdef(machine, state->prg_chunks - 1);
861735         break;
862736// mapper 164
863737      case WAIXING_FFV:
864738         prg32(machine, 0xff);
865         state->mid_ram_enable = 1;
866739         break;
867740// mapper 166
868741      case SUBOR_TYPE1:
r8359r8360
876749         prg16_89ab(machine, 0);
877750         prg16_cdef(machine, 0x20);
878751         break;
879// mapper 171
880      case KAISER_KS7058:
881         prg32(machine, 0);
882         chr8(machine, 0, CHRROM);
883         break;
752
884753// mapper 176
885754      case UNL_XZY:
886         prg32(machine, (state->prg_chunks - 1) >> 1);
887         break;
888// mapper 177
889      case HENGEDIANZI_BOARD:
890         prg32(machine, 0);
891         break;
892// mapper 178
893      case WAIXING_SGZLZ:
894         state->mmc_latch1 = 0;
895         prg32(machine, 0);
896         break;
897// mapper 179
898      case HENGEDIANZI_XJZB:
899         prg32(machine, 0);
900         break;
901755// mapper 182
902756      case HOSENKAN_BOARD:
903757         prg32(machine, (state->prg_chunks - 1) >> 1);
r8359r8360
912766         state->mmc_latch2 = 0x80;
913767         state->mmc_prg_base = state->mmc_chr_base = 0;
914768         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
915         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
916769         kof96_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
917770         kof96_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
918771         break;
r8359r8360
922775         state->mmc_latch2 = 0x80;
923776         state->mmc_chr_base = 0;
924777         state->mmc_chr_mask = 0xff;
925         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
926         prg32(machine, 0);
927778         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
928779         break;
929780// mapper 193
r8359r8360
939790         state->mmc_latch2 = 0x80;
940791         state->mmc_prg_base = state->mmc_chr_base = 0;
941792         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
942         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
943793         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
944794         unl_sf3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
945795         break;
r8359r8360
953803         state->mmc_latch2 = 0x80;
954804         state->mmc_prg_base = state->mmc_chr_base = 0;
955805         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
956         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
957806         waixing_f_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
958807         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
959808         break;
r8359r8360
967816         state->mmc_latch2 = 0x80;
968817         state->mmc_prg_base = state->mmc_chr_base = 0;
969818         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
970         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
971819         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
972820         waixing_g_set_chr(machine, state->mmc_chr_base, state->mmc_chr_mask);
973821         break;
r8359r8360
976824         prg16_89ab(machine, state->prg_chunks - 1);
977825         prg16_cdef(machine, state->prg_chunks - 1);
978826         break;
979// mapper 201
980      case BMC_21IN1:
981         prg32(machine, 0);
982         chr8(machine, 0, CHRROM);
983         break;
827
984828// mapper 202
985829      case BMC_150IN1:
986830// mapper 203
r8359r8360
991835      case BMC_SUPERGUN_20IN1:
992836         prg16_89ab(machine, 0);
993837         prg16_cdef(machine, 0);
994         chr8(machine, 0, CHRROM);
995838         break;
996839// mapper 205
997840      case BMC_15IN1:
r8359r8360
1003846         state->mmc_prg_mask = 0x1f;
1004847         state->mmc_chr_base = 0;
1005848         state->mmc_chr_mask = 0xff;
1006         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1007849         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1008850         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1009851         break;
r8359r8360
1017859         state->mmc_latch2 = 0x80;
1018860         state->mmc_prg_base = state->mmc_chr_base = 0;
1019861         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1020         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1021862         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1022863         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1023864         break;
r8359r8360
1026867         chr8(machine, 0xff, CHRROM);
1027868         prg32(machine, 0xff);
1028869         break;
1029// mapper 213
1030      case BMC_9999999IN1:
1031         prg32(machine, 0);
1032         chr8(machine, 0, CHRROM);
1033         break;
870
1034871// mapper 215
1035872      case SUPERGAME_BOOGERMAN:
1036873         state->mmc_prg_bank[0] = 0x00;
r8359r8360
1045882         state->map215_reg[3] = 0;
1046883         state->mmc_prg_base = 0;
1047884         state->mmc_prg_mask = 0x1f;
1048         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1049885         sgame_boog_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1050886         sgame_boog_set_chr(machine, state->mmc_chr_source);
1051887         break;
1052// mapper 216
1053      case RCM_GS2015:
1054         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1055         prg32(machine, 0);
1056         chr8(machine, 0, state->mmc_chr_source);
1057         break;
888
1058889// mapper 217
1059890      case BMC_GOLDENCARD_6IN1:
1060891         state->map217_reg[0] = 0x00;
r8359r8360
1067898         state->mmc_latch2 = 0x80;
1068899         state->mmc_prg_base = state->mmc_chr_base = 0;
1069900         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1070         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1071901         bmc_gc6in1_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1072902         bmc_gc6in1_set_chr(machine, state->mmc_chr_source);
1073903         break;
1074904// mapper 221
1075905      case UNL_N625092:
1076         state->mmc_latch1 = 0;
1077         state->mmc_latch2 = 0;
1078906         prg16_89ab(machine, 0);
1079907         prg16_cdef(machine, 0);
1080908         break;
1081// mapper 222
1082      case BTL_DRAGONNINJA:
1083         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1084         prg16_89ab(machine, 0);
1085         prg16_cdef(machine, state->prg_chunks - 1);
1086         break;
1087// mapper 225
1088      case BMC_72IN1:
1089         prg32(machine, 0);
1090         break;
1091// mapper 226
1092      case BMC_76IN1:
1093      case BMC_SUPER_42IN1:
1094         state->mmc_latch1 = 0;
1095         state->mmc_latch2 = 0;
1096         prg32(machine, 0);
1097         break;
909
1098910// mapper 227
1099911      case BMC_1200IN1:
1100912         prg16_89ab(machine, 0);
1101913         prg16_cdef(machine, 0);
1102914         break;
1103// mapper 228
1104      case ACTENT_ACT52:
1105         chr8(machine, 0, CHRROM);
1106         prg32(machine, 0);
1107         break;
915
1108916// mapper 229
1109917      case BMC_31IN1:
1110918         prg16_89ab(machine, 0);
1111919         prg16_cdef(machine, 1);
1112         chr8(machine, 0, CHRROM);
1113920         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1114921         break;
1115922// mapper 230
r8359r8360
1129936         state->mmc_latch2 = 0x00;
1130937         bf9096_set_prg(machine);
1131938         break;
1132// mapper 240
1133      case CNE_SHLZ:
1134         prg32(machine, 0);
1135         break;
1136// mapper 241
1137      case TXC_MXMDHTWO:
1138         prg32(machine, 0);
1139         break;
1140// mapper 242
1141      case WAIXING_ZS:
1142      case WAIXING_DQ8:
1143         prg32(machine, 0);
1144         break;
939
1145940// mapper 243
1146941      case SACHEN_74LS374_A:
1147942         state->mmc_vrom_bank[0] = 3;
1148         state->mmc_latch1 = 0;
1149943         chr8(machine, 3, CHRROM);
1150         prg32(machine, 0);
1151944         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1152945         break;
1153// mapper 244
1154      case CNE_DECATHLON:
1155         prg32(machine, 0);
1156         break;
946
1157947// mapper 246
1158948      case CNE_FSB:
1159949         prg32(machine, 0xff);
r8359r8360
1167957         state->map249_reg = 0;
1168958         state->mmc_prg_base = state->mmc_chr_base = 0;
1169959         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1170         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1171960         waixing_sec_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1172961         waixing_sec_set_chr(machine, state->mmc_chr_base, state->mmc_chr_mask);
1173962         break;
1174// mapper 252
1175      case WAIXING_SGZ:
1176         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1177         prg16_89ab(machine, 0);
1178         prg16_cdef(machine, state->prg_chunks - 1);
1179         break;
963
1180964// mapper 255
1181965      case BMC_110IN1:
1182966         prg16_89ab(machine, 0);
1183967         prg16_cdef(machine, 1);
1184         chr8(machine, 0, CHRROM);
1185968         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1186969         break;
1187970
r8359r8360
1192975         state->bmc_64in1nr_reg[2] = state->bmc_64in1nr_reg[3] = 0;
1193976         bmc_64in1nr_set_prg(machine);
1194977         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1195         chr8(machine, 0, CHRROM);
1196978         break;
1197979      case BMC_190IN1:
1198980         prg16_89ab(machine, 0);
1199981         prg16_cdef(machine, 0);
1200         chr8(machine, 0, CHRROM);
1201982         break;
1202983      case BMC_A65AS:
1203984         prg16_89ab(machine, 0);
r8359r8360
1207988      case BMC_GS2004:
1208989      case BMC_GS2013:
1209990         prg32(machine, 0xff);
1210         chr8(machine, 0, CHRRAM);
1211991         break;
1212992      case BMC_S24IN1SC03:
1213993         state->bmc_s24in1sc03_reg[0] = 0x24;
r8359r8360
12281008         prg16_89ab(machine, 0);
12291009         prg16_cdef(machine, 7);
12301010         break;
1231      case BMC_WS:
1232         state->mmc_latch1 = 0;
1233         prg32(machine, 0);
1234         break;
12351011      case DREAMTECH_BOARD:
12361012         prg16_89ab(machine, 0);
12371013         prg16_cdef(machine, 8);
1238         chr8(machine, 0, CHRRAM);
12391014         break;
12401015      case UNL_8237:
12411016         state->unl_8237_reg[0] = state->unl_8237_reg[1] = state->unl_8237_reg[2] = 0;
r8359r8360
12561031         prg8_cd(machine, 0xfe);
12571032         prg8_ef(machine, 0xff);
12581033         break;
1259      case UNL_CC21:
1260         prg32(machine, 0);
1261         chr8(machine, 0, CHRROM);
1262         break;
1263      case UNL_T230:
1264         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1265         prg16_89ab(machine, 0);
1266         prg16_cdef(machine, state->prg_chunks - 1);
1267         break;
12681034      case UNL_RACERMATE:
1269         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
12701035         chr4_0(machine, 0, state->mmc_chr_source);
12711036         chr4_4(machine, 0, state->mmc_chr_source);
12721037         prg16_89ab(machine, 0);
12731038         prg16_cdef(machine, state->prg_chunks - 1);
12741039         break;
12751040
1276      case BMC_VT5201:
1277         prg32(machine, 0);
1278         chr8(machine, 0, CHRROM);
1279         break;
1280
12811041      case BMC_BENSHENG_BS5:
12821042         state->mmc_prg_bank[0] = 0xff;
12831043         state->mmc_prg_bank[1] = 0xff;
r8359r8360
12891049      case BMC_810544:
12901050         prg16_89ab(machine, 0);
12911051         prg16_cdef(machine, 0);
1292         chr8(machine, 0, CHRROM);
12931052         set_nt_mirroring(machine, PPU_MIRROR_VERT);
12941053         break;
12951054
1296      case BMC_NTD_03:
1297         prg16_89ab(machine, 0);
1298         prg16_cdef(machine, state->prg_chunks - 1);
1299         chr8(machine, 0, CHRROM);
1300         break;
1301
1302      case UNL_EDU2K:
1303         break;
1304         
1305      case KAISER_KS7022:
1306         prg16_89ab(machine, 0);
1307         prg16_cdef(machine, state->prg_chunks - 1);
1308         break;
1309
13101055      case BMC_G63IN1:
13111056         bmc_gb63_update(machine);
13121057         break;
13131058
1314      case UNL_SHJY3:
1059      case FFE_MAPPER6:
13151060         prg16_89ab(machine, 0);
1316         prg16_cdef(machine, state->prg_chunks - 1);
1061         prg16_cdef(machine, 7);
13171062         break;
1318
1319      case KAISER_KS7017:
1320         prg16_89ab(machine, 0);
1321         prg16_cdef(machine, state->prg_chunks - 1);
1063      case FFE_MAPPER8:
1064         prg32(machine, 0);
13221065         break;
1323
1324      case KAISER_KS7032:
1325      case KAISER_KS202:
1066      case FFE_MAPPER17:
13261067         prg16_89ab(machine, 0);
13271068         prg16_cdef(machine, state->prg_chunks - 1);
1328         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1329         chr8(machine, 0, state->mmc_chr_source);
13301069         break;
1331
1070         
13321071      case UNSUPPORTED_BOARD:
13331072      default:
13341073         /* Mapper not supported */
src/mess/machine/nes_mmc.c
r8359r8360
137137#define LOG_MMC(x) do { if (VERBOSE) logerror x; } while (0)
138138#define LOG_FDS(x) do { if (VERBOSE) logerror x; } while (0)
139139
140static int unif_initialize( running_machine *machine, int idx );
140static int pcb_initialize( running_machine *machine, int idx );
141141
142142static void ffe_irq( running_device *device, int scanline, int vblank, int blanked );
143143static WRITE8_HANDLER( mapper6_l_w );
src/mess/machine/nes_ines.c
r8359r8360
5454   switch (offset)
5555   {
5656      case 0x1fe:
57         state->mmc_cmd1 = data & 0x80;
57         state->mmc_latch1 = data & 0x80;
5858         set_nt_mirroring(space->machine, BIT(data, 4) ? PPU_MIRROR_HIGH : PPU_MIRROR_LOW);
5959         break;
6060      case 0x1ff:
r8359r8360
7979   nes_state *state = (nes_state *)space->machine->driver_data;
8080   LOG_MMC(("mapper6_w, offset: %04x, data: %02x\n", offset, data));
8181
82   if (!state->mmc_cmd1)   // when in "FFE mode" we are forced to use CHRRAM/EXRAM bank?
82   if (!state->mmc_latch1)   // when in "FFE mode" we are forced to use CHRRAM/EXRAM bank?
8383   {
8484      prg16_89ab(space->machine, data >> 2);
8585      // chr8(space->machine, data & 0x03, ???);
86      // due to lack of info on the exact behavior, we simply act as if mmc_cmd=1
86      // due to lack of info on the exact behavior, we simply act as if mmc_latch1=1
8787      if (state->mmc_chr_source == CHRROM)
8888         chr8(space->machine, data & 0x03, CHRROM);
8989   }
r8359r8360
13081308   
13091309   return mmc->pcb_id;
13101310}
1311
1312/*************************************************************
1313
1314 mapper_initialize
1315
1316 Initialize various constants needed by mappers, depending
1317 on the mapper number. As long as the code is mainly iNES
1318 centric, also UNIF images will call this function to
1319 initialize their bankswitch and registers.
1320
1321 *************************************************************/
1322#if 0
1323static int mapper_initialize( running_machine *machine, int mmc_num )
1324{
1325   nes_state *state = (nes_state *)machine->driver_data;
1326   int err = 0, i;
1327
1328   switch (mmc_num)
1329   {
1330      case 0:
1331         err = 1; /* No mapper found */
1332         prg32(machine, 0);
1333         break;
1334      case 1:
1335      case 155:
1336         state->mmc_cmd1 = 0;
1337         state->mmc_count = 0;
1338         state->MMC1_regs[0] = 0x0f;
1339         state->MMC1_regs[1] = state->MMC1_regs[2] = state->MMC1_regs[3] = 0;
1340         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
1341         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1342         mmc1_set_chr(machine);
1343         mmc1_set_prg(machine);
1344         break;
1345      case 2:
1346         /* These games don't switch VROM, but some ROMs incorrectly have CHR chunks */
1347         state->chr_chunks = 0;
1348         prg16_89ab(machine, 0);
1349         prg16_cdef(machine, state->prg_chunks - 1);
1350         break;
1351      case 13:
1352         chr4_0(machine, 0, CHRRAM);
1353         prg32(machine, 0);
1354         break;
1355      case 3:
1356      case 185:
1357         prg32(machine, 0);
1358         break;
1359      case 4:
1360      case 206:
1361         /* Only MMC3 and clones seem to use 4-screen! */
1362         /* hardware uses an 8K RAM chip, but can't address the high 4K! */
1363         /* that much is documented for Nintendo Gauntlet boards */
1364         if (state->four_screen_vram)
1365         {
1366            set_nt_page(machine, 0, CART_NTRAM, 0, 1);
1367            set_nt_page(machine, 1, CART_NTRAM, 1, 1);
1368            set_nt_page(machine, 2, CART_NTRAM, 2, 1);
1369            set_nt_page(machine, 3, CART_NTRAM, 3, 1);
1370         }
1371      case 12:
1372      case 74:
1373      case 118:
1374      case 119:
1375      case 191:
1376      case 192:
1377      case 194:
1378      case 195:
1379      case 196:
1380      case 245:
1381      case 250:
1382         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;   // prg_bank[2] & prg_bank[3] remain always the same in most MMC3 variants
1383         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;   // but some pirate clone mappers change them after writing certain registers
1384         state->mmc_cmd1 = 0;
1385         state->mmc_cmd2 = 0x80;
1386         state->mmc_prg_base = state->mmc_chr_base = 0;
1387         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;   // these could be init'ed as xxx_chunks-1 and they would work the same
1388         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1389         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1390         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1391         break;
1392      case 5:
1393         /* Can switch 8k prg banks, but they are saved as 16k in size */
1394         state->MMC5_rom_bank_mode = 3;
1395         state->MMC5_vrom_bank_mode = 0;
1396         state->MMC5_vram_protect = 0;
1397         state->mmc5_high_chr = 0;
1398         state->mmc5_vram_control = 0;
1399         state->mmc5_split_scr = 0;
1400         memset(state->MMC5_vrom_bank, 0, ARRAY_LENGTH(state->MMC5_vrom_bank));
1401         state->mid_ram_enable = 0;
1402         prg16_89ab(machine, state->prg_chunks - 2);
1403         prg16_cdef(machine, state->prg_chunks - 1);
1404         break;
1405      case 6:
1406         state->mmc_cmd1 = 0;
1407         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1408         prg16_89ab(machine, 0);
1409         prg16_cdef(machine, 7);
1410         break;
1411      case 7:
1412         /* Bankswitches 32k at a time */
1413         set_nt_mirroring(machine, PPU_MIRROR_LOW);
1414         prg16_89ab(machine, 0);
1415         prg16_cdef(machine, state->prg_chunks - 1);
1416         break;
1417      case 8:
1418      case 96:
1419         prg32(machine, 0);
1420         break;
1421      case 9:
1422         state->MMC2_regs[0] = state->MMC2_regs[2] = 0;
1423         state->MMC2_regs[1] = state->MMC2_regs[3] = 0;
1424         state->mmc_cmd1 = state->mmc_cmd2 = 0xfe;
1425         prg8_89(machine, 0);
1426         //ugly hack to deal with iNES header usage of chunk count.
1427         prg8_ab(machine, (state->prg_chunks << 1) - 3);
1428         prg8_cd(machine, (state->prg_chunks << 1) - 2);
1429         prg8_ef(machine, (state->prg_chunks << 1) - 1);
1430         break;
1431      case 10:
1432         /* Reset VROM latches */
1433         state->MMC2_regs[0] = state->MMC2_regs[2] = 0;
1434         state->MMC2_regs[1] = state->MMC2_regs[3] = 0;
1435         state->mmc_cmd1 = state->mmc_cmd2 = 0xfe;
1436         prg16_89ab(machine, 0);
1437         prg16_cdef(machine, state->prg_chunks - 1);
1438         break;
1439      case 11:
1440         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;   // NINA-07 has no CHRROM
1441         prg32(machine, 0);
1442         break;
1443      case 14:
1444         state->mmc_extra_bank[2] = 0xfe;
1445         state->mmc_extra_bank[3] = 0xff;
1446         state->mmc_extra_bank[0] = state->mmc_extra_bank[1] = state->mmc_extra_bank[4] = state->mmc_extra_bank[5] = state->mmc_extra_bank[6] = 0;
1447         state->mmc_extra_bank[7] = state->mmc_extra_bank[8] = state->mmc_extra_bank[9] = state->mmc_extra_bank[0xa] = state->mmc_extra_bank[0xb] = 0;
1448         state->map14_reg[0] = state->map14_reg[1] = 0;
1449         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1450         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1451         state->mmc_cmd1 = 0;
1452         state->mmc_cmd2 = 0x80;
1453         state->mmc_prg_base = state->mmc_chr_base = 0;
1454         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1455         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1456         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1457         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1458         break;
1459      case 15:
1460         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1461         prg32(machine, 0);
1462         break;
1463      case 16:
1464      case 17:
1465      case 18:
1466      case 157:
1467      case 159:
1468         state->mmc_cmd1 = 0;
1469         prg16_89ab(machine, 0);
1470         prg16_cdef(machine, state->prg_chunks - 1);
1471         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1472         break;
1473      case 19:
1474         state->mmc_cmd1 = 0;
1475         prg16_89ab(machine, 0);
1476         prg16_cdef(machine, state->prg_chunks - 1);
1477         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1478         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1479         break;
1480      case 21:
1481      case 22:
1482      case 23:
1483      case 24:
1484      case 25:
1485      case 26:
1486      case 33:
1487      case 48:
1488      case 73:
1489      case 75:
1490      case 80:
1491      case 82:
1492      case 85:
1493      case 87:
1494      case 117:
1495      case 207:
1496      case 222:
1497      case 252:
1498         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1499         prg16_89ab(machine, 0);
1500         prg16_cdef(machine, state->prg_chunks - 1);
1501         break;
1502      case 32:
1503         state->mmc_cmd1 = 0;
1504         prg16_89ab(machine, 0);
1505         prg16_cdef(machine, state->prg_chunks - 1);
1506         if (state->crc_hack)
1507            set_nt_mirroring(machine, PPU_MIRROR_HIGH);  // needed by Major League
1508         break;
1509      case 34:
1510         prg32(machine, 0);
1511         break;
1512      case 35:
1513         prg32(machine, 0xff);
1514         break;
1515      case 37:
1516         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1517         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1518         state->mmc_cmd1 = 0;
1519         state->mmc_cmd2 = 0x80;
1520         state->mmc_prg_base = state->mmc_chr_base = 0;
1521         state->mmc_prg_mask = 0x07;
1522         state->mmc_chr_mask = 0x7f;
1523         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1524         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1525         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1526         break;
1527      case 40:
1528         prg8_67(machine, 0xfe);
1529         prg8_89(machine, 0xfc);
1530         prg8_ab(machine, 0xfd);
1531         prg8_cd(machine, 0xfe);
1532         prg8_ef(machine, 0xff);
1533         break;
1534      case 41:
1535         state->mmc_cmd1 = 0;
1536         prg32(machine, 0);
1537         break;
1538      case 42:
1539         prg32(machine, state->prg_chunks - 1);
1540         break;
1541      case 43:
1542         prg32(machine, 0);
1543         if (state->battery)
1544            memset(state->battery_ram, 0x2000, 0xff);
1545         else if (state->prg_ram)
1546            memset(state->wram, 0x2000, 0xff);
1547         break;
1548      case 44:
1549      case 47:
1550      case 49:
1551         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1552         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1553         state->mmc_cmd1 = 0;
1554         state->mmc_cmd2 = 0x80;
1555         state->mmc_prg_base = state->mmc_chr_base = 0;
1556         state->mmc_prg_mask = 0x0f;
1557         state->mmc_chr_mask = 0x7f;
1558         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1559         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1560         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1561         break;
1562      case 45:
1563         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1564         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1565         state->mmc_cmd1 = 0;
1566         state->mmc_cmd2 = 0x80;
1567         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1568         state->mapper45_reg[0] = state->mapper45_reg[1] = state->mapper45_reg[2] = state->mapper45_reg[3] = 0;
1569         state->mmc_prg_base = 0x30;
1570         state->mmc_prg_mask = 0x3f;
1571         state->mmc_chr_base = 0;
1572         state->mmc_chr_mask = 0x7f;
1573         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1574         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1575         //          memory_set_bankptr(machine, "bank5", state->wram);
1576         break;
1577      case 46:
1578         prg32(machine, 0);
1579         chr8(machine, 0, CHRROM);
1580         break;
1581      case 54:
1582         prg32(machine, 0);
1583         chr8(machine, 0, CHRROM);
1584         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1585         break;
1586      case 50:
1587         prg8_67(machine, 0x0f);
1588         prg8_89(machine, 0x08);
1589         prg8_ab(machine, 0x09);
1590         prg8_cd(machine, 0);
1591         prg8_ef(machine, 0x0b);
1592         break;
1593      case 51:
1594         state->mapper51_reg[0] = 0x01;
1595         state->mapper51_reg[1] = 0x00;
1596         bmc_ball11_set_banks(machine);
1597         break;
1598      case 52:
1599         state->mmc_prg_bank[0] = 0xfe;
1600         state->mmc_prg_bank[2] = 0xfe;
1601         state->mmc_prg_bank[1] = 0xff;
1602         state->mmc_prg_bank[3] = 0xff;
1603         state->mmc_cmd1 = 0;
1604         state->mmc_cmd2 = 0x80;
1605         state->map52_reg_written = 0;
1606         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1607         state->mmc_prg_base = 0;
1608         state->mmc_prg_mask = 0x1f;
1609         state->mmc_chr_base = 0;
1610         state->mmc_chr_mask = 0xff;
1611         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1612         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1613         //          memory_set_bankptr(machine, "bank5", state->wram);
1614         break;
1615      case 57:
1616         state->mmc_cmd1 = 0x00;
1617         state->mmc_cmd2 = 0x00;
1618         prg16_89ab(machine, 0);
1619         prg16_cdef(machine, 0);
1620         chr8(machine, 0, CHRROM);
1621         break;
1622      case 58:
1623         prg32(machine, 0);
1624         chr8(machine, 0, CHRROM);
1625         break;
1626      case 61:
1627      case 62:
1628      case 86:
1629         prg32(machine, 0);
1630         break;
1631      case 64:
1632      case 158:
1633         state->mmc_cmd1 = 0;
1634         prg16_89ab(machine, state->prg_chunks - 1);
1635         prg16_cdef(machine, state->prg_chunks - 1);
1636         break;
1637      case 65:
1638      case 67:
1639      case 69:
1640      case 72:
1641      case 78:
1642      case 92:
1643         prg16_89ab(machine, 0);
1644         prg16_cdef(machine, state->prg_chunks - 1);
1645         break;
1646      case 68:
1647         state->m68_mirror = state->m0 = state->m1 = 0;
1648         prg16_89ab(machine, 0);
1649         prg16_cdef(machine, state->prg_chunks - 1);
1650         break;
1651      case 70:
1652         prg16_89ab(machine, state->prg_chunks - 2);
1653         prg16_cdef(machine, state->prg_chunks - 1);
1654         break;
1655      case 71:
1656         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
1657         prg16_89ab(machine, 0);
1658         prg16_cdef(machine, state->prg_chunks - 1);
1659         break;
1660      case 76:
1661         prg8_89(machine, 0);
1662         prg8_ab(machine, 1);
1663         //cd is bankable, but this should init all banks just fine.
1664         prg16_cdef(machine, state->prg_chunks - 1);
1665         chr2_0(machine, 0, CHRROM);
1666         chr2_2(machine, 1, CHRROM);
1667         chr2_4(machine, 2, CHRROM);
1668         chr2_6(machine, 3, CHRROM);
1669         state->mmc_cmd1 = 0;
1670         break;
1671      case 77:
1672         prg32(machine, 0);
1673         chr2_2(machine, 0, CHRROM);
1674         chr2_4(machine, 1, CHRROM);
1675         chr2_6(machine, 2, CHRROM);
1676         break;
1677      case 79:
1678      case 146:
1679         /* Mirroring always horizontal...? */
1680         //          Mirroring = 1;
1681         set_nt_mirroring(machine, PPU_MIRROR_HORZ);
1682         chr8(machine, 0, CHRROM);
1683         prg32(machine, 0);
1684         break;
1685      case 228:
1686         chr8(machine, 0, CHRROM);
1687         prg32(machine, 0);
1688         break;
1689      case 83:
1690         state->mapper83_reg[9] = 0x0f;
1691         prg8_cd(machine, 0x1e);
1692         prg8_ef(machine, 0x1f);
1693         break;
1694      case 88:
1695         prg8_89(machine, 0xc);
1696         prg8_ab(machine, 0xd);
1697         prg8_cd(machine, 0xe);
1698         prg8_ef(machine, 0xf);
1699         break;
1700      case 89:
1701         prg16_89ab(machine, 0);
1702         prg16_cdef(machine, state->prg_chunks - 1);
1703         set_nt_mirroring(machine, PPU_MIRROR_LOW);
1704         break;
1705      case 91:
1706         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1707         prg16_89ab(machine, state->prg_chunks - 1);
1708         prg16_cdef(machine, state->prg_chunks - 1);
1709         break;
1710      case 93:
1711      case 94:
1712      case 95:
1713      case 101:
1714         prg16_89ab(machine, 0);
1715         prg16_cdef(machine, state->prg_chunks - 1);
1716         break;
1717      case 97:
1718         prg16_89ab(machine, state->prg_chunks - 1);
1719         prg16_cdef(machine, state->prg_chunks - 1);
1720         break;
1721      case 112:
1722         state->mmc_cmd1 = 0;
1723         prg16_89ab(machine, 0);
1724         prg16_cdef(machine, state->prg_chunks - 1);
1725         break;
1726      case 36:
1727      case 38:
1728      case 39:
1729      case 66:
1730      case 107:
1731      case 113:
1732      case 177:
1733      case 179:
1734      case 184:
1735      case 140:
1736      case 144:
1737      case 240:
1738      case 241:
1739      case 242:
1740      case 244:
1741         prg32(machine, 0);
1742         break;
1743      case 104:
1744         prg16_89ab(machine, 0x00);
1745         prg16_cdef(machine, 0x0f);
1746         break;
1747      case 106:
1748         prg8_89(machine, (state->prg_chunks << 1) - 1);
1749         prg8_ab(machine, 0);
1750         prg8_cd(machine, 0);
1751         prg8_ef(machine, (state->prg_chunks << 1) - 1);
1752         break;
1753      case 114:
1754         state->map114_reg = state->map114_reg_enabled = 0;
1755         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1756         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1757         state->mmc_cmd1 = 0;
1758         state->mmc_cmd2 = 0x80;
1759         state->mmc_prg_base = state->mmc_chr_base = 0;
1760         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1761         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1762         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1763         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1764         break;
1765      case 115:
1766         state->mapper115_reg[0] = 0;
1767         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1768         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1769         state->mmc_cmd1 = 0;
1770         state->mmc_cmd2 = 0x80;
1771         state->mmc_prg_base = state->mmc_chr_base = 0;
1772         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1773         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1774         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1775         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1776         break;
1777      case 121:
1778         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1779         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1780         state->mapper121_reg[0] = state->mapper121_reg[1] = state->mapper121_reg[2] = 0;
1781         state->mmc_cmd1 = 0;
1782         state->mmc_cmd2 = 0x80;
1783         state->mmc_prg_base = state->mmc_chr_base = 0;
1784         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1785         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1786         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1787         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1788         break;
1789      case 132:
1790      case 172:
1791      case 173:
1792         state->txc_reg[0] = state->txc_reg[1] = state->txc_reg[2] = state->txc_reg[3] = 0;
1793         prg32(machine, 0);
1794         break;
1795      case 134:
1796         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1797         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1798         state->mmc_cmd1 = 0;
1799         state->mmc_cmd2 = 0x80;
1800         state->mmc_prg_base = state->mmc_chr_base = 0;
1801         state->mmc_prg_mask = 0x1f;
1802         state->mmc_chr_mask = 0xff;
1803         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1804         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1805         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1806         break;
1807      case 166:
1808         state->subor_reg[0] = state->subor_reg[1] = state->subor_reg[2] = state->subor_reg[3] = 0;
1809         prg16_89ab(machine, 0);
1810         prg16_cdef(machine, 0x07);
1811         break;
1812      case 167:
1813         state->subor_reg[0] = state->subor_reg[1] = state->subor_reg[2] = state->subor_reg[3] = 0;
1814         prg16_89ab(machine, 0);
1815         prg16_cdef(machine, 0x20);
1816         break;
1817      case 136:
1818         state->mmc_cmd1 = 0;
1819         prg32(machine, 0);
1820         break;
1821      case 137:
1822         state->mmc_cmd1 = 0;
1823         prg32(machine, 0);
1824         chr8(machine, state->chr_chunks - 1, CHRROM);
1825         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1826         break;
1827      case 138:
1828      case 139:
1829      case 141:
1830         state->mmc_cmd1 = 0;
1831         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1832         prg32(machine, 0);
1833         chr8(machine, 0, state->mmc_chr_source);
1834         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1835         break;
1836      case 143:
1837         prg16_89ab(machine, 0);
1838         prg16_cdef(machine, 1);
1839         chr8(machine, 0, CHRROM);
1840         break;
1841      case 133:
1842      case 145:
1843      case 147:
1844      case 148:
1845      case 149:
1846      case 171:
1847         prg32(machine, 0);
1848         chr8(machine, 0, CHRROM);
1849         break;
1850      case 150:
1851         state->mmc_cmd1 = 0;
1852         prg32(machine, 0);
1853         chr8(machine, 0, CHRROM);
1854         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1855         break;
1856      case 152:
1857         prg16_89ab(machine, 0);
1858         prg16_cdef(machine, state->prg_chunks - 1);
1859         chr8(machine, 0, CHRROM);
1860         break;
1861      case 153:
1862         state->mmc_cmd1 = 0;
1863         prg16_89ab(machine, 0);
1864         prg16_cdef(machine, state->prg_chunks - 1);
1865         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1866         // Famicom Jump II needs also the following!
1867         for (i = 0; i < 8; i++)
1868            state->map153_reg[i] = 0;
1869
1870         state->map153_bank_latch = 0;
1871         if (state->crc_hack)
1872            fjump2_set_prg(machine);
1873         break;
1874      case 154:
1875         prg16_89ab(machine, state->prg_chunks - 2);
1876         prg16_cdef(machine, state->prg_chunks - 1);
1877         break;
1878      case 156:
1879         prg16_89ab(machine, state->prg_chunks - 2);
1880         prg16_cdef(machine, state->prg_chunks - 1);
1881         set_nt_mirroring(machine, PPU_MIRROR_LOW);
1882         break;
1883      case 164:
1884         prg32(machine, 0xff);
1885         state->mid_ram_enable = 1;
1886         break;
1887      case 176:
1888         prg32(machine, (state->prg_chunks - 1) >> 1);
1889         break;
1890      case 178:
1891         state->mmc_cmd1 = 0;
1892         prg32(machine, 0);
1893         break;
1894      case 180:
1895         prg16_89ab(machine, 0);
1896         prg16_cdef(machine, 0);
1897         break;
1898      case 182:
1899         prg32(machine, (state->prg_chunks - 1) >> 1);
1900         break;
1901      case 188:
1902         prg16_89ab(machine, 0);
1903         prg16_cdef(machine, (state->prg_chunks - 1) ^ 0x08);
1904         break;
1905      case 187:
1906         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1907         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1908         state->mapper187_reg[0] = state->mapper187_reg[1] = state->mapper187_reg[2] = state->mapper187_reg[3] = 0;
1909         state->mmc_cmd1 = 0;
1910         state->mmc_cmd2 = 0x80;
1911         state->mmc_prg_base = state->mmc_chr_base = 0;
1912         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1913         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1914         kof96_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1915         kof96_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1916         break;
1917      case 189:
1918         state->mmc_cmd1 = 0;
1919         state->mmc_cmd2 = 0x80;
1920         state->mmc_chr_base = 0;
1921         state->mmc_chr_mask = 0xff;
1922         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1923         prg32(machine, 0);
1924         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1925         break;
1926      case 193:
1927         prg32(machine, (state->prg_chunks - 1) >> 1);
1928         set_nt_mirroring(machine, PPU_MIRROR_VERT);
1929         break;
1930      case 197:
1931         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1932         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1933         state->mmc_cmd1 = 0;
1934         state->mmc_cmd2 = 0x80;
1935         state->mmc_prg_base = state->mmc_chr_base = 0;
1936         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1937         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1938         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1939         unl_sf3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1940         break;
1941      case 198:
1942         state->mmc_prg_bank[0] = 0x00;
1943         state->mmc_prg_bank[1] = 0x01;
1944         state->mmc_prg_bank[2] = 0x4e;
1945         state->mmc_prg_bank[3] = 0x4f;
1946         state->mmc_cmd1 = 0;
1947         state->mmc_cmd2 = 0x80;
1948         state->mmc_prg_base = state->mmc_chr_base = 0;
1949         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1950         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1951         waixing_f_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1952         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1953         break;
1954      case 199:
1955         state->mmc_prg_bank[0] = 0x00;
1956         state->mmc_prg_bank[1] = 0x01;
1957         state->mmc_prg_bank[2] = 0x3e;
1958         state->mmc_prg_bank[3] = 0x3f;
1959         state->mmc_cmd1 = 0;
1960         state->mmc_cmd2 = 0x80;
1961         state->mmc_prg_base = state->mmc_chr_base = 0;
1962         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
1963         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1964         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1965         waixing_g_set_chr(machine, state->mmc_chr_base, state->mmc_chr_mask);
1966         break;
1967      case 200:
1968         prg16_89ab(machine, state->prg_chunks - 1);
1969         prg16_cdef(machine, state->prg_chunks - 1);
1970         break;
1971      case 201:
1972      case 213:
1973         prg32(machine, 0);
1974         chr8(machine, 0, CHRROM);
1975         break;
1976      case 202:
1977      case 203:
1978      case 204:
1979      case 214:
1980         prg16_89ab(machine, 0);
1981         prg16_cdef(machine, 0);
1982         chr8(machine, 0, CHRROM);
1983         break;
1984      case 205:
1985         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1986         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
1987         state->mmc_cmd1 = 0;
1988         state->mmc_cmd2 = 0x80;
1989         state->mmc_prg_base = 0x10;
1990         state->mmc_prg_mask = 0x1f;
1991         state->mmc_chr_base = 0;
1992         state->mmc_chr_mask = 0xff;
1993         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
1994         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
1995         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
1996         break;
1997      case 208:
1998         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
1999         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
2000         state->map208_reg[0] = state->map208_reg[1] = state->map208_reg[2] = state->map208_reg[3] = state->map208_reg[4] = 0;
2001         state->mmc_cmd1 = 0;
2002         state->mmc_cmd2 = 0x80;
2003         state->mmc_prg_base = state->mmc_chr_base = 0;
2004         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
2005         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
2006         mmc3_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
2007         mmc3_set_chr(machine, state->mmc_chr_source, state->mmc_chr_base, state->mmc_chr_mask);
2008         break;
2009      case 212:
2010         chr8(machine, 0xff, CHRROM);
2011         prg32(machine, 0xff);
2012         break;
2013      case 215:
2014         state->mmc_prg_bank[0] = 0x00;
2015         state->mmc_prg_bank[2] = 0xfe;
2016         state->mmc_prg_bank[1] = 0x01;
2017         state->mmc_prg_bank[3] = 0xff;
2018         state->mmc_cmd1 = 0;
2019         state->mmc_cmd2 = 0x80;
2020         state->map215_reg[0] = 0x00;
2021         state->map215_reg[1] = 0xff;
2022         state->map215_reg[2] = 0x04;
2023         state->map215_reg[3] = 0;
2024         state->mmc_prg_base = 0;
2025         state->mmc_prg_mask = 0x1f;
2026         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
2027         sgame_boog_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
2028         sgame_boog_set_chr(machine, state->mmc_chr_source);
2029         break;
2030      case 216:
2031         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
2032         prg32(machine, 0);
2033         chr8(machine, 0, state->mmc_chr_source);
2034         break;
2035      case 217:
2036         state->map217_reg[0] = 0x00;
2037         state->map217_reg[1] = 0xff;
2038         state->map217_reg[2] = 0x03;
2039         state->map217_reg[3] = 0;
2040         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
2041         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
2042         state->mmc_cmd1 = 0;
2043         state->mmc_cmd2 = 0x80;
2044         state->mmc_prg_base = state->mmc_chr_base = 0;
2045         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
2046         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
2047         bmc_gc6in1_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
2048         bmc_gc6in1_set_chr(machine, state->mmc_chr_source);
2049         break;
2050      case 221:
2051         state->mmc_cmd1 = 0;
2052         state->mmc_cmd2 = 0;
2053         prg16_89ab(machine, 0);
2054         prg16_cdef(machine, 0);
2055         break;
2056      case 225:
2057         prg32(machine, 0);
2058         break;
2059      case 226:
2060         state->mmc_cmd1 = 0;
2061         state->mmc_cmd2 = 0;
2062         prg32(machine, 0);
2063         break;
2064      case 227:
2065         prg16_89ab(machine, 0);
2066         prg16_cdef(machine, 0);
2067         break;
2068      case 229:
2069      case 255:
2070         prg16_89ab(machine, 0);
2071         prg16_cdef(machine, 1);
2072         chr8(machine, 0, CHRROM);
2073         set_nt_mirroring(machine, PPU_MIRROR_VERT);
2074         break;
2075      case 230:
2076         prg16_89ab(machine, 0);
2077         prg16_cdef(machine, 7);
2078         break;
2079      case 231:
2080         prg16_89ab(machine, 0);
2081         prg16_cdef(machine, state->prg_chunks - 1);
2082         set_nt_mirroring(machine, PPU_MIRROR_VERT);
2083         break;
2084      case 232:
2085         state->mmc_cmd1 = 0x18;
2086         state->mmc_cmd2 = 0x00;
2087         bf9096_set_prg(machine);
2088         break;
2089      case 243:
2090         state->mmc_vrom_bank[0] = 3;
2091         state->mmc_cmd1 = 0;
2092         chr8(machine, 3, CHRROM);
2093         prg32(machine, 0);
2094         set_nt_mirroring(machine, PPU_MIRROR_VERT);
2095         break;
2096      case 246:
2097         prg32(machine, 0xff);
2098         break;
2099      case 249:
2100         state->mmc_prg_bank[0] = state->mmc_prg_bank[2] = 0xfe;
2101         state->mmc_prg_bank[1] = state->mmc_prg_bank[3] = 0xff;
2102         state->mmc_cmd1 = 0;
2103         state->mmc_cmd2 = 0x80;
2104         state->map249_reg = 0;
2105         state->mmc_prg_base = state->mmc_chr_base = 0;
2106         state->mmc_prg_mask = state->mmc_chr_mask = 0xff;
2107         state->mmc_chr_source = state->chr_chunks ? CHRROM : CHRRAM;
2108         waixing_sec_set_prg(machine, state->mmc_prg_base, state->mmc_prg_mask);
2109         waixing_sec_set_chr(machine, state->mmc_chr_base, state->mmc_chr_mask);
2110         break;
2111      default:
2112         /* Mapper not supported */
2113         err = 2;
2114         break;
2115   }
2116
2117   return err;
2118}
2119#endif

Previous 15994 Revisions Next


© 1998-2018 The MESS Team