2020-09-30: Updated to version 1.63
Signed-off-by: Gwenhael Le Moine <gwenhael.le.moine@gmail.com>
This commit is contained in:
parent
a6d5624a8b
commit
523b8ba30d
23 changed files with 2993 additions and 2957 deletions
BIN
Emu48.exe
BIN
Emu48.exe
Binary file not shown.
|
@ -399,15 +399,10 @@ h3 { color:red; font-size:1.1em; }
|
||||||
output obsolete. The new sound engine emulates the behaviour of the
|
output obsolete. The new sound engine emulates the behaviour of the
|
||||||
beeper output ports and only work in connection with a sound card.
|
beeper output ports and only work in connection with a sound card.
|
||||||
Using the legacy PC speaker mode isn't possible any more. The old
|
Using the legacy PC speaker mode isn't possible any more. The old
|
||||||
beeper method with a ROM patch is still working but deprecated, it's
|
beeper method with a ROM patch has been removed, so you have to remove
|
||||||
strongly recommended to remove all beep patches from your current KML
|
the ROM beep patches from your KML scripts. Actually the program
|
||||||
scripts to enable the new sound engine. The support of the old sound
|
informs you when detecting ROM beep patches by opening the "KML
|
||||||
implementation by a ROM patch maybe removed in later versions of the
|
Script Compilation Result" dialog reporting an error.
|
||||||
emulator and remaining beep patches will corrupt the ROM with an
|
|
||||||
illegal opcode then. Actually the program informs you when
|
|
||||||
detecting ROM beep patches by opening the "KML Script Compilation
|
|
||||||
Result" dialog. To prevent this, remove the ROM beep patches
|
|
||||||
from the KML script.
|
|
||||||
</p>
|
</p>
|
||||||
<p>For the sound generation the calculator must know his own CPU strobe
|
<p>For the sound generation the calculator must know his own CPU strobe
|
||||||
frequency. On the real calculator the speed depends on various settings
|
frequency. On the real calculator the speed depends on various settings
|
||||||
|
@ -601,7 +596,7 @@ h3 { color:red; font-size:1.1em; }
|
||||||
</table>
|
</table>
|
||||||
<h1><a name=s14>14. License</a></h1>
|
<h1><a name=s14>14. License</a></h1>
|
||||||
<p>Emu48 - A HP38G/39G/40G/48SX/48GX/49G Emulator<br>
|
<p>Emu48 - A HP38G/39G/40G/48SX/48GX/49G Emulator<br>
|
||||||
Copyright (C) 2019 Christoph Gießelink</p>
|
Copyright (C) 2020 Christoph Gießelink</p>
|
||||||
<p>This program is free software; you can redistribute it and/or modify it
|
<p>This program is free software; you can redistribute it and/or modify it
|
||||||
under the terms of the GNU General Public License as published by the Free
|
under the terms of the GNU General Public License as published by the Free
|
||||||
Software Foundation; either version 2 of the License, or (at your option)
|
Software Foundation; either version 2 of the License, or (at your option)
|
|
@ -1,4 +1,4 @@
|
||||||
Known bugs and restrictions of Emu48 V1.62
|
Known bugs and restrictions of Emu48 V1.63
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
- the following I/O bits aren't emulated (incomplete)
|
- the following I/O bits aren't emulated (incomplete)
|
||||||
|
@ -47,4 +47,4 @@ Known bugs and restrictions of Emu48 V1.62
|
||||||
- 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
|
||||||
|
|
||||||
10/15/19 (c) by Christoph Gießelink, c dot giesselink at gmx dot de
|
09/22/20 (c) by Christoph Gießelink, c dot giesselink at gmx dot de
|
||||||
|
|
|
@ -1,3 +1,70 @@
|
||||||
|
Service Pack 63 for Emu48 Version 1.0
|
||||||
|
|
||||||
|
DISPLAY.C
|
||||||
|
- changed function UpdateAnnunciators(), changed function prototype
|
||||||
|
with an additional argument to get information which annunciators
|
||||||
|
have changed, so only the annunciators which have changed are
|
||||||
|
redrawn now
|
||||||
|
|
||||||
|
EMU48.C
|
||||||
|
- changed function OnPaint(), changed call of function
|
||||||
|
UpdateAnnunciators() updating all annunciators
|
||||||
|
|
||||||
|
EMU48.DSP
|
||||||
|
- removed external.c sources
|
||||||
|
|
||||||
|
EMU48.H
|
||||||
|
- removed DISP_ANNUN definition
|
||||||
|
- changed function prototype
|
||||||
|
- removed extern declaration of global functions
|
||||||
|
|
||||||
|
EMU48.RC
|
||||||
|
- changed version and copyright
|
||||||
|
|
||||||
|
ENGINE.C
|
||||||
|
- changed function CheckDisp(), removed assertion with DISP_ANNUN
|
||||||
|
definition
|
||||||
|
- changed function WorkerThread(), changed call of function
|
||||||
|
UpdateAnnunciators() updating all annunciators
|
||||||
|
|
||||||
|
EXTERNAL.C
|
||||||
|
- file deleted
|
||||||
|
|
||||||
|
FETCH.C
|
||||||
|
- changed table o81B_, replaced beep patch opcode o81B1 by
|
||||||
|
o_invalid4
|
||||||
|
|
||||||
|
FILES.C
|
||||||
|
- changed function OpenDocument(), when KML script file name is
|
||||||
|
longer than the file buffer, skip the name heading until the name
|
||||||
|
remainder fits into the buffer, this cause a KML script error with
|
||||||
|
the selection of a new KML script instead of a general document
|
||||||
|
file read error before
|
||||||
|
|
||||||
|
KML.C
|
||||||
|
- changed function InitKML(), changed warning to error at ROM beep
|
||||||
|
patch detection
|
||||||
|
|
||||||
|
LODEPNG.C
|
||||||
|
- changed implementation file to LodePNG version 20200306 with
|
||||||
|
unmarked typecast patches for x64 compatibility, Copyright (c)
|
||||||
|
2005-2020 Lode Vandevenne
|
||||||
|
|
||||||
|
LODEPNG.H
|
||||||
|
- changed header file to LodePNG version 20200306
|
||||||
|
|
||||||
|
MOPS.C
|
||||||
|
- changed function WriteIO(), the annunciator access variable now
|
||||||
|
contain bit coded the annunciators which have changed and is the
|
||||||
|
argument for the modified UpdateAnnunciators() function
|
||||||
|
|
||||||
|
OPCODES.C
|
||||||
|
- removed function o81B1() as part of the beep patch
|
||||||
|
|
||||||
|
OPCODES.H
|
||||||
|
- removed extern declaration of function o81B1()
|
||||||
|
|
||||||
|
|
||||||
Service Pack 62 for Emu48 Version 1.0
|
Service Pack 62 for Emu48 Version 1.0
|
||||||
|
|
||||||
DEBUGGER.C
|
DEBUGGER.C
|
||||||
|
|
|
@ -850,21 +850,26 @@ VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID UpdateAnnunciators(VOID)
|
VOID UpdateAnnunciators(DWORD dwUpdateMask)
|
||||||
{
|
{
|
||||||
BYTE c;
|
BYTE c;
|
||||||
|
UINT i;
|
||||||
|
|
||||||
c = (BYTE)(Chipset.IORam[ANNCTRL] | (Chipset.IORam[ANNCTRL+1]<<4));
|
c = (BYTE)(Chipset.IORam[ANNCTRL] | (Chipset.IORam[ANNCTRL+1]<<4));
|
||||||
// switch annunciators off if timer stopped
|
// switch annunciators off if timer stopped
|
||||||
if ((c & AON) == 0 || (Chipset.IORam[TIMER2_CTRL] & RUN) == 0)
|
if ((c & AON) == 0 || (Chipset.IORam[TIMER2_CTRL] & RUN) == 0)
|
||||||
c = 0;
|
c = 0;
|
||||||
|
|
||||||
DrawAnnunciator(1,c&LA1);
|
for (i = 1; i <= 6; ++i)
|
||||||
DrawAnnunciator(2,c&LA2);
|
{
|
||||||
DrawAnnunciator(3,c&LA3);
|
if ((dwUpdateMask & 0x1) != 0) // annunciator changed?
|
||||||
DrawAnnunciator(4,c&LA4);
|
{
|
||||||
DrawAnnunciator(5,c&LA5);
|
DrawAnnunciator(i,c & 0x1);
|
||||||
DrawAnnunciator(6,c&LA6);
|
}
|
||||||
|
dwUpdateMask >>= 1;
|
||||||
|
c >>= 1;
|
||||||
|
}
|
||||||
|
_ASSERT(dwUpdateMask == 0);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "kml.h"
|
#include "kml.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
|
|
||||||
#define VERSION "1.62"
|
#define VERSION "1.63"
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
LPCTSTR szNoTitle = _T("Emu48 ")_T(VERSION)_T(" Debug");
|
LPCTSTR szNoTitle = _T("Emu48 ")_T(VERSION)_T(" Debug");
|
||||||
|
@ -898,7 +898,7 @@ static LRESULT OnPaint(HWND hWindow)
|
||||||
GdiFlush();
|
GdiFlush();
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&csGDILock);
|
LeaveCriticalSection(&csGDILock);
|
||||||
UpdateAnnunciators();
|
UpdateAnnunciators(0x3F);
|
||||||
RefreshButtons(&rcMainPaint);
|
RefreshButtons(&rcMainPaint);
|
||||||
}
|
}
|
||||||
EndPaint(hWindow, &Paint);
|
EndPaint(hWindow, &Paint);
|
||||||
|
|
|
@ -191,10 +191,6 @@ SOURCE=.\engine.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\external.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\fetch.c
|
SOURCE=.\fetch.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
|
@ -54,7 +54,6 @@
|
||||||
#define DISP_POINTER 0x01 // defines for display area
|
#define DISP_POINTER 0x01 // defines for display area
|
||||||
#define DISP_MAIN 0x02
|
#define DISP_MAIN 0x02
|
||||||
#define DISP_MENUE 0x04
|
#define DISP_MENUE 0x04
|
||||||
#define DISP_ANNUN 0x08
|
|
||||||
|
|
||||||
#define ROMPAGESIZE (1<<12) // ROM dirty page size in nibbles
|
#define ROMPAGESIZE (1<<12) // ROM dirty page size in nibbles
|
||||||
|
|
||||||
|
@ -182,7 +181,7 @@ extern VOID UpdateMainDisplay(VOID);
|
||||||
extern VOID UpdateMenuDisplay(VOID);
|
extern VOID UpdateMenuDisplay(VOID);
|
||||||
extern VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s);
|
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(DWORD dwUpdateMask);
|
||||||
extern VOID ResizeWindow(VOID);
|
extern VOID ResizeWindow(VOID);
|
||||||
|
|
||||||
// Engine.c
|
// Engine.c
|
||||||
|
@ -369,10 +368,6 @@ extern DWORD RPL_Pick(UINT l);
|
||||||
extern VOID RPL_Replace(DWORD n);
|
extern VOID RPL_Replace(DWORD n);
|
||||||
extern VOID RPL_Push(UINT l,DWORD n);
|
extern VOID RPL_Push(UINT l,DWORD n);
|
||||||
|
|
||||||
// External.c
|
|
||||||
extern VOID External(CHIPSET* w);
|
|
||||||
extern VOID RCKBp(CHIPSET* w);
|
|
||||||
|
|
||||||
// SndEnum.c
|
// SndEnum.c
|
||||||
extern VOID SetSoundDeviceList(HWND hWnd,UINT uDeviceID);
|
extern VOID SetSoundDeviceList(HWND hWnd,UINT uDeviceID);
|
||||||
|
|
||||||
|
|
|
@ -303,7 +303,7 @@ FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON IDI_EMU48,IDC_STATIC,7,6,20,20,SS_REALSIZEIMAGE
|
ICON IDI_EMU48,IDC_STATIC,7,6,20,20,SS_REALSIZEIMAGE
|
||||||
LTEXT "",IDC_VERSION,29,6,151,8,NOT WS_GROUP
|
LTEXT "",IDC_VERSION,29,6,151,8,NOT WS_GROUP
|
||||||
LTEXT "Copyright © 2019 Christoph Gießelink && Sébastien Carlier",
|
LTEXT "Copyright © 2020 Christoph Gießelink && Sébastien Carlier",
|
||||||
IDC_STATIC,29,18,181,8
|
IDC_STATIC,29,18,181,8
|
||||||
DEFPUSHBUTTON "OK",IDOK,215,12,39,14
|
DEFPUSHBUTTON "OK",IDOK,215,12,39,14
|
||||||
EDITTEXT IDC_LICENSE,7,33,247,112,ES_MULTILINE | ES_AUTOHSCROLL |
|
EDITTEXT IDC_LICENSE,7,33,247,112,ES_MULTILINE | ES_AUTOHSCROLL |
|
||||||
|
@ -723,8 +723,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,6,2,0
|
FILEVERSION 1,6,3,0
|
||||||
PRODUCTVERSION 1,6,2,0
|
PRODUCTVERSION 1,6,3,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -741,12 +741,12 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Christoph Gießelink & Sebastien Carlier\0"
|
VALUE "CompanyName", "Christoph Gießelink & Sebastien Carlier\0"
|
||||||
VALUE "FileDescription", "HP38/39/40/48/49 Emulator\0"
|
VALUE "FileDescription", "HP38/39/40/48/49 Emulator\0"
|
||||||
VALUE "FileVersion", "1, 6, 2, 0\0"
|
VALUE "FileVersion", "1, 6, 3, 0\0"
|
||||||
VALUE "InternalName", "Emu48\0"
|
VALUE "InternalName", "Emu48\0"
|
||||||
VALUE "LegalCopyright", "Copyright © 2019\0"
|
VALUE "LegalCopyright", "Copyright © 2020\0"
|
||||||
VALUE "OriginalFilename", "Emu48.exe\0"
|
VALUE "OriginalFilename", "Emu48.exe\0"
|
||||||
VALUE "ProductName", "Emu48\0"
|
VALUE "ProductName", "Emu48\0"
|
||||||
VALUE "ProductVersion", "1, 6, 2, 0\0"
|
VALUE "ProductVersion", "1, 6, 3, 0\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -281,7 +281,6 @@ static __inline VOID CheckDisp(BOOL bSync)
|
||||||
_ASSERT((disp & DISP_POINTER) == 0); // display pointer already updated
|
_ASSERT((disp & DISP_POINTER) == 0); // display pointer already updated
|
||||||
if (disp & DISP_MAIN) UpdateMainDisplay();
|
if (disp & DISP_MAIN) UpdateMainDisplay();
|
||||||
if (disp & DISP_MENUE) UpdateMenuDisplay();
|
if (disp & DISP_MENUE) UpdateMenuDisplay();
|
||||||
_ASSERT((disp & DISP_ANNUN) == 0); // annunciators already updated
|
|
||||||
disp = 0; // display updated
|
disp = 0; // display updated
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -568,7 +567,7 @@ loop:
|
||||||
UpdateDisplayPointers();
|
UpdateDisplayPointers();
|
||||||
UpdateMainDisplay();
|
UpdateMainDisplay();
|
||||||
UpdateMenuDisplay();
|
UpdateMenuDisplay();
|
||||||
UpdateAnnunciators();
|
UpdateAnnunciators(0x3F);
|
||||||
// init speed reference
|
// init speed reference
|
||||||
dwOldCyc = (DWORD) (Chipset.cycles & 0xFFFFFFFF);
|
dwOldCyc = (DWORD) (Chipset.cycles & 0xFFFFFFFF);
|
||||||
QueryPerformanceCounter(&lDummyInt);
|
QueryPerformanceCounter(&lDummyInt);
|
||||||
|
|
|
@ -1,99 +0,0 @@
|
||||||
/*
|
|
||||||
* external.c
|
|
||||||
*
|
|
||||||
* This file is part of Emu48
|
|
||||||
*
|
|
||||||
* Copyright (C) 1995 Sebastien Carlier
|
|
||||||
* Copyright (C) 2005 Christoph Gießelink
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#include "pch.h"
|
|
||||||
#include "Emu48.h"
|
|
||||||
#include "ops.h"
|
|
||||||
|
|
||||||
//| 38G | 39G | 40G | 48SX | 48GX | 49G | Name
|
|
||||||
//#F0E4F #80F0F #80F0F #706D2 #80850 #80F0F =SFLAG53_56
|
|
||||||
|
|
||||||
// memory address for flags -53 to -56
|
|
||||||
#define SFLAG53_56 ( (cCurrentRomType=='6') \
|
|
||||||
? 0xE0E4F \
|
|
||||||
: ( (cCurrentRomType=='A') \
|
|
||||||
? 0xF0E4F \
|
|
||||||
: ( (cCurrentRomType!='E' && cCurrentRomType!='X') \
|
|
||||||
? ( (cCurrentRomType=='S') \
|
|
||||||
? 0x706D2 \
|
|
||||||
: 0x80850 \
|
|
||||||
) \
|
|
||||||
: 0x80F0F \
|
|
||||||
) \
|
|
||||||
) \
|
|
||||||
)
|
|
||||||
|
|
||||||
VOID External(CHIPSET* w) // Beep patch
|
|
||||||
{
|
|
||||||
BYTE fbeep;
|
|
||||||
DWORD freq,dur;
|
|
||||||
|
|
||||||
freq = Npack(w->D,5); // frequency in Hz
|
|
||||||
dur = Npack(w->C,5); // duration in ms
|
|
||||||
Nread(&fbeep,SFLAG53_56,1); // fetch system flags -53 to -56
|
|
||||||
|
|
||||||
w->carry = TRUE; // setting of no beep
|
|
||||||
if (!(fbeep & 0x8) && freq) // bit -56 clear and frequency > 0 Hz
|
|
||||||
{
|
|
||||||
if (freq > 4400) freq = 4400; // high limit of HP (SX)
|
|
||||||
|
|
||||||
SoundBeep(freq,dur); // beeping
|
|
||||||
|
|
||||||
// estimate cpu cycles for beeping time (2MHz / 4MHz)
|
|
||||||
w->cycles += dur * ((cCurrentRomType=='S') ? 2000 : 4000);
|
|
||||||
|
|
||||||
// original routine return with...
|
|
||||||
w->P = 0; // P=0
|
|
||||||
w->intk = TRUE; // INTON
|
|
||||||
w->carry = FALSE; // RTNCC
|
|
||||||
}
|
|
||||||
w->pc = rstkpop();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
VOID RCKBp(CHIPSET* w) // ROM Check Beep patch
|
|
||||||
{
|
|
||||||
DWORD dw2F,dwCpuFreq;
|
|
||||||
DWORD freq,dur;
|
|
||||||
BYTE f,d;
|
|
||||||
|
|
||||||
f = w->C[1]; // f = freq ctl
|
|
||||||
d = w->C[0]; // d = duration ctl
|
|
||||||
|
|
||||||
if (cCurrentRomType == 'S') // Clarke chip with 48S ROM
|
|
||||||
{
|
|
||||||
// CPU strobe frequency @ RATE 14 = 1.97MHz
|
|
||||||
dwCpuFreq = ((14 + 1) * 524288) >> 2;
|
|
||||||
|
|
||||||
dw2F = f * 126 + 262; // F=f*63+131
|
|
||||||
}
|
|
||||||
else // York chip with 48G and later ROM
|
|
||||||
{
|
|
||||||
// CPU strobe frequency @ RATE 27 = 3.67MHz
|
|
||||||
// CPU strobe frequency @ RATE 29 = 3.93MHz
|
|
||||||
dwCpuFreq = ((27 + 1) * 524288) >> 2;
|
|
||||||
|
|
||||||
dw2F = f * 180 + 367; // F=f*90+183.5
|
|
||||||
}
|
|
||||||
|
|
||||||
freq = dwCpuFreq / dw2F;
|
|
||||||
dur = (dw2F * (256 - 16 * d)) * 1000 / 2 / dwCpuFreq;
|
|
||||||
|
|
||||||
if (freq > 4400) freq = 4400; // high limit of HP
|
|
||||||
|
|
||||||
SoundBeep(freq,dur); // beeping
|
|
||||||
|
|
||||||
// estimate cpu cycles for beeping time (2MHz / 4MHz)
|
|
||||||
w->cycles += dur * ((cCurrentRomType=='S') ? 2000 : 4000);
|
|
||||||
|
|
||||||
w->P = 0; // P=0
|
|
||||||
w->carry = FALSE; // RTNCC
|
|
||||||
w->pc = rstkpop();
|
|
||||||
return;
|
|
||||||
}
|
|
|
@ -321,7 +321,7 @@ static JMPTAB o8A_[] =
|
||||||
static JMPTAB o81B_[] =
|
static JMPTAB o81B_[] =
|
||||||
{
|
{
|
||||||
(LPCVOID) o_invalid4, F,
|
(LPCVOID) o_invalid4, F,
|
||||||
(LPCVOID) o81B1, F, // normally o_invalid4, beep patch
|
(LPCVOID) o_invalid4, F,
|
||||||
(LPCVOID) o81B2, F,
|
(LPCVOID) o81B2, F,
|
||||||
(LPCVOID) o81B3, F,
|
(LPCVOID) o81B3, F,
|
||||||
(LPCVOID) o81B4, F,
|
(LPCVOID) o81B4, F,
|
||||||
|
|
|
@ -1011,8 +1011,16 @@ BOOL OpenDocument(LPCTSTR szFilename)
|
||||||
case 0xFE: // Win48 2.1 / Emu4x 0.99.x format
|
case 0xFE: // Win48 2.1 / Emu4x 0.99.x format
|
||||||
// read length of KML script name
|
// read length of KML script name
|
||||||
ReadFile(hFile,&nLength,sizeof(nLength),&lBytesRead,NULL);
|
ReadFile(hFile,&nLength,sizeof(nLength),&lBytesRead,NULL);
|
||||||
|
|
||||||
// KML script name too long for file buffer
|
// KML script name too long for file buffer
|
||||||
if (nLength >= ARRAYSIZEOF(szCurrentKml)) goto read_err;
|
if (nLength >= ARRAYSIZEOF(szCurrentKml))
|
||||||
|
{
|
||||||
|
// skip heading KML script name characters until remainder fits into file buffer
|
||||||
|
UINT nSkip = nLength - (ARRAYSIZEOF(szCurrentKml) - 1);
|
||||||
|
SetFilePointer(hFile, nSkip, NULL, FILE_CURRENT);
|
||||||
|
|
||||||
|
nLength = ARRAYSIZEOF(szCurrentKml) - 1;
|
||||||
|
}
|
||||||
#if defined _UNICODE
|
#if defined _UNICODE
|
||||||
{
|
{
|
||||||
LPSTR szTmp = (LPSTR) malloc(nLength);
|
LPSTR szTmp = (LPSTR) malloc(nLength);
|
||||||
|
|
|
@ -2630,9 +2630,8 @@ BOOL InitKML(LPCTSTR szFilename, BOOL bNoLog)
|
||||||
}
|
}
|
||||||
if (CheckForBeepPatch()) // check if ROM contain beep patches
|
if (CheckForBeepPatch()) // check if ROM contain beep patches
|
||||||
{
|
{
|
||||||
AddToLog(_T("Warning, ROM beep patch detected. Remove beep patches please."));
|
AddToLog(_T("Error, ROM beep patch detected. Remove beep patches please."));
|
||||||
bNoLog = FALSE;
|
goto quit;
|
||||||
bAlwaysDisplayLog = TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ResizeMainBitmap(nScaleMul,nScaleDiv); // resize main picture
|
ResizeMainBitmap(nScaleMul,nScaleDiv); // resize main picture
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
LodePNG version 20190914
|
LodePNG version 20200306
|
||||||
|
|
||||||
Copyright (c) 2005-2019 Lode Vandevenne
|
Copyright (c) 2005-2020 Lode Vandevenne
|
||||||
|
|
||||||
This software is provided 'as-is', without any express or implied
|
This software is provided 'as-is', without any express or implied
|
||||||
warranty. In no event will the authors be held liable for any damages
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
@ -335,17 +335,19 @@ typedef struct LodePNGColorMode {
|
||||||
palette (PLTE and tRNS)
|
palette (PLTE and tRNS)
|
||||||
|
|
||||||
Dynamically allocated with the colors of the palette, including alpha.
|
Dynamically allocated with the colors of the palette, including alpha.
|
||||||
When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use
|
This field may not be allocated directly, use lodepng_color_mode_init first,
|
||||||
lodepng_palette_clear, then for each color use lodepng_palette_add.
|
then lodepng_palette_add per color to correctly initialize it (to ensure size
|
||||||
If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette.
|
of exactly 1024 bytes).
|
||||||
|
|
||||||
|
The alpha channels must be set as well, set them to 255 for opaque images.
|
||||||
|
|
||||||
When decoding, by default you can ignore this palette, since LodePNG already
|
When decoding, by default you can ignore this palette, since LodePNG already
|
||||||
fills the palette colors in the pixels of the raw RGBA output.
|
fills the palette colors in the pixels of the raw RGBA output.
|
||||||
|
|
||||||
The palette is only supported for color type 3.
|
The palette is only supported for color type 3.
|
||||||
*/
|
*/
|
||||||
unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/
|
unsigned char* palette; /*palette in RGBARGBA... order. Must be either 0, or when allocated must have 1024 bytes*/
|
||||||
size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/
|
size_t palettesize; /*palette size in number of colors (amount of used bytes is 4 * palettesize)*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
transparent color key (tRNS)
|
transparent color key (tRNS)
|
||||||
|
@ -691,20 +693,11 @@ typedef struct LodePNGColorStats {
|
||||||
|
|
||||||
void lodepng_color_stats_init(LodePNGColorStats* stats);
|
void lodepng_color_stats_init(LodePNGColorStats* stats);
|
||||||
|
|
||||||
/*Get a LodePNGColorStats of the image. The stats must already have been inited.*/
|
/*Get a LodePNGColorStats of the image. The stats must already have been inited.
|
||||||
void lodepng_compute_color_stats(LodePNGColorStats* stats,
|
Returns error code (e.g. alloc fail) or 0 if ok.*/
|
||||||
|
unsigned lodepng_compute_color_stats(LodePNGColorStats* stats,
|
||||||
const unsigned char* image, unsigned w, unsigned h,
|
const unsigned char* image, unsigned w, unsigned h,
|
||||||
const LodePNGColorMode* mode_in);
|
const LodePNGColorMode* mode_in);
|
||||||
/*Computes a minimal PNG color model that can contain all colors as indicated by the stats and it settings.
|
|
||||||
The stats should be computed with lodepng_compute_color_stats.
|
|
||||||
mode_in is raw color profile of the image the stats were computed on, to copy palette order from when relevant.
|
|
||||||
Minimal PNG color model means the color type and bit depth that gives smallest amount of bits in the output image,
|
|
||||||
e.g. gray if only grayscale pixels, palette if less than 256 colors, color key if only single transparent color, ...
|
|
||||||
LodePNG uses this function internally if auto_convert is enabled (it is by default).
|
|
||||||
*/
|
|
||||||
unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out,
|
|
||||||
const LodePNGColorMode* mode_in,
|
|
||||||
const LodePNGColorMode* stats);
|
|
||||||
|
|
||||||
/*Settings for the encoder.*/
|
/*Settings for the encoder.*/
|
||||||
typedef struct LodePNGEncoderSettings {
|
typedef struct LodePNGEncoderSettings {
|
||||||
|
@ -753,10 +746,6 @@ typedef struct LodePNGState {
|
||||||
LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
|
LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/
|
||||||
LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
|
LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/
|
||||||
unsigned error;
|
unsigned error;
|
||||||
#ifdef LODEPNG_COMPILE_CPP
|
|
||||||
/* For the lodepng::State subclass. */
|
|
||||||
virtual ~LodePNGState(){}
|
|
||||||
#endif
|
|
||||||
} LodePNGState;
|
} LodePNGState;
|
||||||
|
|
||||||
/*init, cleanup and copy functions to use with this struct*/
|
/*init, cleanup and copy functions to use with this struct*/
|
||||||
|
@ -868,32 +857,32 @@ Input must be at the beginning of a chunk (result of a previous lodepng_chunk_ne
|
||||||
or the 8th byte of a PNG file which always has the first chunk), or alternatively may
|
or the 8th byte of a PNG file which always has the first chunk), or alternatively may
|
||||||
point to the first byte of the PNG file (which is not a chunk but the magic header, the
|
point to the first byte of the PNG file (which is not a chunk but the magic header, the
|
||||||
function will then skip over it and return the first real chunk).
|
function will then skip over it and return the first real chunk).
|
||||||
Expects at least 8 readable bytes of memory in the input pointer.
|
Will output pointer to the start of the next chunk, or at or beyond end of the file if there
|
||||||
Will output pointer to the start of the next chunk or the end of the file if there
|
is no more chunk after this or possibly if the chunk is corrupt.
|
||||||
is no more chunk after this. Start this process at the 8th byte of the PNG file.
|
Start this process at the 8th byte of the PNG file.
|
||||||
In a non-corrupt PNG file, the last chunk should have name "IEND".
|
In a non-corrupt PNG file, the last chunk should have name "IEND".
|
||||||
*/
|
*/
|
||||||
unsigned char* lodepng_chunk_next(unsigned char* chunk);
|
unsigned char* lodepng_chunk_next(unsigned char* chunk, unsigned char* end);
|
||||||
const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk);
|
const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk, const unsigned char* end);
|
||||||
|
|
||||||
/*Finds the first chunk with the given type in the range [chunk, end), or returns NULL if not found.*/
|
/*Finds the first chunk with the given type in the range [chunk, end), or returns NULL if not found.*/
|
||||||
unsigned char* lodepng_chunk_find(unsigned char* chunk, const unsigned char* end, const char type[5]);
|
unsigned char* lodepng_chunk_find(unsigned char* chunk, unsigned char* end, const char type[5]);
|
||||||
const unsigned char* lodepng_chunk_find_const(const unsigned char* chunk, const unsigned char* end, const char type[5]);
|
const unsigned char* lodepng_chunk_find_const(const unsigned char* chunk, const unsigned char* end, const char type[5]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Appends chunk to the data in out. The given chunk should already have its chunk header.
|
Appends chunk to the data in out. The given chunk should already have its chunk header.
|
||||||
The out variable and outlength are updated to reflect the new reallocated buffer.
|
The out variable and outsize are updated to reflect the new reallocated buffer.
|
||||||
Returns error code (0 if it went ok)
|
Returns error code (0 if it went ok)
|
||||||
*/
|
*/
|
||||||
unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk);
|
unsigned lodepng_chunk_append(unsigned char** out, size_t* outsize, const unsigned char* chunk);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Appends new chunk to out. The chunk to append is given by giving its length, type
|
Appends new chunk to out. The chunk to append is given by giving its length, type
|
||||||
and data separately. The type is a 4-letter string.
|
and data separately. The type is a 4-letter string.
|
||||||
The out variable and outlength are updated to reflect the new reallocated buffer.
|
The out variable and outsize are updated to reflect the new reallocated buffer.
|
||||||
Returne error code (0 if it went ok)
|
Returne error code (0 if it went ok)
|
||||||
*/
|
*/
|
||||||
unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
|
unsigned lodepng_chunk_create(unsigned char** out, size_t* outsize, unsigned length,
|
||||||
const char* type, const unsigned char* data);
|
const char* type, const unsigned char* data);
|
||||||
|
|
||||||
|
|
||||||
|
@ -983,7 +972,7 @@ class State : public LodePNGState {
|
||||||
public:
|
public:
|
||||||
State();
|
State();
|
||||||
State(const State& other);
|
State(const State& other);
|
||||||
virtual ~State();
|
~State();
|
||||||
State& operator=(const State& other);
|
State& operator=(const State& other);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1065,8 +1054,7 @@ TODO:
|
||||||
[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
|
[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes
|
||||||
[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
|
[ ] allow user to provide custom color conversion functions, e.g. for premultiplied alpha, padding bits or not, ...
|
||||||
[ ] allow user to give data (void*) to custom allocator
|
[ ] allow user to give data (void*) to custom allocator
|
||||||
[ ] provide alternatives for C library functions not present on some platforms (memcpy, ...)
|
[X] provide alternatives for C library functions not present on some platforms (memcpy, ...)
|
||||||
[ ] rename "grey" to "gray" everywhere since "color" also uses US spelling (keep "grey" copies for backwards compatibility)
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#endif /*LODEPNG_H inclusion guard*/
|
#endif /*LODEPNG_H inclusion guard*/
|
||||||
|
@ -1582,12 +1570,12 @@ Iterate to the next chunk. This works if you have a buffer with consecutive chun
|
||||||
functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
|
functions do no boundary checking of the allocated data whatsoever, so make sure there is enough
|
||||||
data available in the buffer to be able to go to the next chunk.
|
data available in the buffer to be able to go to the next chunk.
|
||||||
|
|
||||||
unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk):
|
unsigned lodepng_chunk_append(unsigned char** out, size_t* outsize, const unsigned char* chunk):
|
||||||
unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length,
|
unsigned lodepng_chunk_create(unsigned char** out, size_t* outsize, unsigned length,
|
||||||
const char* type, const unsigned char* data):
|
const char* type, const unsigned char* data):
|
||||||
|
|
||||||
These functions are used to create new chunks that are appended to the data in *out that has
|
These functions are used to create new chunks that are appended to the data in *out that has
|
||||||
length *outlength. The append function appends an existing chunk to the new data. The create
|
length *outsize. The append function appends an existing chunk to the new data. The create
|
||||||
function creates a new chunk with the given parameters and appends it. Type is the 4-letter
|
function creates a new chunk with the given parameters and appends it. Type is the 4-letter
|
||||||
name of the chunk.
|
name of the chunk.
|
||||||
|
|
||||||
|
@ -1787,14 +1775,18 @@ symbol.
|
||||||
Not all changes are listed here, the commit history in github lists more:
|
Not all changes are listed here, the commit history in github lists more:
|
||||||
https://github.com/lvandeve/lodepng
|
https://github.com/lvandeve/lodepng
|
||||||
|
|
||||||
|
*) 06 mar 2020: simplified some of the dynamic memory allocations.
|
||||||
|
*) 12 jan 2020: (!) added 'end' argument to lodepng_chunk_next to allow correct
|
||||||
|
overflow checks.
|
||||||
*) 14 aug 2019: around 25% faster decoding thanks to huffman lookup tables.
|
*) 14 aug 2019: around 25% faster decoding thanks to huffman lookup tables.
|
||||||
*) 15 jun 2019 (!): auto_choose_color API changed (for bugfix: don't use palette
|
*) 15 jun 2019: (!) auto_choose_color API changed (for bugfix: don't use palette
|
||||||
if gray ICC profile) and non-ICC LodePNGColorProfile renamed to LodePNGColorStats.
|
if gray ICC profile) and non-ICC LodePNGColorProfile renamed to
|
||||||
|
LodePNGColorStats.
|
||||||
*) 30 dec 2018: code style changes only: removed newlines before opening braces.
|
*) 30 dec 2018: code style changes only: removed newlines before opening braces.
|
||||||
*) 10 sep 2018: added way to inspect metadata chunks without full decoding.
|
*) 10 sep 2018: added way to inspect metadata chunks without full decoding.
|
||||||
*) 19 aug 2018 (!): fixed color mode bKGD is encoded with and made it use
|
*) 19 aug 2018: (!) fixed color mode bKGD is encoded with and made it use
|
||||||
palette index in case of palette.
|
palette index in case of palette.
|
||||||
*) 10 aug 2018 (!): added support for gAMA, cHRM, sRGB and iCCP chunks. This
|
*) 10 aug 2018: (!) added support for gAMA, cHRM, sRGB and iCCP chunks. This
|
||||||
change is backwards compatible unless you relied on unknown_chunks for those.
|
change is backwards compatible unless you relied on unknown_chunks for those.
|
||||||
*) 11 jun 2018: less restrictive check for pixel size integer overflow
|
*) 11 jun 2018: less restrictive check for pixel size integer overflow
|
||||||
*) 14 jan 2018: allow optionally ignoring a few more recoverable errors
|
*) 14 jan 2018: allow optionally ignoring a few more recoverable errors
|
||||||
|
@ -1814,25 +1806,25 @@ https://github.com/lvandeve/lodepng
|
||||||
*) 22 dec 2013: Power of two windowsize required for optimization.
|
*) 22 dec 2013: Power of two windowsize required for optimization.
|
||||||
*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
|
*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key.
|
||||||
*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
|
*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png).
|
||||||
*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_"
|
*) 11 mar 2013: (!) Bugfix with custom free. Changed from "my" to "lodepng_"
|
||||||
prefix for the custom allocators and made it possible with a new #define to
|
prefix for the custom allocators and made it possible with a new #define to
|
||||||
use custom ones in your project without needing to change lodepng's code.
|
use custom ones in your project without needing to change lodepng's code.
|
||||||
*) 28 jan 2013: Bugfix with color key.
|
*) 28 jan 2013: Bugfix with color key.
|
||||||
*) 27 okt 2012: Tweaks in text chunk keyword length error handling.
|
*) 27 okt 2012: Tweaks in text chunk keyword length error handling.
|
||||||
*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode.
|
*) 8 okt 2012: (!) Added new filter strategy (entropy) and new auto color mode.
|
||||||
(no palette). Better deflate tree encoding. New compression tweak settings.
|
(no palette). Better deflate tree encoding. New compression tweak settings.
|
||||||
Faster color conversions while decoding. Some internal cleanups.
|
Faster color conversions while decoding. Some internal cleanups.
|
||||||
*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
|
*) 23 sep 2012: Reduced warnings in Visual Studio a little bit.
|
||||||
*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions
|
*) 1 sep 2012: (!) Removed #define's for giving custom (de)compression functions
|
||||||
and made it work with function pointers instead.
|
and made it work with function pointers instead.
|
||||||
*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
|
*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc
|
||||||
and free functions and toggle #defines from compiler flags. Small fixes.
|
and free functions and toggle #defines from compiler flags. Small fixes.
|
||||||
*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible.
|
*) 6 may 2012: (!) Made plugging in custom zlib/deflate functions more flexible.
|
||||||
*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed
|
*) 22 apr 2012: (!) Made interface more consistent, renaming a lot. Removed
|
||||||
redundant C++ codec classes. Reduced amount of structs. Everything changed,
|
redundant C++ codec classes. Reduced amount of structs. Everything changed,
|
||||||
but it is cleaner now imho and functionality remains the same. Also fixed
|
but it is cleaner now imho and functionality remains the same. Also fixed
|
||||||
several bugs and shrunk the implementation code. Made new samples.
|
several bugs and shrunk the implementation code. Made new samples.
|
||||||
*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best
|
*) 6 nov 2011: (!) By default, the encoder now automatically chooses the best
|
||||||
PNG color model and bit depth, based on the amount and type of colors of the
|
PNG color model and bit depth, based on the amount and type of colors of the
|
||||||
raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
|
raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color.
|
||||||
*) 9 okt 2011: simpler hash chain implementation for the encoder.
|
*) 9 okt 2011: simpler hash chain implementation for the encoder.
|
||||||
|
@ -1841,7 +1833,7 @@ https://github.com/lvandeve/lodepng
|
||||||
A bug with the PNG filtertype heuristic was fixed, so that it chooses much
|
A bug with the PNG filtertype heuristic was fixed, so that it chooses much
|
||||||
better ones (it's quite significant). A setting to do an experimental, slow,
|
better ones (it's quite significant). A setting to do an experimental, slow,
|
||||||
brute force search for PNG filter types is added.
|
brute force search for PNG filter types is added.
|
||||||
*) 17 aug 2011 (!): changed some C zlib related function names.
|
*) 17 aug 2011: (!) changed some C zlib related function names.
|
||||||
*) 16 aug 2011: made the code less wide (max 120 characters per line).
|
*) 16 aug 2011: made the code less wide (max 120 characters per line).
|
||||||
*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
|
*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors.
|
||||||
*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
|
*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled.
|
||||||
|
@ -1949,5 +1941,5 @@ Domain: gmail dot com.
|
||||||
Account: lode dot vandevenne.
|
Account: lode dot vandevenne.
|
||||||
|
|
||||||
|
|
||||||
Copyright (c) 2005-2019 Lode Vandevenne
|
Copyright (c) 2005-2020 Lode Vandevenne
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1286,6 +1286,7 @@ VOID WriteIO(BYTE *a, DWORD d, DWORD s)
|
||||||
BOOL bDISPADDR = FALSE; // flag addr 0x120-0x124 changed
|
BOOL bDISPADDR = FALSE; // flag addr 0x120-0x124 changed
|
||||||
BOOL bLINEOFFS = FALSE; // flag addr 0x125-0x127 changed
|
BOOL bLINEOFFS = FALSE; // flag addr 0x125-0x127 changed
|
||||||
BOOL bMENUADDR = FALSE; // flag addr 0x130-0x134 changed
|
BOOL bMENUADDR = FALSE; // flag addr 0x130-0x134 changed
|
||||||
|
DWORD dwAnnunciator = 0; // no annunciator write
|
||||||
|
|
||||||
#if defined DEBUG_IO
|
#if defined DEBUG_IO
|
||||||
{
|
{
|
||||||
|
@ -1391,7 +1392,8 @@ VOID WriteIO(BYTE *a, DWORD d, DWORD s)
|
||||||
if (c & RST)
|
if (c & RST)
|
||||||
{
|
{
|
||||||
CpuReset(); // emulate NRES signal
|
CpuReset(); // emulate NRES signal
|
||||||
disp |= (DISP_POINTER | DISP_MAIN | DISP_MENUE | DISP_ANNUN);
|
disp |= (DISP_POINTER | DISP_MAIN | DISP_MENUE);
|
||||||
|
dwAnnunciator = 0x3F; // update all annunciators
|
||||||
bInterrupt = TRUE; // SHUTDN
|
bInterrupt = TRUE; // SHUTDN
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1404,11 +1406,9 @@ VOID WriteIO(BYTE *a, DWORD d, DWORD s)
|
||||||
// 0010B @ Annunciator control [LA4 LA3 LA2 LA1] = [ alarm alpha -> <- ]
|
// 0010B @ Annunciator control [LA4 LA3 LA2 LA1] = [ alarm alpha -> <- ]
|
||||||
case 0x0B:
|
case 0x0B:
|
||||||
case 0x0C:
|
case 0x0C:
|
||||||
if (c!=Chipset.IORam[d])
|
// annunciator changed
|
||||||
{
|
dwAnnunciator |= ((Chipset.IORam[d] ^c) << ((d - 0x0B) * 4)) & 0x3F;
|
||||||
Chipset.IORam[d] = c;
|
Chipset.IORam[d] = c;
|
||||||
disp |= DISP_ANNUN;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// 0010D = NS:BAUD
|
// 0010D = NS:BAUD
|
||||||
|
@ -1727,7 +1727,7 @@ VOID WriteIO(BYTE *a, DWORD d, DWORD s)
|
||||||
StartTimers();
|
StartTimers();
|
||||||
else
|
else
|
||||||
StopTimers();
|
StopTimers();
|
||||||
disp |= DISP_ANNUN; // update annunciators
|
dwAnnunciator = 0x3F; // update all annunciators
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// 00130 = NS:MENUADDR
|
// 00130 = NS:MENUADDR
|
||||||
|
@ -1810,10 +1810,9 @@ finish:
|
||||||
disp &= ~DISP_POINTER; // display pointer updated
|
disp &= ~DISP_POINTER; // display pointer updated
|
||||||
UpdateDisplayPointers();
|
UpdateDisplayPointers();
|
||||||
}
|
}
|
||||||
if (disp & DISP_ANNUN)
|
if (dwAnnunciator)
|
||||||
{
|
{
|
||||||
disp &= ~DISP_ANNUN; // annunciators updated
|
UpdateAnnunciators(dwAnnunciator);
|
||||||
UpdateAnnunciators();
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2437,12 +2437,3 @@ VOID o_goyes5(LPBYTE I)
|
||||||
w.pc=rstkpop();
|
w.pc=rstkpop();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//////// EXTENSIONS ////////
|
|
||||||
VOID o81B1(LPBYTE I) // beep patch
|
|
||||||
{
|
|
||||||
External(&w);
|
|
||||||
PCHANGED; // update field select table
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
////////////////////////////
|
|
||||||
|
|
|
@ -441,5 +441,3 @@ extern VOID o_invalid6(LPBYTE I);
|
||||||
|
|
||||||
extern VOID o_goyes3(LPBYTE I);
|
extern VOID o_goyes3(LPBYTE I);
|
||||||
extern VOID o_goyes5(LPBYTE I);
|
extern VOID o_goyes5(LPBYTE I);
|
||||||
|
|
||||||
extern VOID o81B1(LPBYTE I); // beep patch
|
|
||||||
|
|
|
@ -303,7 +303,7 @@ FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
ICON IDI_EMU48,IDC_STATIC,7,6,20,20,SS_REALSIZEIMAGE
|
ICON IDI_EMU48,IDC_STATIC,7,6,20,20,SS_REALSIZEIMAGE
|
||||||
LTEXT "",IDC_VERSION,29,6,151,8,NOT WS_GROUP
|
LTEXT "",IDC_VERSION,29,6,151,8,NOT WS_GROUP
|
||||||
LTEXT "Copyright © 2019 Christoph Gießelink && Sébastien Carlier",
|
LTEXT "Copyright © 2020 Christoph Gießelink && Sébastien Carlier",
|
||||||
IDC_STATIC,29,18,181,8
|
IDC_STATIC,29,18,181,8
|
||||||
DEFPUSHBUTTON "OK",IDOK,215,12,39,14
|
DEFPUSHBUTTON "OK",IDOK,215,12,39,14
|
||||||
EDITTEXT IDC_LICENSE,7,33,247,112,ES_MULTILINE | ES_AUTOHSCROLL |
|
EDITTEXT IDC_LICENSE,7,33,247,112,ES_MULTILINE | ES_AUTOHSCROLL |
|
||||||
|
@ -752,8 +752,8 @@ END
|
||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,6,2,0
|
FILEVERSION 1,6,3,0
|
||||||
PRODUCTVERSION 1,6,2,0
|
PRODUCTVERSION 1,6,3,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
@ -770,12 +770,12 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "CompanyName", "Christoph Gießelink & Sebastien Carlier\0"
|
VALUE "CompanyName", "Christoph Gießelink & Sebastien Carlier\0"
|
||||||
VALUE "FileDescription", "HP38/39/40/48/49 Emulator\0"
|
VALUE "FileDescription", "HP38/39/40/48/49 Emulator\0"
|
||||||
VALUE "FileVersion", "1, 6, 2, 0\0"
|
VALUE "FileVersion", "1, 6, 3, 0\0"
|
||||||
VALUE "InternalName", "Emu48\0"
|
VALUE "InternalName", "Emu48\0"
|
||||||
VALUE "LegalCopyright", "Copyright © 2019\0"
|
VALUE "LegalCopyright", "Copyright © 2020\0"
|
||||||
VALUE "OriginalFilename", "Emu48.exe\0"
|
VALUE "OriginalFilename", "Emu48.exe\0"
|
||||||
VALUE "ProductName", "Emu48\0"
|
VALUE "ProductName", "Emu48\0"
|
||||||
VALUE "ProductVersion", "1, 6, 2, 0\0"
|
VALUE "ProductVersion", "1, 6, 3, 0\0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
|
|
@ -29,7 +29,7 @@ RSRC=$(PRJ).rc
|
||||||
RSRCOBJ=$(PRJ).o
|
RSRCOBJ=$(PRJ).o
|
||||||
|
|
||||||
OBJS=cursor.o ddeserv.o debugger.o disasm.o dismem.o display.o disrpl.o \
|
OBJS=cursor.o ddeserv.o debugger.o disasm.o dismem.o display.o disrpl.o \
|
||||||
emu48.o engine.o external.o fetch.o files.o i28f160.o keyboard.o \
|
emu48.o engine.o fetch.o files.o i28f160.o keyboard.o \
|
||||||
keymacro.o kml.o lodepng.o lowbat.o mru.o mops.o opcodes.o \
|
keymacro.o kml.o lodepng.o lowbat.o mru.o mops.o opcodes.o \
|
||||||
redeye.o rpl.o serial.o settings.o sndenum.o sound.o stack.o \
|
redeye.o rpl.o serial.o settings.o sndenum.o sound.o stack.o \
|
||||||
symbfile.o timer.o udp.o \
|
symbfile.o timer.o udp.o \
|
||||||
|
@ -83,9 +83,6 @@ engine.o: engine.c pch.h emu48.h types.h opcodes.h \
|
||||||
io.h debugger.h
|
io.h debugger.h
|
||||||
$(CC) $(CFLAGS) $(DEFINES) -c -o engine.o engine.c
|
$(CC) $(CFLAGS) $(DEFINES) -c -o engine.o engine.c
|
||||||
|
|
||||||
external.o: external.c pch.h emu48.h types.h ops.h
|
|
||||||
$(CC) $(CFLAGS) $(DEFINES) -c -o external.o external.c
|
|
||||||
|
|
||||||
fetch.o: fetch.c pch.h opcodes.h
|
fetch.o: fetch.c pch.h opcodes.h
|
||||||
$(CC) $(CFLAGS) $(DEFINES) -c -o fetch.o fetch.c
|
$(CC) $(CFLAGS) $(DEFINES) -c -o fetch.o fetch.c
|
||||||
|
|
||||||
|
|
|
@ -67,4 +67,4 @@ Many thanks to Pedro A. Arranda Guti
|
||||||
compatible.
|
compatible.
|
||||||
|
|
||||||
|
|
||||||
10/15/19 (c) by Christoph Gießelink
|
09/17/20 (c) by Christoph Gießelink
|
||||||
|
|
BIN
uninst.exe
BIN
uninst.exe
Binary file not shown.
Loading…
Reference in a new issue