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ができたらここに
掲載しようと思います。