<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns="http://purl.org/rss/1.0/"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
>
<channel rdf:about="http://blog.livedoor.jp/hardyboy/">
<title>まごころせいじつ堂 - 8080</title>
<link>http://blog.livedoor.jp/hardyboy/</link>
<description>浜町庄金　研究開発
　マイコンで遊んでばっかりで

</description>
<dc:language>ja</dc:language>
<admin:generatorAgent rdf:resource="http://blog.livedoor.com/?v=2.0" />
<items>
 <rdf:Seq>
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9334862.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9333987.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9321227.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9308365.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9308013.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9306807.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9303826.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9303450.html" />
  <rdf:li rdf:resource="http://blog.livedoor.jp/hardyboy/archives/9303434.html" />
 </rdf:Seq>
</items>
</channel>

<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9334862.html">
<title>8080Aの割り込み応答の謎</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9334862.html</link>
<description>　きっかけはNEC μPD8080Aのカタログにあったこの記述。
	
		
			
				
					
						The μPD8080A has the capability to accept a multiple byte instruction upon an interrupt. This means that a CALL instruction can be inserted so that any address in the
memory ...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2019-02-20T00:39:08+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　きっかけはNEC μPD8080Aのカタログにあったこの記述。</div><div>
	
		<div  title="Page 150" class="page">
			<div  class="section">
				<div  class="layoutArea">
					<div  class="column">
						<blockquote><p>The μPD8080A has the capability to accept a multiple byte instruction upon an interrupt. This means that a CALL instruction can be inserted so that any address in the
memory can be the starting Iocation for an interrupt program. This can be accom-
plished without auxilliary circuit because INTA is active for all three bytes of the CALL
instruction. </p>	
</blockquote></div></div></div></div></div><div>　わざわざ3バイト命令のCALLを受け付けるよ書いてあるのはなんでだろうか。8080Aはもともとできたのでは？ということで調べてみた。その前に8080Aの割り込み動作について。</div><br /><div>　8080Aは割り込み許可の状態でINT入力がHになると割り込み動作にはいる。割り込み復帰のための現プログラムカウンタの保存はしない代わりに1命令分をデータバスから読み込んで(fetch)実行する。ここで特定の命令、RST7(FFH)を読み込むと現在のPCを保存して38Hにジャンプする。この1命令実行時はPCを更新しないので、38Hからの割り込み処理からリターンする時に元通りの番地に戻ることができる。RSTn命令はRST0〜RST7まで存在し、n × 8番地がエントリポイントとなる。</div><div>　スタックにPCを保存してジャンプする命令ならCALL命令でもよく、これは3バイト長である。任意のアドレスをエントリポイントにできるが、割り込み時の回路が複雑になる。</div><br /><div>　さて割り込み時は8080Aのデータバスに出力されるステータスをデコードすることにより得られる*INTA信号がアクティブになる。ここを観測することにより割り込み時にどんな長さのコードを取り込んでいるのかがわかるはず。命令実行時にはSYNC信号が立つので、*INTAの立ち下がりをトリガにして同時にSYNC信号をオシロで観測することにした。</div><br /><div>　実験に使用するのはSBC8080ボードとPALO ALTO BASICを元に機能を追加してあるSBC8080システムROMを使用した。これは割り込みを許可し8251UARTを初期化し端末の文字入力でINTを上げてくれるのでそのまま割り込みの観測に使える。</div><br /><div>　*INTA信号は8228システムコントローラが8080Aのデータバスからデコードし出力する。ただし+12Vにプルアップした状態では何も変化しなかった。+12Vプルアップしていると割り込み発生時に内部で自動的にRST7(FFH)を生成し、*INTA信号は外に出さないようだ。</div><br /><div>　8228の*INTAの+12Vプルアップを外し、観測する。端末から1文字入力すると*INTAが発生した。ただし*INTAの数はまちまちである。これは割り込みサイクルで命令取り込み時にバスがフローティング状態のため、バラバラなデータを読み込んでいるせいだと思われる。以下はたまたま1バイト命令のRST7がはいった様子(キー入力が続けてできたので38H番地に飛んでいると思われる)。</div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/0/f/0f8ca0ec.jpg" title="2019INTA1" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/0/f/0f8ca0ec-s.jpg" alt="2019INTA1" class="pict" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><br /><div>　データバスを弱くプルアップ/プルダウンして任意の命令フォーマットを与えることにする。10KΩプルアップ/プルダウンでCALL命令に相当するCDHに設定した。CALL CDCDHとなるはず。</div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/a/0/a077de80.jpg" title="2019INTA" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/a/0/a077de80-s.jpg" alt="2019INTA" class="pict" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div>　観測結果は以下の通り*INTAが３発。</div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/6/4/64740028.jpg" title="2019INTA3" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/6/4/64740028-s.jpg" alt="2019INTA3" class="pict" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div>　さて割り込みで使うRST7とCALL xxxxは観測できたが、ひょっとしてこの*INTA信号は任意の命令のデコード後にわかる命令のバイト数分出るのではなかろうか。ということで配線を変えてADC imm(CEH CEH)にしてみた。結果は予想どおり*INTA 2発。</div><br /><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/d/3/d350ca92.jpg" title="2019INTA2" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/d/3/d350ca92-s.jpg" alt="2019INTA2" class="pict" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><div>　8080Aは割り込み時に1命令を読み込んで実行し、RSTnやCALL xxxxでスタックにPCを保存することを期待している。が、これは任意の命令でよく、命令をフェッチ/デコードして得られた命令のバイト数分*INTAを発生して1命令を実行する。</div><div>　Intel 8080Aとそのクローン、NEC μPD8080Aも同じ結果であり、NECのカタログに書いてあった割り込み時に3バイト命令も受け付けるよという記述はわざわざ書くまでのことでもなかったということになる。</div><br /><div>　あとクローン8080Aについては解析済で以下からverilogソースが見られます。<br /></div><div><a  href="https://zeptobars.com/en/read/KR580VM80A-intel-i8080-verilog-reverse-engineering" target="_blank">Reverse-engineering of KR580VM80A / i8080 is complete!</a></div><br /><br /><br /><br />
<a  target="_blank" href="https://www.amazon.co.jp/dp/B0773MVDKN?tag=keisanki-22">NEC 8bit 2MHz MPU i8080互換 UPD8080AFC</a><br  clear="all">
<table  border="0">
<tbody><tr  align="left">
<td>
<a  target="_blank" href="https://www.amazon.co.jp/dp/B0773MVDKN?tag=keisanki-22"><img  alt="B0773MVDKN" aligh="left" src="https://images-fe.ssl-images-amazon.com/images/I/41XH5pD5PPL._SL200_.jpg" border="0"></a>
</td>
<td  align="left">
<br />
<img  title="5つ星のうち5.0" alt="5つ星のうち5.0" src="https://images-fe.ssl-images-amazon.com/images/G/09/x-locale/common/customer-reviews/ratings/stars-5-0.gif" width="55" height="12" border="0"><br />
￥ 1,200<br />
</td></tr></tbody></table>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9333987.html">
<title>NEC μPD8080Aの非互換部分まとめ</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9333987.html</link>
<description>　NEC μPD8080Aのデータシートが見つからないで悩んでいたら@electrelicさんからbitsaversにあるよ、と教えていただきました。その 1977_NEC_Microcomputer_Catalog.pdf を参照しつつこれまでの実験結果からINTEL 8080との非互換部分を整理。（電気的特性は省略）・命令実行...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2019-02-17T23:05:14+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　NEC μPD8080Aのデータシートが見つからないで悩んでいたら<a  target="_blank" href="https://twitter.com/electrelic">@electrelic</a>さんからbitsaversにあるよ、と教えていただきました。その 1977_NEC_Microcomputer_Catalog.pdf を参照しつつこれまでの実験結果からINTEL 8080との非互換部分を整理。（電気的特性は省略）</div><br /><br /><div>・命令実行のサイクル数</div><div>　これは<a  target="_blank" href="http://www.st.rim.or.jp/~nkomatsu/intel8bit/i8080.html">IC Collection MCS80</a>に詳しい表があります。</div><br /><div>

<div  style="-en-clipboard:true;"><strike>・割り込み応答時間が3バイト命令(例:CALL)後でアクティブ
</strike></div><div><strike>　通常、割り込み発生時にはデータバスにRSTx(1バイト命令)のコードを流し込んで決まったエントリに飛ぶが、3バイトのCALL命令で任意の番地を割り込みエントリにできるということか？
</strike></div></div><strike><br /></strike><div><strike>※追記：システムコントローラ8228は割り込み時にCALL命令が入ると続く2サイクルの間も*INTAをアクティブにして、CALL命令で指定した任意のアドレスを割り込みの飛び先にする機能がある。NEC μPD8080Aは8228のサポートなしでこれができるということだろうか。<br /></strike></div><br /><div>→<a  target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/9334862.html">8080Aの割り込み応答の謎</a>を参照。Intel 8080Aと変わらず<br /></div><br /><div>・未定義フラグbit3が常に1。INTEL 8080Aは常に0</div><br /><div>

・フラグbit5はSUBフラグ。DAA命令で参照。INTEL 8080Aは常に0</div><br /><div>NEC μPD8080Aのフラグ<br /></div><div><img  class="pict" alt="スクリーンショット 2019-02-13 21.00.44" src="http://livedoor.blogimg.jp/hardyboy/imgs/4/d/4d622d83.jpg" width="193" hspace="5" height="94" border="0"><br /></div><br /><div>NEC μPD8080AF(INTEL 8080A完全互換)のフラグ</div><div><img  class="pict" alt="スクリーンショット 2019-02-13 21.01.28" src="http://livedoor.blogimg.jp/hardyboy/imgs/1/2/127abd1c.jpg" width="192" hspace="5" height="94" border="0"><br /><br /></div><br /><div>

<div  style="-en-clipboard:true;">・DAA十進補正命令はSUBフラグ=1で減算後十進補正。SUBフラグは減算命令(SUB/DCR)で1になる。加算命令(ADD/INR)で0クリア。 <br /></div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;">

・DCR命令でACYフラグが立たない場合があり、被減数が00,10,20,30,40,50,60,70,80,90でDCR後DAAで誤動作する。</div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;">

<div  style="-en-clipboard:true;">・XRA/ANA/ORA命令後ACフラグがクリアされずそのまま。 <br /></div><div  style="-en-clipboard:true;">　カタログには"Also,arithmetic flags not affected by logical instructions. "とある</div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;">また、さる方面からBCD演算の実装について教えていただきました。<a  target="_blank" href="https://en.wikipedia.org/wiki/Double_dabble">https://en.wikipedia.org/wiki/Double_dabble</a></div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;">　減算命令後のDAA補正対応や論理演算命令での算術フラグを操作しないなど命令を追加しないで改善しようとした感じがしますね。</div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;"><br /></div><div  style="-en-clipboard:true;"><br /></div></div></div><br />
<a  href="https://www.amazon.co.jp/dp/B000J7VKF8?tag=keisanki-22" target="_blank">マイクロコンピュータ・ハードウエア基礎技術―M6800系,8080系,Z-80系 (1981年)</a><br  clear="all">
<table  border="0">
<tbody><tr  align="left">
<td>
<a  href="https://www.amazon.co.jp/dp/B000J7VKF8?tag=keisanki-22" target="_blank"><img  src="https://images-fe.ssl-images-amazon.com/images/I/61HvEWqQZVL._SL200_.jpg" aligh="left" alt="B000J7VKF8" border="0"></a>
</td>
<td  align="left">
1981-03<br />
<br />
￥ 2,400 (中古品)<br />
</td></tr></tbody></table>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9321227.html">
<title>NEC uPD8080AのDAA命令調査　SUB編とINR/DCRの挙動</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9321227.html</link>
<description>　前回のADD編の続き。　μPD8080Aは減算後の十進補正も正しく動作する、ということなので確認。chkbcdsub.awk$1 ~ /[0-9][0-9][0-9][0-9]/ {  a=substr($1,1,2)  b=substr($1,3,2)  if (b&gt;a) a=a+100  c=a-b  if (c!=($4-0)) print $0}　入力データの1カラム目は4桁の1...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2019-01-21T17:02:48+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　前回の<a  href="http://blog.livedoor.jp/hardyboy/archives/9308365.html" target="_blank">ADD編</a>の続き。</div><br /><div>　μPD8080Aは減算後の十進補正も正しく動作する、ということなので確認。</div><br /><div>chkbcdsub.awk</div><blockquote><div>$1 ~ /[0-9][0-9][0-9][0-9]/ {</div><div>&nbsp; a=substr($1,1,2)</div><div>&nbsp; b=substr($1,3,2)</div><div>&nbsp; if (b&gt;a) a=a+100</div><div>&nbsp; c=a-b</div><div>&nbsp; if (c!=($4-0)) print $0</div><div>}</div></blockquote><br /><div>　入力データの1カラム目は4桁の16進数で、前2桁から後ろ2桁で減算を行う。その結果を十進補正したものが4カラム目。このスクリプトはこの減算を行い、十進補正値と比較して異なれば出力する。</div><br /><div>Intelの8080だと00〜99 - 00〜99の全組み合わせ10000通りですべてエラー。例えば：</div>
<br />
0000 00 *Z*H*P** 06 *****P**<br />
0001 FF S****P*C 65 ***H*P*C<br />
...<br />
とこのような感じで1行目は減算時のハーフフラグの立ち方がおかしく、よけいな補正をしている。2行目は"F"から補正値6を引かないといけないところを加算している。ということで減算時の補正についてはまったく考慮していない。<div>&nbsp;NECのμPD8080AではSUB命令の後の補正後の値はすべて正しかった。ところで十進補正の補正値である"6"をDAA命令で足すのか引くのかはどうやっているのだろうか。おそらくDAA命令の直前に実行した演算命令がADDなら加算、SUBなら減算にしているはずで、もしかしたら未定義のフラグを使っているのか。ここは気になる点。</div><div>※8086だとDAA命令とDAS命令でそれぞれ加算後十進補正、減算後十進補正と命令が別れている。<br /></div><br /><div>　さてここまでやって1加算するINR命令と1減算するDCR命令ではどうだろうか。これも確認してみた。</div><br /><div><a  href="https://gist.github.com/houmei/a58a07d4e1bdeb0239be83e8cc09af07" target="_blank">https://gist.github.com/houmei/a58a07d4e1bdeb0239be83e8cc09af07</a></div><br /><div>ADD 1とINR、SUB 1とDCRの比較結果はこちら：<br /></div><div><a  href="https://gist.github.com/houmei/a58a07d4e1bdeb0239be83e8cc09af07#file-diff_result-txt" target="_blank">https://gist.github.com/houmei/a58a07d4e1bdeb0239be83e8cc09af07#file-diff_result-txt</a></div><br /><div>Intel 8080の結果は以下の部分が異なる。2〜5カラム目がADD 1の結果、6〜9カラム目がINRの結果。<br /></div><br /><div>INR:<br /></div><div>FF01 00 *Z*H*P*C 66 *****P*C 00 *Z*H*P** 06 *****P**</div><div>これは値が範囲外、かつキャリーフラグがINRでは立たないので補正されていない。問題なし。</div><br /><div>DCR:</div><div>0001 FF S****P*C 65 ***H*P*C FF S****P** 65 ***H*P*C</div><div>そもそもSUB後のDAAは保証外、値が範囲外、INRでキャリーが立たない。問題なし。</div><br /><br /><div>NEC μPD8080Aの結果。</div><div>INR:<br /></div>

