ゲヌムボヌむアドバンスのUNIX®

はじめに


この出版物では、gbaunixに぀いおお話したす。これは、人気のある出版時、2004幎頃-およそTransl。ポヌタブルコン゜ヌルでシミュレヌタで叀代バヌゞョンのUNIXオペレヌティングシステムを立ち䞊げた楜しい実隓です。 ぀たり、任倩堂ゲヌムボヌむアドバンスのUNIX 5版1974幎、39幎前にリリヌスです。 これは、Gameboyの自䜜開発者、OSに特化したIT孊生、゚ミュレヌタヌたたはコンパむラヌ、Unixオタクにずっお興味深いかもしれたせん。
画像

任倩堂は1889幎からゲヌム垂堎に参入しおいたす原文 ゲヌムボヌむは、今日たで非垞に成功裏に販売されおいるポヌタブルコン゜ヌルの党ラむンのブランドです。 1989幎のリリヌス以来、1億7500䞇台が販売されたした。 この蚘事では、Game Boy Advance、略しおGBA、および察応するGBA SPに぀いお説明したす。

鉄




コン゜ヌルにはいく぀かのメモリブロックがありたす。


カヌトリッゞROMには、コン゜ヌルのアドレススペヌスに2぀の远加マッピングがあるこずに泚意しおください。 さらに、カヌトリッゞにはサむズやタむミングが異なる耇数のメモリバンクが含たれおいる堎合がありたす。

GBAは、通垞のカヌトリッゞ、曞き換え可胜なフラッシュカヌトリッゞ、マスタヌモヌドの別のGBA、たたはケヌブルを介しおコンピュヌタヌからもロヌドできたす。 この機胜はBIOSで保護されおいたす。

コン゜ヌルハヌドりェアは、䞻に十分に文曞化されたアドレススペヌスからアクセスできたす。 さたざたなI / Oレゞスタがメモリアドレスにマップされたす。 これに加えお、BIOSには゜フトりェア割り蟌みを介しお利甚できる倚くの機胜が含たれおいたす。

ARMアヌキテクチャに関する歌詞の䜙談
腕

任倩堂はコン゜ヌル垂堎のリヌダヌであり、ARMはRISCプロセッサ垂堎のリヌダヌです。 珟圚、AWPはほずんどすべおの電子機噚に存圚しおいたす。 Intelはデスクトップを操䜜したす、はい。 しかし、PCのプロセッサは、総生産量のごく䞀郚を占めおいたす。 2003幎には、AWPで7億8200䞇台のデバむスが補造されたした。 䞀般に、この地域のこのアヌキテクチャのシェアは75です。

ほずんどの堎合、AWPは同じ文で「組み蟌み」、「生産的」、「安い」、「䜎脂肪」、「RISC」ずいう単語ずずもに䜿甚されたす。 AWPは、Intel、Apple、Samsungなどの倧芏暡プロセッサを含むプロセッサの補造元にアヌキテクチャのラむセンスを盎接䟛䞎したす。

最初のワヌクステヌションは、80幎代半ばにAcorn Computers Limitedで開発されたした。 その埌、「Acorn RISC Machine」ずしお解読されたした。 AWPアヌキテクチャの最初のバヌゞョンであるARMv1は26ビットアドレッシングをサポヌトしおおり、非垞に䜎速でした。 このアヌキテクチャの最初のプロセッサであるARM1は、空軍のマむクロコンピュヌタずアルキメデスワヌクステヌションプロトタむプの呚蟺プロセッサでした。 そしお、それは最初のRISCアヌキテクチャプロセッサの1぀でした。 䞻な機胜遅延分岐、レゞスタりィンドり、各呜什は1クロックサむクルで実行されたす。

Appleは90幎代初期にAWPを䜿甚しようずしたした。 Acornず共同で、圌らは新䌚瀟Advanced RISC Machines、Limitedを立ち䞊げたした。 別の共犯者はVLSIテクノロゞヌでした。 略語が倉曎されたした。 新しいプロセッサは、ARM6、アヌキテクチャ-ARMv3ず呌ばれおいたした。 完党に32ビットのアドレス指定がありたす。 このプロセッサはApple Newtonで䜿甚されおいたした。

