एसआरईसी (फ़ाइल प्रारूप)

मोटोरोला S-रिकॉर्ड एक फ़ाइल फॉर्मेट है, जो 1970 के दशक के मध्य में मोटोरोला द्वारा बनाया गया था, जो बाइनरी जानकारी को ASCII टेक्स्ट फॉर्म में हेक्स मान के रूप में बताता है। इस फ़ाइल फॉर्मेट को SRECORD, SREC, S19, S28, S37 के रूप में भी जाना जा सकता है। इसका उपयोग सामान्यतः माइक्रोकंट्रोलर्स, EPROM, ईईपीरोम और अन्य टाइप के प्रोग्रामेबल लॉजिक उपकरणों में फ्लैश मेमोरी प्रोग्रामिंग के लिए किया जाता है। एक विशिष्ट एप्लिकेशन में, कंपाइलर या असेंबलर प्रोग्राम के सोर्स कोड (जैसे सी या असेंबली लैंग्वेज) को मशीन कोड में परिवर्तित करता है और इसे HEX फ़ाइल में आउटपुट करता है। फिर HEX फ़ाइल को प्रोग्रामर द्वारा मशीन कोड को नॉन-वोलेटाइल मेमोरी में "बर्न" करने के लिए आयात किया जाता है, या लोडिंग और निष्पादन के लिए लक्ष्य सिस्टम में स्थानांतरित किया जाता है।

इतिहास
S-रिकॉर्ड फॉर्मेट मोटोरोला 6800 प्रोसेसर के लिए 1970 के दशक के मध्य में बनाया गया था। उस और अन्य एंबेडेड प्रोसेसर के लिए सॉफ़्टवेयर विकास उपकरण S-रिकॉर्ड फॉर्मेट में निष्पादन योग्य कोड और डेटा बनाएंगे। PROM प्रोग्रामर तब S-रिकॉर्ड फॉर्मेट को पढ़ेंगे और एम्बेडेड सिस्टम में प्रयुक्त PROM या EPROM में डेटा को "बर्न" करेंगे।

अन्य हेक्स फॉर्मेट
समान उद्देश्य के साथ अन्य ASCII एन्कोडिंग भी हैं। BPNF, BHLF, और B10F प्रारंभिक बाइनरी फॉर्मेट थे, लेकिन वे न तो कॉम्पैक्ट हैं और न ही फ्लेक्सिबल हैं। हेक्साडेसिमल फॉर्मेट अधिक कॉम्पैक्ट हैं क्योंकि वे प्रति कैरेक्टर 1 बिट के बजाय 4 बिट का प्रतिनिधित्व करते हैं। कई, जैसे S-रिकॉर्ड, अधिक लचीले होते हैं क्योंकि उनमें एड्रेस जानकारी सम्मिलित होती है ताकि वे PROM के केवल एक हिस्से को निर्दिष्ट कर सकें। इंटेल HEX फॉर्मेट का उपयोग प्रायः इंटेल प्रोसेसर के साथ किया जाता था। टेकहेक्स और हेक्स फॉर्मेट है जिसमें डिबगिंग के लिए एक प्रतीक तालिका सम्मिलित हो सकती है।

रिकॉर्ड संरचना
SREC फॉर्मेट फ़ाइल में ASCII टेक्स्ट रिकॉर्ड की एक श्रृंखला होती है। रिकॉर्ड्स में बाएं से दाएं निम्नलिखित संरचना है:
 * 1) रिकॉर्ड स्टार्ट- प्रत्येक रिकॉर्ड एक बड़े अक्षर S अक्षर (ASCII 0x53) से प्रारम्भ होता है जो स्टार्ट-ऑफ़-रिकॉर्ड के लिए है।
 * 2) रिकॉर्ड टाइप- एकल संख्यात्मक अंक 0 से 9 कैरेक्टर (ASCII 0x30 से 0x39), जो रिकॉर्ड के टाइप को परिभाषित करता है। नीचे दी गई तालिका देखें।
 * 3) बाइट काउंट - दो हेक्साडेसिमल अंक (00 से एफएफ), जो बाकी रिकॉर्ड (address + data + checksum) में आने वाले बाइट्स (हेक्स अंक जोड़े) की संख्या को दर्शाता है। इस फ़ील्ड का न्यूनतम मान 3 (16-बिट एड्रेस फ़ील्ड के लिए 2 प्लस 1 चेकसम बाइट) और अधिकतम मान 255 (0xFF) है। "00" / "01" / "02" अवैध मान हैं।
 * 4) एड्रेस - रिकॉर्ड टाइप के अनुसार निर्धारित चार/छह/आठ हेक्स अंक। एड्रेस बाइट्स बिग-एंडियन फॉर्मेट में व्यवस्थित हैं।
 * 5) डेटा - डेटा के n बाइट्स के लिए 2n हेक्स अंकों का एक क्रम। S1/S2/S3 रिकॉर्ड के लिए, प्रति रिकॉर्ड अधिकतम 32 बाइट्स सामान्य है क्योंकि यह 80 कैरेक्टर चौड़ी टर्मिनल स्क्रीन पर फिट होगा, हालांकि 16 बाइट्स एक विशिष्ट एड्रेस पर प्रत्येक बाइट को विज़ुअली डिकोड करना आसान होगा।
 * 6) चेकसम - दो हेक्स अंक, बाइट गणना, एड्रेस और डेटा फ़ील्ड के लिए दो हेक्स अंक जोड़े द्वारा दर्शाए गए मानों के योग का सबसे कम महत्वपूर्ण बाइट। C प्रोग्रामिंग लैंग्वेज में, योग को चेकसम में परिवर्तित किया जाता है:

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

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

