文豪ミニ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

 

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

TOSHIBA T1200を手に入れた!

f:id:PocketGriffon:20210307110237j:plain

TOSHIBA T1200を手に入れた!

1987年に海外で発売されていたマシンなので、日本ではあんまり見ない機種だと思う。

 

PC DOSを動かすマシンであり、Windowsなどはインストールできない(できる?)

由緒正しいDOSマシンであり、謎パーでもなんでもないんだけど、コンピュータの歴史をたどると良く名前が出てくるので、一度は触ってみたいと思っていたのだ!

 

たまーにDMなどで「いろんなパソコンはどこで手に入れてるの?」と質問される事がある。素直に答えられる範囲(そうでない範囲もあるw)であればヤフオクとかメルカリとかeBayなどのサイトだったり、ハードオフとか秋葉原の電気街にあるお店だったり。

いっぱしのオタクらしく、短いながらもアンテナは張り巡らせているつもりだ。

 

さらに私がこういうブログを書いている事を知っている知人からも「こんなマシンあるんだけどいる?」みたいな話が来る時がある。周りに広報しておけば自然とマシンが集まる良い傾向だ(^^)

むしろ置き場所に困るので、最近は遠慮がちになってるのは否めない(ホント?)

 

ちなみにこのマシンは秋葉原にある「神田装備」で入手した。動作未確認3000円だ(^^)

 

電源を入れてみる!

手に入れたレトロパソコン、いきなり電源を入れてみることに賛否両論あるのだろう。場合によっては火を吹くかもしれないし。用心にこしたことはない。

でも私はいきなり電源入れてみちゃう人(^^;;

電子部品を見ても様子なんてわからない事が多いし、一瞬だけでも電源入れようとしてみたら、何かしらの変化に気づけるかもしれない。まずは様子見と称して電源オンが基本の人だ。

 

T1200はバッテリー駆動ができるマシンだ。しかも取り外しができるタイプ。この当時としては珍しいのかも?

f:id:PocketGriffon:20210307111834j:plain

取り外してみると、そこには電池の液漏れ跡が…。

f:id:PocketGriffon:20210307111916j:plain

うーむ…もしもこれがPC-9801ノートだったら手を出さないと思う。こうなってると内部の基板にまで影響が出てる可能性が高いのだ。でもこれは神聖なるT1200、救済を試みないわけにはいかないだろう(自己基準

f:id:PocketGriffon:20210307112044j:plain

バッテリーパックはこんな感じ。このサイズで容量は2200mAh。中身は単一電池でも入ってるんじゃないかと思うくらいでっかい。

ところで…「ー」端子の下にスイッチが存在している。

f:id:PocketGriffon:20210307112543j:plain

動かしてみたら意味ありげに赤が出てきた。

説明に書いてあるのかと思い読んでみたら「火に入れるな、端子を短絡させるな、分解するな」と普通のことが書いてあるだけでスイッチについては触れられていなかった。

なんだろね?充電するしないのスイッチとか??

 

なんにせよバッテリーからの起動は望み薄だし、なによりもバッテリーは空だ。

素直にACアダプタからの起動を試みる事にする。

f:id:PocketGriffon:20210307113429j:plain

今回は本体のみを入手したのであり、ACアダプタはない。コネクタを見てみると、ありがちなサイズとはちょーっと違うっぽい。HC-40やPC-8201と接続しているコネクタとは違う。

でもユニバーサル電源を使ってる限りはコネクタを自由に付け替えられる!

これは本当に便利だ!

f:id:PocketGriffon:20210307113950j:plain

いつも使ってる組み合わせはこんな感じ。電圧はHC-40なら6V、PC-8201なら9Vと切り替えている。青いコネクタは極性を入れ替える役割も持っている。これ1つあれば多くのレトロマシンの電源は困らない!

しかし今回はコネクタの形状が違う上に、この時代としては珍しいセンタープラスだった!

そのため青いコネクタは使わずに、こんな感じとなった。

f:id:PocketGriffon:20210307114147j:plain

 

さあ、電源を入れてみよう!

祈るような気持ちで電源スイッチをON側にする…。

残念ながらLEDもつかなければ液晶も無反応。その代わりと言ってはなんだけど、3秒もしないうちに猛烈な生くささが立ち込める!!これは…コンデンサがダメな時にする匂いだ!!(TOT)

すぐに電源をOFFにしたが、部屋中がものすごく臭い(T-T) コンデンサ1つや2つが放つ匂いでは無いと直感した。本体を傾けつつクンクンしてみたが、どうやら本体後方のACアダプタを繋げた辺りから匂いが出てる。フロッピーディスク側や液晶ユニットからは匂いがしていないので、おそらく電源ユニット付近の液漏れなんだろう。

 

分解してコンデンサ交換!

なんとなくだけど、本体のダメージが大きそうな気がする。おそらくコンデンサを交換しても動かないんじゃないかなーと直感したが、それでも努力するのがオトコノコだよ!

分解してコンデンサを確認してみることに。

f:id:PocketGriffon:20210307115140j:plain

…もうね、ひと目見て酷さがわかる(T-T) 基板全体が水っぽい感じになってるし、いろんな部品が黒く染まってる。液漏れが激しく起きてる状態だ!

 

まずはコンデンサの電圧と容量を調べてみて、手持ちでまかなえるか調べる。そしたら…2つ以外は在庫がある事が判明。これは…ある分だけでも交換してみる事にした!

f:id:PocketGriffon:20210307115403j:plainf:id:PocketGriffon:20210307115422j:plain

…これは写真にモザイク掛けた方がいいの?(^^;;

もんのすごいモレモレだった!先にこれを知ってたら電源入れなかったけど、入れちゃったもんは仕方ない!(ひらきなおり

エタノールなどでキレイにして行こうと思ったが、これはもう洗った方がいいや!

あろうことか水道水でジャバジャバ洗った!食器洗い洗剤をつけつつ、歯ブラシでごしごし!電気屋さんが見たら悲鳴を上げる光景(電気的拷問)が繰り広げられた!(^^;;

そして洗った後がこちら↓

f:id:PocketGriffon:20210307115757j:plainf:id:PocketGriffon:20210307115817j:plain

あくまでも自己責任って事で(^^;

洗った後は大雑把に拭き取り→エアーダスターで大きな水分の吹き飛ばし→浴室乾燥機に放り込んでしばらく放置の三連コンボ。これでほぼ完璧に乾燥できる(^-^) 急速に乾燥させるからサビも出にくいよ!浴室乾燥機があるご家庭ではオススメかも。いやオススメはしないけど!

 

ところで…今回は35V 150μFのコンデンサが足りなかった。コンデンサって容量を合成できるんだろうか??そんな事を思って、↓こんな事をしてみた。

f:id:PocketGriffon:20210307120201j:plain

これは35V 47μFのコンデンサを3つ繋げたものだ。これでいいかな…と思い、容量を測ってみたところ、全然141μFにならないことが判明!え?どーして??

てっきり容量は合計されるものだと思っていたが、どうやら違うらしい…。ネットで調べてみると直列と並列がうんぬん…と書いてあったが、どうやら直列で繋げてもダメっぽい。うーん、そうなのかぁ…。

 

やっぱり危険な事はやめようと思い、素直に35V 150μFのコンデンサを入手する事にした(^^;

危険な真似はやめようね!!←お前が言うな

 

とりあえず今回はここまで!

次回、T1200は復活するのだろーか??

乞うご期待!(^-^)

 

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

PC-1600KでBad Apple!! 高速化編

先日、SHARP PC-1600KでBad Apple!!を表示させる実験をした。

主な目的は、搭載されているメモリを使い切る「何か」をしてみたかったのであり、それ以上の目的も目標もないままだった。

 

Twitterおよびこのブログに投稿後、改めてYoutubeなどにあるBad Apple!!の動画を見てみたが、音楽と映像がマッチしていてとても軽快に見られる!うーん、これは…サウンドはどうあれ動画速度はもう少し速めないと制作者に失礼だなぁ…と思った。

 

というわけで!今回は高速化がメインのお話(^-^)

 

速度計測をしてみる!

さっそく高速化を始めてみたい……が、その前に速度を正確に計測する仕組みが必要だ。

その仕組みが無いと、実際に入れたコードで速度が速くなったのか、逆に遅くなってしまったのかを知る方法が無い。人間の感覚ほどアテにならないモノはないw

 

どこかのI/OポートにTick値が出てないかな…。タイマー割り込みでも良いのだが…。

エミュレータがあれば楽に速度計測が出来けど、そのためだけに作るのは忍びない(否定はしないw)。

 

そしたら「PC-1600K データブック」に情報が載っていた。

f:id:PocketGriffon:20210226132629j:plain

こういう情報が掲載されている書籍があるのは、本当に助かる!

 

だがしかし……なんと1/64秒の割り込みしか用意されていなかった!処理速度を測るための数値としては、だいーぶ大雑把な数字だ。うーん…これで測るしかないかなぁ…。

サンプリング数を多くして、大きな値で見ていくしか無いな。

 

現状、64KBの拡張メモリ(CE-1600M * 2)に1086枚の画像が入っている。これを全て表示させた後に掛かった数字(時間)を目安にする。

初期の状態では「10784」という数字が出た!

この数字を64で割ると、表示に掛かる秒数が出てくる(168.5秒)。1086枚の画像を168.5秒で表示しているので、秒間6.445枚の絵が表示出来ている。これが現状だ。

最初が秒間1枚くらいの速度だったので、まぁ速くなってはいるんだけど(^^;

オリジナルが秒間30枚らしいので、それから比べたらだいーぶ遅い。

 

高速化開始!

さて、正確な(でも大雑把な)速度が測れるようになったので、これから楽しい高速化作業といきますか!

 

まずは「何を高速化するのか」を検討してみる。

処理の流れは、ものすごく乱暴に書いて以下の通り。

1、画像を展開するバッファをクリア

2、圧縮されたデータをバッファへ展開

3、展開されたデータをVRAMへ転送

この3つだ。

1のバッファクリアは、点を打つ/消す、のどちらかの処理を端折るために入れている。先にクリアされている事が保証されれば「点を消す」処理はいらなくなる。黒い部分が多い画像では逆に不利となるが、多くの場合は有利に働くため入れている。

 

2は多分、イチバン重たい処理。データによって縦方向と横方向があり、2つの展開ルーチンが存在する。縦方向に圧縮されたデータが多いため、縦方向のルーチンを最適化したい。

 

3はIOCSの処理をそのまま利用している。問題は横方向の156ドット全てを転送するサービスしか提供されてなく、なんとなく無駄が多そう…という事だ。

 

それぞれの速度を測ってみたが、1はほとんど負荷がなく誤差の範囲程度、3は全体の25%くらい掛かっている事が分かった。残りが2の時間だ。

 

実際の描画処理は、最終的にはアセンブラ化すればいいか…と思っているが、でもC言語で究極まで高速化してから、そのアルゴリズムアセンブラ化するのが良いかなと思ってる。LSIC-80が出力するアセンブラコードを参照しながらコードに手を加えていくが、むしろ「アセンブラコードでこう吐かせたいから、C言語でこう書く」という感じ(^^;;

 

久しぶりにLSIC-80でガリガリ組んでみたが、register宣言でコードをコントロール出来たり、auto変数よりもグローバル変数の方が良いコード吐いたりなど、自前コントロールがとてもし易いコンパイラだと思い出した。

 

その結果、「これをアセンブラ化してもたいして速くならん」というところまで攻め込む事が出来たので、これはもうコレで(^^;; C言語状態で満足いくモノが出来てしまったw

まぁデータの持ち方などアルゴリズムを変更したら良かったな…と思うところがいくつか出てきたが、今回はこれ以上はやらないという事にした(^-^; キリ無いからね!

 

LCDCを直接アクセスしたい!

3の「展開されたデータをVRAMへ転送」を高速化してみる事にした。

 

実はIOCS経由でしかLCDにアクセス出来ない事が気になってた!(^-^;; 「出来ない」というと言い方がアレだけど、「やり方を知らない」と言った方が良いかも。

 

「PC-1600K データブック」にもLCDへの直接アクセスは詳しく書かれて無いのだ!

f:id:PocketGriffon:20210226153853j:plain

↑この図しか書かれてなかったんだけど…見る人が見たら理解できるんだろーか?

なんとなく分かるのは、左64ドットと次の64ドットではコントローラが違うらしい事、右の28ドットも特別扱いっぽくなってるらしい…。

ここから理解できるのは、表示しようとするモノが「真ん中の64ドット境界」をまたぐと処理が面倒になりそう…って事だ。

 

詳しいI/Oポート情報が欲しい!

仕方ないので…ROMを解析する事にした!

最低限ではあるけれども分かった事を書いておく。

I/Oポート58h〜5Ahをアクセスすると左64ドット、右28ドットがアクセス出来る。

58hがLCDの座標設定、59hのMSBにBusy信号、5Ahにデータを出力する…らしい。これが左64ドットをアクセスする時。右28ドットにアクセスする際にはY座標の指定を+4する。今回は使わないけど!

そして中央の64ドットにアクセスするには54h〜56hポートをアクセスをするようだ。

なるほど…そういう感じなのか。

これらを組み立てる事で、IOCSの156ドット全てではなく、必要最小限のドット数のみ更新する事が出来そうな雰囲気。

 

どうやらPC-1600Kにはハードウェアスクロールっぽい仕組みがあるようで、オフセット座標を加算しないといけない事に気が付かずに一晩ハマった。その後、なんとか問題を解決してLCDCへの直接アクセスが可能となった!

 

その影響として、画面中央に表示していた画像が、左から64ドットに変更となった。でもそのおかげで効率の良い表示が出来るようになった。

 

LCDCの速度はPC-G850シリーズのそれとは違い、CPUの速度に追いついてこない。Z80のOTIRで一気に転送ってのはLCDCの速度的に無理で、1バイト送信するたびに40クロック以上待つか、律儀にBusy信号を監視する必要がある(今回はちゃんとBusy信号を監視した)。

※PC-G850Sで実験した際には、OTIRどころかOUTIを144個並べても問題なかった

 

以上の工夫をする事によって、初期状態で10784(168.5秒)掛かっていた処理が、6378(99.65秒)まで縮める事が出来た!

f:id:PocketGriffon:20210226155730j:plain

この先、圧縮データの展開処理をアセンブラ化としたとしても、6000を切る事は難しいかも知れない。とりあえずこの辺りでキリを付けるのが良いかな…と考えた。

 

動いたばかりの時は秒間1コマしか動かなくて、こりゃどうしたらいいんだろう…と思ったが、なんとかアニメーションっぽく見えるようになったのは嬉しい(^-^)

データ量もどどーんとでっかいし、とりあえず満足かな!

 

最初に公開した状態↓に比べても速くなってるのが分かると思う(^^)

 

これをやってる最中に気が付いてしまったんだけど……ウチのFX-890Pだったらメインメモリが256KBあるなぁ…とか、PC-E500に取り付けてある増設メモリも256KBだったなぁ…なんて思ってしまった。やらないよ!やらないんだからね!(TOT)

 

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

 

 

PC-1600KでBad Apple!!

このところ体調が良くなかったりして集中力がゼロ…。

よーしやるぞ!…がなかなか出来ない状況の中でも何かやりたい(^^;

こういう時にはチマチマしたデータを加工するプログラミングが捗りますw

そんなコトない?? 

 

まずはこれは見て欲しい。

これはPC-1600Kで「Bad Apple!!」の動画(元から影絵)を表示させてみたものだ。

今回はこれの解説をしてみたい。

あんまり面白い内容じゃないかも(^^;;

 

PC-1600Kのメモリを使い切ってみたい!

やっぱレトロやってると空きスロットは埋めたくなりますよね!

私は使う使わないは別にしても、埋めるチャンスがあるのならば埋めますw

f:id:PocketGriffon:20210221201233j:plain

我が家のPC-1600Kさんには増設メモリ(CE-1600M:32KB×2)を取り付けてある。最初は辞書ROM(CE-1650M)が付いてたんだけど、プログラム開発には何も使わない事に気が付いて、それ以降は増設メモリだけを取り付けるようになった。

でも……せっかく取り付けても使う機会が無かったんですよね…。まさかBASICでそんなでっかいプログラムを組む事も無いし…。

 

開発環境も整った事だから、何かメモリを埋め尽くすような「なにか」をしてみたい!

そんな事を漠然と考えながらアイディアを探していた。

そもそも、PC-1600Kの画面(156×32ドット白黒)で何かをやるにしても、世の中で参考に出来るものが少ない。他のポケコンシューティングゲームとか凄いなぁ…とか思うけれども、あれを移植する気には到底なれない(^^;;

 

何気に見ていたyoutubeで出てきたBad Apple!!というPV。実は何度となく名前は見たことがあったけれども、動画を見るのは初めて!なるほど……そうね、これをPC-1600Kで動かしたら…と頭によぎってしまうのには時間が掛からなかったw

拡張メモリの64KBにどのくらい入るのか分からないけれども、頑張ってみるには楽しい題材だと思った!

 

検討!

そもそも…こんな大きくて長い動画、どうなってるんだろう…と思って探してみたところ、mp4ファイルが存在する事が分かった。調べてみると、動画の画像サイズは512x384ドットのグレイスケールだった。

PC-1600Kで表示出来るのは156x32ドット、常識的に考えてもそのまま綺麗に変換という感じにはならないだろう。

まずはこのオリジナルの画面サイズを小さくしてみて、見るに堪えられるかどうかを検討してみる。

ffmpegというコマンドを使えば、アスペクト比を固定したまま画像サイズが変更出来る。

 

さっそくやってみたが……縦サイズを32ドットにしようとしたところ、横方向が割り切れない(アスペクトを維持したまま変換出来ない)というエラーが出てしまった。そうか、縦も横も綺麗に割り切れる数で変換してやらないといけないのか…そりゃそうだ。

 

そこで、縦サイズを64ドットにして変換してみた。この場合、縦サイズは48ドットとなりPC-1600Kではそのまま表示出来ない。でもまぁまずは変換してみる事が大切だ。

f:id:PocketGriffon:20210221204815p:plain

うーん…見られなくはないけど、相当厳しいかも?でもこのくらいが現実的だろう。

で、表示仕切れない部分については、上下8ドットずつ削る事にした!単純明快w

 

表示するサイズは横64ドット、縦32ドットと決めた!

PC-1600Kの画像は縦8ドットで1バイトの構成。という事は64x4バイトで1つの画像に256バイトが必要となる。64KBのメモリで256枚の画像。これを高速に切り替えてやればアニメーションに見える…という算段だ。

だがまてよ……オリジナルのデータは秒間30フレームで作られているっぽい。という事は256枚という最初の8秒だけ表示されるって事なのか…。うーんさすがに少ない??圧縮してもう少し入るように頑張ってみよう!

 

データ抽出の旅!

mp4フォーマットのままでは加工がしづらいので、扱いなれたjpegに変換する。

  ffmpeg -i movie -f badapple.mp4 data/%04d.jpg

これでフレームごとにデータを出力する事が出来る。

そしたら…なんと6566ファイル出力された!!

これを…うまいこと加工して64KBに納めないといけないが、そもそもこんな沢山のファイル全部納めるのはまず無理だw この時点で全データ格納は諦めた。

 

元のデータは白黒と言ってもグレイスケールのデータだ。しかしPC-1600K用のデータに変換する際には白黒の2値に落としてやらないといけない。真っ黒が0、真っ白が1とした場合、0.5までの色は白にする事にした。この辺りは良い感じの値が必要だが、まずは決めちゃうことが大事。気になったらあとで調整すればいーのよ(^-^)

 

圧縮アルゴリズムは迷わずでRLE(Run Length Encoding)とした。理由はいくつかあったが、PC-1600K上でリアルタイムに展開して表示しなければならない。潤沢なCPUパワーがあるマシンでは無いので、展開処理が簡単な方が良い。そう考えると選択肢がどどーんと限られてくる。今回のように色が2値限定の場合、ランレングス圧縮との相性は抜群だ!

 

ここではランレングス圧縮の細かい説明をするつもりはないので、ネットで検索してもらいたい。

 

絵によって縦方向を基準で圧縮した方が良いか、横方向を基準として圧縮する方が良いのかを見極める必要がある。

例えばこんな感じの絵↓

f:id:PocketGriffon:20210221212830p:plain

これは縦を基準として圧縮した方が良さそうだ。

逆にこういう絵↓は横を基準とした方が圧縮率があがる。

f:id:PocketGriffon:20210221213034p:plain

まさかデータを1つずつ見ていくわけにもいかないので、ツールの中で両方の圧縮を試してみて、1バイトでも縮まった方を採用する事にした。同じサイズだった場合は縦を採用した。これはPC-1600KのVRAMの都合で、縦方向の圧縮が都合が良いからだ。

 

拡張メモリで使える詳しいサイズを知りたい!

拡張メモリを積んでも「MEM」しかしたことが無い人は多いと思うw 数字が増える満足感は計り知れないw かくいう私もそのひとりだ!

 

しかし今回はCE-1600Mの32KBメモリ全てを使い切る事を前提としているため、使い方について正しく理解しなければならない。

なぜこんな風に強調しているのかと言えば、今回エラくハマったからだww

 

目的としては拡張メモリの64KB分をデータ領域として使いたい。出来ればファイルとして置くのではなく、普通にアクセス出来るメモリとして扱いたい。

マシン語領域として宣言する必要があるんだろうな…と思ったので、何も考えずに「NEW "S1:",&8000」としてみたがERROR 24になってしまう。

ERROR 24というのはパスワードが宣言されている場合に禁止されているコマンドを実行しようとすると出るエラーだ。

パスワードなんて設定していないよ…

知らぬ間に何かをしてしまったのかも…と思い、本体を完全リセットしてみるが全く変わらず。これだけで丸2日くらいハマってしまった(やる気なしモードなので実際には数分x2日分)。

 

散々調べてみて分かったのだが、どうやらINIT命令でRAMモジュールのモードを切り替えてやらねばならなかったらしい!これって基本中の基本???

  INIT "S1:", "P"

普通に増設メモリを取り付けるとINIT "S1:", "M"としたのと同等のようで、メモリモジュールは拡張メモリに設定される。MEMするとメモリが増えて見えるのはそのおかげだ。

"P"を指定すると、通常のプログラムから保護される場所になるらしく、マシン語データなどはここにいれるっぽい。プログラムからは保護されるのでMEMしても容量は増えて見えない。

そもそも「プログラムから保護」って言い方が分かりづらい(T-T) マシン語のプログラムは、プログラムではなくデータとして扱われるって事なのかな…。

 

ここで疑問がひとつ。標準メモリの16KBはモード的には"M"みたいなんだけど、INITでマシン語エリアも設定出来る。なんで???これがいらぬ混乱を引き起こす(T_T) アタマの中にメモリマップやモジュールの事が入っていないと理解する事は不可能だと思った…orz

 

  INIT "S1:","P"
  NEW "S1:",&7F3B
  INIT "S2:","P"
  NEW "S2:",&7F3B

よし!これでようやく拡張メモリにデータを置けるぞ!(^-^)

データが置けるのはBANK0では&80C5〜&BFFF、BANK1では&8000〜&BFFF…という感じにものすごーく分かりにくくなってる…。

今回のプログラムでは以下のように決めた。

  BANK0 &8100 - &BFFF
  BANK1 &8000 - &BFFF
  BANK2 &8100 - &BFFF
  BANK3 &8000 - &BFFF

アドレスが連続しないという問題は解決しないけれども、脳内での変換はだいぶ楽になるはずだ!拡張メモリ2つで64KBのうち、利用出来るのは65024バイト(63.5KB)となった。

 

ちなみにプログラムはBANK0の&C100から置いてある。ここは本体標準メモリ。ワークなどもここに置いてある。なんとなくこういうメモリ構成で作るのが作りやすいかもな…と思った。

 

実際の画像データ自体は、ランレングス圧縮して出来たファイルをcatで繋げて大きなサイズのファイル(65024バイト以内)にし、それを各バンクごとのファイルに分割した。その際、BLOADで読めるヘッダ(16バイト)を付けて終わり。あとはPC-1600K本体に読み込ませるだけだ。

f:id:PocketGriffon:20210221221636j:plain

結局、このサイズの中に1086枚の画像が入った!

 

実機でプログラミングする前に…

この手のプログラムを、PC-1600K実機で作っていくとデバッグが結構大変だ。出来る限りホストマシンで作り、動作的に問題ないものを実機に送り込んだ方が良い。そのためのC言語開発でもある!

このブログを読んでる界隈の方々に伝える事でもないが、C言語であればMacとPC-1600Kの両方で動くプログラムを作るのは簡単だ。

f:id:PocketGriffon:20210221222629j:plain

こんな感じでテキストで構わないので、確実にMac上で動くモノを作ってから実機に送り込む。おかげで実機での動作確認は数回程度で済む。

 

速度が出ない!

まずは動かす事が大事!速度は後回し!…といつも言ってます、はい。

そして今回もそういう作り方をした。まずは確実に動くようにしてからでないと工夫のしようがないからね。あ、メモリに関しては最初から工夫しとかないとダメ!!後からなんとかするのは大変だよw

 

今回は出来る限りC言語(LSIC 80)で書いた。アセンブラ化したところは

・バンク切り替えして拡張メモリから1バイト取得

・出来上がったデータをVRAMへ転送

の2つくらいだ。他はインラインアセンブラも使わずに作った。

 

実際にPC-1600K実機で動かしてみたのだが……こりゃあかん(^^;; 秒間1コマ程度しか動かない!うーん…予想では秒間3コマくらいは出そうな気持ちだったんだけど(T-T)

この状態で、取り切れるだけのバグは取ることにした!実際に表示がちゃんとしないデータなどが残っていたのだが、これらを全て片付けてからの高速化だ。

 

一通りバグが取り終えたところで、改めて高速化について考えてみる事に。

基本中の基本として、C言語で書いたモノがどんなアセンブラコードに変換されているのかをチェックする。すると仮想VRAMアドレスの計算時のy/8などが除算処理されていた。これは数の暴力、テーブル化で単純化して解決した。

 

次は圧縮されたデータの展開処理。展開処理は2つあり、縦方向を基準とした展開と、それを横にした展開ルーチンだ。この2つが非常に重たいのは明白。ちなみにデータは縦基準で圧縮されてるものが圧倒的に多いので、まずは縦展開処理の高速化を考える。

 

パッと考えられるのは、縦1ラインが全て黒または白の場合だ。これは判定も簡単だ。

次は1バイト全てが黒または白の処理も簡単に対応が出来た。

この2つの処理を入れてみたところ、かなり高速化された。やっぱりビット演算は得意では無いZ80。特に高級言語で書く際には注意が必要って事だ。

 

横展開処理に関しては、横方向にアドレスが連続しているので仮想VRAMの計算そのものを外した。さらにビット演算もテーブル参照をやめて計算するようにしたところ、想像以上に速くなった!

 

とりあえず完成ということで…

なんかやる気が出ないモードに突入しているにも関わらず、ちまちま作業は出来るんだなと実感。気合い入ってる時は30分で出来る事が1週間掛かってる感じだけど!

 

この後やるとしたら、ついにアセンブラ化かなぁ…でもとりあえず動いてるので、これでいいかなーって気持ちにもなるw きっと今よりも3倍くらい速くなる気がする…。

 

あと、アニメーションが最後まで流せないのも残念なので、オンメモリにこだわらずRS-232C経由でデータを読みつつ表示…なんてのも楽しそうだ。これは画像処理が速くなればなるほど厳しくなってきそう。目一杯高速化したのちに可能かどうか検討するのが良さそうだ。

 

当初の目標だった「メモリを目一杯使って何かをする」は達成出来た気がする!ちゃんとバンク切り替えてデータ読めた!グラフィックも表示出来たので一定の達成感はある。

よーしよし、PC-1600K面白いぞ!(^-^)

 

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

SHARP PC-1600KでBLOAD!

f:id:PocketGriffon:20210213105642j:plain

私の中ではMAXお気に入りポケコンとして君臨してるSHARP PC-1600K!

機能や性能的にはPC-G850VSやPC-E650の方が上だったりするんだろうけれども、見た目大きさ重さなども含めてのお気に入り度合いは群を抜いている。

 

まだこのブログを始めるよりも前、ちょうど1年前の2020年2月頃にPC-1600Kの開発環境を整えた。

当時はSDCC(Z80 Cコンパイラ)を中心に環境を組み立てたけど、アセンブラとの連携のやりにくさから主にアセンブラでの開発っぽくなっていた。とりあえず画面にグラフィックスを表示して終了となった(まぁ私のいつものパターンだw)

 

今回、PC-8300用にLSIC80の環境を整えた流れで、もう一度PC-1600KでもLSIC80を中心とした環境を整えてみようという気になった。ビルドする環境自体はPC-8300と全く同じだが、本体へプログラムを送り込む方法だけが異なる。

 

PC-1600K自体、マシン語プログラムをBSAVE、BLOADする事が出来る。

前回の作業ドキュメントを漁ってみたが、どうも当時はBLOADの存在に気が付いていなかったようだ。BASICでマシン語データを送り込む方法だけが試されていた。

せっかくある機能を使えてないのはもったいないので、頑張って解析してみる事にした!

 

BASICでBLOADするのは?

何にしてもBASICからBLOAD出来るのが一番効率良いに決まってる。でもそのためには、PC-1600Kへ送り込む「データのフォーマット情報」がどうしても必要だ。

本体のマニュアルを見ても、残念ながらそういった情報は書かれていない。

PC-1600Kデータブックに、テープへ記録するフォーマットについて書かれていたが、RS-232Cでも同じとは限らない。むしろ同じであるハズがない。

f:id:PocketGriffon:20210213122243j:plain

BSAVEのパラメータ(開始アドレス、サイズ、実行アドレス等)から想像出来るヘッダを付けて、いくつかのロード実験を繰り返したが、成功にもエラーにもならずPC-1600Kは沈黙状態(T-T) こうなるとリセットするしか止める方法が無い。

 

うーん、やっぱり解析するのは簡単じゃ無いなぁ…

 

BASICROMを解析しようとも思ったが、これまた壮大な話になってしまう。

フォーマットを調べるのは簡単じゃないかもな…。

仕方なく別のアプローチを検討する事となった。

 

バイナリロードプログラムを移植する?

HC-88で開発をしたバイナリロードプログラム。先日このプログラムをPC-8300へ移植して、ロード→実行の時間が劇的に改善された。

このプログラムをPC-1600Kへ移植する事も、比較的簡単と思っていた。

まずはこちらを実用化するべきかも知れない…と思い、移植に必要な作業を開始した。

 

このバイナリロードプログラム自体はオールアセンブラで書かれているため、移植そのものには大した手間は掛からない。シーケンスはそのまま利用出来るので、RS-232Cを使う部分だけPC-1600K用に書き替えてやれば良いはずだ。

 

バッファサイズの変更、通信パラメータの設定、通信デバイスの選択等、HC-88やPC-8300には無かった初期化が数多く存在した。特にバッファサイズを変更出来るのはありがたい!HC-88などは明らかに通信バッファが足りなくて速度が出ないって感じだったもの(T-T)

通信速度を38400bpsにするための推奨バッファサイズは1100バイト以上らしい。そんな速度で通信出来たらマジで嬉しい!そんな事を考えながら準備を進めた。

 

そしたら……なんとドハマりしたのは別のところだった! 文字列表示関数でコントロールコードを解釈してくれないみたいなのだ!&12(画面クリア)、&OD&0A(改行)などがことごとく処理されない(T-T)

何かメモリ中にスイッチがあるのかも知れないと思い、あちゃこちゃ探してみたがどうにも見つからない。試しにBASICで「PRINT CHR$(12)」とやってみたが画面クリアがされない!え??もしかしてそういう仕様なの??

 

仕方ないのでいくつかのコントロールコードを解釈する事の出来る1文字表示処理を自前で書くことにした。きっと同じような処理がROMに含まれてるんだろうな…と思いつつも、今は動かす事を急ぎたい!

 

突破口!

コントロールコードを含んだ文字列が問題なく表示出来るようになった頃、少し落ち着いて資料を見返してみる事にした。ずっと他の機種に取り組んでいたため、PC-1600Kデータブックを手に入れてからも熟読出来ていなかったのだ。この本は国会図書館で複写サービスを受けていた事もあり、ある程度の中身は読めている自覚があった。

 

そうか…BLOADのフォーマットばかり気にしていたけど、考えてみればRS-232Cに対してBSAVEしてみたらデータが出力されるのではないか…と気が付いた。もちろん当初テストもしていたが、PCG-LinkMacにはなんの情報も出力されなかったため、後回しにしていたのだw

 

Macコマンドラインで以下を打ち込む(XXX...の部分は通信アダプタによって異なる)

  cat /dev/cu.usbserial-XXXXXXX > m.bin

PC-1600K本体で以下を打ち込む

  BSAVE "COM1:",#0,&C000,&C00F

 

Mac側は自動停止しないのでCTRL-Cで中断。

これでPC-1600Kから送られてきたバイナリデータがm.binとしてファイルに入るはずだ。

そうして出来たのが↓これ。

f:id:PocketGriffon:20210213124855j:plain

これを見てピンときた!

なんだ、これはディスクへBSAVEした時のデータと同じじゃ無いか!と(^^;;

f:id:PocketGriffon:20210213125427j:plain

実行アドレスのところにそれっぽいアドレスを入れてしまうと、BLOADした後に「実行されて」しまう。実行されて困る場合には、実行アドレスを&FFFFにしておけば良いようだ。

 

それじゃあ…という事で、簡単なHello Worldを作成し、出来上がった(PC-1600Kでの)実行ファイルに、ヘッダーをつけてやるツールを作成した。

f:id:PocketGriffon:20210213125954j:plain

完璧!!!(^-^)/

BLOADした後、そのまま実行されて「Hello World!」が表示された!

 

出来上がった開発環境

今回もLSIC80を中心に環境を構築したため、Macだけでは完結していない。

編集とPC-1600Kへの転送はMacで行うが、ビルド自体はWindowsで行っている。普段からWindowsを使っている方であれば、Windowsマシン1台で完結する開発環境が作れるだろう。やっぱりWindowsへ移行した方がいいのかなぁ…なんて事も頭によぎるけれども、使い慣れるまでにストレス過多になりそうなのでどうしても決心が付かない(T-T)

 

まだ通信速度のテストとか一切していないので、9600、19200、38400と試してみたい!

少し大きめな何か作りたいなー(といつも言いつつ何も出来ない…)

せっかくなので何かやります!

PC-1600K、久しぶりに触るので楽しみです!(^-^)

 

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

増設メモリを集めてみた!(CASIO以外)

f:id:PocketGriffon:20210206001215j:plain

PC-1360とPC-1360Kのメモリ容量を調べている流れで、

そういえばウチにはどんなポケコン用増設メモリがあるんだっけ?…と気になったので、引っ張り出せる範囲で並べてみた!

 

しかしCASIO系のポケコンは増設メモリを確認するために裏ぶたを開ける分解が必要で、さすがに気がめげてしまった!いつか気力がみなぎってる時にチャレンジしてみたい!

 

では写真と簡単なご紹介をば!

 

PC-1350系

f:id:PocketGriffon:20210206001800j:plainf:id:PocketGriffon:20210206001749j:plain

f:id:PocketGriffon:20210206001515j:plain

少し大きめのサイズをしているこのメモリ。ウチではPC-1350に取り付けられている。

PC-1360とはメモリのサイズが違うため流用できない(T-T)

しかもPC-1350は16KBまでしか認識しないので、32KBのメモリを取り付けても無意味だったという…orz

f:id:PocketGriffon:20210206003237j:plain

これもPC-1350に取り付けられるサイズのメモリ。珍しくRICOH製。

互換メモリも存在してたのかぁ…。

 

PC-1360/60K、PC-E500シリーズ系

おそらくシャープのポケコンの増設メモリと言えばみんなが思い出すのはコチラかも?

f:id:PocketGriffon:20210206003438j:plainf:id:PocketGriffon:20210206003417j:plain

f:id:PocketGriffon:20210206003428j:plainf:id:PocketGriffon:20210206003447j:plain

f:id:PocketGriffon:20210206003407j:plain

これ以外にも64KBメモリがあるらしいけれども、私は所有していなかった(^^;

バックアップ電池を年に1度は交換した方がいいのかなぁ…なんて思いつつも、ここ2年くらいの間に交換した事が無い!

主にPC-1360系に取り付けてる。

 

番外編として、このようなカードもある↓

f:id:PocketGriffon:20210206004248j:plainf:id:PocketGriffon:20210206004228j:plain

どちらも高松製作所製のメモリ。256KBと256KB*2の2種類所有。

PC-E550でSepiaを起動する際にとても役にたった!(^-^)

256KB*2の方は、(1 2と印刷された場所にある)スイッチで切り替えられるんだけど、一度も切り替えた事が無い…。という事は半分は使われてないって事ね…汗 私の運用の問題だと思うけれども、もったいない!

f:id:PocketGriffon:20210206004929j:plain

↑これが上で出てきたSepiaというゲーム。

ディスクドライブ、(PC-E500では)メモリ増設必須という過酷環境を要求するソフト!

プログラムを書き替えて増設メモリドライブで動くようにして遊んでました(^-^;

 

PC-1500系

f:id:PocketGriffon:20210206005223j:plainf:id:PocketGriffon:20210206005237j:plain

PC-1500系に取り付けることが出来るメモリモジュール。

他にもCE-161というのがあるけど、他機種用でご紹介。

8KB増設で当時の値段で30,000円、4KBで15,000円だった。

本体が59,800円だったことを考えると、いかにメモリが高かったのか分かる!

 

f:id:PocketGriffon:20210206005209j:plain

↑こんなモジュールもあった。

カナテープではなくてカナモジュール。

おそらくカナ表示機能?を追加しつつ4KBのメモリ増設をするモノで、当時25,000円。

 

PC-1600K系

f:id:PocketGriffon:20210206010108j:plainf:id:PocketGriffon:20210206010126j:plain

みんな大好きPC-1600K用のメモリ(^-^)

ここに来て接続端子が隠され、電池交換もだいーぶ楽ちんになった。SHARPポケコン用増設メモリの完成形な感じがする!

ちなみにCE-161はPC-1500にも取り付けられる。

 

その他

思ったよりも数が無かったので、「その他」でまとめてしまったw

 

PC-2001

f:id:PocketGriffon:20210206010525j:plain

NEC PC-2001用の増設メモリ。おそらく8KB。

本体の8KBと合わせて16KBの大容量を扱えた!

f:id:PocketGriffon:20210206011038j:plain

中にバッテリーが入っているんだけど、外見でバッテリーを匂わせるような表記が全く無いため、バッテリーの存在を知らずに使ってる人も多い気がする!

 

NEC PI-ET1

f:id:PocketGriffon:20210206011338j:plain

…写真を載せてみたけれども、NECが発売していたPDAを知らない人も多いかも?

f:id:PocketGriffon:20210206011552j:plain

↑こんな形をしている。色違いで2台所有。

 たまーにハー○オフなどで、ジャンクコーナーの電子辞書に紛れて入っている。
しかも税別100円!

このPDAの増設メモリが上にある64KBのカードで、おそらく強烈レア(^-^;;

 

PASOPIA mini

f:id:PocketGriffon:20210206012036j:plain

PASOPIA mini用の増設メモリで容量12KB。

メモリの物理的サイズは結構大きい。

 

 

あ、なんか気力が切れてしまったので、この辺で終わりにしときたい!(^^;

CASIO系、その他デスクトップなどもご紹介出来たらいいな!

意外に増設メモリって「これはどれのだっけ?」と覚えとくのが大変だったりするので。

 

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