coff.c

来自「S3C2410例子程序」· C语言 代码 · 共 57 行

C
57
字号
#include "coff.h"
#include "hpi.h"

#define TRACE(X)

void load_coff(unsigned long start, unsigned long end)
{
	char*		data;
	long    	size;
	long    	offset;
	int     	index;

	FILEHDR*	pHdr;
	SECHDR*		pSec;
	OPTHDR*		pOpt;
	
	pHdr = (FILEHDR*)start;

	if(pHdr->usOptHdrSZ==0)
		offset = sizeof(FILEHDR);
	else
		offset = sizeof(FILEHDR)+28;

	pOpt = (OPTHDR*)(start+sizeof(FILEHDR));
	pSec = (SECHDR*)(start+offset);
	
	for( index = 0; index < pHdr->usNumSec; index++)
	{
		TRACE(("%s  flag=0x%x, len = %d, dst = 0x%x\n", pSec -> cName, pSec -> ulFlags, pSec->ulSize, pSec->ulPAddr));
		
		// FLAG == 0x20 | 40 需要加载, 程序和数据段
		if(pSec -> ulFlags & 0x60)
		{
			for( size = 0; size < pSec->ulSize; size++)
			{
				HPI_WR((pSec->ulPAddr+size), *((unsigned short*)(start+pSec->ulRawdata)+size));
			}
		}
		
		// FLAG == 0x80, 需要清0 
		if((pSec -> ulFlags & 0x80) == 0x80)
		{
			for( size = 0; size < pSec->ulSize; size++)
			{
				HPI_WR((pSec->ulPAddr+size), 0);
			}
		}

		pSec ++;
	}	
	
	HPI_WR(0x7F, 0);
	HPI_WR(0x7F, (pOpt->ulEntry));
	TRACE(("Entry = 0x%x\n", pOpt->ulEntry));
}

⌨️ 快捷键说明

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