UNIX環境によるマイクロマウスの開発{Linux活用事例の紹介}

1997年4月13日 TY電子研究室 安井 教郎
※12/17/2001 再公開に当たって。この記事の内容は、1997年当時の認識に基づいて記載されています。現在では、色々なツールがLinux上で動くようになっていますので、色々情報を集めてみてください。今の所、書き直す予定はありません。

○開発ツール{三日酔いの開発での実例}

マイクロマウス:三日酔いは、前作の二日酔いの出来の悪さに情けなくなった我々が、 ネットワーク環境の中で分散開発した。もちろん、UNIXが動作する計算機のネットワークで だ(三日酔いその1の大会エントリ用紙中の開発環境には、実際に使われた計算機が列挙 してある。そんなんで、枠の中はぎっしり書き込まれていた。)。ここでは、その現場で使われたツールを紹介する。

★テキストエディタ:Muleで書き書き

数多くあるUNIX用のテキストエディタの内、Mule(Emacsの多言語版)を使用している。 このエディタはEmacs Lispという言語でカスタマイズが自由に出来る。又、多くの 人の手により改良・作成されたプログラムで非常に強力なエディタとなっている。

日本語入力システムもまた数多く提供されている。Muleでは skk, wnn, cannaが 有名所であるが、私はcannaを好んで使用している。しかしながらcannaの変換辞書は あまり賢くなく、OAK並である(単文節変換が無難なところ)。 ;-)
これではあまりに寂しいので、PC互換機のDOS/V用の仮名漢字変換システムをUNIXで 利用出来るような仕組みも用意されている。これは、fepbridgeと呼ばれ広く公開さ れている。

Mule(Emacs)以外に有名なテキストエディタに viがある。オリジナルの viは 日本語が扱えないが、vimという viクローンの日本語化版である jvimが扱えるように なっている。Emacs vs vi なんてやった日には収集が着かなくなるほど双方に愛好者は多い 事からも、好みなエディタを使えば幸せになれる?

Mule Version 2.3の見た目はこんな感じ。
muleの絵があります


★クロスアセンブラ{zmacでらくらくアセンブル}

我々のマウスは、z80をBaseとしたCPUを使っているので、開発ホスト(Intel x86)用の セルフアセンブラは使用できない。そこで、zmac というクロス・マクロアセンブラを 使用している。

zmacの能書きおば。zmac.yによると、
zmac -- macro cross-assembler for the Zilog Z80 microprocessor
Bruce Norskog 4/78
Last modification 1-18-87 by cdk
This assembler is modeled after the Intel 8080 macro cross-assembler for the Intel 8080 by Ken Borgendale.
The major features are:

  1. Full macro capabilities
  2. Conditional assembly
  3. A very flexible set of listing options and pseudo-ops
  4. Symbol table output
  5. Error report
  6. Elimination of sequential searching
  7. Commenting of source
  8. Facilities for system definiton files
ということで、随分昔に作成されたプログラムです。でも、作りは非常にエレガント。 また、Z80自体が今も使われている事自体が脅威的なわけだが。;-)

gcc,g++(GNU project C and C++ Compiler)でサポートされたCPUであれば、gccやg++は クロス・コンパイラを構成することが出来るので、組み込み用途にも使う事ができる。 但し、ライブラリからすべて自前で準備(移植)する必要があるかも?
売り物だが、京都マイクロコンピュータが 日立SHシリーズ用、日電V820シリーズ用に gcc をDOSで動くようにした物をライブラリ付で売っている。コンパイラ自体のソースはGPLの 規定により請求すれば手数料のみで入手可能(Interface誌1997/01月号)。但し、 ライブラリは京都マイクロコンピュータのものなので購入するしかない。