0F01 10 ***H**** 16 ***H**** 10 ******** 10 ********<br />
1F01 20 ***H**** 26 ***H**** 20 ******** 20 ********<br />
2F01 30 ***H*P** 36 ***H*P** 30 *****P** 30 *****P**<br />
3F01 40 ***H**** 46 ***H**** 40 ******** 40 ********<br />
4F01 50 ***H*P** 56 ***H*P** 50 *****P** 50 *****P**<br />
5F01 60 ***H*P** 66 ***H*P** 60 *****P** 60 *****P**<br />
6F01 70 ***H**** 76 ***H**** 70 ******** 70 ********<br />
7F01 80 S**H**** 86 S**H**** 80 S******* 80 S*******<br />
8F01 90 S**H*P** 96 S**H*P** 90 S****P** 90 S****P**<br />
9F01 A0 S**H*P** 06 ***H*P*C A0 S****P** 00 *Z***P*C<br />
AF01 B0 S**H**** 16 ***H***C B0 S******* 10 *******C<br />
BF01 C0 S**H*P** 26 ***H***C C0 S****P** 20 *******C<br />
CF01 D0 S**H**** 36 ***H*P*C D0 S******* 30 *****P*C<br />
DF01 E0 S**H**** 46 ***H***C E0 S******* 40 *******C<br />
EF01 F0 S**H*P** 56 ***H*P*C F0 S****P** 50 *****P*C<br />
0F01 10 ***H**** 16 ***H**** 10 ******** 10 ********<br />

<br />値が範囲外なので問題なし。<br /><br />DCR:<br />
0001 FF S**H*P*C 99 S**H*P*C FF S****P** FF S****P**<br />
1001 0F ***H*P** 09 ***H*P** 0F *****P** 0F *****P**<br />
2001 1F ***H**** 19 ***H**** 1F ******** 1F ********<br />
3001 2F ***H**** 29 ***H**** 2F ******** 2F ********<br />
4001 3F ***H*P** 39 ***H*P** 3F *****P** 3F *****P**<br />
5001 4F ***H**** 49 ***H**** 4F ******** 4F ********<br />
6001 5F ***H*P** 59 ***H*P** 5F *****P** 5F *****P**<br />
7001 6F ***H*P** 69 ***H*P** 6F *****P** 6F *****P**<br />
8001 7F ***H**** 79 ***H**** 7F ******** 7F ********<br />
9001 8F S**H**** 89 S**H**** 8F S******* 8F S*******<br />
A001 9F S**H*P** 99 S**H*P** 9F S****P** 9F S****P**<br />
B001 AF S**H*P** A9 S**H*P** AF S****P** AF S****P**<br />
C001 BF S**H**** B9 S**H**** BF S******* BF S*******<br />
D001 CF S**H*P** C9 S**H*P** CF S****P** CF S****P**<br />
E001 DF S**H**** D9 S**H**** DF S******* DF S*******<br />
F001 EF S**H**** E9 S**H**** EF S******* EF S*******<br />

