From 2bca72186d9b0958826de63b9aafcb26ace46307 Mon Sep 17 00:00:00 2001 From: retro-wertz Date: Fri, 15 Jun 2018 11:30:23 +0800 Subject: [PATCH] Mapper30: Backport 4-screen mirroring support https://github.com/TASVideos/fceux/commit/9b6ff8fe490cae56f6a3bc24e0ac19e47b5eaa41 --- src/boards/unrom512.c | 18 +++++++++++++++++- src/ines.h | 9 ++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/boards/unrom512.c b/src/boards/unrom512.c index f82d7f9..9bc4736 100644 --- a/src/boards/unrom512.c +++ b/src/boards/unrom512.c @@ -210,6 +210,8 @@ static void UNROM512HSync(void) { } void UNROM512_Init(CartInfo *info) { + int mirror; + memset(fceumm_flash_buf, 0x00, fceumm_flash_buf_size); flash_state = 0; flash_bank = 0; @@ -222,7 +224,21 @@ void UNROM512_Init(CartInfo *info) { else chrram_mask = 0x60; - SetupCartMirroring(info->mirror, (info->mirror >= MI_0) ? 0 : 1, 0); + mirror = (head.ROM_type & 1) | ((head.ROM_type & 8) >> 2); + switch (mirror) { + case 0: // hard horizontal, internal + SetupCartMirroring(MI_H, 1, NULL); + break; + case 1: // hard vertical, internal + SetupCartMirroring(MI_V, 1, NULL); + break; + case 2: // switchable 1-screen, internal (flags: 4-screen + horizontal) + SetupCartMirroring(MI_0, 0, NULL); + break; + case 3: // hard four screen, last 8k of 32k RAM (flags: 4-screen + vertical) + SetupCartMirroring(4, 1, VROM + (info->vram_size - 8192)); + break; + } bus_conflict = !info->battery; latcheinit = 0; WLSync = UNROM512LSync; diff --git a/src/ines.h b/src/ines.h index 2f94261..b3d07ba 100644 --- a/src/ines.h +++ b/src/ines.h @@ -22,9 +22,6 @@ #ifndef _FCEU_INES_H #define _FCEU_INES_H -extern uint32 ROM_size; -extern uint32 VROM_size; - typedef struct { char ID[4]; /*NES^Z*/ uint8 ROM_size; @@ -34,6 +31,12 @@ typedef struct { uint8 reserve[8]; } iNES_HEADER; +extern uint8 *ROM; +extern uint8 *VROM; +extern uint32 ROM_size; +extern uint32 VROM_size; +extern iNES_HEADER head; + void NSFVRC6_Init(void); void NSFMMC5_Init(void); void NSFAY_Init(void);