マリオのように、世界を止めておくポーズ
音のレッスンの四角と曲に、スタートでのポーズを足した。遊んで右へ歩き、スタートを押してみてほしい。すぐにもう一度押してもみてほしい。プログラムは 717 バイトの命令 313 個で、作り方も確かめ方も同じだ。
ここで遊ぶ カートリッジ。NES のカートリッジを遊べるところならどこでも遊べる: pause.nes
画面の上では
ポーズは何も描かない
スーパーマリオブラザーズをポーズしても、画面には何も出ない: 文字も枠もない。ゲームは世界を動かすのをやめるだけで、コンソールは最後に渡された絵を映し続ける。曲は同じフレームで切れ、代わりに短い音が鳴る。押してからしばらくはスタートを受け付けないので、ボタンが跳ねても、早すぎる二度目の押しがあっても、元に戻らない。ポーズを解くとその音がもう一度鳴り、マリオはすぐに動き出し、曲はその待ちが終わってから戻ってくる。このカートリッジも、自前の待ちとチャイムと曲で同じように止まる。ゲームから取ったのはこの形だけで、どちらの音が何を鳴らすかは比べない。
| このカートリッジ | スーパーマリオブラザーズ | |
|---|---|---|
| スタートからすべてが止まるまでのフレーム数 | 0 | 1 |
| 右を押したまま A を押しても、ポーズ中は何も動かなかった | はい | はい |
| 押したあとスタートを受け付けないフレーム数 | 32 | 43 |
| 二度目のスタートを試したフレームと、それが何もしなかったこと | 15 | 20 |
| ポーズ中に絵へ書いた数 | 0 | 0 |
| ポーズ中に撮った二枚の絵が同じ | はい | はい |
| 押したときにすべての音を切る | はい | はい |
| ポーズの音の数と、その間のフレーム数 | 3 個、8 フレームおき | 4 個、6 フレームおき |
| スタートから再び動くまでのフレーム数 | 0 | 1 |
| ポーズを解いてから曲が再び鳴るまでのフレーム数 | 32 | 43 |
書いたとおりに
このレッスンが扱うプログラムの部分。プログラム全体は、ただのテキストファイルだ: 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