2019年8月29日木曜日

Z80エミュレータを作り始めた件

8bit時代のマイコンCPUには、大きく3つの源流がありました。

(1) MC6800
(2) MOS6502
(3) Intel 8080

MOS6502はかなりシンプルで、個人的には上記の中で一番気に入っています。
MC6800はMOS6502よりも更にシンプルですが、インデックスレジスタが1つしかないので、プログラムのを組むのにやや不便だと考えられます。
6502の良いところは、6800ほどシンプル過ぎず、8080ほど不雑過ぎない絶妙なバランス加減です。

個人的に8080はフルアセ(特にハンドアセンブル)でプログラムを組むのがやや大変(命令を2進数で覚える必要があるので覚えにくい)です。まぁ、ハンドアセンブルなんかせずアセンブラを使えば良い訳ですが。

Intel8080(808xシリーズ)は、レジスタが沢山あり、さらにペアレジスタという概念のお陰で16bit演算が割と簡単にできます(他の8bit CPUでの16bit演算はキャリーを使って計算する必要があるのでやや面倒です)。演算といっても足し算、引き算だけ(掛け算と割り算はない)ですが。なお、論理演算は8080でも8bitです。

そんな優れた8080ですが、8bitマイコンで主に使われたのは8080上位互換CPUのZilog Z80です。Z80(※互換製品を含む)を採用したコンピュータとして、有名どころとしては以下のものがあります。

【PC】
・MSX
・Sharp X1
・NEC PC-6001〜PC-8801(※88VAは除く)
【ゲーム機】
・任天堂 ゲームボーイ
・SEGA SG-1000〜マスターシステム
・SEGA メガドライブ(※サブCPU)
・SEGA ゲームギア
・SNK ネオジオ(※サブCPU)
【その他】
・パチンコの抽選制御部分(現在でもZ80らしい)
・TI73シリーズ(日本では知名度が低いが)

上記は、パッと調べて出てきたもので、調べればまだまだあるでしょう。
これだけ沢山使われている(現代でも使われている)CPUだから、さぞかし扱いやすいエミュレータが沢山あるんだろうと思っていたのですが、仕事の関係で少し必要になって調べてみた限り、中々「コレだ」と思える実装に出会えませんでした。

という訳で、私が「コレだ」と思えるZ80エミュレータがほしかったので、作り始めてみました。
https://github.com/suzukiplan/z80

とりあえず動くエミュレータが既にある(仕事では困らない)ので、実のところあまり開発のモチベーションは高くないのですが、Z80の勉強を兼ねてとりあえず完成させたいと思っています。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...