/ / जेडएक्स स्पेक्ट्रम में POKE - zxspectrum

जेडएक्स स्पेक्ट्रम में POKE - zxspectrum

मैं एक पुराने जेएक्स स्पेक्ट्रम 48k के साथ खेल रहा हूं और मैं सोच रहा हूं कि प्रवेश करना कितना संभव है POKE कोड.

आप एक टेप के साथ एक गेम लोड करते हैं - फिर किसी भी तरह POKE कथन में प्रोग्राम प्रकार से बाहर निकलते हैं और प्रोग्राम को फिर से शुरू करना शुरू करते हैं?

मैंने इस पर बहुत सारी खोज की है लेकिन यह नहीं पता कि यह कैसे किया जाता है, इस पर किसी भी लीड की सराहना की जाएगी।

उत्तर:

जवाब के लिए 2 № 1

अधिकांश स्पेक्ट्रम प्रोग्राम गेम शुरू करने के लिए दो चरणों की प्रक्रिया का उपयोग करते हैं:

  1. लोड करें और एक छोटे से बेसिक कार्यक्रम चलाएं
  2. वह छोटा बेसिक प्रोग्राम तब मशीन कोड को अधिक लोड करता है और फिर मशीन कोड के एंट्री पॉइंट (उदा। RANDOMIZE USR 28455)।

यदि आप उन चरणों के बीच रुकने का प्रबंधन कर सकते हैं, तो आप कर सकते हैं POKE चारों ओर (जीवन की संख्या बढ़ाने के लिए ...) और उसके बाद मशीन कोड शुरू करें RANDOMIZE USR 28455, आपको लगता है कि किसी भी तरह से सही पता पता चला है।

एक बार मशीन प्रोग्राम चलने के बाद आमतौर पर इसे रोकने और बेसिक दुभाषिया पर वापस जाने का कोई तरीका नहीं होता है। जब तक मशीन प्रोग्राम ऐसा करने के लिए कुछ स्पष्ट (या अनजान) तरीका प्रदान नहीं करता है।


जवाब के लिए 2 № 2

सबसे पहले, पीक और पोके का अर्थ:

10 let x = PEEK 40000: REM returns (reads) the value (0-255) in position 40000
20 POKE 40000, 201: REM writes the 201 value in position 40000

अधिकांश कार्यक्रमों ने लोडर नामक एक छोटा सा बेसिक प्रोग्राम लोड किया। यह कुछ ऐसा था:

10 cls
20 print "Loading AWESOME GAME!!!"
20 load "" screen$
30 load "" code 40000
40 randomize usr 40000

अर्थ सरल होना चाहिए: असेंबलर प्रोग्राम (गेम स्वयं) लोड (लाइन 30) के दौरान उपयोगकर्ता को मनोरंजन करने के लिए एक स्क्रीन प्रेजेंटेशन (लाइन 20) लोड करें, और आखिरकार गेम (लाइन 40) लॉन्च करें।

लाइन 40 के बारे में, usr 40000 वह अभिव्यक्ति है जो चाल 40000 पर विधानसभा को बुलाती है। निर्देश Randomize बस इस्तेमाल किए गए यादृच्छिक बीज को शुरू करता है rnd, सोचा कि यह वास्तव में कभी वापस नहीं आएगा।

तो, पहली कोशिश होगी:

  1. "ब्रेक" दबाएं (Ctrl + C के बराबर या उससे कम), दर्ज करें list, और लाइन 35 में पोक डालें, यानी, प्रोग्राम लोड होने के बाद, लेकिन इसे अभी तक निष्पादित नहीं किया गया है।

  2. टाइप करने के बजाय load "" खेल लॉन्च करने के लिए, टाइप करें merge "" (इसका उपयोग टेप में एक के साथ मेमोरी में मूल प्रोग्राम को गठबंधन करने के लिए किया गया था)। लोडर निष्पादित करने से पहले प्रक्रिया बंद हो जाएगी। लोडर में एक शामिल होने पर यह उपयोगी होता है poke निर्देश जो अक्षम है BREAK।

