Manuke Station BBS

RSS
投稿者 題名 内容 URL

ROM吸い出し

投稿者: Manuke 投稿日:
To PC88さん
> 本日、ご指導いただいたとおり、アセンブラを使用して、初代88実機よりROMの吸い
> 出しに成功いたしました。

上手くいきましたか。おめでとうございます。
こちらでも入手できましたら、無印も対応にチャレンジしてみますね。

(無題)

投稿者: PC88 投稿日:
本日、ご指導いただいたとおり、アセンブラを使用して、初代88実機よりROMの吸い出しに成功いたしました。
的確でわかりやすいご指導、ありがとうございます。
今後もX88000の応援をしていきます。

Z80アセンブラ

投稿者: Manuke 投稿日:
To PC88さん
> 本当に感謝してます。詳しい解説ありがとうございます。ちなみに、教えていただい
> たコードはアセンブラで入力するのでしょうか?

アセンブリ言語ですから、テキストエディタなどで入力し、アセンブラで機械語へ翻訳
するという形ですね。

> アセンブラはさすがに持っていないので、機械語で入力することはできるのでしょう
> か?

人間の手で機械語へ翻訳するということでしたら、もちろんできます。(ハンド・アセ
ンブル)
その場合には、例えば本家ザイログにあるZ80マニュアルとか、Web上にあるニーモニッ
ク表を参照してください。

http://www.zilog.com/docs/z80/um0080.pdf

もっとも、PC-8801上ではなくWindows上で動作するZ80アセンブラならフリーで入手可能
ですから、Windows側でアセンブルし、PC-8801側へ機械語を転送なり手入力なりするの
が楽だと思いますよ。
例えば、Vectorにもいくつか置かれているようです。
(私は使用していないので、使い勝手は不明ですけど)

http://www.vector.co.jp/vpack/filearea/win/prog/asm/z80/

(無題)

投稿者: PC88 投稿日:
アセンブラはさすがに持っていないので、機械語で入力することはできるのでしょうか?

(無題)

投稿者: PC88 投稿日:
本当に感謝してます。詳しい解説ありがとうございます。ちなみに、教えていただいたコードはアセンブラで入力するのでしょうか?

4th ROMからの転送

投稿者: Manuke 投稿日:
To PC88さん
> わざわざ詳しい解説までありがとうございます。
> 本当に無知の自分を痛感しています。そこで、恥を忍んで教えていただきたいのですが、
> 4thROMの内容を別のアドレスに移動させたい場合はどうしたらよろしいのでしょうか?

処理内容にもよるかと思いますが、基本はメモリ間のコピーでしょうね。
BASICからもアクセス可能な領域へコピーしてしまえば、後の処理が楽になります。

例えば、BASIC側であらかじめCLEAR文でメモリを確保し、0C000H~0DFFFHがワークエリ
アとして利用可能だとします。(TransRomはここを使用)
この場合、先ほどのコードに挿入するなら、

        PUSH    BC              ; Bレジスタ(71H)をスタックへ待避
        LD      HL, 6000H       ; 4th ROM先頭メモリアドレス
        LD      DE, 0C000H      ; ワークエリアメモリアドレス
        LD      BC, 2000H       ; 転送バイト数
        LDIR                    ; 一括コピー
        POP     BC              ; Bレジスタをスタックから復帰

と実行すれば、6000H~7FFFHの内容が0C000H~0DFFFHへコピーされます。
この領域ならば、BASICのPEEK関数でも読み出し可能です。

(無題)

投稿者: PC88 投稿日:
わざわざ詳しい解説までありがとうございます。
本当に無知の自分を痛感しています。そこで、恥を忍んで教えていただきたいのですが、4thROMの内容を別のアドレスに移動させたい場合はどうしたらよろしいのでしょうか?

4th ROMアクセス

投稿者: Manuke 投稿日:
4th ROMアクセス


To PC88さん
> 今、頑張って、自力でROMの吸い出しに挑戦をしています。
> ところで、4th ROMの吸い出しを行うのにバンク切り替えが必要であるとのことなので
> すが、バンク切り替えはどのようにすればよいのでしょうか?

4th ROM 1のアクセスは、I/Oポート71Hへ0FEHを出力するだけです。
ポートへ0FEHを出力した瞬間に、メモリアドレス6000H~7FFFHの範囲が4th ROMのものへ
と切り替わります。
(SR以降の機種では、標準4th ROMが4つ搭載されていますので更にバンク切り替えの指
定も必要になりますが、無印/mkIIでは関係なし)

ただ、ROMのバンク切り替えはBASICからは行えませんので、基本的に機械語でコードを
記述する必要があります。
また、切り替え中は割り込みが発生しないよう割り込み禁止をかけておくこと、アクセ
スが終了した後はバンク切り替えを元に戻すことにご注意ください。

ざっと書いてしまうと、こんな感じです。
(Z80ザイログ表記。ちゃんと実行を確認してません)

        DI                ; 割り込み禁止
        IN      A, (71H)  ; 現在の71Hの値を取得
        LD      B, A      ; Bレジスタへ保管
        LD      A, 0FEH   ; 4th ROM 1切り替え値をセット
        OUT     (71H), A  ; 4th ROM 1へバンク切り替え

        ; 4th ROMアクセス

        LD      A, B      ; Bレジスタから以前の値を取得
        OUT     (71H), A  ; メインROM切り替え
        EI                ; 割り込み許可

(無題)

投稿者: PC88 投稿日:
今、頑張って、自力でROMの吸い出しに挑戦をしています。
ところで、4th ROMの吸い出しを行うのにバンク切り替えが必要であるとのことなのですが、バンク切り替えはどのようにすればよいのでしょうか?
ネットでは「通常は6000Hから7FFFHまでのエリアは「メインROM」が選択されているので、裏のバンクにあるROM内のルーチンを呼び出すには、I/Oポート71H へデータを出力してバンクを切り換え、CPUから「見える」状態にする必要があります。」とあったのですがよくわからないので、教えていただけると助かります。

あぅぅ

投稿者: Manuke 投稿日:
To PC88さん

うむむ、駄目でしたか。お力になれず申し訳ないです。
やっぱり実機がないとこれ以上は難しいですね。
無印を入手する機会があったら、改めてチャレンジしてみます。
ご協力ありがとうございました。