JR-100は1981年11月に松下通信工業から発売されたパーソナルコンピュータである。定価は54,800円。松下通信工業が独自に作成したBASICインタプリタJR-BASICを搭載し、モノクロで32列24行のキャラクタ表示機能や、直接内部LSIのレジスタの操作が必要であるものの任意の周波数の単音を発声する機能を持つ。設計方針として、小型軽量で使いやすい高性能なコンピュータ学習機を目指した(ina1982)。
外見の特徴として、キーボードのゴム製のキーボタンを備えていることが挙げられる。これは設計方針の一つである安価であることを実現するために、電卓用のキーボードとして技術蓄積のある導電ゴム接点方式を採用したことによる(ina1982)。 またグラフィック処理は持たないものの、特定の32個の文字コードの文字に対してユーザが自由にビットパターンを定義できるようになっており、簡易な図形描画が可能となっている。
目次
諸元
項目 | 仕様 |
---|---|
CPU | MN1800(6802相当) 890kHz とカタログに書いてあるが実際はMB8861H。クロックも正確には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アダプタ、録音ケーブル、ディスプレイケーブル、デモンストレーションプログラムテープ、ユーザーズマニュアル |
雑誌などの情報
右の画像は、雑誌に掲載されたJR-100の広告です。当時は8ビットマイコンの群雄割拠時代で、電機メーカー各社は独自のマイコンを発売し、華やかな時代だったと思います。そんな中でJR-100は手軽な学習機として位置づけられていて、価格も当時のマイコン群に比べると低価格でした。
⇒余談:JR-100のコストパフォーマンス
ところで、発売当時はまだマイコン専門の雑誌はなかったと思います。その代わりに電子工作系の雑誌に記事が掲載されていました。電子工作雑誌の代表といえば、私も購読していた以下でしょう。
- ラジオの製作 (電波新聞社)
- 初歩のラジオ (誠文堂新光社)
JR-100発売時に掲載された記事を抜粋してみます(ちょっとコピーに失敗しているので後日取り直します)。
初歩のラジオの記事の方が若干詳しいですね。ただ、ラジオの製作にはマイコン記事のための別冊付録が付くようになっていました。この別冊がその後本誌として分離し、一般読者が自作のプログラムを投稿できる代表的な雑誌となっていくのです。
ここでJR-100付属のデモソフトをエミュレータで実行したものを上げてみます。
脱線しますが、なんとpixivにJR-100を題材にしたイラストが投稿されてました。素晴らしい。背景がきっちりJR-100のゲームのスクリーンショットだったり、手に持っている人形が懐かしのナショナル坊やだったり、いい感じです。
技術情報
システム構成
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進) | バイト数 | サイクル数 | 機能 |
NIM | IND | 71 | 3 | 8 | Bp & (M) -> M |
OIM | IND | 72 | 3 | 8 | BP | (M) -> M |
XIM | IND | 75 | 3 | 8 | BP ^ (M) -> M |
TMM | IND | 7B | 3 | 7 | (Bp & (M)) ^ Bp |
ADX | IMM | EC | 2 | 4 | X + IMM -> X |
EXT | FC | 3 | 7 | X + (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 | $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インタプリタ格納 |
ビデオ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μs | 63.49μs |
1フレームのライン数 | 256 | 262.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での用途 |
---|---|---|---|
$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に合わせ、多くの機能を盛り込むのではなく、コンパクトで使いやすいことを最重要と定めました。また、パーソナルコンピュータの成否は外部のサポートに大きく依存することを当時から見抜いていて、雑誌に紹介記事が掲載されるとかソフトハウスがプログラムを開発してくれるためには、特徴あるハードと基本ソフトを提供することが重要であるとしています。具体的な設計方針は以下です。
- コンパクトで効率の良い整数型BASICインタプリタとする。
- 機能豊富なスクリーンエディタを提供する。
これを踏まえ、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) |
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 | |
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 |
雑誌掲載プログラム
もしお名前を公開したくないという方がいらっしゃいましたらご連絡ください。すぐに削除します。
掲載誌 | 掲載号 | タイトル | 作者 |
---|---|---|---|
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の命令が各キーに割り当てられており、コントロールキーと一緒に押すことで一発で入力できます。まだタッチタイプができなかった当時は重宝しました。
次に蓋をあけたところ。主基板とキーボードはフラットケーブルで接続されています。
主基板はこんな感じ。CPUやメモリ以外は普通のTTLが使われています。部品点数が多くないので、これくらいなら基板のパターンから回路図を復元することができそうです。
CPUとVRAMを拡大したところ。JR-100のCPUであるMB8861(上)とVRAMである2114(右下)です。
メインRAMとして、4116が8個左上にあります。16kビット×8個で16KBとなります。
CPUの左側にはマスクROM(MB8364)とCRTコントローラ(MB14392)が並んでいます。
基盤の裏側で、CPUのリセット信号に関するピンとアースとをスイッチを介して結び、パターンを一ヶ所切断しています。当時中学生だった私はよく秋葉原でパーツを買ってきては電子工作していたため半田づけすることには自信があったのですが、さすがにパソコンの基板に手を入れるのは勇気がいりました。
参考文献
- (ina1982) 稲本敏晴, 安田育生, 有馬正木, "パーソナルコンピュータ JR-100", National Technical Report, Vol 28, No.4, pp 635-643, Aug. 1982.
- (hos1976) 星川 竜輔,他 "MB8861 8ビットマイクロプロセッサ", Fujitsu, Vol 27, No.5, pp 67-87, 1976.
- (mat1981) 松下電器産業株式会社, "JR-100ユーザーズマニュアル", 1981.
- (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