亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? agdi.cpp

?? Cypress公司的CH372EVT芯片基于的USB1。1的驅動
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
#include "stdafx.h"
#include "SampTarg.h"

#define _IN_TARG_               // define if used within target
#include "Agdi.h"

#include "ComTyp.h"
#include "Collect.h"
#include <stdio.h>
#include "resource.h"



RG51                REG51;  // 8051 Registers
BYTE             initflag;
BYTE             bootflag;
BYTE             PlayDead;  // Disables the driver after comm breaks down.
BYTE          RegUpToDate;  // Flag: mark driver is 'dead' (disconnected)



/*
 * AGDI-Data
 */

       SUPP             supp;       // supported features
       UC8              iRun;       // target is currently executing
       UC8           StopRun;       // Flag: stop execution
       UC8            GoMode;
       AG_BP        **pBhead;
       UL32          *pCURPC;
       UL32            curPC;

       AG_BP            *pBX;       // used for temporary Breakpoint
       UL32          abreaks;       // number of code-address Bp's
       UL32          cbreaks;       // number of conditional Bp's
       UL32          wbreaks;       // number of access Bp's
       UL32      SetBrkCount;
static const char szNBP[] = "*** AGDI-Error: can't setup break at 0x%08X\n";


       UL32           Uv2Msg;       // Uv2-registered Message token
       pCBF          pCbFunc;       // call-back function of s166
extern DYMENU         Menu[];       // forward

// if an extension modeless dialog is activated, then '*pHwnd' *MUST*
// receive the HWND (m_hWnd in MFC) of the dialog.  If the dialog
// looses focus or is closed, then '*pHwnd' *MUST* be set to NULL.
// This is to ensure the proper message chain within Uv2.

       HWND          *pHwnd;
       HWND           hMfrm;        // parent handle (CMainFrame)
       HMODULE        hInst;        // this DLL's instance handle

extern void InitRegs (void);        // forward





//--- Memory cache handling.
//--- Simulate the (non-existing) target memory

struct MMM  mslots [520];  //  code: 0x000...0x0FF (max. 16MB)
                           // xdata: 0x100...0x1FF (max. 16MB)
                           //   sfr: 0x200
                           // idata: 0x201
                           // remaining slots reserved for future use.


/*
 * free any allocated memory before driver shutdown.
 *  Note: mslots[] must not be free'd by our driver.
 */

static void FreeCache (void)  {
//---TODO: free memory resources, if any
}


/*
 * Map full address to Cache-Slot-number:
 */

static DWORD SlotNo (DWORD n)  {
  DWORD   z;

  switch (n >> 24)  {                 // high byte of address holds mSpace.
    case amDATA:
      if ((n & 0xFF) >= 0x80)  {      // SFR-address
        n = 0x200;                    // sfr slot at 0x200
        break;
      }
    case amIDATA:
      n = 0x201;                      // idata slot at 0x201
      break;
    case amPDATA:
    case amXDATA:
      n = 0x100 + ((n >> 16) & 0xFF); // xdata slots start at 0x0100
      break;
    default:                          // code   
      z = (n >> 16) & 0xFF;
      if (z >= amBANK0 && z <= amBANK31)  {
        n = z;                        // banking: slots 0x80...0x9F
      }
      else  {                         // code slot (0x00...0xFF)
        n = z;
      }
      break;
  }
  return (n);
}


/*
 * deletes the AG_ATR_UPTD attribute bit in all mapped memory areas
 */

void InvalCache (void)  {
  int        i, k;
  struct MMM  *pM;

//---Note: code slots 0x00...0xFF are not invalidated.

//---invalidate xdata memory:
  for ( i = 0x100 ; i < 0x200 ; ++i )  {   // invalidate xdata slots
    pM = &mslots [i];
    if (!pM->mem) continue;                // not mapped
    for ( k = 0 ; k < 0x10000 ; ++k )  {   // these segs are 64K each
      pM->atr [k] &= ~AG_ATR_UPTD;         // clear 'data valid' bit
    }
  }

//---invalidate sfr memory:
  pM = &mslots [0x200];                    // SFR slot
  for ( k = 0x80 ; k < 0x100 ; ++k )  {    // just 128 bytes d:0x80...d:0xff
    pM->atr [k] &= ~AG_ATR_UPTD;           // clear 'data valid' bit
  }
  
//---invalidate idata memory:
  pM = &mslots [0x201];                    // idata slot
  for ( k = 0 ; k < 0x100 ; ++k )  {       // i:0x00...i:0xFF
    pM->atr [k] &= ~AG_ATR_UPTD;           // clear 'data valid' bit
  }
}


