JR-100

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

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

諸元

項目仕様
CPUMN1800(6802相当) 890kHz
とカタログに書いてあるが実際はMB8861H。クロックも正確には894kHz。
ROM8KB
RAM16KB(拡張バスを通じて32KBまで拡張可能)
VRAM1KB
キーボードソフトウェアスキャン。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アダプタ、録音ケーブル、ディスプレイケーブル、デモンストレーションプログラムテープ、ユーザーズマニュアル

雑誌などの情報

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

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

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

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

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クロックを受け取っていますね。

ハードウェア

プロセッサ

カタログ上はMN1800(6802相当)と記載があるのですが、実際には富士通のMB8861Hが採用されています。MB8861HはモトローラのMC6800とハードウェア互換であり、独自に5個の命令が追加されています[hos1976]。以下にCPU仕様と追加命令を記します。

CPU仕様

項目仕様
語長8ビット
制御方式ワイアードロジック
命令数基本命令数 77 (バリエーション数 203)
命令形式可変長
アドレス修飾7種類
メモリアドレス最大64K語
基本命令実行時間2μs (MB8861N) (1MHz)
1.5μs (MB8861E) (1.3MHz)
1μs (MB8861H) (2MHz)
割込み3レベル
半導体プロセスNチャネルシリコンゲート
クロック入力2相 +5V, 1MHz
電源+5V 単一
動作温度範囲0~70℃
インタフェースTTLレベル (IOL = 1.8mA)
パッケージ40ピン DIP

追加命令

命令形式コード(16進)バイト数サイクル数機能
NIMIND7138Bp & (M) -> M
OIMIND7238BP | (M) -> M
XIMIND7538BP ^ (M) -> M
TMMIND7B37(Bp & (M)) ^ Bp
ADXIMMEC24X + IMM -> X
EXTFC37X + (M) -> M

16ビット演算が貧弱であった6800に対して、MB8861HではADX命令で16ビットの加算ができるのは非常に便利でした。

クロック

JR-100には14.31818MHzの水晶振動子が搭載されています。MB8861HはMC6800と同様にΦ1とΦ2の2層クロックが必要なため、カスタムLSIであるMB14392でこれらのクロックを生成し、CPUやビデオ信号の基準周波数を生成しています。CPUクロックは14.31818MHzを16分周した894kHzが与えられます。

メモリ

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

用途開始アドレス終了アドレス備考
RAM$0000$00FFBASICインタプリタ作業領域
$0100$0245スタック領域
$0246$3FFFBASICプログラム領域
拡張RAM$4000$7FFF拡張BOXにより増設
拡張ROM$8000$BFFF拡張BOXにより増設; 2732相当品×4
ユーザ定義文字$C000$C0FFユーザ定義文字
VRAM$C100$C3FFCRT用ビデオ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$FFFFBASICインタプリタ格納

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

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

ビデオメモリマップ
ビデオメモリマップ ビデオメモリマップ

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

ペリフェラル

CRT

JR-100の映像出力はモノクロのコンポジットビデオ信号です。しかしNTSC規格で定められている映像信号形式とは大きく異なる独自形式となっています。以下にJR-100の映像信号のパラメータと、水平・垂直同期信号のキャプチャを記します。

パラメータJR-100の値モノクロNTSC規格
基準クロック (fB)14.31818MHz
ドットクロック(fD)7.15909MHz
(fB/2)
水平同期周波数(fH)15.980kHz
(fD/448)
15.750kHz
垂直同期周波数(fV)62.4Hz
(fH/256)
60Hz
1ラインの時間(1H = 1/fH) 62.58μs63.49μs
1フレームのライン数256262.5
水平同期パルス幅8.94μs
(64/fD)
4.7μs
垂直同期パルス幅 500.6μs
(8H)
190.47μs
(3H)
水平同期
垂直同期

I/Oインターフェース

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

アドレスレジスタ番号レジスタ名JR-100での用途
$C8000ORB/IRBキーボードスキャンラインの読取(入力)
ユーザ定義文字使用有無の制御(出力)
$C8011ORA/IRAキーボードスキャンラインの設定(出力)
$C8022DDRBI/Oポートの入出力方向設定
$C8033DDRAI/Oポートの入出力方向設定
$C8044T1C-LBEEP音の周波数制御
BASICのRND()関数で生成する乱数の要素
$C8055T1C-H
$C8066T1L-L
$C8077T1L-H
$C8088T2C-Lセーブ時の基準周波数(4800Hz)生成
BEEPコマンドの鳴動時間制御
$C8099T2C-H
$C80AASRプログラムセーブ時の1と0の波形パターン生成
$C80BBACR入出力ポートの制御
タイマーのモード設定
シフトレジスタのモード設定
$C80CCPCRハンドシェーク線(CA1,CA2,CB1,CB2)のモード設定
$C80DDIFRタイマーのタイムアウト割り込みの制御
$C80EEIER割り込み有効・向こうの制御
$C80FFORA/IRA未使用

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

