Use C-comment style
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
#if defined(_WIN32) && !defined(_XBOX) && !defined(__LIBRETRO__)
|
||||
|
||||
HANDLE SerialPort = NULL; // Handle of SerialPort itself.
|
||||
HANDLE SerialPort = NULL; /* Handle of SerialPort itself. */
|
||||
|
||||
BOOL SerialOpen(int port, int baud) {
|
||||
HANDLE Comport;
|
||||
@@ -15,24 +15,24 @@ BOOL SerialOpen(int port, int baud) {
|
||||
else
|
||||
sprintf(str, "COM%d", port);
|
||||
|
||||
// Open the serial port
|
||||
/* Open the serial port */
|
||||
if ((Comport = CreateFile(str, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL)) == INVALID_HANDLE_VALUE)
|
||||
return FALSE;
|
||||
|
||||
// Configure Serial port (Setup Comm)
|
||||
/* Configure Serial port (Setup Comm) */
|
||||
|
||||
// Buffer sizes
|
||||
/* Buffer sizes */
|
||||
if (!SetupComm(Comport, 128, 128))
|
||||
return FALSE;
|
||||
|
||||
// Setup DCB using current values
|
||||
/* Setup DCB using current values */
|
||||
if (!GetCommState(Comport, &myDCB))
|
||||
return FALSE;
|
||||
|
||||
myDCB.fInX = FALSE; // Turn off xon/xoff handler
|
||||
myDCB.fInX = FALSE; /* Turn off xon/xoff handler */
|
||||
myDCB.fOutX = FALSE;
|
||||
myDCB.fOutxDsrFlow = FALSE;
|
||||
myDCB.fOutxCtsFlow = FALSE; // no hardware flow control.
|
||||
myDCB.fOutxCtsFlow = FALSE; /* no hardware flow control. */
|
||||
myDCB.BaudRate = baud;
|
||||
myDCB.DCBlength = sizeof(DCB);
|
||||
myDCB.fBinary = 1;
|
||||
@@ -52,12 +52,12 @@ BOOL SerialOpen(int port, int baud) {
|
||||
if (!SetCommState(Comport, &myDCB))
|
||||
return FALSE;
|
||||
|
||||
// Set timeouts
|
||||
/* Set timeouts */
|
||||
CTout.ReadIntervalTimeout = 0xffffffff;
|
||||
CTout.ReadTotalTimeoutMultiplier = 0;
|
||||
CTout.ReadTotalTimeoutConstant = 0;
|
||||
CTout.WriteTotalTimeoutMultiplier = 0;
|
||||
CTout.WriteTotalTimeoutConstant = 5000; // don't hang if CTS is locked, for example
|
||||
CTout.WriteTotalTimeoutConstant = 5000; /* don't hang if CTS is locked, for example */
|
||||
|
||||
SetCommTimeouts(Comport, &CTout);
|
||||
EscapeCommFunction(Comport, SETDTR);
|
||||
|
||||
@@ -32,14 +32,14 @@ static uint8 cpu410x[16], ppu201x[16], apu40xx[64];
|
||||
|
||||
/* IRQ Registers */
|
||||
static uint8 IRQCount, IRQa, IRQReload;
|
||||
#define IRQLatch cpu410x[0x1] // accc cccc, a = 0, AD12 switching, a = 1, HSYNC switching
|
||||
#define IRQLatch cpu410x[0x1] /* accc cccc, a = 0, AD12 switching, a = 1, HSYNC switching */
|
||||
|
||||
/* MMC3 Registers */
|
||||
static uint8 inv_hack = 0; /* some OneBus Systems have swapped PRG reg commans in MMC3 inplementation,
|
||||
* trying to autodetect unusual behavior, due not to add a new mapper.
|
||||
*/
|
||||
#define mmc3cmd cpu410x[0x5] // pcv- ----, p - program swap, c - video swap, v - internal VRAM enable
|
||||
#define mirror cpu410x[0x6] // ---- ---m, m = 0 - H, m = 1 - V
|
||||
#define mmc3cmd cpu410x[0x5] /* pcv- ----, p - program swap, c - video swap, v - internal VRAM enable */
|
||||
#define mirror cpu410x[0x6] /* ---- ---m, m = 0 - H, m = 1 - V */
|
||||
|
||||
/* APU Registers */
|
||||
static uint8 pcm_enable = 0, pcm_irq = 0;
|
||||
|
||||
10
src/cart.c
10
src/cart.c
@@ -136,7 +136,7 @@ DECLFR(CartBR) {
|
||||
}
|
||||
|
||||
DECLFW(CartBW) {
|
||||
//printf("Ok: %04x:%02x, %d\n",A,V,PRGIsRAM[A>>11]);
|
||||
/* printf("Ok: %04x:%02x, %d\n",A,V,PRGIsRAM[A>>11]); */
|
||||
if (PRGIsRAM[A >> 11] && Page[A >> 11])
|
||||
Page[A >> 11][A] = V;
|
||||
}
|
||||
@@ -439,7 +439,7 @@ static readfunc GenieBackup[3];
|
||||
static DECLFR(GenieFix1) {
|
||||
uint8 r = GenieBackup[0](A);
|
||||
|
||||
if ((modcon >> 1) & 1) // No check
|
||||
if ((modcon >> 1) & 1) /* No check */
|
||||
return genieval[0];
|
||||
else if (r == geniech[0])
|
||||
return genieval[0];
|
||||
@@ -450,7 +450,7 @@ static DECLFR(GenieFix1) {
|
||||
static DECLFR(GenieFix2) {
|
||||
uint8 r = GenieBackup[1](A);
|
||||
|
||||
if ((modcon >> 2) & 1) // No check
|
||||
if ((modcon >> 2) & 1) /* No check */
|
||||
return genieval[1];
|
||||
else if (r == geniech[1])
|
||||
return genieval[1];
|
||||
@@ -461,7 +461,7 @@ static DECLFR(GenieFix2) {
|
||||
static DECLFR(GenieFix3) {
|
||||
uint8 r = GenieBackup[2](A);
|
||||
|
||||
if ((modcon >> 3) & 1) // No check
|
||||
if ((modcon >> 3) & 1) /* No check */
|
||||
return genieval[2];
|
||||
else if (r == geniech[2])
|
||||
return genieval[2];
|
||||
@@ -480,7 +480,7 @@ void FixGenieMap(void) {
|
||||
|
||||
VPageR = VPage;
|
||||
FlushGenieRW();
|
||||
//printf("Rightyo\n");
|
||||
/* printf("Rightyo\n"); */
|
||||
for (x = 0; x < 3; x++)
|
||||
if ((modcon >> (4 + x)) & 1) {
|
||||
readfunc tmp[3] = { GenieFix1, GenieFix2, GenieFix3 };
|
||||
|
||||
28
src/cart.h
28
src/cart.h
@@ -2,25 +2,27 @@
|
||||
#define _FCEU_CART_H
|
||||
|
||||
typedef struct {
|
||||
// Set by mapper/board code:
|
||||
/* Set by mapper/board code: */
|
||||
void (*Power)(void);
|
||||
void (*Reset)(void);
|
||||
void (*Close)(void);
|
||||
uint8 *SaveGame[4]; // Pointers to memory to save/load.
|
||||
uint32 SaveGameLen[4]; // How much memory to save/load.
|
||||
uint8 *SaveGame[4]; /* Pointers to memory to save/load. */
|
||||
uint32 SaveGameLen[4]; /* How much memory to save/load. */
|
||||
|
||||
// Set by iNES/UNIF loading code.
|
||||
int mirror; // As set in the header or chunk.
|
||||
// iNES/UNIF specific. Intended
|
||||
// to help support games like "Karnov"
|
||||
// that are not really MMC3 but are
|
||||
// set to mapper 4.
|
||||
int battery; // Presence of an actual battery.
|
||||
/* Set by iNES/UNIF loading code. */
|
||||
int mirror; /* As set in the header or chunk.
|
||||
* iNES/UNIF specific. Intended
|
||||
* to help support games like "Karnov"
|
||||
* that are not really MMC3 but are
|
||||
* set to mapper 4.
|
||||
*/
|
||||
int battery; /* Presence of an actual battery. */
|
||||
int vram_size;
|
||||
uint8 MD5[16];
|
||||
uint32 CRC32; // Should be set by the iNES/UNIF loading
|
||||
// code, used by mapper/board code, maybe
|
||||
// other code in the future.
|
||||
uint32 CRC32; /* Should be set by the iNES/UNIF loading
|
||||
* code, used by mapper/board code, maybe
|
||||
* other code in the future.
|
||||
*/
|
||||
} CartInfo;
|
||||
|
||||
extern uint8 *Page[32], *VPage[8], *MMC5SPRVPage[8], *MMC5BGVPage[8];
|
||||
|
||||
40
src/cheat.c
40
src/cheat.c
@@ -114,7 +114,7 @@ void RebuildSubCheats(void) {
|
||||
if (c->type == 1 && c->status) {
|
||||
if (GetReadHandler(c->addr) == SubCheatsRead) {
|
||||
/* Prevent a catastrophe by this check. */
|
||||
//FCEU_DispMessage("oops");
|
||||
/* FCEU_DispMessage("oops"); */
|
||||
} else {
|
||||
SubCheats[numsubcheats].PrevRead = GetReadHandler(c->addr);
|
||||
SubCheats[numsubcheats].addr = c->addr;
|
||||
@@ -224,27 +224,27 @@ int FCEUI_DelCheat(uint32 which) {
|
||||
uint32 x = 0;
|
||||
|
||||
for (prev = 0, cur = cheats;; ) {
|
||||
if (x == which) { // Remove this cheat.
|
||||
if (prev) { // Update pointer to this cheat.
|
||||
if (cur->next) // More cheats.
|
||||
if (x == which) { /* Remove this cheat. */
|
||||
if (prev) { /* Update pointer to this cheat. */
|
||||
if (cur->next) /* More cheats. */
|
||||
prev->next = cur->next;
|
||||
else { // No more.
|
||||
else { /* No more. */
|
||||
prev->next = 0;
|
||||
cheatsl = prev; // Set the previous cheat as the last cheat.
|
||||
cheatsl = prev; /* Set the previous cheat as the last cheat. */
|
||||
}
|
||||
} else {// This is the first cheat.
|
||||
if (cur->next) // More cheats
|
||||
} else {/* This is the first cheat. */
|
||||
if (cur->next) /* More cheats */
|
||||
cheats = cur->next;
|
||||
else
|
||||
cheats = cheatsl = 0; // No (more) cheats.
|
||||
cheats = cheatsl = 0; /* No (more) cheats. */
|
||||
}
|
||||
free(cur->name);// Now that all references to this cheat are removed,
|
||||
free(cur); // free the memory.
|
||||
free(cur->name);/* Now that all references to this cheat are removed, */
|
||||
free(cur); /* free the memory. */
|
||||
break;
|
||||
} // *END REMOVE THIS CHEAT*
|
||||
} /* *END REMOVE THIS CHEAT* */
|
||||
|
||||
|
||||
if (!cur->next) // No more cheats to go through(this shouldn't ever happen...)
|
||||
if (!cur->next) /* No more cheats to go through(this shouldn't ever happen...) */
|
||||
return(0);
|
||||
prev = cur;
|
||||
cur = prev->next;
|
||||
@@ -341,7 +341,7 @@ int FCEUI_DecodeGG(const char *str, uint16 *a, uint8 *v, int *c) {
|
||||
|
||||
t = GGtobin(*str++);
|
||||
A |= (t & 0x07) << 4;
|
||||
//if(t&0x08) return(0); /* 8-character code?! */
|
||||
/* if(t&0x08) return(0); */ /* 8-character code?! */
|
||||
|
||||
t = GGtobin(*str++);
|
||||
A |= (t & 0x07) << 12;
|
||||
@@ -579,41 +579,41 @@ void FCEUI_CheatSearchEnd(int type, uint8 v1, uint8 v2) {
|
||||
}
|
||||
|
||||
|
||||
if (!type) {// Change to a specific value.
|
||||
if (!type) {/* Change to a specific value. */
|
||||
for (x = 0; x < 0x10000; x++)
|
||||
if (!(CheatComp[x] & CHEATC_NOSHOW)) {
|
||||
if (CheatComp[x] == v1 && CheatRPtrs[x >> 10][x] == v2) {
|
||||
} else
|
||||
CheatComp[x] |= CHEATC_EXCLUDED;
|
||||
}
|
||||
} else if (type == 1) { // Search for relative change(between values).
|
||||
} else if (type == 1) { /* Search for relative change(between values). */
|
||||
for (x = 0; x < 0x10000; x++)
|
||||
if (!(CheatComp[x] & CHEATC_NOSHOW)) {
|
||||
if (CheatComp[x] == v1 && CAbs(CheatComp[x] - CheatRPtrs[x >> 10][x]) == v2) {
|
||||
} else
|
||||
CheatComp[x] |= CHEATC_EXCLUDED;
|
||||
}
|
||||
} else if (type == 2) { // Purely relative change.
|
||||
} else if (type == 2) { /* Purely relative change. */
|
||||
for (x = 0x000; x < 0x10000; x++)
|
||||
if (!(CheatComp[x] & CHEATC_NOSHOW)) {
|
||||
if (CAbs(CheatComp[x] - CheatRPtrs[x >> 10][x]) == v2) {
|
||||
} else
|
||||
CheatComp[x] |= CHEATC_EXCLUDED;
|
||||
}
|
||||
} else if (type == 3) { // Any change.
|
||||
} else if (type == 3) { /* Any change. */
|
||||
for (x = 0; x < 0x10000; x++)
|
||||
if (!(CheatComp[x] & CHEATC_NOSHOW)) {
|
||||
if (CheatComp[x] != CheatRPtrs[x >> 10][x]) {
|
||||
} else
|
||||
CheatComp[x] |= CHEATC_EXCLUDED;
|
||||
}
|
||||
} else if (type == 4) { // Value decreased.
|
||||
} else if (type == 4) { /* Value decreased. */
|
||||
for (x = 0; x < 0x10000; x++)
|
||||
if (!(CheatComp[x] & CHEATC_NOSHOW)) {
|
||||
if (!(CheatRPtrs[x >> 10][x] < CheatComp[x]))
|
||||
CheatComp[x] |= CHEATC_EXCLUDED;
|
||||
}
|
||||
} else if (type == 5) { // Value increased.
|
||||
} else if (type == 5) { /* Value increased. */
|
||||
for (x = 0; x < 0x10000; x++)
|
||||
if (!(CheatComp[x] & CHEATC_NOSHOW)) {
|
||||
if (!(CheatRPtrs[x >> 10][x] > CheatComp[x]))
|
||||
|
||||
22
src/debug.c
22
src/debug.c
@@ -70,17 +70,17 @@ void FCEUI_LoadMem(const char *fname, uint32 start, int hl) {
|
||||
|
||||
static char *fstrings[12] =
|
||||
{
|
||||
"#$%02X", // immediate
|
||||
"$%04X", // RELATIVE(jump)
|
||||
"$%02X", // Z
|
||||
"$%02X,X", // Z,x
|
||||
"$%02X,Y", // Z,y
|
||||
"$%04X", //ABS
|
||||
"$%04X,X", // ABS,x
|
||||
"$%04X,Y", // ABS,y
|
||||
"($%04X)", // IND
|
||||
"($%02X,X)", // INX
|
||||
"($%02X),Y", // INY
|
||||
"#$%02X", /* immediate */
|
||||
"$%04X", /* RELATIVE(jump) */
|
||||
"$%02X", /* Z */
|
||||
"$%02X,X", /* Z,x */
|
||||
"$%02X,Y", /* Z,y */
|
||||
"$%04X", /*ABS */
|
||||
"$%04X,X", /* ABS,x */
|
||||
"$%04X,Y", /* ABS,y */
|
||||
"($%04X)", /* IND */
|
||||
"($%02X,X)", /* INX */
|
||||
"($%02X),Y", /* INY */
|
||||
""
|
||||
};
|
||||
static int flengths[12] = { 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 0 };
|
||||
|
||||
@@ -254,7 +254,7 @@ void FCEUI_GetIVectors(uint16 *reset, uint16 *irq, uint16 *nmi);
|
||||
|
||||
uint32 FCEUI_CRC32(uint32 crc, uint8 *buf, uint32 len);
|
||||
|
||||
//void FCEUI_ToggleTileView(void);
|
||||
/* void FCEUI_ToggleTileView(void); */
|
||||
void FCEUI_SetLowPass(int q);
|
||||
|
||||
void FCEUI_NSFSetVis(int mode);
|
||||
|
||||
@@ -31,8 +31,8 @@
|
||||
#include "video.c"
|
||||
#include "vsuni.c"
|
||||
|
||||
//#include "x6502.c"
|
||||
//#include "ines.c"
|
||||
//#include "unif.c"
|
||||
/* #include "x6502.c" */
|
||||
/* #include "ines.c" */
|
||||
/* #include "unif.c" */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -216,7 +216,7 @@ typedef uint64_t uintmax_t;
|
||||
#ifndef WCHAR_MIN /* [ */
|
||||
# define WCHAR_MIN 0
|
||||
#endif /* WCHAR_MIN ] */
|
||||
#ifndef WCHAR_MAX // [
|
||||
#ifndef WCHAR_MAX /* [ */
|
||||
# define WCHAR_MAX _UI16_MAX
|
||||
#endif /* WCHAR_MAX ] */
|
||||
|
||||
|
||||
@@ -87,8 +87,6 @@ unsigned sndquality = 0;
|
||||
unsigned sndvolume = 150;
|
||||
unsigned swapDuty = 0;
|
||||
|
||||
static volatile int nofocus = 0;
|
||||
|
||||
static int32_t *sound = 0;
|
||||
static uint32_t JSReturn = 0;
|
||||
static uint32_t MouseData[3];
|
||||
|
||||
@@ -42,10 +42,12 @@ typedef long long int64;
|
||||
#elif MSVC
|
||||
typedef __int64 int64;
|
||||
typedef unsigned __int64 uint64;
|
||||
#define GINLINE // Can't declare a function INLINE
|
||||
// and global in MSVC. Bummer.
|
||||
#define PSS_STYLE 2 // Does MSVC compile for anything
|
||||
// other than Windows/DOS targets?
|
||||
#define GINLINE /* Can't declare a function INLINE
|
||||
* and global in MSVC. Bummer.
|
||||
*/
|
||||
#define PSS_STYLE 2 /* Does MSVC compile for anything
|
||||
* other than Windows/DOS targets?
|
||||
*/
|
||||
#else
|
||||
typedef unsigned long long uint64;
|
||||
typedef long long int64;
|
||||
|
||||
24
src/fceu.c
24
src/fceu.c
@@ -284,7 +284,7 @@ endlseq:
|
||||
}
|
||||
|
||||
FCEU_ResetPalette();
|
||||
FCEU_ResetMessages(); // Save state, status messages, etc.
|
||||
FCEU_ResetMessages(); /* Save state, status messages, etc. */
|
||||
|
||||
return(GameInfo);
|
||||
}
|
||||
@@ -327,7 +327,7 @@ FCEUGI *FCEUI_CopyFamiStart(void)
|
||||
}
|
||||
|
||||
FCEU_ResetPalette();
|
||||
FCEU_ResetMessages(); // Save state, status messages, etc.
|
||||
FCEU_ResetMessages(); /* Save state, status messages, etc. */
|
||||
|
||||
return(GameInfo);
|
||||
}
|
||||
@@ -385,13 +385,15 @@ void FCEU_MemoryRand(uint8 *ptr, uint32 size)
|
||||
{
|
||||
int x = 0;
|
||||
while (size) {
|
||||
// *ptr = (x & 4) ? 0xFF : 0x00; // Huang Di DEBUG MODE enabled by default
|
||||
// Cybernoid NO MUSIC by default
|
||||
// *ptr = (x & 4) ? 0x7F : 0x00; // Huang Di DEBUG MODE enabled by default
|
||||
// Minna no Taabou no Nakayoshi Daisakusen DOESN'T BOOT
|
||||
// Cybernoid NO MUSIC by default
|
||||
// *ptr = (x & 1) ? 0x55 : 0xAA; // F-15 Sity War HISCORE is screwed...
|
||||
// 1942 SCORE/HISCORE is screwed...
|
||||
#if 0
|
||||
*ptr = (x & 4) ? 0xFF : 0x00; /* Huang Di DEBUG MODE enabled by default */
|
||||
/* Cybernoid NO MUSIC by default */
|
||||
*ptr = (x & 4) ? 0x7F : 0x00; /* Huang Di DEBUG MODE enabled by default */
|
||||
/* Minna no Taabou no Nakayoshi Daisakusen DOESN'T BOOT */
|
||||
/* Cybernoid NO MUSIC by default */
|
||||
*ptr = (x & 1) ? 0x55 : 0xAA; /* F-15 Sity War HISCORE is screwed... */
|
||||
/* 1942 SCORE/HISCORE is screwed... */
|
||||
#endif
|
||||
*ptr = 0xFF;
|
||||
x++;
|
||||
size--;
|
||||
@@ -551,7 +553,7 @@ void FCEUI_SetSnapName(int a)
|
||||
int32 FCEUI_GetDesiredFPS(void)
|
||||
{
|
||||
if (PAL || dendy)
|
||||
return(838977920); // ~50.007
|
||||
return(838977920); /* ~50.007 */
|
||||
else
|
||||
return(1008307711); // ~60.1
|
||||
return(1008307711); /* ~60.1 */
|
||||
}
|
||||
|
||||
@@ -85,12 +85,13 @@ typedef struct {
|
||||
int SoundVolume;
|
||||
int GameGenie;
|
||||
|
||||
// Current first and last rendered scanlines.
|
||||
/* Current first and last rendered scanlines. */
|
||||
int FirstSLine;
|
||||
int LastSLine;
|
||||
|
||||
// Driver code(user)-specified first and last rendered scanlines.
|
||||
// Usr*SLine[0] is for NTSC, Usr*SLine[1] is for PAL.
|
||||
/* Driver code(user)-specified first and last rendered scanlines.
|
||||
* Usr*SLine[0] is for NTSC, Usr*SLine[1] is for PAL.
|
||||
*/
|
||||
int UsrFirstSLine[2];
|
||||
int UsrLastSLine[2];
|
||||
int SnapName;
|
||||
|
||||
54
src/fds.c
54
src/fds.c
@@ -34,10 +34,11 @@
|
||||
#include "cart.h"
|
||||
#include "md5.h"
|
||||
|
||||
// TODO: Add code to put a delay in between the time a disk is inserted
|
||||
// and the when it can be successfully read/written to. This should
|
||||
// prevent writes to wrong places OR add code to prevent disk ejects
|
||||
// when the virtual motor is on(mmm...virtual motor).
|
||||
/* TODO: Add code to put a delay in between the time a disk is inserted
|
||||
* and the when it can be successfully read/written to. This should
|
||||
* prevent writes to wrong places OR add code to prevent disk ejects
|
||||
* when the virtual motor is on(mmm...virtual motor).
|
||||
*/
|
||||
|
||||
static DECLFR(FDSRead4030);
|
||||
static DECLFR(FDSRead4031);
|
||||
@@ -115,9 +116,9 @@ static void FDSInit(void) {
|
||||
lastDiskPtrRead = lastDiskPtrWrite = writeskip = DiskPtr = DiskSeekIRQ = 0;
|
||||
|
||||
setmirror(1);
|
||||
setprg8(0xE000, 0); // BIOS
|
||||
setprg32r(1, 0x6000, 0); // 32KB RAM
|
||||
setchr8(0); // 8KB CHR RAM
|
||||
setprg8(0xE000, 0); /* BIOS */
|
||||
setprg32r(1, 0x6000, 0); /* 32KB RAM */
|
||||
setchr8(0); /* 8KB CHR RAM */
|
||||
|
||||
MapIRQHook = FDSFix;
|
||||
GameStateRestore = FDSStateRestore;
|
||||
@@ -230,7 +231,7 @@ static DECLFR(FDSRead4032) {
|
||||
}
|
||||
|
||||
static DECLFR(FDSRead4033) {
|
||||
return 0x80; // battery
|
||||
return 0x80; /* battery */
|
||||
}
|
||||
|
||||
/* Begin FDS sound */
|
||||
@@ -238,21 +239,21 @@ static DECLFR(FDSRead4033) {
|
||||
#define FDSClock (1789772.7272727272727272 / 2)
|
||||
|
||||
typedef struct {
|
||||
int64 cycles; // Cycles per PCM sample
|
||||
int64 count; // Cycle counter
|
||||
int64 envcount; // Envelope cycle counter
|
||||
int64 cycles; /* Cycles per PCM sample */
|
||||
int64 count; /* Cycle counter */
|
||||
int64 envcount; /* Envelope cycle counter */
|
||||
uint32 b19shiftreg60;
|
||||
uint32 b24adder66;
|
||||
uint32 b24latch68;
|
||||
uint32 b17latch76;
|
||||
int32 clockcount; // Counter to divide frequency by 8.
|
||||
uint8 b8shiftreg88; // Modulation register.
|
||||
uint8 amplitude[2]; // Current amplitudes.
|
||||
int32 clockcount; /* Counter to divide frequency by 8. */
|
||||
uint8 b8shiftreg88; /* Modulation register. */
|
||||
uint8 amplitude[2]; /* Current amplitudes. */
|
||||
uint8 speedo[2];
|
||||
uint8 mwcount;
|
||||
uint8 mwstart;
|
||||
uint8 mwave[0x20]; // Modulation waveform
|
||||
uint8 cwave[0x40]; // Game-defined waveform(carrier)
|
||||
uint8 mwave[0x20]; /* Modulation waveform */
|
||||
uint8 cwave[0x40]; /* Game-defined waveform(carrier) */
|
||||
uint8 SPSG[0xB];
|
||||
} FDSSOUND;
|
||||
|
||||
@@ -318,13 +319,14 @@ static DECLFW(FDSSWrite) {
|
||||
SPSG[A] = V;
|
||||
}
|
||||
|
||||
// $4080 - Fundamental wave amplitude data register 92
|
||||
// $4082 - Fundamental wave frequency data register 58
|
||||
// $4083 - Same as $4082($4083 is the upper 4 bits).
|
||||
|
||||
// $4084 - Modulation amplitude data register 78
|
||||
// $4086 - Modulation frequency data register 72
|
||||
// $4087 - Same as $4086($4087 is the upper 4 bits)
|
||||
/* $4080 - Fundamental wave amplitude data register 92
|
||||
* $4082 - Fundamental wave frequency data register 58
|
||||
* $4083 - Same as $4082($4083 is the upper 4 bits).
|
||||
*
|
||||
* $4084 - Modulation amplitude data register 78
|
||||
* $4086 - Modulation frequency data register 72
|
||||
* $4087 - Same as $4086($4087 is the upper 4 bits)
|
||||
*/
|
||||
|
||||
|
||||
static void DoEnv() {
|
||||
@@ -413,7 +415,7 @@ static INLINE int32 FDSDoSound(void) {
|
||||
}
|
||||
if (fdso.count >= 32768) goto dogk;
|
||||
|
||||
// Might need to emulate applying the amplitude to the waveform a bit better...
|
||||
/* Might need to emulate applying the amplitude to the waveform a bit better... */
|
||||
{
|
||||
int k = amplitude[0];
|
||||
if (k > 0x20) k = 0x20;
|
||||
@@ -438,7 +440,7 @@ static void RenderSound(void) {
|
||||
uint32 t = FDSDoSound();
|
||||
t += t >> 1;
|
||||
t >>= 4;
|
||||
Wave[x >> 4] += t; //(t>>2)-(t>>3); //>>3;
|
||||
Wave[x >> 4] += t; /* (t>>2)-(t>>3); */ /* >>3; */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -449,7 +451,7 @@ static void RenderSoundHQ(void) {
|
||||
for (x = FBC; x < SOUNDTS; x++) {
|
||||
uint32 t = FDSDoSound();
|
||||
t += t >> 1;
|
||||
WaveHi[x] += t; //(t<<2)-(t<<1);
|
||||
WaveHi[x] += t; /* (t<<2)-(t<<1); */
|
||||
}
|
||||
FBC = SOUNDTS;
|
||||
}
|
||||
|
||||
@@ -13,9 +13,9 @@ typedef struct {
|
||||
#ifdef __LIBRETRO__
|
||||
MEMWRAP *fp;
|
||||
#else
|
||||
void *fp; // FILE* or ptr to ZIPWRAP
|
||||
void *fp; /* FILE* or ptr to ZIPWRAP */
|
||||
#endif
|
||||
uint32 type; // 0=normal file, 1=gzip, 2=zip
|
||||
uint32 type; /* 0=normal file, 1=gzip, 2=zip */
|
||||
} FCEUFILE;
|
||||
|
||||
#ifdef __LIBRETRO__
|
||||
|
||||
26
src/filter.c
26
src/filter.c
@@ -22,7 +22,7 @@ void SexyFilter2(int32 *in, int32 count) {
|
||||
p = ((double)2 - cos(x)) - sqrt(pow((double)2 - cos(x), 2) - 1);
|
||||
|
||||
c = p * 0x100000;
|
||||
//printf("%f\n",(double)c/0x100000);
|
||||
/* printf("%f\n",(double)c/0x100000); */
|
||||
#endif
|
||||
static int64 acc = 0;
|
||||
|
||||
@@ -33,9 +33,11 @@ void SexyFilter2(int32 *in, int32 count) {
|
||||
acc += dropcurrent;
|
||||
*in = acc >> 16;
|
||||
in++;
|
||||
//acc=((int64)0x100000-c)* *in + ((c*acc)>>20);
|
||||
//*in=acc>>20;
|
||||
//in++;
|
||||
#if 0
|
||||
acc=((int64)0x100000-c)* *in + ((c*acc)>>20);
|
||||
*in=acc>>20;
|
||||
in++;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,11 +58,11 @@ void SexyFilter(int32 *in, int32 *out, int32 count) {
|
||||
int64 ino = (int64) * in * vmul;
|
||||
acc1 += ((ino - acc1) * mul1) >> 16;
|
||||
acc2 += ((ino - acc1 - acc2) * mul2) >> 16;
|
||||
//printf("%d ",*in);
|
||||
/* printf("%d ",*in); */
|
||||
*in = 0;
|
||||
{
|
||||
int32 t = (acc1 - ino + acc2) >> 16;
|
||||
//if(t>32767 || t<-32768) printf("Flow: %d\n",t);
|
||||
/* if(t>32767 || t<-32768) printf("Flow: %d\n",t); */
|
||||
if (t > 32767) t = 32767;
|
||||
if (t < -32768) t = -32768;
|
||||
*out = t;
|
||||
@@ -76,7 +78,7 @@ void SexyFilter(int32 *in, int32 *out, int32 count) {
|
||||
from the end of in to the beginning of in.
|
||||
*/
|
||||
|
||||
//static uint32 mva=1000;
|
||||
/* static uint32 mva=1000; */
|
||||
|
||||
/* This filtering code assumes that almost all input values stay below 32767.
|
||||
Do not adjust the volume in the wlookup tables and the expansion sound
|
||||
@@ -89,10 +91,12 @@ int32 NeoFilterSound(int32 *in, int32 *out, uint32 inlen, int32 *leftover) {
|
||||
int32 *outsave = out;
|
||||
int32 count = 0;
|
||||
|
||||
// for(x=0;x<inlen;x++)
|
||||
// {
|
||||
// if(in[x]>mva) { mva=in[x]; printf("%ld\n",in[x]);}
|
||||
// }
|
||||
#if 0
|
||||
for(x=0;x<inlen;x++)
|
||||
{
|
||||
if(in[x]>mva) { mva=in[x]; printf("%ld\n",in[x]);}
|
||||
}
|
||||
#endif
|
||||
max = (inlen - 1) << 16;
|
||||
|
||||
if (FSettings.soundq == 2)
|
||||
|
||||
@@ -60,7 +60,7 @@ void FCEUI_SetSaveDirectory(char *sav_dir)
|
||||
SaveDirectory[2047] = 0;
|
||||
}
|
||||
|
||||
static char *odirs[FCEUIOD__COUNT] = { 0, 0, 0, 0, 0, 0 }; // odirs, odors. ^_^
|
||||
static char *odirs[FCEUIOD__COUNT] = { 0, 0, 0, 0, 0, 0 }; /* odirs, odors. ^_^ */
|
||||
|
||||
void FCEUI_SetDirOverride(int which, char *n)
|
||||
{
|
||||
|
||||
250
src/ines.c
250
src/ines.c
@@ -129,73 +129,73 @@ struct INPSEL {
|
||||
static void SetInput(void) {
|
||||
static struct INPSEL moo[] =
|
||||
{
|
||||
{0x19b0a9f1, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, // 6-in-1 (MGC-023)(Unl)[!]
|
||||
{0x29de87af, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, // Aerobics Studio
|
||||
{0xd89e5a67, SI_UNSET, SI_UNSET, SIFC_ARKANOID }, // Arkanoid (J)
|
||||
{0x0f141525, SI_UNSET, SI_UNSET, SIFC_ARKANOID }, // Arkanoid 2(J)
|
||||
{0x32fb0583, SI_UNSET, SI_ARKANOID, SIFC_NONE }, // Arkanoid(NES)
|
||||
{0x60ad090a, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, // Athletic World
|
||||
{0x48ca0ee1, SI_GAMEPAD, SI_GAMEPAD, SIFC_BWORLD }, // Barcode World
|
||||
{0x4318a2f8, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Barker Bill's Trick Shooting
|
||||
{0x6cca1c1f, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, // Dai Undoukai
|
||||
{0x24598791, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Duck Hunt
|
||||
{0xd5d6eac4, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // Edu (As)
|
||||
{0xe9a7fe9e, SI_UNSET, SI_MOUSE, SIFC_NONE }, // Educational Computer 2000
|
||||
{0x8f7b1669, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // FP BASIC 3.3 by maxzhou88
|
||||
{0xf7606810, SI_UNSET, SI_UNSET, SIFC_FKB }, // Family BASIC 2.0A
|
||||
{0x895037bc, SI_UNSET, SI_UNSET, SIFC_FKB }, // Family BASIC 2.1a
|
||||
{0xb2530afc, SI_UNSET, SI_UNSET, SIFC_FKB }, // Family BASIC 3.0
|
||||
{0xea90f3e2, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, // Family Trainer: Running Stadium
|
||||
{0xbba58be5, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, // Family Trainer: Manhattan Police
|
||||
{0x3e58a87e, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Freedom Force
|
||||
{0xd9f45be9, SI_GAMEPAD, SI_GAMEPAD, SIFC_QUIZKING }, // Gimme a Break ...
|
||||
{0x1545bd13, SI_GAMEPAD, SI_GAMEPAD, SIFC_QUIZKING }, // Gimme a Break ... 2
|
||||
{0x4e959173, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Gotcha! - The Sport!
|
||||
{0xbeb8ab01, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Gumshoe
|
||||
{0xff24d794, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Hogan's Alley
|
||||
{0x21f85681, SI_GAMEPAD, SI_GAMEPAD, SIFC_HYPERSHOT }, // Hyper Olympic (Gentei Ban)
|
||||
{0x980be936, SI_GAMEPAD, SI_GAMEPAD, SIFC_HYPERSHOT }, // Hyper Olympic
|
||||
{0x915a53a7, SI_GAMEPAD, SI_GAMEPAD, SIFC_HYPERSHOT }, // Hyper Sports
|
||||
{0x9fae4d46, SI_GAMEPAD, SI_GAMEPAD, SIFC_MAHJONG }, // Ide Yousuke Meijin no Jissen Mahjong
|
||||
{0x7b44fb2a, SI_GAMEPAD, SI_GAMEPAD, SIFC_MAHJONG }, // Ide Yousuke Meijin no Jissen Mahjong 2
|
||||
{0x2f128512, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, // Jogging Race
|
||||
{0xbb33196f, SI_UNSET, SI_UNSET, SIFC_FKB }, // Keyboard Transformer
|
||||
{0x8587ee00, SI_UNSET, SI_UNSET, SIFC_FKB }, // Keyboard Transformer
|
||||
{0x543ab532, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // LIKO Color Lines
|
||||
{0x368c19a8, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // LIKO Study Cartridge
|
||||
{0x5ee6008e, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Mechanized Attack
|
||||
{0x370ceb65, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, // Meiro Dai Sakusen
|
||||
{0x3a1694f9, SI_GAMEPAD, SI_GAMEPAD, SIFC_4PLAYER }, // Nekketsu Kakutou Densetsu
|
||||
{0x9d048ea4, SI_GAMEPAD, SI_GAMEPAD, SIFC_OEKAKIDS }, // Oeka Kids
|
||||
{0x2a6559a1, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Operation Wolf (J)
|
||||
{0xedc3662b, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Operation Wolf
|
||||
{0x912989dc, SI_UNSET, SI_UNSET, SIFC_FKB }, // Playbox BASIC
|
||||
{0x9044550e, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, // Rairai Kyonshizu
|
||||
{0xea90f3e2, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, // Running Stadium
|
||||
{0x851eb9be, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, // Shooting Range
|
||||
{0x6435c095, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, // Short Order/Eggsplode
|
||||
{0xc043a8df, SI_UNSET, SI_MOUSE, SIFC_NONE }, // Shu Qi Yu - Shu Xue Xiao Zhuan Yuan (Ch)
|
||||
{0x2cf5db05, SI_UNSET, SI_MOUSE, SIFC_NONE }, // Shu Qi Yu - Zhi Li Xiao Zhuan Yuan (Ch)
|
||||
{0xad9c63e2, SI_GAMEPAD, SI_UNSET, SIFC_SHADOW }, // Space Shadow
|
||||
{0x61d86167, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, // Street Cop
|
||||
{0xabb2f974, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // Study and Game 32-in-1
|
||||
{0x41ef9ac4, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // Subor
|
||||
{0x8b265862, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // Subor
|
||||
{0x82f1fb96, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // Subor 1.0 Russian
|
||||
{0x9f8f200a, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, // Super Mogura Tataki!! - Pokkun Moguraa
|
||||
{0xd74b2719, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, // Super Team Games
|
||||
{0x74bea652, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, // Supergun 3-in-1
|
||||
{0x5e073a1b, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // Supor English (Chinese)
|
||||
{0x589b6b0d, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // SuporV20
|
||||
{0x41401c6d, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, // SuporV40
|
||||
{0x23d17f5e, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, // The Lone Ranger
|
||||
{0xc3c0811d, SI_GAMEPAD, SI_GAMEPAD, SIFC_OEKAKIDS }, // The two "Oeka Kids" games
|
||||
{0xde8fd935, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // To the Earth
|
||||
{0x47232739, SI_GAMEPAD, SI_GAMEPAD, SIFC_TOPRIDER }, // Top Rider
|
||||
{0x8a12a7d9, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, // Totsugeki Fuuun Takeshi Jou
|
||||
{0xb8b9aca3, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Wild Gunman
|
||||
{0x5112dc21, SI_UNSET, SI_ZAPPER, SIFC_NONE }, // Wild Gunman
|
||||
{0xaf4010ea, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, // World Class Track Meet
|
||||
{0x19b0a9f1, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, /* 6-in-1 (MGC-023)(Unl)[!] */
|
||||
{0x29de87af, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, /* Aerobics Studio */
|
||||
{0xd89e5a67, SI_UNSET, SI_UNSET, SIFC_ARKANOID }, /* Arkanoid (J) */
|
||||
{0x0f141525, SI_UNSET, SI_UNSET, SIFC_ARKANOID }, /* Arkanoid 2(J) */
|
||||
{0x32fb0583, SI_UNSET, SI_ARKANOID, SIFC_NONE }, /* Arkanoid(NES) */
|
||||
{0x60ad090a, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, /* Athletic World */
|
||||
{0x48ca0ee1, SI_GAMEPAD, SI_GAMEPAD, SIFC_BWORLD }, /* Barcode World */
|
||||
{0x4318a2f8, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Barker Bill's Trick Shooting */
|
||||
{0x6cca1c1f, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, /* Dai Undoukai */
|
||||
{0x24598791, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Duck Hunt */
|
||||
{0xd5d6eac4, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* Edu (As) */
|
||||
{0xe9a7fe9e, SI_UNSET, SI_MOUSE, SIFC_NONE }, /* Educational Computer 2000 */
|
||||
{0x8f7b1669, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* FP BASIC 3.3 by maxzhou88 */
|
||||
{0xf7606810, SI_UNSET, SI_UNSET, SIFC_FKB }, /* Family BASIC 2.0A */
|
||||
{0x895037bc, SI_UNSET, SI_UNSET, SIFC_FKB }, /* Family BASIC 2.1a */
|
||||
{0xb2530afc, SI_UNSET, SI_UNSET, SIFC_FKB }, /* Family BASIC 3.0 */
|
||||
{0xea90f3e2, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, /* Family Trainer: Running Stadium */
|
||||
{0xbba58be5, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, /* Family Trainer: Manhattan Police */
|
||||
{0x3e58a87e, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Freedom Force */
|
||||
{0xd9f45be9, SI_GAMEPAD, SI_GAMEPAD, SIFC_QUIZKING }, /* Gimme a Break ... */
|
||||
{0x1545bd13, SI_GAMEPAD, SI_GAMEPAD, SIFC_QUIZKING }, /* Gimme a Break ... 2 */
|
||||
{0x4e959173, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Gotcha! - The Sport! */
|
||||
{0xbeb8ab01, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Gumshoe */
|
||||
{0xff24d794, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Hogan's Alley */
|
||||
{0x21f85681, SI_GAMEPAD, SI_GAMEPAD, SIFC_HYPERSHOT }, /* Hyper Olympic (Gentei Ban) */
|
||||
{0x980be936, SI_GAMEPAD, SI_GAMEPAD, SIFC_HYPERSHOT }, /* Hyper Olympic */
|
||||
{0x915a53a7, SI_GAMEPAD, SI_GAMEPAD, SIFC_HYPERSHOT }, /* Hyper Sports */
|
||||
{0x9fae4d46, SI_GAMEPAD, SI_GAMEPAD, SIFC_MAHJONG }, /* Ide Yousuke Meijin no Jissen Mahjong */
|
||||
{0x7b44fb2a, SI_GAMEPAD, SI_GAMEPAD, SIFC_MAHJONG }, /* Ide Yousuke Meijin no Jissen Mahjong 2 */
|
||||
{0x2f128512, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, /* Jogging Race */
|
||||
{0xbb33196f, SI_UNSET, SI_UNSET, SIFC_FKB }, /* Keyboard Transformer */
|
||||
{0x8587ee00, SI_UNSET, SI_UNSET, SIFC_FKB }, /* Keyboard Transformer */
|
||||
{0x543ab532, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* LIKO Color Lines */
|
||||
{0x368c19a8, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* LIKO Study Cartridge */
|
||||
{0x5ee6008e, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Mechanized Attack */
|
||||
{0x370ceb65, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, /* Meiro Dai Sakusen */
|
||||
{0x3a1694f9, SI_GAMEPAD, SI_GAMEPAD, SIFC_4PLAYER }, /* Nekketsu Kakutou Densetsu */
|
||||
{0x9d048ea4, SI_GAMEPAD, SI_GAMEPAD, SIFC_OEKAKIDS }, /* Oeka Kids */
|
||||
{0x2a6559a1, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Operation Wolf (J) */
|
||||
{0xedc3662b, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Operation Wolf */
|
||||
{0x912989dc, SI_UNSET, SI_UNSET, SIFC_FKB }, /* Playbox BASIC */
|
||||
{0x9044550e, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, /* Rairai Kyonshizu */
|
||||
{0xea90f3e2, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, /* Running Stadium */
|
||||
{0x851eb9be, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, /* Shooting Range */
|
||||
{0x6435c095, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, /* Short Order/Eggsplode */
|
||||
{0xc043a8df, SI_UNSET, SI_MOUSE, SIFC_NONE }, /* Shu Qi Yu - Shu Xue Xiao Zhuan Yuan (Ch) */
|
||||
{0x2cf5db05, SI_UNSET, SI_MOUSE, SIFC_NONE }, /* Shu Qi Yu - Zhi Li Xiao Zhuan Yuan (Ch) */
|
||||
{0xad9c63e2, SI_GAMEPAD, SI_UNSET, SIFC_SHADOW }, /* Space Shadow */
|
||||
{0x61d86167, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, /* Street Cop */
|
||||
{0xabb2f974, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* Study and Game 32-in-1 */
|
||||
{0x41ef9ac4, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* Subor */
|
||||
{0x8b265862, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* Subor */
|
||||
{0x82f1fb96, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* Subor 1.0 Russian */
|
||||
{0x9f8f200a, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERA }, /* Super Mogura Tataki!! - Pokkun Moguraa */
|
||||
{0xd74b2719, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, /* Super Team Games */
|
||||
{0x74bea652, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, /* Supergun 3-in-1 */
|
||||
{0x5e073a1b, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* Supor English (Chinese) */
|
||||
{0x589b6b0d, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* SuporV20 */
|
||||
{0x41401c6d, SI_UNSET, SI_UNSET, SIFC_SUBORKB }, /* SuporV40 */
|
||||
{0x23d17f5e, SI_GAMEPAD, SI_ZAPPER, SIFC_NONE }, /* The Lone Ranger */
|
||||
{0xc3c0811d, SI_GAMEPAD, SI_GAMEPAD, SIFC_OEKAKIDS }, /* The two "Oeka Kids" games */
|
||||
{0xde8fd935, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* To the Earth */
|
||||
{0x47232739, SI_GAMEPAD, SI_GAMEPAD, SIFC_TOPRIDER }, /* Top Rider */
|
||||
{0x8a12a7d9, SI_GAMEPAD, SI_GAMEPAD, SIFC_FTRAINERB }, /* Totsugeki Fuuun Takeshi Jou */
|
||||
{0xb8b9aca3, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Wild Gunman */
|
||||
{0x5112dc21, SI_UNSET, SI_ZAPPER, SIFC_NONE }, /* Wild Gunman */
|
||||
{0xaf4010ea, SI_GAMEPAD, SI_POWERPADB, SIFC_UNSET }, /* World Class Track Meet */
|
||||
{0x00000000, SI_UNSET, SI_UNSET, SIFC_UNSET }
|
||||
};
|
||||
int x = 0;
|
||||
@@ -397,7 +397,7 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"MMC5", 5, Mapper5_Init},
|
||||
{(uint8_t*)"FFE Rev. A", 6, Mapper6_Init},
|
||||
{(uint8_t*)"ANROM", 7, ANROM_Init},
|
||||
{(uint8_t*)"", 8, Mapper8_Init}, // Nogaems, it's worthless
|
||||
{(uint8_t*)"", 8, Mapper8_Init}, /* Nogaems, it's worthless */
|
||||
{(uint8_t*)"MMC2", 9, Mapper9_Init},
|
||||
{(uint8_t*)"MMC4", 10, Mapper10_Init},
|
||||
{(uint8_t*)"Color Dreams", 11, Mapper11_Init},
|
||||
@@ -407,28 +407,28 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"100-in-1", 15, Mapper15_Init},
|
||||
{(uint8_t*)"BANDAI 24C02", 16, Mapper16_Init},
|
||||
{(uint8_t*)"FFE Rev. B", 17, Mapper17_Init},
|
||||
{(uint8_t*)"JALECO SS880006", 18, Mapper18_Init}, // JF-NNX (EB89018-30007) boards
|
||||
{(uint8_t*)"JALECO SS880006", 18, Mapper18_Init}, /* JF-NNX (EB89018-30007) boards */
|
||||
{(uint8_t*)"Namcot 106", 19, Mapper19_Init},
|
||||
// {(uint8_t*)"", 20, Mapper20_Init},
|
||||
/* {(uint8_t*)"", 20, Mapper20_Init}, */
|
||||
{(uint8_t*)"Konami VRC2/VRC4 A", 21, Mapper21_Init},
|
||||
{(uint8_t*)"Konami VRC2/VRC4 B", 22, Mapper22_Init},
|
||||
{(uint8_t*)"Konami VRC2/VRC4 C", 23, Mapper23_Init},
|
||||
{(uint8_t*)"Konami VRC6 Rev. A", 24, Mapper24_Init},
|
||||
{(uint8_t*)"Konami VRC2/VRC4 D", 25, Mapper25_Init},
|
||||
{(uint8_t*)"Konami VRC6 Rev. B", 26, Mapper26_Init},
|
||||
{(uint8_t*)"CC-21 MI HUN CHE", 27, UNLCC21_Init}, // Former dupe for VRC2/VRC4 mapper, redefined with crc to mihunche boards
|
||||
// {(uint8_t*)"", 28, Mapper28_Init}, // Custom Multidiscrete mapper for PDs
|
||||
// {(uint8_t*)"", 29, Mapper29_Init},
|
||||
{(uint8_t*)"CC-21 MI HUN CHE", 27, UNLCC21_Init}, /* Former dupe for VRC2/VRC4 mapper, redefined with crc to mihunche boards */
|
||||
/* {(uint8_t*)"", 28, Mapper28_Init}, */ /* Custom Multidiscrete mapper for PDs */
|
||||
/* {(uint8_t*)"", 29, Mapper29_Init}, */
|
||||
{(uint8_t*)"UNROM 512", 30, UNROM512_Init},
|
||||
// {(uint8_t*)"", 31, Mapper31_Init},
|
||||
/* {(uint8_t*)"", 31, Mapper31_Init}, */
|
||||
{(uint8_t*)"IREM G-101", 32, Mapper32_Init},
|
||||
{(uint8_t*)"TC0190FMC/TC0350FMR", 33, Mapper33_Init},
|
||||
{(uint8_t*)"IREM I-IM/BNROM", 34, Mapper34_Init},
|
||||
{(uint8_t*)"Wario Land 2", 35, UNLSC127_Init},
|
||||
{(uint8_t*)"TXC Policeman", 36, Mapper36_Init},
|
||||
{(uint8_t*)"PAL-ZZ SMB/TETRIS/NWC",37, Mapper37_Init},
|
||||
{(uint8_t*)"Bit Corp.", 38, Mapper38_Init}, // Crime Busters
|
||||
// {(uint8_t*)"", 39, Mapper39_Init},
|
||||
{(uint8_t*)"Bit Corp.", 38, Mapper38_Init}, /* Crime Busters */
|
||||
/* {(uint8_t*)"", 39, Mapper39_Init}, */
|
||||
{(uint8_t*)"SMB2j FDS", 40, Mapper40_Init},
|
||||
{(uint8_t*)"CALTRON 6-in-1", 41, Mapper41_Init},
|
||||
{(uint8_t*)"BIO MIRACLE FDS", 42, Mapper42_Init},
|
||||
@@ -440,19 +440,19 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"TAITO TCxxx", 48, Mapper48_Init},
|
||||
{(uint8_t*)"MMC3 BMC PIRATE C", 49, Mapper49_Init},
|
||||
{(uint8_t*)"SMB2j FDS Rev. A", 50, Mapper50_Init},
|
||||
{(uint8_t*)"11-in-1 BALL SERIES", 51, Mapper51_Init}, // 1993 year version
|
||||
{(uint8_t*)"11-in-1 BALL SERIES", 51, Mapper51_Init}, /* 1993 year version */
|
||||
{(uint8_t*)"MMC3 BMC PIRATE D", 52, Mapper52_Init},
|
||||
{(uint8_t*)"SUPERVISION 16-in-1", 53, Supervision16_Init},
|
||||
// {(uint8_t*)"", 54, Mapper54_Init},
|
||||
// {(uint8_t*)"", 55, Mapper55_Init},
|
||||
// {(uint8_t*)"", 56, Mapper56_Init},
|
||||
/* {(uint8_t*)"", 54, Mapper54_Init}, */
|
||||
/* {(uint8_t*)"", 55, Mapper55_Init}, */
|
||||
/* {(uint8_t*)"", 56, Mapper56_Init}, */
|
||||
{(uint8_t*)"SIMBPLE BMC PIRATE A", 57, Mapper57_Init},
|
||||
{(uint8_t*)"SIMBPLE BMC PIRATE B", 58, BMCGK192_Init},
|
||||
{(uint8_t*)"", 59, Mapper59_Init}, // Check this out
|
||||
{(uint8_t*)"", 59, Mapper59_Init}, /* Check this out */
|
||||
{(uint8_t*)"SIMBPLE BMC PIRATE C", 60, BMCD1038_Init},
|
||||
{(uint8_t*)"20-in-1 KAISER Rev. A",61, Mapper61_Init},
|
||||
{(uint8_t*)"700-in-1", 62, Mapper62_Init},
|
||||
// {(uint8_t*)"", 63, Mapper63_Init},
|
||||
/* {(uint8_t*)"", 63, Mapper63_Init}, */
|
||||
{(uint8_t*)"TENGEN RAMBO1", 64, Mapper64_Init},
|
||||
{(uint8_t*)"IREM-H3001", 65, Mapper65_Init},
|
||||
{(uint8_t*)"MHROM", 66, MHROM_Init},
|
||||
@@ -470,37 +470,37 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"Irem 74HC161/32", 78, Mapper78_Init},
|
||||
{(uint8_t*)"AVE/C&E/TXC BOARD", 79, Mapper79_Init},
|
||||
{(uint8_t*)"TAITO X1-005 Rev. A", 80, Mapper80_Init},
|
||||
// {(uint8_t*)"", 81, Mapper81_Init},
|
||||
/* {(uint8_t*)"", 81, Mapper81_Init}, */
|
||||
{(uint8_t*)"TAITO X1-017", 82, Mapper82_Init},
|
||||
{(uint8_t*)"YOKO VRC Rev. B", 83, Mapper83_Init},
|
||||
// {(uint8_t*)"", 84, Mapper84_Init},
|
||||
/* {(uint8_t*)"", 84, Mapper84_Init}, */
|
||||
{(uint8_t*)"KONAMI VRC7", 85, Mapper85_Init},
|
||||
{(uint8_t*)"JALECO JF-13", 86, Mapper86_Init},
|
||||
{(uint8_t*)"74*139/74 DISCRETE", 87, Mapper87_Init},
|
||||
{(uint8_t*)"NAMCO 3433", 88, Mapper88_Init},
|
||||
{(uint8_t*)"SUNSOFT-3", 89, Mapper89_Init}, // SUNSOFT-2 mapper
|
||||
{(uint8_t*)"SUNSOFT-3", 89, Mapper89_Init}, /* SUNSOFT-2 mapper */
|
||||
{(uint8_t*)"HUMMER/JY BOARD", 90, Mapper90_Init},
|
||||
{(uint8_t*)"EARLY HUMMER/JY BOARD",91, Mapper91_Init},
|
||||
{(uint8_t*)"JALECO JF-19", 92, Mapper92_Init},
|
||||
{(uint8_t*)"SUNSOFT-3R", 93, SUNSOFT_UNROM_Init},// SUNSOFT-2 mapper with VRAM, different wiring
|
||||
{(uint8_t*)"SUNSOFT-3R", 93, SUNSOFT_UNROM_Init},/* SUNSOFT-2 mapper with VRAM, different wiring */
|
||||
{(uint8_t*)"HVC-UN1ROM", 94, Mapper94_Init},
|
||||
{(uint8_t*)"NAMCOT 108 Rev. B", 95, Mapper95_Init},
|
||||
{(uint8_t*)"BANDAI OEKAKIDS", 96, Mapper96_Init},
|
||||
{(uint8_t*)"IREM TAM-S1", 97, Mapper97_Init},
|
||||
// {(uint8_t*)"", 98, Mapper98_Init},
|
||||
/* {(uint8_t*)"", 98, Mapper98_Init}, */
|
||||
{(uint8_t*)"VS Uni/Dual- system", 99, Mapper99_Init},
|
||||
// {(uint8_t*)"", 100, Mapper100_Init},
|
||||
/* {(uint8_t*)"", 100, Mapper100_Init}, */
|
||||
{(uint8_t*)"", 101, Mapper101_Init},
|
||||
// {(uint8_t*)"", 102, Mapper102_Init},
|
||||
/* {(uint8_t*)"", 102, Mapper102_Init}, */
|
||||
{(uint8_t*)"FDS DOKIDOKI FULL", 103, Mapper103_Init},
|
||||
{(uint8_t*)"CAMERICA GOLDENFIVE", 104, Mapper104_Init},
|
||||
{(uint8_t*)"NES-EVENT NWC1990", 105, Mapper105_Init},
|
||||
{(uint8_t*)"SMB3 PIRATE A", 106, Mapper106_Init},
|
||||
{(uint8_t*)"MAGIC CORP A", 107, Mapper107_Init},
|
||||
{(uint8_t*)"FDS UNROM BOARD", 108, Mapper108_Init},
|
||||
// {(uint8_t*)"", 109, Mapper109_Init},
|
||||
// {(uint8_t*)"", 110, Mapper110_Init},
|
||||
// {(uint8_t*)"", 111, Mapper111_Init},
|
||||
/* {(uint8_t*)"", 109, Mapper109_Init}, */
|
||||
/* {(uint8_t*)"", 110, Mapper110_Init}, */
|
||||
/* {(uint8_t*)"", 111, Mapper111_Init}, */
|
||||
{(uint8_t*)"ASDER/NTDEC BOARD", 112, Mapper112_Init},
|
||||
{(uint8_t*)"HACKER/SACHEN BOARD", 113, Mapper113_Init},
|
||||
{(uint8_t*)"MMC3 SG PROT. A", 114, Mapper114_Init},
|
||||
@@ -511,20 +511,20 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"NES-TQROM", 119, Mapper119_Init},
|
||||
{(uint8_t*)"FDS TOBIDASE", 120, Mapper120_Init},
|
||||
{(uint8_t*)"MMC3 PIRATE PROT. A", 121, Mapper121_Init},
|
||||
// {(uint8_t*)"", 122, Mapper122_Init},
|
||||
/* {(uint8_t*)"", 122, Mapper122_Init}, */
|
||||
{(uint8_t*)"MMC3 PIRATE H2288", 123, UNLH2288_Init},
|
||||
// {(uint8_t*)"", 124, Mapper124_Init},
|
||||
/* {(uint8_t*)"", 124, Mapper124_Init}, */
|
||||
{(uint8_t*)"FDS LH32", 125, LH32_Init},
|
||||
// {(uint8_t*)"", 126, Mapper126_Init},
|
||||
// {(uint8_t*)"", 127, Mapper127_Init},
|
||||
// {(uint8_t*)"", 128, Mapper128_Init},
|
||||
// {(uint8_t*)"", 129, Mapper129_Init},
|
||||
// {(uint8_t*)"", 130, Mapper130_Init},
|
||||
// {(uint8_t*)"", 131, Mapper131_Init},
|
||||
/* {(uint8_t*)"", 126, Mapper126_Init}, */
|
||||
/* {(uint8_t*)"", 127, Mapper127_Init}, */
|
||||
/* {(uint8_t*)"", 128, Mapper128_Init}, */
|
||||
/* {(uint8_t*)"", 129, Mapper129_Init}, */
|
||||
/* {(uint8_t*)"", 130, Mapper130_Init}, */
|
||||
/* {(uint8_t*)"", 131, Mapper131_Init}, */
|
||||
{(uint8_t*)"TXC/MGENIUS 22111", 132, UNL22211_Init},
|
||||
{(uint8_t*)"SA72008", 133, SA72008_Init},
|
||||
{(uint8_t*)"MMC3 BMC PIRATE", 134, Mapper134_Init},
|
||||
// {(uint8_t*)"", 135, Mapper135_Init},
|
||||
/* {(uint8_t*)"", 135, Mapper135_Init}, */
|
||||
{(uint8_t*)"TCU02", 136, TCU02_Init},
|
||||
{(uint8_t*)"S8259D", 137, S8259D_Init},
|
||||
{(uint8_t*)"S8259B", 138, S8259B_Init},
|
||||
@@ -542,15 +542,15 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"S74LS374N", 150, S74LS374N_Init},
|
||||
{(uint8_t*)"", 151, Mapper151_Init},
|
||||
{(uint8_t*)"", 152, Mapper152_Init},
|
||||
{(uint8_t*)"BANDAI SRAM", 153, Mapper153_Init}, // Bandai board 16 with SRAM instead of EEPROM
|
||||
{(uint8_t*)"BANDAI SRAM", 153, Mapper153_Init}, /* Bandai board 16 with SRAM instead of EEPROM */
|
||||
{(uint8_t*)"", 154, Mapper154_Init},
|
||||
{(uint8_t*)"", 155, Mapper155_Init},
|
||||
{(uint8_t*)"", 156, Mapper156_Init},
|
||||
{(uint8_t*)"BANDAI BARCODE", 157, Mapper157_Init},
|
||||
{(uint8_t*)"TENGEN 800037", 158, Mapper158_Init},
|
||||
{(uint8_t*)"BANDAI 24C01", 159, Mapper159_Init}, // Different type of EEPROM on the bandai board
|
||||
{(uint8_t*)"BANDAI 24C01", 159, Mapper159_Init}, /* Different type of EEPROM on the bandai board */
|
||||
{(uint8_t*)"SA009", 160, SA009_Init},
|
||||
// {(uint8_t*)"", 161, Mapper161_Init},
|
||||
/* {(uint8_t*)"", 161, Mapper161_Init}, */
|
||||
{(uint8_t*)"", 162, UNLFS304_Init},
|
||||
{(uint8_t*)"", 163, Mapper163_Init},
|
||||
{(uint8_t*)"", 164, Mapper164_Init},
|
||||
@@ -558,20 +558,20 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"SUBOR Rev. A", 166, Mapper166_Init},
|
||||
{(uint8_t*)"SUBOR Rev. B", 167, Mapper167_Init},
|
||||
{(uint8_t*)"", 168, Mapper168_Init},
|
||||
// {(uint8_t*)"", 169, Mapper169_Init},
|
||||
/* {(uint8_t*)"", 169, Mapper169_Init}, */
|
||||
{(uint8_t*)"", 170, Mapper170_Init},
|
||||
{(uint8_t*)"", 171, Mapper171_Init},
|
||||
{(uint8_t*)"", 172, Mapper172_Init},
|
||||
{(uint8_t*)"", 173, Mapper173_Init},
|
||||
// {(uint8_t*)"", 174, Mapper174_Init},
|
||||
/* {(uint8_t*)"", 174, Mapper174_Init}, */
|
||||
{(uint8_t*)"", 175, Mapper175_Init},
|
||||
{(uint8_t*)"BMCFK23C", 176, BMCFK23C_Init}, // zero 26-may-2012 - well, i have some WXN junk games that use 176 for instance ????. i dont know what game uses this BMCFK23C as mapper 176. we'll have to make a note when we find it.
|
||||
{(uint8_t*)"BMCFK23C", 176, BMCFK23C_Init}, /* zero 26-may-2012 - well, i have some WXN junk games that use 176 for instance ????. i dont know what game uses this BMCFK23C as mapper 176. we'll have to make a note when we find it. */
|
||||
{(uint8_t*)"", 177, Mapper177_Init},
|
||||
{(uint8_t*)"", 178, Mapper178_Init},
|
||||
// {(uint8_t*)"", 179, Mapper179_Init},
|
||||
/* {(uint8_t*)"", 179, Mapper179_Init}, */
|
||||
{(uint8_t*)"", 180, Mapper180_Init},
|
||||
{(uint8_t*)"", 181, Mapper181_Init},
|
||||
// {(uint8_t*)"", 182, Mapper182_Init}, // Deprecated, dupe
|
||||
/* {(uint8_t*)"", 182, Mapper182_Init}, */ /* Deprecated, dupe */
|
||||
{(uint8_t*)"", 183, Mapper183_Init},
|
||||
{(uint8_t*)"", 184, Mapper184_Init},
|
||||
{(uint8_t*)"", 185, Mapper185_Init},
|
||||
@@ -582,7 +582,7 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"", 190, Mapper190_Init},
|
||||
{(uint8_t*)"", 191, Mapper191_Init},
|
||||
{(uint8_t*)"TW MMC3+VRAM Rev. B", 192, Mapper192_Init},
|
||||
{(uint8_t*)"NTDEC TC-112", 193, Mapper193_Init}, // War in the Gulf
|
||||
{(uint8_t*)"NTDEC TC-112", 193, Mapper193_Init}, /* War in the Gulf */
|
||||
{(uint8_t*)"TW MMC3+VRAM Rev. C", 194, Mapper194_Init},
|
||||
{(uint8_t*)"TW MMC3+VRAM Rev. D", 195, Mapper195_Init},
|
||||
{(uint8_t*)"", 196, Mapper196_Init},
|
||||
@@ -595,7 +595,7 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"", 203, Mapper203_Init},
|
||||
{(uint8_t*)"", 204, Mapper204_Init},
|
||||
{(uint8_t*)"", 205, Mapper205_Init},
|
||||
{(uint8_t*)"NAMCOT 108 Rev. C", 206, Mapper206_Init}, // Deprecated, Used to be "DEIROM" whatever it means, but actually simple version of MMC3
|
||||
{(uint8_t*)"NAMCOT 108 Rev. C", 206, Mapper206_Init}, /* Deprecated, Used to be "DEIROM" whatever it means, but actually simple version of MMC3 */
|
||||
{(uint8_t*)"TAITO X1-005 Rev. B", 207, Mapper207_Init},
|
||||
{(uint8_t*)"", 208, Mapper208_Init},
|
||||
{(uint8_t*)"HUMMER/JY BOARD", 209, Mapper209_Init},
|
||||
@@ -606,14 +606,14 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"", 214, Mapper214_Init},
|
||||
{(uint8_t*)"", 215, UNL8237_Init},
|
||||
{(uint8_t*)"", 216, Mapper216_Init},
|
||||
{(uint8_t*)"", 217, Mapper217_Init}, // Redefined to a new Discrete BMC mapper
|
||||
// {(uint8_t*)"", 218, Mapper218_Init},
|
||||
{(uint8_t*)"", 217, Mapper217_Init}, /* Redefined to a new Discrete BMC mapper */
|
||||
/* {(uint8_t*)"", 218, Mapper218_Init}, */
|
||||
{(uint8_t*)"UNLA9746", 219, UNLA9746_Init},
|
||||
{(uint8_t*)"Debug Mapper", 220, UNLKS7057_Init},
|
||||
{(uint8_t*)"UNLN625092", 221, UNLN625092_Init},
|
||||
{(uint8_t*)"", 222, Mapper222_Init},
|
||||
// {(uint8_t*)"", 223, Mapper223_Init},
|
||||
// {(uint8_t*)"", 224, Mapper224_Init},
|
||||
/* {(uint8_t*)"", 223, Mapper223_Init}, */
|
||||
/* {(uint8_t*)"", 224, Mapper224_Init}, */
|
||||
{(uint8_t*)"", 225, Mapper225_Init},
|
||||
{(uint8_t*)"BMC 22+20-in-1", 226, Mapper226_Init},
|
||||
{(uint8_t*)"", 227, Mapper227_Init},
|
||||
@@ -625,10 +625,10 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"BMC 22+20-in-1 RST", 233, Mapper233_Init},
|
||||
{(uint8_t*)"BMC MAXI", 234, Mapper234_Init},
|
||||
{(uint8_t*)"", 235, Mapper235_Init},
|
||||
// {(uint8_t*)"", 236, Mapper236_Init},
|
||||
// {(uint8_t*)"", 237, Mapper237_Init},
|
||||
/* {(uint8_t*)"", 236, Mapper236_Init}, */
|
||||
/* {(uint8_t*)"", 237, Mapper237_Init}, */
|
||||
{(uint8_t*)"UNL6035052", 238, UNL6035052_Init},
|
||||
// {(uint8_t*)"", 239, Mapper239_Init},
|
||||
/* {(uint8_t*)"", 239, Mapper239_Init}, */
|
||||
{(uint8_t*)"", 240, Mapper240_Init},
|
||||
{(uint8_t*)"", 241, Mapper241_Init},
|
||||
{(uint8_t*)"", 242, Mapper242_Init},
|
||||
@@ -636,15 +636,15 @@ static BMAPPINGLocal bmap[] = {
|
||||
{(uint8_t*)"DECATHLON", 244, Mapper244_Init},
|
||||
{(uint8_t*)"", 245, Mapper245_Init},
|
||||
{(uint8_t*)"FONG SHEN BANG", 246, Mapper246_Init},
|
||||
// {(uint8_t*)"", 247, Mapper247_Init},
|
||||
// {(uint8_t*)"", 248, Mapper248_Init},
|
||||
/* {(uint8_t*)"", 247, Mapper247_Init}, */
|
||||
/* {(uint8_t*)"", 248, Mapper248_Init}, */
|
||||
{(uint8_t*)"", 249, Mapper249_Init},
|
||||
{(uint8_t*)"", 250, Mapper250_Init},
|
||||
// {(uint8_t*)"", 251, Mapper251_Init}, // No good dumps for this mapper, use UNIF version
|
||||
/* {(uint8_t*)"", 251, Mapper251_Init}, */ /* No good dumps for this mapper, use UNIF version */
|
||||
{(uint8_t*)"SAN GUO ZHI PIRATE", 252, Mapper252_Init},
|
||||
{(uint8_t*)"DRAGON BALL PIRATE", 253, Mapper253_Init},
|
||||
{(uint8_t*)"", 254, Mapper254_Init},
|
||||
// {(uint8_t*)"", 255, Mapper255_Init}, // No good dumps for this mapper
|
||||
/* {(uint8_t*)"", 255, Mapper255_Init}, */ /* No good dumps for this mapper */
|
||||
{(uint8_t*)"", 0, NULL}
|
||||
};
|
||||
|
||||
@@ -774,7 +774,7 @@ int iNESLoad(const char *name, FCEUFILE *fp) {
|
||||
FCEU_VSUniCheck(partialmd5, &MapperNo, &Mirroring);
|
||||
}
|
||||
/* Must remain here because above functions might change value of
|
||||
VROM_size and free(VROM).
|
||||
* VROM_size and free(VROM).
|
||||
*/
|
||||
if (VROM_size)
|
||||
SetupCartCHRMapping(0, VROM, VROM_size * 0x2000, 0);
|
||||
@@ -825,9 +825,9 @@ static int iNES_Init(int num) {
|
||||
|
||||
while (tmp->init) {
|
||||
if (num == tmp->number) {
|
||||
UNIFchrrama = 0; // need here for compatibility with UNIF mapper code
|
||||
UNIFchrrama = 0; /* need here for compatibility with UNIF mapper code */
|
||||
if (!VROM_size) {
|
||||
switch (num) { // FIXME, mapper or game data base with the board parameters and ROM/RAM sizes
|
||||
switch (num) { /* FIXME, mapper or game data base with the board parameters and ROM/RAM sizes */
|
||||
case 13: CHRRAMSize = 16 * 1024; break;
|
||||
case 6:
|
||||
case 30:
|
||||
|
||||
@@ -57,7 +57,7 @@ void Mapper23_Init(CartInfo *);
|
||||
void Mapper24_Init(CartInfo *);
|
||||
void Mapper25_Init(CartInfo *);
|
||||
void Mapper26_Init(CartInfo *);
|
||||
void UNROM512_Init(CartInfo *); // Mapper #30
|
||||
void UNROM512_Init(CartInfo *); /* Mapper #30 */
|
||||
void Mapper32_Init(CartInfo *);
|
||||
void Mapper33_Init(CartInfo *);
|
||||
void Mapper34_Init(CartInfo *);
|
||||
|
||||
12
src/nsf.c
12
src/nsf.c
@@ -104,17 +104,17 @@ void NSFGI(int h) {
|
||||
free(ExWRAM); ExWRAM = 0;
|
||||
}
|
||||
if (NSFHeader.SoundChip & 1) {
|
||||
// NSFVRC6_Init();
|
||||
/* NSFVRC6_Init(); */
|
||||
} else if (NSFHeader.SoundChip & 2) {
|
||||
// NSFVRC7_Init();
|
||||
/* NSFVRC7_Init(); */
|
||||
} else if (NSFHeader.SoundChip & 4) {
|
||||
// FDSSoundReset();
|
||||
/* FDSSoundReset(); */
|
||||
} else if (NSFHeader.SoundChip & 8) {
|
||||
NSFMMC5_Close();
|
||||
} else if (NSFHeader.SoundChip & 0x10) {
|
||||
// NSFN106_Init();
|
||||
/* NSFN106_Init(); */
|
||||
} else if (NSFHeader.SoundChip & 0x20) {
|
||||
// NSFAY_Init();
|
||||
/* NSFAY_Init(); */
|
||||
}
|
||||
break;
|
||||
case GI_RESETM2:
|
||||
@@ -122,7 +122,7 @@ void NSFGI(int h) {
|
||||
}
|
||||
}
|
||||
|
||||
// First 32KB is reserved for sound chip emulation in the iNES mapper code.
|
||||
/* First 32KB is reserved for sound chip emulation in the iNES mapper code. */
|
||||
|
||||
static INLINE void BANKSET(uint32 A, uint32 bank) {
|
||||
bank &= NSFMaxBank;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#define _FCEU_NSF_H
|
||||
|
||||
typedef struct {
|
||||
char ID[5]; // NESM^Z
|
||||
char ID[5]; /* NESM^Z */
|
||||
uint8 Version;
|
||||
uint8 TotalSongs;
|
||||
uint8 StartingSong;
|
||||
@@ -35,9 +35,9 @@ typedef struct {
|
||||
uint8 SongName[32];
|
||||
uint8 Artist[32];
|
||||
uint8 Copyright[32];
|
||||
uint8 NTSCspeed[2]; // Unused
|
||||
uint8 NTSCspeed[2]; /* Unused */
|
||||
uint8 BankSwitch[8];
|
||||
uint8 PALspeed[2]; // Unused
|
||||
uint8 PALspeed[2]; /* Unused */
|
||||
uint8 VideoSystem;
|
||||
uint8 SoundChip;
|
||||
uint8 Expansion[4];
|
||||
|
||||
@@ -322,8 +322,8 @@ case 0x50: JR(!(_P&V_FLAG)); break;
|
||||
/* BVS */
|
||||
case 0x70: JR(_P&V_FLAG); break;
|
||||
|
||||
//default: printf("Bad %02x at $%04x\n",b1,X.PC);break;
|
||||
//ifdef moo
|
||||
/* default: printf("Bad %02x at $%04x\n",b1,X.PC);break; */
|
||||
/* ifdef moo */
|
||||
/* Here comes the undocumented instructions block. Note that this implementation
|
||||
may be "wrong". If so, please tell me.
|
||||
*/
|
||||
@@ -485,6 +485,5 @@ case 0xFC: LD_ABX(;);
|
||||
|
||||
/* XAA - BIG QUESTION MARK HERE */
|
||||
case 0x8B: _A|=0xEE; _A&=_X; LD_IM(AND);
|
||||
//endif
|
||||
//
|
||||
/* endif */
|
||||
#endif
|
||||
|
||||
@@ -39,9 +39,9 @@ static int ntsctint = 46 + 10;
|
||||
static int ntschue = 72;
|
||||
|
||||
/* These are dynamically filled/generated palettes: */
|
||||
pal palettei[64]; // Custom palette for an individual game.
|
||||
pal palettec[64]; // Custom "global" palette.
|
||||
pal paletten[64]; // Mathematically generated palette.
|
||||
pal palettei[64]; /* Custom palette for an individual game. */
|
||||
pal palettec[64]; /* Custom "global" palette. */
|
||||
pal paletten[64]; /* Mathematically generated palette. */
|
||||
|
||||
static void CalculatePalette(void);
|
||||
static void ChoosePalette(void);
|
||||
|
||||
@@ -63,8 +63,10 @@ static uint8 rp2c05004_colortable[] =
|
||||
main() {
|
||||
int x;
|
||||
for (x = 0; x < 64; x++) {
|
||||
// if(x <= 0x20)
|
||||
// if(rp2c04002_colortable[x] == 0xFF) rp2c04002_colortable[x]= 0x30;
|
||||
#if 0
|
||||
if(x <= 0x20)
|
||||
if(rp2c04002_colortable[x] == 0xFF) rp2c04002_colortable[x]= 0x30;
|
||||
#endif
|
||||
printf("{0x%02x, 0x%02x, 0x%02x},\n", palette[rp2c04001_colortable[x] & 0x3F].r,
|
||||
palette[rp2c04001_colortable[x] & 0x3F].g,
|
||||
palette[rp2c04001_colortable[x] & 0x3F].b);
|
||||
|
||||
109
src/ppu.c
109
src/ppu.c
@@ -40,15 +40,15 @@
|
||||
#include "video.h"
|
||||
#include "input.h"
|
||||
|
||||
#define VBlankON (PPU[0] & 0x80) //Generate VBlank NMI
|
||||
#define Sprite16 (PPU[0] & 0x20) //Sprites 8x16/8x8
|
||||
#define BGAdrHI (PPU[0] & 0x10) //BG pattern adr $0000/$1000
|
||||
#define SpAdrHI (PPU[0] & 0x08) //Sprite pattern adr $0000/$1000
|
||||
#define INC32 (PPU[0] & 0x04) //auto increment 1/32
|
||||
#define VBlankON (PPU[0] & 0x80) /* Generate VBlank NMI */
|
||||
#define Sprite16 (PPU[0] & 0x20) /* Sprites 8x16/8x8 */
|
||||
#define BGAdrHI (PPU[0] & 0x10) /* BG pattern adr $0000/$1000 */
|
||||
#define SpAdrHI (PPU[0] & 0x08) /* Sprite pattern adr $0000/$1000 */
|
||||
#define INC32 (PPU[0] & 0x04) /* auto increment 1/32 */
|
||||
|
||||
#define SpriteON (PPU[1] & 0x10) //Show Sprite
|
||||
#define ScreenON (PPU[1] & 0x08) //Show screen
|
||||
#define GRAYSCALE (PPU[1] & 0x01) //Grayscale (AND palette entries with 0x30)
|
||||
#define SpriteON (PPU[1] & 0x10) /* Show Sprite */
|
||||
#define ScreenON (PPU[1] & 0x08) /* Show screen */
|
||||
#define GRAYSCALE (PPU[1] & 0x01) /* Grayscale (AND palette entries with 0x30) */
|
||||
|
||||
#define PPU_status (PPU[2])
|
||||
|
||||
@@ -109,7 +109,7 @@ uint8 *vnapage[4];
|
||||
uint8 PPUNTARAM = 0;
|
||||
uint8 PPUCHRRAM = 0;
|
||||
|
||||
//Color deemphasis emulation. Joy...
|
||||
/* Color deemphasis emulation. Joy... */
|
||||
static uint8 deemp = 0;
|
||||
static int deempcnt[8];
|
||||
|
||||
@@ -123,15 +123,16 @@ uint32 TempAddr = 0, RefreshAddr = 0;
|
||||
|
||||
static int maxsprites = 8;
|
||||
|
||||
//scanline is equal to the current visible scanline we're on.
|
||||
/* scanline is equal to the current visible scanline we're on. */
|
||||
int scanline;
|
||||
static uint32 scanlines_per_frame;
|
||||
|
||||
uint8 PPU[4];
|
||||
uint8 PPUSPL;
|
||||
uint8 NTARAM[0x800], PALRAM[0x20], SPRAM[0x100], SPRBUF[0x100];
|
||||
uint8 UPALRAM[0x03];//for 0x4/0x8/0xC addresses in palette, the ones in
|
||||
//0x20 are 0 to not break fceu rendering.
|
||||
uint8 UPALRAM[0x03];/* for 0x4/0x8/0xC addresses in palette, the ones in
|
||||
* 0x20 are 0 to not break fceu rendering.
|
||||
*/
|
||||
|
||||
#define MMC5SPRVRAMADR(V) &MMC5SPRVPage[(V) >> 10][(V)]
|
||||
#define VRAMADR(V) &VPage[(V) >> 10][(V)]
|
||||
@@ -176,7 +177,7 @@ static DECLFR(A2007) {
|
||||
|
||||
FCEUPPU_LineUpdate();
|
||||
|
||||
if (tmp >= 0x3F00) { // Palette RAM tied directly to the output data, without VRAM buffer
|
||||
if (tmp >= 0x3F00) { /* Palette RAM tied directly to the output data, without VRAM buffer */
|
||||
if (!(tmp & 3)) {
|
||||
if (!(tmp & 0xC))
|
||||
ret = PALRAM[0x00];
|
||||
@@ -431,11 +432,12 @@ static void CheckSpriteHit(int p) {
|
||||
}
|
||||
}
|
||||
|
||||
//spork the world. Any sprites on this line? Then this will be set to 1.
|
||||
//Needed for zapper emulation and *gasp* sprite emulation.
|
||||
/* spork the world. Any sprites on this line? Then this will be set to 1.
|
||||
* Needed for zapper emulation and *gasp* sprite emulation.
|
||||
*/
|
||||
static int spork = 0;
|
||||
|
||||
// lasttile is really "second to last tile."
|
||||
/* lasttile is really "second to last tile." */
|
||||
static void FASTAPASS(1) RefreshLine(int lastpixel) {
|
||||
static uint32 pshift[2];
|
||||
static uint32 atlatch;
|
||||
@@ -448,11 +450,12 @@ static void FASTAPASS(1) RefreshLine(int lastpixel) {
|
||||
register uint8 *P = Pline;
|
||||
int lasttile = lastpixel >> 3;
|
||||
int numtiles;
|
||||
static int norecurse = 0; // Yeah, recursion would be bad.
|
||||
// PPU_hook() functions can call
|
||||
// mirroring/chr bank switching functions,
|
||||
// which call FCEUPPU_LineUpdate, which call this
|
||||
// function.
|
||||
static int norecurse = 0; /* Yeah, recursion would be bad.
|
||||
* PPU_hook() functions can call
|
||||
* mirroring/chr bank switching functions,
|
||||
* which call FCEUPPU_LineUpdate, which call this
|
||||
* function.
|
||||
*/
|
||||
if (norecurse) return;
|
||||
|
||||
if (sphitx != 0x100 && !(PPU_status & 0x40)) {
|
||||
@@ -496,14 +499,15 @@ static void FASTAPASS(1) RefreshLine(int lastpixel) {
|
||||
return;
|
||||
}
|
||||
|
||||
//Priority bits, needed for sprite emulation.
|
||||
/* Priority bits, needed for sprite emulation. */
|
||||
Pal[0] |= 64;
|
||||
Pal[4] |= 64;
|
||||
Pal[8] |= 64;
|
||||
Pal[0xC] |= 64;
|
||||
|
||||
//This high-level graphics MMC5 emulation code was written for MMC5 carts in "CL" mode.
|
||||
//It's probably not totally correct for carts in "SL" mode.
|
||||
/* This high-level graphics MMC5 emulation code was written for MMC5 carts in "CL" mode.
|
||||
* It's probably not totally correct for carts in "SL" mode.
|
||||
*/
|
||||
|
||||
#define PPUT_MMC5
|
||||
if (MMC5Hack && geniestage != 1) {
|
||||
@@ -577,7 +581,7 @@ static void FASTAPASS(1) RefreshLine(int lastpixel) {
|
||||
#undef vofs
|
||||
#undef RefreshAddr
|
||||
|
||||
//Reverse changes made before.
|
||||
/* Reverse changes made before. */
|
||||
Pal[0] &= 63;
|
||||
Pal[4] &= 63;
|
||||
Pal[8] &= 63;
|
||||
@@ -612,7 +616,7 @@ static void FASTAPASS(1) RefreshLine(int lastpixel) {
|
||||
tofix = 0;
|
||||
}
|
||||
|
||||
//This only works right because of a hack earlier in this function.
|
||||
/* This only works right because of a hack earlier in this function. */
|
||||
CheckSpriteHit(lastpixel);
|
||||
|
||||
if (InputScanlineHook && (lastpixel - 16) >= 0) {
|
||||
@@ -649,7 +653,7 @@ static void Fixit1(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void MMC5_hb(int); //Ugh ugh ugh.
|
||||
void MMC5_hb(int); /* Ugh ugh ugh. */
|
||||
static void DoLine(void)
|
||||
{
|
||||
int x;
|
||||
@@ -669,7 +673,7 @@ static void DoLine(void)
|
||||
X6502_Run(256);
|
||||
EndRL();
|
||||
|
||||
if (rendis & 2) {// User asked to not display background data.
|
||||
if (rendis & 2) {/* User asked to not display background data. */
|
||||
uint32 tem;
|
||||
tem = Pal[0] | (Pal[0] << 8) | (Pal[0] << 16) | (Pal[0] << 24);
|
||||
tem |= 0x40404040;
|
||||
@@ -679,7 +683,7 @@ static void DoLine(void)
|
||||
if (SpriteON)
|
||||
CopySprites(target);
|
||||
|
||||
if (ScreenON || SpriteON) { // Yes, very el-cheapo.
|
||||
if (ScreenON || SpriteON) { /* Yes, very el-cheapo. */
|
||||
if (PPU[1] & 0x01) {
|
||||
for (x = 63; x >= 0; x--)
|
||||
*(uint32*)&target[x << 2] = (*(uint32*)&target[x << 2]) & 0x30303030;
|
||||
@@ -709,7 +713,7 @@ static void DoLine(void)
|
||||
} else {
|
||||
X6502_Run(85 - 6 - 16);
|
||||
|
||||
// A semi-hack for Star Trek: 25th Anniversary
|
||||
/* A semi-hack for Star Trek: 25th Anniversary */
|
||||
if (GameHBIRQHook && (ScreenON || SpriteON) && ((PPU[0] & 0x38) != 0x18))
|
||||
GameHBIRQHook();
|
||||
}
|
||||
@@ -861,7 +865,7 @@ static void FetchSpriteData(void) {
|
||||
}
|
||||
}
|
||||
|
||||
//Handle case when >8 sprites per scanline option is enabled.
|
||||
/* Handle case when >8 sprites per scanline option is enabled. */
|
||||
if (ns > 8) PPU_status |= 0x20;
|
||||
else if (PPU_hook) {
|
||||
for (n = 0; n < (8 - ns); n++) {
|
||||
@@ -996,7 +1000,7 @@ static void CopySprites(uint8 *target) {
|
||||
if (!spork) return;
|
||||
spork = 0;
|
||||
|
||||
if (rendis & 1) return; //User asked to not display sprites.
|
||||
if (rendis & 1) return; /* User asked to not display sprites. */
|
||||
|
||||
do
|
||||
{
|
||||
@@ -1005,43 +1009,43 @@ static void CopySprites(uint8 *target) {
|
||||
if (t != 0x80808080) {
|
||||
#ifdef MSB_FIRST
|
||||
if (!(t & 0x80000000)) {
|
||||
if (!(t & 0x40000000) || (P[n] & 64)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x40000000) || (P[n] & 64)) /* Normal sprite || behind bg sprite */
|
||||
P[n] = sprlinebuf[n];
|
||||
}
|
||||
|
||||
if (!(t & 0x800000)) {
|
||||
if (!(t & 0x400000) || (P[n + 1] & 64)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x400000) || (P[n + 1] & 64)) /* Normal sprite || behind bg sprite */
|
||||
P[n + 1] = (sprlinebuf + 1)[n];
|
||||
}
|
||||
|
||||
if (!(t & 0x8000)) {
|
||||
if (!(t & 0x4000) || (P[n + 2] & 64)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x4000) || (P[n + 2] & 64)) /* Normal sprite || behind bg sprite */
|
||||
P[n + 2] = (sprlinebuf + 2)[n];
|
||||
}
|
||||
|
||||
if (!(t & 0x80)) {
|
||||
if (!(t & 0x40) || (P[n + 3] & 64)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x40) || (P[n + 3] & 64)) /* Normal sprite || behind bg sprite */
|
||||
P[n + 3] = (sprlinebuf + 3)[n];
|
||||
}
|
||||
#else
|
||||
|
||||
if (!(t & 0x80)) {
|
||||
if (!(t & 0x40) || (P[n] & 0x40)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x40) || (P[n] & 0x40)) /* Normal sprite || behind bg sprite */
|
||||
P[n] = sprlinebuf[n];
|
||||
}
|
||||
|
||||
if (!(t & 0x8000)) {
|
||||
if (!(t & 0x4000) || (P[n + 1] & 0x40)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x4000) || (P[n + 1] & 0x40)) /* Normal sprite || behind bg sprite */
|
||||
P[n + 1] = (sprlinebuf + 1)[n];
|
||||
}
|
||||
|
||||
if (!(t & 0x800000)) {
|
||||
if (!(t & 0x400000) || (P[n + 2] & 0x40)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x400000) || (P[n + 2] & 0x40)) /* Normal sprite || behind bg sprite */
|
||||
P[n + 2] = (sprlinebuf + 2)[n];
|
||||
}
|
||||
|
||||
if (!(t & 0x80000000)) {
|
||||
if (!(t & 0x40000000) || (P[n + 3] & 0x40)) // Normal sprite || behind bg sprite
|
||||
if (!(t & 0x40000000) || (P[n + 3] & 0x40)) /* Normal sprite || behind bg sprite */
|
||||
P[n + 3] = (sprlinebuf + 3)[n];
|
||||
}
|
||||
#endif
|
||||
@@ -1094,7 +1098,7 @@ void FCEUPPU_Power(void) {
|
||||
BWrite[x + 2] = B2002;
|
||||
ARead[x + 3] = A200x;
|
||||
BWrite[x + 3] = B2003;
|
||||
ARead[x + 4] = A200x; //A2004;
|
||||
ARead[x + 4] = A200x; /* A2004; */
|
||||
BWrite[x + 4] = B2004;
|
||||
ARead[x + 5] = A200x;
|
||||
BWrite[x + 5] = B2005;
|
||||
@@ -1113,7 +1117,7 @@ void FCEUPPU_Power(void) {
|
||||
BWrite[x + 2] = B2002;
|
||||
ARead[x + 3] = A200x;
|
||||
BWrite[x + 3] = B2003;
|
||||
ARead[x + 4] = A200x; //A2004;
|
||||
ARead[x + 4] = A200x; /* A2004; */
|
||||
BWrite[x + 4] = B2004;
|
||||
ARead[x + 5] = A200x;
|
||||
BWrite[x + 5] = B2005;
|
||||
@@ -1128,7 +1132,7 @@ void FCEUPPU_Power(void) {
|
||||
|
||||
|
||||
int FCEUPPU_Loop(int skip) {
|
||||
//Needed for Knight Rider, possibly others.
|
||||
/* Needed for Knight Rider, possibly others. */
|
||||
if (ppudead) {
|
||||
memset(XBuf, 0x80, 256 * 240);
|
||||
X6502_Run(scanlines_per_frame * (256 + 85));
|
||||
@@ -1137,12 +1141,13 @@ int FCEUPPU_Loop(int skip) {
|
||||
X6502_Run(256 + 85);
|
||||
PPU_status |= 0x80;
|
||||
|
||||
//Not sure if this is correct. According to Matt Conte and my own tests, it is.
|
||||
//Timing is probably off, though.
|
||||
//NOTE: Not having this here breaks a Super Donkey Kong game.
|
||||
/* Not sure if this is correct. According to Matt Conte and my own tests, it is.
|
||||
* Timing is probably off, though.
|
||||
* NOTE: Not having this here breaks a Super Donkey Kong game.
|
||||
*/
|
||||
PPU[3] = PPUSPL = 0;
|
||||
|
||||
//I need to figure out the true nature and length of this delay.
|
||||
/* I need to figure out the true nature and length of this delay. */
|
||||
X6502_Run(12);
|
||||
if (GameInfo->type == GIT_NSF)
|
||||
DoNSFFrame();
|
||||
@@ -1180,7 +1185,7 @@ int FCEUPPU_Loop(int skip) {
|
||||
if (PPU_hook) PPU_hook(RefreshAddr & 0x3fff);
|
||||
}
|
||||
|
||||
//Clean this stuff up later.
|
||||
/* Clean this stuff up later. */
|
||||
spork = numsprites = 0;
|
||||
ResetRL(XBuf);
|
||||
|
||||
@@ -1196,7 +1201,7 @@ int FCEUPPU_Loop(int skip) {
|
||||
y = SPRAM[0];
|
||||
y++;
|
||||
|
||||
PPU_status |= 0x20; // Fixes "Bee 52". Does it break anything?
|
||||
PPU_status |= 0x20; /* Fixes "Bee 52". Does it break anything? */
|
||||
if (GameHBIRQHook) {
|
||||
X6502_Run(256);
|
||||
for (scanline = 0; scanline < 240; scanline++) {
|
||||
@@ -1207,7 +1212,7 @@ int FCEUPPU_Loop(int skip) {
|
||||
}
|
||||
} else if (y < 240) {
|
||||
X6502_Run((256 + 85) * y);
|
||||
if (SpriteON) PPU_status |= 0x40; // Quick and very dirty hack.
|
||||
if (SpriteON) PPU_status |= 0x40; /* Quick and very dirty hack. */
|
||||
X6502_Run((256 + 85) * (240 - y));
|
||||
} else
|
||||
X6502_Run((256 + 85) * 240);
|
||||
@@ -1218,13 +1223,13 @@ int FCEUPPU_Loop(int skip) {
|
||||
|
||||
deemp = PPU[1] >> 5;
|
||||
|
||||
// manual samples can't play correctly with overclocking
|
||||
/* manual samples can't play correctly with overclocking */
|
||||
if (DMC_7bit && skip_7bit_overclocking)
|
||||
totalscanlines = normal_scanlines;
|
||||
else
|
||||
totalscanlines = normal_scanlines + (overclock_state ? extrascanlines : 0);
|
||||
|
||||
for (scanline = 0; scanline < totalscanlines; ) { //scanline is incremented in DoLine. Evil. :/
|
||||
for (scanline = 0; scanline < totalscanlines; ) { /* scanline is incremented in DoLine. Evil. :/ */
|
||||
deempcnt[deemp]++;
|
||||
if ((PPUViewer) && (scanline == PPUViewScanline)) UpdatePPUView(1);
|
||||
DoLine();
|
||||
|
||||
@@ -42,7 +42,7 @@ if (X1 >= 2) {
|
||||
#else
|
||||
zz = RefreshAddr & 0x1F;
|
||||
C = vnapage[(RefreshAddr >> 10) & 3];
|
||||
vadr = (C[RefreshAddr & 0x3ff] << 4) + vofs; // Fetch name table byte.
|
||||
vadr = (C[RefreshAddr & 0x3ff] << 4) + vofs; /* Fetch name table byte. */
|
||||
#endif
|
||||
|
||||
#ifdef PPUT_HOOK
|
||||
@@ -56,7 +56,7 @@ if (X1 >= 2) {
|
||||
#ifdef PPUT_MMC5CHR1
|
||||
cc = (MMC5HackExNTARAMPtr[RefreshAddr & 0x3ff] & 0xC0) >> 6;
|
||||
#else
|
||||
cc = C[0x3c0 + (zz >> 2) + ((RefreshAddr & 0x380) >> 4)]; // Fetch attribute table byte.
|
||||
cc = C[0x3c0 + (zz >> 2) + ((RefreshAddr & 0x380) >> 4)]; /* Fetch attribute table byte. */
|
||||
cc = ((cc >> ((zz & 2) + ((RefreshAddr & 0x40) >> 4))) & 3);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
92
src/sound.c
92
src/sound.c
@@ -61,7 +61,7 @@ typedef struct {
|
||||
int reloaddec;
|
||||
} ENVUNIT;
|
||||
|
||||
unsigned DMC_7bit = 0; // used to skip overclocking
|
||||
unsigned DMC_7bit = 0; /* used to skip overclocking */
|
||||
static ENVUNIT EnvUnits[3];
|
||||
|
||||
static const int RectDuties[4] = { 1, 2, 4, 6 };
|
||||
@@ -119,10 +119,11 @@ static const uint32 PALDMCTable[0x10] =
|
||||
0x0B0, 0x094, 0x084, 0x076, 0x062, 0x04E, 0x042, 0x032
|
||||
};
|
||||
|
||||
// $4010 - Frequency
|
||||
// $4011 - Actual data outputted
|
||||
// $4012 - Address register: $c000 + V*64
|
||||
// $4013 - Size register: Size in bytes = (V+1)*64
|
||||
/* $4010 - Frequency
|
||||
* $4011 - Actual data outputted
|
||||
* $4012 - Address register: $c000 + V*64
|
||||
* $4013 - Size register: Size in bytes = (V+1)*64
|
||||
*/
|
||||
|
||||
/*static*/ int32 DMCacc = 1;
|
||||
static int32 DMCPeriod = 0;
|
||||
@@ -188,11 +189,11 @@ static void SQReload(int x, uint8 V) {
|
||||
|
||||
RectDutyCount[x] = 7;
|
||||
EnvUnits[x].reloaddec = 1;
|
||||
//reloadfreq[x]=1;
|
||||
/* reloadfreq[x]=1; */
|
||||
}
|
||||
|
||||
static DECLFW(Write_PSG) {
|
||||
// FCEU_printf("APU1 %04x:%04x\n",A,V);
|
||||
/* FCEU_printf("APU1 %04x:%04x\n",A,V); */
|
||||
A &= 0x1F;
|
||||
switch (A) {
|
||||
case 0x0:
|
||||
@@ -270,7 +271,7 @@ static DECLFW(Write_PSG) {
|
||||
}
|
||||
|
||||
static DECLFW(Write_DMCRegs) {
|
||||
// FCEU_printf("APU1 %04x:%04x\n",A,V);
|
||||
/* FCEU_printf("APU1 %04x:%04x\n",A,V); */
|
||||
A &= 0xF;
|
||||
|
||||
switch (A) {
|
||||
@@ -305,7 +306,7 @@ static DECLFW(Write_DMCRegs) {
|
||||
|
||||
static DECLFW(StatusWrite) {
|
||||
int x;
|
||||
// FCEU_printf("APU1 %04x:%04x\n",A,V);
|
||||
/* FCEU_printf("APU1 %04x:%04x\n",A,V); */
|
||||
|
||||
DoSQ1();
|
||||
DoSQ2();
|
||||
@@ -375,7 +376,7 @@ static void FASTAPASS(1) FrameSoundStuff(int V) {
|
||||
|
||||
if (SweepCount[P] > 0) SweepCount[P]--;
|
||||
if (SweepCount[P] <= 0) {
|
||||
SweepCount[P] = ((PSG[(P << 2) + 0x1] >> 4) & 7) + 1; //+1;
|
||||
SweepCount[P] = ((PSG[(P << 2) + 0x1] >> 4) & 7) + 1; /* +1; */
|
||||
if (PSG[(P << 2) + 0x1] & 0x8) {
|
||||
mod -= (P ^ 1) + ((curfreq[P]) >> (PSG[(P << 2) + 0x1] & 7));
|
||||
if (curfreq[P] && (PSG[(P << 2) + 0x1] & 7) /* && sweepon[P]&0x80*/) {
|
||||
@@ -394,15 +395,17 @@ static void FASTAPASS(1) FrameSoundStuff(int V) {
|
||||
}
|
||||
}
|
||||
} else {/* Sweeping is disabled: */
|
||||
//curfreq[P]&=0xFF00;
|
||||
//curfreq[P]|=PSG[(P<<2)|0x2]; //|((PSG[(P<<2)|3]&7)<<8);
|
||||
#if 0
|
||||
curfreq[P]&=0xFF00;
|
||||
curfreq[P]|=PSG[(P<<2)|0x2]; /* |((PSG[(P<<2)|3]&7)<<8); */
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Now do envelope decay + linear counter. */
|
||||
|
||||
if (TriMode)// In load mode?
|
||||
if (TriMode)/* In load mode? */
|
||||
TriCount = PSG[0x8] & 0x7F;
|
||||
else if (TriCount)
|
||||
TriCount--;
|
||||
@@ -430,8 +433,9 @@ static void FASTAPASS(1) FrameSoundStuff(int V) {
|
||||
}
|
||||
|
||||
void FrameSoundUpdate(void) {
|
||||
// Linear counter: Bit 0-6 of $4008
|
||||
// Length counter: Bit 4-7 of $4003, $4007, $400b, $400f
|
||||
/* Linear counter: Bit 0-6 of $4008
|
||||
* Length counter: Bit 4-7 of $4003, $4007, $400b, $400f
|
||||
*/
|
||||
|
||||
if (!fcnt && !(IRQFrameMode & 0x3)) {
|
||||
SIRQStat |= 0x40;
|
||||
@@ -542,7 +546,7 @@ static INLINE void RDoSQ(int x) {
|
||||
amp = EnvUnits[x].Speed;
|
||||
else
|
||||
amp = EnvUnits[x].decvolume;
|
||||
// printf("%d\n",amp);
|
||||
/* printf("%d\n",amp); */
|
||||
amp <<= 24;
|
||||
|
||||
rthresh = RectDuties[(PSG[(x << 2)] & 0xC0) >> 6];
|
||||
@@ -635,15 +639,16 @@ static void RDoSQLQ(void) {
|
||||
Wave[V >> 4] += totalout;
|
||||
} else
|
||||
for (V = start; V < end; V++) {
|
||||
//int tmpamp=0;
|
||||
//if(RectDutyCount[0]<rthresh[0])
|
||||
// tmpamp=amp[0];
|
||||
//if(RectDutyCount[1]<rthresh[1])
|
||||
// tmpamp+=amp[1];
|
||||
//tmpamp=wlookup1[tmpamp];
|
||||
//tmpamp = wlookup1[ ttable[0][RectDutyCount[0]] + ttable[1][RectDutyCount[1]] ];
|
||||
/* int tmpamp=0;
|
||||
if(RectDutyCount[0]<rthresh[0])
|
||||
tmpamp=amp[0];
|
||||
if(RectDutyCount[1]<rthresh[1])
|
||||
tmpamp+=amp[1];
|
||||
tmpamp=wlookup1[tmpamp];
|
||||
tmpamp = wlookup1[ ttable[0][RectDutyCount[0]] + ttable[1][RectDutyCount[1]] ];
|
||||
*/
|
||||
|
||||
Wave[V >> 4] += totalout; //tmpamp;
|
||||
Wave[V >> 4] += totalout; /* tmpamp; */
|
||||
|
||||
sqacc[0] -= inie[0];
|
||||
sqacc[1] -= inie[1];
|
||||
@@ -672,7 +677,7 @@ static void RDoTriangle(void) {
|
||||
|
||||
tcout = (tristep & 0xF);
|
||||
if (!(tristep & 0x10)) tcout ^= 0xF;
|
||||
tcout = (tcout * 3) << 16; //(tcout<<1);
|
||||
tcout = (tcout * 3) << 16; /* (tcout<<1); */
|
||||
|
||||
if (!lengthcount[2] || !TriCount) { /* Counter is halted, but we still need to output. */
|
||||
int32 *start = &WaveHi[ChannelBC[2]];
|
||||
@@ -681,8 +686,10 @@ static void RDoTriangle(void) {
|
||||
*start += tcout;
|
||||
start++;
|
||||
}
|
||||
//for(V=ChannelBC[2];V<SOUNDTS;V++)
|
||||
// WaveHi[V]+=tcout;
|
||||
#if 0
|
||||
for(V = ChannelBC[2]; V < SOUNDTS; V++)
|
||||
WaveHi[V] += tcout;
|
||||
#endif
|
||||
} else
|
||||
for (V = ChannelBC[2]; V < SOUNDTS; V++) {
|
||||
WaveHi[V] += tcout;
|
||||
@@ -756,7 +763,7 @@ static void RDoTriangleNoisePCMLQ(void) {
|
||||
|
||||
if (triacc <= 0) {
|
||||
rea:
|
||||
triacc += freq[0]; //t;
|
||||
triacc += freq[0]; /* t; */
|
||||
tristep = (tristep + 1) & 0x1F;
|
||||
if (triacc <= 0) goto rea;
|
||||
tcout = (tristep & 0xF);
|
||||
@@ -767,8 +774,9 @@ static void RDoTriangleNoisePCMLQ(void) {
|
||||
|
||||
if (noiseacc <= 0) {
|
||||
rea2:
|
||||
//used to added <<(16+2) when the noise table
|
||||
//values were half.
|
||||
/* used to added <<(16+2) when the noise table
|
||||
* values were half.
|
||||
*/
|
||||
if (PAL)
|
||||
noiseacc += PALNoiseFreqTable[PSG[0xE] & 0xF] << (16 + 1);
|
||||
else
|
||||
@@ -788,7 +796,7 @@ static void RDoTriangleNoisePCMLQ(void) {
|
||||
|
||||
if (triacc <= 0) {
|
||||
area:
|
||||
triacc += freq[0]; //t;
|
||||
triacc += freq[0]; /* t; */
|
||||
tristep = (tristep + 1) & 0x1F;
|
||||
if (triacc <= 0) goto area;
|
||||
tcout = (tristep & 0xF);
|
||||
@@ -803,8 +811,9 @@ static void RDoTriangleNoisePCMLQ(void) {
|
||||
noiseacc -= inie[1];
|
||||
if (noiseacc <= 0) {
|
||||
area2:
|
||||
//used to be added <<(16+2) when the noise table
|
||||
//values were half.
|
||||
/* used to be added <<(16+2) when the noise table
|
||||
* values were half.
|
||||
*/
|
||||
if (PAL)
|
||||
noiseacc += PALNoiseFreqTable[PSG[0xE] & 0xF] << (16 + 1);
|
||||
else
|
||||
@@ -844,7 +853,7 @@ static void RDoNoise(void) {
|
||||
outo = amptab[0] = 0;
|
||||
}
|
||||
|
||||
if (PSG[0xE] & 0x80)// "short" noise
|
||||
if (PSG[0xE] & 0x80)/* "short" noise */
|
||||
for (V = ChannelBC[3]; V < SOUNDTS; V++) {
|
||||
WaveHi[V] += outo;
|
||||
wlcount[3]--;
|
||||
@@ -944,8 +953,10 @@ int FlushEmulateSound(void) {
|
||||
|
||||
SexyFilter(Wave, WaveFinal, end >> 4);
|
||||
|
||||
//if(FSettings.lowpass)
|
||||
// SexyFilter2(WaveFinal,end>>4);
|
||||
#if o
|
||||
if (FSettings.lowpass)
|
||||
SexyFilter2(WaveFinal, end >> 4);
|
||||
#endif
|
||||
if (end & 0xF)
|
||||
Wave[0] = Wave[(end >> 4)];
|
||||
Wave[end >> 4] = 0;
|
||||
@@ -982,19 +993,18 @@ void FCEUSND_Reset(void) {
|
||||
IRQFrameMode = 0x0;
|
||||
fhcnt = fhinc;
|
||||
fcnt = 0;
|
||||
|
||||
nreg = 1;
|
||||
|
||||
for (x = 0; x < 2; x++) {
|
||||
wlcount[x] = 2048;
|
||||
if (nesincsize) // lq mode
|
||||
if (nesincsize) /* lq mode */
|
||||
sqacc[x] = ((uint32)2048 << 17) / nesincsize;
|
||||
else
|
||||
sqacc[x] = 1;
|
||||
sweepon[x] = 0;
|
||||
curfreq[x] = 0;
|
||||
}
|
||||
wlcount[2] = 1; //2048;
|
||||
wlcount[2] = 1; /* 2048; */
|
||||
wlcount[3] = 2048;
|
||||
DMCHaveDMA = DMCHaveSample = 0;
|
||||
SIRQStat = 0x00;
|
||||
@@ -1036,7 +1046,7 @@ void FCEUSND_Power(void) {
|
||||
void SetSoundVariables(void) {
|
||||
int x;
|
||||
|
||||
fhinc = PAL ? 16626 : 14915; // *2 CPU clock rate
|
||||
fhinc = PAL ? 16626 : 14915; /* *2 CPU clock rate */
|
||||
fhinc *= 24;
|
||||
|
||||
if (FSettings.SndRate) {
|
||||
@@ -1078,7 +1088,7 @@ void SetSoundVariables(void) {
|
||||
memset(sqacc, 0, sizeof(sqacc));
|
||||
memset(ChannelBC, 0, sizeof(ChannelBC));
|
||||
|
||||
LoadDMCPeriod(DMCFormat & 0xF); // For changing from PAL to NTSC
|
||||
LoadDMCPeriod(DMCFormat & 0xF); /* For changing from PAL to NTSC */
|
||||
|
||||
soundtsinc = (uint32)((uint64)(PAL ? (long double)PAL_CPU * 65536 : (long double)NTSC_CPU * 65536) / (FSettings.SndRate * 16));
|
||||
}
|
||||
|
||||
@@ -42,12 +42,12 @@
|
||||
static void (*SPreSave)(void);
|
||||
static void (*SPostSave)(void);
|
||||
|
||||
static int SaveStateStatus[10];
|
||||
/* static int SaveStateStatus[10]; */
|
||||
|
||||
static SFORMAT SFMDATA[64];
|
||||
static int SFEXINDEX;
|
||||
|
||||
#define RLSB FCEUSTATE_RLSB //0x80000000
|
||||
#define RLSB FCEUSTATE_RLSB /* 0x80000000 */
|
||||
|
||||
extern SFORMAT FCEUPPU_STATEINFO[];
|
||||
extern SFORMAT FCEUSND_STATEINFO[];
|
||||
@@ -214,7 +214,7 @@ static int ReadStateChunks(memstream_t *st, int32 totalsize)
|
||||
if (!ReadStateChunk(st, SFCPUC, size))
|
||||
ret = 0;
|
||||
else
|
||||
X.mooPI = X.P; // Quick and dirty hack.
|
||||
X.mooPI = X.P; /* Quick and dirty hack. */
|
||||
break;
|
||||
case 3:
|
||||
if (!ReadStateChunk(st, FCEUPPU_STATEINFO, size))
|
||||
@@ -331,7 +331,7 @@ void AddExState(void *v, uint32 s, int type, char *desc)
|
||||
SFMDATA[SFEXINDEX].s = s;
|
||||
if (type) SFMDATA[SFEXINDEX].s |= RLSB;
|
||||
if (SFEXINDEX < 63) SFEXINDEX++;
|
||||
SFMDATA[SFEXINDEX].v = 0; // End marker.
|
||||
SFMDATA[SFEXINDEX].v = 0; /* End marker. */
|
||||
}
|
||||
|
||||
void FCEU_DrawSaveStates(uint8 *XBuf)
|
||||
|
||||
@@ -151,7 +151,7 @@ static int NAME(FCEUFILE *fp) {
|
||||
int index;
|
||||
int t;
|
||||
|
||||
//FCEU_printf(" Name: ");
|
||||
/* FCEU_printf(" Name: "); */
|
||||
index = 0;
|
||||
|
||||
while ((t = FCEU_fgetc(fp)) > 0)
|
||||
@@ -346,7 +346,7 @@ static BMAPPING bmap[] = {
|
||||
{ "CNROM", CNROM_Init, 0 },
|
||||
{ "CPROM", CPROM_Init, BMCFLAG_16KCHRR },
|
||||
{ "D1038", BMCD1038_Init, 0 },
|
||||
{ "DANCE", UNLOneBus_Init, 0 }, // redundant
|
||||
{ "DANCE", UNLOneBus_Init, 0 }, /* redundant */
|
||||
{ "DANCE2000", UNLD2000_Init, 0 },
|
||||
{ "DREAMTECH01", DreamTech01_Init, 0 },
|
||||
{ "EDU2000", UNLEDU2000_Init, 0 },
|
||||
@@ -418,9 +418,9 @@ static BMAPPING bmap[] = {
|
||||
{ "SNROM", SNROM_Init, 0 },
|
||||
{ "SOROM", SOROM_Init, 0 },
|
||||
{ "SSS-NROM-256", SSSNROM_Init, 0 },
|
||||
{ "SUNSOFT_UNROM", SUNSOFT_UNROM_Init, 0 }, // fix me, real pcb name, real pcb type
|
||||
{ "SUNSOFT_UNROM", SUNSOFT_UNROM_Init, 0 }, /* fix me, real pcb name, real pcb type */
|
||||
{ "Sachen-74LS374N", S74LS374N_Init, 0 },
|
||||
{ "Sachen-74LS374NA", S74LS374NA_Init, 0 }, //seems to be custom mapper
|
||||
{ "Sachen-74LS374NA", S74LS374NA_Init, 0 }, /* seems to be custom mapper */
|
||||
{ "Sachen-8259A", S8259A_Init, 0 },
|
||||
{ "Sachen-8259B", S8259B_Init, 0 },
|
||||
{ "Sachen-8259C", S8259C_Init, 0 },
|
||||
|
||||
@@ -89,7 +89,7 @@ void SLROM_Init(CartInfo *info);
|
||||
void SNROM_Init(CartInfo *info);
|
||||
void SOROM_Init(CartInfo *info);
|
||||
void SSSNROM_Init(CartInfo *info);
|
||||
void SUNSOFT_UNROM_Init(CartInfo *info); // "Shanghi" original version mapper
|
||||
void SUNSOFT_UNROM_Init(CartInfo *info); /* "Shanghi" original version mapper */
|
||||
void Super24_Init(CartInfo *info);
|
||||
void Supervision16_Init(CartInfo *info);
|
||||
void TBROM_Init(CartInfo *info);
|
||||
@@ -163,7 +163,8 @@ void MapperCopyFamiMMC3_Init(CartInfo *info);
|
||||
void MapperCopyFami_Init(CartInfo *info);
|
||||
#endif
|
||||
|
||||
extern uint8 *UNIFchrrama; // Meh. So I can stop CHR RAM
|
||||
// bank switcherooing with certain boards...
|
||||
extern uint8 *UNIFchrrama; /* Meh. So I can stop CHR RAM
|
||||
* bank switcherooing with certain boards...
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
||||
@@ -116,7 +116,7 @@ static DECLFR(A2002_Topgun) {
|
||||
return((OldReadPPU(A) & ~0x3F) | 0x1B);
|
||||
}
|
||||
|
||||
static DECLFR(A2002_MBJ) { // Mighty Bomb Jack
|
||||
static DECLFR(A2002_MBJ) { /* Mighty Bomb Jack */
|
||||
return((OldReadPPU(A) & ~0x3F) | 0x3D);
|
||||
}
|
||||
|
||||
|
||||
65
src/x6502.c
65
src/x6502.c
@@ -66,7 +66,7 @@ static INLINE void WrMemNorm(uint32 A, uint8 V) {
|
||||
}
|
||||
|
||||
#ifdef FCEUDEF_DEBUGGER
|
||||
X6502 XSave; // This is getting ugly.
|
||||
X6502 XSave; /* This is getting ugly. */
|
||||
|
||||
static INLINE uint8 RdMemHook(uint32 A) {
|
||||
if (X.ReadHook)
|
||||
@@ -110,7 +110,7 @@ void FASTAPASS(2) X6502_DMW(uint32 A, uint8 V) {
|
||||
#define POP() RdRAM(0x100 + (++_S))
|
||||
|
||||
static uint8 ZNTable[256];
|
||||
// Some of these operations will only make sense if you know what the flag constants are.
|
||||
/* Some of these operations will only make sense if you know what the flag constants are. */
|
||||
|
||||
#define X_ZN(zort) _P &= ~(Z_FLAG | N_FLAG); _P |= ZNTable[zort]
|
||||
#define X_ZNT(zort) _P |= ZNTable[zort]
|
||||
@@ -134,7 +134,7 @@ static uint8 ZNTable[256];
|
||||
#define LDX _X = x; X_ZN(_X)
|
||||
#define LDY _Y = x; X_ZN(_Y)
|
||||
|
||||
// All of the freaky arithmetic operations.
|
||||
/* All of the freaky arithmetic operations. */
|
||||
#define AND _A &= x; X_ZN(_A)
|
||||
#define BIT _P &= ~(Z_FLAG | V_FLAG | N_FLAG); _P |= ZNTable[x & _A] & Z_FLAG; _P |= x & (V_FLAG | N_FLAG)
|
||||
#define EOR _A ^= x; X_ZN(_A)
|
||||
@@ -165,7 +165,7 @@ static uint8 ZNTable[256];
|
||||
_P |= ((t >> 8) & C_FLAG) ^ C_FLAG; \
|
||||
}
|
||||
|
||||
// Special undocumented operation. Very similar to CMP.
|
||||
/* Special undocumented operation. Very similar to CMP. */
|
||||
#define AXS { \
|
||||
uint32 t = (_A & _X) - x; \
|
||||
X_ZN(t & 0xFF); \
|
||||
@@ -178,14 +178,14 @@ static uint8 ZNTable[256];
|
||||
#define CPX CMPL(_X, x)
|
||||
#define CPY CMPL(_Y, x)
|
||||
|
||||
// The following operations modify the byte being worked on.
|
||||
/* The following operations modify the byte being worked on. */
|
||||
#define DEC x--; X_ZN(x)
|
||||
#define INC x++; X_ZN(x)
|
||||
|
||||
#define ASL _P &= ~C_FLAG; _P |= x >> 7; x <<= 1; X_ZN(x)
|
||||
#define LSR _P &= ~(C_FLAG | N_FLAG | Z_FLAG); _P |= x & 1; x >>= 1; X_ZNT(x)
|
||||
|
||||
// For undocumented instructions, maybe for other things later...
|
||||
/* For undocumented instructions, maybe for other things later... */
|
||||
#define LSRA _P &= ~(C_FLAG | N_FLAG | Z_FLAG); _P |= _A & 1; _A >>= 1; X_ZNT(_A)
|
||||
|
||||
#define ROL { \
|
||||
@@ -206,10 +206,11 @@ static uint8 ZNTable[256];
|
||||
X_ZNT(x); \
|
||||
}
|
||||
|
||||
// Icky icky thing for some undocumented instructions. Can easily be
|
||||
// broken if names of local variables are changed.
|
||||
/* Icky icky thing for some undocumented instructions. Can easily be
|
||||
* broken if names of local variables are changed.
|
||||
*/
|
||||
|
||||
// Absolute
|
||||
/* Absolute */
|
||||
#define GetAB(target) { \
|
||||
target = RdMem(_PC); \
|
||||
_PC++; \
|
||||
@@ -217,7 +218,7 @@ static uint8 ZNTable[256];
|
||||
_PC++; \
|
||||
}
|
||||
|
||||
// Absolute Indexed(for reads)
|
||||
/* Absolute Indexed(for reads) */
|
||||
#define GetABIRD(target, i) { \
|
||||
uint32 tmp; \
|
||||
GetAB(tmp); \
|
||||
@@ -230,7 +231,7 @@ static uint8 ZNTable[256];
|
||||
} \
|
||||
}
|
||||
|
||||
// Absolute Indexed(for writes and rmws)
|
||||
/* Absolute Indexed(for writes and rmws) */
|
||||
#define GetABIWR(target, i) { \
|
||||
uint32 rt; \
|
||||
GetAB(rt); \
|
||||
@@ -240,19 +241,19 @@ static uint8 ZNTable[256];
|
||||
RdMem((target & 0x00FF) | (rt & 0xFF00)); \
|
||||
}
|
||||
|
||||
// Zero Page
|
||||
/* Zero Page */
|
||||
#define GetZP(target) { \
|
||||
target = RdMem(_PC); \
|
||||
_PC++; \
|
||||
}
|
||||
|
||||
// Zero Page Indexed
|
||||
/* Zero Page Indexed */
|
||||
#define GetZPI(target, i) { \
|
||||
target = i + RdMem(_PC); \
|
||||
_PC++; \
|
||||
}
|
||||
|
||||
// Indexed Indirect
|
||||
/* Indexed Indirect */
|
||||
#define GetIX(target) { \
|
||||
uint8 tmp; \
|
||||
tmp = RdMem(_PC); \
|
||||
@@ -263,7 +264,7 @@ static uint8 ZNTable[256];
|
||||
target |= RdRAM(tmp) << 8; \
|
||||
}
|
||||
|
||||
// Indirect Indexed(for reads)
|
||||
/* Indirect Indexed(for reads) */
|
||||
#define GetIYRD(target) { \
|
||||
uint32 rt; \
|
||||
uint8 tmp; \
|
||||
@@ -281,7 +282,7 @@ static uint8 ZNTable[256];
|
||||
} \
|
||||
}
|
||||
|
||||
// Indirect Indexed(for writes and rmws)
|
||||
/* Indirect Indexed(for writes and rmws) */
|
||||
#define GetIYWR(target) { \
|
||||
uint32 rt; \
|
||||
uint8 tmp; \
|
||||
@@ -369,7 +370,7 @@ void TriggerNMI2(void) {
|
||||
}
|
||||
|
||||
#ifdef FCEUDEF_DEBUGGER
|
||||
// Called from debugger.
|
||||
/* Called from debugger. */
|
||||
void FCEUI_NMI(void) {
|
||||
_IRQlow |= FCEU_IQNMI;
|
||||
}
|
||||
@@ -427,9 +428,9 @@ static void X6502_RunDebug(int32 cycles) {
|
||||
#define WrMem WrMemHook
|
||||
|
||||
if (PAL)
|
||||
cycles *= 15; // 15*4=60
|
||||
cycles *= 15; /* 15*4=60 */
|
||||
else
|
||||
cycles *= 16; // 16*4=64
|
||||
cycles *= 16; /* 16*4=64 */
|
||||
|
||||
_count += cycles;
|
||||
|
||||
@@ -473,13 +474,15 @@ static void X6502_RunDebug(int32 cycles) {
|
||||
if (_count <= 0) {
|
||||
_PI = _P;
|
||||
return;
|
||||
} // Should increase accuracy without a
|
||||
// major speed hit.
|
||||
} /* Should increase accuracy without a
|
||||
* major speed hit.
|
||||
*/
|
||||
}
|
||||
|
||||
if (X.CPUHook) X.CPUHook(&X);
|
||||
// Ok, now the real fun starts.
|
||||
// Do the pre-exec voodoo.
|
||||
/* Ok, now the real fun starts.
|
||||
* Do the pre-exec voodoo.
|
||||
*/
|
||||
if (X.ReadHook || X.WriteHook) {
|
||||
uint32 tsave = timestamp;
|
||||
XSave = X;
|
||||
@@ -494,8 +497,9 @@ static void X6502_RunDebug(int32 cycles) {
|
||||
|
||||
timestamp = tsave;
|
||||
|
||||
// In case an NMI/IRQ/RESET was triggered by the debugger.
|
||||
// Should we also copy over the other hook variables?
|
||||
/* In case an NMI/IRQ/RESET was triggered by the debugger.
|
||||
* Should we also copy over the other hook variables?
|
||||
*/
|
||||
XSave.IRQlow = X.IRQlow;
|
||||
XSave.ReadHook = X.ReadHook;
|
||||
XSave.WriteHook = X.WriteHook;
|
||||
@@ -537,7 +541,7 @@ void X6502_Run(int32 cycles)
|
||||
#define WrMem WrMemNorm
|
||||
|
||||
#if (defined(C80x86) && defined(__GNUC__))
|
||||
// Gives a nice little speed boost.
|
||||
/* Gives a nice little speed boost. */
|
||||
register uint16 pbackus asm ("edi");
|
||||
#else
|
||||
uint16 pbackus;
|
||||
@@ -549,9 +553,9 @@ void X6502_Run(int32 cycles)
|
||||
#define _PC pbackus
|
||||
|
||||
if (PAL)
|
||||
cycles *= 15; // 15*4=60
|
||||
cycles *= 15; /* 15*4=60 */
|
||||
else
|
||||
cycles *= 16; // 16*4=64
|
||||
cycles *= 16; /* 16*4=64 */
|
||||
|
||||
_count += cycles;
|
||||
|
||||
@@ -596,8 +600,9 @@ void X6502_Run(int32 cycles)
|
||||
_PI = _P;
|
||||
X.PC = pbackus;
|
||||
return;
|
||||
} // Should increase accuracy without a
|
||||
// major speed hit.
|
||||
} /* Should increase accuracy without a
|
||||
* major speed hit.
|
||||
*/
|
||||
}
|
||||
|
||||
_PI = _P;
|
||||
|
||||
@@ -55,7 +55,7 @@ extern void FP_FASTAPASS(1) (*MapIRQHook)(int a);
|
||||
#define FCEU_IQEXT2 0x002
|
||||
/* ... */
|
||||
#define FCEU_IQRESET 0x020
|
||||
#define FCEU_IQNMI2 0x040 // Delayed NMI, gets converted to *_IQNMI
|
||||
#define FCEU_IQNMI2 0x040 /* Delayed NMI, gets converted to *_IQNMI */
|
||||
#define FCEU_IQNMI 0x080
|
||||
#define FCEU_IQDPCM 0x100
|
||||
#define FCEU_IQFCOUNT 0x200
|
||||
|
||||
Reference in New Issue
Block a user