[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