まごころせいじつ堂

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

SBC

SBCV20 16MHz動作への道

 V20/V30には16MHzで動作する高速バージョンのV20HL/V30HLというのがある。これをSBCV20で動かせないかやってみた。

 クロックジェネレータuPD71011Cは接続した水晶振動子の周波数をOSC(pin12)、1/2の周波数をCLK(pin8)、1/4の周波数をPRCLK(pin2)に出力する。uPD71011C-8は16MHz、uPD71011C-10は20MHzまでOKなので、16MHzの水晶振動子を使いOSC出力をCPUのクロックとして使い、1/2のCLK出力を周辺用のクロックにする。USARTは8MHz以上で動作するuPD71051C-10にし、ボーレートのクロックは以前SBCV20とクロックジェネレータでやったPIC12F1822により独立して供給し、システムのクロックに依存しないようにする。

 改造はパターンカットと配線2本。
(1) IC5: uPD71011Cのpin8(CLK)近傍とIC4: uPD70108のpin19(CLK)をカット。
(2) IC5: uPD71011Cのpin12(OSC)とIC4: uPD70108のpin19(CLK)を接続。
(3) IC5: uPD71011Cのpin8(CLK)とIC8: uPD71051Cのpin20(CLK)を接続。

※IC9: HC4040は外してPCI12F1822基板に差し替えているので(3)はショートしない。
※クロックの配線を両端でカットするのはアンテナになるのを防ぐため。

2021-02-17 02.15.17

 16MHz動作のメモリリードは2サイクル分で125nsなのでこれより速いROM/RAMを使用する。ROMはSTMicro M27C512-10F1、RAMはFUJITSU MB84256C-70Lに交換した。

 あと、あまり関係ないがSBCV20においてIC6はHC257の代わりにHC157が使える。

 さて、16MHzの水晶振動子を挿して実験。8080モードでのBASICは起動するがオーバーフローエラーが出てASCIIART.BASが止まる。起動時のメモリ表示も"031171 Bytes free"と先頭に0がついていておかしい。
スクリーンショット 2021-02-17 020808

 手持ちの14.31818MHzに落として実行。今度はうまくいった。ASCIIART.BASの実行に1分44秒。
だがこれはたまたま動いたことが後に判明する。
スクリーンショット 2021-02-17 021422

 さて、V20HLは16MHzまでOKなのに動かないのはおかしい。何が間に合ってないのか。このV20HL uPD70108HCZ-16は5個1000円くらいで購入したもの。外し品らしくピンには半田の跡。どうもあやしい。
 skyriver(@wcinp)さんの記事、レトロマイコン86ボードの構想(その22) 16MHz動作実験2 [8086] によるとリマーク品の疑いが。そこで残りの4個で動作確認してみると16MHzではBASICも起動しないもの、14MHzでオーバーフローエラーが出るものとおかしいものばかり。最初に引いたのがたまたま良品だったらしいのだが、これも再度14MHzで動作させると表示途中でオーバーフローエラーとなった。
 挙動を比較するため手持ちのuPD70108C-10、これはFM-11の改造用に新品を秋葉原で購入したものだが14MHzで動作させると他のものと同様のオーバーフローエラーが出た。ここから推測すると手持ち5個のV20HLはuPD70108C-10のリマーク品である可能性が高い。
 確認のためにV20HLを10MHzでASCIIART.BASを二時間連続で走らせると5個ともPASSした。
追記:12MHzでもPASSした。V20HLの12MHz品の可能性がある(はせりんさんより)

 LSIの動作周波数の上限を決めるものとしてクリティカルパスというのがある。内部の論理でいちばんタイミング的に厳しい部分が足を引っ張ってしまう。SBCV20のBASICは8080エミュレーションモードで動作していることを考えると、ノーマルV20の8080エミュレーションモードのどこかにクリティカルパスがありそうな気がする。
 また、V20は8088と差し替えクロックジェネレータも交換して12MHz動作でPCXT互換機を売っていた頃があるので実力でそのくらいで動きそうではあるが、残念ながら12MHzの発振子を持っていない。

 ということでこれ以上はV20HLの良品がないと確認できないのでどなたか挑戦してみてください。いちおう別のところからオーダーしてみましたが本物が来るかどうか……


