📄 _readsym.idc
字号:
// _readsym.idc
// This script imports Pentica-B symbol file information
// code by twh, rev 10/04/2000
#include <idc.idc>
// These values for use with Hitachi H8300L (3644F)
#define SEGOFFSET 0x10000
#define IVT_START 0x0000
#define IVT_END 0x002F
#define ROM_START 0x0030
#define ROM_END 0x7FFF
#define RAM_START 0xFB80
#define RAM_END 0xFF7F
static htox(strHex) {
auto hlt, ea, i, x;
hlt = "0123456789ABCDEF";
i = 0;
ea = 0;
// ignore trailing 'H'
while (i < (strlen(strHex)-1)) {
x = strstr(hlt, substr(strHex, i, i+1));
ea = (ea * 16) + x;
i = i + 1;
}
return(ea);
}
static GNFToken(InFileH) {
auto name, t, whitespace;
whitespace = "\040\012\015";
name = "";
t = fgetc(InFileH);
while ( ( t != -1 ) && ( strstr(whitespace, t) >= 0 ) ) {
t = fgetc(InFileH);
}
while ( t != -1 ) {
name = name + t;
t = fgetc(InFileH);
if ( strstr(whitespace, t) >= 0 )
break;
}
return(name);
}
static GetInputPath() {
auto p, r, e;
p = GetInputFilePath();
r = -1;
e = strlen( p );
while ( r < 0 ) {
e--;
r = strstr(substr(p, e, -1), "\\");
}
return( substr(p, 0, ++e) );
}
static main(void) {
auto minea, ea, tkn, name;
auto InFName, InFileH;
auto errcode;
auto i, j;
minea = MinEA();
// browse for an input symbol file name (.sym)
InFName = AskFile(0, GetInputPath() + "*.sym", "Locate symbol file:");
InFileH = fopen(InFName, "rb");
if (InFileH != 0)
{
Message("Fixing up segments...\n");
errcode = SegBounds(SEGOFFSET + ROM_START, SEGOFFSET + ROM_START, SEGOFFSET + ROM_END + 1, 0);
errcode = SegRename(SEGOFFSET + ROM_START, "ROM");
errcode = SegCreate(SEGOFFSET + IVT_START, SEGOFFSET + IVT_END + 1, (SEGOFFSET >> 4), 0, saRelPage, scPub);
errcode = SegRename(SEGOFFSET + IVT_START, "IVT");
errcode = SegCreate(SEGOFFSET + RAM_START, SEGOFFSET + RAM_END + 1, (SEGOFFSET >> 4), 0, saRelPage, scPub);
errcode = SegRename(SEGOFFSET + RAM_START, "RAM");
Message("Beginning import of Hitachi symbols.\n");
// locate tof marker - BEGIN
tkn = GNFToken(InFileH);
while ( tkn != "BEGIN" ) {
tkn = GNFToken(InFileH);
}
// watch for eof marker - "END"
tkn = GNFToken(InFileH);
while ( tkn != "END" ) {
// calculate address from HEX rep
ea = htox( tkn );
ea = ea + minea;
// read the name label
tkn = GNFToken(InFileH);
name = tkn;
if (MakeName( ea, "" ) == 0 ) {
MakeUnkn(ea, 0);
MakeName( ea, "" );
}
if (MakeName( ea, name ) == 0 ) {
Message(" Address: '" + tkn + "'" + "(%x) ", ea );
Message(" Label: '" + name);
Message(" Failed!\n");
}
tkn = GNFToken(InFileH);
}
Message("Finished importing Hitachi symbols.\n");
fclose (InFileH);
for (i = (SEGOFFSET + IVT_START); i < (SEGOFFSET + ROM_START); i = i + 2 ) {
MakeWord(i);
OpOff(i,0,SEGOFFSET);
j = Word( i ) + SEGOFFSET;
errcode = AddEntryPoint(j,j,"",1);
MakeCode( j );
AutoMark( j, AU_PROC ); }
// get Power On Reset vector
i = Word(SEGOFFSET + IVT_START) + SEGOFFSET;
Message("Entry point is: %08x\n", i );
AnalyseArea(i, SEGOFFSET + ROM_END);
Wait();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -