From 111ae9185fb8b0b562855a730f981df72d470821 Mon Sep 17 00:00:00 2001 From: stephena Date: Tue, 9 Jun 2009 14:27:21 +0000 Subject: [PATCH] Well, it looks like I can squeeze this into 2.8 after all. Randomized value placed in accumulator after exiting the SC BIOS for SuperCharger ROMs. This should fix issues in Dragonstomper, where it seems the randomization of its items depending on a random accumulator value. Re-added '-fastscbios', and when enabled, it completely skips the emulation of SC BIOS progress bars (previously, the bars were simply sped up). This defaults to off, for more authentic emulation. Related to this, added a UI item in VideoDialog to enable/disable it. Thanks to Eckhard Stolberg for advice on the SCROM, and how to modify it. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1763 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- Changes.txt | 11 +++- docs/graphics/options_video.png | Bin 8403 -> 8709 bytes docs/index.html | 6 ++ src/emucore/Cart.cxx | 2 +- src/emucore/CartAR.cxx | 112 +++++++++++++++++--------------- src/emucore/CartAR.hxx | 10 ++- src/emucore/Console.cxx | 16 +++-- src/emucore/Settings.cxx | 2 + src/emucore/misc/romtohex.cxx | 44 ++++++++----- src/emucore/misc/scrom.asm | 18 +++-- src/gui/VideoDialog.cxx | 14 ++++ src/gui/VideoDialog.hxx | 1 + 12 files changed, 151 insertions(+), 85 deletions(-) diff --git a/Changes.txt b/Changes.txt index 9ab78025c..448416c20 100644 --- a/Changes.txt +++ b/Changes.txt @@ -40,6 +40,10 @@ * Tweaked paddle control so that all positions are reachable in game 4 of Activision Casino in both NTSC and PAL versions. + * SuperCharger/AR ROMs now start with a random value in the CPU + accumulator. This should fix issues with Dragonstomper always + starting in exactly the same state. + * Auto-detection for '3F' bankswitching improved; several ROMs previously detected as 'F8' now work correctly. @@ -52,8 +56,13 @@ using an external frontend (in which case exiting a ROM also exits from Stella). + * Re-added '-fastscbios' commandline argument, and added an associated + UI item. When enabled, the SuperCharger load bars are now completely + removed (and not just sped up as in previous releases). + * The '-listrominfo' commandline argument now shows all ROM - information built in to the internal database. + information built in to the internal database, taking into account + any information in 'personal' stella.pro files. -Have fun! diff --git a/docs/graphics/options_video.png b/docs/graphics/options_video.png index f620f70eb6ec23a13861108eee988be4568a0507..0adc7adce52e404ccf0fceec6f0f45df04c13f08 100644 GIT binary patch literal 8709 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 T^yxwDy8&ibEw9v?+)wx)CMLLY diff --git a/docs/index.html b/docs/index.html index 5623d079f..20c563ca1 100644 --- a/docs/index.html +++ b/docs/index.html @@ -813,6 +813,11 @@ systems, the default is 1. + +
-fastscbios <1|0>
+ Disable Supercharger BIOS progress loading bars. + +
-ssdir <path>
The directory to save snapshot files to. @@ -1122,6 +1127,7 @@ GL VSyncenable OpenGL vertical synchronization-gl_vsync Grab mousekeep mouse in SDL window-grabmouse Center window (*)attempt to center SDL window (requires restart)-center + Fast SC/AR BIOSSkip progress loading bars for SuperCharger ROMs-fastscbios diff --git a/src/emucore/Cart.cxx b/src/emucore/Cart.cxx index 23c4f2d52..acd69d622 100644 --- a/src/emucore/Cart.cxx +++ b/src/emucore/Cart.cxx @@ -103,7 +103,7 @@ Cartridge* Cartridge::create(const uInt8* image, uInt32 size, else if(type == "4K") cartridge = new Cartridge4K(image); else if(type == "AR") - cartridge = new CartridgeAR(image, size, true); //settings.getBool("fastscbios") + cartridge = new CartridgeAR(image, size, settings); else if(type == "DPC") cartridge = new CartridgeDPC(image, size); else if(type == "E0") diff --git a/src/emucore/CartAR.cxx b/src/emucore/CartAR.cxx index 9698c87a2..512a4ea8d 100644 --- a/src/emucore/CartAR.cxx +++ b/src/emucore/CartAR.cxx @@ -25,16 +25,15 @@ #include "CartAR.hxx" // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CartridgeAR::CartridgeAR(const uInt8* image, uInt32 size, bool fastbios) - : my6502(0) +CartridgeAR::CartridgeAR(const uInt8* image, uInt32 size, + const Settings& settings) + : my6502(0), + mySettings(settings) { // Create a load image buffer and copy the given image myLoadImages = new uInt8[size]; myNumberOfLoadImages = size / 8448; memcpy(myLoadImages, image, size); - - // Initialize SC BIOS ROM - initializeROM(fastbios); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -51,6 +50,9 @@ void CartridgeAR::reset() for(uInt32 i = 0; i < 6 * 1024; ++i) myImage[i] = random.next(); + // Initialize SC BIOS ROM + initializeROM(); + myPower = true; myPowerRomCycle = mySystem->cycles(); myWriteEnabled = false; @@ -279,66 +281,70 @@ void CartridgeAR::bankConfiguration(uInt8 configuration) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void CartridgeAR::initializeROM(bool fastbios) +void CartridgeAR::initializeROM() { static uInt8 dummyROMCode[] = { - 0xa5, 0xfa, 0x85, 0x80, 0x4c, 0x18, 0xf8, 0xff, - 0xff, 0xff, 0x78, 0xd8, 0xa0, 0x0, 0xa2, 0x0, - 0x94, 0x0, 0xe8, 0xd0, 0xfb, 0x4c, 0x50, 0xf8, - 0xa2, 0x0, 0xbd, 0x6, 0xf0, 0xad, 0xf8, 0xff, - 0xa2, 0x0, 0xad, 0x0, 0xf0, 0xea, 0xbd, 0x0, - 0xf7, 0xca, 0xd0, 0xf6, 0x4c, 0x50, 0xf8, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xa2, 0x3, 0xbc, 0x1d, 0xf9, 0x94, 0xfa, 0xca, - 0x10, 0xf8, 0xa0, 0x0, 0xa2, 0x28, 0x94, 0x4, - 0xca, 0x10, 0xfb, 0xa2, 0x1c, 0x94, 0x81, 0xca, - 0x10, 0xfb, 0xa9, 0x0, 0x85, 0x1b, 0x85, 0x1c, - 0x85, 0x1d, 0x85, 0x1e, 0x85, 0x1f, 0x85, 0x19, - 0x85, 0x1a, 0x85, 0x8, 0x85, 0x1, 0xa9, 0x10, - 0x85, 0x21, 0x85, 0x2, 0xa2, 0x7, 0xca, 0xca, - 0xd0, 0xfd, 0xa9, 0x0, 0x85, 0x20, 0x85, 0x10, - 0x85, 0x11, 0x85, 0x2, 0x85, 0x2a, 0xa9, 0x5, - 0x85, 0xa, 0xa9, 0xff, 0x85, 0xd, 0x85, 0xe, - 0x85, 0xf, 0x85, 0x84, 0x85, 0x85, 0xa9, 0xf0, - 0x85, 0x83, 0xa9, 0x74, 0x85, 0x9, 0xa9, 0xc, - 0x85, 0x15, 0xa9, 0x1f, 0x85, 0x17, 0x85, 0x82, - 0xa9, 0x7, 0x85, 0x19, 0xa2, 0x8, 0xa0, 0x0, - 0x85, 0x2, 0x88, 0xd0, 0xfb, 0x85, 0x2, 0x85, - 0x2, 0xa9, 0x2, 0x85, 0x2, 0x85, 0x0, 0x85, - 0x2, 0x85, 0x2, 0x85, 0x2, 0xa9, 0x0, 0x85, - 0x0, 0xca, 0x10, 0xe4, 0x6, 0x83, 0x66, 0x84, - 0x26, 0x85, 0xa5, 0x83, 0x85, 0xd, 0xa5, 0x84, - 0x85, 0xe, 0xa5, 0x85, 0x85, 0xf, 0xa6, 0x82, - 0xca, 0x86, 0x82, 0x86, 0x17, 0xe0, 0xa, 0xd0, - 0xc3, 0xa9, 0x2, 0x85, 0x1, 0xa2, 0x1c, 0xa0, - 0x0, 0x84, 0x19, 0x84, 0x9, 0x94, 0x81, 0xca, - 0x10, 0xfb, 0xa6, 0x80, 0xdd, 0x0, 0xf0, 0xa5, - 0x80, 0x45, 0xfe, 0x45, 0xff, 0xa2, 0xff, 0xa0, - 0x0, 0x9a, 0x4c, 0xfa, 0x0, 0xcd, 0xf8, 0xff, - 0x4c + 0xa5, 0xfa, 0x85, 0x80, 0x4c, 0x18, 0xf8, 0xff, + 0xff, 0xff, 0x78, 0xd8, 0xa0, 0x0, 0xa2, 0x0, + 0x94, 0x0, 0xe8, 0xd0, 0xfb, 0x4c, 0x50, 0xf8, + 0xa2, 0x0, 0xbd, 0x6, 0xf0, 0xad, 0xf8, 0xff, + 0xa2, 0x0, 0xad, 0x0, 0xf0, 0xea, 0xbd, 0x0, + 0xf7, 0xca, 0xd0, 0xf6, 0x4c, 0x50, 0xf8, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xa2, 0x3, 0xbc, 0x22, 0xf9, 0x94, 0xfa, 0xca, + 0x10, 0xf8, 0xa0, 0x0, 0xa2, 0x28, 0x94, 0x4, + 0xca, 0x10, 0xfb, 0xa2, 0x1c, 0x94, 0x81, 0xca, + 0x10, 0xfb, 0xa9, 0xff, 0xc9, 0x0, 0xd0, 0x3, + 0x4c, 0x13, 0xf9, 0xa9, 0x0, 0x85, 0x1b, 0x85, + 0x1c, 0x85, 0x1d, 0x85, 0x1e, 0x85, 0x1f, 0x85, + 0x19, 0x85, 0x1a, 0x85, 0x8, 0x85, 0x1, 0xa9, + 0x10, 0x85, 0x21, 0x85, 0x2, 0xa2, 0x7, 0xca, + 0xca, 0xd0, 0xfd, 0xa9, 0x0, 0x85, 0x20, 0x85, + 0x10, 0x85, 0x11, 0x85, 0x2, 0x85, 0x2a, 0xa9, + 0x5, 0x85, 0xa, 0xa9, 0xff, 0x85, 0xd, 0x85, + 0xe, 0x85, 0xf, 0x85, 0x84, 0x85, 0x85, 0xa9, + 0xf0, 0x85, 0x83, 0xa9, 0x74, 0x85, 0x9, 0xa9, + 0xc, 0x85, 0x15, 0xa9, 0x1f, 0x85, 0x17, 0x85, + 0x82, 0xa9, 0x7, 0x85, 0x19, 0xa2, 0x8, 0xa0, + 0x0, 0x85, 0x2, 0x88, 0xd0, 0xfb, 0x85, 0x2, + 0x85, 0x2, 0xa9, 0x2, 0x85, 0x2, 0x85, 0x0, + 0x85, 0x2, 0x85, 0x2, 0x85, 0x2, 0xa9, 0x0, + 0x85, 0x0, 0xca, 0x10, 0xe4, 0x6, 0x83, 0x66, + 0x84, 0x26, 0x85, 0xa5, 0x83, 0x85, 0xd, 0xa5, + 0x84, 0x85, 0xe, 0xa5, 0x85, 0x85, 0xf, 0xa6, + 0x82, 0xca, 0x86, 0x82, 0x86, 0x17, 0xe0, 0xa, + 0xd0, 0xc3, 0xa9, 0x2, 0x85, 0x1, 0xa2, 0x1c, + 0xa0, 0x0, 0x84, 0x19, 0x84, 0x9, 0x94, 0x81, + 0xca, 0x10, 0xfb, 0xa6, 0x80, 0xdd, 0x0, 0xf0, + 0xa9, 0x9a, 0xa2, 0xff, 0xa0, 0x0, 0x9a, 0x4c, + 0xfa, 0x0, 0xcd, 0xf8, 0xff, 0x4c }; - // If fastbios is enabled, set the wait time between vertical bars - // to 0 (default is 8), which is stored at address 189 of the bios - if(fastbios) - dummyROMCode[189] = 0x0; + // Note that the following offsets depend on the 'scrom.asm' file + // in src/emucore/misc. If that file is ever recompiled (and its + // contents placed in the array above), the offsets will almost + // definitely change - uInt32 size = sizeof(dummyROMCode); + // The scrom.asm code checks a value at offset 109 as follows: + // 0xff -> do a complete jump over the SC BIOS progress bars code + // 0x0 -> show SC BIOS progress bars as normal + dummyROMCode[109] = mySettings.getBool("fastscbios") ? 0xff : 0x0; + + // The accumulator should contain a random value after exiting the + // SC BIOS code - a value placed in offset 281 will be stored in A + class Random random; + dummyROMCode[281] = random.next(); // Initialize ROM with illegal 6502 opcode that causes a real 6502 to jam for(uInt32 i = 0; i < 2048; ++i) - { myImage[3 * 2048 + i] = 0x02; - } // Copy the "dummy" Supercharger BIOS code into the ROM area - for(uInt32 j = 0; j < size; ++j) - { + for(uInt32 j = 0; j < sizeof(dummyROMCode); ++j) myImage[3 * 2048 + j] = dummyROMCode[j]; - } // Finally set 6502 vectors to point to initial load code at 0xF80A of BIOS myImage[3 * 2048 + 2044] = 0x0A; diff --git a/src/emucore/CartAR.hxx b/src/emucore/CartAR.hxx index aa429f1ff..00739603a 100644 --- a/src/emucore/CartAR.hxx +++ b/src/emucore/CartAR.hxx @@ -24,6 +24,7 @@ class System; #include "bspf.hxx" #include "Cart.hxx" +#include "Settings.hxx" /** This is the cartridge class for Arcadia (aka Starpath) Supercharger @@ -45,9 +46,9 @@ class CartridgeAR : public Cartridge @param image Pointer to the ROM image @param size The size of the ROM image - @param fastbios Whether or not to quickly execute the BIOS code + @param settings Used to query 'fastscbios' option */ - CartridgeAR(const uInt8* image, uInt32 size, bool fastbios); + CartridgeAR(const uInt8* image, uInt32 size, const Settings& settings); /** Destructor @@ -161,12 +162,15 @@ class CartridgeAR : public Cartridge void loadIntoRAM(uInt8 load); // Sets up a "dummy" BIOS ROM in the ROM bank of the cartridge - void initializeROM(bool fastbios); + void initializeROM(); private: // Pointer to the 6502 processor in the system M6502* my6502; + // Reference to the settings object (needed for 'fastscbios' + const Settings& mySettings; + // Indicates the offest within the image for the corresponding bank uInt32 myImageOffset[2]; diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx index 5f537a3db..2fed40ce0 100644 --- a/src/emucore/Console.cxx +++ b/src/emucore/Console.cxx @@ -117,21 +117,25 @@ Console::Console(OSystem* osystem, Cartridge* cart, const Properties& props) myOSystem->settings().getBool("rominfo")) { // Run the system for 60 frames, looking for PAL scanline patterns - // We assume the first 30 frames are garbage, and only consider - // the second 30 (useful to get past SuperCharger BIOS) - // Unfortunately, this means we have to always enable 'fastscbios', - // since otherwise the BIOS loading will take over 250 frames! + // We turn off the SuperCharger progress bars, otherwise the SC BIOS + // will take over 250 frames! + // The 'fastscbios' option must be changed before the system is reset + bool fastscbios = myOSystem->settings().getBool("fastscbios"); + myOSystem->settings().setBool("fastscbios", true); mySystem->reset(); int palCount = 0; for(int i = 0; i < 60; ++i) { myTIA->update(); - if(i >= 30 && myTIA->scanlines() > 285) + if(myTIA->scanlines() > 285) ++palCount; } - myDisplayFormat = (palCount >= 15) ? "PAL" : "NTSC"; + myDisplayFormat = (palCount >= 30) ? "PAL" : "NTSC"; if(myProperties.get(Display_Format) == "AUTO-DETECT") autodetected = "*"; + + // Don't forget to reset the SC progress bars again + myOSystem->settings().setBool("fastscbios", fastscbios); } myConsoleInfo.DisplayFormat = myDisplayFormat + autodetected; diff --git a/src/emucore/Settings.cxx b/src/emucore/Settings.cxx index 0a3f7a1b6..e2c29337e 100644 --- a/src/emucore/Settings.cxx +++ b/src/emucore/Settings.cxx @@ -117,6 +117,7 @@ Settings::Settings(OSystem* osystem) setInternal("avoxport", ""); setInternal("stats", "false"); setInternal("audiofirst", "true"); + setInternal("fastscbios", "false"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -354,6 +355,7 @@ void Settings::usage() << " -sa2 Stelladaptor 2 emulates specified joystick port\n" << " -autoslot <1|0> Automatically switch to next save slot when state saving\n" << " -audiofirst <1|0> Initial audio before video (required for some ATI video cards)\n" + << " -fastscbios <1|0> Disable Supercharger BIOS progress loading bars\n" << " -ssdir The directory to save snapshot files to\n" << " -sssingle <1|0> Generate single snapshot instead of many\n" << " -ss1x <1|0> Generate TIA snapshot in 1x mode (ignore scaling/effects)\n" diff --git a/src/emucore/misc/romtohex.cxx b/src/emucore/misc/romtohex.cxx index 655ddb3ee..3039b5821 100644 --- a/src/emucore/misc/romtohex.cxx +++ b/src/emucore/misc/romtohex.cxx @@ -5,27 +5,37 @@ @version $Id$ */ -#include -#include +#include +#include +#include +using namespace std; -main() +int main(int ac, char* av[]) { - ifstream in("scrom.bin"); - - cout << " "; - - for(int t = 0; ; ++t) + ifstream in; + in.open("scrom.bin"); + if(in.is_open()) { - unsigned char c; - in.get(c); + in.seekg(0, ios::end); + int len = (int)in.tellg(); + in.seekg(0, ios::beg); - if(in.eof()) - break; + unsigned char* data = new unsigned char[len]; + in.read((char*)data, len); + in.close(); - cout << "0x" << hex << (int)c << ", "; + cout << " "; - if((t % 8) == 7) - cout << endl << " "; + // Skip first two bytes; they shouldn't be used + for(int t = 2; t < len; ++t) + { + cout << "0x" << hex << (int)data[t]; + if(t < len - 1) + cout << ", "; + if(((t-2) % 8) == 7) + cout << endl << " "; + } + cout << endl; + delete[] data; } - cout << endl; -} +} diff --git a/src/emucore/misc/scrom.asm b/src/emucore/misc/scrom.asm index aaf513a08..20b1c7cb7 100644 --- a/src/emucore/misc/scrom.asm +++ b/src/emucore/misc/scrom.asm @@ -8,7 +8,7 @@ ;; SS SS tt ee ll ll aa aa ;; SSSS ttt eeeee llll llll aaaaa ;; -;; Copyright (c) 1995-2005 by Bradford W. Mott and the Stella team +;; Copyright (c) 1995-2009 by Bradford W. Mott and the Stella team ;; ;; See the file "license" for information on usage and redistribution of ;; this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -124,6 +124,17 @@ mlclr2 STY $81,X ;; ;; Display the "emulated" Supercharger loading progress bar ;; +;; Check if we should skip the loading progress bar +;; Note that the following code seems to never do a jump +;; However, the comparison value can be patched outside this code +;; + LDA #$FF + CMP #$00 ; patch this value to $FF outside ROM to do a jump + BNE startbars + JMP skipbars + +;; Otherwise we display them +startbars: LDA #$00 STA GRP0 STA GRP1 @@ -214,6 +225,7 @@ clear: STY $81,x DEX BPL clear +skipbars: ;; ;; Setup value to be stored in the bank switching control register @@ -224,9 +236,7 @@ clear: ;; ;; Initialize A, X, Y, and SP registers ;; - LDA $80 - EOR $FE - EOR $FF + LDA #$9a ;; This is patched outside the ROM to a random value LDX #$FF LDY #$00 TXS diff --git a/src/gui/VideoDialog.cxx b/src/gui/VideoDialog.cxx index ffebb12a2..2f8870647 100644 --- a/src/gui/VideoDialog.cxx +++ b/src/gui/VideoDialog.cxx @@ -215,6 +215,13 @@ VideoDialog::VideoDialog(OSystem* osystem, DialogContainer* parent, wid.push_back(myCenterCheckbox); ypos += lineHeight + 4; + // Skip progress load bars for SuperCharger ROMs + // Doesn't really belong here, but I couldn't find a better place for it + myFastSCBiosCheckbox = new CheckboxWidget(myTab, font, xpos, ypos, + "Fast SC/AR BIOS"); + wid.push_back(myFastSCBiosCheckbox); + ypos += lineHeight + 4; + // Add items for tab 0 addToFocusList(wid, tabID); @@ -394,6 +401,9 @@ void VideoDialog::loadConfig() // Center window myCenterCheckbox->setState(instance().settings().getBool("center")); + // Fast loading of Supercharger BIOS + myFastSCBiosCheckbox->setState(instance().settings().getBool("fastscbios")); + #ifdef DISPLAY_OPENGL ////////////////////////////////////////////////////////////////////// // TV effects are only enabled in OpenGL mode, and only if OpenGL 2.0+ @@ -476,6 +486,9 @@ void VideoDialog::saveConfig() // Center window instance().settings().setBool("center", myCenterCheckbox->getState()); + // Fast loading of Supercharger BIOS + instance().settings().setBool("fastscbios", myFastSCBiosCheckbox->getState()); + // TV color texture effect instance().settings().setString("tv_tex", myTexturePopup->getSelectedTag()); @@ -515,6 +528,7 @@ void VideoDialog::setDefaults() myUseVSyncCheckbox->setState(true); myGrabmouseCheckbox->setState(false); myCenterCheckbox->setState(true); + myFastSCBiosCheckbox->setState(false); myTexturePopup->setSelected("off", ""); myBleedPopup->setSelected("off", ""); diff --git a/src/gui/VideoDialog.hxx b/src/gui/VideoDialog.hxx index 23389fef8..ab93b75fe 100644 --- a/src/gui/VideoDialog.hxx +++ b/src/gui/VideoDialog.hxx @@ -73,6 +73,7 @@ class VideoDialog : public Dialog CheckboxWidget* myUseVSyncCheckbox; CheckboxWidget* myCenterCheckbox; CheckboxWidget* myGrabmouseCheckbox; + CheckboxWidget* myFastSCBiosCheckbox; // TV effects options PopUpWidget* myTexturePopup;