Edited at

仮説・検証(115) VZエディタ移植に当たって実施したことと成果


VZエディタ

intel 8086用アセンブラで書かれたDOS用のエディタです。

ヴィレッジセンターから1989年に発売されました。

兵藤嘉彦さんの制作です。同著者の前作EZエディタからかなり機能充実したエディタです。

VZエディタは当初NEC PC-9801用に設計されました。次の版ではDOS/V(IBM-PC互換機)用も同梱しました。

配布は、当初5.25インチFDでした。

D-_2oujVUAA-gYV.png


optasm

VZエディタのアセンブラのソースは、optasmというアセンブラでアセンブル、リンクすると、MASM(Microsoft)のアセンブラでアセンブルするより数バイト短く、高速になるという利点がありました。

http://www.drdobbs.com/windows/ms-dos-assemblers-compared/184408073


マクロで動くテトリス風ゲーム

VZエディタのマクロは、キーボードマクロとキーボードマクロに追加しても動く高機能マクロからなっていました。このマクロだけで、テトリス風のゲームが動くのは、とても気持ちがいいものでした。


Mifes互換マクロ

マクロには、他のエディタと類似の機能を実現することができるほど高機能で、いろいろなマクロが作られました。大野元久さんの試作されたMifes互換マクロを同梱していました。


プログラマから文学者まで幅広い利用

SF作家の高千穂遥はじめ、物書きの方々が利用され、色々ご意見をいただきました。「VZ倶楽部」というビレッジセンターから出版されたVZエディタの随筆集には高千穂遥、中村正三郎、始め各種有名人の随筆を掲載しています。

210117.png

https://bookmeter.com/books/7114945

https://researchmap.jp/joaglnxz8-50024/

プログラマでは、下記のN5200始め他のDOS機器で動作するように移植された人たちも。

設計環境、思考環境としてのVZ Editor

https://researchmap.jp/joxoaez5m-45644/


高速スクロール、高速検索・置換

VZエディタの機能以外での特徴は、画面のスクロールが高速であること、検索・置換も高速だということです。

マクロを組み合わせて簡単な処理ならとても高速に処理してくれます。


N5200(NEC)

NEC N5200というオフコンのDOS用に移植しました。

https://ja.wikipedia.org/wiki/N5200

PC-9801とN5200は同じNEC同士だから移植は簡単かと思いきや、割り込みベクタテーブルと画面の違いが壁でした。

さらに、PC-9801の仕様は市販の本に記載があります。N5200は有償の開発の道具の付属マニュアルで、単体では市販されていませんでした。

N5200の有償の開発の道具は購入するお金がありませんでした。そこで、N55200の仕様は、Word STAR, Type QuickなどN5200で動作するMS-DOSソフトエアを購入して使った経験から推測しました。またPC-VANのN5200ユーザネットでプログラマの方から割り込みベクタを調べる試験プログラムの提供を受けて切り開くことができました。


割り込みベクタテーブル

インテルのCPUは、メモリの最初に割り込みベクタテーブルがあります。

割り込みベクターテーブルは、ハードウェア割り込みおよびソフトウェア割り込みの飛び先番地が並んでいるものです。

割り込み番号に従い、テーブルのその番号に書いた飛び先番地に飛ぶ(jump)する処理です。

DOSでは、いくつかの割り込みは共通です。

MS-DOS割り込み

http://software.aufheben.info/oohdyna/ms-dos.html

ハードウェアの仕組みとソフトウェア処理 ―― マイコンの動作を理解する

http://www.kumikomi.net/archives/2009/11/post_23.php?page=5


試験ソフト

当時シグオペをしていたPC-VANのN5200ユーザネットに、N5200などDOSの割り込みベクタテーブルを試験するプログラムを提供してくださった方がお見えになりました。

順番に、または指定した割り込みベクタテーブルを呼び、その割り込みがBIOSまたはDOSではどういう機能があるかを試験するものです。このソフトを使って、PC-9801とN5200の割り込みの処理の違いを体系的に、効率的に確認することができました。感謝です。


ソフトウェアの出発点は試験(test)ソフトウェアを書くことだと理解しました。


画面 大きさと処理

画面はPCの機種によって大きさが違いました。また、処理する画面用ICによって処理内容が異なります。

画面はグラフィックメモリを、メインメモリに取るか、別のメモリ空間に取るかなど、機種によって違いがあったと思います。(要調査)

エディタは画面が大きければ、それだけたくさんの文字を表示することができます。PC-9801が640-400くらいの頃に、PC-98XAと同等の1120x780と、約3倍の情報が表示できました。Pythonで計算してみました。

$ python

Python 3.6.0 |Anaconda 4.3.0 (x86_64)| (default, Dec 23 2016, 13:19:00)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 640*400
256000
>>> 1120*780
873600
>>> 873600/256000
3.4125

最後の数字の直打ちはご記入の原因となるとの神の声があり、変更します。

>>> A=640*400

