JR-100について(まとめ)

JR-100: 全体JR-100は1981年11月に松下通信工業から発売されたパーソナルコンピュータである。定価は54,800円。松下通信工業独自に作成したBASICインタプリタJR-BASICを搭載し、モノクロで32列24行のキャラクタ表示機能、直接内部LSIのレジスタの操作が必要であるものの任意の周波数の音を発声する機能を持つ。設計方針として、小型軽量で使いやすい高性能なコンピュータ学習機を目指した(ina1982)。

外見の特徴として、キーボードのゴム製のキーボタンを備えていることが挙げられる。これは設計方針の一つである安価であることを実現するために、電卓用のキーボードとして技術蓄積のある導電ゴム接点方式を採用したことによる(ina1982)。 またグラフィック処理は持たないが、特定の32個の文字コードの文字をユーザが自由にビットパターンを定義できるようになっており、簡易な図形描画が可能である。

思い出など

雑誌に掲載されたJR-100の広告
雑誌に掲載されたJR-100の広告

閑話休題。 右の画像は、雑誌に掲載されたJR-100の広告です。当時は8ビットマイコンの群雄割拠時代で、電機メーカー各社は独自のマイコンを発売し、華やかな時代だったと思います。そんな中でJR-100は手軽な学習機として位置づけられていて、価格も当時のマイコン群に比べると低価格でした。

ここで当時の各メーカーから発売されていたマイコン群を比較してみましょう。各社仕様はwikipediaやweb上の情報から抜粋しました。
メーカー 機種名 CPU クロック (MHz) RAM (KB) 発色数 発音数 価格 発売年月 コストパフォーマンス(※)
NEC PC-6001 μPD780C-1 4 16 9 3 84,800 1981年11月 1.57
PC-8001 μPD780C-1 4 16 8 1 168,000 1979年9月 1.00
シャープ MZ-80K2E Z80 2 32 2 1 148,000 1981年 0.68
MZ-80C Z80 2 48 2 1 268,000 1979年 0.54
MZ-700 Z80A 3.6 64 8 1 79,800 1982年11月 1.62
X-1 Z80A 4 64 8 3 155,000 1982年11月 0.89
富士通 FM-7 MBL68B09 8 64 8 3 126,000 1982年11月 1.46
FM-8 68A09 1.2 64 8 1 218,000 1981年5月 0.54
日立製作所 MB-6880(ベーシックマスター) HD46800 0.75 4 2 1 188,000 1978年9月 0.36
MB-6885(ベーシックマスターJr) HD46800 0.75 16 2 1 89,800 1981年12月 0.80
MB-6890(ベーシックマスターレベル3) HD6809 1 32 8 1 198,000 1980年5月 0.59
東芝 PA7010(パソピア) Z80A 4 64 8 1 163,000 1981年 0.94
PA7007(パソピア7) Z80A 4 64 27 6 119,800 1983年 1.12
松下電器 JR-100 MB8861 0.89 16 2 1 54,800 1981年11月 1.34
JR-200 MN1800A 1.25 32 8 3 79,800 1982年12月 1.19

コストパフォーマンスの計算式は以下とします。
コストパフォーマンスはジョークです。厳密なものではありません……

  •  コストパフォーマンス=(性能ポイント)÷(価格)
  • 性能ポイントは以下の合計値
    • CPUクロック数×20,000
    • RAM容量のビット数×20,000
    • 発色数のビット数×10,000
    • (同時発音数÷3)×10,000
    • 1978年からの経過時間係数。5年で価値が半減する、つまり(1/2)^(1978年からの年数/5)

この基準では、PC-6001(1.57)やMZ-700(1.46)のコストパフォーマンスが高いのが目立つなか、JR-100もなかなかのスコア(1.34)であるといえるでしょう(あくまでMy基準で)。 逆に日立のベーシックマスターシリーズが軒並み1未満なのがちょっと残念な感じです。

ところで、発売当時はまだマイコン専門の雑誌はなかったと思います。その代わりに電子工作系の雑誌に記事が掲載されていました。電子工作雑誌の代表といえば、私も購読していた

  • ラジオの製作 (電波新聞社)
  • 初歩のラジオ (誠文堂新光社)

でしょう。JR-100発売時に掲載された記事を抜粋してみます(ちょっとコピーに失敗しているので後日取り直します)。

ラジオの製作1981年12月号別冊付録の記事
初歩のラジオ1982年1月号の記事

初歩のラジオの記事の方が若干詳しいですね。ただ、ラジオの製作にはマイコン記事のための別冊付録が付くようになっていました。この別冊がその後本誌として分離し、一般読者が自作のプログラムを投稿できる代表的な雑誌となっていくのです。

