30年越しで、マリオを走らせてジャンプさせられた話

3
Nao_u @Nao_u_

ファミリーベーシック届いた! pic.twitter.com/GST6nf3mRq

2019-10-19 10:11:53
拡大
拡大
Nao_u @Nao_u_

マリオを走らせてジャンプできた!ファミリーベーシックのスプライトのアニメ周りの仕様はだいぶ酷いので、小学生の頃はこれすらどうやればいいかわからず、30年越しでようやく実装できた。タイムマシンで当時の自分にやり方を教えに行きたい… pic.twitter.com/mqqUgQKN4b

2019-10-19 12:06:31
Nao_u @Nao_u_

ここまで動かすのに3時間くらいかかった…。MOVE命令だとアニメに合わせて勝手に動いくので制御しづらい。SPRITE命令でアニメを切り替えようとすると、どうやってもちらつくのが避けられない。仕方なくMOVEで自動移動をキャンセル+移動方向切り替え時のちらつきをなくそうとして、だいぶ試行錯誤してた

2019-10-19 12:12:49
Nao_u @Nao_u_

小学生の頃とまったく同じ思考過程で「このやり方だとダメなのか…」と順番に同じ罠にハマって、当時の記憶がいろいろ蘇ってきた。スプライト周りの仕様が酷すぎて、せっかくマリオのアニメパターンが入ってるのにちゃんと動かすのが困難でもったいない。当時の自分が諦めた理由がよくわかった

2019-10-19 12:19:44
Nao_u @Nao_u_

付属品や説明書もちゃんと入ってた。昔は理解できなかったドキュメントの内容も今ならわかるので、「古文書にあったとおりだ!読める、読めるぞ!」とムスカみたいな気分になってくる pic.twitter.com/6InOu97LXe

2019-10-19 12:48:22
拡大
拡大
Nao_u @Nao_u_

当時と違ってファミコンのハードの内部情報も豊富にあるので、POKE命令で好きなメモリを直に書き換えられるはず。手始めにPPU制御レジスタの0x2000に0x80を書き込むと、BG用キャラテーブルがスプライトのものになって文字が読めなくなった。ちゃんとI/Oレジスタにアクセスできてる! pic.twitter.com/XQvcwLIY7C

2019-10-19 13:19:50
拡大
Nao_u @Nao_u_

試しに$2004からPPUのスプライトRAMに書き込んでみたらノイズは出るけど絵が変わらなかったので、DMAで上書きされてるっぽい。DMA転送元は$200らしいのでループで適当な値を書き込んだらスプライトが画面にいっぱい出た。これだ!ここを弄ればスプライトを直に制御できそう。 pic.twitter.com/wC1vMLn9dy

2019-10-19 13:52:40
拡大