Z80Emulator : サンプル1解説

サンプル1ソースコード

◎概要

サンプル1はキーボードから入力された文字を画面にエコーするだけの単純なエミュレータです。

◎仮想マシンの仕様

サンプル1でエミュレートするZ80仮想マシンの仕様は以下の通りです。

・メモリマップ

0000H - 03FFH : ROM(1024バイト)
0400H - FFFFH : 未実装

・I/Oポート

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 : システムシャットダウン

・Z80アセンブリ言語ソース

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.コンパイルオプションの確認

サンプル1は非テンプレートモード/テンプレートモードのどちらでも動作するように作られています。
試したいモードをコンパイル前に指定してください。

2.テンプレートパラメータの設定(テンプレートモードのみ)

テンプレートモードのとき、Z80Template.hのCZ80_1エントリを次のように書き換えてください。

#define CZ80_1 TZ80<1, 1024, 1>

また、1CPUしか使用しませんので、CZ80_2のエントリはコメントアウトしてください。

◎解説

ほとんど何もしないエミュレータですが、基本的な機能は押さえてあります。
また、非テンプレートモード、テンプレートモード双方での同一エミュレータの実装例がありますので、相違点を比較してみてください。