इंटेल हेक्स

इंटेल हेक्साडेसिमल ऑब्जेक्ट फ़ाइल फॉर्मेट, इंटेल हेक्स फॉर्मेट या इंटेलेक हेक्स एक फ़ाइल फॉर्मेट है जो ASCII टेक्स्ट रूप में बाइनरी जानकारी देता है। इसका उपयोग आमतौर पर प्रोग्रामिंग माइक्रोकंट्रोलर, EPROMs और अन्य टाइप के प्रोग्रामेबल लॉजिक डिवाइस और हार्डवेयर एमुलेटर के लिए किया जाता है। एक विशिष्ट एप्लिकेशन में, एक कंपाइलर या असेंबलर एक प्रोग्राम के सोर्स कोड (जैसे सी या असेंबली लैंग्वेज में) को मशीन कोड में परिवर्तित करता है और इसे HEX फ़ाइल में आउटपुट करता है। कुछ लोग इसका उपयोग स्ट्रीम डेटा के पैकेट रखने वाले कंटेनर फॉर्मेट के रूप में भी करते हैं। परिणामी फ़ाइलों के लिए उपयोग किए जाने वाले सामान्य फ़ाइल एक्सटेंशन .HEX[1] या .H86 हैं।  HEX फ़ाइल को प्रोग्रामर द्वारा PROM में मशीन कोड लिखने के लिए पढ़ा जाता है या लोडिंग और निष्पादन के लिए लक्ष्य सिस्टम में स्थानांतरित किया जाता है।

इतिहास
इंटेल हेक्स प्रारूप मूल रूप से 1973 में इंटेल के इंटेलेक माइक्रो कंप्यूटर डेवलपमेंट सिस्टम (एमडीएस) के लिए डिज़ाइन किया गया था ताकि पेपर टेप से प्रोग्राम लोड और निष्पादित किया जा सके। इसका उपयोग ROM उत्पादन के लिए Intel को मेमोरी सामग्री निर्दिष्ट करने के लिए भी किया जाता था। 1973 में, इंटेल के "सॉफ़्टवेयर समूह" में केवल बिल बायर्ली और केन बर्गेट और बाहरी सलाहकार के रूप में गैरी किल्डॉल शामिल थे।  1975 की शुरुआत में, फ़ाइल एक्सटेंशन HEX का उपयोग करते हुए, इस प्रारूप का उपयोग MCS सीरीज II ISIS-II सिस्टम द्वारा किया गया था। कई PROM और EPROM प्रोग्रामिंग उपकरणों ने इस प्रारूप को स्वीकार किया।

फॉर्मेट
Intel HEX में ASCII टेक्स्ट की पंक्तियाँ होती हैं जो लाइन फ़ीड या कैरिएज रिटर्न कैरेक्टर या दोनों द्वारा अलग की जाती हैं। प्रत्येक टेक्स्ट लाइन में हेक्साडेसिमल वर्ण होते हैं जो एकाधिक बाइनरी संख्याओं को एन्कोड करते हैं। बाइनरी संख्याएँ डेटा, मेमोरी एड्रेस या अन्य मानों का प्रतिनिधित्व कर सकती हैं, जो लाइन में उनकी स्थिति और लाइन के टाइप और लंबाई पर निर्भर करता है। प्रत्येक टेक्स्ट लाइन को रिकॉर्ड कहा जाता है।

