2005-09-03: Updated to version 1.38

Signed-off-by: Gwenhael Le Moine <gwenhael.le.moine@gmail.com>
This commit is contained in:
Gwenhael Le Moine 2024-03-19 23:35:29 +01:00
parent e1230f4415
commit 0c2f128039
No known key found for this signature in database
GPG key ID: FDFE3669426707A7
16 changed files with 373 additions and 266 deletions

BIN
EMU48.EXE

Binary file not shown.

View file

@ -1,4 +1,4 @@
Known bugs and restrictions of Emu48 V1.37 Known bugs and restrictions of Emu48 V1.38
------------------------------------------ ------------------------------------------
- the following I/O bits aren't emulated (incomplete) - the following I/O bits aren't emulated (incomplete)
@ -55,4 +55,4 @@ Known bugs and restrictions of Emu48 V1.37
- quitting the emulator while programming the flash isn't allowed, - quitting the emulator while programming the flash isn't allowed,
because the content of flash state machine isn't saved so far because the content of flash state machine isn't saved so far
06/14/04 (c) by Christoph Gießelink, c dot giesselink at gmx dot de 08/30/05 (c) by Christoph Gießelink, c dot giesselink at gmx dot de

View file

@ -1,3 +1,50 @@
Service Pack 38 for Emu48 Version 1.0
DISPLAY.C
- changed gray scale implementation from conditional compiling to
variable controlled
- bugfix in function GetLineCounterGray() and StartDisplayGray(),
VBL down counter counted 62,...,0,63 instead of 63,...,0
EMU48.C
- changed function SettingsProc(), added IDC_GRAYSCALE button
handling
- changed function OnCreate() and OnDestroy(), changed gray scale
implementation from conditional compiling to variable controlled
EMU48.H
- removed gray scale definitions
- changed some function prototypes to function pointers
EMU48.RC
- added "Enable Virtual LCD Delay" checkbox in Settings dialog
- changed menu text order from "Copy Stack/Copy Screen/Paste Stack"
to "Copy Screen/Copy Stack/Paste Stack"
- changed version
ENGINE.C
- changed function WorkerThread(), changed gray scale implementation
from conditional compiling to variable controlled
FILES.C
- changed function PatchRom(), changed ASCII string handling from
BYTE to CHAR data type
MOPS.C
- changed function Nwrite(), changed gray scale implementation from
conditional compiling to variable controlled
OPS.H
- changed function Nsrb(), speed optimization
RESOURCE.H
- added definition
SETTINGS.C
- changed function ReadSettings() and WriteSettings(), added item
"Grayscale" in section [Emulator] in the INI-File
Service Pack 37 for Emu48 Version 1.0 Service Pack 37 for Emu48 Version 1.0
DDESERV.C DDESERV.C

View file

