Bagaimana mikroprosesor pertama diprogram?

44

Ini baru saja saya sadari bahwa jika Anda menulis sistem operasi maka apa yang Anda tulis itu? Saya menanyakan ini ketika saya membaca buku dasar-dasar mikroprosesor dari tahun 1980 dan pertanyaan ini muncul di kepala saya:

Bagaimana chip mikroprosesor pertama diprogram?

Jawabannya mungkin jelas tetapi itu menggangguku.

Dekan
sumber
6
Jika saya diizinkan untuk menyambungkan karya saya sendiri, lihat jawaban saya untuk "Bagaimana kernel Linux dapat mengkompilasi sendiri?" pada Stack Overflow . Jawabannya tidak jelas sampai Anda memahami prinsip umum, pada titik mana Anda akan mengatakan "Yah, tentu saja ..."
dmckee
@ dmckee Tapi masih tidak menjawab pertanyaan bagaimana ia tahu apa yang harus dilakukan :) siapa yang memberi tahu komputer dengan switch apa yang harus dilakukan? Saya ingin sedikit lebih detail.
Dean
4
Jadi pertanyaannya adalah tentang merancang urutan booting dari chip pertama? Yah, itu tentu saja pertanyaan yang termasuk dalam situs ini , tetapi hasilnya seperti mendesain logika digital yang dibangun dari komponen .... memulainya dengan status yang dikenal, kemudian memberi input yang akan melakukan hal-hal yang bermanfaat. Aku akan pergi kepada yang lain untuk memberikan jawaban rinci, karena aku gemetar itu, tapi Anda jangan tahu bahwa komputer pertama dilaksanakan dalam tabung vakum, kan? Lalu ada satu generasi dalam transistor individu, semua sebelum chip mikro pertama. Para insinyur sudah tahu apa yang mereka lakukan.
dmckee
1
Pada prosesor non-mikro, tentu saja.
user253751

Jawaban:

56

Saya akan menjawab pertanyaan Anda secara harfiah dan membahas sebagian besar mikroprosesor, bukan komputer pada umumnya.

Semua komputer memiliki semacam kode mesin. Instruksi terdiri dari opcode dan satu atau lebih operan. Sebagai contoh, instruksi ADD untuk Intel 4004 (mikroprosesor pertama) dikodekan sebagai 1000RRRR di mana 1000 adalah opcode untuk ADD dan RRRR mewakili nomor register.

Program komputer pertama ditulis dengan tangan, meng-enkode 1 dan 0 untuk membuat program dalam bahasa mesin. Ini kemudian diprogram ke dalam chip. Mikroprosesor pertama menggunakan ROM (Read-Only Memory); ini kemudian digantikan oleh EPROM (Erasmable Programmable ROM, yang terhapus dengan sinar UV); sekarang program biasanya diprogram ke dalam EEPROM ( "Elektrik ...- EPROM" , yang dapat dihapus pada chip), atau khususnya memori Flash.

Kebanyakan mikroprosesor sekarang dapat menjalankan program dari RAM (ini cukup standar untuk semuanya kecuali mikrokontroler), tetapi harus ada cara memuat program ke dalam RAM di tempat pertama. Seperti yang ditunjukkan Joby Taffey dalam jawabannya, ini dilakukan dengan toggle switches untuk Altair 8080, yang ditenagai oleh Intel 8080 (yang mengikuti 4004 dan 8008). Di PC Anda, ada sedikit ROM yang disebut BIOS yang digunakan untuk menghidupkan komputer, dan memuat OS ke dalam RAM.

Bahasa mesin menjadi sangat cepat membosankan, sehingga program assembler dikembangkan yang mengambil bahasa assembler mnemonik dan menerjemahkannya, biasanya satu baris kode perakitan per instruksi, ke dalam kode mesin. Jadi alih-alih 10000001, orang akan menulis ADD R1.

