mirror of https://github.com/stella-emu/stella.git
Well, that didn't take long; we already need a 2.6.1 release.
Fixed issue where some F6 carts were being autodetected as E7. Updated RIOT timer behaviour yet again; Summer Games was broken. I think I've finally got it now. Made random number generation actually generate random numbers, by seeding the generator based on the current 'ticks'. Updated properties for several AtariVox ROMs. git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@1515 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
1d879fa79a
commit
a45191dbe3
|
@ -13,13 +13,13 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Version.hxx,v 1.38 2008-05-16 12:04:34 stephena Exp $
|
||||
// $Id: Version.hxx,v 1.39 2008-05-16 23:56:21 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef VERSION_HXX
|
||||
#define VERSION_HXX
|
||||
|
||||
#define STELLA_BASE_VERSION "2.6"
|
||||
#define STELLA_BASE_VERSION "2.6.1_pre"
|
||||
|
||||
#ifdef NIGHTLY_BUILD
|
||||
#define STELLA_VERSION STELLA_BASE_VERSION "pre-" NIGHTLY_BUILD
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Cart.cxx,v 1.41 2008-02-27 20:13:55 stephena Exp $
|
||||
// $Id: Cart.cxx,v 1.42 2008-05-16 23:56:21 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <cassert>
|
||||
|
@ -389,36 +389,22 @@ bool Cartridge::isProbablyE0(const uInt8* image, uInt32 size)
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool Cartridge::isProbablyE7(const uInt8* image, uInt32 size)
|
||||
{
|
||||
// E7 carts map their second 1K block of RAM at addresses
|
||||
// $800 to $8FF. However, since this occurs in the upper 2K address
|
||||
// space, and the last 2K in the cart always points to the last 2K of the
|
||||
// ROM image, the RAM area should fall in addresses $3800 to $38FF
|
||||
// Similar to the Superchip cart, we assume this RAM block contains
|
||||
// the same bytes for its entire area
|
||||
// Also, we want to distinguish between ROMs that have large blocks
|
||||
// of the same amount of (probably unused) data by making sure that
|
||||
// something differs in the previous 32 or next 32 bytes
|
||||
uInt8 first = image[0x3800];
|
||||
for(uInt32 i = 0x3800; i < 0x3A00; ++i)
|
||||
// E7 cart bankswitching is triggered by accessing addresses
|
||||
// $FE0 to $FE6 using absolute non-indexed addressing
|
||||
// To eliminate false positives (and speed up processing), we
|
||||
// search for only certain known signatures
|
||||
// Thanks to "stella@casperkitty.com" for this advice
|
||||
// These signatures are attributed to the MESS project
|
||||
uInt8 signature[2][3] = {
|
||||
{ 0x8D, 0xE7, 0xFF }, // STA $FFE7
|
||||
{ 0xAD, 0xE5, 0xFF } // LDA $FFE5
|
||||
};
|
||||
for(uInt32 i = 0; i < 2; ++i)
|
||||
{
|
||||
if(first != image[i])
|
||||
return false;
|
||||
if(searchForBytes(image, size, signature[i], 3, 1))
|
||||
return true;
|
||||
}
|
||||
|
||||
// OK, now scan the surrounding 32 byte blocks
|
||||
uInt32 count1 = 0, count2 = 0;
|
||||
for(uInt32 i = 0x3800 - 32; i < 0x3800; ++i)
|
||||
{
|
||||
if(first != image[i])
|
||||
++count1;
|
||||
}
|
||||
for(uInt32 i = 0x3A00; i < 0x3A00 + 32; ++i)
|
||||
{
|
||||
if(first != image[i])
|
||||
++count2;
|
||||
}
|
||||
|
||||
return (count1 > 0 || count2 > 0);
|
||||
return false;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
regenerated and the application recompiled.
|
||||
*/
|
||||
|
||||
#define DEF_PROPS_SIZE 2979
|
||||
#define DEF_PROPS_SIZE 2981
|
||||
|
||||
static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
||||
{ "000509d1ed2b8d30a9d94be1b3b5febb", "Greg Zumwalt", "", "Jungle Jane (2003) (Greg Zumwalt) (Hack)", "Hack of Pitfall!", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -520,7 +520,6 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
|||
{ "2b27eb194e13f3b38d23c879cc1e3abf", "Quelle", "402.272 9", "Super-Ferrari (1983) (Quelle) (PAL)", "AKA Enduro", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "2b42da79a682ed6e2d735facbf70107e", "", "", "DKjr Improved (Hack)", "Hack of Donkey Kong Jr.", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "2b430c00dc79e495762ac59b2f9b4fcd", "Activision, David Crane", "AX-018, AX-018-04", "Pitfall! (1982) (Activision) (Prototype)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "2b6f831ff8bca32d6ecc5a0964100bca", "Spiceware", "SW-01", "Medieval Mayhem (PAL)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "", "" },
|
||||
{ "2b71a59a53be5883399917bf582b7772", "Greg Troutman", "", "Dark Mage (final beta) (Greg Troutman) (PD)", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "2ba02f509a4991aa176ba8d9e540df3d", "Atari, Mark R. Hahn", "CX2678", "Dukes of Hazzard (1983) (Atari) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "2bb9f4686f7e08c5fcc69ec1a1c66fe7", "Atari - GCC, Mike Feinstein, John Allred", "CX2688", "Jungle Hunt (1983) (Atari)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -539,6 +538,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
|||
{ "2c8835aed7f52a0da9ade5226ee5aa75", "Arcadia Corporation, Stephen Harland Landrum", "AR-4101", "Communist Mutants from Space (1982) (Arcadia)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "2c8c11295d8613f875b7bcf5253ab9bb", "Fabrizio Zavagli", "", "Kool Aid Man (PAL Conversion) (16-11-2002) (Fabrizio Zavagli) (PAL60)", "PAL60 Conversion", "Homebrew", "", "", "", "", "", "", "", "", "", "PAL60", "", "", "", "", "" },
|
||||
{ "2c9fadd510509cc7f28f1ccba931855f", "", "", "Hangman Invader Biglist1 (Hack)", "Hack of Hangman", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "2ca6445204ffb7686ddee3e33ba64d5b", "Alex Herbert", "", "AtariVox Test ROM", "Uses the AtariVox controller", "", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "", "" },
|
||||
{ "2cb42cf62b2f25f59f909b5447821b14", "Atari, Christopher H. Omarzu", "CX26104", "Big Bird's Egg Catch (1983) (Atari) (PAL) [a]", "Uses Kids/Keypad Controllers", "", "", "", "", "", "", "", "KEYBOARD", "KEYBOARD", "", "", "", "250", "", "", "" },
|
||||
{ "2cccc079c15e9af94246f867ffc7e9bf", "PlayAround", "203", "Jungle Fever (1982) (PlayAround)", "", "", "", "", "", "", "", "", "", "", "", "", "24", "", "YES", "", "" },
|
||||
{ "2cefa695df2ed020899a7df7bb1e3a95", "Manuel Polik, Fabrizio Zavagli", "", "A-Team (2002) (Manuel Polik) (Hack)", "Hack of A-Team", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -778,6 +778,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
|||
{ "3fe43915e5655cf69485364e9f464097", "CCE", "C-863", "Fisher Price (1983) (CCE)", "AKA Skindiver", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "3ff5165378213dab531ffa4f1a41ae45", "Quelle", "311377", "Pygmy (1983) (Quelle) (PAL)", "AKA Lock 'n' Chase", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "402b1ca3c230a60fb279d4a2a10fa677", "", "", "3-D Tic-Tac-Toe (Unknown) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "62", "", "", "", "" },
|
||||
{ "402d876ec4a73f9e3133f8f7f7992a1e", "Alex Herbert", "", "Man Goes Down (2006) (A. Herbert) (Prototype)", "Uses AtariVox controller", "Homebrew", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "", "" },
|
||||
{ "405f8591b6941cff56c9b392c2d5e4e5", "Telegames", "", "Star Strike (1989) (Telegames) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "4066309eb3fa3e7a725585b9814bc375", "", "", "Multi Ball Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "4066d7d88ec4a2c656127a67fa52dcf1", "", "", "Overhead Adventure Demo 2 (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "64", "", "", "", "" },
|
||||
|
@ -888,7 +889,6 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
|||
{ "4a1a0509bfc1015273a542dfe2040958", "Atari", "CX2628 / 6699842 / 4975117", "Bowling (1978) (Atari) [b1]", "", "Common", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "4a2fe6f0f6317f006fd6d4b34515448b", "", "", "Warring Worms (Midwest Classic Edition) (08-06-2002) (Billy Eno)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "4a45c6d75b1ba131f94a9c13194d8e46", "", "", "How to Draw a Playfield II (Joystick Hack) (1997) (Eric Bacher) (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "4a5a2a33ccaf2f0c7ff6b60b9e1a0791", "Spiceware", "SW-01", "Medieval Mayhem (NTSC)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "", "" },
|
||||
{ "4a6be79310f86f0bebc7dfcba4d74161", "", "", "Demolition Herby (Unknown) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "4a7eee19c2dfb6aeb4d9d0a01d37e127", "Hozer Video Games", "", "Crazy Valet (Hozer Video Games)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "4ab4af3adcdae8cdacc3d06084fc8d6a", "Nick Bensema", "", "Sucky Zepplin (Nick Bensema) (PD)", "", "New Release", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -1523,7 +1523,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
|||
{ "8055b9c2622136fd91edfea6df642daf", "Activision", "", "Unknown Activision Game #1 (1983) (Activision) (Prototype) (PAL)", "", "Prototype", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "805f9a32ef97ac25f999a25014dc5c23", "SnailSoft", "", "Balthazar (SnailSoft)", "AKA Babylon 5", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "8068e07b484dfd661158b3771d6621ca", "Epyx, Steven A. Baker, Peter Engelbrite", "80561-00286", "California Games (1988) (Epyx) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "807a8ff6216b00d52aba2dfea5d8d860", "John Payson", "", "Strat-O-Gems Deluxe", "", "Homebrew", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "807a8ff6216b00d52aba2dfea5d8d860", "John Payson", "", "Strat-O-Gems Deluxe (2005) (J. Payson)", "Uses the AtariVox controller", "Homebrew", "", "", "", "", "", "", "", "ATARIVOX", "", "", "", "", "", "", "" },
|
||||
{ "808c3b1e60ee0e7c65205fa4bd772221", "CCE", "", "Defender (CCE)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "80cd42881e670e4b74a9ccd10d0d7b2e", "20th Century Fox Video Games - Sirius, Ed Hodapp", "11004", "Deadly Duck (1982) (20th Century Fox) [a]", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "80cec82239913cb8c4016eb13749de44", "David Marli", "", "Invaders from Space by David Marli (Space Invaders Hack)", "Hack of Space Invaders (Atari)", "New Release (Hack)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -2387,6 +2387,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
|||
{ "cff1e9170bdbc29859b815203edf18fa", "Retroactive", "", "Push (V0.01) (1998) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "cff578e5c60de8caecbee7f2c9bbb57b", "George Veeder", "", "Suicide Adventure (George Veeder) (Hack)", "Hack of Adventure", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "cff9950d4e650094f65f40d179a9882d", "Paul Slocum", "", "Mr. Roboto (Paul Slocum) (Hack)", "Hack of Berzerk", "Hack", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "d00f6f8ba89559e4b20972a478fc0370", "Spiceware", "SW-01", "Medieval Mayhem (PAL)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "", "" },
|
||||
{ "d010e3dfe7366e47561c088079a59439", "Retroactive", "", "Qb (V0.10) (Stella) (2001) (Retroactive)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "YES", "", "" },
|
||||
{ "d026716b3c5be2c951cc4c064317c524", "", "", "Fu Kung! (V0.06) (14-01-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "d0498baca989e792db4b8270a02b9624", "", "", "Pac Ghost Sprite Demo (PD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
@ -2884,6 +2885,7 @@ static const char* DefProps[DEF_PROPS_SIZE][21] = {
|
|||
{ "f7d6592dcb773c81c278140ed4d01669", "Activision, David Crane, Dan Kitchen", "EAG-108-04, EAZ-108-04B", "Ghostbusters (1985) (Activision) (PAL)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "f7e07080ed8396b68f2e5788a5c245e2", "Video Game Cartridge - Ariola", "TP-617", "Farmyard Fun (Ariola)", "", "", "", "", "", "", "", "", "", "", "", "", "33", "217", "", "", "" },
|
||||
{ "f7f50d9c9d28bcc9f7d3075668b7ac89", "Activision, David Crane - Ariola", "EAG-008, PAG-008, EAG-008-04I - 711 008-720", "Laser Blast (1981) (Activision) (PAL) (4K)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "f7fac15cf54b55c5597718b6742dbec2", "Spiceware", "SW-01", "Medieval Mayhem (NTSC)", "", "Homebrew", "STEREO", "", "", "", "", "", "PADDLES", "PADDLES", "", "", "", "", "", "", "" },
|
||||
{ "f802fa61011dd9eb6f80b271bac479d0", "Suntek", "SS-023", "Mole Hunter (Suntek) (PAL)", "AKA Topy", "", "", "", "", "", "", "", "", "", "", "", "60", "", "", "", "" },
|
||||
{ "f80cf77164079d774b9b0fae33dffca9", "", "", "Fu Kung! (V0.15) (Negative Version) (05-02-2003) (AD)", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
{ "f8240e62d8c0a64a61e19388414e3104", "Activision, Steve Cartwright", "AX-013", "Barnstorming (1982) (Activision)", "", "Uncommon", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "" },
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: M6532.cxx,v 1.24 2008-05-06 16:39:11 stephena Exp $
|
||||
// $Id: M6532.cxx,v 1.25 2008-05-16 23:56:30 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <assert.h>
|
||||
|
@ -52,8 +52,10 @@ void M6532::reset()
|
|||
{
|
||||
class Random random;
|
||||
|
||||
myTimer = 25 + (random.next() % 75);
|
||||
myIntervalShift = 6;
|
||||
// The timer absolutely cannot be initialized to zero; some games will
|
||||
// loop or hang (notably Solaris and H.E.R.O.)
|
||||
myTimer = (0xff - (random.next() % 0xfe)) << 10;
|
||||
myIntervalShift = 10;
|
||||
myCyclesWhenTimerSet = 0;
|
||||
myInterruptEnabled = false;
|
||||
myInterruptTriggered = false;
|
||||
|
@ -176,16 +178,9 @@ uInt8 M6532::peek(uInt16 addr)
|
|||
|
||||
// According to the M6532 documentation, the timer continues to count
|
||||
// down to -255 timer clocks after wraparound. However, it isn't
|
||||
// entirely clear what happens *after* if reaches -255. If we go
|
||||
// to zero at that time, Solaris fails to load correctly.
|
||||
// However, if the count goes on forever, HERO fails to load
|
||||
// correctly.
|
||||
// So we use the approach of z26, and let the counter continue
|
||||
// downward (after wraparound) for the maximum number of clocks
|
||||
// (256 * 1024) = 0x40000. I suspect this is a hack that works
|
||||
// for all the ROMs we've tested; it would be nice to determine
|
||||
// what really happens in hardware.
|
||||
return (uInt8)(timer >= -0x40000 ? timer : 0);
|
||||
// entirely clear what happens *after* if reaches -255.
|
||||
// For now, we'll set it to 0.
|
||||
return (uInt8)(timer >= -255 ? timer : 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -237,14 +232,14 @@ void M6532::poke(uInt16 addr, uInt8 value)
|
|||
case 0: // Port A I/O Register (Joystick)
|
||||
{
|
||||
myOutA = value;
|
||||
setOutputState();
|
||||
setPinState();
|
||||
break;
|
||||
}
|
||||
|
||||
case 1: // Port A Data Direction Register
|
||||
{
|
||||
myDDRA = value;
|
||||
setOutputState();
|
||||
setPinState();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -267,14 +262,14 @@ void M6532::setTimerRegister(uInt8 value, uInt8 interval)
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void M6532::setOutputState()
|
||||
void M6532::setPinState()
|
||||
{
|
||||
/*
|
||||
When a bit in the DDR is set as input, +5V is placed on its output
|
||||
pin. When it's set as output, either +5V or 0V (depending on the
|
||||
contents of SWCHA) will be placed on the output pin.
|
||||
The standard macros for the AtariVox use this fact to send data
|
||||
to the port. This is represented by the following algorithm:
|
||||
The standard macros for the AtariVox and SaveKey use this fact to
|
||||
send data to the port. This is represented by the following algorithm:
|
||||
|
||||
if(DDR bit is input) set output as 1
|
||||
else if(DDR bit is output) set output as bit in ORA
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: M6532.hxx,v 1.13 2008-05-06 16:39:11 stephena Exp $
|
||||
// $Id: M6532.hxx,v 1.14 2008-05-16 23:56:30 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef M6532_HXX
|
||||
|
@ -32,7 +32,7 @@ class Deserializer;
|
|||
RIOT
|
||||
|
||||
@author Bradford W. Mott
|
||||
@version $Id: M6532.hxx,v 1.13 2008-05-06 16:39:11 stephena Exp $
|
||||
@version $Id: M6532.hxx,v 1.14 2008-05-16 23:56:30 stephena Exp $
|
||||
*/
|
||||
class M6532 : public Device
|
||||
{
|
||||
|
@ -131,7 +131,7 @@ class M6532 : public Device
|
|||
{ return myTimer - (mySystem->cycles() - myCyclesWhenTimerSet); }
|
||||
|
||||
void setTimerRegister(uInt8 data, uInt8 interval);
|
||||
void setOutputState();
|
||||
void setPinState();
|
||||
|
||||
private:
|
||||
// Reference to the console
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystem.cxx,v 1.124 2008-04-14 15:12:55 stephena Exp $
|
||||
// $Id: OSystem.cxx,v 1.125 2008-05-16 23:56:30 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <cassert>
|
||||
|
@ -57,6 +57,7 @@
|
|||
#include "ConsoleFont.hxx"
|
||||
#include "Widget.hxx"
|
||||
#include "Console.hxx"
|
||||
#include "Random.hxx"
|
||||
#include "StateManager.hxx"
|
||||
|
||||
#include "OSystem.hxx"
|
||||
|
@ -229,6 +230,9 @@ bool OSystem::create()
|
|||
mySerialPort = new SerialPort();
|
||||
#endif
|
||||
|
||||
// Let the random class know about us; it needs access to getTicks()
|
||||
Random::setSystem(this);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystem.hxx,v 1.64 2008-03-31 00:59:30 stephena Exp $
|
||||
// $Id: OSystem.hxx,v 1.65 2008-05-16 23:56:30 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef OSYSTEM_HXX
|
||||
|
@ -56,7 +56,7 @@ typedef Common::Array<Resolution> ResolutionList;
|
|||
other objects belong.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: OSystem.hxx,v 1.64 2008-03-31 00:59:30 stephena Exp $
|
||||
@version $Id: OSystem.hxx,v 1.65 2008-05-16 23:56:30 stephena Exp $
|
||||
*/
|
||||
class OSystem
|
||||
{
|
||||
|
@ -379,7 +379,7 @@ class OSystem
|
|||
|
||||
@return Current time in microseconds.
|
||||
*/
|
||||
virtual uInt32 getTicks() = 0;
|
||||
virtual uInt32 getTicks() const = 0;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// The following methods are system-specific and can be overrided in
|
||||
|
|
|
@ -13,30 +13,20 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Random.cxx,v 1.5 2008-02-06 13:45:22 stephena Exp $
|
||||
// $Id: Random.cxx,v 1.6 2008-05-16 23:56:30 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <time.h>
|
||||
#include "OSystem.hxx"
|
||||
#include "Random.hxx"
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void Random::seed(uInt32 value)
|
||||
{
|
||||
ourSeed = value;
|
||||
ourSeeded = true;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
Random::Random()
|
||||
{
|
||||
// If we haven't been seeded then seed ourself
|
||||
if(!ourSeeded)
|
||||
{
|
||||
ourSeed = (uInt32)time(0);
|
||||
ourSeeded = true;
|
||||
}
|
||||
|
||||
myValue = ourSeed;
|
||||
if(ourSystem)
|
||||
myValue = ourSystem->getTicks();
|
||||
else
|
||||
myValue = (uInt32)time(0);
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
@ -46,8 +36,4 @@ uInt32 Random::next()
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
uInt32 Random::ourSeed = 0;
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
bool Random::ourSeeded = false;
|
||||
|
||||
const OSystem* Random::ourSystem = NULL;
|
||||
|
|
|
@ -13,12 +13,14 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: Random.hxx,v 1.5 2008-02-06 13:45:22 stephena Exp $
|
||||
// $Id: Random.hxx,v 1.6 2008-05-16 23:56:30 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef RANDOM_HXX
|
||||
#define RANDOM_HXX
|
||||
|
||||
class OSystem;
|
||||
|
||||
#include "bspf.hxx"
|
||||
|
||||
/**
|
||||
|
@ -27,19 +29,10 @@
|
|||
linear congruential generator.
|
||||
|
||||
@author Bradford W. Mott
|
||||
@version $Id: Random.hxx,v 1.5 2008-02-06 13:45:22 stephena Exp $
|
||||
@version $Id: Random.hxx,v 1.6 2008-05-16 23:56:30 stephena Exp $
|
||||
*/
|
||||
class Random
|
||||
{
|
||||
public:
|
||||
/**
|
||||
Class method which allows you to set the seed that'll be used
|
||||
for created new instances of this class
|
||||
|
||||
@param value The value to seed the random number generator with
|
||||
*/
|
||||
static void seed(uInt32 value);
|
||||
|
||||
public:
|
||||
/**
|
||||
Create a new random number generator
|
||||
|
@ -54,16 +47,22 @@ class Random
|
|||
*/
|
||||
uInt32 next();
|
||||
|
||||
/**
|
||||
Class method which sets the OSystem in use; the constructor will
|
||||
use this to reseed the random number generator every time a new
|
||||
instance is created
|
||||
|
||||
@param system The system currently in use
|
||||
*/
|
||||
static void setSystem(const OSystem* system) { ourSystem = system; }
|
||||
|
||||
private:
|
||||
// Indicates the next random number
|
||||
uInt32 myValue;
|
||||
|
||||
private:
|
||||
// Seed to use for creating new random number generators
|
||||
static uInt32 ourSeed;
|
||||
|
||||
// Indicates if seed has been set or not
|
||||
static bool ourSeeded;
|
||||
// Set the OSystem we're using
|
||||
static const OSystem* ourSystem;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3092,7 +3092,7 @@
|
|||
"Display.Phosphor" "YES"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "2b6f831ff8bca32d6ecc5a0964100bca"
|
||||
"Cartridge.MD5" "d00f6f8ba89559e4b20972a478fc0370"
|
||||
"Cartridge.Manufacturer" "Spiceware"
|
||||
"Cartridge.ModelNo" "SW-01"
|
||||
"Cartridge.Name" "Medieval Mayhem (PAL)"
|
||||
|
@ -3335,7 +3335,7 @@
|
|||
"Cartridge.Name" "Star Voyager (1983) (CCE) [a]"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "4a5a2a33ccaf2f0c7ff6b60b9e1a0791"
|
||||
"Cartridge.MD5" "f7fac15cf54b55c5597718b6742dbec2"
|
||||
"Cartridge.Manufacturer" "Spiceware"
|
||||
"Cartridge.ModelNo" "SW-01"
|
||||
"Cartridge.Name" "Medieval Mayhem (NTSC)"
|
||||
|
@ -9061,8 +9061,10 @@
|
|||
|
||||
"Cartridge.MD5" "807a8ff6216b00d52aba2dfea5d8d860"
|
||||
"Cartridge.Manufacturer" "John Payson"
|
||||
"Cartridge.Name" "Strat-O-Gems Deluxe"
|
||||
"Cartridge.Name" "Strat-O-Gems Deluxe (2005) (J. Payson)"
|
||||
"Cartridge.Note" "Uses the AtariVox controller"
|
||||
"Cartridge.Rarity" "Homebrew"
|
||||
"Controller.Right" "ATARIVOX"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "8c8a26ed57870daba8e13162d497bad1"
|
||||
|
@ -17813,3 +17815,18 @@
|
|||
"Cartridge.Name" "Unknown Activision Game #1 (1983) (Activision) (Prototype) (PAL)"
|
||||
"Cartridge.Rarity" "Prototype"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "402d876ec4a73f9e3133f8f7f7992a1e"
|
||||
"Cartridge.Manufacturer" "Alex Herbert"
|
||||
"Cartridge.Name" "Man Goes Down (2006) (A. Herbert) (Prototype)"
|
||||
"Cartridge.Note" "Uses AtariVox controller"
|
||||
"Cartridge.Rarity" "Homebrew"
|
||||
"Controller.Right" "ATARIVOX"
|
||||
""
|
||||
|
||||
"Cartridge.MD5" "2ca6445204ffb7686ddee3e33ba64d5b"
|
||||
"Cartridge.Manufacturer" "Alex Herbert"
|
||||
"Cartridge.Name" "AtariVox Test ROM"
|
||||
"Cartridge.Note" "Uses the AtariVox controller"
|
||||
"Controller.Right" "ATARIVOX"
|
||||
""
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemGP2X.cxx,v 1.29 2008-02-20 00:17:49 stephena Exp $
|
||||
// $Id: OSystemGP2X.cxx,v 1.30 2008-05-16 23:56:31 stephena Exp $
|
||||
// Modified on 2006/01/06 by Alex Zaballa for use on GP2X
|
||||
//============================================================================
|
||||
|
||||
|
@ -74,7 +74,7 @@ OSystemGP2X::~OSystemGP2X()
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
uInt32 OSystemGP2X::getTicks()
|
||||
uInt32 OSystemGP2X::getTicks() const
|
||||
{
|
||||
#ifdef HAVE_GETTIMEOFDAY
|
||||
timeval now;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemGP2X.hxx,v 1.12 2008-02-20 00:17:49 stephena Exp $
|
||||
// $Id: OSystemGP2X.hxx,v 1.13 2008-05-16 23:56:31 stephena Exp $
|
||||
// Modified by Alex Zaballa on 2006/01/04 for use on GP2X
|
||||
//============================================================================
|
||||
|
||||
|
@ -45,7 +45,7 @@ class OSystemGP2X : public OSystem
|
|||
|
||||
@return Current time in microseconds.
|
||||
*/
|
||||
uInt32 getTicks();
|
||||
uInt32 getTicks() const;
|
||||
|
||||
/**
|
||||
This method queries the dimensions of the screen for this hardware.
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemMACOSX.cxx,v 1.18 2008-02-06 13:45:24 stephena Exp $
|
||||
// $Id: OSystemMACOSX.cxx,v 1.19 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <cstdlib>
|
||||
|
@ -103,7 +103,7 @@ OSystemMACOSX::~OSystemMACOSX()
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
uInt32 OSystemMACOSX::getTicks()
|
||||
uInt32 OSystemMACOSX::getTicks() const
|
||||
{
|
||||
#ifdef HAVE_GETTIMEOFDAY
|
||||
timeval now;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemMACOSX.hxx,v 1.11 2008-02-06 13:45:24 stephena Exp $
|
||||
// $Id: OSystemMACOSX.hxx,v 1.12 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef OSYSTEM_MACOSX_HXX
|
||||
|
@ -26,7 +26,7 @@
|
|||
This class defines UNIX-like OS's (Linux) system specific settings.
|
||||
|
||||
@author Mark Grebe
|
||||
@version $Id: OSystemMACOSX.hxx,v 1.11 2008-02-06 13:45:24 stephena Exp $
|
||||
@version $Id: OSystemMACOSX.hxx,v 1.12 2008-05-16 23:56:31 stephena Exp $
|
||||
*/
|
||||
class OSystemMACOSX : public OSystem
|
||||
{
|
||||
|
@ -47,7 +47,7 @@ class OSystemMACOSX : public OSystem
|
|||
|
||||
@return Current time in microseconds.
|
||||
*/
|
||||
virtual uInt32 getTicks();
|
||||
virtual uInt32 getTicks() const;
|
||||
|
||||
/**
|
||||
This method queries the dimensions of the screen for this hardware.
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemUNIX.cxx,v 1.28 2008-02-06 13:45:24 stephena Exp $
|
||||
// $Id: OSystemUNIX.cxx,v 1.29 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <cstdlib>
|
||||
|
@ -58,7 +58,7 @@ OSystemUNIX::~OSystemUNIX()
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
uInt32 OSystemUNIX::getTicks()
|
||||
uInt32 OSystemUNIX::getTicks() const
|
||||
{
|
||||
#ifdef HAVE_GETTIMEOFDAY
|
||||
timeval now;
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemUNIX.hxx,v 1.17 2008-02-06 13:45:24 stephena Exp $
|
||||
// $Id: OSystemUNIX.hxx,v 1.18 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef OSYSTEM_UNIX_HXX
|
||||
|
@ -25,7 +25,7 @@
|
|||
This class defines UNIX-like OS's (Linux) system specific settings.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: OSystemUNIX.hxx,v 1.17 2008-02-06 13:45:24 stephena Exp $
|
||||
@version $Id: OSystemUNIX.hxx,v 1.18 2008-05-16 23:56:31 stephena Exp $
|
||||
*/
|
||||
class OSystemUNIX : public OSystem
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ class OSystemUNIX : public OSystem
|
|||
|
||||
@return Current time in microseconds.
|
||||
*/
|
||||
uInt32 getTicks();
|
||||
uInt32 getTicks() const;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemWin32.cxx,v 1.24 2008-04-26 16:51:13 stephena Exp $
|
||||
// $Id: OSystemWin32.cxx,v 1.25 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <sstream>
|
||||
|
@ -77,7 +77,7 @@ OSystemWin32::~OSystemWin32()
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
uInt32 OSystemWin32::getTicks()
|
||||
uInt32 OSystemWin32::getTicks() const
|
||||
{
|
||||
return (uInt32) SDL_GetTicks() * 1000;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
// See the file "license" for information on usage and redistribution of
|
||||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// $Id: OSystemWin32.hxx,v 1.13 2008-04-26 16:51:13 stephena Exp $
|
||||
// $Id: OSystemWin32.hxx,v 1.14 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef OSYSTEM_WIN32_HXX
|
||||
|
@ -27,7 +27,7 @@
|
|||
This class defines Windows system specific settings.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: OSystemWin32.hxx,v 1.13 2008-04-26 16:51:13 stephena Exp $
|
||||
@version $Id: OSystemWin32.hxx,v 1.14 2008-05-16 23:56:31 stephena Exp $
|
||||
*/
|
||||
class OSystemWin32 : public OSystem
|
||||
{
|
||||
|
@ -48,7 +48,7 @@ class OSystemWin32 : public OSystem
|
|||
|
||||
@return Current time in microseconds.
|
||||
*/
|
||||
virtual uInt32 getTicks();
|
||||
virtual uInt32 getTicks() const;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// Windows CE Port by Kostas Nakos
|
||||
// $Id: OSystemWinCE.cxx,v 1.13 2008-02-06 13:45:24 stephena Exp $
|
||||
// $Id: OSystemWinCE.cxx,v 1.14 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <sstream>
|
||||
|
@ -103,7 +103,7 @@ void OSystemWinCE::mainLoop()
|
|||
}
|
||||
}
|
||||
|
||||
uInt32 OSystemWinCE::getTicks(void)
|
||||
uInt32 OSystemWinCE::getTicks(void) const
|
||||
{
|
||||
return GetTickCount();
|
||||
}
|
||||
|
@ -128,4 +128,4 @@ void OSystemWinCE::getScreenDimensions(int& width, int& height)
|
|||
width = 220;
|
||||
height = 176;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
// this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
||||
//
|
||||
// Windows CE Port by Kostas Nakos
|
||||
// $Id: OSystemWinCE.hxx,v 1.10 2008-02-06 13:45:24 stephena Exp $
|
||||
// $Id: OSystemWinCE.hxx,v 1.11 2008-05-16 23:56:31 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef OSYSTEM_WINCE_HXX
|
||||
|
@ -31,7 +31,7 @@ class OSystemWinCE : public OSystem
|
|||
|
||||
public:
|
||||
virtual void mainLoop();
|
||||
virtual uInt32 getTicks(void);
|
||||
virtual uInt32 getTicks(void) const;
|
||||
virtual void setFramerate(uInt32 framerate);
|
||||
virtual void getScreenDimensions(int& width, int& height);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue