/* * Emu48.h * * This file is part of Emu48 * * Copyright (C) 1995 Sebastien Carlier * */ #include "types.h" #define HARDWARE "Yorke" // emulator hardware #define MODELS "6AEGSX" // valid calculator models #define ARRAYSIZEOF(a) (sizeof(a) / sizeof(a[0])) // cards status #define PORT1_PRESENT ((cCurrentRomType=='S')?P1C:P2C) #define PORT1_WRITE ((cCurrentRomType=='S')?P1W:P2W) #define PORT2_PRESENT ((cCurrentRomType=='S')?P2C:P1C) #define PORT2_WRITE ((cCurrentRomType=='S')?P2W:P1W) #define BINARYHEADER48 "HPHP48-W" #define BINARYHEADER49 "HPHP49-W" // CPU cycles in 16384 Hz time frame #define T2CYCLES ((cCurrentRomType=='S')?dwSXCycles:dwGXCycles) #define SM_RUN 0 // states of cpu emulation thread #define SM_INVALID 1 #define SM_RETURN 2 #define SM_SLEEP 3 #define S_ERR_NO 0 // stack errorcodes #define S_ERR_BINARY 1 #define S_ERR_ASCII 2 #define NO_SERIAL "disabled" // port not open #define HP_MNEMONICS FALSE // disassembler mnenomics mode #define CLASS_MNEMONICS TRUE #define MEM_MAP 0 // memory module definition #define MEM_ROM 1 #define MEM_RAM 2 #define MEM_PORT1 3 #define MEM_PORT2 4 #define VIEW_SHORT FALSE // view of disassembler output #define VIEW_LONG TRUE #define MACRO_OFF 0 // macro recorder off #define MACRO_NEW 1 #define MACRO_PLAY 2 #define DISP_POINTER 0x01 // defines for display area #define DISP_MAIN 0x02 #define DISP_MENUE 0x04 #define DISP_ANNUN 0x08 // macro to check for valid calculator model #define isModelValid(m) (m != 0 && strchr(MODELS,m) != NULL) // values for mapping area enum MMUMAP { M_IO, M_ROM, M_RAM, M_P1, M_P2, M_BS }; // Emu48.c extern HPALETTE hPalette; extern HPALETTE hOldPalette; extern HANDLE hEventShutdn; extern LPTSTR szAppName; extern LPTSTR szTopic; extern LPTSTR szTitle; extern CRITICAL_SECTION csGDILock; extern CRITICAL_SECTION csLcdLock; extern CRITICAL_SECTION csKeyLock; extern CRITICAL_SECTION csIOLock; extern CRITICAL_SECTION csT1Lock; extern CRITICAL_SECTION csT2Lock; extern CRITICAL_SECTION csTxdLock; extern CRITICAL_SECTION csRecvLock; extern CRITICAL_SECTION csSlowLock; extern INT nArgc; extern LPCTSTR *ppArgv; extern LARGE_INTEGER lFreq; extern LARGE_INTEGER lAppStart; extern DWORD idDdeInst; extern UINT uCF_HpObj; extern HANDLE hHeap; extern HINSTANCE hApp; extern HWND hWnd; extern HWND hDlgDebug; extern HWND hDlgFind; extern HWND hDlgProfile; extern HDC hWindowDC; extern HCURSOR hCursorArrow; extern HCURSOR hCursorHand; extern BOOL bClassicCursor; extern BOOL bAutoSave; extern BOOL bAutoSaveOnExit; extern BOOL bSaveDefConfirm; extern BOOL bAlwaysDisplayLog; extern BOOL bLoadObjectWarning; extern HANDLE hThread; extern DWORD lThreadId; extern VOID SetWindowTitle(LPCTSTR szString); extern VOID CopyItemsToClipboard(HWND hWnd); extern VOID UpdateWindowStatus(VOID); // Settings.c extern VOID ReadSettings(VOID); extern VOID WriteSettings(VOID); extern VOID ReadLastDocument(LPTSTR szFileName, DWORD nSize); extern VOID WriteLastDocument(LPCTSTR szFilename); // Display.c extern BOOL bGrayscale; extern UINT nBackgroundX; extern UINT nBackgroundY; extern UINT nBackgroundW; extern UINT nBackgroundH; extern UINT nLcdX; extern UINT nLcdY; extern UINT nLcdZoom; extern LPBYTE pbyLcd; extern HDC hLcdDC; extern HDC hMainDC; extern BYTE (*GetLineCounter)(VOID); extern VOID (*StartDisplay)(BYTE byInitial); extern VOID (*StopDisplay)(VOID); extern VOID UpdateContrast(BYTE byContrast); extern VOID SetLcdColor(UINT nId, UINT nRed, UINT nGreen, UINT nBlue); extern VOID SetLcdMode(BOOL bMode); extern VOID CreateLcdBitmap(VOID); extern VOID DestroyLcdBitmap(VOID); extern BOOL CreateMainBitmap(LPCTSTR szFilename); extern VOID DestroyMainBitmap(VOID); extern VOID UpdateDisplayPointers(VOID); extern VOID UpdateMainDisplay(VOID); extern VOID UpdateMenuDisplay(VOID); extern VOID WriteToMainDisplay(LPBYTE a, DWORD d, UINT s); extern VOID WriteToMenuDisplay(LPBYTE a, DWORD d, UINT s); extern VOID UpdateAnnunciators(VOID); extern VOID ResizeWindow(VOID); // Engine.c extern BOOL bInterrupt; extern UINT nState; extern UINT nNextState; extern BOOL bRealSpeed; extern BOOL bKeySlow; extern BOOL bCommInit; extern CHIPSET Chipset; extern TCHAR szSerialWire[16]; extern TCHAR szSerialIr[16]; extern DWORD dwSXCycles; extern DWORD dwGXCycles; extern HANDLE hEventDebug; extern BOOL bDbgAutoStateCtrl; extern INT nDbgState; extern BOOL bDbgNOP3; extern BOOL bDbgCode; extern BOOL bDbgRPL; extern BOOL bDbgSkipInt; extern DWORD dwDbgStopPC; extern DWORD dwDbgRplPC; extern DWORD dwDbgRstkp; extern DWORD dwDbgRstk; extern DWORD *pdwInstrArray; extern WORD wInstrSize; extern WORD wInstrWp; extern WORD wInstrRp; extern VOID SuspendDebugger(VOID); extern VOID ResumeDebugger(VOID); extern VOID CheckSerial(VOID); extern VOID AdjKeySpeed(VOID); extern VOID SetSpeed(BOOL bAdjust); extern VOID UpdateKdnBit(VOID); extern BOOL WaitForSleepState(VOID); extern UINT SwitchToState(UINT nNewState); extern UINT WorkerThread(LPVOID pParam); // Fetch.c extern VOID EvalOpcode(LPBYTE I); // Files.c extern TCHAR szEmuDirectory[MAX_PATH]; extern TCHAR szCurrentDirectory[MAX_PATH]; extern TCHAR szCurrentKml[MAX_PATH]; extern TCHAR szBackupKml[MAX_PATH]; extern TCHAR szCurrentFilename[MAX_PATH]; extern TCHAR szBackupFilename[MAX_PATH]; extern TCHAR szBufferFilename[MAX_PATH]; extern TCHAR szPort2Filename[MAX_PATH]; extern LPBYTE pbyRom; extern DWORD dwRomSize; extern BYTE cCurrentRomType; extern UINT nCurrentClass; extern BOOL bRomWriteable; extern LPBYTE pbyPort2; extern BOOL bPort2Writeable; extern BOOL bPort2IsShared; extern DWORD dwPort2Size; extern DWORD dwPort2Mask; extern BOOL bBackup; extern VOID SetWindowLocation(HWND hWnd,INT nPosX,INT nPosY); extern DWORD GetCutPathName(LPCTSTR szFileName,LPTSTR szBuffer,DWORD dwBufferLength,INT nCutLength); extern VOID SetWindowPathTitle(LPCTSTR szFileName); extern VOID UpdatePatches(BOOL bPatch); extern BOOL PatchRom(LPCTSTR szFilename); extern BOOL MapRom(LPCTSTR szFilename); extern VOID UnmapRom(VOID); extern WORD CrcPort2(VOID); extern BOOL MapPort2(LPCTSTR szFilename); extern VOID UnmapPort2(VOID); extern VOID ResetDocument(VOID); extern BOOL NewDocument(VOID); extern BOOL OpenDocument(LPCTSTR szFilename); extern BOOL SaveDocument(VOID); extern BOOL SaveDocumentAs(LPCTSTR szFilename); extern BOOL SaveBackup(VOID); extern BOOL RestoreBackup(VOID); extern BOOL ResetBackup(VOID); extern BOOL GetOpenFilename(VOID); extern BOOL GetSaveAsFilename(VOID); extern BOOL GetLoadObjectFilename(VOID); extern BOOL GetSaveObjectFilename(VOID); extern WORD WriteStack(LPBYTE lpBuf,DWORD dwSize); extern BOOL LoadObject(LPCTSTR szFilename); extern BOOL SaveObject(LPCTSTR szFilename); extern HBITMAP LoadBitmapFile(LPCTSTR szFilename); // Timer.c extern VOID SetHP48Time(VOID); extern VOID StartTimers(VOID); extern VOID StopTimers(VOID); extern DWORD ReadT2(VOID); extern VOID SetT2(DWORD dwValue); extern BYTE ReadT1(VOID); extern VOID SetT1(BYTE byValue); // MOps.c extern BOOL bFlashRomArray; extern BYTE disp; extern LPBYTE RMap[256]; extern LPBYTE WMap[256]; extern VOID Map(BYTE a, BYTE b); extern VOID RomSwitch(DWORD adr); extern VOID Config(VOID); extern VOID Uncnfg(VOID); extern VOID Reset(VOID); extern VOID C_Eq_Id(VOID); extern enum MMUMAP MapData(DWORD d); extern VOID CpuReset(VOID); extern VOID Npeek(BYTE *a, DWORD d, UINT s); extern VOID Nread(BYTE *a, DWORD d, UINT s); extern VOID Nwrite(BYTE *a, DWORD d, UINT s); extern BYTE Read2(DWORD d); extern DWORD Read5(DWORD d); extern VOID Write5(DWORD d, DWORD n); extern VOID Write2(DWORD d, BYTE n); extern VOID IOBit(DWORD d, BYTE b, BOOL s); extern VOID ReadIO(BYTE *a, DWORD b, DWORD s); extern VOID WriteIO(BYTE *a, DWORD b, DWORD s); // Keyboard.c extern VOID ScanKeyboard(BOOL bActive, BOOL bReset); extern VOID KeyboardEvent(BOOL bPress, UINT out, UINT in); // Keymacro.c extern INT nMacroState; extern INT nMacroTimeout; extern BOOL bMacroRealSpeed; extern VOID KeyMacroRecord(BOOL bPress, UINT out, UINT in); extern LRESULT OnToolMacroNew(VOID); extern LRESULT OnToolMacroPlay(VOID); extern LRESULT OnToolMacroStop(VOID); extern LRESULT OnToolMacroSettings(VOID); // Stack.c extern LRESULT OnStackCopy(VOID); extern LRESULT OnStackPaste(VOID); // RPL.c extern BOOL RPL_GetSystemFlag(INT nFlag); extern DWORD RPL_SkipOb(DWORD d); extern DWORD RPL_ObjectSize(BYTE *o); extern DWORD RPL_CreateTemp(DWORD l); extern DWORD RPL_Pick(UINT l); extern VOID RPL_Replace(DWORD n); extern VOID RPL_Push(DWORD n); // External.c extern BOOL bWaveBeep; extern DWORD dwWaveVol; extern VOID External(CHIPSET* w); // DDEserv.c extern HDDEDATA CALLBACK DdeCallback(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, DWORD, DWORD); // Disasm.c extern BOOL disassembler_mode; extern WORD disassembler_map; extern DWORD disassemble (DWORD addr, LPTSTR out, BOOL view); // Serial.c extern BOOL CommOpen(LPTSTR strWirePort,LPTSTR strIrPort); extern VOID CommClose(VOID); extern VOID CommSetBaud(VOID); extern BOOL UpdateUSRQ(VOID); extern VOID CommTxBRK(VOID); extern VOID CommTransmit(VOID); extern VOID CommReceive(VOID); // Cursor.c extern HCURSOR CreateHandCursor(VOID); #if defined _USRDLL // DLL version // Emu48dll.c extern VOID (CALLBACK *pEmuDocumentNotify)(LPCTSTR lpszFilename); extern BOOL DLLCreateWnd(LPCTSTR lpszFilename, LPCTSTR lpszPort2Name); extern BOOL DLLDestroyWnd(VOID); #endif // Message Boxes static __inline int InfoMessage(LPCTSTR szMessage) {return MessageBox(hWnd, szMessage, szTitle, MB_APPLMODAL|MB_OK|MB_ICONINFORMATION|MB_SETFOREGROUND);} static __inline int AbortMessage(LPCTSTR szMessage) {return MessageBox(hWnd, szMessage, szTitle, MB_APPLMODAL|MB_OK|MB_ICONSTOP|MB_SETFOREGROUND);} static __inline int YesNoMessage(LPCTSTR szMessage) {return MessageBox(hWnd, szMessage, szTitle, MB_APPLMODAL|MB_YESNO|MB_ICONEXCLAMATION|MB_SETFOREGROUND);} static __inline int YesNoCancelMessage(LPCTSTR szMessage,UINT uStyle) {return MessageBox(hWnd, szMessage, szTitle, MB_APPLMODAL|MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_SETFOREGROUND|uStyle);} // Missing Win32 API calls static __inline LPTSTR DuplicateString(LPCTSTR szString) { UINT uLength = lstrlen(szString) + 1; LPTSTR szDup = HeapAlloc(hHeap,0,uLength*sizeof(szDup[0])); lstrcpy(szDup,szString); return szDup; }