Skip to content

tsutomutabata/dezaemon_bios

Repository files navigation

dezaemon_bios

スーパーファミコン版デザエモンに隠された任意コード実行を利用したプロジェクトです。

謝辞

27年を超えて任意コード実行の自力解析を行なったひろーみんさん、
このプロジェクトの開発の根幹となるCコンパイラー、65816アセンブラ、リンカーの使用に関してWDC Toolチーム及び WDC社に敬意を表します。

準備

dezaemon_bios プロジェクトは以下のツールのインストールが必要です。

MinGW
https://ja.osdn.net/projects/mingw/
mingw32-make.exe が最低インストールできれば問題ありません。
また、インストール先のディレクトリを path に追加する必要があります。
tool/hz2bin.exe を改造したい場合は GCC もインストールしてください。

WDC Tool
https://wdc65xx.com/WDCTools
こちらよりダウンロードしてください。
WDC社に Contact us からスーパーファミコンでの開発に使用をしてよいか問い合わせをしており問題ないとの回答を得ています。
WDC Toolチームはツールの使用状況を把握するために Web から必ずダウンロードを行なってください。
(インストーラーの配布は禁止です)

ハードウェアとして
スーパーファミコン本体
デザエモン(ソフト)
転送君Jr. が必要となります。

実行

クローン後、
cd dezaemon_bios
make clean
make
にて、転送君Jr.の実行形式 rawdata.h7e が出力されますので TeraTermへドラックすることで任意コードを実行できます。
任意実行までの準備は
http://thanks-pawapass.info/hiroomin/
を参考にお願いします。

dezaemon_bios はBIOSとして以下を提供します。
bootコード、
デザエモンカートリッジ内の ROM コードへのアクセス。
単純な print や 10/16進数値表示、Pad入力、DMAマネージャ、サウンド、スプライトなどを制御できます。
スーパーファミコンの I/O マップアドレスヘッダー。
デザエモン ROM コードのアドレスヘッダー。
単純な Activity 制御。

補足

スーパーファミコンのメインメモリは 128KiByte あり、0x7e0000 ~ 0x7fffff の連続したアドレスにあります。
0x7e0000 ~ 0x7e1fff は通常 ROM バンクの 0x0000 ~ 0x1fff にイメージが表れる。
0x002000 ~ 0x007fff のI/O空間も ROM バンクの 0x2000 ~ 0x7fff にイメージが現れます。
プログラムの先頭番地は 0x7e2000 からブートしますので RAM 上で動作します。
Cでの変数へのアクセスは Large Model でコンパイルされておりますので全て 24Bit アドレスでアクセスされますが、
ROM code は 16Bit アドレスでのアクセスがほとんどとなるため、ROM code を呼び出す場合は DBR(データバンクレジスタ)を0にする必要がある場合があります。
DBR を 0 にせず I/O 周りを扱うコードを呼び出すと 0x7e バンクのメモリに書き込みメモリ破壊を引き起こします。
また、C側では引数のやり取りに DR レジスタを利用するため、ROM code は DR レジスタが常に0を前提でコードが書かれていますので、ROM code を呼び出す場合は DR(ダイレクトレジスタ)を0にする必要があります。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages