まごころせいじつ堂

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

Mini PETとデータセット

 まず最初に。MiniPETだがv1.42はUserPortが入れ替わっているらしい。→Mini PET Update

ではMiniPETのカセットポートについて。
Casette Port(C64 Wiki)
 このカードエッジコネクタによる接続はPET2001の後、VIC-20(VIC-1001)やCommdore64まで使われていた。読み書きはデジタルの入出力が直結されている。

 MiniPETはキーボード付のKIT Aと元々の筐体に内蔵するためのKIT Bがある。KIT Bは電源変換の基板と内蔵用カセットに接続するための基板が付属しキーボードは付いていない。スタンドアロンでも使いたかったのでKIT Aを購入したのだが手持ちの初代PET2001のケースに内蔵したいので変換基板を作ってみた。
 4mmピッチの片面カードエッジコネクタ6Pで2ピンと3ピンの間には溝がある。サンハヤトのUK-10P-67をカットし、溝はヤスリで加工した。
IMGP3606

 こんな感じ。上から
PIN1 GND
PIN2 +5V
-- -- --
PIN3 MOTOR
PIN4 READ
PIN5 WRITE
PIN6 SENSE
IMGP3607

 回路図。
スクリーンショット 2020-07-21 01.10.09

 6本のワイヤーで引き出せるようにはんだ付け。
IMGP3609

 +5VとMOTORについてパイロットランプをつけてみた。
IMGP3608

 MiniPET本体のカードエッジコネクタをカセット#1にするか#2にするか選択できるが、その残ったほうのピンに接続する。
IMGP3610

 +5Vは電源が入っていれば常に供給される。MOTORはデータセットのモーターが動くときにONになる。LOADやSAVE中はMOTORがONになり、終了したらOFFになる。REW/FF中は常にONになる。
IMGP3611

さて元のPET2001の回路図を読んだりと色々調べていたらモーター駆動の電圧は9Vではなく約6VであることがわかったのでACアダプタの電圧を変えながら観測してみる。

ACアダプタ  DC9V / PLAY時 5.93V / REW後テープ停止 5.86V
ACアダプタ DC12V / PLAY時 6.01V / REW後テープ停止 5.93V

ということでMiniPETはDC12VのACアダプタを使っても問題なさそう。



Mini PET v1.42キット

MINI PET(TFW8b.com)
Mini PET Options(tynemouth software)

 たのしみにしてたキットが届きましたよ。Mini PET v1.42。PET2001N相当のパソコン組み立てキット。KIT Aはキーボード基板付きで単体で動作。KIT BはPET2001のマザーボード置き替え用でデータセット(カセットレコーダ)と電源接続用の基板が別に付属している。
動作させるには9VのACアダプタが必要。ビデオ出力があるので画面表示はご家庭のテレビでできる。
2020-07-10 18.36.35

 サイズは純正の四分の一くらい。
2020-07-10 18.40.46

 組み立ては簡単。注意点をいくつか。
以下の左上の抵抗は1Kのシルクが塗りつぶされている。実際は470Ω。
2020-07-11 00.08.12

 6.8Vツェナーダイオードと小信号ダイオードの区別に注意。
2020-07-11 00.09.12

 あと、キーボード用のコネクタはオス側をマザーボード側にはんだ付け。こうしないと実物のキーボードが挿せない。

 PET2001内蔵CRTに接続する端子はオプションだけどこのようにコネクタに挿した状態ではんだ付けするとうまくいく。
2020-07-11 02.07.51

 さて集中して3時間くらいで完成しましたよ。
2020-07-11 02.24.17

 MINI PET BASICが起動。OK。
2020-07-11 02.46.17

 キーボード部分も組み立て。
2020-07-11 19.55.57

 自己診断テストも通りました。
2020-07-11 22.14.08

 Mini PETは現在入手できる半導体を使って主要LSI以外TTLだったPET2001を再現している。MPU/PIA/VIAはWDCのチップ、IEEE-488のドライバはLS07で構成、ビデオ関連の回路はATMega164(マイコン)で実現しクロックもここから供給している。
 オリジナルのPET2001のVRAMは2114 x2個で1Kバイト、ビデオタイミングの回路ではサイクルスチールで読み出して表示している。Mini PETではVRAMを1KバイトのDualport RAMで構成し、MPU側からの読み書きに影響を与えずにATMega164で読み出してビデオ出力を行っている。PET2001のモデルによってはビデオ信号と水平/垂直信号の極性が異なり、また垂直同期周波数も15KHz/20KHzと異なるらしい。加えてMini PETのビデオ出力はNTSC/PALに対応しているので、これらの違いを吸収するためにATMega164のソフトウェアによるビデオ出力にしているのだろう。

 ACアダプタはDC9V品が指定されている。これはデータセット(カセットレコーダ)のモーター駆動として使われている。PET2001の回路をみると安定化されていない9V接続となっている。データセットを使うのであれば9V品にしておくのが無難。
カセットの動作は以前保存しておいたプログラムで確認。セーブもOK。
2020-07-11 22.15.55

 あと、気になったことをテストしてみた。これは画面にキャラクタを繰り返し表示するプログラム。
IMGP3604

 VRAMの開始番地を変えながらテスト。VRAMのイメージは$8000~から1KBごとに$8400~ $8800~ $8C00~ とあったので初代PET2001相当。

 このような表示でCGROMの設定用DIPスイッチを切り替えてみる。日本語のキャラクタセットに切り替えると\が¥に変化する。ATMega164でリセット後にCGROMを一回読み込んだまま表示しているのかと思ったら意外にも毎回読み込んで表示しているようだ。
IMGP3605

 さて、あとはPET2001の筐体に組み込んでみますかね。


FM77AV用Z80Hカード韋駄天の回路図訂正と補足と蛇足

 I/O 1987年10月号、1987年11月号および6809活用研究(工学社)に掲載された韋駄天CP/M Z80Hカード。回路図に誤りがあってその後訂正も掲載されず、紙の資料も紛失してしまったので実物から正しい回路図を起こした。

 部品面
IMGP3592

 はんだ面
IMGP3593

 レイアウト
IDATEN-Z80H-LAYOUT

 回路図
IDATEN-Z80H-SCH

 回路図は実物からトレースしてそのまま起こした。
・SRAM(U2,U3)に対する*WEの論理が訂正箇所です。
・U12のLS02は実質不要で、U10のLS04の空きで代替可能。

 FM77AVの拡張RAMスロット図(FM-7シリーズ テクニカルノウハウ 第15章ハードウェア回路図)
IMGP3594

