まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

PROMで*PGMをオープンにしていると読めないことがある

 ハマったのでメモ。

 パラレル接続のPROMは容量が違っても互換性があるようにピン配置にを決めてある。

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

 さて、この28ピンパッケージでVppやP#(*PGM)をオープンにしたままでROMの種類を変えていたらリードできないものがあった。使ったのはいずれも富士通製のUVEPROM。

2019UVEPROM

 Vpp,*PGMをオープンにしたままでの結果は以下のとおり。

MBM2764 読める
MBM27C128 読めない
MBM27C256 読める

 データシートを確認してみると、リード時ではVppはVccと同じ、*PGMはVIH(=Hレベル)とあった。追加実験としてMBM27C128で*PGMを4.7KΩでプルアップしたらリードできた。

 ということでサボってハマってしまったという話でした。




富士通(FUJITSU) UV EPROM 32K 2732A-30Z MBM2732A-30Z-G
B079JS4PRP

¥ 980




SORD M5のPSU(電源ユニット)

 SORD M5のPSU(電源ユニット)について。実際に入手したのはタカラ M5のもの。
M5の電源はこのPSU側にある電源スイッチでON/OFFする。M5内部では+5V、+12Vについてはカートリッジを挿さないと各LSIに分配されない。-12Vは内部の79L05で-5Vに変換され、これについてはカートリッジを挿してなくても供給されている。
このように電圧の種類が多いのは16K DRAMが+5V/+12V/-12Vを必要とするせいである。

ラベル
2019m5psu0


 電源ユニットは底面のネジ6個を外すとカバーを外せる。ネジのうち4個はゴム足の下。
古いパソコンの重い外部電源ユニットはトランスが入っている。スイッチング電源ではない。
2019m5psu1

7812、79M12で+12V、-12Vを作っている。+5VはNEC uPC305Cとトランジスタで作っている。

2019m5psu3

DC電源ケーブル。内部の配線と実測値は以下の通り。DIN6Pのピンアサインは写真参照。

R:+12V 12.16V
Y,G:5V 5.02V
BK,BR:GND
W:-12V -12.07V

2019m5psu4


 このタカラM5、動作しないので電源から先に調べたのだが問題なかった。ということでメモ。

SBCZ8002のRAMを32K(64K)化

 以下の続き。SBCZ8002のSRAMは6116x2で4KBだが、これを64KBにしてみた。

 32Kx8bitのSRAMと2Kx8bitのSRAMの端子の比較は以下のとおり。今回はTC55328PとHM6116ASPを使うがピン配列は同じ。

スクリーンショット 2019-06-28 21.42.50

 で、手間が最小限になる方法をいろいろ考えた結果、24Pの基板上のICソケットに加工した28PのICソケットを重ねて配線することにした。
 このように28PのICソケットのピンを曲げる。平バネ式のICソケットどうしだとこのまま重ねて挿入でき、曲げたピンは導通しない。丸ピンのICソケットだとちょっとむずかしい。

