最初のマイクロプロセッサはどのようにプログラムされましたか?


44

これは、オペレーティングシステムを記述している場合、何を記述しているのかということです。1980年からマイクロプロセッサの基礎の本を読んでいるときにこれを尋ねると、この質問が頭に浮かびました。

最初のマイクロプロセッサチップはどのようにプログラムされましたか?

答えは明らかかもしれませんが、それは私を悩ませています。


6
自分の作業をプラグインできる場合は、「Linuxカーネルはどのようにコンパイルできますか?」に対する回答を参照しくださいスタックオーバーフロー。一般的な原則を理解するまで答えは明らかではありません。その時点で、「もちろん...」
-dmckee

@dmckeeしかし、それはまだ何をすべきかをどのようにして知っていたのかという質問には答えていません:) もう少し詳細が必要です。
ディーン

4
質問は、最初のチップのブートシーケンス設計についてですか?まあ、それは確かにこのサイトに属する質問ですが、コンポーネントから構築されたデジタルロジックを設計するように進行します。...それを既知の状態で開始し、有用なことを行う入力をフィードします。詳細な答えを提供するために他の人に任せますが、それについては不安ですが、最初のコンピューターが真空管に実装されたことを知っていますよね?その後、最初のマイクロチップの前に、個々のトランジスタの世代がありました。エンジニアはすでに何をしているかを知っていました。
dmckee

1
もちろん、マイクロプロセッサー以外では。
user253751

回答:


56

私はあなたの質問を文字通り受け止めて、コンピューター全般ではなく、ほとんどマイクロプロセッサーについて議論します。

すべてのコンピューターには、ある種のマシンコードがあります。命令は、オペコードと1つ以上のオペランドで構成されます。たとえば、Intel 4004(最初のマイクロプロセッサ)のADD命令は1000RRRRとしてエンコードされました。1000はADDのオペコードで、RRRRはレジスタ番号を表します。

最初のコンピュータープログラムは手書きで記述され、1と0を手でエンコードして機械語でプログラムを作成しました。これはチップにプログラムされます。最初のマイクロプロセッサはROM(読み取り専用メモリ)を使用しました。これは後にEPROM(消去可能なプログラマブルROM、UV光で消去される)に置き換えられました。現在、プログラムは通常、EEPROM「電気的...- EPROM」、チップ上で消去可能)、または特にフラッシュメモリにプログラムされています。

ほとんどのマイクロプロセッサーは、RAMからプログラムを実行できるようになりました(これはマイクロコントローラーを除くすべての標準です)が、そもそもプログラムをRAMにロードする方法が必要です。Joby Taffeyが彼の答えで指摘したように、これはIntel 8080(4004と8008に続く)を搭載したAltair 8080のトグルスイッチで行われました。PCには、コンピューターを起動し、OSをRAMに読み込むために使用されるBIOSと呼ばれるROMが少しあります。

機械語は非常に速く退屈になるため、ニーモニックアセンブラー言語を使用して、通常は命令ごとに1行のアセンブリコードを機械語に変換するアセンブラープログラムが開発されました。したがって、10000001の代わりに、ADD R1と記述します。

しかし、最初のアセンブラーはマシンコードで作成する必要がありました。その後、独自のアセンブラコードで書き換えることができ、マシン言語バージョンを使用して初めてア​​センブラコードをアセンブルしました。その後、プログラムはそれ自体を組み立てることができます。これはブートストラップと呼ばれ、コンパイラでも行われます。通常、最初にアセンブラ(または別の高レベル言語)で記述され、次に独自の言語で書き換えられ、コンパイラがコンパイルできるまで元のコンパイラでコンパイルされます。

最初のマイクロプロセッサはメインフレームとミニコンピューターが登場してからずっと後に開発され、4004はアセンブラーの実行にはあまり適していなかったため、Intelはおそらく大型コンピューターの1つで実行されるクロスアセンブラーを作成し、アセンブリコードを翻訳しました4004をバイナリイメージに変換し、ROMにプログラムできます。繰り返しますが、これはコンパイラーを新しいプラットフォームに移植するために使用される一般的な手法です(クロスコンパイルと呼ばれます)。



