Changelog:
February 20, 2024
- Today's build attempts to fix a hang that can happen when rapidly single-stepping through code with the debugger open, particularly when large numbers of PPU updates are taking place (e.g. with the MMC5's graphics extensions). Additional performance optimizations have also been made to the PPU debugger.
January 7, 2024
- The NTSC palette generator has been updated with properly measured voltage levels. Normal colors are largely unchanged, but color emphasis is somewhat lighter than before.
June 2, 2023
- Basic support for iNES Mapper 30 (UNROM 512) has been added; note that this does not include the ability to overwrite Flash ROM contents. Additionally, all mappers which emulate Bus Conflicts now do so in a deterministic manner.
Changelog from code
Jun 1, 2024
- Adjust Dripgame mapper sound output: Do pulse-width modulation instead of multiplying by volume - the result is pretty much indistinguishable, and it's closer to how this mapper might be hypothetically implemented on a real cartridge.
Feb 20, 2024
- Fix hang when rapid single-stepping with debugger
Especially with expensive mappers like the MMC5, it could occasionally get stuck in an infinite loop of processing WM_PAINT messages. Also add a missing include so it builds properly in MSVC 2022.
May 29, 2023
April 26, 2023
January 29, 2023
- Today's build fixes a bug in Wine 6.0 and later with certain window managers, where the main window shrinks to minimum size and jumps to the upper-left corner of the screen on program startup (as well as when the size multiplier is changed).
- Not coincidentally, this is also the first build of Nintendulator produced within Wine (using Visual C++ 2010).
January 11, 2023
- An error in the Debugger has been corrected so that accesses to the Stack now properly trigger memory read/write breakpoints.
November 12. 2022
December 4. 2022
August 23. 2022
Robocop 3 (1993, Ocean)
- The NTSC palette generator has undergone a significant improvement and simplification - the standard palette should be mostly unchanged, but color emphasis should be much more accurate now.
commit 8ed2932111ed16dee593775f993d1dee22da3727 / 8ed2932
Author: Quietust <quietust@gmail.com>
Date: Sun Jan 7 08:42:57 2024 -0600
Update NTSC palette generator with proper voltages
- Normal colors look almost exactly the same, but emphasis is a bit lighter.
END OF SVN SUPPORT
Revision 895 | 29/05/2023
Author: quietust | Date: poniedziałek, 29 maja 2023 23:51:20
- Optimization: "static const" for local arrays to make sure that the array gets stored in the data segment instead of being initialized during function entry
Revision 894 | 27/04/2023
Author: quietust | Date: czwartek, 27 kwietnia 2023 04:29:22
- Adjust CPU emulation - writes update open bus too
Revision 893
Author: quietust | Date: niedziela, 29 stycznia 2023 20:51:15
- Add workaround for Wine bug #50410
- Specifically, on some window managers, resizing or repositioning windows malfunctions if the window is not hidden.
Revision 892
Author: quietust | Date: czwartek, 12 stycznia 2023 01:25:52
- Fix Debugger so it recognizes Stack breakpoints
Revision 891
Author: quietust | Date: niedziela, 4 grudnia 2022 18:19:11
- Fix build on MSVC 2010
- Turns out it doesn't like emplace_back() without parameters.
Revision 890
Author: quietust | Date: wtorek, 23 sierpnia 2022 04:15:19
- Adjust NTSC palette phase tables
- This way, "correct" colors are obtained by providing a phase adjustment of 0 instead of 3.
Revision 889
Author: quietust | Date: poniedziałek, 22 sierpnia 2022 21:43:35
- Partially rewrite NTSC Palette generator
- Get rid of the monstrosity that was the getPhase() function, and replace it with proper code for calculating YIQ based on information on the NESdev wiki. Note that this still uses the old YIQ coefficients and does not perform gamma correction, so the "standard" palette should look the same as before; however, the Emphasis palettes are now noticeably different (and arguably a lot closer to what they should be).
Revision 888
Author: quietust | Date: sobota, 13 sierpnia 2022 02:10:47
- Rewrite Breakpoint management code to be less ugly * Instead of using a handmade linked list, use std::vector
- Instead of sorting breakpoints, add buttons for reordering them
- When deleting breakpoints, select the next one in the list
Revision 887
Author: quietust | Date: wtorek, 9 sierpnia 2022 21:22:48
- Fix controller config code to avoid crash
- If the registry contains an invalid controller ID, display an error but
- then reconnect the "unconnected" controller, otherwise it'll crash.
July 18, 2022
- Prompted by an online discussion about optimization, I made a minor optimization to the PPU's FrameSkip rendering code and a major optimization to the APU code when sound is disabled, allowing "fast-forward" to run much more quickly than before
Revision 886
Author: quietust | Date: poniedziałek, 18 lipca 2022 22:26:23
- Optimize sprite 0 hit during frameskip
- There's no need to keep the 2 pattern bits separate - OR them together, and you can just AND the resulting pixels together.
- Also move the Sleep() inside the APU code so it doesn't happen when audio is turned off, increasing fast-forward speed significantly.
Revision 885
Author: quietust | Date: poniedziałek, 11 lipca 2022 05:44:54
Update savestate logic
- Print error message if block length during load doesn't match
- Correctly read APUS block from old savestates (skip last byte)
- Skip old CTRL block without erroring out, mainly for movies
Nintendulator 28/06/2022
Revision 884
Author: quietust | Date: poniedziałek, 7 marca 2022 22:09:59
- Allow NES 2.0 ROM images with zero CHR ROM/RAM.
- Let it go ahead and map "open bus" to the bottom of the PPU's address
- space, if that's what the program in question really wants to do.
Nintendulator 07/03/2022
Nintendulator 25/02/2022
- Today's build features numerous accuracy fixes centered around the APU and DMA, fixing a handful of failing test programs.
Revision 883
Author: quietust | Date: niedziela, 27 lutego 2022 15:38:49
- Adjust $2004 write behavior when rendering
Revision 882
Author: quietust | Date: sobota, 26 lutego 2022 04:03:53
Assorted updates
- Update APU:
- Length counter values now match silicon, adjusted by 1 in code
- NoiseFreq, PCMFreq, and FrameCycles now match silicon, counting APU cycles
- Square0, Square1, Noise, DPCM, and Frame now respect APU clock phase
- DPCM Addr+Ctr Reload/Increment events are now delayed correctly
- APU Clock Phase is now incremented after CPU I/O, not before
- Update CPU:
- Move DMA logic into its own function
- Rename MemGet -> MemGetCPU, create "MemGetDMA" to eliminate recursion in DMA logic
- Fix DMA timing to correctly emulate PCM DMA interrupting Sprite DMA
- Add macros "MemGetData" and "MemGetMiss" which point at MemGetCPU
- Implement SYA/SHY and SXA/SHX instructions
- Update PPU:
- Delay setting sprite 0 hit in $2002 by 1 pixel to satisfy timing tests
- Update savestate format:
- Version 1004
- Cycles for Square0/Square1/Noise/DPCM/Frame are now in APU cycles
- DPCM now tracks Resetting and Incrementing flags
- Frame Counter now tracks Quarter/Half/IRQ/Zero flags
- APU now stores the bottom 8 bits of its internal clock for tracking phase
- The following test ROMs now pass:
- instr_test_v5 / 07-abs_xy
- pal_apu_tests / 06-len-timing-mode1
- ppu_sprite_hit / 09-timing
- ppu_sprite_hit / 10-timing_order
- sprdma_and_dmc_dma + sprdma_and_dmc_dma_512
Revision 881
Author: quietust | Date: środa, 23 lutego 2022 17:58:25
- Fix .NES loader to handle small PRG/CHR sizes
- If sizes are not a multiple of the minimum bank size (4KB PRG, 1KB CHR), data will be be mirrored until they are.
Revision 880
Author: quietust | Date: wtorek, 15 lutego 2022 22:17:43
- Tweak timing on some unsupported CPU instructions.
- Fixes Blargg's 1-instr_timing test.
Nintendulator 05/01/2022
- The first build for the new year adds support for an extremely obscure feature recently discovered in one revision of the Nintendo MMC1 mapper, along with a UNIF mapper fix for MMC3 boards that could be reconfigured for hardwired mirroring.
Revision 879
Author: quietust | Date: środa, 5 stycznia 2022 22:13:08
- Update copyright year to 2022
December 17,2021
Revision 878
Author: quietust | Date: piątek, 17 grudnia 2021 23:59:51
- Flip sprites in PPU Debugger according to attribs
Revision 877
Author: quietust | Date: piątek, 17 grudnia 2021 23:50:27
- Add PPU Debugger "8x16 Flip" option
- When checked, pattern tables will be organized as follows:
- 00 02 04 06 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E
- 01 03 05 07 09 0B 0D 0F 11 13 15 17 19 1B 1D 1F
- ...
- instead of the usual
- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
- 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
- ...
June 9, 2021
- The debugger now permits setting breakpoints at the beginning of any scanline. The pre-render scanline is specified as -1 (as the Debugger normally displays it), but you can also specify scanline 261 for NTSC or 311 for PAL and it will translate it accordingly.
May 28, 2021
- Partial NES 2.0 support has been added to iNES mapper #4, allowing it to emulate the MMC6 when submapper 1 is specified.
May 24, 2021
- When I did the "infrastructure update" to the mapper DLLs two months ago, it turns out I introduced a typo in UNIF support which caused all "HVC-*", "UNL-*", and "BTL-*" boards to incorrectly load as "NES-AMROM". This has now been fixed.
March 27, 2021
Mapper 218 (a "single-chip" cartridge containing only PRG ROM and using the nametable RAM to hold graphical tiles) is now supported.
I've also added project files for Microsoft Visual C++ 2015 (better late than never), and in the process I discovered that a few obscure multicart mappers were broken due to name conflicts between global variables and function parameters (for which Visual C++ 2010 did not emit warnings).
Also, I hear that copyright years are a thing that you actually need to update, so there's that too.
Revision 876
Author: quietust | Date: poniedziałek, 14 czerwca 2021 23:44:20
- Don't allocate PPU debugger bitmap arrays on the stack.
- Instead, mark them `static` to put them in bss, possibly offering a
- slight performance improvement when the PPU debugger is open.
Revision 875
Author: quietust | Date: czwartek, 10 czerwca 2021 04:58:54
- Fix breakpoint editor, apply focus to first enabled editbox (if any)
Revision 874
Author: quietust | Date: czwartek, 10 czerwca 2021 04:56:33
- Add support for scanline-based breakpoints
Revision 873
Author: quietust | Date: czwartek, 10 czerwca 2021 03:40:42
- Simplify breakpoint cache
Revision 872
Author: quietust | Date: poniedziałek, 7 czerwca 2021 20:15:21
- Don't allow triggering manual NMI during pre-render scanline
- Fixes ppu_vbl_nmi/07-nmi_on_timing
Revision 871
Author: quietust | Date: czwartek, 20 maja 2021 16:10:53
- Several fixes necessary for updated Namcot-163 mapper
- Don't write SRAM file until after the mapper is unloaded
- If an NES 2.0 ROM has a battery but no PRG RAM, give it some anyways
Revision 870
Author: quietust | Date: piątek, 9 kwietnia 2021 21:13:41
- Add minor PPU simplification for sprite rendering logic.
- I can only assume this was a holdover from long-removed code.
Revision 869
Author: quietust | Date: niedziela, 28 marca 2021 03:13:18
- Remove some unneeded "inline"s
Revision 868
Author: quietust | Date: sobota, 27 marca 2021 21:49:02
- Update copyright date, fixes #8
Revision 867
Author: quietust | Date: sobota, 27 marca 2021 21:15:16
- Add project files for MSVC 2015.
- Also update 2010 project files to eliminate some warnings.
Revision 866
Author: quietust | Date: sobota, 27 marca 2021 21:05:50
- Fix potential compiler warnings