1 पॉइंट द्वारा GN⁺ 20 시간 전 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • PlayStation आर्किटेक्चर ने 3D हार्डवेयर डेवलपमेंट की जटिलता घटाने के लिए सरल और व्यावहारिक संरचना अपनाई, लेकिन graphics sorting, texture correction और precision के मामले में डेवलपर्स पर बोझ और विजुअल सीमाएँ छोड़ दीं
  • Sony CXD8530BQ, LSI Logic के CoreWare आधारित MIPS R3000A-compatible core के साथ CP0, GTE, MDEC को एकीकृत करने वाला SoC है, जो 33.87MHz पर चलता है और 2MB RAM, 1KB Scratchpad और DMA-केंद्रित data movement संरचना का उपयोग करता है
  • ग्राफिक्स में GTE 3D projection, lighting और clipping संभालता है, जबकि GPU command-based तरीके से line, rectangle और triangle render करता है; Z-buffer के बिना ordering table का उपयोग होने से CPU को polygon order तय करना पड़ता है
  • GPU में affine texture mapping, nearest neighbour, integer coordinates और subpixel resolution की कमी के कारण shimmer, overlap और texture warping होता है, इसलिए tessellation, solid-colour replacement और pre-rendered background जैसे workaround इस्तेमाल किए जाते हैं
  • CD-ROM आधारित डिज़ाइन ने 620MB storage, 44.1kHz ADPCM audio streaming, BIOS-आधारित execution environment, और Wobble Groove copy protection के साथ region lock को जोड़कर game development और distribution का तरीका बदल दिया

मूल डिज़ाइन और CPU

  • PlayStation को इस धारणा पर डिज़ाइन किया गया था कि 3D हार्डवेयर डेवलप करना बहुत जटिल हो सकता है, इसलिए इसमें सरल और व्यावहारिक डिज़ाइन चुना गया, जिसकी कीमत कुछ सीमाओं के रूप में चुकानी पड़ी
  • मुख्य चिप Sony CXD8530BQ आज की भाषा में SoC के बराबर है, और इसमें MIPS R3000A परिवार के साथ binary-compatible LSI Logic CoreWare आधारित CPU core इस्तेमाल होता है
  • CPU core में 33.87MHz, MIPS I ISA, 32-bit word, 32 general-purpose registers, 32-bit data bus, 32-bit address bus, 5-stage pipeline और 4KB instruction cache है
  • Data cache नहीं है, और जहाँ सामान्यतः data cache होता, उस 1KB memory को fixed address पर mapped Scratchpad के रूप में दिया गया है, जिसे तेज SRAM की तरह इस्तेमाल किया जाता है
  • सिस्टम सामान्य प्रयोजन के कामों के लिए 2MB EDO RAM देता है, जिसे सामान्य DRAM की तुलना में थोड़ा अधिक efficient और कम latency वाला बताया गया है

बस और सह-प्रोसेसर

  • Data bus को 32-bit Main Bus और 16/8-bit Sub Bus में बाँटा गया है; Main Bus, MDEC और GPU को जोड़ता है, जबकि Sub Bus बाकी components और I/O को जोड़ता है
  • CD-ROM controller, MDEC, GPU, SPU और parallel port DMA controller तक पहुँच सकते हैं, और DMA CPU से गुज़रे बिना main bus पर नियंत्रण लेकर high-throughput data transfer करता है
  • DMA चलते समय CPU main bus तक नहीं पहुँच सकता, और यदि Scratchpad में प्रोसेस करने के लिए काम न हो तो वह wait state में चला जाता है
  • CP0 यानी System Control Coprocessor cache implementation, Scratchpad direct access, instruction cache isolation, interrupt, exception और breakpoint को संभालता है
  • CP2 यानी Geometry Transformation Engine fixed-point आधारित vector और matrix calculation को accelerate करता है, और 3D projection, lighting, clipping जैसे graphics pipeline के शुरुआती चरणों को संभालता है
  • MDEC JPEG-जैसे encoded macroblock को GPU द्वारा समझे जा सकने वाले format में decompress करता है, और 8×8 pixel 24bpp bitmap के 9,000 macroblock प्रति सेकंड प्रोसेस करके 320×240px FMV को 30fps पर stream कर सकता है
  • CP1 के रूप में FPU उपलब्ध नहीं है; fractional calculation software floating-point या fixed-point से की जा सकती है, लेकिन speed और precision पर सीमाएँ आती हैं

