まごころせいじつ堂

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

PASOPIA

RJ45コネクタを使うシリアル通信の調査

 まずは前回、PASOPIAのシリアルインターフェース PASOPIA232C の続きから。

 当時のシリアル通信、RS-232Cの主なコネクタの形状はDsub25ピンだった。これを現代のパソコンにつなごうとするとDsub9ピン(EIA-574)かそれをUSBに変換するUSBシリアルケーブルを使うことになる。これが結構煩雑で途中にクロス変換やジェンダーチェンジャーが必要になることがある。PASOPIA232Cはストレートとクロス接続をスライドスイッチで切り替えるのでクロス変換は不要だがそれでもこんなかんじになる。
2023-02-18 19.32.04

 そこでCISCOルータとのコンソール接続に使われるRJ45コネクタを使ったシリアル通信を流用することにした。RJ45-8P8Cのジャックなら通常のLANケーブル(CAT5以上の全結線)が使えて取り回しも楽になるはず。

以下はCISCOのコンソールポートに関する資料:

これらの資料によると、CISCOルータ側のコンソールポートであるRJ45ジャックのピンアサインは以下のとおり。

1 - RTS
2 - DTR
3 - TXD
4 - DCD
5 - GND
6 - RXD
7 - DSR
8 - CTS

このピンアサインはうまくできていて、逆順だとシリアル通信のクロス接続になる。これはLANケーブルのクロス接続とは異なり、ストレートに対してロールオーバーと呼ばれている。

 さてこのルータ側にあるコンソールポートはDTEかDCEか?

 これ以前のルータはコンソール接続にDsub9ピンオスのコネクタが使われていた。これがコストダウン目的かRJ45のコンソールポートに変化した。PCとの接続はクロスケーブルだったはずで、そうなるとこのピンアサインはDTEになるはずだが決め手となる文書が見つからない。
 ということでPASOPIA232Cを元にRJ45コネクタに変更したPASOPIARJ45Sを作ってみた。この基板はRJ45コネクタを2つ搭載し、ストレートとロールオーバーに対応させている。

使用部品:
※PASOPIA232Cと同じく接続にはDIP CABLE(16P)が必要

IMG_20230307_173454

PASOPIARJ45S-sch

PASOPIARJ45S

 これをUSB-RJ45変換のコンソールケーブルを使用して接続する。互換品はたくさんある。



RTSが1番ピンのJ2コネクタに接続したら通信できた。これがコンソールポート相当になる。
IMG_20230307_173425

さてこのRJ45-USBケーブルは、パソコン側にDsub9ピンオスのシリアルポートがあれば以下のRJ45-Dsub9メスケーブルと同等。

ピンアサインは以下のとおりでRJ45のRTS-1番ピンに対応するのがDsub9の8番ピン、CTSに接続されている。つまりこれらのコンソールケーブルはRS-232Cのクロスケーブルになる。ということはPASOPIARJ45SのJ2コネクタはDTEということになる。

スクリーンショット 2023-03-13 1.06.48

 さて以上をふまえてもうちょっと一般的なものを作ってみますよ。Dsub25オスをRJ45コネクタ2つに変換するDSUB25RJ45S 、昔のPCなどの本体側に直接接続しLANケーブルを使って通信する。

DSUB25RJ45SV01L01-sch

DSUB25RJ45SV01L01-pcb

IMG_20230312_234759

 確認したとおりRTSが1番ピンのRJ45コネクタで通信できた。
IMG_20230312_213434

 ここで使った機器は東芝のMSX、PASOPIA IQ HX-22で当時のMSXとしてはめずらしくRS-232Cインターフェースを内蔵している。MSXでRS-232Cを使用するには拡張BASICが必要となり、それも内蔵している。以下の操作で接続先PC側のTeraTermと通信できた。

call comini("0:8N1NNNNN",9600,9600,30)
call comterm("0:")




↓こういうのもあるのでテスターで調べてもよかったんですけどね

