Apa sebenarnya VGA itu, dan apa perbedaannya dengan kartu video?

30

Tutorial pengembangan sistem operasi menunjukkan dengan tepat untuk mencapai data layar dengan menulis langsung ke VGA atau EGA atau Super VGA, tetapi apa yang tidak saya dapatkan adalah apa perbedaan nyata antara menulis ke alamat tetap untuk tampilan, dan menulis ke kartu video secara langsung, baik di dalam pesawat atau dilepas? Saya hanya ingin klarifikasi dasar dari kebingungan saya tentang masalah ini

Dan karena ini bukan kasus sederhana dengan variabel dalam kartu, antarmuka-penghubung, bus, arsitektur, sistem pada chip, sistem tertanam, dll., Saya merasa sulit untuk menemukan cara untuk memahami ide di balik 100% ini . Apakah alamat yang tetap berbeda dari GPU kelas atas ke yang lebih rendah? Kenapa dan mengapa tidak?

Ini adalah salah satu tujuan saya dalam pemrograman untuk meng-host kernel dan membuat sistem operasi, dan memang mimpi yang tidak masuk akal. Gagal memahami terminologi tidak hanya menghalangi saya di beberapa bidang, tetapi membuat saya tampak bodoh dalam hal perangkat keras.

EXTRA: Beberapa dari jawaban saat ini berbicara tentang penggunaan prosesor yang dapat dialamatkan memori maksimum dalam spesifikasi 16-bit. Masalahnya adalah beberapa masalah yang timbul lainnya:

1. Bagaimana dengan memori kartu itu sendiri? Itu tidak akan membutuhkan RAM sistem untuk data layar itu sendiri.

2. Bagaimana dengan mode bit yang lebih tinggi? Dan tidak bisakah Anda tidak mengabaikan BIOS dalam mode nyata (x86) dan masih menangani memori melalui AL?

3. Bagaimana konsep penulisan ke alamat tetap tidak berubah pada GPU dengan banyak register dan kinerja pada atau di atas mikroprosesor yang sebenarnya?


sumber
Untuk sedikit konteks historis, lihat jawaban saya untuk pertanyaan terkait: superuser.com/questions/357328/…
Russell Borogove
Perlu dicatat bahwa, selain mengacu pada teknologi kartu / protokol display, istilah ini juga telah menunjuk standar listrik tertentu dan resolusi tampilan. Sulit untuk menebak makna mana yang sedang diterapkan, bahkan ketika Anda melihat istilah "dalam konteks".
Daniel R Hicks

Jawaban:

65

Secara teknis VGA adalah singkatan dari Video Graphics Array , standar video 640x480 diperkenalkan pada tahun 1987. Pada saat itu adalah resolusi yang relatif tinggi, terutama untuk tampilan warna.

Sebelum VGA diperkenalkan, kami memiliki beberapa standar grafis lainnya, seperti hercules yang menampilkan teks (80 baris 25 karakter) atau untuk grafik monokrom definisi tinggi relatif (pada 720x348 piksel).

Standar lain pada saat itu adalah CGA ( Color graphic adapter ), yang juga memungkinkan hingga 16 warna pada resolusi hingga 640x200 piksel. Hasilnya akan terlihat seperti ini:

masukkan deskripsi gambar di sini

Akhirnya, standar PC yang patut diperhatikan adalah Enhanced graphics adapter (EGA), yang memungkinkan resolusi hingga 640 × 350 dengan 64 warna.

(Saya mengabaikan standar non-PC untuk menjaga ini relatif singkat. Jika saya mulai menambahkan standar Atari atau Amiga - hingga 4096 warna saat itu! - maka ini akan menjadi cukup lama.)

Kemudian pada tahun 1987 IBM memperkenalkan komputer PS2. Itu memiliki beberapa perbedaan penting dibandingkan dengan pendahulunya, yang termasuk port baru untuk mouse dan keyboard (Sebelumnya mouse menggunakan port serial 25 pin atau port serial 9 pin, jika Anda punya mouse sama sekali); drive standar 3½ inci dan adaptor grafis baru dengan resolusi tinggi dan banyak warna.

Standar grafis ini disebut Video Graphics Array . Dulu konektor 3 baris, 15 pin untuk mentransfer sinyal analog ke monitor. Konektor ini bertahan hingga beberapa tahun yang lalu, ketika diganti oleh standar digital superior seperti DVI dan port tampilan.