@ -15,11 +15,10 @@
// #define DEBUG_DISPLAY // switch for DISPLAY debug purpose // #define DEBUG_DISPLAY // switch for DISPLAY debug purpose
#if defined GRAYSCALE #define NOCOLORSGRAY 8 // no. of colors in gray scale mode
#define NOCOLORS 8 #define NOCOLORSBW 2 // no. of colors in black and white mode
#else
#define NOCOLORS 2 #define DISPLAY_FREQ 19 // display update 1/frequency (1/64) in ms (gray scale mode)
#endif
#define B 0x00000000 // black #define B 0x00000000 // black
#define W 0x00FFFFFF // white #define W 0x00FFFFFF // white
@ -30,23 +29,35 @@
// main display lines, handle zero lines exception // main display lines, handle zero lines exception
#define LINES(n) (((n) == 0) ? 64 : ((n)+1)) #define LINES(n) (((n) == 0) ? 64 : ((n)+1))
#define GRAYMASK (((((NOCOLORS)-1)>>1)<<24) \ #define GRAYMASK(c) (((((c)-1)>>1)<<24) \
|((((NOCOLORS)-1)>>1)<<16) \ |((((c)-1)>>1)<<16) \
|((((NOCOLORS)-1)>>1)<<8) \ |((((c)-1)>>1)<<8) \
|((((NOCOLORS)-1)>>1))) |((((c)-1)>>1)))
#define DIBPIXEL(d,p) *(((DWORD*)(d))++) = ((*((DWORD*)(d)) & GRAYMASK) << 1) | (p) #define DIBPIXEL(d,p) *(((DWORD*)(d))++) = ((*((DWORD*)(d)) & dwGrayMask) << 1) | (p)
UINT nBackgroundX = 0; BOOL bGrayscale = FALSE;
UINT nBackgroundY = 0; UINT nBackgroundX = 0;
UINT nBackgroundW = 0; UINT nBackgroundY = 0;
UINT nBackgroundH = 0; UINT nBackgroundW = 0;
UINT nLcdX = 0; UINT nBackgroundH = 0;
UINT nLcdY = 0; UINT nLcdX = 0;
UINT nLcdZoom = 1; UINT nLcdY = 0;
LPBYTE pbyLcd; UINT nLcdZoom = 1;
HDC hLcdDC = NULL; LPBYTE pbyLcd;
HDC hMainDC = NULL; HDC hLcdDC = NULL;
HDC hMainDC = NULL;
BYTE (*GetLineCounter)(VOID) = NULL;
VOID (*StartDisplay)(BYTE byInitial) = NULL;
VOID (*StopDisplay)(VOID) = NULL;
static BYTE GetLineCounterGray(VOID);
static BYTE GetLineCounterBW(VOID);
static VOID StartDisplayGray(BYTE byInitial);
static VOID StartDisplayBW(BYTE byInitial);
static VOID StopDisplayGray(VOID);
static VOID StopDisplayBW(VOID);
static HBITMAP hLcdBitmap; static HBITMAP hLcdBitmap;
static HBITMAP hMainBitmap; static HBITMAP hMainBitmap;
@ -54,6 +65,13 @@ static HBITMAP hMainBitmap;
static DWORD Pattern[16]; static DWORD Pattern[16];
static BYTE Buf[36]; static BYTE Buf[36];
static DWORD dwGrayMask;
static LARGE_INTEGER lLcdRef; // reference time for VBL counter
static UINT uLcdTimerId = 0;
static BYTE byVblRef = 0; // VBL stop reference
static DWORD dwKMLColor[64] = // color table loaded by KML script static DWORD dwKMLColor[64] = // color table loaded by KML script
{ {
W,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B, W,B,B,B,B,B,B,B,B,B,B,B,B,B,B,B,
@ -65,10 +83,10 @@ static DWORD dwKMLColor[64] = // color table loaded by KML script
static struct static struct
{ {
BITMAPINFOHEADER Lcd_bmih; BITMAPINFOHEADER Lcd_bmih;
RGBQUAD bmiColors[NOCOLORS]; RGBQUAD bmiColors[NOCOLORSGRAY];
} bmiLcd = } bmiLcd =
{ {
{0x28,0/*x*/,0/*y*/,1,8,BI_RGB,0,0,0,NOCOLORS,0} {0x28,0/*x*/,0/*y*/,1,8,BI_RGB,0,0,0,NOCOLORSGRAY,0}
}; };
static __inline VOID BuildPattern(VOID) static __inline VOID BuildPattern(VOID)
@ -106,32 +124,28 @@ static __inline VOID BuildPattern(VOID)
VOID UpdateContrast(BYTE byContrast) VOID UpdateContrast(BYTE byContrast)
{ {
#if defined GRAYSCALE INT i,nColors;
INT i;
// table for max. 8 colors
const INT nCAdj[] = { 0, 1, 1, 2, 1, 2, 2, 3 };
RGBQUAD c = *(RGBQUAD*)&dwKMLColor[byContrast]; // pixel on color RGBQUAD c = *(RGBQUAD*)&dwKMLColor[byContrast]; // pixel on color
RGBQUAD b = *(RGBQUAD*)&dwKMLColor[byContrast+32]; // pixel off color RGBQUAD b = *(RGBQUAD*)&dwKMLColor[byContrast+32]; // pixel off color
if ((Chipset.IORam[BITOFFSET] & DON) == 0 || I == *(DWORD*)&b) if ((Chipset.IORam[BITOFFSET] & DON) == 0 || I == *(DWORD*)&b)
b = *(RGBQUAD*)&dwKMLColor[0]; b = *(RGBQUAD*)&dwKMLColor[0];
// fill color palette of bitmap nColors = bGrayscale ? (NOCOLORSGRAY-1) : (NOCOLORSBW-1);
for (i = 0; i < ARRAYSIZEOF(bmiLcd.bmiColors); ++i)
{
const INT nCAdj[] = { 0, 1, 1, 2, 1, 2, 2, 3 };
_ASSERT(i < ARRAYSIZEOF(bmiLcd.bmiColors)); _ASSERT(nColors <= ARRAYSIZEOF(nCAdj)); // no. of colors must be smaller than entries in the gray color table
_ASSERT(i < ARRAYSIZEOF(nCAdj));
// fill color palette of bitmap
for (i = 0; i <= nColors; ++i)
{
bmiLcd.bmiColors[i] = b; bmiLcd.bmiColors[i] = b;
bmiLcd.bmiColors[i].rgbRed += (((INT) c.rgbRed - (INT) b.rgbRed) * nCAdj[i] / 3); bmiLcd.bmiColors[i].rgbRed += ((INT) c.rgbRed - (INT) b.rgbRed) * nCAdj[i] / nCAdj[nColors];
bmiLcd.bmiColors[i].rgbGreen += (((INT) c.rgbGreen - (INT) b.rgbGreen) * nCAdj[i] / 3); bmiLcd.bmiColors[i].rgbGreen += ((INT) c.rgbGreen - (INT) b.rgbGreen) * nCAdj[i] / nCAdj[nColors];
bmiLcd.bmiColors[i].rgbBlue += (((INT) c.rgbBlue - (INT) b.rgbBlue) * nCAdj[i] / 3); bmiLcd.bmiColors[i].rgbBlue += ((INT) c.rgbBlue - (INT) b.rgbBlue) * nCAdj[i] / nCAdj[nColors];
} }
#else
bmiLcd.bmiColors[1] = *(RGBQUAD*)&dwKMLColor[byContrast]; // pixel on color
bmiLcd.bmiColors[0] = *(RGBQUAD*)&dwKMLColor[byContrast+32]; // pixel off color
if ((Chipset.IORam[BITOFFSET] & DON) == 0 || I == *(DWORD*)&bmiLcd.bmiColors[0])
bmiLcd.bmiColors[0] = *(RGBQUAD*)&dwKMLColor[0];
#endif
// update palette information // update palette information
_ASSERT(hLcdDC); _ASSERT(hLcdDC);
@ -145,6 +159,28 @@ VOID SetLcdColor(UINT nId, UINT nRed, UINT nGreen, UINT nBlue)
return; return;
} }
VOID SetLcdMode(BOOL bMode)
{
if ((bGrayscale = bMode))
{
// set pixel update mask
dwGrayMask = GRAYMASK(NOCOLORSGRAY);
GetLineCounter = GetLineCounterGray;
StartDisplay = StartDisplayGray;
StopDisplay = StopDisplayGray;
}
else
{
// set pixel update mask
dwGrayMask = GRAYMASK(NOCOLORSBW);
GetLineCounter = GetLineCounterBW;
StartDisplay = StartDisplayBW;
StopDisplay = StopDisplayBW;
}
UpdateContrast(Chipset.contrast);
return;
}
VOID CreateLcdBitmap(VOID) VOID CreateLcdBitmap(VOID)
{ {
// create LCD bitmap // create LCD bitmap
@ -159,7 +195,7 @@ VOID CreateLcdBitmap(VOID)
SelectPalette(hLcdDC,hPalette,FALSE); // set palette for LCD DC SelectPalette(hLcdDC,hPalette,FALSE); // set palette for LCD DC
RealizePalette(hLcdDC); // realize palette RealizePalette(hLcdDC); // realize palette
BuildPattern(); // build Nibble -> DIB mask pattern BuildPattern(); // build Nibble -> DIB mask pattern
UpdateContrast(Chipset.contrast); SetLcdMode(bGrayscale); // init display update function pointer
return; return;
} }
@ -170,6 +206,10 @@ VOID DestroyLcdBitmap(VOID)
while(i < 32) dwKMLColor[i++] = B; while(i < 32) dwKMLColor[i++] = B;
while(i < 64) dwKMLColor[i++] = I; while(i < 64) dwKMLColor[i++] = I;
GetLineCounter = NULL;
StartDisplay = NULL;
StopDisplay = NULL;
if (hLcdDC != NULL) if (hLcdDC != NULL)
{ {
// destroy LCD bitmap // destroy LCD bitmap
@ -220,7 +260,7 @@ VOID DestroyMainBitmap(VOID)
VOID UpdateDisplayPointers(VOID) VOID UpdateDisplayPointers(VOID)
{ {
GRAYON(EnterCriticalSection(&csLcdLock)); EnterCriticalSection(&csLcdLock);
{ {
UINT nLines = LINES(Chipset.lcounter); UINT nLines = LINES(Chipset.lcounter);
@ -248,7 +288,7 @@ VOID UpdateDisplayPointers(VOID)
} }
Chipset.end2 = Chipset.start2 + (64 - nLines) * 34; Chipset.end2 = Chipset.start2 + (64 - nLines) * 34;
} }
GRAYON(LeaveCriticalSection(&csLcdLock)); LeaveCriticalSection(&csLcdLock);
return; return;
} }
@ -425,13 +465,16 @@ VOID UpdateMenuDisplay(VOID)
VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s) VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s)
{ {
#if !defined GRAYSCALE
INT x0, x; INT x0, x;
INT y0, y; INT y0, y;
DWORD *p; DWORD *p;
INT lWidth;
UINT nLines;
INT lWidth = abs(Chipset.width); // display width if (bGrayscale) return; // no direct writing in grayscale mode
UINT nLines = LINES(Chipset.lcounter); // main display lines
lWidth = abs(Chipset.width); // display width
nLines = LINES(Chipset.lcounter); // main display lines
#if defined DEBUG_DISPLAY #if defined DEBUG_DISPLAY
{ {
@ -494,7 +537,7 @@ VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s)
p = (DWORD*) (pbyLcd+y*LCD_ROW*nLcdZoom*nLcdZoom); p = (DWORD*) (pbyLcd+y*LCD_ROW*nLcdZoom*nLcdZoom);
} }
else else
p += nLcdZoom; // next x position in bitmap p += nLcdZoom; // next x position in bitmap
} }
// update window region // update window region
@ -531,18 +574,19 @@ VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s)
GdiFlush(); GdiFlush();
} }
LeaveCriticalSection(&csGDILock); LeaveCriticalSection(&csGDILock);
#endif
return; return;
} }
VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s) VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s)
{ {
#if !defined GRAYSCALE
UINT x0, x; UINT x0, x;
UINT y0, y; UINT y0, y;
DWORD *p; DWORD *p;
UINT nLines;
UINT nLines = LINES(Chipset.lcounter); // main display lines if (bGrayscale) return; // no direct writing in grayscale mode
nLines = LINES(Chipset.lcounter); // main display lines
#if defined DEBUG_DISPLAY #if defined DEBUG_DISPLAY
{ {
@ -645,13 +689,12 @@ VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s)
if (x>131) x=131; if (x>131) x=131;
} }
EnterCriticalSection(&csGDILock); // solving NT GDI problems EnterCriticalSection(&csGDILock); // solving NT GDI problems
{ {
BitBlt(hWindowDC, nLcdX+x0, nLcdY+y0, x-x0, y-y0+nLcdZoom, hLcdDC, x0, y0, SRCCOPY); BitBlt(hWindowDC, nLcdX+x0, nLcdY+y0, x-x0, y-y0+nLcdZoom, hLcdDC, x0, y0, SRCCOPY);
GdiFlush(); GdiFlush();
} }
LeaveCriticalSection(&csGDILock); LeaveCriticalSection(&csGDILock);
#endif
return; return;
} }
@ -706,15 +749,13 @@ VOID ResizeWindow(VOID)
return; return;
} }
//################
//#
//# functions for gray scale implementation
//#
//################
#if defined GRAYSCALE // main display update routine
#define DISPLAY_FREQ 19 // display update 1/frequency (1/64) in ms
static LARGE_INTEGER lLcdRef; // reference time for VBL counter
static UINT uLcdTimerId = 0;
static VOID CALLBACK LcdProc(UINT uEventId, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) static VOID CALLBACK LcdProc(UINT uEventId, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{ {
EnterCriticalSection(&csLcdLock); EnterCriticalSection(&csLcdLock);
@ -735,7 +776,7 @@ static VOID CALLBACK LcdProc(UINT uEventId, UINT uMsg, DWORD dwUser, DWORD dw1,
} }
// LCD line counter calculation // LCD line counter calculation
BYTE GetLineCounter(VOID) BYTE GetLineCounterGray(VOID)
{ {
LARGE_INTEGER lLC; LARGE_INTEGER lLC;
BYTE byTime; BYTE byTime;
@ -750,10 +791,10 @@ BYTE GetLineCounter(VOID)
if (byTime > 0x3F) byTime = 0x3F; // all counts made if (byTime > 0x3F) byTime = 0x3F; // all counts made
return (0x7E - byTime) & 0x3F; // update display between VBL counter 0x3F-0x3E return 0x3F - byTime; // update display between VBL counter 0x3F-0x3E
} }
VOID StartDisplay(BYTE byInitial) static VOID StartDisplayGray(BYTE byInitial)
{ {
if (uLcdTimerId) // LCD update timer running if (uLcdTimerId) // LCD update timer running
return; // -> quit return; // -> quit
@ -763,14 +804,15 @@ VOID StartDisplay(BYTE byInitial)
QueryPerformanceCounter(&lLcdRef); // actual time of top line QueryPerformanceCounter(&lLcdRef); // actual time of top line
// adjust startup counter to get the right VBL value // adjust startup counter to get the right VBL value
lLcdRef.QuadPart -= ((LONGLONG) ((0x7E - byInitial) & 0x3F) * lFreq.QuadPart) >> 12; _ASSERT(byInitial <= 0x3F); // line counter value 0 - 63
lLcdRef.QuadPart -= ((LONGLONG) (0x3F - byInitial) * lFreq.QuadPart) >> 12;
VERIFY(uLcdTimerId = timeSetEvent(DISPLAY_FREQ,0,(LPTIMECALLBACK)&LcdProc,0,TIME_PERIODIC)); VERIFY(uLcdTimerId = timeSetEvent(DISPLAY_FREQ,0,(LPTIMECALLBACK)&LcdProc,0,TIME_PERIODIC));
} }
return; return;
} }
VOID StopDisplay(VOID) static VOID StopDisplayGray(VOID)
{ {
BYTE a[2]; BYTE a[2];
ReadIO(a,LINECOUNT,2); // update VBL at display off time ReadIO(a,LINECOUNT,2); // update VBL at display off time
@ -790,11 +832,13 @@ VOID StopDisplay(VOID)
return; return;
} }
#else //################
//#
//# functions for black and white implementation
//#
//################
static BYTE byVblRef = 0; // VBL stop reference // LCD line counter calculation in BW mode
// LCD line counter calculation
static BYTE F4096Hz(VOID) // get a 6 bit 4096Hz down counter value static BYTE F4096Hz(VOID) // get a 6 bit 4096Hz down counter value
{ {
LARGE_INTEGER lLC; LARGE_INTEGER lLC;
@ -805,24 +849,22 @@ static BYTE F4096Hz(VOID) // get a 6 bit 4096Hz down counter value
return -(BYTE)(((lLC.QuadPart - lAppStart.QuadPart) << 12) / lFreq.QuadPart) & 0x3F; return -(BYTE)(((lLC.QuadPart - lAppStart.QuadPart) << 12) / lFreq.QuadPart) & 0x3F;
} }
BYTE GetLineCounter(VOID) // get line counter value static BYTE GetLineCounterBW(VOID) // get line counter value
{ {
_ASSERT(byVblRef < 0x40); _ASSERT(byVblRef < 0x40);
return (0x40 + F4096Hz() - byVblRef) & 0x3F; return (0x40 + F4096Hz() - byVblRef) & 0x3F;
} }
VOID StartDisplay(BYTE byInitial) static VOID StartDisplayBW(BYTE byInitial)
{ {
// get positive VBL difference between now and stop time // get positive VBL difference between now and stop time
byVblRef = (0x40 + F4096Hz() - byInitial) & 0x3F; byVblRef = (0x40 + F4096Hz() - byInitial) & 0x3F;
return; return;
} }
VOID StopDisplay(VOID) static VOID StopDisplayBW(VOID)
{ {
BYTE a[2]; BYTE a[2];
ReadIO(a,LINECOUNT,2); // update VBL at display off time ReadIO(a,LINECOUNT,2); // update VBL at display off time
return; return;
} }
#endif

