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

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

?? monitor.c

?? 這個是嵌入式arm系列的一個bootloader程序。對需要編寫bootloader的很有參考價值
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*



Module Name:

    Monitor.c

Abstract:
	Implements platform debug routines.
	

*/

#include <windows.h>
#include <halether.h>
#include <pehdr.h>
#include <romldr.h>
#include <nkintr.h>

#include "XSC1BD.h"
#include "monitor.h"
#include "cfload.h"
#include "ethdown.h"
#include "sredown.h"

extern void Launch(unsigned int uAddr);
extern DWORD dwLaunchAddr;


static ULONG	gDisplayAddr;
static BYTE		gSize;
ULONG			gRamBufStart;		// starting address of available RAM
ULONG			gRamBufEnd;  		// ending address of available RAM

INT
MonitorProgram(void)
{
	TCHAR stringData[0x80];
	TCHAR addrString[11];
	LPTSTR stringPtr;
	ULONG modifyAddr;
	ULONG nCacheAddr;
	ULONG dataValue;
	ULONG length;
	ULONG launchAddr;
	ULONG value;
	ULONG endAddr;
	
	ShowHelpMessage();
	
	while (TRUE)
	{
		EdbgOutputDebugString("\r\n Command:>");

		GetInputBuffer(stringData);
		// Determine and call the corresponding routine
		stringPtr = stringData;	
		
			switch(*stringPtr++)
		{
			case 'c':
			case 'C':
				// Copy data to flash or ram.
				{
					TCHAR	src[20], dst[20], len[20];
					ULONG	source, destination, length;

					stringPtr = ParseString(stringPtr, src);
					stringPtr = ParseString(stringPtr, dst);
					stringPtr = ParseString(stringPtr, len);
					if (Asc2Int(src, &source) && Asc2Int(dst, &destination) && Asc2Int(len, &length))
					{
						EdbgOutputDebugString("Source: 0x%x; Destination 0x%x; Length: 0x%x\r\n",
							source, destination, length);

						if (FlashCheckAddr(destination, length))
						{
							EdbgOutputDebugString("Start Copy Data....\r\n");
							FlashWrite(destination, source, length);
						}
						else
						{
							memcpy((void *)destination, (void *)source, length);
						}
						EdbgOutputDebugString("Done.\r\n");
					}
					else
					{
						EdbgOutputDebugString("Invalid parameter.\r\n");
					}
				}
				break;
			case 'd':
			case 'D':
				//EdbgOutputDebugString("BootGetMemory!\r\n");
				stringPtr = ParseString(stringPtr, addrString);
				if (addrString[0] != (TCHAR) NULL)
				{
					//EdbgOutputDebugString("First = %s!\r\n", addrString);
					if (!Asc2Int(addrString, &value))
					{
						switch (addrString[0])
						{
							case 'b':
							case 'B':
								gSize = sizeof(BYTE);
								break;
							case 'w':
							case 'W':
								gSize = sizeof(WORD);
								break;
							case 'd':
							case 'D':
								gSize = sizeof(DWORD);
								break;
							default:
								break;
						}

						stringPtr = ParseString(stringPtr, addrString);
					}
					else
					{
						gSize = sizeof(DWORD);
					}
					if ((addrString[0] != (TCHAR) NULL) && Asc2Int(addrString, &value))
					{
						gDisplayAddr = value;
					}
					stringPtr = ParseString(stringPtr, addrString);
					if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &length))
					{
						length = 64;
					}
				}
				else
				{
					length = 64;
				}
				EdbgOutputDebugString("StartAddr = 0x%x, length = 0x%x size = %d!\r\n", gDisplayAddr, length, gSize);
				BootGetMemory(gDisplayAddr, length, gSize);
				gDisplayAddr = (ULONG) gDisplayAddr + (gSize * length);
				break;
			case 'e':
			case 'E':
				EdbgOutputDebugString("Erase Flash!\r\n");
				EraseSystemFlash();
				break;
			case 'g':
			case 'G':
				stringPtr = ParseString(stringPtr, addrString);
				Asc2Int(addrString, &launchAddr);
				EdbgOutputDebugString("Launch Address = 0x%x = %d!\r\n", launchAddr, launchAddr);
				if (Asc2Int(addrString, &launchAddr))
				{
					EdbgOutputDebugString("Launch at = 0x%x!\r\n", launchAddr);
				}
				Launch(launchAddr);
				break;
			case 'h':
			case 'H':
			case '?':
				ShowHelpMessage();
				break;
			case 'i':
			case 'I':
				DisplaySystemINFO();
				break;
			case 'l':
			case 'L':
				switch(*stringPtr)
				{
					case 's':
					case 'S':
						if(!SerialDownload())
							break;
						if (dwLaunchAddr == (EBOOT_IMAGE_START + 0x1000))
							return 2;
						else
							EdbgOutputDebugString("Not Bootloader Image.\r\n");
						break;
					case 'e':
					case 'E':
						return 1;
						break;
				}

				break;
			case 'm':
			case 'M':
				{
					stringPtr = ParseString(stringPtr, addrString);
					if (addrString[0] == (TCHAR) NULL)
					{
						break;
					}
					gSize = sizeof(DWORD);
					if (!Asc2Int(addrString, &value))
					{
						switch (addrString[0])
						{
							case 'b':
							case 'B':
								gSize = sizeof(BYTE);
								break;
							case 'w':
							case 'W':
								gSize = sizeof(WORD);
								break;
							case 'd':
							case 'D':
								gSize = sizeof(DWORD);
								break;
							default:
								break;
						}
						stringPtr = ParseString(stringPtr, addrString);
					}
					if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &modifyAddr))
					{
						break;
					}
					
					EdbgOutputDebugString("StartAddr = 0x%x,size = %d!\r\n", modifyAddr, gSize);
					
					nCacheAddr = ( modifyAddr | CACHED_TO_UNCACHED_OFFSET );
					
					while(TRUE)
					{
						BootDisplayMemory(modifyAddr, gSize);
						EdbgOutputDebugString("\t");
						GetInputBuffer(stringData);
						stringPtr = stringData;	
						if (*stringPtr == (TCHAR) '.')
							break;
							
						if (*stringPtr == (TCHAR) NULL)
							modifyAddr += gSize;
						else
						{
							stringPtr = ParseString(stringPtr, addrString);
							if(	Asc2Int(addrString, &dataValue))
							{
								BootSetMemory(modifyAddr, dataValue, 1, gSize);
								modifyAddr += gSize;
							}
						}
						
					}
				}
				break;			
			case 'f':
			case 'F':
				{
				stringPtr = ParseString(stringPtr, addrString);
				if (addrString[0] == (TCHAR) NULL)
				{
					break;
				}
				//EdbgOutputDebugString("First = %c!\r\n", addrString);
				gSize = sizeof(DWORD);
				if (!Asc2Int(addrString, &value))
				{
					switch (addrString[0])
					{
						case 'b':
						case 'B':
							gSize = sizeof(BYTE);
							break;
						case 'w':
						case 'W':
							gSize = sizeof(WORD);
							break;
						case 'd':
						case 'D':
							gSize = sizeof(DWORD);
							break;
						default:
							break;
					}
					stringPtr = ParseString(stringPtr, addrString);
				}

				//EdbgOutputDebugString("Second = %c!\r\n", addrString);
				if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &modifyAddr))
				{
					EdbgOutputDebugString("Error command format.\r\n");
					break;
				}
				//EdbgOutputDebugString("Mod Addr = 0x%x!\r\n", modifyAddr);
				stringPtr = ParseString(stringPtr, addrString);

				if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &endAddr))
				{
					EdbgOutputDebugString("Error command format.\r\n");
					break;
				}
				stringPtr = ParseString(stringPtr, addrString);

				if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &dataValue))
				{
					EdbgOutputDebugString("Error command format.\r\n");
					break;
				}

				length = endAddr - modifyAddr + 1;
				
				switch (gSize)
				{
					case sizeof(BYTE):
						break;
					case sizeof(WORD):
						if( length >= sizeof(WORD))
							length = length/2;
						else
							length = 1;
						break;
					case sizeof(DWORD):
						if (length >= sizeof(DWORD))
							length = length/4;
						else
							length = 1;
						break;
				}				
				
				EdbgOutputDebugString("StartAddr = 0x%x, Value = 0x%x, length = 0x%x size = %d!\r\n", modifyAddr, dataValue, length, gSize);
				BootSetMemory(modifyAddr, dataValue, length, gSize);
				}
				break;
			case 'p':
			case 'P':
				{
				stringPtr = ParseString(stringPtr, addrString);
				if (addrString[0] == (TCHAR) NULL)
				{
					break;
				}
				//EdbgOutputDebugString("First = %c!\r\n", addrString);
				gSize = sizeof(DWORD);
				if (!Asc2Int(addrString, &value))
				{
					switch (addrString[0])
					{
						case 'b':
						case 'B':
							gSize = sizeof(BYTE);
							break;
						case 'w':
						case 'W':
							gSize = sizeof(WORD);
							break;
						case 'd':
						case 'D':
							gSize = sizeof(DWORD);
							break;
						default:
							break;
					}
					stringPtr = ParseString(stringPtr, addrString);
				}

				//EdbgOutputDebugString("Second = %c!\r\n", addrString);
				if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &modifyAddr))
				{
					EdbgOutputDebugString("Error command format.\r\n");
					break;
				}
				//EdbgOutputDebugString("Mod Addr = 0x%x!\r\n", modifyAddr);
				stringPtr = ParseString(stringPtr, addrString);

				if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &endAddr))
				{
					EdbgOutputDebugString("Error command format.\r\n");
					break;
				}
				stringPtr = ParseString(stringPtr, addrString);

				if ((addrString[0] == (TCHAR) NULL) || !Asc2Int(addrString, &dataValue))
				{
					EdbgOutputDebugString("Error command format.\r\n");
					break;
				}

				length = endAddr - modifyAddr + 1;

				switch (gSize)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性一二三区| 国产亚洲成aⅴ人片在线观看| 6080yy午夜一二三区久久| 久久久99久久| 午夜视黄欧洲亚洲| 成人av综合一区| 日韩精品一区二区三区在线播放| 亚洲视频小说图片| 久久99久久精品| 欧美少妇bbb| 亚洲色图丝袜美腿| 国产精品99久久久久久似苏梦涵| 国产人久久人人人人爽| 亚洲第一av色| 色综合久久久久综合体桃花网| 久久精品亚洲精品国产欧美kt∨| 亚洲成人免费看| 欧美性xxxxx极品少妇| 中文字幕一区二区三区在线观看| 国产馆精品极品| 欧美一级欧美一级在线播放| 亚洲午夜私人影院| 97久久久精品综合88久久| 欧美国产精品一区二区| 国产精品一区二区91| 日韩精品在线一区| 麻豆国产欧美一区二区三区| 91精品国产手机| 日本三级韩国三级欧美三级| 欧美性生活大片视频| 一区二区三区四区视频精品免费| 99精品1区2区| 亚洲精品视频一区| 在线一区二区三区四区| 一区二区三区欧美在线观看| 欧美性受极品xxxx喷水| 日韩专区在线视频| 91麻豆精品国产91久久久久 | 97久久精品人人做人人爽| 久久久国产午夜精品| 国产高清无密码一区二区三区| 久久久亚洲精华液精华液精华液| 国产在线视视频有精品| 国产日韩欧美高清| www.欧美.com| 亚洲精品国产高清久久伦理二区| 欧美自拍丝袜亚洲| 日韩福利视频导航| 精品美女一区二区| 国产91精品一区二区麻豆网站| 中文字幕在线观看一区| 欧美日韩免费高清一区色橹橹 | 777午夜精品视频在线播放| 亚洲成av人影院| 日韩一区和二区| 国产成人午夜精品5599 | 美女www一区二区| 久久久久国产精品人| 99久久777色| 日韩av电影免费观看高清完整版在线观看 | 91精品国产高清一区二区三区蜜臀 | 国产欧美日韩亚州综合| 91国模大尺度私拍在线视频| 天天免费综合色| 国产亚洲欧洲一区高清在线观看| 99久久久国产精品免费蜜臀| 亚洲一区二区三区在线播放| wwwwxxxxx欧美| 91年精品国产| 精品一区二区免费在线观看| 曰韩精品一区二区| 久久婷婷久久一区二区三区| 欧美色电影在线| 国产成人av电影免费在线观看| 亚洲一区二三区| 国产午夜精品一区二区| 欧美丝袜丝交足nylons图片| 国产乱码精品一区二区三区av| 亚洲午夜免费视频| 国产日韩欧美精品一区| 制服丝袜亚洲播放| 色偷偷一区二区三区| 国产原创一区二区| 亚洲777理论| 综合色天天鬼久久鬼色| 欧美精品一区二区三区蜜桃| 欧美人xxxx| 一本大道久久a久久精二百| 国产成都精品91一区二区三| 美女爽到高潮91| 丰满少妇久久久久久久| 免费一级片91| 午夜免费久久看| 亚洲人成精品久久久久久| 国产校园另类小说区| 欧美一区二区福利视频| 欧美午夜精品免费| 色老综合老女人久久久| 丁香啪啪综合成人亚洲小说| 国产在线精品一区二区不卡了 | 国产精品一二三在| 秋霞电影网一区二区| 香蕉成人伊视频在线观看| 亚洲黄色尤物视频| 日韩一区欧美一区| 国产日韩精品视频一区| 久久只精品国产| 精品国产污网站| 欧美大片在线观看一区二区| 在线综合+亚洲+欧美中文字幕| 欧美日韩国产一区| 欧美性大战久久| 欧美日韩免费观看一区二区三区 | av一区二区不卡| 国产成人免费视频网站高清观看视频 | 91亚洲大成网污www| 91在线精品一区二区| 99久久婷婷国产综合精品电影 | 色综合天天综合网国产成人综合天 | 亚洲欧洲美洲综合色网| 中文字幕一区二区在线播放| 国产精品福利电影一区二区三区四区| 中文字幕不卡在线| 自拍偷拍欧美激情| 一区二区三区久久久| 亚洲电影你懂得| 日本成人中文字幕在线视频| 亚洲aⅴ怡春院| 久久99九九99精品| 成人午夜又粗又硬又大| 一本一本大道香蕉久在线精品 | 日韩成人精品在线| 视频一区二区三区在线| 免费观看一级特黄欧美大片| 国产在线不卡视频| 91在线丨porny丨国产| 欧美性三三影院| 精品久久久久久久久久久久久久久久久| 欧美成人福利视频| 国产精品久线在线观看| 亚洲伊人色欲综合网| 青青草伊人久久| 国产成人av影院| 在线观看国产精品网站| 精品国产一二三| 亚洲色图丝袜美腿| 日本亚洲免费观看| 99精品一区二区三区| 69堂成人精品免费视频| 日本一区二区三区国色天香 | 欧美日韩情趣电影| 26uuuu精品一区二区| 一区二区三区蜜桃网| 精品午夜久久福利影院| 色欧美乱欧美15图片| 精品国产在天天线2019| 一区二区三区四区精品在线视频| 久久国产夜色精品鲁鲁99| 色婷婷精品久久二区二区蜜臀av| 日韩一级二级三级| 亚洲人亚洲人成电影网站色| 久久精品国产成人一区二区三区| 97久久超碰国产精品电影| 2020国产成人综合网| 亚洲国产一区二区三区| 国产精品白丝jk黑袜喷水| 欧美中文字幕一区| 中文字幕国产一区二区| 蜜臀av性久久久久蜜臀av麻豆| 色呦呦网站一区| 中文av字幕一区| 国产在线精品视频| 欧美久久久久久蜜桃| 亚洲欧美欧美一区二区三区| 大尺度一区二区| 精品国产免费一区二区三区四区| 亚洲综合成人在线| 成人av网站在线观看| 久久免费视频色| 麻豆一区二区在线| 777精品伊人久久久久大香线蕉| 亚洲欧美日韩久久| 不卡一区二区三区四区| 久久久精品中文字幕麻豆发布| 男人的j进女人的j一区| 欧美日韩一区在线观看| 亚洲色图欧美在线| 东方欧美亚洲色图在线| 国产夜色精品一区二区av| 狠狠色综合播放一区二区| 91精品国产综合久久久久| 午夜国产不卡在线观看视频| 日本高清不卡视频| 亚洲欧洲综合另类在线| 99精品国产热久久91蜜凸| 综合久久久久综合| aaa亚洲精品| 亚洲色欲色欲www| 在线国产亚洲欧美| 午夜在线电影亚洲一区|