HARDWARE

JR-200 のハード関連のネタ。 以下の内容はあくまで独自解析で想像も混じっているため、不正確なところはあしからず。気づいた点があったらメールにてお願いします。

ROM バージョンについて

2009.10.13 記

 以前 JUNK コーナーに書いていたことだが、JR-200 の電源投入時の色が違う個体があるんじゃないかという件。その後 JR-100 エミュレータ作者としておなじみの、けむしろうさんに調べて頂きましてわかったことを残しておきます。

 ちなみに JR-200 の ROM $BFF2~$BFF6 にはテキストで ROM バージョンとおぼしき数値が書いてあり、そこを基準に判断している。

○ 「V5.00」 電源投入時、黒バックに白字で表示される。枠色は黒。8桁の製造番号は2から始まる。

○ 「V5.01」 電源投入時、水色バックに青字で表示される。枠色は緑。8桁の製造番号は3から始まる。

 参考として、某エミュ内蔵 ROM (JR-200U の ROM)は「V5.01」。

 ふーむ、これを信じると JR-200U 化に関して ROM はいじってない可能性もありますな。JR-200 実機をお持ちの方でここに書いた内容に当てはまらないケースを発見した方はメールにて教えて頂けるとうれしいです。ペコリ。

 

JR-200の動作クロックを探る

2009.6.28 記

 さて、JR-100 の CPU、じゃなかった MPU は動作クロック 890kHz と公開されていたようだが、JR-200 はどうであろうか。私は見た記憶がない。今ネット上を検索してみても JR-200 に関しては記述を見かけない。と言うことは非公開だったの?

 と、ここ数年思い続けていたのだが、先日安物のオシロを入手したので、念願の JR-200 クロックを見てみることにしたので R。

  これが JR-200 の CPU、じゃなかった MPU 。MN1800A。基板の印刷を見るとφ1、φ2と書かれていて、とっても親切。

 と思ったのだが、ネット上をうろついてみると、このピン配置、どう見ても 6800 相当にしか見えない。どこがどう、「6802相当」なのであろうか? 松下通信工業株式会社電卓事業部は、JR-100 の時代から伝統的に MPU 表記がいい加減である(困)。暗くて読みにくいが、写真右下にある「6800 1800A」と書かれた切り替えジャンパみたいなものも気になるところ。

 というわけで、φ1、φ2 にプローブを当ててみた。

2V/div  0.2us/div

 見づらくて恐縮だが、周期はだいたい4目盛りなので、0.8usといったところか。ということは、供給クロックはおよそ 1.25MHz程度と思われる。この MPU は供給クロック=動作クロックでいいのかしらん? たまに動作クロックの何倍を供給とかありますけど、この半分とかで動かれちゃうと JR-100より動作クロックが低くなっちゃいますから、とりあえず約 1.25MHz ということでいいんじゃないかと。

 つーか、そんな曖昧な測定してないで周波数カウンタなら一発だろ、とお思いかもしれないが、そんなもの持ってないのっ!

 で、せっかくなので確認のために実機でコードを実行する時間も測定してみた。つたない頭で考えてみたプログラム。

【追記 2009.7.20】 以前のプログラムは一番外側のカウンタをメモリ上に取っていたのですが、これをインデクスレジスタに取るよう見直しました。
が、実行速度は以前と大きな変化はなく、実測27秒程度でした。

    1 3000                         ORG      $3000
    2 3000 CE00FF                  LDX      #$0B
    3 3003 C6FF         LOOPC:     LDAB     #$FF
    4 3005 86FF         LOOPB:     LDAA     #$FF
    5 3007 50           LOOPA:     NEGB
    6 3008 50                      NEGB
    7 3009 50                      NEGB
    8 300A 50                      NEGB
    9 300B 50                      NEGB
   10 300C 50                      NEGB
   11 300D 50                      NEGB
   12 300E 50                      NEGB
   13 300F 50                      NEGB
   14 3010 50                      NEGB
   15 3011 4A                      DECA
   16 3012 26F3                    BNE      LOOPA:
   17 3014 5A                      DECB
   18 3015 26EE                    BNE      LOOPB:
   19 3017 09                      DEX
   20 3018 26E9                    BNE      LOOPC:
   21 301A 39                      RTS

