6502, 12 बाइट्स (13 बाइट्स अगर Apple II)
6502
मशीन कोड मानता है कि शून्य पृष्ठ स्थानों की एक जोड़ी चरित्र इनपुट ($ FE) और आउटपुट (FF) हार्डवेयर से जुड़ी है। कई 6502-आधारित सिस्टम इस तरह से I / O की सुविधा देते हैं, यद्यपि I / O पता आमतौर पर शून्य पृष्ठ पर नहीं होता है।
सादगी के लिए, मैंने इस्तेमाल किया Py65 में लिखे 6502 माइक्रो कंप्यूटर सिस्टम सिम्युलेटर Py65 का ।
यहाँ Py65 से एक मेमोरी डंप है। आप निम्नलिखित कोड को शून्य पृष्ठ में कहीं भी लोड कर सकते हैं जैसे कि यह $ FE और $ FF को ओवरलैप नहीं करता है।
PC AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.mem 0:b
0000: a9 21 85 ff a5 fe f0 fc 85 ff d0 f4
विंडोज कमांड विंडो में चल रहा है, आप (Ctrl + V) अपनी इच्छा के अनुसार किसी भी पाठ को पेस्ट कर सकते हैं, या आप बस टाइप कर सकते हैं। यदि टाइप करते हैं, तो एक नईलाइन (उसी ASCII चार) के लिए Ctrl + J दबाएं। प्रोसेसर को बाधित करने और Py65 कमांड प्रॉम्प्ट पर लौटने के लिए Ctrl + C दबाएं।
स्वाभाविक रूप से, विधानसभा कोड पढ़ना आसान है।
PC AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.d 00:0b
$0000 a9 21 LDA #$21
$0002 85 ff STA $ff
$0004 a5 fe LDA $fe
$0006 f0 fc BEQ $0004
$0008 85 ff STA $ff
$000a d0 f4 BNE $0000
स्पष्टता के लिए, यहां CBA65 प्रारूप में विधानसभा कोड है ।
; ASSEMBLE:
; cba65 bangit
;
; LOAD/RUN
; python3 py65/monitor.py -i 00fe -o 00ff -l bangit.bin
; goto 0000
.FILES BIN=256
; I/O LOCATIONS
GETC .EQU $FE ; (1) MOVING PY65'S GETC TO ZP SHAVES 1 BYTE
PUTC .EQU $FF ; (1) MOVING PY65'S PUTC TO ZP SHAVES 2 BYTES
.ORG $0000
VROOM LDA #'!'
STA PUTC
VROOM2 LDA GETC
BEQ VROOM2
STA PUTC
BNE VROOM
.END
Apple II
ऊपर दिया गया कोड मानता है कि अशक्त है, कोई इनपुट नहीं है, इसलिए एक गैर-शून्य मान वापस नहीं होने तक मतदान जारी रहता है।
तुलना के लिए, Apple I और Apple II कीबोर्ड I / O पते के बिट 7 को सेट करके एक नए वर्ण की उपलब्धता का संकेत देता है, जिसे तब वर्ण प्राप्त करने के बाद साफ़ करने की आवश्यकता होती है। उन प्रणालियों पर, चरित्र I / O आमतौर पर सीधे हार्डवेयर तक पहुंचने के बजाय सिस्टम मॉनिटर रूटीन को कॉल करके किया जाता है।
RDKEY ($ FD0C) और COUT ($ FDED) को कॉल करके, ऊपर दिए गए Apple II को 13 बाइट्स में कोडित किया जा सकता है, और RAM में कहीं भी चलाया जा सकता है। यहाँ एक कोड है जिसे मैंने Apple // e emulator, a2ix में Android 9 पर चलाया था।
दबाने पर रिटर्न का न्यूलाइन के समान प्रभाव पड़ता है।
*300L
0300- A9 A1 LDA #$A1
0302- 20 ED FD JSR $FDED
0305- 20 0C FD JSR $FD0C
0308- 20 ED FD JSR $FDED
030B- F0 F3 BEQ $0300
क्या आपने देखा कि विस्मयादिबोधक बिंदु के लिए सामान्य ASCII मूल्य # $ 21 के बजाय # $ A1 का उपयोग किया जाता है? ऐसा इसलिए है क्योंकि COUT में मानक ASCII मान भेजने से उन्हें "उलटा मोड", सफेद पर काला दिखाई देता है। काले रंग पर सामान्य सफेद में ASCII प्रदर्शित करने के लिए COUT को कॉल करने से पहले संचायक में वर्ण मान में # $ 80 जोड़ने की आवश्यकता होती है। क्योंकि RDKEY उच्च-बिट सेट के साथ वर्ण लौटाता है, इसलिए असेंबली प्रोग्राम ने आमतौर पर इसका उपयोग करके ASCII मान प्राप्त करने के लिए चरित्र के बिट को मंजूरी दे दी।