ここでJR-100付属のデモソフトをエミュレータで実行したものを上げてみます。

脱線しますが、なんとpixivにJR-100を題材にしたイラストが投稿されてました。素晴らしい。家宝にします。背景がきっちりJR-100のゲームのスクリーンショットだったり、手に持っている人形が懐かしのナショナル坊やだったり、いい感じです。

JR-100 by ayaori on pixiv

システム構成と機器仕様

システム構成

JR-100のシステム構成図を以下に示します(sho1982)。JR-100のマニュアルに出ている図よりも、初歩のラジオの掲載図がいちばんオプション要素が多く書かれています。当初の構想としてはミュージックアダプタや音声認識アダプタ、FDアダプターなどがあったようですが、私の記憶では、最終的に発売には至っていないと思います。RFコンバータなんていまどき通じない用語でしょうね。

次にハードウェア構成図を以下に示します(ina1982)。ちょっとスキャンの画質が悪いのはご容赦。後述しますが水晶発振部の出力がCRT制御部にしか入っていないところがポイントです。CPUクロックは、CRT制御部が出力するΦ1、Φ2クロックを受け取っていますね。

仕様

項目 仕様
CPU MN1800(6802相当) 890kHz
とカタログに書いてあるが実際はMB8861。クロックも正確には894kHz。
ROM 8KB
RAM 16KB(拡張バスを通じて32KBまで拡張可能)
VRAM 1KB
キーボード ソフトウェアスキャン。45キー。SHIFT, CTRL併用による5段シフト
画面構成 24行×32文字 モノクロ表示
文字構成 5×7ドットマトリックス文字 64種
8×8ドットセミグラフィック文字 64種
ユーザ定義 8×8ドットマトリックス文字 32種
ディスプレイインターフェース アトリビュート反転機能
コンポジットビデオ信号(75オーム1Vpp)またはRFコンバータ使用
カセットインターフェース FSK方式1200Hz(スペース)、2400Hz(マーク)
ボーレート600ボー
 プログラム言語 JR-BASIC
 ACアダプタ 入力電圧: AC100V±10%, 50/60Hz
消費電力: 12W
寸法・重量 (幅)296×(奥行)154×(高さ)45mm
約700g(本体)
付属 ACアダプタ、録音ケーブル、ディスプレイケーブル、デモンストレーションプログラムテープ、ユーザーズマニュアル

ハードウェア

メモリマップ

拡張メモリ領域も含めたメモリマップはこのようになっています。MB8861(6802)は1バイトのアドレス領域(0x00~0xFF)を扱うための特別なアドレシングモードを持っていて、一般的にはメモリアクセスを行う命令は3バイト(opcode 1バイト+アドレス2バイト)必要なところを2バイト(opcode 1バイト+アドレス1バイト)でアクセスすることができ、メモリ使用量を節約できます。そのためBASICインタプリタのワークエリアをこのアドレス範囲に収めるのは正解ですね。

用途 開始アドレス 終了アドレス 備考
RAM $0000 $00FF BASICインタプリタ作業領域
$0100 $0245 スタック領域
$0246 $3FFF BASICプログラム領域
拡張RAM $4000 $7FFF 拡張BOXにより増設
拡張ROM $8000 $BFFF 拡張BOXにより増設; 2732相当品×4
ユーザ定義文字 $C000 $C0FF ユーザ定義文字
VRAM $C100 $C3FF CRT用ビデオRAM
(予備) $C400 $C7FF (予備)
I/O $C800 $C80F カセット/キーボード I/Oポート; 6522レジスタ
(予備) $C810 $CBFF
拡張I/Oポート $CC00 $CFFF 拡張BOXにより増設
プリンタ制御用ROM $D000 $D7FF 拡張BOXにより増設
増設機器用ROM $D800 $DFFF 拡張BOXにより増設; 2716相当品
キャラクタビットマップROM $E000 $E3FF
BASIC ROM $E400 $FFFF BASICインタプリタ格納

プロセッサ

システムのタイミング制御

CRT制御

I/Oインターフェース

I/Oインターフェースとして汎用インターフェースアダプタ(Versatile Interface Adapter; VIA)であるR6522を採用。R6522のレジスタはアドレス0xC800〜0xC80Fにマップしています。アドレスとレジスタの対応は以下の通り。