View file

@ -13,7 +13,7 @@
#include "kml.h" #include "kml.h"
#include "debugger.h" #include "debugger.h"
#define VERSION "1.37" #define VERSION "1.38"
#define CF_HPOBJ "CF_HPOBJ" // clipboard format for DDE #define CF_HPOBJ "CF_HPOBJ" // clipboard format for DDE
#define MAXPORTS 256 // number of COM ports #define MAXPORTS 256 // number of COM ports
@ -48,7 +48,7 @@ static const LPCTSTR szLicence =
CRITICAL_SECTION csGDILock; // critical section for hWindowDC CRITICAL_SECTION csGDILock; // critical section for hWindowDC
GRAYON(CRITICAL_SECTION csLcdLock); // critical section for display update CRITICAL_SECTION csLcdLock; // critical section for display update
CRITICAL_SECTION csKeyLock; // critical section for key scan CRITICAL_SECTION csKeyLock; // critical section for key scan
CRITICAL_SECTION csIOLock; // critical section for I/O access CRITICAL_SECTION csIOLock; // critical section for I/O access
CRITICAL_SECTION csT1Lock; // critical section for timer1 access CRITICAL_SECTION csT1Lock; // critical section for timer1 access
@ -266,6 +266,7 @@ static BOOL CALLBACK SettingsProc(HWND hDlg, UINT message, DWORD wParam, LONG lP
CheckDlgButton(hDlg,IDC_AUTOSAVEONEXIT,bAutoSaveOnExit); CheckDlgButton(hDlg,IDC_AUTOSAVEONEXIT,bAutoSaveOnExit);
CheckDlgButton(hDlg,IDC_OBJECTLOADWARNING,bLoadObjectWarning); CheckDlgButton(hDlg,IDC_OBJECTLOADWARNING,bLoadObjectWarning);
CheckDlgButton(hDlg,IDC_ALWAYSDISPLOG,bAlwaysDisplayLog); CheckDlgButton(hDlg,IDC_ALWAYSDISPLOG,bAlwaysDisplayLog);
CheckDlgButton(hDlg,IDC_GRAYSCALE,bGrayscale);
// set disassebler mode // set disassebler mode
CheckDlgButton(hDlg,(disassembler_mode == HP_MNEMONICS) ? IDC_DISASM_HP : IDC_DISASM_CLASS,BST_CHECKED); CheckDlgButton(hDlg,(disassembler_mode == HP_MNEMONICS) ? IDC_DISASM_HP : IDC_DISASM_CLASS,BST_CHECKED);
@ -375,6 +376,13 @@ static BOOL CALLBACK SettingsProc(HWND hDlg, UINT message, DWORD wParam, LONG lP
bLoadObjectWarning = IsDlgButtonChecked(hDlg, IDC_OBJECTLOADWARNING); bLoadObjectWarning = IsDlgButtonChecked(hDlg, IDC_OBJECTLOADWARNING);
bAlwaysDisplayLog = IsDlgButtonChecked(hDlg, IDC_ALWAYSDISPLOG); bAlwaysDisplayLog = IsDlgButtonChecked(hDlg, IDC_ALWAYSDISPLOG);
SetSpeed(bRealSpeed); // set speed SetSpeed(bRealSpeed); // set speed
// LCD grayscale checkbox has been changed
if (bGrayscale != (BOOL) IsDlgButtonChecked(hDlg,IDC_GRAYSCALE))
{
UINT nOldState = SwitchToState(SM_INVALID);
SetLcdMode(!bGrayscale); // set new display mode
SwitchToState(nOldState);
}
if (nState == SM_INVALID) if (nState == SM_INVALID)
{ {
bPort2IsShared = IsDlgButtonChecked(hDlg,IDC_PORT2ISSHARED); bPort2IsShared = IsDlgButtonChecked(hDlg,IDC_PORT2ISSHARED);
@ -450,7 +458,7 @@ static UINT SaveChanges(BOOL bAuto)
static LRESULT OnCreate(HWND hWindow) static LRESULT OnCreate(HWND hWindow)
{ {
InitializeCriticalSection(&csGDILock); InitializeCriticalSection(&csGDILock);
GRAYON(InitializeCriticalSection(&csLcdLock)); InitializeCriticalSection(&csLcdLock);
InitializeCriticalSection(&csKeyLock); InitializeCriticalSection(&csKeyLock);
InitializeCriticalSection(&csIOLock); InitializeCriticalSection(&csIOLock);
InitializeCriticalSection(&csT1Lock); InitializeCriticalSection(&csT1Lock);
@ -492,7 +500,7 @@ static LRESULT OnDestroy(HWND hWindow)
} }
DeleteCriticalSection(&csGDILock); DeleteCriticalSection(&csGDILock);
GRAYON(DeleteCriticalSection(&csLcdLock)); DeleteCriticalSection(&csLcdLock);
DeleteCriticalSection(&csKeyLock); DeleteCriticalSection(&csKeyLock);
DeleteCriticalSection(&csIOLock); DeleteCriticalSection(&csIOLock);
DeleteCriticalSection(&csT1Lock); DeleteCriticalSection(&csT1Lock);

View file

@ -6,14 +6,6 @@
* Copyright (C) 1995 Sebastien Carlier * Copyright (C) 1995 Sebastien Carlier
* *
*/ */
#if defined GRAYSCALE // grayscale defines
#define GRAYON(a) a
#define GRAYOFF(a)
#else
#define GRAYON(a)
#define GRAYOFF(a) a
#endif
#include "types.h" #include "types.h"
#define HARDWARE "Yorke" // emulator hardware #define HARDWARE "Yorke" // emulator hardware
@ -116,6 +108,7 @@ extern VOID ReadLastDocument(LPTSTR szFileName, DWORD nSize);
extern VOID WriteLastDocument(LPCTSTR szFilename); extern VOID WriteLastDocument(LPCTSTR szFilename);
// Display.c // Display.c
extern BOOL bGrayscale;
extern UINT nBackgroundX; extern UINT nBackgroundX;
extern UINT nBackgroundY; extern UINT nBackgroundY;
extern UINT nBackgroundW; extern UINT nBackgroundW;
@ -126,8 +119,12 @@ extern UINT nLcdZoom;
extern LPBYTE pbyLcd; extern LPBYTE pbyLcd;
extern HDC hLcdDC; extern HDC hLcdDC;
extern HDC hMainDC; extern HDC hMainDC;
extern BYTE (*GetLineCounter)(VOID);
extern VOID (*StartDisplay)(BYTE byInitial);
extern VOID (*StopDisplay)(VOID);
extern VOID UpdateContrast(BYTE byContrast); extern VOID UpdateContrast(BYTE byContrast);
extern VOID SetLcdColor(UINT nId, UINT nRed, UINT nGreen, UINT nBlue); extern VOID SetLcdColor(UINT nId, UINT nRed, UINT nGreen, UINT nBlue);
extern VOID SetLcdMode(BOOL bMode);
extern VOID CreateLcdBitmap(VOID); extern VOID CreateLcdBitmap(VOID);
extern VOID DestroyLcdBitmap(VOID); extern VOID DestroyLcdBitmap(VOID);
extern BOOL CreateMainBitmap(LPCTSTR szFilename); extern BOOL CreateMainBitmap(LPCTSTR szFilename);
@ -139,9 +136,6 @@ extern VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s);
extern VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s); extern VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s);
extern VOID UpdateAnnunciators(VOID); extern VOID UpdateAnnunciators(VOID);
extern VOID ResizeWindow(VOID); extern VOID ResizeWindow(VOID);
extern BYTE GetLineCounter(VOID);
extern VOID StartDisplay(BYTE byInitial);
extern VOID StopDisplay(VOID);
// Engine.c // Engine.c
extern BOOL bInterrupt; extern BOOL bInterrupt;

View file

@ -74,7 +74,7 @@ BEGIN
LEFTMARGIN, 7 LEFTMARGIN, 7
RIGHTMARGIN, 160 RIGHTMARGIN, 160
TOPMARGIN, 4 TOPMARGIN, 4
BOTTOMMARGIN, 210 BOTTOMMARGIN, 222
END END
IDD_CHOOSEKML, DIALOG IDD_CHOOSEKML, DIALOG
@ -232,46 +232,48 @@ BEGIN
ES_READONLY ES_READONLY
END END
IDD_SETTINGS DIALOG DISCARDABLE 0, 0, 167, 217 IDD_SETTINGS DIALOG DISCARDABLE 0, 0, 167, 229
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Settings" CAPTION "Settings"
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
CONTROL "Authentic Calculator Speed",IDC_REALSPEED,"Button", CONTROL "Authentic Calculator Speed",IDC_REALSPEED,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,13,100,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,13,100,10
CONTROL "Enable Virtual LCD Delay",IDC_GRAYSCALE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,25,100,10
CONTROL "Automatically Save Files",IDC_AUTOSAVE,"Button", CONTROL "Automatically Save Files",IDC_AUTOSAVE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,25,89,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,37,89,10
CONTROL "Automatically Save Files On Exit",IDC_AUTOSAVEONEXIT, CONTROL "Automatically Save Files On Exit",IDC_AUTOSAVEONEXIT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,37,114,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,49,114,10
CONTROL "Show Load Object Warning",IDC_OBJECTLOADWARNING,"Button", CONTROL "Show Load Object Warning",IDC_OBJECTLOADWARNING,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,49,102,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,61,102,10
CONTROL "Always Show KML Compilation Result",IDC_ALWAYSDISPLOG, CONTROL "Always Show KML Compilation Result",IDC_ALWAYSDISPLOG,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,61,133,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,73,133,10
GROUPBOX "General",IDC_STATIC,7,4,153,71 GROUPBOX "General",IDC_STATIC,7,4,153,83
CONTROL "HP Mnemonics",IDC_DISASM_HP,"Button",BS_AUTORADIOBUTTON | CONTROL "HP Mnemonics",IDC_DISASM_HP,"Button",BS_AUTORADIOBUTTON |
WS_GROUP | WS_TABSTOP,13,89,65,11 WS_GROUP | WS_TABSTOP,13,101,65,11
CONTROL "Class Mnemonics",IDC_DISASM_CLASS,"Button", CONTROL "Class Mnemonics",IDC_DISASM_CLASS,"Button",
BS_AUTORADIOBUTTON,84,89,70,11 BS_AUTORADIOBUTTON,84,101,70,11
GROUPBOX "Disassembler",IDC_STATIC,7,78,153,28 GROUPBOX "Disassembler",IDC_STATIC,7,90,153,28
CONTROL "Port 1 is Plugged",IDC_PORT1EN,"Button",BS_AUTOCHECKBOX | CONTROL "Port 1 is Plugged",IDC_PORT1EN,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,13,119,67,10 WS_TABSTOP,13,131,67,10
CONTROL "Port 1 is Writeable",IDC_PORT1WR,"Button", CONTROL "Port 1 is Writeable",IDC_PORT1WR,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,84,119,69,10 BS_AUTOCHECKBOX | WS_TABSTOP,84,131,69,10
CONTROL "Port 2 is Shared",IDC_PORT2ISSHARED,"Button", CONTROL "Port 2 is Shared",IDC_PORT2ISSHARED,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,131,65,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,143,65,10
LTEXT "Port 2 File :",IDC_STATIC,13,147,37,8 LTEXT "Port 2 File :",IDC_STATIC,13,159,37,8
EDITTEXT IDC_PORT2,51,144,94,12,ES_AUTOHSCROLL EDITTEXT IDC_PORT2,51,156,94,12,ES_AUTOHSCROLL
PUSHBUTTON "...",IDC_PORT2LOAD,145,144,10,12 PUSHBUTTON "...",IDC_PORT2LOAD,145,156,10,12
GROUPBOX "Memory Cards",IDC_STATIC,7,110,153,51 GROUPBOX "Memory Cards",IDC_STATIC,7,122,153,51
LTEXT "Wire:",IDC_STATIC,13,176,17,8 LTEXT "Wire:",IDC_STATIC,13,188,17,8
COMBOBOX IDC_WIRE,31,174,48,42,CBS_DROPDOWNLIST | WS_VSCROLL | COMBOBOX IDC_WIRE,31,186,48,42,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP WS_TABSTOP
LTEXT "IR:",IDC_STATIC,89,176,9,8 LTEXT "IR:",IDC_STATIC,89,188,9,8
COMBOBOX IDC_IR,107,174,48,43,CBS_DROPDOWNLIST | WS_VSCROLL | COMBOBOX IDC_IR,107,186,48,43,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP WS_TABSTOP
GROUPBOX "Serial Ports",IDC_STATIC,7,164,153,27 GROUPBOX "Serial Ports",IDC_STATIC,7,176,153,27
DEFPUSHBUTTON "&Ok",IDOK,9,196,50,14 DEFPUSHBUTTON "&Ok",IDOK,9,208,50,14
PUSHBUTTON "&Cancel",IDCANCEL,107,196,50,14 PUSHBUTTON "&Cancel",IDCANCEL,107,208,50,14
END END
IDD_CHOOSEKML DIALOG DISCARDABLE 0, 0, 195, 66 IDD_CHOOSEKML DIALOG DISCARDABLE 0, 0, 195, 66
@ -536,8 +538,8 @@ END
// //
VS_VERSION_INFO VERSIONINFO VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,3,7,0 FILEVERSION 1,3,8,0
PRODUCTVERSION 1,3,7,0 PRODUCTVERSION 1,3,8,0
FILEFLAGSMASK 0x3fL FILEFLAGSMASK 0x3fL
#ifdef _DEBUG #ifdef _DEBUG
FILEFLAGS 0x1L FILEFLAGS 0x1L
@ -554,12 +556,12 @@ BEGIN
BEGIN BEGIN
VALUE "CompanyName", "Sebastien Carlier & Christoph Gießelink\0" VALUE "CompanyName", "Sebastien Carlier & Christoph Gießelink\0"
VALUE "FileDescription", "HP38/39/40/48/49 Emulator\0" VALUE "FileDescription", "HP38/39/40/48/49 Emulator\0"
VALUE "FileVersion", "1, 3, 7, 0\0" VALUE "FileVersion", "1, 3, 8, 0\0"
VALUE "InternalName", "Emu48\0" VALUE "InternalName", "Emu48\0"
VALUE "LegalCopyright", "Copyright © 2005\0" VALUE "LegalCopyright", "Copyright © 2005\0"
VALUE "OriginalFilename", "Emu48.exe\0" VALUE "OriginalFilename", "Emu48.exe\0"
VALUE "ProductName", "Emu48\0" VALUE "ProductName", "Emu48\0"
VALUE "ProductVersion", "1, 3, 7, 0\0" VALUE "ProductVersion", "1, 3, 8, 0\0"
END END
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"
@ -604,8 +606,8 @@ BEGIN
MENUITEM "&Load Object...", ID_OBJECT_LOAD MENUITEM "&Load Object...", ID_OBJECT_LOAD
MENUITEM "&Save Object...", ID_OBJECT_SAVE MENUITEM "&Save Object...", ID_OBJECT_SAVE
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Copy String", ID_STACK_COPY
MENUITEM "C&opy Screen", ID_VIEW_COPY MENUITEM "C&opy Screen", ID_VIEW_COPY
MENUITEM "&Copy String", ID_STACK_COPY
MENUITEM "&Paste String", ID_STACK_PASTE MENUITEM "&Paste String", ID_STACK_PASTE
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Reset Calculator", ID_VIEW_RESET, GRAYED MENUITEM "&Reset Calculator", ID_VIEW_RESET, GRAYED

View file

@ -579,7 +579,8 @@ loop:
EvalOpcode(FASTPTR(Chipset.pc)); // execute opcode EvalOpcode(FASTPTR(Chipset.pc)); // execute opcode
GRAYOFF(CheckDisp(!Chipset.Shutdn)); // check for display update // check for display update in BW mode
if (!bGrayscale) CheckDisp(!Chipset.Shutdn);
AdjustSpeed(); // adjust emulation speed AdjustSpeed(); // adjust emulation speed
} }
bInterrupt = FALSE; // be sure to reenter opcode loop bInterrupt = FALSE; // be sure to reenter opcode loop

