mirror of
https://github.com/wavemotion-dave/NINTV-DS.git
synced 2025-06-18 13:55:33 -04:00
Version 5.6a with fixes for Defender of the Crown, new overlays and UI improvements.
This commit is contained in:
parent
412ea350ec
commit
68280c40a5
2
Makefile
2
Makefile
@ -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"
|
||||
|
||||
|
BIN
NINTV-DS.nds
BIN
NINTV-DS.nds
Binary file not shown.
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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"},
|
||||
|
BIN
extras.zip
BIN
extras.zip
Binary file not shown.
Loading…
Reference in New Issue
Block a user