इंटेल हेक्स
| Filename extension |
|---|
इंटेल हेक्साडेसिमल ऑब्जेक्ट फ़ाइल फॉर्मेट, इंटेल हेक्स फॉर्मेट या इंटेलेक हेक्स एक फ़ाइल फॉर्मेट है जो ASCII टेक्स्ट रूप में बाइनरी जानकारी देता है।[7] इसका उपयोग आमतौर पर प्रोग्रामिंग माइक्रोकंट्रोलर, EPROMs और अन्य टाइप के प्रोग्रामेबल लॉजिक डिवाइस और हार्डवेयर एमुलेटर के लिए किया जाता है। एक विशिष्ट एप्लिकेशन में, एक कंपाइलर या असेंबलर एक प्रोग्राम के सोर्स कोड (जैसे सी या असेंबली लैंग्वेज में) को मशीन कोड में परिवर्तित करता है और इसे HEX फ़ाइल में आउटपुट करता है। कुछ लोग इसका उपयोग स्ट्रीम डेटा के पैकेट रखने वाले कंटेनर फॉर्मेट के रूप में भी करते हैं।[8][1] परिणामी फ़ाइलों के लिए उपयोग किए जाने वाले सामान्य फ़ाइल एक्सटेंशन .HEX[1] या .H86 हैं।[2][3] HEX फ़ाइल को प्रोग्रामर द्वारा PROM में मशीन कोड लिखने के लिए पढ़ा जाता है या लोडिंग और निष्पादन के लिए लक्ष्य सिस्टम में स्थानांतरित किया जाता है।[9][10]
इतिहास
इंटेल हेक्स प्रारूप मूल रूप से 1973 में इंटेल के इंटेलेक माइक्रो कंप्यूटर डेवलपमेंट सिस्टम (एमडीएस) के लिए डिज़ाइन किया गया था ताकि पेपर टेप से प्रोग्राम लोड और निष्पादित किया जा सके। इसका उपयोग ROM उत्पादन के लिए Intel को मेमोरी सामग्री निर्दिष्ट करने के लिए भी किया जाता था।[11] 1973 में, इंटेल के "सॉफ़्टवेयर समूह" में केवल बिल बायर्ली और केन बर्गेट और बाहरी सलाहकार के रूप में गैरी किल्डॉल शामिल थे।[12][13][6] 1975 की शुरुआत में, फ़ाइल एक्सटेंशन HEX का उपयोग करते हुए, इस प्रारूप का उपयोग MCS सीरीज II ISIS-II सिस्टम द्वारा किया गया था।[14] कई PROM और EPROM प्रोग्रामिंग उपकरणों ने इस प्रारूप को स्वीकार किया।
फॉर्मेट
Intel HEX में 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
चेकसम काउंट
एक रिकॉर्ड का चेकसम बाइट, चेकसम से पहले के रिकॉर्ड में सभी डिकोड किए गए बाइट मानों के योग के कम से कम महत्वपूर्ण बाइट (एलएसबी) का दो पूरक है। इसकी गणना डिकोड किए गए बाइट मानों को जोड़कर और योग के एलएसबी को निकालकर (यानी, डेटा चेकसम) करके की जाती है, और फिर एलएसबी के दो पूरक की गणना की जाती है (उदाहरण के लिए, इसके बिट्स को उलटा करके और एक जोड़कर)।
उदाहरण के लिए, रिकॉर्ड के मामले में :0300300002337A1E, डिकोड किए गए बाइट मानों का योग है 03 + 00 + 30 + 00 + 02 + 33 + 7A = E2, जिसका एलएसबी मूल्य है E2. दोनों का पूरक E2 है 1E, जो रिकॉर्ड के अंत में प्रदर्शित होने वाला चेकसम बाइट है।
किसी रिकॉर्ड की वैधता को उसके चेकसम की काउंट करके और यह सत्यापित करके जांचा जा सकता है कि काउंट किया गया चेकसम रिकॉर्ड में दिखाई देने वाले चेकसम के बराबर है; यदि चेकसम भिन्न हैं तो एक त्रुटि का संकेत दिया जाता है। चूँकि रिकॉर्ड का चेकसम बाइट दोनों का पूरक है - और इसलिए डेटा चेकसम का योगात्मक व्युत्क्रम -, इस प्रक्रिया को रिकॉर्ड के चेकसम सहित सभी डिकोड किए गए बाइट मानों के योग तक कम किया जा सकता है, और यह सत्यापित किया जा सकता है कि योग का एलएसबी शून्य है। जब पिछले उदाहरण पर लागू किया जाता है, तो यह विधि निम्नलिखित परिणाम उत्पन्न करती है: 03 + 00 + 30 + 00 + 02 + 33 + 7A + 1E = 100, जिसका एलएसबी मूल्य 00है।
टेक्स्ट लाइन टर्मिनेटर
इंटेल HEX रिकॉर्ड आमतौर पर एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किए जाते हैं ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह रिकॉर्ड्स को दृश्य रूप से सीमित करके पठनीयता को बढ़ाता है और यह रिकॉर्ड्स के बीच पैडिंग भी प्रदान करता है जिसका उपयोग मशीन पार्सिंग दक्षता में सुधार के लिए किया जा सकता है। हालाँकि, पंक्ति समाप्ति वर्ण वैकल्पिक हैं, क्योंकि ':' का उपयोग रिकॉर्ड की शुरुआत का पता लगाने के लिए किया जाता है।[11][2][19][15][16][17][18]
HEX रिकॉर्ड बनाने वाले प्रोग्राम आमतौर पर लाइन टर्मिनेशन वर्णों का उपयोग करते हैं जो उनके ऑपरेटिंग सिस्टम की परंपराओं के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल एलएफ (लाइन फ़ीड, हेक्स वैल्यू 0A) वर्ण का उपयोग करते हैं, जबकि विंडोज प्रोग्राम एलएफ के बाद सीआर (कैरिज रिटर्न, हेक्स वैल्यू 0D) का उपयोग करते हैं।
रिकॉर्ड टाइप
इंटेल HEX के छह मानक रिकॉर्ड प्रकार हैं:[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]1975 के आसपास इसका विस्तार किया गया[when?]रिकॉर्ड टाइप का भी समर्थन करने के लिए 01.[11]इसमें प्रतीकात्मक डिबगिंग के लिए प्रतीक तालिका वाला एक वैकल्पिक हेडर शामिल हो सकता है,[20][21][6]किसी रिकॉर्ड में कोलन से पहले के सभी वर्णों को अनदेखा कर दिया जाता है।[11][2]
1978 के आसपास[when?], इंटेल ने नए रिकॉर्ड टाइप पेश किए 02 और 03 (तत्कालीन नए 8086/8088 प्रोसेसर के खंडित एड्रेस स्थान के लिए समर्थन जोड़ने के लिए) उनके विस्तारित इंटेलेक हेक्स फॉर्मेट में।[when?]
कभी-कभी HEX फ़ाइलों के प्रारूपों को दर्शाने के लिए विशेष नामों का उपयोग किया जाता है जो रिकॉर्ड प्रकारों के विशिष्ट उपसमूहों को नियोजित करते हैं। उदाहरण के लिए:
- 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
वेरिएंट
इंटेल के स्वयं के विस्तार के अलावा, कई तृतीय-पक्षों ने भी डिजिटल रिसर्च (तथाकथित डिजिटल रिसर्च हेक्स फॉर्मेट में) सहित इंटेल हेक्स फॉर्मेट के वेरिएंट और एक्सटेंशन को परिभाषित किया है[3][15]), ज़ाइलॉग, मोस्टेक,[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]उनके पीआईसी माइक्रोकंट्रोलर के लिए।
अल्फ्रेड अर्नोल्ड का क्रॉस-मैक्रो-असेंबलर एएस,[1]वर्नर हेनिग-रोलेफ़ का इंटेल 8051-एमुलेटर SIM51,[21]और मैथियास आर. पॉल के क्रॉस-कन्वर्टर BINTEL को इंटेल हेक्स फॉर्मेट में एक्सटेंशन को परिभाषित करने के लिए भी जाना जाता है।
यह भी देखें
- बाइनरी-टू-टेक्स्ट एन्कोडिंग, एक सर्वेक्षण और एन्कोडिंग एल्गोरिदम की तुलना
- एमओएस प्रौद्योगिकी फ़ाइल फॉर्मेट