skyriverさんのコメントを受けて写真追記:

uPD70108C-10 本物
IMGP3701
IMGP3702

uPD70108HCZ-16 ? (白字は私が書き込んだもの) ebay経由adeleparts2010より5個セット
IMGP3703
IMGP3704

uPD70108HCZ-16 16MHzでは動作せず12MHz OKebay経由CHIPS GATEより
IMGP3705
IMGP3706







SBCV20とクロックジェネレータ

 電脳伝説さんのSBCV20キットが発売になりました。

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

 技術資料とデータパックはそれぞれの商品説明のページにリンクされている。これによるとV20の代わりに8080を動かすためにはクロックジェネレータをuPD71011Cから8284Aに交換し、クロックを分周してUSARTの通信用クロックを作っている74HC4040のタップを切り替える。これは8088がデューティ比1:2のクロックを必要とするのでi8284Aが大元のクロックを÷3するため。V20は1:1のクロック入力でuPD71011Cは÷2。昔8086搭載パソコンにV30を差し替えるのが流行ったけどクロックジェネレータまでは交換してなかったのでタイミング的には実力で動いていた模様。

 さて8088は昨年秋葉原でなぜか新品と思われるものが店に並び、とある方から地方在住の私宛に送っていただいたので動かそうと思ったのだけど上記の変更に加え水晶振動子を14.7456MHzに交換しなければならない。これは準備していなかったのだがUSARTの通信クロックを独立させればと以前やった『SBC8080SUBボードのクロックをPICで』と同じ手を使った。

2021-01-24 17.57.02

 74HC4040の代わりに小基板をつけて、osc1536.hexをPIC12F1822に書き込み搭載。osc1536.hexについては『モトローラ6800伝説』とSBC6800ルーズキットを参照のこと。

 配線はこちら。
2021-01-24 19.38.25

 PIC12F1822をICソケット経由で実装するとすぐ下になる抵抗とダイオードに干渉するけどちょっと浮くだけだしまあいいか。
2021-01-24 17.58.04


 さて、これでよかろうと動作確認してみたら文字化け。
2020-12-30 12.19.48


 クロックは周波数カウンタで確認してちゃんと出てるけどなんでだろうか?


 これはクロックジェネレータがバイポーラかCMOSかの違いで水晶振動子の両端を抵抗でGNDに落とすか10pFのコンデンサで落とすか処理が異なっていたのが原因。これは知らなかった。

 データシートを見るとバイポーラの8284Aだと510Ωの抵抗で水晶振動子の両端をGNDに落としている。
スクリーンショット 2021-01-24 18.55.54

 このあたり気になったのでFM-11の8088カードで確認したら同様だった。ただしVccにつなぐ30pFのコンデンサはなかった。

 SBCV20基板の10pFコンデンサの足をカットし、裏面に抵抗(680Ω)を付けて動作OK。
2021-01-24 17.57.17

2020-12-30 22.07.36



UPD71011データシート(renesas)を見るとコンデンサで処理してある。8284Aと動作が同じuPD71084を使う場合はCMOSなのでuPD71011Cと同様にしなければならない。

参考:V20/V30の周辺デバイス(Electrelic)









SBCF8の組み立て

 aitendoにスポット入荷したFairchild F8。私は二巡目で入手した。このままではただのコレクションになってたところを電脳伝説さんのSBCF8を組み立てる機会に恵まれたのでやってみた。

 SBCF8はSBC8080と同様にSBC8080SUBボード上のメモリとUARTを使用する。また、今回からはバス上で使用したかったためSBC-BUS Rev.02とそれにコネクタをあわせたSBC8080SUBボードを先に作った。
 SBCF8はSBC8080と同等の5V→12V昇圧回路があるが部品を探し出すのが面倒だったため秋月電子から購入したDCDCコンバータを使用した。これは±12V出力のものだが手持ちでこれしかなかったため。ちょっと割高。
