- 1984 के शुरुआती Macintosh गेम्स में से एक ChipWits ने अपनी 40वीं वर्षगांठ पर मूल Mac और Commodore 64 FORTH source code को open source के रूप में जारी किया
- इसे जारी करने का उद्देश्य गेम की विरासत को सुरक्षित रखना और यह साझा करना है कि 1984 के 8-bit microcomputers पर cross-platform development कैसे किया जाता था
- Doug Sharp द्वारा संभालकर रखी गई 40 साल पुरानी disks से data recover किया गया; कुछ bad sectors थे, लेकिन अधिकांश disks सही तरह से पढ़ी गईं
- Mac version का पूरा source लगभग 3,000 lines of FORTH है, जबकि modernized port 35,000 lines of C# तक पहुंचता है, जिससे उस दौर के code की संक्षिप्तता और सीमाएं दिखती हैं
- Project ने मूल disk images और extracted code GitHub पर जारी किए हैं, और community के साथ latest source की पहचान, build instructions लिखने और sprites extract करने का काम करना चाहता है
ChipWits का मूल code जारी
- ChipWits की 40वीं वर्षगांठ के अवसर पर मूल Mac और Commodore 64 FORTH source code open source के रूप में जारी किया गया
- Recover किया गया मूल code और disk images chipwits/chipwits-forth में व्यवस्थित किए गए हैं
- इसे जारी करने का उद्देश्य ChipWits की विरासत को संरक्षित करना और 1984 के 8-bit microcomputers के लिए cross-platform development का अनुभव साझा करना है
- मूल systems से परिचित लोग source को explore और organize करने में भाग ले सकते हैं, और project ChipWits Discord Server के जरिए collaboration मांग रहा है
1984 में FORTH चुनने की वजह
- ChipWits 1984 में Macintosh पर release हुए शुरुआती games में से एक था
- Co-creators Doug Sharp और Mike Johnston ने 8-bit microcomputers के बीच educational games port करते हुए अपना पहला original game ChipWits design किया
- यह game Rocky’s Boots, Logo आदि उस दौर के programming games से प्रभावित एक robot programming game है
- 1984 का Mac development environment सीमित था, और मुख्य development तरीका Apple Lisa खरीदना था
- Apple Lisa की मूल कीमत $9,995 थी, जो आज की value में $30,373 के बराबर है
- यह cost indie game studio के लिए उठाना मुश्किल था, इसलिए Doug और Mike ने Mac पर सीधे चलने वाले MacForth Plus से development किया
- उस समय कई 8-bit microcomputers पर FORTH variants मौजूद थे, इसलिए बाद में porting को ध्यान में रखते हुए यह language choice उपयुक्त थी
- Development अप्रैल 1984 में शुरू हुआ, और पहले version को develop व publish करने में लगभग 7 महीने लगे, जिससे यह Christmas season के लिए समय पर पूरा हुआ
Commodore 64 और Apple II porting
- Epyx ChipWits का publisher बनने वाला था, और Commodore 64 सबसे बड़ा market था
- Epyx के पास Mac games नहीं थे और Brainworks उस समय Apple के मजबूत educational market को target कर रहा था, इसलिए Epyx ने केवल Commodore 64 version publish किया
- C64 port 1985 में पूरा हुआ और Super Forth 64 में लिखा गया
- Commodore 64 porting मुश्किल थी क्योंकि Mac जैसा overall UI design बनाए रखना था
- mouse की जगह joystick से operate होने वाला pull-down menu system develop करना पड़ा
- color graphics और SID chip sound जोड़े गए
- Mac disk के 400KB के बजाय 165KB disk में सब कुछ फिट करना पड़ा
- Mac के 128KB RAM के बजाय 64KB RAM और धीमे processor का उपयोग करना पड़ा
- Commodore 64 version की सफलता के बाद Apple II version भी बनाया गया, और वह भी FORTH variant में लिखा गया
Release के बाद reviews और मूल version चलाना
- Release के बाद ChipWits को कई reviews और awards मिले
- MacUser Editor’s Choice 1986 Award ने ChipWits को “programming concepts का सबसे आनंददायक introduction” बताया और icon-based language व educational design की सराहना की
- Macazine ने अनुमान लगाया कि ChipWits Macintosh users और बच्चों के बीच cult favorite बनेगा
- MacWorld ने कहा कि अगर आपको programming पसंद है, तो आपको ChipWits पसंद आएगा
- Creative Computing ने एक review छोड़ा जिसमें सुबह 4:30 बजे cartoon robot को गाली देने वाला दृश्य शामिल था
- 2008 में Maclife.com ने ChipWits को सर्वकालीन Top 10 Apple II / Mac Games में से एक चुना
- मूल versions को open source projects Emularity और Apple2js के जरिए browser emulators में चलाने योग्य बनाया गया है
40 साल पुरानी disks की recovery
- नए version ChipWits पर काम करते समय Doug Sharp को अपने पास संभालकर रखी मूल disks मिलीं
- 3.5-inch diskettes और 5.25-inch floppy disks 40 साल तक घर में रखी गई थीं, लेकिन अधिकांश disks बिना bad sectors के पढ़ी गईं
- Commodore 64 disks की recovery के लिए eBay से खरीदा गया 1541 Commodore 64 Disk Drive इस्तेमाल हुआ
- USB XoomFloppy adapter के जरिए modern PC पर data पढ़ा गया
- Mac 3.5-inch diskettes को Mac के proprietary sector layout के कारण modern drives के standard तरीके से नहीं पढ़ा जा सकता था
- Mac ने disk capacity को 800KB तक बढ़ाने के लिए proprietary sector layout इस्तेमाल किया
- PowerMac G3 WallStreet में 3.5-inch drive और networking stack था, इसलिए उसे bridge system के रूप में इस्तेमाल किया गया, लेकिन latest MacOS में 400KB support disabled होने के कारण केवल 800KB disks पढ़ी जा सकीं
- बाद में एक fan के suggestion पर USB disk drive control के लिए custom hardware controller GreaseWeazle इस्तेमाल किया गया, और यह तरीका सही चला
- सभी disks की block-level images बनाई गईं और फिर GitHub repository में व्यवस्थित किया गया
- File names में disk labels का उपयोग किया गया
- bad sector detect होने पर file name के आगे
badलगाया गया - modern computers पर पढ़ना आसान बनाने के लिए Python script से blocks extract किए गए और UTF-8 ASCII files में reformat किए गए
- Commodore 64 के proprietary character encoding PETSCII को ASCII में convert किया गया
FORTH source से दिखने वाला development style
- पूरे original disk images और code chipwits/chipwits-forth पर देखे जा सकते हैं
- Mac के लिए ChipWits का पूरा source लगभग 3,000 lines of FORTH है
- modernized port पहले ही 35,000 lines of C# तक पहुंच चुका है, जिससे original FORTH code की compactness खास तौर पर दिखती है
- अलग article Forth Code for Electrocrabs in 1984 ChipWits Deciphered electrocrabs को control करने वाले FORTH code के एक “screen” का analysis करता है
- FORTH एक stack-based language है और Reverse Polish Notation जैसी है
1 + 1के बजाय1 1 +के रूप में लिखा जाता हैif random(3) == 1के बजाय3 irnd 1 = ifform इस्तेमाल होती है
Code examples से 1984 के game implementation की झलक
- Mac version में robot movement code modern game development की तरह frame-by-frame rendering loop को अलग नहीं करता
- game logic और graphics rendering imperative code के अंदर साथ-साथ मिले हुए हैं
- animation को loop के अंदर pixels सीधे render करके implement किया गया
- खाली floor tile पर जाना है, दीवार से टकराना है या bomb को छूना है—यह सब कुछ शब्दों के code में handle किया गया
?boomdefinition bomb से contact होने पर game खत्म होगा या नहीं, यह भी तय करती है- robot की position के आधार पर score में 0 जोड़ा जाता है, ताकि robot के गुजरने से मिट गई score display को जबरन फिर से draw कराया जा सके
- Commodore 64 version की sprite definitions दिखाती हैं कि code और asset data कैसे साथ-साथ मिला होता था
- FORTH source files के रूप में नहीं, बल्कि numbered screen units के रूप में store होता था, और जरूरत के order में load किया जाता था
- C64 black-and-white sprites 24×21 pixels के होते हैं, और एक screen पर केवल 8 sprites इस्तेमाल किए जा सकते थे
- 4-color sprite चुनने पर resolution 12×21 तक घट जाता है और pixels double-width हो जाते हैं
- ChipWit character कई sprites को overlap करके render होता है, vintage cartoons की cel animation जैसी शैली में
- इस choice से available sprites का बड़ा हिस्सा ChipWit पर खर्च होता था, लेकिन इससे sharper image और part-by-part animation संभव हुई
- Mac version की item score table को एक screen में फिट करने के लिए data compressed है
( 110584 dws)जैसी notation screen का date stamp है;110584का मतलब 5 नवंबर 1984 औरdwsका मतलब Douglass Walter Sharp है- यह screen final release से पहले आखिरी बार modify किए गए screens में से एक लगता है; last changed screen 8 नवंबर का है
d,को values को 10 से multiply करके store करने के लिए define किया गया था, इसलिए 150 points को15 dकी तरह express किया जा सकता था- इस तरीके ने table alignment बनाए रखते हुए एक screen में फिट करने में मदद की, और release से पहले score balancing के दौरान कुल score values adjust करना आसान बनाया होगा
Reboot और community work
- Team मूल FORTH version जारी करने से अलग modernized ChipWits पर भी काम कर रही है
- Reboot version मूल game की मजेदार भावना और computer science की rigor को बनाए रखते हुए learning curve से लेकर competitive global leaderboard तक कई पहलुओं को improve करना चाहता है
- Steam पर ChipWits को wishlist में जोड़ने से final version release की notification मिल सकती है
- मूल FORTH code से जुड़े current GitHub issues के immediate goals ये हैं
- raw disk image से relevant source code पूरा extract हुआ है या नहीं, इसकी पुष्टि
- कुछ source files की alignment issues fix करना
- कुछ 40-character width की हैं, कुछ 64-character width की
- किस disk में सबसे latest source code है, यह पता लगाना
- Mac और C64 पर source से build करने का तरीका लिखना
- disk से raw sprites और images extract करके
.pngfiles में convert करना
- अंतिम लक्ष्य modern PC के लिए community-maintained FORTH version of ChipWits है
1 टिप्पणियां
Hacker News की राय
1984 में ChipWits को FORTH में बनाने की वजह पर लिखा गया एक लेख है
https://chipwits.com/2023/04/08/forth-programming-language-g...
मेरा पसंदीदा game बनाने के लिए धन्यवाद, नया demo भी download कर लिया है और Steam wishlist में भी जोड़ दिया है
Forth ऐसी language है जिसे मैं कई सालों से सीखना चाहता था
पुराने computers पर तेज़ programs चाहिए होते तो assembly language, और धीमा चलना ठीक हो तो BASIC इस्तेमाल करने का विकल्प था; ऐसे में Forth का काफ़ी high-level जैसा दिखते हुए भी “मध्यम speed” वाली language की तरह बने रहना दिलचस्प लगता है
यह stack-based language है
https://www.forth.com/starting-forth/
USB cable को computer में लगाकर सिर्फ़ terminal program खोलते ही शुरुआत की जा सकती है, इसलिए language में पूरी तरह डूबकर सीखने के लिए अच्छा है
हालांकि Australia से आने वाले product को पहुंचने में कुछ महीने लग सकते हैं, इसलिए पहले अपने आसपास के supplier को ढूंढना बेहतर होगा
एक और अच्छा तरीका है 1984 की तरह सीखना। आधुनिक computer पर Commodore 64, Apple ][ जैसे emulator चलाइए और उसके अंदर Forth development environment लगा दीजिए
उस दौर के documents बिल्कुल beginners को ध्यान में रखकर लिखे गए थे, इसलिए उन्हें follow करना बहुत आसान है, और internet पर मुफ्त scanned PDFs भी बहुत मिल जाते हैं
यह आसान और मज़ेदार था, लेकिन एक point तक यह इतना अविश्वसनीय रूप से आसान है कि कुछ लोगों को यह बहुत ज़्यादा basic लग सकता है, या toy implementation से आगे बढ़ जाने का मन बहुत लुभा सकता है
stack को खुद manage करना पड़ता है, इसलिए यह काफ़ी झंझटभरा है, और खुद FORTH बनाना मज़ेदार है। इसे assembly language में बनाना ज़रूरी नहीं; पहले मैंने C++ में Forth जैसी scripting language भी बनाई थी
BASIC का मतलब “Beginner's All-purpose Symbolic Instruction Code” है, इसलिए यह अच्छी तरह fit बैठता था
Amstrad CPC 6128 के लिए Logo नाम की educational Lisp dialect implementation भी अलग disk पर मिलती थी, और बचपन में उसकी linked lists ने सचमुच मुझे चौंका दिया था
उस समय “open source” कोई आम concept नहीं था, और कई languages के compilers और interpreters professional commercial tools होते थे
[1] https://en.wikipedia.org/wiki/Amstrad_CPC#Other_languages
[2] https://en.wikipedia.org/wiki/An_Open_Letter_to_Hobbyists
बहुत शानदार लग रहा है
इसी से जुड़ा http://tumbleforth.hardcoded.net/ भी है, और मुझे लगता है कि यह काफ़ी अच्छा दिखता है। अगर किसी ने इसे आखिर तक किया है, तो जानना चाहूंगा कि अनुभव कैसा था
इसने मुझे computing के बारे में अलग तरह से सोचने पर मजबूर किया
अभी मैं युवा और अनुभव में कम हूं, लेकिन पीछे मुड़कर देखने पर लगता है कि पहले hardware constraints की वजह से कुछ खास abstractions चुनी गई थीं, और आज की programming languages की “evolution branches” में ऐसी बहुत-सी abstractions जमा हो गई हैं जो समय के साथ अच्छी तरह नहीं चलीं, जिससे बोझ ढोने वाली कबाड़ की कई परतें बन गई हैं। यह दूसरे engineering projects जैसा ही है
Collapse OS आज practical न भी हो, लेकिन abstraction की कई परतों से बाहर निकलने में एक आज़ादी का एहसास है। यह बिना किसी भयानक developer experience के 1960s-style computing का आनंद लेने का तरीका लगता है
मेरा मौजूदा हवा-हवाई project यह है कि इन चीज़ों को follow करते हुए virtual machine में Dusk OS build करूं, फिर उसे physical machine पर ले जाऊं, C में Dusk OS के लिए Scheme interpreter लिखूं और उसके बाद जितना चाहूं उसे extend करूं
वहां तक पहुंचने से पहले कुछ नदियां पार करनी हैं। मैंने Python में कुछ घंटों में Scheme interpreter implement किया, और कुछ घंटे और लगाकर scanner/tokenizer को बेहतर किया। अभी मैं Crafting Interpreters पढ़ रहा हूं ताकि समझ सकूं कि C में Scheme interpreter कैसे implement करना चाहिए। C interpreter बनाने के बाद इस guide को फिर से देखकर DuskOS में सीधे कूदने का इरादा है
लेखक का tone मुझे पहले से ही पसंद आ रहा है
उदाहरण के लिए:
उनका लगातार और जबरदस्त output प्रभावित करता है। मैं Collapse philosophy से पूरी तरह सहमत नहीं हूं, लेकिन DuskOS mailing list में इतना ही traffic है कि उसे चुपचाप पढ़ना अच्छा लगता है
Virgil के काम को देखकर मैंने थोड़ा Forth try किया, और पिछले साल SmithForth[1] को हाथ से decompile करने में समय लगाया
किसी language को bootstrap करने के लिए इतनी कम assembly language चाहिए, यह देखकर हैरानी होती है। अब पूरी तरह समझ आता है कि Forth embedded environment में REPL दे सकता है, और यह आम तौर पर सुनने वाले सामान्य development cycle से कहीं ज्यादा मजेदार लगता है
[0]:https://duskos.org/
[1]:https://dacvs.neocities.org/SF/
बाद में मैंने ChipWits का Wikipedia page और blog post पढ़ा, और original game सचमुच बहुत शानदार लगता है। Wikipedia manual में logo भी बहुत अच्छा है
हाल में मैं puzzle और programming elements वाले पुराने/नए games की list बना रहा था, और इसे उसमें डालने वाला हूं। ketman assembly “game” खत्म करने के तुरंत बाद इसे try भी कर सकता हूं। वैसे सच कहूं तो उसे game कहना थोड़ा मुश्किल है
उम्मीद है नया ChipWits बहुत अच्छा करे
Valpar का ValForth Atari ST ecosystem में शुरुआती cross-platform FORTH implementations में से एक था, और इसमें games के लिए clever extensions भी थे
https://www.atarimagazines.com/rom/issue1/jumping_forth.php
लेख में जैसे कहा गया है, 8-bit पर भी Elcomp का FORTH था, और https://www.atarimania.com/documents/FORTH-on-the-Atari-Lear... जैसी किताबें भी थीं। Leo Brodie की “Starting FORTH” आज भी बेहतरीन introduction है
हम सबने BASIC सीखी थी, लेकिन ऐसी alternative languages ने दिखाया कि devices को program करने के लिए सच में बिल्कुल अलग metaphors मौजूद हैं
80s के बच्चे के लिए यह नजरिया बहुत खोल देने वाली बात थी
Forth, Perl की तरह, ऐसी भाषाओं में से एक लगती है जिसे एक बार लिख देने के बाद पढ़ना मुश्किल होता है
लिखना और बनाना आसान है, लेकिन करीब 1 साल बाद अगर कोड पर लौटें तो शायद समझ न आए कि यह क्या कर रहा है
फिर भी यह सच में बहुत तेज़ और efficient है
मैंने अभी-अभी एक काफ़ी बड़ा Perl program यूँ ही खोला, जिसे 3 साल से ज़्यादा समय से छुआ नहीं था, और source देखा; यह समझने में कोई दिक्कत नहीं हुई कि वह क्या कर रहा है
मुझे नहीं लगता कि Perl code ज़्यादातर दूसरी programming languages की तुलना में दोबारा पढ़ने में कठिन होता है। कठिनाई मुख्यतः इस पर निर्भर करती है कि developer उस भाषा में कितना proficient है, और उस भाषा में आख़िरी बार code लिखे कितना समय हो गया है
अगर भाषा बहुत rusty हो गई हो या शुरुआत से ही skill level ऊँचा न रहा हो, तो किसी भी भाषा में पुराने code को फिर से देखना मुश्किल हो जाता है
बेशक, अगर code आपका अपना नहीं है तो और मुश्किल है, और code कितना अच्छा लिखा गया है यह भी बहुत मायने रखता है। किसी भी भाषा में बेकार code बहुत होता है, और अगर वह शुरू से ही बेकार था तो समय बीतने से बेहतर नहीं हो जाता
मेरे हिसाब से Forth लिखना मुश्किल है, लेकिन पढ़ना आसान है
बचपन में Commodore 64 पर इसे बहुत खेला था
यह अनोखा, दिलचस्प और मज़ेदार game था
Hacker News पर spam नहीं करना चाहता, लेकिन अगर आपने original खेला है तो reboot पर आपकी प्रतिक्रिया ज़रूर सुनना चाहूँगा: https://chipwits.com
बचपन में मैं यह game सच में बहुत शिद्दत से पाना चाहता था
लगता है मैं वाकई काफ़ी बूढ़ा हो गया हूँ
जानने की उत्सुकता है कि modern ChipWits किससे लिखा गया है
मुझे यह game सच में बहुत पसंद था। मेरे पास C64 के लिए Forth package भी था, लेकिन मैंने कभी यह जोड़कर नहीं सोचा कि यह game उसी से बनाया गया था
मैंने Human Resource Machine खरीदा था और अधिकतर समय मज़े से खेला, जब तक वह बहुत कठिन नहीं हो गया
यह ChipWits जैसा ही concept लगता है, यानी stack-based programming को game में बदलना
अगर किसी ने दोनों खेले हों, तो जानना चाहूँगा कि वे तुलना में कैसे लगते हैं