GithubHelp home page GithubHelp logo

stella-emu / stella Goto Github PK

View Code? Open in Web Editor NEW
571.0 36.0 106.0 70.55 MB

A multi-platform Atari 2600 Emulator

Home Page: https://stella-emu.github.io

License: GNU General Public License v2.0

Makefile 0.25% C++ 38.94% TeX 0.47% M4 0.20% C 59.55% Objective-C 0.05% Shell 0.01% HTML 0.01% Perl 0.07% Assembly 0.36% Batchfile 0.05% Inno Setup 0.01% Yacc 0.03% Objective-C++ 0.01%
atari2600 atari-2600 atari 2600 emulator emulation emulators

stella's Introduction

Stella is a multi-platform Atari 2600 VCS emulator which allows you to play all of your favourite Atari 2600 games on your PC. You'll find the Stella Users Manual in the docs subdirectory. If you'd like to verify that you have the latest release of Stella, visit the Stella Website at:

stella-emu.github.io

Enjoy,

The Stella Team

Reporting issues

Please check the list of known issues first (see below) before reporting new ones. If you encounter any issues, please open a new issue on the project issue tracker.

Note: Please do not report issues regarding platforms other than PC and RetroN 77 (e.g. Libretro) here. The Stella Team is not responsible for these forks and cannot help with them.

Known issues

Please check out the issue tracker for a list of all currently known issues.

stella's People

Contributors

chrisdwalton avatar dirtyhairy avatar eds-collabora avatar ffontaine avatar g012 avatar h3xx avatar hairy-nonpriv avatar hunterk avatar inactive123 avatar keithbowes avatar lodefmode avatar maddthesane avatar nanochess avatar obbardc avatar orbea avatar polluks avatar sa666666 avatar sergioprado avatar skitt avatar spiceware avatar splendidnut avatar stephenmun avatar thrust26 avatar uhrm avatar webgeek1234 avatar yoshisuga avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

stella's Issues

Jungle Hunt

Crocodiles initially appear with a vertical line in their middle. This is a timing issue: hmove clock supression kicks in and gobbles the last pulse. As crocodiles are composed of two sprites, this leads to an initial displacement of both halves by one pixel. A fix is nontrivial and requires more research as timing is already highly constrained.

Yahtzee dice are jumping vertically

The dice in Yahtzee seem to be drawn at different lines (30 Hz flicker). One set is in the right place, and the other set is moved downwards. This also happens in Stellerator.

Note that the behaviour of this ROM is improved from the old core, where there was a die being drawn to the extreme left. So we have a fix and a regression :)

FrameManager doesn't properly deal with large scanline counts

In the old core, there is code that detects the maximum number of scanlines that can occur per frame, and essentially caps it; this is usually accompanied by completely blanking the screen. A few ROMs depend on having this properly emulated:

hectoByte.zip
In this ROM, it doesn't actually hit vsync at all, but it still runs on real hardware as well as the old core. Note the README that accompanies the ZIP file:

A VCS intro needs neither VSYNC nor proper interrupt vectors

The '342' scanlines you see with the old core are the result of capping (ie, this is maximum number of scanlines that can be shown in PAL mode).

Another related example, I think, is Q-Bert. When you press and hold reset, the scanline count goes very high, and as a result calculates a very low fps. This low fps is then fed into the sound subsystem, where is plays the sound very slowly. This isn't how the old core works; in the old core, these large-scanline frames are not used in the framerate calculation.

Finally, I think Quadrun has a related issue. When you press fire just after starting the ROM, the game should say 'quadrun, quadrun, quadrun'. This is happening with the very latest code, but it is running much too fast.

"The Lightbulb Lightens" ROM also exhibits a problem very similar to hectobyte.

Very minor speed difference

Between the old core and the new core, there is a (very) small speed difference. If you run e.g the title screen of Marble Craze in parallel on both cores (VSync enabled), you will find that pre2 is slightly faster. The difference is a bit more noticeable in the PAL version.