पाइपलाइन और delay slot

  • MIPS I pipeline control hazard और data hazard के प्रति संवेदनशील है, और branch या jump के बाद अगला instruction हर हाल में execute होने वाले branch delay slot व्यवहार का पालन करता है
  • Load instruction fetched data तैयार होने तक pipeline को नहीं रोकता, इसलिए यदि उसके तुरंत बाद वाला instruction पिछले load result पर निर्भर हो, तो सही operand पाने के लिए filler की ज़रूरत पड़ती है
  • कुछ delay slot को meaningful instruction से भरा जा सकता है, इसलिए वे हमेशा wasted cycle नहीं होते
  • MIPS ने RISC दर्शन के आधार पर, जिसमें high-quality compiler और assembler instruction reordering या filler insertion संभालते हैं, CPU pipeline को डेवलपर और toolchain के सामने उजागर करने वाला डिज़ाइन चुना
  • इस तरह का डिज़ाइन बाद की CPU पीढ़ियों में नई microarchitecture आने पर backward compatibility को मुश्किल भी बनाता है

ग्राफिक्स पाइपलाइन

  • Graphics pipeline का बड़ा हिस्सा GTE संभालता है, और result data Sony के proprietary GPU को render करने के लिए भेजा जाता है
  • सिस्टम 1MB VRAM में frame buffer, texture और अन्य rendering resources रखता है, और CPU DMA के ज़रिए इस क्षेत्र को भर सकता है
  • शुरुआती मॉडल की VRAM dual-ported संरचना वाली थी, जिसमें दो 16-bit bus का उपयोग कर CPU, DMA, GPU और video encoder एक साथ access कर सकते थे
  • बाद के मॉडल single 32-bit data bus वाले SGRAM में बदल गए, और timing differences के कारण Jet Moto 3 जैसे बाद के game VRAM-आधारित सिस्टम पर graphics corruption दिखा सकते हैं
  • CPU, GPU के 64-byte FIFO buffer में अधिकतम 3 command भरकर geometry data भेजता है; command rendering, setting change और VRAM manipulation का अनुरोध करते हैं
  • GPU line, rectangle और triangle को अलग-अलग draw कर सकता है, और triangle समृद्ध 3D model बनाने की मूल इकाई है
  • GPU coordinate system में हर coordinate pixel center के sampling point से मेल खाने वाला integer coordinate model है, और fractional coordinate का उपयोग नहीं होता

visibility, rasterisation और texture

  • PlayStation GPU hardware visibility solving feature नहीं देता, और ordering table के ज़रिए depth value के अनुसार GPU command address को manage किया जाता है
  • CPU पहले polygon sort करता है, फिर table की सही entry में reference डालता है, और बाद में DMA से table को GPU तक भेजकर सही क्रम में rendering कराता है
  • GPU को केवल एक single frame buffer चाहिए, और rasteriser vertex को line, triangle, rectangle और pixel में बदलता है
  • Triangle texture और shading support करने वाला सबसे जटिल और सामान्य-purpose primitive है; line तेज़ है लेकिन textured surface के लिए उपयुक्त नहीं, और rectangle अधिकतम 256×256 pixel sprite तक सीमित है तथा shading या affine transformation effect नहीं देता
  • Lighting effect के दो प्रकार हैं: flat shading और Gouraud shading; flat shading, Gouraud shading की तुलना में लगभग 2.5 गुना अधिक polygon प्रति सेकंड भर सकता है
  • Texture, हर rasterised pixel के लिए texture map से texel खोजने वाली inverse texture mapping से लागू होता है
  • PlayStation GPU की Affine Texture Mapping केवल X/Y 2D coordinates का उपयोग करती है और depth को हटा देती है, इसलिए perspective correction नहीं होता
  • Texture filtering implemented नहीं है, और scale correction के लिए nearest neighbour इस्तेमाल होता है, जो तेज़ और सस्ता है लेकिन texture model को blocky दिखाता है
  • GPU triangle पर semi-transparency और dithering effect support करता है, और PlayStation को इन effects में काफ़ी मजबूत माना जाता है

