APIではAPI用にアカウントを準備しなくてはいけないらしい。
まずここでAPIキーを発行する。
https://platform.openai.com/api-keys
しかし、支払いを事前にある程度しないと使えないらしい。 ここで事前チャージした。
https://platform.openai.com/settings/organization/billing/overview
オートチャージするか選べるので、一旦無しとした。
APIではAPI用にアカウントを準備しなくてはいけないらしい。
まずここでAPIキーを発行する。
https://platform.openai.com/api-keys
しかし、支払いを事前にある程度しないと使えないらしい。 ここで事前チャージした。
https://platform.openai.com/settings/organization/billing/overview
オートチャージするか選べるので、一旦無しとした。
こちらの記事ではZ80の動きをLEDで可視化してみましたが、IO信号をLEDで光らすのは難しそうだったので、アドレスバスを可視化したのでした。IO信号を可視化するには、PIOと呼ばれるデバイスやラッチICと呼ばれるデバイスで信号をラッチ(瞬間のデータを取得し、記憶)する必要があるようだったので、まずはラッチIC単体で動作を確認してみることとしました。
使ったのは、こちらのデバイス。Dフリップフロップと言われるものです。クロックを立ち上げたタイミングの、入力(D)を出力(Q)で保持し続けるというもののようです。
TC74HC273AP | 東芝デバイス&ストレージ株式会社 | 日本
実際の回路図は以下のように組みました。クロックはタクトスイッチで代用しました。出力はLEDで可視化します。入力を電源と接続するか、GNDと接続するかで保持する値を出し分けします。
CLEARはGNDにすると、ラッチの値を開放するようです。色々動作確認してみると、常にHIGHにしていないと正常にラッチできませんでしたので、常にHIGHにしています。
実際に動かしたところが以下です。最初はHIGHをラッチしており、入力をGNDにしてからタクトスイッチを押下すると、LOWをラッチし続けていることが分かります。
ラッチIC pic.twitter.com/XQp9oDTd0T
— くれ:|| (@kure) 2025年8月1日
ラッチICの動作を簡単に確認できました。 調べてみるとラッチやフリップフロップ回路にも色々種類があるようで、仕組みや使い分けの違いも今後深堀りしていきたいところです。
Dラッチ(D-LATCH)とDフリップフロップ(D-FF) https://ie.u-ryukyu.ac.jp/~wada/digcir11/DigcirHandout8.pdf
# リポジトリのクローン git clone git@github.com:hashicorp/terraform-provider-aws.git # Go のインストール ## リポジトリの .go-version をみると 1.24.5 なので 1.24.5 をインストール ## 公式ドキュメントを参照するのが一番確実 ## https://go.dev/doc/manage-install wget https://go.dev/dl/go1.24.5.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.5.linux-amd64.tar.gz . ~/.zshrc go version # 確認 ## make tools すると version 付きの Go のバイナリ go1.24.5 が必要なので、上記Goのドキュメントにしたがってインストールする go install golang.org/dl/go1.24.5@latest go1.24.5 download # これで実行できればよいが、私の環境だとパスが通っていなかったのでパスを通す go env GOPATH # => /home/ec2-user/go, この中の bin/go1.24.5 があるのでここにパスを通す vim ~/.zshrc # => export PATH="$HOME/go/bin:$PATH" を追加 . ~/.zshrc go1.24.5 download go1.24.5 version # make tools make tools # OK! # 続き: build make build # 以下にバイナリができる # /home/ec2-user/go/bin/terraform-provider-aws
Z80とROMでLチカしてみました。
基本的にLEDはZ80のアドレスバスに接続し、アドレスバスの出力を可視化します。加えて、動作の理解のため、M1のピンと、リフレッシュのピンにも接続します(役割は後述します)。
まず、動作させた動画を掲載します。クロックは1Hzとしているので、命令サイクルごとの動きがよく分かると思います。本記事では、これらの回路の設計、プログラム、CPUの動作原理をまとめて紹介します。
注釈を追加。 pic.twitter.com/THBwh7SGiK
— くれ:|| (@kure) 2025年7月13日
実物の回路は以下です。LEDはアドレスバスとM1ピンとリフレッシュピンに接続しています。LEDは下の方から下位のビットに接続してます。(例:一番下だけ点灯したら1)
回路図は以下の通りです。Z80とROMだけを接続したシンプルな回路です。ROMを使っていますが、CPU的にはメモリの役割として使っています。
Z80とROMが接続されているのは、以下です。メモリとして使っているため、MREQとRDをROMに接続します。
実際に回路を動かす前にZ80の動作原理を確認します。下部に掲載の図はトランジスタ技術 SPECIAL No.49から抜粋です。サンプルはLD A (1234h) 命令の様子です。(メモリの1234h番地からAレジスタに値を読み込む)
LD A (1234h)
命令が格納されており、メモリの1234hに読み取らせたいデータが格納されているということです。つまり
LD
)LD
の場合は1Byte)LD A (1234h)
が読み取れたので、命令を実行します。命令はアドレス 1234h からAレジスタに読み込むということなので、アドレスバスに 1234h を出力します。以上がZ80が命令を読み込んで、実行するまでのサイクルになります。これをプログラムカウンタを増やしながら順次進めていきます。
かいつまむと、
オペコードをフェッチする→オペランドをフェッチする→実行する
をプログラムカウンタを増やしながら繰り返す、ということです。
さて、大体の動作原理がわかったところで、いよいよプログラムを動かしていきます。
最初にROMにプログラムを書き込みます。 ※ROMの使い方は以前、この記事で紹介していますので、省略します。
今回は、CPUの動作原理を確認するのが目的なので、意味のないプログラムですが、以下のように先程の動作原理の解説でも用いた命令 LD A, (0x01)
を連続で実行していきます。
START: LD A, (0x01) LD A, (0x01) LD A, (0x01) LD A, (0x01) LD A, (0x01) JP START
それでは、Z80に電源を入れて、リセットします。リセットすることで、PCが0から、Z80がメモリから命令を順番に読み込んで行きます。リセットは、リセットピンをLOW→HIGHにすることで可能です。
最初の動画を再掲します。いかがでしょうか。動作原理に解説したとおり、アドレスバスに想定どおりの出力がされながら、実行が進んでいく様子が分かるのではないでしょうか。
注釈を追加。 pic.twitter.com/THBwh7SGiK
— くれ:|| (@kure) 2025年7月13日
雑誌片手にZ80の動作原理を学習しつつ、Lチカさせることで、実際の動作を確認していきました。 理屈と動作が辻褄があっているので、おそらく記載した内容も間違っていないとは思うのですが、不正確な部分等あればご指摘いただけますと幸いです。
次は、IOデバイスも加えて、もう少しコンピューターらしくしていきたいと思います。
データシート
Z80の動作を一つ一つ確認していくために、1Hzのクロックを作ってみました。
タイマーIC動いた。
— くれ:|| (@kure) 2024年10月22日
参考:https://t.co/U9MZKH6QTL pic.twitter.com/PvfrgMPfru
回路は以下の記事と同じものを組みました。
『コンピュータはなぜ動くのか』を参考にZ80をプリミティブな形(ブレッドボードとか使って)で動作させようとしていたのだが、まずRAMにプログラムを打ち込んで保存するところがハードルが高い。 そこで、プログラムはROMチップに書き込んでZ80からはそのROMから読み込むようにすればまだ簡単かと考えた。まずは、ROMチップの扱いに慣れることや仕様の理解のため、ROMチップだけを用いて動作確認することとした。
ROMチップにプログラムを書き込み、あるアドレスのデータを出力し、LEDでその出力が正しく動作しているかを確認する。
主な道具は以下の通り。
ROMチップ「SST39SF040-70-4C-PHE」 www.marutsu.co.jp
ROMライター「XGecu T48」 Amazon.co.jp: V12.63 オリジナル XGecu T48 [TL866-3G] プログラマサポート 34000+ ICS EPROM/MCU/SPI/Nor/NAND フラッシュ/EMMC/IC テスター/ TL866CS TL866II Plus交換用。 : パソコン・周辺機器
配線には、ブレッドボード、LED、抵抗(330Ω)、ジャンパワイヤ。
今回のROMチップのピン配置からそれぞれのピンの役割を確認していく。 Lowイネーブルのため、ONにするピンはLOWとする。 以下は読み込むときの配線の考え方。
頭の整理のためにアドレスピンと、データピンのデータ空間について整理すると、 アドレスピンは 19 個あるため、 19bit => 524288 => 512KB 。つまり、アドレス空間は 512 KB。 データは 8bit であるため、255 まで表現可能。
データシートから、ピン配置の画像。
Windows 11で、Xgpro というソフトをダウンロードし、デバイスを接続することで、ROMライターを使うことができる。
XGecu_Software/Xgpro/12/xgproV1288_setup.rar at master · Kreeblah/XGecu_Software · GitHub
ROMライターにROMチップをはめ込んで、USBで接続する。
起動すると、以下のような画面が表示される。「Select IC」に今回のICチップを選択し、16進数が表示されているところを編集し、書き込みできる。 見方としては、例えば一番上の行では、一行で 00 のアドレスから 0F までのデータが格納される。1つのアドレスで表現されるデータが1列に相当する。
データピンが8つあるため、1つのアドレスで 8bit -> 16進数の2桁が表現される。
例えば、以下の画像では00アドレスでは 3E のデータが格納されている。 01 アドレスでは FF が格納されている。
今回分かりやすく、アドレス0指定で、01のピンだけを光らせてみたいと思う。したがって、アドレス 0 に 01 を書き込む。以下のように入力し、 Device -> Program と入力する。
書き込み後に読み込みの配線を組む。アドレスが0の値を読み込むようにする。すなわち、アドレスピンをすべてGNDにつなぐ。データピンはすべてLEDにつないで、どのピンが出力されたかを分かるようにする。
そして、電源をつなぐと、、以下のようにDQ0 のピンだけ光る!すなわち、アドレス0の値は1であることが分かる。