Gameboyは、ARMv4TバヌゞョンのアヌキテクチャであるARM7TDMIプロセッサを䜿甚したす。

ゲヌムボヌむのARM


ARM7TDMIは、機胜がわずかに制限されおいる䞀般的な組み蟌み32ビットプロセッサです。 キャッシュずMMUはありたせん。 指定は次のように解読されたす。
ARM7プロセッサ
16ビットT humb呜什セットをサポヌト
ハヌドりェアで盎接デバッグをサポヌト
Mチョッピングで32ビットの組み蟌みブロックがあり、結果は64ビットです
デバッグ甚の組み蟌みI CEがありたす

ARM7TDMIコアには、デヌタず呜什甚の32ビットバスが1぀ありたす。 デヌタのサむズは8、16、32ビットです。 メモリにアクセスできるのは、ダりンロヌド、保存、共有の指瀺のみです。 31個の32ビット汎甚レゞスタ、6個のステヌタスレゞスタ、シフトレゞスタ、算術および乗算ブロックがありたす。 すべおのレゞスタが同時に䜿甚できるわけではありたせん。 たずえば、ARMモヌドでは、16個の汎甚レゞスタず1個たたは2個のステヌタスレゞスタを䜿甚できたす。 7぀のプロセッサモヌドがありたす。プログラムを実行するための通垞のモヌドず、6぀の特別なモヌドです。 これらは、高速割り蟌み、割り蟌み、監芖プログラム、停止、未定矩状態、およびシステムモヌドです。 ARMずThumbの2぀の呜什セットもサポヌトされおいたす。

Gameboyは4぀のDMAチャネルをサポヌトしおいたす。 プロセッサには、通垞のIRQず高速FIQの2皮類の割り蟌みがありたすが、コン゜ヌルでは埓来の割り蟌みのみが䜿甚されたす。

ARM7には、単玔な3段階のパむプラむンがありたす。
コマンドはメモリから取埗され、キュヌに入れられたす
デコヌドされたコマンド
コマンドは実行䞭です。 この堎合、レゞスタからの読み取り、結果の蚈算、およびレゞスタぞの曞き蟌みが行われたす。

したがっお、い぀でも1぀のコマンドが実行され、次のコマンドがデコヌドされ、1぀のコマンドが取埗されたす。

芪指

RISCプロセッサの比范的䞍利な点は、コヌドが比范的倧きいこずです。 これにより、プログラムのサむズが倧きくなり、キャッシュ効率の損倱、過剰なメモリトラフィック、および電力消費に぀ながりたす。 組み蟌みアプリケヌションの堎合、これは特に悪いです。 コヌドを圧瞮するために、Thumbアヌキテクチャを開発したした。

Thumbは、16ビットに圧瞮された32ビットARMコマンドのシステムです。 最も䞀般的な䞀連の呜什がサポヌトされおいたす。 同じ32ビットのレゞスタで動䜜したす。 Thumb察応プロセッサのパむプラむンには、通垞のARM呜什に倉換するデコヌダヌが装備されおいたす。 違いは次のようなものです。
  • コヌドの35を節玄
  • さらに40のチヌムが必芁
  • 32ビットメモリのコヌドは40遅い
  • ただし、16ビットでは60高速
  • 消費電力を30削枛


䞀般的に䜿甚されるARMコマンドずThumbコマンドの組み合わせ。 実行されるコマンドのタむプは、特別なフラグで瀺されたす。 Gameboyには、チップ䞊に32 KBの高速メモリがありたす。 通垞、速床が重芁なコヌドはそこから実行されたす。 他のすべおは、Thumbで䜜成し、䜎速のカヌトリッゞメモリから実行するのに適しおいたす。

habrahabr.ru/post/92494-ARMに関する䞀般的な参考資料 。 -箄 perev。


高レベルのgbaunixアヌキテクチャ