View file

@ -216,7 +216,7 @@ BOOL PatchRom(LPCTSTR szFilename)
DWORD dwFileSizeLow = 0; DWORD dwFileSizeLow = 0;
DWORD dwFileSizeHigh = 0; DWORD dwFileSizeHigh = 0;
DWORD lBytesRead = 0; DWORD lBytesRead = 0;
LPBYTE lpStop,lpBuf = NULL; PSZ lpStop,lpBuf = NULL;
DWORD dwAddress = 0; DWORD dwAddress = 0;
UINT nPos = 0; UINT nPos = 0;
@ -269,7 +269,7 @@ BOOL PatchRom(LPCTSTR szFilename)
} while (lpBuf[nPos]); } while (lpBuf[nPos]);
continue; continue;
} }
dwAddress = strtoul(&lpBuf[nPos],(CHAR **)&lpStop,16); dwAddress = strtoul(&lpBuf[nPos], &lpStop, 16);
nPos += lpStop-&lpBuf[nPos]+1; nPos += lpStop-&lpBuf[nPos]+1;
if (*lpStop != ':' || *lpStop == 0) if (*lpStop != ':' || *lpStop == 0)
continue; continue;

View file

@ -931,7 +931,7 @@ VOID Nwrite(BYTE *a, DWORD d, UINT s)
if ((p=WMap[u]) != NULL) memcpy(p+v, a, c); if ((p=WMap[u]) != NULL) memcpy(p+v, a, c);
} }
} }
GRAYOFF(UpdateDisplay(d, c)); // update display if (!bGrayscale) UpdateDisplay(d, c); // update display
a+=c; a+=c;
d=(d+c)&0xFFFFF; d=(d+c)&0xFFFFF;
} while (s-=c); } while (s-=c);

