2005-09-03: Updated to version 1.38
Signed-off-by: Gwenhael Le Moine <gwenhael.le.moine@gmail.com>
This commit is contained in:
parent
e1230f4415
commit
0c2f128039
16 changed files with 373 additions and 266 deletions
BIN
EMU48.EXE
BIN
EMU48.EXE
Binary file not shown.
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,13 +29,14 @@
|
||||||
// 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)
|
||||||
|
|
||||||
|
BOOL bGrayscale = FALSE;
|
||||||
UINT nBackgroundX = 0;
|
UINT nBackgroundX = 0;
|
||||||
UINT nBackgroundY = 0;
|
UINT nBackgroundY = 0;
|
||||||
UINT nBackgroundW = 0;
|
UINT nBackgroundW = 0;
|
||||||
|
@ -48,12 +48,30 @@ LPBYTE pbyLcd;
|
||||||
HDC hLcdDC = NULL;
|
HDC hLcdDC = NULL;
|
||||||
HDC hMainDC = 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;
|
||||||
|
|
||||||
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
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -651,7 +695,6 @@ VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s)
|
||||||
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
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
BIN
uninst.exe
BIN
uninst.exe
Binary file not shown.
Loading…
Reference in a new issue