diff --git a/stella/CyberstellaTodo.txt b/stella/CyberstellaTodo.txt deleted file mode 100644 index 0bb257ccf..000000000 --- a/stella/CyberstellaTodo.txt +++ /dev/null @@ -1,90 +0,0 @@ -What needs to be done ASAP (will be done eventually): - - - More Columns / Advanced sorting - - Make whole screen resizable - like this: - - void CViewList::OnSize(UINT nType, int cx, int cy) - { - CFormView::OnSize(nType, cx, cy); - if ( m_listCtrl.m_hWnd ) m_listCtrl.MoveWindow (0, 0, cx, cy); - } - ??????? - - Add Fullscreen / Windowed mode - Alt-Enter - - Check Direct Draw implementation / upgrade to DX8 - - Improve the DirectSound support - - Can you have two PC controllers connected? - - Make all dialog boxes resizable for any size text - -Integrated into the core, but not necessarily active in Cyberstella: - - - Check other versions command line params - - Check other versions keyboard mapping - - Add Screenshots - F12 - - Add Pause - Pause - - Is the keyboard mapping correct (e.g., do both of the Joysticks - work via the keyboard) - - Provide custom keyboard / controller mapping (e.g., be able to - map joystick buttons to the 2600 Select/Reset as well as the - other 2600 functions...) - -Future / never (depending on user enthusiasm and developer availability): - - - Add a Sprite/Animation Editor - - Add a PF Editor - - Add a Sourcecode Editor - - Either Support DASM as frontend or integrate a 6507 Assembler - - Either Support Distella as frontend or integrate a 6507 Disassembler - - AVI/MPEG export - - WAV/MP3 export - - Client/Server networked play for up to 4 Computers via LAN/Internet - - Tracking Hiscores - - Record and Playback games - not as real movie, but by logging - Input/RAM/processor states in given intervals. - - Cheatcodes - - Improve frontend by adding snapshots, labels, manuals, etc. - Like KStella for Linux. (Suggestion from Brian Luttrull) - -Suggestions from Glenn Saunders: -A couple things I'd like to see in a 2600 emulator that Brad was working on -in ActiveStella are scanline emulation and better controller mapping. - -Scanline emulation is pretty easy. You just use a 256 color palette where -the scanline emulation lines are half the brightness as the regular palette -items the 2600 uses. I think with scanline emulation it looks a lot more -authentic and less sterile. That's what they did with Atari Arcade Hits. - -Brad should have some of that code already. Maybe he'll give the code to -you. - -As for controller mapping, are you using Direct Input at all? With Direct -Input you'd be able to support anything the OS does rather than, let's say, -directly polling the mouse port or the joystick port and expecting -something to be there. A lot of people (myself included) use USB -peripherals. Via a USB hub it might be possible to, for instance, connect -4 trackballs at once to use as paddles for Warlords. So Direct Input -automatically polls the system for controllers so you just ask Direct Input -what's available. You don't have to hardcode anything in there. You get -an inventory of what the system has, and from that you can present various -mapping choices. - -P.S. The coolest part of ActiveStella, of course, was it being an ActiveX -control. So the GUI is not built into it. You could put it on a webpage -and drive it with Javascript or put it into a Director projector file or -write a skinnable UI container. It supported both a windowed and -fullscreen mode. Brad never got ActiveStella running stable. This was the -time when DirectX was in a lot of transition as well as operating systems -(98->2000). I think it's a little easier to write stable code that works -on XP/2000/Me these days. - -He was also talking about a way to hook a scripting language into the -emulator that you could use almost like a software logic analyzer. You -could configure the script to trigger on certain events, like accesses to -various memory locations. This would have a lot of uses for debugging, of -course, but also provide the foundation for high score saving. If you knew -where the score was stored in each game, and where the level byte was, and -you knew the state of the machine when the game ends, then you could -trigger script that plucks the score out to save it into a global high -score table. At the time we were discussing it we were concerned that this -might slow the emulator down too much but today I think it wouldn't be an -issue. I'd really like to see this happen... \ No newline at end of file diff --git a/stella/Todo.txt b/stella/Todo.txt index 209b60ba9..b943ef88b 100644 --- a/stella/Todo.txt +++ b/stella/Todo.txt @@ -9,12 +9,14 @@ SSSS ttt eeeee llll llll aaaaa =============================================================================== - To Do List - October 2, 1998 + To Do List - November 25, 2003 =============================================================================== If you would like to contribute to Stella's development then find something on the list below and send email to Bradford Mott at bwmott@acm.org. +For all ports: + * Provide suggestions for improving Stella * Provide suggestions for improving the Stella User's Manual @@ -22,18 +24,41 @@ on the list below and send email to Bradford Mott at bwmott@acm.org. * Port Stella to other operating systems: - Atari ST/TT/Falcon - - Mac (680x0) + - Mac (680x0, PowerPC) - Others... - * Port the OSS stella-sound program, for Linux, to other versions of Unix - - * Add a built-in game menu to the DOS version of Stella - - * Find out if the Pro Audio Spectrum sound card is supported by the - DOS version of Stella (if not then add support for this card) - - * Add support for real Atari controllers to the DOS version of Stella - (this will involve hardware as well as software) - * Add a debugger to Stella for game developers + +For the Windows port of Stella (Cyberstella): + + * More Columns / Advanced sorting for the GUI + + * Make all dialog boxes resizable for any size text + + * Improve the DirectSound support + + * Add Fullscreen / Windowed mode - Alt-Enter + + * Add a Direct3D version, so we have alpha-blending, hardware stretch, etc. + + * Add commandline options that were in StellaX + + * Add Screenshots in PNG format - F12 + + * The following features depend on developer availability + + - Add a Sprite/Animation Editor + - Add a PF Editor + - Add a Sourcecode Editor + - Either Support DASM as frontend or integrate a 6507 Assembler + - Either Support Distella as frontend or integrate a 6507 Disassembler + - AVI/MPEG export + - WAV/MP3 export + - Client/Server networked play for up to 4 Computers via LAN/Internet + - Tracking Hiscores + - Record and Playback games - not as real movie, but by logging + Input/RAM/processor states in given intervals. + - Cheatcodes + - Improve frontend by adding snapshots, labels, manuals, etc. + Like KStella for Linux. (Suggestion from Brian Luttrull) diff --git a/stella/docs/stella.html b/stella/docs/stella.html index 55610db80..a11000ae1 100644 --- a/stella/docs/stella.html +++ b/stella/docs/stella.html @@ -335,7 +335,7 @@