रिकॉर्ड टाइप
निम्न तालिका 10 संभावित S-रिकॉर्ड का वर्णन करती है। S4 आरक्षित है और वर्तमान में परिभाषित नहीं है। S6 मूल रूप से आरक्षित था लेकिन बाद में इसे फिर से परिभाषित किया गया था।

रिकॉर्ड क्रम
हालाँकि कुछ यूनिक्स डॉक्यूमेंट में कहा गया है कि "किसी फ़ाइल के भीतर S-रिकॉर्ड का क्रम कोई महत्व नहीं रखता है और कोई विशेष क्रम नहीं माना जा सकता है", व्यवहार में अधिकांश सॉफ्टवेयर ने SREC रिकॉर्ड का आदेश दिया है। विशिष्ट रिकॉर्ड क्रम एक (कभी-कभी वैकल्पिक) S0 हेडर रिकॉर्ड से प्रारम्भ होता है, एक या अधिक S1/S2/S3 डेटा रिकॉर्ड के अनुक्रम के साथ जारी रहता है, एक वैकल्पिक S5/S6 गणना रिकॉर्ड हो सकता है, और एक उपयुक्त S7/S8/S9 समाप्ति रिकॉर्ड के साथ समाप्त होता है।


 * S19-स्टाइल 16-बिट एड्रेस रिकॉर्ड
 * S0
 * 1) S1 (एक या अधिक रिकॉर्ड)
 * 2) S5 (वैकल्पिक रिकॉर्ड)
 * S9


 * S28-स्टाइल 24-बिट एड्रेस रिकॉर्ड
 * S0
 * 1) S2 (एक या अधिक रिकॉर्ड)
 * 2) S5 (वैकल्पिक रिकॉर्ड)
 * S8


 * S37-स्टाइल 32-बिट एड्रेस रिकॉर्ड
 * S0
 * 1) S3 (एक या अधिक रिकॉर्ड)
 * 2) S5 (वैकल्पिक रिकॉर्ड)
 * S7

रिकॉर्ड लंबाई
ऐतिहासिक यूनिक्स O/S डॉक्यूमेंटेशन के एक मैनुअल पृष्ठ में कहा गया है: "एक S-रिकॉर्ड फ़ाइल में विशेष रूप से स्वरूपित ASCII कैरेक्टर स्ट्रिंग्स का एक अनुक्रम होता है। एक एस-रिकॉर्ड लंबाई में 78 बाइट्स से कम या उसके बराबर होगा"। मैनुअल पेज डेटा फ़ील्ड में वर्णों की संख्या को 64 (या 32 डेटा बाइट्स) तक सीमित कर देता है। 8-हेक्स-कैरेक्टर पते और 64 डेटा वर्णों वाला एक रिकॉर्ड 78 (2 + 2 + 8 + 64 + 2) कैरेक्टर लंबा होगा (यह गिनती संभावित अंत-लाइन या स्ट्रिंग समाप्ति वर्णों को अनदेखा करती है), और 80-कैरेक्टर चौड़े टेलीप्रिंटर पर फ़िट हो जाता है। मैनुअल पेज के नीचे एक नोट में कहा गया है, "यह मैनुअल पेज एकमात्र ऐसा स्थान है जहां कुल रिकॉर्ड लंबाई पर 78-बाइट सीमा या डेटा लंबाई पर 64-बाइट सीमा का डॉयमेंटेड किया गया है। इन मूल्यों पर सामान्य स्थिति के लिए भरोसा नहीं किया जाना चाहिए"।

यदि 78 बाइट ऐतिहासिक सीमा को अनदेखा कर दिया जाता है, तो S-रिकॉर्ड की अधिकतम लंबाई 514 कैरेक्टर होगी। 0xFF (255) की बाइट गिनती मानते हुए, यह रिकॉर्ड प्रकार फ़ील्ड के लिए 2 + बाइट काउंट फ़ील्ड के लिए 2 + एड्रेस / डेटा / चेकसम फ़ील्ड के लिए (2 * 255) होगा। अधिकतम दो नियंत्रण कैरेक्टर (कैरिज रिटर्न और/या लाइन फ़ीड), और/या सी/सी++ प्रोग्रामिंग भाषाओं के लिए एक NUL (0x00) स्ट्रिंग टर्मिनेटर रखने के लिए अतिरिक्त बफर स्पेस की आवश्यकता हो सकती है। लंबी लाइन लंबाई का उपयोग करने में समस्याएं हैं: "मोटोरोला S-रिकॉर्ड फॉर्मेट परिभाषा 255 बाइट्स पेलोड, या 514 अक्षरों की लाइनों, साथ ही लाइन समाप्ति की अनुमति देती है। सभी EPROM प्रोग्रामर के पास इतने बड़े रिकॉर्ड से निपटने के लिए पर्याप्त बड़ी लाइन बफर होनी चाहिए। ऐसा बहुत कम लोग करते हैं।"

