os9 側から Unix file system を直接見れる仮想RBFを書いたので、これで os9 disk image 抜きで上げられるように。ついでに dir -e も。
RBFにはdir -e用のundocumented system call (FDINF)てのがあって、それでfile descriptor(Unixのとは関係ない os9 のファイルの情報を格納するセクタ)にアクセスしてきます。なので、そのセクタを stat とかから作ってやれば良い。なのだが、LSN(logical sector number)でアクセスされる。さらに、os9 はcurrent directory (work/execの二つ)をLSNで管理してる。つまり、
directoryのLSN(24bit)を仮想RBF側で覚えておいてやらないとだめ
inode番号使えば良いのだが、最近のinode番号って無駄に長いのね。でも下位3byteで良いらしい。ちゃんと管理するとあれなんだけど、でも、shell とか dir commadが動いている間だけつじつまが合えば良いと考えて、FIFOな辞書でいいや的な感じですませました。 まぁ、だめな方法なんだけど。
これで、level2 のcommandも一通り動かせました。mfree が変だったけど。Coco は512kbyte memoryかと思っていたんだが、実は2MBあるらしく、そこをなんとかするべきらしい。まあ、別にいいかな。
最後は、clock moduleをdebugして、ちゃんと時刻が表示できたり、時分割で並列実行できたりするのを確認しました。無駄にloopするコマンド作って裏で動かしました。
Sysgo から os9 F$STime すると clock module がリンクされるので、そこで timer start してやれば良いらしい。タイマー割り込み IRQ/FIRQからは自分のos9 system mode で動かすルーチンを登録、ルーチン側では最後に os9 の time slice routine である D.Clock を呼び出してやる方式。
L00AE leax ClockIRQ1,pcr
stx <D.SvcIRQ
jmp [D.XIRQ] Chain through Kernel to continue IRQ handling
ClockIRQ1
jmp [>D.Clock]
この方法だと、割り込み内で処理するものは少なくてすむわけね。これを発見するのには少し時間がかかったが...
これでだいたい終了かな。実機持っていた81年ぐらいにやるべきだったとは思うけど、あの頃は他にやることたくさんあったからなぁ。(いまでもそうですが..)
OS9:loop & loop & loop & loop & loop &
&003
&004
&005
&006
&007
OS9:proc
ID Prnt User Pty Age Tsk Status Signal Module I/O Paths
___ ____ ____ ___ ___ ___ _______ __ __ _________ __________________
1 0 0 255 255 00 s 0 00 System <TERM >TERM >>TERM
2 1 0 128 134 00 s 0 00 Shell <TERM >TERM >>TERM
3 2 0 128 132 02 0 00 Loop <TERM >TERM >>TERM
4 2 0 128 131 03 0 00 Loop <TERM >TERM >>TERM
5 2 0 128 130 04 0 00 Loop <TERM >TERM >>TERM
6 2 0 128 129 05 0 00 Loop <TERM >TERM >>TERM
7 2 0 128 128 06 0 00 Loop <TERM >TERM >>TERM
8 2 0 128 133 07 s 0 00 Proc <TERM >TERM >>TERM
OS9:proc
ID Prnt User Pty Age Tsk Status Signal Module I/O Paths
___ ____ ____ ___ ___ ___ _______ __ __ _________ __________________
1 0 0 255 255 00 s 0 00 System <TERM >TERM >>TERM
2 1 0 128 134 00 s 0 00 Shell <TERM >TERM >>TERM
3 2 0 128 132 02 0 00 Loop <TERM >TERM >>TERM
4 2 0 128 131 03 0 00 Loop <TERM >TERM >>TERM
5 2 0 128 130 04 0 00 Loop <TERM >TERM >>TERM
6 2 0 128 129 05 0 00 Loop <TERM >TERM >>TERM
7 2 0 128 128 06 0 00 Loop <TERM >TERM >>TERM
8 2 0 128 133 07 s 0 00 Proc <TERM >TERM >>TERM
OS9:proc
ID Prnt User Pty Age Tsk Status Signal Module I/O Paths
___ ____ ____ ___ ___ ___ _______ __ __ _________ __________________
1 0 0 255 255 00 s 0 00 System <TERM >TERM >>TERM
2 1 0 128 128 00 s 0 00 Shell <TERM >TERM >>TERM
8 2 0 128 128 02 s 0 00 Proc <TERM >TERM >>TERM
No comments:
Post a Comment