[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 1953] OSASK/TOWNS を直接起動させるには
小柳です。こんばんは。
Linux/TOWNS のブートプログラムを利用して OSASK/TOWNS を
直接起動させようと考えています。
現在のところ
(1)Linux/TOWNS の boot sector 512 バイト を切り出す
(2)OSASK/TOWNS の OSASK.EXE の先頭 512バイトを切り捨てる
(3) (1), (2)をくっつける
をしたのですが、 OSASKBS1.ASK を見ると
1."0-0-1-2"(C-H-R-N)〜"0-1-18-2"の 512バイト * 36セクタ = 18KBを
0x000800〜0x004fffへ転送する。
2."1-0-1-2"〜の512Bセクタを0x008000〜へ転送。何バイト転送するかは
DIにセットされた値で決まる。DIの値は1.での転送量を含む。
のように 2回に分けてロードが行われており、セットアップへのジャンプが
DB(0xea); DW(0); DW(0x0800); // JMP(0x0800:0x0000);
と、2. の先頭アドレスに実行を移すように読めます。
base.exe が存在しているのは1.側のはずなので不思議です。
TOWNS の場合も 18KB + 残り の 2回に分けて別々の場所に読み込む必要がある
のでしょうか?
Linux/TOWNS のブートセクタの GAS のおおよその動作は
1. ROM BIOS が 512バイトを 0xB0000 にロード
2. 自分自身を 0x90000 に転送
3. セットアップルーチン 1KBを 0x90200 以降に転送
4. Linuxカーネルイメージを 0x10000 以降に転送
5. セットアップルーチン 0x90200 にジャンプ
となっています。
OSASK/TOWNS を起動させるには上の部分を
3. 18KB を 0x00800 以降にロード
4. 残りを 0x08000 以降にロード
5. 0x08000にジャンプ
という書き換えで合っているでしょうか?
どこかに間違いがある気がしています。
セグメントのオフセットで混乱しているのかもしれません。
--
小柳 雅明(Koyanagi.Masaaki !Atmark! nifty.ne.jp)
「人の足を止めるのは"絶望"ではなく"諦観"
人の足を進めるのは"希望"ではなく"意志"」
-- ARMS