Tetapi assembler pertama harus ditulis dalam kode mesin. Kemudian bisa ditulis ulang dalam kode assemblernya sendiri, dan versi bahasa mesin yang digunakan untuk merakitnya pertama kali. Setelah itu, program bisa berkumpul sendiri. Ini disebut bootstrap dan dilakukan dengan kompiler juga - mereka biasanya pertama kali ditulis dalam assembler (atau bahasa tingkat tinggi lainnya), dan kemudian ditulis ulang dalam bahasa mereka sendiri dan dikompilasi dengan kompiler asli hingga kompiler dapat mengkompilasi dirinya sendiri.

Karena mikroprosesor pertama dikembangkan lama setelah mainframe dan minicomputer ada, dan 4004 sebenarnya tidak cocok untuk menjalankan assembler, Intel mungkin menulis cross-assembler yang berjalan pada salah satu komputer besarnya, dan menerjemahkan kode assembly untuk 4004 menjadi gambar biner yang dapat diprogram ke dalam ROM. Sekali lagi, ini adalah teknik umum yang digunakan untuk port compiler ke platform baru (disebut cross-compiling ).

tcrosley
sumber
Jawaban bagus tcrosley! Mengoreksi berita gembira tentang EEPROM vs EPROM. +1
tyblu
1
Dan jika Anda benar-benar ingin memprogram mikrokontroler tanpa komputer lain (selain otak Anda) Anda dapat melakukannya dengan membangun sirkuit yang memasukkan program ke dalamnya secara langsung. Jika diprogram melalui jtag maka Anda dapat membalik sakelar untuk meniru perintah jtag yang diperlukan untuk memprogram perangkat. Jika menggunakan ram eksternal maka Anda dapat menggunakan banyak demultiplexors dan array resistor yang besar yang diikat tinggi atau rendah untuk mewakili bit instruksi (dan mungkin menggunakan kecepatan clock rendah karena perangkat keras Anda akan lambat).
nategoose
3
@tyblu: Saya sangat yakin sekering-PROM sebelum EPROM. Bentuk paling sederhana dari ROM pada dasarnya adalah array dioda yang dihuni secara selektif (pada masa-masa awal, dioda akan disolder ke grid untuk mewakili satu polaritas bit; dioda yang hilang mewakili polaritas lainnya). Sebuah sekering-PROM menempatkan array dioda pada sebuah chip, tetapi memiliki transistor baris yang jauh lebih besar daripada dioda di persimpangan. Seseorang dapat secara selektif menghapus dioda dengan mengatur kabel alamat dan kemudian memukul dengan sangat keras kabel data yang terhubung ke dioda yang ingin dihapus.
supercat
@tyblu: Perhatikan bahwa fuse-PROM tidak seperti OTPROM modern, yang hanya berupa chip EPROM dalam paket yang tidak berjendela. Perangkat EPROM / OTP diprogram dengan mengisi gerbang gerbang transistor tertentu secara elektrik (yang memiliki kapasitansi cukup, dan sedikit kebocoran, untuk menahan muatan yang pada dasarnya tidak terbatas). Sebaliknya, chip sekering-PROM diprogram dengan secara fisik menghancurkan koneksi ke dioda yang tidak diinginkan.
supercat
1
lihat 'ROM' ini dari masa-masa transistor diskrit: en.wikipedia.org/wiki/Core_rope_memory
JustJeff
23

Awalnya, program ditulis di atas kertas, dan kemudian dialihkan ke metode input apa pun yang tersedia di komputer. Mulai dari kenop, sakelar, dan kabel jumper di komputer pertama, ke kartu punch, ke papan tombol / papan.

Ilustrasi di bawah ini menunjukkan apa yang digunakan oleh programmer nyata saat ini :

W5VO
sumber
10
Sialan, emacs ..
tyblu
6
Saya memprogram programmer. (Dan para programmer itu, programer programer, programer programer.)
Mateen Ulhaq
4
Saya membuat programmer sendiri.
W5VO
16

