इंटेल हेक्स

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

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

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

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

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

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

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

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

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

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

रिकॉर्ड प्रकार
Intel 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.