- Assembly सीधे CPU architecture से जुड़ी होती है, इसलिए पहली बार किस CPU से सीखना शुरू किया जाए यह अहम है; 6502 सरल संरचना और वास्तविक ecosystem दोनों रखने वाला beginner-friendly platform है
- सिर्फ 6 registers और मूल 56 instructions के साथ registers, load/store, logical और arithmetic operations, branch जैसे बुनियादी concepts जल्दी सीखे जा सकते हैं
- Apple II, Commodore VIC 20, Commodore 64, BBC micro आदि में इस्तेमाल हुआ वास्तविक CPU होने की वजह से emulators, recreated devices और free resources का उपयोग करते हुए hands-on learning आसान है
- Easy 6502 web पर सीधे code आज़माने के लिए JavaScript-based assembler और simulator देता है, जिससे कम समय में intuition बनाना अच्छा रहता है
- Z80, modern RISC, x86-x64 भी सीखने लायक हैं, लेकिन पहले चरण में कम complexity वाला 6502 learning burden घटाता है
6502 beginner के लिए उपयुक्त क्यों है
- Assembly programming में high-level languages की तुलना में hardware से connection ज्यादा मजबूत होता है, इसलिए पहली बार मिलने वाला CPU learning difficulty को काफी प्रभावित करता है
- 6502 assembly आज practical applications लिखने के लिए comfortable environment नहीं है
- अगर retro programming में खुद रुचि नहीं है, तो 6502 पर लंबे समय तक टिके रहने की जरूरत नहीं
- Beginner platform के रूप में इसकी खूबियां सरलता और वास्तविकता हैं
- सरल structure के कारण basic concepts जल्दी सीखे जा सकते हैं
- वास्तविक devices, emulators, किताबें और online resources बहुत हैं, इसलिए learning path बनाना आसान है
-
Registers और instructions छोटे दायरे में रहते हैं
- 6502 में केवल 6 registers हैं
- 1 accumulator
- 2 index registers
- status register
- stack register
- program counter
- 6502 में एकमात्र 16-bit register program counter है
- registers की कम संख्या actual application development में constraint है, लेकिन registers की भूमिका और behavior समझने में मदद करती है
- मूल 6502 instruction set में सिर्फ 56 instructions शामिल हैं
- इस छोटे instruction set से भी प्रमुख instruction types सीखे जा सकते हैं
- load/store
- logical operations
- arithmetic operations
- branch
- ये types modern CPUs में भी किसी-न-किसी रूप में मौजूद हैं
- x86-x64 में registers और instructions की संख्या गिनना भी आसान नहीं है, और ARM जैसे modern RISC instruction sets को भी छोटा और सरल मानना मुश्किल है
- 6502 में केवल 6 registers हैं
वास्तविक ecosystem और दूसरे विकल्प
-
पुराना, लेकिन जीवंत ecosystem
- 6502 को 1970s के मध्य में MOS Technology ने Motorola 6800 के सस्ते और simplified version के रूप में introduce किया था
- उसी team ने पहले Motorola 6800 develop किया था
- इसके बाद यह तेजी से लोकप्रिय हुआ और कई प्रसिद्ध microcomputers में इस्तेमाल हुआ
- Apple II
- Commodore VIC 20
- Commodore 64
- BBC micro
- इन devices के emulators आसानी से मिल जाते हैं, और कुछ के modern recreated devices भी हैं
- 6502 के successors लेखन के समय भी production में हैं, और Olimex के Neo6502 जैसे नए devices भी 6502 family चलाते हैं
- free learning resources internet पर बहुत हैं, और उनमें से काफी 6502.org पर मिल सकते हैं
- 6502 को 1970s के मध्य में MOS Technology ने Motorola 6800 के सस्ते और simplified version के रूप में introduce किया था
-
तुरंत practice कर सकने वाले learning resources
- Easy 6502 Nick Morgan की ebook है, जो कम समय में 6502 आज़माना चाहने वाले learners के लिए उपयुक्त है
- इसमें text और images के साथ JavaScript में लिखा 6502 assembler और simulator भी शामिल है
- webpage पर simple 6502 assembly code सीधे लिखा जा सकता है
- Visual6502.org assembly learning tool से ज्यादा 6502 की सरलता को visually दिखाने वाला resource है
-
दूसरे beginner candidates से अंतर
- Education के लिए बनाए गए virtual CPUs के पास साफ-सुथरा और “perfect” instruction set हो सकता है, लेकिन 6502 जितने समृद्ध learning resources और community जुटाना मुश्किल है
- Z80, 6809, 68000 जैसे retro CPUs भी अच्छे विकल्प हैं
- इन तीनों CPUs को serious programming के लिए 6502 से बेहतर माना जाता है
- Basic concepts सीखने में 6502 की simplicity ज्यादा लाभ देती है
- Z80 में 6502 की तुलना में काफी ज्यादा registers हैं और alternate register set भी है, इसलिए शुरुआत करना थोड़ा कम आसान है
- ARM, MIPS, RISC-V जैसे modern RISC architectures किसी stage पर serious assembly programmer को सीखने चाहिए
- हालांकि beginner के लिए ये ideal नहीं हैं
- इनकी simplicity instruction set से ज्यादा chip की internal implementation के पक्ष में होती है
- Modern microprocessors mostly high-level languages से program किए जाते हैं, और सीधे assembly instructions लिखने का experience CPU design priorities में ऊपर नहीं होता
- ARM64 में 64-bit constant को register में load करने के लिए bit shifts सहित 4 instructions की जरूरत पड़ सकती है
- इसके मुकाबले 6502 में constant को register में load करने की प्रक्रिया सरल है
- x86-x64 को modern desktops और servers में सबसे popular instruction set कहा जा सकता है, और ARM इसे catch up कर रहा है
- 32-bit size constraints न होने और variable number of operands वाले rich instructions होने से ARM की तुलना में coding आसान होने का पहलू भी है
- लेकिन beginners के लिए यह अब भी बहुत complex है, और 40 साल का इतिहास x86-x64 को ज्यादा सरल नहीं बनाता
1 टिप्पणियां
Hacker News की राय
इस बात से सहमत होना मुश्किल है कि 6502 की सरलता 68000 से बेहतर है
68000 में registers ज़्यादा हैं और data type widths भी बड़ी हैं, लेकिन इसकी संरचना uniform है। असल में A और D नाम के दो प्रकार D0~D7, A0~A7 के रूप में दोहराए जाते हैं, इसलिए D0 पर जो काम हो सकता है, वह D3 पर भी हो सकता है। संरचना की सरलता का संतुलन programming की सरलता से होना चाहिए, और 6502 में थोड़ा-सा भी जटिल program लिखते ही constraints से बार-बार टकराना पड़ता है
छोटी machine की सीमाओं को bypass करना सीखने का सबसे अच्छा रास्ता उलटे उन सीमाओं को ignore करके कुशल software engineer बनना है। अगर आप beginner हैं, तो बेहतर है कि ऐसी तरफ से शुरू करें जहां addressing modes ज़्यादा हों, बड़े arrays संभालना आसान हो, और registers व integer widths पर्याप्त हों
यह दावा किया गया है कि 6502 सरल है क्योंकि इसमें 6 registers हैं, लेकिन 6502 को सिर्फ़ एक हफ़्ता छू लेने पर भी समझ आ जाता है कि असल में तीन registers से ही काम लिया जाता है। इसलिए semaphore CPU वाला nickname भी निकला
6502 मज़ेदार और साफ-सुथरा है, लेकिन अगर modern approach चाहिए तो यह उपयुक्त नहीं है। अगर 90s-style glory path अपनाना है तो MIPS से शुरू करें, या बस Neon से शुरू करना बेहतर है। Z80 को भी registers और complexity के लिहाज़ से आज जिन चीज़ों से सामना होता है, उनसे ज़्यादा मिलता-जुलता माना जा सकता है
Modern assembly अपने आप में मूलतः जटिल नहीं है। FASM से शुरू करें तो मुश्किल नहीं है, लेकिन low-level approach हमेशा जल्दी ही जटिल हो जाती है। फिर आप macros बनाना शुरू करते हैं, और अंत में अपनी ही एक गरीब-सी C जैसी चीज़ उसके ऊपर चढ़ा देते हैं
छोटे systems की खूबी यह है कि silicon से लेकर operating system और software तक पूरे stack को पूरी तरह समझा जा सकता है
6809, 68K से सरल और 6502 से शक्तिशाली है, और इसकी orthogonality अच्छी है, लेकिन उसी स्तर का software base नहीं है। मेरे हिसाब से Motorola ने 6809 और 68K के instruction sets और programmer-view architecture में काफ़ी अच्छी दिशा पकड़ी थी। PDP-11/VAX और NS32K भी मुझे इसी तरह काफ़ी orthogonal याद हैं
अगर अधिक modern platforms की बात करें, तो MC68k की बजाय RISC-V पढ़ाने के पक्ष में मजबूत दलील है। RISC-V का basic integer instruction set बेहद सरल और elegant है, और फिर भी ARM, Aarch-64, MIPS जैसी modern architectures से मिलता-जुलता है। इसमें 32-bit और 64-bit दोनों हैं और official documentation भी आसानी से access की जा सकती है
MC68k में ऐसी बहुत-सी peculiarities हैं जिनका आज ज़्यादा relevance नहीं है। इसकी खूबी कहें तो यह कई hardware platforms में इस्तेमाल हुआ और आज भी इसकी active retro community है, लेकिन वह असली relevance से ज़्यादा interest factor है
68020 वह लगभग अधिकतम सीमा है जहां instruction set architecture C के क़रीब जा सकता है, और इसे इस्तेमाल करने का अनुभव बहुत अच्छा है
हालांकि शुरुआती Commodore computers में 65XX का इस्तेमाल करना बहुत rewarding था। memory protection नहीं था, इसलिए video memory को सीधे बदल सकते थे, sprites·fonts·borders·interrupts से छेड़छाड़ कर सकते थे, और self-modifying code भी लिख सकते थे। Amiga की 68000 assembly ज़्यादा safe और controlled environment थी
असेंबली सीखने के लिए पहले instruction set के तौर पर 6502 अच्छा नहीं है, ऐसा लगता है। एक चतुर लेकिन गहराई से खामियों वाली architecture की विचित्रताओं से निपटने में काफी समय चला जाता है।
वे workaround idioms, उस समय MOS के tools और budget constraints से बंधे थे, और उनसे बेहतर architectures में ठीक से carry over नहीं होते।
अगर आप छोटा लेकिन शक्तिशाली, और थोड़ी-सी विचित्रताओं वाला instruction set सीखना चाहते हैं, तो ARM v6M बेहतर है। यह आज भी सार्थक रूप से production में है, और आधुनिक open source toolchain में debugger, compiler, assembler और linker support भी अच्छा है।
अगर architecture का खुलापन आपके लिए अहम है और आप अभी कम परिपक्व platform झेल सकते हैं, तो RISC-V MCU चुनिए। अगर तय न कर पा रहे हों, तो RP2350 चुनिए।
ARMv6M instruction set छोटा है, और constants load करने के लिए documentation के अनुसार PC-relative load इस्तेमाल करें तो लंबी और उबाऊ instruction sequences की जरूरत नहीं पड़ती। self-modifying code या zero page से memory को index करने की भी जरूरत नहीं है, और register width address space जितनी ही है। 32-bit होने की वजह से, यह उलटे ज्यादातर 8/16-bit instruction sets की तुलना में सीखने और सिखाने में आसान है। अगर यह नीरस सुनाई दे, तो चिंता की जरूरत नहीं। ARMv6 में भी code golf के लिए पर्याप्त विचित्रताएं हैं।
शुरुआत PIC16 assembly से की थी और कई architectures को थोड़ा-थोड़ा छुआ है, लेकिन साफ-सुथरेपन के लिहाज से MIPS32 सबसे ज्यादा पसंद आया।
एक छोटा-सा जोड़: Western Design Center से नए बने 6502, 6502 core MCU और peripheral chips अब भी खरीदे जा सकते हैं। Mouser जैसी जगहों पर भी मिलते हैं।
https://www.mouser.com/c/?m=Western%20Design%20Center%20%28W...
दो 16-bit numbers को multiply करने भर के लिए code का एक बड़ा टुकड़ा चाहिए। नए programmers को ऐसी चीजों से जूझाना उपयोगी नहीं लगता।
जैसा कहा गया, शुरुआती ARM instruction set अच्छा विकल्प है।
बेशक यह कई assembly languages में फैली समस्या है, लेकिन शुरुआत में ऐसा instruction set बेहतर होगा जिसमें यह समस्या न हो।
[1] https://youtube.com/playlist?list=PLowKtXNTBypFbtuVMUVXNR0z1...
कई वर्षों से undergraduates को assembly पढ़ाने के अनुभव से कहूं तो, मैं सहमत हूं कि 6502 beginners के लिए अच्छा है। हालांकि इसकी वजह सिर्फ 6502 language की अपनी खूबियां नहीं हैं।
68K, MIPS, ARM, x86 वगैरह पढ़ाए हैं, और 6502 पढ़ाने पर students की प्रतिक्रिया अच्छी होने की सबसे बड़ी वजह CPU के आसपास का context था। हमने 6502 से एक समझने में आसान असली machine, यानी Nintendo Entertainment System, को program किया।
बुनियादी memory-mapped input/output, कोई operating system नहीं, pipeline instructions नहीं, delay slots नहीं, network नहीं, अनावश्यक noise नहीं। यह लगभग एक simple box जैसा है जिसके अंदर clock, CPU, कुछ memory addresses, सहायक chips और memory addresses पर mapped I/O हैं। 6502 सबसे simple instruction set नहीं है, लेकिन इस system की simplicity बहुत मदद करती है।
6502 की सीमाएं भी students के लिए यह समझने में महत्वपूर्ण थीं कि instructions वैसे क्यों दिखते हैं। CPU उस समय की constraints के भीतर design और wire किया गया था, और यह बात programming style में झलकती है।
beginners को सिखाने के लिए 6502 और NES चुनना सफल रहा। 6502 होने की वजह से नहीं, बल्कि इसलिए कि 6502 ने bits को move करने वाले system को अपने-आप simple रखने पर मजबूर किया।
students ने 6502 को छुआ और NES tiles को screen पर move होते देखा, उसके बाद यह समझाना स्वाभाविक रूप से आसान हो गया कि 68000 चीजों को अलग तरीके से कैसे handle करता है, MIPS कैसे उभरा, pipelining और delay slots का उपयोग कैसे होता है, और RISC व CISC के अंतर की तुलना कैसे की जाए। बुनियाद हो तो आगे बढ़ना बहुत सरल हो जाता है।
अगर सीखना मौजूदा इस्तेमाल में आने वाला instruction set नहीं है, तो थोड़ा आश्चर्य है कि PDP-11 assembler को अच्छी शुरुआत के तौर पर लगभग कभी mention नहीं किया जाता।
शायद इसलिए कि मैंने ठीक से सबसे पहले PDP-11 ही सीखा था, लेकिन शुरुआती microprocessors सभी एक कदम पीछे जैसे लगे। Z80 assembly कुछ साल लिखी जरूर, लेकिन अब recommend नहीं करूंगा। उसका instruction set orthogonal नहीं है, और 6502 में registers इतने कम हैं कि assembly लिखने का सही एहसास देना मुश्किल है।
अगर PDP-11 पसंद है, तो MSP430 में मिलते-जुलते फायदे थोड़े limited रूप में, और 68000 में थोड़े मजबूत रूप में मिल सकते हैं।
लेकिन सच कहें तो ऐसे अवशेषों को भूलकर RISC-V सीखना ही सबसे अच्छा है। या फिर कई Arm variants में से कोई एक चुन लें। निजी तौर पर मुझे 2000s के मध्य में काफी इस्तेमाल किए ARM7TDMI से भावनात्मक लगाव है। Thumb mode मूल Arm mode की तुलना में थोड़ा आसान हो सकता है, लेकिन दोनों ही RISC-V जितने संतोषजनक नहीं लगते।
यह कहा जा सकता है कि addressing modes, RISC की तुलना में conceptually ज्यादा जटिल हैं, लेकिन व्यवहार में 6502 addressing modes के PDP-11 से ज्यादा कठिन समझ में आने की संभावना है।
लेकिन DEC ने उस मौके को नजरअंदाज किया, और IBM ने सुस्त 8086 instruction set के साथ वह जगह ले ली।
अब -11 सीखने का कोई उद्देश्य नहीं बचा।
यह निष्कर्ष कैसे निकलता है, यह मुझे ठीक से समझ नहीं आता। जब छात्र पहली बार computer programming से परिचित होते हैं, तो किसी ऐसे toy/छोटी भाषा से शुरू करना समझ में आ सकता है जिसका वास्तविक उपयोग न हो। लेकिन assembly पहली सीखी जाने वाली भाषा नहीं होनी चाहिए
Assembly एक बहुत व्यावहारिक tool है, और आम तौर पर debugging और reverse engineering में बहुत इस्तेमाल होती है। फिर बहुत पहले गायब हो चुके platform की assembly पर समय क्यों लगाना चाहिए?
Assembly सीखने का सबसे अच्छा तरीका experimentation है। अपनी पसंदीदा भाषा में code लिखें और intermediate assembly output देखें, या objdump या gdb से अंदर झांकें। आप बदलाव करके यह भी देख सकते हैं कि क्या होता है
पुराने computer emulator से भी यह संभव है, लेकिन ज्यादा मुश्किल है। screen पर एक text दिखाने जैसे काम के लिए भी उस computer की architecture, hardware और ROM functions तक सीखने पड़ते हैं, और यह ज्ञान x86-64 के Linux या Windows पर लगभग लागू नहीं होता
बिल्कुल beginner के लिए pointer जैसे concepts बहुत abstract और कठिन थे, लेकिन assembly में indirect addressing सीखते ही अचानक साफ हो गया कि C में pointers क्यों हैं और वे कैसे काम करते हैं
इससे पहले मैं मुख्य रूप से Python इस्तेमाल करता था, जो कहीं ज्यादा abstracted था। लोग अक्सर भूल जाते हैं कि pointer जैसी सुविधाएं hardware और performance constraints की वजह से मौजूद हैं। CPU के अंदर असल में क्या और क्यों हो रहा है, यह न जानने पर सहज समझ सीमित रह जाती है
high school के बाद से मैंने assembly की एक line भी नहीं लिखी, लेकिन operations कैसे execute होते हैं और registers कैसे काम करते हैं, इसकी बुनियादी समझ की वजह से programming और optimization के reasons, conditions और exceptions को समझना कहीं आसान हो गया। साफ-सुथरे और efficient code की कद्र भी ज्यादा होने लगी
अगर अतीत का थोड़ा स्वाद लेना चाहते हैं, तो यह रहा
https://www.atariarchives.org/
मैंने electronics पढ़ी थी, इसलिए स्वाभाविक रूप से assembly (Motorola HC11) से शुरुआत की। course खत्म होने तक सभी ने स्वतंत्र रूप से for loop जैसी चीजों के लिए macros बना लिए थे, और वहां से C पर जाना स्वाभाविक था। C course के अंत तक C-style object orientation भी स्वाभाविक रूप से उभर आया, और अगला C++ course उससे जुड़ गया
इस approach की कमी यह है कि functional paradigm या आम non-imperative paradigms की ओर कोई क्रमिक रास्ता नहीं बनता। साथ ही, भाषा अंदर से कैसे काम करती है, यह लगातार सोचने की आदत बन जाती है, जो कभी-कभी उल्टा असर भी डालती है। Haskell सीखने की कोशिश करते समय भी दिमाग पहले यह समझने में लग गया कि interpreter कैसे चलता है
Assembly सीखना सिर्फ भाषा सीखना नहीं है, बल्कि bus, memory-mapped peripherals आदि के जरिए machine कैसे काम करती है, यह समझना है। पुराने platforms में यह हिस्सा कहीं ज्यादा सरल होता है। इसलिए भले ही ARM instructions HC11 के CISC instructions से सीखने में आसान हों, बाकी सब कुछ beginner के लिए HC11 में ज्यादा friendly है
-vasmसे compile करने पर generated assembly compilation के दौरान दिखती है। इसे यह कहकर कमतर भी आंका गया कि objdump या-Sइस्तेमाल कर सकते हैं, लेकिन खुद इस्तेमाल करने पर समझ आता है कि यह सुविधाजनक क्यों है। क्योंकि object file बनाने के लिए भारी-भरकम boilerplate के बिना सीधे सिर्फ assembly output करता हैउदाहरण के लिए, मान लीजिए आप AArch64 code generator, और अधिक specifically floating-point code generation पर काम कर रहे हैं और ऐसा function है
float test(float a, float b) { return a * b; }dmd -c test.c -arm -vasmसे compile करने पर address, hexadecimal instruction, instruction mnemonic और instruction specification URL output होते हैंमुझे पता है कि code पूरी तरह सही नहीं है। मैंने कहा था कि अभी काम चल रहा है :-)
मेरे लिए 6502 instruction set एक अच्छी पहली assembly language थी
1977 में मैं Oregon की एक छोटी cabin में रह रहा था, और boredom दूर करने के लिए Apple II खरीदा। एक साल के भीतर मैं उस program पर काम करने लगा जो बाद में Apple Writer बना, और वह पूरा assembly में लिखा गया था
https://en.wikipedia.org/wiki/Apple_Writer
यहां कहा गया है कि 6502 assembly काफी भद्दी और लिखने में कठिन है, और पीछे मुड़कर देखें तो मैं सहमत हूं। लेकिन 1977 में तुलना करने के लिए कोई benchmark नहीं था
Apple II पर कोई तेज high-level language नहीं थी, इसलिए मेरा छोटा program alternatives की कमी की वजह से Apple product बन गया
सोचता हूं तो Apple Writer 8KB RAM में फिट हो जाता था, लेकिन सच में काम करता था। इसमें एक macro language भी थी जिसे लोग address lists process करने के लिए इस्तेमाल करते थे
हाल ही में DeepSeek को local पर आसानी से चलाने के लिए मैंने अपना main system 96GB RAM तक upgrade किया, और RTX 4090 भी है। अचानक ध्यान आया कि इतनी RAM में Apple Writer की लगभग 1.2 करोड़ copies आ सकती हैं
यह काफी surreal है, लेकिन 1977 के बाद से ऐसी बात कहने के मौके कई बार आए हैं
शुरुआत के लिए assembly language के तौर पर मैं RISC-V पसंद करता हूं। इसकी design अच्छी और ज्यादा intuitive है, GCC, LLVM, Rust जैसी modern languages और tools का support है, और यह QEMU तथा वास्तव में खरीदे जा सकने वाले hardware पर चलता है
वह पूरे 14MHz पर भी चल सकता है
6502 instruction set की सरलता वाला विषय मुझे निजी तौर पर खटकता है। जिन लोगों को ऐसी सरलता अच्छी लगती है, लगता है वे Hello World के बाद आगे बढ़े ही नहीं हैं
6502 पर मध्यम स्तर की जटिल चीज़ें प्रोग्राम करना कठिन है। 8-bit बहुत सीमित है, उदाहरण के लिए Commodore 64 की स्क्रीन addressing को ही देख लें। multiplication और division खुद implement करने पड़ते हैं, और 16-bit addition/subtraction भी सरल तो हैं, लेकिन efficient तरीके से करने के लिए बिल्कुल मामूली नहीं हैं
अगर मकसद basic assembly सीखना है, तो तुलना में 8086+DOS platform कहीं ज़्यादा संभालने में आसान है
अलग-अलग multiplication और division algorithms को assembly में उतारना सीखने का बहुत अच्छा तरीका है
वैसे भी अगर x86-64, RISC-V, ARM के अलावा कोई ऐसी चीज़ सीखनी है जो आज के हिसाब से relevant नहीं है, तो 8086 का फायदा क्या है, मुझे ठीक से समझ नहीं आता
हर पल अच्छा लगा, और segment registers भी मुझे खास परेशान नहीं करते थे
मैं computer science-केंद्रित technical school में पढ़ता हूँ, और retro पसंद करने वाले, अपनी arcade machine दिखाना पसंद करने वाले informatics professor ने तय पाठ्यक्रम के 8808 assembly की जगह 6502 पर focus किया
सच कहूँ तो यह मेरी ज़िंदगी के सबसे अच्छे learning experiences में से एक था, और मैं नहीं चाहता कि यह किसी और तरीके से होता। उन्होंने हमसे Ben Eater का breadboard computer तक बनवाया, इसलिए खास तौर पर hands-on महसूस हुआ और यह सचमुच दिलचस्प था
assembly language से मेरी पहली मुलाकात PDP-10 पर हुई थी, और मेरे पास सिर्फ DEC-10 processor manual था
मैं पूरी तरह उलझ गया था। instructions सैकड़ों में थीं और explanations अस्पष्ट थे। register क्या होता है, accumulator क्या होता है, address क्या होता है, stack क्या होता है—मुझे कुछ नहीं पता था। David Rolfe ने मेरे Fortran version Empire के लिए ज़रूरी कुछ subroutines लिख दिए थे, जिससे थोड़ी मदद मिली, लेकिन फिर भी मैं भटका हुआ था
एक दिन मैंने दोस्त Shal Farley से पूछा कि stack क्या होता है, तो उसने कहा, “plates के ढेर की कल्पना करो। एक plate ऊपर रखो (push), और एक निकालो (pop)।” उसी पल जैसे बत्ती जल गई और मैं तुरंत समझ गया
उसके बाद मैंने एक छोटे board पर 6800 microprocessor के साथ काम शुरू किया। instructions करीब 40 थीं और एक ही card पर सारी आ जाती थीं। 40 instructions सीखना आसान था, और अचानक सब कुछ समझ में आने लगा
फिर जब -10 manual पर वापस गया, तो उसकी सारी बातें समझ में आने लगीं