mirror of https://github.com/stella-emu/stella.git
Allow ROMs < 64 bytes (Stella's internal page size) to work correctly. Fixes #564.
This commit is contained in:
parent
6a0b0096dd
commit
d9143a7d65
18
Changes.txt
18
Changes.txt
|
@ -29,16 +29,16 @@
|
||||||
* Controllers can be changed during emulation (no ROM reload required
|
* Controllers can be changed during emulation (no ROM reload required
|
||||||
anymore).
|
anymore).
|
||||||
|
|
||||||
* Added support for Light Gun controller
|
* Added support for Light Gun controller.
|
||||||
|
|
||||||
* Added limitted KidVid support (8, 9 and 0 start the games)
|
* Added limited KidVid support (8, 9 and 0 start the games).
|
||||||
|
|
||||||
* Removed superfluous controller option 'PADDLES_IDIR'.
|
* Removed superfluous controller option 'PADDLES_IDIR'.
|
||||||
|
|
||||||
* Added configurable paddle dejittering.
|
* Added configurable paddle dejittering.
|
||||||
|
|
||||||
* Huge improvements to event remapping.
|
* Huge improvements to event remapping.
|
||||||
- Allow mapping of modifier-key and button-direction combinations.
|
- Allow mapping of modifier-key and button-direction combinations
|
||||||
- One controller can use the same mappings as other controllers
|
- One controller can use the same mappings as other controllers
|
||||||
- Much more events can be remapped
|
- Much more events can be remapped
|
||||||
- Events can be filtered by type in UI
|
- Events can be filtered by type in UI
|
||||||
|
@ -55,9 +55,9 @@
|
||||||
|
|
||||||
* Added option to configure controller input repeat speed.
|
* Added option to configure controller input repeat speed.
|
||||||
|
|
||||||
* Added high quality scaling
|
* Added high quality scaling.
|
||||||
|
|
||||||
* Made scanlines better aligned to scaling
|
* Made scanlines better aligned to scaling.
|
||||||
|
|
||||||
* Added 'HiDPI' mode, which scales the UI by 2x when enabled. This is
|
* Added 'HiDPI' mode, which scales the UI by 2x when enabled. This is
|
||||||
meant for 4k and above monitors, but can actually be used at any
|
meant for 4k and above monitors, but can actually be used at any
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
|
|
||||||
* Added hotkey for sound on/off.
|
* Added hotkey for sound on/off.
|
||||||
|
|
||||||
* Paths have been simplified: (TODO - finish this)
|
* Paths have been simplified:
|
||||||
- The following file/directory locations are no longer configurable
|
- The following file/directory locations are no longer configurable
|
||||||
(statedir, nvramdir, cheatfile, palettefile, propsfile); they are
|
(statedir, nvramdir, cheatfile, palettefile, propsfile); they are
|
||||||
now all under the base directory
|
now all under the base directory
|
||||||
|
@ -143,15 +143,17 @@
|
||||||
|
|
||||||
* Fixed cheatcode handling in 2K and 4K ROMs.
|
* Fixed cheatcode handling in 2K and 4K ROMs.
|
||||||
|
|
||||||
|
* Fixed bug where ROMs smaller than 64 bytes were not recognized.
|
||||||
|
|
||||||
* Fixed bug where frying one ROM was continued with the next ROM.
|
* Fixed bug where frying one ROM was continued with the next ROM.
|
||||||
|
|
||||||
* Fixed not working 7800 pause key.
|
* Fixed not working 7800 pause key.
|
||||||
|
|
||||||
* Enhanced UA bankswitching to support certain Brazilian carts.
|
* Enhanced UA bankswitching to support certain Brazilian carts.
|
||||||
|
|
||||||
* Fixed WD bankswitching
|
* Fixed WD bankswitching.
|
||||||
|
|
||||||
* Added FC bankswitching for Amiga's Power Play Arcade Video Game Album
|
* Added FC bankswitching for Amiga's Power Play Arcade Video Game Album.
|
||||||
|
|
||||||
* Added auto-detection of display format based on filename.
|
* Added auto-detection of display format based on filename.
|
||||||
|
|
||||||
|
|
|
@ -31,15 +31,26 @@ Cartridge2K::Cartridge2K(const ByteBuffer& image, size_t size,
|
||||||
while(mySize < size)
|
while(mySize < size)
|
||||||
mySize <<= 1;
|
mySize <<= 1;
|
||||||
|
|
||||||
// We can't use a size smaller than the minimum page size in Stella
|
|
||||||
mySize = std::max<size_t>(mySize, System::PAGE_SIZE);
|
|
||||||
|
|
||||||
// Initialize ROM with illegal 6502 opcode that causes a real 6502 to jam
|
// Initialize ROM with illegal 6502 opcode that causes a real 6502 to jam
|
||||||
myImage = make_unique<uInt8[]>(mySize);
|
size_t bufSize = std::max<size_t>(mySize, System::PAGE_SIZE);
|
||||||
std::fill_n(myImage.get(), mySize, 0x02);
|
myImage = make_unique<uInt8[]>(bufSize);
|
||||||
|
std::fill_n(myImage.get(), bufSize, 0x02);
|
||||||
|
|
||||||
|
// Handle cases where ROM is smaller than the page size
|
||||||
|
// It's much easier to do it this way rather than changing the page size
|
||||||
|
if(mySize >= System::PAGE_SIZE)
|
||||||
|
{
|
||||||
|
// Directly copy the ROM image into the buffer
|
||||||
|
std::copy_n(image.get(), mySize, myImage.get());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Manually 'mirror' the ROM image into the buffer
|
||||||
|
for(int i = 0; i < System::PAGE_SIZE; i += mySize)
|
||||||
|
std::copy_n(image.get(), mySize, myImage.get() + i);
|
||||||
|
mySize = System::PAGE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
// Copy the ROM image into my buffer
|
|
||||||
std::copy_n(image.get(), size, myImage.get());
|
|
||||||
createCodeAccessBase(mySize);
|
createCodeAccessBase(mySize);
|
||||||
|
|
||||||
// Set mask for accessing the image buffer
|
// Set mask for accessing the image buffer
|
||||||
|
|
Loading…
Reference in New Issue