ひとしれずひっそり

主にソフトに関することをメモしていきます。過程をそのまま書いていたりするので間違いが含まれます。鵜呑みしない様に。

Space Invaders(8) - キャラクター処理のループ

割り込みが入ってキャラクターの処理ループに移るがその部分を読んでみた。 ここら辺になる。

computerarcheology.com

フローとか書いてみたがrubyで書き直した方がわかりやすそうなので書いてみた。

gist.github.com

処理内容

  • データの0バイト目(上位)と1バイト目(下位)が16bitカウンターになっている
    • 割り込み毎に1減算される
  • 0バイト目が0xFFの場合は終了を表しループから抜ける。0xFEの場合は何もせず次のキャラに移る
  • 2バイト目がなんかのフラグになっている
  • 0,1,2バイト目とも0になると4バイト目と5バイト目で示されるポインターにジャンプして処理がされる。

0x2000からのデータはは256回毎、0x2010は128回毎、他は毎回処理されそうだ。
0x2030は2バイト目が2なので0に書き換えられたら処理が始まるという感じではないか?