全然関係ないけど、Interface誌 に Editorial Notesというコーナがあるが 1997年5月号の のそれが、「マイクロマウスと仲間」というタイトルであった。詳しくはInterface誌を見て 欲しい。私にとっては、現在進行形なのでなんとも言えない。
#そーいえば、マウスにハマッテ今の仕事に就いたんだっけ。


★CPUシミュレータ{z80sim,fepz80eでお手軽Debug}

実機にプログラムを載せる前に、あらかじめ迷路解析アルゴリズム等のデバック出来る部分 についてはバグの洗い出しを行っておくと良い。こうする事で多少なりとも完成度が高め られれば完走する確立がアップするというもの。

我々のマウスはZ80をBaseにしたCPUを使っているので、Z80のCPUシミュレータについて 紹介する。まず、一つ目に z80sim。次にfepz80e。

z80sim .... a Z80-CPU simulator by Udo Munk

z80simはCP/Mのエミュレータを構成するプログラムの一つである。CP/Mが動くのに必要 十分な機能が盛り込まれている。但し、Zilog非公開命令は実装されていない。。

実機と、z80simとで迷路解析結果が異なるので調べたら。。。判明 ;_; また、移植性が 高くないプログラムであり、Linuxでは簡単には完全動作させられない。古いプログラム に手間をかけるよりは、自作してしまおう!という事となり、fepz80eを企画した。

ちなみに、z80simをFMV-5100NC/S という Linux Note Book にて動作させた場合、

Sat@fuji7> z80sim 
#######  #####    ###            #####    ###   #     #
     #  #     #  #   #          #     #    #    ##   ##
    #   #     # #     #         #          #    # # # #
   #     #####  #     #  #####   #####     #    #  #  #
  #     #     # #     #               #    #    #     #
 #      #     #  #   #          #     #    #    #     #
#######  #####    ###            #####    ###   #     #

Release 1.7, Copyright (C) 1987-92 by Udo Munk

>>> c
clock frequency =  8.08 Mhz
>>> 
と、Z80 8Mhzぐらいだそう。

fepz80e ... front end program for portable Z80 emulator within fMSX by Takao Yasui

fepz80eは、fMSXというMSXエミュレータのz80エミュレーションエンジンを使って 構成されている。fMSXは色々な環境に移植された完成度の高いMSXエミュレータである。 そんな枯れたプログラムのコードを使用するので、CPUエミュレーションのバグは 無い(と判断)。

特徴は、


★ターゲットプログラムの転送{kermitでお手軽転送}

我々のマウスには簡易Remote Debugerが実装されており、Intel Hex形式の ターゲットプログラムを直接 Downloadできるようになっている。開発用ホストマシン上には ダム・ターミナルを用意すればプログラム転送が簡単に行える。

そこで、kermit というターミナルプログラムを使用して転送を行っている。kermitには、 テキスト送信時の行間待ち時間・プロンプトの指定が出来るので重宝する。

kermitを使ってプログラムを転送する例

Sat@moegi57> kermit 
C-Kermit 5A(189), 30 June 93, POSIX
Type ? or HELP for help
C-Kermit>set speed 9600
/dev/modem, 9600 bps
C-Kermit>c
Connecting to /dev/modem, speed 9600.
The escape character is Ctrl-\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
STARTUP Kenel !
---- Micro kernel for Micro mouse ----
Remote monitor of TY4MON with ROMM[Real time OS for Micro Mouse]
Copyright (c) 1994-1996  T.Yasui

>
a.....SET Pointer
p.....Read Pointer
r.....Read inc. Memory
e.....Read dec. Memory
w.....Write inc. Memory
i.....Read I/O
o.....Write I/O
g.....Goto Pointer
c.....call Jump
t.....Data Load on Intel HEX Format
h.....Help Massage( This!! )
l.....Task Link Display
+.....Pointer increase
-.....Pointer decline
>Plase Transmit Program with Intel Hex Format.

