
最近、マイコンのプログラミングをはじめたのですが、相手方の技術者が主張するバンク切り替え方法が腑に落ちないので、この投稿で質問します。
問題はバンク切替えの方法で、CPUは日立64180です。
メモリーの構成は次のようになっています。
┌──┐
│ │主プログラム
│ │のメモリー
│ │
└──┘
┌──┐┌──┐
│BANK││BANK│切替プログラム
│ 0 ││ 1 │のメモリー
│ ││ │
└──┘└──┘
この構成にを前にして、相手側技術者の主張は、次のようなものでした。
BANK-0 BANK-1
┌────┐┌────┐
│ │ ││ │
│ │ ││ │切替プログラム
│切替命令││ │ のメモリー
│ └──┼┼─┐ │
│ ││ ↓ │
│ ││ │
└────┘└────┘
BANK-0のプログラムでBANK-1に切り替える命令を発行すると、直ちにBANK-1に切替わり、BANK-1の同じアドレスの次アドレスからプログラムが続行するというのです。
これだと、BANK-0,BANK-1の先頭番地からプログラムを実行させる方法が思いつきません。
私の考えは、主プログラム側で予め必要なバンクに切替えておき、切替えたバンクの先頭番地に制御を移せば済むと思うのですが、どうなのでしょう?
日立64180アーキテクチャに詳しくないので、反証すらできません。経験された方に確実な回答をお願いする次第です。
No.3ベストアンサー
- 回答日時:
バンク切り替えの方法としてHD64180のMMUを使用しているものと仮定すると、HD64180R/Zのデータシートを読んだところでは、仕様上の問題はないようです。
データシートにはこうあります。
"7.8 MMU Register Access Timing"
"When data is written into CBAR, CBR, or BBR, the value will be effective from the cycle immediately following the I/O write cycle which updates these registers."
"Observe that the next cycle following MMU register programming will normally be an opcode fetch from the newly translated address."
ですので、「私が調べたデータシート」に記載の仕様の上では、相手側技術者の主張は正しいようです。
#注意:たまたま私が調べたデータシートでは上記のとおりでしたが、HD64180にはバリエーションチップがたくさんあり、そのすべてがMMUに関して同一仕様とは限りません。
仕様の上で制限されていないからといって、それを行うべきかどうかはまた別問題です。たまたまそのCPUが「私がデータシートを調べたのと同じCPU」であれば大丈夫ですが、プリフェッチを行うCPUだった場合にはそのようなプログラムの構造ですとちゃんと動きません。
そのような、仕様の細かいところまで確認しなければ動作に確証がもてないようなプログラムを作ることは、好まくないプログラミング手法と呼ばざるを得ません。どうしてもそれ以外の方法がないのであれば仕方がないですが(そういう場合も稀にあります)、他の「安全な方法」があるのにわざわざ危険を冒すのは〇〇(ここに書くと発言を削除されてしまうような不穏当な文言だと思ってください)のすることだと、個人的には思います。
回答ありがとうございます。
MMUはHD64180Z/HD64180R1ですが、全部を読んでいる時間がないのです。
"…an opcode fetch from the newly translated address."
の部分で納得できました。
小さなBIOS+Scheduler部分は2KB程度に納まる予定で、これを二つのBANKの末尾に配置することにします。
回答が増えないのでここで締め切りとしますが、お二方にしか配点できません。AsanoNagiさん、すみません。
No.2
- 回答日時:
確か、HD64180は、Z80の拡張マイコンだったと思います。
もし違っていたら、私の回答は間違っていますので無視してください。
BANKを切り替えてもPCの値が変化しなければ、アドレスはそのまま続いていきます。
例えば、PC=0x2010の時、BANK切り替えの命令を実行するとPC=0x2012(バンク切り替え命令の命令長が2バイトの場合)となり、BANKが切り替えられます。
したがって、BANK切り替え命令を実行しただけでは、BANKが切り替わり、命令のアドレス(=PCの値)はBANK切り替え命令の次のアドレスになります。
それを避けて、BANK1にBANKを切り替えた時にBANK1の先頭からプログラムを実行したい時には、
1. BANK1にBANK切り替えしたい時に、特定のアドレスにJMPする。
2. そのアドレスでBANK1にBANKを切り替える。
3. BANK1のそのアドレスにJMP 0x0000を書いておく。
と言うことになるでしょうか。このような命令は、プログラムエリア(=ROMエリア)の末尾に書いておけばいいのではないでしょうか。
確かに機種はHD64180です。
bloomers_daisukiさんの方法は、BANK-0とBANK-1の末尾に同じプログラムを置く方法ですね。そうすると、切り替え後に何らかの作業をしてから0000H番地へ飛ぶように仕組んでおけばいいということになりそうですね。
No.1さんへのお礼も参考にして下さい。