>>> B=11200*780
>>> A
256000
>>> B
8736000
>>> B/A
34.125
>>>


アセンブラを1行づつ註釈(comment)

画面の表示まで一応できた時点で、試験の意味を兼ねて、アセンブラのソースコードを1行づつ註釈にして、アセンブルし、リンクし、実行するという作業を繰り返しました。

この作業は、アセンブラの1行づつの役割を確認することができることと、註釈にした前の行でデバッガを止めて、註釈にした行がどのような機能があるかを確認したものです。

ある日、ある行を註釈にしたら、VZエディタの画面の巻取り(scroll)が高速になりました。

VZエディタ自体が、more, lessコマンドと同様な機構を利用し、画面の巻取り(scroll)が高速なことで評判な道具でした。それが、さらに3倍くらい速い。ちょうど、PC-9801の値段とN5200の値段の差くらい速度が違う。

これまで、同じ8086系のCPUを使い、なんでこんなに価格が違うんだという疑問を持っていました。

ここで、一気に疑問が氷解しました。画面周りはハードウェアの基本仕様が大きいだけでなく、高速であることだと。


debugコマンドでできる仕様の確認

上記, wikiにMS-DOSだとN5200の機能が利用できないという記述がありました。ハードウェアの仕様が公開されていないために利用できないかもしれない機能があるが、割り込みベクタテーブルの試験と、アセンブラソースの1行づつのコメント化で利用できる機能があったことを追記しました。

新たな命令が必要な機能は、もっと詳しく調べないといけません。


debugコマンド(dos)

debugコマンドだけで調べられる機能もありました。

https://msdn.microsoft.com/en-us/library/cc722863.aspx#XSLTsection125121120120

$ debug

- d xxxx:0000

としました。


三方よし


自分(first party)

地方のつまらないプログラマで、PC-VANのACOSクラブのサブシス、N5200ユーザネットのシスオペ。名古屋デザイン博の際に作成したデポネットのシステム管理者の一人など、社会的活動はしてきましたが、技術的活動でめぼしいものがなかったのに、一気に利用者が三桁になるソフトの設計・保守担当になり、多くの方々から、ご意見、ご要望、ご指摘をいただくようになりました。

東京に出張した際には、日本電気グループの技術者の方が20名以上集まっていただいて、意見交換をすることもできました。また、それから15年後に、日本電気社内で別件で講演した際に、掴みの話題としてお話しすることができました。


顧客(second party)

主に、日本電気社内、日本電気系ソフトウェア会社、メインフレーム・オフコン利用者の三種類の顧客の方々、PC-9801で作業するより、N5200で作業する方が高速であるという環境を提供することができました。

PC-9801でいいのにN5200を誰かが決めて導入されて、仕事がはかどらなくて困っていたプログラマが、アセンブラやC言語で、PC-9801以上に高速に編集することができました。道具の改善が作業改善の基本だということがここでわかります。道具の改善で成果を出していない人が、どれくらい声高に改善を叫んでも説得力がないことがわかるかもしれません。


社会(third party)

その他のオフコン利用者の方々が、閉じた道具を使って不便をしているよりも、まずDOSが動く環境さえ構築できれば、その上でさらに便利な道具が使えるという道を開いたのかもしれません。ちょうど、LinuxやDocker, Eclipseで急速に設計環境が向上しているのに似ているかもしれません。

ダウンサイジング、オープン化という掛け声だけでなく、8086系のCPUとDOSの公開情報を元に、仕様が非公開の機種でもソフトウェアが移植可能だという理解を深めることができました。


閑話休題


割り込みでメモリを埋める

CPUによってメモリの初期化の仕組みが違います。

CPUが同じでも、ファームウェアやOSの初期化ルーチンでメモリの初期化の仕組みが違います。

いくつかのCPU、モニタ、OSの初期化処理で、メモリを0で埋めるものがあります。

N5200では、int 03 break point がメモリの中に埋め込まれていることがわかりました。

N5200は、その番地に飛ぶと、breakしてデバッガが起動する値を埋め込んでいるらしいです。

http://stanislavs.org/helppc/int_table.html


参考文献

VZ倶楽部, ビレッジセンター, 1991

https://researchmap.jp/joaglnxz8-50024/

WE LOVE VZ Editor,遠藤 啓治,技術評論社, 1989

https://www.amazon.co.jp/dp/4874083447/

実践PC‐98アセンブラ入門―食わず嫌いで済ましている人のための実践PC‐98アセンブラ入門, 遠藤啓治. 1989, ISBN 978-4874083161

https://www.amazon.co.jp/dp/4874083161

Vz関係 フリーソフト一覧

https://www.vector.co.jp/vpack/filearea/dos/writing/edit/vz


文書履歴

ver. 0.10 初稿 20180323

ver. 0.11 「いいね」をいただいたのを機に表現を追記。20180802

ver. 0.12 参考資料追記 20190429

ver. 0.13 VZ倶楽部画像等追記 20190711

このエントリーをはてなブックマークに追加