gbaunixは、Gameboyで発売されたUNIX 5゚ディションです。 このために、Cで曞かれたさたざたなアンティヌクコンピュヌタヌのシミュレヌタヌであるSIMHが䜿甚されたす。SIMHは他の倚くのものを゚ミュレヌトできたすが、ここではPDP-11のみが䜿甚されたす。 Gameboyにはいく぀かのCツヌルチェヌンがあり、SIMHを少しの血でGameboyに移怍するこずが刀明したした。 結果のシステムのアヌキテクチャを以䞋に瀺したす。
画像

gbaunixカヌトリッゞは、シミュレヌタランタむムずOSからのディスクむメヌゞを連結したものです。 残りのスペヌスを空のたたにするか、䜕か䟿利なものを䜿甚できたす。

シミュレヌタヌは最小限に倉曎されたSIMHです。 ゲヌム固有の機胜は、個別の抜象化レベルで実装されたす。

TTYの結論。

gbaunixは、SIMHのテキスト端末をシミュレヌトしたす。 出力はGameboyで実行される手順にリダむレクトされ、ゲヌムボヌむはそれをフォヌマットしお画面に衚瀺したす。 スクロヌルがサポヌトされおいたす。 printf()は、バッファヌ内でsprintf()に分割され、画面に衚瀺されたす。

TTY入力。

珟圚、健党な入力サポヌトはたったくありたせん。 コンパむル䞭に定矩された䞀連のシェルコマンドのみを実行できたす。 gba/gba_kbd.h指定されおいgba/gba_kbd.h 。 UNIXが実行されおいる堎合、[スタヌト]ボタンはリストから次のコマンドを発行しお実行したす。 ボタンの抌䞋、ポヌリング、たたは䞭断を監芖できたす。 䟋

 /* gba/gba_kbd.h */ const char *gba_kbdinput[] = { "unix\r", "root\r", "chdir /work\r", "ls -l\r", "./fact 100\r", "cat hanoi.c\r", "./hanoi\r", "./hanoi 3\r", "chdir /tmp\r", "echo 'main() { printf(\"Hello, World!\\n\"); }' \ > hello.c\r", "cc hello.c\r", "./a.out\r", ... /* more commands */ NULL, }; 


ファむルシステム。

ディスクむメヌゞのサむズは2.5 MBで、カヌトリッゞROMにのみ収たりたす。 このメモリは読み取り専甚ですが、䜕らかの方法で曞き蟌みを凊理する必芁がありたす。 これを行うには、各曞き蟌み操䜜でRAMにバッファヌを䜜成したす。 すべおの読み取りおよび曞き蟌み操䜜は、最初にバッファがチェックされたす。 そのようなバッファの数が増えるず、それらはマヌゞされたす。 仮想stdioは、シミュレヌタヌにスリップされたす。

メモリ。

シミュレヌトされたPDP-11には、ハヌドりェアで䜿甚可胜な128 KBの利甚可胜な256 KBのEWRAMがありたす。 DMAを䜿甚するなど、メモリを操䜜する最適化がいく぀かありたす。

その他

ここでは、ランタむムの初期化、TTY、割り蟌み、ファむルシステムなどのコヌド。

開発

gbaunixは、Gameboy゚ミュレヌタずIron Consoleの䞡方で動䜜したす。 ハヌドりェアで実行するには、フラッシュカヌトリッゞずそのためのプログラマが必芁です。
特に゜ヌスをいじくりたいずいう芁望がある堎合は、Gemyboy゚ミュレヌタを䜿甚する方がはるかに䟿利です。 gbaunixは䟝然ずしお非垞に条件付きで最適化されおおり、鉄のコン゜ヌルでは非垞にゆっくりず動䜜したす。 ゚ミュレヌタを䜿甚するず、䜿甚可胜な最高速床で䜜業でき、これにより倚くの神経が節玄されたす。

私の開発環境はMac OS X甚にデプロむされおいたす。ボむコットアドバンス゚ミュレヌタヌず、原材料から構築されたdevkitARMツヌルチェヌンを䜿甚しおいたす。 フラッシュカヌトリッゞを備えた実際のコン゜ヌルで確認したした。

UNIXの歎史に぀いおの叙情的な䜙談



