Skip to content

development app compiler cpu

Kota UCHIDA edited this page May 17, 2026 · 2 revisions

アプリケーション、コンパイラ、CPU の開発手法

  • 目標:PC 上でのエミュレーションと実機開発を並行できるようにする。
  • 提案手法:エミュレータを兼ねた C 言語風アセンブラを開発し、用いる。

エミュレータを兼ねた C 言語風アセンブラ

典型的なアセンブラとは異なり、C 言語の関数呼び出し形式のニーモニックを採用することで、アセンブリ言語コードでありながらも C コンパイラによるビルドを可能とし、エミュレーションをしやすくする。

例えば、メモリの 0xCAFE と 0xCB00 から値を読み出し、掛けた結果を 0xCAFE に書き戻すプログラムを考える。

// 典型的なアセンブラ
LOAD A, 0xCAFE
LOAD B, 0xCB00
MUL A, B
STORE 0xCAFE, A
// PocketGame アセンブラ
LOAD(A, 0xCAFE);
LOAD(B, 0xCB00);
MUL(A, B);
STORE(0xCAFE, A);

エミュレーションの方法

LOADMUL などに対応する関数を定義し、上記のコードと一緒にリンクすることにより、そのままパソコン上で実行可能なプログラムを生成できる。例えば次のような関数定義を行うイメージ。

int mem[DATA_MEM_SIZE];
Reg regs[16];
Reg *A = regs + 0, *B = regs + 1;
void LOAD(Reg *reg, int addr) {
  reg->value = mem[addr];
}
void STORE(int addr, Reg *reg) {
  mem[addr] = reg->value;
}
void MUL(Reg *dst, Reg *src) {
  dst->value *= src->value;
}

LOADSTORE の中で addr の値によって分岐させ、メモリの読み書きではなく周辺機器のレジスタアクセスのようなコードを書くことにより、純粋な CPU だけでなく周辺回路まで含めたエミュレーションが可能。

メリット

典型的なエミュレーション実行では、一度アセンブラで機械語プログラムに直したものをエミュレータが 1 命令ずつ読み取りながら実行する。

PocketGame アセンブラを用いたエミューレーション実行の場合、アセンブラや機械語プログラムを経由せずエミュレーション実行が可能なため、典型的なエミュレーション実行に比べプロセスが簡易になり、また(アセンブリ言語コードに対する)コンパイラによる最適化も効くため、エミュレーションの高速化が期待できる。