#chip8 アセンブラ 命令セット
#転送命令
CLS dispクリア
DRW Vx, Vy, nibble Vx, Vy <- sprite
LD Vx, byte Vx <- byte
LD Vx, Vy Vx <- Vy
LD I, addr I <- addr
LD Vx, DT Vx <- delay timer
LD Vx, K Vx <- Key
LD DT, Vx delay timer <- Vx
LD ST, Vx sound timer <- Vx
LD F, Vx memory[I..] <- sprite
LD B, Vx memory[I..] <- BCD(Vx)
LD [I], Vx memory[I0:Ix] <- V0:Vx
LD Vx, [I] V0:Vx <- memory[I0:Ix]
#ビット操作命令
OR Vx, Vy Vx <- Vx or Vy
AND Vx, Vy Vx <- Vx and Vy
XOR Vx, Vy Vx <- Vx xor Vy
SHR Vx, Vy Vx <- Vx >> Vy
SHL Vx, Vy Vx <- Vx << Vy
#算術命令
ADD Vx, byte Vx <- Vx + byte
ADD Vx, Vy Vx <- Vx + Vy
ADD I, Vx I <- I + Vy
SUB Vx, Vy Vx <- Vx - Vy
SUBN Vx, Vy Vx <- Vy - Vx
RND Vx, byte Vx <- rnd(byte)
#分岐命令
RET pc <- stack
SYS addr pc <- addr
JP addr pc <- addr
JP V0, addr pc <- V0 + addr
CALL addr stack <- pc, pc <- addr
SE Vx, byte if (Vx == byte) pc += 2
SE Vx, Vy if (Vx == Vy) pc += 2
SNE Vx, byte if (Vx != byte) pc += 2
SNE Vx, Vy if (Vx != Vy) pc += 2
SKP Vx if (key(Vx) == 1) pc += 2
SKNP Vx if (key(Vx) != 1) pc += 2
#補足
命令長は、2バイト。固定。
レジスタは、V0からVFの16個で、8bit
VFレジスタは、算術演算命令実行時のキャリーフラグ
スタックは、16個。
アドレスレジスタとして、Iレジスタで12ビット
プログラムは、アドレス0200h番地から実行
出力は、64×32ピクセルのグラフィック機能
4×5ピクセルのフォントパターンを内蔵しています。(0-F)
入力は、キー、16個あります。
2つの8ビットタイマがあります。
一つはディレイタイマ、もう一つはサウンドタイマと呼ばれます。
以上。