Sekitar sepuluh tahun yang lalu saya mendapat kartu ISA-video dari 286 ... 486 mesin yang ditujukan untuk dumping. Kartu video telah diuji dan sejak itu telah mengumpulkan debu di dalam laci. Beberapa tahun yang lalu, saya punya pemikiran, tetapi haruskah saya menghubungkan kartu video ke mikrokontroler? Inilah yang akan saya bicarakan dalam artikel ini.
Untuk menghubungkan kartu video ISA lama, bus data 8-bit dan bus alamat 20-bit sudah cukup. Mikrokontroler Saya suka keluarga AVR karena kesederhanaannya, jadi saya mengambil Atmega16. Tetapi Anda dapat mengambil kenyamanan bagi Anda - dalam hal ini, kaki stm32 yang sama pasti akan cukup tanpa pengikat eksternal. Tetapi Atmega16 tidak memiliki cukup kaki untuk semua bus ini, sehingga bus alamat dirakit di tiga register paralel Soviet (saya punya banyak persediaan) K588IR1. Mikrokontroler pada gilirannya menetapkan bagian-bagian alamat dalam tiga register ini. Lebih banyak tidak diperlukan.

Pada konektor ISA, output dari sirkuit ini harus terhubung sebagai berikut:
+5,
+12,
GND
REFRESH (ditarik ke + 5V melalui resistor),
A0-A19,
D0-D7,
RESET
Memw,
Memr,
TKI
IOR
Ale
RDY,
AEN (terhubung ke GND).
Pada gambar berwarna merah, saya menandai pin konektor ISA yang perlu dihubungkan.
Untuk beberapa kartu video, Anda perlu menghubungkan -5 V dan -12 V (Anda harus mendapatkannya di suatu tempat - misalnya, dari sumber TracoPower) dan sinyal OSC (14,318 MHz) - dapat dihasilkan oleh generator paling sederhana pada K155LN1. Kartu grafis lain tidak perlu garis-garis ini. Ini dia betapa beruntungnya. Secara umum, jika kaki yang sesuai pada ISA menggantung di udara pada kartu video, Anda pasti tidak dapat menghubungkannya. Perlu diingat bahwa konsumsi kartu video pada jalur + 5V cukup besar - jika Anda menggunakan sesuatu seperti LM7805 untuk catu daya, pastikan untuk meletakkannya di radiator (sebaiknya dengan kipas angin).
Secara pribadi, desain rakitan saya terlihat seperti ini:

Satu-satunya yang tersisa adalah entah bagaimana menginisialisasi kartu video dan mulai bekerja dengannya. Ada proyek serupa di Internet - Saya menemukan satu (
tautan ), di mana saya mendapat kode inisialisasi untuk kartu video Trident 9000i. Dalam program yang sama dari Internet, ada kode inisialisasi untuk Trident9000C, tetapi komentar menunjukkan bahwa itu tidak berfungsi. Saya sudah memeriksa. Ini benar-benar tidak berfungsi - di layar sampah dan kartu video tidak menanggapi penulisan data ke RAM.
Video kerja (gambar ditransmisikan melalui SPI ke Atmega16 (seperti yang Anda lihat, garis-garis ini dibiarkan bebas dalam diagram) melalui port LPT komputer):
(Saya membuat reservasi dalam video - mode 320x200, bukan 320x240)
Dengan menggabungkan modul ini dengan mouse optik (
artikel tentang menggunakan sensor mouse ) saya mendapatkan ini:
Jika Anda memiliki keinginan untuk menjalankan kartu grafis ISA yang ada, maka untuk ini Anda harus menemukan BIOS dari kartu grafis yang diperlukan (katakanlah, di
sini ) di Internet dan bongkar menggunakan IDA. Ada kode X86 biasa. Itu tidak dimulai pada alamat 0 - ada tanda tangan (2 byte) dan sebuah checksum (1 byte). Total, Anda harus mulai dengan byte ke-3. Dan secara konsisten temukan port mana yang perlu Anda rekam agar kartu berfungsi. Terus terang, saya tidak punya kesabaran untuk memahami apa yang salah dengan Trident9000C.
Untuk bekerja dengan bus ISA, modul ditulis:
Modul untuk bekerja dengan bus ISA Inisialisasi kartu grafis Trident 9000i adalah sebagai berikut:
Menginisialisasi Trident 9000i Graphics Saya juga meluncurkan kartu video OAK OTI077 (sampai saya secara tidak sengaja menerapkan 12 V ke dalamnya dan kartu itu hangus):
Inisialisasi Kartu Grafis OAK OTI077 Omong-omong, apakah ada spesialis register adaptor VGA di sini? Saya melihat hal-hal aneh dalam kode perubahan mode video saat menginisialisasi kartu video:
Di sini, secara umum, tidak ada yang istimewa. Menulis ke register pengontrol atribut dilakukan dalam 2 langkah: pertama kita menulis nomor register, dan kemudian data. Untuk selalu memulai dengan merekam nomor, baca ISR1 (dari 0x03DA) - begitulah adanya.
Tapi ini yang aneh. Pengontrol atribut tidak memiliki register 0x20! Ia memiliki register terakhir 0x14. Dan bahkan jika akan ada register seperti itu, mengapa tidak ada catatan nilai? Seharusnya ada dua entri di port. Dan di sini dia sendirian. Saya mencari di internet dan menemukan bahwa untuk beberapa alasan (dalam buku saya tidak menemukan ini), Anda dapat menulis, katakanlah, di 0x10 daftarkan nilai 0x20 sekaligus hanya dengan menggabungkan bit: System_Out8 (ATTRCON_ADDR, 0x10 | 0x20); Lalu catatan yang ditentukan menulis 0x20 ke register 0x00? Tetapi mengapa ini bekerja? Dan begitukah? Ini menarik bagi saya, itu sebabnya - semuanya adalah kadang-kadang warna jatuh setelah inisialisasi. Palet tidak diatur. Dapat dilihat bahwa itu sedang berubah, tetapi warnanya sama sekali tidak seperti seharusnya. Jika inisialisasi dilakukan lagi, maka semuanya dikembalikan. Pada tahap apa ini terjadi tidak jelas. Secara eksperimental, saya menemukan bahwa dengan probabilitas tinggi, ini hanya pemasangan mode video. Tetapi apa yang sebenarnya tidak ada di sana, saya tidak mengerti.
→
Tautan ke arsip dengan papan sirkuit cetak
→
Tautan ke arsip dengan firmware