View file

@ -353,7 +353,7 @@ static __inline void Nsrb(BYTE *a, UINT s)
while (--s) while (--s)
{ {
*a >>= 1; *a >>= 1;
if (a[1]&1) *a |= 8; *a |= ((a[1] & 1) << 3);
a++; a++;
} }
*a >>= 1; *a >>= 1;

View file

@ -28,123 +28,124 @@
#define IDD_PROFILE 121 #define IDD_PROFILE 121
#define IDD_MACROSET 122 #define IDD_MACROSET 122
#define IDC_REALSPEED 1000 #define IDC_REALSPEED 1000
#define IDC_AUTOSAVE 1001 #define IDC_GRAYSCALE 1001
#define IDC_AUTOSAVEONEXIT 1002 #define IDC_AUTOSAVE 1002
#define IDC_OBJECTLOADWARNING 1003 #define IDC_AUTOSAVEONEXIT 1003
#define IDC_ALWAYSDISPLOG 1004 #define IDC_OBJECTLOADWARNING 1004
#define IDC_PORT1EN 1005 #define IDC_ALWAYSDISPLOG 1005
#define IDC_PORT1WR 1006 #define IDC_PORT1EN 1006
#define IDC_PORT2ISSHARED 1007 #define IDC_PORT1WR 1007
#define IDC_PORT2 1008 #define IDC_PORT2ISSHARED 1008
#define IDC_PORT2LOAD 1009 #define IDC_PORT2 1009
#define IDC_WIRE 1010 #define IDC_PORT2LOAD 1010
#define IDC_IR 1011 #define IDC_WIRE 1011
#define IDC_EMUDIR 1012 #define IDC_IR 1012
#define IDC_EMUDIRSEL 1013 #define IDC_EMUDIR 1013
#define IDC_UPDATE 1014 #define IDC_EMUDIRSEL 1014
#define IDC_KMLSCRIPT 1015 #define IDC_UPDATE 1015
#define IDC_AUTHOR 1016 #define IDC_KMLSCRIPT 1016
#define IDC_TITLE 1017 #define IDC_AUTHOR 1017
#define IDC_KMLLOG 1018 #define IDC_TITLE 1018
#define IDC_VERSION 1019 #define IDC_KMLLOG 1019
#define IDC_LICENSE 1020 #define IDC_VERSION 1020
#define IDC_DISASM_WIN 1021 #define IDC_LICENSE 1021
#define IDC_DISASM_MAP 1022 #define IDC_DISASM_WIN 1022
#define IDC_DISASM_ROM 1023 #define IDC_DISASM_MAP 1023
#define IDC_DISASM_RAM 1024 #define IDC_DISASM_ROM 1024
#define IDC_DISASM_PORT1 1025 #define IDC_DISASM_RAM 1025
#define IDC_DISASM_PORT2 1026 #define IDC_DISASM_PORT1 1026
#define IDC_DISASM_MODULE 1027 #define IDC_DISASM_PORT2 1027
#define IDC_DISASM_HP 1028 #define IDC_DISASM_MODULE 1028
#define IDC_DISASM_CLASS 1029 #define IDC_DISASM_HP 1029
#define IDC_ADDRESS 1030 #define IDC_DISASM_CLASS 1030
#define IDC_DISASM_ADR 1031 #define IDC_ADDRESS 1031
#define IDC_DISASM_NEXT 1032 #define IDC_DISASM_ADR 1032
#define IDC_DISASM_COPY 1033 #define IDC_DISASM_NEXT 1033
#define IDC_DEBUG_CODE 1034 #define IDC_DISASM_COPY 1034
#define IDC_STATIC_CODE 1035 #define IDC_DEBUG_CODE 1035
#define IDC_STATIC_REGISTERS 1036 #define IDC_STATIC_CODE 1036
#define IDC_STATIC_MEMORY 1037 #define IDC_STATIC_REGISTERS 1037
#define IDC_STATIC_STACK 1038 #define IDC_STATIC_MEMORY 1038
#define IDC_REG_A 1039 #define IDC_STATIC_STACK 1039
#define IDC_REG_B 1040 #define IDC_REG_A 1040
#define IDC_REG_C 1041 #define IDC_REG_B 1041
#define IDC_REG_D 1042 #define IDC_REG_C 1042
#define IDC_REG_R0 1043 #define IDC_REG_D 1043
#define IDC_REG_R1 1044 #define IDC_REG_R0 1044
#define IDC_REG_R2 1045 #define IDC_REG_R1 1045
#define IDC_REG_R3 1046 #define IDC_REG_R2 1046
#define IDC_REG_R4 1047 #define IDC_REG_R3 1047
#define IDC_REG_D0 1048 #define IDC_REG_R4 1048
#define IDC_REG_D1 1049 #define IDC_REG_D0 1049
#define IDC_REG_P 1050 #define IDC_REG_D1 1050
#define IDC_REG_PC 1051 #define IDC_REG_P 1051
#define IDC_REG_OUT 1052 #define IDC_REG_PC 1052
#define IDC_REG_IN 1053 #define IDC_REG_OUT 1053
#define IDC_REG_ST 1054 #define IDC_REG_IN 1054
#define IDC_REG_CY 1055 #define IDC_REG_ST 1055
#define IDC_REG_MODE 1056 #define IDC_REG_CY 1056
#define IDC_REG_MP 1057 #define IDC_REG_MODE 1057
#define IDC_REG_SR 1058 #define IDC_REG_MP 1058
#define IDC_REG_SB 1059 #define IDC_REG_SR 1059
#define IDC_REG_XM 1060 #define IDC_REG_SB 1060
#define IDC_MISC_INT 1061 #define IDC_REG_XM 1061
#define IDC_MISC_KEY 1062 #define IDC_MISC_INT 1062
#define IDC_MISC_BS 1063 #define IDC_MISC_KEY 1063
#define IDC_NEWVALUE 1064 #define IDC_MISC_BS 1064
#define IDC_ENTERADR 1065 #define IDC_NEWVALUE 1065
#define IDC_DEBUG_MEM 1066 #define IDC_ENTERADR 1066
#define IDC_DEBUG_MEM_ADDR 1067 #define IDC_DEBUG_MEM 1067
#define IDC_DEBUG_MEM_COL0 1068 #define IDC_DEBUG_MEM_ADDR 1068
#define IDC_DEBUG_MEM_COL1 1069 #define IDC_DEBUG_MEM_COL0 1069
#define IDC_DEBUG_MEM_COL2 1070 #define IDC_DEBUG_MEM_COL1 1070
#define IDC_DEBUG_MEM_COL3 1071 #define IDC_DEBUG_MEM_COL2 1071
#define IDC_DEBUG_MEM_COL4 1072 #define IDC_DEBUG_MEM_COL3 1072
#define IDC_DEBUG_MEM_COL5 1073 #define IDC_DEBUG_MEM_COL4 1073
#define IDC_DEBUG_MEM_COL6 1074 #define IDC_DEBUG_MEM_COL5 1074
#define IDC_DEBUG_MEM_COL7 1075 #define IDC_DEBUG_MEM_COL6 1075
#define IDC_DEBUG_MEM_TEXT 1076 #define IDC_DEBUG_MEM_COL7 1076
#define IDC_DEBUG_STACK 1077 #define IDC_DEBUG_MEM_TEXT 1077
#define IDC_STATIC_BREAKPOINT 1078 #define IDC_DEBUG_STACK 1078
#define IDC_BREAKEDIT_ADD 1079 #define IDC_STATIC_BREAKPOINT 1079
#define IDC_BREAKEDIT_DELETE 1080 #define IDC_BREAKEDIT_ADD 1080
#define IDC_BREAKEDIT_WND 1081 #define IDC_BREAKEDIT_DELETE 1081
#define IDC_STATIC_MMU 1082 #define IDC_BREAKEDIT_WND 1082
#define IDC_MMU_IO_A 1083 #define IDC_STATIC_MMU 1083
#define IDC_MMU_NCE2_A 1084 #define IDC_MMU_IO_A 1084
#define IDC_MMU_CE1_A 1085 #define IDC_MMU_NCE2_A 1085
#define IDC_MMU_CE2_A 1086 #define IDC_MMU_CE1_A 1086
#define IDC_MMU_NCE3_A 1087 #define IDC_MMU_CE2_A 1087
#define IDC_MMU_IO_S 1088 #define IDC_MMU_NCE3_A 1088
#define IDC_MMU_CE1_S 1089 #define IDC_MMU_IO_S 1089
#define IDC_MMU_CE2_S 1090 #define IDC_MMU_CE1_S 1090
#define IDC_MMU_NCE2_S 1091 #define IDC_MMU_CE2_S 1091
#define IDC_MMU_NCE3_S 1092 #define IDC_MMU_NCE2_S 1092
#define IDC_STATIC_MISC 1093 #define IDC_MMU_NCE3_S 1093
#define IDC_MISC_BS_TXT 1094 #define IDC_STATIC_MISC 1094
#define IDC_INSTR_TEXT 1095 #define IDC_MISC_BS_TXT 1095
#define IDC_INSTR_CODE 1096 #define IDC_INSTR_TEXT 1096
#define IDC_INSTR_COPY 1097 #define IDC_INSTR_CODE 1097
#define IDC_INSTR_CLEAR 1098 #define IDC_INSTR_COPY 1098
#define IDC_PROFILE_LASTCYCLES 1099 #define IDC_INSTR_CLEAR 1099
#define IDC_PROFILE_LASTTIME 1100 #define IDC_PROFILE_LASTCYCLES 1100
#define IDC_BPCODE 1101 #define IDC_PROFILE_LASTTIME 1101
#define IDC_BPRPL 1102 #define IDC_BPCODE 1102
#define IDC_BPACCESS 1103 #define IDC_BPRPL 1103
#define IDC_BPREAD 1104 #define IDC_BPACCESS 1104
#define IDC_BPWRITE 1105 #define IDC_BPREAD 1105
#define IDC_FIND_DATA 1106 #define IDC_BPWRITE 1106
#define IDC_FIND_ASCII 1107 #define IDC_FIND_DATA 1107
#define IDC_FIND_CASE 1108 #define IDC_FIND_ASCII 1108
#define IDC_ADDR20_24 1109 #define IDC_FIND_CASE 1109
#define IDC_ADDR25_27 1110 #define IDC_ADDR20_24 1110
#define IDC_ADDR28_29 1111 #define IDC_ADDR25_27 1111
#define IDC_ADDR30_34 1112 #define IDC_ADDR28_29 1112
#define IDC_MACRO_SLOW 1113 #define IDC_ADDR30_34 1113
#define IDC_MACRO_FAST 1114 #define IDC_MACRO_SLOW 1114
#define IDC_MACRO_SLIDER 1115 #define IDC_MACRO_FAST 1115
#define IDC_MACRO_REAL 1116 #define IDC_MACRO_SLIDER 1116
#define IDC_MACRO_MANUAL 1117 #define IDC_MACRO_REAL 1117
#define IDC_MACRO_MANUAL 1118
#define ID_FILE_NEW 40001 #define ID_FILE_NEW 40001
#define ID_FILE_OPEN 40002 #define ID_FILE_OPEN 40002
#define ID_FILE_SAVE 40003 #define ID_FILE_SAVE 40003
@ -211,7 +212,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 123 #define _APS_NEXT_RESOURCE_VALUE 123
#define _APS_NEXT_COMMAND_VALUE 40062 #define _APS_NEXT_COMMAND_VALUE 40062
#define _APS_NEXT_CONTROL_VALUE 1118 #define _APS_NEXT_CONTROL_VALUE 1119
#define _APS_NEXT_SYMED_VALUE 108 #define _APS_NEXT_SYMED_VALUE 108
#endif #endif
#endif #endif

