概要
jsdoでchip8やってみた。
アセンブラを作ってみる。設計編
ニーモニックを変える。
覚え安く、変える。
転送命令
CLS -> cls
DRW -> disp
LD -> load
ビット操作命令
OR -> or
AND -> and
XOR -> xor
SHR -> rshift
SHL -> lshift
算術命令
ADD -> add
SUB -> sub
SUBN -> nsub
RND -> rand
分岐命令
RET ->ret
SYS -> sys
JP -> goto
CALL -> call
SE -> eq
SNE -> neq
SKP ->keq
SKNP ->kneq
追加
nop -- no op
data byte -- data
補足
一行は、ラベル、スペース、スペース、第一オペランド、スペース、スペース、第二オペランド、スペース、スペース、第三オペランド、スペース、スペース、第四オペランド。
orgは無く、スタートアドレスは、0200H番地から、固定。
数値は、0-255の十進のみ。
レジスタは、v0-v15の16個とI(アドレス)。
サンプルコード
012345を表示する。
load v2 5
load v1 3
load I 0
load v0 11
disp v0 v1 6
add v0 6
add I v2
disp v0 v1 6
add v0 6
add I v2
disp v0 v1 6
add v0 6
add I v2
disp v0 v1 6
add v0 6
add I v2
disp v0 v1 6
add v0 6
add I v2
disp v0 v1 6
命令の組み立て方
レジスタは、4bit
アドレスは、12bit
| 2byte | |
|---|---|
| 00E0 | CLS |
| 00EE | RET |
| 0nnn | SYS addr |
| 1nnn | JP addr |
| 2nnn | CALL addr |
| 3xkk | SE Vx, byte |
| 4xkk | SNE Vx, byte |
| 5xy0 | SE Vx, Vy |
| 6xkk | LD Vx, byte |
| 7xkk | ADD Vx, byte |
| 8xy0 | LD Vx, Vy |
| 8xy1 | OR Vx, Vy |
| 8xy2 | AND Vx, Vy |
| 8xy3 | XOR Vx, Vy |
| 8xy4 | ADD Vx, Vy |
| 8xy5 | SUB Vx, Vy |
| 8xy6 | SHR Vx {, Vy} |
| 8xy7 | SUBN Vx, Vy |
| 8xyE | SHL Vx {, Vy} |
| 9xy0 | SNE Vx, Vy |
| Annn | LD I, addr |
| Bnnn | JP V0, addr |
| Cxkk | RND Vx, byte |
| Dxyn | DRW Vx, Vy, nibble |
| Ex9E | SKP Vx |
| ExA1 | SKNP Vx |
| Fx07 | LD Vx, DT |
| Fx0A | LD Vx, K |
| Fx15 | LD DT, Vx |
| Fx18 | LD ST, Vx |
| Fx1E | ADD I, Vx |
| Fx29 | LD F, Vx |
| Fx33 | LD B, Vx |
| Fx55 | LD [I], Vx |
| Fx65 | LD Vx, [I] |
以上。