HN 日本語サマリー

← 一覧へ戻る
プログラミング

Am29000ホームブリューコンピュータのために1996年のウィンドウシステムをマシンコードで発掘する

Unearthing my 1996 windowed OS in machine code for Am29000 homebrew computer (nanochess.org)

149 pointsby nanochess32 コメント

要約

筆者は1996年から1997年にかけて、Am29000プロセッサをベースにしたホームブリューコンピュータ上で動作するウィンドウシステム付きオペレーティングシステムを32ビットマシンコードで開発した。当時としては先進的な機能であったが、特定のハードウェアに依存していたため共有できなかった。その後、父親が開発したG11コンピュータ上で、OS/2プログラミングの知識やX11R5のソースコード(特にXRegion.c)から着想を得て、協調的マルチタスクとウィンドウ描画アルゴリズムを実装した。この経験は、現代のGUIシステムの基礎となる概念を探求するものであった。

全文翻訳

メインページ Intel 8080エミュレータ チェスプログラム コンテスト ストア レトロゲーミング FAQ リンク 私について スペイン語で見る Oscar Toledo G.によるAm29000ホームブリューコンピュータ用ウィンドウシステムOSの開発 2026年7月30日 かつてメキシコの神秘的な土地で、1996年の秋に始まり1997年の春にかけて、私は32ビットマシンコードでウィンドウシステム付きオペレーティングシステムをコーディングし、フロッピーディスクに収め、それが起動したときの興奮に飛びつきました。もちろん、Windows 3.1やGEMをフロッピーディスクから起動できなかったので、それは素晴らしいことだと知っていましたが、それがどれほどクールであるかを知るにはほど遠いものでした。残念ながら、Am29000プロセッサベースのホームブリューコンピュータ用に書かれたため、皆に見せられるようなものは何もありませんでした。私の記憶、いくつかのメモ、そして忘れていたことを再び発見する旅に戻りましょう。 世界最速のプロセッサ Transputerに関する一連の記事をフォローしているなら、私はオペレーティングシステムに非常に満足しており、システムの限界に達していました。一方、私の父は新しい32ビットプロセッサに基づいた新しいコンピュータシステムの開発に忙しくしていました。さて、1994年には私たちにとって新しいだけでした。AMD Am29000プロセッサは1987年に登場し、世界最速のプロセッサとも発表されました(ここにミームが見えますか?)そして、それは1サイクルあたり1命令を処理できたので、確かに速かったです。Am29000プロセッサとその successor であるAm29050は、プリンタ用のいくつかのPostscript言語アドオン、Quadra Macs用のビデオNuBusカード、F-15 Strike EagleやBattle of the Solar System(どちらもMicroprose製)のようなアーケードゲームで使用され、Wikipediaで読んだところ、冗長性のためデュアルプロセッサボードの航空電子機器にも搭載されているとのことです。この速度は、高速なRAMやROM、または非常に高速なTTLチップを持っているといった、多くの仮定に基づいています。そして、1990年代初頭には、そのすべてがまだ非常に高価でした。Am29kファミリーのバス設計上の決定、例えばデータバスと命令バスの分離などは、インターフェースを非常に煩雑なものにしました。結局、Am29kで有用なことを行うにはDRAMメモリが必要でしたが、それは遅く、すべての利点が失われました。しかし、私の父はスタティックRAMメモリに自信を持っており、彼は8ビットバスを持つ数十個の128KBスタティックRAMチップを調達しました。表面実装が始まり、そのうちのいくつかは、素敵なミニチュアグリーンボードにマウントされた4つの32K RAMチップで構築されました。そのため、私の父が作った最初のAm29000コンピュータは6MHzで動作し、512KBのRAMという驚異的なメモリ容量と、128KBのEPROM(2つの16ビットチップを使用)を持っていました。ISAコネクタがあり、ビデオはCirrus Logic GD5429カード、標準のパラレル/シリアル/フロッピーディスクコントローラカード(マルチポートカード)とともに、古いPCからキーボードチップを再利用してATキーボードをインターフェースしました。このコンピュータはG11と呼ばれていました。それはチームワークであり、彼はプロセッサを起動するための初期プログラミングを行い、私はCirrus Logic VGAを初期化するためのZ280コードを翻訳し、キーボードデコーダとディスクルーチンを作成しました。これが安定したら、メモリをリストし、データを保存するためのモニタープログラムに取り組み、命令セットが十分に複雑だったので、マイクロディスアセンブラとマイクロアセンブラも統合しました。これは、ラベルは使用できませんでしたが、実際のニーモニックでコーディングできることを意味し、コードの移動は完全に苦痛でした。EPROMをプログラムするためにZ280マシンに戻る必要がありましたが、すべてが非常に順調に進んでいました。私は、Z280マシンからこのマシンにすべてをポートする必要があるという暗い現実に直面しました。アプリケーション、ユーティリティ、ゲームの間で約200のプログラムがありました。さらに、Z280プログラムは基本的に時代遅れであり、同じものを再現できませんでした。私はG11V1の写真が欲しかったのですが、1999年以前にはデジタルカメラはなく、そのマシンがどこにあるか分かりません。そのため、これはG11V2コンピュータの写真です。4つの512KBx8メモリが見え、すでにPCIバス(G11V1には存在しない)があります。 休憩 G11コンピュータが完成したとき、私の父はそれを引き継ぎ、各プロセッサの特殊レジスタがどのように機能するか、またはなぜ特定の値を持っているのかを調査し、それについて文書を書き始めました。私は少し驚きました。プロセッサはすでにデータブックに文書化されていると思っており、文書化されていない動作には興味がありませんでしたが、とにかく、彼のメモをすべてタイプして印刷しました。Transputerが利用可能になったので、それに集中することができ、G11コンピュータを時々利用してフロッピーディスクオペレーティングシステムを強化しました。いくつかのゲーム、新しいCanon BJC-600インクジェットプリンターを扱えるテキストエディタ、さらにはMSXエミュレータのコーディングを開始しました。これがGradiusが実行されているのを見た最初の時で、私は夢中になりました。私はZ280プログラムを再作成しており、Transputerですでに高度なオペレーティングシステムを持っていたとき、後退しているように感じました。その間、Windows 3.1は、CGAから受け継いだパレットの産物である、けばけばしい色のすべてのアイコンで、より有用に見えました。ウィンドウシステムをどのように行うかを発見することに興味がありましたが、Windows 3.1のプログラミング本を手に入れることができませんでした。地元の図書館には、Turbo-C、Turbo-Pascal、Quick-BASIC、QBasicの本がたくさんありました。ついに、OS/2プログラミングに関する割引本を入手し、それを読み始めました。著者はOS/2を導入するのに素晴らしい仕事をしており、それは簡単でした:ウィンドウを開く、ウィンドウに描画する、ウィンドウを閉じる。本当の発見は… *バドゥムツス* メッセージパイプラインでした。ウィンドウを持つすべてのプロセスにはメッセージパイプラインがあり、ウィンドウを作成するときは、一種のインターフェースハンドラ(ウィンドウクラス)を割り当てる必要があります。このハンドラはメッセージを読み取り、ユーザーの操作に応じて操作を実行します。ユーザーの操作は、最初は単純で、マウスのクリックを示すメッセージ、マウスがウィンドウ上を移動するメッセージ、そしてダブルクリックメッセージで物事は複雑になり始めます。ウィンドウの中にウィンドウを作成できますが、これらはボタン、スライドバー、アイコン、インジケータ、ステータスバーなどのコントロールです。そして、これらのコントロールはメッセージを返すことができます。このことの美しさは、ユーザーインターフェースを非常に速く開発でき、すべてのプログラムが素晴らしく見えることです(まあ、90年代には、Digital ResearchのGEMが証明できるように、私たちはそれほどうるさくありませんでした)。この記事のために調査している間、AMDが2つのデータブックを出荷した箱がまだあったことを発見しました。誰かが1990年6月7日に郵便局にそれを落としました。 ウィンドウシステム まず、マルチタスクが必要でした。私はこれを daunting で複雑だと感じ、協調的マルチタスクを学ぶことに終わりました。現在の状態を保存し、新しい状態をロードし、新しい場所にジャンプしました。OSデザイナーの皆さん、ごめんなさい、私はそれを考えませんでした。ただ動いてほしかったのです。 第二に、ウィンドウが必要でした。物事を重ね合わせる方法を一生懸命考えました。そして、父が購入した新しいCD-ROMのファイルを次々と読んでいると、X11R5を発見しました。ご存知ない方のために説明すると、X11はほとんどすべてのグラフィック端末で動作するように設計されたネットワーク化されたウィンドウシステムであり、大学は多くの異なるハードウェアを持っていたため、それらすべてで動作するはずでした。もちろん、これは色やゲームの処理には非常に扱いにくいことを意味します。ここで重要なのは、CDにX11R5の完全なソースコードが含まれていたことです。もちろん、私のコンピュータにはネットワークもCコンパイラもなかったので、それを使うことはできませんでしたが、代わりに単一のソースコードファイルが啓発的でした:XRegion.c。アルゴリズムの基本的な概念は、すべてのウィンドウが長方形の表示リストを持っているということです。ウィンドウが重なっていない場合、長方形はウィンドウ全体を覆います。ウィンドウが重なっている場合、重なっている長方形を切り取り、すべての重なりを切り取り続けます。これは、長方形が途中で切断されると、4つの長方形が作成され、情報を表示するには、4つの長方形に描画しようとすべきであることを意味します。そのため、重なりが多いウィンドウはゆっくりと描画されます。ちなみに、Appleにはこのためのトリックがあります。それはクリッピングビットマップを使用します。