6502 मशीन भाषा + एप्पल] [+ रोम, 12 (11? 10? 9) बाइट्स
CE 06 80 F0 01 A2 0B A9 00 4C 24 ED
पर शुरू होना चाहिए $8000
। जब गिनती 0 तक पहुँच जाती है, तो सिस्टम मॉनिटर पर क्रैश।
C6 B6 F0 01 A2 0B A9 00 4C 24 ED
पर शुरू होना चाहिए $B1
। जब से मैं (दो-बाइट) शून्य-पृष्ठ संस्करण का उपयोग कर सकता हूं, तब यह एक बाइट बचाता है DEC
, लेकिन महत्वपूर्ण एप्सलेट दिनचर्या को अधिलेखित करता है CHRGET
; आपको इसे लोड करने और मॉनीटर से कॉल करने की आवश्यकता होगी, और आपके द्वारा एक बार काम पूरा करने के लिए CTRL+ BReturnको फिर से शुरू करने के लिए + का उपयोग करना होगा। सुनिश्चित नहीं है कि यह अमान्य है या नहीं।
CE 06 80 F0 01 A2 0B 4C 26 ED
पर शुरू होना चाहिए $8000
। यह आरंभ नहीं करता है $9E
, दो बाइट्स की बचत करता है । हालांकि, इसका मतलब है कि आपको इसे नकारात्मक पते से नहीं बुलाना चाहिए (या, यदि आप इसे मॉनिटर से कॉल करते हैं, तो आपको मॉनिटर को सकारात्मक पते से कॉल करना होगा)। यदि आप करते हैं, Applesoft की CALL
दिनचर्या स्टोर करेगा FF
में $9E
, जब यह मुद्रण नंबर करने के लिए 65,280 जोड़ने के लिए यह कारण। फिर, सुनिश्चित नहीं है कि यह समाधान अमान्य है या नहीं।
C6 B6 F0 01 A2 0B 4C 26 ED
पर शुरू होना चाहिए $B1
। यह उपरोक्त दो कार्यक्रमों का संयोजन है, जो कुल तीन बाइट्स की बचत करता है; आपको मॉनीटर को एक सकारात्मक पते के साथ कॉल करना होगा, इसे लोड करना होगा और इसे वहां से चलाना होगा, और एक बार काम पूरा करने के लिए Ctrl+ BReturnको फिर से शुरू करने के लिए + का उपयोग करना होगा।
ध्यान दें कि ये प्रोग्राम केवल मेमोरी में प्रोग्राम को संशोधित करते हैं; डिस्क से प्रोग्राम को फिर से लोड करना उल्टी गिनती को रीसेट करेगा। यह काम करता है क्योंकि Apple] [(और] [+, // e, और // c) की कोई मेमोरी सुरक्षा प्रणाली नहीं है; कार्यक्रम (और इसके स्व-संशोधनों) के बाहर निकलने के बाद भी मेमोरी में रहेगा, इसलिए आप इसे मेमोरी से तब तक चालू रख सकते हैं जब तक आप उस मेमोरी को किसी और चीज़ से अधिलेखित नहीं कर देते।
नमूना चला
]BLOAD COUNT THEN BRK
]CALL 32768
10
]CALL 32768
9
]CALL 32768
8
]CALL 32768
7
]CALL 32768
6
]CALL 32768
5
]CALL 32768
4
]CALL 32768
3
]CALL 32768
2
]CALL 32768
1
]CALL 32768
8008- A=80 X=9D Y=00 P=36 S=EE
*
व्याख्या
DEC NUM+1 ; Decrement the LDX instruction's operand
BEQ NUM+1 ; If it is now zero, branch to it; 00 is the opcode for the BRK instruction, which causes the program to crash to the monitor
NUM LDX #$0B ; Load the X register with 0x0A; the operand has already been decremented once
LDA #$00 ; Load the accumulator with 0
JMP $ED24 ; Jump to $ED24, an Applesoft ROM routine which prints A (high byte),X (low byte) in decimal
10 बाइट संस्करण का स्पष्टीकरण
DEC NUM+1 ; Decrement the LDX instruction's operand
BEQ NUM+1 ; If it is now zero, branch to it; 00 is the opcode for the BRK instruction, which causes the program to crash to the monitor
NUM LDX #$0B ; Load the X register with 0x0A; the operand has already been decremented once
JMP $ED26 ; Jump to $ED26, which is two bytes into the Applesoft routine at $ED24. The two skipped bytes would store the accumulator in $9E
वेरिएंट
प्रिंट ERR
और बीप्स जब गिनती 0 तक पहुँचते हैं
सामान्य - 15 बाइट्स
CE 06 80 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
ओवरराइट CHRGET
- 14 बाइट्स
C6 B6 F0 07 A2 0B A9 00 4C 24 ED 4C 2D FF
प्रारंभ नहीं करता है $9E
- 13 बाइट्स
CE 06 80 F0 05 A2 0B 4C 26 ED 4C 2D FF
ओवरराइट CHRGET
करता है और शुरू नहीं करता है $9E
- 12 बाइट्स
C6 B6 F0 05 A2 0B 4C 26 ED 4C 2D FF
गिनती 0 तक पहुंचने पर जमा देता है
सामान्य - 12 बाइट्स
CE 06 80 F0 FE A2 0B A9 00 4C 24 ED
ओवरराइट CHRGET
- 11 बाइट्स
C6 B6 F0 FE A2 0B A9 00 4C 24 ED
प्रारंभ नहीं करता है $9E
- 10 बाइट्स
CE 06 80 F0 FE A2 0B 4C 26 ED
ओवरराइट CHRGET
करता है और शुरू नहीं करता है $9E
- 9 बाइट्स
C6 B6 F0 FE A2 0B 4C 26 ED