Merge pull request #362 from AppleWin/Release-1.26.0.1
Merge all the changes & fixes from the Release-1.26.0.1 branch back into master.
This commit is contained in:
commit
bcd4c7c7fa
20 changed files with 196 additions and 100 deletions
|
@ -9,22 +9,26 @@ https://github.com/AppleWin/AppleWin/issues/new
|
||||||
Tom Charlesworth
|
Tom Charlesworth
|
||||||
|
|
||||||
|
|
||||||
1.26.0.1 (beta) - 5 Sept 2016
|
1.26.0.6 - 16 Oct 2016
|
||||||
---------------------------
|
----------------------
|
||||||
Changes:
|
Changes:
|
||||||
. [Bug #126,#157,#194] Beta NTSC support
|
. [Bug #126,#157,#194] Beta NTSC and cycle-accurate video support
|
||||||
TV Color, TV B&W, Monitor Color, Monitor B&W
|
The new supported video modes are now only: TV Color, TV B&W, Monitor Color, Monitor B&W
|
||||||
|
NB. The old 1.25 modes have been removed eg. "Color (TV Emulation)".
|
||||||
. Full-screen native resolution (no longer 640x480 resolution)
|
. Full-screen native resolution (no longer 640x480 resolution)
|
||||||
|
NB. If your screen resolution is smaller than 1120x768, then you will get no scaling in full-screen.
|
||||||
. [Bug #260] Save-state file v2: human readable (Yaml-based format)
|
. [Bug #260] Save-state file v2: human readable (Yaml-based format)
|
||||||
All hardware configurations save/restored:
|
All hardware configurations save/restored:
|
||||||
. Apple model, sub-systems, memory, cards (except Uthernet and SAM cards)
|
. Apple model, sub-systems, memory, cards (except Uthernet and SAM cards)
|
||||||
Old v1 .aws file format still loaded
|
NB. Old v1 .aws file format are still loaded
|
||||||
. [Bug #270] Added SAM/DAC sound card support
|
. [Bug #270] Added SAM/DAC sound card support
|
||||||
. AppleWin built with VS2008 Express (supports Windows 2000 or later)
|
. AppleWin built with VS2008 Express (supports Windows 2000 or later)
|
||||||
. Unit tests added for 6502 and 65C02 opcodes
|
. Unit tests added for 6502 and 65C02 opcodes
|
||||||
. Added -load-state <savestate.yaml> command line option
|
. Added -load-state <savestate.yaml> command line option
|
||||||
. New repo created with test save-state images: https://github.com/AppleWin/AppleWin-Test
|
. New repo created with test save-state images: https://github.com/AppleWin/AppleWin-Test
|
||||||
. Remove unsupported PC speaker sound types
|
. Remove unsupported PC speaker sound types
|
||||||
|
. [PR #235] New start-up title screen by Paulo Garcia
|
||||||
|
. [PR #233] Configuration Dialog->Disk tab: Buttons replaced with drop-down menu for select/eject by Paulo Garcia
|
||||||
|
|
||||||
Fixes:
|
Fixes:
|
||||||
. [Bug #129] Tight loop page-flipping causing heavy CPU load (fixed by NTSC / cycle-accurate video emulation)
|
. [Bug #129] Tight loop page-flipping causing heavy CPU load (fixed by NTSC / cycle-accurate video emulation)
|
||||||
|
@ -45,6 +49,16 @@ Fixes:
|
||||||
. [Bug #246] (Debugger) Memory (Changing Memory) command in CHM help files
|
. [Bug #246] (Debugger) Memory (Changing Memory) command in CHM help files
|
||||||
. [Bug #309] Silent Service hangs during Mockingboard use
|
. [Bug #309] Silent Service hangs during Mockingboard use
|
||||||
|
|
||||||
|
Fixes since 1.26.0.5 (6 Oct 2016):
|
||||||
|
. [Bug #356] PrintScreen from Color TV or B&W TV video modes is missing top line
|
||||||
|
|
||||||
|
Fixes since 1.26.0.3 (19 Sept 2016):
|
||||||
|
. [Bug #341] Color Monitor mode (showing graphics) is shifted one HGR pixel to the right (losing the rightmost pixel)
|
||||||
|
. [Bug #353] Pravets 8M has a superfluous dot lit on the ']' character
|
||||||
|
. [Bug #352] Full-speed in mixed mode results in flickery video
|
||||||
|
. [Bug #351] In full-speed mode, listing a long BASIC program is barely faster than 1MHz mode
|
||||||
|
. [Bug #350] Config -> '50% Scan lines' checkbox not working
|
||||||
|
|
||||||
|
|
||||||
1.26.0.0 (alpha) - Jan 2016
|
1.26.0.0 (alpha) - Jan 2016
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<hr size="4">
|
<hr size="4">
|
||||||
<p>The team would like to thank the following people for their contributions:</p>
|
<p>The team would like to thank the following people for their contributions:</p>
|
||||||
<p style="MARGIN-LEFT: 40px">Brian Broker: This HTML / CHM help file</p>
|
<p style="MARGIN-LEFT: 40px">Brian Broker: This HTML / CHM help file</p>
|
||||||
<p style="MARGIN-LEFT: 40px">Thomas Stahl: TV emulation mode</p>
|
<p style="MARGIN-LEFT: 40px">Thomas Stahl: TV emulation mode (up to v1.25.0.4)</p>
|
||||||
<p style="MARGIN-LEFT: 40px">Chris Foxwell: SSI263 phoneme samples</p>
|
<p style="MARGIN-LEFT: 40px">Chris Foxwell: SSI263 phoneme samples</p>
|
||||||
<p style="MARGIN-LEFT: 40px">Robert Hoem: Harddisk card (source module & f/w)</p>
|
<p style="MARGIN-LEFT: 40px">Robert Hoem: Harddisk card (source module & f/w)</p>
|
||||||
<p style="MARGIN-LEFT: 40px">VICE team: TFE, Z80, MC6821 PIA emulation modules (<a href="http://www.viceteam.org">http://www.viceteam.org</a>)<br>
|
<p style="MARGIN-LEFT: 40px">VICE team: TFE, Z80, MC6821 PIA emulation modules (<a href="http://www.viceteam.org">http://www.viceteam.org</a>)<br>
|
||||||
|
|
|
@ -28,28 +28,21 @@
|
||||||
<strong>Video:</strong><br>
|
<strong>Video:</strong><br>
|
||||||
AppleWin can display Apple video in a variety of modes. The display can also be
|
AppleWin can display Apple video in a variety of modes. The display can also be
|
||||||
run in a standard window or full-screen. This option describes the type of
|
run in a standard window or full-screen. This option describes the type of
|
||||||
video emulation to be used for the emulator. Some differences might be
|
video emulation to be used for the emulator. The differences are
|
||||||
discussed below.<br>
|
discussed below.<br>
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<strong>Monochrome (custom) :</strong> This mode emulates a monochrome
|
<strong>Monochrome (custom) :</strong> This mode emulates a monochrome
|
||||||
monitor. You can choose your monochrome color from the <em>Monochrome Color</em>
|
monitor. You can choose your monochrome color from the <em>Monochrome Color</em>
|
||||||
button described below.
|
button described below.
|
||||||
<LI>
|
|
||||||
<STRONG>Monochrome (amber/green/white) :</STRONG> Monochrome with
|
|
||||||
specified color.
|
|
||||||
<li>
|
<li>
|
||||||
<strong>Color (standard) :</strong> This mode emulates a standard
|
<strong>Color Monitor :</strong> This mode emulates a standard color monitor.
|
||||||
color monitor.
|
|
||||||
<li>
|
<li>
|
||||||
<strong>Color (text optimized) :</strong> This mode does a bit of
|
<strong>B&W TV :</strong> This mode emulates an NTSC black and white TV.
|
||||||
image processing to make text more readable on the hires screen.
|
|
||||||
<li>
|
<li>
|
||||||
<strong>Color (TV emulation) :</strong> This mode emulates how colors
|
<strong>Color TV :</strong> This mode emulates an NTSC color TV.
|
||||||
would bleed into one another on a TV. On the hires screen, alternating
|
<li>
|
||||||
horizontal lines of color are bled together to form new colors like grey,
|
<strong>Monochrome (Amber/Green/White) :</strong> Monochrome with specified color.
|
||||||
purple, pink, yellow and aquamarine. This effect was used in commercial games
|
|
||||||
like Karateka and many hires adventures (eg. Mindshadow).
|
|
||||||
</li>
|
</li>
|
||||||
<li><strong>50% Scan line :</strong> Only draw alternate scanline (for better monitor
|
<li><strong>50% Scan line :</strong> Only draw alternate scanline (for better monitor
|
||||||
authenticity).</li>
|
authenticity).</li>
|
||||||
|
|
|
@ -29,12 +29,11 @@ properly. This is the speed at which the real hardware
|
||||||
would access data from your drives.</p>
|
would access data from your drives.</p>
|
||||||
|
|
||||||
|
|
||||||
<p><strong>Select Disk 1/2:</strong><br>
|
<p><strong>Disk 1/2 drop-down menus:</strong><br>
|
||||||
|
|
||||||
|
These menus allow you to select floppy disk images (.dsk files) to
|
||||||
These buttons allow you to select floppy disk images (.dsk files) to
|
|
||||||
'insert' into the
|
'insert' into the
|
||||||
emulated floppy drives 1 and 2. This can also be done during emulation by <a href="toolbar.html">using the toolbar</a> or using the F3/F4 keys. Diskettes can be swapped by pressing F5 during emulation.</p>
|
emulated floppy drives 1 and 2. This can also be done during emulation by <a href="toolbar.html">using the toolbar</a> or using the F3/F4 keys. Diskettes can be swapped by pressing F5 during emulation. You can also eject images from this menu.</p>
|
||||||
|
|
||||||
|
|
||||||
<h3>Harddisk Controller Settings:</h3>
|
<h3>Harddisk Controller Settings:</h3>
|
||||||
|
@ -50,11 +49,12 @@ floppy disk with the harddisk card enabled, you can issue PR#6 from an AppleSoft
|
||||||
prompt.</p>
|
prompt.</p>
|
||||||
|
|
||||||
<p>You can download sample .hdv images from Asimov (eg. <a href="ftp://public.asimov.net/pub/apple_II/" target="_blank">ftp://public.asimov.net/pub/apple_II/images/utility/misc/hardpc.zip</a>).</p>
|
<p>You can download sample .hdv images from Asimov (eg. <a href="ftp://public.asimov.net/pub/apple_II/" target="_blank">ftp://public.asimov.net/pub/apple_II/images/utility/misc/hardpc.zip</a>).</p>
|
||||||
<p><strong>Select HDD1/HDD2:</strong><br>
|
|
||||||
|
|
||||||
|
<p><strong>HDD 1/2 drop-down menus:</strong><br>
|
||||||
|
|
||||||
|
These menus allow you to select harddisk images (.hdv files) to
|
||||||
|
connect to the emulated hard drive controller. You can also unplug images from this menu.</p>
|
||||||
|
|
||||||
These buttons allow you to select harddisk images (.hdv files) to
|
|
||||||
connect to the emulated hard drive controller.</p>
|
|
||||||
<strong>Harddisk warnings:</strong>
|
<strong>Harddisk warnings:</strong>
|
||||||
<ul>
|
<ul>
|
||||||
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 36 KiB |
Binary file not shown.
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 34 KiB |
|
@ -10,16 +10,12 @@
|
||||||
Sound</h2>
|
Sound</h2>
|
||||||
<hr size="4">
|
<hr size="4">
|
||||||
<h3>Sound:</h3>
|
<h3>Sound:</h3>
|
||||||
<p>AppleWin emulates both the internal speaker (using the PC speaker or sound card)
|
<p>AppleWin emulates both the internal speaker
|
||||||
and also the Mockingboard sound card (using a PC sound card).</p>
|
and also the Mockingboard (or Phasor) sound card, using a PC sound card.</p>
|
||||||
<p>Use the AppleWin Configuration tab labelled <em>Sound</em>.</p>
|
<p>Use the AppleWin Configuration tab labelled <em>Sound</em>.</p>
|
||||||
<p>If you are using a sound card, then use at least DirectX-9.</p>
|
<p>If you want to use a sound card then use at least DirectX 9.</p>
|
||||||
<h4>Speaker:</h4>
|
<h4>Speaker:</h4>
|
||||||
<p>You can select PC speaker or sound card:</p>
|
<p>You can now only emulate this with a sound card.</p>
|
||||||
<ul>
|
|
||||||
<li>PC speaker: This is not recommended as the quality is poor. It is not usable on Windows 2000 or XP.</li>
|
|
||||||
<li>Sound card: Recommended</li>
|
|
||||||
</ul>
|
|
||||||
<h4>Mockingboard:</h4>
|
<h4>Mockingboard:</h4>
|
||||||
<p>When the Mockingboards are enabled, the cards are physically plugged into slots
|
<p>When the Mockingboards are enabled, the cards are physically plugged into slots
|
||||||
4 and 5 of the Apple II.</p>
|
4 and 5 of the Apple II.</p>
|
||||||
|
|
|
@ -250,8 +250,8 @@ DISK_ICON ICON "DISK.ICO"
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,26,0,1
|
FILEVERSION 1,26,0,6
|
||||||
PRODUCTVERSION 1,26,0,1
|
PRODUCTVERSION 1,26,0,6
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -269,12 +269,12 @@ BEGIN
|
||||||
VALUE "Comments", "https://github.com/AppleWin"
|
VALUE "Comments", "https://github.com/AppleWin"
|
||||||
VALUE "CompanyName", "AppleWin"
|
VALUE "CompanyName", "AppleWin"
|
||||||
VALUE "FileDescription", "Apple //e Emulator for Windows"
|
VALUE "FileDescription", "Apple //e Emulator for Windows"
|
||||||
VALUE "FileVersion", "1, 26, 0, 1"
|
VALUE "FileVersion", "1, 26, 0, 6"
|
||||||
VALUE "InternalName", "APPLEWIN"
|
VALUE "InternalName", "APPLEWIN"
|
||||||
VALUE "LegalCopyright", " 1994-2015 Michael O'Brien, Oliver Schmidt, Tom Charlesworth, Michael Pohoreski, Nick Westgate, Linards Ticmanis"
|
VALUE "LegalCopyright", " 1994-2016 Michael O'Brien, Oliver Schmidt, Tom Charlesworth, Michael Pohoreski, Nick Westgate, Linards Ticmanis"
|
||||||
VALUE "OriginalFilename", "APPLEWIN.EXE"
|
VALUE "OriginalFilename", "APPLEWIN.EXE"
|
||||||
VALUE "ProductName", "Apple //e Emulator"
|
VALUE "ProductName", "Apple //e Emulator"
|
||||||
VALUE "ProductVersion", "1, 26, 0, 1"
|
VALUE "ProductVersion", "1, 26, 0, 6"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
|
@ -232,6 +232,9 @@ void ContinueExecution(void)
|
||||||
|
|
||||||
if (g_bFullSpeed)
|
if (g_bFullSpeed)
|
||||||
{
|
{
|
||||||
|
if (!bWasFullSpeed)
|
||||||
|
VideoRedrawScreenDuringFullSpeed(0, true); // Init for full-speed mode
|
||||||
|
|
||||||
// Don't call Spkr_Mute() - will get speaker clicks
|
// Don't call Spkr_Mute() - will get speaker clicks
|
||||||
MB_Mute();
|
MB_Mute();
|
||||||
SysClk_StopTimer();
|
SysClk_StopTimer();
|
||||||
|
@ -249,7 +252,6 @@ void ContinueExecution(void)
|
||||||
{
|
{
|
||||||
if (bWasFullSpeed)
|
if (bWasFullSpeed)
|
||||||
{
|
{
|
||||||
VideoRedrawScreenDuringFullSpeed(0, true); // Invalidate the copies of video memory
|
|
||||||
VideoRedrawScreenAfterFullSpeed(g_dwCyclesThisFrame);
|
VideoRedrawScreenAfterFullSpeed(g_dwCyclesThisFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,11 +286,10 @@ void ContinueExecution(void)
|
||||||
g_dwCyclesThisFrame -= dwClksPerFrame;
|
g_dwCyclesThisFrame -= dwClksPerFrame;
|
||||||
|
|
||||||
if (g_bFullSpeed)
|
if (g_bFullSpeed)
|
||||||
{
|
|
||||||
VideoRedrawScreenDuringFullSpeed(g_dwCyclesThisFrame);
|
VideoRedrawScreenDuringFullSpeed(g_dwCyclesThisFrame);
|
||||||
}
|
else
|
||||||
|
|
||||||
VideoRefreshScreen(0); // Just copy the output of our Apple framebuffer to the system Back Buffer
|
VideoRefreshScreen(0); // Just copy the output of our Apple framebuffer to the system Back Buffer
|
||||||
|
|
||||||
MB_EndOfVideoFrame();
|
MB_EndOfVideoFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1197,7 +1198,6 @@ int APIENTRY WinMain(HINSTANCE passinstance, HINSTANCE, LPSTR lpCmdLine, int)
|
||||||
|
|
||||||
// ENTER THE MAIN MESSAGE LOOP
|
// ENTER THE MAIN MESSAGE LOOP
|
||||||
LogFileOutput("Main: EnterMessageLoop()\n");
|
LogFileOutput("Main: EnterMessageLoop()\n");
|
||||||
LogFileTimeUntilFirstKeyReadReset();
|
|
||||||
EnterMessageLoop();
|
EnterMessageLoop();
|
||||||
LogFileOutput("Main: LeaveMessageLoop()\n");
|
LogFileOutput("Main: LeaveMessageLoop()\n");
|
||||||
|
|
||||||
|
|
|
@ -119,9 +119,11 @@ BOOL CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM
|
||||||
|
|
||||||
case IDC_CHECK_CONFIRM_REBOOT:
|
case IDC_CHECK_CONFIRM_REBOOT:
|
||||||
g_bConfirmReboot = IsDlgButtonChecked(hWnd, IDC_CHECK_CONFIRM_REBOOT) ? 1 : 0;
|
g_bConfirmReboot = IsDlgButtonChecked(hWnd, IDC_CHECK_CONFIRM_REBOOT) ? 1 : 0;
|
||||||
|
break;
|
||||||
|
|
||||||
case IDC_CHECK_HALF_SCAN_LINES:
|
case IDC_CHECK_HALF_SCAN_LINES:
|
||||||
g_uHalfScanLines = IsDlgButtonChecked(hWnd, IDC_CHECK_HALF_SCAN_LINES) ? 1 : 0;
|
// Checked in DlgOK()
|
||||||
|
break;
|
||||||
|
|
||||||
case IDC_COMPUTER:
|
case IDC_COMPUTER:
|
||||||
if(HIWORD(wparam) == CBN_SELCHANGE)
|
if(HIWORD(wparam) == CBN_SELCHANGE)
|
||||||
|
@ -231,10 +233,26 @@ BOOL CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPARAM
|
||||||
|
|
||||||
void CPageConfig::DlgOK(HWND hWnd)
|
void CPageConfig::DlgOK(HWND hWnd)
|
||||||
{
|
{
|
||||||
|
bool bVideoReinit = false;
|
||||||
|
|
||||||
const DWORD newvidtype = (DWORD) SendDlgItemMessage(hWnd, IDC_VIDEOTYPE, CB_GETCURSEL, 0, 0);
|
const DWORD newvidtype = (DWORD) SendDlgItemMessage(hWnd, IDC_VIDEOTYPE, CB_GETCURSEL, 0, 0);
|
||||||
if (g_eVideoType != newvidtype)
|
if (g_eVideoType != newvidtype)
|
||||||
{
|
{
|
||||||
g_eVideoType = newvidtype;
|
g_eVideoType = newvidtype;
|
||||||
|
bVideoReinit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const DWORD newHalfScanLines = IsDlgButtonChecked(hWnd, IDC_CHECK_HALF_SCAN_LINES) ? 1 : 0;
|
||||||
|
if (g_uHalfScanLines != newHalfScanLines)
|
||||||
|
{
|
||||||
|
g_uHalfScanLines = newHalfScanLines;
|
||||||
|
bVideoReinit = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bVideoReinit)
|
||||||
|
{
|
||||||
|
FrameRefreshStatus(DRAW_TITLE, false);
|
||||||
|
|
||||||
VideoReinitialize();
|
VideoReinitialize();
|
||||||
if ((g_nAppMode != MODE_LOGO) && (g_nAppMode != MODE_DEBUG))
|
if ((g_nAppMode != MODE_LOGO) && (g_nAppMode != MODE_DEBUG))
|
||||||
{
|
{
|
||||||
|
|
|
@ -6720,8 +6720,6 @@ Update_t _ViewOutput( ViewVideoPage_t iPage, VideoUpdateFuncPtr_t pfUpdate );
|
||||||
|
|
||||||
Update_t _ViewOutput( ViewVideoPage_t iPage, int bVideoModeFlags )
|
Update_t _ViewOutput( ViewVideoPage_t iPage, int bVideoModeFlags )
|
||||||
{
|
{
|
||||||
VideoSetForceFullRedraw();
|
|
||||||
|
|
||||||
switch( iPage )
|
switch( iPage )
|
||||||
{
|
{
|
||||||
case VIEW_PAGE_X: bVideoModeFlags |= _Video_SetupBanks( VideoGetSWPAGE2() ); break; // Page Current
|
case VIEW_PAGE_X: bVideoModeFlags |= _Video_SetupBanks( VideoGetSWPAGE2() ); break; // Page Current
|
||||||
|
@ -6735,7 +6733,7 @@ Update_t _ViewOutput( ViewVideoPage_t iPage, int bVideoModeFlags )
|
||||||
MessageBoxA( NULL, "bVideoModeFlags = ZERO !?", "Information", MB_OK );
|
MessageBoxA( NULL, "bVideoModeFlags = ZERO !?", "Information", MB_OK );
|
||||||
#endif
|
#endif
|
||||||
g_bDebuggerViewingAppleOutput = bVideoModeFlags;
|
g_bDebuggerViewingAppleOutput = bVideoModeFlags;
|
||||||
VideoRefreshScreen( bVideoModeFlags );
|
VideoRefreshScreen( bVideoModeFlags, true );
|
||||||
return UPDATE_NOTHING; // intentional
|
return UPDATE_NOTHING; // intentional
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6776,7 +6774,7 @@ Update_t _ViewOutput( ViewVideoPage_t iPage, int bVideoModeFlags )
|
||||||
}
|
}
|
||||||
Update_t CmdViewOutput_GR2 (int nArgs)
|
Update_t CmdViewOutput_GR2 (int nArgs)
|
||||||
{
|
{
|
||||||
return _ViewOutput( VIEW_PAGE_2, VF_80STORE ); // NTSC VideoRefresh() Hack: flags != 0
|
return _ViewOutput( VIEW_PAGE_2, 0 );
|
||||||
}
|
}
|
||||||
// Double Lo-Res
|
// Double Lo-Res
|
||||||
Update_t CmdViewOutput_DGRX (int nArgs)
|
Update_t CmdViewOutput_DGRX (int nArgs)
|
||||||
|
@ -8495,8 +8493,6 @@ void DebugContinueStepping ()
|
||||||
{
|
{
|
||||||
if (nStepsTaken == 0x10000) // HACK_MAGIC_NUM
|
if (nStepsTaken == 0x10000) // HACK_MAGIC_NUM
|
||||||
VideoRedrawScreen();
|
VideoRedrawScreen();
|
||||||
// else
|
|
||||||
// VideoRefreshScreen();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -34,6 +34,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
|
||||||
static CDiskImageHelper sg_DiskImageHelper;
|
static CDiskImageHelper sg_DiskImageHelper;
|
||||||
|
static CHardDiskImageHelper sg_HardDiskImageHelper;
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
|
@ -43,7 +44,8 @@ ImageError_e ImageOpen( LPCTSTR pszImageFilename,
|
||||||
bool* pWriteProtected,
|
bool* pWriteProtected,
|
||||||
const bool bCreateIfNecessary,
|
const bool bCreateIfNecessary,
|
||||||
std::string& strFilenameInZip,
|
std::string& strFilenameInZip,
|
||||||
const bool bExpectFloppy /*=true*/)
|
const bool bExpectFloppy /*=true*/,
|
||||||
|
const bool bIsHarddisk /*=false*/)
|
||||||
{
|
{
|
||||||
if (! (pszImageFilename && hDiskImage && pWriteProtected && sg_DiskImageHelper.GetWorkBuffer()))
|
if (! (pszImageFilename && hDiskImage && pWriteProtected && sg_DiskImageHelper.GetWorkBuffer()))
|
||||||
return eIMAGE_ERROR_BAD_POINTER;
|
return eIMAGE_ERROR_BAD_POINTER;
|
||||||
|
@ -57,7 +59,9 @@ ImageError_e ImageOpen( LPCTSTR pszImageFilename,
|
||||||
ImageInfo* pImageInfo = (ImageInfo*) *hDiskImage;
|
ImageInfo* pImageInfo = (ImageInfo*) *hDiskImage;
|
||||||
pImageInfo->bWriteProtected = *pWriteProtected;
|
pImageInfo->bWriteProtected = *pWriteProtected;
|
||||||
|
|
||||||
ImageError_e Err = sg_DiskImageHelper.Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip);
|
ImageError_e Err = (!bIsHarddisk)
|
||||||
|
? sg_DiskImageHelper.Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip)
|
||||||
|
: sg_HardDiskImageHelper.Open(pszImageFilename, pImageInfo, bCreateIfNecessary, strFilenameInZip);
|
||||||
|
|
||||||
if (Err != eIMAGE_ERROR_NONE)
|
if (Err != eIMAGE_ERROR_NONE)
|
||||||
{
|
{
|
||||||
|
|
|
@ -62,7 +62,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
const int MAX_DISK_FULL_NAME = 127;
|
const int MAX_DISK_FULL_NAME = 127;
|
||||||
|
|
||||||
|
|
||||||
ImageError_e ImageOpen(LPCTSTR pszImageFilename, HIMAGE* hDiskImage, bool* pWriteProtected, const bool bCreateIfNecessary, std::string& strFilenameInZip, const bool bExpectFloppy=true);
|
ImageError_e ImageOpen(LPCTSTR pszImageFilename, HIMAGE* hDiskImage, bool* pWriteProtected, const bool bCreateIfNecessary, std::string& strFilenameInZip, const bool bExpectFloppy=true, const bool bIsHarddisk=false);
|
||||||
void ImageClose(const HIMAGE hDiskImage, const bool bOpenError=false);
|
void ImageClose(const HIMAGE hDiskImage, const bool bOpenError=false);
|
||||||
BOOL ImageBoot(const HIMAGE hDiskImage);
|
BOOL ImageBoot(const HIMAGE hDiskImage);
|
||||||
void ImageDestroy(void);
|
void ImageDestroy(void);
|
||||||
|
|
|
@ -623,8 +623,7 @@ static void DrawFrameWindow ()
|
||||||
else if (g_nAppMode == MODE_DEBUG)
|
else if (g_nAppMode == MODE_DEBUG)
|
||||||
DebugDisplay(1);
|
DebugDisplay(1);
|
||||||
else
|
else
|
||||||
VideoRedrawScreen(0); // TODO: Presume this is correct with new fullscreen window mode
|
VideoRedrawScreen();
|
||||||
//VideoRedrawScreen(g_bIsFullScreen ? 1 : 0); // On WM_PAINT: delay 1 refresh before rendering full-screen
|
|
||||||
|
|
||||||
if (g_bPaintingWindow)
|
if (g_bPaintingWindow)
|
||||||
EndPaint(g_hFrameWindow,&ps);
|
EndPaint(g_hFrameWindow,&ps);
|
||||||
|
@ -1831,6 +1830,7 @@ static void ProcessButtonClick(int button, bool bFromButtonUI /*=false*/)
|
||||||
if (g_nAppMode == MODE_LOGO)
|
if (g_nAppMode == MODE_LOGO)
|
||||||
{
|
{
|
||||||
DiskBoot();
|
DiskBoot();
|
||||||
|
LogFileTimeUntilFirstKeyReadReset();
|
||||||
g_nAppMode = MODE_RUNNING;
|
g_nAppMode = MODE_RUNNING;
|
||||||
}
|
}
|
||||||
else if (g_nAppMode == MODE_RUNNING)
|
else if (g_nAppMode == MODE_RUNNING)
|
||||||
|
|
|
@ -148,8 +148,6 @@ static HDD g_HardDisk[NUM_HARDDISKS] = {0};
|
||||||
static bool g_bSaveDiskImage = true; // Save the DiskImage name to Registry
|
static bool g_bSaveDiskImage = true; // Save the DiskImage name to Registry
|
||||||
static UINT g_uSlot = 7;
|
static UINT g_uSlot = 7;
|
||||||
|
|
||||||
static CHardDiskImageHelper sg_HardDiskImageHelper;
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
static void HD_SaveLastDiskImage(const int iDrive);
|
static void HD_SaveLastDiskImage(const int iDrive);
|
||||||
|
@ -359,12 +357,14 @@ static BOOL HD_Insert(const int iDrive, LPCTSTR pszImageFilename)
|
||||||
|
|
||||||
const bool bCreateIfNecessary = false; // NB. Don't allow creation of HDV files
|
const bool bCreateIfNecessary = false; // NB. Don't allow creation of HDV files
|
||||||
const bool bExpectFloppy = false;
|
const bool bExpectFloppy = false;
|
||||||
|
const bool bIsHarddisk = true;
|
||||||
ImageError_e Error = ImageOpen(pszImageFilename,
|
ImageError_e Error = ImageOpen(pszImageFilename,
|
||||||
&g_HardDisk[iDrive].imagehandle,
|
&g_HardDisk[iDrive].imagehandle,
|
||||||
&g_HardDisk[iDrive].bWriteProtected,
|
&g_HardDisk[iDrive].bWriteProtected,
|
||||||
bCreateIfNecessary,
|
bCreateIfNecessary,
|
||||||
g_HardDisk[iDrive].strFilenameInZip, // TODO: Use this
|
g_HardDisk[iDrive].strFilenameInZip, // TODO: Use this
|
||||||
bExpectFloppy);
|
bExpectFloppy,
|
||||||
|
bIsHarddisk);
|
||||||
|
|
||||||
g_HardDisk[iDrive].hd_imageloaded = (Error == eIMAGE_ERROR_NONE);
|
g_HardDisk[iDrive].hd_imageloaded = (Error == eIMAGE_ERROR_NONE);
|
||||||
|
|
||||||
|
|
|
@ -1511,7 +1511,7 @@ void NTSC_SetVideoMode( int bVideoModeFlags )
|
||||||
g_nTextPage = 1;
|
g_nTextPage = 1;
|
||||||
g_nHiresPage = 1;
|
g_nHiresPage = 1;
|
||||||
if (bVideoModeFlags & VF_PAGE2) {
|
if (bVideoModeFlags & VF_PAGE2) {
|
||||||
// Apple IIe, Techical Nodtes, #3: Double High-Resolution Graphics
|
// Apple IIe, Technical Notes, #3: Double High-Resolution Graphics
|
||||||
// 80STORE must be OFF to display page 2
|
// 80STORE must be OFF to display page 2
|
||||||
if (0 == (bVideoModeFlags & VF_80STORE)) {
|
if (0 == (bVideoModeFlags & VF_80STORE)) {
|
||||||
g_nTextPage = 2;
|
g_nTextPage = 2;
|
||||||
|
@ -1653,7 +1653,7 @@ void NTSC_VideoInit( uint8_t* pFramebuffer ) // wsVideoInit
|
||||||
updateMonochromeTables( 0xFF, 0xFF, 0xFF );
|
updateMonochromeTables( 0xFF, 0xFF, 0xFF );
|
||||||
|
|
||||||
for (int y = 0; y < (VIDEO_SCANNER_Y_DISPLAY*2); y++)
|
for (int y = 0; y < (VIDEO_SCANNER_Y_DISPLAY*2); y++)
|
||||||
g_pScanLines[y] = (bgra_t*)(g_pFramebufferbits + 4 * FRAMEBUFFER_W * ((FRAMEBUFFER_H - 1) - y - 18) + 80);
|
g_pScanLines[y] = (bgra_t*)(g_pFramebufferbits + sizeof(bgra_t) * FRAMEBUFFER_W * ((FRAMEBUFFER_H - 1) - y - BORDER_H) + (sizeof(bgra_t) * BORDER_W));
|
||||||
|
|
||||||
g_pVideoAddress = g_pScanLines[0];
|
g_pVideoAddress = g_pScanLines[0];
|
||||||
|
|
||||||
|
@ -1759,6 +1759,8 @@ bool NTSC_VideoIsVbl ()
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
void NTSC_VideoUpdateCycles( long cycles6502 )
|
void NTSC_VideoUpdateCycles( long cycles6502 )
|
||||||
{
|
{
|
||||||
|
_ASSERT(cycles6502 < VIDEO_SCANNER_6502_CYCLES); // Use NTSC_VideoRedrawWholeScreen() instead
|
||||||
|
|
||||||
bool bRedraw = cycles6502 >= VIDEO_SCANNER_6502_CYCLES;
|
bool bRedraw = cycles6502 >= VIDEO_SCANNER_6502_CYCLES;
|
||||||
|
|
||||||
// if( !g_bFullSpeed )
|
// if( !g_bFullSpeed )
|
||||||
|
@ -1804,3 +1806,54 @@ if(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
void NTSC_VideoRedrawWholeScreen( void )
|
||||||
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
const uint16_t currVideoClockVert = g_nVideoClockVert;
|
||||||
|
const uint16_t currVideoClockHorz = g_nVideoClockHorz;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int cyclesLeftToUpdate = VIDEO_SCANNER_6502_CYCLES;
|
||||||
|
const int cyclesToEndOfLine = VIDEO_SCANNER_MAX_HORZ - g_nVideoClockHorz;
|
||||||
|
|
||||||
|
if (g_nVideoClockVert < VIDEO_SCANNER_Y_MIXED)
|
||||||
|
{
|
||||||
|
const int cyclesToLine160 = VIDEO_SCANNER_MAX_HORZ * (VIDEO_SCANNER_Y_MIXED - g_nVideoClockVert - 1) + cyclesToEndOfLine;
|
||||||
|
g_pFuncUpdateGraphicsScreen(cyclesToLine160); // lines [currV...159]
|
||||||
|
cyclesLeftToUpdate -= cyclesToLine160;
|
||||||
|
|
||||||
|
const int cyclesFromLine160ToLine261 = VIDEO_SCANNER_6502_CYCLES - (VIDEO_SCANNER_MAX_HORZ * VIDEO_SCANNER_Y_MIXED);
|
||||||
|
g_pFuncUpdateGraphicsScreen(cyclesFromLine160ToLine261); // lines [160..191..261]
|
||||||
|
cyclesLeftToUpdate -= cyclesFromLine160ToLine261;
|
||||||
|
|
||||||
|
// Any remaining cyclesLeftToUpdate: lines [0...currV)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const int cyclesToLine262 = VIDEO_SCANNER_MAX_HORZ * (VIDEO_SCANNER_MAX_VERT - g_nVideoClockVert - 1) + cyclesToEndOfLine;
|
||||||
|
g_pFuncUpdateGraphicsScreen(cyclesToLine262); // lines [currV...261]
|
||||||
|
cyclesLeftToUpdate -= cyclesToLine262;
|
||||||
|
|
||||||
|
const int cyclesFromLine0ToLine159 = VIDEO_SCANNER_MAX_HORZ * VIDEO_SCANNER_Y_MIXED;
|
||||||
|
g_pFuncUpdateGraphicsScreen(cyclesFromLine0ToLine159); // lines [0..159]
|
||||||
|
cyclesLeftToUpdate -= cyclesFromLine0ToLine159;
|
||||||
|
|
||||||
|
// Any remaining cyclesLeftToUpdate: lines [160...currV)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cyclesLeftToUpdate)
|
||||||
|
g_pFuncUpdateGraphicsScreen(cyclesLeftToUpdate);
|
||||||
|
|
||||||
|
#ifdef _DEBUG
|
||||||
|
_ASSERT(currVideoClockVert == g_nVideoClockVert);
|
||||||
|
_ASSERT(currVideoClockHorz == g_nVideoClockHorz);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
//===========================================================================
|
||||||
|
bool NTSC_GetColorBurst( void )
|
||||||
|
{
|
||||||
|
return (g_nColorBurstPixels < 2) ? false : true;
|
||||||
|
}
|
||||||
|
|
|
@ -18,3 +18,5 @@
|
||||||
extern void NTSC_VideoInitChroma();
|
extern void NTSC_VideoInitChroma();
|
||||||
extern bool NTSC_VideoIsVbl();
|
extern bool NTSC_VideoIsVbl();
|
||||||
extern void NTSC_VideoUpdateCycles( long cycles6502 );
|
extern void NTSC_VideoUpdateCycles( long cycles6502 );
|
||||||
|
extern void NTSC_VideoRedrawWholeScreen( void );
|
||||||
|
extern bool NTSC_GetColorBurst( void );
|
||||||
|
|
|
@ -247,6 +247,7 @@ static LPBYTE g_aSourceStartofLine[ MAX_SOURCE_Y ];
|
||||||
static LPBYTE g_pTextBank1; // Aux
|
static LPBYTE g_pTextBank1; // Aux
|
||||||
static LPBYTE g_pTextBank0; // Main
|
static LPBYTE g_pTextBank0; // Main
|
||||||
|
|
||||||
|
// TC (25/8/2016): TODO: Need to investigate the use of this global flag for 1.27
|
||||||
static /*bool*/ UINT g_VideoForceFullRedraw = 1;
|
static /*bool*/ UINT g_VideoForceFullRedraw = 1;
|
||||||
|
|
||||||
static LPBYTE framebufferaddr = (LPBYTE)0;
|
static LPBYTE framebufferaddr = (LPBYTE)0;
|
||||||
|
@ -1052,16 +1053,25 @@ void VideoDisplayLogo ()
|
||||||
// . 10s only update if HIRES changes (17s for Debug build)
|
// . 10s only update if HIRES changes (17s for Debug build)
|
||||||
// . ~9s no update during full-speed (but IBIZA.DSK doesn't show anything!)
|
// . ~9s no update during full-speed (but IBIZA.DSK doesn't show anything!)
|
||||||
|
|
||||||
void VideoRedrawScreenDuringFullSpeed(DWORD dwCyclesThisFrame, bool bInvalidate /*=false*/)
|
void VideoRedrawScreenDuringFullSpeed(DWORD dwCyclesThisFrame, bool bInit /*=false*/)
|
||||||
{
|
{
|
||||||
|
static DWORD dwFullSpeedStartTime = 0;
|
||||||
static bool bValid = false;
|
static bool bValid = false;
|
||||||
|
|
||||||
if (bInvalidate)
|
if (bInit)
|
||||||
{
|
{
|
||||||
|
// Just entered full-speed mode
|
||||||
bValid = false;
|
bValid = false;
|
||||||
|
dwFullSpeedStartTime = GetTickCount();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD dwFullSpeedDuration = GetTickCount() - dwFullSpeedStartTime;
|
||||||
|
if (dwFullSpeedDuration <= 16) // Only update after every realtime ~17ms of *continuous* full-speed
|
||||||
|
return;
|
||||||
|
|
||||||
|
dwFullSpeedStartTime += dwFullSpeedDuration;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
static BYTE text_main[1024*2] = {0}; // page1 & 2
|
static BYTE text_main[1024*2] = {0}; // page1 & 2
|
||||||
|
@ -1117,11 +1127,10 @@ void VideoRedrawScreenAfterFullSpeed(DWORD dwCyclesThisFrame)
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
void VideoRedrawScreen (UINT uDelayRefresh /* =0 */)
|
void VideoRedrawScreen (void)
|
||||||
{
|
{
|
||||||
g_VideoForceFullRedraw = 1;
|
// NB. Can't rely on g_uVideoMode being non-zero (ie. so it can double up as a flag) since 'non-mixed GR' mode == 0x00.
|
||||||
|
VideoRefreshScreen( g_uVideoMode, true );
|
||||||
VideoRefreshScreen( g_uVideoMode, uDelayRefresh );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
@ -1159,19 +1168,45 @@ static void DebugRefresh(char uDebugFlag)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void VideoRefreshScreen ( int bVideoModeFlags, UINT uDelayRefresh /* =0 */ )
|
// TC: Hacky-fix for GH#341 - better to draw to the correct position in the framebuffer to start with! (in NTSC.cpp)
|
||||||
|
static void VideoFrameBufferAdjust(int& xSrc, int& ySrc, bool bInvertY=false)
|
||||||
{
|
{
|
||||||
static UINT uDelayRefreshCount = 0;
|
int dx=0, dy=0;
|
||||||
if (uDelayRefresh) uDelayRefreshCount = uDelayRefresh;
|
|
||||||
|
|
||||||
|
if (g_eVideoType == VT_MONO_TV || g_eVideoType == VT_COLOR_TV)
|
||||||
|
{
|
||||||
|
// Adjust the src locations for the NTSC video modes
|
||||||
|
dx = 2;
|
||||||
|
dy = -1;
|
||||||
|
}
|
||||||
|
else if (g_eVideoType == VT_COLOR_MONITOR)
|
||||||
|
{
|
||||||
|
//if ((g_uVideoMode & VF_TEXT) == 0) // NB. Not sufficient, eg. ANSI STORY...
|
||||||
|
if ( NTSC_GetColorBurst() == true ) // ANSI STORY (end credits): split DGR/TEXT80/DGR on scanline
|
||||||
|
dx = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bInvertY)
|
||||||
|
dy -= dy;
|
||||||
|
|
||||||
|
xSrc += dx;
|
||||||
|
ySrc += dy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void VideoRefreshScreen ( int bVideoModeFlags, bool bRedrawWholeScreen /* =false*/ )
|
||||||
|
{
|
||||||
#if defined(_DEBUG) && defined(DEBUG_REFRESH_TIMINGS)
|
#if defined(_DEBUG) && defined(DEBUG_REFRESH_TIMINGS)
|
||||||
DebugRefresh(0);
|
DebugRefresh(0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if( bVideoModeFlags )
|
if (bRedrawWholeScreen || g_nAppMode == MODE_PAUSED)
|
||||||
{
|
{
|
||||||
|
// bVideoModeFlags set if:
|
||||||
|
// . MODE_DEBUG : always
|
||||||
|
// . MODE_RUNNING : called from VideoRedrawScreen(), eg. during full-speed
|
||||||
|
if (bRedrawWholeScreen)
|
||||||
NTSC_SetVideoMode( bVideoModeFlags );
|
NTSC_SetVideoMode( bVideoModeFlags );
|
||||||
NTSC_VideoUpdateCycles( VIDEO_SCANNER_6502_CYCLES );
|
NTSC_VideoRedrawWholeScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
// NTSC_BEGIN
|
// NTSC_BEGIN
|
||||||
|
@ -1191,12 +1226,6 @@ void VideoRefreshScreen ( int bVideoModeFlags, UINT uDelayRefresh /* =0 */ )
|
||||||
|
|
||||||
if (hFrameDC)
|
if (hFrameDC)
|
||||||
{
|
{
|
||||||
if (uDelayRefreshCount)
|
|
||||||
{
|
|
||||||
// Delay the refresh in full-screen mode (to allow screen-capabilities to take effect) - required for Win7 (and others?)
|
|
||||||
--uDelayRefreshCount;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
int xDst = 0;
|
int xDst = 0;
|
||||||
int yDst = 0;
|
int yDst = 0;
|
||||||
|
@ -1210,13 +1239,7 @@ void VideoRefreshScreen ( int bVideoModeFlags, UINT uDelayRefresh /* =0 */ )
|
||||||
|
|
||||||
int xSrc = BORDER_W;
|
int xSrc = BORDER_W;
|
||||||
int ySrc = BORDER_H;
|
int ySrc = BORDER_H;
|
||||||
|
VideoFrameBufferAdjust(xSrc, ySrc); // TC: Hacky-fix for GH#341
|
||||||
if (g_eVideoType == VT_MONO_TV || g_eVideoType == VT_COLOR_TV)
|
|
||||||
{
|
|
||||||
// Adjust the src locations for the NTSC video modes
|
|
||||||
xSrc += 2;
|
|
||||||
ySrc -= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int xdest = GetFullScreenOffsetX();
|
int xdest = GetFullScreenOffsetX();
|
||||||
int ydest = GetFullScreenOffsetY();
|
int ydest = GetFullScreenOffsetY();
|
||||||
|
@ -1368,13 +1391,6 @@ bool VideoGetSWAltCharSet(void)
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
void VideoSetForceFullRedraw(void)
|
|
||||||
{
|
|
||||||
g_VideoForceFullRedraw = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
//===========================================================================
|
|
||||||
|
|
||||||
void VideoSetSnapshot_v1(const UINT AltCharSet, const UINT VideoMode)
|
void VideoSetSnapshot_v1(const UINT AltCharSet, const UINT VideoMode)
|
||||||
{
|
{
|
||||||
g_nAltCharSetOffset = !AltCharSet ? 0 : 256;
|
g_nAltCharSetOffset = !AltCharSet ? 0 : 256;
|
||||||
|
@ -1752,8 +1768,14 @@ void Video_MakeScreenShot(FILE *pFile)
|
||||||
// No need to use GetDibBits() since we already have http://msdn.microsoft.com/en-us/library/ms532334.aspx
|
// No need to use GetDibBits() since we already have http://msdn.microsoft.com/en-us/library/ms532334.aspx
|
||||||
// @reference: "Storing an Image" http://msdn.microsoft.com/en-us/library/ms532340(VS.85).aspx
|
// @reference: "Storing an Image" http://msdn.microsoft.com/en-us/library/ms532340(VS.85).aspx
|
||||||
pSrc = (uint32_t*) g_pFramebufferbits;
|
pSrc = (uint32_t*) g_pFramebufferbits;
|
||||||
pSrc += BORDER_H * FRAMEBUFFER_W; // Skip top border
|
|
||||||
pSrc += BORDER_W; // Skip left border
|
int xSrc = BORDER_W;
|
||||||
|
int ySrc = BORDER_H;
|
||||||
|
VideoFrameBufferAdjust(xSrc, ySrc, true); // TC: Hacky-fix for GH#341 & GH#356
|
||||||
|
// Lines stored in reverse, so invert the y-adjust value
|
||||||
|
|
||||||
|
pSrc += xSrc; // Skip left border
|
||||||
|
pSrc += ySrc * FRAMEBUFFER_W; // Skip top border
|
||||||
|
|
||||||
if( g_iScreenshotType == SCREENSHOT_280x192 )
|
if( g_iScreenshotType == SCREENSHOT_280x192 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -169,10 +169,10 @@ void VideoDestroy ();
|
||||||
void VideoDisplayLogo ();
|
void VideoDisplayLogo ();
|
||||||
void VideoInitialize ();
|
void VideoInitialize ();
|
||||||
void VideoRealizePalette (HDC);
|
void VideoRealizePalette (HDC);
|
||||||
void VideoRedrawScreenDuringFullSpeed(DWORD dwCyclesThisFrame, bool bInvalidate = false);
|
void VideoRedrawScreenDuringFullSpeed(DWORD dwCyclesThisFrame, bool bInit = false);
|
||||||
void VideoRedrawScreenAfterFullSpeed(DWORD dwCyclesThisFrame);
|
void VideoRedrawScreenAfterFullSpeed(DWORD dwCyclesThisFrame);
|
||||||
void VideoRedrawScreen (UINT uDelayRefresh = 0);
|
void VideoRedrawScreen (void);
|
||||||
void VideoRefreshScreen (int bVideoFlags, UINT uDelayRefresh =0 );
|
void VideoRefreshScreen (int bVideoFlags, bool bRedrawWholeScreen = false);
|
||||||
void VideoReinitialize ();
|
void VideoReinitialize ();
|
||||||
void VideoResetState ();
|
void VideoResetState ();
|
||||||
WORD VideoGetScannerAddress(bool* pbVblBar_OUT, const DWORD uExecutedCycles);
|
WORD VideoGetScannerAddress(bool* pbVblBar_OUT, const DWORD uExecutedCycles);
|
||||||
|
@ -187,8 +187,6 @@ bool VideoGetSWPAGE2(void);
|
||||||
bool VideoGetSWTEXT(void);
|
bool VideoGetSWTEXT(void);
|
||||||
bool VideoGetSWAltCharSet(void);
|
bool VideoGetSWAltCharSet(void);
|
||||||
|
|
||||||
void VideoSetForceFullRedraw(void);
|
|
||||||
|
|
||||||
void VideoSetSnapshot_v1(const UINT AltCharSet, const UINT VideoMode);
|
void VideoSetSnapshot_v1(const UINT AltCharSet, const UINT VideoMode);
|
||||||
void VideoSaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
|
void VideoSaveSnapshot(class YamlSaveHelper& yamlSaveHelper);
|
||||||
void VideoLoadSnapshot(class YamlLoadHelper& yamlLoadHelper);
|
void VideoLoadSnapshot(class YamlLoadHelper& yamlLoadHelper);
|
||||||
|
|
Loading…
Add table
Reference in a new issue