アドレス レジスタ番号 レジスタ名 JR-100での用途
$C800 0 ORB/IRB キーボードスキャンラインの読取(入力)
ユーザ定義文字使用有無の制御(出力)
$C801 1 ORA/IRA キーボードスキャンラインの設定(出力)
$C802 2 DDRB I/Oポートの入出力方向設定
$C803 3 DDRA I/Oポートの入出力方向設定
$C804 4 T1C-L BEEP音の周波数制御
BASICのRND()関数で生成する乱数の要素
$C805 5 T1C-H
$C806 6 T1L-L
$C807 7 T1L-H
$C808 8 T2C-L セーブ時の基準周波数(4800Hz)生成
BEEPコマンドの鳴動時間制御
$C809 9 T2C-H
$C80A A SR プログラムセーブ時の1と0の波形パターン生成
$C80B B ACR 入出力ポートの制御
タイマーのモード設定
シフトレジスタのモード設定
$C80C C PCR ハンドシェーク線(CA1,CA2,CB1,CB2)のモード設定
$C80D D IFR タイマーのタイムアウト割り込みの制御
$C80E E IER 割り込み有効・向こうの制御
$C80F F ORA/IRA 未使用

レジスタの意味については後報。

キーボードインターフェース

カセットインターフェース

セーブデータ中では、1バイトの値をスタートビット1ビット(0b)とストップビット2ビット(11b)を合わせて、11ビット分で表現される。送信するビット列はLSB(ビット0)からMSB(ビット8)の順に出力される(リトルエンディアン)。

start b0 b1 b2 b3 b4 b5 b6 b7 stop stop
0 x x x x x x x x 1 1

カセットテープに保存するデータの形式を下表に示す。非データ部分にはスタートビットとストップビットの区別はなく、単純なビットパターンの繰返しとなる。非データ部分2でビット値’0’が出現するが、BASIC ROMの内容を読む限り、これを何かに利用しているわけではないようである。

オフセット バイト長 備考
(非データ部分1) 1 (2進数)
(非データ部分2) 111111110 (2進数)を28回繰返し
(非データ部分3) 1 (2進数) を3828ビット分(255*15+3)繰返し
0 16 ファイル名 ファイル名(最大15文字)+16バイトに満たない部分を0x00で埋める。
16 2 先頭アドレス BASICプログラムの場合は’0x0246′。ビッグエンディアンで格納する。
18 2 プログラム長N ビッグエンディアンで格納する。
20 1 フラグ BASICの場合 0x00、マシン語の場合 ‘M’(0x4d)
21 11 0x00 埋め草
32 1 オフセット0〜31までのチェックサム 合計値の下位1バイト
(非データ部分4) 1 (2進数)を255ビット分繰返し
0 N プログラムデータ オフセット18で与えられる値Nバイト。ビッグエンディアンで格納する。
N 1 プログラムデータのチェックサム 合計値の下位1バイト

音声出力インターフェース

音声出力インターフェースの回路はこうなっています(ina1982)。図ではCB6,CB7と表記されていますが、正しくはポートBの6番ピン(PB6)と7番ピン(PB7)を意味します。

R6522のタイマー1は矩形波をPB7上に出力するモードに設定されているので、この信号を増幅することでスピーカーを鳴動させています。回路を見てわかるようにボリュームの類はありません。つねに同じ音量で音が出るので、夜の作業には向きませんね:-)
一方、PB6は入力モード、タイマー2はPB6の立ち下がりエッジをカウントするモードに設定されているので、この回路はPB7に現れる矩形波のパルス数をカウントすることを意味しています。タイマー2がタイムアウトすると割り込みが上がるので、PB7に矩形波を出力開始してからタイマー2のタイムアウト割り込みが発生するまで待つことで、ビープ音を一定時間鳴らせることができる、つまりBEEP文の処理をこの仕組みによって実現しています。発生させるBEEP文の時間をカウント回数は0xE0回(224回)固定です。つまりBEEP音の音程をPOKE 1,200を実行するなどで変化させると、BEEP音が鳴るなる時間も変化することになります。アドレス1番地の設定値とその時のBEEP音の周波数、鳴動時間の関係を下表に示します。

アドレス0x01の設定値 周波数 鳴動時間
0 223,500Hz 0.001秒
50 8,596Hz 0.026秒
100 4,382Hz 0.051秒
170 (デフォルト値) 2,599Hz 0.086秒
200 2,213Hz 0.101秒
255 1,739Hz 0.129秒

JR-100のユーザーズガイドには、BEEP音は約0.5秒鳴動すると書いてあるのですが、実際には0.1秒前後ですね。当初の設計から実装が変わったのか、もしかしてバグなのか?

さて、JR-100のBEEP音の音程を変えるには、アドレス0x01の値を変えるやり方の他に、直接R6522のタイマー値を直接設定するやり方があります。実はアドレス0x01に書き込んだ値はタイマー値の下位8ビットにロードされているだけなので、直接R6522のタイマー値(16ビット)を設定することで、より広い範囲の周波数を指定可能となります。この仕組みを使ったのが、JR-100ユーザーズマニュアルの巻末にある音声演奏プログラムです。デモの「夏の扉」を何度も再生した方も多いでしょう:-)
発声させたい周波数をF、タイマー1の設定値をTとすると、以下の式が成り立ちます。

