ゲームボーイのカートリッジを自分で作り、技術書典に本を出してから、LSDjが動くといいねという話をよく聞いていました。やっと動くようになったのでつまずいていた点を記載します。
マイコンの容量を増やす
今までの基板ではSTM32F407を使っていました。1MBのFlashを持っているのですが、これだと前述の512KBのROMイメージと128KBのRAM領域を確保できなかったので、ROM容量の多いSTM32F427(2MB)/STM32F413(1.5MB)の2種類を試しました。パッケージサイズは同一でピンアサインもほぼ同一です。
STM32F413でもROM/RAMの領域を確保でき、ソフトの起動を確認できました。413は427に比べてQSPIが載っているので、外部Flashを活用するならこちらのほうがいいのかもしれません。でも2MBの427は大して単価もかわらないのに容量がでかいのでもう全部これでいい気がしています。
MBC5の動きに対応したコードを追加する
https://t.co/s9bEb12c1Q 3000-3FFF - High bit of ROM Bank Number (Write Only)の実装を間違えていたのが原因だった。ここは必ず0か1が入ってくるものだと思ってたけど、実際は0とそれ以外らしい。そういう実装に変えたらちゃんと音が鳴るようになった。
— 技術書典6 い05 (@niccolli) February 23, 2019
今までも動いてはいたんですが、上記のように実装を間違えていて、音がぶつぶつと途切れるようにしか鳴らないし全くテンポどおりに動かない(超遅い)動作になっていました。リンク先のドキュメントと、もとのコード(コメントアウトになっているところ)を見てて気付きました。
音が鳴るようになりました
#LSDj で音の長さを設定できるようになった。 pic.twitter.com/UajdOQMgOw
— 技術書典6 い05 (@niccolli) February 24, 2019
お知らせ
技術書典6に出ます。前回出展時の本に加筆修正を加えて、第2版として出します。値上げするけど、今まで買ってくれた人はそのままダウンロードできるようにする予定です。「い06」でデモ機と見本誌を用意して展示します。
バッテリーバックアップについて
外部Flashに保存かな〜と考えていたのですが、2MBだと容量の余裕がすごいので内蔵Flashに保存でいいのかもしれません。