今回は本当にちょっとしたテクニックです。Z80のメモリ空間は狭いので、データサイズを小さくするため1バイトに2つの意味を持たせることは結構あります。例えば、

%11100000 種別 %00011111 パラメータ
上位3bitに種別情報があって、下位5bitがパラメータみたいな使い方です。こういう場合は大抵は

ld a, (hl) ; 7 Acc データ取得 ld d, a ; 4 D にデータを退避 and %11100000 ; 7 上位の種別を取り出す ld e, a ; 4 E に種別を格納 ld a, d ; 4 Acc データを戻して and %00011111 ; 7 下位のパラメータを取り出す
こんな書き方になりがちです。以前から少し無駄だなあと感じていたのですが、少し前に教えていただいた方法が、わりとすっきりと書けるのでお気に入りだったりします。

ld a, (hl) ; 7 Acc データ取得 ld d, a ; 4 D にデータを退避 and %11100000 ; 7 上位の種別を取り出す ld e, a ; 4 E に種別を格納 xor d ; 4 下位のパラメータを取り出す
上位のデータだけを取得した値と、以前の値を XOR すると、上位で取り出された bit だけが XOR により消えるので、結果として下位のデータが簡単に取り出せるというワザです。些細なことですが、なかなかのアイディアだと思います。前者の書き方だと 33サイクルですが、後者だと 26サイクルと、7サイクルもお得になります。覚えておくと、何かの際に使えるかも知れません。
※ 昔のゲームはどんなのがあったかを知るには良い本かも