NRTDRV RX 150602

https://www.dropbox.com/s/4e5m0imqoebvjti/RX150602.zip?dl=0

主な変更点
拡張スロットに対応しました。

NRTDRV RX(以下RX)では、次のようなことをしています。

・PAGE1($4000)の現在のRAMバンクを探す。
・PAGE0($0000)のRAMバンクをPAGE1で探す。
・そうすると、PAGE1はPAGE0のミラーになる。
・NX.BINは$5000から始まるプログラムで、RXの$1000にバイナリとして埋め込まれている。

NX.BINはPAGE1はミラーなのでコピーせずに実行できます。(メモリの節約とメモリマップの都合)

・PAGE1(NX.BIN)のカートリッジ検索プログラムを実行する
・PAGE0にある代理ルーチンをNRTDRV本体へパッチ
・必要があれば、カートリッジへのアクセスは代理ルーチンを経由してPAGE1のルーチンを呼び出す

つまり、
PAGE1にカートリッジ検索プログラムとがあることで、
PAGE0とPAGE3($C000)が切り替えられ、拡張スロットへと対応ができるようになるという事です。
拡張スロットの切り替えが($FFFF)にあるので、こういう事になりました。

うん、複雑だw
スポンサーサイト

NRTDRV.hspのコンパイル方法


1. HSP環境をダウンロードしてインストールする

普通にインストールすればよいので割愛します…。

2. NRTDRV本体のアーカイブをダウンロードして好きなディレクトリに展開する
http://nrtdrv.sakura.ne.jp

例えば、
c:\music\NRTDRV
など。


3. X1センターより「クロスサポートツール」からを
「全二重高速シリアル通信モジュール+リモートブート」の
最新版をダウンロードする

http://www.x1center.org/
から巡ってください。hssio????.zipになっていると思います。


4. hssioアーカイブ内よりLOADM.COMとIOCS_I.COMを、
NRTDRV.HSPと同じディレクトリに配置する。

NRTDRV.HSPはsourceディレクトリにあります。


5. HSPスクリプトエディタでNRTDRV.HSPを開き、実行ファイルを作成する。

メニューより「HSP」→「実行ファイル自動作成」を選択するとできます。

※実行時に足りないファイル(BINやDLL)はNRTDRV.EXEと同じディレクトリにあります。

MSXメモリマップからみるNRTDRVXとSFG-0xの鳴らし方

●MSXのメモリマップの基本

Z80には64kバイトのメモリ空間しかないので、
メモリを増やすには一部のメモリを切り替えるしかない。

そのため、MSXのメモリ管理はアドレスが4つに分割され、それを切り替える事にしている。

ページ0:0000-3FFF
ページ1:4000-7FFF
ページ2:8000-BFFF
ページ3:C000-FFFF

MSXには各ページの切り替え先として、
基本スロット(プライマリスロット)が4つと
拡張スロット(セカンダリスロット)が4つあり、
最大4x4=16の異なるスロット(メモリ)を各ページに接続することができる。

これらは他のプログラムとの整合性や、ハードウェアの仕様変更に備える為に、
RDSLTやWRSLT、CALSLTなど、BIOSコールによって切り替えることが推奨されている。
ただし、仕様によってBIOSコールによる切り替えにはいくつかの制約がある。

スロットは、本来禁止されているものの、技術的には基本スロットはI/Oポート、
拡張スロットはメモリマップドI/Oとして手動で切り替えるができる。

基本スロットの設定I/Oポートは、C-BIOSのhardware.asmによると、
$A8となっており、読み書き可能(R/W)になっていること。

ビット列と内容は、

76543210
33221100

となっていて、ページ番号が2bitづつ割り当てられている。
ページ2であれば、bit5とbit4であり、(V>>4)&0x03とすると、
現在の基本スロットのページ番号がわかる。

拡張スロットは設定は少し厄介であり、基本スロットのページ3、
$FFFFが拡張スロットの設定アドレスになる。

