サンプル1はキーボードから入力された文字を画面にエコーするだけの単純なエミュレータです。
サンプル1でエミュレートするZ80仮想マシンの仕様は以下の通りです。
0000H - 03FFH : ROM(1024バイト)
0400H - FFFFH : 未実装
00H : コンソール入力(文字コード)
入力されていない場合はヌルキャラクタコード(00H)を返す
01H : コンソール出力(文字コード)
02H : システムシャットダウン
(データは何でも良い)
1 : 1文字入力
2 : ヌルキャラクタコード(00H)ならば1へ
3 : ESCコード(1BH)ならば8へ
4 : 1文字出力
5 : CRコード(0DH)以外ならば1へ
6 : LFコード(0AH)を出力
7 : 1へ
8 : システムシャットダウン
00000H IN A, (000H)
00002H AND A
00003H JR Z, 00000H
00005H CP 01BH
00007H JR Z, 00015H
00009H OUT (001H), A
0000BH CP 00DH
0000DH JR NZ, 00000H
0000FH LD A, 00AH
00011H OUT (001H), A
00013H JR 00000H
00015H OUT (002H), A
00017H HALT
サンプル1は非テンプレートモード/テンプレートモードのどちらでも動作するように作られています。
試したいモードをコンパイル前に指定してください。
テンプレートモードのとき、Z80Template.hのCZ80_1エントリを次のように書き換えてください。
#define CZ80_1 TZ80<1, 1024, 1>
また、1CPUしか使用しませんので、CZ80_2のエントリはコメントアウトしてください。
ほとんど何もしないエミュレータですが、基本的な機能は押さえてあります。
また、非テンプレートモード、テンプレートモード双方での同一エミュレータの実装例がありますので、相違点を比較してみてください。