Merge branch 'master' of github.com:TASVideos/fceux

This commit is contained in:
mjbudd77 2021-07-31 20:07:51 -04:00
commit f45ba2f8af
5 changed files with 47 additions and 18 deletions

View File

@ -17,10 +17,12 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* CoolBoy 400-in-1 FK23C-mimic mapper 16Mb/32Mb PROM + 128K/256K CHR RAM, optional SRAM, optional battery
* only MMC3 mode
* SMD132 and SMD133 ASICs, MMC3 clones that can address up to 32 MiB of PRG-ROM, 256 KiB of CHR-RAM, and 8 KiB of WRAM.
*
* $6000
* COOLBOY cartridges use registers at address $6xxx
* MINDKIDS cartridges use a solder pad labelled "5/6K" to select between $5000 and $6000
*
* $xxx0
* 7 bit 0
* ---- ----
* ABCC DEEE
@ -31,7 +33,7 @@
* |+--------- PRG mask (PRG A17 from 0: MMC3; 1: offset)
* +---------- CHR mask (CHR A17 from 0: MMC3; 1: alternate)
*
* $6001
* $xxx1
*
* 7 bit 0
* ---- ----
@ -43,14 +45,14 @@
* |+--------- PRG mask (PRG A19 from 0: offset; 1: MMC3)
* +---------- PRG mask (PRG A18 from 0: MMC3; 1: offset)
*
* $6002
* $xxx2
* 7 bit 0
* ---- ----
* xxxx MMMM
* ||||
* ++++-- CHR offset for GNROM mode (CHR A16, A15, A14, A13)
*
* $6003
* $xxx3
* 7 bit 0
* ---- ----
* NPxP QQRx
@ -63,9 +65,6 @@
* |+--------- "Weird MMC3 mode"
* +---------- Lockout (prevent further writes to these four registers, only works in MMC3 mode)
*
* There is also alternative version from MINDKIDS,
* the only difference is register addresses - 500x instead of 600x
*
* Also some new cartridges from MINDKIDS have /WE and /OE pins connected to mapper,
* which allows you to rewrite flash memory without soldering.
* This also allows console to write data to the cartridge.
@ -177,6 +176,7 @@ static void MINDKIDSPower(void) {
SetWriteHandler(0x5000, 0x5fff, COOLBOYWrite);
}
// Registers at $6xxx
void COOLBOY_Init(CartInfo *info) {
GenMMC3_Init(info, 2048, 256, 8, 1);
pwrap = COOLBOYPW;
@ -186,6 +186,7 @@ void COOLBOY_Init(CartInfo *info) {
AddExState(EXPREGS, 4, 0, "EXPR");
}
// Registers at $5xxx
void MINDKIDS_Init(CartInfo *info) {
GenMMC3_Init(info, 2048, 256, 8, 1);
pwrap = COOLBOYPW;
@ -194,3 +195,19 @@ void MINDKIDS_Init(CartInfo *info) {
info->Reset = COOLBOYReset;
AddExState(EXPREGS, 4, 0, "EXPR");
}
// For NES 2.0 loader
void SMD132_SMD133_Init(CartInfo *info) {
switch (info->submapper)
{
case 0:
COOLBOY_Init(info);
break;
case 1:
MINDKIDS_Init(info);
break;
default:
FCEU_PrintError("Unknown submapper: #%d.", info->submapper);
break;
}
}

View File

@ -213,7 +213,14 @@ uint32 GetGamepadPressedImmediate()
return JSButtons;
}
int DTestButton(ButtConfig *bc, uint8_t just_down)
// Function to check if key/button/combination is pressed/held
// bc: button mapping structure
// just_down: indicates that only new button presses should be logged, not held down
// block_meta: indicates that key can't be pressed in combination with meta keys
// if it's not set explicitly,
// e.g. do not trigger "F1" if "Ctrl+F1" is pressed
int DTestButton(ButtConfig *bc, uint8_t just_down, uint8_t block_meta)
{
static unsigned int *keys_data = !just_down ? GetKeyboard_nr() : GetKeyboard_jd();
@ -230,10 +237,10 @@ int DTestButton(ButtConfig *bc, uint8_t just_down)
int ctlstate = (cmd & CMD_KEY_LALT) ? keys_data[SCAN_LEFTALT] : 0;
ctlstate |= (cmd & CMD_KEY_RALT) ? keys_data[SCAN_RIGHTALT] : 0;
if (!ctlstate)
return 0;
continue;
}
else if ((cmdmask != SCAN_LEFTALT && keys_data[SCAN_LEFTALT]) || (cmdmask != SCAN_RIGHTALT && keys_data[SCAN_RIGHTALT]))
return 0;
else if (block_meta && ((cmdmask != SCAN_LEFTALT && keys_data[SCAN_LEFTALT]) || (cmdmask != SCAN_RIGHTALT && keys_data[SCAN_RIGHTALT])))
continue;
if (cmd & CMD_KEY_CTRL)
{
@ -242,7 +249,7 @@ int DTestButton(ButtConfig *bc, uint8_t just_down)
if (!ctlstate)
continue;
}
else if ((cmdmask != SCAN_LEFTCONTROL && keys_data[SCAN_LEFTCONTROL]) || (cmdmask != SCAN_RIGHTCONTROL && keys_data[SCAN_RIGHTCONTROL]))
else if (block_meta && ((cmdmask != SCAN_LEFTCONTROL && keys_data[SCAN_LEFTCONTROL]) || (cmdmask != SCAN_RIGHTCONTROL && keys_data[SCAN_RIGHTCONTROL])))
continue;
if (cmd & CMD_KEY_SHIFT)
@ -252,7 +259,7 @@ int DTestButton(ButtConfig *bc, uint8_t just_down)
if (!ctlstate)
continue;
}
else if ((cmdmask != SCAN_LEFTSHIFT && keys_data[SCAN_LEFTSHIFT]) || (cmdmask != SCAN_RIGHTSHIFT && keys_data[SCAN_RIGHTSHIFT]))
else if (block_meta && ((cmdmask != SCAN_LEFTSHIFT && keys_data[SCAN_LEFTSHIFT]) || (cmdmask != SCAN_RIGHTSHIFT && keys_data[SCAN_RIGHTSHIFT])))
continue;
if (cmd & CMD_KEY_WIN)
@ -262,7 +269,7 @@ int DTestButton(ButtConfig *bc, uint8_t just_down)
if (!ctlstate)
continue;
}
else if ((cmdmask != SCAN_LEFTWIN && keys_data[SCAN_LEFTWIN]) || (cmdmask != SCAN_RIGHTWIN && keys_data[SCAN_RIGHTWIN]))
else if (block_meta && ((cmdmask != SCAN_LEFTWIN && keys_data[SCAN_LEFTWIN]) || (cmdmask != SCAN_RIGHTWIN && keys_data[SCAN_RIGHTWIN])))
continue;
if(keys_data[cmdmask])
@ -1841,9 +1848,12 @@ int FCEUD_TestCommandState(int c)
case EMUCMD_FRAME_ADVANCE:
case EMUCMD_SPEED_TURBO:
case EMUCMD_TASEDITOR_REWIND:
// Check that key/button is held down
return DTestButton(&FCEUD_CommandMapping[c], 0);
default:
return DTestButton(&FCEUD_CommandMapping[c], 1);
// Check that key/button is just pressed, not held down
// Register only if no additional meta keys are pressed
return DTestButton(&FCEUD_CommandMapping[c], 1, 1);
}
}

