इंटेल हेक्स

From Vigyanwiki

Intel hex
Filename extension
.hex,[1] .h86,[2][3] .hxl,[4] .hxh,[4] .obl,[4] .obh,[4] .mcs,[5] .ihex, .ihe, .ihx, .a43, .a90, .p00[6] to .pff[6]

इंटेल हेक्साडेसिमल ऑब्जेक्ट फ़ाइल फॉर्मेट, इंटेल हेक्स फॉर्मेट या इंटेलेक हेक्स एक फ़ाइल फॉर्मेट है जो 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]

  1. स्टार्ट कोड, एक वर्ण, एक 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] अनुक्रम के अनुसार, '//' का प्रयोग अक्सर टिप्पणियों के लिए किया जाता है। इनमें से किसी भी एक्सटेंशन में पेलोड के हिस्से के रूप में कोई ':' अक्षर शामिल नहीं हो सकता है।
  2. बाइट काउंट, दो हेक्स अंक (एक हेक्स अंक जोड़ी), डेटा फ़ील्ड में बाइट्स (हेक्स अंक जोड़े) की संख्या दर्शाती है। अधिकतम बाइट काउंट 255 (0xFF) है। 8 (0x08),[6]16 (0x10)[6]और 32 (0x20) आमतौर पर उपयोग की जाने वाली बाइट काउंट हैं। सभी सॉफ़्टवेयर 16 से बड़ी काउंट का सामना नहीं कर पाते।[5]#
  3. एड्रेस, चार हेक्स अंक, डेटा के 16-बिट आरंभिक मेमोरी एड्रेस ऑफसेट का प्रतिनिधित्व करते हैं। डेटा के भौतिक पते की काउंट इस ऑफसेट को पहले से स्थापित आधार पते में जोड़कर की जाती है, इस टाइप 16-बिट पते की 64 किलोबाइट सीमा से परे मेमोरी एड्रेसिंग की अनुमति मिलती है। आधार एड्रेस, जो डिफ़ॉल्ट रूप से शून्य होता है, विभिन्न टाइप के रिकॉर्ड द्वारा बदला जा सकता है। आधार पते और एड्रेस ऑफसेट को निरंतर बड़े एंडियन मान के रूप में व्यक्त किया जाता है।
  4. रिकॉर्ड टाइप (नीचे #रिकॉर्ड टाइप देखें), दो हेक्स अंक, 00 को 05, डेटा फ़ील्ड का अर्थ परिभाषित करना।
  5. डेटा, डेटा के n बाइट्स का एक क्रम, जिसे 2n हेक्स अंकों द्वारा दर्शाया जाता है। कुछ रिकॉर्ड इस फ़ील्ड को छोड़ देते हैं (n शून्य के बराबर है)। डेटा बाइट्स का अर्थ और व्याख्या एप्लिकेशन पर निर्भर करती है। (4-बिट डेटा को या तो बाइट्स के निचले या ऊपरी आधे हिस्से में संग्रहीत करना होगा, यानी, एक बाइट में केवल एक एड्रेस योग्य डेटा आइटम होता है।[11]
  6. अंततः, , दो हेक्स अंक, एक परिकलित मान जिसका उपयोग यह सत्यापित करने के लिए किया जा सकता है कि रिकॉर्ड में कोई त्रुटि नहीं है।

कलर लीजेंड

एक दृश्य सहायता के रूप में, इंटेल हेक्स रिकॉर्ड के क्षेत्र इस पूरे आलेख में निम्नानुसार रंगीन हैं:

  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है।

टेक्स्ट लाइन टर्मिनेटर

इंटेल हेक्स रिकॉर्ड आमतौर पर एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किए जाते हैं ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह रिकॉर्ड्स को दृश्य रूप से सीमित करके पठनीयता को बढ़ाता है और यह रिकॉर्ड्स के बीच पैडिंग भी प्रदान करता है जिसका उपयोग मशीन पार्सिंग दक्षता में सुधार के लिए किया जा सकता है। हालाँकि, पंक्ति समाप्ति वर्ण वैकल्पिक हैं, क्योंकि ':' का उपयोग रिकॉर्ड की शुरुआत का पता लगाने के लिए किया जाता है।[11][2][19][15][16][17][18]

हेक्स रिकॉर्ड बनाने वाले प्रोग्राम आमतौर पर लाइन टर्मिनेशन वर्णों का उपयोग करते हैं जो उनके ऑपरेटिंग सिस्टम की परंपराओं के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल एलएफ (लाइन फ़ीड, हेक्स वैल्यू 0A) वर्ण का उपयोग करते हैं, जबकि विंडोज प्रोग्राम एलएफ के बाद सीआर (कैरिज रिटर्न, हेक्स वैल्यू 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. 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 word. […] With Format 1 (INHX16M), bytes are stored in their natural order. This is the format Microchip uses for its own programming devices. Format 2 (INHX8L) resp. 3 (INHX8H) split words into their lower resp. upper bytes. […] Unfortunately, one finds different statements about the last line of an Intel-Hex file in literature. Therefore, P2HEX knows three different variants that may be selected […] :00000001FF […] :00000001 […] :0000000000 […] By default, variant 0 is used which seems to be the most common one. […] If the target file name does not have an extension, an extension of HEX is supposed. […]
  2. 2.0 2.1 2.2 2.3 2.4 2.5 "3.1. Intel 8086 Hex File Format". CP/M-86 Operating System - System Guide (PDF) (2nd printing, 1st ed.). Pacific Grove, California, USA: Digital Research. June 1981. pp. 15–16. Archived (PDF) from the original on 2020-02-28. Retrieved 2020-02-28. p. 16: […] The following are output from ASM-86 only: 81 same as 00, data belongs to code segment […] 82 same as 00, data belongs to data segment […] 83 same as 00, data belongs to stack segment […] 84 same as 00, data belongs to extra segment […] 85 paragraph address for absolute code segment […] 86 paragraph address for absolute data segment […] 87 paragraph address for absolute stack segment […] 88 paragraph address for absolute extra segment […] All characters preceding the colon for each record are ignored. […]