まごころせいじつ堂

浜町庄金 研究開発 最近はArduinoとセンサ類ばっかだなあ。マイコン楽しいよマイコン

PET2001とPET2001Nの違いについて

 今日はですね、初代のPET2001と改良型のPET2001Nの違いについて調べてみました。

 初代のPET2001は自社製の同期式ROM/RAMを使用、RAMは後に2114(1Kx4bit)。PET2001Nのコードネームは回路図から見るとDYNAMIC PETでDRAM 4116(16Kx1bit)を使用しています。他にもCGROM周りの素子は異なりますが今回ソフトウェアから見えないハードについては取り上げません。

 PET2001/PET2001NのVRAMは2114(1Kx4bit)が2個で40x25=1000文字を扱っています。VRAMの先頭番地は$8000ですが、$8400~,$8800~,$8C00~と1Kバイトごとにイメージがあります。

 ところでイメージってご存知ですか?アドレスデコードのサボりによりアドレス空間の別の領域に同じメモリが見えてしまう現象のことですね。この場合はアドレスの[15:12]まではきちんとデコードしていますが[11:10]は無視しているということですね。

 さて、次のプログラムをPET2001Nで動かします。これはVRAM領域に直接値を書き込んで全キャラクタを表示させます。

10 V=32768
20 FOR I=0 TO 999
30 POKE V+I,T
40 T=T+1
50 IF T>255 THEN T=0
60 NEXT I

 ここで10行目を

10 V=32768+1024

に書き換えます。これも全く同じ表示をします。では次はどうでしょうか?

10 V=32768+1024+1024

何も表示されませんね。

10 V=32768+1024+1024+1024

も同様に何も表示されません。どうやらPET2001のマニュアル記述と違い$8800~、$8C00~はイメージではないようです。

 では、回路図を見てみましょう。

スクリーンショット 2019-04-08 20.44.58

 PET2001/PET2001NのROMは、$9000-$BFFFの12Kバイトがユーザ用領域、$C000~$FFFFの16KバイトのうちI/O領域である$E800-$EFFFの2Kバイトを除いた14KバイトがシステムROM領域となります。上記回路はI/O領域である$E800~$EFFFの2Kバイトをジャンパ設定により$8800~$8FFFに移し替えるものです。
 おそらく、PET2001Nからは$9000〜$FFFFの連続した28Kバイトの空間を使いたかったのでしょう。ただしBASICからI/Oの操作はシステムROMをそれにあわせて書き換えればいいのですが、ユーザーのプログラムで直接I/O空間を操作するものはそのままでは動かなくなってしまいます。結局、互換性維持のためこの置き換えは有効にならず、PET2001NではVRAMのイメージがPET2001とは異なるという構成になってしまったようです。実際にはVRAMのイメージ空間に対して読み書きするようなことはやらないので互換性については問題にならなかったようです。

 ついでに後継機のCBM8032についても調べてみましたが、アドレスデコード部分を専用のLSIで担当するようになりわかりませんでした。もしCBM8032のお持ちの方がいらっしゃれば試してみてはどうでしょうか。


 いかがでしたか?


 今どきこんなのを調べてもまったく役に立ちませんね。次回からはもうちょっと役に立つ情報をお伝えしたいと思います。それでは、また。


「2001年宇宙の旅」オリジナル・サウンドトラック
B003DRVG5K 2010-06-01
5つ星のうち4.5
¥ 1,660



PET2001N カセットの修理

 前回の続き。

 さて入手したPET2001N、外付けのカセットテープレコーダ(datassette)も一緒だったのだがBASICからSAVEしてもカセットテープ自体は動いているのだが全然記録されない。困った。

2019PET0403A

  だがしかし。そんなこともあろうかとあらかじめVIC-20(VIC-1001)用のカセットレコーダを事前に用意していたのだよ。
2019PET0403B

 無水アルコールで清掃もする。

2019PET0403C

 こちらはたぶん大丈夫なはずなんだけど、やはりSAVEできない。これはPET2001N本体か?ということで回路図を眺めてみるとMOS6522(VIA)にカセット関連は直結。デジタル入出力をアナログ信号に変換する回路はなく、カセットレコーダ側でやっているようだ。

 ということでMOS6522を修理待ちのPET2001から抜いて交換。そうしたら動いた。素子の故障またはソケット接触不良か。なおMOS6522を外した状態でもBASICは起動します(カセットとユーザポートが使えなくなるだけ)。

 PET2001Nの筐体を開けるとカセット#2の端子がある。ここに対して操作するには SAVE "AAA",2 のようにデバイス番号を指定するとOK。また、カセットテープは巻き始めと巻き終わりの部分には磁性体を塗っていないリーダー部分があるが、PET2001でSAVEする時は最初に充分なギャップがあるため特に意識しなくても大丈夫。さあこれで安心して遊べますね。
 元々ついていたカセットレコーダを接続し、VIC-20用のカセットレコーダでSAVEしたテープを入れるとLOADできる。しかしSAVEはできない。ということでMOS6522周りの故障&カセットレコーダの故障。

2019PET0403D

 で、特定のグラフィックキャラクタを表示した時に文字にゴミが入ったように見える(上記写真は問題なし)。通常のASCII文字だとちゃんと表示されるのだが。

マクセル カセットテープ(10分/10巻パック) UR-10M 10P
B06XWT83FR 2000-01-01
5つ星のうち4.1
¥ 614


PET2001Nの修理(というほどでもなかった)

 以前修理に挑戦して放置中のPET2001とは別の、フルサイズキーボードでグリーンディスプレイのモデルを入手した。区別するためPET2001Nと呼びます。PETのバージョンについてはこちら→PET index - versions

以前の修理記録:

 外観は問題ない。電源を入れるとランダムなキャラクタが表示され、真ん中あたりで1文字が変化している。電源正常、クロック正常、ビデオ表示まで問題なし。キャラクタ1文字が変化するということはCPUは動いていると思われる。
2019PET1

 先にVRAMから手を付けてみる。1Kx4bitの2114が2個使われていてソケット実装されているので手持ちと交換。電源投入後のランダムパターンが変わっただけであとは変化なし。

 さて、本体の調査だけど強力なツールが存在する。

 部品点数が多いせいで故障も多いPET2001のROM/RAMを部分的に、または全体を置き換えて動作させるボードでCPUソケットに挿して使用する。ROMイメージにはBASIC1/BASIC2/BASIC4/pettesterがあって選択可能。装着してDIPスイッチを設定し、本体ROM全バイパスしてpettesterにする。

2019PET10


2019PET2

 画面全体が"G"表示と全キャラクタ表示を一定間隔で繰り返す。pettesterではOK。ただしpettesterは2KサイズのROMで、RAMは先頭から1Kしか使わないらしいのでメモリ空間をすべてテストしているわけではない。

 設定をBASIC1にしてみる。