T = Φ2クロック周波数 / (2 * F) – 2 = 894886.25 / (2 * F) – 2 = 447443.125 / F – 2

例えば440Hzの音を発生させたい場合は、

T = 447443.125 / 440 – 2 = 1014.9… ≒ 1015 (0x03F7)

となります。実際にこの音を発声させるには、R6522を矩形波出力モード(ACRに0xE0をセットする)にし、タイマー1のカウンタレジスタ(T1C-L, T1C-H)にこの値を設定します。

POKE $C80B,$E0:POKE $C804,$F7:POKE $C805:$01

なおT1C-L($C804)とT1C-H($C805)の実行順はこの順でないといけません。タイマーのカウントダウンはT1C-Hへのストアを同時に実行されるからです。
音を止める場合は、ACRに0を設定すればよいです。

POKE $C80B,0

構成部品

私の手持ちのJR-100で使われているICはこんなでした。MBで始まる富士通製の部品が多いです。

CPU MB8861H (6800上位互換) 富士通のセカンドソース(オリジナル6800に独自拡張)
RAM M5K4116P-3 × 8個 (16KB) DRAM
ROM MB8364 × 1個 (8KB) マスクROM
CRTコントローラ MB14392 カスタムCRTコントローラ
VIA SY6522 入出力用のLSI
VRAM MN2114 × 2個 4bit×1024word, SRAM

ソフトウェア

JR-BASIC

JR-100が標準で搭載するJR-BASICは松下通信工業で自主開発されました(ina1982)。設計にあたっては、ローコストな入門機というコンセプトのJR-100に合わせ、多くの機能を盛り込むのではなく、コンパクトで使いやすいことを最重要と定めました。また、パーソナルコンピュータの成否は外部のサポートに大きく依存することを当時から見抜いていて、雑誌に紹介記事が掲載されるとかソフトハウスがプログラムを開発してくれるためには、特徴あるハードと基本ソフトを提供することが重要であるとしています。具体的な設計方針は以下です。

  1. コンパクトで効率の良い整数型BASICインタプリタとする。
  2. 機能豊富なスクリーンエディタを提供する。

これを踏まえ、JR-BASICの諸元を資料から抜粋します。

定数 整数:-32767~+32767
16進数
文字定数
整数変数 英字または英字+数字 (例:A, B1)
文字列変数 英字+$ (例:D$, W$)
32文字まで
配列 1次元:英字(式)  (例:E(5))
2次元:英字(式, 式)  (例:F(X,Y))
演算 加算(+)、減算(-)、乗算(*)、除算(/)、余り(MOD)
コマンドと文 AUTO, BEEP, CLEAR, CLS, CONT, DATA, DIM, END, FIND, FOR~NEXT, GOSUB~RETURN, GOTO, HCOPY, IF~THEN, INPUT, LET, LIST, LLIST, LOAD, LOCATE, LPRINT, MLOAD, MSAVE, NEW, OPTION, PICK, POKE, PRINT, READ, REM, RESTORE, RUN, SAVE, STOP, VERIFY
関数 ABS, ASC, CHR$, FRE, FLD, HEX$, HPOS, VPOS, LEFT$, LEN, MID$, MOD, PEEK, RIGHT$, RND, SGN, SPC, TAB, USR, VAL
行番号 1~32767

あれ? 符号付き16ビット整数なら下限値は-32768(0x8000)のはず。テストしてみたら本当にOVERFLOW ERRORとなりました。上限・下限の絶対値を同じ32767にすることで、BASICの構文解析ルーチンを少しでもシンプルにしたかったのかな?

ビデオRAM

ビデオRAMは$C100〜$C3FFにマップされていて、これらのアドレスにデータを書き込むと、そのデータに対応する文字がアドレスに対応する位置に表示されます。画面左上を原点(0, 0)とする座標(X, Y)とメモリアドレスAの対応関係は以下の通り。

アドレス = $C100 + X + Y * $20

ビデオメモリマップ
ビデオメモリマップ
この、横幅が32($20)文字というのをBASICインタプリタ内部では活用しています。たとえばカーソルを行の左端に移動させたいときは、カーソルアドレスの下位8ビットに$20をANDさせればよいことになり、このようなコードをあちこちで使用しています。

キャラクタビットマップ

JR-100が備える文字と文字コードの一覧を示す。JR-100ではこのコードをASCIIコードと呼んでいて、縦軸がASCIIコードの下位バイト、横軸が上位バイトを表します。

この文字コードはJR-BASICのASC()関数の返値として、およびCHR$()関数の引数として使われています。たとえば”A”のASCIIコードを表示する場合は、

