祝：ソースコード公開：VZエディタ移植の方法と成果。註釈 coding(123)

2024 追記
VZエディタのソースコードが公開されたとのことです。
https://github.com/vcraftjp/VZEditor

順次、記事にしていこうかなって思っています。

祝VZエディタソースコード公開
https://qiita.com/kaizen_nagoya/items/baad23cf4a041ce845a9

オープンソース化されたVZエディタをブラウザ上で動かしてみる
https://qiita.com/Takaraya/items/785ac9319c3934e30703

macOSがIntelCPUを使っていたころには、macOSに移植しようと考えていました。
今は、macOSがARMが基本で、ちょっと移植できそうにありません。ごめんなさい。

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

ヴィレッジセンターから1989年に発売されました。
兵藤嘉彦さん制作です。兵藤嘉彦さんの前作EZエディタからかなり機能充実したアセンブラソースコード付きエディタです。
兵藤嘉彦さんは名古屋工業大学が誇るプログラマのお一人です。
https://ja.wikipedia.org/wiki/VZ_Editor

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

配布は、当初5.25インチFDでした。
![D-_2oujVUAA-gYV.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/554b34c7-9452-7f87-13a5-6c216fe5b71e.png)

Mifesコンパチのマクロを作ってくださった大野元久(当時名工大大学院生)さんにHDDをお貸しする関係で、下宿をおとづれたことは１度あるかもしれない。それ以外は、ほぼ全部Chatだけで打ち合わせはしている。

NOP(NIT(Nagoya Institute of Technology) of Programmers)
https://qiita.com/kaizen_nagoya/items/fb5630980839aa9a6519

### optasm
VZエディタのアセンブラのソースは、optasmというアセンブラでアセンブル、リンクすると、MASM(Microsoft)のアセンブラでアセンブルするより数バイト短く、高速になるという利点がありました。
http://www.drdobbs.com/windows/ms-dos-assemblers-compared/184408073

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

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

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

