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

[OS X]Xcodeでの既存CUIアプリのコンパイル方法

1. 新規プロジェクトを作成する

Command Line Toolを選ぶ

file001.png

2. プロジェクトを管理
グループにパスが設定される関係で、特にプロジェクトフォルダとソースコードを
分離する場合、最初のグループに入れると、ファイル位置が正しく認識されない事があるので、注意。

file002.png

3.ファイルをプロジェクトにドロップ
リソースなども含めてドロップする場合、チェックボックスが入らず、
コンパイルできないので注意。
file003.png

4.グループ化すると便利
同じフォルダ内にあるファイルはグループ化できます。
file004.png

5.サーチパスの設定
SDLなど、外部ライブラリを使用する場合はサーチパスを設定する必要があります。
Header Search Pathsに追加します。

file005.png
file006.png

ライブラリのパスも同様に追加します。

file007.png
file009.png

6.フレームワークとライブラリのプロジェクトへの追加
このアプリが使用するライブラリとフレームワークをプロジェクトに追加します。

file010.png

file011.png

ライブラリはFinderで「フォルダへ移動」を選択し、フォルダを表示します。

file012.png
file013.png

プロジェクトにドロップします。
file014.png

7.マクロ(define/定義)の設定
file016.png

このようになれば成功です。
file017.png

プロフィール

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

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

月別アーカイブ

FC2カウンター

ブロとも申請フォーム

ブログ内検索