(Back at moegi)
C-Kermit>set transmit pause 40
C-Kermit>set transmit prompt 0
C-Kermit>transmit /home/mouse/part4/main.hex
Finish Transmit.
C-Kermit>c
Connecting to /dev/modem, speed 9600.
The escape character is Ctrl-\ (ASCII 28, FS)
Type the escape character followed by C to get back,
or followed by ? to see other options.
他にcu,minicom,xc等がターミナルプログラムとして公開されている。


★マップエディタ{MapEditで迷路かきかき}

Tclというスクリプト言語、Tkというグラフィックライブラリを組み合わせて、マウス用の 迷路エディタを練習がてら作成してみた。
外観はこんな感じ
MapEditの絵

○私がLinuxを使うわけ

ここまで、紹介してきたツールはLinux(UNIX)で無くとも DOS/Windozeで用意されている物 ばかり。しかし、
  1. 環境を揃えるのに、少なくない費用がかかる。
  2. 環境が不安定になることが多い(ハングアップ等)。
  3. 不具合が見つかったときに対処されるのが遅い。
2.に異論がおありかと思うが、バックグランドで ソフトウェア Midiシンセサイザを動かしつつ、Webブラウザを開いてドキュメント参照し、テキストエディタで窓を4つも5つも開いてプログラムを編集して、脇ではEmi-Clockが。そして、Quick Time Video でアルゴリズムを解析するために Videoを見る。
安心してプログラム書けますか? そんな事をするほうが悪いのかしらん? Linuxでは安心して 仕事ができます。

#大久保さんゴメンンサイ。yebisuのハングはもしかしたら、PCI-BUSの設定がまずいのかも?
#特に NCR SCSI。

とある日の、Linux BOXの画面スナップショット
こんな感じで作業しています 左下の方にFPEZ80EのGUI版(Tk版)の開発途上のが見えている ;-)

まぁ、Linuxで出来ないと言えば、

といった所でしょうか。やっぱり個人の趣味の問題ですね。。UNIXを勉強したくて、それなりに 時間を割けるならば、Linuxを使ってみるのは非常に為になると思います。
#私は仕事でも普段の環境はLinuxですけど。。Windoze 3.1なんて

○私がLinuxを使うわけ。もう一つの理由

UNIXには、FreeなToolが豊富に揃っているから。例えば言語処理系では、 前出のGNU C Compiler, Perl, Tcl/Tk, Fortran, ML, Lisp and more。
無いものは作ってしまえ!な人には非常に嬉しいことだ。また、これらはソースコードが 公開されているので、その気があれば改造やバグ対処も出来る。

UNIX上で古くからTCP/IP Network機能の実装が行われてきたため、Network Server (家庭内LAN)を構築するのは容易である。各計算機をEthernetで結んで、各資源を共有すること なんかは朝飯まえ。我家では、10BASE-2(軽重同軸ケーブルを使ったEthernet)で計算機を結ん でる。構成は、Linux BOX(moegi), Linux Note(yamabuki), Linux Note(fuji), DOS BOX(kaname), Mac BOX(ayame)の5台が繋がっている。

Linuxは、FreeなOS。媒体(CD-ROM等)の料金ぐらいで、普段必要とする全ての環境が構築できる。 なによりも、CPUのパワーを無駄無く利用(使用者が。OSがでなく)できる。 但し、Freeであるが故に、責任を持ってサポートする窓口(要は、責任をなすりつけられる担当者 がいない)がない事を忘れてならない。全ては使う側で何とか解決しなくてはいけない。
#解決の為の手がかりとなる文書が広く公開されているので、市販ソフトウェアより問題解決 は速い事が多い。:-)


○おわりに

取り留めもなく書いてきましたが、参考になったでしょうか?
これにておしまい。


○参考文献一覧

★Linux本へのポインタ

★参照している図書

□マイクロマウス関連
□Linux, ソフトウェア全般

TY電子研究室(架空) 安井 教郎
yasui.takao(このあとに「@nifty.com」を付加してください)