Emu42 v1.13 DEBUGGER.C - changed table MemMap[], replaced Chipset memory pointer NCE2 and NCE3 by new variables - changed function Debugger(), removed all UpdateWindowStatus() function calls DISPLAY.C - added RGBtoCOLORREF definition - bugfix in function SetBkBitmap(), UpdateContrastSaca() and CreateLcdBitmap(), the color argument of function CreateSolidBrush() must be in COLORREF and not in RGBQUAD format EMU42.C - renamed function UpdateWindowStatus() to OnInitMenu() and modified it to a WM_INITMENU message handler - changed function OnFileNew() and WinMain(), removed all UpdateWindowStatus() function calls - changed function MainWndProc(), added WM_INITMENU message handler - changed function Disasm(), added if opcode should be interpreted as PCO EMU42.DSP - changed the resource natural language to English EMU42.H - extern declaration of global variables - removed declaration of global function UpdateWindowStatus() EMU42.RC - changed IDD_DEBUG_SETTINGS, replaced "Ok" with "OK" and removed accelerator keys from "OK" and "Cancel" - changed IDR_DEBUG_MEM, added several accelerator keys - changed version and copyright ENGINE.C - changed function SwitchToState(), removed all UpdateWindowStatus() function calls FILES.C - added global variables to hold the memory module pointers prior located in the Chipset and ChipsetS structure - bugfix in function PatchRom(), if first patch address in a line was outside the ROM area, the emulator crashed with an access violation, removed the patch address wrap around - changed function ResetDocument(), NewDocument(), OpenDocument(), SaveDocument(), SaveBackup(), RestoreBackup() and ResetBackup(), replaced Chipset memory pointer NCE2 and NCE3 by new variables - changed function ResetDocument(), OpenDocument(), SaveDocumentAs(), SaveBackup(), RestoreBackup() and ResetBackup(), removed all UpdateWindowStatus() function calls - changed function DibNumColors(), changed function prototype from UINT to WORD return - changed function CreateBIPalette(), changed variable UINT nNumColors to WORD wNumColors to avoid variable overflow loading palNumEntries of LOGPALETTE structure KEYMACRO.C - changed function OnToolMacroNew(), OnToolMacroPlay() and OnToolMacroStop(), removed all UpdateWindowStatus() function calls KML.C - changed function ParseLines(), BOOL expression was missing in main while() loop, worked because TOK_NONE is 0 - changed function RunLine(), removed warning when compiling for x64 architecture - changed function KillKML(), removed UpdateWindowStatus() function call - changed function LoadKMLGlobal(), used wrong variable type for variable eToken MOPS.C - changed table NCE[], replaced Chipset memory pointer NCE2 and NCE3 by new variables OPCODES.C - changed function o802() and o803(), replaced Chipset memory pointer NCE2 and NCE3 by new variables - bugfix in function o807(), a pressed ON key prevented the CPU going into shutdown mode OPS.H - bugfix in function FASTPTR(), longest opcode is 21 nibbles long and fixed problem executing an opcode over a MMU boundary - changed function Nunpack(), new coding for speed optimization, this solved also a bug in the code optimizer of VS2010 (the optimizer generated wrong code, another possible workaround for this problem was declaring the function argument "BYTE *a" as "volatile BYTE *a") PCH.H - added INVALID_FILE_ATTRIBUTES definition - enabled WinXP style under VS2005, VS2008 and VS2010 SETTINGS.C - changed function WriteReg() and DelReg(), changed function protoytypes to make them compatible with the functions WritePrivateProfileString() and WritePrivateProfileInt() - changed function GetRegistryInt(), changed function protoytype to make it compatible with function GetPrivateProfileInt() STACK.C - bugfix in function OnStackCopy(), local target buffer was too small to hold a large complex number TYPES.H - changed structures CHIPSET_M and CHIPSET_S, replaced NCE2 and NCE3 with a DWORD placeholder each, because when compiling for x64 architecture these 4 byte pointers grow up to 8 bytes and destroy the state file structure USRPRG42.C - changed function SelectProgram(), removed warnings when compiling UNICODE for x64 architecture Emu42 v1.12 DDESERV.C - bugfix in function DdeCallback(), readded delay at XTYP_POKE after ON key state change switching calculator on and made ON key hold time variable DEBUGGER.C - added backup breakpoint list - changed function ViewCodeWnd() and UpdateCodeWnd(), calculators base on Sacajawea hardware don't use PCO in there firmware - changed function UpdateProfileWnd(), added Sacajawea hardware time calculation to profiler - changed function EnterAddr(), expanded hex address range from 6 to 8 digits - added functions SaveBreakpointList() and CreateBackupBreakpointList() to handle the backup breakpoint list DEBUGGER.H - extern declaration of global functions DISPLAY.C - made variable nLcdyZoom public - added definitions and global variables - changed initialization of dwKMLColor[] table - added sSegtabSaca[] table - added *UpdateContrast() function pointer - added function GetDimLcdBitmap(), calculate size of Sacajawea LCD - added function SetBkBitmap(), create background bitmap with segments - added function UpdateContrastSaca(), contrast handler for Sacajawea hardware - renamed function UpdateContrast() to UpdateContrastLewis() - changed function GetSizeLcdBitmap(), return calculated sizes now - changed function CreateLcdBitmap(), set variable nLcdyZoom only when it's not initialized and added initialization for Sacajawea display type - changed function DestroyLcdBitmap(), changed contrast palette setting to new startup colors and added cleanup for Sacajawea display type - changed function CreateMainBitmap(), added initialization for annunciator DC - changed function DestroyMainBitmap(), added reset of annunciator DC - added function CreateAnnunBitmap(), load Sacajawea annunciator bitmap - added function DestroyAnnunBitmap(), destroy Sacajawea annunciator bitmap - added function WritePixel(), a replacement for the removed functions WritePixelQuad() and WritePixelRect() - changed function UpdateDisplayClamshell() and UpdateDisplayPioneer(), adjusted to the new function WritePixel() - added function UpdateDisplaySacajawea(), display drawing routine for Sacajawea hardware - changed function UpdateMainDisplay(), removed assertion for zoom factor because the Sacajawea implementation don't use this factor -> the assertions are now in the Lewis drawing routines, use calculated display size for BitBlt() operation and exchanged BitBlt() with StretchBlt() because of a serious bug in the WineHQ BitBlt() implementation (in this environment StretchBlt() is ~5us slower than BitBlt() so it doesn't really matter from the speed aspect) - changed function StartDisplay() and StopDisplay(), added special handling for Sacajawea display type - changed function UpdateAnnunciators(), return function immediately if not emulating a Lewis chip - added function GetLcdNumberSaca(), interpret characters of Sacajawea display DISRPL.C - bugfix in function BCDx(), detection for exponent writing was wrong -> on negative exponents sometimes the result format was wrong, on positive exponents sometimes the result itself was wrong - added variable bRplViewAsm to enable showing ASM code instead of hex data - changed function PrintHead(), changed function prototype and changed binary data view for use in disassembler - added function PrintLevel() for writing level depending blanks - added function AssemblyOutput(), ASM code viewer for "RPL Object Viewer" module - changed function RplCreateObjView(), adjusted to new prototype of function PrintHead(), replaced level depending blank drawing by calling function PrintLevel() and added a call to replace the decoded CODE hex string object by a ASM code disassembly DISRPL.H - extern declaration of global variable EMU42.C - changed function UpdateWindowStatus(), added separated enable for Copy and Paste functionality, added Copy Stack enable for the HP14B, HP17B, HP17BII, HP19BII, HP27S and HP32SII - changed function OnPaint(), exchanged BitBlt() with StretchBlt() in display redraw part because of a serious bug in the WineHQ BitBlt() implementation - changed function OnDropFiles(), OnViewCopy(), OnObjectLoad() and OnObjectSave(), added HP32SII user code handling - bugfix in function OnDropFiles() and OnObjectLoad(), readded delay after ON key state change switching calculator on and made ON key hold time variable - changed function OnFileMruOpen(), on success move selected entry to top of MRU table EMU42.DSP - changed to REGISTRY (HKCU/Software/Emu42) saving - added usrprg32.c sources EMU42.H - separated MODELS definition to Sacajawea and Lewis hardware - changed T2CYCLES definition - added defines isModelLewis() and isModelSaca() for detecting the hardware type from the model type - added enum for the emulator hardware platform - changed function UpdateContrast() to function pointer declaration - extern declaration of global variables and function - removed extern declaration of global functions EMU42.RC - changed IDD_SETTINGS, replaced "Ok" with "OK" and removed accelerator keys from "OK" and "Cancel" - changed version info "FileDescription" text - changed version ENGINE.C - added global variable dwSacaCycles - renamed variable dwLewisCyclesRate to dwCyclesRate - changed function WorkerThread(), added initialization for Sacajawea CPU speed FILES.C - added global variable nCurrentHardware - changed function RebuildRomCrc(), added Sacajawea ROM CRC calculation - changed function NewDocument(), added hardware initialization for Sacajawea based calculators - bugfix in function SaveBackup(), a backup of the debugger breakpoint list wasn't created - bugfix in function RestoreBackup(), the debugger breakpoint list wasn't restored so the breakpoints got lost when saving the state file and added preserving debugger open state, this feature was lost as a result of a bugfix in an earlier version - changed function GetOpenFilename() and GetSaveAsFilename(), added Sacajawea based calculators to file list and put HP17B and HP17BII together to one item - changed function DecodeGif(), fixed a GCC type mismatch warning KEYBOARD.C - renamed variable dwLewisCyclesRate to dwCyclesRate - changed function KeyboardEvent(), only the Lewis hardware has the RATE control and made key switch time variable KML.C - increased pAnnunciator array and made variable public - added keywords "Distance", "Zoomxy", "Digit" and "IfMem" to pLexToken[] table - added token TOK_DIGIT to eIsGlobalBlock[] table - added token TOK_IFMEM to eIsBlock[] table - removed function FatalError() - bugfix in function ParseString(), replaced error text - bugfix in function IncludeLines(), removed fatal error message text - bugfix in function ParseLines(), in some cases parsing hadn't stopped with an error inside a block with an unreferenced include file and removed a fatal error message text - bugfix in function ParseBlock(), block argument checking generated wrong error messages in the case of syntax errors - bugfix in function IncludeBlocks(), removed fatal error message text - changed function ParseBlocks(), removed "Invalid block." message text and made some code optimizations calling the function FatalError() - changed function InitGlobal(), added decoder code to detect hardware platform, changed some punctuation and capital letters - changed function InitLcd(), added "Zoomxy" keyword - added function InitDigit(), implementation for token TOK_DIGIT - changed function InitButton(), source code improvement checking the size of button array - changed function RunLine(), added implementation of "IfMem" command - changed function KillKML(), added DestroyAnnunBitmap() and preset of some global variables - bugfix in function ReloadButtons(), global variable bKeyPressed wasn't updated - changed function InitKML(), added initialization of TOK_DIGIT, annunciator bitmap and IO hardware, added dropped files support for the HP32SII KML.H - added TOK_DISTANCE, TOK_ZOOMXY, TOK_DIGIT and TOK_IFMEM definition - extern declaration of global function MOPS.S - renamed variable dwLewisCyclesRate to dwCyclesRate - added function prototypes - added function pointer for IO memory access - added function InitIO() for initializing the IO memory access function pointer - added function ChipResetMaster(), code adjust for Sacajawea hardware - changed function Npeek() and Nread(), changed function call of ReadSlaveIO() to ReadLewisSlaveIO() - changed function Nwrite(), changed function call of WriteSlaveIO() to WriteLewisSlaveIO() - added function ReadSacajaweaIO() and WriteSacajaweaIO(), Sacajawea specific IO functions - renamed function ReadIO() to ReadLewisIO(), WriteIO() to WriteLewisIO(), ReadSlaveIO() to ReadLewisSlaveIO() and WriteSlaveIO() to WriteLewisSlaveIO() - made function ReadLewisIO(), WriteLewisIO(), ReadLewisSlaveIO() and WriteLewisSlaveIO() static MRU.C - changed function MruAdd(), added entry moving to top when the entry is already in the table - added function MruMoveTop(), move MRU entry to top of table RESOURCE.H - reordered some definitions RPL.H - added some HP14B, HP17BII, HP19BII, HP27S and HP32SII RAM entries SETTINGS.C - changed function ReadSettings() and WriteSettings(), added items "SacaCycles", "WakeupDelay" and "KeyMinDelay" in section [Emulator] in the INI-File STACK.C - bugfix in function RPL_GetBcd(), detection for exponent writing was wrong -> on negative exponents sometimes the result format was wrong, on positive exponents from E12 until E14 with 12 digit mantissa setting the result itself was wrong - added helper functions RPL_GetComplex() and RPL_SetComplex() to handle complex number objects - changed function GetRadix(), added HP14B, HP17B, HP17BII, HP19BII, HP27S and HP32SII implementation - added function DoComplex() to handle a complex number object - changed function OnStackCopy(), added HP14B, HP17B, HP17BII, HP19BII and HP27S implementation and added complex number support - bugfix in function OnStackPaste(), readded delay after ON key state change switching calculator on, made ON key hold time variable, added flag to disable automatic clipboard object detection and added complex number support USRPRG32.C - new module for load/save HP32SII user programs Emu42 v1.11 DDESERV.C - bugfix in function DdeCallback(), readded delay after ON key state change, bug introduced in v1.04 and added stack level adjust at XTYP_REQUEST for the case that the calculator is off DEBUGGER.C - added function LoadSymbTable(), loading symbol table defined in INI-File - added function GetMemCurAddr(), get address of cursor in memory window - changed function ViewCodeWnd(), function now returns the line number with the pc, adjusted address to Saturn address area, added label line if address is a known entry and added a check if the 5 nibble sequence on an address should be interpreted as PCO - changed function ViewCodeWnd() and InfoIntr(), adjusted to new prototype of function disassemble() - changed function UpdateCodeWnd(), if pc should shown at first line but the pc is the begin of a PCO, show PCO address as first line instead, added handling for label line - changed function OnKeyF5(), for label line support changed detection of PC line - changed function OnCodeGoAdr(), removed limitation to Saturn address area, limitation now done in function ViewCodeWnd() - added function OnKeyPlusMinus(), +/- key handler for memory window - changed function OnKeyCodeWnd(), added handling for label line and removed limitation going back before address 0 - changed function OnDrawCodeWnd(), added draw style for label line - changed function Debugger(), added initialization and uninitialization of symbol table and bold font, added +/- key handling for memory window, added "RPL Object Viewer" call and added Debugger Settings to the system menu - changed function OnFindOK(), in the case of a search match update also the RPL object viewer window - added functions for "RPL Object Viewer" dialog box - added functions for Debugger Settings handling - changed function EnterAddr(), added decoding a symbolic entry into an address - changed function InfoIntr(), added label line if instruction address is a known entry - changed function OnBrowseLoadMem() and OnBrowseSaveMem(), removed some NULL characters at end of file filter definition string DISASM.C - added variable disassembler_symb to enable symbolic address disassembly - changed function read_nibble(), made function public - changed function append_imm_nibble(), if the immediate data is 5 nibbles long and the decoded data is a known symbolic entry, show the symbolic name instead of the data - added new function append_numaddr(), numeric output of an address - changed function append_addr(), if the address is a known symbolic entry, show the symbolic name instead of the address - bugfix in function append_r_addr(), in some rare conditions the program counter value got larger than 0xFFFFF, if the calculated absolute address is a known symbolic entry show the symbolic name instead of the relative address, in the case of showing the relative address the corresponding absolute address is now printed by this function and not by the function append_pc_comment(), so there's no difference between VIEW_SHORT and VIEW_LONG any more - removed function append_pc_comment(), implementation is obsolete now because absolute address printing is now done in function append_r_addr() - changed function disasm_8() and disassemble(), changed function prototypes by removing the view argument DISPLAY.C - made global variable pbyLcd static - changed function UpdateContrast(), changed function prototype, the contrast value is now calculated inside the function directly from the IO chipset content - changed function CreateLcdBitmap(), adjusted to new prototype of function UpdateContrast() and removed obsolete use of the chipset contrast variable - changed function CreateMainBitmap(), replaced the _ASSERT with the VERIFY macro in some cases - changed function UpdateAnnunciators(), calculate the display contrast value now directly from the IO chipset content - changed function LcdProc(), added critical section for display update is in progress - bugfix in function StopDisplay(), function timeKillEvent() don't stop the display update immediately, so I have to wait until display update finished before I clear the display buffer DISRPL.C - new module for RPL object decoding DISRPL.H - header file for RPL object decoding part EMU42.C - added Critical Section initialization for LCD lock - changed function OnDropFiles() and OnObjectLoad(), adjusted function name GetUserCode() to GetUserCode42() - bugfix in function OnDropFiles() and OnObjectLoad(), readded delay after ON key state change, bug introduced in v1.04 - removed static functions OnStackCopy() and OnStackPaste(), implementation is now in module STACK.C - changed function OnViewCopy(), removed MONOCHROME implementation and assertion for nLcdZoom - changed function OnObjectLoad() and OnObjectSave(), adjusted to new prototype of function GetLoadObjectFilename() and GetSaveObjectFilename(), adjusted function name GetUserCode() to GetUserCode42() and OnSelectProgram() to OnSelectProgram42() - changed function OnObjectLoad(), changed load object warning message - changed function Disasm(), adjusted to new prototype of function disassemble() - changed function WinMain(), added non modal "RPL Object Viewer" dialog box in main message handler - bugfix in function WinMain(), getting the full path name of the current state file failed in the case of an empty name buffer EMU42.DSP - added symbfile.c and disrpl.c sources EMU42.H - added file filter definitions - removed extern declaration of pbyLcd - removed VIEW_SHORT and VIEW_LONG definition - changed function prototypes - extern declaration of global variables and functions EMU42.RC - added dialog IDD_DEBUG_SETTINGS and IDD_RPLVIEW - changed version and copyright ENGINE.C - adjusted to renamed IO.H definitions - changed function WorkerThread(), adjusted to new prototype of function UpdateContrast() and removed obsolete use of the chipset contrast variable FILES.C - changed function GetCutPathName(), removed warning when compiling for x64 architecture - bugfix in function RebuildRomCrc(), a ROM size smaller than 64KB caused a buffer overflow - changed function IsDataPacked(), made a DWORD pointer copy of the VOID pointer argument to avoid type casting, this generates the same code on MSVC6.0 but made it GCC compiler compatible - bugfix in function OpenDocument(), if document reload was refused the function returned no success -> this caused trouble in function OnFileMruOpen() removing the MRU entry of this document - bugfix in function RestoreBackup(), removed workaround for indirect contrast setting in InitKML(), in the case that the initializing of the backup KML failed, the original contrast setting was destroyed; as workaround added a call of function UpdateContrast() - changed function GetOpenFilename(), added file filter for all Emu42 specific filenames which is default, changed filter names, removed some NULL characters at end of file filter definition string and removed model specific file extension selection - changed function GetSaveAsFilename(), changed filter names, removed some NULL characters at end of file filter definition string and use small size characters for file extensions - changed function GetLoadObjectFilename() and GetSaveObjectFilename(), changed function prototype, added arguments for the file filter and the default extension - bugfix in function SaveObject(), stack level 1 worked only for the case that the calculator was on, if the calculator is off the relevant object is at stack level 2 - added function DecodeBmp(), contain the BMP image file decoder prior located in function LoadBitmapFile() and added check of bitmap file size - added functions ReadGifByte(), ReadGifWord() and DecodeGif() for decoding GIF image files - bugfix in function LoadBitmapFile(), check for a valid file handle was missing, moved BMP image file decoder to function DecodeBmp() and added GIF image file support IO.H - renamed definitions TIMER1_CTL to TIMERCTL_1 and TIMER2_CTL to TIMERCTL_2 - added Sacajawea chip specific definitions KEYBOARD.C - adjusted to renamed IO.H definitions KEYMACRO.C - changed function OnToolMacroNew() and OnToolMacroPlay(), removed some NULL characters at end of file filter definition string - changed function MacroProc(), removed warning when compiling for x64 architecture KML.C - changed szText variable qualifier from LPTSTR to LPCTSTR - changed function CreateKmlList(), adjusted to new prototype of function GetStringParam() - added function UpdateScriptList(), filling the KML script combo box with all found script titles and select the current used one - changed function ChooseKMLProc(), call function UpdateScriptList() to update the KML script combo box now - bugfix in function FatalError(), modifying the script buffer content isn't allowed - changed function InitLex(), IncludeLines() and IncludeBlocks(), adjusted to constant pointer of variable szText - changed function GetStringOf(), changed for better reading - changed function SkipWhite(), optimized and better readable implementation - bugfix in function ParseToken(), optimized string delimiter searching among other optimizations, removed increment of line counter on LF character to correct the line numbering on UNIX files with LF instead of CR LF at line end -> line counter increment is done in function SkipWhite() on decoding next keyword in function Lex() and modifying the script buffer content for debug output isn't allowed - changed function ParseLine(), replaced main loop "goto" construct - changed function GetStringParam(), changed return variable qualifier from LPTSTR to LPCTSTR LOWBAT.C - bugfix in function StartBatMeasure(), creating the battery watching thread wasn't Win9x compatible MOPS.C - adjusted to renamed IO.H definitions - changed function ChipResetMaster() and WriteIO() adjusted to new prototype of function UpdateContrast() and removed obsolete use of the chipset contrast variable - changed function WriteIO(), prepared implementation of the STL bit in the LEDOUT (0x30D) register OPCODES.C - adjusted to renamed IO.H definitions PCH.H - added INVALID_SET_FILE_POINTER definition RESOURCE.H - added definitions for Debugger Settings and RPL object viewer handling RPL.C - changed function RPL28_SkipOb(), RPL28_ObjectSize(), RPL42_SkipOb() and RPL42_ObjectSize(), adjusted to renamed definitions RPL.H - renamed definitions O_DOEREAL to O_DOEREL, D_DOEREAL to D_DOEREL and D_DOLNKARRY to D_DOHSTR - added some HP32SII RAM entries SETTINGS.C - changed function ReadSettings() and WriteSettings(), added item "Symbolic" in section [Disassembler] in the INI-File STACK.C - renamed function StackCopy() to OnStackCopy() and StackPaste() to OnStackPaste() - changed function OnStackCopy(), changed object detection and added HP32SII implementation - bugfix in function OnStackPaste(), readded delay after ON key state change, bug introduced in v1.04 SYMBFILE.C - new module for loading external symbols from a Saturn3 linker file TIMER.C - adjusted to renamed IO.H definitions TTYPES.H - removed contrast variable from CHIPSET_M structure USRPRG42.C - renamed function GetUserCode() to GetUserCode42() and OnSelectProgram() to OnSelectProgram42() - changed function PutUserCode() and SelectProgram42(), removed warning when compiling for x64 architecture - changed function SelectProgram42(), adjusted to new prototype of function GetSaveObjectFilename() Emu42 v1.10 DEBUGGER.C - changed function SetMappingMenu(), added control of memory menu items ID_DEBUG_MEM_LOAD and ID_DEBUG_MEM_SAVE - changed function OnLButtonUp(), NewValue(), EnterAddr() and EnterBreakpoint(), replaced WM_GETTEXT message call with function GetWindowText() - changed function Debugger(), added calls of Load/Save Memory Data handling functions - added functions for Load/Save Memory Data handling DISASM.C - bugfix in function disassemble(), the NOP5 opcode returned wrong address for next instruction (GOTO opcode skipping one nibble) DISPLAY.C - bugfix in function StopDisplay(), the assumption that WM_PAINT always redraw the complete display area was wrong; because calculating the used display region is quite difficult the complete emulator windows will be redrawn EMU42.C - bugfix in function SaveChanges(), function GetSaveAsFilename() returns a boolean and not a button id and removed call of last document saving - changed function OnPaint(), removed mixture of BitBlt() calls with argument hPaintDC and hWindowDC inside critical section - bugfix in function OnFileNew(), function SaveBackup() was called when emulator engine was running -> this may caused inconsistent backup data - changed function OnFileOpen(), added MruAdd() call - added new function OnFileMruOpen(), command handler for MRU menu selections - bugfix in function OnFileSaveAs(), function GetSaveAsFilename() returns a boolean and not a button id, minor optimizations, removed call of last document saving and added MruAdd() call - changed function OnFileClose(), removed call of DisableDebugger() because it's now done in function ResetDocument() - changed function OnObjectSave(), minor optimization - changed function OnTopics(), minor optimization by replacing ShellExecuteEx() with ShellExecute() - changed function MainWndProc(), added MRU message handler - changed function WinMain(), added StartupBackup handling, added MRU handling and added last document saving at end of program EMU42.DSP - added mru.c sources EMU42.H - extern declaration of global variables and functions EMU42.RC - added dialogs IDD_DEBUG_MEMSAVE and IDD_DEBUG_MEMLOAD - added Menuitem Files "Recent Files..." - added "Load Memory Data..." and "Save Memory Data..." menu entries in debugger "Memory" context menu - changed version and copyright FILES.C - changed function GetCutPathName(), better support for UNC names - changed function ResetDocument(), added call of DisableDebugger() - changed function SaveBackup(), added assertion for checking emulator engine state - changed function GetLoadObjectFilename() and GetSaveObjectFilename(), changed default file filter from *.* to *.HP LOWBAT.C - changed function GetBatteryState(), added possibility to disable low battery detection MOPS.C - bugfix in function MapNCE(), if MMU controller configuration requests more ROM data than current ROM file size, memory pointers outside the ROM data buffer were generated -> this may cause a memory access violation later MRU.C - new module for MRU routines OPCODES.C - changed function o83n(), o88n() and o89n(), speed optimization OPS.H - changed function Tbit0(), Tbit1(), Ta(), Tb(), Tae() and Tbe(), speed optimization RESOURCE.H - added definition for MRU handling - added definitions for Load/Save Memory Data handling SETTINGS.C - added function DelReg() for deleting a registry item - changed function ReadSettings() and WriteSettings(), added item "StartupBackup" in section [Files] and item "Disable" in section [LowBat] in the INI-File - added functions ReadSettingsString(), WriteSettingsString(), ReadSettingsInt(), WriteSettingsInt() and DelSettingsKey(), universal settings interface used for MRU data handling TIMER.C - bugfix in function TimeProc(), under certain conditions this function is called with a zero uEventId and this may clash with a reset timer event identifier Emu42 v1.09 DDESERV.C - changed function DdeCallback(), case XTYP_POKE and XTYP_REQUEST now decode the item name for the stack level and changed to new BINARYHEADER28S definition DEBUGGER.C - added new function OnSetCursor(), message handler for "Activation Follows Mouse" implementation - changed function Debugger(), added "Always On Top" and "Activation Follows Mouse" handling - bugfix in function OnToolDebug(), argument for owner window handle was wrong, but over the years I has liked this debugger dialog behavior so I put in the correct argument for this behavior DISASM.C - disabled automatic inline code - fixed source file formatting error - changed function append_field(), defined as inline code - changed function append_r_addr(), code optimization DISPLAY.C - changed function ResizeWindow(), added "Always on top" feature EMU42.C - moved CF_HPOBJ definition to EMU42.H - removed global variable bClassicCursor - added function ForceForegroundWindow() forcing window to foreground - changed function SettingsProc(), added "Always On Top" and "Activation Follows Mouse" handling - changed function OnMouseMove(), added "Activation follows mouse" feature - added function OnNcMouseMove() for "Activation follows mouse" feature in non client area - changed function MainWndProc(), added WM_NCMOUSEMOVE message handler - bugfix in function WinMain(), moved additional DDE stuff just behind DDE server initialization, adjusted length for cut filenames preventing negative values and call ShowWindow() before asking for a new document preventing a KML script dialog without a parent window EMU42.H - added CF_HPOBJ definition from EMU42.C - renamed define BINARYHEADER28 into BINARYHEADER28S and the definition to "HPHP28-S" to separate it from Emu28 - removed declaration of bClassicCursor - changed function prototypes - extern declaration of global variables and functions EMU42.RC - added item "Always On Top" and "Activation Follows Mouse" in settings dialog - cosmetic changes in dialog IDD_CHOOSEKML to improve WinXP style - changed version and copyright FILES.C - added global variable saving the patched ROM checksum - changed function SetWindowPathTitle(), adjusted length for cut filename - changed function CrcRom(), change function prototype, added unpacked data check and made function public - bugfix in function CrcRom(), hadn't detected address content changes at addresses ending with a 0x2 and 0x3 because only lower 16 bit of checksum was used -> modified function cause a warmstart because of new checksum - changed function UnmapRom(), added reset of ROM checksum variable - new function IsDataPacked() for unpacked data check - changed function OpenDocument(), use ROM checksum made in InitKML() and added checks for packed memory data - changed function SaveDocument(), adjusted to new prototype of CrcRom() - changed function WriteStack(), now checking the complete binary header "HPHP28-S" to distinguish them from Emu28 object files, added stack level argument, adjusted to new prototype of function RPL28_ObjectSize() and added new error state for bad objects - changed function LoadObject(), adjusted call of WriteStack() to new function prototype and added error message for bad objects - changed function SaveObject(), changed to new BINARYHEADER28S definition KML.C - bugfix in function KillKML(), class member variable wasn't reset - bugfix in function TransparentCircle(), there was no radius value check for preventing division by 0 and color low adjust value wasn't reached because of wrong color offset divisor -> adjusted LOWADJ definition to get similar output to buggy earlier version - changed function MouseMovesTo(), removed bClassicCursor switch - changed function InitKML(), added full check for unpacked ROM image and build checksum of patched ROM OPCODES.C - bugfix in function o807(), Chipset.in register must be refreshed before checking for a pressed key PCH.H - added include stddef.h - restricted DWORD_PTR type definition for MSVC6.0 and earlier RESOURCE.H - added some definitions RPL.C - bugfix in RPL28_ObjectSize() and RPL42_ObjectSize(), changed function prototype for adding buffer size parameter preventing reading outside buffer area when decoding bad objects - changed function RPL_ObjectSize(), adjusted to new prototypes of function RPL28_ObjectSize() and RPL42_ObjectSize() - added function RPL_Depth() returning stack depth - changed function RPL_Pick(), added check of stack depth - changed function RPL_Push(), new implementation with stack level argument RPL.H - added definition of O_EDITLINE SETTINGS.C - changed function ReadSettings() and WriteSettings(), added item "ActFollowsMouse" and "AlwaysOnTop" in section [Emulator], removed item "ClassicCursor" from [KML] section in the INI-File STACK.C - adjusted calls of RPL_Push() to new function prototype TIMER.C - changed function CalcT2(), in the case of a pending timer2 interrupt return always the timer2 value 0xFFFFFFFF Emu42 v1.08 DDESERV.C - removed warnings when compiling under VS2005 DEBUGGER.C - removed warnings when compiling under VS2005 DISASM.C - bugfix in function disasm_8(), the ?HS=0 n opcode showed always as ?=0 opcode DISPLAY.C - bugfix in function StopDisplay(), in most times display wasn't cleared in calculator off state (bug introduced in v1.07) EMU42.C - removed warnings when compiling under VS2005 - changed function OnCreate() and OnDestroy(), added Critical Section initialization - changed function OnFileClose(), removed call of KillKML() because will be done in ResetDocument() - bugfix in function OnViewScript(), removed error message because it's wrong when script is ok, but log report was leaved with Cancel button, also if clause of error message box was never reached because error message box had no Cancel button - changed function OnViewScript(), added call of SetWindowPathTitle() to adjust length of window title - changed function WinMain(), simplified document loading at startup and replaced full filename title with length cut filename EMU42.DSP - added lowbat.c sources EMU42.H - extern declaration of global variable and functions EMU42.RC - changed version - replaced CREATEPROCESS_MANIFEST_RESOURCE_ID definition in manifest declaration by 1 ENGINE.C - changed function WorkerThread(), added control of battery measurement thread EXTERNAL.C - changed function BeepWave(), removed VS2005 warning - changed function BeepWin9x(), disabled implementation for IA64 architecture FETCH.C - changed function EvalOpcode(), included assertion for detecting access to packed memory data FILES.C - moved function WriteStack() inside file - added new function GetCutPathName(), creating a length cut filename - added new function SetWindowPathTitle(), replacement for calling SetWindowTitle() for getting length cut filenames as title - changed function PatchRom(), removed VS2005 warning - changed function MapRom(), removed some useless variable settings and optimized ROM unpacking - changed function OpenDocument(), SaveDocumentAs() and RestoreBackup(), replaced call of function SetWindowTitle() with SetWindowPathTitle() - changed function GetOpenFilename(), GetSaveAsFilename(), GetLoadObjectFilename() and GetSaveObjectFilename(), moved storage place of local file buffer from heap to stack KEYBOARD.C - bugfix in function ScanKeyboard(), if keyboard reading wasn't active a released ON key wasn't cleared in the "in" register KEYMACRO.C - removed warnings when compiling under VS2005 - changed function OnToolMacroNew(), minor optimization writing macro file header KML.C - removed warnings when compiling under VS2005 - added keyword "Menubar" to pLexToken[] table -> scripts using this keyword are parsed with a warning but not with a fatal error - bugfix in function CreateKmlList(), fixed possible call of API function lstrcmpi() with NULL pointer at Hardware detection and select only KML files with a valid Model statement - changed function DisplayChooseKml(), changed return type of dialog box - bugfix in function Lex(), EOF without LF at end of non empty line wasn't detected as EOL - changed function ParseLine(), change typecast of szLexString from DWORD to DWORD_PTR KML.H - added TOK_MENUBAR definition - changed variable type of nParam[] element of KmlLine structure because element is also used as pointer LOWBAT.C - new module with battery measurement MOPS.C - added function ChipResetMaster(), new function for reset master chip (derivated from function CpuReset()) - added function ChipResetSlave(), new function for reset slave chip (derivated from function CpuReset()) - bugfix in function CpuReset(), display update wasn't stopped and moved implementation to functions ChipResetMaster() and ChipResetSlave() for complete reset - added new function IOBit() for thread safe setting of IO bits - bugfix in function ReadIO(), added GRAM, VLBI and LBI bit implementation in the LPD (0x308) register - bugfix in function ReadSlaveIO(), the VLBI and LBI bit are always off in the slave chip and added GRAM implementation in the LPD (0x308) register - changed function WriteIO(), new implementation of display sync error for the DON bit in the DSPCTL (0x303) register because of modified CpuReset() function - bugfix in function WriteIO() and WriteSlaveIO(), added GRAM, VLBI and LBI bit implementation in the LPD (0x308) register and the EGRAM bit implementation in the LPE (0x309) register - bugfix in function WriteSlaveIO(), a DON bit change in the DSPCTL (0x303) register hadn't affect on the annunciators of Clamshell calculators PCH.H - added _CRT_SECURE_NO_DEPRECATE definition - added DWORD_PTR type definition RESOURCE.H - removed CREATEPROCESS_MANIFEST_RESOURCE_ID and RT_MANIFEST definition STACK.C - changed function RPL_SetBcd(), removed compiler warning - bugfix in function OnStackPaste(), case "any other format" must be treated as string and not as binary object TIMER.C - removed warnings when compiling under VS2005 - bugfix in function StopTimers(), on stopping master timer slave timers wasn't stopped automatically Emu42 v1.07 DISPLAY.C - changed function CreateLcdBitmap(), WritePixelQuad() and WritePixelRect(), added Zoom factor 3 handling - changed function StopDisplay(), removed display clear EMU42.H - added definition with valid calculator models - added macro with model validation code EMU42.RC - changed IDD_KMLLOG, replaced "Always" text with "Show Script compilation result next time" - changed version FILES.C - bugfix in function NewDocument(), the backup now behave like with function OpenDocument() -> the backup now contain the emulator state before the new session and not the new session itself - bugfix in function OpenDocument(), after reading CPU state, port pointers must immediately be deleted because on error condition function ResetDocument() tries to free this memory; added check for valid calculator model - bugfix in function RestoreBackup(), window title wasn't updated - bugfix in function CreateBIPalette(), for 16 and 32 bitcount bitmaps no logical palette was created KML.C - changed table szLexDelim[], removed first element - added new table eIsGlobalBlock[] with valid block tokens - added new function IsGlobalBlock(), checking if token inside eIsGlobalBlock[] table - changed function Lex(), added assertion for mode checking - changed function ParseLines(), added syntax checking for command tokens and removed "Open block." message - changed function ParseBlocks(), added syntax checking for block tokens - changed function InitLcd(), TOK_ZOOM argument wasn't checked, on illegal zoom values use 1 as default now - bugfix in function InitButton(), nested scancode block commands hadn't handled correctly - bugfix in function LoadKMLGlobal(), keyword "Global" had only been detected as first command in KML script - changed function InitKML(), changed checking for valid Model argument and changed the corresponding error message KML.H - adjusted definitions of LEX_BLOCK, LEX_COMMAND and LEX_PARAM to modified table szLexDelim[] Emu42 v1.06 DDESERV.C - bugfix in function DdeCallback(), used wrong return in XTYP_POKE case for calculator models without stack DEBUGGER.C - changed function UpdateMemoryWnd(), added follow dispatcher - new function OnMemFollow() to handle follow menu entries - changed function OnDblClick() and OnKeyUpDown(), replaced all function calls of UpdateMemoryWnd() with ViewMemWnd() because of the modified behavior of UpdateMemoryWnd() - changed function Debugger(), added "Follow" menu entry initialization in WM_INITDIALOG and menu commands handler in WM_COMMAND section DISPLAY.C - bugfix in function UpdateContrast(), used background Color 0 in calculator off state even if Color 32 was defined - bugfix in function CreateLcdBitmap(), DIB section shouldn't created from the memory DC EMU42.C - changed function SettingsProc(), added sound handling - changed function SaveChanges(), default button for confirming the "Do you want to save changes ?" message depends now on the "SaveDefaultConfirm" INI-File setting (1=yes / 0=no button) EMU42.H - extern declaration of global variable EMU42.RC - added "Sound" group in Settings dialog - added "Follow" menu entries in debugger "Memory" context menu - changed version and copyright ENGINE.C - bugfix in function WorkerThread(), when changing into SM_RUN state display contrast must also be restored FILES.C - bugfix in function LoadBitmapFile(), function blocked loading bitmap when ROM file was missing KML.C - added keywords "Topbar" and "Vga" to pLexToken[] table -> scripts using these keywords now are parsed with warnings and not quit with a fatal error any more - bugfix in function SkipWhite(), skipping remark text hadn't stop at string end - bugfix in function ParseBlocks(), stopped script parsing without error at unknown block token - bugfix in function SkipLines(), TOK_END was handled wrong -> this caused a RunKey end if condition of TOK_IFPRESSED or TOK_IFFLAG was false and there was no TOK_ELSE inside this level - bugfix in function KillKML(), ROM type wasn't reset to the preset value at the end KML.H - added TOK_TOPBAR and TOK_VGA definition RESOURCE.H - added several definitions RPL.C - added new function RPL28_GarbageCol() for doing a garbage collection - changed function RPL_CreateTemp(), added garbage collection in HP28S section on low memory condition RPL.H - added O_GARBAGECOL definition SETTINGS.C - changed function ReadSettings() and WriteSettings(), added item "SaveDefaultConfirm" in section [Files] in the INI-File TIMER.C - changed function CheckT1() and CheckT2(), minor optimization in checking if INT or WAKE bit is set Emu42 v1.05 DISPLAY.C - bugfix in function CreateMainBitmap(), in error case hMainDC variable wasn't cleared EMU42.H - extern declaration of global variables EMU42.RC - changed version EXTERNAL.C - added function BeepWave(), beeper function using sound card - added function BeepWin9x(), PC speaker function for working on Win9x - added function Beeper(), helper function calling OS dependent beeper implementation or wave sound - changed function External0() and External1(), removed range checking of duration and call the new function Beeper instead of Beep() - bugfix in function External1(), got DWORD overflow in calculation of RATE dependent frequency and duration values KML.C - bugfix in function InitKML(), changed log message for no "Model" definition found and a missing "Bitmap" definition wasn't detected PCH.H - added include conio.h SETTINGS.C - changed function ReadSettings() and WriteSettings(), added item "WaveBeep" and "WaveVolume" in section [Emulator] in the INI-File TIMER.C - bugfix in function SetT1(), fixed unsynchronized access to timer1 value, stop timer1 only if running and restart timer1 only when timer2 is running Emu42 v1.04 DDESERV.C - changed function DdeCallback(), removed delays after ON key state change DISPLAY.C - bugfix in function CreateLcdBitmap(), set UpdateDisplayMem function pointer with wrong referenced function EMU42.C - changed function UpdateWindowStatus(), enabled stack copy/paste for the HP42S - changed function OnStackCopy() and OnStackPaste(), moved function body to STACK.C - changed function OnDropFiles() and OnObjectLoad(), removed delays after ON key state change - bugfix in function WinMain(), szCurrentKml wasn't initialized - changed function WinMain(), added accelerator key access for menus EMU42.DSP - added rpl.h and stack.c sources EMU42.H - extern declaration of global functions EMU42.RC - changed menu text "Copy String" to "Copy Stack" and menu text "Paste String" to "Paste Stack" - changed menu text order from "Copy Stack/Copy Screen/Paste Stack" to "Copy Screen/Copy Stack/Paste Stack" - added accelerator resource - changed version FILES.C - changed function WriteStack(), minor optimization when saving as string - changed function PatchRom(), changed ASCII string handling from BYTE to CHAR data type - bugfix in function OpenDocument(), check for empty KML file name was wrong, so the error handler of the following InitKML() was always called in this case - changed function LoadObject(), file access is now shared KML.C - changed variable qualifier of eIsBlock[] table and removed TOK_NONE item from it - bugfix, global variables pKml and pKmlList hadn't be initialized - removed usage of global variables bKmlLogOkEnabled and nKmlFiles - changed function AddToLog(), changed argument qualifier and minor code optimization - changed function PrintfToLog(), use a local buffer instead of the heap for the output buffer of the wvsprintf() function, this helps to reduce fragmentation of the heap - changed function KMLLogProc(), minor code optimization and removed use of global variable bKmlLogOkEnabled and windows redraw in the WM_INITDIALOG case - changed function DisplayKMLLog(), removed use of global variable bKmlLogOkEnabled and transfer state of bOkEnabled over the lParam argument to the dialog box procedure - bugfix in function CreateKmlList(), fixed a memory leak in the case of no title - changed function ChooseKMLProc(), minor code optimization - changed function IsBlock(), minor code optimization - bugfix in function ParseString(), fixed memory leak in error case and optimized implementation - changed function IncludeLines(), IncludeBlocks(), LoadKMLGlobal() and InitKML(), file access is now shared OPS.H - bugfix in function Nsub() and Nrsub(), in some situations wrong results in dec mode with illegal decimal number entry as 2nd operator - changed function Nsrb(), speed optimization RPL.C - moved HP28S RPL constants to file RPL.H - changed function RPL_SkipOb() and RPL_ObjectSize(), prepared for HP42S implementation - changed function RPL_CreateTemp(), added HP42S implementation - added function RPL_PushX(), push object into HP42S x-register RPL.H - new module with memory addresses and RPL constants STACK.C - new module with stack manipulation parts of the HP28S, prior located in EMU42.C, and manipulation parts for the HP42S x-register - the HP28S can now also copy real numbers from and to the clipboard - changed function StackPaste(), removed delays after ON key state change USRPRG42.C - moved HP42S RPL constants to file RPL.H - bugfix in function SelectProgram(), hadn't checked for selected items in the IDOK case so it was possible to write an empty user code file Emu42 v1.03 CHECKBOX.BMP - fixed one pixel with wrong color DEBUGGER.C - bugfix in function Debugger(), used function to set icon which hasn't worked properly under WinXP DISPLAY.C - removed remainders of DEBUG_DISPLAY stuff EMU42.C - changed function declaration of function OnTopics() EMU42.RC - changed "Always" checkbox in "KML Script Compilation Result" dialog from a pushlike to normal one for better readability under WinXP style - changed version and copyright ENGINE.C - bugfix in function AdjustSpeed(), on large operations the workaround condition for Win2k was detected and the following synchronizing failed because the CPU didn't got the free running cycles for the waited time FILES.C - bugfix in function OpenDocument(), reload KML button state from last document close - changed function DibNumColors() and CreateBIPalette(), changed argument qualifier KML.C - added function ReloadButtons(), update internal button state from chip keyboard matrix content KML.H - added ReloadButtons() function prototype TIMER.C - bugfix in function RescheduleT2(), better accuracy on conversation of timer2 ticks into multimedia timer ms - changed function StartTimers(), added calculation of maximum timer2 ticks that can be handled by one timer event - changed function StartTimers() and StopTimers(), changed multimedia timer to best possible timer resolution instead of risking to fail with 1 ms resolution preset Emu42 v1.02 EMU42.RC - changed version USRPRG42.C - changed function PrevGlobal(), minor optimization - bugfix in function Catalog(), a FOCAL program begins not at the global label, it begins behind the global end of the prior program - bugfix in function GetUserCode(), was only able to load FOCAL programs beginning with a global label - changed function GetUserCode(), added FOCAL program packing Emu42 v1.01 DISPLAY.C - changed function UpdateContrast(), added UpdateAnnunciators() call to adjust annunciator color on display contrast change - changed function LcdProc(), removed UpdateAnnunciators() call to save execution time - changed function StartDisplay(), added UpdateAnnunciators() call to switch on every set annunciator EMU42.C - changed function UpdateWindowStatus(), added macro specify menu control - changed function CopyItemsToClipboard(), simplified implementation in UNICODE mode by saving the data in the CF_UNICODETEXT format - added function OnTopics() to call help file - changed function OnLButtonDown(), OnLButtonUp(), OnMouseMove(), OnKeyDown() and OnKeyUp(), disable function handling when in macro play mode - changed function MainWndProc(), added some macro and help command handler functions EMU42.DSP - added keymacro.c sources EMU42.H - extern declaration of global variables and functions EMU42.RC - added Menuitem Tools "Macro..." - added Menuitem Help "Help Topics" in main menu - changed version ENGINE.C - changed function WorkerThread(), close running keyboard macros when switching into invalid state KEYBOARD.C - changed function KeyboardEvent(), added call to key recording function KeyMacroRecord() - bugfix in function KeyboardEvent(), prevent buffer overflow with too big out codes on Chipset.Keyboard_Row array KEYMACRO.C - new module supporting keyboard macro functions KML.C - added function PlayKey(), handle button with OutIn code KML.H - added PlayKey() function prototype MOPS.C - bugfix in function WriteIO() and WriteSlaveIO(), writing to timer2 failed if first writing address was before the timer2 address area - changed function WriteIO() and WriteSlaveIO(), update annunciators now here on every access to the annunciator registers PCH.H - added VERIFY macro RESOURCE.H - added several definitions SETTINGS.C - changed function ReadSettings() and WriteSettings(), added section [Macro] in INI-File Emu42 v1.00 - first public version (c) by Christoph Gießelink, c dot giesselink at gmx dot de