問題タブ [retro-computing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
159 参照

retro-computing - MPW ツールのメイン シンボルの構造は何ですか?

この質問は、数年前から廃止されているMac OS Classicに関するものです。誰かがまだそれについて何か知っていることを願っています!

ここ数週間、PEF実行可能パーサーを作成しており、PowerPC インタープリターをプラグインしました。ある程度の魔法があれば、Mac OS X でいくつかの Mac OS 9 プログラムを (ある程度) 実行できると思います。実際、小さなアプリケーションでテストを開始する準備ができました。

それを支援するために、古いバージョンの Mac OS を SheepShaver 内にインストールし、(現在は無料の) MPW Tools 1をダウンロードし、「hello world」MPW ツールを構築しました ( puts("Hello World!")Mac OS 用にコンパイルされたものを除く、従来の C プログラムのみ)。 9)。

ビルドすると、コード セクションとデータ セクションを含むプログラムが生成されます。実行可能ファイルのメイン シンボル (ローダー セクションのヘッダーで指定) にジャンプできると思っていましたが、大きな驚きを覚えました。コンパイラはメイン シンボルをデータ セクション内に配置しました。

明らかに、データ セクションには実行可能なコードはありません。

Mac OS ランタイム アーキテクチャのドキュメント (1997 年に発行され、驚くべきことに今も Apple の Web サイトに掲載されています) に戻ると、これは完全に合法であることがわかりました。

メイン シンボルをデータ構造として使用する

前述のように、メイン シンボルはルーチンを指す必要はありませんが、代わりにデータ ブロックを指すことができます。この事実をプラグインに利用すると、メイン シンボルによって参照されるデータ ブロックにプラグインに関する重要な情報を含めることができます。この方法でメイン シンボルを使用すると、いくつかの利点があります。

  • コード フラグメント マネージャーは、プログラムでフラグメントを準備するときにメイン シンボルのアドレスを返すため、FindSymbol を呼び出す必要はありません。
  • プラグインのエクスポートの特定の名前を予約して文書化する必要はありません。

ただし、特定のシンボル名がないということは、プラグインの目的がそれほど明白ではないことを意味します。プラグインは、その名前、アイコン、またはそのシンボルに関する情報をメイン シンボル データ構造に保存できます。この方法でシンボリック情報を格納すると、FindSymbol を複数回呼び出す必要がなくなります。

したがって、私の結論は、MPW ツールは MPW シェル内のプラグインとして実行され、実行可能ファイルのメイン シンボルは、開始方法を指示するデータ構造を指しているということです。

しかし、それはまだそのデータ構造に何があるかを理解するのに役立たず、その16進ダンプを見るだけではあまり有益ではありませんでした(コンパイラがこの特定のプログラム__startのアドレスをどこに置いたかはわかりますが、それだけでは十分ではありませんジェネリック MPW シェル「置換」を作成します)。そして明らかに、このトピックに関する最も貴重な情報源は、2004 年の Mac OS 9 で姿を消したようです。

では、MPW ツールのメイン シンボルが指すデータ構造の形式は何ですか?

1. どうやら、Apple はごく最近、私が MPW Tools を入手した FTP サーバーのプラグを抜いたようです。「MPW_GM.img.bin」をグーグルで検索すると、いくつかの代替手段が見つかります)。

0 投票する
1 に答える
146 参照

retro-computing - Mac OS Classicランタイムに関する参考資料は残っていますか?

私はMacOSClassicランタイムの実装に取り​​組んでおり、OSXでClassicプログラムを再度実行しています。このプロジェクトには、PowerPCエミュレーター、PEF実行可能リンカー、およびネイティブ(x86)コードを呼び出す可能性が含まれています。

エミュレーターとリンカーはうまく機能しているように見えるので、Mac OS Classicライブラリーの(再)実装に焦点を移しました。現在、「エミュレータ」を使用してMPWツールを実行しようとしています。AppleがサーバーからMPWShellをプルして、SheepShaver内で実行する数時間前に、文字通りMPW Shellのコピーを取得し、一般的な「HelloWorld!」をコンパイルしました。プログラムと私はそれを正常に実行することができます。

ただし、互換性に関する限り、これはほぼ同じです。Unmangleプログラムを実行しようとする_IntEnv__NubAt3、2つのStdCLibエクスポートグローバルにアクセスしようとしていることがわかりました。これについては、ドキュメントが残っていないようです。(Googleには、Mac OS Xの初期のリンケージの問題に関するAppleメーリングリストの結果がまだいくつかあります。BingとYahoo!は結果を返しません。)

