📄 agdi.cpp
字号:
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.
}
/*
* Read 'nMany' sfr values out of sfr-data space into buffer 'pB'
* return: 0:=Ok, else 'ErrorAddress | (amDATA << 24)'
*/
UL32 ReadSFR (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 xdata space into buffer 'pB'
* return: 0:=Ok, else 'ErrorAddress | (amXDATA << 24)'
*/
UL32 ReadXdata (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.
}
/*
* Read 'nMany' bytes out of the code space into buffer 'pB'
* return: 0:=Ok, else 'ErrorAddress | (amCODE << 24)'
*/
UL32 ReadCode (BYTE *pB, DWORD nAdr, DWORD nMany) {
if (CacheValid (pB, nAdr, nMany)) { // use cache, if possible
return (0);
}
else {
memset (pB, 0, nMany); // for now, we return 0 bytes (NOP's)
}
//---TODO:
//---if Ok, then return 0, else error-address
// adr |= (amCODE << 24); // make address uVision2 conforming
return (0); // say Ok.
}
/*
* Write 'nMany' bytes of code into target
* return: 0:=Ok, else 'ErrorAddress | (amCODE << 24)'
*/
UL32 WriteCode (BYTE *pB, DWORD nAdr, DWORD nMany) {
//---TODO:
//---if Ok, then return 0, else error-address
// adr |= (amCODE << 24); // make address uVision2 conforming
return (0); // say Ok.
}
/*
* Write 'nMany' bytes of xdata into target
* return: 0:=Ok, else 'ErrorAddress | (amXDATA << 24)'
*/
UL32 WriteXdata (BYTE *pB, DWORD nAdr, DWORD nMany) {
//---TODO:
//---if Ok, then return 0, else error-address
// adr |= (amXDATA << 24); // make address uVision2 conforming
return (0); // say Ok.
}
/*
* Write 'nMany' bytes of idata into target
* return: 0:=Ok, else 'ErrorAddress | (amIDATA << 24)'
*/
UL32 WriteIdata (BYTE *pB, DWORD nAdr, DWORD nMany) {
//---TODO:
//---if Ok, then return 0, else error-address
// adr |= (amIDATA << 24); // make address uVision2 conforming
return (0); // say Ok.
}
/*
* Write 'nMany' bytes of data into target
* return: 0:=Ok, else 'ErrorAddress | (amDATA << 24)'
*/
UL32 WriteData (BYTE *pB, DWORD nAdr, DWORD nMany) {
//---TODO:
//---if Ok, then return 0, else error-address
// adr |= (amDATA << 24); // make address uVision2 conforming
return (0); // say Ok.
}
/*
* Write 'nMany' sfr's to target
* return: 0:=Ok, else 'ErrorAddress | (amDATA << 24)'
*/
UL32 WriteSFR (BYTE *pB, DWORD nAdr, DWORD nMany) {
//---TODO:
//---if Ok, then return 0, else error-address
// adr |= (amDATA << 24); // make address uVision2 conforming
return (0); // say Ok.
}
/*
* Initialize your target communication
* Return 0 if Ok, 1 if failed.
*/
U32 InitTarget (void) {
//---TODO:
return (0); // say 'Ok.'
}
/*
* Target settings have changed (Baudrate or ComPort for example)
* Return 0 if Ok, 1 if failed.
*/
U32 ReInitTarget (void) {
//---TODO: shutdown target
//--- reinit communication with current 'MonConf' values
return (0); // say 'Ok.'
}
/*
* Stop your target communication
* Free all resources (dynamic memory, ...)
*/
void StopTarget (void) {
FreeCache(); // free allocated cache memory.
//---TODO: add code for cleanup
}
/*
* Reset your target. Set PC to whatever required value
*/
void ResetTarget (void) {
//---TODO: add code for target reset
}
/*
* Read PC out of target
*/
UL32 ReadPC (void) {
UL32 nPC;
//---TODO: read PC out of target
nPC = REG51.nPC & 0xFFFF; // we use shadow PC for now...
nPC |= (amCODE << 24); // C:0xnnnn
return (nPC);
}
/*
* Write PC out to target
*/
void WritePC (UL32 nPC) {
//---TODO: write PC to target
REG51.nPC = nPC; // keep in shadow registers
}
/*
* Read all registers out of target and fill the REG51 structure
*/
void GetRegs (void) {
if (RegUpToDate) return; // already up to date
if (iRun) return; // currently executing, can't access
curPC = REG51.nPC = ReadPC();
//---TODO: fetch regs from target and put them into REG51
//---if connection is broken for some reason, then set PlayDead:=1 !
}
/*
* Write all registers to target
*/
void SetRegs (RG51 *pR) {
//--- write pR->Rn[0] ... pR->Rn[7]
//--- write pR->sp, pR->psw, pR->b, pR->acc, pR->dpl, pR->dph, pR->nPC
WritePC (pR->nPC);
REG51 = *pR;
//---if connection is broken for some reason, then set PlayDead:=1 !
}
/*
* Stop execution of user program
*/
U32 StopExec (void) {
if (iRun) { // if currently executing
//---TODO: Stop exec
//---if successful, return (1), else (0)
}
return (1); // 'Stopped'
}
/*
* Invalidate everything which may be invalid after Go or Step
* (Registers, Caches, etc.)
*/
void Invalidate (void) {
RegUpToDate = 0; // invalidate Registers
ClearCaR ((amDATA << 24) | 0x00, 0); // invalidate data-cache
ClearCaR ((amIDATA << 24) | 0x80, 128);// invalidate idata-cache
ClearCaR ((amXDATA << 24) | 0x0000, 0x10000);// invalidate xdata-cache
}
/*
* Execute a single instruction, return 1 if ok, else 0
*/
UL32 Step (void) {
//--TODO:
return (1);
}
/*
* Start execution. Stop when a Bp is reached
*/
void GoCmd (void) {
//--TODO:
}
/*
* Set/Clear Breakpoint at address pB->Adr
*/
int SetClrBp (int set, AG_BP *pB) {
int nR;
nR = 1;
if (set) { // set address break
//---TODO: give target a message about Set-Bp at address 'pB->Adr'
//--- if ok, then return (1), else (0)
// if (failed) {
// MessageBeep (MB_OK);
// txtout ((char *) szNBP, pB->Adr);
// nR = 0;
// }
}
else { // clear address break
//---TODO: give target a message about Clear-Bp at address 'pB->Adr'
//--- if ok, then return (1), else (0)
}
return (nR);
}
//--- Flash Download interface functions follow
//------------------------------------------------------
/*
* Initialize Flash programmer, download programmer firmware.
* Return 0 if Ok, 1 if failed.
*/
int InitProgrammer (void)
{
FlashProg = 1; // we have started the Flash Programmer
//---TODO: Add your initialization code here
return (0); // say 'Ok.'
}
/*
* Stop Flash programmer, disconnect device power
* Return 0 if Ok, 1 if failed.
*/
int ExitProgrammer (void)
{
if (!FlashProg) return (0); // if Already done, just return
//---TODO: Add your deinitialization code here
//---If insertion socket is used for target Flash, make sure that all address,
//---data and control pins are held low and target VCC is disconnected here.
FlashProg = 0;
return (0); // say 'Ok.'
}
/*
* Enter programming mode for the flash device
* Return 0 if Ok, 1 if failed.
*/
int EnterProgMode (void)
{
//---TODO: Add code for activating programming mode or just return if not needed
return (0); // say 'Ok.'
}
/*
* Check device ID
* Return 0 if Ok, 1 if failed.
*/
int CheckDevID (void)
{
//---TODO: Add code to Read device ID and verify device type
return (0); // say 'Ok.'
}
/*
* Erase the flash device
* Return 0 if Ok, 1 if failed.
*/
int EraseFlash (void)
{
//---TODO: Add Flash Erase code here
return (0); // say 'Ok.'
}
/*
* Write data to Flash device
* Return 0 if Ok, 1 if failed.
*/
int WriteToFlash (DWORD nAdr, BYTE *pb, DWORD nCnt, DWORD *eAdr)
{
//---TODO: Add Flash Write Code here
//---Note: nAdr has uVision2 address convention
//---if write fails, set write error addres and return 1
*eAdr = 0;
return (0); // say 'Ok.'
}
/*
* Verify the content of Flash device
* Return 0 if Ok, 1 if failed.
*/
int VerifyFlash (DWORD nAdr, BYTE *pb, DWORD nCnt, DWORD *eAdr)
{
//---TODO: Verify Flash Code here
//---Note: nAdr has uVision2 address convention
//---if verify fails, set verify error addres and return 1
*eAdr = 0;
return (0); // say 'Ok.'
}
/*
* Send text Error message to Build window
*/
static void PgmError (char *pCmd) {
txtout ("*** Error: %s\n", pCmd);
}
/*
* Initialize target Flash device.
* Return 0 if Ok, 1 if failed.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -