Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Z80 CPUでLチカを通じて、コンピュータの動作を理解しよう

Avatar for Akira kure Akira kure
November 05, 2025
450

Z80 CPUでLチカを通じて、コンピュータの動作を理解しよう

コンピュータ(CPU、メモリ、IO)の動きを理解するために、Z80でLチカしてみます。

Avatar for Akira kure

Akira kure

November 05, 2025

Transcript

  1. コントロールバスの種類 • CPU(Z80) • MREQ(メモリリクエスト)・・メモリとやり取りするときにEnable • IOREQ(IOリクエスト)・・IOとやり取りするときにEnable • RD(リード)・・読み取り命令 •

    WR(ライト)・・書き込み命令 • RAM(ROMで代用) • CE(Chip Enbale)・・メモリを入出力する • OE(Output Enable)・・出力する • WE(Write Enable)・・入力する • IOラッチ • CLK・・入力データをラッチ(保持)する
  2. CPU(Z80) メモリ (ROM) /MREQ データバス IO (ラッチIC) /IOREQ アドレスバス ・ROMからプログラムを読んで、IO(ラッチIC)に書き込む(LEDの点灯)

    ・メモリの代用でROMを用いる。読み取るだけなので、ROMのWEはHIGH(パッシブ)のまま。 ・IOから読み取りは行わないので、RDはROMにつながない (本当はIORQとWRの論理和回路をラッチのCLKにつなぐのがきれいかもしれないが、手抜きで) /RD /WR CLK /OE /CE /WE
  3. CPU(Z80) メモリ (ROM) /MREQ データバス IO (ラッチIC) /IOREQ アドレスバス /RD

    /WR CLK /OE /CE /WE 1. まずメモリからプログラムをロードする →MREQ+RDをEnableにして、アドレスバスにプログラムカウンタの値を出力してアドレスを 指定。データバスで命令を取り出す。
  4. CPU(Z80) メモリ (ROM) /MREQ データバス IO (ラッチIC) /IOREQ アドレスバス /RD

    /WR CLK /OE /CE /WE 2. 命令を解釈して、IOに出力する → IOREQ+WRをEnableに。
  5. プログラム: 1つずつインクリメントした値を出力していく あらかじめROMに書き込んでおく START: LD A, 0b00000001 ; Aレジスタに1を格納 OUT

    (0x01), A ; Aレジスタの値(1)をアドレス1に出力 LD A, 0b00000010 ; Aレジスタに2を格納 OUT (0x01), A ; Aレジスタの値(2)をアドレス1に出力 LD A, 0b00000011 ; Aレジスタに3を格納 OUT (0x01), A ; Aレジスタの値(3)をアドレス1に出力
  6. 1を出力 START: LD A, 0b00000001 OUT (0x01), A LD A,

    0b00000010 OUT (0x01), A LD A, 0b00000011 OUT (0x01), A
  7. 2を出力 START: LD A, 0b00000001 OUT (0x01), A LD A,

    0b00000010 OUT (0x01), A LD A, 0b00000011 OUT (0x01), A
  8. 3を出力 START: LD A, 0b00000001 OUT (0x01), A LD A,

    0b00000010 OUT (0x01), A LD A, 0b00000011 OUT (0x01), A この信号はIOREQの可視化 Enableのときに消灯する OUT命令の直前に消える
  9. さらに詳細:クロックごとの処理内容 →1つの命令をするのに大体4クロック →8クロックごとにLEDをインクリメントしながら点灯 何クロック目 プログラム カウンタ アドレスバス 出力値 アドレスバス 出力内容

    備考 1 0 0 PC オペコードフェッチ 2 1 1 PC オペランド読み込み 3 2 2 PC オペランド読み込み 4 2 1 実行 レジスタに値を保存 5 3 3 PC オペコードフェッチ 6 3 1 リフレッシュ 7 4 4 PC オペランド読み込み 8 5 5 PC オペランド読み込み 9 5 1 実行 LED点灯 10 6 6 PC オペコードフェッチ 11 6 2 リフレッシュ 12 7 7 PC オペランド読み込み 13 8 8 PC オペランド読み込み 14 8 1 実行 レジスタに値を保存