HC-88でプログラミング! その11

通信アダプタの改良

以前から「Mac→HC-88」の通信はうまく行くのだが、その逆の「HC-88→Mac」への通信がうまく行ってなかった。片方向だけうまく行くなんて…そういえば過去に経験があったな…と思い、調べてみると、どうやらプルダウン抵抗というのを取り付けないとうまく転送が出来ない事があるらしい、という事を知った。

 

まず、普段シャープのポケコンで使ってる通信アダプタはこちら↓

f:id:PocketGriffon:20201101101435j:plainf:id:PocketGriffon:20201101101501j:plain

これはネットにあった情報を元に、秋月電子で材料を買い揃えて同じモノを作った。

ポケコン用USB通信ケーブルを作ろう!

この通信アダプタのおかげでレトロマシンとの9600bpsで接続ができ、開発環境が劇的に変化した。これが無かったらレトロマシンにここまでどっぷりとハマらなかっただろう(^^)

 

長らくコレを愛用していたのだが、HC-40での通信をするようになってカタチ的にハマらなくなってしまった。仕方なく、全く同じ機能だけどカタチが違うものを別途用意した。

f:id:PocketGriffon:20201101102012j:plain

不格好ではあるものの、目的は達成出来るって事で問題なく使っていた。

HC-40では送信も受信も問題なく出来ていたのだ。

 

それが…なぜかHC-88では受信出来るものの送信が出来ないという事態に陥っていた。

↑のリンク先のページに「場合によっては上記以外のTXDやRTSも含め4つ全ての端子をプルダウンするとさらに安定性が増すかも」と書かれていたため、じゃあ…って事で作ったのがこちら↓

f:id:PocketGriffon:20201101102741j:plain

さらに抵抗が増えて攻撃力が増した!!

でも…これでもうまくアップロードが出来ないのだ。

作ったプログラムをダウンロードする分には、HC-88側で受信さえ出来ればいいや…と思い、この問題は後回しにしていた。

 

しかしここにきて、どうしてもメインCPU(Z80)側のプログラムを解析しないといけなくなってきた…。

そのためにはどうしてもメモリの内容を解析せねばならない。でもその肝心のメモリ内容がアップロード出来ないのだ!

前回6301のROMを吸い出したように手作業で移すか…64KBを??

いや現実的じゃない…。打ち込んだバイト数分だけ寿命が縮まるw

 

追い詰められた状況になったので、ようやく重い腰を上げて問題に取り組んでみた!

そもそもプルダウン抵抗ってのが何故必要なのか…すら理解していないので、回路図見たって解決が出来るわけがない(T-T)

…と思い、ふと裏側を見ると…

f:id:PocketGriffon:20201101103235j:plain

本来、抵抗はRXD側に付くものらしいんだけど…どうせ線は繋がってるんだから同じでしょ?という解釈でGND側に付けていた。でももしかしたらこれがダメなのかも…???

気になることは1つずつ潰していこう。

そうして修正したのがコチラ↓

f:id:PocketGriffon:20201101103644j:plainf:id:PocketGriffon:20201101103704j:plain

戦闘力には代わりはないが、抵抗を取り付けてる場所が変わった!

こんなんで効果あったりするのかなぁ……

なんて半信半疑に思いながらアップロードのテストをしたら……

動いた!!!

え?やっぱりGNDに抵抗はダメだったのね??

えー…でもソレって、実はHC-40の通信アダプタの時代から間違ってたww

HC-40で問題なく通信出来てたのは、偶然だった…のか(T-T)

そこはかとない敗北感を味わったよ…orz

 

メモリの内容をアップロードする

よし、これでHC-88のZ80側のメモリ内容をホストへ送る事が出来るようになった!

メモリの内容をテキストに変換して、それをホストへ送る。

f:id:PocketGriffon:20201101104054j:plain

通信落ちを考慮してアドレス+バイナリにしたよ!でもチェックサムないから同じか汗

これを元に戻すプログラムを作って…

f:id:PocketGriffon:20201101104203j:plain

はい、元に戻った〜(^-^)

よーし、ここから必要な箇所を追い掛けていくぞ!

 

バンク切り替えへの道

ところが…解析し始めてすぐに気が付いたんだけど、メモリのトンデモナイ場所へジャンプするコードがたくさん見つかる…。これは……アップロードしたメモリ内容が間違っているのか、通信に失敗してるのか、変換(または逆変換)にミスってるのか…。

可能性がたくさんありすぎて絞りきれない(T-T)

一晩考えて、プログラムを追ってみてようやく分かった事。

あ、これはメモリのバンク切り替えがありそう

ROMカプセルからBASICプログラムをTPAへロードしているという固定概念があったので、別のバンクへ飛ぶなんて事が考慮外になってた!!

 

バンク切り替えか…メモリマップさっぱりわかんないや(T-T)

これはこれで困ったけれども、どうやらバンクを切り替える方法はうっすら分かってきた!

で、即席でハンドアセンブルしたのがこちらw

f:id:PocketGriffon:20201101104648j:plain

Z80ならばアセンブラもあるから別にハンドアセンブルしなくてもいーじゃん…と思うでしょうけれども、Z80は脳内でバイナリ変換が出来るので、短いプログラムならばハンドアセンブルどこか脳内アセンブルでも作れる。このくらいの長さならぜーんぜん平気(^^;

 

これをBASICに埋め込む。

f:id:PocketGriffon:20201101104826j:plain

よーし、これでバンク切り替えした先のメモリが読めるようになったはずだ!

 

ちなみに転送時間はとっても掛かる。32KBの転送するのにだいたい30分掛かる。64KBで1時間だ。気長に別のプログラムでも組みながら待つことにしようw

 

とりあえずここまで作業が進んだよの報告的ブログでした!

次回から解析していくよ!ちょろっとだけだけど!(^^;;

 

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