Rule 30

Rule 30 (http://golf.shinh.org/p.rb?Rule+30#z80) はかなり簡潔に書けた。

	LD A, 0x76
	PUSH DE
	PUSH AF
	CALL 8003H
	RL E
	RRA
	RL C
	LD A, C
	DEC A
	AND 4
	NEG
	ADC A, '#'
	RET

参考にしたコード(http://longlong.way-nifty.com/blog/2007/12/card.html#more , id:yaneurao:20071231)では最初の命令が「XOR A」だったのだが、76Hをロードするように変更した。
これによって、この最初の命令は3つの意味を持つようになった。

  • Aレジスタの初期化。元の「XOR A」は0ビット目をクリアするためのものだったので、76Hでも初期化できる。
  • HALT命令の置き場所。0x76は「HALT」のコードなので、ここに飛んでくれば終了できる。
  • PUTCHARへのショートカット。この問題はPUTCHARの近くまで真面目にジャンプしないとタイムアウトするのだが、A に 76H を置いておくことで、PUSH AF/RET を使ってちょうどよい感じに飛ぶことができる。