2016-01-17 15 views
6

हाल ही में, मैंने NASM और C. में एक ऑपरेटिंग सिस्टम विकसित करना शुरू कर दिया है। मैंने पहले ही बूट लोडर, कर्नेल, फाइल सिस्टम इत्यादि बना दिया है। अब तक मैंने लिखने के लिए सीधे वीजीए टेक्स्ट मोड का उपयोग किया है पता 0x000B8000। इसलिए, मैंने टेक्स्ट मोड के बजाय वीडियो मोड पर स्विच करने का निर्णय लिया। मैंने अधिकतम प्रदर्शन संकल्प 320x200 चुना, लेकिन तब मुझे एहसास हुआ कि तीन समस्याएं हैं। सबसे पहले, केवल 256 अलग-अलग रंग हैं। दूसरा, संकल्प बहुत छोटा है। तीसरा, पते 0x000A0000 पर लिखना बहुत धीमा है। मैंने कुछ एनिमेशन करने की कोशिश की, लेकिन यह बहुत कमजोर है और कभी-कभी यह अगले फ्रेम से पहले एक सेकंड से अधिक प्रतीक्षा करता है।एक उच्च रिज़ॉल्यूशन पर स्विचिंग

मैं कैसे इस तरह के 1920x1080 और कैसे उपयोग करने के लिए 256*256*256 बजाय रंग सिर्फ 256 सब कुछ मैंने पाया ने कहा कि यह उच्च रिज़ॉल्यूशन का उपयोग करने के क्योंकि आप चाहिए बहुत कठिन है के रूप में उच्च रिज़ॉल्यूशन पर स्विच करने पर कुछ स्पष्टीकरण के लिए इंटरनेट पर खोज की है सभी प्रकार के ग्राफिक्स कार्ड के लिए ड्राइवर विकसित करना और कुछ कार्ड्स के लिए कोई दस्तावेज नहीं हैं, इसलिए हमें रिवर्स इंजीनियरिंग का उपयोग करना होगा।

मैं वास्तव में अपने ऑपरेटिंग सिस्टम में उच्च-रिज़ॉल्यूशन ग्राफिक्स पेश करना चाहता हूं। क्या यह वास्तव में कठिन है या क्या कोई आसान तरीका है? मैं इसे कैसे हल कर सकता हूं इस पर कोई सुझाव?

+1

यदि आपको पहले से ही एक लुसी वीजीए 320x200 स्क्रीन पर तेज एनिमेशन प्रदर्शित करने के लिए कोड लिखने में समस्याएं आ रही हैं, तो स्क्रीन पर जाने से पहले 3 बार जितना बिट्स प्रति पिक्सेल (शायद 4 गुना) और 30 के साथ स्क्रीन पर जाने से पहले बेहतर प्रयास करें। (!) बार पिक्सल। – usr2564301

उत्तर

4

लगभग हर ग्राफिक्स एडाप्टर वीईएसए फ्रेमबफर अर्थशास्त्र का समर्थन करता है, आप इसके साथ लगभग हर वीडियो मोड को कॉन्फ़िगर कर सकते हैं। https://en.wikipedia.org/wiki/VESA_BIOS_Extensions: दोष यह है कि आप विक्रेता विशिष्ट सुविधाओं (त्वरित ग्राफिक्स आदि)

उदाहरण के लिए VESA-स्वागत लगभग किसी भी ग्राफिक्स एडाप्टर के साथ काम करता है (लेकिन मॉडल विशिष्ट लोगों को काफी तेज कर रहे हैं)

भी देखें उपयोग नहीं कर सकते है

+0

धन्यवाद, लेकिन मुझे अभी भी एक समस्या है। मैंने 0x0118 (1024x768) VESA मोड पर स्विच किया, लेकिन यह बेहद धीमा है। यह इतना धीमा है कि यह बेकार है। मैंने परीक्षण करने के लिए कुछ सरल चीजें करने की कोशिश की। मेरे पास रैम के कुछ क्षेत्र में 2014x768 छवियों की एक सरणी है और मैंने एक साधारण सी प्रोग्राम बनाया जो इसे एक के बाद एक लोड करता है। हालांकि, यह एक और छवि लोड करने से पहले एक सेकंड से अधिक इंतजार कर रहा है। मुझे यकीन है कि कोई अनुकूलन समस्या नहीं है। मैं इसे लगभग 60+ एफपीएस तक कैसे बढ़ा सकता हूं? –

1

आप असेंबली में उच्च रेज वीईएसए ग्राफिक्स कर सकते हैं और यह पर्याप्त तेज़ होना चाहिए (शुरुआती चरण में जब आप सीख रहे हों और बहुत ही फैंसी 3 डी सामान नहीं कर रहे हैं)।

सबसे पहले, सुनिश्चित करें कि आप परीक्षण के लिए एक अच्छा एमुलेटर/वर्चुअल मशीन का उपयोग कर रहे हैं। मैं क्यूईएमयू का उपयोग कर रहा था और यह केवल 640x480x24bpp पर किसी ग्राफिक्स को धीमा करने का तरीका था। मैंने वर्चुअलबॉक्स पर स्विच किया और हालांकि यह धीरे-धीरे शुरू होता है, मैंने कभी पीछे नहीं देखा है।

प्रोग्रामिंग भाग के लिए, मैं आपको Pure64 नामक एक प्रोजेक्ट को देखने के लिए प्रोत्साहित करता हूं। आप इसे गिटहब पर पा सकते हैं। Src/init/isa.asm पर जाएं और फ़ाइल के अंत को देखें - वीईएसए प्रारंभ करने के लिए कुछ कोड है। मैं वास्तव में स्वच्छ 64 बिट वातावरण स्थापित करने के लिए शुद्ध 64 का उपयोग कर रहा हूं और मैं वीईएसए ग्राफिक्स कर रहा हूं इसलिए मैं कह सकता हूं कि यह ठीक काम करता है।

वीईएसए इनिट में दो भाग होते हैं - मोड जानकारी प्राप्त करना और वीडियो मोड सेट करना। एक बार जब आप मोड जानकारी प्राप्त कर लेते हैं, तो आपको स्मृति के क्षेत्र में एक वीडियो बेस पॉइंटर मिलता है जो निरंतर होता है और जहां आप बैंकों को स्विच किए बिना जटिल सामग्री कर सकते हैं और जहां आप अपने पिक्सेल लिख सकते हैं। कम से कम 64-बिट मोड में।

मेरे साथ एकमात्र समस्या यह है कि मैं 32 बीपीपी मोड काम नहीं कर सका। मैं 24 बीपीपी कर सकता हूं, जो आरआरजीजीबीबी - 3 बाइट प्रति पिक्सेल (बिल्कुल एचटीएमएल/सीएसएस रंग कोड की तरह) है। बाइनरी कंप्यूटर पर 3 बाइट्स वाली सभी चीज़ों के साथ, यह कुछ चीजों को थोड़ा अधिक जटिल बनाता है (कम से कम शुरुआत के लिए)। काम करने के लिए प्रति पिक्सेल प्रति 4 बाइट प्राप्त करना अभी भी मुझे बढ़ाता है। शायद यह वर्चुअलबॉक्स या कुछ की सीमा है।

इसका मतलब यह है कि बुनियादी हाई-रेज ग्राफिक्स के लिए बहुत सारी हार्डवेयर-विशिष्ट चीजें करने की आवश्यकता नहीं है। यदि आप हल्के वर्तमान हार्डवेयर पर हैं, तो आपको ठीक करना चाहिए।

+0

* "हल्के ढंग से वर्तमान हार्डवेयर" * - वीईएसए एक्सटेंशन कम से कम 90 के दशक के बाद से ही कम हैं (कुछ अतिरिक्त समर्थित मोडों को जोड़ने के अलावा) ताकि यदि आपके हार्डवेयर पर कैपेसिटर काम कर रहे हैं, तो वीईएसए भी काम करेगा । –

संबंधित मुद्दे