diff --git a/EMU48.EXE b/EMU48.EXE index 74a958c..8404c62 100755 Binary files a/EMU48.EXE and b/EMU48.EXE differ diff --git a/PROBLEMS.TXT b/PROBLEMS.TXT index 23ba718..2ee38c8 100644 --- a/PROBLEMS.TXT +++ b/PROBLEMS.TXT @@ -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) @@ -55,4 +55,4 @@ Known bugs and restrictions of Emu48 V1.37 - quitting the emulator while programming the flash isn't allowed, 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 diff --git a/Sources/Emu48/CHANGES.TXT b/Sources/Emu48/CHANGES.TXT index adc64e6..313ac93 100644 --- a/Sources/Emu48/CHANGES.TXT +++ b/Sources/Emu48/CHANGES.TXT @@ -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 DDESERV.C diff --git a/Sources/Emu48/DISPLAY.C b/Sources/Emu48/DISPLAY.C index cb147e9..88a6999 100644 --- a/Sources/Emu48/DISPLAY.C +++ b/Sources/Emu48/DISPLAY.C @@ -15,11 +15,10 @@ // #define DEBUG_DISPLAY // switch for DISPLAY debug purpose -#if defined GRAYSCALE - #define NOCOLORS 8 -#else - #define NOCOLORS 2 -#endif +#define NOCOLORSGRAY 8 // no. of colors in gray scale mode +#define NOCOLORSBW 2 // no. of colors in black and white mode + +#define DISPLAY_FREQ 19 // display update 1/frequency (1/64) in ms (gray scale mode) #define B 0x00000000 // black #define W 0x00FFFFFF // white @@ -30,23 +29,35 @@ // main display lines, handle zero lines exception #define LINES(n) (((n) == 0) ? 64 : ((n)+1)) -#define GRAYMASK (((((NOCOLORS)-1)>>1)<<24) \ - |((((NOCOLORS)-1)>>1)<<16) \ - |((((NOCOLORS)-1)>>1)<<8) \ - |((((NOCOLORS)-1)>>1))) +#define GRAYMASK(c) (((((c)-1)>>1)<<24) \ + |((((c)-1)>>1)<<16) \ + |((((c)-1)>>1)<<8) \ + |((((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; -UINT nBackgroundY = 0; -UINT nBackgroundW = 0; -UINT nBackgroundH = 0; -UINT nLcdX = 0; -UINT nLcdY = 0; -UINT nLcdZoom = 1; -LPBYTE pbyLcd; -HDC hLcdDC = NULL; -HDC hMainDC = NULL; +BOOL bGrayscale = FALSE; +UINT nBackgroundX = 0; +UINT nBackgroundY = 0; +UINT nBackgroundW = 0; +UINT nBackgroundH = 0; +UINT nLcdX = 0; +UINT nLcdY = 0; +UINT nLcdZoom = 1; +LPBYTE pbyLcd; +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 hMainBitmap; @@ -54,6 +65,13 @@ static HBITMAP hMainBitmap; static DWORD Pattern[16]; 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 { 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 { BITMAPINFOHEADER Lcd_bmih; - RGBQUAD bmiColors[NOCOLORS]; + RGBQUAD bmiColors[NOCOLORSGRAY]; } 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) @@ -106,32 +124,28 @@ static __inline VOID BuildPattern(VOID) VOID UpdateContrast(BYTE byContrast) { -#if defined GRAYSCALE - INT i; + INT i,nColors; + + // 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 b = *(RGBQUAD*)&dwKMLColor[byContrast+32]; // pixel off color if ((Chipset.IORam[BITOFFSET] & DON) == 0 || I == *(DWORD*)&b) b = *(RGBQUAD*)&dwKMLColor[0]; - // fill color palette of bitmap - for (i = 0; i < ARRAYSIZEOF(bmiLcd.bmiColors); ++i) - { - const INT nCAdj[] = { 0, 1, 1, 2, 1, 2, 2, 3 }; + nColors = bGrayscale ? (NOCOLORSGRAY-1) : (NOCOLORSBW-1); - _ASSERT(i < ARRAYSIZEOF(bmiLcd.bmiColors)); - _ASSERT(i < ARRAYSIZEOF(nCAdj)); + _ASSERT(nColors <= ARRAYSIZEOF(nCAdj)); // no. of colors must be smaller than entries in the gray color table + + // fill color palette of bitmap + for (i = 0; i <= nColors; ++i) + { bmiLcd.bmiColors[i] = b; - bmiLcd.bmiColors[i].rgbRed += (((INT) c.rgbRed - (INT) b.rgbRed) * nCAdj[i] / 3); - bmiLcd.bmiColors[i].rgbGreen += (((INT) c.rgbGreen - (INT) b.rgbGreen) * nCAdj[i] / 3); - bmiLcd.bmiColors[i].rgbBlue += (((INT) c.rgbBlue - (INT) b.rgbBlue) * 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] / nCAdj[nColors]; + 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 _ASSERT(hLcdDC); @@ -145,6 +159,28 @@ VOID SetLcdColor(UINT nId, UINT nRed, UINT nGreen, UINT nBlue) 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) { // create LCD bitmap @@ -159,7 +195,7 @@ VOID CreateLcdBitmap(VOID) SelectPalette(hLcdDC,hPalette,FALSE); // set palette for LCD DC RealizePalette(hLcdDC); // realize palette BuildPattern(); // build Nibble -> DIB mask pattern - UpdateContrast(Chipset.contrast); + SetLcdMode(bGrayscale); // init display update function pointer return; } @@ -170,6 +206,10 @@ VOID DestroyLcdBitmap(VOID) while(i < 32) dwKMLColor[i++] = B; while(i < 64) dwKMLColor[i++] = I; + GetLineCounter = NULL; + StartDisplay = NULL; + StopDisplay = NULL; + if (hLcdDC != NULL) { // destroy LCD bitmap @@ -220,7 +260,7 @@ VOID DestroyMainBitmap(VOID) VOID UpdateDisplayPointers(VOID) { - GRAYON(EnterCriticalSection(&csLcdLock)); + EnterCriticalSection(&csLcdLock); { UINT nLines = LINES(Chipset.lcounter); @@ -248,7 +288,7 @@ VOID UpdateDisplayPointers(VOID) } Chipset.end2 = Chipset.start2 + (64 - nLines) * 34; } - GRAYON(LeaveCriticalSection(&csLcdLock)); + LeaveCriticalSection(&csLcdLock); return; } @@ -425,13 +465,16 @@ VOID UpdateMenuDisplay(VOID) VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s) { -#if !defined GRAYSCALE INT x0, x; INT y0, y; DWORD *p; + INT lWidth; + UINT nLines; - INT lWidth = abs(Chipset.width); // display width - UINT nLines = LINES(Chipset.lcounter); // main display lines + if (bGrayscale) return; // no direct writing in grayscale mode + + lWidth = abs(Chipset.width); // display width + nLines = LINES(Chipset.lcounter); // main display lines #if defined DEBUG_DISPLAY { @@ -494,7 +537,7 @@ VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s) p = (DWORD*) (pbyLcd+y*LCD_ROW*nLcdZoom*nLcdZoom); } else - p += nLcdZoom; // next x position in bitmap + p += nLcdZoom; // next x position in bitmap } // update window region @@ -531,18 +574,19 @@ VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s) GdiFlush(); } LeaveCriticalSection(&csGDILock); -#endif return; } VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s) { -#if !defined GRAYSCALE UINT x0, x; UINT y0, y; 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 { @@ -645,13 +689,12 @@ VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s) 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); GdiFlush(); } LeaveCriticalSection(&csGDILock); -#endif return; } @@ -706,15 +749,13 @@ VOID ResizeWindow(VOID) return; } +//################ +//# +//# functions for gray scale implementation +//# +//################ -#if defined GRAYSCALE - -#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; - +// main display update routine static VOID CALLBACK LcdProc(UINT uEventId, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) { EnterCriticalSection(&csLcdLock); @@ -735,7 +776,7 @@ static VOID CALLBACK LcdProc(UINT uEventId, UINT uMsg, DWORD dwUser, DWORD dw1, } // LCD line counter calculation -BYTE GetLineCounter(VOID) +BYTE GetLineCounterGray(VOID) { LARGE_INTEGER lLC; BYTE byTime; @@ -750,10 +791,10 @@ BYTE GetLineCounter(VOID) 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 return; // -> quit @@ -763,14 +804,15 @@ VOID StartDisplay(BYTE byInitial) QueryPerformanceCounter(&lLcdRef); // actual time of top line // 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)); } return; } -VOID StopDisplay(VOID) +static VOID StopDisplayGray(VOID) { BYTE a[2]; ReadIO(a,LINECOUNT,2); // update VBL at display off time @@ -790,11 +832,13 @@ VOID StopDisplay(VOID) return; } -#else +//################ +//# +//# functions for black and white implementation +//# +//################ -static BYTE byVblRef = 0; // VBL stop reference - -// LCD line counter calculation +// LCD line counter calculation in BW mode static BYTE F4096Hz(VOID) // get a 6 bit 4096Hz down counter value { 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; } -BYTE GetLineCounter(VOID) // get line counter value +static BYTE GetLineCounterBW(VOID) // get line counter value { _ASSERT(byVblRef < 0x40); return (0x40 + F4096Hz() - byVblRef) & 0x3F; } -VOID StartDisplay(BYTE byInitial) +static VOID StartDisplayBW(BYTE byInitial) { // get positive VBL difference between now and stop time byVblRef = (0x40 + F4096Hz() - byInitial) & 0x3F; return; } -VOID StopDisplay(VOID) +static VOID StopDisplayBW(VOID) { BYTE a[2]; ReadIO(a,LINECOUNT,2); // update VBL at display off time return; } - -#endif diff --git a/Sources/Emu48/EMU48.C b/Sources/Emu48/EMU48.C index 66891c1..1d771f7 100644 --- a/Sources/Emu48/EMU48.C +++ b/Sources/Emu48/EMU48.C @@ -13,7 +13,7 @@ #include "kml.h" #include "debugger.h" -#define VERSION "1.37" +#define VERSION "1.38" #define CF_HPOBJ "CF_HPOBJ" // clipboard format for DDE #define MAXPORTS 256 // number of COM ports @@ -48,7 +48,7 @@ static const LPCTSTR szLicence = 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 csIOLock; // critical section for I/O 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_OBJECTLOADWARNING,bLoadObjectWarning); CheckDlgButton(hDlg,IDC_ALWAYSDISPLOG,bAlwaysDisplayLog); + CheckDlgButton(hDlg,IDC_GRAYSCALE,bGrayscale); // set disassebler mode 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); bAlwaysDisplayLog = IsDlgButtonChecked(hDlg, IDC_ALWAYSDISPLOG); 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) { bPort2IsShared = IsDlgButtonChecked(hDlg,IDC_PORT2ISSHARED); @@ -450,7 +458,7 @@ static UINT SaveChanges(BOOL bAuto) static LRESULT OnCreate(HWND hWindow) { InitializeCriticalSection(&csGDILock); - GRAYON(InitializeCriticalSection(&csLcdLock)); + InitializeCriticalSection(&csLcdLock); InitializeCriticalSection(&csKeyLock); InitializeCriticalSection(&csIOLock); InitializeCriticalSection(&csT1Lock); @@ -492,7 +500,7 @@ static LRESULT OnDestroy(HWND hWindow) } DeleteCriticalSection(&csGDILock); - GRAYON(DeleteCriticalSection(&csLcdLock)); + DeleteCriticalSection(&csLcdLock); DeleteCriticalSection(&csKeyLock); DeleteCriticalSection(&csIOLock); DeleteCriticalSection(&csT1Lock); diff --git a/Sources/Emu48/EMU48.H b/Sources/Emu48/EMU48.H index d1846a4..c9529c6 100644 --- a/Sources/Emu48/EMU48.H +++ b/Sources/Emu48/EMU48.H @@ -6,14 +6,6 @@ * 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" #define HARDWARE "Yorke" // emulator hardware @@ -116,6 +108,7 @@ extern VOID ReadLastDocument(LPTSTR szFileName, DWORD nSize); extern VOID WriteLastDocument(LPCTSTR szFilename); // Display.c +extern BOOL bGrayscale; extern UINT nBackgroundX; extern UINT nBackgroundY; extern UINT nBackgroundW; @@ -126,8 +119,12 @@ extern UINT nLcdZoom; extern LPBYTE pbyLcd; extern HDC hLcdDC; extern HDC hMainDC; +extern BYTE (*GetLineCounter)(VOID); +extern VOID (*StartDisplay)(BYTE byInitial); +extern VOID (*StopDisplay)(VOID); extern VOID UpdateContrast(BYTE byContrast); extern VOID SetLcdColor(UINT nId, UINT nRed, UINT nGreen, UINT nBlue); +extern VOID SetLcdMode(BOOL bMode); extern VOID CreateLcdBitmap(VOID); extern VOID DestroyLcdBitmap(VOID); 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 UpdateAnnunciators(VOID); extern VOID ResizeWindow(VOID); -extern BYTE GetLineCounter(VOID); -extern VOID StartDisplay(BYTE byInitial); -extern VOID StopDisplay(VOID); // Engine.c extern BOOL bInterrupt; diff --git a/Sources/Emu48/EMU48.RC b/Sources/Emu48/EMU48.RC index 064f8b4..92ed6ef 100644 --- a/Sources/Emu48/EMU48.RC +++ b/Sources/Emu48/EMU48.RC @@ -74,7 +74,7 @@ BEGIN LEFTMARGIN, 7 RIGHTMARGIN, 160 TOPMARGIN, 4 - BOTTOMMARGIN, 210 + BOTTOMMARGIN, 222 END IDD_CHOOSEKML, DIALOG @@ -232,46 +232,48 @@ BEGIN ES_READONLY 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 CAPTION "Settings" FONT 8, "MS Sans Serif" BEGIN CONTROL "Authentic Calculator Speed",IDC_REALSPEED,"Button", 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", - BS_AUTOCHECKBOX | WS_TABSTOP,13,25,89,10 + BS_AUTOCHECKBOX | WS_TABSTOP,13,37,89,10 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", - BS_AUTOCHECKBOX | WS_TABSTOP,13,49,102,10 + BS_AUTOCHECKBOX | WS_TABSTOP,13,61,102,10 CONTROL "Always Show KML Compilation Result",IDC_ALWAYSDISPLOG, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,61,133,10 - GROUPBOX "General",IDC_STATIC,7,4,153,71 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,73,133,10 + GROUPBOX "General",IDC_STATIC,7,4,153,83 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", - BS_AUTORADIOBUTTON,84,89,70,11 - GROUPBOX "Disassembler",IDC_STATIC,7,78,153,28 + BS_AUTORADIOBUTTON,84,101,70,11 + GROUPBOX "Disassembler",IDC_STATIC,7,90,153,28 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", - BS_AUTOCHECKBOX | WS_TABSTOP,84,119,69,10 + BS_AUTOCHECKBOX | WS_TABSTOP,84,131,69,10 CONTROL "Port 2 is Shared",IDC_PORT2ISSHARED,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,13,131,65,10 - LTEXT "Port 2 File :",IDC_STATIC,13,147,37,8 - EDITTEXT IDC_PORT2,51,144,94,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_PORT2LOAD,145,144,10,12 - GROUPBOX "Memory Cards",IDC_STATIC,7,110,153,51 - LTEXT "Wire:",IDC_STATIC,13,176,17,8 - COMBOBOX IDC_WIRE,31,174,48,42,CBS_DROPDOWNLIST | WS_VSCROLL | + BS_AUTOCHECKBOX | WS_TABSTOP,13,143,65,10 + LTEXT "Port 2 File :",IDC_STATIC,13,159,37,8 + EDITTEXT IDC_PORT2,51,156,94,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_PORT2LOAD,145,156,10,12 + GROUPBOX "Memory Cards",IDC_STATIC,7,122,153,51 + LTEXT "Wire:",IDC_STATIC,13,188,17,8 + COMBOBOX IDC_WIRE,31,186,48,42,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "IR:",IDC_STATIC,89,176,9,8 - COMBOBOX IDC_IR,107,174,48,43,CBS_DROPDOWNLIST | WS_VSCROLL | + LTEXT "IR:",IDC_STATIC,89,188,9,8 + COMBOBOX IDC_IR,107,186,48,43,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Serial Ports",IDC_STATIC,7,164,153,27 - DEFPUSHBUTTON "&Ok",IDOK,9,196,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,107,196,50,14 + GROUPBOX "Serial Ports",IDC_STATIC,7,176,153,27 + DEFPUSHBUTTON "&Ok",IDOK,9,208,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,107,208,50,14 END IDD_CHOOSEKML DIALOG DISCARDABLE 0, 0, 195, 66 @@ -536,8 +538,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,3,7,0 - PRODUCTVERSION 1,3,7,0 + FILEVERSION 1,3,8,0 + PRODUCTVERSION 1,3,8,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -554,12 +556,12 @@ BEGIN BEGIN VALUE "CompanyName", "Sebastien Carlier & Christoph Gießelink\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 "LegalCopyright", "Copyright © 2005\0" VALUE "OriginalFilename", "Emu48.exe\0" VALUE "ProductName", "Emu48\0" - VALUE "ProductVersion", "1, 3, 7, 0\0" + VALUE "ProductVersion", "1, 3, 8, 0\0" END END BLOCK "VarFileInfo" @@ -604,8 +606,8 @@ BEGIN MENUITEM "&Load Object...", ID_OBJECT_LOAD MENUITEM "&Save Object...", ID_OBJECT_SAVE MENUITEM SEPARATOR - MENUITEM "&Copy String", ID_STACK_COPY MENUITEM "C&opy Screen", ID_VIEW_COPY + MENUITEM "&Copy String", ID_STACK_COPY MENUITEM "&Paste String", ID_STACK_PASTE MENUITEM SEPARATOR MENUITEM "&Reset Calculator", ID_VIEW_RESET, GRAYED diff --git a/Sources/Emu48/ENGINE.C b/Sources/Emu48/ENGINE.C index cca617a..dd30ef7 100644 --- a/Sources/Emu48/ENGINE.C +++ b/Sources/Emu48/ENGINE.C @@ -579,7 +579,8 @@ loop: 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 } bInterrupt = FALSE; // be sure to reenter opcode loop diff --git a/Sources/Emu48/FILES.C b/Sources/Emu48/FILES.C index 47b3961..a40c120 100644 --- a/Sources/Emu48/FILES.C +++ b/Sources/Emu48/FILES.C @@ -216,7 +216,7 @@ BOOL PatchRom(LPCTSTR szFilename) DWORD dwFileSizeLow = 0; DWORD dwFileSizeHigh = 0; DWORD lBytesRead = 0; - LPBYTE lpStop,lpBuf = NULL; + PSZ lpStop,lpBuf = NULL; DWORD dwAddress = 0; UINT nPos = 0; @@ -269,7 +269,7 @@ BOOL PatchRom(LPCTSTR szFilename) } while (lpBuf[nPos]); continue; } - dwAddress = strtoul(&lpBuf[nPos],(CHAR **)&lpStop,16); + dwAddress = strtoul(&lpBuf[nPos], &lpStop, 16); nPos += lpStop-&lpBuf[nPos]+1; if (*lpStop != ':' || *lpStop == 0) continue; diff --git a/Sources/Emu48/MOPS.C b/Sources/Emu48/MOPS.C index 2628da6..b0ef3ff 100644 --- a/Sources/Emu48/MOPS.C +++ b/Sources/Emu48/MOPS.C @@ -931,7 +931,7 @@ VOID Nwrite(BYTE *a, DWORD d, UINT s) 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; d=(d+c)&0xFFFFF; } while (s-=c); diff --git a/Sources/Emu48/OPS.H b/Sources/Emu48/OPS.H index b30c56e..8b6b939 100644 --- a/Sources/Emu48/OPS.H +++ b/Sources/Emu48/OPS.H @@ -353,7 +353,7 @@ static __inline void Nsrb(BYTE *a, UINT s) while (--s) { *a >>= 1; - if (a[1]&1) *a |= 8; + *a |= ((a[1] & 1) << 3); a++; } *a >>= 1; diff --git a/Sources/Emu48/RESOURCE.H b/Sources/Emu48/RESOURCE.H index a8723d4..b7ab665 100644 --- a/Sources/Emu48/RESOURCE.H +++ b/Sources/Emu48/RESOURCE.H @@ -28,123 +28,124 @@ #define IDD_PROFILE 121 #define IDD_MACROSET 122 #define IDC_REALSPEED 1000 -#define IDC_AUTOSAVE 1001 -#define IDC_AUTOSAVEONEXIT 1002 -#define IDC_OBJECTLOADWARNING 1003 -#define IDC_ALWAYSDISPLOG 1004 -#define IDC_PORT1EN 1005 -#define IDC_PORT1WR 1006 -#define IDC_PORT2ISSHARED 1007 -#define IDC_PORT2 1008 -#define IDC_PORT2LOAD 1009 -#define IDC_WIRE 1010 -#define IDC_IR 1011 -#define IDC_EMUDIR 1012 -#define IDC_EMUDIRSEL 1013 -#define IDC_UPDATE 1014 -#define IDC_KMLSCRIPT 1015 -#define IDC_AUTHOR 1016 -#define IDC_TITLE 1017 -#define IDC_KMLLOG 1018 -#define IDC_VERSION 1019 -#define IDC_LICENSE 1020 -#define IDC_DISASM_WIN 1021 -#define IDC_DISASM_MAP 1022 -#define IDC_DISASM_ROM 1023 -#define IDC_DISASM_RAM 1024 -#define IDC_DISASM_PORT1 1025 -#define IDC_DISASM_PORT2 1026 -#define IDC_DISASM_MODULE 1027 -#define IDC_DISASM_HP 1028 -#define IDC_DISASM_CLASS 1029 -#define IDC_ADDRESS 1030 -#define IDC_DISASM_ADR 1031 -#define IDC_DISASM_NEXT 1032 -#define IDC_DISASM_COPY 1033 -#define IDC_DEBUG_CODE 1034 -#define IDC_STATIC_CODE 1035 -#define IDC_STATIC_REGISTERS 1036 -#define IDC_STATIC_MEMORY 1037 -#define IDC_STATIC_STACK 1038 -#define IDC_REG_A 1039 -#define IDC_REG_B 1040 -#define IDC_REG_C 1041 -#define IDC_REG_D 1042 -#define IDC_REG_R0 1043 -#define IDC_REG_R1 1044 -#define IDC_REG_R2 1045 -#define IDC_REG_R3 1046 -#define IDC_REG_R4 1047 -#define IDC_REG_D0 1048 -#define IDC_REG_D1 1049 -#define IDC_REG_P 1050 -#define IDC_REG_PC 1051 -#define IDC_REG_OUT 1052 -#define IDC_REG_IN 1053 -#define IDC_REG_ST 1054 -#define IDC_REG_CY 1055 -#define IDC_REG_MODE 1056 -#define IDC_REG_MP 1057 -#define IDC_REG_SR 1058 -#define IDC_REG_SB 1059 -#define IDC_REG_XM 1060 -#define IDC_MISC_INT 1061 -#define IDC_MISC_KEY 1062 -#define IDC_MISC_BS 1063 -#define IDC_NEWVALUE 1064 -#define IDC_ENTERADR 1065 -#define IDC_DEBUG_MEM 1066 -#define IDC_DEBUG_MEM_ADDR 1067 -#define IDC_DEBUG_MEM_COL0 1068 -#define IDC_DEBUG_MEM_COL1 1069 -#define IDC_DEBUG_MEM_COL2 1070 -#define IDC_DEBUG_MEM_COL3 1071 -#define IDC_DEBUG_MEM_COL4 1072 -#define IDC_DEBUG_MEM_COL5 1073 -#define IDC_DEBUG_MEM_COL6 1074 -#define IDC_DEBUG_MEM_COL7 1075 -#define IDC_DEBUG_MEM_TEXT 1076 -#define IDC_DEBUG_STACK 1077 -#define IDC_STATIC_BREAKPOINT 1078 -#define IDC_BREAKEDIT_ADD 1079 -#define IDC_BREAKEDIT_DELETE 1080 -#define IDC_BREAKEDIT_WND 1081 -#define IDC_STATIC_MMU 1082 -#define IDC_MMU_IO_A 1083 -#define IDC_MMU_NCE2_A 1084 -#define IDC_MMU_CE1_A 1085 -#define IDC_MMU_CE2_A 1086 -#define IDC_MMU_NCE3_A 1087 -#define IDC_MMU_IO_S 1088 -#define IDC_MMU_CE1_S 1089 -#define IDC_MMU_CE2_S 1090 -#define IDC_MMU_NCE2_S 1091 -#define IDC_MMU_NCE3_S 1092 -#define IDC_STATIC_MISC 1093 -#define IDC_MISC_BS_TXT 1094 -#define IDC_INSTR_TEXT 1095 -#define IDC_INSTR_CODE 1096 -#define IDC_INSTR_COPY 1097 -#define IDC_INSTR_CLEAR 1098 -#define IDC_PROFILE_LASTCYCLES 1099 -#define IDC_PROFILE_LASTTIME 1100 -#define IDC_BPCODE 1101 -#define IDC_BPRPL 1102 -#define IDC_BPACCESS 1103 -#define IDC_BPREAD 1104 -#define IDC_BPWRITE 1105 -#define IDC_FIND_DATA 1106 -#define IDC_FIND_ASCII 1107 -#define IDC_FIND_CASE 1108 -#define IDC_ADDR20_24 1109 -#define IDC_ADDR25_27 1110 -#define IDC_ADDR28_29 1111 -#define IDC_ADDR30_34 1112 -#define IDC_MACRO_SLOW 1113 -#define IDC_MACRO_FAST 1114 -#define IDC_MACRO_SLIDER 1115 -#define IDC_MACRO_REAL 1116 -#define IDC_MACRO_MANUAL 1117 +#define IDC_GRAYSCALE 1001 +#define IDC_AUTOSAVE 1002 +#define IDC_AUTOSAVEONEXIT 1003 +#define IDC_OBJECTLOADWARNING 1004 +#define IDC_ALWAYSDISPLOG 1005 +#define IDC_PORT1EN 1006 +#define IDC_PORT1WR 1007 +#define IDC_PORT2ISSHARED 1008 +#define IDC_PORT2 1009 +#define IDC_PORT2LOAD 1010 +#define IDC_WIRE 1011 +#define IDC_IR 1012 +#define IDC_EMUDIR 1013 +#define IDC_EMUDIRSEL 1014 +#define IDC_UPDATE 1015 +#define IDC_KMLSCRIPT 1016 +#define IDC_AUTHOR 1017 +#define IDC_TITLE 1018 +#define IDC_KMLLOG 1019 +#define IDC_VERSION 1020 +#define IDC_LICENSE 1021 +#define IDC_DISASM_WIN 1022 +#define IDC_DISASM_MAP 1023 +#define IDC_DISASM_ROM 1024 +#define IDC_DISASM_RAM 1025 +#define IDC_DISASM_PORT1 1026 +#define IDC_DISASM_PORT2 1027 +#define IDC_DISASM_MODULE 1028 +#define IDC_DISASM_HP 1029 +#define IDC_DISASM_CLASS 1030 +#define IDC_ADDRESS 1031 +#define IDC_DISASM_ADR 1032 +#define IDC_DISASM_NEXT 1033 +#define IDC_DISASM_COPY 1034 +#define IDC_DEBUG_CODE 1035 +#define IDC_STATIC_CODE 1036 +#define IDC_STATIC_REGISTERS 1037 +#define IDC_STATIC_MEMORY 1038 +#define IDC_STATIC_STACK 1039 +#define IDC_REG_A 1040 +#define IDC_REG_B 1041 +#define IDC_REG_C 1042 +#define IDC_REG_D 1043 +#define IDC_REG_R0 1044 +#define IDC_REG_R1 1045 +#define IDC_REG_R2 1046 +#define IDC_REG_R3 1047 +#define IDC_REG_R4 1048 +#define IDC_REG_D0 1049 +#define IDC_REG_D1 1050 +#define IDC_REG_P 1051 +#define IDC_REG_PC 1052 +#define IDC_REG_OUT 1053 +#define IDC_REG_IN 1054 +#define IDC_REG_ST 1055 +#define IDC_REG_CY 1056 +#define IDC_REG_MODE 1057 +#define IDC_REG_MP 1058 +#define IDC_REG_SR 1059 +#define IDC_REG_SB 1060 +#define IDC_REG_XM 1061 +#define IDC_MISC_INT 1062 +#define IDC_MISC_KEY 1063 +#define IDC_MISC_BS 1064 +#define IDC_NEWVALUE 1065 +#define IDC_ENTERADR 1066 +#define IDC_DEBUG_MEM 1067 +#define IDC_DEBUG_MEM_ADDR 1068 +#define IDC_DEBUG_MEM_COL0 1069 +#define IDC_DEBUG_MEM_COL1 1070 +#define IDC_DEBUG_MEM_COL2 1071 +#define IDC_DEBUG_MEM_COL3 1072 +#define IDC_DEBUG_MEM_COL4 1073 +#define IDC_DEBUG_MEM_COL5 1074 +#define IDC_DEBUG_MEM_COL6 1075 +#define IDC_DEBUG_MEM_COL7 1076 +#define IDC_DEBUG_MEM_TEXT 1077 +#define IDC_DEBUG_STACK 1078 +#define IDC_STATIC_BREAKPOINT 1079 +#define IDC_BREAKEDIT_ADD 1080 +#define IDC_BREAKEDIT_DELETE 1081 +#define IDC_BREAKEDIT_WND 1082 +#define IDC_STATIC_MMU 1083 +#define IDC_MMU_IO_A 1084 +#define IDC_MMU_NCE2_A 1085 +#define IDC_MMU_CE1_A 1086 +#define IDC_MMU_CE2_A 1087 +#define IDC_MMU_NCE3_A 1088 +#define IDC_MMU_IO_S 1089 +#define IDC_MMU_CE1_S 1090 +#define IDC_MMU_CE2_S 1091 +#define IDC_MMU_NCE2_S 1092 +#define IDC_MMU_NCE3_S 1093 +#define IDC_STATIC_MISC 1094 +#define IDC_MISC_BS_TXT 1095 +#define IDC_INSTR_TEXT 1096 +#define IDC_INSTR_CODE 1097 +#define IDC_INSTR_COPY 1098 +#define IDC_INSTR_CLEAR 1099 +#define IDC_PROFILE_LASTCYCLES 1100 +#define IDC_PROFILE_LASTTIME 1101 +#define IDC_BPCODE 1102 +#define IDC_BPRPL 1103 +#define IDC_BPACCESS 1104 +#define IDC_BPREAD 1105 +#define IDC_BPWRITE 1106 +#define IDC_FIND_DATA 1107 +#define IDC_FIND_ASCII 1108 +#define IDC_FIND_CASE 1109 +#define IDC_ADDR20_24 1110 +#define IDC_ADDR25_27 1111 +#define IDC_ADDR28_29 1112 +#define IDC_ADDR30_34 1113 +#define IDC_MACRO_SLOW 1114 +#define IDC_MACRO_FAST 1115 +#define IDC_MACRO_SLIDER 1116 +#define IDC_MACRO_REAL 1117 +#define IDC_MACRO_MANUAL 1118 #define ID_FILE_NEW 40001 #define ID_FILE_OPEN 40002 #define ID_FILE_SAVE 40003 @@ -211,7 +212,7 @@ #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 123 #define _APS_NEXT_COMMAND_VALUE 40062 -#define _APS_NEXT_CONTROL_VALUE 1118 +#define _APS_NEXT_CONTROL_VALUE 1119 #define _APS_NEXT_SYMED_VALUE 108 #endif #endif diff --git a/Sources/Emu48/SETTINGS.C b/Sources/Emu48/SETTINGS.C index 6ca9da9..63dc282 100644 --- a/Sources/Emu48/SETTINGS.C +++ b/Sources/Emu48/SETTINGS.C @@ -152,6 +152,7 @@ VOID ReadSettings(VOID) disassembler_mode = ReadInt(_T("Disassembler"),_T("Mnemonics"),disassembler_mode); // Emulator bRealSpeed = ReadInt(_T("Emulator"),_T("RealSpeed"),bRealSpeed); + bGrayscale = ReadInt(_T("Emulator"),_T("Grayscale"),bGrayscale); dwSXCycles = ReadInt(_T("Emulator"),_T("SXCycles"),dwSXCycles); dwGXCycles = ReadInt(_T("Emulator"),_T("GXCycles"),dwGXCycles); SetSpeed(bRealSpeed); // set speed @@ -184,6 +185,7 @@ VOID WriteSettings(VOID) WriteInt(_T("Disassembler"),_T("Mnemonics"),disassembler_mode); // Emulator WriteInt(_T("Emulator"),_T("RealSpeed"),bRealSpeed); + WriteInt(_T("Emulator"),_T("Grayscale"),bGrayscale); WriteInt(_T("Emulator"),_T("SXCycles"),dwSXCycles); WriteInt(_T("Emulator"),_T("GXCycles"),dwGXCycles); // Macro diff --git a/Sources/GCCPatch/EMU48GCC.RC b/Sources/GCCPatch/EMU48GCC.RC index 17a4e2a..9c5c1f4 100644 --- a/Sources/GCCPatch/EMU48GCC.RC +++ b/Sources/GCCPatch/EMU48GCC.RC @@ -232,46 +232,48 @@ BEGIN ES_READONLY 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 CAPTION "Settings" FONT 8, "MS Sans Serif" BEGIN CONTROL "Authentic Calculator Speed",IDC_REALSPEED,"Button", 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", - BS_AUTOCHECKBOX | WS_TABSTOP,13,25,89,10 + BS_AUTOCHECKBOX | WS_TABSTOP,13,37,89,10 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", - BS_AUTOCHECKBOX | WS_TABSTOP,13,49,102,10 + BS_AUTOCHECKBOX | WS_TABSTOP,13,61,102,10 CONTROL "Always Show KML Compilation Result",IDC_ALWAYSDISPLOG, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,61,133,10 - GROUPBOX "General",IDC_STATIC,7,4,153,71 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,73,133,10 + GROUPBOX "General",IDC_STATIC,7,4,153,83 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", - BS_AUTORADIOBUTTON,84,89,70,11 - GROUPBOX "Disassembler",IDC_STATIC,7,78,153,28 + BS_AUTORADIOBUTTON,84,101,70,11 + GROUPBOX "Disassembler",IDC_STATIC,7,90,153,28 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", - BS_AUTOCHECKBOX | WS_TABSTOP,84,119,69,10 + BS_AUTOCHECKBOX | WS_TABSTOP,84,131,69,10 CONTROL "Port 2 is Shared",IDC_PORT2ISSHARED,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,13,131,65,10 - LTEXT "Port 2 File :",IDC_STATIC,13,147,37,8 - EDITTEXT IDC_PORT2,51,144,94,12,ES_AUTOHSCROLL - PUSHBUTTON "...",IDC_PORT2LOAD,145,144,10,12 - GROUPBOX "Memory Cards",IDC_STATIC,7,110,153,51 - LTEXT "Wire:",IDC_STATIC,13,176,17,8 - COMBOBOX IDC_WIRE,31,174,48,42,CBS_DROPDOWNLIST | WS_VSCROLL | + BS_AUTOCHECKBOX | WS_TABSTOP,13,143,65,10 + LTEXT "Port 2 File :",IDC_STATIC,13,159,37,8 + EDITTEXT IDC_PORT2,51,156,94,12,ES_AUTOHSCROLL + PUSHBUTTON "...",IDC_PORT2LOAD,145,156,10,12 + GROUPBOX "Memory Cards",IDC_STATIC,7,122,153,51 + LTEXT "Wire:",IDC_STATIC,13,188,17,8 + COMBOBOX IDC_WIRE,31,186,48,42,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT "IR:",IDC_STATIC,89,176,9,8 - COMBOBOX IDC_IR,107,174,48,43,CBS_DROPDOWNLIST | WS_VSCROLL | + LTEXT "IR:",IDC_STATIC,89,188,9,8 + COMBOBOX IDC_IR,107,186,48,43,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - GROUPBOX "Serial Ports",IDC_STATIC,7,164,153,27 - DEFPUSHBUTTON "&Ok",IDOK,9,196,50,14 - PUSHBUTTON "&Cancel",IDCANCEL,107,196,50,14 + GROUPBOX "Serial Ports",IDC_STATIC,7,176,153,27 + DEFPUSHBUTTON "&Ok",IDOK,9,208,50,14 + PUSHBUTTON "&Cancel",IDCANCEL,107,208,50,14 END IDD_CHOOSEKML DIALOG DISCARDABLE 0, 0, 195, 66 diff --git a/Sources/GCCPatch/README.TXT b/Sources/GCCPatch/README.TXT index 4018795..d2c7582 100644 --- a/Sources/GCCPatch/README.TXT +++ b/Sources/GCCPatch/README.TXT @@ -24,6 +24,14 @@ mingw-runtime-3.3.tar.gz binutils-2.15.90-20040222-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 bug fixes, especially in the header files, made in the last time. @@ -35,4 +43,4 @@ Many thanks to Pedro A. Arranda Guti compatible. -06/13/05 (c) by Christoph Gießelink +08/22/05 (c) by Christoph Gießelink diff --git a/uninst.exe b/uninst.exe index bbec58e..62ef141 100755 Binary files a/uninst.exe and b/uninst.exe differ