JRF Flag Semaphore for NES Emulator を作った
大学時代、ブラウザは xmosaic か最新の netscape かというころ、ウェブのウィジェットを作るネタを考えていて、ふとそのコントを思い出した。そのころの知り合いが、入力された文字列を元に 3D で文字を表示できるようにしたりしたと聞いていた。私は、そういう技術面でのすごさを出せなくても、ネタ的にクスッと笑えるようなものとして、「手旗フォント」みたいなものを作りたいと思った。
でも、ネタはネタでしかなく、研究の片手間で、しかもそのころは(セキュリティ等の問題で) JavaScript なんてあってないようなものだったし、サーバーは個人でそんな自由にならないし…と何かと理由を付けて先に伸ばしていくうちに、すっかりそんな気はなくなっていた。(というかそれどころじゃなくなった。)
最近、No_Ad_URL を作って、それがたまたま小切手や手形のように使えるような感じになったことから、その周りの妄想を膨らましていくうちに、クレジットカードが「サイン」の発展形だとするなら、「印鑑」はどの辺の技術だろうと考えたところ、ファミコンなどの ROM が近いのではないかと思うようになった。
最近の JavaScript はローカルファイルも扱えるという凄いんだか、怖いんだかの機能もあって、例えば、ROM がデバイスに差さっていたら、その内容等を使って(No_Ad_URLの)電子署名を Tweet などすれば、印鑑のように使えるのではないか?もちろん、偽造の心配はあるが、印鑑もそもそも偽造の心配はあるもので、ROM のゲーム性(ゲーマーの嫉妬心)などと組み合わせれば、社会的に機能できたりしないか?…とか考えてた。
ただ、現実の JavaScript はまだデバイス名までは知ることができず、とにかくその方向で実証できることはないか?それには何かと自由にできる自分で作った ROM データが簡単なものでもあったほうがいい。一からゲームを作るのはしんどいが、「簡単」でもそれなりにネタになるものがいい。そういえば昔、手旗に関していろいろやろうとしてたな。…と思い出した。
そう思い立って一ヶ月、習慣を崩してでも集中して打ち込んで、やっと形になってきて、今回、それを公開するところまで来た。
とはいえ、実は、今回のは、区切りを急いだ「暫定公開」という色彩が強い。ここのブログがお世話になってるココログのアクセス解析のシステム変更がこの12月から2月にかけてあった。私は習慣としてアクセス解析の概要を三ヶ月ごとに公開するのを続けていて、それはやっぱり続けたいから、その変更に合わせた開発をせねばならない。その開発のために、今回の「プロジェクト」は一端中断せねばならず、とにかく区切りを急いだ。
■ |
実装
|
jrf_semaphore.html に、JSNES というファミコンエミュレータ上で動いている実装がある。最近の JavaScript の機能を多く使っている上に、「実証」が目的であることから、クロスブラウザ的な部分は考慮が薄く、Firefox と Google Chrome でしか動作確認をしていない。
そこの説明にあるように、手旗信号と組み合わせる Transliteration ルーチンなどが入った jrf_semaphore.pl も提供している。NES の ROM データがあくまでメインで、この Perl スクリプトは今回は「おまけ」的な性格になるため、その実装をはしょって、もうちょっと、早く公開する予定だったが、完成度を上げてるうちに時間がたってしまった。
メインのソースがアセンブラで、当然、「構造化」すらなくパッと見て何やってるかわかりにくいから、コメント等を充実するべきなのだが、そこが犠牲になってしまった。中断後、開発を再開してから、ドキュメント等の充実をはかりたい。
更新情報はブログ記事のコメント欄に書いていくのが私のいつもの流儀だが、この記事は、もしかすると「暫定公開」版の更新情報までで、それ以降は開発再開時に書く予定の別の解説記事の下にコメントする形になるかもしれない。
上の HTML にもあるが、こちらにもアーカイブのリンクをしておく。
|
「数式」的と言えるほどシンプルではなく、私の個性が強く出たプログラム群なので、マネタイズも考えずに「パブリックドメイン」にするのは、技術者集団的に問題があるかもしれないが、そこが気になる方は、上に書いたように電子金融というマネーの根幹に関わる狙いがあっての、道ならしの公共事業的なものとご納得いただけないかと願う。
■ |
参考
|
アセンブラは Z80 から 8086 系までを趣味でしかやったことがなく、ファミコン(NES)の 6502 のモトローラ系は(ほぼ)はじめてでいろいろとまどいながら、やった。NES に関しては、ネット上に情報も多く、それを大いに参考にした。
モンティ・パイソンのコントで知った程度なので、手旗(やモールス信号)に関する知識もないに等しい。下記のように書籍は一冊買ったが、Wikipedia を中心に、それもネット上の情報を大いに参考にしている。
JavaScript や Perl に関しては、いつものごとくネットに頼って開発している。「趣味」レベルではあっても、私もこれまでいろいろ開発して以前からの蓄積もあり、これらはもういちいち書いてられない。
もちろん、リアルでも暗に陽に様々なサポートを受けている。私は本当に恵まれていると感じる。
諸々、改めて感謝の意を表する。ありがとうございます。
|
■ |
FAQ (想定)質問解答集
|
||||||||||||||||||||||||||||||||
■ |
追記 (2017-04-29)
|
開発中に入院などもあったが、退院してもう三年ぐらい経つ。更新にあたって、アーカイブに含まれる文章をなおしたりしたが、上の記事を直すまではしなかった。開発に時間はとれるけど、もうやる気はあまりなく、「暫定公開」という性格は今も変わりないから。
このプロジェクトのあとに作った quail-naggy.el で、jrf_semaphore.pl で使っていた Naggy:Backend の完成度を上げることになった。 jrf_semaphore.pl の段階でバグがあったことも気付き、いつか、その変更をこちらのプロジェクトに持ち帰りたいと思っていたが、なかなか手がつかなかった。そうこうしているうちに quail-naggy.el に大きな変更を加えることになったので、それに合わせて、こちらも更新することにした。
上でちょっと述べた Naggy::Front という感じにまでは致らなかったが、-T naggy と指定して日本語変換ができるようにしたのが大きな変更である。ただ、それを使うには quail-naggy.el で使っている辞書類を別途コピーする必要がありインストールが難しい。がんばれば、quail-naggy.el のディレクトリとの共通化もできるはずだが、あまりおすすめしない。
使い方の例は jrf_semaphore.html で書いた。少し詳しく説明すると、 koreha,h. とすると「これは」に変換される。,h. の部分で変換方法をひらがなにするように指定している。同様に ,a. で ascii 変換、,k. でカタカナ変換。例にはないが ,u. で Unicode 変換、,greek. でギリシャ語変換など、 quail-naggy.el の方式指定変換で使えるものが #greek と ,greek. という違いはあるが、使える。,j. で SKK 漢字変換、,J. で単漢字変換をする。変換候補は j に , を続けることで、例えば ,j,,. として選ぶことができる。第一変換候補については特別で ,j,. は ,j. と同じとした。単漢字変換でキーボード位置での指定は例えば2ページ目の m なら ,J,,m. とする。キーボードの"," "." "/" ";" は入力がかぶるので、替わりに "C" "V" "B" "G" を使う。コンマ(,)を入力したいときは二つつなげて ,, と入力する。「、」を入力したければ ,,,h. とすればいい。
まぁ、この機能をまともに使おうとする人はいないと思うが、作れるので作ってみたといったところ。
更新: | 2014-03-11,2014-03-12,2014-03-18,2014-03-21,2017-04-29,2020-01-23,2020-05-14 |
初公開: | 2014年03月11日 08:02:03 |
最新版: | 2020年05月14日 04:22:52 |
2014-03-11 08:00:00 (JST) in Perl ハード JRF 作成ソフトウェア JavaScript | 固定リンク | コメント (18) | トラックバック (0)
トラックバック
他サイトなどからこの記事に自薦された関連記事(トラックバック)はまだありません。
» JRF のソフトウェア Tips:JRF Flag Semaphore for NES Emulator を作った (この記事)
コメント
…だった。別に、東日本大震災から3年の日に合わせるつもりはなかったが、ちょうどその時期になったので、がんばって日を合わせてみた。
投稿: JRF | 2014-03-18 01:34:13 (JST)
バージョンの数値は、jrf_semaphore.asm や jrf_semaphore.pl のバージョンのうちの一番大きいものになる予定。
今回の更新は、とりあえず一週間たったので、いちおうの review といったところ。以前書いたように、今は他の作業をメインにしているので、大きな更新はない…はずだったんだが、結構いじってしまっている。
でも、この更新は jrf_semaphore.pl の parse_int でやらかしたポカの修正がメインということにしておく。中を見たらいろいろ変なのが加わってるので、楽しめる(?)人がいるかも。
投稿: JRF | 2014-03-18 01:43:05 (JST)
失敗。さっきのアーカイブ、ファイルを一個入れ忘れてた。ちょっと行儀よくないけど、それ以外の変更はないので、バージョンはそのままということで。
ごめんなさい。
投稿: JRF | 2014-03-18 03:13:23 (JST)
暫定バージョンはこれが最後の予定。細かな改良のみだが、これから大きくいじるため、その前に一旦、公開しておくことにした。
あと、このページの記事は、初公開からこっちずっといろいろ書き足していっている。初公開時には、暫定公開が終ったら別の記事で…みたいなことを書いてたが、たぶん、更新情報はあいかわらずこちらで続け、機能の解説を分けて少しずつ別の記事でやっていくような形にしそうな気がする。
投稿: JRF | 2014-03-21 07:22:48 (JST)
本当は、新機能満載のバージョン 0.10 にしてから公開するつもりだったが、今回は、このアーカイブにも書いたとおり入院したため、中途半端なところで公開となった。申し訳ない。
でも、技術的には(自分的には?)おもしろい要素を盛り込んでるので、ソース読める人は読んで欲しいかな…って贅沢すぎる願いだな(^^;
投稿: JRF | 2014-04-24 16:16:57 (JST)
つまり、jrf_semaphore16p.chr ってのが、発音を変化させる符号等でこれをアルファベットに重ねて使えば Latin-1 ができる…といったものだった。
でも、まだ、並べ方とかむちゃくちゃで、Latin-1 は二枚じゃなく三枚重ねるのを前提にしたほうがいいんじゃないかという思いもあって、jrf_semaphore16p.chr を今追加して バージョン 0.06 にするのはやめた次第。申し訳ないが、今後に期待して下さい。(別にデータ取り出して使ってもわたしゃ怒らんけど。)
投稿: JRF | 2014-05-01 13:19:42 (JST)
新機能はほぼなし。LOG に言い訳を増やした感じ。もう今は精神病のほうがキツくって、開発できない。ひょっとすると、このアプリに関してはこれを最終バージョンにしちゃうかも。
投稿: JRF | 2014-05-25 08:31:32 (JST)
少しの改善で済まそうとしたら、前のバージョンでセーブができなくなってる等致命的なバグがあったため、そこだけ早く直して緊急リリース。あと、latin-1 の実装が中途半端なままの申し訳なさから、昔試験的に作ったアラビア文字の trl をおまけにつけた。
一つ前のバージョン 0.06 はとても「最終バージョン」と呼べるものではなかった。ただ、新機能実装への意欲は今はほとんどないのは変わらない。
投稿: JRF | 2014-06-07 10:16:27 (JST)
上の記事に追記したように quail-naggy.el のバージョンアップに合わせて、少しいじった。「最終バージョン」とか前に言ってて、確かにこれ以上の機能追加は無意味だと思っているところに、「蛇足」することになった。この先は、やはりやる気はないが、どうなるかわからない。
投稿: JRF | 2017-04-29 13:59:58 (JST)
japanese-roman-period.trl と japanese-roman-kutouten.trl の N と NN の定義位置を入れ換えた。それにより「おおばんやき」というのを(逆)変換して「OOBANYAKI」としてしまうのを「OOBANNYAKI」とするように修正した。0.08 で混入したバグ。
Perl や ASM などのプログラムはいじっていないため、バージョン番号を上げずにアップデートという行儀の悪いことをしている。jrf_semaphore.pl も quail-naggy.el も前回のアップデートからあまり私が使用していない。そのためバグに気付くこともほとんどないし、大きな更新へのアイデアも思い浮かんでいない。今回の変更は使われてないであろう機能に関するものだったので、次の大きな更新まで黙っておこうかとチラと思ったが、そうするとかなり先までバグが放っておかれそうだったので、とりあえずの修正だけはしておこうと今回の更新になった。
投稿: JRF | 2017-05-23 17:02:20 (JST)
quail-naggy.el のバージョンアップに合わせて、日本語変換の部分が変更になっているが、ほぼ影響はないものと思われる。しかし、2017-05-23 分の更新が jrf_semaphore.pl に関しては割と意味のある変更だったのにバージョンナンバーを上げなかったので、そのかわりに、今回は、意義の少ない変更でも、バージョンナンバーを 0.09 に上げることにした。
投稿: JRF | 2017-06-08 19:43:39 (JST)
quail-naggy.el のバージョンが 0.09 になるのとあわせて、ほとんど影響はないが、jrf_semaphore.pl もいちおうバージョンナンバーだけ 0.10 に上げておく。
投稿: JRF | 2017-07-13 00:42:06 (JST)
ローマ字カナ変換で、FYA = フャ、FYU = フュ、FYO = フョ に対応して、trl/japanese-roman-*.trl を変更しただけの小さいバージョンアップ。
投稿: JRF | 2017-11-13 00:49:47 (JST)
更新:jrf_semaphore-20200123.tar.gz。バージョン 0.15。
地味だが大きな変更。
J で convert する際も、先頭が大文字の場合は、tankanji ではなく skk 辞書が選択されるようにした。j で convert する際は、以前のまま。
すでに大文字を使って符号化されたものがあれば、変更が必要になる。
ココログにアップロードできなくなっているため SugarSync にアップロード(↓)。
《jrf_semaphore-20200123.tar.gz》
https://www.sugarsync.com/pf/D252372_79_7919575856
その影響で困ったことにネット上の jrf_semaphore.html の更新ができない!
投稿: JRF | 2020-01-23 19:41:54 (JST)
更新:jrf_semaphore-20200124.tar.gz。バージョン 0.16。
J で convert する際に、先頭が大文字の場合の処理を元の tankanji に戻した。内部的に、先頭が大文字の単漢字変換を SKK にするかどうかを default-init.nginit 内で指定するようにした。
これでバージョン 0.15 の悪影響はなくなったはず。
《jrf_semaphore-20200124.tar.gz》
https://www.sugarsync.com/pf/D252372_79_7911292622
投稿: JRF | 2020-01-24 12:28:55 (JST)
更新:ドキュメントのみ更新。
ココログにはアップロードできないため、XREA を利用することにした。
「とりあえずブラウザで“JRF Flag Semaphore”をやってみる」のリンク先を↓にした。
http://jrockford.s1010.xrea.com/archive/nes_semaphore/jrf_semaphore.html
また、GitHub にリポジトリを設けた。
https://github.com/JRF-2018/jrf_semaphore
今回の更新のアーカイブは作っていない。どうしてもという方は GitHub を辿ればいいと思う。
投稿: JRF | 2020-05-14 04:27:16 (JST)
更新:jrf_semaphore-20201201.tar.gz。バージョン 0.17。
jrf_semaphore-20201201.zip に相当するものは↓からどうぞ。
https://github.com/JRF-2018/jrf_semaphore/releases/tag/v0.17
quail-naggy のバージョンアップに合わせて。
先頭が大文字の単漢字変換を SKK 変換にするとき、大文字だけでなく @ の場合もそうするようにした。が、その機能は普通使わないので、基本、こちらに影響はないはず。
投稿: JRF | 2020-12-01 04:43:21 (JST)
更新:jrf_semaphore-2021124.tar.gz。バージョン 0.18。
jrf_semaphore-20211224.zip に相当するものは↓からどうぞ。
https://github.com/JRF-2018/jrf_semaphore/releases/tag/v0.18
quail-naggy のバージョンアップに合わせて。
変換時の : の使い方が少し変わり、二度続けての : (::) は : になるようにした。また、最後が : の扱いは最初が :であるものと同じにした。
投稿: JRF | 2021-12-24 17:29:56 (JST)