2017年01月21日

「華やかなメヌエット」(シャブリエ作曲)

 去年の年末あたりから、この曲をピアノでさらっております。楽譜は音楽之友社の「シャブリエ・アルバム」。

 曲頭の "Allegro franco" ってなんですかね。"Franco" なんて聞いたことないぞ。Google 翻訳で調べてみると、英語の free, frank あたりが出てくるけど、「自由に」っていう感じじゃないし。ずっと下の方に出てくる意味で "straightforward" とか "forthright"、つまり「率直な」というのがあるんで、こっちの方かな。

 最初に譜読みしていて戸惑ったのがここ。左手の最後の八分音符、Bb-D じゃないんだ。ミスプリントじゃないかと思ったけど、二回出てくるところがどちらもこうなっているし、IMSLP に出ている Enoch 版も同じだから、これが正しいんでしょうね。確かに、Bb-D だと次が C#-E なのは増二度進行でちょっとまずいし、B-D では右手の Bb と対斜を起こすから、これしかないか。でも、ちょっと弾きにくいです。

 あと、ここどう弾いたらいいのかよくわからない。"poco rubato" と指示されて、クレッシェンドで、両手のアルペジオがごちゃごちゃ入ってきて、少しゆっくりにしたいところなんだけど、左手の下には pressez(急げ)って書いてある。ここで遅くして、次の小節でいったんインテンポに戻して、それから2小節後のフェルマータに向けて riten. したくなりません?

 この曲はラヴェルがオーケストラ用に編曲しています。「古風なメヌエット」の元ネタ、という感じですね。シャブリエはよくわからないところも多いけど、なかなか面白い。ばしっと決まるとかっこいいし。

タグ:音楽
posted by toshinagata at 17:37| 日記

2017年01月17日

MachiKania BASIC の仕様を調査

 MachiKania が動き出したので、BASIC の仕様をちょっと調べてみた。マニュアルが公開されているのだけど、細かいところがよくわからなかったんです。

 同一名の変数はメモリ領域を共有している。つまり、変数には実は型の概念はなく、同じ 32 ビットデータを整数/単精度実数/文字列(のアドレス)としてそれぞれ解釈している。

A#=1:PRINT A
-->1065353216 ($3F800000 = 1.0 as binary 32)
A$="ABCDE":PRINT A
-->-1610603508 ($A000240C は文字列のアドレス)
A#=1:PRINT A$
-->Exception ($3F800000 を文字列アドレスとして解釈)

 整数型変数が正しいメモリアドレスを指している場合、それに (式) をつけると「整数型変数へのポインタ」としてメモリ内容にアクセスすることができる。書き込みも可能。このへんは、Tiny BASIC 系の雰囲気がある。正式に仕様としては公開されていないが、便利に使えそう。

A$="ABCDE":A(0)=$50515253:PRINT A$
-->SRQPE (最初の4バイトが置き換わった)

 もちろん PEEK() 関数、POKE 文を使えば1バイト単位の読み書きが可能。

A$="ABCDE":POKE A,$53:PRINT A$
-->SBCDE (最初の1バイトが置き換わった)
POKE A+2,$51:PRINT A$
-->SBQDE (さらに3バイト目が置き換わった)

 MachiKania の配列については、BASIC コンパイラ作者の Katsumi さんが「MachiKania type Z で使われている多次元配列の実装について」という解説を書いておられる。それによると、A(x,y,z) という配列の場合、A, A(x), A(x,y) のそれぞれにポインタを格納しておいて、添字が1つ増えるごとに次のポインタを参照する仕組みになっている。この実装から想像できる通り、MachiKania の配列は実質的にはメモリアドレスへのポインタとなっている。

DIM A(1):PRINT A
-->-1610603420 ($A0002464)
POKE A,$FF:PRINT A(0)
-->255 (最下位バイトが 0xFF になった)
PRINT A(2) (範囲外の添字)
-->3487026 (無意味な値が入っている)

 文字列の実装がどうなっているのか興味がある。コンパイラのソースコードを見たところ、「一時的に使う文字列」へのポインタを保持する領域が用意されており、BASIC の1行分を実行するごとにこの領域をクリアしているらしい。あちこちに PIC32 のアセンブラが使ってあって、完全には読めていない。

posted by toshinagata at 23:06| 日記

2017年01月15日

MachiKania type Z 作った

 だいぶ前に部品だけ調達してあった MachiKania type Z をようやく作りました。MachiKania は、PIC マイコンワンチップで BASIC を走らせるワンボードコンピュータです。

 部品は「オレンジピコショップ」で購入。今回は手っ取り早く動かすため、専用基板で組み立てた。1時間半ぐらいで完成。最初全然動かなくて「おかしい、おかしい」と騒いでいたが、よく見たら PIC の IC ソケットを仮止めしたまま残りの足をハンダ付けしてなかった、という超絶アホなミスを発見。修正したらちゃんと動きました。

 制作の時は、抵抗の数・種類が多いので、間違えないように注意した。部品表を印刷して、こんな風に刺しておき、R1 から順番に取り付けて行った。

 モニタは秋月の 4.3 インチ液晶。Amazon で売られている激安液晶だと同じサイズでもっと安いのですが、秋月で入手できるのは安心感があります。

 ポータブル化するために、同じく秋月で「昇圧型スイッチング電源モジュール LMR62421 キット」を調達し、エネループ4本 (4.8 V) から +12 V を作るようにした。エネループ4本は MachiKania 本体への給電にも使う。

 MachiKania type Z のウェブサイトから最新ファイルをダウンロードして、SD カードにコピーする。Mac だと ._ で始まる余分なファイルがくっついてきて邪魔なので、Finder でコピーする時は注意。まあ、Mac 使いの人ならよくわかっている話だとは思いますが。なお、bootloader.hex は PIC マイコンに書き込むファームウェアなので、SD カードにコピーする必要はない。

 パックマン動きました。若干色にじみがあるけど、そういう仕様だということで。

 残念ながら、肝心の BASIC がまだ動かせてません。PS/2 キーボードを認識しないのです。サンワサプライの SKB-KG3BKN なんだけど、"Init PS/2...Keyboard Not Found" と表示されて、そのままエディタの画面に入ってしまう。抵抗を交換すればいい、という話を聞いたので、もう少し調査が必要。

 1/16 追記:キーボードは認識することもあるようです。再現性について、引き続き調査中。

posted by toshinagata at 13:26| 日記