इंटेल हेक्स
| 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]
- अंततः, , दो हेक्स अंक, एक परिकलित मान जिसका उपयोग यह सत्यापित करने के लिए किया जा सकता है कि रिकॉर्ड में कोई त्रुटि नहीं है।
रंग किंवदंती
एक दृश्य सहायता के रूप में, Intel HEX रिकॉर्ड के फ़ील्ड इस पूरे आलेख में निम्नानुसार रंगीन हैं:
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) के बाद एक एलएफ।
रिकॉर्ड प्रकार
Intel HEX के छह मानक रिकॉर्ड प्रकार हैं:[9]
| Hex code | Record type | Description | Example |
|---|---|---|---|
| 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 को इंटेल हेक्स फॉर्मेट में एक्सटेंशन को परिभाषित करने के लिए भी जाना जाता है।
यह भी देखें
- बाइनरी-टू-टेक्स्ट एन्कोडिंग, एक सर्वेक्षण और एन्कोडिंग एल्गोरिदम की तुलना
- एमओएस प्रौद्योगिकी फ़ाइल फॉर्मेट
- मोटोरोला एस-रिकॉर्ड हेक्स फॉर्मेट
- टेक्ट्रोनिक्स हेक्स फॉर्मेट