マップ上にユニットを65体以上展開させた場合の不具合の原因が判明しました。結論から言うと、現状では一時断念せざるを得ません。HiROMの状態ではRAM容量(外付けRAMを含む)の不足でオーバーフローし、65体目以上のユニット情報が維持できないというのが不具合の原因でした。マップ上で展開しているユニットの情報はRAMの7E2000、7E4000、7E6000の各領域にリアルタイムで読み書きされているのですが、この単位が0080hのため0080*40(64体分)=2000hとなり、65体目以上の情報が維持できなくなってしまうのです。これがLoROMであればSRAM領域を1バンクあたりにつき4000hまで展開、最大で256Kbまで拡張できるので該当するデータを大容量化したSRAMに逃がして問題解決となるのですが、HiROMの場合は1バンクあたりのSRAM領域が2000hしか維持できないうえに128Kbが容量の限界となっています。多量のデータをSRAMで処理している魔装機神ではHiROMではなく従来のソフトによくあるLoROMという仕様(32MBLoRAM+32kbSRAM+SA-1チップとやや特殊ではありますが)を採用しているのはこの対策のためだと思われます。大容量のデータの場合はROM情報を特殊チップ仕様に変更してそちらで処理するという方法もあるらしいのですが、現状ではそれらしい資料が見つからず、これといってよい方法が見つかりません(一応リザーブRAM領域にデータを逃がすと正常に動くように見えるのですが、やはり維持できないのかだんだん動作が怪しくなり最後は突然ゲームオーバーになったりフリーズします)。魔装機神と同様にメモリマップをLoROMに変更する事も考えましたが、さすがに作業量を考えると厳しいものがありますので改善策が見つかるまで一時断念し、まずはSRAMに登録した増加ユニットの正常動作だけを目指す事にします。
コメント
コメントを投稿