概要
chip8を調べてみた。
chip8 アセンブラ 命令セット
ニーモニック | 意味 | コード |
---|---|---|
CLS | dispクリア | 0x00E0 |
scrole | スクロール | 0x00c6 |
DRW Vx, Vy, sprite | Vx, Vy <- sprite | 0xdnnn |
LD Vx, byte | Vx <- byte | 0x6nnn |
LD Vx, Vy | Vx <- Vy | 0x8nnn |
LD Vx, I | V0:Vx <- memory[I] | 0xf065 |
LD Vx, DT | Vx <- delay timer | 0xf007 |
LD Vx, K | Vx <- Key | 0xf00a |
LD DT, Vx | delay timer <- Vx | 0xf015 |
LD ST, Vx | sound timer <- Vx | 0xf018 |
LD F, Vx | memory[I] <- sprite | 0xf029 |
LD B, Vx | memory[I] <- BCD(Vx) | 0xf033 |
LD I, addr | I <- addr | 0xannn |
LD I, Vx | memory[I] <- V0:Vx | 0xf055 |
OR Vx, Vy | Vx <- Vx or Vy | 0x8001 |
AND Vx, Vy | Vx <- Vx and Vy | 0x8002 |
XOR Vx, Vy | Vx <- Vx xor Vy | 0x8003 |
SHR Vx, Vy | Vx <- Vx >> Vy | 0x8006 |
SHL Vx, Vy | Vx <- Vx << Vy | 0x800e |
ADD Vx, byte | Vx <- Vx + byte | 0x7nnn |
ADD Vx, Vy | Vx <- Vx + Vy | 0x8004 |
ADD I, Vx | I <- I + Vy | 0xf01e |
SUB Vx, Vy | Vx <- Vx - Vy | 0x8005 |
SUBN Vx, Vy | Vx <- Vy - Vx | 0x8007 |
RND Vx, byte | Vx <- rnd(byte) | 0xcnnn |
SE Vx, byte | if (Vx == byte) pc += 2 | 0x3nnn |
SE Vx, Vy | if (Vx == Vy) pc += 2 | 0x5nnn |
SNE Vx, byte | if (Vx != byte) pc += 2 | 0x4nnn |
SNE Vx, Vy | if (Vx != Vy) pc += 2 | 0x9nnn |
SKP Vx | if (key(Vx) == 1) pc += 2 | 0xe09e |
SKNP Vx | if (key(Vx) != 1) pc += 2 | 0xe0a1 |
SYS addr | pc <- addr | 0x0nnn |
JP addr | pc <- addr | 0x1nnn |
JP V0, addr | pc <- V0 + addr | 0xbnnn |
CALL addr | stack <- pc, pc <- addr | 0x2nnn |
RET | pc <- stack | 0x00EE |
補足
命令長は、2バイト。固定。
データバスは、8bit
アドレスバスは、12bit
レジスタは、V0からVFの16個で、8bit
VFレジスタは、算術演算命令実行時のキャリーフラグ
スタックは、16個。
アドレスレジスタとして、Iレジスタで12ビット
プログラムは、アドレス0200h番地から実行
出力は、64×32ピクセルのグラフィック機能
左上が(0,0)で、右下が(63,31)。
描画はXORで行われる。
4×5ピクセルのフォントパターンを内蔵しています。('0'-'9','A','B','C','D','E','F')
入力は、キー、16個あります。
2つの8ビットタイマがあります。
一つはディレイタイマDT、もう一つはサウンドタイマSTです。
以上。