ほぼ部品は手持ちでOKだったが2MHzの水晶振動子は別に入手。4MHz以下くらいの水晶振動子は入手しずらくなっている感じ。
2020-11-28 04.08.17

 さて動作確認をしたのだが動かず。2つの問題点があって、ひとつはSBC-BUSに1つずれて挿入していたこと。これでも電源ははいってしまうので気付くのが遅れた。もうひとつはDCDCコンバータの配線が切れてしまっていたことでVGG(+12V)が供給されていなかった。ここではついでにDCDCコンバータ前後のコンデンサを余裕がなかったかな?程度の考えで3.3uF→33uFに交換している。
2020-12-07 00.58.47

TINY BASICが動きました。
2020-12-07 00.59.48

USB電源アダプタを使用して、消費電力は5.14V/0.25Aで約1.3W。
IMGP3683

 ついでにVGG/VCC確認用のLEDを追加。
IMGP3689

 これで12Vを確認。
IMGP3686

 電脳伝説さんありがとうございました。



F8関連で探した資料は以下:

http://aitendo3.sakura.ne.jp/aitendo_data/product_img/ic/MOSTEK/MOSTEK_Microcomputer_Data_Book.pdf

http://datasheets.chipdb.org/Fairchild/F8/fairchild-3850.pdf

www.bitsavers.org/components/fairchild/f8/F8_prelimUM_Jan75.pdf

https://www.chessprogramming.org/Fairchild_F8

https://orphanedgames.com/videobrain/f8_programming/f8_programming.htm

SBC8080SUBボードのクロックをPICで

 なにやら昔のI/O誌の記事タイトルみたいになってしまったが。

 SBC8080SUBボードはROM/RAM/i8251とそのシリアル通信用のクロックである153.6kHzを生成する74HC4060と19.6608MHzの水晶振動子で構成されている。今回このボードをもう一枚作ろうと思って部品を探したらHC4060と水晶振動子の手持ちがなかったのでSBC6800やSBC6809でACIAのシリアル通信クロックとして使われているPIC12F1822を使ってみた。

 これでもうわかると思いますが整理しておきます。


それぞれの技術資料を参照。PIC12F1822はSBC6800データパック中のosc1536.hexを書き込んでおく。

 HC4060の4,5,6,7,10,11,12,13ピンの箇所に8pinのICソケットを実装。
2020-11-27 16.52.50

 ハンダ面で配線。BAUD RATE選択のパッド1部分はカット。
PIC12F1822(osc1356)のpin1=+5V、pin8=GND、pin5=CLK出力。写真のように配線。
2020-11-27 16.53.10


 SBC-Bus Rev02(レトロな雰囲気)を組み立ててクロックをi8251側のピンで確認。よさげ。
じつはこの写真には大きな間違いがあってコネクタがずれたまま実装されているのです。動かなくて悩んだ。
2020-11-27 23.39.55

 ついでに作ったSBC8085との組み合わせで動作OK。
2020-11-30 17.13.54

 以前はSBC8080/SBC8085といったCPU側のハンダ面に40Pメスコネクタを、SBC8080SUBボードの部品面に40Pオスコネクタを付けてましたがこれ以上拡張のしようがないので改めて作り直したのでした。今回のSBC8080SUBボードはL字の40Pオスコネクタで、以前のCPUボードに挿して動作確認もOK。
 SBC8080+SBC8080SUBボード、SBC6800のPICを使わなかったのは作りやすさの難易度を下げるためだったのかなと想像します。最近だと入手しやすいROMライターのTL866IIPlusでhexファイルをPICに書き込ませることができるのでだいぶ楽です。




PLDR6502:SBC6800で6502を動かすボード

 電脳伝説さんのSBC6800をベースにCPU部分を差し替えるだけで6502にするドータボード、PLDR6502を作りました。


※PLDR6502基板配布中です。twitter経由でご連絡ください。




上記改造については各所で追試していただきました。

SBC6800で6502を(Electrelic 電子的遺物の世界へようこそ)

 PLDR6502はSBC6800上の6800を外して代わりに取り付けるだけで6502ボードにすることができます。以前行ったLS138の改造は不要です。



- PLDR6502回路図 -