2019PET3

 なんかレジスタの値を表示して止まった。キーは受け付けない。ここまででCPUは動いている、データバスも問題なし、どうもアドレスの一部がショートまたは断線しているのではないか。

 おなじ作者によるPET Diagnostics Moduleというのを使えば色々診断してくれて一発でわかるらしいのだが
スクリーンショット 2019-03-31 19.15.35

 4月8日までバケーションですと。じゃあとりあえず切り分けしていこうか。

 PET2001NのROMは4個で、アルミ板による放熱フィンがついている。なんとなく熱暴走対策のような、故障多そうな感じがしますね。素子はMOS 6332で2732とは一部ピンアサインが異なる。これを一個ずつ抜いていく。このROMが原因で上位アドレスのどこかがショートしているかどうかを確認。実際のROMイメージはROM/RAM replacement board上のROMから読み出すことになる。で、やってみたら一番左側に実装してあるROMを外したら正常動作した。

※追記:このROMだけを元に戻して現象の再発確認。このソケットに別のROMを挿したらreplecement board上のイメージから正常起動。つまりソケットなど基板側ではなくROM素子の故障。

2019PET11


2019PET4

 おお……ブラボー

2019PET5

 もともと基板に実装されていたROMはreplacement boardのおかげで不要なので外してしまった。前回に較べてなんともあっさりと動いてしまった。キー入力も問題ない。しかしこんなにごっつい筐体なのに無音なのよ。

 2台目のPETに手を出したのは1台目の修理が難儀で切り分け用に使えんかなあと思ったのも理由のひとつ。メインの基板からCRT基板につながるJ7コネクタはPET2001とPET2001Nでも同じで、どうも映らんらしいPET2001のCRTをつないでみたらやはり映らなかった。PET VIDEO MIXERまたはVIDEO出力とV/H SYNCをVGAに出力できるようなミニ基板を作ってやってみようかという今のところの方針。

ペット[AmazonDVDコレクション]
B07B12STVK 2018-03-20
5つ星のうち4.0
¥ 1,000


8080Aの割り込み応答の謎

 きっかけは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 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.

 わざわざ3バイト命令のCALLを受け付けるよ書いてあるのはなんでだろうか。8080Aはもともとできたのでは?ということで調べてみた。その前に8080Aの割り込み動作について。

 8080Aは割り込み許可の状態でINT入力がHになると割り込み動作にはいる。割り込み復帰のための現プログラムカウンタの保存はしない代わりに1命令分をデータバスから読み込んで(fetch)実行する。ここで特定の命令、RST7(FFH)を読み込むと現在のPCを保存して38Hにジャンプする。この1命令実行時はPCを更新しないので、38Hからの割り込み処理からリターンする時に元通りの番地に戻ることができる。RSTn命令はRST0〜RST7まで存在し、n × 8番地がエントリポイントとなる。
 スタックにPCを保存してジャンプする命令ならCALL命令でもよく、これは3バイト長である。任意のアドレスをエントリポイントにできるが、割り込み時の回路が複雑になる。

 さて割り込み時は8080Aのデータバスに出力されるステータスをデコードすることにより得られる*INTA信号がアクティブになる。ここを観測することにより割り込み時にどんな長さのコードを取り込んでいるのかがわかるはず。命令実行時にはSYNC信号が立つので、*INTAの立ち下がりをトリガにして同時にSYNC信号をオシロで観測することにした。

 実験に使用するのはSBC8080ボードとPALO ALTO BASICを元に機能を追加してあるSBC8080システムROMを使用した。これは割り込みを許可し8251UARTを初期化し端末の文字入力でINTを上げてくれるのでそのまま割り込みの観測に使える。

 *INTA信号は8228システムコントローラが8080Aのデータバスからデコードし出力する。ただし+12Vにプルアップした状態では何も変化しなかった。+12Vプルアップしていると割り込み発生時に内部で自動的にRST7(FFH)を生成し、*INTA信号は外に出さないようだ。

 8228の*INTAの+12Vプルアップを外し、観測する。端末から1文字入力すると*INTAが発生した。ただし*INTAの数はまちまちである。これは割り込みサイクルで命令取り込み時にバスがフローティング状態のため、バラバラなデータを読み込んでいるせいだと思われる。以下はたまたま1バイト命令のRST7がはいった様子(キー入力が続けてできたので38H番地に飛んでいると思われる)。
2019INTA1


 データバスを弱くプルアップ/プルダウンして任意の命令フォーマットを与えることにする。10KΩプルアップ/プルダウンでCALL命令に相当するCDHに設定した。CALL CDCDHとなるはず。
2019INTA

 観測結果は以下の通り*INTAが3発。
2019INTA3

 さて割り込みで使うRST7とCALL xxxxは観測できたが、ひょっとしてこの*INTA信号は任意の命令のデコード後にわかる命令のバイト数分出るのではなかろうか。ということで配線を変えてADC imm(CEH CEH)にしてみた。結果は予想どおり*INTA 2発。

2019INTA2

 8080Aは割り込み時に1命令を読み込んで実行し、RSTnやCALL xxxxでスタックにPCを保存することを期待している。が、これは任意の命令でよく、命令をフェッチ/デコードして得られた命令のバイト数分*INTAを発生して1命令を実行する。
 Intel 8080Aとそのクローン、NEC μPD8080Aも同じ結果であり、NECのカタログに書いてあった割り込み時に3バイト命令も受け付けるよという記述はわざわざ書くまでのことでもなかったということになる。

 あとクローン8080Aについては解析済で以下からverilogソースが見られます。




NEC 8bit 2MHz MPU i8080互換 UPD8080AFC
B0773MVDKN
5つ星のうち5.0
¥ 1,200

NEC μPD8080Aの非互換部分まとめ

 NEC μPD8080Aのデータシートが見つからないで悩んでいたら@electrelicさんからbitsaversにあるよ、と教えていただきました。その 1977_NEC_Microcomputer_Catalog.pdf を参照しつつこれまでの実験結果からINTEL 8080との非互換部分を整理。(電気的特性は省略)


・命令実行のサイクル数
 これはIC Collection MCS80に詳しい表があります。

・割り込み応答時間が3バイト命令(例:CALL)後でアクティブ
 通常、割り込み発生時にはデータバスにRSTx(1バイト命令)のコードを流し込んで決まったエントリに飛ぶが、3バイトのCALL命令で任意の番地を割り込みエントリにできるということか?

※追記:システムコントローラ8228は割り込み時にCALL命令が入ると続く2サイクルの間も*INTAをアクティブにして、CALL命令で指定した任意のアドレスを割り込みの飛び先にする機能がある。NEC μPD8080Aは8228のサポートなしでこれができるということだろうか。

8080Aの割り込み応答の謎を参照。Intel 8080Aと変わらず

・未定義フラグbit3が常に1。INTEL 8080Aは常に0

・フラグbit5はSUBフラグ。DAA命令で参照。INTEL 8080Aは常に0

NEC μPD8080Aのフラグ
スクリーンショット 2019-02-13 21.00.44