Yah saya ada di sekitar ketika micros pertama kali keluar, kami menulis perakit silang dan kompiler pada mainframe dan mini, kemudian kami bootstrap ke perangkat keras 8-bit, orang tidak benar-benar repot membangun kompiler / perakit pada micros sampai mereka memiliki cukup penyimpanan lokal untuk buat itu berguna

Paul
sumber
14

Salah satu bentuk awal dari memori hanya baca adalah kisi di mana alamat akan memilih baris (menariknya rendah), dan kolom mewakili data. Setiap kolom akan memiliki pull-up, dan setiap persimpangan akan memiliki dioda yang disolder untuk mewakili "nol", atau tidak ada dioda untuk mewakili "satu" [level bit dapat dibalik jika diinginkan, dalam kasus di mana itu akan mengurangi diperlukan jumlah dioda]. Setiap pola bit yang diinginkan dapat "diprogram" dengan menyolder dioda yang tepat.

Desain ini dibawa ke dunia sirkuit terpadu dalam bentuk sekering-PROM. Pada dasarnya PROM sekering adalah sebuah sirkuit seperti di atas, dibangun di atas sebuah chip, kecuali bahwa semua dioda diisi, dan setiap dioda memiliki sekering lemah secara seri dengannya. Saat dikirim, PROM akan membaca "0" di semua lokasi. Satu bisa, bagaimanapun, secara selektif menghapus dioda dengan memilih alamat yang sesuai dan mengendarai jalur data yang sesuai "keras" tinggi [catatan: Saya pikir setiap bit mungkin memiliki transistor sendiri, daripada dioda, tetapi prinsipnya sama].

PROM yang diprogram sekering digantikan oleh memori semikonduktor, yang menyimpan bit dengan menanamkan muatan pada kapasitor internal. Tidak hanya kenangan semacam itu yang lebih kompak daripada fuse-PROM, tetapi jika disimpan dalam paket transparan-UV, memori tersebut dapat dihapus dan digunakan kembali. Perhatikan bahwa bahkan apa yang disebut "one-time programmable" memory hampir selalu menggunakan desain yang sama ini, tetapi hanya disimpan dalam paket UV-opak.

dua pria menunjuk ke sebuah matriks dioda besar toko kontrol diode-matrix dari 1950 Whirlwind Computer MIT

transistor-matrix dengan transistor SMD kecil transistor-matrix control store tahun 2005 CPU MT15

supercat
sumber
harap Anda tidak keberatan sedikit perubahan yang saya buat pada posting Anda.
davidcary
7

Saya tidak yakin ada orang yang menjawab pertanyaan sebenarnya OP, yang sepertinya adalah "Bagaimana komputer tahu cara memulai?" , jadi saya akan coba-coba.

Mulailah dengan analogi. "Bagaimana transistor tahu bagaimana memulainya?" Tentu saja tidak, itu hanya bekerja sesuai dengan fisika, dan insinyur membangun sirkuit sehingga dimulai pada kondisi yang diketahui.

Komputer tahu bagaimana memulai karena mereka sirkuit (sangat rumit, tentu saja) dan mereka dibangun untuk memulai dalam keadaan tertentu. Dalam mesin modern yang menyatakan mungkin salah satu di mana bus utama memetakan kembali bagian ruang alamat untuk menggunakan ROM pada motherboard sebagai memori rendah (ROM telah dibakar dengan BIOS). Pada mesin generasi pertama, keadaan awal mungkin adalah CPU terhenti, penghitung program nol, dan sub-sistem sakelar memori aktif.

dmckee
sumber
6

Sistem operasi adalah program komputer yang berjalan langsung pada prosesor. Itu dapat ditulis dalam bahasa apa pun yang dapat dikompilasi atau dikumpulkan ke instruksi mesin. Assembly dan C adalah pilihan umum.

Kode dimuat ke prosesor instruksi tunggal pada suatu waktu dari toko - ROM atau RAM.

The Z3 , prosesor diprogram pertama dibangun dari relay elektromekanik dan membaca instruksi dari film menekan.

Altair 8800, komputer pribadi pertama, diprogram dengan mengaktifkan sakelar.