私は、ドキュメントの欠如が特に動揺していることに気づきました。クラシックヘッダーファイルを使用してグローバルのレイアウトを推測したり、逆アセンブルを使用したプログラムでグローバルがどのように使用されているかを推測できる場合もありますが、実際には効率的ではなく、正しく理解できたとは言えません。

また、StdCLibの大部分を正しく取得したとしても、ある時点で他のライブラリに関するドキュメントが必要になります。

Mac OS Classicランタイムに関するドキュメントはどこにありますか?

0 投票する
7 に答える
3172 参照

assembly - 6502 には、制御フローを使用するためのどのような方法がありますか?

6502 アセンブリの制御フローを理解しようとしています。

次のコードがあるとします。

個人的には、switch ステートメントやその他の制御フロー構造が好きです。上記の JMP は私にも関係があります。この種のスパゲッティ コードを使用せずに、複数のケースを処理するためのより良い方法があるようです。

0 投票する
1 に答える
920 参照

javascript - このレトロコンピューティングスキャンラインをロックします。divで複数の行をスキャンするのは難しい

働くフィドルはここにあります:http: //jsfiddle.net/WyXLB/1/

HTML要素に複数行のテキストが含まれている場合、それぞれをスキャンしたいと思います。現時点では、要素全体の外接する長方形をスキャンしています。

いくつかのコードは:

境界の長方形全体でアニメーションを分割して、各行をスキャンするにはどうすればよいですか。上記の関数にanimation->callbackrecursionを入れて、呼び出しごとにマスクを1つのreal_heightずつ降ろしてみましたが、予測できない/混沌とした動作になりました。

0 投票する
1 に答える
111 参照

ms-access - MS Access DOS テーマ?

古い MS-DOS Paradox データベースを MS Access 2013 に変換しました。エンド ユーザーは新しい Access の外観を好まないため、上司から、古い DOS アプリケーションにできるだけ似せた外観にするように依頼されました。

これを行う方法はありますか... 古いフォントの配色など?

0 投票する
2 に答える
710 参照

serial-port - Java ベースの 8 ビット・コンピューター・エミュレーター用の VT100 端末エミュレーション

GNU Screen をシリアル ターミナルとして使用し、シリアル ラインを使用して Altair 8800 クローン ( http://altairclone.com/ )と "通信" することに成功しています。私が使用するコマンドは「screen -itrip /dev/ttyUSB0」です。画面は VT100 エミュレーションを行い、出力から MSB を取り除きます。完璧に動作します。

現在、私はJavaでAltair 8800のエミュレーターにも取り組んでおり、シリアルデバイスの背後にある実際のマシンのように、ターミナルエミュレーターを使用して接続して通信したいと考えています。Linux の世界で解決する最善の方法は何ですか? そのためにスクリーンを使用する方法はありますか?解決策は些細なことだと何かが教えてくれますが、私はまだそれを知りません;)提案をありがとう。

0 投票する
0 に答える
185 参照

x86 - 80386/80287 の組み合わせは 32 ビット モードでどのように動作しますか?

古いコンピューターのレトロコンピューティングとエミュレーションに興味があり、80287 について質問があります。

最新の FPU を使用すると、FNSAVE 命令は、CPU が 16 ビット コードを実行するときに 94 バイトのデータを書き込み、CPU が 32 ビット コードを実行するときに 108 バイトのデータを書き込みます。FSTENV 命令も同様に動作します (コード タイプに応じて 14 または 28 バイト)。

ただし、16 ビット 80286 CPU 用に設計された 80287 FPU は、32 ビット 80386 CPU と併用することもできます。

386/287 の組み合わせでページングを有効にして 32 ビット コードから呼び出した場合、FNSAVE と FSTENV はどのように動作しますか?

80287 のマニュアルでは、80386 について明示的に言及されていますが、94 バイトのデータ形式についてのみ説明されています。ただし、別のマニュアルには、94 バイトではなく 108 バイトを保存する責任があるのは 80387 ではなく 80386 であると記載されています。

また、80287 を使用すると Linux がクラッシュしたと言われている理由は何ですか?

94 バイト形式は Linux の問題に関連していますか?

ありがとう