EXCELでTK-80
EXCEL-TK80A(2020/5/27)
TK-80の命令をEXCELでシミュレートしてみました。赤いアクティブLED(模擬)が動いてとてもきれいです。この画面でほぼTK80のすべてを表示しています。
右のほうにRAMとROMが表示されています。一番右はマクロです。
コードが見えてしまうと著作権にかかわるので見えないように解像度を下げています。
デコーダ(中日電工菱田様のMYCPU80組立キットの回路を参考にしました),と機械語ニーモニック命令表です数年前作ったものですがほぼシミュレートできます。(*すごくゆっくりです)
仮想メモリの内容を読み込んで命令を認知する表計算での表現です。命令の実行はMOV,MVI,LXI,JMPだけですが,全て再現できるよう頑張りたいと思います。
レジスタの集まりです。
主要なAF,BC,DE,HL,PC,SPレジスタのほかにも加算器やその他のレジスタを用意しています。これで足りるかはまだわかりません。
7セグ部分は表示が荒いのでもう少し工夫したいと思います。
データの入力や動作の入力表示装置のボタンたちです。各ボタンにマクロを書いてありますが,動作がとても遅いのでコマンドを短く工夫しています。
EXCEL-ロジック(2021/12/27)
ExcelでNAND
NANDゲートはロジック回路の中では基本的なものでこれを組み合わせるといろいろなゲートを作ることができます。ExcelでNANDOの働きを作ってみます。
挿入☞図形☞フローチャートからANDの形を選択して3×3より少し大きく描きます。円を内側がセルになり,外側がセルを隠すように書きます。2つの図形をグループ化します。
A2にカーソルを合わせ,条件付き書式☞新しい書式☞数式を利用して、書式設定をするセルを決定
「次の数式を満たす場合に値を書式設定」の下の行に式を入れます。A2をクリックすると「=$A$2」と入力されます。$は絶対番地を表す記号なので,移動してもA2の状態を示します。移動した場所の状態にする場合は[$]を削除します。=A2=1とします(A2が1の時という意味です)。矢印キーは使えないのでマウスのクリックで式の中を移動します。
右下の「書式(E)」をクリックするとセルの書式を設定できるようになるので,設定します。今回は赤色LEDをまねて塗りつぶしを「赤」にします。
Excelの図形を組み合わせてNANDゲートの形を作ります。
入力出力のセルは中央に表示させます。そのセルに条件付き書式の「新しいルール」を設定します。
「数式を使用して、書式を設定するセルを決定」をクリックします。式の位置にカーソルを合わせてセルをクリックします。
"=$A$11"と表示されますので"$"を削除します(*カーソルは効きません,マウスのクリックでカーソルを移動させます)。
'F4'を3回押しても可能です。"=1"を付け加えます。
"=A11=1"と入力してもOKです。
1つのセルの条件付き書式ができたらコピー&ペーストできます(相対番地にしたので)。
図形をクリックして選択して矢印キーで移動し円の中に赤いセルが収まるようにします。
NANDを組み合わせればほとんどのロジックを作ることができます。
ロジック回路の働きは実物を操作するとよくわかります。HPでは触ってみるということができません。ExcelでシミュレートできますのでExcelを立ち上げて触ってみてください。
A2を'1'にするとAのセルは赤くなります。'0'ならば色は変わりません。ほかの数字でも文字でも色は変わりません。
A2のセルをコピーしてA4とE3に複写します。それぞれのセルで独立して赤いLEDが点滅するように見えます。(連動してしまう場合は=$A$2のように絶対番地になっているかもしれません)
NANDの働き
NANDは入力Aと入力Bが両方とも'1'のとき出力が'0'になる論理回路です。入力に合わせて出力が自動的に出るように出力のセルE3に式を入れます。
式は=IF(A4=1,IF(A2=1,0,1),1)
または=IF((A4=1)*(A2=1),0,1)です。
NANDゲートの入力と出力を表にしたものを真理値表と言います。AとB両方の入力が'1’の時出力が'1'になります。
'1'というのは電圧が出るということ,スイッチが入ることになります。マイコンなどの世界では5Vまたは3Vの電圧になります。'0'は0Vになります。
3Vとか5Vならばここに豆電球をつなぐと点くということです。なのでLEDが付いたように赤い色になるようにしてあります。
縦型NAND
作ったゲート回路はコピーして貼り付けることができます。A1からF5までコピーすれば分かり易く複写できますが,A2からE4まででも複写できます。
縦横を変換するには,NAND図形を輪郭のところで右クリックしてコピーして別の場所に複写します。赤丸で囲ってある,取っ手をドラッグして回転させます。縦横比は1:1に近くしてありますが誤差があるので丸とANDの形を調整します。
BCDのセルが均等に入るようにします
図形の輪郭を左クリック
円を左クリック円を選択
NANDを左クリックNANDを選択
図形の輪郭をクリックして円かANDのどちらかの輪郭をクリックすると部分を指定できます。
セルの条件付き書式を複写して調整します。
丸の部分の出力のセルの式は入力のセルのアドレスに合わせます。C2のセルの式は=IF(B6=1,IF(D6=1,0,1),1)または
=IF((B6=1)*(D6=1),0,1)にします。
セルの書式設定で文字位置をH,V両方とも中央にしておくときれいに表示してくれます。
入出力やゲートの表示もできます。
NANDでバッファとNOT
NANDはいろいろなゲートを作ることができます。
バッファはもっとも単純な回路です。入力が'1'の時,出力が'1'。入力が'0'の時,出力が'0'になるものです。
NANDゲートのABの入力を一つにすれば一つの入力に一つの出力になります。しかし,出力は反転してしまいます。
これはNOTゲートになります。二つつなげればバッファになります。
この時黒い線でセルを結んでいますが,これは視覚的なものです。
=
B2のセルには=A3と式を入力します。同様にB4にも=A3と式を入力します。
出力と入力を結ぶと回路ができます。本当の回路と同じように結果ができます。視覚的にわかるように導線のように結線すると分かり易くなります。矢印にしたいくらいです。
H2のセルには=F3,H4にも=F3と式を入力します。
*セル名や式のアドレスは相対的なもので場所によって変わります。
NANDでAND
AND回路は入力が2つとも1になったとき出力が1になるロジック回路です。入力が両方0の時出力が1になるNANDとよく似ています。入力が両方0と,入力が両方1の違いです。'1'を'0'に変えるのはNOT回路です。NOT回路はNANDで作れます。
=
=
配線をしてはいませんがセルの関係は理解できると思います。
NANDと各ゲート
各ゲートの入力と出力のセルに書式(行列共に中央表示)。条件付き書式('1'のとき塗りつぶし"赤",'TRUE'のとき塗りつぶし"赤"の2行)を設定します。
各ロジック回路の働きです。BuffaとNOTとAND,NANDの働きは説明したとおりです。各出力の数式は小さいですが各ゲートの下に書いてあります。それぞれのゲートをクリックすると,
POP UPします。
NOT,OR,ANDはIF文より簡単な式を使うことができます。
NOT ☞'=NOT(Z27)
OR ☞'=OR(D26,D28)
AND ☞'=AND(D31,D33)
ABCの列がもったいないようですがOR回路をExcelで作るには楕円の一部を使いますのでこの範囲が必要です。
XORの論理計算は
'=IF(((T31=1)*(T33=1))+((T31=0)*(T33=0)),1,0)です。
Excel2010からは
XOR '=XOR(T31,T33)が使えることになります。
マイコン
トレイニング・プログラム
TP-8080A Visual Basic
TP-8080A(2016/5/7)
TK-80はとても素晴らしい機械ですが今はもうありません。
そこで,8080Aの命令を全てシミュレートするプログラムを作ります。TP-8080A
25キー
C++で25キーを作りました。16進数と8ファンクション+リセットです。
TP-8080A(2022/1/30)PDFから再構築
なんとなくTK-80に似ているでしょう。
Bボタンを押しているところです。Bのキーが変化しているでしょう。そして,2進数と10進数がTextboxsに表示されています。
(2016/5/7)
7segLED
TP-8080A(2022/1/30)PDFから再構築
7セグLEDも作ってみました。
C++はグラフィックに弱いのですがなんとか作ることができました。
TK-80のセグメントの形に似せたかったのですが,難しいですね。
アドレスセットまでできたのですが,グローバル変数の使い方がわからず,メモリーリードができません。
TP-8080A(2022/1/30)PDFから再構築
VBへ移行
変数などの扱いが容易なBaisicに乗り変えました。
なんと,なんとコントロールはコピーアンドペーストができてしまいました。さすがvisual studioです。これはコピーして少し動くようになったところの写真(図?)です。
余白の部分は無駄のようですが,TK-80らしく見えるので,この形にしています。
(2016/10/3)
7segLED
7セグメントLEDも枠の形から凝ってみました。(2016/10/20)
TP-8080Aの7セグ
電極やセグメントの形も一つ一つ丁寧に作り上げました。下の本物にそっくりでしょう?
本物消灯時
本物点灯時
点滅
点滅の実験です。点灯時と消灯時の違いは良さそうです。(2016/10/23)
セグメント表示
セグメント情報への変換実験です。ここでは電子ブロックの自作ブロック,7セグブロックが活躍しました。
”2”のデータが違っていたので修正しました。(2016/11/12)
部品の表示
TK-80のモニタプログラムを解析して本物と同じような動作ができるようにプログラムを書いていきたいと思います。
実験に使って余ったTextBoxを使ってレジスタを表現してみました。
MVIが書けたのでレジスタに入力するか調べてみたところです。(2016/11/20)
アドレス
最初の8文字はスタートアドレスと終了アドレスです(00000000h~0000000Fh)。
06hからはMVI命令とMOV(45h)最後は76h(HLT)です。
0000 000F 0601 0E02 1603 1E04 2605 2E06 3E07 4576
なぜか,CPUに見えてしまいます。
いつもの癖(蛇足)で7セグLEDの下に時計を付けてしまいました。命令の実行時間をはかろうとしているのですが難しそうです。
全体の概略
レジスタ表示がCPUに似ていたのでTextBoxでいろいろなものを表現してみました。メモリをたくさん無駄に使っていそうです。(2016/11/21)
時計が有るのでいつ編集しているのか,わかります。
細部の描画
デザイン画面(上)のTextBoxだけでは円や回転文字は書けないのでプログラムで書きました(下)。BASICは描画命令が豊富で充実しています。(2016/11/26)
エンベロム
けっこうきれいに表示されていると思います。セラミックICの丸窓もうまく表現できています。エンブレムの大きさが微妙に違っています。円形の黄金色を表現が難解でした。
ICの色は少し変えています。RAMが立体的に見えます。
MVIとMOVでしばらく遊んでいましたが,その他の命令も実行できるようにしていきたいと思います。演算命令を実行できるようにしていきます。