I don't think this is worth a fix, but maybe it can be used as an indicator for other differences.

Marble Craze.zip

RESMP0 problem in Save Mary

The rope is at the left of the crane in the new core, it should be on the right (+3 pixel). The code use RESMP0 to position the rope, so that's most likely the cause of the problem.

Same in Stellarator.

Pole Position: Garbage at left screen edge

Pole position shows garbage at the left edge of the screen. I guess this is related to way 6502.ts is handling the missile and ball render counters during extended hblank.

INPTx registers not working in all cases

The recent addition of the PaddleReader class allows paddle games to work correctly. However, other games that use those inputs are now broken. In particular, ROMs using keypad controller (Alpha Beam with Ernie). Also, Compumate ROMs make extensive use of these registers, and the display isn't even showing up there.

I'm not sure if there's a bug in the PaddleReader class itself, or a difference in how the relevant parts of Stella now interact with the new code (in particular, Keyboard.cxx and CompuMate.cxx). I suspect the latter.

Frostbite ice-pans not forming correctly

In a level where the ice-pans separate (starts at level 4), they are not being positioned correctly. To see what I mean, look at the following snapshots in debug mode.

For the first one, I've paused and taken the snapshot just as the pans touch (which is where they should stop):
frostbite 1983 activision _1

When I unpause, you can see that the pans continue to move together, and form a smaller pan than normal (they overlap, when they should just touch):
frostbite 1983 activision _2

When the pans fully open, you can see that they aren't evenly spaced (there should be 6 small pans, all positioned equal distance from the next one):
frostbite 1983 activision _3

The following two are snapshots from the old core, showing the proper behaviour:
frostbite 1983 activision _4
frostbite 1983 activision _5

P1 and M1 are affected; either one is moving too far to the left, or the other too far to the right (or both!).

Title Match Pro Wrestling - Early RESM0 or wide missiles?

At the scoreboard, part of the left board, which is created by the 3rd copy of an 8 pixel wide missile (6 pixel hidden behind PF) is one pixel to narrow. It seems that the missile is positioned one pixel too far to the left.

The positioning is done with RESM0 ending at cycle 25.

RSYNC

RSYNC is currently not implemented.

Improve TIA WSYNC emulation

The attached test ROM illustrates how it can tell if it was run on an emulator or a real console. Obviously, the emulator should identify as a real console too.
emubug.zip

Cosmic Ark stars width

The stars are all 1 pixel wide, while they are changing width between 0 (invisible), 1 and 2 pixel in the old core (and on real hardware too).

Also check the attached file which uses the same effect but with four objects. In the new core, all dots are 2 pixel wide (which looks very nice ;), while they alternate width (0..2 pixel) in the old one.
StarsEffect.zip

Same in Stellarator.

DK arcade 2600

Homebrew demo

Occasionally displays in PAL instead of NTSC and, if this happens, only one half of the title screen displays propely. Obviously, there is some sensitivity to the initial state here that the old core does not exhibit. Valgrind doesn't show anything, so is likely to be connected to the entropy injected into the initial machine state. Would be interesting to crosscheck with 6502.ts, but DPC(+) is currently not implemented there.

Mega Bitmap Demo

atext

mega bitmap demo 2007 supercat

Improvements are obvious. This is the first time this ROM has ever worked in an emulator.

Profiling and inlining

The 6502.ts core is written with Javascript JIT inlining in mind. The C++ implementation should be profiled and checked for possible performance gains through inlining.

NTSC/PAL autodetection not being properly used

The old NTSC/PAL autodetection isn't used, only the one from the new core. However, the new core autodetection is sometimes mistaking PAL for NTSC and vice-versa. The two need to be integrated, since the old way was working nearly 100%.

YStart display property ignored

Probably a missing feature: The values in YStart have no effect (e.g. see Jammed).

