6

ゲーム 0x10cの 16 ビット DCPU 用のアセンブリンカーを実装しています。

誰かが私に提案したテクニックの 1 つは、実行時にコードを交換するために「当時の Turbo Pascal のようなオーバーレイ」を使用することでした。

基本的な考え方 (オーバーレイされたシンボルを同じメモリにリンクし、ref の前にスワップ) はわかりましたが、それらの実装は何でしたか?

コンパイラが参照の前に挿入したのは関数でしたか? 罠だった?オーバーレイのデータはオーバーレイの場所に保存されていましたか、それとも大きなテーブルのどこかに保存されていましたか? うまく機能しましたか、それとも頻繁に壊れましたか? オーバーレイされた Pascal とリンクするためのアセンブリ用のインターフェイスはありましたか (またはその逆)、または互換性がありませんでしたか?

Google は基本的に何の情報も提供していません (最新の Pascal コンパイラを無視していること以外は)。そして、私は 5 歳の若さで、彼らが現役だったときにそれらを必要とすることはありませんでした。

4

1 に答える 1

7

ロードされていないときに要素がトラップ(int 3F)を指すユニットごとのジャンプテーブル。ただし、これは古いTurbo Pascal / Borland Pascalバージョン(5/6)の場合であり、新しいバージョンも(286)保護モードをサポートしており、さらに別のスキームを採用している可能性があります。

このスキームは、オーバーレイがロードされると、トラップのオーバーヘッドが発生しなくなることを意味します。

私は私の参考文献でこのリンクを見つけました:SlithyTove。複数のオーバーレイにまたがるコールチェーンの処理方法など、他にも優れた詳細があります。

于 2012-04-14T21:38:01.897 に答える