JR-100のNTSC信号を標準化(4)

JR-100のビデオ出力信号をNTSC規格になるべく従うよう整形すべく、PICマイコンを使って何とかしようという企画の4回目。前回までで開発環境とデバッグ用のプログラムを作るところまではできました。今回はいよいよPICのプログラムを作っていきます。かなり正確な時間のパルス幅を作る必要があるのと、PICのMIPS値が最大でも8MIPSと余裕がなさそうなことから、アセンブラで記述しています。 まずプログラムに行く前に回路図を少し修正します。 修正のポイントは、PICのインサーキットデバッグをするために、同期信号の入力ピンをRA0からRA2に変更したことと、PICkit3の接続用のポートを設けたとこ … “JR-100のNTSC信号を標準化(4)” の続きを読む

JR-100のNTSC信号を標準化(3)

JR-100の同期信号が整理できたところで、PICのプログラミングに入ります。と、その前にプログラムテスト用の信号をSCLで作っておきます。プログラムとしては単純で、適当な間隔でRA0ピンの状態を0(Low)と1(High)で切り替えるだけです。垂直同期信号を検出する前の処理も確認するために、最初の垂直同期信号を出す前に水平同期信号を1回分出しておくことにします。またプログラム開始直後は100サイクル分の待ち時間を入れておくことにします。 できたプログラムはこれです。

wait for文の引数に変数を指定しても変数値がちゃんと参 … “JR-100のNTSC信号を標準化(3)” の続きを読む

JR-100のNTSC信号を標準化(2)

JR-100のビデオ出力をGV-USB2でキャプチャすべくPICマイコンで同期信号を整形します。回路は一応できたので、次はプログラムを作るために、そもそもJR-100がどんな映像信号を出力しているのかを整理してみます。 NTSC同期信号とJR-100の同期信号、MB14392のSYNCピンから出力される信号(これを同期信号整形回路の入力とします)、目標とする整形後の同期信号の関係はこのようになっています。 図では垂直同期付近を示しています。本来はフィールドの先頭は1.5μsあるフロントポーチの開始時点からですが、ここでは便宜上、水平同期信号の立ち下がりエッジをフィールドの先頭と考えます。垂直ブ … “JR-100のNTSC信号を標準化(2)” の続きを読む

JR-100のNTSC信号を標準化(1)

MPLAB X IDEのデバッグ方法が分かったところで、JR-100のコンポジットビデオ信号をPICで(ほぼ)正しいNTSC信号に変換する回路を検討していこうと思います。目的はJR-100のビデオ出力信号をビデオキャプチャアダプタGV-USB2でキャプチャすることです(参考記事:JR-100+GV-USB2)。エンジニアなら、動かなければ自分で作る、というのが基本ですよね!? まず映像関係のパラメータをまとめてみます。MB14392内の処理が不明のため、以前の計測結果から推定してます。JR-100に搭載されている水晶発振子の周波数(14.31818MHz)に対して、どれもほぼ整数倍になっている … “JR-100のNTSC信号を標準化(1)” の続きを読む

JR-100: ビデオ信号の解析

ビデオキャプチャボードGV-USB2でJR-100のビデオ出力信号がキャプチャできず(関連記事)、なんとかならないかと考えています。JR-100のビデオ出力にカラーバーストが含まれていないからと予想しましたが、そもそもどんな信号が出力されているのかを検証してみようと思います。 まず水平1ライン分の信号はこんな感じでした。画面全体を■文字で埋め尽くしています。つまり描画領域はすべて「白」レベルとなります。以前別記事で計測したときは電圧レベルが200mVp-pでしたが、今回は約2Vp-pでした。前回はプローブの設定を1:10にしていただけかもしれません。。。 通常のNTSCでは水平同期信号は4.7 … “JR-100: ビデオ信号の解析” の続きを読む

JR100:エミュレータv2でゲームパッドに対応

JR-100エミュレータver2で、ゲームパッドに対応しました。さすがにゲームパッド対応用のマルチプラットフォームなライブラリを自作するのは手間がかかりすぎるので、JavaではメジャーなJinputを使っています。JInputはJavaのゲームエンジンlibgdxでも内部で使われているみたいです。 Jinputの使い方は別投稿に譲るとして、まずは設定画面はこんな感じです。 以下のゲームパッドでテストしていますが、他のでうまく動作するのか分かりません。もし動かない場合は連絡いただければ幸いです。 サンワサプライ アーケードスティックII  (JY-A46UCBL) エレコム Xinput対応ゲー … “JR100:エミュレータv2でゲームパッドに対応” の続きを読む

JR-100:エミュレータv2にCPU速度設定機能を追加

長らく放置していたJR-100エミュレータver2に新機能を追加しました。CPU速度を設定する機能です。コメントでいただいていた機能をいつか実装しようと思いながらずっと手を着けられずにいましたがようやくできました。ついでにR6522の実装も強化しています(外見はよく分からないと思いますが)。 ダウンロードはこちらよりお願いします。 JR-100エミュレータ こんな設定画面です。ほぼ10倍速となる10MHzまで指定できます。 JR-100のBEEP音の周波数はクロック周波数に直結しているため、例えば実機でクロックを2倍に修正するとBEEP音の周波数も2倍になるはずですが、エミュレータではクロック … “JR-100:エミュレータv2にCPU速度設定機能を追加” の続きを読む

JR-100: MB14392について(1)

JR-100: 全体

松下電器が発行していた技術報告書からJR-100の論文を入手しました。 JR-100に搭載されているMB14392というLSIの仕様が長年謎だったのですが、この論文に情報が載っていたので、少しずつ分析していこうと思います。 ※ 分析のまとめはこのサイトのまとめページの方に順次追記していきます。 さてまずMB14392は、200ゲートアレイのセミカスタムLSI(マスタスライス方式)とのこと。マスタ・スライスLSIとは、 配線層のみの変更で専用回路を設計できるLSI。セルベースLSIでは,40枚程度のマスクを機器メーカーが用途に応じてカスタマイズする。マスタ・スライスLSIは,トランジスタ層と配線 … “JR-100: MB14392について(1)” の続きを読む

JR-100のプログラムデータを再生するツール

JR-100: 全体

JR-100ではプログラムを音声データにより外部媒体(カセットテープ)に保存することが可能です。この音声データ(仕様)を再生するプログラムを作成しました。目的は、JR-100のVIAのエミュレーションを正しく行うために、VIAの仕様書を読むだけでは理解できない動作をJR-100実機を使って検証するためです。様々なパターンのマシン語プログラムを毎回打ち込んだりカセットからロードするのは時間がかかりすぎるので、PCから直接再生することにしました。 使い方 Java 1.7以降のJREがインストールされていることが前提です。 ファイルをダウンロードして適当なフォルダに格納してzipファイルを展開して … “JR-100のプログラムデータを再生するツール” の続きを読む

JR-100のセーブデータのフォーマット

JR-100: 全体

JR-100でSAVEコマンド実行時に再生される音声データの形式を示す。 記録方式 FSK (Frequency Shift Keying)方式で記録する。 スペース: 1,200Hz マーク: 2,400Hz ボーレート: 600ボー 1秒間に600個のスペース(0)またはマーク(1)を送ることができる。 つまり1変調あたり、スペースは2周期分、マークは4周期分が含まれることになる。 バイト表現 1バイトの値は、スタートビット1ビット(0b)とストップビット2ビット(11b)を合わせて、11ビット分を送信する。送信するビット列はLSB(ビット0)からMSB(ビット8)の順に出力される(リトル … “JR-100のセーブデータのフォーマット” の続きを読む