[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: mips/locore.S
#すみません、つばいさんだけに返信してしまってました。
#もう一度...
>せっかくなので news5000 も考慮しておきたいんですがどうやると
>楽 かつ 安全に判定できるでしょうか?
#3400 と 5000 で同じ boot が使えるかな、って気もしますが、とりあえず。
基本的に IDROM で確認できると思いますが、NWS3400 と NWS5000 では
IDROM のアドレスそのものが違うんですよね...。
試しに両方のアドレスを見てみる、という手もありますが、
ヘタをするとバスエラーかもしれないのでこれはめんどくさいです。
...ので、MIPS_COP_0_PRID で 自身の CPU を見て、
r3000系なら NWS3000系、r4000系なら NWS5000系と仮に決めておいて、
その後 IDROM 見て裏をとれば、ほぼ問題ないと思います。
あと知ってるかもしれませんが、NWS5000 の場合、IDROM は 32bit 幅
(charが連続してない) で、0xbf3c0000 から始まってます。
#define NEWS5000_IDROM 0xbf3c0000
int
readidrom32(rom)
u_char *rom;
{
unsigned int *p = (unsigned int *)NEWS5000_IDROM;
int i;
for (i=0; i<sizeof(struct idrom); i++, p+=2 )
*rom++ = ((*p & 0x0f) << 4) + (*(p + 1) & 0x0f);
return (0);
}
こんなかんじです。struct idrom は NWS3400 のそれと同じです。
#CPU が R4600 な NWS4000 が、これまた NWS5000 とぜんぜん違う
#I/Oマップを持ってるんですよね。しかも資料もないし...
#まぁ、これもいつかそのうち、ってことで...
--
ryo shimizu