/*
 * Cache data
 */

void CacheData (BYTE *pB, DWORD nAdr, DWORD nCnt)  {
  U16       *pA;
  BYTE      *pM;
  DWORD   nSlot, aMask;

  if (pB == NULL || nCnt == 0) return;
  for ( ; nCnt != 0 ; --nCnt, ++nAdr, ++pB )  {
    nSlot = SlotNo (nAdr);    
    switch (nAdr >> 24)  {
      case amDATA:
      case amPDATA:
      case amIDATA:
        aMask = 0xFF;
        break;
      default:
        aMask = 0xFFFF;
        break;
    }
    pA = mslots [nSlot].atr;
    pM = mslots [nSlot].mem;
    if (!pA || !pM) continue;            // both of them need to be valid
    pA [nAdr & aMask] |= AG_ATR_UPTD;    // 'up to date' attribute
    pM [nAdr & aMask]  = *pB;            // the data
  }
}


/*
 * clear 'AG_ATR_UPDT' for the given range
 */

void ClearCaR (DWORD nAdr, DWORD nCnt)  {
  U16       *pA;
  DWORD   nSlot, aMask;

  for ( ; nCnt != 0 ; --nCnt, ++nAdr )  {
    nSlot = SlotNo (nAdr);    
    switch (nAdr >> 24)  {
      case amDATA:
      case amPDATA:
      case amIDATA:
        aMask = 0xFF;
        break;
      default:
        aMask = 0xFFFF;
        break;
    }
    pA = mslots [nSlot].atr;
    if (pA != NULL)  {                     // attributes are valid.
      pA [nAdr & aMask] &= ~AG_ATR_UPTD;   // clear 'up to date' attribute
    }
  }
}



/*
 * Check if chached data is valid.
 */

int CacheValid (BYTE *pB, DWORD nAdr, DWORD nCnt)  {
  int        n1, n2;
  U16       *pA;
  BYTE      *pM;
  DWORD   nSlot,aMask;

  if (pB == NULL) return (0);
#if 0      // if 'CACHE_CODE' is implemented in target-setup...
  if ((nAdr >> 24) == amCODE)  {        // access code
    if (!(MonConf.Opt & CACHE_CODE))  { // caching is off,
      return (0);                       // cancel looking into cache.
    }
  }
#endif
#if 0      // if 'CACHE_MEM' is implemented in target-setup...
  else  {
    if (!(MonConf.Opt & CACHE_MEM))  {
      return (0);                       // read caching is off
    }
  }
#endif

  n1 = nCnt;
  for ( n2 = 0 ; n1 != 0 ; ++n2, --n1, ++nAdr )  {
    nSlot = SlotNo (nAdr);    
    switch (nAdr >> 24)  {
      case amDATA:
      case amPDATA:
      case amIDATA:
        aMask = 0xFF;
        break;
      default:
        aMask = 0xFFFF;
        break;
    }
    pA = mslots [nSlot].atr;
    pM = mslots [nSlot].mem;
    if (!pA || !pM) return (0);          // both of them need to be valid
    if (!(pA [nAdr & aMask] & AG_ATR_UPTD))  {
      return (0);                        // cache data invalid.
    }
    pB [n2] = pM [nAdr & aMask];         // copy data to user buffer
  }
  return (1);                            // cached data valid.
}


/*
 * Map Memory
 */

static void MapSeg (DWORD nSeg, DWORD nSof, DWORD nLen, WORD16 nAtr)  {
  nSeg;
  nSof;
  nLen;
  nAtr;
#if 0
  struct MMM   *s;
  WORD16      *pA;
  DWORD         n;

  if (nLen == 0) return;
  n = SlotNo (nSeg);
  s = &mslots [n];
  if (s->mem == NULL)  {                 // if not already mapped...
    s->mem = (UC8 *) calloc (_MSGM, 1);       // allocate 64k block
    s->atr = (U16 *) calloc (_ASGM, 1);       // and associated attributes
    if (s->mem == NULL || s->atr == NULL)  {  // malloc failed.
      s->mem = NULL;
      s->atr = NULL;
      return;
    }
  }

  pA = &s->atr [nSof];
  for ( n = 0 ; n < nLen ; ++n, ++pA )  {     // initialize attribs
    *pA &= (AG_ATR_READ | AG_ATR_WRITE | AG_ATR_EXEC | AG_ATR_EXTR | AG_ATR_UPTD);
    *pA |= nAtr;
  }
#endif
}