1
また、(脳以外に)別のコンピューターなしでマイクロコントローラーを本当にプログラムしたい場合は、プログラムを直接コンピューターに供給する回路を構築することでできます。jtagを介してプログラムされた場合、デバイスをプログラムするために必要なjtagコマンドを模倣するためにスイッチを切り替えることができます。外部RAMを使用する場合は、命令のビットを表すために多くのデマルチプレクサーと抵抗器の大きなアレイを使用して高または低に接続できます(ハードウェアが低速になるため、おそらく低速のクロック速度を使用します)。
ナテグース

3
@tyblu:私はかなり特定のfuse-PROMがEPROMよりも先だった。ROMの最も単純な形式は、基本的に選択的に配置されたダイオードアレイです(初期には、ダイオードは文字通りグリッドにはんだ付けされてビットの1つの極性を表し、欠落したダイオードは他の極性を表します)。ヒューズPROMは、チップ上にダイオードアレイを配置しますが、交差部のダイオードよりもはるかに優れた行トランジスタを備えています。アドレスワイヤを設定し、削除したいダイオードに接続されているデータワイヤを非常に強く押すことにより、ダイオードを選択的に削除できます。
スーパーキャット

@tyblu:fuse-PROMは電気的に、ウィンドウのないパッケージの単なるEPROMチップである最新のOTPROMのようなものではないことに注意してください。EPROM / OTPデバイスは、特定のトランジスタのゲートを電気的に充電することによりプログラムされます(十分に容量があり、漏れ電流がほとんどないため、本質的に無期限に電荷を保持できます)。対照的に、ヒューズPROMチップは、不要なダイオードへの接続を物理的に破壊することによりプログラムされます。
スーパーキャット

1
ディスクリートトランジスタの時代からこの「ROM」をチェックしてください:en.wikipedia.org/wiki/Core_rope_memory
JustJeff

23

もともと、プログラムは紙に書かれてから、コンピューターが利用できるあらゆる入力方法に置き換えられました。これは、最初のコンピューターのノブ、スイッチ、ジャンパー線から、パンチカード、キーパッド/ボードに行きました。

以下の図は、現在の実際のプログラマーが使用するものを示しています。


10
Dammit、
emacs。

6
プログラマーをプログラムします。(プログラマーをプログラムするプログラマーをプログラムするプログラマー)
Mateen Ulhaq

4
私は自分のプログラマーを作ります。
W5VO

16

さて、マイクロが最初に出てきた頃、メインフレームとミニでクロスアセンブラとコンパイラを作成し、それらを8ビットハードウェアにブートストラップしました。便利にする


14

読み取り専用メモリの初期の形式の1つは、アドレスが行を選択し(ローに引き下げる)、列がデータを表すグリッドでした。各列にはプルアップがあり、各交差点には「ゼロ」を表すダイオードがはんだ付けされているか、「1」を表すダイオードがありません。必要なダイオードの数]。適切なダイオードにはんだ付けすることにより、任意のビットパターンを「プログラム」できます。

この設計は、ヒューズPROMの形で集積回路の世界に持ち込まれました。基本的に、ヒューズPROMは上記のような回路で、すべてのダイオードが実装され、すべてのダイオードに弱いヒューズが直列に接続されていることを除いて、チップに組み込まれています。出荷時、PROMはすべての場所で「0」を読み取ります。ただし、適切なアドレスを選択し、適切なデータラインを「ハード」ハイに駆動することで、ダイオードを選択的に削除できます[注:各ビットには、ダイオードではなく独自のトランジスタがあったと考えられますが、原理は同じです]。

ヒューズでプログラムされたPROMは、内部コンデンサに電荷を注入することでビットを保存する半導体メモリに引き継がれました。このようなメモリは、ヒューズPROMよりもコンパクトであるだけでなく、UV透過パッケージに格納されている場合、消去されて再利用される可能性があります。いわゆる「ワンタイムプログラマブル」メモリでさえ、ほとんど常にこの同じデザインを使用しますが、単にUV不透明パッケージに格納されていることに注意してください。

大きなダイオードマトリックスを指す2人の男性 1950 MIT Whirlwind Computerのダイオードマトリックスコントロールストア

小さなSMDトランジスタを備えたトランジスタマトリックス 2005年のMT15 CPUのトランジスタマトリックス制御ストア


私があなたの投稿に加えた小さな調整を気にしないでください。
-davidcary

7

OPの本当の質問に誰かが答えているかどうかはわかりませんが、それは「コンピューターはどのように始めるかを知っているのですか?」、それで私はそれにクラックを取るでしょう。

類推から始めます。「トランジスタは、どのように開始するのかを知っていますか?」もちろん、そうではなく、物理学に従って動作するだけで、エンジニアは既知の状態で起動するように回路を構築します。

