マッピーキッズのサウンドテスト

http://makainyumon.web.fc2.com/cheat/
129 の実験にあると便利なんで使ってみることにした。ここに書いてあるんだが、条件がシビア。命令を見てみた。

;page = 3. (ROM offset 0x2000 * 3 + 0x1b40)
;each button pressed, increment memory
BD40: lda  $03   ;player2.button.status
BD42: cmp  #$80  ;buttonA
BD44: bne  $BD48
BD46: inc  $D1
BD48: cmp  #$40  ;buttonB
BD4A: bne  $BD4E
BD4C: inc  $D2
BD4E: lda  $02   ;player1.button.status
BD50: cmp  #$20  ;Select
BD52: bne  $BD56
BD54: inc  $D3
BD56: cmp  #$40
BD58: bne  $BD5C
BD5A: inc  $D4
BD5C: lda  $D0
; (snip)
BD9B: lda  $D1  ;player2.buttonA.presscount
BD9D: cmp  #$B4 ;180 <= count < 240
BD9F: bcc  $BDBC
BDA1: cmp  #$F0
BDA3: bcs  $BDBC
BDA5: lda  $D2  ;player2.buttonB.presscount
BDA7: cmp  #$3C ;60 <= count < 120
BDA9: bcc  $BDBC
BDAB: cmp  #$78
BDAD: bcs  $BDBC
BDAF: lda  $D3  ;player1.select.presscount
BDB1: cmp  #$78 ;120 <= count < 180
BDB3: bcc  $BDBC
BDB5: cmp  #$B4
BDB7: bcs  $BDBC
BDB9: jmp  $C094

調べたところ、時間の指定は命令と全く同じで、ボタンを押す順番は条件外ということでちょっと違った。こんな時間の測定はプレイヤー側からは判定することが容易ではないので、私同様に逆アセンブルしたものと見られる。

..... 見られるがどういう経緯でここに掲載されたのかが非常に気になる。当時の雑誌には掲載されたものの再録がなかったから埋もれて発掘とかなのか。

シビアな条件は作業の効率化として邪魔なので、Aボタンを押すだけで動くように変更した。

	org	$bd9b
	lda	$02     ;player1.buttonA.pressed? (bit7)
	bpl	$bdbc
	jmp	$c094

この状態だと上下で番号を1ずつ変更するため、左右で5ずつ変更する命令も書いたんだが、長いので割愛。