Seperti yang saya pahami, kode BIOS / bitstream yang disimpan dalam ROM harus generik (bekerja bersama dengan beberapa tipe CPU atau ISA). Selain itu, saya melihat disebutkan di web bahwa ada kemungkinan untuk membuang kodenya (dan untuk "membongkar" itu).
Jadi, dalam bahasa apa, set instruksi atau kode mesin ditulis? Tidakkah itu membutuhkan prosesor untuk menjalankan operasinya? Jika demikian, saya kira itu akan menggunakan CPU eksternal, lalu bagaimana ia tahu set instruksi spesifik yang digunakan?
Mungkin memiliki prosesor internal?
As I understand, the BIOS code/bitstream that is held in the ROM should be generic (work alongside with multiple CPU types or ISAs).
Saya akan mengatakan "Tidak, justru sebaliknya"Jawaban:
BIOS dulu ditulis secara eksklusif dalam bahasa assembly, tetapi transisi dibuat sejak lama untuk menulis mayoritas kode dalam beberapa bahasa tingkat yang lebih tinggi, dan meninggalkan ditulis dalam perakitan sebagai beberapa bagian dari itu mungkin, lebih disukai hanya bootstrapper, (ratusan instruksi pertama yang dilompati CPU setelah start / reset,) dan rutinitas apa pun yang berhubungan dengan kebiasaan khusus dari arsitektur yang mendasarinya.
BIOS sudah ditulis terutama di C pada awal tahun sembilan puluhan. (Saya menulis BIOS di 90% C, perakitan 10% di awal tahun sembilan puluhan.)
Apa yang juga sangat membantu dalam arah ini adalah:
Pustaka C yang menargetkan arsitektur tertentu dan menyertakan fungsi untuk menangani kekhasan arsitektur itu, misalnya, fungsi untuk membaca / menulis byte ke / dari port I / O arsitektur x86. Microsoft C selalu menawarkan fungsi perpustakaan untuk hal-hal semacam itu.
Kompiler C yang tidak hanya menargetkan arsitektur CPU tertentu tetapi bahkan menawarkan ekstensi ke bahasa C yang dapat Anda gunakan untuk menulis kode yang memanfaatkan fitur CPU khusus. Misalnya, arsitektur x86 mendukung hal-hal yang dikenal sebagai interupsi, yang menjalankan rutin yang dikenal sebagai interrupt handler, dan itu mengharuskan mereka untuk memiliki urutan instruksi masuk / keluar khusus. Sejak awal, Microsoft C mendukung kata kunci khusus yang dapat Anda gunakan untuk menandai fungsi sebagai pengendali interupsi, sehingga dapat dipanggil secara langsung oleh interupsi CPU, sehingga Anda tidak perlu menulis rakitan apa pun untuk itu.
Saat ini saya akan berasumsi bahwa sebagian besar BIOS ditulis dalam C ++, jika tidak dalam bahasa tingkat yang lebih tinggi.
Sebagian besar kode yang membentuk BIOS khusus untuk perangkat keras yang mendasarinya, sehingga tidak benar-benar harus portabel: dijamin bahwa ia akan selalu berjalan pada jenis CPU yang sama. CPU dapat berevolusi, tetapi selama ia mempertahankan kompatibilitas ke belakang dengan versi sebelumnya, ia masih dapat menjalankan BIOS yang tidak dimodifikasi. Plus, Anda selalu dapat mengkompilasi ulang bagian-bagian BIOS yang ditulis dalam C untuk berjalan secara native pada CPU baru yang muncul, jika perlu.
Alasan mengapa kami menulis BIOS dalam bahasa yang lebih tinggi daripada perakitan adalah karena lebih mudah untuk menulisnya dengan cara ini, bukan karena mereka benar-benar harus portabel.
sumber
Sementara secara teori seseorang dapat menulis BIOS dalam bahasa apa pun, kenyataannya modern adalah kebanyakan BIOS ditulis menggunakan Assembly, C, atau kombinasi keduanya .
BIOS harus ditulis dalam bahasa yang dapat dikompilasi ke kode mesin , yang dipahami oleh mesin perangkat keras fisik. Ini menghilangkan bahasa yang ditafsirkan secara langsung atau menengah (Perl, Python, PHP, Ruby, Java, C #, JavaScript, dll) yang sesuai untuk menulis BIOS. (Meskipun, secara teori, seseorang dapat mengimplementasikan salah satu dari bahasa-bahasa ini untuk mengkompilasi langsung ke kode mesin statis atau seseorang dapat menanamkan penerjemah ke dalam BIOS. Sebagai contoh, ada proyek GCJ yang ditinggalkan untuk Java.)
Sebagian besar OEM menerapkan BIOS dengan memperluas kepemilikan, implementasi BIOS umum oleh perusahaan-perusahaan seperti American Megatrends dan Phoenix Techologies . (Anda mungkin pernah melihat salah satu perusahaan yang ditampilkan di layar boot pertama komputer sebelumnya.) Kode sumber untuk implementasi ini tidak tersedia untuk umum, tetapi beberapa di antaranya telah bocor. Saya tidak ingin menautkan ini langsung ke kode sumber C dan assembly, tetapi ada tempat - tempat di Internet di mana kode sumber ini dibahas bagi mereka yang ingin mengintip.
Beberapa produsen perangkat keras, seperti yang menargetkan kinerja tinggi dan pasar game, memenuhi implementasi BIOS mereka dengan fitur kustomisasi, statistik, dan antarmuka pengguna yang menarik yang dirancang untuk implementasi yang tepat. Banyak fitur ini melampaui apa yang ditawarkan dalam produk-produk generik yang diproduksi oleh American Megatrends dan lainnya. Sayangnya, perusahaan-perusahaan ini sering melihat pelepasan kode sumber mereka sebagai risiko keamanan , sehingga sedikit yang diketahui tentang implementasi kelas atas ini karena sedikit yang dibagikan tentang mereka. Seseorang tentu saja dapat menemukan cara untuk mengakses dan meng-compile implementasi BIOS seperti itu tetapi melakukannya mungkin sulit dan mungkin ilegal.
Kembali ke pertanyaan awal, karena kebutuhan untuk menghasilkan kode mesin asli, BIOS harus diimplementasikan dalam bahasa pemrograman yang didukung oleh kompiler kode mesin asli . Meskipun ada banyak bahasa seperti itu dan sementara saya yakin selama beberapa dekade terakhir, beberapa bahasa telah digunakan dalam percobaan, setiap implementasi BIOS terbuka yang saya dapat temukan secara khusus bergantung pada kombinasi C dan / atau rakitan. Implementasi open-source BIOS yang saya lihat untuk membentuk kesimpulan ini termasuk OpenBIOS , tinyBIOS , coreboot , Intel BIOS , dan Libreboot. Saya juga melihat beberapa implementasi BIOS yang sangat tua yang tidak relevan hari ini tetapi juga mengikuti aturan C dan / atau assembly.
Saya pikir itu juga relevan untuk melihat perangkat lunak lain yang dibangun untuk berinteraksi langsung dengan perangkat keras. Kita tahu, misalnya, bahwa Kernel Linux , OS X kernel , dan kernel Windows sebagian besar C dengan beberapa rakitan dan beberapa bahasa tingkat yang lebih tinggi untuk tugas-tugas tertentu. Kita juga tahu bahwa driver perangkat keras di Linux dan driver perangkat keras di Windows sebagian besar ditulis dalam C.
Kembali ke BIOS, saya pikir juga penting untuk mempertimbangkan ekonomi dari bahasa pemrograman yang dipilih. BIOS umumnya ditulis sebagai kebutuhan untuk melengkapi penjualan perangkat keras. Sistem BIOS modern dikenal sebagian besar ditulis dalam bahasa C dan / atau rakitan. Perpindahan ke alat lain akan menambah biaya signifikan pada apa yang umumnya dianggap sebagai produk komoditas yang dapat sangat mempengaruhi penjualan. Tanpa masuk ke Economics 101, saya dapat meyakinkan Anda bahwa mungkin tidak layak bagi OEM untuk menyimpang dari alat yang sudah terbukti benar yang telah terbukti selama beberapa dekade.
Tentu saja ada dan akan menjadi proyek hobi untuk menulis BIOS juga. Ini juga, sejauh ini, tampaknya memilih C dan / atau perakitan. Mungkin suatu hari teknologi lain akan digunakan. Tapi hari ini, pilihannya jelas.
sumber
BIOS aktual untuk komputer akan ditulis dalam beberapa bahasa (mungkin C atau assembly) yang dikompilasi dengan kode biner yang bergantung pada arsitektur; kode ini tidak dapat berjalan pada arsitektur lain (dan bisa dibilang tidak benar-benar perlu, karena sudah sangat spesifik untuk mesin yang dikirim).
Tetapi apakah Anda mungkin berpikir tentang ROM Opsi (yang kadang-kadang disebut BIOS, seperti dalam "Video BIOS" untuk ROM opsi GPU)?
Untuk ROM opsi BIOS yang kompatibel dan lama, mungkin merupakan kode yang dapat dieksekusi bergantung pada ISA (sekali lagi dihasilkan oleh bahasa apa pun yang dapat dikompilasi untuk menargetkan arsitektur yang diinginkan); PCI juga memungkinkan memasukkan kode untuk beberapa ISA dan memungkinkan host untuk memilih gambar biner yang sesuai selama proses boot.
Untuk ROM opsi yang kompatibel dengan UEFI, ada juga format kode byte arsitektur-independen yang dapat dijalankan pada arsitektur yang berbeda, tetapi kode yang bergantung pada ISA juga masih dapat digunakan.
sumber