mirror of https://github.com/stella-emu/stella.git
Updated the Cyberstella port wrt the recent Sound class
changes. Added code to draw menus to FrameBufferWin32. This will be changed around soon, when I get to implementing the windowed modes. I added it now to make sure that remapping works from the in-game GUI (it does!). Most of the core features are now working. I need to add windowed mode (as mentioned above), then start cleaning up the settings and getting rid of the registry crap ... git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@215 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba
This commit is contained in:
parent
b15698ff2e
commit
b4388d45c0
|
@ -298,8 +298,6 @@ void CCyberstellaView::playRom(LONG gameID)
|
|||
pszFileName = fileName;
|
||||
}
|
||||
|
||||
//::MessageBox(*this, "got here", _T("Error"), MB_OK | MB_ICONEXCLAMATION );
|
||||
|
||||
::ShowWindow( *this, SW_HIDE );
|
||||
|
||||
// Create a new main instance for this cartridge
|
||||
|
@ -309,6 +307,7 @@ void CCyberstellaView::playRom(LONG gameID)
|
|||
mainWin32->run();
|
||||
|
||||
::ShowWindow( *this, SW_SHOW );
|
||||
ShowCursor(TRUE);
|
||||
|
||||
delete pImage;
|
||||
delete mainWin32;
|
||||
|
|
|
@ -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: FrameBufferWin32.cxx,v 1.4 2003-11-16 19:32:52 stephena Exp $
|
||||
// $Id: FrameBufferWin32.cxx,v 1.5 2003-11-19 21:06:27 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <sstream>
|
||||
|
@ -103,8 +103,8 @@ bool FrameBufferWin32::init()
|
|||
HRESULT hrCoInit = ::CoInitialize( NULL );
|
||||
|
||||
// Get the game's width and height
|
||||
mySizeGame.cx = myMediaSource->width() << 1;
|
||||
mySizeGame.cy = myMediaSource->height();
|
||||
mySizeGame.cx = myWidth = myMediaSource->width() << 1;
|
||||
mySizeGame.cy = myHeight = myMediaSource->height();
|
||||
|
||||
// Initialize the pixel data table
|
||||
for(uInt32 i = 0; i < 256; ++i)
|
||||
|
@ -347,7 +347,6 @@ void FrameBufferWin32::drawMediaSource()
|
|||
// BUGBUG: Check for error
|
||||
|
||||
BYTE* pbBackBytes = (BYTE*)ddsd.lpSurface;
|
||||
|
||||
register int y;
|
||||
for(y = 0; y < mySizeGame.cy; ++y)
|
||||
{
|
||||
|
@ -359,7 +358,7 @@ void FrameBufferWin32::drawMediaSource()
|
|||
{
|
||||
const WORD bufofs = bufofsY + x;
|
||||
BYTE v = current[ bufofs ];
|
||||
if(v == previous[ bufofs ])
|
||||
if(v == previous[ bufofs ] && !theRedrawEntireFrameIndicator)
|
||||
continue;
|
||||
|
||||
// x << 1 is times 2 ( doubling width ) WIDTH_FACTOR
|
||||
|
@ -367,19 +366,23 @@ void FrameBufferWin32::drawMediaSource()
|
|||
pbBackBytes[ pos + 0 ] = pbBackBytes[ pos + 1 ] = myPalette[v];
|
||||
}
|
||||
}
|
||||
|
||||
(void)m_piDDSBack->Unlock( ddsd.lpSurface );
|
||||
|
||||
// The frame doesn't need to be completely redrawn anymore
|
||||
theRedrawEntireFrameIndicator = false;
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBufferWin32::preFrameUpdate()
|
||||
{
|
||||
// FIXME - move locking here so its only done once per frame
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBufferWin32::postFrameUpdate()
|
||||
{
|
||||
// We only send any changes to the screen once per frame
|
||||
// FIXME - move unlocking here so its only done once per frame
|
||||
|
||||
// Blit offscreen to onscreen
|
||||
RECT rc = { 0, 0, mySizeGame.cx, mySizeGame.cy };
|
||||
|
@ -404,16 +407,114 @@ void FrameBufferWin32::toggleFullscreen()
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBufferWin32::drawBoundedBox(uInt32 x, uInt32 y, uInt32 w, uInt32 h)
|
||||
{
|
||||
// acquire pointer to linear video ram
|
||||
DDSURFACEDESC ddsd;
|
||||
ZeroMemory( &ddsd, sizeof(ddsd) );
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
|
||||
HRESULT hr = m_piDDSBack->Lock( NULL,
|
||||
&ddsd,
|
||||
/* DDLOCK_SURFACEMEMORYPTR | */ DDLOCK_WAIT,
|
||||
NULL );
|
||||
// BUGBUG: Check for error
|
||||
|
||||
BYTE* pbBackBytes = (BYTE*)ddsd.lpSurface;
|
||||
|
||||
// First draw the background
|
||||
for(uInt32 row = 0; row < h; row++)
|
||||
{
|
||||
for(uInt32 col = 0; col < w; col++)
|
||||
{
|
||||
BYTE* ptr = pbBackBytes + ((row + y) * ddsd.lPitch) + col + x;
|
||||
*ptr = myPalette[myBGColor];
|
||||
}
|
||||
}
|
||||
|
||||
// Now draw the surrounding lines
|
||||
for(uInt32 col = 0; col < w+1; col++) // Top line
|
||||
{
|
||||
BYTE* ptr = pbBackBytes + y * ddsd.lPitch + col + x;
|
||||
*ptr = myPalette[myFGColor];
|
||||
}
|
||||
|
||||
for(uInt32 col = 0; col < w+1; col++) // Bottom line
|
||||
{
|
||||
BYTE* ptr = pbBackBytes + (y+h) * ddsd.lPitch + col + x;
|
||||
*ptr = myPalette[myFGColor];
|
||||
}
|
||||
|
||||
for(uInt32 row = 0; row < h; row++) // Left line
|
||||
{
|
||||
BYTE* ptr = pbBackBytes + (row + y) * ddsd.lPitch + x;
|
||||
*ptr = myPalette[myFGColor];
|
||||
}
|
||||
|
||||
for(uInt32 row = 0; row < h; row++) // Right line
|
||||
{
|
||||
BYTE* ptr = pbBackBytes + (row + y) * ddsd.lPitch + x + w;
|
||||
*ptr = myPalette[myFGColor];
|
||||
}
|
||||
|
||||
(void)m_piDDSBack->Unlock( ddsd.lpSurface );
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBufferWin32::drawText(uInt32 xorig, uInt32 yorig, const string& message)
|
||||
{
|
||||
// acquire pointer to linear video ram
|
||||
DDSURFACEDESC ddsd;
|
||||
ZeroMemory( &ddsd, sizeof(ddsd) );
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
|
||||
HRESULT hr = m_piDDSBack->Lock( NULL,
|
||||
&ddsd,
|
||||
/* DDLOCK_SURFACEMEMORYPTR | */ DDLOCK_WAIT,
|
||||
NULL );
|
||||
|
||||
BYTE* pbBackBytes = (BYTE*)ddsd.lpSurface;
|
||||
uInt8 length = message.length();
|
||||
for(uInt32 x = 0; x < length; x++)
|
||||
{
|
||||
for(uInt32 y = 0; y < 8; y++)
|
||||
{
|
||||
for(uInt32 z = 0; z < 8; z++)
|
||||
{
|
||||
char letter = message[x];
|
||||
if((ourFontData[(letter << 3) + y] >> z) & 1)
|
||||
pbBackBytes[((x<<3) + z + xorig) + (y + yorig) * ddsd.lPitch] =
|
||||
myPalette[myFGColor];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(void)m_piDDSBack->Unlock( ddsd.lpSurface );
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void FrameBufferWin32::drawChar(uInt32 xorig, uInt32 yorig, uInt32 c)
|
||||
{
|
||||
// acquire pointer to linear video ram
|
||||
DDSURFACEDESC ddsd;
|
||||
ZeroMemory( &ddsd, sizeof(ddsd) );
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
|
||||
HRESULT hr = m_piDDSBack->Lock( NULL,
|
||||
&ddsd,
|
||||
/* DDLOCK_SURFACEMEMORYPTR | */ DDLOCK_WAIT,
|
||||
NULL );
|
||||
|
||||
BYTE* pbBackBytes = (BYTE*)ddsd.lpSurface;
|
||||
for(uInt32 y = 0; y < 8; y++)
|
||||
{
|
||||
for(uInt32 x = 0; x < 8; x++)
|
||||
{
|
||||
if((ourFontData[(c << 3) + y] >> x) & 1)
|
||||
pbBackBytes[x + xorig + (y + yorig) * ddsd.lPitch] =
|
||||
myPalette[myFGColor];
|
||||
}
|
||||
}
|
||||
|
||||
(void)m_piDDSBack->Unlock( ddsd.lpSurface );
|
||||
}
|
||||
|
||||
LRESULT CALLBACK FrameBufferWin32::StaticWindowProc(
|
||||
|
@ -472,23 +573,6 @@ BOOL FrameBufferWin32::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
::PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
case WM_KEYDOWN:
|
||||
switch((int)wParam)
|
||||
{
|
||||
case VK_ESCAPE:
|
||||
::PostMessage(myHWND, WM_CLOSE, 0, 0);
|
||||
|
||||
// For some braindead reason, the exit event must be handled
|
||||
// here. Normally, an Escape event would be the same as any
|
||||
// other and the Console would handle it.
|
||||
// But since Windows insists on doing it this way, we have
|
||||
// to make sure that the Escape event is still received by
|
||||
// the core.
|
||||
myConsole->eventHandler().sendEvent(Event::Quit, 1);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_PAINT:
|
||||
PAINTSTRUCT ps;
|
||||
::BeginPaint( myHWND, &ps );
|
||||
|
|
|
@ -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: MainWin32.cxx,v 1.3 2003-11-16 19:32:52 stephena Exp $
|
||||
// $Id: MainWin32.cxx,v 1.4 2003-11-19 21:06:27 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#define STRICT
|
||||
|
@ -92,14 +92,15 @@ MainWin32::MainWin32(const uInt8* image, uInt32 size, const char* filename,
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
MainWin32::~MainWin32()
|
||||
{
|
||||
// Save the settings for this instance of the console
|
||||
theConsole->settings().saveConfig();
|
||||
|
||||
cleanup();
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void MainWin32::cleanup()
|
||||
{
|
||||
ShowCursor(TRUE);
|
||||
|
||||
if(theDisplay)
|
||||
delete theDisplay;
|
||||
|
||||
|
@ -132,7 +133,7 @@ DWORD MainWin32::run()
|
|||
QueryPerformanceFrequency( (LARGE_INTEGER*)&uiCountsPerSecond );
|
||||
|
||||
const unsigned __int64 uiCountsPerFrame =
|
||||
( uiCountsPerSecond / 60);// FIXME m_rGlobalData->desiredFrameRate);
|
||||
( uiCountsPerSecond / theSettings.getInt("framerate"));
|
||||
|
||||
unsigned __int64 uiFrameStart;
|
||||
unsigned __int64 uiFrameCurrent;
|
||||
|
@ -158,8 +159,7 @@ DWORD MainWin32::run()
|
|||
::QueryPerformanceCounter( (LARGE_INTEGER*)&uiFrameStart );
|
||||
|
||||
UpdateEvents();
|
||||
theDisplay->update();
|
||||
theSound->updateSound(*theDisplay->mediaSource());
|
||||
theConsole->update();
|
||||
|
||||
// waste time to to meet desired frame rate
|
||||
for(;;)
|
||||
|
@ -167,38 +167,25 @@ DWORD MainWin32::run()
|
|||
QueryPerformanceCounter( (LARGE_INTEGER*)&uiFrameCurrent );
|
||||
if((uiFrameCurrent - uiFrameStart) >= uiCountsPerFrame)
|
||||
break;
|
||||
//FIXME else
|
||||
// WaitMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Main message loop done
|
||||
/*
|
||||
if ( m_rGlobalData->bShowFPS)
|
||||
if(0)// m_rGlobalData->bShowFPS)
|
||||
{
|
||||
// get number of scanlines in last frame
|
||||
|
||||
uInt32 uScanLines = rMediaSource.scanlines();
|
||||
|
||||
// Get the final tick count
|
||||
|
||||
unsigned __int64 uiEndRun;
|
||||
::QueryPerformanceCounter( (LARGE_INTEGER*)&uiEndRun );
|
||||
QueryPerformanceCounter( (LARGE_INTEGER*)&uiEndRun );
|
||||
|
||||
// Get number of ticks
|
||||
|
||||
DWORD secs = (DWORD)((uiEndRun - uiStartRun) / uiCountsPerSecond);
|
||||
|
||||
DWORD fps = (secs == 0) ? 0 : (uFrameCount / secs);
|
||||
|
||||
TCHAR pszBuf[1024];
|
||||
wsprintf( pszBuf, _T("Frames drawn: %ld\nFPS: %ld\nScanlines in last frame: %ld\n"),
|
||||
uFrameCount,
|
||||
fps,
|
||||
uScanLines );
|
||||
wsprintf(pszBuf, _T("Frames drawn: %ld\nFPS: %ld\n"), uFrameCount, fps);
|
||||
MessageBox(NULL, pszBuf, _T("Statistics"), MB_OK);
|
||||
}*/
|
||||
}
|
||||
|
||||
return msg.wParam;
|
||||
}
|
||||
|
|
|
@ -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: MainWin32.hxx,v 1.3 2003-11-16 19:32:52 stephena Exp $
|
||||
// $Id: MainWin32.hxx,v 1.4 2003-11-19 21:06:27 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef MAIN_WIN32_HXX
|
||||
|
@ -41,7 +41,7 @@ class DirectInput;
|
|||
in the Porting.txt document
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: MainWin32.hxx,v 1.3 2003-11-16 19:32:52 stephena Exp $
|
||||
@version $Id: MainWin32.hxx,v 1.4 2003-11-19 21:06:27 stephena Exp $
|
||||
*/
|
||||
class MainWin32
|
||||
{
|
||||
|
@ -100,8 +100,6 @@ class MainWin32
|
|||
static StellaEvent::JoyStick joyList[StellaEvent::LastJSTICK];
|
||||
static StellaEvent::JoyCode joyButtonList[StellaEvent::LastJCODE-4];
|
||||
|
||||
const CGlobalData* m_rGlobalData;
|
||||
|
||||
// Indicates the current mouse position in the X direction
|
||||
Int32 theMouseX;
|
||||
|
||||
|
|
|
@ -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: SettingsWin32.cxx,v 1.2 2003-09-23 19:41:16 stephena Exp $
|
||||
// $Id: SettingsWin32.cxx,v 1.3 2003-11-19 21:06:27 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include "bspf.hxx"
|
||||
|
@ -29,22 +29,17 @@ SettingsWin32::SettingsWin32()
|
|||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
SettingsWin32::~SettingsWin32()
|
||||
{
|
||||
cerr << "SettingsWin32::~SettingsWin32()\n";
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
string SettingsWin32::stateFilename(uInt32 state)
|
||||
{
|
||||
cerr << "SettingsWin32::stateFilename()\n";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
string SettingsWin32::snapshotFilename()
|
||||
{
|
||||
cerr << "SettingsWin32::snapshotFilename()\n";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
|
@ -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: SettingsWin32.hxx,v 1.2 2003-09-23 19:41:16 stephena Exp $
|
||||
// $Id: SettingsWin32.hxx,v 1.3 2003-11-19 21:06:27 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef SETTINGS_WIN32_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: SoundWin32.cxx,v 1.2 2003-09-21 14:33:34 stephena Exp $
|
||||
// $Id: SoundWin32.cxx,v 1.3 2003-11-19 21:06:27 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#include <assert.h>
|
||||
|
@ -102,12 +102,12 @@ bool SoundWin32::isSuccessfullyInitialized() const
|
|||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void SoundWin32::setSoundVolume(Int32 percent)
|
||||
void SoundWin32::setVolume(Int32 percent)
|
||||
{
|
||||
}
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
void SoundWin32::updateSound(MediaSource& mediaSource)
|
||||
void SoundWin32::update()
|
||||
{
|
||||
if(myIsInitializedFlag)
|
||||
{
|
||||
|
@ -116,9 +116,9 @@ void SoundWin32::updateSound(MediaSource& mediaSource)
|
|||
uInt8* buffer = new uInt8[myBufferSize];
|
||||
|
||||
// Dequeue samples as long as full fragments are available
|
||||
while(mediaSource.numberOfAudioSamples() >= myBufferSize)
|
||||
while(myMediaSource->numberOfAudioSamples() >= myBufferSize)
|
||||
{
|
||||
mediaSource.dequeueAudioSamples(buffer, myBufferSize);
|
||||
myMediaSource->dequeueAudioSamples(buffer, myBufferSize);
|
||||
|
||||
LPVOID lpvWrite;
|
||||
DWORD dwLength;
|
||||
|
|
|
@ -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: SoundWin32.hxx,v 1.2 2003-09-21 14:33:34 stephena Exp $
|
||||
// $Id: SoundWin32.hxx,v 1.3 2003-11-19 21:06:27 stephena Exp $
|
||||
//============================================================================
|
||||
|
||||
#ifndef SOUND_WIN32_HXX
|
||||
|
@ -30,7 +30,7 @@
|
|||
Win32 DirectSound API.
|
||||
|
||||
@author Stephen Anthony
|
||||
@version $Id: SoundWin32.hxx,v 1.2 2003-09-21 14:33:34 stephena Exp $
|
||||
@version $Id: SoundWin32.hxx,v 1.3 2003-11-19 21:06:27 stephena Exp $
|
||||
*/
|
||||
class SoundWin32 : public Sound
|
||||
{
|
||||
|
@ -72,15 +72,13 @@ class SoundWin32 : public Sound
|
|||
|
||||
@param percent The new volume percentage level for the sound device
|
||||
*/
|
||||
void setSoundVolume(Int32 percent);
|
||||
void setVolume(Int32 percent);
|
||||
|
||||
/**
|
||||
Update the sound device using the audio sample from the specified
|
||||
Update the sound device using the audio sample from the
|
||||
media source.
|
||||
|
||||
@param mediaSource The media source to get audio samples from.
|
||||
*/
|
||||
void updateSound(MediaSource& mediaSource);
|
||||
void update();
|
||||
|
||||
/**
|
||||
Initialize the DirectSound subsystem/
|
||||
|
@ -114,4 +112,5 @@ class SoundWin32 : public Sound
|
|||
// DSP sample rate
|
||||
uInt32 mySampleRate;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue