#ifndef __AGDI__INCED___
#define __AGDI__INCED___ //---Revision History: ----------------------------------------------
// 17.10.2000, added AG_SYM_SFR
//
//------------------------------------------------------------------- #ifdef __cplusplus
extern "C" {
#endif #include <Windows.h> // wg. HWND, RECT, CALLBACK, HANDLE #define _EXPO_ __declspec(dllexport) /*
* Advanced GDI types
*/ typedef unsigned long UL32;
typedef signed long SL32;
typedef signed char SC8;
typedef unsigned char UC8;
typedef signed int I32;
typedef unsigned int U32;
typedef signed short int I16;
typedef unsigned short int U16;
typedef __int64 I64;
typedef unsigned __int64 U64;
typedef float F32;
typedef double F64; typedef union {
U32 u32; // 32-Bit signed int
I32 i32; // 32-Bit unsigned int
UL32 ul; // 32-Bit unsigned long
SL32 sl; // 32-Bit signed long
UC8 uc; // 8-Bit unsigned char
SC8 sc; // 8-Bit signed char
U16 u16; // 16-Bit unsigned short int
I16 i16; // 16-Bit signed short int
U64 u64; // 64-Bit unsigned int
I64 i64; // 64-Bit signed int
F32 f32; // 32-Bit single precision float
F64 f64; // 64-Bit single precision float
UL32 ul2 [];
SL32 sl2 [];
U16 u16a [];
I16 i16a [];
UC8 uc8 [];
SC8 sc8 [];
SC8 *pS;
UC8 *pU;
U16 *pW;
U32 *pD;
} GVAL; /*
* 166/167 specific's
*/ #define mWREG 0x100 // 0x100...0x10F := R0...R15
#define mBREG 0x200 // 0x200...0x20F := RL0...RH7
#define mDREG 0x300 // not used.
#define mDPP 0x400 // 0x400...0x403 := DPP0...DPP3
#define mPC 0x500 // PC
#define mPSW 0x600 // PSW
#define mSP 0x700 // SP
#define mCP 0x800 // CP
#define mCYC 0x900 // Cycles value
#define mEPTR 0xA00 #pragma pack(1)
typedef struct {
union {
U16 wregs []; // R0 ... R15
UC8 bregs []; // RL0 ... RH7
} r;
U32 Ndpp[]; // full linear base address values
U32 nPC; // full address !
U16 cPsw; // current Psw
U16 cSP;
U16 cMDL; // MDL
U16 cMDH; // MDH
U32 cCP; // CP
I64 nCycles; // cycle counter (or time ???) INT64 macc; // 40-Bit value
U16 mah; // MAH MAC-Unit Accumulator High
U16 mal; // MAL MAC-Unit Accumulator Low
U16 mas; // MAS limited MAH/signed
U16 msw; // MSW MAC-Unit Status Word
U16 mcw; // MCW MAC-Unit Control Word
U16 mrw; // MRW MAC-Unit Repeat Word U16 idx0;
U16 idx1;
U16 qx0;
U16 qx1;
U16 qr0;
U16 qr1;
} RG166; /*
* Sle66+ specific's
*/ #define nnR0 0x00 // R0
#define nnR1 0x01 // R1
#define nnR2 0x02 // R2
#define nnR3 0x03 // R3
#define nnR4 0x04 // R4
#define nnR5 0x05 // R5
#define nnR6 0x06 // R6
#define nnR7 0x07 // R7
//#define niR0 0x10 // @R0
//#define niR1 0x11 // @R1
//#define nrAB 0x12 // AB
#define nrCY 0x13 // C
#define nrA 0x14 // A
#define nrDPTR 0x18 // DPTR #define nnPR0 0x1C // PR0 (80C51MX)
#define nnPR1 0x1D // PR1 (80C51MX) typedef struct { // iMCS51 - SLE66Cxx Registers
UL32 nPC;
I64 nCycles; // cycle counter
UC8 psw;
UC8 sp;
UC8 b;
UC8 acc;
UC8 dpl;
UC8 dph;
UC8 bregs [];
UC8 dpsel;
UC8 adrxh; // page for MOVX @Ri
U16 dptx []; // DPTR save area
} RGSLE66; typedef struct { // iMCS51-Registers
BYTE Rn []; // R0 ... R7
DWORD nPC; // full address !
BYTE sp; // SP
BYTE psw; // PSW-sfr
BYTE b; // B-sfr
BYTE acc; // ACC-sfr
BYTE dpl; // DPL-sfr
BYTE dph; // DPH-sfr
BYTE ports[];
I64 nCycles; // cycle counter
} RG51; typedef struct { // iMCSARM Registers
DWORD cur[]; // Current Mode: R0..R15(PC)
DWORD cpsr; // CPSR
DWORD spsr; // Current SPSR
DWORD usr[]; // User & System: R8..R14
DWORD fiq[]; // Fast Interrupt: R8..R14, SPSR
DWORD irq[]; // Interrupt: R13,R14, SPSR
DWORD svc[]; // Supervisor: R13,R14, SPSR
DWORD abt[]; // Abort: R13,R14, SPSR
DWORD und[]; // Undefined: R13,R14, SPSR
INT64 nCycles; // cycle counter
} RgARM ; typedef struct { // SmartMX-Registers
BYTE Rn []; // 7F:0000 .. 7F:001F (D:0 .. D:1F)
BYTE acc, pcl, pch, pcx, psw, pswh; // System Mode Registers
BYTE s_B, s_EPL, s_EPM, s_EPH, s_DPL0, s_DPH0;
BYTE s_DPL1, s_DPH1, s_MXCON, s_AUXR1, s_XRAMP;
BYTE s_SP, s_SPE, s_SPLOW,s_SPELOW,s_SPHIGH,s_SPEHIGH;
//User Context Registers
BYTE u_B, u_EPL, u_EPM, u_EPH, u_DPL0, u_DPH0;
BYTE u_DPL1, u_DPH1, u_MXCON, u_AUXR1, u_XRAMP;
BYTE u_SP, u_SPE, u_SPLOW,u_SPELOW,u_SPHIGH,u_SPEHIGH;
// Physical PC Value
BYTE YPCL, YPCH, YPCX;
BYTE MMUCTRL;
BYTE MMUPTRL, MMUPTRM, MMUPTRH;
} RGSMX; #pragma pack() #pragma pack(1) #define RGROUP struct rGroup
#define RITEM struct rItem
#define REGDSC struct RegDsc struct rGroup { // Register Group Descriptor
UC8 desc; // always 0x00
UC8 ShEx; // Bit.0 = 1 Show Group initially expanded
// Bit.1 = 1 Show Group description 'bold'
char *name; // Group name
}; struct rItem { // Register Item Descriptor
UC8 desc; // always 0x01
U16 nGi; // Group-Index (0...nGroups-1)
U16 nItem; // Item indicator
char szReg[]; // Name of Register
UC8 isPC; // is this the PC
UC8 canChg; // can this Reg be changed in Reg-Window
UC8 iHigh; // highlight the value
UC8 iDraw; // item needs to be repainted
char szVal[]; // it's value in Ascii
GVAL v; // it's binary item value
}; struct RegDsc {
I32 nGitems; // number of group items
I32 nRitems; // number of register items
RGROUP *GrpArr; // array of group descriptors
RITEM *RegArr; // array of register descriptors
void (*RegGet) (RITEM *vp, int nR); // get RegItem's value
I32 (*RegSet) (RITEM *vp, GVAL *pV); // set RegItem's value
}; #pragma pack() #define UPR_NORMAL 0x80000000 // update normal registers
#define UPR_HIST 0x40000000 // update history registers /*
* Advanced GDI Functions
*/ /*
* Error codes
*/ #define AG_OK 0 // Ok.
#define AG_NOACCESS 1 // Cannot access while running.
#define AG_RDFAILED 2 // memory read failed.
#define AG_INVALOP 3 // invalid operation code
#define AG_RO 4 // attempt to write Read-only item
#define AG_WRFAILED 5 // memory write failed.
#define AG_CANTMAP 6 // cannot map memory /*
* 80x51 + Sle66(+) memory spaces, added 12/19/99
*/ #define amNONE 0x0000 // not spaced
#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
#define amPHYS 0x0100 // Physical SLE66+ Memory
#define amPHLIM 0x0110 // 1MB Physical Memory #define amYMEM 0x0040 // Mifare ProX Y: (physical code 1MB)
#define amZMEM 0x0041 // Mifare ProX Z: (physical xdata)
#define amSMEM 0x0042 // Mifare ProX S: (physical sfr) #define amU1MEM 0x00F8 // UsrMem #1 (E2-PROM)
#define amU2MEM 0x00F9 // UsrMem #2 (reserved for future use)
#define amU3MEM 0x00FA // UsrMem #3 (reserved for future use)
#define amU4MEM 0x00FB // UsrMem #4 (reserved for future use)
#define amU5MEM 0x00FC // UsrMem #5 (reserved for future use)
#define mmU6MEM 0x00FD // UsrMem #6 (reserved for future use) /*
* Features
*/ typedef struct {
U32 MemAccR : ; // memory-access while running supported
U32 RegAccR : ; // register-access while running supported
U32 hTrace : ; // trace-recording supported
U32 hCover : ; // code coverage supported
U32 hPaLyze : ; // Performance-Analyzer support
U32 hMemMap : ; // Memory-Map support
U32 ResetR : ; // Reset possible while running
U32 ExtBrk : ; // OCDS/JTAG: Break in EXTx allowed /10.3.2003/
U32 LaSupp : ; // Logic-Analyzer supported
} SUPP; #pragma pack(1)
typedef struct {
UL32 Adr; // linear address
UL32 ErrAdr; // memory access failed address
UL32 nLen; // address range, used for memory-map
U16 mSpace; // memory space (not used on 166/167)
} GADR; typedef struct { // Assemble/Disassemble
UL32 Adr; // linear address
UC8 Opc []; // 167 needs max. 4 Opcode bytes
I32 OpcLen; // Result length in assemble mode
SC8 szB []; // DisAsm-result or Asm-input line
I32 Result; // 0:=Ok, otherwise error
} DAAS; typedef struct { // 11.1.2005, DisAssemble Mixed-Mode into File
UL32 nStart; // Start-Address for disassemble
UL32 nEnd; // Stop-Address for disassemble
I32 Result; // 0:=Ok, 1:=can't create file, 2:=file write error
I32 nMode; // 0:=Asm-Mode, 1:=Mixed-Mode
UL32 nRes[]; // reserved
char szN []; // name of file to create and write disassembly
} DAS_MIXED; typedef struct { // Memory-Range descriptor
UC8 mTyp; // 0=RAM, 1=ROM
UL32 nStart; // Memory start address
UL32 nSize; // Size of memory block (0=unused)
} OCM; typedef struct { // 166/167 Device Info
UC8 Vendor []; // Device-Vendor: example 'Siemens'
UC8 Device []; // Device-Name: example 'C167CR-16FM'
UL32 Clock; // clock frequency
UC8 RestoreBp; // 1 := restore Breakpoints
UC8 Rtos; // OS: 0:=none, 1:=RtxTiny, 2:=RtxFull
UC8 Mod167; // 0:=166-Instr. Set 1:=167-Instr Set
UC8 useOnChipRom; // 1:=use on chip Rom
UC8 useOnChipXper; // 1:=use on chip X-peripherals (XRAM+CAN)
UC8 useMAC; // 0:=no MACC, 1:=MACC instr. used OCM ExtMem[]; // up to 6 external memory ranges
OCM Ican; // address range of on-chip CAN
OCM Irom; // address range of on-chip internal Rom
OCM Xram1; // address range of on-chip internal Xram
OCM Xram2; // address range of on-chip internal Xram
OCM Iram; // address range of on-chip internal Ram UC8 PrjPath []; // path of project
UC8 AppName []; // path and name of loaded application
} DEV_X66; #pragma pack() /*
* Symbol search masks (may be combined using |) :
*/ #define AG_SYM_VAR 0x0001 // search for non-bit Variables
#define AG_SYM_CON 0x0002 // search for named Constants
#define AG_SYM_BIT 0x0004 // search for Bit in Memory
#define AG_SYM_LOC 0x0008 // search for Function/Label
#define AG_SYM_SFR 0x0200 // search for SFR name /*
* Type of found symbol:
*/ #define AG_TP_VOID 0
#define AG_TP_BIT 1
#define AG_TP_CHAR 2
#define AG_TP_UCHAR 3
#define AG_TP_INT 4
#define AG_TP_UINT 5
#define AG_TP_SHORT 6
#define AG_TP_USHORT 7
#define AG_TP_LONG 8
#define AG_TP_ULONG 9
#define AG_TP_FLOAT 10
#define AG_TP_DOUBLE 11
#define AG_TP_PTR 12
#define AG_TP_UNION 13
#define AG_TP_STRUCT 14
#define AG_TP_FUNC 15
#define AG_TP_STRING 16
#define AG_TP_ENUM 17
#define AG_TP_FIELD 18 #pragma pack(1) typedef struct { // Search for Sym by Name or Value.
UL32 nMask; // search mask (AG_SYM_LOC | ...)
UC8 szName []; // search/found name (zero-terminated
U64 val; // search/found Adr/Value
UL32 type; // type of found symbol (AG_TP_???)
UL32 Ok; // 1:=Ok, else find failed.
} SYMDSC; #pragma pack() /*
* Progress-Control Structure
*/ #define PROGRESS_INIT 1
#define PROGRESS_KILL 2
#define PROGRESS_SETPOS 3
#define PROGRESS_INITTXT 4 // 15.3.2003, init progress in text mode
#define PROGRESS_SETTEXT 5 // ========= #pragma pack(1)
typedef struct PgRess { // Progress-Setup and Control structure
I32 Job; // PROGRESS_INIT/KILL/SETPOS
I32 pos; // PROGRESS_SETPOS: position to set
I32 low; // low percent (normally 0)
I32 hig; // high percent (normally 100)
SC8 *label; // text-label before progress-bar or NULL
SC8 *ctext; // 15.3.2003, Text instead of % display
} OIL;
#pragma pack() /*
* Flash-Parameter-Block, used in AG_CB_GETFLASHPARAM CallBack
*/
#pragma pack(1)
typedef struct FlashBlock {
UL32 start; // Start-Address
UL32 many; // Number of Bytes
UC8 *image; // Content
UL32 ActSize; // total number of bytes
UL32 Stop : ; // cancel FlashDownLoad
UL32 Res []; // reserved, unused
} FLASHPARM;
#pragma pack() /*
* Init/Query Target features
*/ #define AG_INITFEATURES 0x0100 // Init target features
#define AG_GETFEATURE 0x0200 // extract a single feature
#define AG_INITITEM 0x0300 // Init item
#define AG_EXECITEM 0x0400 // Execute item /*
* Supported Target Features:
*/
#define AG_F_MEMACCR 0x0001 // memory-access while running
#define AG_F_REGACCR 0x0002 // register-access while running
#define AG_F_TRACE 0x0003 // back-trace support
#define AG_F_COVERAGE 0x0004 // code-coverage support
#define AG_F_PALYZE 0x0005 // Performance-Analyzer support
#define AG_F_MEMMAP 0x0006 // Memory-Map support
#define AG_F_RESETR 0x0007 // Reset while running possible feature
#define AG_F_251MODE 0x0008 // 251: get mode (SRC_MODE/BIN_MODE)
#define AG_F_251FRMSZ 0x0009 // 251: get framesize (FRM_SIZE2/4)
#define AG_F_251CPU 0x000A // 251: get CPU type (CPU_251/CPU_51)
#define AG_F_16XBIE 0x000B // 167: brk within EXTx-Sequ allowed
// ret: 1:=yes, 0:=no
#define AG_F_LANALYZER 0x000C // Logic-Analyzer support /*
* Connection and Communication Items used for 'AG_INITITEM':
*/
#define AG_INITMENU 0x0007 // init extension menu
#define AG_INITEXTDLGUPD 0x0008 // init modeless extesion dlg update function
#define AG_INITMHANDLEP 0x0009 // setup ptr to HWND of active modeless dlg
#define AG_INITPHANDLEP 0x000A // pointer to parent handle (MainFrame)
#define AG_INITINSTHANDLE 0x000B // pointer to Agdi-instance handle
#define AG_INITBPHEAD 0x000E // pointer to Bp-head
#define AG_INITCURPC 0x000F // pointer to Program counter
#define AG_INITDOEVENTS 0x0010 // pointer do DoEvents()
#define AG_INITUSRMSG 0x0011 // Registered Message for SendMessage
#define AG_INITCALLBACK 0x0012 // pointer to callback function //---19.7.2002: added for Flash DownLoad:
#define AG_INITFLASHLOAD 0x0013 // Prepare for Flash Download
#define AG_STARTFLASHLOAD 0x0014 // Start Flash DownLoad //---2.11.2004: added for Hitex-AGDI:
#define AG_INITCWINAPP 0x0020 // sent Item is 'CWinApp *'
#define AG_INITSTARTLOAD 0x0021 // 'Load about to start' (item := 'LOADPARMS *')
#define AG_INITENDLOAD 0x0022 // 'Load finished' (item := NULL) /*
* AG_EXECITEM items:
*/
#define AG_UNINIT 0x000C // Clean up target
#define AG_RESET 0x000D // Reset target system
#define AG_GETMODE 0x000E // for S8051.DLL: Get Dallas Contigious Mode
//---26.10.2000: added for Hitex Emulators:
#define AG_RUNSTART 0x0010 // Announcement: Go/Step about to start
#define AG_RUNSTOP 0x0011 // : Go/Step completed.
#define AG_QUERY_LASIG 0x0012 // 27.1.2005
#define AG_KILLED_LASIG 0x0013 // 27.1.2005
//--- typedef struct agdi_la { // Query LA-Signal /27.1.2005/
struct agdi_la *next;
U64 nAdr; // LA-Signal: memory address
U64 nSize; // LA-Signal: size of analyzed item in Bytes
GVAL v; // value
U32 SigNo; // internal LA signal number (don't change)
U32 killed; //
U32 nRes[]; // reserved char szDname[]; // Signal's display name
char szExp[]; // the expr.-text: LA CREATE <expr>
char szError[]; // Error-Text
} AGDI_LA; typedef struct { // Write-Data-Record
I64 tStamp; // Time-Stamp of write
I64 totTime; // total running time
U64 nPC; // PC-value at time of write
U64 nAdr; // Write-Address
GVAL v; // Write-value @nAdr
U32 wType; // 1:=Byte, 2:=W16, 4=U32, 8=U64
U32 SigNo; // LASIG-Number (1...255)
U32 nRes[]; // reserved
} AGDI_LAREC;
//---TODO: define - tStamp/totTime uSec or cycles ??? /*
* Errors returned from AG_QUERY_LASIG:
*/
#define AGDI_LA_OK 1 // LA-Signal was accepted by target
#define AGDI_LA_NOTSUPPORTED (-10) // LA-Sig Address-Range not accepted /*
* 26.1.2005, Info given on AG_INITSTARTLOAD: (see example dated /26.1.2005/ in this file)
*/
typedef struct {
char szFile []; // full path name of App to load
BYTE Incremental; // 1:=incremental load
BYTE NoCode; // 1:=no code
BYTE Reserved[];
} LOADPARMS; #pragma pack(1) typedef struct ag_line {
U16 line;
UL32 addr;
} AG_LINE; typedef struct ag_scope {
DWORD AddrIn; // Input: Address to be mapped to Scope
// Output values:
const char *pModule; // name of Module
const char *pFunc; // name of Function DWORD lowPC; // Scope-Block lower bound
DWORD higPC; // Scope-Block upper bound
DWORD nLines; // number of lines
DWORD curLine; // current line (or 0 if none)
AG_LINE *pLines; // Line-Number Array
char szPath[]; // full path name of source file DWORD nRes[]; // reserved
} AG_SCOPE; typedef struct ag_block { // App/Module/Func Enumeration
char const *pApp; // App-Name (wg. incremental load)
char const *pModule; // Module-Name
char const *pFunc; // Function-Name
UL32 lowPC; // Function starts at 'lowPC'
UL32 higPC; // and extends up to and including 'higPC'
// ***DO NOT MODIFY these:
void *pA; // internal reserved data /App/
void *pT; // internal reserved data /Theadr/
void *pF; // internal reserved data /Func/
UL32 m1:;
} AG_BLOCK; #pragma pack() /*
* Call-Back-Function in S166 and supported sub-functions
*/ typedef U32 (*pCBF) (U32 nCode, void *vp);
#define AG_CB_TRUEXPR 1 // vp := 'EXP *' (use for Bp->ep)
#define AG_CB_PROGRESS 2 // vp := 'struct PgRess *'
#define AG_CB_INITREGV 3 // vp := 'REGDSC *' (into RegView)
#define AG_CB_EXECCMD 4 // vp := 'char *' command string
#define AG_CB_FORCEUPDATE 5 // vp := NULL, force general windows update
#define AG_CB_DISASM 6 // vp := 'DAAS *', disasm opcodes
#define AG_CB_INLASM 7 // vp := 'DAAS *', assemble szB[] into Opc[]
#define AG_CB_MSGSTRING 8 // vp := 'char *' text for message pane
#define AG_CB_GETDEVINFO 9 // vp := 'DEV_X66 *', get device info
#define AG_CB_SYMBYVAL 10 // vp := 'SYMDESC *', find symbol by value
#define AG_CB_SYMBYNAME 11 // vp := 'SYMDESC *', find symbol by name
#define AG_CB_SLE66MM 12 // vp := &slots[0] out of [512]
#define AG_CB_PHYS2MMU 13 // vp := (void *) ((DWORD) physAdr)
#define AG_CB_MMU2PHYS 14 // vp := (void *) ((DWORD) logicalAdr)
#define AG_CB_GETFLASHPARAM 15 // vp := (FLASHPARM *) or NULL
#define AG_CB_GETBOMPTR 16 // vp := &ioc /5.3.2003/ // Note: special callback for DTC-Messaging
#define AG_CB_DCTMSG_WRITE 17 // vp := write-access address #define AG_CB_DISASM_EXT 18 // vp := 'DAS_MIXED *', disasm to file
#define AG_CB_LAREC_DATA 19 // vp := 'AGDI_LAREC *', send data-record to Logic-Analyzer
#define AG_CB_SHUTDOWN 20 //
#define AG_CB_GETSCOPEINFO 21 // vp := 'AG_SCOPE *', get Scope Info
#define AG_CB_ENUMFUNCTIONS 22 // vp := 'AG_BLOCK *'. enumerate App/Modules/Functions #ifdef _IN_TARG_ // define if used in Mon166,Emu...
extern _EXPO_ U32 AG_Init (U16 nCode, void *vp);
#else // S166
extern U32 (*AG_Init) (U16 nCode, void *vp);
#endif /*
* Memory attributes
*/ #define AG_ATR_EXEC 0x01 // 'executable ' Attribute
#define AG_ATR_READ 0x02 // 'readable' Attribute
#define AG_ATR_WRITE 0x04 // 'writable' Attribute
#define AG_ATR_BREAK 0x08 // 'Exec-Break' Attribute
#define AG_ATR_EXECD 0x10 // 'Executed' Attribute
#define AG_ATR_WATCH 0x20 // Location has a Watch
#define AG_ATR_BPDIS 0x40 // 'disabled Exec-Break' Attribute
#define AG_ATR_PAP 0x80 // Location has a Perf.-Analyzer point
#define AG_ATR_WRBRK 0x100 // Loc has a write-access break
#define AG_ATR_RDBRK 0x200 // Loc has a read-access break
#define AG_ATR_COMC 0x400 // iMCS51/251: Common code marker
#define AG_ATR_VNM 0x800 // iMCS51: von Neumann mapped
#define AG_ATR_BEP 0x1000 // iMCS51: Bank-Entry Point
#define AG_ATR_EXTR 0x2000 // 166/167: within range of an EXTR sequence
#define AG_ATR_JTAKEN 0x4000 // Jump-taken attribute /*
* ARM-specific attributes:
*/
#define AG_ATR_THUMB 0x00000080 // 'Thumb' code
#define AG_ATR_ARM 0x00008000 // 'ARM' code
#define AG_ATR_NOINST 0x00080000 // 'No instruction' Attribute #define AG_MEMMAP 0x01 // map memory
#define AG_GETMEMATT 0x02 // get memory attribute
#define AG_SETMEMATT 0x03 // set memory attribute #ifdef _IN_TARG_ // define if used in Mon166,Emu...
extern _EXPO_ U32 AG_MemAtt (U16 nCode, UL32 nAttr, GADR *pA);
#else
extern U32 (*AG_MemAtt) (U16 nCode, UL32 nAttr, GADR *pA);
#endif /*
* Breakpoint query and access
*/ #define AG_ABREAK 0 // simple code address break
#define AG_CBREAK 1 // conditional break (check after each instr.)
#define AG_WBREAK 2 // data access break
#define AG_RBREAK 3 // Address-Range Break (currently not used) #pragma pack(1)
struct AG_Bps {
struct AG_Bps *next;
struct AG_Bps *prev; UL32 type : ; // ABREAK, CBREAK, WBREAK
UL32 enabled : ; // 1:=enabled, 0:=disabled
UL32 ReCalc : ; // recalc expr flag
UL32 BytObj : ; // WatchBrk: 0:=Bytes, 1:=Objects UL32 Adr; // Address (or Range)
UL32 mSpace; // memory-space
void *pV; // used on VTR-access breakpoints UL32 tsize; // WatchBrk: size of one object
UL32 many; // WatchBrk: many objects or bytes
U16 acc; // WatchBrk: 1:=Read, 2:=Write, 3:=ReadWrite
U16 BitPos; // currently not used
UL32 number; // BreakPoint-Number
I32 rcount; // Break is taken when rcount = 1 I32 ocount; // Original Count
void *ep; // conditional-Expression
char *cmd; // Exec-Command
char *Line; // Breakpoint-Expression Line for Display
char *pF; // module file name
UL32 nLine; // line number
UC8 Opc[]; // Opcode-Save Area for Monitors
};
#pragma pack() #define AG_BP struct AG_Bps #define AG_BPQUERY 0x01
#define AG_BPTOGGLE 0x02 // not sent to target
#define AG_BPINSREM 0x03 // not sent to target
#define AG_BPACTIVATE 0x04 // not sent to target
#define AG_BPDISALL 0x05 // Notification: all Bp's have been disabled
#define AG_BPKILLALL 0x06 // Notification: all Bp's have been killed
#define AG_BPEXQUERY 0x07
#define AG_CADRVALID 0x10 // Is code address valid ?
// added these /8.2.99/
#define AG_BPENABLE 0x08 // Notification: Enable Bp at address
#define AG_BPDISABLE 0x09 // Notification: Disable Bp at address
#define AG_BPKILL 0x0A // Notification: Kill Bp at address
#define AG_BPSET 0x0B // Notification: Set Bp at address #ifdef _IN_TARG_ // define if used in Mon166,Emu...
extern _EXPO_ U32 AG_BpInfo (U16 nCode, void *vp);
extern _EXPO_ AG_BP *AG_BreakFunc (U16 nCode, U16 n1, GADR *pA, AG_BP *pB);
#else
extern U32 (*AG_BpInfo) (U16 nCode, void *vp);
extern AG_BP *(*AG_BreakFunc) (U16 nCode, U16 n1, GADR *pA, AG_BP *pB);
#endif /*
* AG_BP *AG_BreakFunc (U16 nCode, U16 n1, GADR *pA, AG_BP *pB);
* nCode := AG_BPQUERY, AG_BPINSREM, ...
* n1 :=
*/ /*
* Go/Step function
*/ #define AG_STOPRUN 0x01 // force target to stop Go/Step.
#define AG_NSTEP 0x02 // exteute 'n' steps
#define AG_GOTILADR 0x03 // go til address
#define AG_GOFORBRK 0x04 // go forever or some Bp fires #ifdef _IN_TARG_ // define if used in Mon166,Emu...
extern _EXPO_ U32 AG_GoStep (U16 nCode, U32 nSteps, GADR *pA);
#else
extern U32 (*AG_GoStep) (U16 nCode, U32 nSteps, GADR *pA);
#endif /*
* Serial-Window I/O (thread-safe)
*/ struct SerAS {
DWORD n1;
DWORD n2;
DWORD n3;
DWORD n4;
GVAL v;
}; #define AG_SERBOUT 0x01 // write nMany bytes to Serial #1 Window
#define AG_SERWOUT 0x02 // write nMany words to Serial #1 Window
#define AG_SERXIN 0x03 // Key was pressed in Serial Window #1 or #2 #ifdef _IN_TARG_ // define if used in Mon166,Emu...
extern _EXPO_ U32 AG_Serial (U16 nCode, U32 nSerNo, U32 nMany, void *vp);
// nCode := AG_SER?OUT / AG_SERXIN
// nSerNo: 0:=Serial #1, 1:=Serial #2
// nMany: number of items
// vp: pointer to items (UC8 or U16)
#else
extern U32 (*AG_Serial) (U16 nCode, U32 nSerNo, U32 nMany, void *vp);
#endif /*
* Register and Memory access functions
*/ #define AG_READ 0x01 // read operation
#define AG_WRITE 0x02 // write operation
#define AG_WROPC 0x03 // write opcodes
#define AG_RDOPC 0x04 // read opcodes
#define AG_RDMMU66 0x05 // 19.12.99, read Sle66 MMU content
#define AG_WRMMU66 0x06 // 19.12.99, write single Sle66 MMU-Descr.
#define AG_RCRC 0x07 // Sle66 read CRC
#define AG_RDSHIELD 0x08 // Sle66 read Shield
#define AG_RDACE 0x09 // Sle66 read ACE //--- 8.7.2002: added for flash download, otherwise like 'AG_WRITE'
#define AG_F_WRITE 0x0A // Write to Flash memory (download)
#define AG_F_VERIFY 0x0B // Verify FLash Memory
#define AG_F_ERASE 0x0C // Erase Flash
#define AG_F_RUN 0x0D // Start flashed App. //---2.4.2003: added for SmartMX Peripheral Access
#define AG_RD_XDES 0x10 // MXP: read DES (16 Bytes)
#define AG_RD_XAES 0x11 // MXP: read AES (16 Bytes)
#define AG_RD_XCRC 0x12 // MXP: read CRC (2 Bytes)
#define AG_RD_XVECT 0x13 // MXP: read Vectors (10 DWORDS, prepared) //---22.7.2003: added for SLE66 RF Interface
#define AG_RDRF 0x14 // SLE66: Read RF Fifo registers
#define AG_WRRF 0x15 // SLE66: Write RF Fifo registers
#define AG_RDMOVB 0x16 // SLE66: Read SFR via MOVB
#define AG_WRMOVB 0x17 // SLE66: Write SFR via MOVB //---26.8.2004: added for SLE66 Special Access
#define AG_BONVMREAD 0x18 // SLE66: BoNVMRead Macro
#define AG_BONVMWRITE 0x19 // SLE66: BoNVMWrite Macro #pragma pack (1) struct BoNvmFunc { // for BoNVMRead/BoNVMWrite
unsigned char Mode; // access mode
unsigned char buf[]; // read/write buffer
};
#pragma pack () #ifdef _IN_TARG_ // define if used in Mon166,Emu...
extern _EXPO_ U32 AG_MemAcc (U16 nCode, UC8 *pB, GADR *pA, UL32 nMany);
extern _EXPO_ U32 AG_RegAcc (U16 nCode, U32 nReg, GVAL *pV);
extern _EXPO_ U32 AG_AllReg (U16 nCode, void *pR);
#else
extern U32 (*AG_MemAcc) (U16 nCode, UC8 *pB, GADR *pA, UL32 nMany);
extern U32 (*AG_RegAcc) (U16 nCode, U32 nReg, GVAL *pV);
extern U32 (*AG_AllReg) (U16 nCode, void *pR);
#endif /*
* extract trace history
*/ #ifdef _IN_TARG_ // define if used in Mon166,Emu...
extern _EXPO_ U32 AG_HistFunc (U32 nCode, I32 indx, I32 dir, void *vp);
#else
extern U32 (*AG_HistFunc) (U32 nCode, I32 indx, I32 dir, void *vp);
#endif #pragma pack(1) #define DIAD struct DlgD
struct DlgD { // every dialog has it's own structure
UL32 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) (DIAD *pM); // Kill dialog
void *vp; // reserved for C++ Dialogs (Dlg *this)
}; #define DYMENU struct DyMenu
struct DyMenu { // Menu item data structure
I32 nDelim; // Menu template delimiter
char *szText; // Menu item text
void (*fp) (DYMENU *pM); // create/bringDlgtoTop function
UL32 nID; // uv3 assigned ID_xxxx
UL32 nDlgId; // Dialog ID
DIAD *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
*/ #if 0 // ----- Examples for AGDI's CallBack functions ----- //--- Example for Force Update:
pCbFunc (AG_CB_EXECCMD, "dir public"); // execute dir public command
//--- Note: almost any dScope command but 'Exit' can be given.
//--- The 'Exit' command should not be executed ! //--- Example for Force Update:
pCbFunc (AG_CB_FORCEUPDATE, NULL);
//--- Note: function returns when update is completed. //--- Example for Set Message String:
pCbFunc (AG_CB_MSGSTRING, "Running..."); // up to 20 characters
//--- up to 20 characters may be displayed in the statusbar pane. //--- Example for DisAssemble Opcodes:
DAAS parms; parms.Adr = 0x10000; // disassemble address
parms.Opc[] = 0xC0;
parms.Opc[] = 0xF0; // MovBZ RH7,R0
parms.Opc[] = ;
parms.Opc[] = ; pCbFunc (AG_CB_DISASM, (void *) &parms); // disassemble...
//--- on return: parms.OpcLen := length of opcode in bytes
//--- parms.szB[] := disassembled instruction in ascii
//--- Note: parms.Adr is used for ascii-address and relative jmps only.
//--- parms.Result always 0. //---Example for DisAssemble to file: /11.1.2005/
DAS_MIXED parms; memset (&parms, , sizeof (parms)); // clear
parms.nStart = (amCODE << ) | (amCODE << ) | 0x0C6A; // start at C:0x0C6A
parms.nEnd = (amCODE << ) | (amCODE << ) | 0x0DE7; // end at C:0x0DE7
parms.nMode = ; // use 'mixed' mode
strcpy (parms.szN, "MixDis.Dis"); // Name of file to create and write
pCbFunc (AG_CB_DISASM_EXT, (void *) &parms); // disassemble to file...
switch (parms.Result) {
case : // Ok.
break;
case : // could not create file
// TODO: error handling
break;
case : // could not write to file (disk full etc.)
// TODO: error handling
break;
}
//------------------------------------------------ typedef struct { // 11.1.2005, DisAssemble Mixed-Mode into File
UL32 nStart; // Start-Address for disassemble
UL32 nEnd; // Stop-Address for disassemble
I32 Result; // 0:=Ok, 1:=can't create file, 2:=file write error
I32 nMode; // 0:=Asm-Mode, 1:=Mixed-Mode
UL32 nRes[]; // reserved
char szN []; // name of file to create and write disassembly
} DAS_MIXED; //--- Example for Inline Assemble:
DAAS parms; parms.Adr = 0x10000; // inline assemble address
strcpy (parms.szB, "MOV [R8+#0x1200],R1"); // instruction to assemble pCbFunc (AG_CB_INLASM, (void *) &parms); // assemble...
//--- on return:
//--- parms.Result = 0 if successful
//--- parms.OpcLen := length of opcode in bytes
//--- parms.Opc[] := 'parms.OpcLen' Opcode bytes
//--- parms.Result != 0 if inline assembly failed
//--- everything of parms but 'Result' is invalid. //--- Example for GetDeviceInfo:
DEV_X66 parms; memset (&parms, , sizeof (parms));
pCbFunc (AG_CB_INLASM, (void *) &parms); // get device info
//--- On return:
//--- values in DEV_X66 structure.
//--- Note:
//--- AppName[] may be used to store a project target specific ini file
//--- AppName[] should be renamed (example: strcat (AppName, "hitex")
//--- before read or write operations can take place. //--- Example for Find Symbol by value: SYMDSC parms; parms.nMask = AG_SYM_LOC | AG_SYMCON; // functions and constants
parms.val = 0x10000; // some value
pCbFunc (AG_CB_SYMBYVAL, (void *) &parms); // search for symbol
//--- On return:
//--- parms.Ok = 1, search was successful
//--- parms.szName[] = name of symbol ('main' for example)
//--- parms.type = type of symbol (AG_TP_FUNC for example)
//--- parms.val = value of symbol
//--- parms.Ok = 0, search failed.
//--- Note: publics are searched only //--- Example for Find Symbol by name:
SYMDSC parms; strcpy (parms.szName, "main");
pCbFunc (AG_CB_SYMBYNAME, (void *) &parms); // search for symbol by name
//--- On return:
//--- parms.Ok = 1, search was successful
//--- parms.szName[] = name of symbol ('main' for example)
//--- parms.type = type of symbol (AG_TP_FUNC for example)
//--- parms.val = value of symbol
//--- parms.Ok = 0, search failed.
//--- Note: publics are searched only //--- Example for Progress-Bar handling: static OIL ProgressBar; //--- initialize progress bar
ProgressBar.pos = ; // initial position
ProgressBar.low = ; // low position percent (0%)
ProgressBar.hig = ; // high position percent (100%)
ProgressBar.label = "Loading Monitor..."; // progress label text
ProgressBar.Job = PROGRESS_INIT; // initialize
pCbFunc (AG_CB_PROGRESS, &ProgressBar); // do initialization. //--- Step 1: display progress bar position:
while (processing) {
// ...
ProgressBar.Job = PROGRESS_SETPOS;
ProgressBar.pos++;
pCbFunc (AG_CB_PROGRESS, &ProgressBar); // set bar to position
// ...
} //--- Step 2: remove progress bar:
ProgressBar.Job = PROGRESS_KILL;
pCbFunc (AG_CB_PROGRESS, &ProgressBar); // kill Progress Bar. #endif // End of CallBack Samples. #if 0 // /30.1.2005/ Logic-Analyzer Example static DWORD SaveAdr; I32 QueryLaSig (AGDI_LA *pLA) {
DWORD nAdr;
DWORD nSize; nAdr = (U32) pLA->nAdr; // Memory-Address
nSize = (U32) pLA->nSize; // Size in Bytes
SaveAdr = nAdr; // Note: this is a hook for the example-code below. //---TODO:
//if (cannot_set tracking-range nAdr...nAdr+nSize-1) {
// strcpy (pLA->szError, "Error-Text"); // Reason for 'not supported'
// return (AGDI_LA_NOTSUPPORTED);
//} //---OK:
return (AGDI_LA_OK); // LA-Signal accepted
} /*
* Given LA-Signal has been killed.
*/
U32 KilledLaSig (AGDI_LA *pLA) {
//---TODO: whatever cleanup is required.
return (AGDI_LA_OK);
} /*
* Send a Data-Record to uVision
* uVision will look for the matching LA-Signal based on the write-address
* and assign the data record to that La-signal.
*/
U32 SendLaDataRecord (AGDI_LAREC *pLA) {
U32 nE; nE = pCbFunc (AG_CB_LAREC_DATA, (void *) pLA); // send data to uVision
switch (nE) {
default:
case : // could not find a matching Signal (pLA->nAdr)
break;
case AGDI_LA_OK:
break;
}
return (nE);
} //---TODO: whenever the target detects a write to an address
// specified by one or more LA-definition specifed address
// ranges, then a data record needs to be prepared and
// sent to uVision // Here is an example which simulates a 1000 hertz sine wave. It is
// assumed that the loaded user program contains a float variable
// such as:
// float f32Test;
//
// That variable can then be specified for logic analyzer in uVision
// Debugging mode in the command window:
//
// LA f32Test; // some float variable in user application
//
// The hooked address 'SaveAdr' is the location of 'f32Test' in memory. static AGDI_LAREC la; static void SineSig (void) {
int i;
double volts, frequ, offs, dur, val; volts = 2.0; // peak-to-peak voltage
offs = 2.5; // voltage offset
frequ = ; // frequency
dur = 0.2; // duration in seconds memset (&la, , sizeof (la));
la.nAdr = SaveAdr; // use the previously hooked memory address '&f32Test'
la.tStamp = ; // simulate the time-stamp
la.totTime = ; // simulate the total running time for ( i = ; i < (dur * ) ; ++i ) {
val = (float) sin (frequ * (((double) la.totTime) / 33e6) * * 3.14159);
la.v.f32 = (float) ((val * volts) + offs); // setup the 'written' value
SendLaDataRecord (&la); // send data to uVision
la.totTime += ; // and incrase 'total time'
la.tStamp += ; // simulate next time-stamp
} // Note: total Time and time-stamp
} U32 _EXPO_ AG_Init (U16 nCode, void *vp) {
U32 nE; nE = ;
switch (nCode & 0xFF00) {
case AG_INITFEATURES: // Initialize & start the target
PlayDead = ; // clear some variables...
... case AG_EXECITEM: // execute various commands
switch (nCode & 0x00FF) {
case AG_QUERY_LASIG: // is LA-Signal acceptable ?
if (vp == NULL) { // NOTE: just for Test...
//---NOTE: vp == NULL is just for test only, it is not a real case !!!
SineSig(); // generate a sine Wave for test data
break; // LA should show the sine wave...
}
nE = QueryLaSig ((AGDI_LA *) vp);
break;
case AG_KILLED_LASIG: // LA-Signal was killed
nE = KilledLaSig ((AGDI_LA *) vp);
break; ...
}
return (nE);
} #endif #if 0 // /26.1.2005/ LOADPARMS-Example
/*
* AG_INITSTARTLOAD with load-parameters Example
*/
LOADPARMS lParms; // LOAD-Parameters U32 _EXPO_ AG_Init (U16 nCode, void *vp) {
U32 nE; nE = ;
switch (nCode & 0xFF00) {
case AG_INITFEATURES: // Initialize & start the target
PlayDead = ; // clear some variables...
// ...
break; case AG_INITITEM: // init item
switch (nCode & 0x00FF) {
case AG_INITMENU: // init extension menu
*((DYMENU **) vp) = (DYMENU *) Menu;
break;
// ...
case AG_INITCALLBACK: // pointer to callback function
pCbFunc = (pCBF) vp; // call-back function of s166
break; case AG_INITSTARTLOAD: // about to start 'load file'
if (vp != NULL) { // Load-Parameters specified
lParms = *((LOADPARMS *) vp);
// lParms.szFile[] : full path name of App to load
// lParms.Incremental : 1:= incremental load
// lParms.NoCode : 1:= load debug info only, no code (currently not used by uVision)
// TODO: process the given load parameters if required... }
break; case AG_INITENDLOAD: // Load is now completed.
break; }
break;
// ...
case AG_GETFEATURE: // uVision2 want's details about features...
// ... }
return (nE);
}
#endif // menu item identifiers for external target DLLs: #define AG_EXT_CMD_DEBUG_VIEW_TRACE_RECORDING 32000
#define AG_EXT_CMD_DEBUG_ENA_DISA_BREAKPOINTS 32001
#define AG_EXT_CMD_DEBUG_BREAKPOINTS 32002 #ifdef __cplusplus
}
#endif #endif // __AGDI__INCED___

Keil AGDI Header File的更多相关文章

  1. 【iOS】The differences between Class Extension and Header File 类扩展与头文件的区别

    . As the name suggests, they extend the class. A class continuation is another name. The class exten ...

  2. auto make System.map to C header file

    #!/bin/bash # auto make System.map to C header file # 说明: # 该脚本主要是将Linux内核生成的System.map文件中的符号.地址存入结构 ...

  3. c++预编译问题:fatal error C1083: Cannot open precompiled header file: 'Debug/DllTest.pch': No such file or d

    1)单独编译StdAfx.cpp 2)编译所有(即按Ctrl+F7) 这时因为该模块没有包括预编译头文件“stdafx.h”的缘故.VC用一个stdafx.cpp包含头文件stdafx.h,然后在st ...

  4. 进度记录 和 安装imagick时Cannot locate header file MagickWand.h错误的解决

    修改php.ini文件,已使php支持扩展的功能 [root@localhost imagick-2.2.2]# ./configure --with-php-config=/usr/local/ph ...

  5. fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory

    fatal error C1083: Cannot open precompiled header file: 'Debug/xxoo.pch': No such file or directory ...

  6. About Why Inline Member Function Should Defined in The Header File

    About why inline member function should defined in the header file. It is legal to specify inline on ...

  7. Header File Dependencies

    [Header File Dependencies] 什么时候可以用前置声明替代include? 1.当 declare/define pointer&reference 时. 2.当 dec ...

  8. fatal error C1853: '<filename>' is not a precompiled header file

    当编译c和c++混合的项目时,会出现如下类似的错误 fatal error C1853: '<filename>' is not a precompiled header file 解决方 ...

  9. 原文:I don’t want to see another “using namespace xxx;” in a header file ever again

    http://stackoverflow.com/questions/5849457/using-namespace-in-c-headers http://stackoverflow.com/que ...

随机推荐

  1. 嵌入式 uboot以及kernel添加看门狗临时记录(个人记录未整理乱)

    Uboot_Kernerl_Add_Watch_Dog: U-Boot 2010.06 (Nov 01 2013 - 15:28:44) DRAM:  128 MiBCheck spi flash c ...

  2. [Papers]NSE, $u$, Lorentz space [Bjorland-Vasseur, JMFM, 2011]

    $$\bex \int_0^T\frac{\sen{\bbu}_{L^{q,\infty}}^p}{\ve+\ln \sex{e+\sen{\bbu}_{L^\infty}}}\rd s<\in ...

  3. 搭建Eclipse、Resin Web开发环境

    搭建Eclipse.Resin Web开发环境 一.当然是安装java开发环境 参看: Java环境的搭建 http://www.cnblogs.com/ghj1976/archive/2010/04 ...

  4. BITMAP CONVERSION FROM ROWIDS

    在有些执行计划中,可以会看到 BITMAP CONVERSION FROM ROWIDS这样的东东,也许你会感觉奇怪,我没有使用位图索引怎么出现了bitmap.我通过一个sql和大家分析下原因:sql ...

  5. Leetcode 225 Implement Stack using Queues

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  6. Spring Boot 学习笔记 - 认识Spring Boot框架

    因各种原因,.NET前端工程师重新接触JAVA,真是向全栈的路上又迈出了无奈的一步. 下面正文: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初 ...

  7. sqoop 初用

    http://blog.csdn.net/dbanote/article/details/8907650 目前版本的Sqoop中,使用自由形式查询导入,只提供简单的查询,没有复杂的和“OR”条件查询在 ...

  8. Wireshark基本介绍及应用tcp

    wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...

  9. [转] js prototype详解

    JavaScript能够实现的面向对象的特征有:·公有属性(public field)·公有方法(public Method)·私有属性(private field)·私有方法(private fie ...

  10. Java基础 —— CSS

    CSS:层叠样式表(Cascading Style Sheets) --> 提高显示功能,定义样式 html提供了div与span,只为了封装文本数据,div为一行数据,span为行内的数据. ...