PASOPIAのシリアルインターフェース PASOPIA232C

 PASOPIAは内部にRS232C引き出し用のコネクタを持っている。これを引き出してDsub25ピンに変換し外部接続可能な基板を作った。

 スライドスイッチによりストレート/クロス接続切り替え可能。

2023-02-18 18.31.50

部品表:

PASOPIA本体との接続には16ピンのICソケットどうしを接続するDIP-CABLEが必要です。長さは15cm以上。

このようなコネクタを使ってケーブルを自作してもよい。

丸ピンICソケット16PをDIP-CABLEに刺して、PASOPIA232Cに接続すると端子を保護できます。

接続例:
秋月USB-シリアル(Dsub9Pオス) - ジェンダーチェンジャー(メスーメス) - Dsub9P-25P変換(オスーオス)
2023-02-18 19.32.04

T-BASIC 例: TERM 300,&H4C,F (300bps,パリティなし/1ストップビット/キャラクタ長8bit,全二重)
第1引数 : 75 / 110 / 150 / 300 / 600
第2引数:i8251の設定 
 bit 7:6 ストップビット 00 .. なし 01 .. 1bit 10 .. 1.5bit 11 .. 2bit
 bit 5:4 パリティ 00 .. なし 01 .. Odd 11 .. Even
 bit 3:2 データ長 00 .. 5bit 01 .. 6bit 10 .. 7bit 11 .. 8bit
 bit 1:0 00
第3引数:H .. 半二重 F.. 全二重
SHIFT + (STOP)でTERMモードを抜ける。

OA-BASIC 例: TERM 5,N,1,1,F
TERM {速度},{パリティ},{ストップビット},{キャラクタ長},{モード}
速度 : 5 .. 1200bps 4 .. 600bps 3 .. 300bps
2 .. 150bps? 1 .. 75pbs? 0 .. 110bps? ←これらは未確認
パリティ : N .. none O .. odd E .. even
ストップビット : 0 .. 0bit 1 .. 1bit 2 .. 1.5bit 3 .. 2bit
キャラクタ長 : 0 .. 7bit 1 .. 8bit
モード : H .. 半二重 F .. 全二重
CTRL + (STOP)でTERMモードを抜ける。

残念ながらT-BASIC,OA-BASICともDISK版でないとBASICから入出力を制御する命令が動かない。TERMコマンドのみ。

内蔵シリアルの制御は8255とZ80CTCの組み合わせでやっているので多分ソフトを書くのは簡単ではない。
2023-02-18 19.32.25

DIP CABLEの接続(1) プリンタ用のコネクタ上部を通す場合は、プリンタ用のコネクタを固定しているネジをいったん外してから通す。
2023-02-21 21.41.51

2023-02-21 21.44.27


DIP CABLEの接続(2) リセットボタン横にある穴から出す。

2023-02-21 21.56.33

2023-02-21 22.03.38

回路図

PASOPIA232C-sch

PASOPIA232c-pcb

参考資料:
『パソピアの内部構造』より
PASOPIA-SERIAL-16P

PASOPIASERIAL-25P

『PASOPIA全回路図』より
PASOPIASERIAL1

PASOPIASERIAL2

設計データ一式は後日公開予定。

boothにて配布開始しました。→ PASOPIA232C 基板


雑誌広告から調べたパソピアと周辺機器

 パソピアのカタログは持っていないので当時の雑誌広告などから拾い集めて調べてみた。

パソピアの最初の記事は I/O 1981.11 東芝パーコン『PASOPIA』

I/O 1981.12 よりPASOPIA広告掲載
 この時点での競合:MZ-80B,BML3,FM-8,PC-8001,PC-8801(予定)
I/O 1983.4 PASOPIA16広告 初登場
I/O 1983.7 PASOPIA7広告 初登場
I/O 1983.9 PASOPIA5広告 初登場
I/O 1984.6 PASOPIA IQ(MSX)広告 初登場
ここからPASOPIA IQと旧機種の広告がまじる
旧機種の広告はI/O 1985.4まで