इन तरीकों के साथ समस्या पहले थीलोडर शिष्टाचार को छिपाने के प्रयास बेवकूफ़ थे, (जैसे पेपर 0: आईएनके 0 निर्देश या कुछ ऐसा लाइन 10 पर, अस्थायी रूप से अदृश्य बनाने के लिए), लेकिन जल्द ही उन्हें बहुत अधिक जटिल मिलेगा, बिंदु तक वास्तव में एक असेंबलर कार्यक्रम शामिल हैं REM निर्देश।

अगला कदम हेडर का विश्लेषण करना थाअसेंबली कोड मूल लोडर के बाद लोड किया गया है, डंप पता और कोड की लंबाई समाप्त करें, और अपना खुद का लोडर बनाएं जिसमें आप शामिल कर सकें poke निर्देश जो आप चाहते थे। कई पत्रिकाओं ने इस तरह के लोडर वितरित किए, जिनका उद्देश्य मूल से पहले लोड किया जाना था (लोडर विशिष्ट ब्लॉकों को छोड़कर, विशिष्ट ब्लॉकों को छोड़कर)।

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

और फिर विशेष हार्डवेयर जैसे Multiface -1 दिखाई दिया। पढ़ना मल्टीफ़ेस -1 मैनुअल आप देख सकते हैं कि मल्टीफ़ेस सॉफ़्टवेयर का आविष्कार कैसे किया जाता है(परिधीय हार्डवेयर के रोम में शामिल) एक लाल बटन दबाकर (जो एक एनएमआई (मुखौटा बाधा नहीं) को उत्तेजित करता है, एक मेनू दिखाया गया था कि आप उस बिंदु पर स्मृति को सहेजने की अनुमति दे रहे हैं (और सहेजा गया कोड किसी भी सुरक्षा से मुक्त होगा , इस प्रकार अपने स्वयं के लोडर को पोक के साथ बनाने के लिए पथ खोलना), या यहां तक ​​कि जांच (PEEK) स्मृति में विशिष्ट पते पर वर्तमान मान और दर्ज करें POKE"सीधे है (जिसके साथ आप उन दिनचर्या की शुरुआत पा सकते हैं, उदाहरण के लिए, जो आपके जीवन को एक में कम कर देता है)।

POKE के निर्देश आमतौर पर प्रकार के थे (यह एक सरलीकरण है): POKE addr, 0 या POKE addr, 201। जो नंबर addr उपलब्ध जीवन की संख्या को कम करने, या दुश्मन के साथ संघर्ष का पता लगाने की नियमित शुरुआत की शुरुआत थी।

कोड 0 असेंबली एनओपी (कोई ऑपरेशन) निर्देश नहीं है। एक एनओपी के दौरान, सीपीयू कुछ भी नहीं करता है।

कोड 201 या सी 9 असेंबली है RET (वापसी) निर्देश, जिसका अर्थ है सबराउटिन के लिए वापस जाना। बेसिक में, आप एक सबराउटिन के साथ कॉल करेंगे GOSUB और इसके साथ से अंत में वापस आते हैं RETURN। Asssembly में, एक ही जोड़ी कॉल / आरईटी है।

यदि आपके पास 201 था, तो इसका प्रभावी अर्थ यह होगा कि एक सबराउटिन (अपने जीवन में एक को घटाना) जैसे कि:

9950 let lives = lives - 1
9960 return

में बदल दिया गया था:

9950 return
9960 return

यदि आपके पास 0 मान था तो उसी दिनचर्या को बदल दिया गया था:

9950
9960 return

उत्तर № 3 के लिए 1

जैसा कि मुझे बहुत समय पहले याद है .... जब एक स्पेक्ट्रम गेम लोड होता है, तो शुरुआत में यह एक छोटे लोडर प्रोग्राम में लोड होता है, और चलता है, टेप जारी रहता है और प्रोग्राम का बड़ा हिस्सा लोड हो जाता है। लोडर प्रोग्राम में आखिरी कमांड एक पॉक कमांड जारी करता है जो सब कुछ लोड और शुरू करता है खेल। इसलिए, जैसा कि मुझे याद है, लोडर प्रोग्राम लोड होने के बाद आपको टेप को रोकना होगा, और अंतिम पॉक जारी करने से कोड की रेखा को रोकना होगा, फिर जारी रखें। फिर एक बार थोक लोड हो जाने पर, आप कमांड लाइन से अपना पोक जारी करते हैं, और उसके बाद गेम को शुरू करने के लिए मूल पोक जारी करते हैं। लोडर प्रोग्राम लाल और नीली रेखाओं के पहले सेट के बाद लोड किया जाएगा, स्क्रीन पर बहुत छोटी पीले और नीली रेखाओं के साथ (जैसा कि मुझे याद है कि यह इस बिंदु पर मिले कार्यक्रम के नाम को प्रिंट करता है)। टेप को रोकें, ब्रेक दबाएं, फिर कोड देखने के लिए सूची। शुभकामनाएं और महान सवाल!


उत्तर के लिए 1 № 4

जेडएक्स स्पेक्ट्रम पत्रिकाओं में मुद्रित POKE कोडआमतौर पर आपको प्लग-इन हार्डवेयर डिवाइस (उदा। मल्टीफ़ेस) होने की उम्मीद है। गेम लोड होने के बाद, आप गेम को रोकने के लिए मल्टीफ़ेस बटन दबा सकते हैं, POKE दर्ज कर सकते हैं, और फिर गेम पर वापस लौट सकते हैं।

एक विशेष डिवाइस के बिना, आपको खेलना होगालोडर प्रोग्राम, जैसा कि अन्य उत्तरों द्वारा वर्णित है। आपको प्रारंभिक छोटे लोडर प्रोग्राम और फिर कोड में BREAK लोड करने की आवश्यकता है। यदि आप भाग्यशाली हैं, तो कोड शेष गेम में लोड होने के साथ कुछ आसान करेगा और फिर रैंडोमिज़ यूएसआर कॉल का उपयोग करके वास्तविक मशीन कोड गेम निष्पादित करेगा। इस मामले में आप लोडर बेसिक प्रोग्राम को POKES करने के बाद संशोधित कर सकते हैं खेल लोड हो गया है लेकिन खेल शुरू होने से पहले।

हालांकि, कई गेम इसे कठिन बनाते हैं क्योंकि वेकस्टम लोडर कोड शामिल करें। यह अक्सर आरईएम कथन में छोटे बेसिक कार्यक्रम में एम्बेडेड मशीन कोड में लिखा जाता है। मशीन कोड गेम लोड करेगा और इसे निष्पादित करेगा, और क्योंकि वे कभी भी बेसिक कोड पर नियंत्रण नहीं लौटाते हैं, इसलिए POKE दर्ज करने का कोई अवसर नहीं है। यदि आप पर्याप्त समर्पित हैं, तो आप मशीन कोड को संशोधित करने की कोशिश कर सकते हैं या तो वापस बेसिक पर वापस लौट सकते हैं ताकि आप दूर जा सकें, या अन्यथा कोड कोड कॉल के माध्यम से POKEs निष्पादित कर सकें। यह काफी कठिन है, क्योंकि अगर मुझे सही याद है, तो संपादक आरईएम कथन में गैर प्रिंट करने योग्य पात्रों वाली रेखाओं को धक्का दे रहा था। रॉयबॉट जैसे सॉफ्टवेयर टूल्स थे जो स्मृति में कोड को संशोधित करने में आपकी मदद कर सकते थे।

कुछ गेम डेवलपर्स ने गेम हैकिंग को रोकने के लिए वास्तव में पागल सामान किया था, जैसे लोडर कोड को कार्यान्वित करना जो वास्तव में निष्पादित किए जाने पर अपने कोड को ओवरराइट करता था


संबंधित सवाल


टिप्पणियाँ (0)

एक टिप्पणी जोड़े