Setelah VGA

Kemajuan tidak berhenti dengan standar VGA. Tak lama setelah pengenalan VGA, muncul standar baru seperti 800x600 S uper VGA (SVGA), yang menggunakan konektor yang sama. (Hercules, CGA, EGA dll semua memiliki konektor sendiri. Anda tidak dapat menghubungkan monitor CGA ke kartu VGA, bahkan jika Anda mencoba menampilkan resolusi yang cukup rendah).

Sejak itu kami telah beralih ke tampilan resolusi yang jauh lebih tinggi, tetapi nama yang paling sering digunakan adalah VGA. Meskipun nama yang benar adalah SVGA, XVGA, UXGA dll.

masukkan deskripsi gambar di sini

(Grafis milik Wikipedia)


Hal lain yang disebut 'VGA' adalah konektor DE15 yang digunakan dengan kartu VGA asli. Konektor biru ini biasanya bukan satu-satunya cara untuk mentransfer 'sinyal VGA' analog ke monitor, tetapi ini adalah yang paling umum.

Kiri: DB5HD Kanan: Konektor VGA alternatif, biasanya digunakan untuk kualitas yang lebih baik) masukkan deskripsi gambar di sini


Cara ketiga 'VGA' digunakan adalah untuk menggambarkan kartu grafis, meskipun kartu itu mungkin menghasilkan resolusi yang sama sekali berbeda dari VGA. Penggunaannya secara teknis salah, atau paling tidak harus 'kartu yang kompatibel VGA', tetapi ucapan umum tidak membuat perbedaan itu.


Itu berarti menulis ke VGA

Ini berasal dari cara memori pada IBM XT dibagi. CPU dapat mengakses memori hingga 1MiB (1024KiB). 512KiB bawah dicadangkan untuk RAM, 512 KiB atas untuk kartu tambahan, ROM, dll.

Area atas ini adalah tempat memori kartu VGA dipetakan. Anda dapat langsung menulis dan hasilnya akan muncul di layar.

Ini tidak hanya digunakan untuk VGA, tetapi juga untuk alternatif generasi yang sama.

  G = Mode Grafis Video RAM
  M = Mode Video Monokrom Teks Teks RAM
  C = Color Text Mode Video RAM
  V = Video ROM BIOS (akan menjadi "a" di PS / 2)
  a = ROM papan adaptor dan RAM tujuan khusus (ruang UMA gratis)
  r = BIOS Motherboard ROM PS / 2 tambahan (UMA gratis dalam sistem non-PS / 2)
  R = Motherboard ROM BIOS
  b = ROM DASAR Kaset IBM (akan menjadi "R" dalam kompatibilitas IBM)
  h = Area Memori Tinggi (HMA), jika HIMEM.SYS dimuat.

Memori Konvensional (Basis):   
512KB pertama (atau 8 potongan 64KiB). 

Area Memori Atas (UMA):

0A0000: GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG
0B0000: MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
0C0000: VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0D0000: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0E0000: rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
0F0000: RRRRRRRRRRRRRRRRRRRRRbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbRBRRRRRRR

( Sumber peta ASCII).

Hennes
sumber
1
Nit komentar: Ini bukan konektor "DB15". Konektor DB15 hanya memiliki 2 baris pin (seperti DB9 dan DB25). Konektor VGA memiliki 3 baris pin, dan sering disebut "HD15" (HD untuk kepadatan tinggi dibandingkan dengan DB) (walaupun beberapa menyatakan bahwa "HD15" bukan nama resmi).
serbuk gergaji
2
Nit comment # 2: PC IBM asli mungkin telah dirilis dengan pemisahan 512/512, tetapi segera diubah menjadi 640/384 split (ini direferensikan di halaman sumber Anda). Memori grafis dimulai pada tanda 640K (hex 0A0000). Saya tidak berpikir ada orang yang benar-benar menyadari "batas 512K" dengan cara "batas 640K" akhirnya menjadi masalah yang terkenal.
Hellion
2
@sawdust: HD15 jelas bukan nama resmi (tapi sebagus, hari ini). Dalam Dx-nnkeluarga konektor, xadalah ukuran shell, nnadalah jumlah pin. Shell B adalah ukuran yang sama dengan port paralel (atau port serial 25-pin implementasi penuh lama). Shell E berukuran sama dengan port serial. Jadi secara teknis , konektor VGA 15-pin akan menjadi DE-15, tetapi ini tidak pernah menjadi bagian dari line-up konektor asli. AFAIK bahkan tidak pernah ada sebelum penggunaan IBM pada PS / 2 MCGA, VGA & 8514 / a. Wikipedia memiliki penjelasan yang bagus: en.wikipedia.org/wiki/D-subminiature
Alexios
3
Saya suka inflasi resolusi superlatif: ultra-wide-super-extended-hyper-quad-graphics-array. Anda tidak dapat menyebutnya high-def, karena suatu hari tidak akan!
aidan
2
@Kurangnya Keyakinan jika Anda ingin kinerja yang dapat ditawarkan kartu, Anda perlu menggunakan antarmuka milik masing-masing. Jika Anda tidak peduli dengan kinerjanya, ada VGA BIOS untuk mengatur framebuffer VESA untuk Anda. Lihatlah vesafb.txt Linux untuk detailnya (dan tentu saja kode sumber juga di Linux).
derobert
10

Menulis ke "alamat tetap" pada dasarnya menulis ke kartu video secara langsung. Semua kartu video ISA video (CGA, EGA, VGA) pada dasarnya memiliki beberapa RAM (dan register) yang dipetakan langsung ke memori CPU dan ruang I / O.

Jadi ketika Anda menulis byte ke lokasi memori tertentu, karakter itu (dalam mode teks) segera muncul di layar, karena Anda sebenarnya menulis ke dalam memori yang terletak di kartu video, dan kartu video hanya menggunakan memori itu.

Ini semua terlihat sangat membingungkan hari ini, terutama mengingat bahwa kartu video saat ini kadang-kadang disebut VGA (dan mereka memiliki kemiripan dengan kartu VGA "benar" dari tahun 1990-an). Namun, bahkan kartu modern meniru beberapa fungsi dari desain yang lebih tua ini (Anda dapat mem-boot DOS pada kebanyakan PC modern dan menggunakan program DOS yang menulis ke memori video secara langsung). Tentu saja, saat ini semuanya ditiru dalam firmware kartu video.

haim
sumber
Jadi bagaimana itu masuk akal dengan kartu video onboard? Saya masih belum mengerti bagaimana VGA bisa menjadi kecanduan jika kartu tidak didikte VGA.
1
Bahkan jika kartu video Anda terintegrasi, masih terhubung ke seluruh sistem melalui beberapa jenis bus: PCIe, PCI, AGP, ISA, dll. Bus ini dapat menghubungkan komponen eksternal ke motherboard, dan dapat menghubungkan komponen internal di dalam chipset (SATA, video, dll.)
haimg
1
Tetapi bagaimana bus tahu apa yang harus dilakukan dengan alamat? Ini akan berbeda antara PCI dan kartu onboard, bahkan GPU, atau mikroprosesor grafis terintegrasi.
1
Tidak ada perbedaan apa pun, apakah kabel diarahkan ke konektor PCI, atau jika semua koneksi ada di dalam northbridge Anda. en.wikipedia.org/wiki/Conventional_PCI#PCI_address_spaces
haimg
3

Sebenarnya tidak ada perbedaan: jika Anda menulis ke alamat memori video, maka perangkat keras akan merutekannya ke kartu video.

Jika Anda menulis sistem operasi Anda sendiri, Anda mungkin harus melakukan banyak pekerjaan dalam mendapatkan kartu grafis untuk memetakan ingatannya seperti yang Anda inginkan, mulai dengan memindai bus PCI untuk menemukan kartu tersebut.

