アーキテクチャ

CPU

8ビットのCPUです。1フレームにつき1命令を実行します。

レジスタ

汎用レジスタ(8ビット)

レジスタ説明
Aアキュムレータ。演算命令の主要なオペランドです。
B, C汎用レジスタ。BCレジスタペアとしても使用します。
D, E汎用レジスタ。DEレジスタペアとしても使用します。
H, L汎用レジスタ。HLレジスタペアとしてメモリアドレス指定に使用します。

特殊レジスタ

レジスタビット幅説明
PC16ビットプログラムカウンタ。次に実行する命令のアドレスを保持します。
SP16ビットスタックポインタ。スタックの先頭アドレスを保持します。
PTBR16ビットページテーブルベースレジスタ。ページテーブルの先頭アドレスを保持します。

レジスタペア

2つの8ビットレジスタを組み合わせて16ビットの値として扱います。上位バイトが先のレジスタです。

ペア名上位下位
BCBC
DEDE
HLHL
PSWAF(フラグレジスタ)

メモリ参照(M)

命令中のオペランド「M」は、HLレジスタペアが指すメモリアドレスの内容を意味します。

フラグレジスタ(F)

演算結果に応じて自動的に更新されるフラグの集合です。条件分岐命令で参照されます。

フラグビット位置説明
S(サイン)7演算結果のビット7が1のとき1になります。
Z(ゼロ)6演算結果が0のとき1になります。
AC(補助キャリー)4ビット3からビット4へのキャリー(またはボロー)が発生したとき1になります。
P(パリティ)2演算結果のビット中の1の個数が偶数のとき1になります。
CY(キャリー)0演算結果でキャリー(またはボロー)が発生したとき1になります。

フラグレジスタのビット配置

ビット:  7   6   5   4   3   2   1   0
        [S] [Z] [0] [AC] [0] [P] [1] [CY]

ビット5と3は常に0、ビット1は常に1です。

メモリ

64KB(65,536バイト)のメモリ空間を持ちます。アドレス範囲は0x0000〜0xFFFFです。

マルチバイトデータはリトルエンディアン(下位バイトが低位アドレス)で格納されます。

起動時の初期状態

起動時、メモリの先頭3バイトには0番地への無限ループが配置されています。

0x0000: 0xC3  (JMP)
0x0001: 0x00  (ジャンプ先 下位バイト)
0x0002: 0x00  (ジャンプ先 上位バイト)

それ以外のアドレスは0x00で初期化されています。

スタック

スタックはメモリ上に確保され、SPレジスタが先頭を指します。スタックは下位アドレス方向に成長します。

MMU(メモリ管理ユニット)

ページング方式の仮想メモリ機構です。有効時、CPUが発行するアドレスは仮想アドレスとして扱われ、ページテーブルを参照して物理アドレスに変換されます。

無効時は、アドレスがそのまま物理アドレスとして扱われます。

ページング仕様

項目
ページサイズ256バイト
ページ数256ページ
ページテーブルエントリ(PTE)サイズ2バイト
ページテーブルサイズ512バイト

アドレス変換

仮想アドレスは以下のように分解されます。

仮想アドレス(16ビット):
  上位8ビット → ページインデックス(0〜255)
  下位8ビット → ページ内オフセット(0〜255)

変換手順は以下の通りです。

  1. PTBRの上位8ビットをページテーブルの先頭アドレスとします。
  2. 先頭アドレス + ページインデックス × 2 がPTEのアドレスです。
  3. PTEの上位8ビットが物理ページの先頭アドレスです。
  4. 物理ページの先頭アドレス + ページ内オフセット が物理アドレスです。

I/Oポート

256個のI/Oポート(0x00〜0xFF)を持ちます。IN命令とOUT命令でアクセスします。

現在の実装では、IN命令は常に0xFFを返し、OUT命令は何もしません。周辺機器との連携は今後追加予定です。

割り込み

割り込みの許可・禁止をEI/DI命令で制御できます。割り込み許可フラグ(INTE)は起動時に0(禁止)です。

現在、割り込みソースは実装されていません。そのため、現状のEI/DI命令は特に何もしません。