なんか、月曜日に Shell prompt 見たので「楽勝!」と思ったんですが、その後、
何にも動かない状態に...
アセンブラの処理のまずさとかいろいろ直すんだが、どうにもこうにも動かない。まぁ、
OSの最初からトレースしてチェックしていく
しかないんですけどね。まぁ、それが勉強になるので酔いんですけど。
0. osp1 の起動、vector の設定
1. RAMのチェック
2. 直後にあるとされるROM上の os9 module の登録(F$Modul)
3. boot module の実行
4. os9p2,p3,p4 の実行
5. SysGo の fork (Unixのinit相当、init module はメモリ構成用)
6. F$NProc (exit に相当するのかな?) で、Sysgoに移行
7. Sysgo が /Term と /D0 を開けて
8. Shell を fork
という手順らしいです。
5 の fork はユーザモードで実行されるのだが、そこででたらめなアドレスに戻ってしまう。で、わかったのだが、
0xa000-0xcffff までを一時的にMMUでpage切り替えして stack のcopyとかをやってる
が、そこに、まさに今動いているTaskのsystem call stack がある
だめじゃん。で、しばらく寝てたらわかったんですが、
そこは、どうも、Boot 時にmoduleをloadしているべきところらしい
つまり、控え目にBoot時のメモリを要求したのが間違いだったらしい。でも、
0xa000を越えて要求すると死ぬ
つまり、boot module の大きさが4kとはっきり決まっているらしいです。そういうコードがos9p1にハードコードされてる。つまり、
月曜日に「Boot時のメモリを要求を2kbyteにけちった」から、まったく動かなくなったということだったらしいです。あっそ。そこに気づいたら、即座に動きました。
ディスクが読めないこと自体は、バッファをMMUで変換するのを忘れたからでした。これは、本来なら月曜日に動いているべきものだったな。
まぁ、そんなもの。
https://github.com/shinji-kono/sbc09/tree/os9lv2
まだ、clock 接続してないけど、もういいかな。
% sh run29.sh
OS-9 LEVEL TWO VR. 03.00.02
COPYRIGHT 1988 BY
MICROWARE SYSTEMS CORP.
LICENSED TO TANDY CORP.
ALL RIGHTS RESERVED.
Shell
OS9:/d1/cmds/basic09
BASIC09
COPYRIGHT 1980 BY MOTOROLA INC.
AND MICROWARE SYSTEMS CORP.
REPRODUCED UNDER LICENSE
TO DRAGON DATA LTD.
ALL RIGHTS RESERVED.
Basic09
Ready
B:
No comments:
Post a Comment