2010-01-27 20 views
5

पर काम करना बंद कर देता है हर बार जब मैं टीआई -83 + कैलक्यूलेटर (Z80 प्रोसेसर) के लिए कोई एप्लिकेशन इकट्ठा करता हूं, तो यह कॉल पर चलना बंद कर देता है। यहां एक उदाहरण है ("हैलो") - यह ठीक चल रहा है, लेकिन कैलकुलेटर कॉल निर्देश पर जम जाता है। कॉल से पहले जो कुछ भी मैंने रखा है वह ठीक काम करता है, और जो कुछ भी मैंने रखा है वह नहीं चलता है। लेबल के बजाए पते दिखाने के लिए यह कोड का एक पृथक्करण है। डीबी लाइनों को दिखाने के लिए मैंने इसे "स्पर्श किया" है, जहां वे इसे पढ़ने में आसान बनाने के लिए गिरते हैं।Z80 (TI-83 +) कॉल

मुझे इस समस्या को असेंबली "प्रोग्राम" (जो रैम में लोड किया गया है) लिखने में कभी समस्या नहीं आई है। "अनुप्रयोग" (जो फ्लैश रोम में रखा जाता है) चलाने के साथ मुझे पता चलने वाली एकमात्र समस्या यह है कि वे स्व-संशोधित नहीं हो सकते हैं, और क्योंकि पेजिंग आवश्यक है, एक अलग पृष्ठ पर डेटा तक पहुंचना संभव नहीं है। यह आत्म-संशोधित नहीं है और केवल एक पृष्ठ है ... मैंने क्या गलत किया है?

0080 218900  LD HL, 0089h 
0083 cd9900  CALL 0099h  ;      --- App stops here 
0086 c38f00  JP 008fh 
0089 48656c6c6f00 DB "Hello", 0 
008f fd360500  LD (IY+05h), 0 
0093 ef   RST 28h   ; B_CALL (
0094 364c   DB 4C36h  ; _ReloadAppEntryVecs) 
0096 ef   RST 28h   ; B_CALL (
0097 2740   DB 4027h  ; _JForceCmdNoChar) --- App should end here 
0099 7e   LD A, (HL)  ;      --- Call goes to here 
009a ef   RST 28h   ; B_CALL (
009b 0445   DB 4504h  ; _PutC) 
009d fe00   CP 0 
009f c8   RET Z 
00a0 23   INC HL 
00a1 18f6   JR 0099h 
+0

क्या पुटक कॉल गारंटी देता है कि यह रजिस्टर ए की सामग्री को सुरक्षित रखेगा? अगर बड़ी परेशानी नहीं है। यह पता लगाने के लिए कि क्या समस्या है, पुट कॉल को पुश के साथ घेरें और ए –

+0

को सुरक्षित रखने के लिए एक पॉप को सुनिश्चित करें कि निश्चित रूप से एप्लिकेशन 4080h पर शुरू होते हैं। –

+0

हां, पुट संचयक को संरक्षित करता है। – c4757p

उत्तर

9

जाहिर है, आप 0080h को संबोधित करने के लिए एकत्रित हो रहे हैं। यह सही नहीं हो सकता है क्योंकि पता श्रेणी 0000h - 3FFFh ROM पृष्ठ 0 पर बंद है। दरअसल, this example, के अनुसार आप 4000h तक इकट्ठे होते हैं। तो आपकी समस्या यह है कि आपका कॉल फर्मवेयर में कूद रहा है, न कि आपके आवेदन का एक हिस्सा।

+2

हाँ, वह एक गूंगा क्षण था। मैंने 'ओआरजी 4000h' में फेंक दिया और अब यह काम करता है। मुझे अब एक और समस्या मिली है ... कुछ भी नहीं 'पुटसी' स्क्रीन पर जा रहा है - शायद एक मूर्ख गलती। जीज़ - मैंने पहली बार प्रोग्रामिंग की पहली फ्रिकिंग भाषा 8080 असेंबलर थी, और अब यह बहुत लंबा रहा है कि मेरा असेंबली कोड ऐसा लगता है कि यह चिम्पांजी द्वारा लिखा गया था। – c4757p

+0

ठीक है। समस्या सुलझ गयी। हां, पुटसी समस्या को एक मूर्ख गलती के रूप में भी। धन्यवाद। Z12 ASM को अभी भी याद रखने के लिए – c4757p

+3
2

यहां एक memory map है जिसे मैंने टीआई -83 + के लिए पाया है। आप इस कार्यक्रम को $ 0080 के पते पर लोड नहीं कर सकते हैं, जहां रोम रहता है। यह कहीं और लोड हो जाता है। यह थोड़ी देर के लिए काम करता है जब तक कि आप एक जेपी या कॉल नहीं करते। कॉल $ 0099 आपके अपेक्षित जंप पते पर नहीं पहुंचता है, यह रोम में कूदता है। यह एक त्वरित अंत है।

आपको अपने .asm में एक उचित ओआरजी निर्देश चुनना होगा ताकि यह अपेक्षित पते पर रैम में लोड हो जाए। जहां भी हो सकता है।