2018-02-05 09:58:02 +00:00
|
|
|
|
namespace Heuristics {
|
|
|
|
|
|
2018-03-05 22:42:10 +00:00
|
|
|
|
struct SuperFamicom {
|
2018-02-16 01:07:49 +00:00
|
|
|
|
SuperFamicom(vector<uint8_t>& data, string location);
|
2018-02-05 09:58:02 +00:00
|
|
|
|
explicit operator bool() const;
|
|
|
|
|
|
|
|
|
|
auto manifest() const -> string;
|
|
|
|
|
auto region() const -> string;
|
|
|
|
|
auto revision() const -> string;
|
|
|
|
|
auto board() const -> string;
|
Update to v106r59 release.
byuu says:
Changelog:
- fixed bug in Emulator::Game::Memory::operator bool()
- nall: renamed view<string> back to `string_view`
- nall:: implemented `array_view`
- Game Boy: split cartridge-specific input mappings (rumble,
accelerometer) to their own separate ports
- Game Boy: fixed MBC7 accelerometer x-axis
- icarus: Game Boy, Super Famicom, Mega Drive cores output internal
header game titles to heuristics manifests
- higan, icarus, hiro/gtk: improve viewport geometry configuration;
fixed higan crashing bug with XShm driver
- higan: connect Video::poll(),update() functionality
- hiro, ruby: several compilation / bugfixes, should get the macOS
port compiling again, hopefully [Sintendo]
- ruby/video/xshm: fix crashing bug on window resize
- a bit hacky; it's throwing BadAccess Xlib warnings, but they're
not fatal, so I am catching and ignoring them
- bsnes: removed Application::Windows::onModalChange hook that's no
longer needed [Screwtape]
2018-08-26 06:49:54 +00:00
|
|
|
|
auto title() const -> string;
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto serial() const -> string;
|
Update to v106r05 release.
byuu says:
Changelog:
- Super Famicom: added remaining generic board types
- icarus: improved Super Famicom heuristics
- icarus: reworked BS Memory heuristics
- icarus: reworked Sufami Turbo heuristics
Notes: this is really complicated, and is going to take a long time to
work 100% smoothly again.
Starting off, I am trying to get rid of the weird edge case zero-byte
SRAM mapping for the Cx4. It has the RAM region present, but returns
logic low (0x00) instead of open bus, when SRAM isn't present. I started
by making it `map=ram` instead of `ram/map`, which is gross, and then it ended
up detecing the map tag ending in RAM and pulling the Cx4 data RAM into that
slot. Ugh. The preservation board mapping is still as it was before and will
need to be updated once I get the syntax down.
The BS Memory and Sufami Turbo moving to the new `game/memory`
ending means I can't use the SuperFamicom::Cartridge::loadMemory
function that looks at the old-style rom/ram tags. Because I didn't
write more code, the result is those sub-carts won't load now.
The old heuristics were short-circuiting on SA1 before bothering with
BS-X slots, so that's why SD Gundam G-Next wasn't asking for a data
pack. The problem is, I don't know where the BS-X pack maps to on this
cartridge. It's at c0-ef on the other BS-X slotted cartridges, but
that's mapped to the SA1 on regular SA1 cartridges, so ... for now, it's
not actually mapped in.
I'm still struggling with naming conventions on all these boards. I'll
make a public post about that, though.
2018-02-10 21:45:44 +00:00
|
|
|
|
auto romSize() const -> uint;
|
2018-05-20 04:39:29 +00:00
|
|
|
|
auto programRomSize() const -> uint;
|
|
|
|
|
auto dataRomSize() const -> uint;
|
|
|
|
|
auto expansionRomSize() const -> uint;
|
|
|
|
|
auto firmwareRomSize() const -> uint;
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto ramSize() const -> uint;
|
|
|
|
|
auto expansionRamSize() const -> uint;
|
2018-04-15 05:49:53 +00:00
|
|
|
|
auto nonVolatile() const -> bool;
|
2018-02-05 09:58:02 +00:00
|
|
|
|
|
|
|
|
|
private:
|
2018-02-16 01:07:49 +00:00
|
|
|
|
auto size() const -> uint { return data.size(); }
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto scoreHeader(uint address) -> uint;
|
2018-02-16 01:07:49 +00:00
|
|
|
|
auto firmwareARM() const -> string;
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
auto firmwareEXNEC() const -> string;
|
|
|
|
|
auto firmwareGB() const -> string;
|
2018-02-16 01:07:49 +00:00
|
|
|
|
auto firmwareHITACHI() const -> string;
|
|
|
|
|
auto firmwareNEC() const -> string;
|
|
|
|
|
|
|
|
|
|
vector<uint8_t>& data;
|
|
|
|
|
string location;
|
2018-02-05 09:58:02 +00:00
|
|
|
|
uint headerAddress = 0;
|
2015-08-21 11:29:53 +00:00
|
|
|
|
};
|
|
|
|
|
|
2018-02-16 01:07:49 +00:00
|
|
|
|
SuperFamicom::SuperFamicom(vector<uint8_t>& data, string location) : data(data), location(location) {
|
|
|
|
|
if((size() & 0x7fff) == 512) {
|
|
|
|
|
//remove header if present
|
|
|
|
|
memory::move(&data[0], &data[512], size() - 512);
|
|
|
|
|
data.resize(size() - 512);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(size() < 0x8000) return; //ignore images too small to be valid
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
uint LoROM = scoreHeader( 0x7fb0);
|
|
|
|
|
uint HiROM = scoreHeader( 0xffb0);
|
|
|
|
|
uint ExLoROM = scoreHeader(0x407fb0);
|
|
|
|
|
uint ExHiROM = scoreHeader(0x40ffb0);
|
|
|
|
|
if(ExLoROM) ExLoROM += 4;
|
|
|
|
|
if(ExHiROM) ExHiROM += 4;
|
2015-12-19 09:00:27 +00:00
|
|
|
|
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
if(LoROM >= HiROM && LoROM >= ExLoROM && LoROM >= ExHiROM) headerAddress = 0x7fb0;
|
|
|
|
|
else if(HiROM >= ExLoROM && HiROM >= ExHiROM) headerAddress = 0xffb0;
|
|
|
|
|
else if(ExLoROM >= ExHiROM) headerAddress = 0x407fb0;
|
2018-02-05 09:58:02 +00:00
|
|
|
|
else headerAddress = 0x40ffb0;
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
SuperFamicom::operator bool() const {
|
|
|
|
|
return headerAddress;
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::manifest() const -> string {
|
2018-02-16 01:07:49 +00:00
|
|
|
|
if(!operator bool()) return {};
|
2018-02-05 09:58:02 +00:00
|
|
|
|
|
|
|
|
|
string output;
|
|
|
|
|
output.append("game\n");
|
2018-03-14 03:51:35 +00:00
|
|
|
|
output.append(" sha256: ", Hash::SHA256(data).digest(), "\n");
|
2018-05-19 02:51:34 +00:00
|
|
|
|
output.append(" label: ", Location::prefix(location), "\n");
|
2018-03-14 03:51:35 +00:00
|
|
|
|
output.append(" name: ", Location::prefix(location), "\n");
|
Update to v106r59 release.
byuu says:
Changelog:
- fixed bug in Emulator::Game::Memory::operator bool()
- nall: renamed view<string> back to `string_view`
- nall:: implemented `array_view`
- Game Boy: split cartridge-specific input mappings (rumble,
accelerometer) to their own separate ports
- Game Boy: fixed MBC7 accelerometer x-axis
- icarus: Game Boy, Super Famicom, Mega Drive cores output internal
header game titles to heuristics manifests
- higan, icarus, hiro/gtk: improve viewport geometry configuration;
fixed higan crashing bug with XShm driver
- higan: connect Video::poll(),update() functionality
- hiro, ruby: several compilation / bugfixes, should get the macOS
port compiling again, hopefully [Sintendo]
- ruby/video/xshm: fix crashing bug on window resize
- a bit hacky; it's throwing BadAccess Xlib warnings, but they're
not fatal, so I am catching and ignoring them
- bsnes: removed Application::Windows::onModalChange hook that's no
longer needed [Screwtape]
2018-08-26 06:49:54 +00:00
|
|
|
|
output.append(" title: ", title(), "\n");
|
2018-03-14 03:51:35 +00:00
|
|
|
|
output.append(" region: ", region(), "\n");
|
2018-02-05 09:58:02 +00:00
|
|
|
|
output.append(" revision: ", revision(), "\n");
|
2018-03-14 03:51:35 +00:00
|
|
|
|
output.append(" board: ", board(), "\n");
|
2018-02-05 09:58:02 +00:00
|
|
|
|
|
2018-07-25 12:24:03 +00:00
|
|
|
|
auto board = this->board().trimRight("#A", 1L).split("-");
|
2018-02-05 09:58:02 +00:00
|
|
|
|
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
if(auto size = romSize()) {
|
Update to v106r42 release.
byuu says:
Changelog:
- emulator: added `Thread::setHandle(cothread_t)`
- icarus: added special heuristics support for the Tengai Maykou Zero
fan translation
- board identifier is: EXSPC7110-RAM-EPSONRTC (match on SPC7110 +
ROM size=56mbit)
- board ROM contents are: 8mbit program, 40mbit data, 8mbit
expansion (sizes are fixed)
- bsnes: show messages on game load, unload, and reset
- bsnes: added support for BS Memory and Sufami Turbo games
- bsnes: added support for region selection (Auto [default], NTSC,
PAL)
- bsnes: correct presentation window size from 223/239 to 224/240
- bsnes: add SA-1 internal RAM on cartridges with BS Memory slot
- bsnes: fixed recovery state to store inside .bsz archive
- bsnes: added support for custom manifests in both game pak and game
ROM modes
- bsnes: added icarus game database support (manifest → database →
heuristics)
- bsnes: added flexible SuperFX overclocking
- bsnes: added IPS and BPS soft-patching support to all ROM types
(sfc,smc,gb,gbc,bs,st)
- can load patches inside of ZIP archives (matches first “.ips” or
“.bps” file)
- bsnes/ppu: cache interlace/overscan/vdisp (277 → 291fps with fast
PPU)
- hiro/Windows: faster painting of Label widget on expose
- hiro/Windows: immediately apply LineEdit::setBackgroundColor changes
- hiro/Qt: inherit Window backgroundColor when one is not assigned to
Label
Errata:
- sfc/ppu-fast: remove `renderMode7Hires()` function (the body isn't in
the codebase)
- bsnes: advanced note label should probably use a lighter text color
and/or smaller font size instead of italics
I didn't test the soft-patching at all, as I don't have any patches on
my dev box. If anyone wants to test, that'd be great. The Tengai Makyou
Zero fan translation would be a great test case.
2018-06-26 03:17:26 +00:00
|
|
|
|
if(board(0) == "SPC7110" && size > 0x100000) {
|
|
|
|
|
output.append(Memory{}.type("ROM").size(0x100000).content("Program").text());
|
|
|
|
|
output.append(Memory{}.type("ROM").size(size - 0x100000).content("Data").text());
|
|
|
|
|
} else if(board(0) == "EXSPC7110" && size == 0x700000) {
|
|
|
|
|
//Tengai Maykou Zero (fan translation)
|
|
|
|
|
output.append(Memory{}.type("ROM").size(0x100000).content("Program").text());
|
|
|
|
|
output.append(Memory{}.type("ROM").size(0x500000).content("Data").text());
|
|
|
|
|
output.append(Memory{}.type("ROM").size(0x100000).content("Expansion").text());
|
|
|
|
|
} else {
|
|
|
|
|
output.append(Memory{}.type("ROM").size(size).content("Program").text());
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(auto size = ramSize()) {
|
2018-04-15 05:49:53 +00:00
|
|
|
|
output.append(Memory{}.type("RAM").size(size).content("Save").text());
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(auto size = expansionRamSize()) {
|
2018-04-15 05:49:53 +00:00
|
|
|
|
output.append(Memory{}.type("RAM").size(size).content("Save").text());
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
if(0) {
|
|
|
|
|
} else if(board(0) == "ARM") {
|
2018-04-08 23:50:42 +00:00
|
|
|
|
output.append(Memory{}.type("ROM").size(0x20000).content("Program").manufacturer("SETA").architecture("ARM6").identifier(firmwareARM()).text());
|
|
|
|
|
output.append(Memory{}.type("ROM").size( 0x8000).content("Data" ).manufacturer("SETA").architecture("ARM6").identifier(firmwareARM()).text());
|
2018-04-15 05:49:53 +00:00
|
|
|
|
output.append(Memory{}.type("RAM").size( 0x4000).content("Data" ).manufacturer("SETA").architecture("ARM6").identifier(firmwareARM()).isVolatile().text());
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
output.append(Oscillator{}.frequency(21'440'000).text());
|
|
|
|
|
} else if(board(0) == "BS" && board(1) == "MCC") {
|
2018-04-15 05:49:53 +00:00
|
|
|
|
output.append(Memory{}.type("RAM").size(0x80000).content("Download").text());
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
} else if(board(0) == "EXNEC") {
|
|
|
|
|
output.append(Memory{}.type("ROM").size(0xc000).content("Program").manufacturer("NEC").architecture("uPD96050").identifier(firmwareEXNEC()).text());
|
|
|
|
|
output.append(Memory{}.type("ROM").size(0x1000).content("Data" ).manufacturer("NEC").architecture("uPD96050").identifier(firmwareEXNEC()).text());
|
|
|
|
|
output.append(Memory{}.type("RAM").size(0x1000).content("Data" ).manufacturer("NEC").architecture("uPD96050").identifier(firmwareEXNEC()).text());
|
|
|
|
|
output.append(Oscillator{}.frequency(firmwareEXNEC() == "ST010" ? 11'000'000 : 15'000'000).text());
|
|
|
|
|
} else if(board(0) == "GB") {
|
|
|
|
|
output.append(Memory{}.type("ROM").size(0x100).content("Boot").manufacturer("Nintendo").architecture("LR35902").identifier(firmwareGB()).text());
|
|
|
|
|
if(firmwareGB() == "SGB2")
|
|
|
|
|
output.append(Oscillator{}.frequency(20'971'520).text());
|
|
|
|
|
} else if(board(0) == "GSU") {
|
|
|
|
|
//todo: MARIO CHIP 1 uses CPU oscillator
|
|
|
|
|
output.append(Oscillator{}.frequency(21'440'000).text());
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
} else if(board(0) == "HITACHI") {
|
2018-04-08 23:50:42 +00:00
|
|
|
|
output.append(Memory{}.type("ROM").size(0xc00).content("Data").manufacturer("Hitachi").architecture("HG51BS169").identifier(firmwareHITACHI()).text());
|
2018-04-15 05:49:53 +00:00
|
|
|
|
output.append(Memory{}.type("RAM").size(0xc00).content("Data").manufacturer("Hitachi").architecture("HG51BS169").identifier(firmwareHITACHI()).isVolatile().text());
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
output.append(Oscillator{}.frequency(20'000'000).text());
|
|
|
|
|
} else if(board(0) == "NEC") {
|
2018-04-08 23:50:42 +00:00
|
|
|
|
output.append(Memory{}.type("ROM").size(0x1800).content("Program").manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).text());
|
|
|
|
|
output.append(Memory{}.type("ROM").size( 0x800).content("Data" ).manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).text());
|
2018-04-15 05:49:53 +00:00
|
|
|
|
output.append(Memory{}.type("RAM").size( 0x200).content("Data" ).manufacturer("NEC").architecture("uPD7725").identifier(firmwareNEC()).isVolatile().text());
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
output.append(Oscillator{}.frequency(7'600'000).text());
|
Update to v106r42 release.
byuu says:
Changelog:
- emulator: added `Thread::setHandle(cothread_t)`
- icarus: added special heuristics support for the Tengai Maykou Zero
fan translation
- board identifier is: EXSPC7110-RAM-EPSONRTC (match on SPC7110 +
ROM size=56mbit)
- board ROM contents are: 8mbit program, 40mbit data, 8mbit
expansion (sizes are fixed)
- bsnes: show messages on game load, unload, and reset
- bsnes: added support for BS Memory and Sufami Turbo games
- bsnes: added support for region selection (Auto [default], NTSC,
PAL)
- bsnes: correct presentation window size from 223/239 to 224/240
- bsnes: add SA-1 internal RAM on cartridges with BS Memory slot
- bsnes: fixed recovery state to store inside .bsz archive
- bsnes: added support for custom manifests in both game pak and game
ROM modes
- bsnes: added icarus game database support (manifest → database →
heuristics)
- bsnes: added flexible SuperFX overclocking
- bsnes: added IPS and BPS soft-patching support to all ROM types
(sfc,smc,gb,gbc,bs,st)
- can load patches inside of ZIP archives (matches first “.ips” or
“.bps” file)
- bsnes/ppu: cache interlace/overscan/vdisp (277 → 291fps with fast
PPU)
- hiro/Windows: faster painting of Label widget on expose
- hiro/Windows: immediately apply LineEdit::setBackgroundColor changes
- hiro/Qt: inherit Window backgroundColor when one is not assigned to
Label
Errata:
- sfc/ppu-fast: remove `renderMode7Hires()` function (the body isn't in
the codebase)
- bsnes: advanced note label should probably use a lighter text color
and/or smaller font size instead of italics
I didn't test the soft-patching at all, as I don't have any patches on
my dev box. If anyone wants to test, that'd be great. The Tengai Makyou
Zero fan translation would be a great test case.
2018-06-26 03:17:26 +00:00
|
|
|
|
} else if(board(0) == "SA1" || board(1) == "SA1") { //SA1-* or BS-SA1-*
|
2018-04-15 05:49:53 +00:00
|
|
|
|
output.append(Memory{}.type("RAM").size(0x800).content("Internal").isVolatile().text());
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-07-02 01:55:42 +00:00
|
|
|
|
if(board.right() == "EPSONRTC") {
|
|
|
|
|
output.append(Memory{}.type("RTC").size(0x10).content("Time").manufacturer("Epson").text());
|
|
|
|
|
} else if(board.right() == "SHARPRTC") {
|
|
|
|
|
output.append(Memory{}.type("RTC").size(0x10).content("Time").manufacturer("Sharp").text());
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
return output;
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::region() const -> string {
|
|
|
|
|
string region;
|
|
|
|
|
|
|
|
|
|
char A = data[headerAddress + 0x02]; //game type
|
|
|
|
|
char B = data[headerAddress + 0x03]; //game code
|
|
|
|
|
char C = data[headerAddress + 0x04]; //game code
|
|
|
|
|
char D = data[headerAddress + 0x05]; //region code (new; sometimes ambiguous)
|
|
|
|
|
auto E = data[headerAddress + 0x29]; //region code (old)
|
|
|
|
|
|
|
|
|
|
auto valid = [](char n) { return (n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z'); };
|
|
|
|
|
if(data[headerAddress + 0x2a] == 0x33 && valid(A) && valid(B) & valid(C) & valid(D)) {
|
|
|
|
|
string code{A, B, C, D};
|
|
|
|
|
if(D == 'B') region = {"SNS-", code, "-BRA"};
|
|
|
|
|
if(D == 'C') region = {"SNSN-", code, "-ROC"};
|
|
|
|
|
if(D == 'D') region = {"SNSP-", code, "-NOE"};
|
|
|
|
|
if(D == 'E') region = {"SNS-", code, "-USA"};
|
|
|
|
|
if(D == 'F') region = {"SNSP-", code, "-FRA"};
|
|
|
|
|
if(D == 'H') region = {"SNSP-", code, "-HOL"};
|
|
|
|
|
if(D == 'I') region = {"SNSP-", code, "-ITA"};
|
|
|
|
|
if(D == 'J') region = {"SHVC-", code, "-JPN"};
|
|
|
|
|
if(D == 'K') region = {"SNSN-", code, "-KOR"};
|
|
|
|
|
if(D == 'N') region = {"SNS-", code, "-CAN"};
|
|
|
|
|
if(D == 'P') region = {"SNSP-", code, "-EUR"};
|
|
|
|
|
if(D == 'S') region = {"SNSP-", code, "-ESP"};
|
|
|
|
|
if(D == 'U') region = {"SNSP-", code, "-AUS"};
|
|
|
|
|
if(D == 'W') region = {"SNSP-", code, "-SCN"};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!region) {
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
if(E == 0x00) region = {"JPN"};
|
|
|
|
|
if(E == 0x01) region = {"USA"};
|
|
|
|
|
if(E == 0x02) region = {"EUR"};
|
|
|
|
|
if(E == 0x03) region = {"SCN"};
|
|
|
|
|
if(E == 0x06) region = {"FRA"};
|
|
|
|
|
if(E == 0x07) region = {"HOL"};
|
|
|
|
|
if(E == 0x08) region = {"ESP"};
|
|
|
|
|
if(E == 0x09) region = {"NOE"};
|
|
|
|
|
if(E == 0x0a) region = {"ITA"};
|
|
|
|
|
if(E == 0x0b) region = {"ROC"};
|
|
|
|
|
if(E == 0x0d) region = {"KOR"};
|
|
|
|
|
if(E == 0x0f) region = {"CAN"};
|
|
|
|
|
if(E == 0x10) region = {"BRA"};
|
|
|
|
|
if(E == 0x11) region = {"AUS"};
|
2018-02-05 09:58:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return region ? region : "NTSC";
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::revision() const -> string {
|
|
|
|
|
string revision;
|
|
|
|
|
|
|
|
|
|
char A = data[headerAddress + 0x02]; //game type
|
|
|
|
|
char B = data[headerAddress + 0x03]; //game code
|
|
|
|
|
char C = data[headerAddress + 0x04]; //game code
|
|
|
|
|
char D = data[headerAddress + 0x05]; //region code (new; sometimes ambiguous)
|
|
|
|
|
auto E = data[headerAddress + 0x29]; //region code (old)
|
|
|
|
|
uint F = data[headerAddress + 0x2b]; //revision code
|
|
|
|
|
|
|
|
|
|
auto valid = [](char n) { return (n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z'); };
|
|
|
|
|
if(data[headerAddress + 0x2a] == 0x33 && valid(A) && valid(B) & valid(C) & valid(D)) {
|
|
|
|
|
string code{A, B, C, D};
|
|
|
|
|
if(D == 'B') revision = {"SNS-", code, "-", F};
|
|
|
|
|
if(D == 'C') revision = {"SNSN-", code, "-", F};
|
|
|
|
|
if(D == 'D') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
if(D == 'E') revision = {"SNS-", code, "-", F};
|
|
|
|
|
if(D == 'F') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
if(D == 'H') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
if(D == 'I') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
if(D == 'J') revision = {"SHVC-", code, "-", F};
|
|
|
|
|
if(D == 'K') revision = {"SNSN-", code, "-", F};
|
|
|
|
|
if(D == 'N') revision = {"SNS-", code, "-", F};
|
|
|
|
|
if(D == 'P') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
if(D == 'S') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
if(D == 'U') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
if(D == 'W') revision = {"SNSP-", code, "-", F};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(!revision) {
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
revision = {"1.", F};
|
2018-02-05 09:58:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return revision ? revision : string{"1.", F};
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
//format: [slot]-[coprocessor]-[mapper]-[ram]-[rtc]
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::board() const -> string {
|
|
|
|
|
string board;
|
|
|
|
|
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
auto mapMode = data[headerAddress + 0x25];
|
|
|
|
|
auto cartridgeTypeLo = data[headerAddress + 0x26] & 15;
|
|
|
|
|
auto cartridgeTypeHi = data[headerAddress + 0x26] >> 4;
|
|
|
|
|
auto cartridgeSubType = data[headerAddress + 0x0f];
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
string mode;
|
2018-02-08 10:32:46 +00:00
|
|
|
|
if(mapMode == 0x20 || mapMode == 0x30) mode = "LOROM-";
|
|
|
|
|
if(mapMode == 0x21 || mapMode == 0x31) mode = "HIROM-";
|
|
|
|
|
if(mapMode == 0x22 || mapMode == 0x32) mode = "SDD1-";
|
|
|
|
|
if(mapMode == 0x23 || mapMode == 0x33) mode = "SA1-";
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
if(mapMode == 0x25 || mapMode == 0x35) mode = "EXHIROM-";
|
2018-02-08 10:32:46 +00:00
|
|
|
|
if(mapMode == 0x2a || mapMode == 0x3a) mode = "SPC7110-";
|
|
|
|
|
|
|
|
|
|
//many games will store an extra title character, overwriting the map mode
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
//further, ExLoROM mode is unofficial, and lacks a mapping mode value
|
2018-02-08 10:32:46 +00:00
|
|
|
|
if(!mode) {
|
|
|
|
|
if(headerAddress == 0x7fb0) mode = "LOROM-";
|
|
|
|
|
if(headerAddress == 0xffb0) mode = "HIROM-";
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
if(headerAddress == 0x407fb0) mode = "EXLOROM-";
|
|
|
|
|
if(headerAddress == 0x40ffb0) mode = "EXHIROM-";
|
2018-02-08 10:32:46 +00:00
|
|
|
|
}
|
2018-02-05 09:58:02 +00:00
|
|
|
|
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
bool epsonRTC = false;
|
|
|
|
|
bool sharpRTC = false;
|
|
|
|
|
|
Update to v106r05 release.
byuu says:
Changelog:
- Super Famicom: added remaining generic board types
- icarus: improved Super Famicom heuristics
- icarus: reworked BS Memory heuristics
- icarus: reworked Sufami Turbo heuristics
Notes: this is really complicated, and is going to take a long time to
work 100% smoothly again.
Starting off, I am trying to get rid of the weird edge case zero-byte
SRAM mapping for the Cx4. It has the RAM region present, but returns
logic low (0x00) instead of open bus, when SRAM isn't present. I started
by making it `map=ram` instead of `ram/map`, which is gross, and then it ended
up detecing the map tag ending in RAM and pulling the Cx4 data RAM into that
slot. Ugh. The preservation board mapping is still as it was before and will
need to be updated once I get the syntax down.
The BS Memory and Sufami Turbo moving to the new `game/memory`
ending means I can't use the SuperFamicom::Cartridge::loadMemory
function that looks at the old-style rom/ram tags. Because I didn't
write more code, the result is those sub-carts won't load now.
The old heuristics were short-circuiting on SA1 before bothering with
BS-X slots, so that's why SD Gundam G-Next wasn't asking for a data
pack. The problem is, I don't know where the BS-X pack maps to on this
cartridge. It's at c0-ef on the other BS-X slotted cartridges, but
that's mapped to the SA1 on regular SA1 cartridges, so ... for now, it's
not actually mapped in.
I'm still struggling with naming conventions on all these boards. I'll
make a public post about that, though.
2018-02-10 21:45:44 +00:00
|
|
|
|
if(serial() == "A9PJ") {
|
|
|
|
|
//Sufami Turbo (JPN)
|
|
|
|
|
board.append("ST-", mode);
|
2018-12-22 10:28:15 +00:00
|
|
|
|
} else if(serial() == "ZBSJ") {
|
Update to v106r05 release.
byuu says:
Changelog:
- Super Famicom: added remaining generic board types
- icarus: improved Super Famicom heuristics
- icarus: reworked BS Memory heuristics
- icarus: reworked Sufami Turbo heuristics
Notes: this is really complicated, and is going to take a long time to
work 100% smoothly again.
Starting off, I am trying to get rid of the weird edge case zero-byte
SRAM mapping for the Cx4. It has the RAM region present, but returns
logic low (0x00) instead of open bus, when SRAM isn't present. I started
by making it `map=ram` instead of `ram/map`, which is gross, and then it ended
up detecing the map tag ending in RAM and pulling the Cx4 data RAM into that
slot. Ugh. The preservation board mapping is still as it was before and will
need to be updated once I get the syntax down.
The BS Memory and Sufami Turbo moving to the new `game/memory`
ending means I can't use the SuperFamicom::Cartridge::loadMemory
function that looks at the old-style rom/ram tags. Because I didn't
write more code, the result is those sub-carts won't load now.
The old heuristics were short-circuiting on SA1 before bothering with
BS-X slots, so that's why SD Gundam G-Next wasn't asking for a data
pack. The problem is, I don't know where the BS-X pack maps to on this
cartridge. It's at c0-ef on the other BS-X slotted cartridges, but
that's mapped to the SA1 on regular SA1 cartridges, so ... for now, it's
not actually mapped in.
I'm still struggling with naming conventions on all these boards. I'll
make a public post about that, though.
2018-02-10 21:45:44 +00:00
|
|
|
|
//BS-X: Sore wa Namae o Nusumareta Machi no Monogatari (JPN)
|
2018-02-16 01:07:49 +00:00
|
|
|
|
board.append("BS-MCC-");
|
|
|
|
|
} else if(serial() == "042J") {
|
|
|
|
|
//Super Game Boy 2
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
board.append("GB-", mode);
|
|
|
|
|
} else if(serial().match("Z??J")) {
|
2018-02-05 09:58:02 +00:00
|
|
|
|
board.append("BS-", mode);
|
|
|
|
|
} else if(cartridgeTypeLo >= 0x3) {
|
2018-02-16 01:07:49 +00:00
|
|
|
|
if(cartridgeTypeHi == 0x0) board.append("NEC-", mode);
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
if(cartridgeTypeHi == 0x1) board.append("GSU-");
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(cartridgeTypeHi == 0x2) board.append("OBC1-", mode);
|
|
|
|
|
if(cartridgeTypeHi == 0x3) board.append("SA1-");
|
|
|
|
|
if(cartridgeTypeHi == 0x4) board.append("SDD1-");
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
if(cartridgeTypeHi == 0x5) board.append(mode), sharpRTC = true;
|
|
|
|
|
if(cartridgeTypeHi == 0xe && cartridgeTypeLo == 0x3) board.append("GB-", mode);
|
|
|
|
|
if(cartridgeTypeHi == 0xf && cartridgeTypeLo == 0x5 && cartridgeSubType == 0x00) board.append("SPC7110-");
|
|
|
|
|
if(cartridgeTypeHi == 0xf && cartridgeTypeLo == 0x9 && cartridgeSubType == 0x00) board.append("SPC7110-"), epsonRTC = true;
|
|
|
|
|
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x01) board.append("EXNEC-", mode);
|
|
|
|
|
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x02) board.append("ARM-", mode);
|
|
|
|
|
if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x10) board.append("HITACHI-", mode);
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
Update to v106r05 release.
byuu says:
Changelog:
- Super Famicom: added remaining generic board types
- icarus: improved Super Famicom heuristics
- icarus: reworked BS Memory heuristics
- icarus: reworked Sufami Turbo heuristics
Notes: this is really complicated, and is going to take a long time to
work 100% smoothly again.
Starting off, I am trying to get rid of the weird edge case zero-byte
SRAM mapping for the Cx4. It has the RAM region present, but returns
logic low (0x00) instead of open bus, when SRAM isn't present. I started
by making it `map=ram` instead of `ram/map`, which is gross, and then it ended
up detecing the map tag ending in RAM and pulling the Cx4 data RAM into that
slot. Ugh. The preservation board mapping is still as it was before and will
need to be updated once I get the syntax down.
The BS Memory and Sufami Turbo moving to the new `game/memory`
ending means I can't use the SuperFamicom::Cartridge::loadMemory
function that looks at the old-style rom/ram tags. Because I didn't
write more code, the result is those sub-carts won't load now.
The old heuristics were short-circuiting on SA1 before bothering with
BS-X slots, so that's why SD Gundam G-Next wasn't asking for a data
pack. The problem is, I don't know where the BS-X pack maps to on this
cartridge. It's at c0-ef on the other BS-X slotted cartridges, but
that's mapped to the SA1 on regular SA1 cartridges, so ... for now, it's
not actually mapped in.
I'm still struggling with naming conventions on all these boards. I'll
make a public post about that, though.
2018-02-10 21:45:44 +00:00
|
|
|
|
if(!board) board.append(mode);
|
|
|
|
|
|
Update to v106r27 release.
byuu says:
Changelog:
- nall: merged Path::config() and Path::local() to Path::userData()
- ~/.local/share or %appdata or ~/Library/ApplicationSupport
- higan, bsnes: render main window icon onto viewport instead of
canvas
- should hopefully fix a brief flickering glitch that appears on
Windows
- icarus: improved Super Famicom heuristics for Starfox / Starwing RAM
- ruby/Direct3D: handle viewport size changes in lock() instead of
output()
- fixes icon disappearing when resizing main window
- hiro/Windows: remove WS_DISABLED from StatusBar to fix window
resize grip
- this is experimental: I initially used WS_DISABLED to work
around a focus bug
- yet trying things now, said bug seems(?) to have gone away at
some point ...
- bsnes: added advanced settings panel with real-time driver change
support
I'd like feedback on the real-time driver change, for possible
consideration into adding this to higan as well.
Some drivers just crash, it's a fact of life. The ASIO driver in
particular likes to crash inside the driver itself, without any error
messages ever returned to try and catch.
When you try to change a driver with a game loaded, it gives you a scary
warning, asking if you want to proceed.
When you change a driver, it sets a crash flag, and if the driver
crashes while initializing, then restarting bsnes will disable the
errant driver. If it fails in a recoverable way, then it sets the driver
to “None” and warns you that the driver cannot be used.
What I'm thinking of further adding is to call emulator→save() to
write out the save RAM contents beforehand (although the periodic
auto-saving RAM will handle this anyway when it's enabled), and possibly
it might be wise to capture an emulator save state, although those can't
be taken without advancing the emulator to the next frame, so that might
not be a good idea.
I'm also thinking we should show some kind of message somewhere when a
driver is set to “None”. The status bar can be hidden, so perhaps on the
title bar? Or maybe just a warning on startup that a driver is set to
“None”.
2018-05-25 08:02:38 +00:00
|
|
|
|
if(ramSize() || expansionRamSize()) board.append("RAM-");
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
if(epsonRTC) board.append("EPSONRTC-");
|
|
|
|
|
if(sharpRTC) board.append("SHARPRTC-");
|
2018-02-16 01:07:49 +00:00
|
|
|
|
|
|
|
|
|
board.trimRight("-", 1L);
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-07-25 12:24:03 +00:00
|
|
|
|
if(board.beginsWith( "LOROM-RAM") && romSize() <= 0x200000) board.append("#A");
|
|
|
|
|
if(board.beginsWith("NEC-LOROM-RAM") && romSize() <= 0x100000) board.append("#A");
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
Update to v106r42 release.
byuu says:
Changelog:
- emulator: added `Thread::setHandle(cothread_t)`
- icarus: added special heuristics support for the Tengai Maykou Zero
fan translation
- board identifier is: EXSPC7110-RAM-EPSONRTC (match on SPC7110 +
ROM size=56mbit)
- board ROM contents are: 8mbit program, 40mbit data, 8mbit
expansion (sizes are fixed)
- bsnes: show messages on game load, unload, and reset
- bsnes: added support for BS Memory and Sufami Turbo games
- bsnes: added support for region selection (Auto [default], NTSC,
PAL)
- bsnes: correct presentation window size from 223/239 to 224/240
- bsnes: add SA-1 internal RAM on cartridges with BS Memory slot
- bsnes: fixed recovery state to store inside .bsz archive
- bsnes: added support for custom manifests in both game pak and game
ROM modes
- bsnes: added icarus game database support (manifest → database →
heuristics)
- bsnes: added flexible SuperFX overclocking
- bsnes: added IPS and BPS soft-patching support to all ROM types
(sfc,smc,gb,gbc,bs,st)
- can load patches inside of ZIP archives (matches first “.ips” or
“.bps” file)
- bsnes/ppu: cache interlace/overscan/vdisp (277 → 291fps with fast
PPU)
- hiro/Windows: faster painting of Label widget on expose
- hiro/Windows: immediately apply LineEdit::setBackgroundColor changes
- hiro/Qt: inherit Window backgroundColor when one is not assigned to
Label
Errata:
- sfc/ppu-fast: remove `renderMode7Hires()` function (the body isn't in
the codebase)
- bsnes: advanced note label should probably use a lighter text color
and/or smaller font size instead of italics
I didn't test the soft-patching at all, as I don't have any patches on
my dev box. If anyone wants to test, that'd be great. The Tengai Makyou
Zero fan translation would be a great test case.
2018-06-26 03:17:26 +00:00
|
|
|
|
//Tengai Makyou Zero (fan translation)
|
|
|
|
|
if(board.beginsWith("SPC7110-") && data.size() == 0x700000) board.prepend("EX");
|
|
|
|
|
|
2018-02-16 01:07:49 +00:00
|
|
|
|
return board;
|
2018-02-05 09:58:02 +00:00
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
Update to v106r59 release.
byuu says:
Changelog:
- fixed bug in Emulator::Game::Memory::operator bool()
- nall: renamed view<string> back to `string_view`
- nall:: implemented `array_view`
- Game Boy: split cartridge-specific input mappings (rumble,
accelerometer) to their own separate ports
- Game Boy: fixed MBC7 accelerometer x-axis
- icarus: Game Boy, Super Famicom, Mega Drive cores output internal
header game titles to heuristics manifests
- higan, icarus, hiro/gtk: improve viewport geometry configuration;
fixed higan crashing bug with XShm driver
- higan: connect Video::poll(),update() functionality
- hiro, ruby: several compilation / bugfixes, should get the macOS
port compiling again, hopefully [Sintendo]
- ruby/video/xshm: fix crashing bug on window resize
- a bit hacky; it's throwing BadAccess Xlib warnings, but they're
not fatal, so I am catching and ignoring them
- bsnes: removed Application::Windows::onModalChange hook that's no
longer needed [Screwtape]
2018-08-26 06:49:54 +00:00
|
|
|
|
auto SuperFamicom::title() const -> string {
|
2018-02-05 09:58:02 +00:00
|
|
|
|
string label;
|
2018-02-16 01:07:49 +00:00
|
|
|
|
|
|
|
|
|
for(uint n = 0; n < 0x15; n++) {
|
|
|
|
|
auto x = data[headerAddress + 0x10 + n];
|
|
|
|
|
auto y = n == 0x14 ? 0 : data[headerAddress + 0x11 + n];
|
|
|
|
|
|
|
|
|
|
//null terminator (padding)
|
|
|
|
|
if(x == 0x00 || x == 0xff);
|
|
|
|
|
|
|
|
|
|
//ASCII
|
|
|
|
|
else if(x >= 0x20 && x <= 0x7e) label.append((char)x);
|
|
|
|
|
|
|
|
|
|
//Shift-JIS (half-width katakana)
|
|
|
|
|
else if(x == 0xa1) label.append("。");
|
|
|
|
|
else if(x == 0xa2) label.append("「");
|
|
|
|
|
else if(x == 0xa3) label.append("」");
|
|
|
|
|
else if(x == 0xa4) label.append("、");
|
|
|
|
|
else if(x == 0xa5) label.append("・");
|
|
|
|
|
else if(x == 0xa6) label.append("ヲ");
|
|
|
|
|
else if(x == 0xa7) label.append("ァ");
|
|
|
|
|
else if(x == 0xa8) label.append("ィ");
|
|
|
|
|
else if(x == 0xa9) label.append("ゥ");
|
|
|
|
|
else if(x == 0xaa) label.append("ェ");
|
|
|
|
|
else if(x == 0xab) label.append("ォ");
|
|
|
|
|
else if(x == 0xac) label.append("ャ");
|
|
|
|
|
else if(x == 0xad) label.append("ュ");
|
|
|
|
|
else if(x == 0xae) label.append("ョ");
|
|
|
|
|
else if(x == 0xaf) label.append("ッ");
|
|
|
|
|
else if(x == 0xb0) label.append("ー");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xb1) label.append( "ア");
|
|
|
|
|
else if(x == 0xb2) label.append( "イ");
|
|
|
|
|
else if(x == 0xb3) label.append(y == 0xde ? "ヴ" : "ウ");
|
|
|
|
|
else if(x == 0xb4) label.append( "エ");
|
|
|
|
|
else if(x == 0xb5) label.append( "オ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xb6) label.append(y == 0xde ? "ガ" : "カ");
|
|
|
|
|
else if(x == 0xb7) label.append(y == 0xde ? "ギ" : "キ");
|
|
|
|
|
else if(x == 0xb8) label.append(y == 0xde ? "グ" : "ク");
|
|
|
|
|
else if(x == 0xb9) label.append(y == 0xde ? "ゲ" : "ケ");
|
|
|
|
|
else if(x == 0xba) label.append(y == 0xde ? "ゴ" : "コ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xbb) label.append(y == 0xde ? "ザ" : "サ");
|
|
|
|
|
else if(x == 0xbc) label.append(y == 0xde ? "ジ" : "シ");
|
|
|
|
|
else if(x == 0xbd) label.append(y == 0xde ? "ズ" : "ス");
|
|
|
|
|
else if(x == 0xbe) label.append(y == 0xde ? "ゼ" : "セ");
|
|
|
|
|
else if(x == 0xbf) label.append(y == 0xde ? "ゾ" : "ソ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xc0) label.append(y == 0xde ? "ダ" : "タ");
|
|
|
|
|
else if(x == 0xc1) label.append(y == 0xde ? "ヂ" : "チ");
|
|
|
|
|
else if(x == 0xc2) label.append(y == 0xde ? "ヅ" : "ツ");
|
|
|
|
|
else if(x == 0xc3) label.append(y == 0xde ? "デ" : "テ");
|
|
|
|
|
else if(x == 0xc4) label.append(y == 0xde ? "ド" : "ト");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xc5) label.append("ナ");
|
|
|
|
|
else if(x == 0xc6) label.append("ニ");
|
|
|
|
|
else if(x == 0xc7) label.append("ヌ");
|
|
|
|
|
else if(x == 0xc8) label.append("ネ");
|
|
|
|
|
else if(x == 0xc9) label.append("ノ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xca) label.append(y == 0xdf ? "パ" : y == 0xde ? "バ" : "ハ");
|
|
|
|
|
else if(x == 0xcb) label.append(y == 0xdf ? "ピ" : y == 0xde ? "ビ" : "ヒ");
|
|
|
|
|
else if(x == 0xcc) label.append(y == 0xdf ? "プ" : y == 0xde ? "ブ" : "フ");
|
|
|
|
|
else if(x == 0xcd) label.append(y == 0xdf ? "ペ" : y == 0xde ? "ベ" : "ヘ");
|
|
|
|
|
else if(x == 0xce) label.append(y == 0xdf ? "ポ" : y == 0xde ? "ボ" : "ホ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xcf) label.append("マ");
|
|
|
|
|
else if(x == 0xd0) label.append("ミ");
|
|
|
|
|
else if(x == 0xd1) label.append("ム");
|
|
|
|
|
else if(x == 0xd2) label.append("メ");
|
|
|
|
|
else if(x == 0xd3) label.append("モ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xd4) label.append("ヤ");
|
|
|
|
|
else if(x == 0xd5) label.append("ユ");
|
|
|
|
|
else if(x == 0xd6) label.append("ヨ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xd7) label.append("ラ");
|
|
|
|
|
else if(x == 0xd8) label.append("リ");
|
|
|
|
|
else if(x == 0xd9) label.append("ル");
|
|
|
|
|
else if(x == 0xda) label.append("レ");
|
|
|
|
|
else if(x == 0xdb) label.append("ロ");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xdc) label.append("ワ");
|
|
|
|
|
else if(x == 0xdd) label.append("ン");
|
|
|
|
|
|
|
|
|
|
else if(x == 0xde) label.append("\xef\xbe\x9e"); //dakuten
|
|
|
|
|
else if(x == 0xdf) label.append("\xef\xbe\x9f"); //handakuten
|
|
|
|
|
|
|
|
|
|
//unknown
|
2018-02-05 09:58:02 +00:00
|
|
|
|
else label.append("?");
|
2018-02-16 01:07:49 +00:00
|
|
|
|
|
|
|
|
|
//(han)dakuten skip
|
|
|
|
|
if(y == 0xde && x == 0xb3) n++;
|
|
|
|
|
if(y == 0xde && x >= 0xb6 && x <= 0xc4) n++;
|
|
|
|
|
if(y == 0xde && x >= 0xca && x <= 0xce) n++;
|
|
|
|
|
if(y == 0xdf && x >= 0xca && y <= 0xce) n++;
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
return label.strip();
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::serial() const -> string {
|
|
|
|
|
char A = data[headerAddress + 0x02]; //game type
|
|
|
|
|
char B = data[headerAddress + 0x03]; //game code
|
|
|
|
|
char C = data[headerAddress + 0x04]; //game code
|
|
|
|
|
char D = data[headerAddress + 0x05]; //region code (new; sometimes ambiguous)
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto valid = [](char n) { return (n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z'); };
|
|
|
|
|
if(data[headerAddress + 0x2a] == 0x33 && valid(A) && valid(B) & valid(C) & valid(D)) {
|
|
|
|
|
return {A, B, C, D};
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
return "";
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
Update to v106r05 release.
byuu says:
Changelog:
- Super Famicom: added remaining generic board types
- icarus: improved Super Famicom heuristics
- icarus: reworked BS Memory heuristics
- icarus: reworked Sufami Turbo heuristics
Notes: this is really complicated, and is going to take a long time to
work 100% smoothly again.
Starting off, I am trying to get rid of the weird edge case zero-byte
SRAM mapping for the Cx4. It has the RAM region present, but returns
logic low (0x00) instead of open bus, when SRAM isn't present. I started
by making it `map=ram` instead of `ram/map`, which is gross, and then it ended
up detecing the map tag ending in RAM and pulling the Cx4 data RAM into that
slot. Ugh. The preservation board mapping is still as it was before and will
need to be updated once I get the syntax down.
The BS Memory and Sufami Turbo moving to the new `game/memory`
ending means I can't use the SuperFamicom::Cartridge::loadMemory
function that looks at the old-style rom/ram tags. Because I didn't
write more code, the result is those sub-carts won't load now.
The old heuristics were short-circuiting on SA1 before bothering with
BS-X slots, so that's why SD Gundam G-Next wasn't asking for a data
pack. The problem is, I don't know where the BS-X pack maps to on this
cartridge. It's at c0-ef on the other BS-X slotted cartridges, but
that's mapped to the SA1 on regular SA1 cartridges, so ... for now, it's
not actually mapped in.
I'm still struggling with naming conventions on all these boards. I'll
make a public post about that, though.
2018-02-10 21:45:44 +00:00
|
|
|
|
auto SuperFamicom::romSize() const -> uint {
|
|
|
|
|
//subtract appended firmware size, if firmware is present
|
2018-02-16 01:07:49 +00:00
|
|
|
|
if((size() & 0x7fff) == 0x100) return size() - 0x100;
|
|
|
|
|
if((size() & 0x7fff) == 0xc00) return size() - 0xc00;
|
|
|
|
|
if((size() & 0x7fff) == 0x2000) return size() - 0x2000;
|
|
|
|
|
if((size() & 0xffff) == 0xd000) return size() - 0xd000;
|
|
|
|
|
if((size() & 0x3ffff) == 0x28000) return size() - 0x28000;
|
|
|
|
|
return size();
|
Update to v106r05 release.
byuu says:
Changelog:
- Super Famicom: added remaining generic board types
- icarus: improved Super Famicom heuristics
- icarus: reworked BS Memory heuristics
- icarus: reworked Sufami Turbo heuristics
Notes: this is really complicated, and is going to take a long time to
work 100% smoothly again.
Starting off, I am trying to get rid of the weird edge case zero-byte
SRAM mapping for the Cx4. It has the RAM region present, but returns
logic low (0x00) instead of open bus, when SRAM isn't present. I started
by making it `map=ram` instead of `ram/map`, which is gross, and then it ended
up detecing the map tag ending in RAM and pulling the Cx4 data RAM into that
slot. Ugh. The preservation board mapping is still as it was before and will
need to be updated once I get the syntax down.
The BS Memory and Sufami Turbo moving to the new `game/memory`
ending means I can't use the SuperFamicom::Cartridge::loadMemory
function that looks at the old-style rom/ram tags. Because I didn't
write more code, the result is those sub-carts won't load now.
The old heuristics were short-circuiting on SA1 before bothering with
BS-X slots, so that's why SD Gundam G-Next wasn't asking for a data
pack. The problem is, I don't know where the BS-X pack maps to on this
cartridge. It's at c0-ef on the other BS-X slotted cartridges, but
that's mapped to the SA1 on regular SA1 cartridges, so ... for now, it's
not actually mapped in.
I'm still struggling with naming conventions on all these boards. I'll
make a public post about that, though.
2018-02-10 21:45:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-05-20 04:39:29 +00:00
|
|
|
|
auto SuperFamicom::programRomSize() const -> uint {
|
|
|
|
|
if(board().beginsWith("SPC7110-")) return 0x100000;
|
2018-07-02 01:55:42 +00:00
|
|
|
|
if(board().beginsWith("EXSPC7110-")) return 0x100000;
|
2018-05-20 04:39:29 +00:00
|
|
|
|
return romSize();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto SuperFamicom::dataRomSize() const -> uint {
|
|
|
|
|
if(board().beginsWith("SPC7110-")) return romSize() - 0x100000;
|
2018-07-02 01:55:42 +00:00
|
|
|
|
if(board().beginsWith("EXSPC7110-")) return 0x500000;
|
2018-05-20 04:39:29 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto SuperFamicom::expansionRomSize() const -> uint {
|
2018-07-02 01:55:42 +00:00
|
|
|
|
if(board().beginsWith("EXSPC7110-")) return 0x100000;
|
2018-05-20 04:39:29 +00:00
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto SuperFamicom::firmwareRomSize() const -> uint {
|
|
|
|
|
return size() - romSize();
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::ramSize() const -> uint {
|
|
|
|
|
auto ramSize = data[headerAddress + 0x28] & 7;
|
|
|
|
|
if(ramSize) return 1024 << ramSize;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::expansionRamSize() const -> uint {
|
Update to v106r27 release.
byuu says:
Changelog:
- nall: merged Path::config() and Path::local() to Path::userData()
- ~/.local/share or %appdata or ~/Library/ApplicationSupport
- higan, bsnes: render main window icon onto viewport instead of
canvas
- should hopefully fix a brief flickering glitch that appears on
Windows
- icarus: improved Super Famicom heuristics for Starfox / Starwing RAM
- ruby/Direct3D: handle viewport size changes in lock() instead of
output()
- fixes icon disappearing when resizing main window
- hiro/Windows: remove WS_DISABLED from StatusBar to fix window
resize grip
- this is experimental: I initially used WS_DISABLED to work
around a focus bug
- yet trying things now, said bug seems(?) to have gone away at
some point ...
- bsnes: added advanced settings panel with real-time driver change
support
I'd like feedback on the real-time driver change, for possible
consideration into adding this to higan as well.
Some drivers just crash, it's a fact of life. The ASIO driver in
particular likes to crash inside the driver itself, without any error
messages ever returned to try and catch.
When you try to change a driver with a game loaded, it gives you a scary
warning, asking if you want to proceed.
When you change a driver, it sets a crash flag, and if the driver
crashes while initializing, then restarting bsnes will disable the
errant driver. If it fails in a recoverable way, then it sets the driver
to “None” and warns you that the driver cannot be used.
What I'm thinking of further adding is to call emulator→save() to
write out the save RAM contents beforehand (although the periodic
auto-saving RAM will handle this anyway when it's enabled), and possibly
it might be wise to capture an emulator save state, although those can't
be taken without advancing the emulator to the next frame, so that might
not be a good idea.
I'm also thinking we should show some kind of message somewhere when a
driver is set to “None”. The status bar can be hidden, so perhaps on the
title bar? Or maybe just a warning on startup that a driver is set to
“None”.
2018-05-25 08:02:38 +00:00
|
|
|
|
if(data[headerAddress + 0x2a] == 0x33) {
|
|
|
|
|
auto ramSize = data[headerAddress + 0x0d] & 7;
|
|
|
|
|
if(ramSize) return 1024 << ramSize;
|
|
|
|
|
}
|
|
|
|
|
if((data[headerAddress + 0x26] >> 4) == 1) {
|
|
|
|
|
//GSU: Starfox / Starwing lacks an extended header; but still has expansion RAM
|
|
|
|
|
return 0x8000;
|
|
|
|
|
}
|
2018-02-05 09:58:02 +00:00
|
|
|
|
return 0;
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|
|
|
|
|
|
2018-04-15 05:49:53 +00:00
|
|
|
|
auto SuperFamicom::nonVolatile() const -> bool {
|
2018-02-16 01:07:49 +00:00
|
|
|
|
auto cartridgeTypeLo = data[headerAddress + 0x26] & 15;
|
|
|
|
|
return cartridgeTypeLo == 0x2 || cartridgeTypeLo == 0x5 || cartridgeTypeLo == 0x6;
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
auto SuperFamicom::scoreHeader(uint address) -> uint {
|
2015-08-21 11:29:53 +00:00
|
|
|
|
int score = 0;
|
2018-02-16 01:07:49 +00:00
|
|
|
|
if(size() < address + 0x50) return score;
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
uint8_t mapMode = data[address + 0x25] & ~0x10; //ignore FastROM bit
|
|
|
|
|
uint16_t complement = data[address + 0x2c] << 0 | data[address + 0x2d] << 8;
|
|
|
|
|
uint16_t checksum = data[address + 0x2e] << 0 | data[address + 0x2f] << 8;
|
|
|
|
|
uint16_t resetVector = data[address + 0x4c] << 0 | data[address + 0x4d] << 8;
|
|
|
|
|
if(resetVector < 0x8000) return score; //$00:0000-7fff is never ROM data
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
uint8_t opcode = data[(address & ~0x7fff) | (resetVector & 0x7fff)]; //first instruction executed
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
|
|
|
|
//most likely opcodes
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(opcode == 0x78 //sei
|
|
|
|
|
|| opcode == 0x18 //clc (clc; xce)
|
|
|
|
|
|| opcode == 0x38 //sec (sec; xce)
|
|
|
|
|
|| opcode == 0x9c //stz $nnnn (stz $4200)
|
|
|
|
|
|| opcode == 0x4c //jmp $nnnn
|
|
|
|
|
|| opcode == 0x5c //jml $nnnnnn
|
2015-08-21 11:29:53 +00:00
|
|
|
|
) score += 8;
|
|
|
|
|
|
|
|
|
|
//plausible opcodes
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(opcode == 0xc2 //rep #$nn
|
|
|
|
|
|| opcode == 0xe2 //sep #$nn
|
|
|
|
|
|| opcode == 0xad //lda $nnnn
|
|
|
|
|
|| opcode == 0xae //ldx $nnnn
|
|
|
|
|
|| opcode == 0xac //ldy $nnnn
|
|
|
|
|
|| opcode == 0xaf //lda $nnnnnn
|
|
|
|
|
|| opcode == 0xa9 //lda #$nn
|
|
|
|
|
|| opcode == 0xa2 //ldx #$nn
|
|
|
|
|
|| opcode == 0xa0 //ldy #$nn
|
|
|
|
|
|| opcode == 0x20 //jsr $nnnn
|
|
|
|
|
|| opcode == 0x22 //jsl $nnnnnn
|
2015-08-21 11:29:53 +00:00
|
|
|
|
) score += 4;
|
|
|
|
|
|
|
|
|
|
//implausible opcodes
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(opcode == 0x40 //rti
|
|
|
|
|
|| opcode == 0x60 //rts
|
|
|
|
|
|| opcode == 0x6b //rtl
|
|
|
|
|
|| opcode == 0xcd //cmp $nnnn
|
|
|
|
|
|| opcode == 0xec //cpx $nnnn
|
|
|
|
|
|| opcode == 0xcc //cpy $nnnn
|
2015-08-21 11:29:53 +00:00
|
|
|
|
) score -= 4;
|
|
|
|
|
|
|
|
|
|
//least likely opcodes
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(opcode == 0x00 //brk #$nn
|
|
|
|
|
|| opcode == 0x02 //cop #$nn
|
|
|
|
|
|| opcode == 0xdb //stp
|
|
|
|
|
|| opcode == 0x42 //wdm
|
|
|
|
|
|| opcode == 0xff //sbc $nnnnnn,x
|
2015-08-21 11:29:53 +00:00
|
|
|
|
) score -= 8;
|
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(checksum + complement == 0xffff) score += 4;
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
if(address == 0x7fb0 && mapMode == 0x20) score += 2;
|
|
|
|
|
if(address == 0xffb0 && mapMode == 0x21) score += 2;
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-05 09:58:02 +00:00
|
|
|
|
return max(0, score);
|
|
|
|
|
}
|
2015-08-21 11:29:53 +00:00
|
|
|
|
|
2018-02-16 01:07:49 +00:00
|
|
|
|
auto SuperFamicom::firmwareARM() const -> string {
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
return "ST018";
|
2018-02-16 01:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
auto SuperFamicom::firmwareEXNEC() const -> string {
|
Update to v106r59 release.
byuu says:
Changelog:
- fixed bug in Emulator::Game::Memory::operator bool()
- nall: renamed view<string> back to `string_view`
- nall:: implemented `array_view`
- Game Boy: split cartridge-specific input mappings (rumble,
accelerometer) to their own separate ports
- Game Boy: fixed MBC7 accelerometer x-axis
- icarus: Game Boy, Super Famicom, Mega Drive cores output internal
header game titles to heuristics manifests
- higan, icarus, hiro/gtk: improve viewport geometry configuration;
fixed higan crashing bug with XShm driver
- higan: connect Video::poll(),update() functionality
- hiro, ruby: several compilation / bugfixes, should get the macOS
port compiling again, hopefully [Sintendo]
- ruby/video/xshm: fix crashing bug on window resize
- a bit hacky; it's throwing BadAccess Xlib warnings, but they're
not fatal, so I am catching and ignoring them
- bsnes: removed Application::Windows::onModalChange hook that's no
longer needed [Screwtape]
2018-08-26 06:49:54 +00:00
|
|
|
|
if(title() == "EXHAUST HEAT2") return "ST010";
|
|
|
|
|
if(title() == "F1 ROC II") return "ST010";
|
|
|
|
|
if(title() == "2DAN MORITA SHOUGI") return "ST011";
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
return "ST010";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto SuperFamicom::firmwareGB() const -> string {
|
Update to v106r59 release.
byuu says:
Changelog:
- fixed bug in Emulator::Game::Memory::operator bool()
- nall: renamed view<string> back to `string_view`
- nall:: implemented `array_view`
- Game Boy: split cartridge-specific input mappings (rumble,
accelerometer) to their own separate ports
- Game Boy: fixed MBC7 accelerometer x-axis
- icarus: Game Boy, Super Famicom, Mega Drive cores output internal
header game titles to heuristics manifests
- higan, icarus, hiro/gtk: improve viewport geometry configuration;
fixed higan crashing bug with XShm driver
- higan: connect Video::poll(),update() functionality
- hiro, ruby: several compilation / bugfixes, should get the macOS
port compiling again, hopefully [Sintendo]
- ruby/video/xshm: fix crashing bug on window resize
- a bit hacky; it's throwing BadAccess Xlib warnings, but they're
not fatal, so I am catching and ignoring them
- bsnes: removed Application::Windows::onModalChange hook that's no
longer needed [Screwtape]
2018-08-26 06:49:54 +00:00
|
|
|
|
if(title() == "Super GAMEBOY") return "SGB1";
|
|
|
|
|
if(title() == "Super GAMEBOY2") return "SGB2";
|
Update to v106r18 release.
byuu says:
Changelog:
- major restructuring of board manifests
- cleanup of generic board names
- Super Famicom: updates to SA1, SuperFX, Cx4, SPC7110, EpsonRTC,
SharpRTC load/save code
- Super Famicom: added experimental SuperFX plot dithering fix
[qwertymodo]
- higan, icarus: rename shared folders to lowercase names; put .sys
folders into new subfolder
- Video Shaders/ → shaders/
- Database/ → database/
- Firmware/ → firmware/
- \*.sys/ → systems/\*.sys/
So right now, only standard SNES games, SA-1, SuperFX, and Cx4 games
load. I have not tested SPC7110 or RTC support, because icarus import
seems to be completely broken? It's creating blank folders when I try it
now. I'll have to fix that ...
Since we are now up to thirteen systems, I've put the .sys folders into
a subfolder. This should declutter the main higan-windows release folder
a good deal. Linux users will need to re-run make install, or manually
move things into a new systems/ subfolder.
Same goes for icarus: lowercase the database/ and firmware/ folders or
re-run make install.
I don't know if qwertymodo's SuperFX fix is exactly correct or not.
Hopefully it is, but I didn't write a test ROM or anything to be
certain. Since SuperFX games should run, if people could please play
through some of them and look for any regressions, that'd be very much
appreciated.
2018-05-09 02:12:06 +00:00
|
|
|
|
return "SGB1";
|
|
|
|
|
}
|
|
|
|
|
|
2018-02-16 01:07:49 +00:00
|
|
|
|
auto SuperFamicom::firmwareHITACHI() const -> string {
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
return "Cx4";
|
2018-02-16 01:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto SuperFamicom::firmwareNEC() const -> string {
|
Update to v106r59 release.
byuu says:
Changelog:
- fixed bug in Emulator::Game::Memory::operator bool()
- nall: renamed view<string> back to `string_view`
- nall:: implemented `array_view`
- Game Boy: split cartridge-specific input mappings (rumble,
accelerometer) to their own separate ports
- Game Boy: fixed MBC7 accelerometer x-axis
- icarus: Game Boy, Super Famicom, Mega Drive cores output internal
header game titles to heuristics manifests
- higan, icarus, hiro/gtk: improve viewport geometry configuration;
fixed higan crashing bug with XShm driver
- higan: connect Video::poll(),update() functionality
- hiro, ruby: several compilation / bugfixes, should get the macOS
port compiling again, hopefully [Sintendo]
- ruby/video/xshm: fix crashing bug on window resize
- a bit hacky; it's throwing BadAccess Xlib warnings, but they're
not fatal, so I am catching and ignoring them
- bsnes: removed Application::Windows::onModalChange hook that's no
longer needed [Screwtape]
2018-08-26 06:49:54 +00:00
|
|
|
|
if(title() == "PILOTWINGS") return "DSP1";
|
|
|
|
|
if(title() == "DUNGEON MASTER") return "DSP2";
|
|
|
|
|
if(title() == "SDガンダムGX") return "DSP3";
|
|
|
|
|
if(title() == "PLANETS CHAMP TG3000") return "DSP4";
|
|
|
|
|
if(title() == "TOP GEAR 3000") return "DSP4";
|
Update to v106r09 release.
byuu says:
Changelog:
- higan, icarus, genius: new manifest syntax (work in progress)
Pretty much only LoROM and HiROM SNES games will load right now, and RAM
will only work right if the save.ram file already exists to pull its
file size from (a temporary cheap hack was used.)
Basically, I'm just getting this out there for evaluation.
One minor errata is that I switched icarus to using “memory/battery” to
indicate battery-backed RAM, whereas genius still uses “memory/volatile”
to indicate non-battery-backed RAM.
I intend to make it “memory/battery” in genius, and have the field
auto-enable when RAM or RTC is selected for type (obviously allowing it
to be unchecked for volatile memory.)
I need to update all 64 production boards, and 25 of 29 generic boards,
to use the new slot syntax; and I also need to update every single core
in higan to use the new manifest game syntax. I want to build out a
generic manifest game parser that all emulation cores will use.
Once I finish this, I'll also need to write a database converter to
update all of my licensed game dumps to the new database syntax.
I also need to write up something for doc.byuu.org explaining the new
manifest game syntax. The manifest board syntax will still be “internal”
and subject to revisions, but once v107 is out, the gamepak manifest
format will be set in stone sans extensions.
2018-03-05 04:34:07 +00:00
|
|
|
|
return "DSP1B";
|
2018-02-16 01:07:49 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-08-21 11:29:53 +00:00
|
|
|
|
}
|