補足:
・6809とZ80Hのやり取りはFM77AV側の$FD64番地と$20000-$2FFFFの拡張RAM領域で行う。
・FM77AVのリセット後、Z80HはU4A(LS74)によりZ80RESET信号が有効になりリセットがかかったままの状態になる。この解除と再リセットは6809側で制御する。Z80にリセットがかかっている間はZ80のバスがハイインピーダンス状態のままであることを利用している。
・Z80Hから6809への要求はZ80側のI/O空間ライト動作でSETATTN信号がU4B(LS74)をセットする。6809は$FD64番地のbit0をポーリングしてZ80Hの要求を確認する。Z80Hがバス開放状態(Z80RESETまたはBUSACK)になればZ80BUSY信号が有効になりU4B(LS74)をクリアし要求を取り下げる。
・6809からZ80Hへのバス開放要求は$FD64のbit7書き込みで制御する。
・6809から$FD64のbit6,bit5に"1"書き込みでZ80HへNMI/INTを発生させる。
・バス開放要求/割り込み要求はU5(LS175)に保持される。Z80HからのI/O空間アクセス、またはZ80RESETで解除される。
・6809からZ80Hのバス開放状態を確認するには$FD64のbit7を読みZ80BUSYの信号をみる。
・MEMSEL信号は6809から$20000-$2FFFFのRAMをアクセスするときに有効になる。U14(LS138)でデコードして生成。Z80BUSY信号もデコードに入っているのでZ80H動作中は6809から読み書きできない。
・U2,U3(HM62256)に対するRAMOEはMEMSELまたは!Z80BUSYによるZ80動作中に有効。
・RAMWEは6809側の書き込み(MEMSEL&RWB)またはZ80Hのメモリライト(WR&MREQ)で有効。
・Y1(X'tal) 10MHzは実力で動作した。本来は8MHz。

蛇足:
・MEMSELを生成しているU14(LS138)にRWBも突っ込んでRAMWE用の信号を作ってもよかったかな?いや無理か。
・SRAM、OEがenableのままでWEがenableになってもいいんだ…(OE Low Fixed) HM62256 Datasheet
・当時Z80Hと32KバイトのSRAMは若松通商で買った最先端テクノロジーだ。今なら20MHz動作を狙えるか。
・master/slaveで言えばリセットが掛けられるZ80は6809に生殺与奪権を握られているけどCP/M動作中はZ80の要求を6809側ですべてこなしてるのよね。
・記事は3回連載の予定だったが強化版CP/Mが完成せず6809活用研究へと繰り越した。
・移植元となったX1用ランゲージマスター(CP/M)。ベスト電器に注文して届いたら店員さんが「私もX1使ってるんですよ」と嬉しそうに話しかけてくれたが「すみませんFMユーザーです…」申し訳なかった。
・初期の動作テストには@minemaz氏に協力してもらった。私Z80書けなかったので。
・Oh!FM誌に似たようなシステムが掲載されたのでたいへん焦った。同じ時期に同じようなアイデアはあるんだね。
・記事の反響というか感想すらまったくなかったのでちょっとさみしかった。

追記:
・128Kx8のSRAMに交換することを考える。TC551001AS6C1008もライト時*WEがアサートされる時は*OEはどちらの状態でもよい。



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



PASOPIA(PA7002)のマスクROM TMM2364Pのタイミング

 PASOPIA(PA7012)の分解写真と予防保守の続き。内蔵のOA-BASICは$0000-$7FFFに位置し、8KバイトのROM 4個で構成されている。これを追っていくと写真左上のLS139でデコードされ、右下-右上-左下-左上の順に$0000~、$2000~、$4000~、$6000~に対応する。
PASOPIA-INTERNAL-ROM-MARK

 最初のROMは普通のUV-PROMで残りはマスクROM。出荷直前にパッチでも当てる必要があったのだろうか。これらを前回作ったROMリーダで読んでみる。するとマスクROMが読めない。正確には常に同じ値になってしまう。
/CEを変化させてないのがいけないのかなと /CE="H"、アドレス設定、/CE="L"、データ読み出し の順で
やってみたら読み出せた。これはどういうことかな?
TMM2364Pのデータシートを見てみるとVpp(1)="H"、CS1(27)="H"、CS2(26)="H"、/OE(22)="L"にする。それぞれ基板上ではそのように接続されていた。
(CS1/CS2のenableはプログラマブルらしいがここでは"H"と判断できる)
となると/CEの挙動が通常のPROMとは異なることになる。

 データシートをみると/CEの立ち下がりでアドレスをラッチして後はOutput Enableに出力を任せるような動作だった。
スクリーンショット 2020-06-08 16.41.58
 となるとTMM2364PがROMライタTL866CSで読めなかった理由も推測できる。Device IDを厳密に見て弾いたのか、あるいはTL866CSが/CEを変化させないでenableにしたまま、というのが考えられる。

 また、はまってしまった。

ROMリーダのスケッチもアップデートしときました:


Arduino MEGA直結ROMリーダーのトラブル

※追記 27512(64Kバイト)まで対応のソフトができました → readROM27512.ino Intel HEX対応


 ROMライタTL866CSでは読めないマスクROM(TMM2364P)があったので、Arduino MEGA用のアダプタを作った。秋月電子の片面D基板、ピンヘッダははみ出るので少しけずっている。
IMGP3589

 Vcc-GND間に3.3μFの電解コンデンサと0.1μFのセラミックコンデンサ。
IMGP3590


 ROMの端子とArduino MEGAのピン番号の対応は以下のとおり。27512の場合はROM(1)がA15、ROM(27)がA14、ROM(26)がA13。
あとpin52にタクトスイッチを繋いでGNDに落としている。これはPROMダンプ開始用。
readROM


 さて、こんな単純な配線なのにArduinoスケッチを書いて読み込んでみるとデータが化ける。なぜだ。
IMGP3588

データの読み込みが不安定な時点で以前の経験を思い出すべきだった。
ここでやるべきだったのはアドレスと制御線の見直し、ソフトでの初期化だった。


 解決までの顛末は以下のスレッドにある。

 さて、解決までには間違った道をどんどん進んでいっているのだが以下に整理しておく。

・ハードウェアの絞り込み
PROMの2764/マスクROMのTMM2364P/W27C512で読み込み時のデータ化けが発生する。W27C512に特定のパターンを書き込んだものを調査対象とする。

・Arduino MEGA 2560のバリエーションによるものかどうか
互換品を3つ持っていたのでそれぞれで確認。どれも同様に発生するのでArduino MEGA個別についてまわる問題ではない。1枚を選んで調査対象とする。

・類似例の調査
どこかのだれかが同じようなことをしていないか検索。あった。
これによるとほぼ同等のハードウェア構成で成功している。ブレッドボード上にPROMを載せてジャンパ線でArduino MEGAに繋いでいるので電気的にはより条件が悪いはずだが動いている。

・土台の確認
上記、The Oddbloke geek Blogのコードをこちらのボード向けにピンアサインを変更し、ダンプを5回実行して結果を比較。5回とも問題なし。

ここまででソフトウェアの違いに問題点が隠されているとわかった。前後してデータ化けの発生率が変わるようなコードの変更(主に時間的なタイミング)をいじっては観測を繰り返している。挿入するディレイによって化け方の頻度が変わるなど、ハードウェアのピンが浮いているような指摘を受けている。

・知恵を借りる
デバッグの状況は適時tweetしていた。こまめに書くことで気付くこともあるし、識者からのツッコミもある。このあたりで泥沼にハマっていたら@mkogaxさんよりコードの初期化漏れの指摘が。
PROMのA15についてArduino MEGAからの出力設定はされていても値が設定されていなかった。この状態で確認したらA15はオープンだった。修正し、ダンプを10回とって比較したら全部OK。

以下は23行目に初期化の抜けがあるコード。


 ということで思考の過程を整理してみました。動物が沼にはまってもがいている様子がわかると思います。突っ込んでくれた皆さんどうもありがとうございました。

 ちゃんとしたPROM読みのコードは次回。



PASOPIA/PASOPIA7のROMPAC1

※追記 表を改版しました

 PASOPIAはROMPAC1というカートリッジを使えば起動時に実行するROMを内蔵のものと差し替えることができる。RAMは64KBの全空間にあり、ROMは0x0000〜0x7FFF。メモリ空間に対する書き込みはRAMに対して行われるのでROMイメージをコピーした後にROMをdisableしてすべてRAM上で動かすことも可能。OA-BASICやMINI-PASCALのカートリッジが存在する。

 これはT-BASIC V1.1のROMPAC1カートリッジの中身。サイズは秋月電子のB基板程度。
IMGP3510

IMGP3509

 さて、PASOPIA7もROMPAC1カートリッジのスロットを持っているが、このT-BASIC V1.1カートリッジを挿しても動作しない。そこでPASOPIA/PASOPIA7の回路図とPASOPIA7テクニカルマニュアルからROMPAC1端子の比較表を起こしてみた。

ROMPAC1-pinassign

 PASOPIA7では一部の制御線が変更/追加になっている。pin11で本体ROMをdisableできるのは共通。pin20は内蔵RAMと、PASOPIA7で追加されたBIOSROMをdisableする信号。おそらくこの端子がT-BASICのROMPAC1ではGNDなので内蔵RAMまでdisableになって、PASOPIAとの非互換部分がどうこう以前に動かない気がする。
 このMEMINH端子はRAMをdisableするためにDRAMの*CAS信号を抑止している。*RASは出るのでリフレッシュは行われる。DRAMの内容を保存したままdisableにできるようになっている。さらにカートリッジに向けて8MHzのクロック($X2CLK)、メモリライト(CWR)、リフレッシュ信号(COLADD)が出ているので、どうもカートリッジ側にメモリとCPUを載せて動かせるようになっているらしい。本体内蔵RAMのデータを保護したまま切り離せるようになっているのもその対応だろう。

整理すると:
・ROMPAC1はPASOPIA内蔵ROMを置き換えて他の言語を動かすことができる
・PASOPIA用ROMPAC1はPASOPIA7に挿しても動かない
・PASOPIA7用ROMPAC1はCPU/ROM/RAMを内蔵したカートリッジも想定している

参考:
PASOPIA7 テクニカルマニュアル
PASOPIA回路図 I/O 1982年11月号
PASOPIA7回路図 I/O 1983年9月号

PASOPIA(PA7012)の分解写真と予防保守

 パソピア(PA7012 OA-BASICモデル)の予防保守ついでに分解写真。回路図はI/O 1982年11月号に掲載されている。

 ケースは底面一箇所のネジを外し、左右にあるツメを押しながら上面を外す。ツメが脆くなっており片方折ってしまった。電源ユニットは上部に載っているだけ。
IMGP3525

 マザーボード全体 プリンタと液晶ディスプレイへの接続はケーブルで引き出してある。
IMGP3526

 左下 FPASO1 34T775786G01 [B] [D]1
IMGP3539

  右上 カセットのコネクタとBASIC ROM
IMGP3536

 ROM拡大。TMM2364Pは8Kx8マスクROM。なぜか1個だけMBM2764。
[C2]:5315 2B  [C1]:5313 2C
[B2]:5314 2B  [B1]:MBM2764 008D?
IMGP3537

 右下 Z80CTC、キーボード接続用10P ICソケット、Z80PIO、Z80、64K DRAM。
IMGP3528

 中央下 TMM334P(CGROM)、HD46505、8255×3。
IMGP3532

 驚いたことにZ80とCTCはMOSTEK製。MK3880N-4 Z80-CPU
IMGP3531

MK3883N-4 Z80-CTC
IMGP3530

 左上 電源、白黒ディスプレイ、液晶ディスプレイのコネクタ、14MHz発振器。シルクに漢字表記。
IMGP3534

 中央上 リセットSW近辺。RS232Cの信号を引き出す16P ICソケット。これはPASOPIA7にはない。
IMGP3535

 左 PJ4 データ・ファイルユニット。これはPACスロット2と同じもの?
→回路図をみたらPACスロット2(PJ3)と14pinのセレクト信号を除き同一。
PACスロット2 18H〜、データファイルユニット 1CH〜
IMGP3533

 さて電源ユニットだがPASOPIA7で発煙した0.1μF250Vのフィルムコンデンサと同じものは電源スイッチの下にある。ネジはすべて外さないといけない。
IMGP3540

 すでにクラックがはいっていた。これを同等品と交換。
IMGP3541

 交換して元通りに組む。問題なし。
IMGP3543

 ところでパソピアの電源ユニットのパイロットランプはTLG103と思うのだがどうか。



PASOPIA7の電源修理と分解写真

 PASOPIA7でASCIIARTを実行して遊んでいたが
2020-04-19 00.40.19

 発煙!
2020-04-19 00.42.40

 花火のにおい。こういうとき電源スイッチがすぐ切れるパソコンは便利ですね。
分解すると電源ユニット内、ヒューズ隣のフィルムコンデンサが膨らんでいた。
2020-04-19 00.59.37

 上は同等品の0.1μF 250V メタライズドフィルムコンデンサ。これと交換。
IMGP3513


 先にPASOPIA7(パソピア7)のレストア(「僧兵ちまちま」のゲーム日記。)を読んでいたのでそういこともあるのね程度に思っていたらまさか自分のところでも発煙するとは。本当に花火で遊んでるときのようなにおいで電解コンデンサが黒煙を吐いたときのような刺激臭とはまた違います。

 電源ユニットだけ先に通電。よさげ。
IMGP3514

  動作確認。PASOPIAはCOLOR=(パレット番号、色1、色2)で0-7に割り当てられているパレット番号に0-7の色を2つ混ぜて中間色を表示できる。I/O 1983年9月号の回路図を見たら74S189(16bitx4)で色を管理し、$DOTI(大元はCRTCのクロック)でパタパタと色1/色2を切り替えているハードウェアによるタイリング。なのでよく見ると縦縞がわかる。

  分解写真。独自のカスタムICらしきものはない。

 マザーボード全体
IMGP3515

 CPUとBASIC/IPL/BIOS ROM(2764x6)。
IMGP3516

 8255,8255,Z80-CTC,Z80-PIO。中央の20Pコネクタはキーボード用。
IMGP3518

 HD46505(CRTC)
IMGP3519

 2732 これはCGROMかな?
IMGP3521

 カートリッジコネクタ近辺
IMGP3520

 PSG、SN76489 x2
IMGP3523




SBC6800+W65C02Sで2MHz動作

 SBC6800を改造せずにW65C02Sを動かす&unimon_6502の移植で動作確認できたので動作周波数を上げてみる。手持ちのACIAは68B50、2MHz品なので目標2MHz動作。
 SBC6800ではPIC12F1822をクロックジェネレータとして使っている。MC6800用なので相補のφ1(P1A)、φ2を(P1B)ハーフブリッジモードで1MHzを出力しているが、6502用に使っているφ2はハーフブリッジモードでしか出力できない端子(P1B)に割り当てられている。φ1(P1A)側だったらCLKOUTをそのまま使えたみたいだけど。
 ディレイ設定を使わなければデューティ50で2MHzをφ1側に出力でき、φ2はその反転出力となる。これで無改造で使えそうだ。

 SBC6800ルーズキットのデータパックより6800crgenのプロジェクトを持ってきてmain.c内の以下を書き換え、MPLABX4.02でビルドした。
PR2 = 3;
CCPR1L = 2;
PWM1CON = 0;
 以下にmain.cの差し替えとPIC12F1822書き込み用のHEXファイルを置いた。

 波形観測。OK。
IMGP3506

 これを使って動作確認。せっかくなので電脳伝説さんが"SBC6800のプチ改造で6502を動かす"で移植したOSI MS-BASICで確認する。実行速度の確認にASCIIART.BASを使用。
ASCIIART.BASのソースは以下にある。

ASCIIART

 1MHzの実行速度が6分50秒に対して1MHzでは3分25秒とちょうど半分だった。

※はせりんさんのまとめで他にもいろいろな機種でのASCIIART.BASの実行速度の一覧が確認できます。

 さて、さらに上を目指すには。W65C02Sは14MHzまでOKだがACIAが足を引っ張るためW65C51あたりが必要。ただしMC6850との互換性はない。PICを使えば2/4/8MHzが生成できそうだがその間が難しい。最大動作周波数が40MHzのPICを使えば5/10MHzができるかもしれない。この場合はPICのCLKOUTがダイレクトに出せる端子に修正したほうがよさそう。


モトローラ6800伝説
鈴木哲哉
ラトルズ
2017-12-16





YAMAHA RX21Lリズムマシンの分解写真

 ハードオフで千円で買ってきたヤマハのリズムマシンRX21L。一応動く。中は8bitマイコンでもはいってるんだろうか。

YAMAHA RX21L(YAMAHA)

 1985年で42000円。当時のパソコンはFM77AVなどでそのくらいの時期。RX21Lは音源の出力とMIDIに加えカセットテープインターフェースも持っている。リズムパターンをセーブ/ロードできるのでほぼパソコン。
IMGP3496

底面のネジを外すだけ。片面基板。
IMGP3497

 音源部。アナログ回路部分はシールドされている。
IMGP3498

 YM2154。
IMGP3503

 コントローラはHD6303。
IMGP3500

 おそらくこれは音源ROM(27128)で差し替えると姉妹機のRX21相当になるのだろう。右は2KバイトのRAM。
IMGP3504

 キャラクタLCD部分はHD44780。これは現在一般的なキャラクタLCDのコントローラ。
IMGP3501

 さて、これですよ。
http://www.dtech.lv/techarticles_yamaha_chips.html によるとドラム波形のROMらしいのだがにわかには信じられん。片側全部NCで基板レイアウト時に寄せすぎてしまったんだろうか。

IMGP3502


おしまい

追記:別の人も発見。スレッドにROMの仕様が。


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

hardyboy

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