pjc50
sumber
Kartu grafis saya terpasang di northbridge saya, tidak terhubung dengan PCI. Saya pikir ini adalah Intel GMA.
3
Prosesor grafis Anda mungkin tidak menempati slot PCI , tetapi tentu saja duduk di salah satu bus sistem ... bahkan jika itu pada motherboard, heck bahkan jika itu terintegrasi secara langsung sebagai bagian dari sistem pada chip. Cara yang sama dengan pengontrol SATA motherboard Anda, atau pengontrol USB, atau ... Anda akan melihat GPU onboard terdaftar (dan pengontrol SATA, USB, dll.), Bersama dengan ID PCI-nya, jika Anda menggunakan bus-bus PCI yang cukup alat inspeksi untuk OS Anda. Di linux itu hanya 'lspci' di baris perintah. Untuk Windows, saya lebih suka "SIW" Gabriel Topala. Mac ... mungkin juga memiliki 'lspci'?
FeRD
OS tidak masalah dalam kasus seperti itu, karena arsitektur perangkat keras dan platform apa yang diperhitungkan. OS baru saja dibangun di atasnya, dan itu adalah titik masuk utama untuk berinteraksi dengan semua perangkat keras dan mendukung layanan kernel. Spesifikasi arsitektur dan kebutuhan adalah apa yang Anda hadapi. Untuk menentukan perangkat keras Anda, lihat motherboard Anda secara online. Itu langkah awal yang adil.
+1 dimulai dengan memindai bus PCI untuk menemukan kartu.
n611x007
2

Sejauh ini jawabannya telah menjelaskan bahwa kartu video lama berfungsi dengan memiliki memori video yang dipetakan ke dalam ruang alamat prosesor. Ini adalah memori kartu itu sendiri. Northbridge tahu untuk mengarahkan permintaan untuk memori yang dipetakan ini ke perangkat VGA.

Kemudian di atas itu ada ekspansi amny dan mode baru untuk kartu yang kompatibel dengan VGA. Ini mengarah pada penciptaan VESA BIOS Extensions (VBE), yang beroperasi melalui int 10h. Ini mendukung akselerasi 2D dasar (BitBlt), kursor perangkat keras, buffering double / tripple, dll. Ini adalah metode dasar untuk tampilan penuh warna pada setiap resolusi yang didukung (termasuk resolusi tinggi). Memori ini biasanya digunakan internal untuk kartu juga, dengan northbridge melakukan pengalihan seperti dengan VGA klasik. Ini adalah cara paling sederhana untuk memanfaatkan grafik penuh / resolusi penuh.

Selanjutnya kita beberapa metode langsung mengakses GPU tanpa menggunakan bios, yang menyediakan akses ke fitur yang sama seperti VBE, dan mungkin yang tambahan. Pemahaman saya cukup kabur di sini. Saya pikir antarmuka ini khusus untuk perangkat, tetapi saya sama sekali tidak yakin akan hal itu.

Lalu ada antarmuka GPU yang dapat mendukung 3D acelleration / GP-GPU computation dll. Ini pasti membutuhkan driver atau spesifikasi yang disediakan pabrikan untuk penggunaan penuh, dan sering ada perbedaan keuangan bahkan antara perangkat dari pabrikan yang sama.

Kevin Cathcart
sumber
Driver devce hanya diperlukan pada sistem operasi. Semua perangkat keras dapat diakses langsung pada arsitektur.
1
Tentu, masalah dengan akses langsung untuk bagian 3D adalah bagian protokol yang dianggap rahasia dagang oleh beberapa produsen GPU utama, dan dengan demikian kecuali direkayasa balik, atau perjanjian non-pengungkapan ditandatangani, driver yang sudah mengandung kata pengetahuan dibutuhkan.
Kevin Cathcart
Tergantung pada kartu. Jika nVidia atau AMD itu akan menjadi milik. Intel GMA onboard, akan jauh lebih mudah daripada GEVce nVidia.
1
Saya telah memperbarui baris yang dimaksud untuk meminta "penyelam atau spesifikasi". Spesifikasi sudah memadai ketika Anda bisa mendapatkannya, yang memang merupakan kasus untuk banyak solusi grafis Intel terbaru.
Kevin Cathcart
1
Untuk apa nilainya, semua Intel modern dan sebagian besar kartu grafis AMD memiliki petak yang sangat besar dari spesifikasi pemrograman mereka diterbitkan. Nvidia masih tetap diam tentang masalah ini, tetapi driver grafis open source Nouveau berisi banyak dokumentasi (dalam bentuk kode sumber) tentang pemrograman kartu grafis Nvidia. Intel / AMD / Nvidia lebih terbuka daripada ASM ARM eksklusif belakangan ini; chip yang tertanam / mobile adalah yang paling rahasia dari semuanya.
allquixotic