/*
 * Map a cache segment descriptor.
 */

DWORD MMapMem (UL32 nAtr, UL32 nAdr, UL32 nLen)  {
  if (nAtr == 0)  {
    nAtr = AG_ATR_READ | AG_ATR_WRITE | AG_ATR_EXEC;
  }
  MapSeg (nAdr, nAdr & 0xFFFFFF, nLen, (U16) nAtr);
  return (0);
}


/*
 * Get Pointer to Attribute Segment for address 'nAdr'
 */

U16 *MGetAttrSeg (UL32 nAdr)  {
  U16     *pA;
  DWORD     n;

  n  = SlotNo (nAdr);           // map address to cache slot
  pA = mslots [n].atr;          // and return the attribute segment.
  return (pA);
}


/*
 * Get Pointer to Attributes for addresss 'nAdr'
 */

U16 *MGetAttr (UL32 nAdr)  {
  U16     *pA;

  pA = MGetAttrSeg (nAdr);      // get attribute segment
  if (pA != NULL)  {
    pA = &pA [nAdr & 0xFFFF];   // address of attributes for address 'nAdr'
  }
  return (pA);
}


void WriteAttr (UL32 nAdr, UL32 aMask, UL32 oMask, UL32 nMany)  {
  U16    *pA;

  for ( ; nMany != 0 ; --nMany, ++nAdr )  {
    pA = MGetAttrSeg (nAdr);
    if (pA == NULL) continue;
    *pA &= ~aMask;
    *pA |=  oMask;
  }
}


static void InitCache (void)  {
}

//--- End of c/i-chache


/*
 * Output a message line into uVision2's command window
 */

void txtout (char *fmt, ...)  {
  va_list   marker;
  char      txtbuf [2048];

  va_start (marker, fmt);
  vsprintf (&txtbuf[0], fmt, marker);
  SendMessage (hMfrm, Uv2Msg, MSG_UV2_CMDLINE, (LPARAM) &txtbuf[0]);
}




/*
 * Show target setup dialog
 */

static void ConfDisp (DYMENU *pM)  {
  struct MonConf oCnf;
  int     i;

  pM;
  oCnf = MonConf;              // save current setup
  i    = DoDlgSetup();         // start setup dialog

  if (i == IDOK)  {
    if (memcmp (&MonConf, &oCnf, sizeof (oCnf)) != 0)  {   // configuration has changed
      i = MessageBox (hMfrm,"Configuration has been changed, take new values ?",
                             "Target Monitor Notification",
                             MB_OKCANCEL | MB_ICONWARNING); 
      if (i == IDCANCEL)  {
        MonConf = oCnf;         // restore previous configuration
      }
      if (i == IDOK)  {         // take new configuration
        if (ReInitTarget())  {  // failed...
          StopTarget();         // final shutdown
          PostMessage (hMfrm, Uv2Msg, MSG_UV2_TERMINATE, 0);
        }
      }
    }
  }
  else  {                       // cancelled: restore previous config
    MonConf = oCnf;
  }
}




/*
 * Extension Menues and Dialogs
 */


//--- this relates to TestDlg.cpp: ------------
extern void   MdUpdate (void);       // Dialog Update function
extern void     MdKill (DIAD *pM);   // Dialog Kill function
extern void     MdShow (DYMENU *pM); // Show/Hide modeless Dialog

DIAD ModDlg  = { 0, NULL, NULL, { -1,-1,-1,-1, }, MdUpdate, MdKill };
//---------------------------------------------

static DYMENU Menu[] =  {
 {  1, "Target Settings", ConfDisp, 0, 0,         },  // modal dialog
 {  1, "Modeless Dialog",   MdShow, 0, 0, &ModDlg },  // modeless dialog
 { -1,            /* End of menu list */          },
};



/*
 * uVision2 want's to update all modeless dialogs.
 */

void DlgUpdate (void)  {        // Update all modeless extension dialogs
  DYMENU    *pM;

  pM = &Menu[0];
  while (pM->nDelim != -1)  {             // while not end of Menu-list
    if (pM->pDlg && pM->pDlg->Update)  {  // if dialog has been created
      pM->pDlg->Update();                 // then call it's update function
    }
    ++pM;                                 // next menu entry.
  }
}


/*
 * Need to close all currently open modeless dialogs
 */

void CloseAllDlg (void)  {
  DYMENU    *pM;

  pM = &Menu[0];
  while (pM->nDelim != -1)  {
    if (pM->pDlg && pM->pDlg->hw)  {        // Dialog is visible
      pM->pDlg->Kill (pM->pDlg);            // update contents
    }
    ++pM;
  }
}




//--- Interface functions between AGDI and target follow
//------------------------------------------------------


/*
 * Read 'nMany' bytes out of data space into buffer 'pB'
 *  return: 0:=Ok, else 'ErrorAddress | (amDATA << 24)'
 */

UL32 ReadData (BYTE *pB, DWORD nAdr, DWORD nMany)  {
  if (CacheValid (pB, nAdr, nMany))  {   // use cache, if possible
    return (0);
  }
//---TODO:
//---if Ok, then return 0, else error-address
//   adr |= (amDATA << 24);   // make address uVision2 conforming
  return (0);                 // say Ok.
}

/*
 * Read 'nMany' bytes out of the idata space into buffer 'pB'
 *  return: 0:=Ok, else 'ErrorAddress | (amIDATA << 24)'
 */

UL32 ReadIdata (BYTE *pB, DWORD nAdr, DWORD nMany)  {
  if (CacheValid (pB, nAdr, nMany))  {   // use cache, if possible
    return (0);
  }
//---TODO:
//---if Ok, then return 0, else error-address
//   adr |= (amIDATA << 24);  // make address uVision2 conforming
  return (0);                 // say Ok.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品一卡两卡| 亚洲伊人伊色伊影伊综合网| 不卡av在线网| 久草精品在线观看| 亚洲aaa精品| 一区二区久久久久| 国产精品传媒入口麻豆| 久久久久久电影| 欧美一区二区三区人| 欧美浪妇xxxx高跟鞋交| 国产精品久久毛片a| 麻豆国产欧美日韩综合精品二区| 五月综合激情网| 麻豆91在线播放免费| 欧洲一区在线电影| 欧美日韩精品一区二区三区蜜桃| 欧美精品视频www在线观看| 国产精品人成在线观看免费| 亚洲激情综合网| 亚洲成人黄色影院| 色悠久久久久综合欧美99| 欧美在线免费观看亚洲| 国产精品人妖ts系列视频| 国产成人精品影视| 一本色道综合亚洲| 自拍偷拍国产亚洲| 天天综合色天天综合色h| 色天使色偷偷av一区二区| 1024国产精品| 久久国内精品视频| 91视频免费看| 欧美精品久久99| 亚洲一级二级三级在线免费观看| 99国产精品久久| 日韩免费性生活视频播放| 国产色综合一区| 亚洲午夜久久久久中文字幕久| 久久疯狂做爰流白浆xx| 日韩一卡二卡三卡| 亚洲精品福利视频网站| 色综合天天狠狠| 洋洋av久久久久久久一区| 色欧美88888久久久久久影院| 《视频一区视频二区| 不卡的av中国片| 一区二区三区欧美日韩| 欧美美女激情18p| 蜜桃传媒麻豆第一区在线观看| 精品久久久三级丝袜| 亚洲一区二区在线播放相泽| 91精品国产综合久久久久久久 | 欧美日韩国产片| 亚洲高清一区二区三区| 日韩一区二区在线免费观看| 国产麻豆一精品一av一免费| 欧美日韩一区高清| 国产精品丝袜一区| 91麻豆国产福利精品| 亚洲成人激情自拍| 亚洲精品一区二区三区精华液| 石原莉奈在线亚洲二区| 99精品欧美一区二区三区小说 | 麻豆高清免费国产一区| 久久久久久久久久久久久久久99| 99久久久国产精品免费蜜臀| 亚洲成人tv网| 日本一区二区三区免费乱视频| 久久99精品国产.久久久久久| 欧美经典一区二区| 激情五月播播久久久精品| 91精品国产色综合久久久蜜香臀| 国产一区二区精品久久91| 亚洲欧美日韩一区二区三区在线观看| 国产在线精品一区二区| 一区二区三区欧美激情| 欧美变态tickling挠脚心| 91美女在线看| 国产精品1024久久| 午夜欧美在线一二页| 国产精品丝袜久久久久久app| 欧美一区二区三区精品| 成人福利视频在线| 久久精品国产澳门| 亚洲国产成人91porn| 欧美国产综合色视频| 日韩一区二区三区观看| 91福利国产成人精品照片| 伊人一区二区三区| 久久精品视频一区二区三区| 欧美日韩精品系列| 色嗨嗨av一区二区三区| 成人一二三区视频| 亚洲黄色在线视频| 欧美激情一区二区三区蜜桃视频| 欧美一级专区免费大片| 欧美色偷偷大香| 91丨九色丨黑人外教| 国产成人精品1024| 精品一二三四在线| 日韩成人dvd| 精品电影一区二区三区| 欧美高清激情brazzers| 欧洲生活片亚洲生活在线观看| 国产99久久久国产精品免费看| 亚洲视频每日更新| 久久久久久99久久久精品网站| 日韩精品一区二区三区在线观看| 欧美日韩不卡一区二区| 欧美日韩视频不卡| 欧美在线观看禁18| 91精品福利在线| 欧美视频精品在线| 国产乱国产乱300精品| 亚洲美女一区二区三区| 亚洲欧洲国产专区| 中文字幕中文字幕在线一区 | 久久九九影视网| 26uuu亚洲婷婷狠狠天堂| av午夜一区麻豆| 日韩在线一区二区三区| 尤物视频一区二区| 亚洲一卡二卡三卡四卡| 午夜精品久久久久久久久久| 婷婷亚洲久悠悠色悠在线播放| 天天操天天干天天综合网| 全国精品久久少妇| 中文字幕亚洲欧美在线不卡| 亚洲欧洲日韩综合一区二区| 一区二区在线电影| 偷拍亚洲欧洲综合| 久久国产日韩欧美精品| 国产成人精品aa毛片| 99精品久久只有精品| 欧美日韩一区中文字幕| 日韩网站在线看片你懂的| 久久久久久久综合日本| 中文字幕一区二区不卡| 亚洲午夜精品在线| 久久国产精品一区二区| 国产成人精品亚洲午夜麻豆| 色天使久久综合网天天| 欧美一级久久久| 亚洲国产电影在线观看| 亚洲国产欧美另类丝袜| 精品一区二区影视| 国产电影一区在线| 欧美日韩一级视频| 久久一夜天堂av一区二区三区 | 亚洲va欧美va人人爽| 久久精品免费观看| 播五月开心婷婷综合| 91精品国模一区二区三区| 国产欧美日韩三级| 亚洲成人在线网站| 成人美女视频在线看| 欧美一区二区在线免费观看| 国产人久久人人人人爽| 亚洲 欧美综合在线网络| 国产成人啪午夜精品网站男同| 欧美午夜寂寞影院| 国产精品萝li| 蜜臀av一区二区在线免费观看| 91在线你懂得| 久久色在线观看| 亚洲高清视频中文字幕| 国产东北露脸精品视频| 7777精品伊人久久久大香线蕉的| 国产精品天美传媒| 久久成人精品无人区| 欧美性大战久久久| 国产精品久久久久久久久免费相片 | 亚洲另类一区二区| 国产美女视频91| 日韩亚洲欧美在线观看| 有码一区二区三区| 99在线视频精品| 久久久久久免费网| 久久不见久久见中文字幕免费| 欧美在线制服丝袜| 亚洲免费观看视频| 成人免费看视频| 国产日韩欧美麻豆| 国产真实精品久久二三区| 日韩西西人体444www| 日本怡春院一区二区| 欧美福利视频一区| 亚洲成av人片在线观看无码| 欧美中文字幕一区二区三区亚洲| 亚洲人精品午夜| 一本色道综合亚洲| 亚洲免费观看视频| 欧美中文字幕亚洲一区二区va在线| 专区另类欧美日韩| 一本色道a无线码一区v| 国产精品久久久久久亚洲毛片| 国产不卡一区视频| 欧美激情一区二区三区不卡| 处破女av一区二区| 中文字幕人成不卡一区| 色噜噜偷拍精品综合在线|