SSブログ

PDP-11のトラップのテスト動作

PDP-11のトラップの動きの確認したく、簡単なアセンブラプログラミングをして、
simhでブレークをはって以下の情報を確かめてみた。
 - カーネルモードとユーザモードのSPのレジスタが別であること
 - トラップ時のPSWの値の確認
 - mfpi 命令の動き

アセンブラプログラムは以下:


        .global start

PS = 0177776
.text
.even
start:
mov $0010000, sp / set kernel mode's stack pointer
mov $0140000, PS / change current mode to user mode
mov $0020000, sp / set user mode's stack pointer
mov 0, r0

/ copy vector table to zero address
mov $vector, r1
mov $vectorend, r2
1$: mov (r1)+,(r0)+
cmp r1,r2
bne 1$

trap 0377
2$: br 2$

trap:
mfpi sp / push in stack previous mode's stack pointer
rti

.data
.even
vector:
.word 0
.word 0
/ trap vectors
.word 0, 0 / bus error
.word 0, 0 / illegal instruction
.word 0, 0 / bpt-trace trap
.word 0, 0 / iot trap
.word 0, 0 / power fail
.word 0, 0 / emulator trap
.word trap, 0346 / system entry
vectorend = .


.end





上記は、SPの値を
 カーネルモード → 010000
 ユーザモード  → 020000
にしている。
さて、simhに01000番地にプログラムをロードしてから、



sim> e -m 1000:1100
1000: MOV #10000,SP
1004: MOV #140000,177776
1012: MOV #20000,SP
1016: MOV 0,R0
1022: MOV #1050,R1
1026: MOV #1110,R2
1032: MOV (R1)+,(R0)+
1034: CMP R1,R2
1036: BNE 1032
1040: TRAP 377
1042: BR 1042
1044: MFPI SP
1046: RTI
1050: HALT
1052: HALT
1054: HALT
1056: HALT
1060: HALT
1062: HALT
1064: HALT
1066: HALT
1070: HALT
1072: HALT
1074: HALT
1076: HALT
1100: HALT
sim> br 1044
sim> g

Breakpoint, PC: 001044 (MFPI SP)
sim> e psw
PSW: 030346
sim>

さて、トラップが起きた直後のアドレスにブレークポイントをはって止めた状態で、
PSWの値を確かめてみたが、030346は想定通り。
03xxxxは前モードがユーザモードであることを意味している。
xxx346は、トラップベクターに設定した値そのまま。
        .word   trap, 0346      / system entry



続いて、

sim> e sp
SP: 007774
sim> e 7770:10000
7770: 000000
7772: 000000
7774: 001042
7776: 140004
10000: 000000

SPはカーネルモードの010000からになっている。狙い通りの動き。


さらに、


sim> s

Step expired, PC: 001046 (RTI)
sim> e 7770:10000
7770: 000000
7772: 020000
7774: 001042
7776: 140004
10000: 000000



一回ステップ実行して、MFPI SPを実行させてみた。 
スタックには、ユーザモードのSP値の020000が積まれている。 
うむ、仕様通りの動き、確認できた。と。 

 以上。



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。