NEC μPD8080AF(INTEL 8080A完全互換)のフラグ
スクリーンショット 2019-02-13 21.01.28


・DAA十進補正命令はSUBフラグ=1で減算後十進補正。SUBフラグは減算命令(SUB/DCR)で1になる。加算命令(ADD/INR)で0クリア。

・DCR命令でACYフラグが立たない場合があり、被減数が00,10,20,30,40,50,60,70,80,90でDCR後DAAで誤動作する。

・XRA/ANA/ORA命令後ACフラグがクリアされずそのまま。
 カタログには"Also,arithmetic flags not affected by logical instructions. "とある


また、さる方面からBCD演算の実装について教えていただきました。https://en.wikipedia.org/wiki/Double_dabble


 減算命令後のDAA補正対応や論理演算命令での算術フラグを操作しないなど命令を追加しないで改善しようとした感じがしますね。




マイクロコンピュータ・ハードウエア基礎技術―M6800系,8080系,Z-80系 (1981年)
B000J7VKF8 1981-03

¥ 2,400 (中古品)

TINY ARCADE (photo only)


2019-TA1

2019-TA2

2019-TA3

2019-TA4

2019-TA5

2019-TA6


(Space Invaders) - Tiny Arcade Space Invaders Miniature Arcade Game
B06Y4DR4HP
5つ星のうち4.3
¥ 1,997

NEC uPD8080AのDAA命令調査 SUB編とINR/DCRの挙動

 前回の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>a) a=a+100
  c=a-b
  if (c!=($4-0)) print $0
}

 入力データの1カラム目は4桁の16進数で、前2桁から後ろ2桁で減算を行う。その結果を十進補正したものが4カラム目。このスクリプトはこの減算を行い、十進補正値と比較して異なれば出力する。

Intelの8080だと00〜99 - 00〜99の全組み合わせ10000通りですべてエラー。例えば:

0000 00 *Z*H*P** 06 *****P**
0001 FF S****P*C 65 ***H*P*C
...
とこのような感じで1行目は減算時のハーフフラグの立ち方がおかしく、よけいな補正をしている。2行目は"F"から補正値6を引かないといけないところを加算している。ということで減算時の補正についてはまったく考慮していない。
 NECのμPD8080AではSUB命令の後の補正後の値はすべて正しかった。ところで十進補正の補正値である"6"をDAA命令で足すのか引くのかはどうやっているのだろうか。おそらくDAA命令の直前に実行した演算命令がADDなら加算、SUBなら減算にしているはずで、もしかしたら未定義のフラグを使っているのか。ここは気になる点。
※8086だとDAA命令とDAS命令でそれぞれ加算後十進補正、減算後十進補正と命令が別れている。

 さてここまでやって1加算するINR命令と1減算するDCR命令ではどうだろうか。これも確認してみた。


ADD 1とINR、SUB 1とDCRの比較結果はこちら:

Intel 8080の結果は以下の部分が異なる。2〜5カラム目がADD 1の結果、6〜9カラム目がINRの結果。

INR:
FF01 00 *Z*H*P*C 66 *****P*C 00 *Z*H*P** 06 *****P**
これは値が範囲外、かつキャリーフラグがINRでは立たないので補正されていない。問題なし。

DCR:
0001 FF S****P*C 65 ***H*P*C FF S****P** 65 ***H*P*C
そもそもSUB後のDAAは保証外、値が範囲外、INRでキャリーが立たない。問題なし。


NEC μPD8080Aの結果。
INR:
0F01 10 ***H**** 16 ***H**** 10 ******** 10 ********
1F01 20 ***H**** 26 ***H**** 20 ******** 20 ********
2F01 30 ***H*P** 36 ***H*P** 30 *****P** 30 *****P**
3F01 40 ***H**** 46 ***H**** 40 ******** 40 ********
4F01 50 ***H*P** 56 ***H*P** 50 *****P** 50 *****P**
5F01 60 ***H*P** 66 ***H*P** 60 *****P** 60 *****P**
6F01 70 ***H**** 76 ***H**** 70 ******** 70 ********
7F01 80 S**H**** 86 S**H**** 80 S******* 80 S*******
8F01 90 S**H*P** 96 S**H*P** 90 S****P** 90 S****P**
9F01 A0 S**H*P** 06 ***H*P*C A0 S****P** 00 *Z***P*C
AF01 B0 S**H**** 16 ***H***C B0 S******* 10 *******C
BF01 C0 S**H*P** 26 ***H***C C0 S****P** 20 *******C
CF01 D0 S**H**** 36 ***H*P*C D0 S******* 30 *****P*C
DF01 E0 S**H**** 46 ***H***C E0 S******* 40 *******C
EF01 F0 S**H*P** 56 ***H*P*C F0 S****P** 50 *****P*C
0F01 10 ***H**** 16 ***H**** 10 ******** 10 ********

値が範囲外なので問題なし。

DCR:
0001 FF S**H*P*C 99 S**H*P*C FF S****P** FF S****P**
1001 0F ***H*P** 09 ***H*P** 0F *****P** 0F *****P**
2001 1F ***H**** 19 ***H**** 1F ******** 1F ********
3001 2F ***H**** 29 ***H**** 2F ******** 2F ********
4001 3F ***H*P** 39 ***H*P** 3F *****P** 3F *****P**
5001 4F ***H**** 49 ***H**** 4F ******** 4F ********
6001 5F ***H*P** 59 ***H*P** 5F *****P** 5F *****P**
7001 6F ***H*P** 69 ***H*P** 6F *****P** 6F *****P**
8001 7F ***H**** 79 ***H**** 7F ******** 7F ********
9001 8F S**H**** 89 S**H**** 8F S******* 8F S*******
A001 9F S**H*P** 99 S**H*P** 9F S****P** 9F S****P**
B001 AF S**H*P** A9 S**H*P** AF S****P** AF S****P**
C001 BF S**H**** B9 S**H**** BF S******* BF S*******
D001 CF S**H*P** C9 S**H*P** CF S****P** CF S****P**
E001 DF S**H**** D9 S**H**** DF S******* DF S*******
F001 EF S**H**** E9 S**H**** EF S******* EF S*******

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で誤動作する。

 惜しい。NEC μPD8080Aの減算後DAAではINRで正常動作するつもりでDCRを使うとハマるんじゃなかろうか。
 INR/DCRではキャリーフラグは立たない。フラグのうちS/Z/Pは結果だけから求められるが、CY/ACは演算の種類と値によって決まる。INR/DCRはALUの加減算器のパスを通ってない感じがする。

 残りは8085やZ80との比較かな。


おまけ:チェコスロバキアから届いたTESLA MHB8080A動きました。
MHB8080ACデータシート

2019MHB8080A



インテル8080伝説
4899774532

