Thursday 12 July 2018

os9 level 2 done!

なんか、月曜日に 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: