CASIO AI-1000を使ってみる!その3

f:id:PocketGriffon:20210722190648j:plain

先日から取り組み始めたAI-1000!

twitterで詳細をツイートしていくと、なんだか読んでる人も盛り上がってくれてるような気がする(^^; 進む先は困難しか待ち構えてないぞ…とも読めるし(^-^;;

 

頂いた話でとても気になったのが「未定義命令がそれなりにあるらしい」「メモリの見えない部分があるっぽい」の2つ。この2つの影響が、解析中にどのくらいクリティカルヒットなのか、今は想像も出来ないが、どちらも自分の手に負える気がしていない(^^;

 

まぁ飽きっぽい私ですので、楽しめているうちは頑張っていこうと思う!

 

さて、今までの流れのように「通信を確立」→「ROMデータの引っこ抜き」→「解析」という感じに進めていこうと考えていたが、どうやらそんな単純でもなさそうだ…と気がついた。

気がつくまでの段階で何をやっていたのかを書いていってみたい。

 

メモリ内容をホストマシンへ送る

まずはともあれ、見えているメモリ情報をホストへ送る事をやっていきたい。

BASICからRS-232Cが使えるようになれば、特に難しい話ではない。

f:id:PocketGriffon:20210722200937j:plain

16バイト分を文字列に変換してCOM0:へ出力すれば良い。

実際に動かしてみたところ、16バイトを転送するのに1秒くらい掛かる。64KBを転送するのに約70分くらい掛かる計算だったけど、測ってみたらホントにそのくらいで終わったw

※後に気がつくことになるのだが、実はこのプログラムではダメらしい(^^;;

 

ホスト側で受け取ったテキストのデータを、バイナリへ変換するツールをさくっと作る。

TANDY200でも同じような事をやっていたので、そのソースを移植しただけ(^-^)

これで64KB分のメモリ内容がホストで見られるようになった。

RAMの状況、ROMのデータが含まれている事を祈っていたのだが…汗

 

開発する環境を考えてみる

さて、HD61700の開発を行うための環境について考えてみる。

歴史が長いCPUなので、世の中には優れたアセンブラ、逆アセンブラがあるんだと思う。

もしかしたらコンパイラなども用意されているのかも知れない。

 

しかし今回は(も?)出来る限り自前で作っていきたいと考えてる!

だってそういう環境を作るのも楽しみのひとつじゃん!(^-^)

その代わり、完成度の高い環境は期待出来ないが、その見返りとしてデンジャラス感も楽しめるw

 

というわけで、まずはROMデータを解析するための逆アセンブラを検討をし始める。

私は、自分が所有していない機種についても、出来る限り書籍を購入してきた。

しかし…X1とPB関連の資料はびっくりするほど所有していない。PB-1000に関する資料は……もしかして1冊もないかも???

 

手元にあるのはAI-1000、PB-1000に付属してきた説明書のみ…に近い。

あ、ポケコンジャーナルはほぼ全部揃ってるので、これも参考になりそう。

 

f:id:PocketGriffon:20210722214831j:plain

↑すっかり忘れていた存在として、国会図書館で「PB-1000テクニカルハンドブック」の一部を複写してきてあった。しかしPB-1000のハードやROMに関係しているところを複写してあったので、これがAI-1000で活用できるとはあんまり思えない(T-T) もしかしたら内部ROMのエントリだけは一緒とかないかなぁ…(望み薄そう)。

 

アセンブラ検討

私はCPUの機能やニーモニックを覚えるという意味で、逆アセンブラを作る事が多い。ROMの解析にも使えるので一石二鳥だ!

 

アセンブラを作るためには、各命令のバイナリコードを知る事が必要だ。これはPB-1000付属のマニュアル「PB-1000コマンドリファレンス」の最後にある「ニーモニック一覧」が役に立った。

f:id:PocketGriffon:20210722215845j:plain

…頭の回転が良くない私は、これを見ただけではバイナリの分布などが分からない。

一旦Excelなどにまとめてみる。

f:id:PocketGriffon:20210722220353j:plain

こんな感じに私は書いて(打って)覚えるという方法をとる(^-^) 昔っから人よりも手間を掛けないと覚えない頭の悪さがある!(自慢

出来上がった表を見てると、いくつかのことに気がつく。

まず同じコードに複数の命令が入ってる事だ。

これは2バイト目以降にプリフィックスが入ってるんだろうと予想。そう思ってもう一度本を見直すと、何のことはない、書いてあったw

f:id:PocketGriffon:20210722221740j:plain

最初の1バイトを読んだだけでは命令が確定しない。ここは注意ポイント!

 

もうひとつ気がついた点は、未使用となっているコードが多い。2バイト目にまたがるプリフィックスの存在もあることから、未定義命令の存在が疑われた。

Twitterで嘆いたところ、やはり未定義命令があるっぽい。

うーん…これはどうにもならないなぁ…orz

せめてROMの中で使われていないことを祈りたい!

 

バイナリを見て疑問に思う…

実機から転送してきた64KBのバイナリを見て……ここでも気がつくことがあった。

それは……どうもRAMっぽいデータが並んでいるのだ。

f:id:PocketGriffon:20210722222926j:plain

↑例えばコレ。アドレスが$0800付近にBASICプログラムらしいものが入っている。そのままテキストが見えているので、メモリディスクにセーブされたテキストデータのようだ。

 

f:id:PocketGriffon:20210722223354j:plainf:id:PocketGriffon:20210722223415j:plain

↑同じように$8000とか$C000の辺りを見ても、やっぱりプログラムコードっぽくない。

どうやらPEEK命令ではROMが見えないのかも知れない。

 

そう思ってどっかにメモリマップがないかなぁ…と探してみると、やっぱりあったw

先に資料を見なくちゃダメだ!(T-T)

f:id:PocketGriffon:20210722223821j:plain

↑これを見る限り、BASICのPEEK命令はバンク1のデータを読むっぽい。

……はたしてBASICからバンク0を読む方法があるんだろうか…汗

 

もうひとつ、気になる記述を見つけてしまった。

f:id:PocketGriffon:20210722224308j:plain

↑これ!

これはCLEAR命令の説明文章の一部なんだけど「BASICのPEEK、POKE、MONで読み書き可能な、領域を確保」と書かれている。

もしかして…CLEAR文で宣言したアドレス領域以外は読むことが出来ないんだろうか??

 

…そんな事を調べてみたら、もっと厄介なことに気がついた!

BASIC命令の中に、マシン語を実行する命令が無い気がするのだが……滝汗

……いやそんなはずは無い気もするし…。

頑張って過去のポケコンジャーナルなどを漁ってみる!

 

そんな感じの流れが「今」だ!

最初のメモリを引っこ抜くところまで戻らないといけなくなってしまった!

うむむ…これは一筋縄ではいかなくなってきてるよ(T-T)

けっこう大変なモノに足を踏み入れた感がしないでもない…orz

次回、もう少し調査を進めてみたい!

 

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

 

CASIO AI-1000を使ってみる!その2

今回は、本当にAI-1000初心者が苦労する流れを書いている。

AI-1000系に詳しい人が読むとイライラしてくるかも知れないので要注意だ!

 

FA-7を使えるようにしてみる!

f:id:PocketGriffon:20210722084010j:plain

FA-7はAI-1000でカセットインターフェース、RS-232Cを使えるようにする外部ユニットだ。AI-1000を覆うような形をしているので、縦横20cm以上もある結構なサイズと重さ。

f:id:PocketGriffon:20210721205955j:plain

このユニットは1980年代に購入して活用していた。使ってみるのは35年ぶりくらいになるかと思う。その頃はPC-9801UV21に繋げて使っていた記憶がある。当時はRS-232Cケーブルも良くわかって無かったので、ストレートとクロスをケーブル1本1本差し替えて切り替えられる物を使ってた。めっちゃ面倒だった記憶しかないw

 

今回は簡単なものを使うよ!

f:id:PocketGriffon:20210722093957j:plain

このMPRS-225R、本当に便利です!

PC-8201、TANDY200、PC-8801など、標準的な25ピンシリアルを持つマシンだったら何の問題もなく繋がる!

同じものを手に入れるのは(すでに販売終了してるっぽいので)難しいけれど、似たものはたくさん出てると思うので、レトロでプログラミングする方は手に入れておくと良いよ!(^^)

 

FA-7の裏に通信速度を設定するディップスイッチが存在する。

f:id:PocketGriffon:20210722102151j:plain

今回は9600bpsで通信出来るといいな…という願いを込めて、まずはすべてのスイッチをONにしてみる事に。ダメだったら後で様子を見ながら変更してみる!

 

よーしやってみるよ!35年ぶりの電源おーん!!!

f:id:PocketGriffon:20210722095251j:plain

しーん……

あれ??何か必要なんだっけ???

そうか、電源がいるんだったかもしれない…。

ひっくり返して裏を見てみる。

f:id:PocketGriffon:20210722095418j:plain

おおぅ……単3電池6本!これは……結構な数!!(^^;;

持ち運びがラクになるなら電池駆動しようかな…とも思ったけれど、今回はACアダプタ繋げてテストをしてみる。まずは動かしてみるのが大切よ(^-^)

 

f:id:PocketGriffon:20210722095741j:plain

うーんと……ACアダプタはAD-4175という型番を繋げるらしい。

これは…どんなスペック?

f:id:PocketGriffon:20210722095830j:plain

ネットで写真を探してみると、どうやら7Vの出力らしい。

この時代では主流?のセンターマイナス!

この2つの情報があれば、あとはユニバーサル電源で対応が出来る。

 

f:id:PocketGriffon:20210722100003j:plain

私はAmazonで手にいれたコレを使っている。アダプタには極性を逆にするケーブルが付属していなかったので、センターマイナスにするケーブルも取り付けている。

 

これもPC-8201系、HC-40系などいろんなレトロマシンと繋げられている。本当に便利なのでレトロな(主にハンドヘルド)を使う方は入手しておくと良いと思う!

 

f:id:PocketGriffon:20210722100833j:plainf:id:PocketGriffon:20210722100854j:plain

よし、問題なく電源は入った!

こんな久しぶりなのに、ちゃんと電源入るのが嬉しい!(^-^)

これでFA-7側の準備は整った!

 

BASICプログラムをホストマシンへ送信

さて…通信の準備は整ったよーな気がするので、まずはBASICプログラムを転送してみる。

……はて??どうやってBASICプログラムを転送するの???(@_@;

まずはここからのスタートだw

なんたってAI-1000でプログラム書いた事が無い人だ!

みくびってもらっちゃ困るよ!!

 

f:id:PocketGriffon:20210722102733j:plain

MENUボタンを押すとこの画面になるので、ここでbasicをタッチ…じゃなくて該当するファンクションキーを押す。

この画面が出てくるとPB-1000のクセで画面にタッチしたくなるよね!(^^;;

 

f:id:PocketGriffon:20210722102754j:plain

簡単なBASICプログラムを書いてー…

f:id:PocketGriffon:20210722102706j:plain

そのままMENUへ抜けてみたら、ファイル名の無いファイル?が出来た。
拡張子がBになっているので、きっとBASICプログラムなんだと思う。

 

最初、セーブしなくてもファイルとして残るという概念が「?」となった。でもメモリ中にあるプログラムはすべてファイルとして管理されていると思えば、こういったMENU構造を持つマシンだと分かりやすいんだな…と感じる!そうかーなるほどな管理方法。

 

わかりやすくファイル名を付けてみる。

f:id:PocketGriffon:20210722103224j:plain

[ETC.]を押して[name]を選択。

new name?にTESTと入力。拡張子は指定できないっぽい。

f:id:PocketGriffon:20210722104631j:plain

よし、これでTEST.Bという名前でメモリファイルに保存された状態…になったんだと思う。

マニュアルをちゃんと読んでないせいか、ありとあらゆる事が「今起きている現象を元にした推測」でしかない状態が怖い(^^;; これで解釈あってるのかなw

 

まずはAI-1000 → ホストマシンへの転送をしてみる。

私の環境はホストマシンがMacBookPro、送受信アプリはPCG-LinkMacを使っている。

これはPC-G850シリーズ用に開発されたシリアル通信アプリなのだが、実際にはPC-G850シリーズ限定ではなく汎用的に使えるので、ありとあらゆる通信で使っている。とっても便利なのでMacユーザーは使うと良いと思う!(^-^)

 

f:id:PocketGriffon:20210722105218j:plain

↑一番トップのMENU画面から[ETC.」を押す。

f:id:PocketGriffon:20210722105302j:plain

↑ファンクション表示が切り替わるので、ここで[save]を選択。

f:id:PocketGriffon:20210722105241j:plain

↑どこにセーブするのか選択肢が出るので、RS232Cを選択。

f:id:PocketGriffon:20210722105323j:plain

↑通信パラメータの設定が出るので、上記のように変更。

これは「9600bps、パリティなし、8bit、ストップビット1bit、N、N、N、X制御あり、N」という意味だ。Nについてはとりあえず考えなくても良い(^^)

 ホストマシン側のPCG-LinkMacを受信状態にして、EXEを押す。

 

f:id:PocketGriffon:20210722105813p:plain

よっしゃ、ばっちりホストマシンへ送ることが出来た!

これが出来るようになれば、ROMの引っこ抜きとか出来るようになるかもね!

まずは半分成功!!(^-^)

 

ホストマシンからBASICプログラムを受信

今度は逆に、ホストマシンからAI-1000へプログラムを送り込んでみる。

手順は送信時とほぼ同じで、MENU→[ETC.]→[load]→[RS232C]を選択だ。

通信パラメータは前回のセーブ時のものがそのまま残っているので無変更で大丈夫!

EXEを押して受信状態にしてから、ホストマシン側で送信する。

f:id:PocketGriffon:20210722110518j:plain

…あら?エラーになっちゃった。

FR errorってなんぞ??

マニュアルを見てみると「フレーミングエラーを検出した」と書いてある。

このエラー内容の書き方で意味がわかる人って相当な熟練な気がするけれども…汗

 

とりあえず通信速度を落としてみよう。X制御してたら大丈夫な気もするんだけど…。

PCG-LinkMacの設定で、送信時にウェイトを入れる事が出来るので、これをとりあえず「デフォルト(10ms)」に設定してみる。これは1バイト送るごとに10ms待つという意味。

通信速度はどどーんと遅くなるけれども、エラーになるよりはマシ。

 

f:id:PocketGriffon:20210722110911j:plain

そして無事に受信成功!!!

便宜上、受信したデータに「TEST2」という名前を付けた。

なぜか空白のファイルも1つ出来てしまった。これはなんだろ???中身は無いみたい。

おそらくFR errorが出た時に出来たファイルなんだと思う。

 

そして拡張子が「S」。これもよーわからん(ToT)

マニュアルみると「シーケンシャルデータファイル」の事らしい。これをBASICファイルとして変換するのはどうするんだろ???

 

とりあえずBASICを起動して、受信したプログラムが読めるか試してみる。

f:id:PocketGriffon:20210722111414j:plain

直感的に「LOAD "TEST2.S"」としてみたがNF errorとなった。

どうやら「指定したファイルが見つからない」エラーらしい。

じゃあという事で、拡張子指定をなくしてみる。

f:id:PocketGriffon:20210722111601j:plain

今度はロード成功。ははぁなるほど、拡張子というよりは識別子なんだな。

手探りかつ自身の勝手に近い解釈が進んでいく(^^;;

f:id:PocketGriffon:20210722111736j:plain

↑巧妙にもFOR分の数字を10→20へ変更しておいた!

f:id:PocketGriffon:20210722111836j:plain

↑よっしゃ、実行もバッチリ!

これでプログラム開発に必要な送受信通信が出来るようになった!

この先はプログラムの工夫次第だ(^-^)

 

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

 

 

CASIO AI-1000を使ってみる!その1

CASIO AI-1000

f:id:PocketGriffon:20210721185917j:plain

私はAI-1000が大好きだ!

真っ黒い筐体に主言語がLISPというクールさが気に入っていたが、当時はLISPってなに?って感じで気軽に手が出せるマシンでは無かった。

f:id:PocketGriffon:20210721185421j:plain

カバーを閉じた見た目がこんな感じ。なんとなくモノリスを想像するような形に、並々ならぬカッコ良さを感じている!

 

黒くて光る筐体がカッコいいと感じるのは、パトレイバー(コミック)に出てきた敵ロボット「グリフォン」にも通ずるものがある(私の名前の由来はコレだったりする)。

 

月日は流れ、ソフトウェア業界に入ったあとはメインで使うエディタがvi→Emacsと移り変わり、LISPも普通に使うようになっていた。今だったらAI-1000を使えるかも…と思い、思い切って何年か前に入手した!

 

AI-1000の特徴といえば、メイン言語がLISPという事が挙げられると思うけど、ROMカードを入れる事で使える言語を入れ替えることが出来る。「入れ替え」という言い方がアレだけど、例えばBASICカードを入れると「LISP+BASIC」という使い方ではなく、BASICに入れ替わる。使える言語は常に1つだ。

f:id:PocketGriffon:20210721203406j:plain

言語を切り替えられるポケコンって革命的じゃない??

ゲームソフトとかもカードで供給されたら面白かったかもなーと思うけど、そこまでの需要は無かったのかも?

 

実は……

ここまで「AI-1000 Love」を表明しながらも、白状してしまえば今までにAI-1000でプログラムをしたことが一度もない!!!えっへんえっへん!!

このままではいけない!…と思ったかどうかは分からないが、せっかくなのでプログラミングしてみたい!

 

ワタシ的な流れなので、いろんな言語でプログラミングというよりは、マシン語を使って何かを作る…ということになるだろう。そのためにはどうしたら良いのかを検討していく。

 

まごうことなきAI-1000初心者がプログラミングをする流れなので、きっとこれからAI-1000を使おうと考えてる人にも参考になるんじゃないかと思う。

 

構成を考える

やっぱり私的な作り方しか出来ないので、主にホストマシンでプログラムを作り、出来上がったバイナリをAI-1000へ流し込む方法を検討したい。そのためにはRS-232Cが繋がらないとどーにもならない。

 

AI-1000は本体横に外部拡張端子がある。

f:id:PocketGriffon:20210721204940j:plain

形も特殊なので、ここにRS-232Cを繋げるハードを作るような真似は、私には出来ない(T-T) 素直に外部ユニットに頼る事にしよう!

 

f:id:PocketGriffon:20210721205228j:plain

こちらは1980年代にPB-1000用に購入したFA-7。これはAI-1000でも使える。背中側にRS-232Cの端子があるので、これをうまく利用する事にする!

 

f:id:PocketGriffon:20210721205734j:plain

PB-1000+FA-7の構成だとこんな感じ。フィット感が素晴らしい!FA-7はPB-1000用に作られたんだろうなーと感じる。

 

f:id:PocketGriffon:20210721205955j:plain

FA-7にAI-1000を取り付ける……逆か、AI-1000にFA-7を取り付けるとこんな感じ。

これを見ると、PB-1000のオプションと共有するためにAI-1000のカバーを付けたんじゃないの?と思ってしまう。

 

f:id:PocketGriffon:20210721211127j:plain

ちなみにフロッピードライブユニットのMD-100もある。これもAI-1000で使用可能。

フロッピーは使えるものの、MacWindowsからディスクを読み書きすることが出来ず、いまいち使い勝手が良くない。そのため、ウチでは使う機会がとても少ない。

 

f:id:PocketGriffon:20210721231938j:plain

もうひとつ、MD-100 emulator。これは海外のユーザーが開発したモノ。

こちらも一連の流れでご紹介できたらと思っている!

 

話は盛大に脱線したが、FA-7を介してRS-232Cを繋げる事とする。

 

プログラムはマシン語開発を主としたいが、LISPでどうやってメモリアクセスなどをするのかが分からない(方法はあるんだろうか?)。今回はBASICカードを使用するのが良さそうだ。

 

という感じで構想だけが進んでる段階だ。

この先、手探りでプログラムを開発していこうと思う。

AI-1000のCPUであるHD61700も初体験なので楽しみだ!

 

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

TANDY200をホワイトニング!

f:id:PocketGriffon:20210710163653j:plain

我が家に来た時から黄色い状態だったTANDY200。

本来は白い筐体らしい。

なぜか経年劣化で色が変わってしまう筐体と、全く変わらない筐体があるみたい。きっと保存状態とか条件があるんだろうけれども、あんまり詳しい事は分からない。

 

今回は、TANDY200をホワイトニングしてみたので、そのお話。

 

ちなみに過去にPC-8201のキーボードをホワイトニングして悲惨な目にあって以来、ホワイトニングは避けてきた。またあの状態になってしまうかも…と思うと怖くて出来なかった。

どうなったのかは↓を参照してみてほしい(^^;

起動しないPC-8201を修理してみる! その2 - レトロパソコンであそぼう!

起動しないPC-8201を修理してみる! その3 - レトロパソコンであそぼう!

ちなみに今回もハデに失敗しているので、失敗の例として読んで欲しい(T-T)

 

現状把握

まずはいま現在のTANDY200の状態を見ておこう。写真を撮っておくと後で比べる事が出来るので便利だ!

f:id:PocketGriffon:20210710163653j:plain

f:id:PocketGriffon:20210710165706j:plain

f:id:PocketGriffon:20210710165635j:plain

f:id:PocketGriffon:20210710165745j:plain

f:id:PocketGriffon:20210710165728j:plain

……うん、見事なほど全体がまっきっきだ!

裏面は黒いプラスチックなのでそのままでも大丈夫。

幸い、大きなキズや凹みがないので、白い筐体になったらとてもキレイになりそう。

これは頑張ってみる甲斐があるってもんよ(^-^)

 

まずは分解

ホワイトニングするために太陽光に晒すことになるので、出来る限り電子部品は取り外してカバーだけの状態にしたい。動いてるマシンを分解するのは気が進まないが、白い筐体(キレイ)になるため…と自分に言い聞かせて分解をしていく(^^;

f:id:PocketGriffon:20210710171209j:plain

f:id:PocketGriffon:20210710171245j:plain

f:id:PocketGriffon:20210710171307j:plain

無事、4枚におろせた(写真がない1枚は底面)。これをそれぞれホワイトニングしていくけれども、形が複雑なのがあるのと、4方向+1面が黄色いって問題がある。太陽の方向を向けられるのは最大でも3面なので、時間を見ながら回転させていく必要があるのかも…??

 

せっかく分解したので、主要な基板も見てみよう!

f:id:PocketGriffon:20210710172300j:plain

これが分解直後のTANDY200基板。掃除もしてないので汚いままだ!

中央上部に浮いているオレンジのフラットケーブルが液晶に繋がっている。

 

f:id:PocketGriffon:20210710172446j:plain

キーボードを持ち上げると拝見する事が出来るチップ郡。

CPUの8085、LCDCのHD61830B。

この2つのチップには大変お世話になってます(^^)

青いケーブルの下にあるチップはなんだろ…もう少しちゃんと見とけば良かった。

 

f:id:PocketGriffon:20210710172745j:plain

左側の3つがROMかな?おそらく8KB、32KB、32KB。
MICROSOFTって印刷されてる。

一番右のチップは型番から調べてみると8KBのRAMらしい。サイズ的に考えるとVRAMかも?やっぱり8KBあるのか!画面2枚もてるよ(^^)

 

f:id:PocketGriffon:20210710173553j:plain

そして見つけた瞬間にギクっとしたけど樽型の電池が載ってた。おそらくカレンダー保持用のバッテリーかも?生きてるのかな、これ…?

f:id:PocketGriffon:20210710173724j:plain

電圧を測ってみると3.67V。ちゃんと機能してるっぽい。

みたところ電池漏れもなさそうなので取り外す事はしてないけど、電池漏れを起こす代表格なお方なので、要注意で見ておきたい!

 

f:id:PocketGriffon:20210710173848j:plain

これが液晶ユニットの基板。この裏に液晶が張り付いてる。

f:id:PocketGriffon:20210710173933j:plain

これが何の機能なのかわからないが、壊れたら直しようがないので出来る限り触らないw

 

れっつほわいとにんぐ!

私が使ってる溶剤と道具をご紹介!

まず溶剤は「ワイドハイターEXパワー」を使っている。何年か前にネットで調べてみたときに「これがいいよ」という情報が出ていたので、これをそのまま信じて使っている。

f:id:PocketGriffon:20210710174634j:plain

そして噴射するためのスプレー。

これは100円ショップで買ってきたもので、特に工夫も何もない(^^;;

この中でワイドハイターと水を1:1 の割合で薄めている。

f:id:PocketGriffon:20210710174805j:plain

あとはサランラップでくるむんだけど、実はコレが今回の敗因のひとつでもある(^^;;

 

f:id:PocketGriffon:20210710175047j:plain

f:id:PocketGriffon:20210710175156j:plain

f:id:PocketGriffon:20210710175223j:plain

f:id:PocketGriffon:20210710175113j:plain

f:id:PocketGriffon:20210710175255j:plain

太陽光にさらしながら、たまに角度を変えてみたり、溶剤を追加してみたりと手間をかけながら約6時間ほど置いてみた。

途中でPC-E550のケースが参加したりとか、ついでにやってみよう的な動きが多かったのはナイショだw

 

太陽光に当ててる最中に、液晶パネルをコンパウンドでキレイにしたりする。

f:id:PocketGriffon:20210710213146j:plainf:id:PocketGriffon:20210710221704j:plain

ホームセンターのカー用品売り場に置いてある、キズ消しコンパウンドをそのまま使ってる。

パネル面についた小さなキズならば、このコンパウンドで簡単に消せる。

大きなキズはどーにもならないが、目立たなくするくらいならば出来そう(^^)

 

このパネルもホワイトニングしたのだが、重大な問題が起きてしまった…。

これについては情けなさ過ぎて説明したくないので、いつかの写真で気がついたら察してください…orz

 

戦い終わって…

本日のホワイトニングが終了して、現段階の状態で組み立てて見る事にした。

f:id:PocketGriffon:20210710222232j:plainf:id:PocketGriffon:20210710171307j:plain

まずは液晶の裏面パネル(閉じたときに一番上に見える部分)

相当白くなったような気がする!

写真には写りにくいのだが、結構まだらになってしまった。これはラップをきちんと張らなかったが原因かも知れない。空気が入ってしまって強く漂白されたところとそうでないところが混在してしまった…大失敗(T-T)

 

f:id:PocketGriffon:20210710222536j:plainf:id:PocketGriffon:20210710171245j:plain

こちらがボディ。黄色かった部分がかなーり白くなった!このボディは形が複雑で、頻繁に方向を変えながらホワイトニングしていった。結構面倒(T-T)

そして↓コレを見た瞬間に悲鳴が上がった!!

f:id:PocketGriffon:20210710222853j:plain

エムブレムの色が剥がれてしまった…!!ひいいいい!!(TOT)

 

これは…ホワイトニングする前にマスキングした方が良かったのかもなぁ…。…でもまぁなってしまったものは仕方がないので、最終的に直せるかチャレンジしたい。

 

知人から教えてもらったのだが、塗るだけでメッキっぽくなるマーカーがあるという事で1本手に入れてみたのだ。Amazonガンダムマーカーという名前で販売されていた。私がキレイに塗れるものなのか分からないが、挑戦してみたい。

 

f:id:PocketGriffon:20210710223317j:plainf:id:PocketGriffon:20210710163653j:plain

f:id:PocketGriffon:20210710223449j:plainf:id:PocketGriffon:20210710165745j:plain

f:id:PocketGriffon:20210710223532j:plainf:id:PocketGriffon:20210710165728j:plain

f:id:PocketGriffon:20210710223647j:plainf:id:PocketGriffon:20210710165635j:plain

f:id:PocketGriffon:20210710223741j:plainf:id:PocketGriffon:20210710165706j:plain

全体的に見て、色は白くなったけれども"まだら"模様もひどい(T-T)

でっかい容器を用意して、その中に溶剤を入れて漬け込むような感じでホワイトニングした方が"まだら"にならなくて済みそうだ。

でっかい容器を手に入れる問題はあるけれども!

 

ラップにくるむやり方の場合は、出来る限りラップを伸ばしてシワを無くし、空気を抜いてホワイトニングするのが基本なのかも知れない(T-T) 

 

もう少し白くしたい希望があるので、次はまだらにならないように気をつけながらやっていきたい!TANDY200はだいぶ気に入ってきたので、トコトンまで整備してみるよ!(^^)

 

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

TANDY 200でプログラミング その3

f:id:PocketGriffon:20210709145237j:plain

TANDY200でマシン語プログラムを楽しんでいる。

直接バイナリのデータを送り込める機能がTANDY側にないため、マシン語プログラムをBASICのDATA文に入れてTANDYへ送り込み、実機上でPOKEした後に動かしていた。

 

f:id:PocketGriffon:20210709145623j:plain

↑こんな感じのBASICプログラムを自動生成して送り込むのだ!

これの利点は、まだマシンのことがあんまり分かっていない状態であっても、BASICプログラムさえ動けば各種実験がレトロマシン←→ホストマシンを通じて、比較的簡単に出来る点だ。

 

逆に欠点を言えば、実際に送り込みたいバイナリに比べて4倍くらいのサイズを送り込まないといけないこと、そしてBASICのPOKE文が想像以上に遅いことだ。

そのため、プログラムを更新してからロード→実行までの時間が結構掛かる。マシン語のプログラムが1KBを超える辺りから、分単位で時間がかかるようになる。プログラムにグラフィックデータを含んだりするとサイズがどどーんと大きくなり、先日の花札表示プログラムなどはだいーぶ気長に待つことになった。

 

バイナリ通信プログラムを作ってみたい!

過去のマシンでも同じような問題にぶち当たり、そのたびにバイナリ通信プログラムを開発してきた。せっかくなのでTANDY200でも作ってみよう!

 

…と思ったが、ここで困った問題に直面する。私はTANDYについて何も知らない。

そう、マシン語からシリアル転送をする方法が全く分からないのだ。TANDY200のROMを解析していってるが、RS-232C通信のエントリなどは全く探せていない。……さすがにピンポイントに探すの大変じゃね??(ToT)

 

途方に暮れつつもROMの解析を進めていくと、おぼろげながらも「とあること」に気がついた。

私はTANDY200とPC-8201の「マシン語レベルでの互換性」は無いと見ている。BASICは良く似ているけれども、マシン語プログラムはバイナリレベルでの共有が出来ない。

 

そう思いつつROMを見ていったのだけど、なーんとなくマシン語プログラムの中に「PC-8201の面影が残っている」ことに気がついた。アドレスはずれているけれども、良く似た構造が存在しているのだ!

 

例えばコレ。

f:id:PocketGriffon:20210709151201j:plain

8316hからが(Z80風で言う)LDIR、8321hからがLDDRのルーチンだ。

この処理、実はPC-8201にも同じものが存在していて、それぞれ6C78h、6C83hにある。

機械的に同じようなコードを探し出すことで、PC-8201の資料がとても役立つことに気づいたのだ(^-^)

 

やはりTANDY200は、PC-8201のROM(正確にいえばTANDY102?)を拡張する形で作られたんだろうな…と思った!こんなところで遺伝子を感じるとはw

 

マシン語のプログラムが見えてくると、解析もどどーんと進むようになった。

RS-232C通信をするのに必要なのは「RS-232C初期化」「RS-232Cから1バイトを得る」「RS-232C終了」の3つだ。これを探し出す事ができれば通信プログラムは作れそうだ!

 そしてそれらはとても簡単に見つかった!(^O^)

 

他にもタイマー割り込みの許可/不許可、16進数値→10進文字列変換などの有効なルーチンを見つける事が出来たので、これらも活用してバイナリ通信プログラムを組み立てる!

 

びっくり仕様が発覚!

先日のブログにも貼り付けたが、このページにあるビット長の説明にこんな事が書かれていた。

Tandy 200 (and 100) transfer to PC

「don't be fooled. You can't send 8 bit data」

直訳すれば「8bitの指定が出来るけど騙されちゃいけないよ!」的な注意文だ。

これはBASICで指定した場合には出来ないってことなんだろうな…と軽く考えていたw

そしたら……なんと実際に8bitのデータが受け取れないようなのだ!

 

8bit長のデータが受信できないという事は、マシン語データをそのままバイナリの形式で送る事は出来ないということになってしまう…orz

 

…出来ない事を悔やんでも仕方ない!でもBASICでマシン語データを贈り続けるのにも限界を感じている…どうするか!

…というわけで、単純に1バイトデータを2バイトASCIIに変換して送り込むことにした!

 

PNAANABOAACBBCNAHOLHMKBBNACDOFMNDMFAOBMDADNAMJEIGFGMGMGPCAFHGPHCGMGEAA

↑の2枚めの写真でお見せしたプログラムはこんな感じのテキストに変換される

f:id:PocketGriffon:20210709154020j:plain

BASICプログラムと比べると1/3のサイズとなった。本来のバイナリだったら、さらに半分なのだが致し方ない(T-T)

 

バイナリ転送プログラムと称しながらアスキーファイルを受け付けるのはどーかと思うけれども、まぁそれは誤差の範囲で(!?) ファイル名もbinと巧妙だ!(ひどい)

 

完成した転送プログラム

f:id:PocketGriffon:20210709155325j:plain

常にメモリに常駐する通信プログラムとなるので、出来る限りサイズを小さくしたい希望がある。希望は256バイト以下にしたかったが、説明文を表示させておかないと後で使った時にわからなくなりそうだったので、無理に省メモリ化はせず512バイト以内を目指した。

 

通信バッファはRAMのFFBBh〜FFFAhの64バイト固定となっていて、プログラムにハードコーディングされているため、場所を移動したり大きさを変更する事が出来ない。

 

私が作るプログラムは、常に先頭アドレス=実行開始アドレスとしている。転送が終わったらそのまま実行しても良いが、やはり気持ちを落ち着かせた上で実行開始をしたいw

そこで通信プログラムが終わった時点で、F8(ファンクションキー)に「CALLアドレス」を定義する事とした。F8キーを押せば読み込まれたアドレスから実行が出来るようになる。

これは便利!(^-^)

 

よーし、これで開発効率が爆上がりだ!!(^o^)

 

ところで…

TANDY200を使い始めた時に新品のアルカリ電池(単3電池4本)を入れたのだが、それ以来そのまま使い続けているけど電池切れにならない!

 このサイズの液晶を持つマシンとしては驚きの長持ちな気がする!

 

スペック的には10〜16時間くらい持つらしいので、いったん電池切れまでは使い続けてみたい。充電池を使いたいけれども、その場合は電圧が心配だ…。

 

本体のホワイトニングもしてみたいし、バンクを切り替えた先のメモリも有効活用してみたい。まだまだ遊ぶ事がたくさんあるなぁ!(^-^)

 

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

TANDY 200でプログラミング その2

f:id:PocketGriffon:20210708055552j:plain

先日、ROMのデータをホストマシンへ送るところまで成功した。

これでROM(の一部?)が逆アセンブル可能となった。

 

私自身、TANDY200の事をまーったく知らない。

カタログスペック的に知ってるのは、CPUに8085が使われているという事くらい。

ROMを引っこ抜けたとしても、結局のところは1から調べていかないといけない。

普通、こういう場合はうんざりするんだろうけれども、マイナー機種ダイスキーな私はこういうちまちました作業が大好き(^^; むしろこういう事をしたいがためにレトロマシンを使ってるとも言えるので、あまりまとめサイトなどを見に行く事はない。

 

とりあえず起動時に表示されるタイトル文字列(TANDY 200 Software...)のデータを足がかりに、表示系の解析から始めることとした。

今は画面に自由に画像を表示出来るところまで出来るようになった。

ここに至るまでの過程を、備忘録も含めて書いてみようと思う!(^-^)

 

そういえば、しれっとRS-232Cを繋げているが、これはMPRS-225Rという通信アダプタを使ってる。標準的な25ピンシリアルを持つ機種と簡単に繋げる事が出来るスグレモノだ!私はPC-8201やPC-8801などともこのアダプタを利用して接続している。

これ…今も手に入るのかな…。壊れてしまうといきなり通信する手段が無くなってしまうので、もうひとつ予備に手に入れておきたい気持ちが強いのだが…(T-T)

f:id:PocketGriffon:20210705003149j:plain

 

LCDコントローラを知る

1文字表示ルーチンを調べていくと、$FA30からスクリーンバッファがある事が分かった。はたしてVRAMそのものがメインメモリに配置されているのか、それとも何かのコントローラを通してアクセスするのか、まずはそこから調べていく。

 

PC-8201系列だとするとLCDコントローラが存在するのかも知れない。

ネットでTANDY200について調べてみると、分解記事を書いてくれている方がいた!この写真はホントに役立った!

 

LCDコントローラ(LCDC)はHD61830Bというチップが使われているらしい。

f:id:PocketGriffon:20210707133151j:plain

……聞いたこと無い(^^;;

PC-8201はHD41102Bというチップが使われていたので、この時点でハードウェア的な上位互換性は無さそうだ。

 

最近はチップ名さえ分かれば、ネット上でデータシートを見つけるのも簡単だ。さっそく調べてみると、詳しいデータシートが見つかった。ここに各レジスタへのアクセス方法なども詳細に記載されていた。これとROMのプログラムを照らし合わせながら見ていく事とする。

 

こういうデータシートって英語表記が多い……。そのままでも「技術資料に限っては」読み解く事が難しくないけれども、私はいつも翻訳しながら自分メモに書き直している。自分の体験的に「読めば覚えられる、書けば理解できる」という感覚があるため、面倒であっても自分の言葉で書き写すようにしている。おかげでさらっと読み流してしまいそうなところも、ばっちり理解できた…と思う(^^;;

 

どうやらI/Oポートは2つあり、コマンドレジスタ、データレジスタという感じで使うらしい。コマンドレジスタに設定したい項目(0〜15)を設定し、その情報をデータレジスタに書き込む。使い方としてはとても単純だ。

 

問題は…どの順番で設定しないといけないのか、などの情報が全く無い事だ。

簡単な実験プログラムを書いてみたところ、どうやらコマンド単体で独立して動くものばかりなような感じだ。こういうチップはとても使いやすい!(^-^)

 

グラフィックスを表示してみる!

まずはともあれ画面に画像を表示してみたい。こういう時は「豆腐」の表示が定番だ(^^; 画面に無機質な四角を表示させるため豆腐と呼ばれているようだけど、絵が用意出来ないプログラマとしてはコレが一番てっとり早い(^^)

 

ひとつ気になった事が。このLCDC、テキストモードとグラフィックモードの2モードあるらしい。それぞれのモードに特徴があるのは理解出来るが、おそらく混在した表示は出来ないはず。そしてTANDY200がどちらのモードで動いてるのかがはっきりしない。

 

BASICで文字を表示させつつPSET命令でドットを点灯させてみたところ、混在して表示されたことから、おそらくBASICではグラフィックモードで動いてるんだろうと推測。テキストモードの事は一旦忘れる事とした。いつか実験が出来たら…とは思う。

 

ちなみにこのLCDCには「ドットを打つ/消す」というコマンドが存在している。BASICのLINE文を高速に実行するためのモノだろう…と思っているのたが、PSET時のアドレス計算が複雑になっていて優位性を活かせていない。超高速LINEルーチンとか作りたくなっちゃうねw

f:id:PocketGriffon:20210708065638j:plain

 

そしてグラフィック表示実験中、奇妙な事に気がついた。VRAM自体は横方向にビットがドットに対応している、いわゆる水平型(PC-8801PC-9801と同じ)なんだけど、横が6ドットしか表示されない。そのため、横240ドットなのでてっきり240/8で30バイト1ラインかと思いきや、実際には240/6の40バイト構成だった!なんじゃこれは!(@_@;

 

確かに横8ドットの構成で6ドットフォントを表示しようとすると、SHIFTしてANDしてORする…など結構頑張らないといけない。ハード的に横6ドット構成ならば面倒な計算を省けるので表示は速くなるはずだ。その分、グラフィックを描画しようとすると横6ドットという計算がネックとなり、速度が遅くなる(上記でPSETが遅いと書いたのはこの部分)。

 

実はこれ、LCDCの機能のひとつだ。1バイト8ドットの構成のうち、何ドットを表示するかを指定出来る。指定できるのは6〜8の3タイプだけだ。ここに8を指定すれば、普通に1バイト8ドットが表示できるようになった。この機能は面白いw

f:id:PocketGriffon:20210708073737j:plain

↑ 1バイト8ドット

f:id:PocketGriffon:20210708073759j:plain

↑ 1バイト6バイト

 

もうひとつ、横方向のバイト数(先ほど書いた240/6=40バイト)も変更可能だ。ここは24/8=30バイトにするのが良さそうだ。アドレス計算的に32にした方がいいんじゃない?とも思ったが、LCDC側のアドレスを更新する処理が少し面倒になるので30とした。

 

メインメモリに256x128ドット分の仮想VRAM(4096バイト)を持ち、そこのメモリに対して描画を行い、出来上がったデータをLCDCへ転送する仕組みを作った。

f:id:PocketGriffon:20210708055552j:plain

ドットの並びはMSB→LSBの順(PC-8801など)ではなく、LSB→MSB(MZ-80B)となっている。そのため他の機種からデータを持ってくる際には変換が必要だった。

 

ところで…この実験をしている最中に気がついたけど、チップ的にVRAMは8KBあるっぽい。そして表示は240x128ドット/8ビットで約4KBだ。…ということは、設定の仕方によっては画面2枚分持てる??画面切り替えしてチラツキ無しとか出来そうな気もする。

VRAM→VRAMの転送(BitBlt)が機能があったら面白い使い方が出来たんだけど、さすがに年代的にそれは無かった。

 

LCDC的にVRAMが連続してアクセス出来る。10個のコントローラへ別々にアクセスが必要なPC-8201に比べて、VRAMへの転送プログラムは高速になる。かつLCDCへのアクセスがCPU速度についてこられるらしく、データを連続して書き込む事が出来る。PC-8201だと1データを転送するたびにBusyフラグが落ちるのを待っていたが、TANDY200はWAITなしでガンガン書ける。これは速い!

 

LCDだけでだいーぶ面白い使い方が出来そうな気がして、もう少し実験をしてみたい!

画面が広い分、何かやってみたくなりますねー(^-^)

PC-1600KのCP/Mも中途半端になってしまってるのでやらないと…ぐぬぬ(^^;;

 

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

TANDY 200でプログラミング その1

f:id:PocketGriffon:20210704141821j:plain

ついに手に入れたTANDY 200!

前から eBayで「vintage laptop computer」とかすると魅力的なマシンがたくさん表示されるんだけど、その中でも「いつか使ってみたいマシン」の上位に入ってたTANDY 200。

 

マシン構成と起動画面のメニューを見て、なんとなくだけどPC-8201の上位互換のようなイメージを持っていた。マシン語レベルでは互換性無いと思うけど、BASICレベルでは完全上位互換であってもおかしくないだろうな…と思い気になっていた。

 

しばらく頑張ったおかげで、PC-8201A、PC-8300、Amstrad NC200と立て続けに入手出来たが、動くTANDY 200は高すぎて手が出せない状態が続いてた。

それが…「多分動くと思うよ」的な感じで安値で出ていたTANDY 200を見つけ、ここぞとばかりに落札した!やった!!(^-^)

 

こういうパターンは動かないはずだ…と信じて疑わなかったが、届いたTANDY 200を見てびっくり! 筐体の色は思いっきり変色してしまっているが、電池漏れは全く無く、これなら起動するんじゃないか?と直感的に思った。そして案の定、電池を入れたら問題なく動いた!

これは超ラッキー!!

 

外見

本体の大きさをイメージしてもらうために、本体の上に書籍を置いてみた。

f:id:PocketGriffon:20210704231508j:plain

「テクノライブ8200」は、1980年代のI/Oと同サイズだ。表面は書籍よりもひと回り大きなサイズで、厚さは5.4cmほどある。重さについては「見た目よりは軽い」って感じだ!(適当すぎるレポート)

 

まず最初に見た時に驚いたのがコレ。

f:id:PocketGriffon:20210704230038j:plainf:id:PocketGriffon:20210704230058j:plain

液晶パネルを開きたくても、ロックを解除するレバー?がないのだ。

どゆこと???

横見たり裏見たりとあちゃこちゃ探したけどレバーが見当たらない。まさか力づくで持ち上げるわけじゃないだろうし……と思ったら! 力づくで持ち上げる、が正解だった!

 

f:id:PocketGriffon:20210704230638j:plain f:id:PocketGriffon:20210704230658j:plain

よくよく見てみると、ゆるい磁石になっていて張り付いているようだ。

なるほど、これならば複雑な構造にしなくてもロック出来るね!

f:id:PocketGriffon:20210704231224j:plain

液晶を広げてみるとこんな感じの見た目となる。液晶のサイズは横19.5cm x 縦10.7cmとかなり大型。ここに240x128ドット(40文字×16行)の表示が出来る。PC-8201と比べると縦方向のドット数が倍になっている!これは表現力が上がりそう!(^^)

 

裏面を見てみると、電池ボックスとメモリボックスがある。

f:id:PocketGriffon:20210704233204j:plain

↑写真はカバーを外したところ。

電池は単3電池4本だ。これはPC-8201と同じ(乾電池パックが取り外せないのは違う)。

 

f:id:PocketGriffon:20210704233250j:plain

メモリは2つまで増設可能。PC-8201では8つまで取り付けられたけど、こっちは2つ…。

調べてみたところ、1つのメモリで24KBの容量があるらしい。

動作未確認で安かった上に、メモリフル実装とは嬉しい誤算だ!

私は昔からメモリ運が良い(^-^)

 

…1つ24KB??

この中途半端?なサイズを聞いて、PC-8201との互換性は??と心配になった。

PC-8201は32KBが1つのバンク構成になっているので、24KBというサイズに疑問が生じる。あれ?もしかして互換性が高くないのかな…。

 

なにはともあれ通信!

私の中では、この手の、現代ハードと共通のメモリカードなどが使えないマシンについては、RS-232C経由でデータ通信出来る事がとても重要となる。

f:id:PocketGriffon:20210705001040j:plainf:id:PocketGriffon:20210705003149j:plain

頭の中で「PC-8201上位互換」と思い込んでいるから、RS-232Cでのプログラムロードセーブが出来ると思いこんでいる。しかもBASICは完全上位互換ではないかと思ってるので、通信方法もPC-8201と同じパラメータで試してみる事に。

パラメータは「9600bps、ノンパリティ、8bit長、 ストップビット1、X制御ON」だ。

f:id:PocketGriffon:20210705000257j:plain

あ?え??NM Errorって??予想していないエラーが出てびっくり。

TANDY 200のマニュアルを持っていないので、PC-8201のマニュアルを参照してみると、NMエラーというのは、「file Name Mismatch Error」らしい。ファイル名の中に使えない文字が含まれていると出るエラーらしい。

ココに来て本格的にぎくっとする。通信パラメータの設定方法が違うのかも知れない…と気がついた時、どうやらBASICの上位互換性どころか、全く別のマシンなのではないかと…。

f:id:PocketGriffon:20210705001106j:plain

↑TANDY 102のマニュアルを持っていたので、これを参考にしてみる。

f:id:PocketGriffon:20210705001433j:plain

これを読む限り、どうやらLOAD "COM:88N1E"とすれば良いらしい。

f:id:PocketGriffon:20210705001723j:plain

……うーん(T-T)

通信パラメータがこれほどまで違うって事は……これはもうPC-8201との互換性どころの話では無いのかも知れない。もはや全く違う文化と考えで作られたBASICなのかも知れない。同じMicrosoftが開発したBASICでこれほどまで互換性が無いのはなんでだろ…汗

 

ネットで検索してみたところ、以下のページに通信パラメータの詳細が書かれていた。

Tandy 200 (and 100) transfer to PC

これを見ると、どうやら「LOAD "COM:87N1ENI"」で通信が出来るらしい。

f:id:PocketGriffon:20210705003234j:plain

よし、バッチリ!

これでホストマシンのMacとTANDY 200が通信できるようになった!

通信速度は9600bpsを指定しているが、設定上は19200bpsまでイケるらしい。

今後、試していきたいと思う。

 

ROMの吸い出し! 

 ここに至るまでの過程で、どうやらPC-8201系との互換性は無さそうだと理解した。

ということは、メモリマップ含めて新規マシンだと思った方が良さそうだ!

まずはともあれ、メインメモリの64KBを吸い出してみることにした。

簡単なBASICプログラムを書いてみる。

f:id:PocketGriffon:20210705004609j:plain

このプログラムはTANDY 200上で作ったのではなく、いきなりMacテキストエディタで書き、TANDY 200へRS-232C経由で送り込んだ。

メモリから読みだした1バイトをテキストに変換し、そのままRS-232C経由でホストマシンへ送り出す。

 9600bpsの通信速度で、約60分掛かってMacへ吸い出す事が出来た!

 

軽くメモリの内容を見てみたけれども、BASICの中間コードすら互換性がない。

テープへの保存であっても、ASCIIセーブしたものでないと読めないと思われる(そもそもカセットフォーマットも互換性あるのかな…汗)。

 

どうやら0000h〜9FFFhまでの40KBがROM、A000h〜FFFFhの24KBがRAMっぽい。

ということはバンクもこの単位で切り替わるのかも?

RAMのEA60h以降はBASICおよびシステムのワークエリアになっているようなので、マシン語プログラムはそれよりも前に置く必要がありそう。BASICプログラムはA001hから保存されているっぽい。内部格納フォーマットはPC-8201のソレと同じだ(というかMicrosoft系BASICは構造的な互換がありそう)。

 

PC-8201のROMエントリとTANDY 200を比べてみたが、やはり互換性のゴの字もなかった。これはもうすべて1から調べないといけないっぽい。結構大変だ!(^-^)

 

どこから手を付けていこうかな…やっぱりバイナリ通信が出来るようにするべきかな。

それよりも先にネットで資料探してみようかな…うむむ(^-^)

 

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