रिकॉर्ड संरचना
एक रिकॉर्ड (टेक्स्ट की लाइन) में छह फ़ील्ड (भाग) होते हैं जो बाएं से दाएं क्रम में दिखाई देते हैं:


 * 1) स्टार्ट कोड, एक वर्ण, एक ASCII कोलन ':'। किसी रिकॉर्ड में इस प्रतीक से पहले आने वाले सभी वर्णों को अनदेखा किया जाना चाहिए।      वास्तव में, विनिर्देश के बहुत शुरुआती संस्करणों में पहले रिकॉर्ड से पहले और अंतिम रिकॉर्ड के बाद कम से कम 25 एनयूएल वर्णों की मांग की गई थी।    हालाँकि, चूंकि यह विनिर्देशन का एक अल्पज्ञात हिस्सा था, इसलिए लिखे गए सभी सॉफ़्टवेयर इसका सही ढंग से सामना नहीं कर पाते। यह अन्य संबंधित जानकारी को एक ही फ़ाइल (और यहां तक ​​कि एक ही लाइन) में संग्रहीत करने की अनुमति देता है,  प्रतीक तालिकाओं या अतिरिक्त टिप्पणियों को संग्रहीत करने के लिए विभिन्न सॉफ़्टवेयर विकास उपयोगिताओं द्वारा उपयोग की जाने वाली सुविधा,     और थर्ड पार्टी एक्सटेंशन अन्य वर्णों को स्टार्ट कोड के रूप में उपयोग करते हैं जैसे केइल द्वारा अंक '0', मोस्टेक द्वारा '$',  या '!', '@', '#', '\', '&' और ';' टीडीएल द्वारा.  अनुक्रम के अनुसार, '//' का प्रयोग अक्सर टिप्पणियों के लिए किया जाता है। इनमें से किसी भी एक्सटेंशन में पेलोड के हिस्से के रूप में कोई ':' अक्षर शामिल नहीं हो सकता है।
 * 2) बाइट काउंट, दो हेक्स अंक (एक हेक्स अंक जोड़ी), डेटा फ़ील्ड में बाइट्स (हेक्स अंक जोड़े) की संख्या दर्शाती है। अधिकतम बाइट काउंट 255 (0xFF) है। 8 (0x08), 16 (0x10) और 32 (0x20) आमतौर पर उपयोग की जाने वाली बाइट काउंट हैं। सभी सॉफ़्टवेयर 16 से बड़ी काउंट का सामना नहीं कर पाते। #
 * 3) एड्रेस, चार हेक्स अंक, डेटा के 16-बिट आरंभिक मेमोरी एड्रेस ऑफसेट का प्रतिनिधित्व करते हैं। डेटा के भौतिक पते की काउंट इस ऑफसेट को पहले से स्थापित आधार पते में जोड़कर की जाती है, इस टाइप 16-बिट पते की 64 किलोबाइट सीमा से परे मेमोरी एड्रेसिंग की अनुमति मिलती है। आधार एड्रेस, जो डिफ़ॉल्ट रूप से शून्य होता है, विभिन्न टाइप के रिकॉर्ड द्वारा बदला जा सकता है। आधार पते और एड्रेस ऑफसेट को निरंतर बड़े एंडियन मान के रूप में व्यक्त किया जाता है।
 * 4) रिकॉर्ड टाइप (नीचे #रिकॉर्ड टाइप देखें), दो हेक्स अंक,  को, डेटा फ़ील्ड का अर्थ परिभाषित करना।
 * 5) डेटा, डेटा के n बाइट्स का एक क्रम, जिसे 2n हेक्स अंकों द्वारा दर्शाया जाता है। कुछ रिकॉर्ड इस फ़ील्ड को छोड़ देते हैं (n शून्य के बराबर है)। डेटा बाइट्स का अर्थ और व्याख्या एप्लिकेशन पर निर्भर करती है। (4-बिट डेटा को या तो बाइट्स के निचले या ऊपरी आधे हिस्से में संग्रहीत करना होगा, यानी, एक बाइट में केवल एक एड्रेस योग्य डेटा आइटम होता है।
 * 6)  अंततः,, दो हेक्स अंक, एक परिकलित मान जिसका उपयोग यह सत्यापित करने के लिए किया जा सकता है कि रिकॉर्ड में कोई त्रुटि नहीं है।

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

चेकसम काउंट
एक रिकॉर्ड का चेकसम बाइट, चेकसम से पहले के रिकॉर्ड में सभी डिकोड किए गए बाइट मानों के योग के कम से कम महत्वपूर्ण बाइट (एलएसबी) का दो पूरक है। इसकी गणना डिकोड किए गए बाइट मानों को जोड़कर और योग के एलएसबी को निकालकर (यानी, डेटा चेकसम) करके की जाती है, और फिर एलएसबी के दो पूरक की गणना की जाती है (उदाहरण के लिए, इसके बिट्स को उलटा करके और एक जोड़कर)।