<br />00-01から90-01はBCD演算の対象。DCRでハーフキャリーが立っていないのでDAA補正が正しくない。ということはBCDの範囲内ならINR後DAAはIntel、NECとも正常動作する。DCR後DAAはIntelは保証外、NECは被減数が00,10,20,30,40,50,60,70,80,90でDCR後DAAで誤動作する。<br /><br />　惜しい。NEC μPD8080Aの減算後DAAではINRで正常動作するつもりでDCRを使うとハマるんじゃなかろうか。<br />　INR/DCRではキャリーフラグは立たない。フラグのうちS/Z/Pは結果だけから求められるが、CY/ACは演算の種類と値によって決まる。INR/DCRはALUの加減算器のパスを通ってない感じがする。<br /><br />　残りは8085やZ80との比較かな。<br /><br /><br />おまけ：チェコスロバキアから届いたTESLA MHB8080A動きました。<br /><a  href="http://www.teslakatalog.cz/MHB8080AC.html" target="_blank">MHB8080ACデータシート</a><br /><br /><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/1/f/1f7a543c.jpg" title="2019MHB8080A" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/1/f/1f7a543c-s.jpg" alt="2019MHB8080A" class="pict" width="480" hspace="5" height="360" border="0"></a><br /><br /><br /><br /><a  target="_blank" href="https://www.amazon.co.jp/dp/4899774532?tag=keisanki-22">インテル8080伝説</a><br /><a  href="https://www.amazon.co.jp/dp/4899774532?tag=keisanki-22" target="_blank"><img  src="https://images-fe.ssl-images-amazon.com/images/I/51MKPAdtkCL._SL200_.jpg" alt="4899774532" border="0"></a><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9308365.html">
<title>NEC uPD8080AのDAA命令調査　ADD編</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9308365.html</link>
<description>　前回の SBC8080システムROMでBASICから機械語を呼び出す で実チップのテスト環境が整ったので以前から気になっていたIntel 8080とNEC μPD8080Aの非互換部分についての調査を行った。　NEC μPD8080AはIntel 8080のクローンではなく独自に改良し、DAA命令(十進補正命令)の...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2019-01-13T22:31:11+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　前回の&nbsp;<a  target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/9308013.html">SBC8080システムROMでBASICから機械語を呼び出す</a> で実チップのテスト環境が整ったので以前から気になっていたIntel 8080とNEC μPD8080Aの非互換部分についての調査を行った。</div><br /><div>　NEC μPD8080AはIntel 8080のクローンではなく独自に改良し、DAA命令(十進補正命令)の減算対応、実行クロック数の改善がなされた。が、せっかく改善したのに非互換部分が嫌われ完全互換のμPD8080AFに切り替わった。</div><div><a  target="_blank" href="http://www.st.rim.or.jp/~nkomatsu/intel8bit/i8080.html">MCS-80</a>(IC Collection)<br /></div><br /><div>　まずDAA命令の動作について。DAA十進補正命令はハーフキャリーを参照する。<br /></div><br /><div><a  target="_blank" href="http://www.nj7p.info/Manuals/PDFs/Intel/9800153B.pdf">Intel 8080 Microcomputer Systems User's Manual</a> で確認する。</div><blockquote><div>Auxiliary Carry: If the instruction caused a carry out of bit 3 and into bit 4 of the resulting value, the auxiliary carry is set; otherwise it is reset. This flag is affected by single precision additions, subtractions, increments, decrements, comparisons, and logical operations, but is principally used with additions and increments preceding a DAA (Decimal Adjust Accumulator) instruction</div></blockquote><div>FLAGレジスタのbit4はACフラグ(またはHフラグ　ハーフキャリー)で加算時のbit3からbit4への桁上げで立つ。このフラグは加減算/INC/DEC/比較/論理演算で変化するが主に加算とINCの後のDAA命令で使う、とある。<br /></div><br /><div>　DAA命令の記述。</div><div><img  class="pict" alt="スクリーンショット 2019-01-13 21.30.20" src="http://livedoor.blogimg.jp/hardyboy/imgs/9/b/9b4fdaf8.jpg" width="440" hspace="5" height="427" border="0"><br /></div><br /><div>　DAA命令は直前のADD命令について、BCD表現の数値を加算したものとして補正を行う。例えば04H+06Hは0AHだけどこれを10Hに修正する。その手順は以下のとおり：</div><div>(1) 下の桁がA-Fになっている、またはハーフキャリーが立っていれば6Hを加算する。</div><div>(2) (1)の後、上の桁がA-Fになっていればキャリーフラグを立て60Hを加算する。</div><br /><div>もっと詳しい実装の解説はこちら：</div><div> <strike></strike><a  target="_blank" href="http://userweb.alles.or.jp/chunichidenko/mycpu224.html"><strike>標準TTL</strike>だけ（！）でCPUを作ろう！[第224回]</a> <a  name="pagetop"><br /></a></div><div><a  name="pagetop"></a></div><div><a  href="http://userweb.alles.or.jp/chunichidenko/mycpu231.html" target="_blank"><strike>標準TTL</strike>だけ（！）でCPUを作ろう！[第231回]</a> <a  name="pagetop"><br /></a><div><a  name="pagetop"></a></div><br /></div><br /><div>　ではデータを採取して比較を行う。コードは<a  target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/9308013.html">前回</a>を参照。テスト結果は1バイトの十進数で</div><br /><div>数値A　数値B　A+Bの結果　加算後フラグ　DAA補正後の結果　補正後フラグ</div><br /><div>このデータが256×256パターンで65536行。このデータを適当なunix環境に持っていってawkで処理。Excelでもなんでもいいです。</div><br /><div>　まずは16進に変換。数値Aと数値Bは連結してインデックスとして使えるようにする。フラグは2進数表示。こんな感じになる。</div><br /><div>0000 00 01000110 00 01000110</div><div>0001 01 00000010 01 00000010</div><div>0002 02 00000010 02 00000010</div><div>0003 03 00000110 03 00000110</div><div>...</div><br /><div>あとは任意のフィールドを切り出して比較していくだけ。</div><br /><div>対象となるCPUは以下：</div><div>(1) INTEL MD8080 A/B　インテル純正の安心感。すべての比較元とします</div><div><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/1/c/1ccf74b1.jpg" alt="2019-MD8080" class="pict" width="200" hspace="5" height="150" border="0"><br /><br /></div><div>(2) CCCP KP580BM80 (USSR KR580VM80)　ソ連製8080クローン</div><div><div><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/9/1/915eef0e.jpg" alt="2019-USSR1" class="pict" width="200" hspace="5" height="150" border="0"><br /><br /></div><div>(3) CCCP KP580BM80A (USSR KR580VM80A)　ソ連製8080Aクローン</div><div><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/9/9/99c1edb2.jpg" alt="2019-USSR2" class="pict" width="200" hspace="5" height="150" border="0"><br /><br /></div><div>(4) NEC μPD8080A　今回の主な調査対象<br /></div></div><div><div><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/a/c/acc2bbfa.jpg" alt="2019-D8080A" class="pict" width="200" hspace="5" height="150" border="0"><br /><br /></div><div>(5) NEC μPD8080A-T　-Tサフィックスはなんだろう？</div><div><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/c/b/cbd07563.jpg" alt="2019-D8080AT" class="pict" width="200" hspace="5" height="150" border="0"><br /><br /></div><div>(6) NEC μPD8080AFC　Intel 8080A完全互換にしたもの</div><div><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/7/8/78b64d2d.jpg" alt="2019-D8080AFC" class="pict" width="200" hspace="5" height="150" border="0"><br /><br /></div></div><div>テスト結果：(HフラグはACフラグと読み替えて)</div><div>a. 加減算後のDAAについて<br /></div><div>(1) (2) (3) (6) はまったく同じ。DAA動作は完全互換</div><div>(4) (5) はまったく同じ。NEC μPD8080AとμPD8080A-Tは同じもの</div><br /><div>b.加算後のDAAについて(1)と(4)を比較</div><div>・演算結果の数値は一致</div><div>・フラグが異なる</div><div>・NEC μPD8080Aは未定義フラグbit3が常に"1"。INTEL 8080Aは常に"0"</div><div>・NEC μPD8080AはDAA命令の前後でHフラグの状態は変わらない</div><div>・INTEL 8080AのDAA命令前後でのHフラグの動作：</div><div>　DAA前にHフラグが立っているとDAA後にHフラグは落ちる</div><div><div>　DAA前にHフラグが落ちているとDAA後に補正前の演算結果の下1桁がA~Fだった場合に立つ</div><br />　DAA補正後のHフラグに関しては定義されていないのでこれらは未定義動作として済ませるんですが、続きがあります。</div><br /><div>　<a  href="http://www.classiccmp.org/cini/pdf/DrDobbs/DrDobbs-1976-11-12-v1n10.pdf" target="_blank">Dr.Dobb's Journal 1976/11/12</a> によると"IMSAI INCOMPATIBILITY"というのでNEC製8080Aの挙動についてメーカーに質問が出ている。本来 XRA Aの後にDAAはやらないんだけどやってみたら結果が0のはずが6になっている。これって十進補正をやっているように見えますね。</div><br /><div>確認コードはこちら：<br /></div><div><a  href="https://gist.github.com/houmei/4c5bd7b255daa5ac65a6cf693e1e4d7a" target="_blank">https://gist.github.com/houmei/4c5bd7b255daa5ac65a6cf693e1e4d7a</a><br /></div><br /><div>　ここでIntelのユーザーズマニュアルでXRA命令を確認してみる。<br /></div><div><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/6/6/661203b4.jpg" alt="スクリーンショット 2019-01-13 21.29.56" class="pict" width="442" hspace="5" height="272" border="0"><br /></div><br /><div>　XRA命令実行後にAC(ハーフキャリー)はクリアされると書いてあるが、NEC μPD8080Aではクリアされずにセットされたままになっている。この部分は未定義ではないのでIntel 8080とNEC 8080Aの非互換部分と言える。これはXRA命令の実装でACフラグを操作するパスがなさそうに見える。さらに想像するとNEC 8080AではANA以外の論理演算命令ではACフラグは変化しないのかもしれない。</div><br /><div><div>※追記　XRAをANA/ORA命令に替えて実験<br /></div><div>ANA命令　Intel 8080でACフラグクリア　仕様書の誤記？</div><div>ORA命令　Intel 8080でACフラグクリア</div><div>NEC 8080AではANA/ORAともACはクリアされずそのまま<br /></div><br /></div><br /><div>　SUB後のDAA命令編に続く</div><br /><br />
<div  class="amakuri-default" style="text-align: left; line-height: 1.5em; margin-bottom: 10px; overflow:hidden; _zoom:1;"><div  class="amakuri-default-image" style="float: left; margin: 0 20px 0 0;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/B0033QEUFY/keisanki-22" target="_blank"><img  src="https://images-fe.ssl-images-amazon.com/images/I/51eJ9YoMnFL._SL160_.jpg" alt="Ex: El" style="border: none" width="160" height="160"></a></div><div  class="amakuri-default-desc" style="overflow: hidden; _zoom:1;"><div  class="amakuri-default-title" style="margin-bottom: 0.5em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/B0033QEUFY/keisanki-22" target="_blank">Ex: El</a></div><div  class="amakuri-default-posted" style="margin-bottom: 0.5em; font-size: small;">Posted with <a  href="https://dadadadone.com/amakuri/" target="_blank">Amakuri</a> at 2019.1.13</div><div  class="amakuri-default-author">808 State</div><div  class="amakuri-default-label" style="margin-bottom: 0.5em;">Salvo</div><div  class="amakuri-default-link" style="margin-top: 1em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/B0033QEUFY/keisanki-22" target="_blank">Amazonで詳細を見る</a></div></div></div><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9308013.html">
<title>SBC8080システムROMでBASICから機械語を呼び出す</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9308013.html</link>
<description>　SBC8080ルーズキット用のSBC8080システムROMは電脳伝説(@vintagechips)さんの手によりPALO ALTO BASICに独自の機械語モニタを拡張してあり一行アセンブラが使えて大変便利。MONでモニタにはいりSYSTEMでBASICプロンプトに戻る。EXEC 番地で番地+8000Hに飛んでRET命令でプロ...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2019-01-13T01:00:59+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　<a  href="https://www.switch-science.com/catalog/3897/" target="_blank">SBC8080ルーズキット</a>用の<a  href="https://www.switch-science.com/catalog/3899/" target="_blank">SBC8080システムROM</a>は電脳伝説(@vintagechips)さんの手によりPALO ALTO BASICに独自の機械語モニタを拡張してあり一行アセンブラが使えて大変便利。MONでモニタにはいりSYSTEMでBASICプロンプトに戻る。EXEC 番地で番地+8000Hに飛んでRET命令でプログラムに戻ってこれるのだけれどもPEEK/POKEがないのでパラメータのやりとりがそのままではできない。</div><br /><div>　そこでSBC8080技術資料の記述からPALO ALTO BASICの資料をたどって調べてみた。<br /></div><div><a  href="https://vintagechips.wordpress.com/2018/06/22/sbc8080%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0rom/" target="_blank">SBC8080システムROM</a>(電脳伝説)<br /></div><div><a  href="http://www.ballyalley.com/ml/ml_source/ml_source.html" target="_blank">Astrocade Machine Language Source Code</a>　Palo Alto Tiny BASIC, Version 3　よりPDFを取得</div><br /><div>　TINY BASICなので変数名はA〜Zのみ、@は配列。BASIC変数/バッファ領域はSBC8080システムROMの場合F000HからF087Hまで。適当に変数Aに代入してMONで覗いてみると値が変化しているところがある。調べた結果、</div><div>F002H 変数A</div><div>F004H 変数B</div><div>F006H 変数C</div><div><div>F008H 変数D</div><div>F00AH 変数E</div><div>F00CH 変数F</div>...</div><div>となっていた。数値は2バイトでリトルエンディアン。ということはここを機械語とのパラメータ受け渡しに使える。</div><br /><div>実際に作ってみた例はこちら：TeraTermに送信するときは設定(S)→シリアルポート(E)... で送信遅延を10ミリ秒/字 100ミリ秒/行にするのを忘れずに。<br /></div><div><a  href="https://gist.github.com/houmei/9fa95dba37a0204d4b1bd6e4c87f623a" target="_blank">https://gist.github.com/houmei/9fa95dba37a0204d4b1bd6e4c87f623a</a></div><br /><div>　これは十進補正命令DAAの動作を確認するテスト。変数Aと変数Bの値を加算し結果を変数C、フラグを変数Dに格納。その後DAA命令を実行し、結果を変数E、フラグを変数Fに格納する。いずれも下位1バイトしか使わない。8080アセンブラで初めて書いたのでみてみて。</div><div><pre> 8000 LXI       D,F002　変数AへのポインタDE
 8003 LXI       H,F004　変数BへのポインタHL
 8006 LXI       B,0000　BC←0　これはAFのクリア用
 8009 PUSH      B
 800A POP       PSW　AFクリア
 800B LDAX      D　Accに変数Aの内容をコピー
 800C ADD       M　Acc ← Acc + 変数B
 800D PUSH      PSW　いったん結果を保存
 800E DAA　　　　　　十進補正
 800F PUSH      PSW
 8010 POP       B　AFのペアをBCにコピー
 8011 MOV       A,B
 8012 STA       F00A　変数Eに十進補正後の結果を返す
 8015 MOV       A,C
 8016 STA       F00C　変数Fに十進補正後のフラグを返す
 8019 POP       B
 801A MOV       A,B　変数Cに補正前の結果を返す
 801B STA       F006
 801E MOV       A,C
 801F STA       F008　変数Dに補正前のフラグを返す
 8022 RET</pre>&nbsp;　これをBASIC側から変数Aと変数Bを0〜255の範囲で変化させてEXEC 0で呼び出し、結果を含めて画面出力するだけ。文字出力はBASIC内のサブルーチンを呼び出せばできそうだったが手を抜いてBASIC側でやった。ループも同様。どのみち9600bpsの端末への出力なのでいくら高速化してもそこで律速となる。</div><br /><div>　なんでこれを作ったかというとIntel純正8080に対してNEC 8080Aは独自改良でDAA命令を修正したが、非互換ということでNEC 8080AFでIntelとまったく同じ動作に戻したという話があったので調べてみようと思ったからだ。次回お楽しみに。</div><br /><br /><div>