NEC uPD8080AのDAA命令調査 ADD編

 前回の SBC8080システムROMでBASICから機械語を呼び出す で実チップのテスト環境が整ったので以前から気になっていたIntel 8080とNEC μPD8080Aの非互換部分についての調査を行った。

 NEC μPD8080AはIntel 8080のクローンではなく独自に改良し、DAA命令(十進補正命令)の減算対応、実行クロック数の改善がなされた。が、せっかく改善したのに非互換部分が嫌われ完全互換のμPD8080AFに切り替わった。
MCS-80(IC Collection)

 まずDAA命令の動作について。DAA十進補正命令はハーフキャリーを参照する。

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
FLAGレジスタのbit4はACフラグ(またはHフラグ ハーフキャリー)で加算時のbit3からbit4への桁上げで立つ。このフラグは加減算/INC/DEC/比較/論理演算で変化するが主に加算とINCの後のDAA命令で使う、とある。

 DAA命令の記述。
スクリーンショット 2019-01-13 21.30.20

 DAA命令は直前のADD命令について、BCD表現の数値を加算したものとして補正を行う。例えば04H+06Hは0AHだけどこれを10Hに修正する。その手順は以下のとおり:
(1) 下の桁がA-Fになっている、またはハーフキャリーが立っていれば6Hを加算する。
(2) (1)の後、上の桁がA-Fになっていればキャリーフラグを立て60Hを加算する。

もっと詳しい実装の解説はこちら:

 ではデータを採取して比較を行う。コードは前回を参照。テスト結果は1バイトの十進数で

数値A 数値B A+Bの結果 加算後フラグ DAA補正後の結果 補正後フラグ

このデータが256×256パターンで65536行。このデータを適当なunix環境に持っていってawkで処理。Excelでもなんでもいいです。

 まずは16進に変換。数値Aと数値Bは連結してインデックスとして使えるようにする。フラグは2進数表示。こんな感じになる。

0000 00 01000110 00 01000110
0001 01 00000010 01 00000010
0002 02 00000010 02 00000010
0003 03 00000110 03 00000110
...

あとは任意のフィールドを切り出して比較していくだけ。

対象となるCPUは以下:
(1) INTEL MD8080 A/B インテル純正の安心感。すべての比較元とします
2019-MD8080

(2) CCCP KP580BM80 (USSR KR580VM80) ソ連製8080クローン
2019-USSR1

(3) CCCP KP580BM80A (USSR KR580VM80A) ソ連製8080Aクローン
2019-USSR2

(4) NEC μPD8080A 今回の主な調査対象
2019-D8080A

(5) NEC μPD8080A-T -Tサフィックスはなんだろう?
2019-D8080AT

(6) NEC μPD8080AFC Intel 8080A完全互換にしたもの
2019-D8080AFC

テスト結果:(HフラグはACフラグと読み替えて)
a. 加減算後のDAAについて
(1) (2) (3) (6) はまったく同じ。DAA動作は完全互換
(4) (5) はまったく同じ。NEC μPD8080AとμPD8080A-Tは同じもの

b.加算後のDAAについて(1)と(4)を比較
・演算結果の数値は一致
・フラグが異なる
・NEC μPD8080Aは未定義フラグbit3が常に"1"。INTEL 8080Aは常に"0"
・NEC μPD8080AはDAA命令の前後でHフラグの状態は変わらない
・INTEL 8080AのDAA命令前後でのHフラグの動作:
 DAA前にHフラグが立っているとDAA後にHフラグは落ちる
 DAA前にHフラグが落ちているとDAA後に補正前の演算結果の下1桁がA~Fだった場合に立つ

 DAA補正後のHフラグに関しては定義されていないのでこれらは未定義動作として済ませるんですが、続きがあります。

 Dr.Dobb's Journal 1976/11/12 によると"IMSAI INCOMPATIBILITY"というのでNEC製8080Aの挙動についてメーカーに質問が出ている。本来 XRA Aの後にDAAはやらないんだけどやってみたら結果が0のはずが6になっている。これって十進補正をやっているように見えますね。

確認コードはこちら:

 ここでIntelのユーザーズマニュアルでXRA命令を確認してみる。
スクリーンショット 2019-01-13 21.29.56

 XRA命令実行後にAC(ハーフキャリー)はクリアされると書いてあるが、NEC μPD8080Aではクリアされずにセットされたままになっている。この部分は未定義ではないのでIntel 8080とNEC 8080Aの非互換部分と言える。これはXRA命令の実装でACフラグを操作するパスがなさそうに見える。さらに想像するとNEC 8080AではANA以外の論理演算命令ではACフラグは変化しないのかもしれない。

※追記 XRAをANA/ORA命令に替えて実験
ANA命令 Intel 8080でACフラグクリア 仕様書の誤記?
ORA命令 Intel 8080でACフラグクリア
NEC 8080AではANA/ORAともACはクリアされずそのまま


 SUB後のDAA命令編に続く


Ex: El
Posted with Amakuri at 2019.1.13
808 State
Salvo

SBC8080システムROMでBASICから機械語を呼び出す

 SBC8080ルーズキット用のSBC8080システムROMは電脳伝説(@vintagechips)さんの手によりPALO ALTO BASICに独自の機械語モニタを拡張してあり一行アセンブラが使えて大変便利。MONでモニタにはいりSYSTEMでBASICプロンプトに戻る。EXEC 番地で番地+8000Hに飛んでRET命令でプログラムに戻ってこれるのだけれどもPEEK/POKEがないのでパラメータのやりとりがそのままではできない。

 そこでSBC8080技術資料の記述からPALO ALTO BASICの資料をたどって調べてみた。
Astrocade Machine Language Source Code Palo Alto Tiny BASIC, Version 3 よりPDFを取得

 TINY BASICなので変数名はA〜Zのみ、@は配列。BASIC変数/バッファ領域はSBC8080システムROMの場合F000HからF087Hまで。適当に変数Aに代入してMONで覗いてみると値が変化しているところがある。調べた結果、
F002H 変数A
F004H 変数B
F006H 変数C
F008H 変数D
F00AH 変数E
F00CH 変数F
...
となっていた。数値は2バイトでリトルエンディアン。ということはここを機械語とのパラメータ受け渡しに使える。

実際に作ってみた例はこちら:TeraTermに送信するときは設定(S)→シリアルポート(E)... で送信遅延を10ミリ秒/字 100ミリ秒/行にするのを忘れずに。

 これは十進補正命令DAAの動作を確認するテスト。変数Aと変数Bの値を加算し結果を変数C、フラグを変数Dに格納。その後DAA命令を実行し、結果を変数E、フラグを変数Fに格納する。いずれも下位1バイトしか使わない。8080アセンブラで初めて書いたのでみてみて。
 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
  これをBASIC側から変数Aと変数Bを0〜255の範囲で変化させてEXEC 0で呼び出し、結果を含めて画面出力するだけ。文字出力はBASIC内のサブルーチンを呼び出せばできそうだったが手を抜いてBASIC側でやった。ループも同様。どのみち9600bpsの端末への出力なのでいくら高速化してもそこで律速となる。

 なんでこれを作ったかというとIntel純正8080に対してNEC 8080Aは独自改良でDAA命令を修正したが、非互換ということでNEC 8080AFでIntelとまったく同じ動作に戻したという話があったので調べてみようと思ったからだ。次回お楽しみに。




