locore source code exchange

locore.sについての検討

過去の考え

i386用locore.sをPowerPC用に移植しようと考えていた。
過去のページ参照)
途中まで修正したlocore.sファイルはこちら

現在の考え

マシンの初期化はCPUにより全く異なるため、NNetBSD/FreeBSDのブート プログラムのLocore.c(中身はアセンブラ)及びMinimal PowerPC Boot Sequence for Executing Compiled C Programsを参考に新しく作り直すことにする。
尚、Simplified Mnemonicが使われている参照にしたコードは もともとのコードをベースとして、参照コードはコメントに入れた。

/* Filename: Locore_ibook.c */

static int (*openfirmware) __P((void *));

static void startup __P((void *, int, int (*)(void *), char *, int));
static void setup __P((void));

static int stack[4096/4];

asm("
	.text
	.globl	_start
_start:
        addi    8,0,0            /* li 8,0 */
        addi    9,0,0x100        /* li 9,0x100 */
	mtctr	9
1:
	dcbf	0,8
	icbi	0,8
	addi	8,8,0x20
        bc      16,0,1b          /* bdnz 1b */
	sync
	isync

        addis   1,0,stack@ha     /* li 1,stack@ha */
	addi	1,1,stack@l
	addi	1,1,4096

	mfmsr	8
        addii   0,0,0            /* li 0,0 */
	mtmsr	0
	isync

        mtspr   528,0            /* mtibatu 0,0 */
        mtspr   530,0            /* mtibatu 1,0 */
        mtspr   532,0            /* mtibatu 2,0 */
        mtspr   534,0            /* mtibatu 3,0 */
        isync
        mtspr   536,0            /* mtdbatu 0,0 */
        mtspr   538,0            /* mtdbatu 1,0 */
        mtspr   540,0            /* mtdbatu 2,0 */
        mtspr   542,0            /* mtdbatu 3,0 */
        isync

        /* (L2Cache Invalidation) */
        addis   3,0,0x1800       /* L2CR_L2SIZ_QM|L2CR_L2CLK_2| */
        addi    3,3,0            /*   L2CR_L2RAM_BURST|L2CR_L2OH_5 */
        mtspr   1017,3           /* L2CR */
        sync
        oris    3,3,0x0020       /* L2CR_L2I */
        mtspr   1017,3
        sync
1:      mfspr   3,1017
        andi.   3,3,0x01
        bc      4,2,1b           /* bne 1b */
        mfspr   3,1017
        rlwinm  3,3,0,11,9
        mtspr   1017,3

        addi    9,0,0x12         /* li 9,0x12 */
                                /* BATL(0, BAT_M, BAT_PP_RW) */
        mtspr   529,9            /* mtibatl 0,9 */
        mtspr   537,9            /* mtdbatl 0,9 */
        addi    9,0,0x1ffe       /* li 9,0x1ffe */
                                /* BATU(0, BAT_BL_256M, BAT_Vs) */
        mtspr   528,9            /* mtibatu 0,9 */
        mtspr   536,9            /* mtdbatu 0,9 */
	isync

	mtmsr	8
	isync

	b	startup
");


この調子でLocore.Sを移植しようと思いましたが、 FreeBSDとNetBSDではproc構造体が違い、そのまま移植は 無理(当然といえば当然ですが)のようです。
一歩一歩、進んでいくことにします。 FreeBSDのproc構造体対応のLocore.Sができたらここに 掲載しようと思います。