डेटा फ़ील्ड
S0/S1/S2/S3 रिकॉर्ड के लिए डेटा की न्यूनतम मात्रा शून्य है।

कुछ ऐतिहासिक डॉक्यूमेंट इस फ़ील्ड में अधिकतम 32 बाइट्स डेटा (64 हेक्स कैरेक्टर) की अनुशंसा करते हैं (शायद इसलिए कि 32 डेटा के 2 की सबसे बड़ी शक्ति है जो एक प्रति लाइन कैरेक्टर वाइड टेलीप्रिंटर/कंप्यूटर टर्मिनल/ छिद्रित कार्ड पर फिट होगी)।

यदि 32 बाइट ऐतिहासिक सीमा को अनदेखा कर दिया जाता है, तो डेटा की अधिकतम मात्रा एड्रेस फ़ील्ड (4/6/8) के आकार के आधार पर भिन्न होती है। डेटा के बाइट्स की अधिकतम संख्या 255 (बाइट काउंट फ़ील्ड के लिए अधिकतम) माइनस (चेकसम फ़ील्ड के लिए 1 बाइट) माइनस (एड्रेस फ़ील्ड में बाइट्स की संख्या) से गणना की जाती है, इस प्रकार प्रत्येक रिकॉर्ड प्रकार के लिए डेटा की अधिकतम मात्रा है: S0 और S1 रिकॉर्ड के लिए 252 डेटा बाइट्स (504 हेक्स कैरेक्टर), S2 रिकॉर्ड के लिए 251 डेटा बाइट्स (502 हेक्स कैरेक्टर), और S3 रिकॉर्ड के लिए 250 डेटा बाइट्स (500 हेक्स कैरेक्टर)।

टिप्पणियाँ
S0 हेडर रिकॉर्ड में एएससीआईआई-टू-हेक्स परिवर्तित टिप्पणियों के अलावा, SREC फ़ाइल प्रारूप आधिकारिक तौर पर मानव-पठनीय ASCII टिप्पणियों का समर्थन नहीं करता है, हालाँकि कुछ सॉफ़्टवेयर उन सभी लाइनयों को अनदेखा कर देते हैं जो "S" से प्रारम्भ नहीं होती हैं और/या चेकसम फ़ील्ड के बाद के सभी टेक्स्ट को अनदेखा कर देते हैं (इस प्रकार टिप्पणियों के लिए कभी-कभी पिछला टेक्स्ट (असंगत रूप से) उपयोग किया जाता है)। उदाहरण के लिए, CCS PIC कंपाइलर ";" रखने का समर्थन करता है। इंटेल हेक्स फ़ाइल के ऊपर या नीचे कमेंट लाइन, और इसके मैनुअल में कहा गया है "कुछ प्रोग्रामर (विशेष रूप से MPLAB) हेक्स फ़ाइल के शीर्ष पर टिप्पणियाँ विकल्प नहीं करते", यही कारण है कि कम्पाइलर के पास कमेंट को हेक्स फ़ाइल के नीचे रखने का विकल्प होता है।

उदाहरण

 * कलर लीजेंड

चेकसम गणना
निम्नलिखित उदाहरण रिकॉर्ड:

यह दिखाने के लिए डिकोड किया गया है कि चेकसम मूल्य की गणना कैसे की जाती है। निम्नलिखित उदाहरण हेक्साडेसिमल मान (एक मोटोरोला सम्मेलन) को इंगित करने के लिए डॉलर चिह्न ($) का उपयोग करता है:
 * ऐड: प्रत्येक बाइट $13 + $7A + $F0 + $0A + $0A + $0D + $00 + ... + $00 = $019E योग जोड़ें।
 * 1) मास्क: योग की सबसे महत्वपूर्ण बाइट ($01) को हटा दें और सबसे कम महत्वपूर्ण बाइट (LSB) को बरकरार रखें, जो कि ऐड है।
 * 2) कॉंप्लीमेंट: एलएसबी के पूरक की गणना करें, जो $61 है।

C प्रोग्रामिंग लैंग्वेज में, योग को चेकसम में परिवर्तित किया जाता है:

यह भी देखें

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

अग्रिम पठन

 * 
 * (56 pages)
 * (56 pages)

बाहरी संबंध

 * SRecord is a collection of tools for manipulating SREC format files.
 * BIN2MOT, BINARY to Motorola S-Record file converter utility.
 * SRecordizer is a tool for viewing, editing, and error checking S19 format files.
 * bincopy is a Python package for manipulating SREC format files.
 * kk_srec is a C library and program for reading the SREC format.