⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 agsi.h

📁 该模拟器是在Keil7.0中使用。 只要把Ex02Dll.dll复制到 X:KeilC51BIN目录下。 打开测试程序
💻 H
字号:
#ifndef __AGSI_H__
#define __AGSI_H__


#include <windows.h>


#define AGSIEXPORT __declspec( dllexport )
#define AGSIAPI    WINAPIV


#ifdef __cplusplus
extern "C" {
#endif

///////////////////////////////////////////////////////////////////////////////
//
// AGSI: Advanced Generic Simulator Interface (Simulation Interface Part)
//

typedef DWORD AGSIVTR;
typedef DWORD AGSIADDR;
typedef DWORD AGSITIMER;
typedef void (* AGSICALLBACK)(void);

typedef struct {
  HINSTANCE     m_hInstance;
  const char*   m_pszProjectPath;
  const char*   m_pszDevice;
  const char*   m_pszConfiguration;
  const char*   m_pszAppFile;
} AGSICONFIG;

typedef enum {
  AGSIBYTE = 1,
  AGSIWORD = 2,
  AGSILONG = 4,
  AGSIBIT  = 5,
  AGSIVTRCHAR = 10,
  AGSIVTRWORD = 11,
  AGSIVTRLONG = 12,
  AGSIVTRFLOAT = 13
} AGSITYPE;

typedef enum {
  AGSIREAD,
  AGSIWRITE,
  AGSIREADWRITE,
} AGSIACCESS;

// function code numbers for AgsiEntry function
typedef enum {
  AGSI_CHECK     = 0,
  AGSI_INIT      = 1,
  AGSI_TERMINATE = 2,
  AGSI_RESET     = 3,
  AGSI_PREPLL    = 4,
  AGSI_POSTPLL   = 5
} AGSIFUNC;


/*
 * 80x51 memory spaces
 */

#define   amXDATA  0x0001           // XDATA
#define   amBANK0  0x0080           // BANK0
#define   amBANK31 0x009F           // BANK31
#define   amDATA   0x00F0           // DATA
#define   amBIT    0x00F1           // BIT
#define   amEDATA  0x00F2           // EDATA (i251)
#define   amIDATA  0x00F3           // IDATA
#define   amECODE  0x00F4           // 251 ecode
#define   amHDATA  0x00F5           // 251 hdata
#define   amHCONS  0x00F6           // 251 hconst
#define   amCONST  0x00F7           // 251 const
#define   amPDATA  0x00FE           // PDATA (c51 macht das bei generic)
#define   amCODE   0x00FF           // CODE 


typedef struct {
#ifdef __C166__
   AGSIADDR        vec;
   char          *mess;     // interrupt name
   AGSIADDR        sfr;     // interrupt control sfr 
#else
   AGSIADDR        vec;
   char          *mess;     // interrupt name
   AGSIADDR       msfr;     // interrupt mode sfr 
   WORD          mmask;     // interrupt mode bit mask
   const char   *mname;     // name of interrupt mode bit
   AGSIADDR       rsfr;     // interrupt request sfr 
   WORD          rmask;     // interrupt request bit mask
   const char   *rname;     // name of interrupt request bit
   AGSIADDR       esfr;     // interrupt enable sfr
   WORD          emask;     // interrupt enable bit mask
   const char   *ename;     // name of interrupt enable bit
   AGSIADDR      p0sfr;     // interrupt priority 0 sfr
   WORD         p0mask;     // interrupt priority 0 bit mask
   const char   *pname;     // name of interrupt priority bit
   AGSIADDR      p1sfr;     // interrupt priority 1 sfr
   WORD         p1mask;     // interrupt priority 1 bit mask
   WORD            pwl;     // priority within level
   WORD     auto_reset;     // reset interrupt request flag on interrupt entry
#endif
} AGSIINTERRUPT;


/*
 * Symbol search masks (may be combined using |) :
 */

typedef enum {
  AGSI_SYM_VAR = 0x0001,         // search for non-bit Variables
  AGSI_SYM_CON = 0x0002,         // search for named Constants
  AGSI_SYM_BIT = 0x0004,         // search for Bit in Memory
  AGSI_SYM_LOC = 0x0008,         // search for Function/Label
  AGSI_SYM_SFR = 0x0200          // search for SFR name
} AGSISYMMASK;

/*
 * Type of found symbol:
 */

typedef enum {
  AGSI_TP_VOID   = 0,
  AGSI_TP_BIT    = 1,
  AGSI_TP_CHAR   = 2,
  AGSI_TP_UCHAR  = 3,
  AGSI_TP_INT    = 4,
  AGSI_TP_UINT   = 5,
  AGSI_TP_SHORT  = 6,
  AGSI_TP_USHORT = 7,
  AGSI_TP_LONG   = 8,
  AGSI_TP_ULONG  = 9,
  AGSI_TP_FLOAT  = 10,
  AGSI_TP_DOUBLE = 11,
  AGSI_TP_PTR    = 12,
  AGSI_TP_UNION  = 13,
  AGSI_TP_STRUCT = 14,
  AGSI_TP_FUNC   = 15,
  AGSI_TP_STRING = 16,
  AGSI_TP_ENUM   = 17,
  AGSI_TP_FIELD  = 18
} AGSISYMTYPE;


typedef struct  {                  // Search for Sym by Name or Value.
  AGSISYMMASK nMask;               // search mask (AG_SYM_LOC | ...)
  char szName [256];               // search/found name (zero-terminated
  UINT64        val;               // search/found Adr/Value
  AGSISYMTYPE  type;               // type of found symbol (AGSI_TP_???)
  DWORD          Ok;               // 1:=Ok, else find failed.
} AGSISYMDSC;



/*
 * Dynamic Menu construction and maintanance
 */

//#pragma pack(1)

#define AGSIDLGD struct AgsiDlgDat
struct AgsiDlgDat {                      // every dialog has it's own structure
  DWORD             iOpen;               // auto reopen dialog (pos := 'rc')
  HWND                 hw;               // Hwnd of Dialog
  BOOL (CALLBACK *wp) (HWND hw, UINT msg, WPARAM wp, LPARAM lp);
  RECT                 rc;               // Position rectangle
  void   (*Update) (void);               // Update dialog content
  void (*Kill) (AGSIDLGD *pM);           // Kill dialog
  void                *vp;               // reserved for C++ Dialogs (Dlg *this)
};

#define AGSIMENU struct AgsiDynaM
struct AgsiDynaM  {                      // Menu item data structure
  int              nDelim;               // Menu template delimiter
  char            *szText;               // Menu item text
  void    (*fp) (AGSIMENU *pM);          // create/bringDlgtoTop function
  DWORD               nID;               // uv3 assigned ID_xxxx
  DWORD            nDlgId;               // Dialog ID
  AGSIDLGD          *pDlg;               // link to dialog attributes
};
//#pragma pack()

/*
 * nDelim:  1 := normal Menu entry
 *          2 := Popup-Entry (nested submenu)
 *         -2 := end of Popup-Group-List
 *         -1 := total end of Menu-List
 *  text:   the name for the menu/popup-menu entry
 *    fp:   Function to be activated on menu-selection
 */


// Function that must be exported by the loaded DLL
AGSIEXPORT DWORD        AGSIAPI AgsiEntry (DWORD nCode, void *vp);

// Callback functions that are ONLY allowed to call during the initialisation process
AGSIEXPORT BOOL         AGSIAPI AgsiDefineSFR(const char* pszSfrName, AGSIADDR dwAddress, AGSITYPE eType, BYTE bBitPos);
AGSIEXPORT AGSIVTR      AGSIAPI AgsiDefineVTR(const char* pszVtrName, AGSITYPE eType, DWORD dwValue);
AGSIEXPORT BOOL         AGSIAPI AgsiDeclareInterrupt(AGSIINTERRUPT *pInterrupt);
AGSIEXPORT BOOL         AGSIAPI AgsiSetWatchOnSFR(AGSIADDR SFRAddress, AGSICALLBACK pfnReadWrite, AGSIACCESS eAccess);
AGSIEXPORT BOOL         AGSIAPI AgsiSetWatchOnVTR(AGSIVTR hVTR, AGSICALLBACK pfnReadWrite, AGSIACCESS eAccess);
AGSIEXPORT BOOL         AGSIAPI AgsiSetWatchOnMemory(AGSIADDR StartAddress, AGSIADDR EndAddress, AGSICALLBACK pfnReadWrite, AGSIACCESS eAccess);
AGSIEXPORT AGSITIMER    AGSIAPI AgsiCreateTimer(AGSICALLBACK pfnTimer);
AGSIEXPORT BOOL         AGSIAPI AgsiDefineMenuItem(AGSIMENU *pDym);

// Callback functions that are NOT allowed to call during the initialisation process
AGSIEXPORT BOOL         AGSIAPI AgsiWriteSFR(AGSIADDR SFRAddress, DWORD dwValue, DWORD dwMask);
AGSIEXPORT BOOL         AGSIAPI AgsiReadSFR (AGSIADDR SFRAddress, DWORD* pdwCurrentValue, DWORD* pdwPreviousValue, DWORD dwMask);
AGSIEXPORT BOOL         AGSIAPI AgsiWriteVTR(AGSIVTR hVTR, DWORD dwValue);
AGSIEXPORT BOOL         AGSIAPI AgsiReadVTR (AGSIVTR hVTR, DWORD* pdwCurrentValue);
AGSIEXPORT BOOL         AGSIAPI AgsiSetSFRReadValue(DWORD dwValue);
AGSIEXPORT BOOL         AGSIAPI AgsiReadMemory (AGSIADDR Address, DWORD dwCount, BYTE* pbValue);
AGSIEXPORT BOOL         AGSIAPI AgsiWriteMemory(AGSIADDR Address, DWORD dwCount, BYTE* pbValue);
AGSIEXPORT AGSIADDR     AGSIAPI AgsiGetLastMemoryAddress(void);
AGSIEXPORT BOOL         AGSIAPI AgsiIsSimulatorAccess(void);
AGSIEXPORT BOOL         AGSIAPI AgsiSetTimer(AGSITIMER hTimer, DWORD dwClock);
AGSIEXPORT UINT64       AGSIAPI AgsiGetStates(void);
AGSIEXPORT AGSIADDR     AGSIAPI AgsiGetProgramCounter(void);
AGSIEXPORT DWORD        AGSIAPI AgsiIsInInterrupt(void);
AGSIEXPORT BOOL         AGSIAPI AgsiIsSleeping(void);
AGSIEXPORT void         AGSIAPI AgsiStopSimulator(void);
AGSIEXPORT void         AGSIAPI AgsiTriggerReset(void);
AGSIEXPORT void         AGSIAPI AgsiUpdateWindows(void);
AGSIEXPORT void         AGSIAPI AgsiHandleFocus (HWND hwndDialog);
AGSIEXPORT DWORD        AGSIAPI AgsiGetExternalClockRate(void);
AGSIEXPORT DWORD        AGSIAPI AgsiGetInternalClockRate(void);
AGSIEXPORT double       AGSIAPI AgsiGetClockFactor(void);
AGSIEXPORT void         AGSIAPI AgsiMessage(const char* pszFormat, ...);
AGSIEXPORT const char * AGSIAPI AgsiGetTargetKey(const char* pszKey);
AGSIEXPORT BOOL         AGSIAPI AgsiSetTargetKey(const char* pszKey, const char *pszString);
AGSIEXPORT DWORD        AGSIAPI AgsiGetSymbolByName (AGSISYMDSC *vp);
AGSIEXPORT DWORD        AGSIAPI AgsiGetSymbolByValue(AGSISYMDSC *vp);

#ifdef __cplusplus
}
#endif


#endif // __AGSI_H__


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -