SHARP PC-1600KでCP/M80!その1

すでにTwitterでご報告した通り、PC-1600KでCP/M80が起動した!

f:id:PocketGriffon:20210426224444j:plain

 

本当に起動しただけのハリボテ状態なので、まだ発表するべき時期では無かったのかも知れないが、画面が出たのが嬉しくてツイートしてしまったw

そして今日は「出先に1MBのメモリを忘れてきた」という事情で作業が進まないため、ここまでの作業報告も含めてつらつらと情報を書いてみたい!

 

なぜCP/M80なのか!?

Bad Apple!!の開発検討している時に、メモリマップについて詳しく調べてみたら、どうもこのPC-1600K、オールRAMにする機能があるらしいと気がついた。

特にBad Apple!!を作る上ではオールRAMの必要がないので頭の片隅に置いてある程度だったが、64KBオールRAMに出来るんだったら何かできそうだなぁ…と感じていた。

 

まずぱっと思ったのが、CE-1600Fとの組み合わせでCP/M80を立ち上げる事だった。ただ、ディスクが片面64KBという記録容量なので、あんまり凝ったことは出来ないな…とも思った。

そしてCE-1600Fは標準では1セクタが512バイトであり、1セクタ128バイトのCP/M80とは少しだけ相性が良くない。その辺りの差をBIOSで埋めていけば出来なくはないけど…うむむ…

 

2014年8月、いきなり「CP/M80で遊んでた"あのゲーム"をやりたい!」という動機だけで、Z80エミュレータをスクラッチから書き、その上でCP/M80を動かした。当時の開発日記があり、それを見るとコードを0から書き始めて、6日後にはCP/M80が起動していた!若い頃の自分すげーw

この時の作業で、CP/M80の内部構造は相当なレベルで詳しくなっていたので、OSの移植については気持ち的な敷居が低い状態だった。

 

そんな事を心に秘めていたところに1MB増設メモリの話が立ち上がってきた。なんか頭の中でいろんなもののピースがパチっとハマった!これは…作るしか無いでしょう!!Bad Apple!!が終わったらCP/M80の移植をやってみよう…と心のなかで決めたw

 

CP/M80を移植するための具体的な検討

まず、CP/M80自体は64KBのオールRAM空間が必要というわけではない。世の中には20KB CP/Mなどもあるらしいので、起動させるだけならば32KBもメモリがあれば起動はさせられる。しかし何か有名なソフトを動かそうとした場合は、48KBくらいのメモリがないと厳しい現実がある。

せっかくなのでPC-1600Kの機能を最大限に使ってオールRAMのCP/Mを立ち上げてみよう。

ここで決まったのは「メモリは64KBオールRAMで動かす」という事。

 

次にPC-1600Kが持っているIOCSを使うかどうか。

実は64KBオールRAMとIOCSの使用というのは非常に相性が悪いのだ。PC-1600Kは標準では0000h〜7FFFhがROMの状態で動くようになっている。IOCSが呼び出されるたびにメモリの状態をROMに戻して呼び出すような仕組みが必要になる。MSXのインタースロットコールみたいなもん??

 

PC-1600Kのような巨大なシステムを持っているマシンを、全て乗っ取って独自にコードを書くのは容易では無い。出来なくないけど、ここは「しない選択」をしたいw 用意されてるものを積極的に利用して、まずは動かす事が大事だ。

ここでは「IOCSの機能を利用する」と決めた。

 

CP/M80は割り込みがなくても起動する。以前スクラッチから開発したCP/M80システムでは割り込みをサポートしていなかった。だが…今回はIOCSを使うと決めた流れがある。IOCSの中には割り込みで処理される事を大前提としてるサービスもあり、割り込み自体を止めるとPC-1600Kというシステム全体が破綻する可能性がある。停めてパッチを当てまくるくらいなら、割り込みはそのまま使う方向で、どうやったら動かせるかを検討した方が良い。

というわけで「割り込みを使う」と決めた。

 

そしてディスクについてはCE-1600Fの利用をすっぱり諦めた。1MBの増設メモリがあれば、そこにRAMディスクを作りファイルを書き込んでいく方が遥かに実装が楽ちん!最終的にはイメージを書き込めば自動実行…なんて芸当も出来るかも知れない!

ディスクは「RAMディスクのみの運用とする」とした。

 

表示について、標準では26桁×4行しか表示が出来ない。BIOSを拡張して表示フォントを変えたり仮想画面を用意して80桁x24行を実現したりも楽しそう。

だが…果たしてPC-1600Kの画面でワードマスターやTurbo Pascalなどを動かしたい人がいるのだろうか(^^;; 動いたらこっけいで楽しそう…は同意するけど、そこに達するまでの労力がすごそうw 私としてはM80やBDS Cが走る方が興味ある!

表示についてはIOCSのサービスを利用して、当面は何も考えないでおこう。

画面は「26桁x4行の標準サイズのみをサポート」とする。

 

構想としてはこんな感じ(^-^)

これから少しずつ実装について書いていこうと思う。

 

今日のところはこのへんで!

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

HC-80のデモンストレーションプログラムを実行してみた!

今回はHC-88でデモンストレーションテープを実行してみた的なお話(^^)

 

f:id:PocketGriffon:20210420004358j:plain

ずっと手元にあったんだけど、思えば一度も実行したことがなかった。HC-88を手に入れた時はテープドライブが壊れていて、読み込ませる事が出来なかったので放置してたのだ。

一連の修理の流れでテープドライブを直す事が出来たけれども、通常運用でテープを活用する事が無かったので、すっかりデモテープの存在も忘れてしまっていた。

 

先日のHCシリーズを紹介するブログを書いた流れで、ようやく思い出した(^^;

まずは修理して以来使っていないテープドライブが動くのか…だ!←ここから?

 

f:id:PocketGriffon:20210420005230j:plain

……なんだろう、このロボットにでも乗り込んだ感は!?(^^;;;

コクピットで操縦でもしそうな感じがするw

そう思えばテープの穴が目に見えてきた!!(そろそろやめる…

 

先日HC-40用のドライブを修理した事で、すっかり忘れていた操作も思い出した!

まずはmountだ。テープドライブをmountすることでFAT部分メモリに読み込むようだ。そしてその後のアクセスはメモリを介してテープの位置を探る…みたい。頭いい!

f:id:PocketGriffon:20210420005606j:plain

どうやらテープには4つのプログラムが入ってる模様。DEFINE.BAS、JACK.BAS、BIO.BAS、TIME.BASだ。なんとなく中身が想像出来るけど…全部見てってみよう!

 

DEFINE.BAS

なんとなくCLOADってやりたくなるけど、ここはLOAD "H:DEFINE.BAS"だ。

テープドライブはHに割り当てられている。ファイルディスクリプタでH:を指定しつつ、ファイル名をつけてやれば、そこまで巻き戻し先送りして読み込んでくれる。テープカウントを気にしなくても良いのは本当に楽ちん。

ん?ということは、初めて使うテープはフォーマットする必要があるって事か…。まだ試したことがないので、いつかやってみよう。

HC-40のマニュアルを見たところ、DIRINITという操作が必要らしい。なるほど…。

 

で、無事にロードする事が出来た!LISTしたらちゃんと見れた。

私の中でのカセットテープの信頼度が爆上がりだ!(^^)

f:id:PocketGriffon:20210420011317j:plain

どうやらDEFINE.BASはキャラクタ定義をするプログラムらしい。デモというかツールというか。HCシリーズのBASICにはプログラマブルなPCG機能があるようなので、それを使うためものだろう。最初からメーカーがこういうツールを用意してくれるのはありがたい(^-^)

f:id:PocketGriffon:20210420012353j:plain

f:id:PocketGriffon:20210420012413j:plain

操作は当時らしいカーソルキーで移動、SPACEまたはRETURNでセットorリセットするみたい。うむむ…当時同じようなツールを何度も作ったことがあったけど、今使うと結構大変だ(^-^;;

 

JACK.BAS

名前から想像するにBLACK JACKというトランプゲームかなーと予想。

f:id:PocketGriffon:20210420012453j:plain

全然違ったー!(^-^;

カジノっぽいゲームらしい?

f:id:PocketGriffon:20210420012607j:plain

画面が2つに分かれて……2人対戦???

f:id:PocketGriffon:20210420012440j:plain

んーと……どうやら画面右にある図と同じになるように、ハノイの塔のような解き方をしていくモノらしい。ゲーム?パズル?しかも図を合わせても何も画面に変化なく、次の図が表示される…終わらないこれ(^^;;;

 

BIO.BAS

もうこれはバイオリズムで決定でしょ!(^-^)

結構長めのロードの後、タイトルが表示された。

f:id:PocketGriffon:20210420012912j:plain

f:id:PocketGriffon:20210420012943j:plain

「B.I.O.P.H.Y.T.H.M」と表示されて、それを横切るようにラインが引かれ始めた!

f:id:PocketGriffon:20210420013043j:plain

こうなって…もう1周回ってからでないと先に進まなかった!(^-^;

そして年号を昭和で入れろと出た!(^^;;;

今って昭和何年??(昭和94年らしい)

f:id:PocketGriffon:20210420013319j:plain

私の調子は要注意らしい!!

このバイオリズム、昔はほとんどのマシンでプログラムがあった気がする!(^^)

 

TIME.BAS

そして最後のTIME.BAS。世界時計でも表示してくれるのかも知れない!しかもアナログ時計で!

f:id:PocketGriffon:20210420013618j:plain

…テレビとラジオの番組予約…というか、備忘録的なメモツールらしい(^^;

入力したデータをテープまたはRAMディスクへ保存できるっぽい!便利なのか?便利なのかこれは??

今日の番組をぽちっと。

f:id:PocketGriffon:20210420013829j:plain

そうか、毎週予約したりするのを見られるって事なのかも!ちなみに私はテレビ録画したことがない…というか自宅にテレビがないので、そういう機能を使ったことない(^^;

おかげでプログラム出来るけど機械オンチだったりする。

f:id:PocketGriffon:20210420014017j:plain

この番組予約、かなり長いプログラムだった!

 

結局…デモテープというよりは実用プログラムが入ってたって事かも?

もっと店頭デモみたいのを期待してたんだけど、ちょっと違ったみたいだ!(^^;

 

テープはもう1本ある。

A面が「日本語外字定義プログラム」、B面が「タッチ16トレーニングプログラム」だ。

f:id:PocketGriffon:20210420014735j:plain

f:id:PocketGriffon:20210420014755j:plain

こちらは普通に想像が出来るので、まぁいいかなって気になってしまった(^^;

リクエストあれば試してみようと思う!

 

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

 

EPSON HCシリーズをまとめてご紹介!

ワケあって自宅を片付けている。大掃除というよりは大片付け(^^)

部屋の奥の方からいろんなものが発掘されているんだけど、HCシリーズが意外にも?たくさんあるなぁ…と思ったので、まとめてご紹介ブログにする!ネタが無いわけじゃ……な…いと思いたい(どっち

 

HC-20

f:id:PocketGriffon:20210418165557j:plain

雑誌で広告を見た時には「ビジネス機?」という印象しかなかった。その後、お店で実物を見てベーマガに載ってるソフトを見て、なるほどゲームでも使っていいのね…って感覚に変わった覚えがある。ただ、当時の感覚では高かった!安売りしてるFM-7やPC-8001mkIIよりも高かった印象。カセットとプリンターが付いてると言っても、とても手が出せなかった。

 

手元にあるHC-20は何年か前に手に入れたもの。なにげに電源を入れてみたら起動しない!なんと(TOT) ……と思ったけど、HC-20って電源繋げて少し内蔵バッテリーを充電してあげないと起動しないっぽい。また壊してしまったのかと焦ったw

f:id:PocketGriffon:20210418183235j:plain

CPUは6301で、私の中ではHC-88やJR-800でおなじみな気持ち。いつかプログラミングしてみたいと思ってる。でもそうなったら増設メモリ欲しくなっちゃうなー(-_-; そんなでっかいプログラムは組まないと分かっていても!

 

f:id:PocketGriffon:20210418170748j:plain

モニタへ出力する周辺機器もあるけど使ったことがない。そもそも映せるディスプレイを持っていない気がする(^^; HC-20が動くようになったら試してみたいと思う。

 

f:id:PocketGriffon:20210418220356j:plain

ロール紙は確か10箱くらいあった気がする…。インクリボンも大量にあった気がするけれども、まだ発掘されていない。見かけたらここに追加しようと思う(^-^)

 

f:id:PocketGriffon:20210418184127j:plainf:id:PocketGriffon:20210418184146j:plainf:id:PocketGriffon:20210418184207j:plainf:id:PocketGriffon:20210418220651j:plain

f:id:PocketGriffon:20210419224438j:plain

書籍はちょこちょこと集めてる。関連書籍を一箇所に集めてなかったので、何がどこにあるのやら状態(T-T) 整理整頓の流れで集めていこうと思う!

f:id:PocketGriffon:20210418184931j:plain

プログラミングするのなら↑この本がオススメ!マニュアルに書いてある事から書いてない事とか、モニタの使い方、マシン語の使い方などなど。ゲームプログラムなども載ってて情報量が半端ないです(^-^)

f:id:PocketGriffon:20210418215922j:plain

 

HC-40

f:id:PocketGriffon:20210418192916j:plain

f:id:PocketGriffon:20210418192951j:plain

お気に入りマシンのHC-40!

ラップトップマシンとしてはかなり素直な構成になっていてプログラミングがしやすい。根底にあるCP/M80というOS、その上に素直に載っているBASIC、メモリマッピングされているVRAM、バイナリファイルをロード可能などなど。きっとハード部隊とソフト部隊が連携して開発したんだろうなーと想像(^-^)

 

f:id:PocketGriffon:20210418194137j:plain

HC-40はマニュアルが充実してる!特にオペレーションマニュアルは技術資料としても役に立つほど(^-^) 昔のマニュアルって詳しかったんだなーって思う。

CP/Mの使い方も詳しく書かれているので、別途入門書を購入しなくてもOK!

 

f:id:PocketGriffon:20210418194324j:plain

……この本、ホントにHC-20の同タイトルと同じ筆者なんだろうか汗 単なるBASICマニュアルになっちゃってて残念です。表紙に印刷されてる情報が1番技術的という謎(^^;

f:id:PocketGriffon:20210418195025j:plain

↑HC-40の箱

EPSON HC-40 分解修理したよ! - レトロパソコンであそぼう!

HC-40のバッテリーを新品に! - レトロパソコンであそぼう!

HC-40にRS-232Cケーブルを繋げた! - レトロパソコンであそぼう!

HC-40でプログラム開発してみた! - レトロパソコンであそぼう!

HC-40でプログラム開発してみた その2 - レトロパソコンであそぼう!

HC-40でメモリダンプ! - レトロパソコンであそぼう!

HC-40でプログラム開発してみた その3 - レトロパソコンであそぼう!

HC-40に64KB RAMカートリッジを取り付けた! - レトロパソコンであそぼう!

 

HC-45

f:id:PocketGriffon:20210418195231j:plain

HC-40シリーズを使ってみたいと思ったら、ぜひHC-45をオススメしたい(^-^)

とっても使いやすいHC-40を、さらに進化させたのがHC-45なのだ。

良いとこ取りをしたマシンだと思ってもらったら大体あってる。

 

従来のメインメモリ64KBに加え、RAMディスク用のメモリが128KB載っている。単純に増えただけではあるけれども、CP/MのTPAが増えるメリットがある。

f:id:PocketGriffon:20210418201423j:plain

↑55.5K CP/M!これだけTPAがあれば動かないソフトはないだろう。

そして増設された128KBのディスクにM80/L80/DDT辺りを入れたら超便利!

HC-40でもRAMディスクのサイズを0にすればTPAは増えるけれど、RAMディスクが使えなくなってしまうのはイタイ!別途RAMカートリッジなどが無ければ辛いかも。

 

ちなみに技術資料は基本的にHC-40と同じものが使える。コレも嬉しい!

HCシリーズの中では一番のお気に入りマシンだ(^-^)

EPSON HC-45 (PX-4+) - レトロパソコンであそぼう!

EPSON HC-45(PX-4+) メンテナンス - レトロパソコンであそぼう!

f:id:PocketGriffon:20210418204010j:plain


HC-80/88

f:id:PocketGriffon:20210418204805j:plain

このブログではおなじみとなったHC-88。

液晶をPX-8と交換してしまったので「HC-88」とは印刷されていない(^^;

本来裏に日本語ユニットが付いていて、漢字ROMとか日本語変換をサポートする…のかな?実は漢字表示をほぼ使ったことがない(HC-88なのに!)

 

HC-80/88はメインCPUのZ80Aに加え、サブCPU(説明ではスレーブCPUとなっている)に6301が使われている。6301はHC-20でも使われているCPUで、HC-80/88ではZ80よりも低い動作周波数で動いてる。

そして…なぜか大量データを扱う画面制御が6301担当となっている…。そしてサブCPUにプログラムを送り込んで実行する事が出来るという……。なんとなくFP-1100を彷彿させるマシン構成だ(^^;

 

そんなアンバランス構成が妙に気に入って、ものすごく精力的にプログラミングしてた時期があったw

ここにリンク貼ろうと思ったけど、沢山ありすぎるので「HC-88」で検索してもらいたい!手探り状態から始まり、6301アセンブラを開発したりして、最終的にはサブCPUへプログラムを送り込んで実行までさせている。

HC-88メンテナンス その1 - レトロパソコンであそぼう!

HC-88でプログラミング! その1 - レトロパソコンであそぼう!

f:id:PocketGriffon:20210418225021j:plain

 

PX-8

f:id:PocketGriffon:20210418224128j:plain

海外版のHC-80だ。基本構成は同じだと思うけど、BASICのコマンドが一部違う。HC-80は(40もだけど)ROMカプセルという概念で本体裏側にROMを取り付けて拡張出来るようになっている。このおかげで本体を大きく変更しなくてもBASICの仕様を変更出来たりする。

 

液晶のパネルにHC-88と書いてあるが、これはパネルをHC-88と入れ替えてしまったため。とても紛らわしいのでいつかちゃんと直したい(^^;

 

キーボードがHC-88などとは違っていて、変換/無変換などのキーはない。かと言って完全な英語版というわけでも無く、アスタリスクの位置などは日本語キーボード仕様となっている。この辺りのこだわりがよくわからない…汗

f:id:PocketGriffon:20210418224652j:plain

FDD本体もあるけど、ものすごく重くて取り出す気力が無かったw

 

-----

 

これだけEPSON HCシリーズを所有しているコレクターはめったにいないだろう(^^;

そもそもなんでHC?って疑問には私にも答えられないw

マイナーダイスキーな心を揺さぶられているんだろうとは思うけれども。

言っとくけどPC-9801PC-8801も所有してるからね!メジャーもあるよ!!

 

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

SHARP PC-1600KでLCDを直接制御して描画!

先日「Bad Apple!!リベンジ版」を投稿した。

 

ポケコンの画面でBad Apple!!がリアルタイムで動くというのは結構な驚きだったようだ(^^) メモリの方はズルしちゃった感が強いけれども!!

 

そんな中、「PC-1600KでLCDCへのアクセス方法を知りたい」というお声があった。そういえば過去に調べてみたけど資料があんまりなく、独自でROMを解析したんだった。

ネットでも見たことが無かったので、資料として残そうというのが今回のブログ(^^)

私としては珍しくガチンコ技術ブログw

 

f:id:PocketGriffon:20210417121610j:plain

とりあえずテスト用の表示データを用意した。昔懐かしいフォントだ(^^;

Bad Apple!!での描画方法

当初、Bad Apple!!で画像データを表示する際、IOCSのサービス(LOADLCD:0160h)を利用していた。

呼び出し方としてはこんな感じ。

    LD  A,#ライン(0 - 3)

    LD  DE,#データが格納されたアドレス

    CALL 0160h

これで1行(縦8ドット)のグラフィックデータが表示される。

これを4回繰り返す事で画面全体が描画される仕組みだ。

 

このIOCSをコールすると、横のドットは無条件に画面全体(156ドット)を描画してしまう。Bad Apple!!では横64ドットしかデータがないけれども、残りの92ドットも表示されちゃうのだ!いくらなんでもコレはもったいない!ということで、直接LCDCをコントロール出来ないか…という理由でROMを解析した。

 

その時に調べてみたところ、どうやら左から64ドット単位で処理しているらしい…という事が分かった。64+64+28ドットという感じで3つの処理を行う。

Bad Apple!!では64ドットのみ表示されれば良いので、じゃあということで画面中央に表示していた画像を左側に寄せて、64ドットの処理1回で表示出来るようにして解決した。

 

その後、PC-E500系のLCD描画を調べている時に「PC-E500活用研究(工学社)」を見てみたら、とても見覚えのある数値が出てきて、あれ??これってPC-1600Kと同じなのでは…となった。実際に調べてみたところ、まるっきり同じだった!(^^;; なんてこったぃ!

というわけで、今回はPC-E500の資料も活用していきたい。

 

PC-E500系のLCDコントローラ

PC-E500系のポケコンでは液晶の表示にHITACHI HD61202というチップが使われている。

f:id:PocketGriffon:20210417123404j:plain

たまたま分解したままのPC-E550が手元にあったので、写真をパチリ(たまたま?)

ここまでわかれば、あとはネットでデータシートを探せば良い。

Hitachi HD61202 Datasheet

英語に抵抗ある場合は、工学社から発売されていたPC-E500活用研究という書籍の208ページに、かいつまんだ情報が載っているので、そちらを参照してもらうのが良いと思う。

f:id:PocketGriffon:20210417123844j:plain

気になって調べてみたら「PC-E500/PC-1480U活用研究」でも「PC-E550/PC-1490UII活用研究」でも「PC-E650/PC-U6000活用研究」でも208ページだったw 中身ほぼ一緒!この活用研究、3冊ホントに必要だったのかな…汗

 

ここに書かれている「アクセス・アドレス」はPC-E500用なので、PC-1600K用に置き換える必要がある。コントローラ1は54h、コントローラ2は58hだ。

注意したいのは、XアドレスYアドレスという呼び方。画面のXYドットなどとは違い、あくまでもLCDコントローラでの呼称だ。しかもなんとなくXとYが逆なので頭を切り替える必要がある。私はこの手の資料を見ずに解析していたので意識していなかったが、資料を見てからの方がこんがらがった(^^;;

f:id:PocketGriffon:20210417125021j:plain

コントローラ1のX=0〜3が画面左の64ドットだ。1バイト8ドット構成なので、0=0..7ドット、1=8..15ドット、2=16..23ドット、3=24..31ドット。

X=4以降は画面右の28ドットをアクセスする際に使う。ちょっと分かりづらい。

 

アクセスの手順としては以下な感じ。

    Xアドレスを設定

    Yアドレスを設定

    表示データを出力

LCDコントローラへアクセスする際には、LCDが処理中かどうかを判定する必要がある。処理中に書き込みを行った場合は、そのデータは無視されるようだ。

これを素直にプログラムするとこんな感じ。

f:id:PocketGriffon:20210417130115j:plain

実際のデータ出力は「outi」という命令で行っている。

今気がついたが、私はLCDコントローラを0と1で管理していた。LCDC1となっているところはコントローラ2として読んで欲しい(紛らわしい…)

このプログラムで画面左側に64x32ドットの画像データが表示される。実際にBad Apple!!で使っているプログラムそのままだ。データのアドレスは$xx00にアライメントされてる必要がある。

 

このLCDコントローラは縦方向へのスクロール機能がある。「表示開始ライン」というデータを設定してやる事でドット単位にスクロール出来るらしい。今回のBad Apple!!では使っていない。むしろBASIC側でこの機能を使っているので、辻褄を合わせてやらないといけない。F05Chというワークは現在のスクロール値を保存している。ここを参照してXアドレスの値を調整している。

 

中央の64ドットを表示するためにはLCDコントローラ1をアクセスするが、プログラムはほぼ一緒だ。

そして右側28ドットはLCDコントローラ2のXアドレスを4〜7に設定してやれば良い。

 

速度比較!

やっぱり作ったものの速度比較は欠かせないと思う!(^-^)

プログラムの最適化、高速化はプログラムしている上でとても楽しい!

画面全体を1000回表示した時の速度を表示してみることにした。カウンタは1/64秒に1ずつ数字があがっていくので、表示された数値を64で割れば秒数が出る。

 

まず、IOCSで表示した場合の速度を測ってみた。

f:id:PocketGriffon:20210417132043j:plain

表示されてるのは10進数だ(^^;;

1000回表示するのに1988と出たので掛かった処理は31.0625秒、秒間31.62回表示出来た。

秒間30回と言えば遅くはないけども…って事になるが、秒間30回の書き換えをしたかったBad Apple!!では表示だけでこれだけ処理が掛かるのは、やはりアウトだった(^^;;

IOCS = 1988 [31.0625秒:31.62回/秒]

 

それでは直接LCDコントローラを制御して表示する方法の速度を測ってみよう。

f:id:PocketGriffon:20210417132727j:plain

おお!どどーんと速くなった!時間は19.78125秒、秒間50.55回の表示が出来るようになった。IOCSに比べて倍とは言わないけれども約7割弱の高速化。

実際にゲームなどに使う場合は、画面全体でなくて2/3くらいをゲーム画面にしたらもう少し快適化できそう!

直アクセス = 1266[19.78125秒:50.55回/秒]

 

さらなる高速化は可能?

さて…ブログとしてはここで終わってしまっても良いかなーと思ったんだけど、どーしても気になる事があったので追加で実験してみた!(^^;;

プログラマたるもの、疑問を残してはいかんのだ!(変なフラグ立てたらダメ)

 

もう一度、PC-E500活用研究の表を見てみよう。

f:id:PocketGriffon:20210417133420j:plain

一番右側に「同時アクセス」という項目がある。同時アクセス…気になるよね!(^^;

これはおそらく画面クリアなどを高速に行うためにあるモードなんだと思う。00で埋めるとかFFで埋めるとか、同じデータを両コントローラへ書き込む時に使ったら便利!

 

これと……さっきのプログラムでLCDコントローラがBUSYの間待つってコード……気にならない?? データを書き込むと、次のデータを書き込めるようになるまで、だいたい40サイクルほど待たねばならないようだ。1ループに40サイクル…ちょっと無駄に思える。

LCDコントローラが2つあるのだったら、交互に書き込んでやったらどうなるんだろ??

 

しかしデータを書き込むためのレジスタロードなどに時間がかかってしまったら本末転倒。プログラムは結構複雑になる??そんな風に思っていたが…ピンと来るものがあった!

制御すべきLCDコントローラは2つ、そしてZ80も裏と表のレジスタが2セット!

おお、これでプログラムの方針は決まった!(^^)

 

以下、作ってみたプログラム。

表と裏のレジスタが頻繁に入れ替わるので相当こんがらがるw

f:id:PocketGriffon:20210417142158j:plain
XYアドレスへ出力するのは2つのコントローラへ同時アクセスしている。

Yアドレス出力後にBUSY信号をチェックせねばXアドレス出力がうまくいかなかった。

 

そしてデータの出力はnopを並べる事でBUSY信号のチェックをパスした。手元にあるPC-1600Kではちゃんと動いたが、マシンごとの個体差が無いとは限らないのでギリギリの設計はダメ。ギリギリを見定めた上で、nopをもう1つずつ入れると良いかも知れない(^-^)

 

このプログラムで左64ドットと中央64ドットは描画出来るが、右側の28ドットは表示されない。そこは前に使っていたプログラムをそのまま呼び出す事にした。

デバッグをしてちゃんと動くようになったところで、お楽しみの速度を測ってみよう!

 

f:id:PocketGriffon:20210417142826j:plain

!!!!すごい!倍以上速くなった!!(^O^)

時間は9.71875秒、秒間102.89回の表示が出来るようになった。IOCSに比べたら3倍以上の高速化となった。

LCDC交互アクセス = 622[9.1875秒:102.89回/秒]

 

正直言えば、ここまで速くなるとは思っていなかった。おそらくLCDC同時&交互アクセスなどはPC-E500シリーズでは定石的なテクニックなんだろうけれども、今回改めてやってみた事で優位性は証明できた気がする(^^)

あ、いや待て。Z80は裏レジスタがあるからここまで高速化出来たワケなので、PC-E500などではあんまり有用ではないのかも??うーむ、調べたくなってきてしまう…滝汗

 

いろんな思いを残しつつ、今回はここまで!(^^;

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

PC-1600KでBad Apple!! リベンジ編

今年の2月にPC-1600KでBad Apple!!を表示するプログラムを作った。

 「せっかくPC-1600Kに32KBの増設メモリを2つ取り付けているのに、それを有効活用出来ていないなぁ…」と思ったので、メモリを使い切る事を目的とした実験だった。当初の目的は達成出来たのだが、画像データを強めに圧縮したため表示速度が出ないという残念な結果に終わっていた。

 

その後、表示を高速化をするブログを書いている。データ構造を変える事はせず、ソフトウェア側でどこまで高速化が出来るかという、これまた実験だった。
その結果、やはり不満が残る結果に…。

 

 

速度が出ていない事もそうなんだけど、一番気になっていたのはBad Apple!!が最後まで見られないのだ。
Bad Apple!!は約219秒のアニメーションで、秒間30枚の絵で出来ており総数は6566枚ある。

 

PC-1600Kという限られたメモリ容量しかないマシンで、この枚数すべてをオンメモリに載せるなんて不可能!(T-T)

 

それでも頑張ってデータを圧縮して、前回の実験では1086枚の絵をメモリに載せていた。
64KBに1086枚入ってるのを多いと思うか、少ないと思うかは人によって差があると思うけど、自分的にはそれなりに入っていたと思ってる(^^)

 

単純計算をすれば、384KBのメモリがあれば全てのデータを入れられるかも知れない。
データは入るかも知れないけど、速度はあのままだ。
どうしたらPC-1600Kで1/30秒の表示をしつつBad Apple!!を完璧に再生できるんだろうか…。
メモリが……メモリが欲しい!!!


増設メモリを作ってしまえ!!

そんな切実な思いを伝えたかどうかは覚えてないが、何ヶ月か前からハードが得意な知人に「PC-1600Kの増設メモリって作れない?」というお声がけをしていた。お声がけというか、本体と増設メモリと資料をセットにして押し付けたww

 

その知人からプロトタイプが出来上がったと連絡があり、先日そのメモリを受け取った。
これがそのメモリだ!!本邦初公開!!

f:id:PocketGriffon:20210416004047j:plain

f:id:PocketGriffon:20210416004111j:plain

容量は1MB、つまり1024KBもある。
ポケコンに1MBという容量が必要なのか…と、さすがの私も思うw
メモリモジュールにはCE-1600M同様にバッテリーでのバックアップ機能がある。一度書き込んだデータは意図的に消さない限りは残っていてくれる。

 

f:id:PocketGriffon:20210416004234j:plain

こんな感じにS2スロットに取り付けて使う。

 

知人曰く「しまったー!本体に取り付けたまま電池の交換が出来ない!」と言ってたので、もしかしたら改善されるのかも知れない(されないのかも知れないw)。

 

勘違いされるとイケナイので書いておくと、メインメモリとして拡張されるサイズはCE-1600Mと変わらず最大で32KBだ。それ以外のメモリは基本的にRAMファイルとして使う。

 

PC-1600Kは元々256KBまでのメモリならば標準のROMでフォーマット(INIT)出来る。それを超える場合には独自でフォーマットプログラムを作らねばならない。

知人にハードを作ってくれとお願いした手前、このプログラムは私が書いた。

f:id:PocketGriffon:20210416004654j:plain

DSKF "S2:"すると、冗談のような数字が表示される!

 

Bad Apple!!の再検討!

大容量メモリは手に入った!これでようやくBad Apple!!のリベンジができそうだ。

どうせイチからすべて作り直すことになるんだから、データフォーマットも都合の良い形式に変えてしまおう。目指すべきは「高速表示」だ。この目的のためにメモリを使う!

 

まず、無圧縮ですべてのデータが入るかを検討してみた。

PC-1600Kでの表示は64x32ドットにしよう…と前回の実験で決めていた。これはPC-1600Kでは程よいサイズという事もあるが、このマシンが高速に描画するのに都合が良いサイズでもあるのだ。今回もこのサイズは崩さないようにする。

 

1バイトが8ドット構成のマシンなので、データサイズとしては1枚の絵(64x32ドット)で256バイト。絵は6566枚あるので単純計算だと1.6MBの容量が必要になる。1MBでも収まらないなんて……Bad Apple!!恐るべし!!(^^;;

 

この手の画像データはランレングス圧縮すると圧縮率が良くなる事は分かっている。分かっているがドット単位の展開では処理時間が掛かるのは、前回の実験で証明されている。

 

今回はデータの最小単位をドットではなく、バイト単位でデータを小さくするアプローチにした。

 

256バイトのデータの中に、00とFFのどっちが多いかを調べる、それを基準の色としバッファをクリア。さらに基準の色が00だった場合はFFを、FFの場合は00がいくつあるのかを調べて、そのオフセット(バイトの位置)をデータとして並べる、最後に00でもFFでもないデータをオフセット+データとして並べる。

 

言ってる事が良くわからん…と思うけど、運が良ければデータは小さくなり、複雑な絵はむしろ大きくなるフォーマットだ。そこで元の256バイトよりも大きくなる場合には「無圧縮」という選択をいれた。最大で256バイト、基本はそれ以下というデータとなる。

このフォーマットの利点はデータの復元が高速な点だ。1/30秒での表示をするためには展開速度の高速化は優先度が高い。

 

この方式に基づいてデータを加工してみたところ、6566枚の画像データが約884KBに収まる事が分かった。ここでようやく付加データも含めて1024KBに収まりそうな目処がたった。

 

表示プログラムはアセンブラ化!

前回の実験では描画処理をC言語で書いていた。ドット単位で展開処理を書く必要があったため、プログラムがある程度複雑だったこと、出力されるアセンブラコードを見て「これ以上速くするのは簡単じゃない」というところまで突き詰める事が出来たため、それ以上触らなかった。

 

今回は前回以上のガチンコ勝負なので、最初からアセンブラで書く事を意識したデータ形式にした。おかげでプログラムをすっきり書くことが出来た。バッファのクリアなどはPUSHを並べるなどZ80っぽい高速化を楽しみながらのご実装をした(^^)

 

前回は省メモリ化のためデータの途中でバンクを跨ぐ事を許容したコードを書いていたが、今回はそこも廃止し、1つの絵を表示するデータはメモリバンクを跨がない保証をデータ側でした。おかげでメモリアクセスもすっきりし、非常に高速にアクセス出来るようになった。

 

巨大データをモジュールへ転送!

さて……おそらく今回一番の問題はココ!

さっき全部のデータで884KBと書いたが、この巨大なデータをどのようにしてメモリモジュールへ転送したら良いのか…。

 

PC-1600KはBLOAD命令でバイナリのデータも読み込むことが出来る。マシン語のデータなどはBLOADで読み込むようにしてて、とっても便利だ。

 

このBLOADで読み込めるバイナリデータにはバンク情報が含まれるのだが、実は今回のケースではこの情報だけでは足りないのである。

 

PC-1600Kのメモリバンクは、横方向へ伸びるバンクメモリと、それとは別に縦方向に伸びるバンクメモリが存在する。通常、PC-1600Kで「バンク」と言えば横方向を指していて、BLOADにはこの「横バンク」の情報が入っている。

 

今回のメモリモジュールは「縦方向」のバンク情報を操作する事でメモリアクセスをする仕組みだ。BLOADで対応出来ないのはそういった事情による。

 

f:id:PocketGriffon:20210416012815j:plain

無いものは作りゃいい!の精神で、縦方向のバンクにも対応したダウンローダーを作った!(^^; 以前、高速バイナリローダーを作ろうとした時に色々と調べてあったので、ワリとあっさり作ることが出来た。

 

RS-232C経由で専用のバイナリを送り込めば、自動的にバンクメモリに書き込んでくれる。

 横方向のバンクにも対応出来ているので、BLOADの代わりに使う事が出来る汎用ツールだ。

 

大雑把にはこんな↓感じでデータをダウンロードした。

 

6566枚のデータを圧縮、順番に並べて1バンクのサイズ(16384バイト)に収まるように1つのファイルとする。こうして並べていくと全部で56(1MBは64バンクある)のファイルになった。これらのファイルの先頭にバンク情報などを書き込んでやり、最終的には1つの巨大なファイルとした。

 

この巨大データを専用ダウンローダーでダウンロードしつつメモリへ書き込む。RS-232C経由ということもあるが、884KBのデータを転送しつつ書き込みつつ…をして約33分掛かった!

でも33分で面倒なデータを書いてくれるんだったら万々歳だ!

------

 

 

やっとPC-1600Kで満足が出来るBad Apple!!を作ることが出来た。

オリジナルとは白と黒が反転してるなど気になるところはあるけれども、次のチャンスがあったら修正したいと思う。次があるのかな?あるのかもねー汗

 

ちなみに今回使った1MBの増設メモリだが、あくまでもテスト版でありプロトタイプだ。

今後どのような展開になっていくのかは知人のみが知る…って感じだ!(^^;;

 

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

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

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

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

 

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