No.1
- 回答日時:
64180 に詳しいわけではありませんが、一般的には、「バンクメモリの中ではバンクを切り替えない」のが基本ですね。
ただ、質問の内容では、あたかも、プログラムの実行中に無秩序にバンクが切り替わるような印象ですが、一定の番地にバンク切り替えのメカニズムに相当するプログラムがあるのなら、それもありかなと思います。
通常は、バンク+飛び先を、パラメータとして受け取るようなロジックを、主プログラム側で持つでしょうけど。
バンク側でバンクを切り替えると、バンク相互の位置関係という、本来考える必要のない事項を管理する必要があるので、普通は、バンク中でバンク切り替えはしませんね。
早速のご回答、ありがとうございます!
私としては、小規模のBIOSを考えていて、これに簡単なタスクスケジューラ機能を付加したかったわけで、その管理をAsanoNagiのおっしゃるとおりの姿でやりたかったのです。
やはり、バンク中でのバンク切り替えでは、複雑になるのですね!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 The modern history of credit cards goes back to th 3 2022/07/16 00:11
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- FX・外国為替取引 カナダドル、アメリカの銀行口座で受け取るのがいいか、日本の銀行口座で受け取るのがいいか? 2 2022/09/08 17:23
- 格安スマホ・SIMフリースマホ II jmio 開通 4 2023/02/26 01:07
- マウス・キーボード ロジクールマウス m575を2台以上で使用する方法 m575はUSBレシーバとBluetooth接続 2 2023/07/11 15:33
- 楽器・演奏 切替太郎というスイッチャーのプログラムの作り方わかる方いたら教えてください。 HPにも、記載はなく、 1 2022/05/15 15:45
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Y!mobile(ワイモバイル) スマートフォンの契約についての相談 7 2023/03/02 08:53
- 仕事術・業務効率化 頭の切り替えができない 1 2023/03/01 20:50
- Chrome(クローム) google(https://www.google.co.jp/)をgoogle chromeに切り 1 2023/02/23 15:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
読み込み中にアクセス違反が発...
-
powered byの表記について
-
VBAを使って、pdfを関連付けら...
-
Excelで4096点以上のFFTの方法
-
VB.NETで、プログラム上から新...
-
PICマイコンのコピー(クローン...
-
XnViewにwebpを「いつも開く」...
-
pickit3 トラブル
-
VB6 SP4のラインタイムを探して...
-
写真のプログラムは、1からnま...
-
VBAにてメール作成した際、一部...
-
未使用の変数を一括検索する方法
-
クリックするとページ内で説明...
-
長距離・マラソンをやりながら...
-
excelのexe化について
-
エクセルVBA 検索時に除外を設...
-
docomoのスマホおかえしプログ...
-
exeファイルしかないプログラム...
-
OS入ってる機器のソフト・アプ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
OS入ってる機器のソフト・アプ...
-
VBAにてメール作成した際、一部...
-
読み込み中にアクセス違反が発...
-
Excelで4096点以上のFFTの方法
-
XnViewにwebpを「いつも開く」...
-
ドロップダウンリストの文字を...
-
PICマイコンのコピー(クローン...
-
「Outlookが他のプログラムによ...
-
Vba UserFormを前面に出す方法...
-
VBAでユーザーフォームが自動的...
-
未使用の変数を一括検索する方法
-
UWSCで指定のフォルダを開きたい。
-
Excelに埋め込んだVBAのプログ...
-
自動クエリとはどういうもので...
-
モジュール、アプリケーション...
-
画像を読み込むのと取り込むの...
-
main関数を先頭に置くデメリット
-
エクセルVBA 検索時に除外を設...
-
WORD印刷できるがEXCE...
おすすめ情報