WebAssembly で動作する FM 音源ライブラリー libymfm.wasm |
新しいFM音源エミュレータだそうです。(元々、MAMEのやつらしい)
iPhone のSafariでも動いていますね。。サンプル曲として、パッヘルベル のカノンが聞けます。。
でも、WebAssemblyの使い方はすぐには分かりません。。。勉強しないと。。ymfm 自体はC++で書かれていますが、このライブラリは、Rustがたくさん使われているようです。
WebAssemblyの利点としては、いちいち移植しなくても、いろんな環境で動くことでしょうか。。
もとになっている、このFM音源ライブラリのいいところは、ライセンスが、3条項BSDで、オープンソースなことと、緩いことらしいです。
WebAssembly で動作する FM 音源ライブラリー libymfm.wasm | hiromasa.another :o)
大雪
大阪では、かなり珍しい、朝から大雪でした。
いや、雪国からしたら、それぐらい普通や!と怒られそうですが、久しぶりに、Σ(゚д゚lll)ガーン と言う感じでしたね。汗
交換しておいてよかったです。もし、夏タイヤだったら、「いけません」と言っていたと思いますが。。汗
途中、道の選択を間違って、道が車で詰まっていたのは誤算でした。
当然、迂回したのですが、遅れてしまいました。汗
冬タイヤしていることもあり、そこまで怖くなかったです。ドライと勘違いするほどでしたが、確かに、道は銀色に輝いていますし、コンビニの中で、一瞬空回りしたのと、停止しながら、ハンドルを切ると、やけに軽かったのと、降りた時の踏み締めた感覚で、雪を実感しました。
これが踏み固められて、夜まで残ったり、二日目に持ち越して、凍結??
なんてなってしまうと、どうなるかは、不明ですが。。
がーん
大阪で積もるのは1シーズン1ー2日あるか?と言う感じで、多くても4日ぐらいだと思われます。そして、翌日も道路に雪があることはあまりありません。冬の装備を、用意している率はかなり低いと思います。。
教訓としては、遠回りになろうが、道の選定は慎重にする。11月終わりの方になったら、冬タイヤに交換する。冬タイヤでも過信せずに、車間距離をあけてゆっくり走る。などでしょうか。。
ぶっちゃけ、冬は来てほしくないですが。。。汗
本当に気をつけたいです。。ただ、こっちが対策していても、周りがしているとは限らないので、基本的に、周りの車には近寄らないことが鉄則ですね。。。
Rust で、SDL2 使いたい
sdl2_image を使う場合、下記のように記述したら、うまくいきました。
main.rs
Cargo.toml
[dependencies]
sdl2 = "0.9"
sdl2_image = "0.3"
ソースリスト整形ソフト
ソースリスト整形ソフトで、iP6 Plus とか整形したいです。有名なのは、Clang-Format というのらしいです。どのフォーマットにするのがいいのでしょうか?
それにしても、オプションが多すぎます。。
とりあえず、下記を実現してほしいです。
これを、
if( hoge == 123)
{
printf("hogehoge");
}
これにしてほしい
if( hoge == 123) {
printf("hogehoge");
}
他にも、コメント書いてないのを書くようにするとかもありますが。。
ただ、clang-format は、Macには入っているのを確認しましたが、Windowsは入ってませんでした。(MSYS2 + mingw には入ってませんでした。)
→llvm を入れる必要性があるそうです
Visual Studioのコード整形にClang Formatを適用してみた | ぺんぎんや
*****************************************************************
追記1
Windows のMsys2 で使う場合は、
% pacman -S mingw-w64-x86_64-clang
で入れるようです。
うーん。
Windows (Msys2)でclang-formatを使う | うどんコード
*****************************************************************
追記2
どうしても、下記のよう(関数の後は改行して、制御ぶんの後は、改行入れない)にならなかったのですが、
int func1(void)
{
func2();
if( true) {
....
}
}
下記のページを見てようやくわかりました。
"BreakBeforeBraces: Custom" が必要なようです。
# { } の位置 # "BreakBeforeBraces: Custom" の場合に有効となる # true なら独立行にする BraceWrapping: AfterControlStatement: false # 制御文の後 AfterEnum: true # enumの後 (単一行にしないため) AfterFunction: true # 関数の後 AfterStruct: true # structの後 (単一行にしないため) AfterUnion: true # unionの後 (単一行にしないため) AfterExternBlock: false # externの後 BeforeCatch: false # catchの前 BeforeElse: false # elseの前 # { } の位置をカスタム設定する BreakBeforeBraces: Custom
Visual Studio Code で clang-format を使用する - suimin-busoku
とはいえ、ある程度形ができてしまっている、某 iP6 Plus に適用するのは問題がありますね。。もしやるなら、いじり出した2002年頃、最初にやるべきでした。。
二つ問題があります。一つは、バグが出た場合、普通はいじったところを見るわけですが、今から整形ソフトを全部適用すると、どこが原因か分かりにくくなる。。。
それから、clang-format だけではできないことがあって、たとえば、下記のformat 変更をしてほしいのですが、
(こうなっているのを)
if( true) // comments
{
.....
}
(こういうのにしてほしい)
if( true) { // comments
.....
}
clang-format では、語句の入れ替えとかはしてくれないので、変化なしになります。
つまり、上記の変更をしたい場合は、手作業で全部書き換えるとかになります。。。汗
一部は変更したのですが、(buffer.c とか)基本的には、今後の課題ということになりますね。。。汗 今度から気をつけましょうということでしょうか。。。
iP6 Plus
終了したいと思って、幾星霜
「オープンソース」だと思っていたが、ソースリストの状態がオープンなだけで、(自由ソフトウエアとしての)オープンソースではなかったでござる。。で、やる気が減退。。汗
「無料だといいけど、有料だと契約してね。」という、大昔だとよくあるパターンらしいが、そういうので縛られているらしい。。
何か面白いのを追加しても、オープンソースじゃないとか。。
クローズどソースにすればよかった。。今からでも、クローズどにするとか。。?
(でもここだけの話、エミュレータでそういう縛りをするのって、どうなんだろうか?事実上の有償使用禁止。某帝国が黙っているとは思えないが。。。 ((((;゚Д゚))))ガクガクブルブル)
最初は、ソースリストの先頭に書いてある文章(もちろん全部英語)が目に入っていたが、「無料」ならいいんでしょ? 有料で使わないから大丈夫ぐらいにしか思ってなかったが。。汗
それに、みんな、PC6001V か、PC6001VXか、PC6001VWを使うでしょう?と。。
テープの読み込みに失敗する?あれは、p6top6t を使わないと、いけないが。。。コツがいるので、大変なのはわかる。。。
が、Un*x系だと、ソースリストで互換性を維持しているので、ソースリストがないと困るんだ。
Windows系は、20年前のバイナリーでも、涼しい顔をして走ったりするが、あれは変態的だと思う。。滝汗 互換性をなかなか切れないので、変な仕様が残っていたりするが。。
(Windowsだと、マウスのホイールスクロールが、ガタッガタッと、行単位でしかスクロールしないとか、ドライブ指定(c:、 d:)、オーディオが旧態依然すぎるとか。。汗)
Macなんて、すぐに仕様が変わるし、Xcode変わりまくるし、CPUのアーキテクチャーが変わるし、なんなら、メインのプログラミング言語ごと変わったりする。。数年前のiOS 簡単にできます本が、ゴミになったりする。。(滝汗)
だから、ソースリストは絶対に必要だと思う。
でも、Appleの場合は、公証というので、どこそこのだれべえが作りました。という署名をして、Appleに提出しないと、いけない。まだ、公証しなくても、Macだと、実行する穴は開いてはいるが。。。いつまで開いているんだろう? 謎
エミュレータが、iPhone やiPad で動かないの?ということだけど、普通に、Objective-Cや、Swiftで組めば、動くのは動くが、手元では、短期間しか動かせない。AppStoreに出したいが、おそらく、審査で落とされるだろう。。 なので、個人的には、Emscripten などで、Web化して、実行するという、パターンを考えてしまう。
ただし、Web化するときに、不特定多数の人に公開する場合、実機のROMファイルを入れるのはまずくて、Webなので、ダウンロードできてしまう? 互換ROMを使わせてもらうのが安全か?
というわけで、ソースリストがないと、未来の人は困ってしまう。。。
ただ、すごく未来の人が、1980年台のパソコンのエミュレータで遊ぶのか?というと、かなり謎な気がするけど。。。
iP6 Plus は、変な機能を入れたかった。。が、
自分で好き勝手いじれるエミュレータはすごくいい。
C言語なので、すごくいい。どこからでもその関数を呼べる。。
C++だと、オブジェクトを渡しておかないと、呼べない。。。
ちなみに、iP6 Plus をC++化するのは、骨が折れるというか、それにコミットしても、オープンソースじゃないしな。。。汗
クローズドにしたら、別に自分しか見ないので、動けばいいということになる。汗
骨の髄までC言語なので、多分無理で、処理とデータを同じソースに固めて記述して、どうしても、ソースを跨らないといけないところだけ、ゲッター、セッターなどで受け渡しして、extern を減らす方向性とか??
そこまでやるなら、作り直すとか、もっとクリエティブなことに使った方がいいかも。。
過去記事に追記する方法
記事を書くを押す
左上の、< 文字を押す
最近書いた記事が、表示されるので、その下の、目的の記事タイトルを押す
これで、過去記事が編集可能になるようです。汗
いつも、悩むので、メモ
って、ここにメモしてもしょうがないような。。。汗
