भाग 1
वर्ष वीजीए मोड के लिए, वहाँ (विरासत) प्रदर्शन स्मृति क्षेत्र में लिखने के लिए एक निश्चित पते है। टेक्स्ट मोड के लिए यह क्षेत्र 0x000B8000 से शुरू होता है। ग्राफिक्स मोड के लिए यह 0x000A0000 से शुरू होता है।
उच्च-रिज़ॉल्यूशन वीडियो मोड (जैसे वीईएसए/वीबीई इंटरफ़ेस द्वारा सेट किए गए) के लिए यह काम नहीं करता है क्योंकि विरासत डिस्प्ले मेमोरी एरिया का आकार 64 कीबी तक सीमित है और अधिकांश उच्च-रिज़ॉल्यूशन वीडियो मोड की आवश्यकता है अंतरिक्ष (जैसे 1024 * 768 * 32-बीपीपी = 2.25 एमआईबी)। चारों ओर घूमने के लिए वीबीई द्वारा समर्थित 2 अलग-अलग विधियां हैं।
पहली विधि को "बैंक स्विचिंग" कहा जाता है, जहां वीडियो कार्ड की डिस्प्ले मेमोरी का केवल एक हिस्सा किसी भी समय विरासत क्षेत्र में मैप किया जाता है (और आप बदल सकते हैं कि कौन सा हिस्सा मैप किया गया है)। यह काफी गन्दा हो सकता है - उदाहरण के लिए, एक पिक्सेल को आकर्षित करने के लिए आपको गणना करने की आवश्यकता हो सकती है कि पिक्सेल किस बैंक में है, फिर उस बैंक पर स्विच करें, फिर बैंक में कौन सा ऑफसेट की गणना करें। इसे और भी खराब बनाने के लिए, कुछ वीडियो मोड (उदाहरण के लिए 24-बीपीपी वीडियो मोड जहां 3 बाइट प्रति पिक्सेल है) केवल पिक्सेल के डेटा का पहला भाग एक बैंक में हो सकता है और उसी पिक्सेल के डेटा का दूसरा भाग एक अलग बैंक में है । इसका मुख्य लाभ यह है कि यह वास्तविक मोड एड्रेसिंग के साथ काम करता है, क्योंकि विरासत डिस्प्ले मेमोरी एरिया 0x00100000 से कम है।
दूसरी विधि को "रैखिक फ्रेमबफर" (या सिर्फ "एलएफबी") कहा जाता है, जहां वीडियो कार्ड के पूरे डिस्प्ले मेमोरी एरिया को किसी भी गन्दा बैंक स्विचिंग के बिना एक्सेस किया जा सकता है। आपको वीईएसए/वीबीई इंटरफ़ेस से पूछना है जहां यह क्षेत्र है (और यह आमतौर पर 0xC0000000 और 0xFFF00000 के बीच "पीसीआई छेद" में है)। इसका मतलब है कि आप इसे वास्तविक मोड में नहीं एक्सेस कर सकते हैं, और संरक्षित मोड या लंबे मोड या "अवास्तविक मोड" का उपयोग करने की आवश्यकता है।
जब आप एलएफबी मोड का उपयोग कर रहे हों तो पिक्सेल का पता ढूंढने के लिए, आप "pixel_address = display_memory_address + y * bytes_per_line + x * bytes_per_pixel" जैसे कुछ करेंगे। "बाइट्स_पर_लाइन" वीईएसए/वीबीई इंटरफ़ेस से आता है (और हो सकता है कि "क्षैतिज_रेसोल्यूशन * बाइट्स_पर_लाइन" जैसा न हो क्योंकि क्षैतिज रेखाओं के बीच पैडिंग हो सकती है)।
pixel_offset = y * bytes_per_line + x * bytes_per_pixel;
bank_number = pixel_offset/bank_size;
pixel_starting_address_within_bank = pixel_offset % bank_size;
कुछ पुराने वीजीए मोड के लिए (उदाहरण के लिए 256 रंग "मोड 0x13") यह बहुत LFB के समान है, सिवाय इसके कि:
के लिए "बैंक बंद" VBE/VESA मोड, यह कुछ अधिक की तरह हो जाता है लाइनों के बीच कोई पैडिंग नहीं है और आप "pixel_address = display_memory_address + (y * horizontal_resolution + x) * bytes_per_pixel" कर सकते हैं। टेक्स्ट मोड के लिए यह मूल रूप से वही बात है, सिवाय इसके कि 2 बाइट प्रत्येक चरित्र और इसकी विशेषता निर्धारित करते हैं - उदा। "char_address = display_memory_address + (y * horizontal_resolution + x) * 2"। अन्य पुराने वीजीए मोड (मोनोक्रोम/2-रंग, 4-रंग और 16-रंग मोड) के लिए वीडियो कार्ड की मेमोरी पूरी तरह से व्यवस्थित होती है। यह "विमान" में विभाजित है जहां प्रत्येक विमान में पिक्सेल का एक बिट होता है, और (उदाहरण के लिए) 16-रंग मोड में एक पिक्सेल को अपडेट करने के लिए आपको 4 अलग-अलग विमानों को लिखना होगा। प्रदर्शन कारणों से वीजीए हार्डवेयर विभिन्न लेखन मोड और विभिन्न पठन मोड का समर्थन करता है, और यह जटिल हो सकता है (यहां पर्याप्त रूप से वर्णन करने के लिए बहुत जटिल)।
भाग 2
मैं/हे बंदरगाहों के लिए (80x86 पर, "पीसी compatibles"), वहाँ 3 सामान्य श्रेणियों। पहला "वास्तविक तथ्य" विरासत डिवाइस है जो निश्चित I/O बंदरगाहों का उपयोग करता है। इसमें पीआईसी चिप्स, आईएसए डीएमए कंट्रोलर, पीएस/2 कंट्रोलर, पीआईटी चिप, सीरियल/समांतर बंदरगाह इत्यादि जैसी चीजें शामिल हैं। लगभग हर कुछ जो इन उपकरणों में से प्रत्येक प्रोग्राम को प्रोग्राम करने का वर्णन करता है, आपको बताएगा कि डिवाइस कौन से I/O बंदरगाहों का उपयोग करता है।
अगली श्रेणी विरासत/आईएसए डिवाइस है, जहां आई/ओ बंदरगाहों का उपयोग डिवाइस पर कूदने वालों द्वारा निर्धारित किया जाता है, और यह निर्धारित करने के लिए कोई रास्ता नहीं है कि वे कौन से I/O बंदरगाहों का उपयोग सॉफ्टवेयर से करते हैं। इस के बारे में जानने के लिए एंड-यूजर को ओएस को बताना होगा जो प्रत्येक डिवाइस का उपयोग करता है I/O बंदरगाहों। शुक्र है कि यह क्रिस्टी सामान अप्रचलित हो गया है (हालांकि इसका मतलब यह नहीं है कि कोई भी इसका उपयोग नहीं कर रहा है)।
तीसरी श्रेणी "प्लग & प्ले" है, जहां डिवाइस को पूछने के कुछ तरीके हैं I/O बंदरगाहों का उपयोग करता है (और ज्यादातर मामलों में, डिवाइस का उपयोग करने वाले I/O बंदरगाहों को बदलना)। इसका एक उदाहरण पीसीआई है, जहां एक "पीसीआई कॉन्फ़िगरेशन स्पेस" है जो आपको प्रत्येक पीसीआई डिवाइस के बारे में बहुत सारी जानकारी बताता है। इस श्रेणियों के लिए, कोई भी तरीका यह निर्धारित नहीं कर सकता कि कौन से डिवाइस रनिंग समय पर किए बिना I/O बंदरगाहों का उपयोग कर रहे हैं, और कुछ BIOS सेटिंग्स को बदलने से इन सभी उपकरणों को I/O बंदरगाहों को बदलना पड़ सकता है।
यह भी ध्यान दें कि एक इंटेल सीपीयू केवल एक सीपीयू है। कुछ भी उन CPUs को किसी ऐसे पीसी में उपयोग करने से रोकता है जो "पीसी संगत" कंप्यूटर से मूल रूप से भिन्न होता है। इंटेल के सीपीयू मैनुअल आपको हार्डवेयर के बारे में कुछ भी नहीं बताएंगे जो सीपीयू के बाहर मौजूद है (चिपसेट या डिवाइस सहित)।
भाग 3
(कि ओएस डेवलपर्स/शौक रखने वालों के लिए लक्षित है) http://osdev.org/ (उनके विकि और उनके मंचों) है अधिक जानकारी के लिए जाने के लिए शायद सबसे अच्छी जगह। http://www.osdever.net/FreeVGA/home.htm यह कुछ विवरण कोड है कि स्क्रीन के लिए सीधे लिखते हैं लिखने के लिए महत्वपूर्ण बारे में बात करती:
वाह, महान प्रतिक्रियाओं के लिए धन्यवाद, हर कोई। प्रदान किए गए सभी उत्तरों इस तरह दिखते हैं कि वे सहायक होने की संभावना है। – user336462
क्या आपने शार्पी माना है? वे अधिकांश सीआरटी और एलईडी डिस्प्ले में आसानी से ग्लाइड करते हैं। –