VRAM प्रबंधन और विजुअल सीमाएँ

  • पूरे 1MB VRAM को बड़े frame buffer के रूप में इस्तेमाल करने की योजना को TV standard format के अनुसार फिर से समायोजित करना पड़ता है, इससे texture और colour table की जगह घटती है, और GPU भी अधिकतम 640×480 pixel 16-bit colour frame buffer ही render कर सकता है
  • 640×480 16-bit buffer, 424KB VRAM को assets के लिए छोड़ता है, लेकिन उस समय के घरेलू TV पर high resolution का लाभ बहुत स्पष्ट नहीं होता था
  • adjustable frame-buffer का मतलब है कि कम महसूस होने वाले resolution पर VRAM बर्बाद न करके frame buffer का आकार घटाया जाए और texture व colour lookup table के लिए ज़्यादा जगह निकाली जाए
  • Halkun का Gears Episode 2 demo 640×480 frame buffer को दो 320×480 buffer में बाँटकर page flipping का उपयोग दिखाता है, ताकि एक scene दिखाते समय दूसरा render किया जा सके
  • यह layout केवल 600KB VRAM लेता है, और बाकी 424KB को colour lookup table और texture के लिए इस्तेमाल किया जा सकता है; 2KB texture cache के साथ यह एक efficient संरचना बनती है
  • VRAM एक साथ कई colour depth map कर सकता है, इसलिए 16bpp frame buffer के बगल में FMV frame में आम तौर पर उपयोग होने वाला 24bpp bitmap रखा जा सकता है
  • Rasteriser केवल pixel स्तर पर काम करता है और यह track नहीं करता कि triangle किसी pixel fraction का कितना हिस्सा घेरता है, इसलिए model outline jump और triangle intersection पर flicker या overlap हो सकता है
  • Ordering table यह तय करने का बोझ कि कौन-सी geometry सामने है, डेवलपर या प्रोग्राम पर छोड़ देता है; performance के लिए बहुत approximation होने पर flickering या hidden surface की समस्या आ सकती है
  • Affine transformation में depth sense नहीं होता, इसलिए जब camera model के करीब हो और दृष्टि के लंबवत हो, तो texture warping पैदा हो सकता है; कुछ game distortion घटाने के लिए tessellation या solid colour replacement का उपयोग करते हैं
  • जब real-time GPU presentation से अधिक यथार्थवादी scene चाहिए होता है, तब pre-rendered background को MDEC से stream किए गए वीडियो को दो triangle पर चढ़ाकर इस्तेमाल किया जाता है

ऑडियो और CD-आधारित गेम

  • SPU 44.1kHz Audio CD गुणवत्ता वाले 16-bit ADPCM sample के 24 channel को support करता है
  • SPU pitch modulation, frequency modulation, ADSR envelope, looping और digital reverb feature देता है
  • Audio buffer Sound RAM 512KB DRAM है; game इसमें sample storage के लिए केवल 508KB उपयोग कर सकते हैं, और reverb चालू होने पर usable capacity और कम हो जाती है
  • CD controller audio buffer या CPU के हस्तक्षेप के बिना sample को सीधे audio mixer तक भेज सकता है, और XA encoding में compressed sample को SPU real time में decode कर सकता है
  • CD-ROM media ने PS1 game को 620MB storage, समृद्ध audio quality और 2x drive की अपेक्षाकृत तेज़ read speed दी
  • 1997 तक जारी PS1 revision में defective CD drive laser के कारण FMV और Audio CD skip अक्सर होने के लिए जाने जाते थे; बाद के मॉडल ने laser unit और housing में सुधार कर समस्या कम की