とすれば”41″を表示し、”A”の文字を表示するには、

とすればよいです。

ただし直接VRAM領域($C100~$C3FF)にPOKE文等で書き込む場合には、ASCIIコードではなくシステム内部で扱うROMコードを用いる。ASCIIコードとROMコードの対応関係は下表の通り。

ROMコード ASCIIコード
$00~$3F $20~$5F
$40~$5F $80~$9F
$60~$7F $E0~$FF
$80~$BF $20~$5Fの反転文字またはユーザ定義文字
$C0~$DF $80~$9Fの反転文字またはユーザ定義文字
$E0~$FF $E0~$FFの反転文字またはユーザ定義文字

したがって、POKE文を使って画面の左上隅に”A”を表示する場合は、

とする必要があります。

また、BASICから反転文字を表示する場合、例えば”0″(文字コード$31)に対しては

のようにFLD関数を使いますが、POKE文で直接ビデオRAMに数値を書き込む場合は、

のようにビデオRAMコードを指定すれば表示できます。マシン語から反転文字やユーザ定義文字を表示させる場合に使うテクニックとなります。

ユーザ定義文字

ユーザ定義文字は$C000〜$C0FFにマッピングされています。一文字当たり8バイト必要ですので、合計256 / 8 = 32文字分のユーザ定義文字を作ることができます。

しかし、実は$C100〜$C3FFの内容に応じて、さらに96文字分のユーザ定義文字を作ることもできます。この領域は前述の通りビデオRAM領域ですので、画面を書き換えるとユーザ定義文字の内容も変わってしまうという問題があり、あまり使途はないでしょう。

ユーザ定義文字のメモリマップ
ユーザ定義文字のメモリマップ
しかし例えば次の条件を満たせば新たに4文字のユーザ定義文字を使うことができます。
  • 画面の1行目を絶対に書き換えない。
  • 画面の1行目にノイズのような表示があっても気にならない。

コントロールキーによる入力について

JR-100では、コントロールキーとアルファベットキーなどとを同時に押すことで、カーソル移動やスクリーンエディット機能を利用したり、BASICコマンドを簡単に入力できます。特にBASICコマンドの入力は、タッチタイプがしにくいJR-100のキーボードでBASICプログラムの入力をするのに非常に助けになります。

以下にマッピングを示します。

