emu48-mirror/sources/Emu48/EMU48.H

300 lines
9.5 KiB
C
Raw Normal View History

2024-03-19 22:24:30 +01:00
/*
* Emu48.h
*
* This file is part of Emu48
*
* Copyright (C) 1995 Sebastien Carlier
*
*/
2024-03-19 22:37:54 +01:00
#if defined GRAYSCALE // grayscale defines
#define GRAYON(a) a
#define GRAYOFF(a)
#else
#define GRAYON(a)
#define GRAYOFF(a) a
#endif
2024-03-19 22:24:30 +01:00
#include "types.h"
2024-03-19 22:37:03 +01:00
#define ARRAYSIZEOF(a) (sizeof(a) / sizeof(a[0]))
2024-03-19 22:25:45 +01:00
// cards status
2024-03-19 22:36:03 +01:00
#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)
2024-03-19 22:24:30 +01:00
2024-03-19 22:25:45 +01:00
#define BINARYHEADER48 "HPHP48-W"
#define BINARYHEADER49 "HPHP49-W"
2024-03-19 22:37:03 +01:00
#define SM_RUN 0 // states of cpu emulation thread
#define SM_INVALID 1
#define SM_RETURN 2
#define SM_SLEEP 3
2024-03-19 22:25:45 +01:00
#define S_ERR_NO 0 // stack errorcodes
2024-03-19 22:24:30 +01:00
#define S_ERR_BINARY 1
#define S_ERR_ASCII 2
2024-03-19 22:25:45 +01:00
#define NO_SERIAL "disabled" // port not open
2024-03-19 22:24:30 +01:00
2024-03-19 22:25:45 +01:00
#define HP_MNEMONICS FALSE // disassembler mnenomics mode
2024-03-19 22:24:30 +01:00
#define CLASS_MNEMONICS TRUE
2024-03-19 22:25:45 +01:00
#define MEM_MAP 0 // memory module definition
2024-03-19 22:24:30 +01:00
#define MEM_ROM 1
#define MEM_RAM 2
#define MEM_PORT1 3
#define MEM_PORT2 4
2024-03-19 22:37:54 +01:00
#define VIEW_SHORT FALSE // view of disassembler output
2024-03-19 22:25:45 +01:00
#define VIEW_LONG TRUE
#define DISP_POINTER 0x01 // defines for display area
#define DISP_MAIN 0x02
#define DISP_MENUE 0x04
#define DISP_ANNUN 0x08
2024-03-19 22:37:03 +01:00
// values for mapping area
enum MMUMAP { M_IO, M_ROM, M_RAM, M_P1, M_P2, M_BS };
2024-03-19 22:24:30 +01:00
// Emu48.c
extern HPALETTE hPalette;
2024-03-19 22:37:03 +01:00
extern HPALETTE hOldPalette;
extern HANDLE hEventShutdn;
extern LPTSTR szAppName;
extern LPTSTR szTopic;
extern LPTSTR szTitle;
extern CRITICAL_SECTION csGDILock;
2024-03-19 22:37:54 +01:00
extern CRITICAL_SECTION csLcdLock;
2024-03-19 22:37:03 +01:00
extern CRITICAL_SECTION csKeyLock;
extern CRITICAL_SECTION csIOLock;
extern CRITICAL_SECTION csT1Lock;
extern CRITICAL_SECTION csT2Lock;
2024-03-19 22:37:54 +01:00
extern CRITICAL_SECTION csTxdLock;
2024-03-19 22:37:03 +01:00
extern CRITICAL_SECTION csRecvLock;
extern INT nArgc;
extern LPCTSTR *ppArgv;
extern LARGE_INTEGER lFreq;
extern LARGE_INTEGER lAppStart;
extern DWORD idDdeInst;
extern UINT uCF_HpObj;
2024-03-19 22:25:45 +01:00
extern HINSTANCE hApp;
2024-03-19 22:24:30 +01:00
extern HWND hWnd;
2024-03-19 22:37:03 +01:00
extern HWND hDlgDebug;
extern HWND hDlgFind;
2024-03-19 22:24:30 +01:00
extern HDC hWindowDC;
extern BOOL bPort2IsShared;
2024-03-19 22:36:03 +01:00
extern BOOL bAutoSave;
extern BOOL bAutoSaveOnExit;
2024-03-19 22:24:30 +01:00
extern BOOL bAlwaysDisplayLog;
2024-03-19 22:36:03 +01:00
extern HANDLE hThread;
extern DWORD lThreadId;
2024-03-19 22:37:03 +01:00
extern VOID SetWindowTitle(LPTSTR szString);
2024-03-19 22:36:03 +01:00
extern VOID CopyItemsToClipboard(HWND hWnd);
2024-03-19 22:24:30 +01:00
extern VOID UpdateWindowStatus(VOID);
2024-03-19 22:25:45 +01:00
// Settings.c
2024-03-19 22:36:03 +01:00
extern VOID ReadSettings(VOID);
extern VOID WriteSettings(VOID);
2024-03-19 22:25:45 +01:00
extern VOID ReadLastDocument(LPTSTR szFileName, DWORD nSize);
2024-03-19 22:37:54 +01:00
extern VOID WriteLastDocument(LPCTSTR szFilename);
2024-03-19 22:25:45 +01:00
2024-03-19 22:24:30 +01:00
// Display.c
2024-03-19 22:25:45 +01:00
extern UINT nBackgroundX;
extern UINT nBackgroundY;
extern UINT nBackgroundW;
extern UINT nBackgroundH;
extern UINT nLcdX;
extern UINT nLcdY;
extern UINT nLcdDoubled;
extern LPBYTE pbyLcd;
extern HDC hLcdDC;
extern HDC hMainDC;
2024-03-19 22:37:03 +01:00
extern VOID UpdateContrast(BYTE byContrast);
extern VOID SetLcdColor(UINT nId, UINT nRed, UINT nGreen, UINT nBlue);
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);
2024-03-19 22:37:54 +01:00
extern BYTE GetLineCounter(VOID);
extern VOID StartDisplay(BYTE byInitial);
extern VOID StopDisplay(VOID);
2024-03-19 22:24:30 +01:00
// Engine.c
2024-03-19 22:37:03 +01:00
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;
2024-03-19 22:37:54 +01:00
extern BOOL bDbgAutoStateCtrl;
2024-03-19 22:37:03 +01:00
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;
2024-03-19 22:37:54 +01:00
extern VOID SuspendDebugger(VOID);
extern VOID ResumeDebugger(VOID);
extern VOID CheckSerial(VOID);
2024-03-19 22:37:03 +01:00
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);
2024-03-19 22:24:30 +01:00
2024-03-19 22:25:45 +01:00
// Fetch.c
extern VOID EvalOpcode(LPBYTE I);
2024-03-19 22:24:30 +01:00
// Files.c
2024-03-19 22:37:03 +01:00
extern TCHAR szEmu48Directory[260];
extern TCHAR szCurrentDirectory[260];
extern TCHAR szCurrentKml[260];
extern TCHAR szBackupKml[260];
extern TCHAR szCurrentFilename[260];
extern TCHAR szBackupFilename[260];
extern TCHAR szBufferFilename[260];
extern TCHAR szPort2Filename[260];
2024-03-19 22:24:30 +01:00
extern LPBYTE pbyRom;
extern DWORD dwRomSize;
2024-03-19 22:37:03 +01:00
extern BYTE cCurrentRomType;
extern UINT nCurrentClass;
2024-03-19 22:36:03 +01:00
extern BOOL bRomWriteable;
2024-03-19 22:24:30 +01:00
extern LPBYTE pbyPort2;
extern BOOL bPort2Writeable;
extern BOOL bPort2IsShared;
2024-03-19 22:25:45 +01:00
extern DWORD dwPort2Size;
2024-03-19 22:24:30 +01:00
extern DWORD dwPort2Mask;
extern BOOL bBackup;
2024-03-19 22:25:45 +01:00
extern WORD WriteStack(LPBYTE,DWORD);
2024-03-19 22:37:54 +01:00
extern VOID SetWindowLocation(HWND hWnd,INT nPosX,INT nPosY);
extern VOID UpdatePatches(BOOL bPatch);
extern BOOL PatchRom(LPCTSTR szFilename);
2024-03-19 22:37:03 +01:00
extern BOOL MapRom(LPCTSTR szFilename);
2024-03-19 22:24:30 +01:00
extern VOID UnmapRom(VOID);
2024-03-19 22:37:03 +01:00
extern BOOL MapPort2(LPCTSTR szFilename);
2024-03-19 22:24:30 +01:00
extern VOID UnmapPort2(VOID);
extern VOID ResetDocument(VOID);
extern BOOL NewDocument(VOID);
2024-03-19 22:37:03 +01:00
extern BOOL OpenDocument(LPCTSTR szFilename);
2024-03-19 22:24:30 +01:00
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);
2024-03-19 22:37:03 +01:00
extern BOOL LoadObject(LPCTSTR szFilename);
extern BOOL SaveObject(LPCTSTR szFilename);
extern HBITMAP LoadBitmapFile(LPCTSTR szFilename);
2024-03-19 22:24:30 +01:00
// Timer.c
2024-03-19 22:25:45 +01:00
extern VOID SetHP48Time(VOID);
2024-03-19 22:24:30 +01:00
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
2024-03-19 22:37:03 +01:00
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);
2024-03-19 22:24:30 +01:00
// Keyboard.c
2024-03-19 22:25:45 +01:00
extern VOID ScanKeyboard(BOOL bReset);
2024-03-19 22:24:30 +01:00
extern VOID KeyboardEvent(BOOL bPress, UINT out, UINT in);
// RPL.c
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 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;
2024-03-19 22:37:03 +01:00
extern DWORD disassemble (DWORD addr, LPTSTR out, BOOL view);
2024-03-19 22:24:30 +01:00
// Serial.c
2024-03-19 22:37:03 +01:00
extern BOOL CommOpen(LPTSTR strWirePort,LPTSTR strIrPort);
2024-03-19 22:24:30 +01:00
extern VOID CommClose(VOID);
extern VOID CommSetBaud(VOID);
2024-03-19 22:37:03 +01:00
extern BOOL UpdateUSRQ(VOID);
2024-03-19 22:37:54 +01:00
extern VOID CommTxBRK(VOID);
2024-03-19 22:24:30 +01:00
extern VOID CommTransmit(VOID);
extern VOID CommReceive(VOID);
2024-03-19 22:37:03 +01:00
#if defined _USRDLL // DLL version
// Emu48dll.c
extern BOOL DLLCreateWnd(LPCTSTR lpszFilename);
extern BOOL DLLDestroyWnd(VOID);
#endif
2024-03-19 22:24:30 +01:00
// Message Boxes
2024-03-19 22:37:03 +01:00
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) {return MessageBox(hWnd, szMessage, szTitle, MB_APPLMODAL|MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_SETFOREGROUND);}
2024-03-19 22:24:30 +01:00
// Missing Win32 API calls
2024-03-19 22:37:03 +01:00
static __inline LPTSTR DuplicateString(LPCTSTR szString)
2024-03-19 22:24:30 +01:00
{
2024-03-19 22:37:03 +01:00
UINT uLength = lstrlen(szString) + 1;
LPTSTR szDup = LocalAlloc(LMEM_FIXED,uLength*sizeof(*(LPTSTR)0));
lstrcpy(szDup,szString);
2024-03-19 22:24:30 +01:00
return szDup;
}