2013年05月04日

動画再生(11)

  動画再生カートリッジつくろうブログ。


  ファイル選択などをBASICで行おうと思いましたが、結構面倒です。

  一応、P6から見ると、『動画再生カートリッジ』はその名の通り、拡張ROM/RAMカートリッジに見えています。

  制御用プログラムをBASICで組んだ場合、CMT や フロッピーから読み込むのはさすがにダサいので、拡張ROMの部分からBASICを起動したいのですが...いろいろな手順を踏む必要があります。


○拡張ROMからBASICプログラムを転送して、起動させる手順

1)BASICプログラムを転送させるための転送プログラムをメインRAM上に置く
2)BASICのモード、ページを選択する
3)転送プログラムを起動して、BASICプログラムをメインRAM上に置く
4)メインRAM上に置いたデータをプログラムとして認識させる
5)プログラムを走らせる

これらを全部自動で行う必要があります。

以下、mk2/66の場合です。P6初代機でも大体同じ手順になります。


1)BASICプログラムを転送させるための転送プログラムをメインRAM上に置く

 N60m-BASIC が起動するときに、拡張ROMカートリッジの特定の場所を読み込んで、処理を変更します。

 0x4000 = 0x41、0x4001 = 0x42 の場合、0x4002、0x4003のアドレスをCALLする。その後、N60-BASICを起動する。
 0x4000 = 0x43、0x4001 = 0x44 の場合、0x4002、0x4003のアドレスをCALLする。その後、N60m-BASICを起動する。
 0x6000 = 0x42、0x6001 = 0x42 の場合、0x6002、0x6003のアドレスをCALLする。その後、N60-BASICを起動する。
 0x6000 = 0x43、0x6001 = 0x44 の場合、0x6002、0x6003のアドレスをCALLする。その後、N60m-BASICを起動する。


 今回、モード5を使いますので、0x4000=0x43、0x4002=0x44、を使います。


2)BASICのモード、ページを選択する

 BASICのモードは、0xFF4E に『モード - 1 』を書き込みます。モード5の場合は、4を書き込みます。

 ページ数は直接ワークエリアに書き込む事は出来ないので、キー入力したようにします。

 この後の3)転送プログラムを起動する、5)プログラムを走らせる、に関しても、キー入力したようにしますので、同時に行うのが簡単です。

 キー入力したようにするには、ファンクションキーを押した状態にします。

 具体的には、0xFA32に、入力文字数を、0xFB8D、0xFB8E、に、入力内容があるアドレスを書き込みます。これにより、入力できる状態になった時に、設定した内容が入力されます。



3)転送プログラムを起動して、BASICプログラムをメインRAM上に置く

 転送プログラムを起動するのは、2)で実現済みです。転送プログラム自体は、単純なブロック転送のみです。

 なぜ、1)で転送プログラムだけを転送していて、BASICプログラムは転送しないか?

 答えは、起動時にデータが消される場所があるためです。

 データが消されるのは、0x8000〜0x83FF、0xA000〜0xA3FF、0xC000〜0xC3FF、0xE000〜0xE3FF、です。VRAMに相当する部分ですね。

 それ以外にも、スタックエリア付近(〜0xF9FF)や、0xE500〜0xE5FF、0xF500〜0xF5FF、付近もデータが変更されている場合があります。


4)メインRAM上に置いたデータをプログラムとして認識させる

 まず、プログラムの最後を認識させます。0xFF56、0xFF57、にプログラムの最後+1を書き込みます。
 その後、0x04C4 をコールすると、BASIC のリンクポインタが修正されます。


5)プログラムを走らせる

 これも、2)で実現済みです。


BASIC起動

  ↑
 実際に組んでみたプログラムです。

 前提として、BASICプログラムが、拡張ROMの0x4100〜0x68FF(転送後、0x8800〜0xAFFF)に格納されていて、プログラムの最後が、0x68FE、0x68FF(転送後、0xAFFE、0xAFFF)に格納されているものとしています。


posted by えすび at 10:28| Comment(0) | HW:動画再生 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。