コンピューターは回路であるため(もちろん非常に複雑です)、特定の状態で起動するように構築されているため、起動方法を知っています。現代のマシンでは、その状態は、メインバスがアドレス空間の一部をマザーボード上のROMをローメモリ(ROMがBIOSで焼き付けられたもの)としてユーザーに再マップする状態になります。第1世代のマシンでは、初期状態がCPU停止、プログラムカウンターがゼロ、メモリトグルサブシステムがアクティブであった可能性があります。


6

オペレーティングシステムは、プロセッサ上で直接実行されるコンピュータープログラムです。コンパイルまたはアセンブルしてマシン命令に変換できる任意の言語で作成できます。アセンブリとCは一般的な選択肢です。

コードは、ストアから一度に1つの命令(ROMまたはRAM)でプロセッサーにロードされます。

Z3は、第1のプログラム可能なプロセッサは、電気機械式リレーから構築し、パンチフィルムからの指示を読んでました。

最初のパーソナルコンピューターであるAltair 8800は、スイッチを切り替えることでプログラムされました。

プロセッサがデジタルロジックから構築される方法については、https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginnersをご覧ください。

履歴については、http://en.wikipedia.org/wiki/History_of_computing_hardwareを参照してください


5

古いコンピューターについて少し説明します。

私の知る限り、昔は、プログラムに使用される大きなコンピューターのフロントパネルがありました。基本的に、これらのコンピューターの各メモリセルはスイッチに接続されていました。メモリに電力を供給し、スイッチを使用して各セルにデータを設定します。この方法では、プログラムを少しずつコンピューターのメモリに入力します。次に、プログラムの開始点を設定し、実行を開始します。

技術が進歩するにつれて、いわゆるブートローダープログラムが開発されました。それらは、コンピュータのメモリから別のプログラムを起動することが全体のポイントである短いプログラムです。プログラムを少しずつ(および8進数以降の16進数を使用して1ビット以上)入力する際の問題は、処理が非常に遅く、プログラムの読み込み中にオペレーターがミスをする可能性が高いことでした。そのため、短いプログラムを使用して、コンピューターのメモリに保存されている大きなプログラムをロードします。時間が経つにつれて、手で入力しなければならないコードの部分が減り、現代のコンピューターでは、ブートローダーがROMやフラッシュメモリに書き込まれることがよくあります。


4
初期のS-100システムのような「フロントパネル」マシンでは、スイッチを使用してシステムバスを制御できます。1つのスイッチでプロセッサを一時停止できます。プロセッサがサスペンドされている間に、アドレスバスに手動でアドレスを配置し(スイッチを介して)、データバスにデータを配置し(より多くのスイッチ)、次にバスに手動で書き込みサイクルを発生させます(別のスイッチ)。データを8個の個別のLEDに戻し、バイナリを読み取るなどの読み取りサイクル。これを行うと、RAMに十分なマシンコードを保存し、プロセッサのサスペンドを解除して、そこから進むことができます。
ジャストジェフ

4

数年前、4桁の7セグメントディスプレイと六角キーパッドを備えたマイクロコントローラープログラマーに出会いました。これにはマイクロコントローラが搭載されていなかったと確信しており、一度に1バイトずつマシンコードを直接入力できました。

したがって、これにより、(苦労して)Opコードのリストを1つずつ手動でコンパイルし、チップに入力することができます。

まだ入手できるかどうかはわかりませんが、マイクロコントローラが比較的新しいときに似たようなものが使用されたと推測しています。


1
おそらくマイクロプロセッサ(MOS 6502およびRCA [CD] 1802)を含むKIM-1またはCosmac ELFのような音。KIM:oldcomputers.net/kim1.html ELF:cosmacelf.com
mctylr

それはおそらくmctylrが言ったことのようなものでした。このタイプのマシンでは、通常、ROMに小さな「モニター」プログラムがありました。キーパッドでバイトを入力したとき、実際にはキーの読み取り、メモリの変更、LEDの更新など、6502(または8085など)
でした

1

最初のマイクロプロセッサは、マイクロプロセッサに基づいていない既存のコンピュータの助けを借りてプログラムされていたでしょう。最初のCPUが1つのチップで製造される前に、マイクロプロセッサではなくディスクリートコンポーネントから構築された高度なコンピュータアーキテクチャがすでに存在していました。IBM 360をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.