復活!TK‐80
Posted with Amakuri at 2019.1.13
榊 正憲
アスキー

ソ連のCPU KP580BM80Aの動作確認(2)

 前回の続き。

 さて、KP580BM80Aの動作が怪しいので確認用にebayでもう1個購入。2週間程度で届いた。

 マークが{S}みたいなのは製造元(工場?)が異なるため。
2019KP580-1

 で、問題なく動作。ということはKP580BM80Aは個別故障ということになる。
2019KP580-2

 PALO ALTO BASICで5.09V/0.51A、BASICでA=A+1しながら数字を表示するループ実行で0.53A。電圧高めなのはスマホ用のUSB電源アダプタを適当に使ったせい。

 これでおしまい、でも良かったのだけれどももうちょっとだけ調査。

 割り込みの観測のため8080のINTE(pin16)にLEDを追加。電流制限抵抗は大きめ(8.2kΩ)にしたので駆動力ヨワヨワの8080でも問題ないでしょう。
2019KP580-3


 INTEは故障と思われるKP580BM80Aでもリセット後は点灯。ただし端末側のキーを押してINTを発生させるとLEDで消え、画面に連続した文字は出なくなる。つまりPALO ALTO BASICのROMで割り込みを受けるまでは画面に連続して文字が出ているので、CPUはなにかしらの命令を実行しているのだが、どこかで暴走しループしているように見える。
2019KP580-4

 故障箇所は前回の調査でわかった「INT信号で割り込みが発生し割り込みがマスクされるが38Hには飛んでいない」以外にもあり特定の命令の実行またはジャンプ先が変わるような動作でおかしくなっているようだ。少なくとも00HのNOP連続による動作はできた。

 横井与次郎著 マイクロコンピュータ・ハードウェア基礎技術 のp.156にある3.1.3 8080Aの絶対最大定格によると-5V側の電流は1μA〜1mAとあるが、ここの電圧が0Vだと+5V/+12Vの電流が非常に大きくなるので長時間-5Vを与えない状態で使うのはしてはいけないと書いてある。ということは何らかの原因で-5Vが印加されなくなったら動くことは動くけれども発熱で8080が故障するのであろうか。

 まあ良品を壊してまで調べようとは思わないので故障調査はこれでおしまい。ということでソ連製の8080クローンでもSBC8080は動作します。




ソ連のCPU KP580BM80Aの動作確認(1)

 SBC8080ボードができたので手持ちのコレクションについて動作確認。

 まずはソ連製の8080クローン、580GF24(8224)/580BK38(8238)/580BM80(8080)。
SBC8080+SUBボードで 5.03V 0.31A。PALO ALTO BASIC動作した。
2019SBC8080-1

 では、CPUを8080AクローンのKP580BM80Aに交換してみる。
2019SBC8080-2

 すると、このような表示に。最初はカタカナが連続して表示される(途中で繰り返すように見えるのはリセットを1回かけたため)。
2019SBC8080-3

 これはどういうことだろう。SBC8080ボードではCPUの周りのアドレスバスはHC541×2、データバスと制御信号は8238(8228)でガードされている。ということでまずはアドレスバスを疑いHC541→LS541に交換してみたが現象変わらず。次にデータバスと制御信号について、NEC uPB8228C / NEC uPB8224Cに交換してみたがこれも現象変わらず。
 SBC8080ボード用フリーランテストボードで確認してみたが00H(NOP)によるフリーランはできている。
2018SBCLED-3

 さて、どうしようか。の前にソ連製の8080クローンについて。

USSR 8080 microprocessor family(CPU-World) によると、3種類の8080/8080Aクローンが存在する。
・580VM80 8080のクローン
・KR580IK80A 8080Aのクローン
・KR580VM80A 8080Aのクローン、2.5MHz動作
独自に作られたものもあるようだ。ソ連はずっと8080互換でやってたんだろうか。
・KR580BM1 5V単一電源、5MHz動作、ピン非互換

なおKR580VM80Aはアルファベット表記で、本来は КР580ВМ80А とキリル文字で表記するらしい。キリル文字の方で検索するとロシア語のドキュメントに当たりやすい。

 580BM80Aについてはビデオゲームの修理にそのまま交換部品として使われていたりリバースエンジニアリングでVerilogソースまで調べられているので、論理的には同一のはず。

 PALO ALTO BASICでは調査も難しいのでもっと簡単なテストプログラムで確認してみる。SBC8080 CPUルーズキットで提供されているSBC8080データパックにある、TEST80というプログラムを使用する。これは8251を使ったエコーバックテスト。で、TEST80.HEXをROMに焼いて電源をいれると580BM80Aではプロンプト">"は出るがエコーバックせず。キーを押しても応答なし。いきなり当たりか?念のためSBC8080SUBボードの82C51を8251に変えてみたが現象変わらず。まあ文字の送信ができているということは8251の初期化はできているっぽい。

 端末からデータを受信すると8251はRXRDY信号を上げる。これは8080のINT入力に接続され、RST7割り込みが発生する。TEST80プログラムは割り込み発生後、38H番地からのコードで8251から1文字読んでメモリ上のバッファに書き込み、割り込みを再度許可する。TEST80プログラムはメインルーチンではバッファに何か文字があるとそれを送信し、バッファを空にする。

 ということで割り込みの状態を監視してみる。8080のINTE(pin16)を観測。以前作ったロジックチェッカーを使用した。で、NEC 8080Aでの結果はINTEは一瞬LになるがすぐHにもどる。つまり割り込みを受け付けられる状態になる。580BM80Aはリセット直後はINTEはHだが、キー入力があるとLになりそのまま。これ以降は割り込みを受け付けない。
2019SBC8080-4


 ここからはTEST80にパッチを当てながら確認していく。最初は38HにEI命令を入れてすぐに割り込みを許可するようにした。NEC 8080Aでは連続して割り込みが発生。これは8251の割り込み要因を落としていないので期待通りの動作。580BM80AではINTE信号がH→Lとなりそのまま。

 8080は割り込みが発生するといったんINTEをLにする。割り込み処理のプログラムで割り込み要因を落とした後、最後で割り込みを許可する。なので割り込み自体は受け付けている。あとは本当に38H番地に飛んでいるかどうかだ。
 さてそれをどう確認するかだが、SBC8080SUBボードにちょっとLEDを追加した。8251のTXRDY端子にLEDカソード側を接続、アノード側をVccへ。これで送信バッファがフル(=1文字送信中)の時に光るはず。