-

Linux

+

Linux/UNIX

The Linux version of Stella is designed to work on a Linux Workstation with the following:

@@ -343,36 +343,18 @@ -

-

Unix

- -

The Unix version of Stella is designed to work on a Unix Workstation with - the following:

- - - -

3. Installation

@@ -421,65 +403,57 @@

Linux

-

The Linux versions of Stella are distributed as a compressed tar file - containing the Linux executables as well as some other files. If these - pre-built executables do not seem to work on your system then download the - Unix source code distribution and build your own executables. You should - install the distribution as follows:

+

The Linux versions of Stella are distributed in both executable and source code + form, and in compressed tar files as well as (S)RPM's. -

    +

    If you're using the executables from a compressed tar file, follow these instructions: +

+ -

If you have a joystick driver installed, such as joystick-1.2.13.tar.gz, - you can play games using joysticks. For additional information about the Linux - joystick driver see the following web site: - - Linux Input Drivers.

- -

-

Unix

- -

The Unix version of Stella is distributed as a compressed tar file - containing the C++ source code as well as some other files. The source code - can be compiled under most Unix operating systems as well as DOS. The most recent - Unix code was developed with the GNU C++ compiler version 3.2, however, it should - compile with other C++ compilers. The DOS port was developed with DJGPP using - GNU C++ version 3.0.4. You should install the distribution as follows:

- -
    +

    If you're compiling the source from a compressed tar file, follow these instructions: +

+ + +

If you're using the binary RPM's or source SRPM's, consult your distribution on + how to proceed.

+ +

If you have a supported joystick and driver installed, + you can play games using joysticks. For additional information about the Linux + joystick driver see the following web site: + + Linux Input Drivers.

Currently, sound is supported using the ALSA v0.9 API (-sound alsa), the Open Sound - System or OSS emulation under ALSA (-sound oss), or SDL (-sound sdl). As of this time, - the X11 version cannot use SDL sound. Sound has been tested and is known to work under - Linux and BSDI. For additional information on OSS or ALSA see the following web sites:

+ System or OSS emulation under ALSA (-sound oss), or SDL (-sound sdl). Sound has been + tested and is known to work under Linux and BSDI. For additional information on + OSS or ALSA see the following web sites:

4Front Technologies (OSS)
Advanced Linux Sound Architecture (ALSA) @@ -633,16 +607,15 @@

Linux and Unix

-

The Unix version of Stella uses command line arguments to specify the game +

The Linux version of Stella uses command line arguments to specify the game you'd like to play as well as other options. To see the list of available arguments, simply run stella without any options or filename. To run Stella use a command line of the following format:

-
   stella.version [options ...] filename.bin
+
   stella.sdl [options ...] filename.bin
-

Version is either x11 or sdl, depending on which version you compiled/installed.

- -

Options (0 indicates false, 1 indicates true, others are self-explanatory)

+

Options (0 indicates false, 1 indicates true, others are self-explanatory) + The words 'true' and 'false' can also be used.

