0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MZ-700 (Z80) の動作停止・割り込みと命令セットについて

Last updated at Posted at 2025-10-18

(お願い)とあるゲーム内の謎解きに関係する内容らしい、と聞いています。このゲームを遊んでおられる方は、そっとこのページを閉じてください。

MZ-700に停止命令を入力して止めたい

シャープが1982年に発売したホビー・教育向けコンピュータ「MZ-700」は、Zilog社のCPU(中央演算装置)「Z80A」を搭載しています。
1-PC291679-001.JPG
写真:「マイコン博物館」に展示されている MZ-700

このパソコンで停止命令を入力して止めたい、そんなときはどうすればいいのでしょう…。

まず、MZ-700に動作を命令する、すなわちプログラムを記述する際には、このZ80A向けの命令セット(Instruction Set)で記載する方法が、最もロスが少なく高速に実行することができます。

Z80Aには、動作を停止する命令セットがあります。

Z80 Microprocessors Z80 CPU User Manualの181ページに記載されている、

HALT

命令です。

HALT命令を使用しても、割り込みが発生してしまう

名前からしても、停止っぽく見える命令ですが…正確には停止する命令ではありません。以下の記載があります。

The HALT instruction suspends CPU operation until a subsequent interrupt or reset is
received. (略)

(訳)HALT命令は、後続の割り込みまたはリセットを受信するまでCPUの動作を停止します。

正確には、停止ではなく「割り込み」を受け取るまで、待っている命令なのです。(「リセット」は、その名の通りリセット信号を受けたときの動作です)。

「割り込み」ってなんだろう

コンピュータは、CPUだけで動作しているわけではなく、プログラムや情報を保持するメモリ、文字を入力するキーボードなど、周辺のいろいろな部品の組み合わせで動作しています。
CPUは周辺の部品からの特定の信号(割り込み信号)を受け取ったとき、プログラムの読み込み場所を変更して、別のプログラムを実行する機能を「割り込み」と呼びます。
例えば音楽を演奏したいときは、テンポに合わせて音を出力することになります。CPUは、時間を測ってくれる部品から信号を受け取り「割り込み」で時間を測定します。測定した時間に合わせ、音を出す部品に信号を送信することで、テンポが一定の音楽を演奏することができます。
また、この割り込みを上手く利用することで、画面を描画しながら音楽を演奏するなど、複数の処理を擬似的に動作することができます。(windows,linuxなど、OSがソフトウェアを管理している場合は、別の方法で複数の処理を並列に動作しています)

MZ-700の割り込み

どのような条件で「割り込み」は発生するかは、コンピュータのハードウェア設計で決まります。具体的には、CPUであるZ80Aの割り込みを行う信号を受け取る端子に、割り込みを行いたい部品の信号を接続します。
MZ-700の場合は、i8253と呼ばれている、時間を測ってくれる部品が接続されています。i8253に割り込みを行う時間間隔を設定することで、設定した時間間隔ごとに割り込みが発生します。
先程の例として記載した、音楽を演奏する場合は、この割り込みの回数を数えながら、音を出力する処理を行うことで、音楽を演奏することができます。

どうすれば、割り込みをコントロールできるの?

Z80 Microprocessors Z80 CPU User Manualの182ページ「Example」によると、

When the CPU executes the instruction DI the maskable interrupt is disabled until it is
subsequently re-enabled by an EI instruction. The CPU does not respond to an Interrupt
Request (INT) signal.

(訳)CPUがDI命令を実行すると、割り込みは(略)EI命令によって再度有効になるまで、無効になります(略)。

DI

命令で割り込みを無効にすることで、その後HALT命令を実行すると、割り込みが発生しないために、ずっと停止したままになります。

EI

命令で割り込みを有効にできます。(割り込みを受け取る状態になります)

補足:割り込み先のプログラムを実行中に割り込みが発生すると、再度割り込みが発生してしまいます。これを避けるため、割り込み先のプログラムの最初で「DI」を実行して割り込みを禁止し、最後で「EI」を実行して割り込み可能にします。

まとめ

  • MZ-700の動作と割り込みに関係する命令として、CPU「Z80A」の命令セットとして以下があります。この命令セットを組み合わせることで「停止命令を入力して止めたい」を実現できます。
    • 「 HALT 」…「割り込み」を受け取るまで、待っている命令
    • 「 DI 」…「割り込み」を禁止する命令
    • 「 EI 」…「割り込み」を許可する命令
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?