PLDR6502V01L01-sch
・W65C02S-RDYはR1でプルアップ/NMOS 6502、R65C02では~HALT。J4ショートで接続可(通常オープン)
・W65C02S-VPBはJ3オープン/NMOS 6502、R6502はJ3ショートで電源接続(実際にはオープンのままでも問題ない)
・プルアップ抵抗R3はSBC6800側LS138に与えられるVMA信号の代わりで常にenableにする
・R5~R12はW65C02Sのデータバスプルアップ用。省略可
・パスコンC1は省略可


- 組み立て -

 PLDR6502は秋月電子C基板サイズ(72x47mm)です。
2020-09-28 16.08.37

必要な部品:
丸ピン40P ICソケット x1
40P ICソケット x1
40P 連結ピン x1
抵抗 3.3K〜10KΩ x4 または4素子集合抵抗


 裏面のSBC6800との接続部分に丸ピンICソケットをハンダ付け後、ソケットの桟を切断。ICソケットは脆いものもあるので注意。
IMGP3640

  基板の表側に先程ハンダ付けしたICソケットのピンがこれからハンダ付けする6502用のICソケットと干渉するので切り詰める。
IMGP3641

 40P ICソケットとプルアップ抵抗R1~R4をハンダ付け。ここでは集合抵抗を使用。
IMGP3642

 これを動作するSBC6800上の6800と交換して連結ソケットを使い取り付け。ROMも6502用のものに交換。
IMGP3644

 これは集合抵抗を使わずバラの抵抗を使った例。
IMGP3646

 連結ソケットを直接ハンダ付けして取り付けることもできますが、SBC6800のDIP部品をソケット経由で取り付けている場合少し干渉します。ハンダ面から突き出たピンをカット。
IMGP3647

 丸ピンICソケットをPLDR6502の裏面に取り付け、SBC6800との間を連結ピンで接続すれば干渉しません。
IMGP3649

連結ピンは以下のもので確認しました。(いずれも秋月電子)
【P-00269】 丸ピンIC用連結ソケット(両端オスピン・1列20P) 1×20
【P-00268】 連結ソケット(両端オスピン)40P



 設計データ一式はinventhubで公開しています(KiCad 5.1.6)。PLDR6502V01L01.zipはガーバー一式でこれをそのままpcbgogoに発注できます。

※inventhubはプリント基板の配置配線を表示できますが.jpgや.pngを今のところ直接表示できません。


 さて最後に。この基板の名前はパイルダー6502と呼ぶんじゃ。これが言いたかった……


ポピニカ魂 PX-04 ホバーパイルダー
BANDAI SPIRITS(バンダイ スピリッツ)
2009-06-27


ザイログZ80伝説 SBCZ80の組み立て 〜船頭ひとりでも船山に登る〜

 楽しみにしていたザイログZ80伝説、到着が待ちきれず先に版元のPDFサービスで読んでしまいました。ザイログ社の伝記では知らなかった話がいっぱい。アンガマンバスのネットワークカード使ったことあったなあ。
 で、書籍の初回特典としてSBCZ80の基板がついてきたので早速組み立ててみたのだけれどもなかなかすんなり行かず結局三週間くらいかかってしまったので以下にトラブルを整理します。

結論としては

(1)ICソケット接触不良x1
(2)SIO-D1のハンダ付け不良x1
(3)IC間違い ×LS175 ○LS157
(4)ICソケット挿入時にピン曲げ

とこれだけのインシデントが発生しておるのです。

2020-08-23 13.30.21

 DRAMとZ80 SIO/2は若松通商から手配、のはずが部品が見つからず出荷遅れ。そこでオレンジピコよりDRAMとZ80 SIO/2を手配し数日で着荷、動作確認。しかし何も応答しない。
 電源とクロック周りの確認。HC4040からCPU、SIO/2にクロックは行っている。RX/TX用のクロックもOK。では定期的に発生しているはずの~RAS、~CASを観測してみると~CASが出ていない。IC10 LS00のソケット接触不良だった(1)。挿し直しで~CASは出るようになった。