View file

@ -152,6 +152,7 @@ VOID ReadSettings(VOID)
disassembler_mode = ReadInt(_T("Disassembler"),_T("Mnemonics"),disassembler_mode); disassembler_mode = ReadInt(_T("Disassembler"),_T("Mnemonics"),disassembler_mode);
// Emulator // Emulator
bRealSpeed = ReadInt(_T("Emulator"),_T("RealSpeed"),bRealSpeed); bRealSpeed = ReadInt(_T("Emulator"),_T("RealSpeed"),bRealSpeed);
bGrayscale = ReadInt(_T("Emulator"),_T("Grayscale"),bGrayscale);
dwSXCycles = ReadInt(_T("Emulator"),_T("SXCycles"),dwSXCycles); dwSXCycles = ReadInt(_T("Emulator"),_T("SXCycles"),dwSXCycles);
dwGXCycles = ReadInt(_T("Emulator"),_T("GXCycles"),dwGXCycles); dwGXCycles = ReadInt(_T("Emulator"),_T("GXCycles"),dwGXCycles);
SetSpeed(bRealSpeed); // set speed SetSpeed(bRealSpeed); // set speed
@ -184,6 +185,7 @@ VOID WriteSettings(VOID)
WriteInt(_T("Disassembler"),_T("Mnemonics"),disassembler_mode); WriteInt(_T("Disassembler"),_T("Mnemonics"),disassembler_mode);
// Emulator // Emulator
WriteInt(_T("Emulator"),_T("RealSpeed"),bRealSpeed); WriteInt(_T("Emulator"),_T("RealSpeed"),bRealSpeed);
WriteInt(_T("Emulator"),_T("Grayscale"),bGrayscale);
WriteInt(_T("Emulator"),_T("SXCycles"),dwSXCycles); WriteInt(_T("Emulator"),_T("SXCycles"),dwSXCycles);
WriteInt(_T("Emulator"),_T("GXCycles"),dwGXCycles); WriteInt(_T("Emulator"),_T("GXCycles"),dwGXCycles);
// Macro // Macro

View file

@ -232,46 +232,48 @@ BEGIN
ES_READONLY ES_READONLY
END END
IDD_SETTINGS DIALOG DISCARDABLE 0, 0, 167, 217 IDD_SETTINGS DIALOG DISCARDABLE 0, 0, 167, 229
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Settings" CAPTION "Settings"
FONT 8, "MS Sans Serif" FONT 8, "MS Sans Serif"
BEGIN BEGIN
CONTROL "Authentic Calculator Speed",IDC_REALSPEED,"Button", CONTROL "Authentic Calculator Speed",IDC_REALSPEED,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,13,100,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,13,100,10
CONTROL "Enable Virtual LCD Delay",IDC_GRAYSCALE,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,25,100,10
CONTROL "Automatically Save Files",IDC_AUTOSAVE,"Button", CONTROL "Automatically Save Files",IDC_AUTOSAVE,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,25,89,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,37,89,10
CONTROL "Automatically Save Files On Exit",IDC_AUTOSAVEONEXIT, CONTROL "Automatically Save Files On Exit",IDC_AUTOSAVEONEXIT,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,37,114,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,49,114,10
CONTROL "Show Load Object Warning",IDC_OBJECTLOADWARNING,"Button", CONTROL "Show Load Object Warning",IDC_OBJECTLOADWARNING,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,49,102,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,61,102,10
CONTROL "Always Show KML Compilation Result",IDC_ALWAYSDISPLOG, CONTROL "Always Show KML Compilation Result",IDC_ALWAYSDISPLOG,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,61,133,10 "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,73,133,10
GROUPBOX "General",IDC_STATIC,7,4,153,71 GROUPBOX "General",IDC_STATIC,7,4,153,83
CONTROL "HP Mnemonics",IDC_DISASM_HP,"Button",BS_AUTORADIOBUTTON | CONTROL "HP Mnemonics",IDC_DISASM_HP,"Button",BS_AUTORADIOBUTTON |
WS_GROUP | WS_TABSTOP,13,89,65,11 WS_GROUP | WS_TABSTOP,13,101,65,11
CONTROL "Class Mnemonics",IDC_DISASM_CLASS,"Button", CONTROL "Class Mnemonics",IDC_DISASM_CLASS,"Button",
BS_AUTORADIOBUTTON,84,89,70,11 BS_AUTORADIOBUTTON,84,101,70,11
GROUPBOX "Disassembler",IDC_STATIC,7,78,153,28 GROUPBOX "Disassembler",IDC_STATIC,7,90,153,28
CONTROL "Port 1 is Plugged",IDC_PORT1EN,"Button",BS_AUTOCHECKBOX | CONTROL "Port 1 is Plugged",IDC_PORT1EN,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,13,119,67,10 WS_TABSTOP,13,131,67,10
CONTROL "Port 1 is Writeable",IDC_PORT1WR,"Button", CONTROL "Port 1 is Writeable",IDC_PORT1WR,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,84,119,69,10 BS_AUTOCHECKBOX | WS_TABSTOP,84,131,69,10
CONTROL "Port 2 is Shared",IDC_PORT2ISSHARED,"Button", CONTROL "Port 2 is Shared",IDC_PORT2ISSHARED,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,131,65,10 BS_AUTOCHECKBOX | WS_TABSTOP,13,143,65,10
LTEXT "Port 2 File :",IDC_STATIC,13,147,37,8 LTEXT "Port 2 File :",IDC_STATIC,13,159,37,8
EDITTEXT IDC_PORT2,51,144,94,12,ES_AUTOHSCROLL EDITTEXT IDC_PORT2,51,156,94,12,ES_AUTOHSCROLL
PUSHBUTTON "...",IDC_PORT2LOAD,145,144,10,12 PUSHBUTTON "...",IDC_PORT2LOAD,145,156,10,12
GROUPBOX "Memory Cards",IDC_STATIC,7,110,153,51 GROUPBOX "Memory Cards",IDC_STATIC,7,122,153,51
LTEXT "Wire:",IDC_STATIC,13,176,17,8 LTEXT "Wire:",IDC_STATIC,13,188,17,8
COMBOBOX IDC_WIRE,31,174,48,42,CBS_DROPDOWNLIST | WS_VSCROLL | COMBOBOX IDC_WIRE,31,186,48,42,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP WS_TABSTOP
LTEXT "IR:",IDC_STATIC,89,176,9,8 LTEXT "IR:",IDC_STATIC,89,188,9,8
COMBOBOX IDC_IR,107,174,48,43,CBS_DROPDOWNLIST | WS_VSCROLL | COMBOBOX IDC_IR,107,186,48,43,CBS_DROPDOWNLIST | WS_VSCROLL |
WS_TABSTOP WS_TABSTOP
GROUPBOX "Serial Ports",IDC_STATIC,7,164,153,27 GROUPBOX "Serial Ports",IDC_STATIC,7,176,153,27
DEFPUSHBUTTON "&Ok",IDOK,9,196,50,14 DEFPUSHBUTTON "&Ok",IDOK,9,208,50,14
PUSHBUTTON "&Cancel",IDCANCEL,107,196,50,14 PUSHBUTTON "&Cancel",IDCANCEL,107,208,50,14
END END
IDD_CHOOSEKML DIALOG DISCARDABLE 0, 0, 195, 66 IDD_CHOOSEKML DIALOG DISCARDABLE 0, 0, 195, 66

View file

@ -24,6 +24,14 @@ mingw-runtime-3.3.tar.gz
binutils-2.15.90-20040222-1.tar.gz binutils-2.15.90-20040222-1.tar.gz
gcc-core-3.4.1-20040711-1.tar.gz gcc-core-3.4.1-20040711-1.tar.gz
or
MinGW-3.1.0-1.exe
w32api-3.3.tar.gz
mingw-runtime-3.8.tar.gz
binutils-2.15.94-20050118-1.tar.gz
gcc-core-3.4.4-20050522-1.tar.gz
Older versions of the MinGW package might not work, because there are several Older versions of the MinGW package might not work, because there are several
bug fixes, especially in the header files, made in the last time. bug fixes, especially in the header files, made in the last time.
@ -35,4 +43,4 @@ Many thanks to Pedro A. Arranda Guti
compatible. compatible.
06/13/05 (c) by Christoph Gießelink 08/22/05 (c) by Christoph Gießelink

Binary file not shown.