<br />
<br />
<div  style="text-align: left; line-height: 1.5em; margin-bottom: 10px; overflow:hidden; _zoom:1;" class="amakuri-default"><div  style="float: left; margin: 0 20px 0 0;" class="amakuri-default-image"><a  target="_blank" href="https://www.amazon.co.jp/exec/obidos/ASIN/4756134017/keisanki-22"><img  style="border: none" alt="復活!TK‐80" src="https://images-fe.ssl-images-amazon.com/images/I/61otCkbONrL._SL160_.jpg" width="160" height="113"></a></div><div  style="overflow: hidden; _zoom:1;" class="amakuri-default-desc"><div  style="margin-bottom: 0.5em;" class="amakuri-default-title"><a  target="_blank" href="https://www.amazon.co.jp/exec/obidos/ASIN/4756134017/keisanki-22">復活!TK‐80</a></div><div  style="margin-bottom: 0.5em; font-size: small;" class="amakuri-default-posted">Posted with <a  target="_blank" href="https://dadadadone.com/amakuri/">Amakuri</a> at 2019.1.13</div><div  class="amakuri-default-author">榊 正憲</div><div  style="margin-bottom: 0.5em;" class="amakuri-default-label">アスキー</div><div  style="margin-top: 1em;" class="amakuri-default-link"><a  target="_blank" href="https://www.amazon.co.jp/exec/obidos/ASIN/4756134017/keisanki-22">Amazonで詳細を見る</a></div></div></div>

