इंटेल हेक्स: Difference between revisions
| Line 19: | Line 19: | ||
# ''स्टार्ट कोड'', एक वर्ण, एक ASCII कोलन ':'। किसी रिकॉर्ड में इस प्रतीक से पहले आने वाले सभी वर्णों को अनदेखा किया जाना चाहिए।<ref name="Intel_1977" /><ref name="DRI_1981_CPM86-SG" /><ref name="DRI_1984_CCPM-PRG" /><ref name="DataIO_1980_OG" /><ref name="DataIO_1987_TFF" /><ref name="Fujitsu_2001" /> वास्तव में, विनिर्देश के बहुत शुरुआती संस्करणों में पहले रिकॉर्ड से पहले और अंतिम रिकॉर्ड के बाद कम से कम 25 एनयूएल वर्णों की मांग की गई थी।<ref name="Intel_1977" /><ref name="DRI_1982_CPM-M" /><ref name="DataIO_1980_OG" /><ref name="DataIO_1987_TFF" /> हालाँकि, चूंकि यह विनिर्देशन का एक अल्पज्ञात हिस्सा था, इसलिए लिखे गए सभी सॉफ़्टवेयर इसका सही ढंग से सामना नहीं कर पाते। यह अन्य संबंधित जानकारी को एक ही फ़ाइल (और यहां तक कि एक ही लाइन) में संग्रहीत करने की अनुमति देता है,<ref name="Intel_1977" /><ref name="Fujitsu_2001" /> प्रतीक तालिकाओं या अतिरिक्त टिप्पणियों को संग्रहीत करने के लिए विभिन्न सॉफ़्टवेयर विकास उपयोगिताओं द्वारा उपयोग की जाने वाली सुविधा,<ref name="Intel_1974_PLM" /><ref name="Intel_1977" /><ref name="DataIO_1980_OG" /><ref name="Hennig-Roleff_1993" /><ref name="Roche_2000" /> और थर्ड पार्टी एक्सटेंशन अन्य वर्णों को स्टार्ट कोड के रूप में उपयोग करते हैं जैसे केइल द्वारा अंक '0', <ref name="Hennig-Roleff_1993" /> मोस्टेक द्वारा '$', <ref name="Formaniak-Leitch_1977" /><ref name="Ogdin-Colvin-Pittman-Tubb_1977" /> या '!', '@', '#', '\', '&' और ';' टीडीएल द्वारा.<ref name="Ogdin-Colvin-Pittman-Tubb_1977" /><ref name="Kreidl_1981" /> अनुक्रम के अनुसार, '//' का प्रयोग अक्सर टिप्पणियों के लिए किया जाता है। इनमें से किसी भी एक्सटेंशन में पेलोड के हिस्से के रूप में कोई ':' अक्षर शामिल नहीं हो सकता है। | # ''स्टार्ट कोड'', एक वर्ण, एक ASCII कोलन ':'। किसी रिकॉर्ड में इस प्रतीक से पहले आने वाले सभी वर्णों को अनदेखा किया जाना चाहिए।<ref name="Intel_1977" /><ref name="DRI_1981_CPM86-SG" /><ref name="DRI_1984_CCPM-PRG" /><ref name="DataIO_1980_OG" /><ref name="DataIO_1987_TFF" /><ref name="Fujitsu_2001" /> वास्तव में, विनिर्देश के बहुत शुरुआती संस्करणों में पहले रिकॉर्ड से पहले और अंतिम रिकॉर्ड के बाद कम से कम 25 एनयूएल वर्णों की मांग की गई थी।<ref name="Intel_1977" /><ref name="DRI_1982_CPM-M" /><ref name="DataIO_1980_OG" /><ref name="DataIO_1987_TFF" /> हालाँकि, चूंकि यह विनिर्देशन का एक अल्पज्ञात हिस्सा था, इसलिए लिखे गए सभी सॉफ़्टवेयर इसका सही ढंग से सामना नहीं कर पाते। यह अन्य संबंधित जानकारी को एक ही फ़ाइल (और यहां तक कि एक ही लाइन) में संग्रहीत करने की अनुमति देता है,<ref name="Intel_1977" /><ref name="Fujitsu_2001" /> प्रतीक तालिकाओं या अतिरिक्त टिप्पणियों को संग्रहीत करने के लिए विभिन्न सॉफ़्टवेयर विकास उपयोगिताओं द्वारा उपयोग की जाने वाली सुविधा,<ref name="Intel_1974_PLM" /><ref name="Intel_1977" /><ref name="DataIO_1980_OG" /><ref name="Hennig-Roleff_1993" /><ref name="Roche_2000" /> और थर्ड पार्टी एक्सटेंशन अन्य वर्णों को स्टार्ट कोड के रूप में उपयोग करते हैं जैसे केइल द्वारा अंक '0', <ref name="Hennig-Roleff_1993" /> मोस्टेक द्वारा '$', <ref name="Formaniak-Leitch_1977" /><ref name="Ogdin-Colvin-Pittman-Tubb_1977" /> या '!', '@', '#', '\', '&' और ';' टीडीएल द्वारा.<ref name="Ogdin-Colvin-Pittman-Tubb_1977" /><ref name="Kreidl_1981" /> अनुक्रम के अनुसार, '//' का प्रयोग अक्सर टिप्पणियों के लिए किया जाता है। इनमें से किसी भी एक्सटेंशन में पेलोड के हिस्से के रूप में कोई ':' अक्षर शामिल नहीं हो सकता है। | ||
# ''बाइट काउंट'', दो हेक्स अंक (एक हेक्स अंक जोड़ी), डेटा फ़ील्ड में बाइट्स (हेक्स अंक जोड़े) की संख्या दर्शाती है। अधिकतम बाइट काउंट 255 (0xFF) है। 8 (0x08),<ref name="Roche_2000" />16 (0x10)<ref name="Roche_2000" />और 32 (0x20) आमतौर पर उपयोग की जाने वाली बाइट काउंट हैं। सभी सॉफ़्टवेयर 16 से बड़ी काउंट का सामना नहीं कर पाते।<ref name="Xilinx_2010_MCS" /># | # ''बाइट काउंट'', दो हेक्स अंक (एक हेक्स अंक जोड़ी), डेटा फ़ील्ड में बाइट्स (हेक्स अंक जोड़े) की संख्या दर्शाती है। अधिकतम बाइट काउंट 255 (0xFF) है। 8 (0x08),<ref name="Roche_2000" />16 (0x10)<ref name="Roche_2000" />और 32 (0x20) आमतौर पर उपयोग की जाने वाली बाइट काउंट हैं। सभी सॉफ़्टवेयर 16 से बड़ी काउंट का सामना नहीं कर पाते।<ref name="Xilinx_2010_MCS" /># | ||
# ''एड्रेस'', चार हेक्स अंक, डेटा के 16-बिट आरंभिक मेमोरी एड्रेस ऑफसेट का प्रतिनिधित्व करते हैं। डेटा के भौतिक पते की काउंट इस ऑफसेट को पहले से स्थापित आधार पते में जोड़कर की जाती है, इस टाइप 16-बिट पते की 64 किलोबाइट सीमा से परे मेमोरी एड्रेसिंग की अनुमति मिलती है। आधार एड्रेस, जो डिफ़ॉल्ट रूप से शून्य होता है, विभिन्न टाइप के रिकॉर्ड द्वारा बदला जा सकता है। आधार पते और एड्रेस ऑफसेट को | # ''एड्रेस'', चार हेक्स अंक, डेटा के 16-बिट आरंभिक मेमोरी एड्रेस ऑफसेट का प्रतिनिधित्व करते हैं। डेटा के भौतिक पते की काउंट इस ऑफसेट को पहले से स्थापित आधार पते में जोड़कर की जाती है, इस टाइप 16-बिट पते की 64 किलोबाइट सीमा से परे मेमोरी एड्रेसिंग की अनुमति मिलती है। आधार एड्रेस, जो डिफ़ॉल्ट रूप से शून्य होता है, विभिन्न टाइप के रिकॉर्ड द्वारा बदला जा सकता है। आधार पते और एड्रेस ऑफसेट को निरंतर [[बड़े एंडियन]] मान के रूप में व्यक्त किया जाता है। | ||
# ''रिकॉर्ड टाइप'' (नीचे #रिकॉर्ड टाइप देखें), दो हेक्स अंक, {{Intel HEX|||00||}} को {{Intel HEX|||05||}}, डेटा फ़ील्ड का अर्थ परिभाषित करना। | # ''रिकॉर्ड टाइप'' (नीचे #रिकॉर्ड टाइप देखें), दो हेक्स अंक, {{Intel HEX|||00||}} को {{Intel HEX|||05||}}, डेटा फ़ील्ड का अर्थ परिभाषित करना। | ||
# ''डेटा'', डेटा के n बाइट्स का एक क्रम, जिसे ''2n हेक्स'' अंकों द्वारा दर्शाया जाता है। कुछ रिकॉर्ड इस फ़ील्ड को छोड़ देते हैं (n शून्य के बराबर है)। डेटा बाइट्स का अर्थ और व्याख्या एप्लिकेशन पर निर्भर करती है। (4-बिट डेटा को या तो बाइट्स के निचले या ऊपरी आधे हिस्से में संग्रहीत करना होगा, यानी, एक बाइट में केवल एक एड्रेस योग्य डेटा आइटम होता है।<ref name="Intel_1977" /> | # ''डेटा'', डेटा के n बाइट्स का एक क्रम, जिसे ''2n हेक्स'' अंकों द्वारा दर्शाया जाता है। कुछ रिकॉर्ड इस फ़ील्ड को छोड़ देते हैं (n शून्य के बराबर है)। डेटा बाइट्स का अर्थ और व्याख्या एप्लिकेशन पर निर्भर करती है। (4-बिट डेटा को या तो बाइट्स के निचले या ऊपरी आधे हिस्से में संग्रहीत करना होगा, यानी, एक बाइट में केवल एक एड्रेस योग्य डेटा आइटम होता है।<ref name="Intel_1977" /> | ||
| Line 37: | Line 37: | ||
===टेक्स्ट लाइन टर्मिनेटर=== | ===टेक्स्ट लाइन टर्मिनेटर=== | ||
इंटेल HEX रिकॉर्ड आमतौर पर एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किए जाते हैं ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह | इंटेल HEX रिकॉर्ड आमतौर पर एक या अधिक ASCII लाइन समाप्ति वर्णों द्वारा अलग किए जाते हैं ताकि प्रत्येक रिकॉर्ड एक टेक्स्ट लाइन पर अकेला दिखाई दे। यह रिकॉर्ड्स को दृश्य रूप से सीमित करके पठनीयता को बढ़ाता है और यह रिकॉर्ड्स के बीच पैडिंग भी प्रदान करता है जिसका उपयोग मशीन पार्सिंग दक्षता में सुधार के लिए किया जा सकता है। हालाँकि, पंक्ति समाप्ति वर्ण वैकल्पिक हैं, क्योंकि ':' का उपयोग रिकॉर्ड की शुरुआत का पता लगाने के लिए किया जाता है।<ref name="Intel_1977"/><ref name="DRI_1981_CPM86-SG"/><ref name="DRI_1982_CPM-M"/><ref name="DRI_1984_CCPM-PRG"/><ref name="DataIO_1980_OG"/><ref name="DataIO_1987_TFF"/><ref name="Fujitsu_2001"/> | ||
HEX रिकॉर्ड बनाने वाले प्रोग्राम आमतौर पर लाइन टर्मिनेशन वर्णों का उपयोग करते हैं जो उनके [[ऑपरेटिंग सिस्टम]] की परंपराओं के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम एकल एलएफ (लाइन फ़ीड, हेक्स वैल्यू | HEX रिकॉर्ड बनाने वाले प्रोग्राम आमतौर पर लाइन टर्मिनेशन वर्णों का उपयोग करते हैं जो उनके [[ऑपरेटिंग सिस्टम]] की परंपराओं के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल एलएफ (लाइन फ़ीड, हेक्स वैल्यू <code>0A</code>) वर्ण का उपयोग करते हैं, जबकि विंडोज प्रोग्राम एलएफ के बाद सीआर (कैरिज रिटर्न, हेक्स वैल्यू <code>0D</code>) का उपयोग करते हैं। | ||
===रिकॉर्ड टाइप=== | ===रिकॉर्ड टाइप=== | ||
इंटेल HEX के छह मानक रिकॉर्ड प्रकार हैं:<ref name="Intel_1988_Spec"/> | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! हेक्स कोड | ||
! | ! रिकार्ड टाइप | ||
! | ! विवरण | ||
! | ! उदाहरण | ||
|- valign="top" | |- valign="top" | ||
| align="center" | {{Intel HEX|||00||}} | | align="center" | {{Intel HEX|||00||}} | ||
| | | सांख्यिकी | ||
| बाइट काउंट रिकॉर्ड में डेटा बाइट्स की संख्या निर्दिष्ट करती है। उदाहरण है {{Intel HEX|0B||||}} (ग्यारह) डेटा बाइट्स। डेटा के लिए 16-बिट प्रारंभिक एड्रेस (उदाहरण में प्रारंभ होने वाले पते पर {{Intel HEX||0010|||}}) और डेटा ({{Intel HEX||||61|}}, {{Intel HEX||||64|}}, {{Intel HEX||||64|}}, {{Intel HEX||||72|}}, {{Intel HEX||||65|}}, {{Intel HEX||||73|}}, {{Intel HEX||||73|}}, {{Intel HEX||||20|}}, {{Intel HEX||||67|}}, {{Intel HEX||||61|}}, {{Intel HEX||||70|}}). | | बाइट काउंट रिकॉर्ड में डेटा बाइट्स की संख्या निर्दिष्ट करती है। उदाहरण है {{Intel HEX|0B||||}} (ग्यारह) डेटा बाइट्स। डेटा के लिए 16-बिट प्रारंभिक एड्रेस (उदाहरण में प्रारंभ होने वाले पते पर {{Intel HEX||0010|||}}) और डेटा ({{Intel HEX||||61|}}, {{Intel HEX||||64|}}, {{Intel HEX||||64|}}, {{Intel HEX||||72|}}, {{Intel HEX||||65|}}, {{Intel HEX||||73|}}, {{Intel HEX||||73|}}, {{Intel HEX||||20|}}, {{Intel HEX||||67|}}, {{Intel HEX||||61|}}, {{Intel HEX||||70|}}). | ||
| {{Intel HEX|0B|0010|00|6164647265737320676170|A7}} | | {{Intel HEX|0B|0010|00|6164647265737320676170|A7}} | ||
| Line 63: | Line 63: | ||
| संरेखित = केंद्र | {{Intel HEX|||02||}} | | संरेखित = केंद्र | {{Intel HEX|||02||}} | ||
| विस्तारित खंड एड्रेस | | विस्तारित खंड एड्रेस | ||
| बाइट काउंट | | बाइट काउंट निरंतर होती है {{Intel HEX|02||||}}, एड्रेस फ़ील्ड (आमतौर पर {{Intel HEX||0000|||}}) को नजरअंदाज कर दिया जाता है और डेटा फ़ील्ड में 16-बिट खंड आधार एड्रेस होता है। इसे 16 से गुणा किया जाता है और डेटा के लिए शुरुआती एड्रेस बनाने के लिए प्रत्येक बाद के डेटा रिकॉर्ड पते में जोड़ा जाता है। यह एड्रेस स्थान के एक [[mebibyte]] (1048576 बाइट्स) तक संबोधित करने की अनुमति देता है। | ||
| {{Intel HEX|02|0000|02|1200|EA}} | | {{Intel HEX|02|0000|02|1200|EA}} | ||
|- वैलाइन = शीर्ष | |- वैलाइन = शीर्ष | ||
| संरेखित = केंद्र | {{Intel HEX|||03||}} | | संरेखित = केंद्र | {{Intel HEX|||03||}} | ||
| प्रारंभ खंड एड्रेस | | प्रारंभ खंड एड्रेस | ||
| 80x86 प्रोसेसर के लिए, प्रारंभिक निष्पादन एड्रेस निर्दिष्ट करता है। बाइट काउंट | | 80x86 प्रोसेसर के लिए, प्रारंभिक निष्पादन एड्रेस निर्दिष्ट करता है। बाइट काउंट निरंतर होती है {{Intel HEX|04||||}}, एड्रेस फ़ील्ड है {{Intel HEX||0000|||}} और पहले दो डेटा बाइट्स [[ कोड खंड ]] मान हैं, बाद वाले दो निर्देश सूचक मान हैं। निष्पादन इस पते पर शुरू होना चाहिए. | ||
| {{Intel HEX|04|0000|03|00003800|C1}} | | {{Intel HEX|04|0000|03|00003800|C1}} | ||
|- वैलाइन = शीर्ष | |- वैलाइन = शीर्ष | ||
| संरेखित = केंद्र | {{Intel HEX|||04||}} | | संरेखित = केंद्र | {{Intel HEX|||04||}} | ||
| विस्तारित रैखिक एड्रेस | | विस्तारित रैखिक एड्रेस | ||
| 32 बिट एड्रेसिंग (4 GiB तक) की अनुमति देता है। बाइट काउंट | | 32 बिट एड्रेसिंग (4 GiB तक) की अनुमति देता है। बाइट काउंट निरंतर होती है {{Intel HEX|02||||}} और एड्रेस फ़ील्ड को अनदेखा कर दिया जाता है (आमतौर पर)। {{Intel HEX||0000|||}}). दो डेटा बाइट्स (बड़े एंडियन) बाद के सभी प्रकारों के लिए 32 बिट निरपेक्ष पते के ऊपरी 16 बिट्स निर्दिष्ट करते हैं {{Intel HEX|||00||}} अभिलेख; ये ऊपरी एड्रेस बिट्स अगले तक लागू होते हैं {{Intel HEX|||04||}} अभिलेख। किसी टाइप के लिए पूर्ण एड्रेस {{Intel HEX|||00||}} रिकॉर्ड नवीनतम के ऊपरी 16 एड्रेस बिट्स को मिलाकर बनाया गया है {{Intel HEX|||04||}} निम्न 16 एड्रेस बिट्स के साथ रिकॉर्ड करें {{Intel HEX|||00||}} अभिलेख। यदि एक टाइप {{Intel HEX|||00||}}रिकॉर्ड के पहले कोई टाइप नहीं है {{Intel HEX|||04||}} रिकॉर्ड करता है तो इसके ऊपरी 16 एड्रेस बिट्स डिफ़ॉल्ट रूप से 0000 होते हैं। | ||
| {{Intel HEX|02|0000|04|0800|F2}} | | {{Intel HEX|02|0000|04|0800|F2}} | ||
|- वैलाइन = शीर्ष | |- वैलाइन = शीर्ष | ||
| संरेखित = केंद्र | {{Intel HEX|||05||}} | | संरेखित = केंद्र | {{Intel HEX|||05||}} | ||
| रेखीय एड्रेस प्रारंभ करें | | रेखीय एड्रेस प्रारंभ करें | ||
| बाइट काउंट | | बाइट काउंट निरंतर होती है {{Intel HEX|04||||}}, एड्रेस फ़ील्ड है {{Intel HEX||0000|||}}. चार डेटा बाइट्स 32-बिट एड्रेस वैल्यू (बिग-एंडियन) का प्रतिनिधित्व करते हैं। इसका समर्थन करने वाले सीपीयू के मामले में, यह 32-बिट एड्रेस वह एड्रेस है जिस पर निष्पादन शुरू होना चाहिए। | ||
| {{Intel HEX|04|0000|05|000000CD|2A}} | | {{Intel HEX|04|0000|05|000000CD|2A}} | ||
|} | |} | ||
अन्य रिकॉर्ड प्रकारों का उपयोग वेरिएंट के लिए किया गया है, जिनमें | अन्य रिकॉर्ड प्रकारों का उपयोग वेरिएंट के लिए किया गया है, जिनमें {{Intel HEX|||06||}} वेन और लेने द्वारा,<ref name="Beckler_2016"/> {{Intel HEX|||0A||}}, {{Intel HEX|||0B||}}, {{Intel HEX|||0C||}}, {{Intel HEX|||0D||}} और {{Intel HEX|||0E||}} [[बीबीसी]]/माइक्रो:बिट एजुकेशनल फाउंडेशन द्वारा,<ref name="BBC_2021_Universal"/> और {{Intel HEX|||81||}}, {{Intel HEX|||82||}}, {{Intel HEX|||83||}}, {{Intel HEX|||84||}}, {{Intel HEX|||85||}}, {{Intel HEX|||86||}}, {{Intel HEX|||87||}} और {{Intel HEX|||88||}}[[ डिजिटल अनुसंधान ]]द्वारा शामिल हैं।<ref name="DRI_1983_CPM86-PG"/><ref name="DRI_1984_CCPM-PRG"/> | ||
==={{anchor|I4|I8|I16|I32}}नामांकित फॉर्मेट=== | ==={{anchor|I4|I8|I16|I32}}नामांकित फॉर्मेट=== | ||
1973/1974 में मूल 4-बिट/8-बिट इंटेलेक हेक्स पेपर टेप फॉर्मेट और इंटेलेक हेक्स कंप्यूटर पंच्ड कार्ड फॉर्मेट केवल एक रिकॉर्ड टाइप का समर्थन करता था {{Intel HEX|||00||}}.<ref name="Intel_1973_Intellec8"/><ref name="Intel_1974_MOD8"/><ref name="Intel_1974_PLM"/>1975 के आसपास इसका विस्तार किया गया{{when|date=May 2022|reason=It would be great if we could narrow this down to an exact year, possibly even a month and back it up with a reliable source and/or the original publication introducing it.}}रिकॉर्ड टाइप का भी समर्थन करने के लिए {{Intel HEX|||01||}}.<ref name="Intel_1977"/>इसमें [[प्रतीकात्मक डिबगिंग]] के लिए प्रतीक तालिका वाला एक वैकल्पिक हेडर शामिल हो सकता है,<ref name="Intel_1974_PLM"/><ref name="Hennig-Roleff_1993"/><ref name="Roche_2000"/>किसी रिकॉर्ड में कोलन से पहले के सभी वर्णों को अनदेखा कर दिया जाता है।<ref name="Intel_1977"/><ref name="DRI_1981_CPM86-SG"/> | 1973/1974 में मूल 4-बिट/8-बिट इंटेलेक हेक्स पेपर टेप फॉर्मेट और इंटेलेक हेक्स कंप्यूटर पंच्ड कार्ड फॉर्मेट केवल एक रिकॉर्ड टाइप का समर्थन करता था {{Intel HEX|||00||}}.<ref name="Intel_1973_Intellec8"/><ref name="Intel_1974_MOD8"/><ref name="Intel_1974_PLM"/>1975 के आसपास इसका विस्तार किया गया{{when|date=May 2022|reason=It would be great if we could narrow this down to an exact year, possibly even a month and back it up with a reliable source and/or the original publication introducing it.}}रिकॉर्ड टाइप का भी समर्थन करने के लिए {{Intel HEX|||01||}}.<ref name="Intel_1977"/>इसमें [[प्रतीकात्मक डिबगिंग]] के लिए प्रतीक तालिका वाला एक वैकल्पिक हेडर शामिल हो सकता है,<ref name="Intel_1974_PLM"/><ref name="Hennig-Roleff_1993"/><ref name="Roche_2000"/>किसी रिकॉर्ड में कोलन से पहले के सभी वर्णों को अनदेखा कर दिया जाता है।<ref name="Intel_1977"/><ref name="DRI_1981_CPM86-SG"/> | ||
Revision as of 10:48, 9 August 2023
| 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 |