2019SBC8080-5

 パッチは38H番地にOUT C0Hを書き込む。これはAccにあるダミーデータを1文字送信する。580BM80Aでは一瞬も出なかった。念のためロジックチェッカーで監視しても同じ。つまり38H番地には飛んでいないということになる。

 以上から手持ちのKP580BM80Aは
・INT割り込みで割り込みをdisableするが38H番地へは分岐していない。
・別の番地へ飛んでいるのかHALTしているのかはバスの観測が必要。
・CPUの差し替え事例から個別故障の可能性がある。


ということで別に手配したKP580BM80Aを使って確認する予定。


インテル8080伝説
Posted with Amakuri at 2019.1.2
鈴木哲哉
ラトルズ

SBC8080ボード用フリーランテストボード

 手持ちのコレクションCPUが生きているかどうか気になる。Z80についてずっとデータ00Hをフェッチさせてアドレスバスを観測する手法があるが、SBC8080ボードでもいけるはずなので40ピンのバスに接続するアダプタを作った。

8ビット CPU Z80LED点滅(Yamamoto's Laboratory)

データバスを10kΩ×8の集合抵抗でプルダウン、A15〜A0をLEDのアノード、*MEMWR、*MEMRDをLEDのカソードに接続、電流制限抵抗は大きめ(〜10kΩ程度)、これでも充分明るい。LEDはバータイプ10個のものを2つ使うとA15-A0、*MEMRD、*MEMWR、*IORD、*IOWRでちょうどよい。

2018SBCLED-1

2018SBCLED-2

 左端のA15,A14あたりが点滅して見える。〜A0まで点灯して見えるが実際は高速に点滅している。
2018SBCLED-3

 フリーラン用のデータバスプルダウンを外せばバス観測に使えるはずなので作り直すかな。その時はピカピカ光るのでSBCゲーミングボードとしよう。



SBC8080ボード

 記事を書いてたつもりが抜けていたのでメモとして。


 8080Aは周辺チップが必要なことと+12V/-5Vの回路のせいでSBCシリーズとしては部品密度高めです。確実な組み立て方としては

(1) NJM2360A周辺を実装し、5V供給で+12Vが生成されることを確認
2018SBC8080-1

(2) 8224周辺と-5V生成回路を実装し、-5Vが生成されることを確認
2018SBC8080-2


(3)残りの部品を実装
2018SBC8080-3


の順でやればよいでしょう。

 ROM/RAM/UARTについては秋月B基板サイズに収まらないためSBC8080SUBボードに実装されます。作例では40Pフラットケーブルで接続されていますが、私はピンヘッダとピンソケットで重ねられるようにしました。このうちピンヘッダはSBC8080SUBボード側の部品面に、ROMなどソケット部品が干渉しないよう背の高い連結ピンヘッダを半分にカットして使用、SBC8080ボード側ははんだ面にピンソケットを実装。

ボードの間隔は17mmになります。この高さのスペーサがなかなか見つからないのですが、使用すると接続後しっかり固定できます。
2018SBC8080-4

 動作確認はSBC8080システムROMで行った。以下は手持ちの石の組み合わせ。

NEC uPB8224C / NEC uPB8228C / NEC D8080A


次回予告:寒い国から来たCPU


インテル8080伝説
Posted with Amakuri at 2018.12.31
鈴木哲哉
ラトルズ



秋月のLCD用ケースにぴったりはまる7セグLED

 秋月電子で扱っているプラスチックケースSW-125S(LCD)にぴったりはまる4桁の7セグメントLEDがある。

 いやそれだけなんですがこの7セグLEDについては過去調べたことがあって、ひとまわり小さい7セグLEDとピン配置が同じなのです。

7segment
 で、このLEDを使用している@morecat_labさんの7segduinoというのがあって、ほぼそのままで差し替えることが可能です。

7segduino(スイッチサイエンス)

 キットを組み立てた後で7セグLEDの端子をこのように曲げてはんだ付けし、ケースにはめてエポキシ系接着剤で固定。
2018-7seg1

 シリアル通信にはFTDI USBシリアル変換アダプター Rev.2(スイッチサイエンス)を使用。接続すると以下の様に表示。一定間隔で表示が左方向に流れます。
2018-7seg2

 これはキット付属の7セグメントLEDがアノードコモンにたいし差し替えた大型のLEDがカソードコモンのため。そこでライブラリの一部をカソードコモン用に書き換えます。

動作確認:Windows10(64bit),Arduino1.8.8

以下のページからSSegライブラリをダウンロードしArduinoのライブラリに追加。
SSegフォルダ内のSseg.cppについて、
_kcommon = 0 ;
_kcommon = 1 ;
に書き換え(三ヶ所)。
examplesにあるcount_7seg.pdeで動作確認。
2018-7seg3

 カウントアップしていきます。いい感じですね。USB電力計で簡単に確認したところ、電流は0.04~0.07Aでした。

 次はこれになんか組み込みます。

PS3 CECH-2000Aの修理

 預かったPS3の電源を入れるとピッと音がした後起動せず赤ランプになる。稀に起動するということ。ということで炙ってみます。

こちらの記事を参考に本体を分解。ネジ位置など非常に丁寧です。
(なにわの家電屋さん)

 通常のプラスドライバーに加えて中心に穴のある特殊なT8トルクスドライバーが必要。


 カバーを外した状態。
2018PS3-1


 電源ユニット、光学ディスクユニットを外した状態。コイン電池CR2032が見える。
2.9Vだったので新品に交換。いったん組戻して動作確認したが変わらなかった。
2018PS3-2

 メイン基板を取り出し。銀色のRSX、CELLが見える。左側のRSXの下にRAMが2つ、基板の裏側にも2つ。
2018PS3-3

 PS3の動作不具合の原因のひとつにこれらBGAパッケージが本体の電源ON/OFFによる発熱→冷却の繰り返しでチップと基板間のはんだ付けが接触不良になることがある。ヒートガンなどにより加熱しはんだを再度溶かすことで接触不良が直る*こともある*

 以下の手順でやった。使用したヒートガンは1800Wのもの。

(1)RSX/CELLを中心に5cmの高さから1分間、ヒートガンで周辺も含めてあぶる。
(2)RSX/CELLの裏側を中心に5cmの高さから1分間、ヒートガンで周辺も含めてあぶる。
 これらはチップと基板の温度差があるとはんだがつきにくいだろうとの考えから基板側をプリヒートするつもりで行った。
(3)RSXの上5cmから1分間あぶる。
(4)CELLの上5cmから1分間あぶる。
(5)表面のRAMの上5cmから1分間あぶる。
(6)10分間放置して冷却。基板を動かしてチップが落っこちたらいやでしょう。
(7)ひっくり返して裏面のRAMの上5cmから1分間あぶる。
(8)一時間ほど放置して充分に冷却

あとは元通りに組み立てて動作試験。電源ONできた。適当なブルーレイディスクを突っ込んで連続再生。24Hくらいできればまあ大丈夫と判断できるでしょう。

*注意*
プロはこの後X線で検査したりするそうですが素人にそんなことは無理なので速やかにバックアップなどを取りまたいつ壊れてもいい覚悟で使いましょう。


MachiKania Type M

 PIC32MXを採用したマイコンボード、MachiKania Type Mを組み立ててみた。

 オレンジピコ基板と部品一式を扱っている。キットにはDIP変換基板にはんだ付けされたブートローダ書き込み済のPIC32MXが同梱されているが、今回はTQFPのはんだ付けに挑戦したかったので秋月電子から PICマイコン PIC32MX370F512HT-I/PTを別途購入。あとはmicroSDカードが必要。

 まずはハンダブリッジを気にせずはんだ付けし、吸い取り線でブリッジを除去。
2018PIC32MX-1

 が、ちゃんとすべてはんだ付けされているか気になるのでヒートガンであぶってはんだを溶かし、しっかりと付くことを期待する。1800W、10cm高さで2分、5cm高さで1分あぶる。妥当かどうか自信はないがどうやらよさそう。
2018PIC32MX-2

 次は他の部品の取り付けだけれども、キット付属のセラミックコンデンサは基板のパターンよりも幅が広いので足をリフォームしないといけない。面倒なので0.1μF品は手持ちのものを使用した。
2018machikania-c

 他の注意点はLEDの電流制限抵抗R12の値が330Ω→1kΩになっているくらい。

 ブートローダはPicKit3で書き込み。その他必要なファイルをmicroSDカードに書き込んで完成。
2018MachiKaniatypeM

 基板上の半固定抵抗は音量調整。ありあまる端子を利用してArduinoシールド互換のコネクタが用意されている。電源を投入するといろんなサンプルやゲームをmicroSDカードから呼び出して遊ぶことができる。

 せっかくなので浮動小数点演算を生かしたプログラムを書いて遊んでみた。BASICで書くにはPS/2キーボードが必要。https://rosettacode.org/wiki/Mandelbrot_set#Processingよりウンウンうなりながら移植。


2018machikaniamandel

 変数がA-Zしか使えないと思いこんでいたので読みづらいですが、作者の@KenKenMkIISRさんからUSEVARで6文字までの変数名が宣言できることを教えていただきました。


 というわけでTQFPはんだ付けの実績解除と80年代にBASICで遊んだ感覚を思い出しました。カラーが表示できるのは良いですね。


 ↓ Kindleunlimited対象

PET2001のレストア(2) 電源調査

 再度電源を投入してボード上の電源電圧を測定したら5Vのはずが4.6V程度とおかしいので、タンタルコンデンサすべてと電源ラインの電解コンデンサを交換する。
PETPOWERLINE

 交換したコンデンサの容量を測定したが特に抜けてはいなかった。電源コネクタの接触不良だったようだ。
 クロック周りを観測。
・MOS6502 pin39(φ2 out) OK → クロックジェネレータからCPUまではOK
・PIA/VIA pin25(φ2 in) OK → 主要なLSIへのクロック供給OK
・VSYNC/HSYNC/VIDEO それっぽい波形は出ている
 これで何も表示されないのはCRT部分が動いていない可能性がある。CRTは高電圧を扱うがうかつにさわりたくはないので調べてみた。

PET2001の回路図は以下にある。先程のロジックボード上の電源まわりを抜き出した図もここから。

これによるとCRT基板に供給されるAC17VからDC12Vを作り、そこからすべての高電圧(+85V,-30V,+10KV)を生成している。電源トランスはCRT基板とロジックボードそれぞれにAC17Vを供給しているようだ。ただしこのあたりの図面はないので実物をたどって調べてみた。(お断り:正確ではないかもしれません)

2018PET2001power

 TAPとあるのは電源トランス端子に書いてある番号。[8][7]はAC17VでCRT基板に行き、7812でDC12V1Aを生成している。
 [6][5][4]は中点のあるAC17Vで、コネクタJ8(1)(5)を経由してロジックボード上で整流されJ8(4)でいったん外にでる。ここで平滑コンデンサに接続され、J8(2)(3)でふたたびロジックボードに入り7805の4個並列でDC5V4Aが生成される。

 ということは重くてかさばる電源トランスと平滑コンデンサを撤去して現代のスイッチング電源を代わりに入れることができそうだ。そうする安定した電力を供給でき、発熱も抑えられるのではないだろうか。
 まずはCRT基板に直接DC12V1Aを供給してみた。基板上の7812のpin3を上げて12VラインにスイッチングACアダプタの出力をはんだ付けする。
2018PET2001CRT

 この作業にはCRT部分の分解が必要。PET2001のCRTユニットはナット4個で固定されているのでそれを外す。CRT基板は背面のパネルを外し、スペーサで固定されている手前の二箇所のネジを外し、奥の方にある二箇所の固定ピンを上げる(写真左下のもの)。CRTのソケットを慎重に外す。これでも偏向コイルへの配線はつながったままだが、クッションを敷いてCRTを保護しつつ作業した。

2018PET2001CRTheater

 ACアダプタを接続して確認。CRTのヒーターが点灯した。

 今回はここまで。


ミュージック・ノン・ストップ~ア・トリビュート・トゥ・クラフトワークミュージック・ノン・ストップ~ア・トリビュート・トゥ・クラフトワーク
オムニバス ヒカシュー 中野テルヲ バッファロー・ドーター 山下康 MELT-BANANA 石野卓球

EMIミュージック・ジャパン 1998-09-22
売り上げランキング : 202869

Amazonで詳しく見る
by G-Tools


PET2001のレストア(1)

 新品のPS4とジャンクのPET2001、どちらかをくれるという話なら迷わずPET2001を選ぶ。
自腹でどちらか買うとしたらちょっと考えてからPET2001を選ぶ。

2018PET1

 固く絞った雑巾で表面を清掃したのち、手前左右に2個づつあるネジを外してオープンのところが筐体が歪んでいてかなり強引にしないと開かなかった。

 内部はこのような状態。40年前の製造ですし。
2018PET2

 基板は一箇所のみネジ止めで他はピンに刺さっているだけ。外してみた。
2018PET3


 基板(クリックで拡大)
IMGP2925

 基板は最初期のものらしい。ROMはMOS6540×7個、RAMはMOS6550×16個。それぞれ同期式のメモリ。

ドラッグストアで買えるイソプロパノールでホコリを流した。一回じゃだめで一瓶分使った。
(クリックで拡大)
IMGP2926

 さて本体だが背面にあるフューズホルダーが破損していた。元々は1.6A品らしいので1.5Aのヒューズと5×20型のヒューズホルダーをホームセンターで購入。これに交換する。
2018PET4

 左奥にある電解コンデンサとトランスを底面のナットを回して外した様子。少し狭いがこのヒューズホルダーを交換。
2018PET5

 筐体は鉄板なので新規に穴を開けるのは難しい。新しいヒューズホルダーが入るようにリーマーで削るのも大変だった。これでAC電源まわりは大丈夫なはず。

 よく見たら基板側には問題がある。7個あるROMのうち中央のものだけが逆に挿してある。同じ種類のROMが並んでいるなかで通常こういうことはない。もしかしたらこの状態で通電していて破損している可能性もあるが、とりあえず正しく挿し直す。
2018PET7

 さてコネクタを元通りに接続して通電してみる。カセットレコーダー部分からモーター音が少しして止まる。基板上の電源ラインを確認すると約3.7Vだった。
 おそらくは平滑コンデンサの容量抜けでまともに電源レギュレータが動作できない状態なので、用意しておいた電解コンデンサ6800μF25Vを並列に接続。実際は元々の電解コンデンサの端子にネジ止め。
2018PET6

 この状態で再度パワーオン。今度は5.07Vが観測できたので電源供給はひとまずOK。

 基板上にあるLEDはVIAのキースキャンをORして点灯するようなので、ROMを読んで正常に動作していれば光ると思われるが消灯したまま。先程のROMの破損があるかもしれない。また、ソケットが多いので接触不良も考えられる。

 たぶんオシロなしでできるのはここまでで、次回はクロック周りから確認していこう。



【第3類医薬品】イソプロピルアルコール50% P 500mL【第3類医薬品】イソプロピルアルコール50% P 500mL

健栄製薬 2008-04-18
売り上げランキング : 3172

Amazonで詳しく見る
by G-Tools

今さらGALを使う準備

 2018年現在でDIP品のGALを使う準備。

 PLD(Programmable Logic Device)の一種であるPAL,GALは汎用ロジックICの置き換えとして使われていた。TTL 2〜3個を1個のパッケージに収めることができ、ゲートの段数を重ねることがないのでディレイも最小、面積も有利なので主要なLSI間をつなぐGlue Logicとして主に使われていた印象。GALの場合、DIP品は端子数と内蔵FFの数から16V8、20V8、22V10がよく使われていた。しかしより集積度の高いCPLD/FPGAの登場により終息しつつある。
 で、今GALを趣味で使うのは昔のマイクロプロセッサ関連を動かせるように作ったり修理したりするのに便利そうという理由。で、開発環境が用意できるかどうかやってみた。

・石の選定
 LatticeとAtmel(Microchip)が生き残っているが現在も生産しているのはAtmel(Microchip)のみ。DigiKey提携のマルツなどで購入できる。
ATF16V8B(Microchip)

・GALライタ
 アマチュアが入手容易なMiniPro TL866シリーズはLattice/Atmelに対応している。
サポートデバイス:
Microchip(ATMEL) ATF16V8B
Lattice GAL16V8/20V8/22V10

・開発環境
ATF16V8Bの開発にはWinCUPLを使用する。PALASM、ABEL、CUPLと色々独自言語があったけど回路規模は小さいし雰囲気で使えるはず。

 ということで ATF16V8B/WinCUPL/TL866CSの組み合わせでやってみます。

・WinCUPLのインストールとコンパイル
 WinCUPL(Microchip)からダウンロードしてインストール、再起動した後にライセンスキーを入力。ライセンスキーはWebページに掲載されています。インストールディレクトリはC:\Wincupl 。

 WinCUPL起動後、メニューの[File]→[Open]から C:\Wincupl\Examples\Atmel\ADDER.PLD を開く。次に[Run]→[Device Dependent Compile]でコンパイル。([Run]のメニューはファイルを開いていないと出ません) これで同じフォルダ内にADDER.jedなどのファイルが生成される。
GAL-compile

※私のWindows10pro環境ではコンパイル後にrun-time errorが出て終了しましたが他のWindows10home、Windows7(64bit)では正常にコンパイルできました。もともとWindowsXPまでの対応なので深追いせずにあきらめましょう。

・MiniPro TL866CSによる書き込み
 MiniPro TL866CSのソフトウェアは以下よりダウンロード。ver7以降はTL866II Plus専用なので注意。

 ブランクチェック。GALはPROMと同じような感じで焼けます。
2018GAL

 ADDER.jedを指定して書き込みOK。
GAL_atf16v8b

 ということで書き込みまでOK。

 GALは組み合わせ回路のみで使うと特に悩むようなことはありません。むかし別のメーカーのでFFを含む回路を作ったときはFFのリセット後初期値が'1'でハマった記憶が。そのときもなんとなく記述して動かしたので今後もまあできるんじゃないかなあという気持ちでいきます。


高速運作TL866CSプログラマ/USBついプログラマ EPROM FLASH AVR TL866シリーズプログラマ高速運作TL866CSプログラマ/USBついプログラマ EPROM FLASH AVR TL866シリーズプログラマ

Generic
売り上げランキング : 58538

Amazonで詳しく見る
by G-Tools

SBC6303のリセット対策 - シリアルI/Fからの電流回り込み防止

 SBC6303ルーズキット、既知の問題としてパワーオンリセットがかからないことがあるというのがあるが私の環境(HD63B03RP)では再現しなかった。


 再現性を高めるために手持ちのチップを交換しながら確認する。このうち、HD63P01M1がパワーオンでもリセットがかからない。電源をONにしないでシリアルI/Fを接続した時点でうっすらとパイロットランプのLEDが光るのであーこりゃ漏れとるな、と。ここで電源-GND間の電圧は1.91Vあった。どの程度回り込んでいるかを調べるためにR4(USB-TXD)を外して再度測定すると1.08Vだった。つまりUSB-TXD、USB-RXDの両方から電流が流れ込んでいる。完璧な対策は@cronos_svさんの絶縁USBシリアルI/Fを使うことだけど牛刀なのでここはオープンコレクターのLS07を使って電流が流れないよう分離する。

 回路は単純で、USB-TXO→SBC6303 RXDに10kΩプルアップ(SBC6303側電源)、SBC6303 TXD→USB-RDIに10kΩプルアップ(USBシリアル側電源)。SBC6303側から+5Vをもらい、シリアル入出力に直列に入れられた抵抗R4,R5をブリッジしてスルーする。
 プルアップ抵抗の値は適当で、もしなんかあったら10kΩをパラにしたら半分になるじゃない程度の考えで決めました。
2018SBCserial0

 アダプタ基板はこんな感じ。秋月D基板を半分に切ったもの。
2018SBCserial1

 アダプタ基板裏。
2018SBCSerial2

 SBC6303側のパッチ。
2018SBCserial3

 このアダプタ基板を入れた状態で本体電源ON、USBシリアルI/Fを接続、電源部分の電圧は0V。動作も問題なくパワーオンリセットが効くようになった。
 LS07の他にオープンドレインのHC07でも良さそう(後で気づいたけど千石やマルツにあった)。

記事検索
電子部品通販リストなど
竹下世界塔の計算機よもやま話
竹下世界搭のソフトウェア
zigsow (houmei)
github.com/houmei
ーーーーーー
ーーーーーー
ーーーーーー
プロフィール

hardyboy

QRコード
QRコード
  • ライブドアブログ