Version 5.6a with fixes for Defender of the Crown, new overlays and UI improvements.

This commit is contained in:
Dave Bernazzani 2024-10-08 06:44:09 -04:00
parent 412ea350ec
commit 68280c40a5
8 changed files with 26 additions and 7 deletions

View File

@ -14,7 +14,7 @@ include $(DEVKITARM)/ds_rules
export TARGET := NINTV-DS
export TOPDIR := $(CURDIR)
export VERSION := 5.6
export VERSION := 5.6a
ICON := -b $(CURDIR)/logo.bmp "NINTV-DS $(VERSION);wavemotion-dave;https://github.com/wavemotion-dave/NINTV-DS"

Binary file not shown.

View File

@ -168,6 +168,11 @@ Credits :
--------------------------------------------------------------------------------
History :
--------------------------------------------------------------------------------
V5.6a : 08-Oct-2024 by wavemotion-dave
* Fix to allow JLP games to execute out of 16-bit RAM. Fixes Defender of the Crown.
* Improved UI display of 'JLP FLASH' so it shows a bit longer (but doesn't interfere with emulation speed)
* Numerous new overlays added.
V5.6 : 06-Oct-2024 by wavemotion-dave
* Massive overhaul to the way overlays are found and loaded. No longer do you need to have the overlays named the same as the game ROM file - the emulator should find the matching overlay 99% of the time (and yes, you can still force the issue by naming the .ovl the same as the base game .int/.bin/.rom file)
* If the system BIOS files are not found by name, a quick search is done by CRC32 to see if the emulator can load it.

View File

@ -22,6 +22,8 @@
extern Rip *currentRip;
UINT8 bFlashWritten = 0;
JLP::JLP()
: RAM(JLP_RAM_SIZE, JLP_RAM_ADDRESS, 0xFFFF, 0xFFFF)
{}
@ -41,12 +43,19 @@ void JLP::reset()
flash_read = 1; // Force flash to read...
flash_write_time = 0; // And reset the time to write...
bFlashWritten = 0; // To show the 'JLP FLASH' on screen
}
// If the JLP flash needs to be written, we write it to the backing file. We do it this way so that quick-succession writes
// to the flash do not force a write to the backing file which is slow and wasteful... so we have a 2 second backing timer.
void JLP::tick_one_second(void)
{
if (bFlashWritten)
{
dsPrintValue(hud_x,hud_y,0,(char*)" ");
bFlashWritten = 0;
}
if (flash_write_time > 0)
{
if (--flash_write_time == 0)
@ -133,7 +142,7 @@ void JLP::WriteFlashFile(void)
fwrite(jlp_flash, 1, JLP_FLASH_SIZE, fp);
fclose(fp);
}
dsPrintValue(hud_x,hud_y,0,(char*)" ");
bFlashWritten = 1;
}
void JLP::ScheduleWriteFlashFile(void)
@ -205,6 +214,8 @@ void JLP::poke(UINT16 location, UINT16 value)
if ((location >= 0x8040))
{
jlp_ram[location & 0x1FFF] = value;
// And since we CAN execute out of JLP RAM, we must also keep the fast RAM cache up to date...
*((UINT16 *)(0x06860000 | (location<<1))) = value;
}
/* -------------------------------------------------------------------- */

View File

@ -326,7 +326,8 @@ ITCM_CODE void MemoryBus::poke(UINT16 location, UINT16 value)
writeableMemorySpace[location>>MEM_DIV][i]->poke(location, value);
}
// For the lower RAM area... keep the "fast memory" updated
// For the lower RAM area or any JLP access... keep the "fast memory" updated
// JLP is unusual in that games can run code out of the JLP RAM so keeping the fast memory updated is required for games like Defender of the Crown.
if (!(location & 0xF800))
{
*((UINT16 *)(0x06860000 | (location<<1))) = value;

View File

@ -393,9 +393,9 @@ Rip* Rip::LoadBinCfg(const CHAR* configFile, UINT32 crc, size_t size)
if (*ptr == '$')
{
ptr++;
UINT16 start_addr = strtoul(ptr, &ptr, 16);
UINT32 start_addr = strtoul(ptr, &ptr, 16);
while (*ptr == ' ' || *ptr == '\t' || *ptr == '-' || *ptr == '$') ptr++;
UINT16 end_addr = strtoul(ptr, &ptr, 16);
UINT32 end_addr = strtoul(ptr, &ptr, 16);
while (*ptr == ' ' || *ptr == '\t' || *ptr == '=' || *ptr == '$') ptr++;
UINT16 map_addr = strtoul(ptr, &ptr, 16);
ROM *newROM = new ROM("Cartridge ROM", "", 0, sizeof(UINT16), (UINT16)((end_addr-start_addr) + 1), map_addr);

View File

@ -224,8 +224,9 @@ struct MapRomToOvl_t MapRomToOvl[] =
{0xe8b99963 , "COPTER", "COMMAND", "Copter Command.ovl"},
{0x060E2D82 , "D1K", "D1K", "D1K.ovl"},
{0xFFFFFFFF , "D2K", "D2K", "D1K.ovl"},
{0xFFFFFFFF , "DK", "Jr", "DKJr.ovl"},
{0xFFFFFFFF , "Kong", "Jr", "DKJr.ovl"},
{0xFFFFFFFF , "DK", "JR", "DKJr.ovl"},
{0xFFFFFFFF , "KONG", "JR", "DKJr.ovl"},
{0xFFFFFFFF , "DEFENDER", "CROWN", "Defender of the Crown.ovl"},
{0x5E6A8CD8 , "DEMON", "ATTACK", "Demon Attack.ovl"},
{0x13EE56F1 , "DINER", "DINER", "Diner.ovl"},
{0x84BEDCC1 , "DRACULA", "DRACULA", "Dracula.ovl"},
@ -272,6 +273,7 @@ struct MapRomToOvl_t MapRomToOvl[] =
{0x36A7711B , "OPERATION", "CLOUDFIRE", "Operation Cloudfire.ovl"},
{0xFFFFFFFF , "OREGON", "BOUND", "Oregon Bound.ovl"},
{0xFFFFFFFF , "OREGON", "TRAIL", "Oregon Bound.ovl"},
{0x45668011 , "PANDORA", "INCIDENT", "Pandora Incident.ovl"},
{0x169E3584 , "PBA", "BOWLING", "PBA Bowling.ovl"},
{0xFF87FAEC , "PGA", "GOLF", "PGA Golf.ovl"},
{0xA21C31C3 , "PAC", "MAN", "Pac-Man.ovl"},

Binary file not shown.