OSDN Git Service

[DOC] Add something :-)
[csp-qt/common_source_project-fm7.git] / ABOUT_eFM7_1.txt
1 2016 新年記念 & eFM-7移植作業1周年記念、
2 「eFM-7とその他諸々のこと」
3       Jan 1,2015 K.Ohta <whatisthis.sowhat _at_ gmail.com>
4
5 * Sorry, this document is written in Japanese only,
6   I can't use english well, if you interest of this
7   and you can translate from Japanese to any languages,
8   please translate this.
9   This document is released with GFDL, you can copy
10   and redistribute this document under GFDL.
11   This document is written with UTF-8.
12  この文書は、GFDL(GNU Free Document License)に沿った形で
13  のコピーや再配布が可能です。
14   英語が下手なので日本語だけで書きます、ごめんなさい(´・ω・`)
15   日本語から他の言語に翻訳できる方がいましたら、是非お願い
16   しますm(_ _)m
17
18
19 1.これはなんですか(直訳)
20  eFM-7を作る前段として、Common Source Code Project(以下CSP)
21 をQt+OpenGLに移植する作業をはじめてから、昨年12月30日で一周年
22 となりました。そこで、たぶん30年位経ったら歴史的価値が出るかも
23 知れないな。と思って(^_^;今に至る、色々雑多なことをまとめておこ
24 うと思いました。
25
26 2.前史:XM7/SDL
27  前から、XM7と言う非常に優れたFM-7エミュレータ[1]がありました。
28  しかし、これはWindowsでしか動きませんでした。
29  2008年だったか09年だったかの当時、これをGP2X[2]と言う韓国の
30 携帯ゲーム機で動かし、ザナドゥをやってみたいな。[3]と言う気持ちが
31 あって、XM7作者のたけがみさんに許諾お願いしたら、最初はいまいち
32 だったのですが、SDLとGtkに一時的に移植したもののコードとスクリーン
33 ショットをお見せしたら、比較的簡単に許諾をいただけたので、本格
34 的な作業をはじめました。
35
36 [1] http://retropc.net/ryu/xm7/  現在開発終了
37 [2] https://ja.wikipedia.org/wiki/GP2X
38 [3] 結局はマシンスペックの問題で諦めたのですが…
39
40  で、最初期は、05年前後にGimons氏がGtkに移植していたたのを参考
41 にして、当時最新版のXM7をGtkとSDLに移植する所から始めた訳です。
42  その上で、GtkだとGP2Xでは動かせない。というだけの理由で、SDL上
43 で動くGUIツールキットを探し、Agar[4]と言う物にたどり着いて採用し
44 た訳です。
45 [4] http://www.libagar.org/
46
47  当時は、色々と病気が吹き出していて、今考えるといつ病死していても
48 全くおかしくなかったような時期で、病気で身体が動かない合間を縫って
49 の作業となりましたが、2010年の頭には、そこそこ実用性があるものが出
50 来ました。
51  <B>ただし、Agarがバグだらけなのを除いて</B>。
52  その上で、バグを一つ一つ潰し、途中で負荷分散を真剣に考えた末に
53 マルチスレッド化[5]からOpenCLへのオフロードを2011年前後に行い、
54 その上で開発が低調になっていきました。
55
56 [5] これは、eFM-7やCSP/Qtにも活かされてます。OpenCLは、
57     パフォーマンスが出ないので今後は多分やらないと思いますが。
58    
59  本家(たげがみさん版XM7)がほぼ完成させてしまったこともあります
60 が、東日本大震災でラジオの重要さに気がついたことがあり、Open I2C
61 Radio[6][7]と言うプロジェクトに注力する事になったのが大きいです。
62
63 [6] https://osdn.jp/projects/openi2cradio/
64 [7] http://sky.geocities.jp/artanejp/
65
66  そんなこんなで、2014年も終わりに近づくまで、二つのプロジェクトを
67 進め、Open I2C Radioは2013年の半ば(だったと思う)にはほぼ安定し
68 て、次のプロジェクトとして、RTL2832Uを使った1セグ受信用のUSBドング
69 ルを短波や中波を受信する事に転用するプロジェクト([7]に収載)をやった
70 りしていました。
71
72 3.XM7について
73  元々、C++が余りパフォーマンスが出せない時代に原型が出来たEM7を引き
74 継いでいる為に、C++のGUI部分やFM音源エミュレータと、C言語の本体という、
75 非常にちぐはぐではあるけど、たしかにパフォーマンスも出るし正確さも未だ
76 私のeFM7よりは優れたものです。その上で、私がC++中心のUIやSDLを使った
77 レンダラを加えるという、なんか屋上屋を重ねた物になってしまい、一度最初
78 から作り直したいよな。と言う欲望が2014年の半ば位にはありました(懺悔)。
79  その上で、ドイツ人のAnna Wu氏と言うエミュレータコレクタ(と言ってい
80 いんだろうか?)の方が、2014年の半ばくらいからたけがみ氏とやり取りし
81 ていたようなんですが、最終的に英語でのやり取りをたけがみ氏やその周辺
82 が嫌がり、揉めるということがありました。
83
84  で、その過程をTwitterで見ていて、いい加減嫌気が差したというか、私は
85 めちゃくちゃ英語が下手な人間ですが元々Debian GNU/Linux[8]等にバグ
86 レポートを投げたり必要に迫られれば英語のコミュニティで開発に関する議論
87 をするのが普通になってた人間でもありますので、なんかその過程に物凄い
88 違和感を感じ、「ここは自分のいるべき場所じゃないんじゃないか」と思い、
89 古くからの友人に愚痴ったりもして、まぁその人は仕事で外国のメーカにも
90 行く人だったから(名前は出せないし多分有名ではないけど、技術力は国内
91 トップクラスのだと思う)、愚痴を訊いてくれて…「ま、英語でやるの当た
92 り前やん(^^)」と言ってくれたのがあって、背中を圧された訳ですね。
93
94  それが、2014年の12月28日だったか。
95  結局、CSPにFM-7系を乗っける方向に、舵を切り、2014年の12月30日にgit
96 リポジトリ[9]を構築して、そこに当時の最新のCSPのソースコードを入れた訳で
97 す。
98
99 [8] 奇しくも、2015年12月28日に、Ian Murdok氏が警察の暴行により、亡く
100     なられました。享年42。
101 [9] https://github.com/Artanejp/common_source_project-fm7
102
103 4.CSPの移植開始
104
105  移植にあたって、最初はツールキットについてはAgarを使っていました。
106 <B>とりあえず動きますよ。と言う検証作業が楽だから</B>です。
107  そこで、最初にX1 TurboとPC-8801MAを動かしました。[10]その上で、
108 Agarはバグが多いし移植性とか色々問題を抱えてるので、別の汎用性の高い
109 ツールキットを使うことにした訳です。[11]
110
111 [10] 動作検証するためのソフトウェアがたくさんありましたので(^_^;
112 [11] もう、GP2Xで動かすのは諦めました(^_^;
113
114  で、何を使おうかな。と思いましたが、Gtkは3になってどんどんアレコレ
115 必要になってきた上に、Gnome 3のバグの多さもあって印象が良くなかった
116 ので、<B>じゃぁ、全く使ったこと無いけどQtにしちゃいましょう。</B>と。
117  調べてみると、音声関係とジョイスティックは標準で持ってなかったの
118 で、SDLに任せましょう。描画周りはOpenGL必須にしましょう。慈悲はない。
119  と言う事で、大まかな方針を立てて、移植をしていった訳です。
120  この作業自体は、Qtを手探りで使っていて物凄く汚くも統一性のないコード
121 ではあったものの、2015年の3月には大半のVMをのせることが可能になるに
122 至りました。
123  gitのログを見てると、
124   ・1月8日に、AgarでX1がほぼコンパイラが通せて大まかに動かせた
125      (commit fc894319809e05692fd447a5f232a46ebdf17c7 の少し後)
126   ・1月10日に、Agarの駄目さに音を上げて、Qtに転換する事を決断した
127      (commit 98ac2645ec6a3798072445ac003f08d529d6065c )
128  ・1月11日に、Qtでコンパイラが通るようになった
129   (commit 1033cc86e36b8e1d38771ef404e7d43ad07ebb39 )
130  ・1月12日に、描画系とGUIの基礎が完成しVMが動いた?(ただしバグあり)
131      (commit e5887aa7464c7276eef9d2578ea880988f3da60d )
132   ・1月13日に、キーボード系が出来て描画系のバグも一旦取れた
133      (commit 6deec5abac027eca1a71fa89e485650d3c9735da )
134  と言う感じで、12月30日に着手し、そこから10日間はAgarでなんとかしよう
135 としたけど、色々嫌になったのかQtに切り替えて、一日でQt適用のための基礎
136 設計が上がり、そこから一週間で、今の基礎になる部分が出来上がっていった
137 訳ですね。
138  そこから、どんどんと幾つかのVMを動くようにしていくので、1月28日まで
139 進み[12]、そこからは既存のVMを動くようにするのとFM-7の本格的な実装を
140 していった訳です。[13]
141
142 [12] commit ce574213769b2685ead0df84c81f193e519d3906 以降
143 [13] 2014年12月31日にはFM-7の実装を試みてやっていたのですが
144      (commit e409be1add5f6b9ddf76bada7c24469cb35ae2bc 以降)、
145      色々立ちゆかなくなかったのでAgarやQtの本家への適用を先にする
146      事になったのでしたが…
147
148 5.eFM-7
149  さて、ここまでくれば、FM-7の移植ですね。となり、実家から保護した80年代
150 のOh!FM誌とWEB上に散在するFM-7のI/Oマップと本家CSPのVMコード、後は当時は
151 公開されてたXM7のソースコードにあるTips的なhackの内容を汲みとって、自前で
152 コードを再構築していった(著作権侵害はしたくないので…)上で、
153 2015年の2月から3月にかけて、FM-7の実装をやっていった訳です。
154  で、3月11日(奇しくも東日本大震災から四周年の日だ!)に動かないまでも
155 リンクが通るようになり[14]、6809 MPUの記述の間違い[15]やdisk.cpp/mb8877.cpp
156 での時分秒フォーマット[16]対応部分を直しつつ、3月の末には、多くのFM-7用ソフ
157 トが動くようになりました。[17]
158
159 [14] commit 65fe797cd5a681ba25c14a88566d7c80d0a8cd9a
160 [15] これは、基になってるMAMEのコードのヴァージョンが旧いことに由来する物で、
161    勿論、雑多な未定義命令は実装されてなかったですし、フラグの動きも問題が
162    ありました。
163    ここら辺の修正作業は2015年の11月まで引きずっていて、途中で神奈川県立
164    川崎図書館に行って、多くの(実家で破棄されてしまった)資料を入手し、
165    MC6809以外の部分を含めて修正に修正を重ねていきました。
166    今のmc6809.cppは完成版と言って支障ないと思っています。
167 [16] MB8877は、フォーマット時のデータ列でのF5,F6,F7をFDCに対するコマンドに
168      割り当ててますので、特殊なことをやらないと、セクタ番号F5〜F7は書く事が
169      出来ないです。80年代の、パソコンではこれをコピープロテクトに使ったソフト
170      が沢山あって、当時F5〜F7のキャラクタコードが「時分秒」であったので、
171      この手の特殊フォーマットは「時分秒フォーマット」と呼ばれていました。
172 [17] commit 3c875fb911e484c15bfdad2f67dadb9bdedd5e75
173
174  次に目標にしたのは、FM77AVでした。
175  これは、MMUや論理演算・直線補間LSI(ALU)と言った独自デバイスを積んでいて、
176 ALUの基本的なコマンド列は、XM7を参考にしました。
177  Anna氏とたけがみ氏が揉めた最大の理由が、MESSでこの辺りのデバイスの内部
178 記述をXM7から丸パクリした事に対して、Anna氏を通じて抗議したものの、MESS
179 コミュニティからの回答が全く無い。と言う非常にふざけた話でしたので、この
180 辺りは他の部分に増して気をつけて書いたつもりです。[18]
181  現状、仕様通りには動くようになっていて、ALUの細かいhackができてないかも…
182 と言う感じのところです(サイオブレードの字の描画とか)。
183  タイミング計算には若干の問題が出てますので、直す機会を伺ってはいます。
184
185 [18] ALUの内部構造で、直線補間機能でC言語の割り算演算を使って書かれてるの
186    は、実はそういう理由からだったりします。
187
188  ここら辺含めて、2ちゃんねるの「昔のPC」板の、PCエミュレータ総合スレに
189 ちょくちょくバイナリを投げてはバグ報告や改善案をスレ住人の皆さんにお聞きする
190 ようになったのも、この辺りからだったと思います。当時はWindowsでは動かなかった
191 のではありますが(後に動かせるようになる)。
192  この作業はなんだかんだで難航してまして、ほとんどのソフトが齟齬なく動くよう
193 になったのが、6月16日前後でした。結局三ヶ月かかってる。[19]
194
195 [19] commit 1b4320ef6229e75013478fe1ec66ed1eb3c47bd5
196
197  次は、FM-77を作りました。これは、そんなに苦しくなく進められました。ただし、
198 現物を持っていないFM-77L4の400ライン部分を諦めることでですが。
199  ただし、ブートシーケンスやメモリマップがFM-7とも77AVとも微妙に違うところは
200 見落としそうになって、後から気がつくこともありました。特にブートRAM周り。
201
202  さて、ここまで来たら、FM77AV40EXのDMACその他を実装することに、必然的になる
203 訳ですが…動くソフトが増えると色々なバグが噴き出してきたり、色々弄らないといけ
204 なくなるので、なんだかんだでここでも数カ月かかりました。
205  この時期の成果の多くが、CSP原作者の武田さんの作業にフィードバックされています。
206  武田さん、本当にありがとうございます m(_ _)m
207
208 …で、9月の14日に、AV40EXもほぼ大丈夫になり[20]、そこからはWindowsへの適用
209 や、全てのVMを移植していくようになる訳です。
210  FM-8はやるやる詐欺をしてしまってますが、いい加減やっていこうと思ってはいます。
211
212 [20] commit bbf5ed7132304d6e4c19da3cb2d634923eb55a5b あたり
213
214  そして、そこからの一ヶ月弱でMinGWを使ってのWindows向けクロス開発環境を構築
215 したり、ライブラリのAPIの違いを吸収し、Win32版もバイナリパッケージになるべく同梱
216 するようにして、武田さんとの2ちゃんねるを経由しての議論を交わしつつ、今に至る
217 訳です。
218
219 5.さいごに
220  CSPも、Qt適用版も、まだまだ進化していきます。私の側から提案するものもあれば、武田
221 さんが提案する物や2ちゃんねるのスレ住人の提案を入れ込んだものもある。
222  こういう、FOSSの醍醐味のようなものをできるというのは、本当にいいなと思います。
223  そして、FM-7系に関しては、特にAV系の検証が甘いのは否定できないので、色々とやってい
224 く事がぱらぱらとあるでしょう。でも、まぁ、マイペースでこれからもやっていきますので、
225 武田さんとユーザの皆様含め、皆様よろしくお願いします m(_ _)m
226
227                                2016 1.1 K.Ohta <whatisthis.sowhat _at_ gmail.com>