View File

@ -66,7 +66,7 @@ void ParseGIInput(FCEUGI *GameInfo);
int FCEUD_TestCommandState(int c);
void FCEUD_UpdateInput();
int DWaitButton(HWND hParent, const char *text, ButtConfig *bc);
int DTestButton(ButtConfig *bc, uint8_t just_down = 0);
int DTestButton(ButtConfig *bc, uint8_t just_down = 0, uint8_t block_meta = 0);
char *MakeButtString(ButtConfig *bc, int appendKB = 1);
extern CFGSTRUCT HotkeyConfig[];

View File

@ -727,6 +727,7 @@ BMAPPINGLocal bmap[] = {
{"F-15 MMC3 Based", 259, BMCF15_Init},
{"HP10xx/H20xx Boards", 260, BMCHPxx_Init},
{"810544-CA-1", 261, BMC810544CA1_Init},
{"SMD132/SMD133", 268, SMD132_SMD133_Init},
{"Impact Soft MMC3 Flash Board", 406, Mapper406_Init },

View File

@ -162,6 +162,7 @@ void MINDKIDS_Init(CartInfo *info);
void FNS_Init(CartInfo *info);
void BS400R_Init(CartInfo *info);
void BS4040R_Init(CartInfo *info);
void SMD132_SMD133_Init(CartInfo *info);
extern uint8 *UNIFchrrama; // Meh. So I can stop CHR RAM
// bank switcherooing with certain boards...