उदाहरण के लिए, रिकॉर्ड के मामले में, डिकोड किए गए बाइट मानों का योग है +  +  +  +  +  +  =  , जिसका एलएसबी मूल्य है. दोनों का पूरक  है, जो रिकॉर्ड के अंत में प्रदर्शित होने वाला चेकसम बाइट है।

किसी रिकॉर्ड की वैधता को उसके चेकसम की काउंट करके और यह सत्यापित करके जांचा जा सकता है कि काउंट किया गया चेकसम रिकॉर्ड में दिखाई देने वाले चेकसम के बराबर है; यदि चेकसम भिन्न हैं तो एक त्रुटि का संकेत दिया जाता है। चूँकि रिकॉर्ड का चेकसम बाइट दोनों का पूरक है - और इसलिए डेटा चेकसम का योगात्मक व्युत्क्रम -, इस प्रक्रिया को रिकॉर्ड के चेकसम सहित सभी डिकोड किए गए बाइट मानों के योग तक कम किया जा सकता है, और यह सत्यापित किया जा सकता है कि योग का एलएसबी शून्य है। जब पिछले उदाहरण पर लागू किया जाता है, तो यह विधि निम्नलिखित परिणाम उत्पन्न करती है: +  +  +  +  +  +  +  = , जिसका एलएसबी मूल्य  है।

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

HEX रिकॉर्ड बनाने वाले प्रोग्राम आमतौर पर लाइन टर्मिनेशन वर्णों का उपयोग करते हैं जो उनके ऑपरेटिंग सिस्टम की परंपराओं के अनुरूप होते हैं। उदाहरण के लिए, लिनक्स प्रोग्राम लाइनों को समाप्त करने के लिए एकल एलएफ (लाइन फ़ीड, हेक्स वैल्यू ) वर्ण का उपयोग करते हैं, जबकि विंडोज प्रोग्राम एलएफ के बाद सीआर (कैरिज रिटर्न, हेक्स वैल्यू  ) का उपयोग करते हैं।

रिकॉर्ड टाइप
इंटेल HEX के छह मानक रिकॉर्ड प्रकार हैं:

अन्य रिकॉर्ड प्रकारों का उपयोग वेरिएंट के लिए किया गया है, जिनमें  वेन और लेने द्वारा,, , ,  और  बीबीसी/माइक्रो:बिट एजुकेशनल फाउंडेशन द्वारा, और , , , , , ,  और  डिजिटल अनुसंधान द्वारा शामिल हैं।

नामांकित फॉर्मेट
1973/1974 में मूल 4-बिट/8-बिट इंटेलेक हेक्स पेपर टेप फॉर्मेट और इंटेलेक हेक्स कंप्यूटर पंच्ड कार्ड फॉर्मेट केवल एक रिकॉर्ड टाइप का समर्थन करता था. 1975 के आसपास इसका विस्तार किया गयारिकॉर्ड टाइप का भी समर्थन करने के लिए. इसमें प्रतीकात्मक डिबगिंग के लिए प्रतीक तालिका वाला एक वैकल्पिक हेडर शामिल हो सकता है,  किसी रिकॉर्ड में कोलन से पहले के सभी वर्णों को अनदेखा कर दिया जाता है।

1978 के आसपास, इंटेल ने नए रिकॉर्ड टाइप पेश किए और  (तत्कालीन नए 8086/8088 प्रोसेसर के खंडित एड्रेस स्थान के लिए समर्थन जोड़ने के लिए) उनके विस्तारित इंटेलेक हेक्स फॉर्मेट में।

कभी-कभी HEX फ़ाइलों के प्रारूपों को दर्शाने के लिए विशेष नामों का उपयोग किया जाता है जो रिकॉर्ड प्रकारों के विशिष्ट उपसमूहों को नियोजित करते हैं। उदाहरण के लिए:


 * I8HEX फ़ाइलें केवल रिकॉर्ड प्रकारों का उपयोग करती हैं और
 * I16HEX फ़ाइलें केवल रिकॉर्ड प्रकारों का उपयोग करती हैं द्वारा  * I32HEX फ़ाइलें केवल रिकॉर्ड प्रकारों का उपयोग करती हैं, , , और