Also, unrelated to the new core: Changing the Height property seems not to work anymore. E.g. see Acid Drop, the height is displayed is displayed as 210 (the same value for all games I checked) but the game displays ~260 lines. Changing the value doesn't change the display.

Jammed (2001) (XYPE) (NTSC).zip

Mole Hunter / Topy

Topy has M1 displayed at the left edge of the screen in order to mask the HMOVE combs. The positioning of M1 depends on the interplay of the HMOVE movement clock and RESM1 and is highy sensitive to the timing of HMOVE. Any error there will result in the line being shifted by one pixel to the right.

RESP1 artifacts in Missile Command

At the bottom of the base P1 is displayed.

There is a RESP1 in this line. The first copy (there is only one) shouldn't show, but it does in the new core and Stellarator.

SaveKey updates delayed in launcher

This bug is not related to the new core.

When you start a game from the Stella launcher and save a new high score on the SaveKey, go back to the launcher and start the same game again, the new high score is not loaded but the previous one. You have to go back to the launcher again and restart the game a 2nd time to get the new high score loaded.

This problem does not happen when you start a game directly (via command line) without the launcher.

Duck Attack

There is a slight displacement of the three tiny droids that count lives. Note that the leftmost droid is cut off in the middle.

Frame rate correction

In 6502.ts, timing is adjusted via cycles / second. In stella, timing is based on frames / second and needs correction for games with unorthodox frame timings.

Match RESMP emulation to real hardware

Currently, RESMP tries to actually center the missile on the player, depending on player width. However, as eshu points out on AtariAge, this does not match the actual behavior of real hardware.

The positioning should be adjusted to precicely match real hardware (once I get my harmony cartridge).

River Raid and Frostbite have 'jumps' in objects

I'm grouping these both together, since they both seem to be the same issue (and if I had to guess, related to player1).

In River Raid, after you play through to the first bridge and pass to the second screen, occasionally the 'house' on the left of the screen will jump horizontally.

In Frostbite, occasionally the ice-pans will jump in a similar fashion. When using debug colours, it is P1 in both cases.

Note that these also occur in 6502.ts.

Yar's Revenge sometimes crashes with "invalid width" exception

Yar's Revenge sometimes fails to start with exception "invalid width" being thrown. Sometimes this is caught in the ROM launcher and displayed, but sometimes the emulator outright crashes. Other times, the ROM starts for a second or two, only to crash a little later. This exception is thrown only in the Player class, so something is screwy there.

Note, this doesn't occur in Stellerator.

Special cases in player retriggering

Andrew Towers' notes describe special cases in retriggering the play sprites that are connected to the state of the start signal decoding logic. These are currently not accounted for by the 6502ts core. More investigation is required for proper emulation.

Colored Wall Demo (PD)

colored wall demo pd

colored wall demo pd _1

Although the results are worse in the new core, they are consistent with real hardware.

CompuMate PAL rom detected as NTSC

I guess we can always force this to be PAL in the properties (once the new core honours using ROM properties), but I think it may be a bug in the new auto-detect code. In particular, the ROM has a scanline count of 324, which definitely means it should be PAL.

Regression in G.I. Joe

I believe the following wasn't an issue in pre2, so it must come from the last few commits. The house on the bottom-left is affected. These snapshots are in debug mode, so the issue can be seen more easily.

The first is from the old core, which I confirmed on real hardware is correct (specifically, the overhang of the roof is only one pixel):
screenshot_20161217_214616

This one is from pre1:
screenshot_20161217_221119

This is from the most current commit (pre2 and later). There is some displacement, the overhang is two pixels, and there is now a hole in the roof:
screenshot_20161217_214636

For some strange reason, it seems the priority is incorrect too (although I can't be sure that's not an issue in the old core; the hole in the roof is the biggest problem).

Road Runner

Road Runner is highly sensitive to the timing details of HMOVE and will show Road Runner smeared over the whole width of the screen if timing is off (basically entering star field mode).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.