FrontPage 新規 編集 検索 一覧 ヘルプ

Diary/2006-7-8

想像もできないです(^^;

X680x0 の隙間を埋める活動を展開されているX68K.NETさんの日記によると、060turboX 仮予約の人数が50人を突破とのこと!Nereid復活再生産も始まりましたし、いや〜激しく熱いです。

レジスト色を青にするか白にするかアンケートがありましたが、今回のレジスト色は白に決まったんでしょうか?Nereid白基盤は撮影が難しくて表現しづらいんですが、実物のイメージを損なわない綺麗な写真がアップされてるので、ぜひ見てうっとりしませう(^^)。

それはそうと、060turboX 配線し直しって大変なんでしょうねぇ・・・。私だとわずか数本のラインでさえまとまらずに苦しんでいるのに、それが数百本あるわけでしょ?全然想像もできない次元です(^^;。

と、ともあれ、電解コンデンサ交換して待ってます!

BIND.X : オーバレイXファイルの作成・変更

Human68k の実行可能ファイルには、X, R, Z の 3つのタイプがあります。この内、.X ファイルは構造を持った実行ファイルであり、Human68k v2.00 以降では 1つのファイル中に複数のファイルを持てるように拡張されました(オーバレイ X ファイル)。

BIND.X を使うと、圧縮はしないものの LHA や ZIP のような感じで、複数ファイルをひとまとめにでき、Human68k DOSコールの EXEC で、引数 MD の上位バイトにモジュール番号を指定して、自由にモジュールを切り替えてロード/実行できるようになります。

例えば、プログラムを幾つかの部分に小分けしておけば、全体では本体メモリよりも大きなプログラムであっても順々に呼び出すことで実行可能になるよと…いうのが効能ですが、X680x0 のようにメモリ量が多かったり、仮想記憶があるOS (NetBSDとか) だと必要性の薄いものといえます。

とは言え、必要なデータファイル等もまとめて1つにできるとなると便利なので、今にして思えば、もうちょっと拡張されていれば、SX 上のプログラムも複数ファイルに分けずにすっきりできたかも知れませんね。

 A>bind
 X68k Binder v1.00 Copyright 1989 SHARP/Hudson
 使用法:bind [スイッチ] ファイル名 [ファイル名・・]
 	/u	ファイルの更新(ディフォルト)
 	/x	Xファイルの取り出し
 	/d	Xファイルの削除
 	/l	リスト出力
 	/o file	バインドファイル名指定
 	/t path	テンポラリパス名指定
 
 	/u /x /d /lのスイッチはどれか一つを指定します
 	/lスイッチを付けた時はバインドファイルのみ指定します
 	/oスイッチを省略すると最初のファイルを操作します
 以下、STUDIO KAMADA 情報
 
 /A+R または /A+S の指定で、BIND.X /U で内容を更新できないようにできる
 /A+H または /A+S の指定で、BIND.X /L でファイル名を表示しないようにできる

BIND.X で表示されないファイル名を表示する

Human68k v3.02 の FORMAT.X も BIND.X で作られたオーバレイXファイルですが、BIND /L format.x してみても、次のようにファイル名が表示されません。

 A>bind /l a:\bin\format.x
 X68k Binder v1.00 Copyright 1989 SHARP/Hudson
 =No=         =name=          =length=   =date=   =time=  =at=
    0 -system reserved file- ---------- -------- --:--:-- ----
    1 -system reserved file- ---------- -------- --:--:-- ----
    2 -system reserved file- ---------- -------- --:--:-- ----
    3 -system reserved file- ---------- -------- --:--:-- ----
    4 -system reserved file- ---------- -------- --:--:-- ----
    5 -system reserved file- ---------- -------- --:--:-- ----

バインドされているファイル名がわからないと、BIND /X で取り出すこともできなくて困るので、きっとどこかに情報なりソフトなりがあるのだろうと思いつつも見てみました(^^;。

まず最初に format.x ファイルを バイナリダンプしてみたら、ちゃんと末尾にファイル名が記録されていますし、その名前でファイル取得するとすんなり取り出せます。そうなると、ファイル名を隠しているのはBIND.X それ以外に有りえません(^^;。

そこで、dis で BIND.X を逆アセンブルして見ていくと、見事に先の目隠し文字列がありました。

 L0019e6:
 	.dc.b	'-system reserved file- ---------- -------- --:--:-- ----'

次に、この文字列を表示しているところを探してみます。

 L000cbe:
 	pea.l	(L0019e6)
 	DOS	_PRINT
 	addq.l	#4,a7
 	unlk	a6
 	rts

更に、このサブルーチンを呼んでいるところを探すと次の2行が見つかりました。

 	btst.b	#$01, ($001b,a3)
 	bne	L000cbe

よくはわかりませんが、$1b(a3) は何かのフラグ(アトリビュートでしょう)になってるようであり、1ビット目が立ってれば目隠し文字列表示処理に飛ぶんだとわかります。そこで、修正箇所を最小限にする為に、

 	bne	L000cbe

の部分を

 	nop

に置き換えて、非表示であっても分岐しないようにしてみました(8bit ディスプレースメントだったので、nop 1個で OK)。これで先の format.x を見てみると、次のようにちゃんと表示されるようになり、目的達成です。

 A>bind /l a:\bin\format.x
 X68k Binder v1.01 Copyright 1989 SHARP/Hudson
 =No=         =name=          =length=   =date=   =time=  =at=
    0 FORMAT.X                      328 93-01-27 10:38:08 A---
    1 FORMAT1.X                    4196 93-03-30  9:07:24 A---
    2 FORMAT2.X                   71946 93-03-30  9:49:24 A---
    3 FMTDPB.FMT                   2488 93-03-30  9:08:26 A---
    4 FMTHD.FMT                    9740 90-05-09 13:18:22 A---
    5 MOFMT.FMT                    2120 92-12-15 15:52:50 A---

以上、BIND.X 3分間クッキングでした。

[カテゴリ:x68]