इंटेल हेक्स
| Filename extension |
|---|
इंटेल हेक्साडेसिमल ऑब्जेक्ट फ़ाइल फॉर्मेट, इंटेल हेक्स फॉर्मेट या इंटेलेक हेक्स एक फ़ाइल फॉर्मेट है जो ASCII टेक्स्ट रूप में बाइनरी जानकारी देता है।[7] इसका उपयोग सामान्यतः प्रोग्रामिंग माइक्रोकंट्रोलर, EPROMs और अन्य टाइप के प्रोग्रामेबल लॉजिक डिवाइस और हार्डवेयर एमुलेटर के लिए किया जाता है। एक विशिष्ट एप्लिकेशन में, एक कंपाइलर या असेंबलर एक प्रोग्राम के सोर्स कोड (जैसे सी या असेंबली लैंग्वेज में) को मशीन कोड में परिवर्तित करता है और इसे हेक्स फ़ाइल में आउटपुट करता है। कुछ लोग इसका उपयोग स्ट्रीम डेटा के पैकेट रखने वाले कंटेनर फॉर्मेट के रूप में भी करते हैं।[8][1] परिणामी फ़ाइलों के लिए उपयोग किए जाने वाले सामान्य फ़ाइल एक्सटेंशन .हेक्स[1] या H86 हैं।[2][3] हेक्स फ़ाइल को प्रोग्रामर द्वारा PROM में मशीन कोड लिखने के लिए पढ़ा जाता है या लोडिंग और निष्पादन के लिए लक्ष्य सिस्टम में स्थानांतरित किया जाता है।[9][10]
इतिहास
इंटेल हेक्स फॉर्मेट मूल रूप से 1973 में इंटेल के इंटेलेक माइक्रो कंप्यूटर डेवलपमेंट सिस्टम (एमडीएस) के लिए डिज़ाइन किया गया था ताकि पेपर टेप से प्रोग्राम लोड और निष्पादित किया जा सके। इसका उपयोग ROM उत्पादन के लिए Intel को मेमोरी सामग्री निर्दिष्ट करने के लिए भी किया जाता था।[11] 1973 में, इंटेल के "सॉफ़्टवेयर समूह" में केवल बिल बायर्ली और केन बर्गेट और बाहरी सलाहकार के रूप में गैरी किल्डॉल सम्मिलित थे।[12][13][6] 1975 की आरंभ में, फ़ाइल एक्सटेंशन हेक्स का उपयोग करते हुए, इस फॉर्मेट का उपयोग MCS सीरीज II ISIS-II सिस्टम द्वारा किया गया था।[14] कई PROM और EPROM प्रोग्रामिंग उपकरणों ने इस फॉर्मेट को स्वीकार किया।
फॉर्मेट
Intel हेक्स में ASCII टेक्स्ट की पंक्तियाँ होती हैं जो लाइन फ़ीड या कैरिएज रिटर्न कैरेक्टर या दोनों द्वारा अलग की जाती हैं। प्रत्येक टेक्स्ट लाइन में हेक्साडेसिमल वर्ण होते हैं जो एकाधिक बाइनरी संख्याओं को एन्कोड करते हैं। बाइनरी संख्याएँ डेटा, मेमोरी एड्रेस या अन्य मानों का प्रतिनिधित्व कर सकती हैं, जो लाइन में उनकी स्थिति और लाइन के टाइप और लंबाई पर निर्भर करता है। प्रत्येक टेक्स्ट लाइन को रिकॉर्ड कहा जाता है।
रिकॉर्ड संरचना
एक रिकॉर्ड (टेक्स्ट की लाइन) में छह फ़ील्ड (भाग) होते हैं जो बाएं से दाएं क्रम में दिखाई देते हैं:[9]
- स्टार्ट कोड, एक वर्ण, एक ASCII कोलन ':'। किसी रिकॉर्ड में इस प्रतीक से पहले आने वाले सभी वर्णों को अनदेखा किया जाना चाहिए।[11][2][15][16][17][18] वास्तव में, विनिर्देश के बहुत प्रारंभिक संस्करणों में पहले रिकॉर्ड से पहले और अंतिम रिकॉर्ड के बाद कम से कम 25 एनयूएल वर्णों की मांग की गई थी।[11][19][16][17] हालाँकि, चूंकि यह विनिर्देशन का एक अल्पज्ञात हिस्सा था, इसलिए लिखे गए सभी सॉफ़्टवेयर इसका सही ढंग से सामना नहीं कर पाते। यह अन्य संबंधित जानकारी को एक ही फ़ाइल (और यहां तक कि एक ही लाइन) में संग्रहीत करने की अनुमति देता है,[11][18] प्रतीक तालिकाओं या अतिरिक्त टिप्पणियों को संग्रहीत करने के लिए विभिन्न सॉफ़्टवेयर विकास उपयोगिताओं द्वारा उपयोग की जाने वाली सुविधा,[20][11][16][21][6] और थर्ड पार्टी एक्सटेंशन अन्य वर्णों को स्टार्ट कोड के रूप में उपयोग करते हैं जैसे केइल द्वारा अंक '0', [21] मोस्टेक द्वारा '$', [22][23] या '!', '@', '#', '\', '&' और ';' टीडीएल द्वारा.[23][24] अनुक्रम के अनुसार, '//' का प्रयोग प्रायः टिप्पणियों के लिए किया जाता है। इनमें से किसी भी एक्सटेंशन में पेलोड के हिस्से के रूप में कोई ':' अक्षर सम्मिलित नहीं हो सकता है।
- बाइट काउंट, दो हेक्स अंक (एक हेक्स अंक जोड़ी), डेटा फ़ील्ड में बाइट्स (हेक्स अंक जोड़े) की संख्या दर्शाती है। अधिकतम बाइट काउंट 255 (0xFF) है। 8 (0x08),[6]16 (0x10)[6]और 32 (0x20) सामान्यतः उपयोग की जाने वाली बाइट काउंट हैं। सभी सॉफ़्टवेयर 16 से बड़ी काउंट का सामना नहीं कर पाते।[5]
- एड्रेस, चार हेक्स अंक, डेटा के 16-बिट आरंभिक मेमोरी एड्रेस ऑफसेट का प्रतिनिधित्व करते हैं। डेटा के भौतिक एड्रेस की काउंट इस ऑफसेट को पहले से स्थापित आधार एड्रेस में जोड़कर की जाती है, इस टाइप 16-बिट एड्रेस की 64 किलोबाइट सीमा से परे मेमोरी एड्रेसिंग की अनुमति मिलती है। आधार एड्रेस, जो डिफ़ॉल्ट रूप से शून्य होता है, विभिन्न टाइप के रिकॉर्ड द्वारा बदला जा सकता है। आधार एड्रेस और एड्रेस ऑफसेट को निरंतर बड़े एंडियन मान के रूप में व्यक्त किया जाता है।
- रिकॉर्ड टाइप (नीचे रिकॉर्ड टाइप देखें), दो हेक्स अंक, 00 को 05, डेटा फ़ील्ड का अर्थ परिभाषित करना।
- डेटा, डेटा के n बाइट्स का एक क्रम, जिसे 2n हेक्स अंकों द्वारा दर्शाया जाता है। कुछ रिकॉर्ड इस फ़ील्ड को छोड़ देते हैं (n शून्य के बराबर है)। डेटा बाइट्स का अर्थ और व्याख्या एप्लिकेशन पर निर्भर करती है। (4-बिट डेटा को या तो बाइट्स के निचले या ऊपरी आधे हिस्से में संग्रहीत करना होगा, यानी, एक बाइट में केवल एक एड्रेस योग्य डेटा आइटम होता है।[11]
- अंततः, , दो हेक्स अंक, एक परिकलित मान जिसका उपयोग यह सत्यापित करने के लिए किया जा सकता है कि रिकॉर्ड में कोई त्रुटि नहीं है।
कलर लीजेंड
एक दृश्य सहायता के रूप में, इंटेल हेक्स रिकॉर्ड के क्षेत्र इस पूरे आलेख में निम्नानुसार रंगीन हैं:
Start code Byte count Address Record type Data Checksum
चेकसम काउंट
एक रिकॉर्ड का चेकसम बाइट, चेकसम से पहले के रिकॉर्ड में सभी डिकोड किए गए बाइट मानों के योग के कम से कम महत्वपूर्ण बाइट (LSB) का दो पूरक है। इसकी गणना डिकोड किए गए बाइट मानों को जोड़कर और योग के LSB को निकालकर (यानी, डेटा चेकसम) करके की जाती है, और फिर LSB के दो पूरक की गणना की जाती है (उदाहरण के लिए, इसके बिट्स को उलटा करके और एक जोड़कर)।
उदाहरण के लिए, रिकॉर्ड के स्थिति में :0300300002337A1E, डिकोड किए गए बाइट मानों का योग है 03 + 00 + 30 + 00 + 02 + 33 + 7A = E2, जिसका LSB मूल्य है E2. दोनों का पूरक E2 है 1E, जो रिकॉर्ड के अंत में प्रदर्शित होने वाला चेकसम बाइट है।
किसी रिकॉर्ड की वैधता को उसके चेकसम की काउंट करके और यह सत्यापित करके जांचा जा सकता है कि काउंट किया गया चेकसम रिकॉर्ड में दिखाई देने वाले चेकसम के बराबर है; यदि चेकसम भिन्न हैं तो एक त्रुटि का संकेत दिया जाता है। चूँकि रिकॉर्ड का चेकसम बाइट दोनों का पूरक है - और इसलिए डेटा चेकसम का योगात्मक व्युत्क्रम -, इस प्रक्रिया को रिकॉर्ड के चेकसम सहित सभी डिकोड किए गए बाइट मानों के योग तक कम किया जा सकता है, और यह सत्यापित किया जा सकता है कि योग का LSB शून्य है। जब पिछले उदाहरण पर लागू किया जाता है, तो यह विधि निम्नलिखित परिणाम उत्पन्न करती है: 03 + 00 + 30 + 00 + 02 + 33 + 7A + 1E = 100, जिसका LSB मूल्य 00है।
टेक्स्ट लाइन टर्मिनेटर
इंटेल हेक्स रिकॉर्ड सामान्यतः एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किए जाते हैं ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह रिकॉर्ड्स को दृश्य रूप से सीमित करके पठनीयता को बढ़ाता है और यह रिकॉर्ड्स के बीच पैडिंग भी प्रदान करता है जिसका उपयोग मशीन पार्सिंग दक्षता में सुधार के लिए किया जा सकता है। हालाँकि, पंक्ति समाप्ति वर्ण वैकल्पिक हैं, क्योंकि ':' का उपयोग रिकॉर्ड की आरंभ का पता लगाने के लिए किया जाता है।[11][2][19][15][16][17][18]
हेक्स रिकॉर्ड बनाने वाले प्रोग्राम सामान्यतः लाइन टर्मिनेशन वर्णों का उपयोग करते हैं जो उनके ऑपरेटिंग सिस्टम की परंपराओं के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल LF (लाइन फ़ीड, हेक्स वैल्यू 0A) वर्ण का उपयोग करते हैं, जबकि विंडोज प्रोग्राम LF के बाद सीआर (कैरिज रिटर्न, हेक्स वैल्यू 0D) का उपयोग करते हैं।
रिकॉर्ड टाइप
इंटेल हेक्स के छह मानक रिकॉर्ड प्रकार हैं:[9]
| हेक्स कोड | रिकार्ड टाइप | विवरण | उदाहरण |
|---|---|---|---|
| 00 | सांख्यिकी | बाइट काउंट रिकॉर्ड में डेटा बाइट्स की संख्या निर्दिष्ट करती है। उदाहरण है 0B (ग्यारह) डेटा बाइट्स। डेटा के लिए 16-बिट प्रारंभिक एड्रेस (उदाहरण में प्रारंभ होने वाले एड्रेस पर 0010) और डेटा (61, 64, 64, 72, 65, 73, 73, 20, 67, 61, 70). | :0B0010006164647265737320676170A7 |
| 01 | फाइल समाप्त | फ़ाइल के अंतिम रिकॉर्ड में प्रति फ़ाइल ठीक एक बार आना चाहिए। बाइट काउंट है 00, एड्रेस फ़ील्ड सामान्यतः है 0000 और डेटा फ़ील्ड छोड़ दिया गया है। | :00000001FF |
| 02 | विस्तारित खंड एड्रेस | बाइट काउंट निरंतर होती है 02, एड्रेस फ़ील्ड (सामान्यतः 0000) को नजरअंदाज कर दिया जाता है और डेटा फ़ील्ड में 16-बिट खंड आधार एड्रेस होता है। इसे 16 से गुणा किया जाता है और डेटा के लिए प्रारंभिक एड्रेस बनाने के लिए प्रत्येक बाद के डेटा रिकॉर्ड एड्रेस में जोड़ा जाता है। यह एड्रेस स्थान के एक mebibyte (1048576 बाइट्स) तक संबोधित करने की अनुमति देता है। | :020000021200EA |
| 03 | प्रारंभ खंड एड्रेस | 80x86 प्रोसेसर के लिए, प्रारंभिक निष्पादन एड्रेस निर्दिष्ट करता है। बाइट काउंट निरंतर होती है 04, एड्रेस फ़ील्ड है 0000 और पहले दो डेटा बाइट्स कोड ब्लॉक मान हैं, बाद वाले दो निर्देश सूचक मान हैं। निष्पादन इस एड्रेस पर प्रारम्भ होना चाहिए. | :0400000300003800C1 |
| 04 | विस्तारित रैखिक एड्रेस | 32 बिट एड्रेसिंग (4 GiB तक) की अनुमति देता है। बाइट काउंट निरंतर होती है 02 और एड्रेस फ़ील्ड को अनदेखा कर दिया जाता है (सामान्यतः)। 0000). दो डेटा बाइट्स (बड़े एंडियन) बाद के सभी टाइप के लिए 32 बिट निरपेक्ष एड्रेस के ऊपरी 16 बिट्स निर्दिष्ट करते हैं 00 अभिलेख; ये ऊपरी एड्रेस बिट्स अगले तक लागू होते हैं 04 अभिलेख। किसी टाइप के लिए पूर्ण एड्रेस 00 रिकॉर्ड नवीनतम के ऊपरी 16 एड्रेस बिट्स को मिलाकर बनाया गया है 04 निम्न 16 एड्रेस बिट्स के साथ रिकॉर्ड करें 00 अभिलेख। यदि एक टाइप 00रिकॉर्ड के पहले कोई टाइप नहीं है 04 रिकॉर्ड करता है तो इसके ऊपरी 16 एड्रेस बिट्स डिफ़ॉल्ट रूप से 0000 होते हैं। | :020000040800F2 |
| 05 | रेखीय एड्रेस प्रारंभ करें | बाइट काउंट निरंतर होती है 04, एड्रेस फ़ील्ड है 0000. चार डेटा बाइट्स 32-बिट एड्रेस वैल्यू (बिग-एंडियन) का प्रतिनिधित्व करते हैं। इसका समर्थन करने वाले सीपीयू के स्थिति में, यह 32-बिट एड्रेस वह एड्रेस है जिस पर निष्पादन प्रारम्भ होना चाहिए। | :04000005000000CD2A |
अन्य रिकॉर्ड टाइप का उपयोग वेरिएंट के लिए किया गया है, जिनमें 06 वेन और लेने द्वारा,[25] 0A, 0B, 0C, 0D और 0E बीबीसी/माइक्रो:बिट एजुकेशनल फाउंडेशन द्वारा,[26] और 81, 82, 83, 84, 85, 86, 87 और 88डिजिटल अनुसंधान द्वारा सम्मिलित हैं।[3][15]
नामांकित फॉर्मेट
1973/1974 में मूल 4-बिट/8-बिट इंटेलेक हेक्स पेपर टेप फॉर्मेट और इंटेलेक हेक्स कंप्यूटर पंच्ड कार्ड फॉर्मेट केवल एक रिकॉर्ड प्रकार 00 का समर्थन करता था।[27][28][20] रिकॉर्ड प्रकार 01.[11] का भी समर्थन करने के लिए 1975 के आसपास इसका विस्तार किया गया था इसमें प्रतीकात्मक डिबगिंग के लिए एक प्रतीक तालिका वाला एक वैकल्पिक हेडर सम्मिलित हो सकता है,[20][21][6] कोलन से पहले के रिकॉर्ड में सभी वर्णों को अनदेखा कर दिया जाता है।[11][2]
1978 के आसपास, इंटेल ने अपने विस्तारित इंटेललेक हेक्स फॉर्मेट में नए रिकॉर्ड प्रकार 02 और 03 (तत्कालीन नए 8086/8088 प्रोसेसर के खंडित पता स्थान के लिए समर्थन जोड़ने के लिए) प्रस्तुत किया था।
कभी-कभी हेक्स फ़ाइलों के प्रारूपों को दर्शाने के लिए विशेष नामों का उपयोग किया जाता है जो रिकॉर्ड टाइप के विशिष्ट उपसमूहों को नियोजित करते हैं। उदाहरण के लिए:
- I8HEX फ़ाइलें केवल रिकॉर्ड टाइप 00 और 01 का उपयोग करती हैं।
- I16HEX फ़ाइलें केवल रिकॉर्ड टाइप 00 द्वारा 03 का उपयोग करती हैं।[7]
- I32HEX फ़ाइलें केवल रिकॉर्ड टाइप 00, 01, 04, और 05 का उपयोग करती हैं।
फ़ाइल उदाहरण
यह उदाहरण एक फ़ाइल दिखाता है जिसमें चार डेटा रिकॉर्ड हैं और उसके बाद फ़ाइल का अंत रिकॉर्ड है: :10010000214601360121470136007EFE09D2190140 :100110002146017E17C20001FF5F16002148011928 :10012000194E79234623965778239EDA3F01B2CAA7 :100130003F0156702B5E712B722B732146013421C7 :00000001FF
Start code Byte count Address Record type Data Checksum
वेरिएंट
इंटेल के स्वयं के विस्तार के अलावा, कई थर्ड पार्टी ने भी इंटेल हेक्स फॉर्मेट के वेरिएंट और एक्सटेंशन को परिभाषित किया है, जिसमें डिजिटल रिसर्च (तथाकथित "डिजिटल रिसर्च हेक्स फॉर्मेट" [15][3], ज़िलॉग, मोस्टेक, [ सम्मिलित हैं।[22][23] टीडीएल,[23][24] टेक्सास इंस्ट्रूमेंट्स, माइक्रोचिप,[29] सी'टी, वेन और लेने,[25] और बीबीसी/माइक्रो:बिट एजुकेशनल फाउंडेशन (अपने "यूनिवर्सल हेक्स फॉर्मेट" के साथ)[26] इनमें प्रोग्राम प्रवेश बिंदुओं और रजिस्टर सामग्री, डेटा फ़ील्ड में एक स्वैप किए गए बाइट ऑर्डर, अप्रयुक्त क्षेत्रों के लिए मान भरने, फ़्यूज़ बिट्स और अन्य अंतरों के बारे में जानकारी हो सकती है।
8086 प्रोसेसर के लिए डिजिटल रिसर्च हेक्स फॉर्मेट कोड, डेटा, स्टैक और अतिरिक्त सेगमेंट के बीच अंतर करने के लिए रिकॉर्ड टाइप जोड़कर सेगमेंट जानकारी का समर्थन करता है।[2][3][15]
CP/M-80 (और मोटोरोला 6809 के लिए XASM09) के लिए अधिकांश असेंबलर फ़ाइल के अंत को इंगित करने के लिए रिकॉर्ड टाइप 01h का उपयोग नहीं करते हैं, बल्कि इसके बजाय शून्य-लंबाई डेटा टाइप 00h प्रविष्टि का उपयोग करते हैं।[30] यह एकाधिक हेक्स फ़ाइलों के संयोजन को आसान बनाता है।[31][32][1]
टेक्सास इंस्ट्रूमेंट्स एक वेरिएंट को परिभाषित करता है जहां एड्रेस प्रोसेसर के रजिस्टरों की बिट-विड्थ पर आधारित होते हैं, बाइट्स पर नहीं।
माइक्रोचिप वेरिएंट INTHX8S[33] (INHX8L,[1] INHX8H[1]), INHX8M,[33][1][34] INHX16[33] (INHX16M[1] और INHX32[35] उनके पीआईसी माइक्रोकंट्रोलर को परिभाषित करता है।
अल्फ्रेड अर्नोल्ड के क्रॉस-मैक्रो-असेम्बलर AS,[1] वर्नर हेनिग-रोलेफ़ के 8051-एमुलेटर SIM51,[21] और मैथियास आर. पॉल के क्रॉस-कन्वर्टर BINTEL को इंटेल हेक्स फॉर्मेट में एक्सटेंशन को परिभाषित करने के लिए भी जाना जाता है।
यह भी देखें
- बाइनरी-टू-टेक्स्ट एन्कोडिंग, एक सर्वेक्षण और एन्कोडिंग एल्गोरिदम की तुलना
- एमओएस प्रौद्योगिकी फ़ाइल फॉर्मेट
- मोटोरोला एस-रिकॉर्ड हेक्स फॉर्मेट
- टेक्ट्रोनिक्स हेक्स फॉर्मेट
संदर्भ
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Arnold, Alfred (2020) [1996, 1989]. "6.3. P2HEX". Macro Assembler AS - User's Manual. V1.42. Translated by Arnold, Alfred; Hilse, Stefan; Kanthak, Stephan; Sellke, Oliver; De Tomasi, Vittorio. Archived from the original on 2020-02-28. Retrieved 2020-02-28.
[…] For the PIC microcontrollers, the switch -m <0..3> allows to generate the three different variants of the Intel Hex format. Format 0 is INHX8M which contains all bytes in a Lo-Hi-Order. Addresses become double as large because the PICs have a word-oriented address space that increments addresses only by one per wo