![210117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/9e4e6dde-baa9-4278-7d5c-96e1c2735333.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ソフトエアを購入して使った経験から推測しました。私がSIGオペをさせていただいていた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と、約３倍の情報が表示できました。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
>>> 
```

# アセンブラを１行づつ註釈(comment)
画面の表示まで一応できた時点で、試験の意味を兼ねて、アセンブラのソースコードを１行づつ註釈にして、アセンブルし、リンクし、実行するという作業を繰り返しました。
この作業は、アセンブラの１行づつの役割を確認することができることと、註釈にした前の行でデバッガを止めて、註釈にした行がどのような機能があるかを確認したものです。

ある日、ある行を註釈にしたら、VZエディタの画面の巻取り(scroll)が高速になりました。
VZエディタ自体が、more, lessコマンドと同様な機構を利用し、画面の巻取り（scroll)が高速なことで評判な道具でした。それが、さらに３倍くらい速い。ちょうど、PC-9801の値段とN5200の値段の差くらい速度が違う。
これまで、同じ8086系のCPUを使い、なんでこんなに価格が違うんだという疑問を持っていました。
ここで、一気に疑問が氷解しました。画面周りはハードウェアの基本仕様が大きいだけでなく、高速であることだと。

機密の開示として文句を言われなかったのは、一つには開発契約を結んでおらず情報の提供を受けていなかったことと、NECのPC-VANのN5200SIGのSIG-OPをしていて、作業を全部開示していて、本当にアセンブラのソースを一行づつ注釈にして実験していたことを公開していたからかもしれない。

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

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

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

## debugコマンド(dos)
debugコマンドだけで調べられる機能もありました。
https://msdn.microsoft.com/en-us/library/cc722863.aspx#XSLTsection125121120120

```
$ debug
- d xxxx:0000
```
としました。

# 三方よし

## 自分(first party)
地方のつまらないプログラマで、PC-VANのACOSクラブのサブシス、N5200ユーザネットのシスオペ。名古屋デザイン博の際に作成したデポネットのシステム管理者の一人など、社会的活動はしてきましたが、技術的活動でめぼしいものがなかったのに、一気に利用者が三桁になるソフトの設計・保守担当になり、多くの方々から、ご意見、ご要望、ご指摘をいただくようになりました。
東京に出張した際には、日本電気グループの技術者の方が２０名以上集まっていただいて、意見交換をすることもできました。また、それから１５年後に、日本電気社内で別件で講演した際に、掴みの話題としてお話しすることができました。

## 顧客(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

# 参考文献(reference)
VZ倶楽部, ビレッジセンター, 1991
https://researchmap.jp/joaglnxz8-50024/

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

> 34. VZ倶楽部
ビレッジセンター, 兵藤嘉彦, [高千穂遙](https://ja.wikipedia.org/wiki/高千穂遙), 西田雅昭, [中村正三郎](https://ja.wikipedia.org/wiki/中村正三郎_(プログラマ)), 中村満, 坂本あきら, 大野元久, 小川清, 
<img width="200" alt="1385246760322774.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/31ae7ad6-0c0c-68d0-cade-c6dbcf02c127.jpeg">
https://bookmeter.com/books/7114945
>日本を席巻したDOS用文字編集ソフト。SFの高千穂遙はじめ、大勢の作家が利用したことで広まる。VZエディタの作者、説明書作成者、発行者、移植担当者、利用者などが書いた随筆集。一人当たりの頁数を割り振っていた。編集の都合上、一人で複数筆名で書いているものあり。一人で４枚書いているのが小川清。記憶では兵藤 嘉彦,中村 満,大野 元久の三人。マニュアル作者の西田雅昭ほか、中村 正三郎、坂本あきらなどの著名人も助言者、利用者として執筆している。

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

開発環境を豊かにする開発事例　過去・現在・未来
https://qiita.com/kaizen_nagoya/items/d9bf0c2c671fe7f1c749

# 関連資料
' @kazuo_reve 私が効果を確認した「小川メソッド」
https://qiita.com/kazuo_reve/items/a3ea1d9171deeccc04da

' @kazuo_reve 新人の方によく展開している有益な情報
https://qiita.com/kazuo_reve/items/d1a3f0ee48e24bba38f1

' @kazuo_reve Vモデルについて勘違いしていたと思ったこと
https://qiita.com/kazuo_reve/items/46fddb094563bd9b2e1e
## 自己記事一覧
プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

逆も真：社会人が最初に確かめるとよいこと。OSEK(69)、Ethernet(59)
https://qiita.com/kaizen_nagoya/items/39afe4a728a31b903ddc

「何を」よりも「誰を」。１０年後のために今見習いたい人たち
https://qiita.com/kaizen_nagoya/items/8045978b16eb49d572b2

Qiitaの記事に３段階または５段階で到達するための方法
https://qiita.com/kaizen_nagoya/items/6e9298296852325adc5e
データサイエンティストの気づき!「勉強だけして仕事に役立てない人。大嫌い!!」『それ自分かも?』ってなった!!!
https://qiita.com/kaizen_nagoya/items/d85830d58d8dd7f71d07

Ethernet 記事一覧　Ethernet(0)
https://qiita.com/kaizen_nagoya/items/88d35e99f74aefc98794

Wireshark 一覧 wireshark(0)、Ethernet(48) 
https://qiita.com/kaizen_nagoya/items/fbed841f61875c4731d0

線網（Wi-Fi）空中線(antenna)(0) 記事一覧(118/300目標)
https://qiita.com/kaizen_nagoya/items/5e5464ac2b24bd4cd001

C++ Support(0)　
https://qiita.com/kaizen_nagoya/items/8720d26f762369a80514

Coding Rules(0) C Secure , MISRA and so on
https://qiita.com/kaizen_nagoya/items/400725644a8a0e90fbb0

Autosar Guidelines C++14 example code compile list(1-169)
https://qiita.com/kaizen_nagoya/items/8ccbf6675c3494d57a76

Error一覧(C/C++, python, bash...) Error(0)
https://qiita.com/kaizen_nagoya/items/48b6cbc8d68eae2c42b8

なぜdockerで機械学習するか 書籍・ソース一覧作成中 (目標100)
https://qiita.com/kaizen_nagoya/items/ddd12477544bf5ba85e2

言語処理100本ノックをdockerで。python覚えるのに最適。:10+12
https://qiita.com/kaizen_nagoya/items/7e7eb7c543e0c18438c4

プログラムちょい替え（0）一覧:4件
https://qiita.com/kaizen_nagoya/items/296d87ef4bfd516bc394

一覧の一覧( The directory of directories of mine.) Qiita(100)
https://qiita.com/kaizen_nagoya/items/7eb0e006543886138f39

プログラマが知っていると良い「公序良俗」
https://qiita.com/kaizen_nagoya/items/9fe7c0dfac2fbd77a945

小川清最終講義、小川清最終講義（再）計画, Ethernet(100) 英語(100) 安全(100)
https://qiita.com/kaizen_nagoya/items/e2df642e3951

＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
This article is an individual impression based on my individual experience. It has nothing to do with the organization or business to which I currently belong.
### 文書履歴(document history)
ver. 0.10 初稿 20180323
ver. 0.11 「いいね」をいただいたのを機に表現を追記。20180802
ver. 0.12 参考資料追記 20190429
ver. 0.13 VZ倶楽部画像等追記 20190711
ver. 0.14 補足 20191218
ver. 0.15 補足 20201226
ver. 0.16 追記 20210726
ver. 0.17 追記 20220918
ver. 0.18 追記 20230403
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
####  Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.

<a href="http://b.hatena.ne.jp/entry/s/qiita.com/kaizen_nagoya/items/5551be98dcbed8f41949" class="hatena-bookmark-button" data-hatena-bookmark-layout="basic-label-counter" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"><img src="https://b.st-hatena.com/images/v4/public/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>