2019SRAM28

 加工の様子。重ねた28ピンICソケットのP28(Vcc)、P27(WE#)は基板の外から折り返してハンダ面からVcc、WE#を接続。
2019SRAM28-a


 P23(A11)、P2(A12)、P26(A13)、P1(A14)も基板のハンダ面、IC6(74574)のP16(A12)、P17(A13)、P18(A14)、P19(A15)にそれぞれ接続。SRAM2個とも同じように配線。
2019SRAM-b

 これで32K SRAMは無加工でそのままICソケットに挿してメモリが拡張できる。32Kx16bit=64Kバイトになるのだが、ROMのデコードの関係で8000H〜FFFFHが有効。

 基板の端から部品面とハンダ面にワイヤを飛ばすのはほんとはよくない。遠回りになるし端が擦れて断線する恐れがある。こういった修正をしやすくするために昔の面積の広い基板にはところどころにバカ穴というのがあって、そこを通してワイヤで基板の表裏を通してパッチを当ててた。今は基板作り直しのほうがあたりまえかな?
2019SRAM28-c

 確認はモニタROMから簡易に行った。
8000番地に8081、9000番地に9091、A000番地にA0A1、……F000番地にF0F1、と書き込んでからそれぞれの番地の内容をダンプして書き込んだ値が読めたらRAM拡張は成功。


SBCZ8002 専用基板(オレンジピコショップ)

SBCZ8002組み立てと/MO端子によるLチカ

 電脳伝説さんのSBCZ8002を組み立てましたよ&Lチカ報告。

SBCZ8002_reference(電脳伝説)

 GAL16V8AはTL866CSライターで書き込み。ライターのゼロプレッシャーソケットで接触不良があって書き込めなかったことがあったがそれ以外はトラブルなし。24Pのスリムな300milのソケットは持ってなかったので16P+8Pのソケットを組み合わせて使用。丸ピンソケットの場合は28ピンのものをカットしてもよいそうです。
2019SBCZ8002-a

  さて、ある思いつきがあってこのボードだけでLチカできんかなあ、SCC Z8530のシリアル周りの空き出力でできんだろうか(2chのうち1ch未使用)とつぶやいたらZ8002には/MO端子があるよと教えてもらった。Z8000の/MI入力と/MO出力は8085のSID/SODに似ていて1bitの入出力ができる。ただシリアル入出力の用途ではなく複数プロセッサでのリソースの共有などで使われるらしい。しかも特権命令のMSET/MRESで簡単にオンオフできる。SCCの制御は面倒そうだったのでこれはすぐできそう。

 で、/MO端子に4.7kΩでLEDをはんだ付け。アクティブローなのでカソードを接続。
2019SBCZ8002-b

SBCZ8002の簡易モニタを使ってテスト。

8000: 7B08 MSET
8002: 9E08 RET

/MO端子はリセット直後はdisable。
8000H番地をCALLするとLEDが点灯。

8010: 7B09 MRES
8012: 9E08 RET

8010H番地をCALLするとLEDが消灯。リセットをかけても消灯。






東芝 47V型 液晶 テレビ 47Z8000 フルハイビジョン 2009年モデル
B0026ZOJX6 2009-05-09
5つ星のうち2.8
¥ 64,400 (中古品)

タミヤの電動ハンディドリルをUSB電源対応にする

 タミヤ クラフトツールシリーズの電動ハンディドリルを便利に使っているのだが、作り方が悪かったのか電池まわりの接触が悪く動かなかったり回りっぱなしだったりになっていた。この際USB電源対応に改造してしまおうか。
 使われているモーターはFA-130の定格が3Vのもので、これにUSB電源の5Vはちょっと高すぎる。抵抗を入れてもいいが結構な電流が流れるはずなので小型のものは使えない。じゃあ5V対応のモーターはないかということでUSB対応ファンを探してバラしてみることにした。USB対応ファンは100円ショップで探した。この時期にしか出ていない。
 ダイソーのFLOWER-SHAPED TABLEFAN 300円というのが形状と電池三本でも動作というところがいけそうな感じがしたので購入して分解する。

 モーターはFA-130の形状でOK。
2019DAISO1

 電源は専用のUSBケーブルを接続するDCジャックと電池ボックス。抵抗などない。モーターは5V動作であたり。
2019DAISO2

 では組み込んでみる。スイッチ部分はもともとあった部品を外してUSB対応ファンで使われていたスイッチを流用。スイッチ動作はモーメンタリ(押したときだけ)からオルタネート(ON/OFF切り替え)になるけどいいでしょう。セメダインスーパーZで固定。
2019DAISO3

 スイッチが当たる部分を加工。プラモデル部品なのでカッターナイフだけでも削ることができる。
2019DAISO4

 完成。USBファンの部品をうまく流用できていい感じになった。DCジャックの取り付け加工は面倒になったので電池ボックス内で接続してUSBケーブル直出しにした。
2019DAISO5

 さて電流を測定すると無負荷で0.15A。指で軸を抑えて回りにくくしてみると0.5A程度まで上がった。USB電源にモーター直結だしノイズのことも考えるとパソコンのUSBポートには接続しないほうがいいでしょう。これで工作がはかどるね!



タミヤ クラフトツールシリーズ No.41 電動ハンディドリル 組み立て式 プラモデル用工具 74041
B01LX208SY 2017-02-04
5つ星のうち3.5
¥ 1,763



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 (中古品)
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