→ 手持ちのICソケットが板バネ式の古いものだと酸化して接触不良を起こす可能性がある

 なおもコンソールに応答はないのでSIO周りの配線を再確認。テスタで追っていくとD1にハンダ付け不良を見つけた(2)。

 さて、これでも何も出力されない。調査を簡単にするため、ROMをDRKILLERにする。これはDRAMのウォーミングアップとSIOの初期化、メッセージの出力、リフレッシュ抑止状態でのメモリテストと追いやすい。出るべきメッセージが出ないのはSIO近辺の問題か?そこでSIOに対して~IORQが出ているかどうかを観測。これには自作のジグ、ロジックチェッカーを使用した。これで~IORQのレベルやトリガが発生したかどうかを知ることができる。結果は電源ON/RESET時にSIOに対してアクセスあり、しばらく間を置いてアクセスが数度あり。DRKILLERが動作してメッセージを出しているように思える。
2020-08-29 18.49.17

 →思えばここで(3)の石間違いに気付いていれば動いたのだ。実際はアドレスバスが衝突して変な動きをしていた。

 USBシリアルインターフェースは他のマイコンのボードで動作確認をしてみたがOK。プログラムが動作しているように見えて文字が出力されないので疑いはSIOに向く。しかし確証はない。マルツよりZ80 SIO/0を手配。これに差し替えてみたが現象は変わらず。他のところから手配した半導体が同じように壊れている可能性は低いのでSIO周りの配線を再確認してみたが問題なし。

 そうこうしているうちに他の皆さんは同じ書籍付録の基板を完成させ、動作報告が流れてくる。よし、これはリファレンスとしてもう一枚手配し作ってみよう、ということでオレンジピコより基板を手配し一時間半くらいでハンダ付け、一発で動いた。ん?なんか本末転倒のような気もするぞ。
2020-09-13 19.32.37


 さて1枚めの問題はなんだろうか。2枚めの基板に載っているIC類は動作確認済みとみなせるのでこれをごっそり1枚めの基板に移し替える。(ここで(4)の問題が発生している)

 動作が変わった。なんらかの文字が連続して出る。これはDRKILLERの最初の文字列を表示する箇所と考えると、文字列の先頭番地を示す箇所がおかしくなり、終端の00Hが見つからずいつまでも表示を繰り返しているように思える。DRAMを外して電源を入れると■(FFH)が表示されるので、文字列として指しているのはDRAMの番地。
2020-09-13 20.26.33

 疑うのはアドレス/データバスの断線またはショートだが、すくなくとも0018Hまではコードは動作しているのでbit4~bit0の間になにかがあるはず。しかし導通チェックをやってみても問題なし。
 動作中に基板上のICに対して指で押し圧力をかけると表示される文字が変わる。接触不良が疑われる挙動だがこれは(4)への大きなヒントだった。が、気付いていない。

 制御線とアドレス/データバスがショートしているのだろうか。これ以上調べるのはきつい。では基本に戻って各ICの電源供給を確認してみるか。するとIC8 HC04の電源が約2.5Vと中途半端。目視するとpin14(Vcc)とpin13(GNDに落としてある入力)がよれてショートしていた(3)。2枚目の動作するボードから移し替えるときに曲げてしまったらしい。正しく指し直すと動作した。
IC8の電源とGNDがショートしかかって挙動がおかしくなっている。これはRAS/CASを生成している部分なのでDRAMの制御に影響し、ROMアクセス中でもDRAMがデータを出力しぶつかっていたと考えられる。基板に物理的に圧力をかけて変化するのもピンのショートの状態が微妙に変わっていたからと推測する。

 さて、残りの疑問は2枚目の基板に動くICの載せ替えを行ったら文字が出るようになったことの理由についてだ。もともと挿していた標準ロジックについてはTL866CSの汎用ロジックをテストする機能で動作確認済。それらのICを見ているとセレクタLS157をFF LS175と間違えている!写真で確認したら間違えたまま動かしていた(4)。

スクリーンショット 2020-09-14 0.03.21-a

 今回は不注意と目視確認不足が根本原因だった。配線のショートなどを疑い確認作業にはいる前にまさかとは思ったが電源供給のチェックからやり直したのは正解だった。いったん思考の隘路にはまると遭難一直線となってしまうので風呂にはいる、プラモを作る、ちゃんぽんを食べに行くなどの適切なブレイクを入れるのは重要かもしれない。あ〜動いてよかった。