I/O, BIOS, डेवलपमेंट environment

  • शुरुआती PlayStation में add-on के लिए Serial और Parallel I/O port थे, लेकिन कम adoption और copy protection bypass की आशंका के कारण बाद की revision में हटा दिए गए
  • CD subsystem में motor, laser और RF signal को नियंत्रित करने वाला DSP, Motorola 68HC05 microcontroller तथा 512B RAM और 16KB ROM वाला Sub-CPU, main CPU और CD subsystem के बीच मध्यस्थ CD Controller, और 32KB SRAM buffer शामिल हैं
  • Sub-CPU का ROM program copy-protection procedure लागू करता है और main CPU की इच्छा से अलग होकर भी इसे enforce करता है
  • सामने की ओर controller 2 और Memory Card 2 के लिए कुल 4 socket हैं; ये चारों slot विद्युत रूप से समान हैं और इनके address hardcoded हैं
  • सिस्टम 512KB ROM में BIOS रखता है, और BIOS startup, user shell और I/O routine प्रदान करता है
  • BIOS ROM तक पहुँच 8-bit data bus के कारण बहुत धीमी है, इसलिए API को boot के दौरान main RAM में copy होने वाले Kernel के रूप में दिया जाता है, और 64KB main RAM PlayStation OS के लिए reserve रहती है
  • Boot process BIOS ROM execution, PlayStation OS load, splash display, CD authenticity check, SYSTEM.CNF की जाँच और execute करना या shell दिखाने के क्रम में चलता है
  • Shell एक सरल graphical interface है, जो Memory Card save copy/delete और Audio CD playback देता है
  • Sony SDK में C compiler और library शामिल थे, और library hardware access के लिए BIOS routine से जुड़ती थी
  • Studio के लिए DTL-H2000 PS1 internals, I/O और debugging circuitry वाली dual-slot ISA card थी, जिसे Windows 3.1 या 95 वाले PC पर चलने वाले software की आवश्यकता होती थी
  • Hobbyist के लिए Net Yaroze toolkit, manual और काले रंग का PS1 console देता था, लेकिन CD drive access न होने से homebrew software को पूरी तरह main RAM में फिट होना पड़ता था

copy protection और region lock

  • Sony का copy protection इस तरह काम करता है कि Sub-CPU जाँचता है कि CD के Table of Contents में विशेष frequency पर उकेरा गया Wobble Groove है या नहीं
  • Wobble Groove mastering process के दौरान जोड़ा जाता है, सामान्य CD burner से कॉपी नहीं किया जा सकता, और TOC CD के Lead-In क्षेत्र में होता है तथा fault tolerance के लिए कई बार दोहराया जाता है
  • Game TOC में SCEA, SCEE, SCEI स्ट्रिंग्स में से एक होती है, और यही तरीका region-locking के लिए भी उपयोग होता है
  • यह जाँच startup पर केवल एक बार होती है, इसलिए authentication के तुरंत बाद disc को हाथ से बदलने वाली swap trick से इसे bypass किया जा सकता है, हालांकि इससे drive को नुकसान पहुँचने का जोखिम रहता है
  • कुछ game gameplay के दौरान drive को फिर से initialize करके check दोहराने की कोशिश करते थे ताकि swap trick रोकी जा सके
  • Modchip एक छोटा board होता है जिसे Wobble Groove signal की नकल करने के लिए प्रोग्राम किया जाता था; इसे console में solder किया जाता था, और कानूनी विवाद के बावजूद यह बहुत लोकप्रिय हुआ
  • बाद के game ने modchip, CD burner और emulator के फैलाव के जवाब में checksum-केंद्रित अपने protection उपाय जोड़ लिए
  • Sony का Libcrypt disc sub-channel में specific sector checksum रखने वाली hardware-side approach और game के कई हिस्सों में checksum लेकर उसे दूसरे मानों के साथ मिलाकर verify करने वाली software-side routine को जोड़ता है

