DevkitPro Updater を走らせると PGP キーのエラーとかでアップデート失敗するので
一旦アンインストールして再インストールした。エラーの原因と対策が分かったわけでは無いので全く学びにはならなかった。
そういえば PSP の devkit って無くなったのだろうか。
別プロジェクトが一段落したので GB の過去作を最新の RGBDS v9.2 でコンパイル通るように改修している。
HARDWARE.INC が更新され激変。修正作業のほとんどがこれのせい。
ROM 種別や RAM 容量などの指定が全削除。RGBFIX でうまいことやってくれ、ということらしい。
また、何とは言わないけれどロゴデータが(言うとるがな)削除された。世知辛い。
レジスタ名とかアドレッシング表記とか、そのうち慣れるのかもしれないが、変える必要あったのかなと思わなくもない。
でも業界標準だからなぁ。
TPP1 マッパーも随分前から動きが無い。結局物理的なカートリッジは出てこないのだろうか。
Max 1GB ROM とか、既存の全ゲームが入りそうな勢いだが。どうせならネット対応も…。
そういえば EverDrive GB も起動 ROM が .GB なので、解析すれば SD カードへのアクセスとか出来るのではなかろうか。
東鳩 GB を対応完了。ImageMagick から convert コマンドが無くなっていたり色々混乱した。
scn は lz4 で圧縮してるはずが、元のサイズより大きくなるという不都合な真実があったりする。画像は一応縮むのだけれど。
雫 GB を対応完了。
痕 GB を対応完了。正直これは酷かった。どこに向かって謝ればいいのか分からないけどごめんなさい。
タイトルロゴのスプライト転送に失敗するバグも修正。
スプライトダブラを雫と同様に DMA 化してみたけど逆に 1 ラインのスキマが空いたりチラつきが出たので元に戻した。
実機では試していないが、さめぼ〜い先生がそうだと言うならきっと間違いない。
痕を修正中にまたツール群がアップデートしたので、東鳩と雫もサイレントアップデート。
自前で頑張っていたチェックサム修正ツールを RGBDS 謹製の RGBFIX に差し替え。MIT ライセンスの文言追加。
チェックサム修正のついでに、いい感じに 48byte を埋めてくれる。責任回避とも言う。
Bad Apple! を対応完了。
データセットは同じ。プログラムは少しだけ弄った。今作ればもう少し違った形に出来たかもしれないが、さすがにしんどい。
RGBDS の進化によって、バイナリのインクルードで工夫ができるようになったので、面倒だった部分が若干すっきり。
今までは一度コンパイルしたものを copy /b で切り貼りしていたのであった。
def banknum = 1
rept 274
SECTION "Tile DATA Bank{d:banknum}",ROMX[$4000], BANK[banknum]
incbin "tile_n.bin", (banknum - 1) * 16384, 16384
def banknum = banknum + 1
endr
|
こんな感じで 16KB=1bank を超えるバイナリを一括して incbin する方法を編み出したのであった。
本当はこれすら面倒ではあるのだけれど…。
音楽を途切れさせないために 256Hz で割込みをすると DMA の転送とバッティングして画像が化けるので、画像データは CPU による自力転送を行う。
すると blank の境目などでどうしても転送エラーが起こる場合があり、画面にゴミが出る。
このあたり、ちゃんと計算してやればうまいこといったのかもしれないが、今に至っても手が出せなかった。
Bad Apple! を更にサイレントアップデート。出来るだけのことはやっておきたいということで。
あと、hardware.inc が 5.2.0 になったので(影響はないけれど)差し替え。
GB 音源ドライバをアップデート。諸々検証に時間がかかった。
思うに、GBS 再生環境とかもう必要とされないのかなぁと感じる。結局、音源ログか録音が手軽でいいのかも。
nsf,spc,gsf,psf...本物と同じドライバで動いているというのはロマンでしかないのか…。
PCM ドライバをアップデート。実用というよりはサンプルコードなのでユルい作り。
GB の NES エミュを RGBDS 0.9.3 に対応させるべく弄っていたんだけど、何かサンプル ROM を付けた方が良いかなと、
PDROM などを調べていたものの丁度良いデモっぽいものが無くて、じゃあ自分で作るかと思い立つ。
で、困ったのが自分の中の NES の知識がすっかり失われていたこと。
図らずも「初心者が NES に手を出すときに何からすれば良いか」がシミュレート出来てしまった。
まあそれでも開発環境、メモリマップ、iNESヘッダ、パレット、タイルマップ、タイルデータ、vblank、スプライト DMA と調べる項目自体は分かっているので
完全な迷子にはならないですんだのだけれど。
今後迷わないで済むようにアンチョコを作っておいた。
nesdev wiki は当然ながら、日本語の資料、研究室とギコ猫くらいは記憶の彼方から引っ張り出せたが、今どきの人は SNS とかで検索して途方に暮れるのだろうなぁ。
もしくは AI に尋ねるとか?
昔と変わったのは良い翻訳機能があることかもしれない。
今国内外で誰がどんな活動をしているかもよくわかっていない。DOOM とかやってたのは知っている(が、PPU 乗っ取りには興味ない)。
んで、出来たのがこれ。いやー命令が分からん。
携帯ゲーム機やってると「なんで TV は止まらんねん」とか理不尽な怒りをぶつけてしまいがち。
GB 側のプログラムも色々マズイ部分があった。
焼け石に水だけど結構頑張って手を加えた。速くはなっていない。
特に PPU を改造して割と納得のいく動きになった。
さらに CPU も多少弄って高速化した。出来ることはやっておかないと。
ヘッダをチェックして動作しないものはメッセージを出す親切設計。
BGB では動くが SameBoy だと暴走する不具合を修正。電源投入時のワーク RAM の初期値が偶然悪さをしていた。
手間を惜しまずきちんと初期化しましょうという教訓を得た。
初めて SameBoy のデバッガを触ったが、地味に使いづらい。iOS 版は GUI デバッガらしいのだが、あちらは逆に開発環境が無いしなぁ。
一応これで一区切りだが、CPU エミュレータ改良の成果を NSF プレイヤーの方にも適用するので、そちらの作業が済んでから同時更新する。
RGBDS が 0.9.4、hardware.inc が 5.3.0 になった。
色々便利機能が追加されて良い感じ。セパレータ '_' は欲しかった機能。
NSF の方を見直す過程で NES エミュにも再度手入れ。6502 エミュは確実に速くはなった。
画面外のスプライトをスキップして 64 スプライトをなるべく表示する仕組みを取り入れたので、その分の速度低下はやむなし。
まだ不具合は山ほどあるが心当たりも有りすぎるので現時点で深入りはすまい。
RGBDS が 1.0.0(rc)になった。生き急いでるなぁ…。
たぶん大丈夫だとは思うが節目なので最近の作業と齟齬が起きないように要チェック。
nesdev wiki をじっくり読む過程で NES とか NSF で勘違いしている仕様が結構あった。
ふわっとしたエミュ作りは非常に楽しい。が、正確さを追究し始めると、とたんにキツくなるのも良くわかる。
nesdev wiki は詳しくて良いのだけれど、やはりこれだけでは理解できないことも多々あるので結局テストコードを書く羽目になる。
まあエミュレータを見ながらエミュレータを実装するというズボラを働いているわけだが。
APU はほぼ書き直した。前回のブツは 240Hz で動くべき所を 60Hz に 4 回分の一括動作で誤魔化したりテキトーさが目立ったので。
LSDJ で今何が流行ってんの、と思って検索することはたまにある。
今の界隈のトップランナーが誰かとかは残念ながら知らない。
このところ更新頻度が減ったのは激詰まりしているため。
NSF エミュレータの方は APU をほぼ一から書き直したがうまく鳴ってくれなくて、どうやら 6502 エミュに問題がありそうと判明。
GB にも同様のテストスイートは色々あるが、NES も多種多様なものがあり→
https://www.nesdev.org/wiki/Emulator_tests
CPU の命令セットのテストをすることにした。
しかしサイズが 440KB とか大きすぎて NROM-128 オンリーの我がエミュでは動かせないので、小さいサイズのもの(nestest.nes)を選んで実行。
で、これを GB で実行したのが以下。
…ボロボロやないか…
結果の 16 進数は付属のテキストを見るとどこでエラーが起きたかが分かる。
何だかむしろデバッグが楽しくなってきた。
修正。
やはりテストして良かった。旧版からあったバグも潰せた。
しかし逆にタイトル画面から先に進まなくなるものがいくつか出た。
原因究明したいが労力に見合った結果が出ない…。
NES エミュは動画化もしたいけれど、こうも中途半端だと厳しい。
NSF プレイヤーの方は APU を全て書き直したことでまあまあ納得のいく出来になったが
GB 音源の宿命でポップノイズがかなり目立つ。
ハードウェアのエンベロープやスイープ機能を使わないようにしたので聴きやすさはむしろ低下したかも。
RGBASM は RC になって仕様が微妙に変わって文字をダブルクォートで囲うと警告が出るようになってしまって面倒なことになった。
バージョンが上がってコンパイルが通らなくなっているか心配なので、これまでアップデートしたものを再チェック中。
PCM のページに PCM ダブラを追加。
全く実用的ではないが、実験としては面白いかも。
GB が波形メモリ 3 + ノイズ(そしてポップノイズフリー)なら超メロいマシンになっていただろうになぁ…。