Untuk mempelajari bagaimana prosesor dibangun dari logika digital, lihat https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners

Untuk sejarah, lihat http://en.wikipedia.org/wiki/History_of_computing_hardware

Toby Jaffey
sumber
5

Inilah sedikit tentang komputer yang benar-benar tua:

Sejauh yang saya tahu, di masa lalu, Anda memiliki panel depan komputer besar yang digunakan untuk memprogram mereka. Pada dasarnya, setiap sel memori di komputer itu terhubung ke sakelar. Anda menghidupkan daya memori dan kemudian menggunakan sakelar untuk mengatur data di setiap sel. Dengan cara ini, Anda akan memasukkan program sedikit demi sedikit ke dalam memori komputer. Kemudian Anda akan menetapkan titik awal program dan memulai eksekusi.

Seiring kemajuan teknologi, program bootloader disebut dikembangkan. Mereka adalah program singkat yang intinya adalah memulai program lain dari memori komputer. Masalah dengan memasukkan program sedikit demi sedikit (dan kemudian lebih dari satu bit menggunakan angka oktal dan kemudian heksadesimal) adalah bahwa itu sangat lambat dan ada kemungkinan besar bahwa operator akan membuat kesalahan saat memuat program. Jadi program pendek akan digunakan untuk memuat program yang lebih besar yang tersimpan dalam memori komputer. Seiring berjalannya waktu, porsi kode yang harus dimasukkan dengan tangan berkurang dan di komputer modern kita sering memiliki bootloader yang ditulis dalam semacam ROM atau bahkan memori flash.

AndrejaKo
sumber
4
Di mesin 'panel depan', seperti sistem S-100 sebelumnya, sakelar memungkinkan Anda mengendalikan bus sistem. Satu sakelar akan membiarkan Anda menangguhkan prosesor. Ketika prosesor ditangguhkan, Anda kemudian dapat secara manual memasukkan alamat pada bus alamat (melalui sakelar), memasukkan data pada bus data (sakelar lebih banyak), dan kemudian secara manual menyebabkan siklus tulis pada bus (sakelar lain), atau siklus baca untuk menarik data kembali ke 8 LED individu dan membaca biner, dll. Melakukan ini, Anda dapat menyimpan kode mesin yang cukup dalam RAM, menangguhkan prosesor, dan pergi dari sana.
JustJeff
4

Saya beberapa tahun yang lalu menemukan seorang programmer mikrokontroler yang memiliki tampilan empat segmen tujuh digit, dan tombol hex. Saya yakin ini tidak memiliki mikrokontroler di papan dan memungkinkan Anda untuk memasukkan kode mesin secara langsung satu byte pada suatu waktu.

Jadi ini akan memungkinkan Anda untuk (dengan susah payah) menyusun daftar kode Op secara manual satu per satu dan memasukkannya ke dalam chip.

Saya tidak tahu apakah Anda masih bisa mendapatkannya, tapi saya menduga sesuatu yang serupa digunakan kembali ketika mikrokontroler relatif baru.

BG100
sumber
1
Kedengarannya seperti KIM-1 atau Cosmac ELF, keduanya termasuk mikroprosesor (MOS 6502 dan RCA [CD] 1802). KIM: oldcomputers.net/kim1.html ELF: cosmacelf.com
mctylr
Itu mungkin sesuatu seperti apa yang dikatakan mctylr. Pada mesin jenis ini, biasanya ada program 'monitor' kecil dalam ROM. Ketika Anda memasukkan byte dengan tombol, itu sebenarnya 6502 (atau 8085 atau apa pun) membaca tombol, memodifikasi memori, memperbarui LED, dll.
JustJeff
1

Mikroprosesor pertama akan diprogram dengan bantuan komputer yang ada yang tidak didasarkan pada mikroprosesor. Sebelum CPU pertama diproduksi pada satu chip, sudah ada arsitektur komputer canggih yang dibangun dari komponen diskrit daripada mikroprosesor. Lihatlah, oh, katakanlah, IBM 360.

Kaz
sumber