1 टिप्पणियां

 
Hacker News की राय
  • ऐसे memory regions हैं जो उसी physical memory पर map होते हैं — https://psx-spx.consoledev.net/memorymap/
    PSX से PC पर Metal Gear Solid port करते समय, Konami के programmers ने यह स्टोर करने के लिए काफ़ी आक्रामक trick इस्तेमाल की थी कि C4 bomb दीवार पर लगाया गया था या फ़र्श पर
    मूल रूप से pointer उसी physical memory address की ओर इशारा करता था, लेकिन अगर वह दीवार या फ़र्श पर लगाया गया हो तो शायद 80000000h के साथ OR करना या A0000000h इस्तेमाल करना जैसी कोई तरकीब थी। बहुत समय हो गया है इसलिए ठीक-ठीक क्या किया था यह अब याद नहीं, लेकिन PC पर port करने की प्रक्रिया मज़ेदार थी

    • Memory card bootloader भी इसी तरह काम करता है
      BIOS code में एक ख़राब array iterator है, जिसकी वजह से base pointer से memory map में ऊपर की ओर arbitrary data copy किया जा सकता है। आम तौर पर base pointer बहुत ऊँची जगह पर होता है, इसलिए executable code overwrite नहीं होता, लेकिन memory aliasing की वजह से अगर मान सही सेट किए जाएँ तो write “घूमकर” BIOS को overwrite कर सकता है
      इसलिए व्यावहारिक रूप से सिर्फ memory card screen में जाने भर से custom BIOS boot किया जा सकता है, और वहाँ से mechacon जाँच से गुज़रे बिना PSX.EXE चलाकर copy protection को bypass किया जा सकता है
      MGS porting के बारे में और भी जानना चाहूँगा। याद हो तो सुनना दिलचस्प होगा। मुझे याद है कि ज़्यादातर scripting में TCL इस्तेमाल हुआ था, और लगता है कि MGS 1~4 ने एक ही वंश की scripting language का उपयोग किया था
      हाल ही में MGS2 source code leak हुआ था, लेकिन शायद वह लगभग पूरी तरह rewrite था, इसलिए PSX codebase के साथ उसका साझा हिस्सा बहुत कम रहा होगा
    • आजकल ऐसी tricks आम तौर पर pointer के निचले valid bits का इस्तेमाल करके की जाती हैं और dereference करते समय masking से उन्हें हटा दिया जाता है। बदले में ज़्यादा alignment चाहिए होता है, जैसे 4 bits इस्तेमाल करने पर 16-byte alignment चाहिए
      PS1 में भी इतना RAM नहीं था कि पूरे RAM decoding window को भर सके, इसलिए RAM aliasing होता है। ठीक सिद्धांत तो नहीं पता, लेकिन मैंने देखा है कि अगर PS1 executable stack pointer को dev kit के 8MiB RAM के अंत पर सेट करे, तो retail device पर वह अंततः 2MiB RAM के अंत पर गिरकर सामान्य रूप से काम करता है। सिद्धांततः वहाँ भी bits डाले जा सकते हैं, और अलग cache behavior वाले memory region को छुए बिना भी काम हो सकता है
    • दिलचस्प। Decompiled code में उस हिस्से को ढूँढना आसान नहीं है। यह भी सोच रहा हूँ कि शायद अभी तक उसे खोजकर document नहीं किया गया हो
      https://github.com/FoxdieTeam/mgs_reversing/blob/master/sour...
    • शुरुआती Mac में 32-bit pointers के ऊपरी byte का इस्तेमाल दूसरे data के लिए किया जाता था
      https://en.wikipedia.org/wiki/Classic_Mac_OS_memory_manageme...
      इसके नतीजे में कुछ models में ऐसा backward compatibility mode आया जो PC के A20 gate से बहुत अलग नहीं था, लेकिन वह अवधि छोटी थी
    • आजकल ऐसी सुविधाएँ hardware extensions के रूप में standardize हो चुकी हैं
      Arm Top Byte Ignore(TBI), Intel Linear-Address Masking(LAM) और उसका संशोधित रूप Linear Address Space Separation(LASS), AMD Upper Address Ignore(UAI) मौजूद हैं, और UAI अभी भी SLAM attack के ख़िलाफ़ सुरक्षित नहीं है। इनके ऊपर ARM Memory Tagging Extension(MTE) जैसी security extensions भी हैं
  • शानदार लेख है, लेकिन यह मूल रूप से 2019 में प्रकाशित हुआ था। पुरानी चर्चा 2020 में https://news.ycombinator.com/item?id=22932134 और 2021 में https://news.ycombinator.com/item?id=27576902 पर हुई थी, और दोनों जगह 114-114 comments थे

    • उसके बाद इसे कई बार update किया गया है
    • फिर भी यह 5~7 साल पुरानी बात है। मैंने यह लेख पहली बार देखा, इसलिए इसका फिर से सामने आना अच्छा लगा
  • यह वाकई बहुत सुंदर ढंग से डिज़ाइन की गई website है। सब कुछ सोच-समझकर रखा गया है, और यह अच्छी तरह curate किए गए digital garden का बढ़िया उदाहरण लगता है। इसमें मज़बूत रूप से well-maintained और human-made होने का एहसास है

  • मैं अभी PS1 से जुड़ा एक project पर काम कर रहा हूँ और जल्द ही उसे साझा करना चाहता हूँ, इसलिए यह पोस्ट किया
    कोई PS1 web/JS/WASM emulator recommendation हो तो बताइए। Desktop पर PCSX-Redux [0] और DuckStation [1] अच्छे लगे
    JS/emscripten आधारित कुछ प्रयास मिले हैं, लेकिन अगर कोई recommendation हो तो अच्छा लगेगा
    [0] https://github.com/grumpycoders/pcsx-redux/
    [1] https://duckstation.org/

  • PS1 वह architecture था जिसने मुझे RISC, या और सटीक रूप से load-store architecture, पसंद करना सिखाया और यह समझाया कि x86 के बारे में मेरी सोच कहाँ ग़लत थी

  • PS1 architecture आकर्षक है। यह भी दिखाता है कि PS1 games में वह अनोखी और तुरंत पहचानी जाने वाली शैली क्यों आई, जिसे आज भी दोहराने की कोशिश की जाती है

  • मुझे Copetti के लेख पसंद हैं। मैं उनके हर विषय को पूरी तरह नहीं जानता, लेकिन उनके लेख और diagrams को सरसरी तौर पर देखना भी आनंददायक होता है
    ख़ासकर 5वीं और 6वीं पीढ़ी के consoles जैसी machines के अंदर क्या हो रहा है, इसे समझने की कोशिश मज़ेदार लगती है

    • अगर आपको Copetti पसंद है, तो Fabien Sanglard का सारा काम भी देखने लायक है। Wolfenstein और Doom Black Books, Another World port analysis, और इसके अलावा प्रकाशित दर्जनों code reviews हैं
      https://fabiensanglard.net/
    • 1994 का समय-बिंदु भी हमेशा चौंकाता है। ये devices ज़्यादा 90 के दशक के आख़िरी वर्षों की चीज़ें लगती हैं
  • यह Claude से पहले लिखा गया लेख है, इसलिए और भी अच्छा है

  • जंप के बाद वाली instruction चलती है — पहली नज़र में यह पूरी तरह पागलपन लगा, लेकिन कुछ दिन बाद यह स्वाभाविक लगने लगा। N64 में भी ऐसी ही एक समस्या थी, जहाँ दो multiplications के बीच डालने के लिए instruction ढूँढनी पड़ती थी
    अगर पहली multiplication 0 से multiply करती या किसी वजह से दो cycles में खत्म हो जाती, तो अगली instruction भी multiplication होने पर CPU रुक जाता था

    • एक और अजीब बात यह थी कि COP2, यानी GTE instruction, program counter के हिसाब से अपनी जगह से एक instruction पहले execute होना शुरू कर देती थी
      इसलिए अगर exception होता, तो kernel interrupt handler को देखना पड़ता कि अगली instruction COP2 है या नहीं, और उसे दोबारा चलने से रोकने के लिए program counter में 4 जोड़ना पड़ता था
      साथ ही COP2 instruction को branch delay slot में नहीं रखा जा सकता था, शायद इसी तरह की वजह से। लेकिन कुछ games, याद पड़ता है कि Tekken 3, ने वास्तव में ऐसा किया था। कई emulators को इस हिस्से में दिक्कत हुई या special handling की ज़रूरत पड़ी, इसलिए मुझे हमेशा जिज्ञासा रही कि क्या यह चुपके से डाला गया anti-emulation उपाय था
  • इस series के लेख हमेशा शानदार होते हैं
    PS1 games आज के मानकों पर उतने अच्छे से नहीं टिकते, लेकिन PS2 games को 1440p~4K पर upscale करो तो वे लगभग परफेक्ट लगते हैं

    • PS1 games भी काफ़ी अच्छे लगते हैं, अगर उन्हें वैसे खेला जाए जैसा मूल रूप से सोचा गया था — यानी संभव हो तो CRT पर, नहीं तो emulator के CRT filter के साथ। एकदम sharp LCD पर बहुत ऊँचे resolution में खेलना मेरे हिसाब से सबसे खराब तरीका है
    • “PS1 games आज देखना मुश्किल है” — यह बात हर किसी को अलग लग सकती है। PS1 ने home console पर 3D युग की शुरुआत का संकेत दिया था, और उसके खास PS1 “wobble” वाले low-poly 3D models को पसंद करने वाले लोग भी बहुत हैं
      इसमें nostalgia का हिस्सा बड़ा है, लेकिन इसका अपना साफ़ आकर्षण भी है। PS1 की अनोखी hardware limitations को जानने के बाद मुझे यह समय के साथ और भी पसंद आने लगा। सिर्फ social media feed देख लो, “PS1 graphics” थोड़े revival से गुजर रहे हैं, और बहुत लोग उस एहसास को फिर से बनाने की कोशिश कर रहे हैं
    • specs को देखो तो developers ने उससे जो निकाला, वह सचमुच हैरान करने वाला है
    • graphics के लिहाज़ से या तो CRT/CRT filter का इस्तेमाल करो, या ऐसा emulator लो जो ऊँचे rendering resolution पर vertex wobble हटाने के लिए PGXP geometry correction support करता हो
      gameplay के हिसाब से देखें तो इस console की library बहुत विशाल है, जिसमें व्यावसायिक रूप से जारी किए गए सिर्फ games ही हज़ारों में हैं, और छिपे हुए रत्न भी बहुत हैं। अगर कोई gamer उस सूची में अपनी पसंद का एक भी game न ढूँढ पाए, तो मुझे उल्टा हैरानी होगी
    • 2D games आज भी अच्छी तरह टिके हुए हैं। उदाहरण के लिए Symphony of the Night जैसे titles