追記:正常な基板でもDRAMを抜いた状態でDRKILLERを動かすと延々と同じ文字(髑)を出力し続けます。DRAM上のスタックが使えないせい。

ザイログZ80伝説
鈴木哲哉
ラトルズ
2020-08-25


Z8000のエンディアン調査 →ビッグエンディアン

 Z8000のエンディアンはどうなっているのか気になったので調べてみた。電脳伝説さんのSBCZ8002があるので簡易モニタを利用して確認した。

 Z8000のレジスタは以下のとおり。

スクリーンショット 2020-02-28 23.59.52

 基本は16bit幅の汎用レジスタR0〜R15で、R0〜R7は8bit幅のRH0〜7、RL0〜7で上位/下位バイトをアクセスできる。RR0,2,4,6,8,10,12,14は32bit幅のレジスタで16bit幅のレジスタをペアで使う。RQ0,4,8,12は64bit幅の4レジスタペアでこれは直接メモリアクセスはできず、乗算や除算で使用する。

 レジスタの指定は4bitで、どの幅のレジスタ(RH/RL,R,RR,RQ)を使うかは命令によって決まる。
Z8000regassign

 こんな感じで自分の直感とは違っていたのでハンドアセンブルで間違えたのよね。
 RH0~RH7 → 0~7 / RL0~RL7 → 8~15 でした。

 ではエンディアンの確認方法。メモリ上の8100H番地より4バイトのデータを置き、これを元データとする。
(1) 4バイトのRR0にロードし、8108H番地からRH1,RL1,RH0,RL0の順に1バイトずつストア。
(2) 4バイトのRR0にロードし、810CH番地からR1,R0の順に2バイトずつストア。
(3) 2バイトのR0にロードし、8104H番地からRH0,RL0の順に1バイトずつストア。
91F0 PUSHL @R15,RR0
91F2 PUSHL @R15,RR2
2102 8100 LD R2,#8100
2103 8108 LD R3,#8108
1420          LDL RR0,@R2
3231 0000 LDB R3(0),RH1
3239 0001 LDB R3(1),RL1
3230 0002 LDB R3(2),RH0
3238 0003 LDB R3(3),RL0
3331 0004  LD R3(4),R1
3330 0006 LD R3(6),R0
2103 8104 LD R3,#8104
2F20 LD R0,@R2
3230 0000 LDB R3(0),RH0
3238 0001 LDB R3(1),RL0
95F2 POPL RR2,@15
95F0 POPL RR0,@15
9E08 RTS
 前後でレジスタをスタックに保存してます。実行結果はこのとおり。

Z8000-IXUN

 'UNIX'の文字列をロードしてRR0の上位から1バイトずつストアしたら'IXUN'となった。R0は上位バイトがRH0で下位バイトがRL0なので、16bit幅に関してはビッグエンディアンとなる。

 ここで残る疑問が。RR0はR1:R0なのだろうかそれともR0:R1なのだろうか?R1:R0ならばPDP-11とも異なるmiddle endianとなり、R0:R1ならば正真正銘のビッグエンディアンとなる。RQ0についても同様。
仕様書を読んでみてもRR0のペアの順番について明確に書いてあるところが見つかりませんでした!!いかがでしたか!!
 これについてはレジスタペアを使った演算をやってみて確認する予定。次回につづく。

追記:レジスタペアについて調査。以下のとおり上位から小さい番号のレジスタ順に並びます。
32bitレジスタRRのペアは RR0 = R0:R1
64bitレジスタRQのペアは RQ0 = RR0:RR2 = R0:R1:R2:R3

