[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