これが適切なのかどうかわからないが、メモリ・ウェイトがあっても極力影響されないようにしたつもり。要するに3重ループになっていて、中ではひたすらレジスタの中をいじっているだけ。

 で、早速実行した結果は27秒といったところ。上記プログラムのクロック数はメモリ・ノーウェイトだとすると、

((26*254+8)*254+8)*10+3 = 16794563

 これを27秒で割ると約620kHz と、少々ショッキングな結果が。一気に半分近くに…… これはあれですか、画面描画のために頻繁に MPU を止めるとか、PC-8001 なんかと同じ理由?

 というわけで、この結果が正しいのかどうかはまったくもって不明。ここがおかしい! などと思った人はご一報下さい。

 

JR-200 を簡単コンポジット出力に

 さて、当時 JR-200 を使っていたユーザーの多くは RF 出力を利用していたのではなかろうか。のっけから自分と同じプアな境遇に皆様を貶めてしまうが、少なくとも当時の我が家には「映像入力」なんてものが付いたハイテクなテレビはなかったもんでね。

 さて時は流れて現代は21世紀。今や絶滅寸前のビデオデッキですら RF 出力はオプション扱いといった時代。久しぶりに実家の物置から JR-200 を発掘して遊んでみようと思っても、RF 接続はめんどくさい or ケーブルも残ってないし、コンポジット出力を使おうとしても専用ケーブルを利用することになっているので接続できない。

 しかも、RGB とコンポジット出力は同じ DIN コネクタに割り当てられていて、ちょっと見ただけではどのピンにどの信号が出ているのかわからない。というわけで、隣の RF 出力を殺してコンポジット出力を割り当てる改造法を公開。

 お約束ですが、本体改造にはリスクが伴います。保証期間はもちろん終わってるから保証を受けられないのは当然としても、最低限の電気方面の常識、半田ごてを使ったことがあるくらいの経験は必要です。最悪の場合、貴重な実機を破壊してしまうこともあるので、ある程度の経験と技術がない人はやらないでください。

以下の改造は自己責任

ってことでよろしく。

 それではまず信号出力の配置から。

 これだけで十分な気もするが、一応中をあけたところも解説。

 ここではすでに改造が終わってしまっているので(改造する前の写真をとってないから)、すでに普通にあけた状態と異なっているが、赤線で描いた部分に RF ケーブルがつながっているはず。

 やることは

1. RF 出力端子と RF モジュレータをつないでいるケーブルがあるので、RF モジュール側を引っこ抜く。ここは通常のピンプラグになっているので簡単に抜けるはず。

2. プラグ部分を切り落とし、ケーブルの芯線を RGB /コンポジット出力端子の該当出力部分にハンダ付けする。

3. ケーブルのシールド線をグランドに接続する。ただしコレにはちょっと問題があるので後述。

 

 で、ケーブルの芯線をハンダ付けするのはココ。

 写真ではわかりづらいので、できればテスタで DIN 端子側からつながっているかどうか確認していただきたい。周囲の端子はデジタル RGB の 5V が出ているので、間違うと受け側の回路(要するに TV)が破壊されてしまうかもしれませんヨ!

 別の角度から見るとこんな感じ。

 さて、ここが終われば後はもう付け足しのようなものなのだが、ケーブルのグランド。ここでちょっと問題なのが、DIN のグランド端子はキーボード部をはずしただけでは見えないと言うこと。つまり、さらにメイン基盤を取り出した裏側からしか見えない。コレはめんどくさいので、私はテスタで適当に探って、DIN に出ているグランドとの電位差が 0.00mV になる点に適当にハンダ付けしてしまった。

 しかし回路設計と言うものは本来、こんないい加減なグランドの取り方をしてはいけないものらしいので、まじめな方はちゃんとメイン基盤を取り外し、正し く接続してください。

 ちなみにうちの実機で調べた結果、電位差が 0 だったのはココ。

 ってわかりづらいかもしれないけど、RF モジュールのシールド部。

 

 コレで完成。あとは RF 端子(を改造した映像端子)と TV の映像端子をつなげば、ビートのない(RF に比べれば)安定した出力が得られるはず。ただし色にじみはしっかりあるので、思ったほどきれいじゃないです。ちゃんとした電子回路の知識がある人なら S 映像出力の改造くらいはできそうだし、そうすれば色にじみも低減できるんじゃないかと思いますが、残念ながら私にはそこまでの知識がないので今回はここまで。

 