以下は確認コード:
93FA PUSH @15,R10
91F4 PUSHL @R10,RR4
91F6 PUSHL @R10,RR6
210A 8100 LD R10,#8100
8D48 CLR R4
8D58 CLR R5
8D68 CLR R6
8D78 CLR R7
2105 0123 LD R5,#0123
1904 4567 MULT RR4,#4567
33A4 0000 LD R10(0),R4
33A5 0002 LD R10(2),R5
33A6 0004 LD R10(4),R6
33A7 0006 LD R10(6),R7
1406 0123 4567 LDL RR6,#01234567
1804 1122 3344 MULTL RQ4,#11223344
33A4 0008 LD R10(8),R4
33A5 000A LD R10(A),R5
33A6 000C LD R10(C),R6
33A7 000E LD R10(E),R7
95F6 POPL RR6,@R15
95F4 POPL RR4,@R15
97FA POP R10,@R15
9E08 RTS
 32bitレジスタペアのRR4について、R4:R5と仮定しR4=0,R5=0x0123を設定、MULT命令で即値0x4567を掛けてRR4に保存。その後8100Hから2バイトずつR4,R5,R6,R7を書き込む。乗算の結果0x004ee415がそのまま見えるので32bitペアの順序は仮定どおり。
 64bitレジスタペアのRQ4について、RR4:RR6と仮定しRR4=0,RR6=0x01234567を設定、MULTL命令で即値0x11223344を掛けてRQ4に保存。その後8108Hから2バイトずつR4,R5,R6,R7を書き込む。乗算の結果0x00137e8562dff45cがそのまま見えるので64bitペアの順序は仮定どおり。
検算はgawk --bignum 'BEGIN{printf "%lx ",0x12345678*0x11223344}' などなど。

Z8000-MULT


 ということでZ8000のレジスタペアは上位側が小さい番号であり、メモリアクセスはビッグエンディアン。

 さて、以上のことはソフトウェア側から見た話であり、ハードウェアでメモリのセレクトを見るとアドレスラインのA0=0のときに奇数アドレスとなるのでバイト単位で入れ替わるという話になります。ややこしいですね。


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 (中古品)

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
鈴木哲哉
ラトルズ



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でも良さそう(後で気づいたけど千石やマルツにあった)。

SBC6303ルーズキットの組み立て

 SBC6303ルーズキット(電脳伝説)の販売が始まったのでさっそく組み立てた。

SBC6303ルーズキット(スイッチサイエンス)
SBC6303用LILbug ROM(スイッチサイエンス)

 だいたい手持ちの部品でOKだった。HC573だけなかった。手持ちの関係で1kΩ→1.2kΩ、LEDの電流制限抵抗は眩しすぎないよう4.7kΩに変更。HD63B03RPを使用。DCジャック部分は長孔が空いているが、ピンタイプの部品をハンダ付けした。
2018-SBC

 サンプルをロードして動作確認。OK。何も動かしていない状態での電流は0.01A。
2018-SBC-ok


 手持ちの部品にやたら古いのがあって30年くらい前に買ったものがいくつかあったので。

 これは長崎にあった電器店が電子部品を扱っていて、そこで買ったICソケット。値段表示が茶色のバーに20.で120円。
2018-SBC-120

 4.9MHzの水晶発振子はピンが酸化していた。
2018-SBC-Xtal



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

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

Amazonで詳しく見る
by G-Tools

SBC6800のクロックアップ

 モトローラ6800伝説はすでにお持ちのことと思いますが、製作することで追体験ができるキットが販売されています。

SBC6800ルーズキット(スイッチサイエンス)
SBC6809ルーズキット(スイッチサイエンス)

 SRAMは32Kx8bit品を使っていますが問題ありません。
2018SBC6800

 この回路ではPIC12F1822によるクロックジェネレータがうまくMC6800用の二相クロックを生成していますが、せっかく2MHzまで動くBタイプ品を使っているのでソースをいじってサイクルアップに挑戦してみます。
 モトローラ6800伝説のp.100に掲載されているソース(CD-ROMでも提供)で以下の箇所を修正:

PR2 = 7; → PR2 = 5;
CCPR1L = 4; → CCPR1L = 3;

 これでビルドすると1.33MHzのクロックジェネレータになります。上限1.5MHz動作のAタイプでもOK。

2018MC6800clk

 すみませんが雰囲気で修正したのでこれ以上PWMで速いクロックが生成できるかはわかりません。たぶん無理。ただPIC12F1822は32MHz動作で古いマイコン用のクロック源として活用できそうなので色々調べている所です。


モトローラ6800伝説モトローラ6800伝説
鈴木哲哉

ラトルズ 2017-12-16
売り上げランキング : 42896

Amazonで詳しく見る
by G-Tools

記事検索
プロフィール

hardyboy

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