MACL,MACH, 及び GBR をテンポラリーとして使用します。
pr をレジスター内に保存します。(sts.l pr,r14)
このテクニックは、ライブラリの挙動やSHのアセンブリに精通している方のみお使いください。 これらの操作は、きちんと使わないとライブラリ内部での暴走を引き起こす可能性があります。 |
この対処としては、
割り込み処理が除算器を使用する場合、メイン処理は割り込み禁止にしたする。
割り込み処理では除算器を使用しない。
SH Cコンパイラには、除算器を使用するオプションスイッチがあるため、この 注意を意識したくない場合は、使用しないオプション(-div=cpu)か、除算器使 用時には割り込みを禁止するオプション(-div=peripheral)を指定するように してください。
※gccは、Cコンパイル時コード中に明示的に(例えばインラインアセンブラ) 使わない限り除算器を使用するコードを生成しません。
VBlank中である。(VDP2に常に書き込み可能な期間中)
SCSPは、68000も内部のDSPも止まった状態。
VDP1は描画も表示も行っていない状態。
CPU-DMA転送とSCU-DMA転送には、レジスタへのデータの登録時間は含まれていません。
まず、VDP1ではVRAM内に画像データ、スプライト表示用コマンド、 カラールックアップテーブル、グーローシェーディングテーブル を入れます。これら全てを含めて512KB以内に収めなければなりません つまり絵のデータだけで512KB使えるという訳ではありません。 当然、絵のデータが多くを占めてしまえば、コマンドの入るスペース が減りますので、その描画できる枚数が減ってしまいますし、その逆 もいえるのです。そういった事を頭に入れておいた上で仕様を固める た方がいいでしょう。
次にVDP2ですが、ここには、ビットマップデータ又は、キャラクタ パタンデータ、パターンネームデータ、場合によっては、回転係数 データ(このデータは、カラーRAMに置く事も出来ます。)が入ります。 これらのデータが全てVRAM内に収まるのは勿論ですがそれ以外に アクセスの問題があります。
ただ気をつけて欲しいのは、ビットマップを使う場合大量のRAMを 必要とするため、気をつける必要があります。
ベクタ領域のアクセスは、BOOT-ROMに内蔵のシステムプログラムを使用しなくてはなりません。SYS_SETSINT()
NMIベクタは書き換え禁止です。これは、リセットボタンの処理のため。
¥SATURN¥SEGASMP¥SYS¥MK.BAT SMPSYS.C SMPSYS.LNK SYS_ID.SRC
から、
のように、書き換えてください。
又、VDPに負荷の掛かりすぎるような、データの場合表示が正しく 行われない事もあります。(つまり、フレーム落ちしてしまいます。)
また、calloc、malloc、sprintfなどのメモリに絡んだ関数はコンパイルも
通りますし動作もしますが、ゲームマシンのプログラミングとしてはふさわしい
組み方ではありません。
calloc、mallocなどは、もともとOSに深く依存した
関数ですので、Saturn上で使用した場合、違法なアドレスへのマッピング等
したときにも、エラーは帰ってきません。これらのことはSaturnがOSを積んだ
マシンでないということを考えれば当然の結果だと思います。
(これは、SBL、SGLどちらでも同じ事です。)
クロックチェンジ後の処理は、『プログラマーズガイド』のシステムプログラム
ユーザーズマニュアルに記載されていますので参考にしてください。
簡単に記述しますと、
以上の理由から、最大63分04秒以上のデータを作成することは出来ません。
もし、作られたソフトが63分04秒以上あった場合、当然のことながら
製品化する事は出来ません。
カートリッジ部分のエミュレーションを行う場合、CartDev、Programming Box上でのアドレス設定はROMイメージのアドレスを指定する事は可能なのでしょうか?
Cart DevではSIMMのメモリーを使用してエミュレーションを行うのでしょうか?
その場合、ファイルシステムとの共存は可能なのでしょうか?
ROMカートリッジへのアクセスはバイト単位で行えるのでしょうか?
SCUの制限は通常のA-Busへのアクセスと変わりはないのでしょうか?
SCUのウェイトを設定しますが、アクセスはLOW-RAMに比べどのくらい遅いのでしょうか?
データカートリッジを使用したサンプルプログラムはありますでしょうか?
CDの場合、ライトワンスライターで作成した物を提出しますがデータカートリッジ部分のデータはどの様にして提出すればよろしいのでしょうか?
(フロッピーで圧縮して提出、ROMライターでROMを作成する等)
使用するROM空間は決まっているので、ROMイメージのアドレスを指定することはできません。
SIMMシステムで使用する専用カートリッジ(亜土電子で販売しています)にSIMMをセットしてエミュレーションを行うことになります。
SIMMシステム(GFSのデバッグモード)とカートリッジのエミュレーションはGFMC_Baseの設定アドレスがカートリッジ使用アドレスとぶつからなければ、可能かと思われます。
バイト単位でも行うことができます。
変わりありません。ただし、CDバッファと違って読み込みアドレスの更新がありますので(つまり、通常のメモリコピーのように読み込みアドレスの更新がある)、DMAの設定には注意してください。
3クロック・ウェイトに設定します(マニュアルに記載)が、実測で16ビットのデータを得るのに、25クロックほどかかっています。
WORKRAM-Lとの対比で約4倍遅いということになります。
サンプルプログラムは用意していません。CDからの読み込みとカートリッジの読み込みが重ならないように注意してプログラミングしてください。
MegaDriveなどの昔のカートリッジソフト同様、基本的にはROMでの納品となります。この形態については、納品時に変更がある事はあるかもしれません。
実行ファイルをBIN形式で作成する。
IPを作成する。
バーチャルCDのスクリプトファイルを作成し、ディスクイメージを作成する。
バーチャルCDにて、動作を確認する。
VCDMKTOC.EXEを使用し、TOCファイルを作成する。
SEGACDW.EXE を使用し、ライトワンスCDを作成する。
IP自体についての解説と、自己起動するようなCDのスクリプトファイルの 記述方法については、
各項目の実行手順は以下の通りです。
objcopy -O binary input output
とするか、GCCのリンクオプションで
-Xlinker -oformat -Xlinker binary
もし、1stREAD FILE のリードアドレスを変更する場合には、IPをコンパイルし直す必要があります。
現在ご提供しておりますIP用のソース及び、セキュリティオブジェクトは、
SH-C用ですので、日立製SH-CにてIPを作成する必要があります。
または、GNU用のIP作成に必要なファイルを電子メールにてご提供
できますので、必要な場合にはご連絡ください。
IPのロード後に自動的にロードされるファイル(1ST READ FILE)は、
CD-ROM上のファイル名が、アスキー順で一番最初のファイル
(ファイル識別子が2のファイルと同義)です。
CD-ROM上のファイル名は、Fileコマンドで指定し、DOS上のソースの指定は、
FileSource コマンドで行います。この時、CD上のファイル名とソースの
ファイル名は、一致させる必要はありません。
また、システムエリアに登録するテキストファイルの意味については、
別紙資料をご参照ください。(これらのテキストファイルは、開発中はダミー
でも構いませんが、権利関係のテキストファイルについては
マスターアップ時までに必ず入れるようにしてください。)
なお、自己起動する実行方法では、SNASMデバッガは使用できませんので
ご注意ください。
.DATA.B ¥data >> 24 .DATA.B ¥data << 8 >> 24 .DATA.B ¥data << 16 >> 24 .DATA.B ¥data << 24 >> 24
といったマクロを定義してください。
6002000H + IPサイズ┏━━━━━━━━━━━━┓ ┃ 1stリードファイル ┃ ┃ ロード可能領域 ┃ ┃ ┃ ┃ ┃ 60FF000H ┣━━━━━━━━━━━━┫ ┃ システム使用領域 ┃ 60FFFFFH ┗━━━━━━━━━━━━┛
60FF000H〜60FFFFFHは、システムが使用しますので、絶対に1stリードファイル をロードしてはいけません。
1stリードファイルをロード完了後は、アプリケーションへ開放されます。
また、6000000H〜6001FFFHは、システムが使用しますので、アプリケーション
では使用してはいけません。
ただし、600E00H〜6001FFFHのスタックの使用はできます。
IP処理が完了し、アプリケーション起動後は、
マスタSHのスタックを他にも用意すれば、6001000Hまで、
スレーブSHのスタックを他に用意すれば、6000E00Hまで、
それぞれ使用可能です。
6000000H ┏━━━━━━━━━━━━┓ ┃ ベクタ、常駐ルーチン ┃ 6000E00H ┣━━━━━━━━━━━━┫ ┃ スレーブSHスタック ┃ 6001000H ┣━━━━━━━━━━━━┫ ┃ マスターSHスタック ┃ 6002000H ┣━━━━━━━━━━━━┫ ┃ ┃