mirror of
https://github.com/bsnes-emu/bsnes.git
synced 2025-04-02 10:42:14 -04:00
In the release thread, byuu says: The first official release of higan has been posted. higan is the new name for bsnes, and it continues with the latter's version numbering. Note that as of now, bsnes still exists. It's a module distributed inside of higan. bsnes is now specific to my SNES emulator. Due to last minute changes to the emulator interface, and missing support in ananke, I wasn't able to include Cydrak's Nintendo DS emulator dasShiny in this build, but I hope to do so in the next release. http://code.google.com/p/higan/downloads/list For both new and experienced users, please read the higan user guide first: http://byuu.org/higan/user-guide In the v091 WIP thread, byuu says: r15->r16: - BS-X MaskROM handling (partial ... need to split bsx/flash away from sfc/chip, restructure code - it requires tagging the base cart markup for now, but it needs to parse the slotted cart markup) - phoenixflags / phoenixlink += -m32 - nall/sort stability - if(input.poll(scancode[activeScancode]) == false) return; - MSU1 / USART need to use interface->path(1) - MSU1 needs to use Markup::Document, not XML::Document - case-insensitive folder listings - remove nall/emulation/system.hpp files (move to ananke) - remove rom/ram id= checks with indexing X have cores ask for manifest.bml (skipped for v092's release, too big a change) - rename compatibility profile to balanced (so people don't assume it has better compatibility than accuracy)
173 lines
4.1 KiB
C++
173 lines
4.1 KiB
C++
#ifndef NALL_EMULATION_FAMICOM_HPP
|
|
#define NALL_EMULATION_FAMICOM_HPP
|
|
|
|
#include <nall/sha256.hpp>
|
|
#include <nall/string.hpp>
|
|
|
|
namespace nall {
|
|
|
|
struct FamicomCartridge {
|
|
string markup;
|
|
inline FamicomCartridge(const uint8_t *data, unsigned size);
|
|
|
|
//private:
|
|
unsigned mapper;
|
|
unsigned mirror;
|
|
unsigned prgrom;
|
|
unsigned prgram;
|
|
unsigned chrrom;
|
|
unsigned chrram;
|
|
};
|
|
|
|
FamicomCartridge::FamicomCartridge(const uint8_t *data, unsigned size) {
|
|
markup = "";
|
|
if(size < 16) return;
|
|
if(data[0] != 'N') return;
|
|
if(data[1] != 'E') return;
|
|
if(data[2] != 'S') return;
|
|
if(data[3] != 26) return;
|
|
|
|
mapper = ((data[7] >> 4) << 4) | (data[6] >> 4);
|
|
mirror = ((data[6] & 0x08) >> 2) | (data[6] & 0x01);
|
|
prgrom = data[4] * 0x4000;
|
|
chrrom = data[5] * 0x2000;
|
|
prgram = 0u;
|
|
chrram = chrrom == 0u ? 8192u : 0u;
|
|
|
|
markup.append("cartridge\n");
|
|
|
|
switch(mapper) {
|
|
default:
|
|
markup.append(" board type=NES-NROM-256\n");
|
|
markup.append(" mirror mode=", mirror == 0 ? "horizontal" : "vertical", "\n");
|
|
break;
|
|
|
|
case 1:
|
|
markup.append(" board type=NES-SXROM\n");
|
|
markup.append(" chip type=MMC1B2\n");
|
|
prgram = 8192;
|
|
break;
|
|
|
|
case 2:
|
|
markup.append(" board type=NES-UOROM\n");
|
|
markup.append(" mirror mode=", mirror == 0 ? "horizontal" : "vertical", "\n");
|
|
break;
|
|
|
|
case 3:
|
|
markup.append(" board type=NES-CNROM\n");
|
|
markup.append(" mirror mode=", mirror == 0 ? "horizontal" : "vertical", "\n");
|
|
break;
|
|
|
|
case 4:
|
|
//MMC3
|
|
markup.append(" board type=NES-TLROM\n");
|
|
markup.append(" chip type=MMC3B\n");
|
|
prgram = 8192;
|
|
//MMC6
|
|
//markup.append(" board type=NES-HKROM\n");
|
|
//markup.append(" chip type=MMC6n");
|
|
//prgram = 1024;
|
|
break;
|
|
|
|
case 5:
|
|
markup.append(" board type=NES-ELROM\n");
|
|
markup.append(" chip type=MMC5\n");
|
|
prgram = 65536;
|
|
break;
|
|
|
|
case 7:
|
|
markup.append(" board type=NES-AOROM\n");
|
|
break;
|
|
|
|
case 9:
|
|
markup.append(" board type=NES-PNROM\n");
|
|
markup.append(" chip type=MMC2\n");
|
|
prgram = 8192;
|
|
break;
|
|
|
|
case 10:
|
|
markup.append(" board type=NES-FKROM\n");
|
|
markup.append(" chip type=MMC4\n");
|
|
prgram = 8192;
|
|
break;
|
|
|
|
case 16:
|
|
markup.append(" board type=BANDAI-FCG\n");
|
|
markup.append(" chip type=LZ93D50\n");
|
|
break;
|
|
|
|
case 21:
|
|
case 23:
|
|
case 25:
|
|
//VRC4
|
|
markup.append(" board type=KONAMI-VRC-4\n");
|
|
markup.append(" chip type=VRC4\n");
|
|
markup.append(" pinout a0=1 a1=0\n");
|
|
prgram = 8192;
|
|
break;
|
|
|
|
case 22:
|
|
//VRC2
|
|
markup.append(" board type=KONAMI-VRC-2\n");
|
|
markup.append(" chip type=VRC2\n");
|
|
markup.append(" pinout a0=0 a1=1\n");
|
|
break;
|
|
|
|
case 24:
|
|
markup.append(" board type=KONAMI-VRC-6\n");
|
|
markup.append(" chip type=VRC6\n");
|
|
break;
|
|
|
|
case 26:
|
|
markup.append(" board type=KONAMI-VRC-6\n");
|
|
markup.append(" chip type=VRC6\n");
|
|
prgram = 8192;
|
|
break;
|
|
|
|
case 34:
|
|
markup.append(" board type=NES-BNROM\n");
|
|
markup.append(" mirror mode=", mirror == 0 ? "horizontal" : "vertical", "\n");
|
|
break;
|
|
|
|
case 66:
|
|
markup.append(" board type=NES-GNROM\n");
|
|
markup.append(" mirror mode=", mirror == 0 ? "horizontal" : "vertical", "\n");
|
|
break;
|
|
|
|
case 69:
|
|
markup.append(" board type=SUNSOFT-5B\n");
|
|
markup.append(" chip type=5B\n");
|
|
prgram = 8192;
|
|
break;
|
|
|
|
case 73:
|
|
markup.append(" board type=KONAMI-VRC-3\n");
|
|
markup.append(" chip type=VRC3\n");
|
|
markup.append(" mirror mode=", mirror == 0 ? "horizontal" : "vertical", "\n");
|
|
prgram = 8192;
|
|
break;
|
|
|
|
case 75:
|
|
markup.append(" board type=KONAMI-VRC-1\n");
|
|
markup.append(" chip type=VRC1\n");
|
|
break;
|
|
|
|
case 85:
|
|
markup.append(" board type=KONAMI-VRC-7\n");
|
|
markup.append(" chip type=VRC7\n");
|
|
prgram = 8192;
|
|
break;
|
|
}
|
|
|
|
markup.append(" prg\n");
|
|
if(prgrom) markup.append(" rom name=program.rom size=0x", hex(prgrom), "\n");
|
|
if(prgram) markup.append(" ram name=save.ram size=0x", hex(prgram), "\n");
|
|
|
|
markup.append(" chr\n");
|
|
if(chrrom) markup.append(" rom name=character.rom size=0x", hex(chrrom), "\n");
|
|
if(chrram) markup.append(" ram size=0x", hex(chrram), "\n");
|
|
}
|
|
|
|
}
|
|
|
|
#endif
|