</div>]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9306807.html">
<title>ソ連のCPU KP580BM80Aの動作確認(2)</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9306807.html</link>
<description>　前回の続き。　さて、KP580BM80Aの動作が怪しいので確認用にebayでもう1個購入。2週間程度で届いた。　マークが{S}みたいなのは製造元(工場？)が異なるため。　で、問題なく動作。ということはKP580BM80Aは個別故障ということになる。　PALO ALTO BASICで5.09V/0.51A、BASI...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2019-01-10T05:04:03+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　<a  target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/9303826.html">前回</a>の続き。<br /></div><br /><div>　さて、KP580BM80Aの動作が怪しいので確認用にebayでもう1個購入。2週間程度で届いた。</div><br /><div>　マークが{S}みたいなのは製造元(工場？)が異なるため。</div><div><a  target="_blank" title="2019KP580-1" href="http://livedoor.blogimg.jp/hardyboy/imgs/4/f/4fce316e.jpg"><img  class="pict" alt="2019KP580-1" src="http://livedoor.blogimg.jp/hardyboy/imgs/4/f/4fce316e-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div>　で、問題なく動作。ということはKP580BM80Aは個別故障ということになる。</div><div><a  target="_blank" title="2019KP580-2" href="http://livedoor.blogimg.jp/hardyboy/imgs/8/e/8e4fd951.jpg"><img  class="pict" alt="2019KP580-2" src="http://livedoor.blogimg.jp/hardyboy/imgs/8/e/8e4fd951-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div>　PALO ALTO BASICで5.09V/0.51A、BASICでA=A+1しながら数字を表示するループ実行で0.53A。電圧高めなのはスマホ用のUSB電源アダプタを適当に使ったせい。<br /></div><br /><div>　これでおしまい、でも良かったのだけれどももうちょっとだけ調査。<br /></div><br /><div>　割り込みの観測のため8080のINTE(pin16)にLEDを追加。電流制限抵抗は大きめ(8.2kΩ)にしたので駆動力ヨワヨワの8080でも問題ないでしょう。<br /></div><div><a  target="_blank" title="2019KP580-3" href="http://livedoor.blogimg.jp/hardyboy/imgs/4/b/4b8acf5f.jpg"><img  class="pict" alt="2019KP580-3" src="http://livedoor.blogimg.jp/hardyboy/imgs/4/b/4b8acf5f-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><br /><div>　INTEは故障と思われるKP580BM80Aでもリセット後は点灯。ただし端末側のキーを押してINTを発生させるとLEDで消え、画面に連続した文字は出なくなる。つまりPALO ALTO BASICのROMで割り込みを受けるまでは画面に連続して文字が出ているので、CPUはなにかしらの命令を実行しているのだが、どこかで暴走しループしているように見える。</div><a  target="_blank" title="2019KP580-4" href="http://livedoor.blogimg.jp/hardyboy/imgs/e/b/eba4e65f.jpg"><img  class="pict" alt="2019KP580-4" src="http://livedoor.blogimg.jp/hardyboy/imgs/e/b/eba4e65f-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /><br /><div>　故障箇所は前回の調査でわかった「INT信号で割り込みが発生し割り込みがマスクされるが38Hには飛んでいない」以外にもあり特定の命令の実行またはジャンプ先が変わるような動作でおかしくなっているようだ。少なくとも00HのNOP連続による動作はできた。</div><br /><div>　横井与次郎著　マイクロコンピュータ・ハードウェア基礎技術　のp.156にある3.1.3 8080Aの絶対最大定格によると-5V側の電流は1μA〜1mAとあるが、ここの電圧が0Vだと+5V/+12Vの電流が非常に大きくなるので長時間-5Vを与えない状態で使うのはしてはいけないと書いてある。ということは何らかの原因で-5Vが印加されなくなったら動くことは動くけれども発熱で8080が故障するのであろうか。</div><br /><div>　まあ良品を壊してまで調べようとは思わないので故障調査はこれでおしまい。ということでソ連製の8080クローンでもSBC8080は動作します。</div><br /><br /><div  class="amakuri-default" style="text-align: left; line-height: 1.5em; margin-bottom: 10px; overflow:hidden; _zoom:1;"><div  class="amakuri-default-image" style="float: left; margin: 0 20px 0 0;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/B000J7VKF8/keisanki-22" target="_blank"><img  src="https://images-fe.ssl-images-amazon.com/images/I/61HvEWqQZVL._SL160_.jpg" alt="マイクロコンピュータ・ハードウエア基礎技術―M6800系,8080系,Z-80系 (1981年)" style="border: none" width="119" height="160"></a></div><div  class="amakuri-default-desc" style="overflow: hidden; _zoom:1;"><div  class="amakuri-default-title" style="margin-bottom: 0.5em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/B000J7VKF8/keisanki-22" target="_blank">マイクロコンピュータ・ハードウエア基礎技術―M6800系,8080系,Z-80系 (1981年)</a></div><div  class="amakuri-default-posted" style="margin-bottom: 0.5em; font-size: small;">Posted with <a  href="https://dadadadone.com/amakuri/" target="_blank">Amakuri</a> at 2019.1.10</div><div  class="amakuri-default-author">横井 与次郎</div><div  class="amakuri-default-label" style="margin-bottom: 0.5em;">ラジオ技術社</div><div  class="amakuri-default-link" style="margin-top: 1em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/B000J7VKF8/keisanki-22" target="_blank">Amazonで詳細を見る</a></div></div></div><br /><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9303826.html">
<title>ソ連のCPU KP580BM80Aの動作確認(1)</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9303826.html</link>
<description>　SBC8080ボードができたので手持ちのコレクションについて動作確認。　まずはソ連製の8080クローン、580GF24(8224)/580BK38(8238)/580BM80(8080)。SBC8080+SUBボードで 5.03V 0.31A。PALO ALTO BASIC動作した。　では、CPUを8080AクローンのKP580BM80Aに交換してみる。　す...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2019-01-02T04:01:22+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　<a  href="http://blog.livedoor.jp/hardyboy/archives/9303434.html" target="_blank">SBC8080ボード</a>ができたので手持ちのコレクションについて動作確認。</div><br /><div>　まずはソ連製の8080クローン、580GF24(8224)/580BK38(8238)/580BM80(8080)。</div><div>SBC8080+SUBボードで 5.03V 0.31A。PALO ALTO BASIC動作した。<br /></div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/9/d/9d054895.jpg" title="2019SBC8080-1" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/9/d/9d054895-s.jpg" alt="2019SBC8080-1" class="pict" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div>　では、CPUを8080AクローンのKP580BM80Aに交換してみる。</div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/c/c/ccb07cd0.jpg" title="2019SBC8080-2" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/c/c/ccb07cd0-s.jpg" alt="2019SBC8080-2" class="pict" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><div>　すると、このような表示に。最初はカタカナが連続して表示される(途中で繰り返すように見えるのはリセットを１回かけたため)。<br /></div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/d/9/d9db13b7.jpg" title="2019SBC8080-3" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/d/9/d9db13b7-s.jpg" alt="2019SBC8080-3" class="pict" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><div>　これはどういうことだろう。SBC8080ボードではCPUの周りのアドレスバスはHC541×2、データバスと制御信号は8238(8228)でガードされている。ということでまずはアドレスバスを疑いHC541→LS541に交換してみたが現象変わらず。次にデータバスと制御信号について、NEC uPB8228C /  NEC uPB8224Cに交換してみたがこれも現象変わらず。</div><div>　<a  href="http://blog.livedoor.jp/hardyboy/archives/9303450.html" target="_blank">SBC8080ボード用フリーランテストボード</a>で確認してみたが00H(NOP)によるフリーランはできている。</div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/d/6/d61db57f.jpg" title="2018SBCLED-3" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/d/6/d61db57f-s.jpg" alt="2018SBCLED-3" class="pict" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div>　さて、どうしようか。の前にソ連製の8080クローンについて。</div><br /><div><a  href="http://www.cpu-world.com/CPUs/8080/MANUF-USSR.html" target="_blank">USSR 8080 microprocessor family</a>(CPU-World) によると、3種類の8080/8080Aクローンが存在する。</div><div>・580VM80　8080のクローン<br /></div><div>・KR580IK80A　8080Aのクローン</div><div>・KR580VM80A　8080Aのクローン、2.5MHz動作</div><div>独自に作られたものもあるようだ。ソ連はずっと8080互換でやってたんだろうか。<br /></div><div>・KR580BM1 5V単一電源、5MHz動作、ピン非互換<br /></div><br /><div>なおKR580VM80Aはアルファベット表記で、本来は КР580ВМ80А とキリル文字で表記するらしい。キリル文字の方で検索するとロシア語のドキュメントに当たりやすい。</div><div><a  href="https://en.wikipedia.org/wiki/KR580VM80A" target="_blank">https://en.wikipedia.org/wiki/KR580VM80A</a></div><div><a  href="https://ru.wikipedia.org/wiki/КР580ВМ80А" target="_blank">https://ru.wikipedia.org/wiki/КР580ВМ80А</a></div><br /><div>　580BM80Aについてはビデオゲームの修理にそのまま交換部品として使われていたりリバースエンジニアリングでVerilogソースまで調べられているので、論理的には同一のはず。<br /></div><div><a  target="_blank" href="http://www.wolfgangrobel.de/arcadereps5/invasion.htm">Sidam Invasion</a><br /></div><div><a  target="_blank" href="https://zeptobars.com/en/read/KR580VM80A-intel-i8080-verilog-reverse-engineering">Reverse-engineering of KR580VM80A / i8080 is complete!</a></div><br /><div>　PALO ALTO BASICでは調査も難しいのでもっと簡単なテストプログラムで確認してみる。<a  target="_blank" href="https://vintagechips.wordpress.com/2018/06/24/sbc8080-cpu%E3%83%AB%E3%83%BC%E3%82%BA%E3%82%AD%E3%83%83%E3%83%88/">SBC8080 CPUルーズキット</a>で提供されているSBC8080データパックにある、TEST80というプログラムを使用する。これは8251を使ったエコーバックテスト。で、TEST80.HEXをROMに焼いて電源をいれると580BM80Aではプロンプト"&gt;"は出るがエコーバックせず。キーを押しても応答なし。いきなり当たりか？念のためSBC8080SUBボードの82C51を8251に変えてみたが現象変わらず。まあ文字の送信ができているということは8251の初期化はできているっぽい。</div><br /><div>　端末からデータを受信すると8251はRXRDY信号を上げる。これは8080のINT入力に接続され、RST7割り込みが発生する。TEST80プログラムは割り込み発生後、38H番地からのコードで8251から1文字読んでメモリ上のバッファに書き込み、割り込みを再度許可する。TEST80プログラムはメインルーチンではバッファに何か文字があるとそれを送信し、バッファを空にする。<br /></div><br /><div>　ということで割り込みの状態を監視してみる。8080のINTE(pin16)を観測。以前作った<a  target="_blank" href="http://blog.livedoor.jp/hardyboy/archives/8412597.html">ロジックチェッカー</a>を使用した。で、NEC 8080Aでの結果はINTEは一瞬LになるがすぐHにもどる。つまり割り込みを受け付けられる状態になる。580BM80Aはリセット直後はINTEはHだが、キー入力があるとLになりそのまま。これ以降は割り込みを受け付けない。</div><div><a  target="_blank" title="2019SBC8080-4" href="http://livedoor.blogimg.jp/hardyboy/imgs/f/6/f6a5d10d.jpg"><img  class="pict" alt="2019SBC8080-4" src="http://livedoor.blogimg.jp/hardyboy/imgs/f/6/f6a5d10d-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><br /><div>　ここからはTEST80にパッチを当てながら確認していく。最初は38HにEI命令を入れてすぐに割り込みを許可するようにした。NEC 8080Aでは連続して割り込みが発生。これは8251の割り込み要因を落としていないので期待通りの動作。580BM80AではINTE信号がH→Lとなりそのまま。</div><br /><div>　8080は割り込みが発生するといったんINTEをLにする。割り込み処理のプログラムで割り込み要因を落とした後、最後で割り込みを許可する。なので割り込み自体は受け付けている。あとは本当に38H番地に飛んでいるかどうかだ。</div><div>　さてそれをどう確認するかだが、SBC8080SUBボードにちょっとLEDを追加した。8251のTXRDY端子にLEDカソード側を接続、アノード側をVccへ。これで送信バッファがフル(=1文字送信中)の時に光るはず。</div><div><a  target="_blank" title="2019SBC8080-5" href="http://livedoor.blogimg.jp/hardyboy/imgs/7/0/701733e6.jpg"><img  class="pict" alt="2019SBC8080-5" src="http://livedoor.blogimg.jp/hardyboy/imgs/7/0/701733e6-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><div>　パッチは38H番地にOUT C0Hを書き込む。これはAccにあるダミーデータを1文字送信する。580BM80Aでは一瞬も出なかった。念のためロジックチェッカーで監視しても同じ。つまり38H番地には飛んでいないということになる。</div><br /><div>　以上から手持ちのKP580BM80Aは</div><div>・INT割り込みで割り込みをdisableするが38H番地へは分岐していない。</div><div>・別の番地へ飛んでいるのかHALTしているのかはバスの観測が必要。<br /></div><div>・CPUの差し替え事例から個別故障の可能性がある。</div><br /><br /><div>ということで別に手配したKP580BM80Aを使って確認する予定。</div><br /><br /><div  class="amakuri-default" style="text-align: left; line-height: 1.5em; margin-bottom: 10px; overflow:hidden; _zoom:1;"><div  class="amakuri-default-image" style="float: left; margin: 0 20px 0 0;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/4899774532/keisanki-22" target="_blank"><img  src="https://images-fe.ssl-images-amazon.com/images/I/51MKPAdtkCL._SL160_.jpg" alt="インテル8080伝説" style="border: none" width="113" height="160"></a></div><div  class="amakuri-default-desc" style="overflow: hidden; _zoom:1;"><div  class="amakuri-default-title" style="margin-bottom: 0.5em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/4899774532/keisanki-22" target="_blank">インテル8080伝説</a></div><div  class="amakuri-default-posted" style="margin-bottom: 0.5em; font-size: small;">Posted with <a  href="https://dadadadone.com/amakuri/" target="_blank">Amakuri</a> at 2019.1.2</div><div  class="amakuri-default-author">鈴木哲哉</div><div  class="amakuri-default-label" style="margin-bottom: 0.5em;">ラトルズ</div><div  class="amakuri-default-link" style="margin-top: 1em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/4899774532/keisanki-22" target="_blank">Amazonで詳細を見る</a></div></div></div><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9303450.html">
<title>SBC8080ボード用フリーランテストボード</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9303450.html</link>
<description>　手持ちのコレクションCPUが生きているかどうか気になる。Z80についてずっとデータ00Hをフェッチさせてアドレスバスを観測する手法があるが、SBC8080ボードでもいけるはずなので40ピンのバスに接続するアダプタを作った。Z80でマイコンをつくる (3)Z80 CPU動作確認(Lチカ)(K...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2018-12-31T23:28:10+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　手持ちのコレクションCPUが生きているかどうか気になる。Z80についてずっとデータ00Hをフェッチさせてアドレスバスを観測する手法があるが、SBC8080ボードでもいけるはずなので40ピンのバスに接続するアダプタを作った。</div><br /><div><a  href="https://kuninet.wordpress.com/2018/05/15/z80%e3%81%a7%e3%83%9e%e3%82%a4%e3%82%b3%e3%83%b3%e3%82%92%e3%81%a4%e3%81%8f%e3%82%8b-3z80-cpu%e5%8b%95%e4%bd%9c%e7%a2%ba%e8%aa%8dl%e3%83%81%e3%82%ab/" target="_blank">Z80でマイコンをつくる (3)Z80 CPU動作確認(Lチカ)</a>(Kuninet Blog)<br /></div><div><a  href="http://www.yamamo10.jp/yamamoto/comp/Z80/FlashingLEDs/index.php" target="_blank">8ビット CPU Z80LED点滅</a>(Yamamoto's Laboratory)</div><br /><div>データバスを10kΩ×8の集合抵抗でプルダウン、A15〜A0をLEDのアノード、*MEMWR、*MEMRDをLEDのカソードに接続、電流制限抵抗は大きめ(〜10kΩ程度)、これでも充分明るい。LEDはバータイプ10個のものを2つ使うとA15-A0、*MEMRD、*MEMWR、*IORD、*IOWRでちょうどよい。</div><br /><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/0/f/0f988ce3.jpg" title="2018SBCLED-1" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/0/f/0f988ce3-s.jpg" alt="2018SBCLED-1" class="pict" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/3/6/362c4350.jpg" title="2018SBCLED-2" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/3/6/362c4350-s.jpg" alt="2018SBCLED-2" class="pict" width="480" hspace="5" height="360" border="0"></a><br /></div><br /><div>　左端のA15,A14あたりが点滅して見える。〜A0まで点灯して見えるが実際は高速に点滅している。<br /></div><div><a  href="http://livedoor.blogimg.jp/hardyboy/imgs/d/6/d61db57f.jpg" title="2018SBCLED-3" target="_blank"><img  src="http://livedoor.blogimg.jp/hardyboy/imgs/d/6/d61db57f-s.jpg" alt="2018SBCLED-3" class="pict" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><div>　フリーラン用のデータバスプルダウンを外せばバス観測に使えるはずなので作り直すかな。その時はピカピカ光るのでSBCゲーミングボードとしよう。</div><br /><br />
<div  style="text-align: left; line-height: 1.5em; margin-bottom: 10px; overflow:hidden; _zoom:1;" class="amakuri-default"><div  style="float: left; margin: 0 20px 0 0;" class="amakuri-default-image"><a  target="_blank" href="https://www.amazon.co.jp/exec/obidos/ASIN/B07J43JJR1/keisanki-22"><img  style="border: none" alt="ゲーミングキーボード AULA キーボード 青軸 7色LEDバックライト 有線キーボード ゲームキーボード 104キー Windows/Mac OS対応 自由ノ翼【日本語配列】" src="https://images-fe.ssl-images-amazon.com/images/I/41nbBi%2B6Z7L._SL160_.jpg" width="160" height="160"></a></div><div  style="overflow: hidden; _zoom:1;" class="amakuri-default-desc"><div  style="margin-bottom: 0.5em;" class="amakuri-default-title"><a  target="_blank" href="https://www.amazon.co.jp/exec/obidos/ASIN/B07J43JJR1/keisanki-22">ゲーミングキーボード AULA キーボード 青軸 7色LEDバックライト 有線キーボード ゲームキーボード 104キー Windows/Mac OS対応 自由ノ翼【日本語配列】</a></div><div  style="margin-bottom: 0.5em; font-size: small;" class="amakuri-default-posted">Posted with <a  target="_blank" href="https://dadadadone.com/amakuri/">Amakuri</a> at 2018.12.31</div><div  style="margin-bottom: 0.5em;" class="amakuri-default-label">AULA</div><div  style="margin-top: 1em;" class="amakuri-default-link"><a  target="_blank" href="https://www.amazon.co.jp/exec/obidos/ASIN/B07J43JJR1/keisanki-22">Amazonで詳細を見る</a></div></div></div><br />]]>
</content:encoded>
</item>
<item rdf:about="http://blog.livedoor.jp/hardyboy/archives/9303434.html">
<title>SBC8080ボード</title>
<link>http://blog.livedoor.jp/hardyboy/archives/9303434.html</link>
<description>　記事を書いてたつもりが抜けていたのでメモとして。SBC8080ルーズキット(電脳伝説)SBC8080 SUBルーズキット(電脳伝説)　8080Aは周辺チップが必要なことと+12V/-5Vの回路のせいでSBCシリーズとしては部品密度高めです。確実な組み立て方としては(1) NJM2360A周辺を実装し、5...</description>
<dc:creator>hardyboy</dc:creator>
<dc:date>2018-12-31T22:22:28+09:00</dc:date>
<dc:subject>8080</dc:subject>
<content:encoded><![CDATA[<div>　記事を書いてたつもりが抜けていたのでメモとして。</div><br /><div><a  target="_blank" href="https://vintagechips.wordpress.com/2018/06/24/sbc8080-cpu%E3%83%AB%E3%83%BC%E3%82%BA%E3%82%AD%E3%83%83%E3%83%88/">SBC8080ルーズキット</a>(電脳伝説)</div><div><a  target="_blank" href="https://vintagechips.wordpress.com/2018/06/23/sbc8080-sub%E3%83%AB%E3%83%BC%E3%82%BA%E3%82%AD%E3%83%83%E3%83%88/">SBC8080 SUBルーズキット</a>(電脳伝説)</div><br /><div>　8080Aは周辺チップが必要なことと+12V/-5Vの回路のせいでSBCシリーズとしては部品密度高めです。確実な組み立て方としては</div><br /><div>(1) NJM2360A周辺を実装し、5V供給で+12Vが生成されることを確認</div><div><a  target="_blank" title="2018SBC8080-1" href="http://livedoor.blogimg.jp/hardyboy/imgs/a/4/a4cf269e.jpg"><img  class="pict" alt="2018SBC8080-1" src="http://livedoor.blogimg.jp/hardyboy/imgs/a/4/a4cf269e-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><div>(2) 8224周辺と-5V生成回路を実装し、-5Vが生成されることを確認</div><div><a  target="_blank" title="2018SBC8080-2" href="http://livedoor.blogimg.jp/hardyboy/imgs/8/e/8e0bb0ad.jpg"><img  class="pict" alt="2018SBC8080-2" src="http://livedoor.blogimg.jp/hardyboy/imgs/8/e/8e0bb0ad-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><br /><div>(3)残りの部品を実装</div><div><a  target="_blank" title="2018SBC8080-3" href="http://livedoor.blogimg.jp/hardyboy/imgs/7/2/72e9ff33.jpg"><img  class="pict" alt="2018SBC8080-3" src="http://livedoor.blogimg.jp/hardyboy/imgs/7/2/72e9ff33-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><br /><div>の順でやればよいでしょう。</div><br /><div>　ROM/RAM/UARTについては秋月B基板サイズに収まらないためSBC8080SUBボードに実装されます。作例では40Pフラットケーブルで接続されていますが、私はピンヘッダとピンソケットで重ねられるようにしました。このうちピンヘッダはSBC8080SUBボード側の部品面に、ROMなどソケット部品が干渉しないよう背の高い連結ピンヘッダを半分にカットして使用、SBC8080ボード側ははんだ面にピンソケットを実装。</div><div><a  target="_blank" href="http://akizukidenshi.com/catalog/g/gC-02962/">連結ピンヘッダ　２×４０　（８０Ｐ）　６／９／３</a>(秋月電子)</div><br /><div>ボードの間隔は17mmになります。この高さのスペーサがなかなか見つからないのですが、使用すると接続後しっかり固定できます。</div><div><a  target="_blank" title="2018SBC8080-4" href="http://livedoor.blogimg.jp/hardyboy/imgs/f/1/f1b5528c.jpg"><img  class="pict" alt="2018SBC8080-4" src="http://livedoor.blogimg.jp/hardyboy/imgs/f/1/f1b5528c-s.jpg" width="480" hspace="5" height="360" border="0"></a><br /><br /></div><div>　動作確認は<a  target="_blank" href="https://www.switch-science.com/catalog/3899/">SBC8080システムROM</a>で行った。以下は手持ちの石の組み合わせ。</div><br /><div>NEC uPB8224C / NEC uPB8228C / NEC D8080A</div><br /><br /><div>次回予告：寒い国から来たCPU<br /></div><br /><br />
<div  class="amakuri-default" style="text-align: left; line-height: 1.5em; margin-bottom: 10px; overflow:hidden; _zoom:1;"><div  class="amakuri-default-image" style="float: left; margin: 0 20px 0 0;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/4899774532/keisanki-22" target="_blank"><img  src="https://images-fe.ssl-images-amazon.com/images/I/51MKPAdtkCL._SL160_.jpg" alt="インテル8080伝説" style="border: none" width="113" height="160"></a></div><div  class="amakuri-default-desc" style="overflow: hidden; _zoom:1;"><div  class="amakuri-default-title" style="margin-bottom: 0.5em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/4899774532/keisanki-22" target="_blank">インテル8080伝説</a></div><div  class="amakuri-default-posted" style="margin-bottom: 0.5em; font-size: small;">Posted with <a  href="https://dadadadone.com/amakuri/" target="_blank">Amakuri</a> at 2018.12.31</div><div  class="amakuri-default-author">鈴木哲哉</div><div  class="amakuri-default-label" style="margin-bottom: 0.5em;">ラトルズ</div><div  class="amakuri-default-link" style="margin-top: 1em;"><a  href="https://www.amazon.co.jp/exec/obidos/ASIN/4899774532/keisanki-22" target="_blank">Amazonで詳細を見る</a></div></div></div>
<br /><br /><br />]]>
</content:encoded>
</item>

</rdf:RDF>
