H8(その23)

7thステップ終了

プログラムエラーが沢山でて、結構苦戦した。

f:id:Aluminium:20170524224856j:plain

 

まとめようとして、うまくまとめられない。

以下に記す。

 

main.cに、割り込みハンドラ関数 (voidがinterrupt.hで変換されて、関数ポインタになっている)を作る。

 

softvec_setintrで、ramの先頭に、

割り込みタイプと割り込みハンドラ(関数ポインタ)を登録

SOFTVECS[type] = handler;

(SOFTVECSは、ramの先頭のアドレス)

 

CPUが、割り込みベクタ(intr_serintr)を呼び出す。

intr.Sで、レジスタを保存し、関数ポインタinterrupt()を呼び出す。

(割り込みタイプとspを送る)

interrupt()は、登録されているSOFTVECS[type]をポインタ関数に入れて、実行する。

 

次に進もう。

 

 

H8(その21)

7thステップ中

 

RAMの先頭から256バイト空ける理由が書いてあった。

ソウフトウェア割り込みベクタを配置している様だ。

えー。

悩んだのに...。

 

アセンブラ忘れてる。p158を見よ。

mov.l レジスタへの値設定

er6,@er7:er6をスタックポインタ(er7)の指す先にに格納

@ er7: er7のアドレス

@-er7:er7を減算したアドレス

 

H8(その19)

6thステップ、プログラム動いた。

 

f:id:Aluminium:20170515215237j:plain

 

ここまでが準備でこれからOS作成が始まる。

えー。

 

昨日の疑問

・256バイト空ける理由だけど、あまり意味はないのかもしれない。

 

・void (*f)(void)は、関数ポインタか。

エントリポイントのポインタをfに渡して、f()で実行みたいな感じかな。

 

 

 

H8(その18)

6thステップ読み終わりました。

 

メモリ上にロードしたプログラムを解析して、

再度RAMのメモリ上に展開している所が頭がごちゃごちゃになって苦戦した。

 

分からなかった部分は、

207ページのvoid(*f)(void);の文法。

213ページのRAMの先頭アドレスから256バイト空きを作っている理由。

 

ちょっと調べてみる。

それと、プログラムを打ち込んでみよう。