NEStinymachines

マリオのように、世界を止めておくポーズ

音のレッスンの四角と曲に、スタートでのポーズを足した。遊んで右へ歩き、スタートを押してみてほしい。すぐにもう一度押してもみてほしい。プログラムは 717 バイトの命令 313 個で、作り方も確かめ方も同じだ。

ここで遊ぶ カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: pause.nes

画面の上では

フレーム 140
フレーム 140
フレーム 160
フレーム 160
フレーム 215
フレーム 215
フレーム 240
フレーム 240

ポーズは何も描かない

スーパーマリオブラザーズをポーズしても、画面には何も出ない: 文字も枠もない。ゲームは世界を動かすのをやめるだけで、コンソールは最後に渡された絵を映し続ける。曲は同じフレームで切れ、代わりに短い音が鳴る。押してからしばらくはスタートを受け付けないので、ボタンが跳ねても、早すぎる二度目の押しがあっても、元に戻らない。ポーズを解くとその音がもう一度鳴り、マリオはすぐに動き出し、曲はその待ちが終わってから戻ってくる。このカートリッジも、自前の待ちとチャイムと曲で同じように止まる。ゲームから取ったのはこの形だけで、どちらの音が何を鳴らすかは比べない。

このカートリッジスーパーマリオブラザーズ
スタートからすべてが止まるまでのフレーム数01
右を押したまま A を押しても、ポーズ中は何も動かなかったはいはい
押したあとスタートを受け付けないフレーム数3243
二度目のスタートを試したフレームと、それが何もしなかったこと1520
ポーズ中に絵へ書いた数00
ポーズ中に撮った二枚の絵が同じはいはい
押したときにすべての音を切るはいはい
ポーズの音の数と、その間のフレーム数3 個、8 フレームおき4 個、6 フレームおき
スタートから再び動くまでのフレーム数01
ポーズを解いてから曲が再び鳴るまでのフレーム数3243

書いたとおりに

このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: pause.s

;; Start: a new press flips the pause, unless one came in the last 32
;; frames. Either way the sound is cut, the chime starts, and the tune's
;; next note is due as soon as it may play.
pause:
    LDA $54
    BEQ ready
    DEC $54
    RTS
ready:
    LDA $02
    EOR #$FF
    AND $01
    AND #$10
    BEQ none
    LDA $53
    EOR #$01
    STA $53
    LDA #$20
    STA $54
    LDA #$00
    STA $4015
    STA $51
    STA $52
    STA $56
    LDA #$03
    STA $4015
    STA $55
none:
    RTS
;; The chime: three short notes on the second square channel, 8 frames
;; apart, rising.
chime:
    LDA $55
    BEQ quiet
    DEC $56
    BPL quiet
    LDA #$07
    STA $56
    DEC $55
    LDX $55
    LDA #$9C
    STA $4004
    LDA #$00
    STA $4005
    LDA chimenote,X
    STA $4006
    LDA #$00
    STA $4007
quiet:
    RTS

すべてのレッスン