PDP-11のブートスストラップのお勉強
PDP-11のブートスストラップのお勉強。
参照は
の通り。さて、simhからは
sim> att rk0 unix0_v6_rk.dsk
sim> boot rk0
でbootプログラムが、ディスクデバイス0番の#0セクターから、ブートプログラムを0番地に読み込んで実行する。
このbootプログラムは下記の通りなのだが、
static const uint16 boot_rom[] = { 0042113, /* "KD" */ 0012706, BOOT_START, /* MOV #boot_start, SP */ 0012700, 0000000, /* MOV #unit, R0 ; unit number */ 0010003, /* MOV R0, R3 */ 0000303, /* SWAB R3 */ 0006303, /* ASL R3 */ 0006303, /* ASL R3 */ 0006303, /* ASL R3 */ 0006303, /* ASL R3 */ 0006303, /* ASL R3 */ 0012701, 0177412, /* MOV #RKDA, R1 ; csr */ 0010311, /* MOV R3, (R1) ; load da */ 0005041, /* CLR -(R1) ; clear ba */ 0012741, 0177000, /* MOV #-256.*2, -(R1) ; load wc */ 0012741, 0000005, /* MOV #READ+GO, -(R1) ; read & go */ 0005002, /* CLR R2 */ 0005003, /* CLR R3 */ 0012704, BOOT_START+020, /* MOV #START+20, R4 */ 0005005, /* CLR R5 */ 0105711, /* TSTB (R1) */ 0100376, /* BPL .-2 */ 0105011, /* CLRB (R1) */ 0005007 /* CLR PC */ };
よくわからんのは、
0012741, 0177000, /* MOV #-256.*2, -(R1) ; load wc */
で、転送サイズを512wordつまり1024bytesに設定してい点だ。
-256*2と値がマイナスなのは、RK11ディスクコントローラの仕様らしい。
(転送カウントは2の補数を設定する仕様。)
実際にbootプログラムのスタートアドレスは02000(8進)で、
これは1024なので、ぎりぎり直前までディスクからデータを読み込んでいるのは間違いないらしい。
よくわからないのは、PDP-11で使うRK05とかのディスクドライブは、
1セクター256wordだったということで、simhはこれを2セクター読み込んでいるということになる。
ちなみに、下記の情報だと、PDP-11のディスク用のbootプログラムは
01000番地からはじまり、256word読み込むようになっている。
simhの実装がなぞだが。
まあ、いいや。機会があったら調べよう。
2014-09-08 22:57
nice!(0)
コメント(0)
トラックバック(0)
コメント 0