I/O 1985.5 よりPASOPIA IQ HX-20,21,22の広告


PASOPIA周辺機器
(マイコン1983.1 I/O1982.12 I/O1982.3 広告より)

PA7161 ファインカラーディスプレイ 168,000
PA7200 ミニフロッピーディスクユニット 280kb x2 290,000
PA7251 ドットプリンタII 153,000
PA7240 4Kバイト RAM PAC2 14,000
PA7242 16Kバイト RAM PAC2 28,000
PA7244 32Kバイト RAM PAC2 未定
PA7246 漢字 ROM PAC2 40,000
PA7520 T-BASIC(ROM PAC1) 33,000
PA7522 OA-BASIC(ROM PAC1) 33,000
PA7540 MINI-PASCAL(ROM PAC1) 33,000
PA7210 8インチフロッピーディスクユニット 375,000
PA7202 片面ミニフロッピーディスクユニット 79,000
PA7300 拡張ユニット 78,000
PA7504 ジェネラルプログラムローダー 5,000
PA7521 T-DISK BASIC 18,000
PA7523 OA-DISK BASIC 18,000
PA7419 ユニバーサルカード 4,800
PA7426 RS-232Cケーブル
PA7500 CP/M 34,000
PA7150 グリーンディスプレイ 45,000
PA7160  カラーディスプレイ 79,000
PA7170 液晶ディスプレイ 40,000
PA7201 増設フロッピーディスクユニット280kb x2  266,000
PA7250 ドットプリンタI 69,000
PA7370 カラーTVアダプタ 13,000

PASOPIA7周辺機器
(I/O 1983.7 I/O 1983.12 I/O 1984.2 広告より)

PA7152 グリーンディスプレイ 29,800
PA7165 ファインカラーディスプレイ 98,000
PA7171 液晶ディスプレイ 60,000
PA7207 ミニフロッピーディスク 79,000
PA7208 増設片面ミニフロッピーディスク 69,000
PA7230 データレコーダ 12,800
PA7253 ドットプリンタII 139,000
PA7290 カラープロッタプリンタ 39,800
PA7373 カラーTVアダプタ 14,000
PA7380 RS-232Cアダプタ 27,000
PA7502 CP/Mシステム 34,000
PA7528 パソピアT-BASIC 9,800
PA7234 パック拡張ユニット 18,000
PA7241 RAM PAC 4KB 14,000
PA7243 RAM PAC 16K 28,000
PA7245 RAM PAC 32K 39,000
PA7247 漢字ROM PAC 40,000
PA7390 ジョイスティックアダプタ 27,000
PA7470 EP ROMホルダー 9,000
PA7221 ミニフロッピーディスクユニット(両面倍密) 158,000
PA7291 カラープリンタ PA7291 123,000
PA7232 コンパクトフロッピーディスクユニット 69,800
PA7381 ボイスユニット 29.800
PA7248 RAM PAC 64KB 56,000

元の広告にあった誤記はできるだけ直したけど間違えてたらごめんね。

パソピアの漢字ROMPAC2 PA7247

 PASOPIA / PASOPIA7用の漢字ROMカートリッジを入手したので調査。

漢字ROMPAC2 PA7247。旧版はPA7246でおそらく同じもの。
2023-02-12 00.02.17

第一水準の漢字ROM TMM23256P 0174~0177
2023-02-12 00.02.04

PAC2のI/Oポートは&H18~&H1B。漢字ROMの場合は
&H18 : ROMアドレスA7~A0
&H19 : ROMアドレスA15~A8
&H1A : ROMアドレスA16(最下位ビット)
上記をセットした後で&H18~&H1Bの任意のI/Oポートを読み出すと漢字ROMのデータが読める。

 最近出たKiCad7の操作練習も兼ねて回路図起こし。
PASOPIA-PAC2KROM

U3 LS74、U5 LS374、U4 LS374でPASOPIA側からのA16~A0を保持。漢字ROMのフォントは16x16ドットでROM 0174~0177は8バイト(8x8dot)づつ左上/右上/左下/右下を構成している。PASOPIA側から見てA0とA4でROMを選択、A1/A2/A3でフォントの1/4(8x8dot)にあたる8バイトを読み出せる。連続たアドレス32バイト読むと漢字1文字分のフォントが2バイト(16dot)x16行として読める。


PAC2インターフェースは8bitの双方向バスにアドレスCAD1,CAD0の2bit、セレクト信号の*CSEL2、リードライトの*CRD / *CWR。ここにPPI 8255をつなげるような信号になっており、実際ジョイスティックインターフェースや4KRAMカートリッジは8255が使われている。PAC2の信号は漢字ROMカートリッジ内6.8kΩでプルアップされている。

PASOPIA ROMPAC1互換ボードの動作確認

 前回でT-BASICカートリッジ内のイメージを読み出すことができたので、これを使ってPASOPIA用ROMPAC1互換ボードの動作確認を行う。
2022-05-28 20.56.36

 実験のため各種信号をenable/disableするスイッチ、RAMも搭載できるようバッテリバックアップの回路も入れてある。今回はROMのみの動作確認のため使っていない。
PASOPIAPAC1-pcb

PASOPIAPAC1-sch

 さてROM 27C512の前半32Kと後半32Kに同じイメージを焼いて確認。Arduino MEGA+PASOPIARW基板ではちゃんと読めた。さて実機のROMPAC1スロットに装着してみたが……動かん。
 純正のT-BASIC ROMPAC1カートリッジでは動くのでどこかに違いがある。ROMPAC1を調べ直してみた。

 ROMPAC1 T-BASIC PROGRAMS PA-7520 32KB。
2764(8KB)タイプのマスクROM 4個、LS138、LS08。LS138はおそらくROMのチップセレクト用。
2022-05-28 20.55.55

PASOPIAPAC1-logic-sch
 外部ROMは0x0000-0x7FFFまでが有効。A15は来ているが特にデコードされていない。
 カッコ内はPASOPIA7テクニカルマニュアルでの端子名。X2CLKはPASOPIA7からのクロック出力信号だがPASOPIAではカセットセレクトの入力信号*CSTENとなっている。これはPAC1内のROMが有効なときにenableになる。この箇所はオープンにしていた。*CSTENが有効な間はPASOPIA内部DRAMの*CASが抑止され、読み出せないがデータは保持される状態になる。

 ROMPAC1互換基板の修正は、同等の動作となるよう27C512の*CSを*CSTEN(X2CLK)に接続する。
2022-05-28 20.56.47

 これで動作した。27C512の前半32Kと後半32Kを切り替える機能も確認できた。基板は次回修正時に*CSTENを設定できるように反映する予定。

 さて疑問があってPASOPIA7にT-BASICのカートリッジを挿したらX2CLKとぶつかってしまうし実際動かなかったのよね。PASOPIA7では言語カートリッジを出す予定はなかったんだろうか。また、ROMPAC1はゲームカートリッジとしても使えたはずだけど出なかったですね。PASOPIA7が売れたら出る予定だったんだろうか。

PASOPIA ROMPAC1リーダをGG for Arduinoを使って書く

 東芝のPASOPIAはカセット形式で言語カートリッジが提供されている。これを読み取るためにArduino MEGA 2650用のシールドを作ったのだが、読み取ったデータをシリアルコンソール経由でコマンドを入力しダンプしたりするなどの操作をする部分が面倒で放置していた。
 あれから数ヶ月。最近、@mkogaxさんのGG for Arduinoライブラリを知りこれは便利そうだと早速使ってみた。

ハード側の説明:

ROMPAC1のピン配置は→  PASOPIA/PASOPIA7のROMPAC1

PASOPIARW基板 回路図
PASOPIARW-sch

レイアウト
PASOPIARW-pcb

 回路は大したことなくてジャンプワイヤーでもできるレベル。でもジャンプワイヤーでやったらうまくいかなかったので基板つくったの。