標準入力キー コントロールマッピング
1 (HOME)
2 VERIFY
3 SAVE
4 LOAD
5 (DELETE)
6 (←)
7 (↓)
8 (↑)
9 (→)
0 (INSERT)
(RUBOUT)
Q GOSUB
W RET
E END
R RUN
T THEN
Y LOCATE
U IF
I INPUT
O OPTION
P PRINT
A AUTO
S STOP
D DIM
F FOR
G GOTO
H POKE
J RND(
K READ
L LIST
; CHR$(
: REM
Z (L.INS)
X (CANCEL)
C (BREAK)
V (GRAPH)
B HCOPY
N NEXT
M CLS
, DATA
. PEEK(

括弧内はスクリーンエディット機能の呼び出しを表します。例えば「コントロール+6」でカーソルが左に移動します。 また括弧のついていないものはBASICコマンドの入力を表し、例えば「コントロール+P」でカーソル位置に「PRINT」という文字列が入力されます。

ワークエリア

アドレス0x00~0xFFにはJR-BASIC内部で使用するワークエリアとなっています。一部の領域はPOKE文で値を設定することにより、JR-BASICの挙動を変えることができます。下表に私がJR-BASICのコードを解析して判明した結果を示します。

アドレス 意味
0x00 キーを押したときのBEEP音のON/OFFを制御する。
0: BEEP音を止める。
1: BEEP音を鳴らせる。
0x01 ブザー音の音程を調整する。
$00~$FF(0~255)を指定可能。標準は$AA(170)。この値が小さいほど高音、大きいほど低音となる。
具体的には、発音周波数をF、このアドレスの設定値をNとすると、以下の式が成り立つ。
F=447000/(N+2)
※ 447000はクロック周波数894kHzの1/2
※ N+2となる理由はR6522のタイマー1の挙動による(→分析記事参照)
したがって、このアドレスに設定する値で調整可能な周波数範囲は以下のようになる。
223,500Hz(N=0)~1,739Hz(N=255)
Nが0~20くらいまでは人間の可聴領域を超えている。実機ではクリック音のような「カリ」という音しか聞こえない。
0x02 – 0x03 乱数値?
0x04 – 0x05 ベーシックプログラム領域の先頭アドレス(初期値: 0x0246)
0x06 – 0x07 ベーシックプログラム領域の末尾アドレス
0x08 – 0x09 2文字型変数領域の先頭アドレス
0x0A – 0x0B 文字列型変数領域の先頭アドレス
0x0C – 0x0D 配列型変数領域の先頭アドレス
0x0E – 0x0F サブルーチンスタックトップのアドレス (初期値: 0x00d4)
0x10 – 0x11 FOR文用スタックトップのアドレス (初期値: 0x0158)
0x12 – 0x13 BASIC領域の末尾アドレス
0x14 モード (初期値: 0x00)
bit7: AUTOモード (0: 通常状態、1: AUTO実行中)
bit6: 印字先の指定 (0: ディスプレイ、1: プリンタ)
bit5: ?
bit4: ?
bit3: ?
bit2: 反転文字を使うかどうか (0: 通常、1: 反転)
bit1: グラフィックモードかどうか (0: 通常文字、1: グラフィックモード)
bit0: INPUT文入力中かどうか (0: 通常モード、1: INPUT文実行中)
0x15 ?
0x16 – 0x17 カーソル位置のメモリアドレス (0xC100~0xC3FF)
0x18 – 0x19 カーソル位置の退避用
0x1A – 0x1B BASICコマンドリストの先頭アドレス (初期値: 0xF898)
以下、あとで書きます。。。

エミュレータ

私が一から作ってみました。こちらを参照してください。
計算機室本館:JR-100エミュレータ

資料編

手持ちの情報から引用しています。追加の情報があればいただけると嬉しいです。

オプション

型名 品名 価格 備考
JR-R01 RFコンバーター 7,500
TR-120MIC 12インチグリーンディスプレイ 47,800
JR-A01 ACアダプタ 本体付属品
JR-A06 ACアダプタ 15,000 本体と拡張ユニットJR-U02用
JR-U01 35,000
JR-U02 拡張ユニット 45,000
JR-P01 74,800
JR-T05 プログラムテープ「多倍長計算他のプログラム」 2,800
JR-T01 プログラムテープ「いろいろなアルゴリズム」 ?

市販ソフト

販売元 タイトル 型番 価格 備考
コムパック タートル・グラフィックス・インタープリタ 439 3,500 I/O 1982年6月号掲載。簡易グラフィック用のインタープリタ
コムパック マシン語モニタ 440 3,500 I/O 1982年6月号掲載。JRのマシン語モニタを強化
コムパック タートル・アニメーション 455 3,500 I/O 1982年7月号掲載。速さで勝負のアニメーション
コムパック キャラクタ・ジェネレータ 614 3,500 I/O 1982年9月号掲載。キャラクタ定義プログラム
コムパック “GET@, PUT@サブルーチン” 528 3,500 I/O 1982年8月号掲載。配列と画面データをやり取りする。
コムパック 逆アセンブラ 632 3,500 I/O 1982年10月号掲載。BASICによる逆アセンブラ
テクノソフト 2001年宇宙の旅 3,500
テクノソフト 2001年宇宙の旅パート2 3,500
テクノソフト プラネットウォーズ 3,500
テクノソフト ドッグ ウォーク 3,500
テクノソフト 2001年宇宙の旅パート3 (狂ったスターゲート) 3,500
テクノソフト ディープクラッシュ (地下モンスターの逆襲) 3,200
テクノソフト コックローチウォーズ (ゴキブリ大群の来襲) 3,200
テクノソフト ホワイトホール (魔の宇宙スポット) 3,500
テクノソフト ザ・スターウォーズ II (ホスからの脱出) 3,500
テクノソフト コンピュータBUG-9000 3,500

JR-100雑誌掲載プログラム

もしお名前を公開したくないという方がいらっしゃいましたらご連絡ください。すぐに削除します。

掲載誌 掲載号 タイトル 作者
I/O 1982年6月号 タートル・グラフィックス・インタープリタ 中村信明
I/O 1982年6月号 BASICによるマシン語モニタ 中野幸雄
I/O 1982年7月号 タートル・アニメーション 中村信明
I/O 1982年8月号 “GET@, PUT@サブルーチン” 中村信明
I/O 1982年9月号 キャラクタ・ジェネレータ 鈴木亘
ラジオの製作 別冊付録 1982年2月号 JR-100用ミニインベーダ 佐山竹男
ラジオの製作 別冊付録 1982年5月号 パルルン・ポンパー 田辺健二
ラジオの製作 別冊付録 1982年5月号 ビッグ・クロック 田辺健二
マイコンBASIC Magazine 1983年1月号 MEDUSA SEA 田辺健二
マイコンBASIC Magazine 1983年1月号 ALIEN HUNTER 高橋はるみ
マイコンBASIC Magazine 1983年2月号 MOON STATION 近江慎一郎
マイコンBASIC Magazine 1983年2月号 MINI TREK GAME 山本順造
マイコンBASIC Magazine 1983年3月号 カエルの冒険 伊藤武司
マイコンBASIC Magazine 1983年3月号 METEO 高橋はるみ
マイコンBASIC Magazine 1983年4月号 ミニ・サブマリン 栃木勝
マイコンBASIC Magazine 1983年4月号 ダスト・ハイウェイ 田辺健二
マイコンBASIC Magazine 1983年5月号 ポン太くん 森彰
マイコンBASIC Magazine 1983年5月号 HALF GOLF 山田哲也
マイコンBASIC Magazine 1983年6月号 ARABIAN SNAKE 伊藤武司
マイコンBASIC Magazine 1983年6月号 RETURN TO EARTH くらっしゃー・じょう
マイコンBASIC Magazine 1983年7月号 メリー・ポピンズ 高橋はるみ
マイコンBASIC Magazine 1983年7月号 牛乳屋さん 熊ノ郷直人
マイコンBASIC Magazine 1983年8月号 3D CAR RACE 熊谷栄二
マイコンBASIC Magazine 1983年8月号 アステロイド・インベーダー 田辺健二
マイコンBASIC Magazine 1983年9月号 LADDER 渡辺聡
マイコンBASIC Magazine 1983年9月号 DIA DIA 熊ノ郷直人
マイコンBASIC Magazine 1983年10月号 ぴったしにゃンニャン 高橋はるみ
マイコンBASIC Magazine 1983年10月号 カニの帰宅 田島典幸
マイコンBASIC Magazine 1983年11月号 JUMP 岸田茂
マイコンBASIC Magazine 1983年11月号 SUPER AMOEBA 伊藤武司
マイコンBASIC Magazine 1983年12月号 ホネホネ・ロック 長嶋賢治
マイコンBASIC Magazine 1983年12月号 MAN EATER 田沢和治
マイコンBASIC Magazine 1983年12月号 GALAXY ONE 木村浩二
マイコンBASIC Magazine 1984年1月号 DEEPGON 田辺健二
マイコンBASIC Magazine 1984年1月号 DANGEROUS PATROL 小林直人
マイコンBASIC Magazine 1984年2月号 緊急発進 浅川純
マイコンBASIC Magazine 1984年2月号 ヘルメット リッチ・ブラックモア
マイコンBASIC Magazine 1984年3月号 FLOG PANIC 伊藤武司
マイコンBASIC Magazine 1984年3月号 ROBOT FIGHT 光成祐司
マイコンBASIC Magazine 1984年4月号 CPYOU 藪谷哲也
マイコンBASIC Magazine 1984年4月号 プラネット・レーダ 月夜のかえる
マイコンBASIC Magazine 1984年5月号 SCRAMBLE DELAY 木村浩二
マイコンBASIC Magazine 1984年5月号 宝だからタカラ 田島典幸
マイコンBASIC Magazine 1984年6月号 OCTPUS えーとえーとえーとまん
マイコンBASIC Magazine 1984年6月号 SCOOP-3 渡辺聡
マイコンBASIC Magazine 1984年10月号 TAKE THE ラーメン・ライス 高見沢雄一郎
マイコンBASIC Magazine 1984年10月号 あらヨット!! 巨神兵ちゃん
マイコンBASIC Magazine 1984年12月号 BALL GAME 渡辺聡
マイコンBASIC Magazine 1984年12月号 LIBBLE 高見沢雄一郎
マイコンBASIC Magazine 1986年11月号 田植えゲーム 鳴海達也
マイコンBASIC Magazine 1986年11月号 DIG DIG 大平正明
マイコンBASIC Magazine パソコン・ゲーム大全集 II パックマン 後藤章二
マイコンBASIC Magazine パソコン・ゲーム大全集 II ロボット・ゲーム 尾崎泰一
マイコンBASIC Magazine パソコン・ゲーム大全集 II マイクロメテオ II 田辺健二

画像ライブラリ

まずJR-100の全景。写真の上に見えているのは自分で付けたリセットスイッチです。写真では分かりにくいのですが、キートップはすべてゴム製で、これが「消しゴムキーボード」と呼ばれた所以です。 PRINTやNEW、RUNのようなBASICの命令が各キーに割り当てられており、コントロールキーと一緒に押すことで一発で入力できます。まだタッチタイプができなかった当時は重宝しました。

私の持っているJR-100。自製のリセットスイッチが見える。
私の持っているJR-100。自製のリセットスイッチが見える。

次に蓋をあけたところ。主基板とキーボードはフラットケーブルで接続されています。

カバーを開けたところ
カバーを開けたところ

主基板はこんな感じ。CPUやメモリ以外は普通のTTLが使われています。部品点数が多くないので、これくらいなら基板のパターンから回路図を復元することができそうです。

主基板
主基板

CPUとVRAMを拡大したところ。JR-100のCPUであるMB8861(上)とVRAMである2114(右下)です。

CPUとVRAMの拡大図
CPUとVRAMの拡大図

メインRAMとして、4116が8個左上にあります。16kビット×8個で16KBとなります。

主メモリ
主メモリ

CPUの左側にはマスクROM(MB8364)とCRTコントローラ(MB14392)が並んでいます。

マスクROMとCRTC
マスクROMとCRTC

基盤の裏側で、CPUのリセット信号に関するピンとアースとをスイッチを介して結び、パターンを一ヶ所切断しています。当時中学生だった私はよく秋葉原でパーツを買ってきては電子工作していたため半田づけすることには自信があったのですが、さすがにパソコンの基板に手を入れるのは勇気がいりました。

基盤の裏側
基盤の裏側

参考文献

  1. (ina1982) 稲本敏晴, 安田育生, 有馬正木, “パーソナルコンピュータ JR-100”, National Technical Report, Vol 28, No.4, pp 635-634, Aug. 1982.
  2. (hos1976) 星川 竜輔,他 “MB8861 8ビットマイクロプロセッサ”, Fujitsu, Vol 27, No.5, pp 67-87, 1976.
  3. (mat1981) 松下電器産業株式会社, “JR-100ユーザーズマニュアル”, 1981.
  4. (sho1982) 誠文堂新光社, “初歩のラジオ”, 1982年1月号.

旧ページでいただいたコメント

  • SY6522のデータシートを発見しました。ご報告まで(^^) http://www.6502.org/documents/datasheets/synertek/まりす 2009-05-02 (土) 13:54:37
  • あれ?探されていたのはMB14392の方でしたね(^^;;不要でしたらコメント削除してください。 — まりす 2009-05-02 (土) 14:01:41
  • 情報ありがとうございます。6522の資料は持っていました。MB14392の方はほとんどあきらめています(^^; — けむしろう 2009-05-25 (月) 01:25:13
  • 拡張ユニットのマニュアルを発掘しました。メモリマップの補完をしておきます。 — まりす 2010-02-21 (日) 04:20:53
  • $D000-$D7FF プリンタ制御用PROM — まりす 2010-02-21 (日) 04:23:07
  • $D800-$DFFF 増設機器用ROM(2716相当品) 2KB — まりす 2010-02-21 (日) 04:24:00
  • $8000-$BFFF ユーザー用PROM(2732相当品×4) 16KB — まりす 2010-02-21 (日) 04:25:08
  • $CC02 ジョイスティック入力レジスタ bit7,6:不定, bit5:0, bit4Switch, bit3:Down, bit2:Up, bit1:Left, bit0:Right — まりす 2010-02-21 (日) 04:28:23
  • ジョイスティックの各ボタン→bitは正論理(ON:1,OFF:0)です。 — まりす 2010-02-21 (日) 04:31:23
  • まりすさん、貴重な情報ありがとうございます。私も拡張BOXは持っているのですがマニュアルが無くて調査に手間取っていました。 — けむしろう 2010-02-28 (日) 22:46:36
  • 懐かしいですねえ、JR-100。熱暴走?で壊れてしまい、捨ててしまいましたが、雑誌のプログラムを打ち込んだり自分でプログラムを作って遊びました・・・。 — りん 2010-03-22 (月) 07:48:57
  • りんさん、それを捨ててしまうなんてもったいない……。また入手できるといいですね。 — けむしろう 2010-03-29 (月) 00:45:49
  • を参照してhttp://www.old-computers.com/museum/computer.asp?st=1&c=320ジュニア- 100の詳細については — Murray Moffatt 2010-08-13 (金) 08:32:20
  • こんにちは。久しぶりにJR-100で検索したらこちらにたどりつきました。プロフィール拝見しましたが、びっくりするくらい私もよく似た道を歩んでいますw。ベーマガでもがんばってたんですがねw。JR-100まだ自宅にありますよん。やっぱ愛着ありますよね。 — 伊藤武司 2011-05-20 (金) 22:50:29
  • こちらの情報を基にジョイスティックインターフェイスを作りました。IOアドレス$CC02正論理で正しく動作しました。 — にが 2016-07-23 (土) 23:09:44
  • 自サイトに製作記事をアップしています. — にが 2016-07-23 (土) 23:10:13
  • http://niga2.sytes.net/msx/index.html MSXを利用してCMT信号を実機に流し込むソフトも公開しています。 — にが 2016-07-23 (土) 23:12:57

作成者: Kenichi Miyata / kemusiro / けむしろう

コメントを残す

メールアドレスが公開されることはありません。