NEC PC-2001のご紹介!

最近「とある」作業に取り組んでいて、まだ公表できる段階にない。

ブログも久しぶりになってしまっているので、困った時の機種ご紹介!(^^;;

今後も唐突に機種紹介が来たらネタがないと思ってくれて構わない!(ToT)

 

f:id:PocketGriffon:20210413145344j:plain

PC-2001の思い出

おっさんの思い出話なんて聞いても仕方ないと思うけど、まぁ聞いてくれ(書くのかw)

私が最初にどっぷり使ったパソコンはPC-8001だった。たまたま友達の家にあったのを使わせてもらっていたのだ。所有者は友達の父親であり、友達ではない!もしかしたら所有者よりもPC-8001を使っていたかも知れないw

 

その所有者(まさに恩師)が晩年、「あんなにパソコンにハマらせてしまって…あの子の人生を変えちゃったんじゃないだろうか…」と心配されていたと聞いた。大丈夫、人生変わって良い方向へ行ったから!(^^)

 

私があまりにもPC-8001を使ってしまうので所有者があんまり触れなかったんだと思う。子供心に全く気がついてなかったが悪い事をした!(ホントに思ってる!)

その所有者が「ちょっと買い物行ってくる」と出ていったと思ったら、いきなりPC-2001を買ってきたのにはホントに驚いた。これが人生初のモバイルパソコンとの出会い。

 

PC-2001に搭載されているN20-BASICは、PC-8001のN-BASICとの親和性が高かった。キーボードに5つのファンクションキーなども備わっていた。ハンドヘルドなんだけどデスクトップパソコン使ってる感覚と似てて、とても自然に使うことが出来た。

一度、作ったゲームプログラムをプロテクト(LOCK)したと思いこんで、試しにNEWしてみるか…と思って実際にやって消してしまい、とても悲しい思いをした。いまだに覚えてるんで相当悔しかったんだろうw

 

恩師が他界した際、「ここに置いておいても仕方ないから…」とパソコン関連のものをいくつか形見として受け継いだ。PC-2001もあるかと思ったが残念ながら無かった。

 

何年か前、とある場所に行った時、段ボールの下にちょこんと置いてある茶色いケースを発見した。見た瞬間に「うわ、これPC-2001だよ」とつぶやいたところ周りからたいそう驚かれた!本体を見ずに機種を言い当てたのだからPC-2001を知らない人から見たらそりゃそうか(^-^;;

茶色のケースから本体を取り出すと、当時見たPC-2001と瓜二つ!(当たり前)

これも運命だろうと思い、そのPC-2001を手に入れる事にした!

まさに35年ぶりの再開!(^^)

 

手元にあるPC-2001

今、私の手元には3台のPC-2001がある。どれも動作品だ。

そのうちのひとつは箱に入ったままの逸品だ!

f:id:PocketGriffon:20210413160058p:plainf:id:PocketGriffon:20210413160153p:plain

他の2台には増設RAMカートリッジがついている。

f:id:PocketGriffon:20210413162313j:plainf:id:PocketGriffon:20210413162336j:plain

PRINT FRE(0)とした結果は14274と出た。

本体メモリ8KB+増設分8KBという構成だ。

 

そういえばPC-2001の増設メモリについて、あんまり写真が出回ってない気がする。

せっかくなのでこちらもご紹介!

f:id:PocketGriffon:20210413162703j:plain

PC-2001を横から見ると、こんな感じにとりつけられている。

裏からは↓こんな感じ。

f:id:PocketGriffon:20210413162811j:plain

オークションなどでPC-2001が出ていたら、まずは横と裏面を見るのが良いだろう(^^;

単体で見るとこんな感じ。

f:id:PocketGriffon:20210413163235j:plain

型番はPC-2006というらしい。これ1つで8KBが増設される。

PC-8201のようなメモリディスク機能はないので、純粋にメインメモリが増設されるだけだ。

f:id:PocketGriffon:20210413163733j:plain

中身はこんな感じ。

残念ながら追加でメモリを増設できそうなパターンは用意されていない(^^;;

 

そして中にバッテリーが入っているのだが、外部からは電池の存在を知る記述が一切ない。マニュアル無しで手に入れた人は電池の存在に気が付かず使ってる人が多いのではないだろうか…汗

運用は…おそらくPC-8201の増設メモリであるPC-8206と同じで、本体から引っこ抜く時にWR.PROTECTスイッチをONにし、抜→PC-2001→挿とした後にWR.PROTECTスイッチをOFFにするんだろうと思う。

 

ところで…

f:id:PocketGriffon:20210413164459j:plain

増設メモリにある↑このディップスイッチはどう設定するんだろうか…?

どなたか、マニュアルをお持ちの方がいたら教えて欲しい(T-T)

 

PC-2001のプログラミング事情

これだけPC-2001に惚れ込んでるといいつつ、積極的なプログラミングはしていない。

理由はいくつかある。

ひとつめはシリアルケーブルの問題だ。

PC-2001にはシリアル通信をするための端子が付いている。

f:id:PocketGriffon:20210413165540j:plain

左から2番めの端子がSIO、シリアル端子だ(表記はS I/Oとなっている)。

ここにケーブルを挿してホストマシンとのやり取りができるのだ!

レトロにはありがちだけど、やはりケーブルは手に入らないので自作するしか無い。

すでに該当するコネクタは手に入れてある!

f:id:PocketGriffon:20210413165718j:plainf:id:PocketGriffon:20210413165737j:plain

ちゃんと付けられる事は確認済み!

しかも!!!!

f:id:PocketGriffon:20210413165815j:plain

失敗した時のためにいくつか手に入れてある!(買いすぎ)

そしてケーブルを作る上で必須の端子詳細についても資料がある。

f:id:PocketGriffon:20210413170246j:plain

これだけお膳立てが揃っていれば作らないわけにはいかないだろう!!

 

……と言いつつも、全く食指が動かない。

それが2つめの理由だ。

PC-2001にはシリアルから受け取ったデータをプログラムメモリに保管する方法がない。BASICで「INPUT %1,A$」という感じで変数に受け取るしかないらしいのだ。

これだと外部で作ったプログラムを送り込めない(T-T)

せめて増設メモリがRAMディスクのように使えるようになっていれば、そのメモリディスクへASCIIセーブする方式が取れたのだが…。

他にも同じような事情のマシンがあり、それらはプログラミングの対象になりづらい(T-T)

 

ちなみに技術資料は頑張って集めてある。

f:id:PocketGriffon:20210413172337j:plain

まずおなじみ?のPC-2001プログラムライブラリ。さすが工学社!こういう機種用にも出してくれているのは本当に助かる(^-^)

ゲームプログラムが9本、他にビジネスで使えそうなプログラムやらがたくさんって構成。基本的にBASICで書かれているものばかりなので、技術資料というよりはプログラム集。唯一、ガギャラというゲームがキー入力系でマシン語を使っているだけ。

 

f:id:PocketGriffon:20210413173216j:plainf:id:PocketGriffon:20210413173240j:plain

ASCII 1983年8月号。

この本にPC-2001のテクニカルマニュアルが載っている。私が知る限り、この記事が最も詳しい技術資料かも知れない。CPUの構成からニーモニック、ハードウェア詳細、ROM内ルーチンの説明など、PC-2001のマシン語でプログラムするなら必須とも言える情報が満載だ。

これはぜひ手元に置いておいて欲しい(^^)

 

f:id:PocketGriffon:20210413174200j:plain

そしてこちらもおなじみ?のB-Number。

The BASICのバックナンバー合本なのでB-Numberという名前なんだと思われる(^^;

The BASICはワリとマニアックな事が書かれている本で、PC-2001でもモニタ、アセンブラ、逆アセンブラ、通信ソフトなど情報が載っている。プログラムを作られた方が内部構造の資料として書かれているので、技術資料とはちょっと違うんだろうけれども、少ない情報源なので大切にしたい(^^)

 

あとはマイコンBASICマガジンとかI/Oとかに載っていたプログラムだろうか。月刊誌は別の場所に保管してあるので写真はないけど、それなりにゲームなどのプログラム載っていた気がする(^-^)

 

今思ったけどCMT端子が生きていれば、そこを経由してプログラムのセーブロードが出来るかも…。JR-800で試していた方法(うまく行ってないけど)が出来れば、作れなくはないなぁ…うーん…(^^;;

そしてROMは20KB…

JR-800で手入力したROMも20KBだったなぁ…(遠い目

 

何か意味深な事を書きつつも今日のところはここまで!(^^;;

ではまた次回!(^-^)ノ

National JR-800 解析その1

BASICのROMをげっと!

先日から触り始めたJR-800。

もっと戯れてみたいけれども、シリアルでの通信もカセットインターフェースでのやりとりもうまくいかず、なかなか突破口の見えない状態が続いていた。

 

本体でその場限りのBASICを使っていても大した解析は出来ないよなぁ…と思う日が続く。

f:id:PocketGriffon:20210323231559j:plain

なにげにメモリダンププログラムをBASICで書いてみた。$8000以降はBASICのROMが入っている事が分かっているので、そこを表示させてみた感じだ。この時には気がついてなかったが、1バイトの上位4ビットが0に化けてたw

 

JR-800のHuBASICは、ちゃんとHEX$が装備されていてメモリダンプが作りやすい。唯一びっくりしたのが論理演算のANDが無い(^^; チェックサムの下位8ビットのみを残そうとして「SUM AND 255」とやったらError。さすがにANDが無いとは想像もしていなかったので、エラーの原因が分かるまで相当「うーん」ってなった!

 

試しに最初の数バイトだけを打ち込んでみる。

f:id:PocketGriffon:20210323232227j:plain

うんなるほど、こんな感じか。最初のアドレスは生成するプログラムをちゃちゃっと書いてやれば良いし、スペースもナシで大丈夫か…そこまで見づらくはない。

打ち込んでみると4バイト4バイト1バイトって感じで区切りもわかりやすい。

……出来るところまで打ち込んでみるか!!(^^;;;

f:id:PocketGriffon:20210323232855j:plain

JR-800のメモリマップはこんな感じ。

ROMは$8000〜$BFFFの16KBと、$F000〜$FFFFの4KB、合計20KBだ。

BASICのプログラムを改造して、7行表示してキー入力待ち、キーが入ったら次の7行を表示する…という単純なダンプを作った。それと合わせてパソコン側で打ち込んでいく。チェックサムは入力だけしておいて、あとで合わせるという魂胆だ。

ひたすら20KBをちまちまと打ち込む作業が始まった(^-^;

それからは何かちょっとでも手が空いた時間が出来ると、写経のごとく打ち込んでいく。これがZ80のダンプリストだったら「あ、ブロック転送してる」「ここでループしてるのか」とかバイナリから感じ取れる構造があるんだけど、これは6301。バイナリコードをまーったく暗記していないので、ひたすら16進文字を打ち込むだけの作業となる。

途中、ASCIIコードっぽい部分を打ち込む時にはちょっとだけ楽しかったがw

 

結局、トータル約8時間掛けて20KBを打ち込んだ!チェックサムの合わせにも約1時間くらい掛かった。もーやだ、ダンプ見たくないってところまで追い込まれた(^^;

 

解析のマネゴト

なにはともあれROMのバイナリコードが手に入った。これを逆アセンブルしてみるにする。

HC-88のスレーブCPUを制御するために必死に作った逆アセンブラがここでも生きる!

幸い、逆アセンブラはHC-88に依存せずに作ってあったので、JR-800のROMでも問題なく動かす事が出来た。ただ…HC-88では使われていなかった命令(ちゃんとした6301の命令)がいくつもあったため、中途半端に作られていた逆アセンブラの完成度を高める必要はあったがw

 

6301CPUはリセットされると$FFFEに書かれた2バイトをPCの値として取り込む。

とっかかりとして分かっているのはこの情報だけだ。

 

アセンブラリストを見て真っ先に思ったのは「やべぇ、6301忘れてる」(^^;;;

あれだけHC-88の時に入れ込んでいたのに、もはやレジスタ構成すら忘れてる体たらく(^^; もう一度復習するところから始める事に……orz

 

ブートするコードを追いかけていくと、なんだか値を見て分岐する箇所があった。マニュアルを見たところ「R+S+Tを押しながら起動するとコールドスタートする」という機能があるらしい。ははぁなるほど、キー情報はこうやって読み込んで判断していくのか。

 

さらに起動時の「JR-HuBASIC 1.0」を表示するコードを発見。ということはコレは文字列表示ルーチン、その先に呼び出されるのが1文字表示ルーチンだ。

1文字表示ルーチンを見ていくと、$00〜$1Fは文字表示というよりは機能コード(コントロールコード)となっていて、32個のテーブルジャンプで構成されている。という事はこっちが画面クリア、こちらがカーソル移動か…。

 

みたいな感じで、ちょっとずつ手がかりを見つけながら解析をしていってる。

何か作ろうにもコードを送り込む方法が無いので、今のところは何も出来ないが…orz

気力が続くうちはもう少しだけ頑張ってみるよ!!

何か作れたらホント楽しいだろうなぁ!!!(^-^)

 

ではまた次回!(^-^)ノ

National JR-800 ご紹介!

今回はJR-800のお話(^-^)

 

先日、某所でJR-800の写真を見て、ああ懐かしいなぁ…確か持っていたなぁ…と思い、頑張って発掘した。

なぜかマニュアルとプリンタはすぐに出るところにあった。なんでだw

 

JR-800本体

f:id:PocketGriffon:20210316125544j:plain

これがJR-800の本体。

ちゃんとケースに入れられて保管してあったので、とてもキレイな状態だ!

この本体の色味がとても気に入っている。青いキーボードもナイス。

なんでも良いけどSPACEとRETURNをものすごく打ち間違えるw

きっと多くのJR-800ユーザーが間違えると思う!(自信満々)

 

f:id:PocketGriffon:20210316130606j:plain

表示はこんな感じ。ぱっと見てドットが目立つ感じの液晶とフォントになっている。

横32文字、縦8文字。縦方向に8文字分あると編集する時にもだいーぶ楽ちんだ。

PC-8201、HC-40やHC-80とかと行数が一緒だね!

 

 グラフィックス的に見れば192x64ドットの画面構成。BASICのグラフィック命令はPSET、PRESET、LINEの3つしか存在しない。CIRCLEやPAINTは無いので複雑な絵を描こうとしたら頑張らねばならない。ユーザー定義文字(PCGみたいな機能)が32文字分使えるので、BASICで作るゲームなどのキャラクタ表示で使えそうだ。

 

f:id:PocketGriffon:20210316155556j:plain

裏面はこんな感じのシンプルイズベスト。

カタログスペックにあった増設メモリってどこにつくんだろ??

なんて思いつつ電池ボックスを開けてみた。

f:id:PocketGriffon:20210316155655j:plain

マンガンの単三電池4本で25〜70時間も動かせるらしい。という事はアルカリ電池だったら倍くらい動いちゃうのかしらん??これはすごい事!!

そして電池の左側にメモリ増設用の端子がついてた。

f:id:PocketGriffon:20210316160106j:plain

なるほどわかりやすい。もう今の時代じゃ増設メモリ手に入らないね(T-T)

空いてるところが見えてると「スロット埋めたくなる病」が発動するので、見えないくらいがちょうど良いw(自己抑制?なにそれ?)

ちなみに増設メモリは8KBのようだ。

 

プリンター JR-P20

f:id:PocketGriffon:20210316165902j:plain

JR−800本体を手に入れる際に一緒についてきたプリンター JR-P20。

今の時代ではかなりのレアアイテムなんだと思う。

 

大きさ的には横20cmくらいのサイズで、本体と並べるとこんな感じ。

f:id:PocketGriffon:20210316170336j:plain

存在感あるサイズだけど、この時代のプリンターとしては小さい??

重量はめちゃくちゃ軽いです。JR-800も乾電池入れた状態でもかなーり軽いんだけど、プリンターはそれよりももっともっと軽い。

f:id:PocketGriffon:20210316170937j:plain

そして裏面。安定のシンプルさw

このプリンターも単三電池4本で動かせる。ACアダプタも使えるけれども、アダプタの形状が本体とは違ってる。同じボルト数でセンターマイナスも同じなのに形状的に刺さらないってのは意図的なんだろうなぁ…多分。

f:id:PocketGriffon:20210316171153j:plain

よくよく見たら「GRAPHIC PRINTER」だった!グラフィックもプリントアウト出来るのか!BASICマニュアルみたら「HCOPY」なる命令があった。プログラムに埋め込むのもアリだけど、CTRL-2を押すといきなりプリントアウトも出来るらしい。すごい!!

 

試しに…とプリンターの電源を入れてみたけど無反応。電池でもACアダプタでもダメ。

軽く中身をみてみようと開けてみたのが下の写真。

f:id:PocketGriffon:20210316171539j:plain

基板自体はとってもキレイ!これでなんで電源入らないんだろ…。

やっぱコンデンサですか???

と思って図ってみたけど問題はなさそう!疑ってスマンかったw

f:id:PocketGriffon:20210316171700j:plain

時間を確保してじっくり見ていくしか無いかもね!

何よりも本体とつなげるケーブルがないので、気力も奮い立たない。仕方ない(T-T)

 

BASICマニュアル

手元に来た時からだいぶくたびれているBASICマニュアル。

f:id:PocketGriffon:20210316172112j:plain

中身を読む分にはなんの問題もない(^-^)
本来ならば取扱説明書もあったんだろうか…私の手元にはコレ1冊しか無い。
そして残念な事に、本全体が曲がってしまっている。

f:id:PocketGriffon:20210316172305j:plain

どうやったらこんな曲がり方になってしまうんだろう…(T-T) 私自身は本をとても大切にしたい人なので、出来たら直したい。

そう思って数ヶ月前に本を引っ張り出した時以降、重たい本の間に入れておいた。こうすると何ヶ月かすると元に戻ったりするのだ。本当はジップロックなどに入れてレンジでチンした後に重しを乗せれば、比較的簡単に元に戻るらしいのだが…。

f:id:PocketGriffon:20210316172510j:plain

↑今の状態がこんな感じ。写真を並べてみるとだいぶ良くなってきたのがわかる。あと1年くらい放置しておこう(^-^)

 

コールドスタート(R+S+T+ONボタン)した画面がこちら↓

f:id:PocketGriffon:20210316172905j:plain

なんとなく起動画面を見てて思うのは……そう、マイクロソフト系のBASICではないのだ。

通常のシーケンスを記述するコマンドで違和感を感じる事はないんだけど、特殊なコマンドで「あれ?」と思う事がいくつも出てくる。

例えば……いくつか例を上げてみるけど、

 

マシン語領域の確保は、マイクロソフト系のBASICならばCLEAR文のオプション指定で行うが、JR-800だとNEWON命令で行う(NEWON &H2800とか)。

 

FLDという命令は文字を表示する時にXORする値を定義するコマンド。アンダーラインを引きたい時には「FLD &H80」とする。消し線をつけたように見せたい時「FLD &H08」、文字を反転した時は「FLD &HFF」といった具合だ。

 

CALCはとても面白い命令。文字列を評価して答えを返してくれる。

例えばこんな感じだ。

 10 A$="1+1"

 20 B=CALC(A$)

 30 PRINT B

これでBに2が入ってくる。プログラムで文字列(としてのプログラム)を作成し、それを実行することが出来るという事は、いろんな事に応用ができそうだ。

命令1つ1つを取ってみても興味がそそられるBASIC!

 

せっかくなので何か作ってみたいが…

さて…せっかく発掘したJR-800なので、何か作ってみたいよなぁ…って気になる。

CPUは6301らしいので、先日まで取り組んでいたHC-88のスレーブCPUと同じだ。

ということはアセンブラ環境はHC-88で準備したモノを使えば良いのだ。

 

f:id:PocketGriffon:20210316174918j:plain

本体の背中側を見てみると、シリアル端子が出ている。マニュアルを見ると、どうやらJR-800本体同士を繋げてプログラムの転送などで用いるようだ。形状がCASIO系のポケコンについてるシリアル端子と似ていたので、モノは試しと繋げてみた。

f:id:PocketGriffon:20210316175113j:plain

やっぱり…というか全く通信出来なかった(^^; そもそも端子の電気信号が同じかどうかも分からないので繋がるわけがない(TT)

f:id:PocketGriffon:20210316175304j:plain

あとはカセットインターフェース端子がついている。でも私はデータレコーダを持ち合わせていない。テープで開発するのは避けたいなぁ…と思い、テープ運用の環境はもっていないのだ。…と言いつつ、そういえばボイスレコーダーを持っている事を思い出した。

 

テープへSAVEした音声データをMacへ持っていき、wavへ変換後解析ツールを作ろうとしてみたが、今のところ良い結果は出ていない(T-T) これが正常にバイナリ化→wav化出来たら、一気にJR-800でのプログラミングは現実化するだろう。

ボイスレコーダーの精度の問題のあるんだろうけれど、うまく行ったらいいなぁ。

 

というわけで今回は単純なJR-800のご紹介でした!

ではまた次回!(^-^)ノ

 

 

文豪ミニ5でプログラミング! その3

何もプログラミングしてないけどこのタイトルでいいんだろうか…汗

f:id:PocketGriffon:20210313145012j:plain

現状のご報告的な感じで書いていってみようと思う。

 

 

基本、目的を達成したいためだけに調べているので、詳しい事は解析していない(^^;

だってこんな巨大なROMを持つマシンを全解析なんて絶対に無理(^^;;;

 

独自プログラムからMS-DOSフォーマットのフロッピーディスクをアクセスする方法が分かったので、それを利用してROMのデータを解析してる(この1行を実現するためにどのくらい苦労してるのかを理解してもらえれば…w)

 

とりあえずは初期化部分を調べていけば必要なポートとかわかるかも…と思いつつ、ブート部分から見ていってる。

アセンブラは8086に対応したものを作成してあったが、V33特有の命令(というか80186で追加された命令)も出てきているので、随時追加対応していってる。

 

その結果、バンク切り替えで表に出る大量のメモリ(主にROM)が見つかった。

HDDを積んでいるマシンなので、てっきりROMサイズは小さいかと思っていたが巨大だった。おそらくフォントなどの動作速度に直結するデータはROMに入ってるんだろう…。展開するRAM積むよりもROMの方が安いって事情もあるのかも?

 

f:id:PocketGriffon:20210313151036j:plain

そういえばアウトラインフォントのROMカードも持っているので、こちらもどっかのタイミングで中を見てみたい。データだけ見てもイマイチかも知んないけどw

ROMの中には「……デバッガーが埋まってる?」と思うような文字列が入ってたりするので、解析楽しそう(^-^) 少なくともメモリマップや逆アセンブラの機能は含まれていそうと分かった。BIOSのラベルまで入ってるのはどーなのかとw

 

ブート周りを解析してみて分かったのは、CP/Mが起動するプログラムが本当に無いって事。実は隠しコマンドとかで入ってるのかなーと思ったけれども、コードそのものが無かったw

CP/M自体はROMに積まれてるっぽいので、起動する仕組みを作ってみたいね!

 

f:id:PocketGriffon:20210313172552j:plain

「点」を打つ機能が見つかったので、なんとなく遊んでみたw

LSI C-86(試食版)でも浮動小数点の計算は出来る!それなりに速いかなぁ…と思ったけれども、「点」を打つファンクションが激重で、描いてる点が見える(^^;;

 

なんて感じで脱線もしつつ解析は進めてるよ!

うーん、文豪エミュレータ作った方が解析早いかなぁ(良からぬことを…

 

ではまた次回!(^-^)ノ

文豪ミニ5でプログラミング! その2

文豪で…というよりはV33で…というか8086でというか(^^;;

なんとなく高速化ネタを思いついてしまったので、私にしては珍しく初期段階での高速化プログラミング。まぁ趣味の世界だからいーのよw

 

f:id:PocketGriffon:20210311104518j:plain

文豪はテキストVRAMを持たない表示構成なので、文字フォントを表示させようと思ったらドット単位(実際には8ドット単位)で点を打っていく必要がある。まだフォント周りの解析なども一切進んでいない。表示されているこのフォントは、プログラムファイルにデータとして含んでいる。

 

画面構成は640x400ドットとなっていて、色を出すためには3つのプレーンに同じデータを書き込む必要がある。この辺りはPC-8801PC-9801を想像してもらえれば良いだろう。3プレーン同時書き込みとかALUのデータコピーなどの機能は無い(と思う)ので、地道にバンク切り替えて書き込むというオーソドックスなパターン。

 

開発&解析の初期段階なので、極力プログラムに労力は掛けず、全てC言語で記述することで開発効率を上げる方向に振っていた。スタックポインタの初期化などどうしても避けられないところはインラインアセンブラで記述していたが、アセンブラの使用はその程度だ。

 

先日までの作業で、ようやくメモリダンプが動くようになり、8086で使用できる1MBのメモリ内容が見られるようになった。そこでやっと「自分自身がロードされているアドレス」を知ることが出来たw それまで手探り状態だったのでちょっとスッキリ!何をするにも仮説を立て「多分こうだろう」と想定してプログラミングしていた事が、実際に実証されていく過程がとても楽しい!(^^)

 

ダンプ表示はカーソルキーでアドレスとセグメントを変化させていく事が出来るようにしてあるけど、キーリピートの速度に表示が追いつかなくて、少しもたもたした表示になってた。出来る限りC言語で高速に描画出来るようにプログラム書いてたけど、いくらV33 16MHzとしても限界かなー。

 

ふと…「そうか、1文字のフォントデータは8バイト(一番下は空白なので7バイト)しか無いから、先にデータを全部レジスタに読んでおいたら各バンクへ書き込みだけで済むなぁ」なんて思った。思ってしまったらアセンブラで書きたくなって仕方がないw

 

具体的な方法

ここに8086(V33)のプログラムを掲載するのもアレなので、日本語で書いてみる。

考え方としては、レジスタマシンである8086でメモリをアクセスするのは時間が掛かるので、必要なフォントデータ(同じデータを最大3回書く)をあらかじめレジスタにロードしておいて、メモリをアクセスする回数を減らしてみよう、という作戦だ。

同時にセグメントレジスタの管理も簡単になるため、全体的に高速化されるハズだ。

 

幸い8086にはレジスタが豊富にあるため、レジスタの使い回しに困る事はなかった。DI、SI、ES、DL(合計7バイト)をデータ保持用レジスタとしてプログラムを組んでみた。VRAMのアクセスをする際にはDSを固定する事ができ、ループ展開で一気にVRAMへ書き込んでやる。これをバンク切り替えしながら3プレーンに書き込めば良いのだ。

 

この作業と同時に、書き換えるべきデータが前回と同じだった場合には描画をパスするようにした。PC-8801などで良く使うテクニックだw

これらの作業をしたおかげで、ストレスなくメモリダンプが行えるようになった!無駄にスクロールさせちゃうよw

 

高速化された事に気を良くして、リアルタイムにダンプ表示を行えるようにもしてみた。こうする事のメリットは、割り込みなどで書き換えられるワークエリアを簡単に探し出す事が出来る事だ。キー入力があった時にどこのメモリのどのビットが1になる…なんてのもすぐに探し出せる。高速表示が可能だからこそ出来る技だ(^-^)

 

ところで……LSI C-86(試食版)でアセンブラを使うプログラムを初めて書いたかもしれない。書き方がMASMなどと違っていて最初は面食らったけど、そこはコンパイラが出力するアセンブラリストが参考になるので特に困らなかった。

 

V33はシフト回数が指定できるので、なんとなく8086では出来ない「SHL BX,3」(BXの値を8倍にする)などと書いてみたが、これがうまくアセンブル出来てしまう。あれ?このアセンブラは80186の命令も解釈してくれるんだ…と思っていたが、実際に出力されたコードを見てみると「SHL BX,1」が3つ出てたw

 

今回のプログラムはループの外にあるコードだったのでこのままにしたが、どうしても気になるならばDB列でマシン語コードを書いてやれば良いかなーと思った。

f:id:PocketGriffon:20210311130534j:plain

 

何をするにも1行書いては試してみる…という様子を見ながら書いていく状態が過ぎ、ようやくまとまったプログラムを書いても大丈夫になってきた。ここまで来るのが本当に大変w

慌てず騒がず落ち着いて取り組んでいくよ!(でもやりたくて仕方ないw)

 

ではまた次回!(^-^)ノ

文豪ミニ5でプログラミング!

Twitter上で「謎マシン」と呼びつつ解析をしていたモノを公開してみたい!

あんまり詳しくは書けない(よからぬ事をしていると思う)ので、なんとなくイメージが掴める程度の内容になってしまうのはご理解くださいませ。

f:id:PocketGriffon:20210310192105j:plain

謎マシンの正体は!?

いや、そんなタイトルつけるほどの事じゃないw(しかもブログの写真でバレるw)

f:id:PocketGriffon:20210310120141j:plain

NECの「文豪ミニ5ZC」でした!

「え?文豪ってワープロだよね?」と思ったアナタは正しい(^^)

そう、文豪は専用ワープロだ。

でもその文豪でCP/Mが動いたりMS-DOSが移植されたりしていたのは有名な話。

しかしそんな遊びが出来たのは比較的古い文豪であり、この時代の文豪では封印されている。

残念ながらCP/Mが起動するコマンドなど存在しないのだ。

そんな不自由になってしまった文豪を、自由自在に扱ってみたい…と思うのは、プログラマとしては致し方ない事だろう!(自己肯定)

 

文豪ミニ5ZC仕様

ZCのCPUにはNEC製のV33が積まれ16MHzで動作する。パソコンに例えるとPC98DO+くらいの速度で動く。意外にパワフルな事に驚くだろう。ZCよりも前の文豪では、プリントアウト時に使うアウトラインフォントを展開するのにV60という32bitのCPUを別途積んでいた。おそらくコストダウンという意味合いも込めて、1つのCPUで賄う構想が出たのだろう。パワー的にはV33の16MHzくらいあれば大丈夫…という判断があった、と勝手に解釈してる。

V33は8086互換だけど、速度的には80286と同等くらいで動く。実際に触ってみても(他の文豪と比べて)キビキビとしている。

 

メインメモリは512KB積まれている。こんな情報はカタログのどこにも載っていない。CP/Mが動くと騒がれたミニ5Gの時代が96KBだった事を考えれば、ものすごく巨大になった!これはワープロとしてやれる事が増えたおかげだ。文章メモリは爆発的に増えたりしていないが、画像を扱ったりアウトラインフォントを使えるようになった分、バッファサイズが大きくなったのだろう。

 

記録媒体としては内蔵フロッピーディスクが1台、2HD/2DDアクセスが出来る。なんとなく2DDとしてしか使ってなかったけど、書きながら2HDが使える事を思い出したw ドライブ自体は3モード対応となっている。

あと文豪は専用ワープロだけど、中にHDDが積まれている。容量はおそらく40MBだと思うが確信がない。普通のIDEで接続されていたがWindowsからは中身が見えなかった。

 

画面にはカラー液晶が積まれている。STN液晶で今見ると残像がすごい!(^^; 解像度は640x400ドットで色はどうやら8色みたいだが、まだ解析が進んでいない。VRAMは32KBが3バンクの構成。ヘルプメニューなどのためにもう1セットVRAMが用意されているのが過去機種であったので、もしかしたらもう1セット(96KB)あるかもしれない。

 

文豪でプログラムの実行

この時代の文豪で外部プログラムを実行するのは、実に簡単だったりする。

「お好み設定」→「オプション」と選ぶと、フロッピーディスクに書き込まれた「とあるファイル」をメモリへ読み込み実行する。実行されるプログラムはV33のマシン語で書いておけば良い。これだけだ(^^)

 

問題があるとすれば、実行されるプログラムバイナリが文豪用に書かれている必要がある事かもしれない。誰も文豪の中身なんて知らないw メモリ構成やシステムコールの呼び出し、割り込みやVRAMアドレスなどは解析していくしか無い。これが非常に時間が掛かる。

 

開発環境はLSI C-86 試食版を使用している。文豪でMS-DOSが動いているわけではないので、MS-DOSに依存したライブラリは一切使えない。逆に言えばそれ以外はすべて使えるのだ。OSに依存しない開発なんてポケコンで慣れっこなのでなんの抵抗もない(^^;;

Macで編集、DOSBoxでコンパイル、出来上がったCOMファイルをフロッピーにコピーして文豪で起動…という手順だ。

 

で、文豪でなにがしたいの?

一生懸命に解析したりしているが、結局のところ何がしたいのか…だけど、実はやりたい事が2つある。1つは「とあるプログラム」を動かしたい事、もうひとつはMS-DOSを移植したいのだ。1つめを明かさない理由はブログに書いて驚かせたい…というよりも、実現出来ない可能性が見えてきてしまったからだ。

 

まだ調べ始めたところだけど、おそらく文豪ZCには以下の機能がなさそう。

・反転型VRAMを通常に戻す方法が欲しい

・パレット切り替え機能

・縦200ドット表示

 

上の2つがないとPC-9800シリーズのソフト移植はかなり難しい、下の1つがないとPC-8800シリーズからの移植が難しい。これからまだまだ解析を続けるので発見される可能性もゼロではないが、なんとなくワープロに必要ない機能は削られている気がする。

 

文豪へMS-DOSを移植するのは、私の若い頃からの夢かもしれないw まだ10代だった頃、文豪ミニ5HGに移植を試みた事があるのだが、出来上がったMS-DOSはひどく中途半端で、ハングアップも頻繁にあった。実用レベルとは到底言えなかったのだ。

その時の悔しさがあるので、ぜひとも実現したいと思いつつ、だいーぶ月日が経ってしまった。まだプログラムが組めるうちにチャレンジしたい!

 

V20-MBCの時にもMS-DOSを移植したいと言っていたが、実は最終的には文豪でチャレンジしたかった…というのがあったのだ(^-^;

 

文豪の解析はライフワーク的にやっていこうと思うので、ちょっとずつ進めていこうと思う。このブログに出てきた時には、文豪カテゴリーで検索してもらえると良いかも(^^)

 

ではまた次回!(^-^)ノ

TOSHIBA T1200 メンテナンスその1

f:id:PocketGriffon:20210308213904j:plain

冒頭から話は逸れるが…1990年にEPSON PC-386LSを手に入れた。

PC-9801互換のラップトップパソコンで、重さ8kgを超える重量級だ。当時、手持ちのクルマを売却したことで少しばかりの現金が手元にあった。PC-9801シリーズの何かを購入しようと検討した結果、PC-386LSを選んだ。前の年から欲しかったのだが、びっくりするくらい高くて(定価で50万オーバー!)躊躇しまくっていたのだ。

 

この時代はコンピュータの性能向上が著しく、せっかく買ったパソコンが半年後には型遅れ…なんて事がしょっちゅうだった。だから手に入れるのならば最新型にしておいて、少なくとも数年は後悔なんてしない覚悟が必要だった。

 

その日は秋葉原中を探しまくり一番安い店を見つけた。そこで購入、そのままハンドキャリーで自宅へ持って帰った。当時の自宅は国立だったので、秋葉原→国立まで電車で移動、そのあとは駅から自宅まで運んだのだが、とにかく重い!!!マシン本体だけで8kg超えるのだ。当時は分厚いマニュアルも入っていたし、重さ相応の厳重な箱、おそらく総重量で13kgくらいあったんじゃないかと思うが、これをえっちらおっちら運んだ。

当時はまだ体力に自信があったのだが、両手が抜けるかと思うほど重かった(^^;

 

このPC-386LSで本当にいろんな事を実験した。安くなった頃合いを見計らって40MBのHDDを取り付け開発環境を構築、DOS上で動くuucpを開発してUNIXマシンと接続してみたり、COMMAND.COMに変わるSHELLの開発、DJGPPを使って大きなメモリを扱うプログラムなどなど。多分、手持ちのマシンで一番酷使したと思う。

そんなPC-386LSは、今も箱に入って部屋の奥に保管してある。1年ほど前に箱から出して起動してみたが、問題なくHDDから立ち上がった。

 

で、話が脱線しまくっているが、このPC-386LSとTOSHIBA T1200の容姿が似てるのだ(^^;

蓋を閉じて置いておくと本当に良く似てる!キーボード裏に取っ手があり持ち上げる事ができるなど、T1200は「小型PC-386LS」と言っても過言ではない!(^^)

 

そしてなんとなくだがT1200を見てるとほっこりするのだ(^^; 良い思い出しか残っていないPC-386LS…ぜひそれと似てるT1200も復活させてみたい(^-^)

PC-386LSとT1200を並べた写真を撮りたかったのだが、PC-386LSが部屋の一番奥にあり発掘することが出来ない(^^; いつか出てきた時には必ず写真を撮ってお見せしたい(^o^)

 

コンデンサ届く!

先日発注したコンデンサが無事に届いた。

f:id:PocketGriffon:20210308211313j:plain

35V 150μFという容量は在庫として残しておく事も必要ないか…と、少量のみ入手した。

そういえば直径も高さも気にせず注文してしまったが、運良くちょうど良いサイズが送られてきた(^^; 変な大きさだったら取り付けられないところだった(T-T)

f:id:PocketGriffon:20210308211730j:plain

うん、ばっちりキレイに取り付けられた!

これで電源ユニットのコンデンサは全交換が出来た。これだけで起動すると良いのだけど…。

 

起動テストしてみる!

本当だったら電源ユニットだけでテストしてみるのが良いんだろうけれども、そんな知識も技術も持ってない(T-T)ので、いったん全部組み立てて動作テストを行う。

毎度緊張するこの瞬間…

電源おーん!!!

f:id:PocketGriffon:20210308212455j:plain

お……おおおお!!電源ONを示すLEDが点灯した!!!!

手に入れたときは全くの無反応に加えて、とんでも臭だったのに!

今は匂いも全くしない。これは……起動する予感!!

f:id:PocketGriffon:20210308212704j:plain

…しーん(T-T)

あれ…なんとなく手応えあったのに(^^;

あとから気がついたが、電源ONでもOFFでもLEDが点灯しちゃってる。

うーん…先は長そうだ(さっきまでの手応えはどこにw)。

 

まず液晶よりも何よりも、本体のLEDが無反応。

f:id:PocketGriffon:20210308213119j:plain

ということは、メイン基板側の問題だろうか…。まだメイン基板のコンデンサは取り替えてないんだけど、見た感じ問題なさそうだったので、そのままにしておこうかと考えていた。

やっぱり交換しなきゃダメなのかも(T-T)

 

あと液晶ユニットはバックライトがあるらしいのでインバータ基板が入ってる…気がする。そこにもコンデンサがありそうな予感。過去にインバータのコンデンサを交換したら火を噴いた経験があるので怖いな…汗

 

作業はここまで。

またコンデンサが揃ったら交換作業していこうと思う。

T1200は気長にメンテナンスする事にした。修理出来たとしても、起動させるためのシステムディスクがない事に気がついたものあるけれどもww

 

ではまた次回!(^-^)ノ