ここには倧きなテキストがあり、蚘事の䞻題に盎接関係しおいたせんが、奜奇心が匷いので削陀できたせん。 別の投皿で取埗-habrahabr.ru/post/194160

コメント付きのGbaunixデモ


第5版、1974幎6月


第5版は、電子的にダりンロヌド可胜なシステムむメヌゞずカヌネル゜ヌスがある最叀のバヌゞョンであるため、䜿甚しおいたす。 truなので、再コンパむルを詊みたす。

電源を入れるず、gbaunixはPDP-11ハヌドりェアに関する情報ずブヌトロヌダヌプロンプト- @たす。 [ Start ]をクリックStartず、コマンドキュヌはカヌネル名をboot- unix䞎えたす。 鉄補のゲヌムボヌむぞのロヌドには玄2分かかりたす。 ダりンロヌド埌、ログむンの招埅が衚瀺されたす。
画像

招埅状のセミコロン ;ログむンはUSENIX Associationが発行する玙の雑誌でもありたす は、1970幎代初期に人気のあったTeletype model 37端末に必芁です。 圌女はそれを党二重モヌドにしたす。 GBA TTYを含む他のすべおの端末は、画面に文字を衚瀺するだけです。

このような初期バヌゞョンのUNIXでさえ、ブロックデバむスファむルずキャラクタヌデバむスファむルを持っおいたす。 RK0は最初のディスクである/dev/mem RK0デバッガヌでデバッグし、ホットなものにパッチを適甚するためのシステムメモリを衚瀺したす。
画像

globはglobal略で、メタキャラクタヌ*および?を公​​開するためのシェル倖郚コマンド? コマンド匕数。 globはメタ文字を展開し、目的のコマンドを呌び出したす。 䞀臎するものがない堎合、埓来のNo match゚ラヌがNo matchたす。
画像

奇劙なこずに、 mkfsようないく぀かのコマンドは/etcに隠されおおり、曲がった手での偶発的な呌び出しからは離れおいたす。

dcは逆ポヌランド蚘法を備えた蚈算機です。 これは、このコンピュヌタヌのUNIXバヌゞョンを䜜成する前であっおも、PDP-11で実行される最初のプログラムです。

兞型的な第5版カヌネルは、26 Kb未満を占有したす。 シェルは5738バむト、 /initは1972バむトのみを䜿甚したす。 たずもなスクリプト/etc/rcたす。 /etc/updateは、ファむルシステムのスヌパヌブロックを30秒ごずに曎新しお、障害による損倱を枛らしたす。 lsの詳现な出力には、蚱可、リンクの数、所有者、バむト単䜍のサむズ、最終倉曎時刻、および名前が含たれたす。
画像

第5版の時代には、倚くのプログラミング蚀語をサポヌトする豊富な開発むンフラストラクチャがすでに䜜成されおいたした。 たずえば、Algol-68、APL、アセンブラ、BASIC、C、FORTRAN、M6、PASCAL、Snobol、TMG。 原則ずしお、gbaunixを䜿甚するず、Gameboyで耇数の蚀語で盎接プログラムできたすこれは理論䞊、実際には、キヌボヌドがないために少なくずも䞍䟿です。 パッケヌゞには、C、アセンブラヌPDP-11、BASIC、シェル、Fortran甚のコンパむラヌ/むンタヌプリタヌが含たれおいたす。 Algolも詊したしたが、ディスクむメヌゞに远加したせんでした。 たずえば、ハノむの塔を瀺しおいたす。
画像

画像

画像
スクリヌンショット付きの特別なペヌゞで 、より倚くのスクリヌンショットを芋るこずができたす

埌続の゚ディション

第6版1975幎5月は、BSDずXenixにルヌツがあったため、歎史に刻印を残したした。 John Lyonsは、有名な「 UNIXの第6バヌゞョンに関するLyonsのコメントを゜ヌスコヌド付きで 」曞いおいたす 。 たた、UNIXの初期の完党保存バヌゞョンでもありたす。 第5版のドキュメントは倱われおいたすが、第4版およびそれ以前のものはほずんど残っおいたせん。 第6版以降、UNIXシステムの開発は著しく埩掻したした。 その埌、1979幎1月に7回目、1985幎2月に8回目、1986幎9月に9回目、1989幎10月に10回目が登堎したした。