@@ -651,94 +624,108 @@ - - + + - - + + - - + + + + + + + + + + + + - + - + - + - - - - - - + + changing the volume. + 2600 paddles are being used (defaults to paddle 0). + + + + + + + + + + + + + + + - + + + + + + - + - - + + - + - - - - - - - - - - - - - + @@ -816,8 +803,8 @@ - - + + @@ -827,7 +814,7 @@ - +
-display <display>
Connect to the designated X display (X11 version only)
-video <soft|gl>
Use SDL software or OpenGL mode.
-fps <number>
Display the given number of frames per second
-gl_filter <nearest|linear>
Use GL_NEAREST or GL_LINEAR filtering. GL_NEAREST results in a scaled, + pixelated image, while GL_LINEAR introduces blurring.
-owncmap <0|1>
Install a private colormap
-gl_aspect <number>
Specify the aspect ratio of the window. Normal TV mode would be 4:3, + so you would specify 1.3333. But since many video modes do not use + square pixels, you may have to try different values. I find 1.6 + gives the most authentic look.
-sound <0|alsa|oss|sdl>
Disable sound entirely, or use the given backend.
-framerate <number>
Display the given number of frames per second.
-zoom <size>
Makes window be 'size' times normal (1 - 4)Makes window be 'size' times normal.
-fullscreen <0|1>
Play the game in fullscreen mode (SDL version only)Play the game in fullscreen mode.
-grabmouse <0|1>
Keeps the mouse in the game windowKeeps the mouse in the game window.
-hidecursor <0|1>
Hides the mouse cursor in the game window
-center <0|1>
Centers the game window onscreenHides the mouse cursor in the game window.
-volume <number>
Set the volume (0 - 100). Use -1 to completely disable - changing the volume
-paddle <0|1|2|3|real>
Indicates which paddle the mouse should emulate or that real Atari - 2600 paddles are being used (defaults to paddle 0)
-joyleft <number>
The joystick number representing the left controller.
-joyright <number>
The joystick number representing the right controller.
-altpro <props file>
Use the given properties file instead of stella.pro.
-showinfo <0|1>
Shows some game info while the emulator is runningShows some game info.
-accurate <0|1>
Accurate game timing (uses more CPU).
-ssdir <path>
The directory to save snapshot files to (If SNAPSHOT support is - included)The directory to save snapshot files to.
-ssname <name>
How to name the snapshot (romname or md5sum) (If SNAPSHOT support is - included)
-ssname <romname|md5sum>
How to name the snapshot. Option 'romname' will use the filename + provided in stella.pro, while 'md5sum' will use the calculated + MD5 sum of the rom.
-sssingle <0|1>
Generate single snapshot instead of many (If SNAPSHOT support is - included)Generate single snapshot instead of many.
-pro <props file>
Use the given properties file instead of stella.pro
-accurate <0|1>
Use accurate game timing (and more CPU), or less accurate timing (and - less CPU).
-sound <0|alsa|oss|sdl>
Disable sound entirely, or use the given backend (depending on - support included).
-Dwidth <number>
Sets the "Display.Width" property. Its value must be in the range specified @@ -769,7 +756,7 @@ included)
-Dmerge <0|1>
-mergeprops <0|1>
Save the current properties to a separate file in the users' home directory, or merge them into the users' stella.pro file (If DEVELOPER support is included)
-display localhostdisplay = localhost-video glvideo = gl
-showinfo 1showinfo = 1showinfo = 1 (or showinfo = true)
@@ -842,7 +829,7 @@ keyboard as shown in the following tables.

As of Stella 1.4, most of these events can be remapped to other keys on your keyboard - or buttons on your joystick. The tables below are the default settings.

+ or buttons on your joystick. The tables below show the default settings.

Console Controls

@@ -854,7 +841,7 @@ Exit emulator/submenu - Escape + Escape (Alt-F4 for Windows) @@ -918,7 +905,7 @@ - Save snapshot (if supported) + Save PNG snapshot F12 @@ -1419,6 +1406,12 @@ Alt + Enter SDL + + + Toggle OpenGL filtering modes + Alt + f + SDL +