JR-200素人解析

 JR-200 についての技術情報が載った本としては誠文堂新光社から出ていた1冊か2冊の本(タイトル忘れた)くらいだろうか。これ、当時持っていたんだが、捨てちゃったんだよなー。バカバカッ!

 なので、今となってはマニュアルに書かれていたことすらわからない。BASIC の文法すらもうわからんのだ。PLAY 文なんかめっちゃわかりづらいんだよな。MML(Music Macro Language) じゃないから。

JR-200 カセットテープフォーマットについて

  記録はヘッダブロック、データブロック1、データブロック2、…データブロックn、フッタブロックに別れ、それぞれの前後は1200Hzのリーダー(またはインターミッション)で区切られる。

1bitの表現は以下の通り(Tは周期)。

  600baud 2400baud
0 (2400Hz) 4T 1T
1 (1200Hz) 2T 0.5T

  2400baud のときに1200Hzは半周期しかないため、コレが奇数回現れると以降の波形は正負が反転しなければならず、CJR→WAV を作るときに少々面倒なことになる。実機の出力を見るとブロックの前後でコレが出現した場合は割と適当な処理をしてるみたいだけど。

 1バイトの記録には先頭にスタートビット1bit(0)、ストップビット3bit(二進表現で111)がつく。

 で、この表現を使って1バイトの値 0xF5(2進表現で11110101)を表すときには

StartBit bit0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7 StopBit1 StopBit2 StopBit3
0 1 0 1 0 1 1 1 1 1 1 1

たとえば、各ブロックの先頭は必ず2になるが、この部分の波形を見ると以下の通り(600baud の場合)

[0 0 1 0 0 0 0 0 0 1 1 1] のうち、先頭1ビット、最後3ビットはスタートビット、ストップビットだから取り除き、[0 1 0 0 0 0 0 0] を前後逆にして [0 0 0 0 0 0 1 0] で 2 が表されていることがわかる。

2400baud の場合は以下のようになる。

1.ヘッダブロック(33バイト)

このブロックは600/2400baud の指定にかかわらず、600baud で記録される。

ファイル名が"ABC"の場合

【2017.1.21 訂正】 各ブロックの2バイト目を 0x0Aとしていましたが、0x2Aの誤りでした。

  0 1 2 3 4 5 6 7
02 2A 00 1A FF FF 41("A") 42("B")
内容 固定値 ブロックNO データ
サイズ
固定値 ファイル名(16字)
  8 9 10 11 12 13 14 15
43("C") 00 00 00 00 00 00 00
内容 ファイル名(16字)
  16 17 18 19 20 21 22 23
00 00 00 00 00 00 01 64
内容 ファイル名(16字) マシン語/BASIC ボーレート
  24 25 26 27 28 29 30 31
FF FF FF FF FF FF FF FF
内容 固定値
  32              
 
内容 チェックサム

データサイズはファイル名から固定値の終わり(31バイト目)までのサイズを表しているらしい。
チェックサムはオフセット0から31までを加算した下位1バイト。
マシン語・BASICの指定 マシン語=0x01、BASIC=0x00
ボーレートの指定 600baud=0x64、2400baud=0x00

 

2. データブロック n(最大256 + 7バイト)

 データブロック以下は 600/2400baud で記録形式が変わる。

  0 1 2 3 4 5 6 7
02 2A n 00 08 01    
内容 固定値 ブロックNO データ
サイズ
ロードアドレス データ
  8 9 10 11 12 13 14 15
               
内容 データ


  256 257 258 259 260 261 262
             
内容 データ チェックサム

n は1から0xfe の間。RAM は32KB だから0xfe まで行くことはないと思うけど。
データサイズはオフセット6からの純粋なデータ部のみのサイズを表し、最大で256バイト。ただし256バイトの時、ブロックサイズの値は0にする
ロードアドレスはデータブロック 1 の場合、BASIC なら 0x801、マシン語なら MSAVE の指定アドレスになる。

 

3. フッタブロック(6バイト)

  0 1 2 3 4 5
02 2A FF FF    
内容 固定値 ブロックNO 固定値 ロード終了アドレス+1

フッタブロックのブロックNO は 0xff


TOP PAGE