2022-05-27 19.38.58

 GG for Arduinoを使ったPASOPIAPAC1R.inoのスケッチはこちら。

使い方。公式ライブラリに登録してあるので、Arduino IDEのライブラリマネージャから トピック:コミュニケーションを指定して"GG"で検索。インストールする。
GG

以下はPASOPIAPAC1R.inoから引用しつつ説明。

gg_con_baud = 9600;
gg_start("\n*** PASOPIA ROMPAC1 READER ***\n"); // Start processing GG for Arduino

gg_start("タイトル");で使用開始。デフォルトでの通信速度は115200bpsだが、gg_con_baud変数を事前に変えておくと速度を変更できる。

gg_con_CmdInit();

デフォルトで内部のメモリダンプ用のコマンドが組み込まれているが、今回使わないのでまっさらにする。

GG_CON_CMDADD(PAC1_help, "h", "", "PASOPIA-PAC1 help" );
GG_CON_CMDADD(PAC1_help, "?", "", "PASOPIA-PAC1 help" );

組み込んであったhelpコマンドも消えるので自前で設定。GG_CON_CMDADD()でコンソールから指示できるコマンドを定義できる。
第1引数:コマンドで呼び出される関数
第2引数:コマンド名
第3引数:コマンドの引数の説明
第4引数:コマンドの使用方法説明

void PAC1_help(int argc, char **argv) {
  gg_con_CmdHelpAll();
}

ここで呼び出される関数は引数をargc,argvで渡すことができる。unixコマンドを自分で書いて追加するような感じ。

  gg_printf("%04X\n",PAC1_addr);

 とても便利なのが書式指定が使えるgg_printf()。このライブラリを知る前は自前でこんな感じにしてた。http://blog.livedoor.jp/hardyboy/archives/9620242.html
void sprinthex(unsigned long int x, int dg) {
  if (dg>=8) if (x<0x10000000) Serial.print("0");
  if (dg>=7) if (x<0x1000000) Serial.print("0");
  if (dg>=6) if (x<0x100000) Serial.print("0");
  if (dg>=5) if (x<0x10000) Serial.print("0");
  if (dg>=4) if (x<0x1000) Serial.print("0");
  if (dg>=3) if (x<0x100) Serial.print("0");
  if (dg>=2) if (x<0x10) Serial.print("0");
  Serial.print(x,HEX);
}
圧倒的に楽。

    if (isDigit(argv[1][0])) st = gg_asc2int(argv[1]);
gg_asc2int()で引数を数値に変換できる。このとき、"0x1000+256"のような式も評価してくれる。

    if (gg_GetC()==PAC1_BREAK) return;

if (hexflag) while(gg_GetC()<0);

 コマンド内でキー入力を見て、長いダンプリスト表示を中断させることもできる。また、PASOPIAPAC1RではIntel HEX形式でのダンプに対応しているがteratermのログに保存するときにプロンプトまで記録したくないので、ダンプ終了後のキー入力待ちも実現している。

 その他、GGにはミニFIFOバッファや日付変換、Arduinoの任意の端子を使ってトリガを出力する機能がある。ロガー用途などにも便利に使えそう。

 ということでGG for Arduinoはシリアルコンソールから対話的に操作する用途に有用です。



パソピア/パソピア7用ジョイスティックアダプタPA7390

 古いパソコンにはごくまれに期待してなかったオプションが入っていることがあって、入手したパソピア7にはジョイスティックアダプタPA7390がささったままだった。

2021-04-11 02.03.01

2021-04-11 02.03.23

 主要な石は8255にTC40H004P。片面基板。
2021-04-11 02.06.37

2021-04-11 02.06.54

PA7390の回路図はI/O1983年12月号p.213『パソピアにタッチパネルを継ぐ』に載っている。


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リーダのスケッチもアップデートしときました:


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月号

記事検索
プロフィール

hardyboy

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