拡張スロットもR/Wではあるが、読み出し時には設定値は「反転」される。
Z80ではCPL命令を利用すると利用しやすい。
例えば、$24を設定した場合は$DBが読み出される。
なお、この現象は拡張スロットの認識にも利用される。

●制約から難しい事

「厄介」と書いたのはZ80の性質からであり、
Z80のページ3には基本的にスタックが置かれる場所であるということである。

スタックのある場所を切り替えてしまうということは次の命令ができなくなる。

PUSH/POP/CALL/RET

拡張スロットの切り替えを自分で行う場合には、
ページ3のメモリが使えず、スタックポインタがページ3の範囲内にある場合は、
スタックも使えないということで、十分に注意を行う必要がある。

また、動作中のプログラムの実行アドレス(PC)と同一ページの異なるスロットにプログラムと
書き換え先のメモリがある場合も、切り替えが難しいので注意したい。

●NRTDRVのメモリマップ

MSXのメモリ管理に合わせると次のようになる。

ページ0:ドライバ($1800-)
ページ1:曲データ($4000-)
ページ2:曲データ(続き)
ページ3:スタック

●SFG-0xの基本

SFG-0xのFM音源はメモリマップドI/Oとしてスロットに接続されている。

$3FF0:OPMレジスタ
$3FF1:OPMデータ

●どうやってアクセスする?

NRTDRVXの場合、
NRTLOAD.COM(DOSによって$100に配置、実行される)によって
NRTDRV.BINを$1800に読み出し、
NRTDRVX.BINをFDDのワークに衝突しない位置である$C800に読み出す事によって実行される。

NRTDRVX.BINが$C800にあるのは、
ページ0からでは、直接SFG-0xへのアクセスができないためである。
また、常に出現しているメモリなので、スロット切り替えのコストを減らし高速にアクセスできる。

●拡張スロット上のSFG-0xへのアクセス

NRTDRVXの次世代版が仮にあったとして、拡張スロットにあるSFG-0xへアクセスする場合は、
次の手法を取ることが望ましい。

128kbyte以上メモリがある場合、
・ページ1のRAMの別バンクにスロット切り替えルーチンを転送する
・ページ0にそのルーチンへのアクセス機能を置く

ページ1には曲データがあるため、基本的には破壊できない。
そこで別バンクを使うことで曲データを破壊しないようにできる。
ただし、スロット切り替えにはコスト(オーバーヘッド)があるので、注意したい。

nezplay on SDL for Win32 2014-07-03 / KSSNRTV2

http://www.mediafire.com/download/nhvi9q9z0udnno7/nezplay-2014-07-03.zip

2014-07-03
PSG関連をnezplug++より拝借。


http://www.mediafire.com/download/zromun8trj9x89n/KSSNRTV2_20140703.zip

NRTC/MMLXED update

NRTC
2014-05-03
コンパイラをNRTDRV 20140503版に変更した。
コンパイル実行処理の一部を修正。
表示処理の改善。
更新記録の表示を追加。

http://www.mediafire.com/download/pg9miq9iup467vp/nrtc-140503a.apk
MD5:512e2ce47dca59d58ff53b22e5d6919c


MMLXED
2014-05-03
ファイルの改行処理を修正。
テキスト選択状態でBSボタンにより選択部分が削除されるように変更。
更新記録の表示を追加。
新規・保存・破棄などのメニューを追加。

http://www.mediafire.com/download/4ki5x5bxi7la816/mmlx140503a.apk
MD5:c0e4dcd9769bc13d97b34ee12d847a3e

プロフィール

BouKiCHi

Author:BouKiCHi
ABOUT ME
MAIL:alf_byncyou at hotmail.com

WEB:http://clogging.web.fc2.com/
TWITTER:@bkc_alf

月別アーカイブ

FC2カウンター

ブロとも申請フォーム

ブログ内検索