diff --git a/stella/src/ui/sdl/FrameBufferGL.cxx b/stella/src/ui/sdl/FrameBufferGL.cxx index 84e68e717..1099f213c 100644 --- a/stella/src/ui/sdl/FrameBufferGL.cxx +++ b/stella/src/ui/sdl/FrameBufferGL.cxx @@ -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: FrameBufferGL.cxx,v 1.7 2003-11-23 20:54:59 stephena Exp $ +// $Id: FrameBufferGL.cxx,v 1.8 2003-11-30 03:36:51 stephena Exp $ //============================================================================ #include @@ -29,7 +29,8 @@ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - FrameBufferGL::FrameBufferGL() - : myTexture(0) + : myTexture(0), + myFilterParam(GL_NEAREST) { } @@ -365,16 +366,15 @@ bool FrameBufferGL::createTextures() // Create an OpenGL texture from the SDL texture bool showinfo = myConsole->settings().getBool("showinfo"); string filter = myConsole->settings().getString("gl_filter"); - GLint param = GL_NEAREST; if(filter == "linear") { - param = GL_LINEAR; + myFilterParam = GL_LINEAR; if(showinfo) cout << "Using GL_LINEAR filtering.\n\n"; } else if(filter == "nearest") { - param = GL_NEAREST; + myFilterParam = GL_NEAREST; if(showinfo) cout << "Using GL_NEAREST filtering.\n\n"; } @@ -383,8 +383,8 @@ bool FrameBufferGL::createTextures() glBindTexture(GL_TEXTURE_2D, myTextureID); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, param); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, param); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, myFilterParam); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, myFilterParam); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, myTexture->pixels); @@ -430,8 +430,8 @@ bool FrameBufferGL::createTextures() glBindTexture(GL_TEXTURE_2D, myFontTextureID[c]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, param); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, param); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, myFilterParam); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, myFilterParam); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, fontTexture->pixels); } @@ -440,3 +440,36 @@ bool FrameBufferGL::createTextures() return true; } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void FrameBufferGL::toggleFilter() +{ + if(myFilterParam == GL_NEAREST) + { + myFilterParam = GL_LINEAR; + myConsole->settings().setString("gl_filter", "linear"); + } + else + { + myFilterParam = GL_NEAREST; + myConsole->settings().setString("gl_filter", "nearest"); + } + + glBindTexture(GL_TEXTURE_2D, myTextureID); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, myFilterParam); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, myFilterParam); + + for(uInt32 i =0; i < 256; i++) + { + glBindTexture(GL_TEXTURE_2D, myFontTextureID[i]); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, myFilterParam); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, myFilterParam); + } + + // The filtering has changed, so redraw the entire screen + theRedrawEntireFrameIndicator = true; +} diff --git a/stella/src/ui/sdl/FrameBufferGL.hxx b/stella/src/ui/sdl/FrameBufferGL.hxx index 4302085b9..83e1aa77b 100644 --- a/stella/src/ui/sdl/FrameBufferGL.hxx +++ b/stella/src/ui/sdl/FrameBufferGL.hxx @@ -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: FrameBufferGL.hxx,v 1.5 2003-11-22 20:13:11 stephena Exp $ +// $Id: FrameBufferGL.hxx,v 1.6 2003-11-30 03:36:51 stephena Exp $ //============================================================================ #ifndef FRAMEBUFFER_GL_HXX @@ -34,7 +34,7 @@ class MediaSource; This class implements an SDL OpenGL framebuffer. @author Stephen Anthony - @version $Id: FrameBufferGL.hxx,v 1.5 2003-11-22 20:13:11 stephena Exp $ + @version $Id: FrameBufferGL.hxx,v 1.6 2003-11-30 03:36:51 stephena Exp $ */ class FrameBufferGL : public FrameBufferSDL { @@ -49,6 +49,12 @@ class FrameBufferGL : public FrameBufferSDL */ virtual ~FrameBufferGL(); + /** + Switches between the two filtering options in OpenGL. + Currently, these are GL_NEAREST and GL_LINEAR. + */ + void toggleFilter(); + ////////////////////////////////////////////////////////////////////// // The following methods are derived from FrameBufferSDL.hxx ////////////////////////////////////////////////////////////////////// @@ -149,6 +155,9 @@ class FrameBufferGL : public FrameBufferSDL // The OpenGL font texture handles (one for each character) GLuint myFontTextureID[256]; + + // The texture filtering to use + GLint myFilterParam; }; #endif diff --git a/stella/src/ui/sdl/mainSDL.cxx b/stella/src/ui/sdl/mainSDL.cxx index c99e5432b..cff6422be 100644 --- a/stella/src/ui/sdl/mainSDL.cxx +++ b/stella/src/ui/sdl/mainSDL.cxx @@ -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: mainSDL.cxx,v 1.61 2003-11-23 20:54:59 stephena Exp $ +// $Id: mainSDL.cxx,v 1.62 2003-11-30 03:36:51 stephena Exp $ //============================================================================ #include @@ -338,6 +338,10 @@ void handleEvents() theDisplay->resize(-1); else if(key == SDLK_RETURN) theDisplay->toggleFullscreen(); +#ifdef DISPLAY_OPENGL + else if(key == SDLK_f) + ((FrameBufferGL*)theDisplay)->toggleFilter(); +#endif #ifdef DEVELOPER_SUPPORT else if(key == SDLK_END) // Alt-End increases XStart {