キーボード

(後述)

カセットテープ

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

startb0b1b2b3b4b5b6b7stopstop
0xxxxxxxx11

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

オフセットバイト長備考
(非データ部分1)1 (2進数)
(非データ部分2)111111110 (2進数)を28回繰返し
(非データ部分3)1 (2進数) を3828ビット分(255*15+3)繰返し
016ファイル名ファイル名(最大15文字)+16バイトに満たない部分を0x00で埋める。
162先頭アドレスBASICプログラムの場合は’0x0246′。ビッグエンディアンで格納する。
182プログラム長Nビッグエンディアンで格納する。
201フラグBASICの場合 0x00、マシン語の場合 ‘M’(0x4d)
21110x00埋め草
321オフセット0〜31までのチェックサム合計値の下位1バイト
(非データ部分4)1(2進数)を255ビット分繰返し
0Nプログラムデータオフセット18で与えられる値Nバイト。ビッグエンディアンで格納する。
N1プログラムデータのチェックサム合計値の下位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の設定値周波数鳴動時間
0223,500Hz0.001秒
508,596Hz0.026秒
1004,382Hz0.051秒
170 (デフォルト値)2,599Hz0.086秒
2002,213Hz0.101秒
2551,739Hz0.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で始まる富士通製の部品が多いです。

CPUMB8861H (6800上位互換) 富士通のセカンドソース(オリジナル6800に独自拡張)
RAMM5K4116P-3 × 8個 (16KB) DRAM
ROMMB8364 × 1個 (8KB) マスクROM
CRTコントローラMB14392 カスタムCRTコントローラ
VIASY6522 入出力用のLSI
VRAMMN2114 × 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の構文解析ルーチンを少しでもシンプルにしたかったのかな?

キャラクタビットマップ

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

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

A$="A"
PRINT HEX$(ASC(A$))

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

PRINT CHR$($41)

とすればよいです。

ただし直接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"を表示する場合は、

POKE $C100, $21

とする必要があります。

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

LOCATE Y,X:PRINT FLD(1);"0"

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

POKE $C100+X+Y*$20, $91

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

ユーザ定義文字

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

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

ユーザ定義文字のメモリマップ
ユーザ定義文字のメモリマップ ユーザ定義文字のメモリマップ

しかし例えば次の条件を満たせば新たに4文字のユーザ定義文字を使うことができます。

  • 画面の1行目を絶対に書き換えない。
  • 画面の1行目にノイズのような表示があっても気にならない。

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

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

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

標準入力キーコントロールマッピング
1(HOME)
2VERIFY
3SAVE
4LOAD
5(DELETE)
6(←)
7(↓)
8(↑)
9(→)
0(INSERT)
(RUBOUT)
QGOSUB
WRET
EEND
RRUN
TTHEN
YLOCATE
UIF
IINPUT
OOPTION
PPRINT
AAUTO
SSTOP
DDIM
FFOR
GGOTO
HPOKE
JRND(
KREAD
LLIST
;CHR$(
:REM
Z(L.INS)
X(CANCEL)
C(BREAK)
V(GRAPH)
BHCOPY
NNEXT
MCLS
,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 - 0x092文字型変数領域の先頭アドレス
0x0A - 0x0B文字列型変数領域の先頭アドレス
0x0C - 0x0D配列型変数領域の先頭アドレス
0x0E - 0x0Fサブルーチンスタックトップのアドレス (初期値: 0x00d4)
0x10 - 0x11FOR文用スタックトップのアドレス (初期値: 0x0158)
0x12 - 0x13BASIC領域の末尾アドレス
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 - 0x1BBASICコマンドリストの先頭アドレス (初期値: 0xF898)
以下、あとで書きます。。。

自作プログラム

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

資料編

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

オプション

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

市販ソフト

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

雑誌掲載プログラム

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

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

画像ライブラリ

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

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

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

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

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

主基板
主基板 主基板

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

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

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

主メモリ
主メモリ 主メモリ

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

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

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

基盤の裏側
基盤の裏側 基盤の裏側

参考文献

  1. (ina1982) 稲本敏晴, 安田育生, 有馬正木, "パーソナルコンピュータ JR-100", National Technical Report, Vol 28, No.4, pp 635-643, 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
タイトルとURLをコピーしました