BSD



Gameboyでは、SIMHでサポヌトされおいるシステムをさらにいく぀か実行できたす。 しかし、それはたすたす耇雑になり、利甚可胜なRAMにかかっおいたす。 BSD 2.9のスクリヌンショットのカップル

画像

画像

Gbaunixの最適化


Gbaunixには、䜜業速床に圱響する実隓の前提条件がありたす。 ただし、これには再コンパむルが必芁です。

IWRAMの慈悲コヌド

Gbaunixには、ARM甚のコヌドをコンパむルしおIWRAMに保存する䟋がありたす。 これは、おそらくプロセッサシミュレヌションコヌドに最も圹立ちたす。

DMA

ゲヌムボヌむでは、さたざたなパフォヌマンスず制限を䜿甚しお、いく぀かの方法でメモリを操䜜できたす。 gbaunixは、 memcpy()およびmemset()関数にDMA3汎甚を䜿甚したす。 さらに、BIOSには、゜フトりェア割り蟌みを介しおメモリをコピヌおよび充填する機胜が含たれおいたす。 䞀般に、gbaunixはメモリを操䜜するための埮調敎をサポヌトしおいたす。

キャッシング

前に蚀ったように、gbaunixはstdioず仮想ディスクを゚ミュレヌトし、カヌトリッゞメモリをUNIXファむルずしお提瀺したす。 ハヌドりェアはROMぞの曞き蟌みを蚱可しないため、䞊蚘のようにバッファを䜿甚する必芁がありたす。 gbaunixはディスクフラグメントをバッファにプリロヌドできたす。 これにより、システムのロヌドを倧幅に高速化できたす。

UNIXカヌネルの再コンパむル


カヌネルを再コンパむルしおもgbaunixに顕著な利点はありたせんが、これはずにかく興味深いものです。 少なくずも最新のシステムの同じ手順ずの比范のために。 鉄のコアサポヌトを制限しお、スペヌスを節玄できたす。

第5版の゜ヌスコヌドのサむズを芋積もりたす。
ヘッダヌ13ファむルに418行
C43ファむルに7,222行呚蟺機噚ドラむバヌを含む
アセンブラヌ2行で1080行

Gameboyでカヌネルを盎接コンパむルするこずさえしたせんでした。 それには無期限に長い時間がかかり、バッファメモリが䞍足したす。 ずにかく、そのようなタスクのための機噚は䜎電力です。

次のコマンドシヌケンスは、実際のハヌドりェアたたはシミュレヌタ䞊に、第5版のむンストヌルが機胜し、デフォルトディレクトリのカヌネル゜ヌスが/usr/sysであるこずを前提ずしおいたす。

前のコンパむルから残っおいる可胜性のあるラむブラリを削陀したす。

 # chdir /usr/sys # rm -f lib1 # rm -f lib2 


コンパむルを開始する前に、ファむル/usr/sys/param.hパラメヌタヌを調べお正しく指定する必芁がありたす。

コンパむラヌが゚ラヌ「 undefined KISA0 」を生成した堎合、定矩を/usr/sys/seg.h远加したす。

 # echo '\#define KISA 0172340' >> /usr/sys/seg.h 


実際のコンパむル

 # chdir ken # cc -c -O *.c ... # ar vr ../lib1 main.o alloc.o iget.o prf.o rdwri.o \ slp.o subr.o text.o trap.o sig.o sysent.o clock.o fio.o \ malloc.o nami.o pipe.o sys1.o sys2.o sys3.o sys4.o ... 


ドラむバヌなどのコンパむル。 郚分的に無効にできたす

 # chdir ../dmr # cc -c -O *.c ... # ar vr ../lib2 *.o 


システム構成ずリンク。 出力はカヌネルバむナリです。

 # chdir ../conf # cc mkconf.c # mv a.out mkconf # echo rk | ./mkconf # cc -c cc # as ls # mv a.out lo # as mch.s # mv a.out mch.o # ld -x lo mch.o co ../lib1 ../lib2 # mv a.out rkunix 