फ़ाइल उदाहरण
यह उदाहरण एक फ़ाइल दिखाता है जिसमें चार डेटा रिकॉर्ड हैं और उसके बाद फ़ाइल का अंत रिकॉर्ड है:

वेरिएंट
इंटेल के स्वयं के विस्तार के अलावा, कई तृतीय-पक्षों ने भी डिजिटल रिसर्च (तथाकथित डिजिटल रिसर्च हेक्स फॉर्मेट में) सहित इंटेल हेक्स फॉर्मेट के वेरिएंट और एक्सटेंशन को परिभाषित किया है ), ज़ाइलॉग, मोस्टेक,  तकनीकी डिज़ाइन लैब्स,   टेक्सस उपकरण ्स, माइक्रोचिप (कंपनी), नहीं, वेन और लेने, और बीबीसी/माइक्रो:बिट एजुकेशनल फाउंडेशन (अपने यूनिवर्सल हेक्स फॉर्मेट के साथ)। ). इनमें प्रोग्राम प्रवेश बिंदुओं और रजिस्टर सामग्री, डेटा फ़ील्ड में एक स्वैप किए गए बाइट ऑर्डर, अप्रयुक्त क्षेत्रों के लिए मान भरने, फ़्यूज़ बिट्स और अन्य अंतरों के बारे में जानकारी हो सकती है।

8086 प्रोसेसर के लिए डिजिटल रिसर्च हेक्स फॉर्मेट कोड, डेटा, स्टैक और अतिरिक्त सेगमेंट के बीच अंतर करने के लिए रिकॉर्ड टाइप जोड़कर सेगमेंट जानकारी का समर्थन करता है।

CP/M-80 (और मोटोरोला 6809 के लिए XASM09) के लिए अधिकांश असेंबलर फ़ाइल के अंत को इंगित करने के लिए रिकॉर्ड टाइप 01h का उपयोग नहीं करते हैं, बल्कि इसके बजाय शून्य-लंबाई डेटा टाइप 00h प्रविष्टि का उपयोग करते हैं। यह एकाधिक हेक्स फ़ाइलों के संयोजन को आसान बनाता है।

टेक्सास इंस्ट्रूमेंट्स एक वेरिएंट को परिभाषित करता है जहां पते प्रोसेसर के रजिस्टरों की बिट-चौड़ाई पर आधारित होते हैं, बाइट्स पर नहीं।

माइक्रोचिप वेरिएंट INTHX8S को परिभाषित करता है (INHX8L, INHX8H ), INHX8M,  INHX16 (INHX16M और INHX32 उनके पीआईसी माइक्रोकंट्रोलर के लिए।

अल्फ्रेड अर्नोल्ड का क्रॉस-मैक्रो-असेंबलर एएस, वर्नर हेनिग-रोलेफ़ का इंटेल 8051-एमुलेटर SIM51, और मैथियास आर. पॉल के क्रॉस-कन्वर्टर BINTEL को इंटेल हेक्स फॉर्मेट में एक्सटेंशन को परिभाषित करने के लिए भी जाना जाता है।

यह भी देखें

 * बाइनरी-टू-टेक्स्ट एन्कोडिंग, एक सर्वेक्षण और एन्कोडिंग एल्गोरिदम की तुलना
 * एमओएस प्रौद्योगिकी फ़ाइल फॉर्मेट
 * मोटोरोला एस-रिकॉर्ड हेक्स फॉर्मेट
 * टेक्ट्रोनिक्स हेक्स फॉर्मेट

अग्रिम पठन

 * (32 pages)
 * (32 pages)
 * (32 pages)
 * (32 pages)

बाहरी संबंध

 * binex - a converter between Intel HEX and binary for Windows.
 * SRecord, a converter between Intel HEX and binary for Linux (usage), C++ source code.
 * kk_ihex, open source C library for reading and writing Intel HEX
 * libgis, open source C library that converts Intel HEX, Motorola S-Record, Atmel Generic files.
 * bincopy is a Python package for manipulating Intel HEX files.
 * SwiftIntelHex - a Swift package to parse Intel HEX files for iOS and macOS.