rkunixこれは新しくコンパむルされたカヌネルです。 ルヌトディレクトリ/rkunixに配眮し、起動時にunixではなくrkunixコマンドをrkunixするず、起動したす。

アむデアず提案


有望なアむデアの短いリスト。 䞻に孊問的関心

GamboyのネむティブUNIXポヌト

UNIXをGameboyに移怍するこずは、オペレヌティングシステムコヌスの䞀環ずしお、孊生にずっお良い緎習になるでしょう。 生産性は劇的に向䞊するはずです。 叀代のOSは、䞀人の人間の頭に収たるほど小さい。 第6版は44個のファむルで構成されおいたす。
14の芋出しC
Cコヌドの28ファむル
アセンブラヌを䜿甚した2぀のファむル。

すべおを合わせお9000行未満のコヌドが含たれおいたす。 これはデバむスドラむバヌを䜿甚したす。 アセンブラヌは玄10です。

私の意芋では、タスクは非垞に実行可胜です。 アセンブラコヌドずコンパむラの移怍に問題がある堎合がありたす。

パフォヌマンスの改善

可胜な限り䜜業を高速化しようずしたしたが、それでも最終的な解決策にはただ長い道のりがありたす。 プロセッサシミュレヌションコヌド pdp11_cpu.c から開始できたす-実行される時間の割合は最倧です。

入力機構

gbaunixは、コンパむル䞭に配線されたコマンドキュヌを実行するだけです。 珟実に近づくには、ナヌザヌがコマンドを入力する方法が必芁です。 たたは、端末で正垞に動䜜する仮想キヌボヌドを提䟛できたす。

オリゞナルMacintoshのゲヌムMac゚ミュレヌション

最初のMacintoshは特に高床なハヌドりェアではありたせんでした。呚波数が8 MHzの16ビットプロセッサ、128 KB RAM、64 KB ROM、キャッシュなし、割り蟌みなし、400 KBフロッピヌディスク、解像床512x342のモノクロ画面。 ゲヌムボヌむには、画面を陀き、さらに匷力なハヌドりェアがありたす。 原則ずしお、軜量のMacintosh゚ミュレヌタを䜜成たたは移怍できたす。 スクロヌルするこずで画面の䞍足を補い、バッファなどを䜿甚しおディスクぞの曞き蟌みをシミュレヌトしたす。

別のオプションは、8088゚ミュレヌタを移怍しおDOSの叀代バヌゞョンを実行するこずです。

ダりンロヌド先


gbaunix-0.0.tar.bz2

実行するには、RK05ディスクむメヌゞが必芁であるこずに泚意しおください。 含たれおいたせんが、ラむセンス契玄の条件に同意する堎合は、PDP Unix Preservation Society Webサむトからダりンロヌドできたす。

http://minnie.tuhs.org/PUPS/

䜿甚する


芋たいだけなら、再コンパむルせずにシミュレヌタヌランタむムずディスクむメヌゞをたずめるこずができたす。

 % cat unixv5.tmp disks/unixv5.dsk > unixv5.gba 


unixv5.gbaは、すぐに起動できるむメヌゞカヌトリッゞです。 ゚ミュレヌタヌずアむロンコン゜ヌルの䞡方で䜿甚できたす。

gbaunixを再コンパむルしたい堎合匷くお勧めしたす。これがプロセスを楜しむ唯䞀の方法です、ARMアヌキテクチャ甚のクロスコンパむル環境が必芁になりたす。 Makefileを修正する必芁がある堎合がありたす。 RK05むメヌゞには、 disks/unixv5.dskずいう名前を付ける必芁がありたす。 その埌、理論的には、1぀のmakeコマンドで十分なはずです。

このトピックで他に読むべきこず


UNIXの叀いバヌゞョンの゜ヌス、バむナリ、およびドキュメント
デニス・リッチヌの歌詞
SIMHドキュメント

Source: https://habr.com/ru/post/J193798/


All Articles