Arsitektur PlayStation
(copetti.org)- Arsitektur PlayStation memilih konfigurasi yang sederhana dan praktis untuk mengurangi kerumitan pengembangan perangkat keras 3D, tetapi tetap menyisakan beban bagi pengembang serta keterbatasan visual dalam penyortiran grafis, koreksi tekstur, dan presisi
- Sony CXD8530BQ adalah SoC yang mengintegrasikan core kompatibel MIPS R3000A berbasis CoreWare dari LSI Logic bersama CP0, GTE, dan MDEC, berjalan pada 33.87MHz dan menyusun perpindahan data dengan berpusat pada RAM 2MB, Scratchpad 1KB, dan DMA
- Untuk grafis, GTE menangani proyeksi 3D, pencahayaan, dan clipping, sementara GPU merender garis, persegi panjang, dan segitiga berbasis perintah; tanpa Z-buffer, sistem memakai ordering table sehingga CPU harus menentukan urutan poligon
- GPU menimbulkan guncangan, tumpang tindih, dan texture warping karena affine texture mapping, nearest neighbour, koordinat bilangan bulat, dan tidak adanya resolusi subpiksel; karena itu digunakan solusi seperti tessellation, penggantian warna solid, dan latar belakang pre-rendered
- Desain berbasis CD-ROM menggabungkan ruang penyimpanan 620MB, streaming audio ADPCM 44.1kHz, lingkungan eksekusi berbasis BIOS, serta perlindungan salinan Wobble Groove dan kunci wilayah, yang mengubah cara pengembangan dan distribusi game
Desain dasar dan CPU
- PlayStation dirancang dengan pendekatan sederhana dan praktis berdasarkan anggapan bahwa perangkat keras 3D bisa menjadi rumit untuk dikembangkan, dengan konsekuensi menerima sejumlah keterbatasan
- Chip utama Sony CXD8530BQ dalam istilah modern setara dengan SoC, dan menggunakan core CPU berbasis CoreWare dari LSI Logic yang kompatibel biner dengan keluarga MIPS R3000A
- Core CPU memiliki 33.87MHz, ISA MIPS I, word 32-bit, 32 register serbaguna, bus data 32-bit, bus alamat 32-bit, pipeline 5 tahap, dan cache instruksi 4KB
- Tidak ada cache data; sebagai gantinya, memori 1KB yang awalnya setara dengan cache data disediakan sebagai Scratchpad yang dipetakan ke alamat tetap sehingga dapat digunakan seperti SRAM cepat
- Sistem menyediakan 2MB EDO RAM untuk tugas umum; EDO RAM dijelaskan sebagai chip yang sedikit lebih efisien dan memiliki latensi lebih rendah dibanding DRAM biasa
Bus dan koprosesor
- Bus data dibagi menjadi Main Bus 32-bit dan Sub Bus 16/8-bit; Main Bus menghubungkan MDEC dan GPU, sedangkan Sub Bus menghubungkan komponen lain dan I/O
- CD-ROM controller, MDEC, GPU, SPU, dan parallel port dapat mengakses DMA controller; DMA mentransfer data dengan throughput tinggi dengan mengambil alih main bus tanpa melewati CPU
- Saat DMA berjalan, CPU tidak dapat mengakses main bus, dan jika tidak ada pekerjaan yang bisa diproses di Scratchpad maka CPU akan masuk ke keadaan menunggu
- CP0, yaitu System Control Coprocessor, mengelola implementasi cache, akses langsung Scratchpad, isolasi cache instruksi, interupsi, exception, dan breakpoint
- CP2, yaitu Geometry Transformation Engine, mempercepat perhitungan vektor dan matriks berbasis fixed-point serta menangani tahap awal pipeline grafis seperti proyeksi 3D, pencahayaan, dan clipping
- MDEC mendekompresi macroblock yang dienkode mirip JPEG ke format yang dapat dipahami GPU, dan dapat memproses 9.000 macroblock bitmap 24bpp berukuran 8×8 piksel per detik sehingga mampu melakukan streaming FMV 320×240px pada 30fps
- Tidak tersedia FPU setara CP1; perhitungan pecahan dapat ditangani dengan floating-point software atau fixed-point, tetapi ada batasan pada kecepatan maupun presisi
Pipeline dan delay slot
- Pipeline MIPS I rentan terhadap control hazard dan data hazard, serta memiliki perilaku branch delay slot di mana instruksi setelah branch atau jump selalu dijalankan
- Instruksi load tidak menghentikan pipeline sampai data yang diambil siap, sehingga jika instruksi berikutnya langsung bergantung pada hasil load sebelumnya, dibutuhkan filler agar operand yang benar dapat diperoleh
- Sebagian delay slot dapat diisi dengan instruksi yang bermakna, jadi tidak selalu menjadi siklus yang terbuang
- Berdasarkan filosofi RISC bahwa compiler dan assembler berkualitas tinggi menangani penataan ulang instruksi atau penyisipan filler, MIPS memilih desain yang mengekspos pipeline CPU kepada pengembang dan toolchain
- Kekurangan dari desain ini adalah kompatibilitas mundur menjadi lebih sulit seiring munculnya mikroarsitektur baru pada generasi CPU berikutnya
Pipeline grafis
- Sebagian besar pipeline grafis ditangani oleh GTE, lalu data hasilnya dikirim ke GPU milik Sony untuk dirender
- Sistem menyimpan frame buffer, texture, dan sumber daya rendering lain di 1MB VRAM, dan CPU dapat mengisi area ini melalui DMA
- VRAM pada model awal menggunakan struktur dual-ported dengan dua bus 16-bit sehingga CPU, DMA, GPU, dan video encoder dapat mengaksesnya secara bersamaan
- Model berikutnya beralih ke SGRAM yang memakai satu bus data 32-bit; karena perbedaan timing, game yang lebih baru seperti Jet Moto 3 dapat menampilkan kerusakan grafis pada sistem berbasis VRAM
- CPU dapat mengisi hingga 3 perintah ke FIFO buffer 64-byte milik GPU untuk mengirim data geometri; perintah tersebut meminta rendering, perubahan pengaturan, atau manipulasi VRAM
- GPU dapat menggambar garis, persegi panjang, dan segitiga secara terpisah, dengan segitiga digunakan sebagai elemen dasar untuk membentuk model 3D yang kaya
- Sistem koordinat GPU adalah model koordinat bilangan bulat di mana tiap koordinat sesuai dengan sampling point di pusat piksel, dan tidak menggunakan fractional coordinate
Visibilitas, rasterisasi, dan tekstur
- GPU PlayStation tidak menyediakan fungsi penyelesaian visibilitas berbasis perangkat keras, dan memakai ordering table untuk mengelola alamat perintah GPU berdasarkan nilai depth
- CPU terlebih dahulu menyortir poligon, menaruh referensi pada entri tabel yang sesuai, lalu mengirim tabel itu ke GPU lewat DMA agar dirender dalam urutan yang benar
- GPU hanya membutuhkan satu frame buffer, dan rasteriser mengubah vertex menjadi garis, segitiga, persegi panjang, dan piksel
- Segitiga adalah primitive paling kompleks dan serbaguna karena mendukung texture dan shading; garis cepat tetapi tidak cocok untuk permukaan bertekstur, sedangkan persegi panjang dibatasi pada sprite maksimum 256×256 piksel dan tidak menyediakan shading atau efek transformasi affine
- Efek pencahayaan tersedia dalam dua bentuk, yaitu flat shading dan Gouraud shading; flat shading dapat mengisi poligon sekitar 2,5 kali lebih banyak per detik dibanding Gouraud shading
- Texture diterapkan dengan inverse texture mapping, yaitu mencari texel dari texture map untuk setiap piksel yang sudah dirasterisasi
- Affine Texture Mapping pada GPU PlayStation hanya menggunakan koordinat 2D X/Y dan mengabaikan depth, sehingga tidak melakukan perspective correction
- Texture filtering tidak diimplementasikan; untuk koreksi skala digunakan nearest neighbour, yang cepat dan murah tetapi membuat model bertekstur terlihat blocky
- GPU mendukung efek semi-transparency dan dithering pada segitiga, dan PlayStation digambarkan sangat unggul dalam efek-efek ini
Pengelolaan VRAM dan keterbatasan visual
- Gagasan memakai seluruh 1MB VRAM secara besar-besaran untuk frame buffer perlu disesuaikan kembali ke format standar TV, mengurangi ruang texture dan colour table; GPU sendiri juga hanya dapat merender frame buffer warna 16-bit hingga maksimum 640×480 piksel
- Buffer 640×480 16-bit menyisakan 424KB VRAM untuk aset, tetapi keunggulan resolusi tinggi ini tidak terlalu menonjol pada TV rumahan saat itu
- Adjustable frame-buffer adalah pendekatan untuk tidak membuang VRAM pada resolusi yang dampak visualnya kecil, dengan mengecilkan frame buffer agar ruang untuk texture dan colour lookup table bertambah
- Demo Gears Episode 2 buatan Halkun menunjukkan pembagian frame buffer 640×480 menjadi dua buffer 320×480 dan penggunaan page flipping untuk merender satu adegan saat adegan lain sedang ditampilkan
- Tata letak ini hanya memakai 600KB VRAM, dan 424KB sisanya dapat digunakan untuk colour lookup table dan texture, sehingga menjadi konfigurasi yang efisien bersama texture cache 2KB
- VRAM dapat memetakan beberapa colour depth sekaligus, sehingga bitmap 24bpp yang umum dipakai untuk frame FMV bisa ditempatkan di samping frame buffer 16bpp
- Rasteriser hanya bekerja pada tingkat piksel dan tidak melacak seberapa besar pecahan piksel yang ditempati segitiga, sehingga dapat muncul lompatan pada garis luar model serta flicker dan overlap di area perpotongan segitiga
- Ordering table menyerahkan beban penentuan geometri mana yang berada di depan kepada pengembang atau program; bila banyak perhitungan aproksimasi dipakai demi performa, dapat muncul flickering atau masalah permukaan tertutup
- Transformasi affine tidak memiliki rasa kedalaman sehingga saat kamera dekat dengan model dan tegak lurus terhadap pandangan, dapat timbul texture warping; beberapa game mengurangi distorsi ini dengan tessellation atau menggantinya dengan warna solid
- Latar belakang pre-rendered dipakai saat dibutuhkan adegan yang lebih realistis daripada representasi GPU real-time, dengan cara menempelkan video yang di-stream lewat MDEC ke dua segitiga
Audio dan game berbasis CD
- SPU mendukung 24 kanal sample ADPCM 16-bit dengan kualitas Audio CD 44.1kHz
- SPU menyediakan fitur pitch modulation, frequency modulation, ADSR envelope, looping, dan digital reverb
- Buffer audio Sound RAM berupa DRAM 512KB; game hanya dapat memakai 508KB untuk menyimpan sample, dan kapasitas yang tersedia akan berkurang lagi jika reverb diaktifkan
- CD controller dapat mengirim sample langsung ke audio mixer tanpa campur tangan buffer audio atau CPU, dan sample yang dikompresi dengan encoding XA dapat didekode secara real time oleh SPU
- Media CD-ROM memberi game PS1 ruang penyimpanan 620MB, kualitas audio yang kaya, serta kecepatan baca yang relatif cepat dari drive 2x
- Revisi PS1 yang dirilis hingga 1997 dikenal memiliki laser CD drive yang cacat sehingga sering terjadi skip pada FMV dan Audio CD; model setelahnya memperbaiki unit laser dan housing untuk meredakan masalah ini
I/O, BIOS, dan lingkungan pengembangan
- PlayStation awal memiliki port I/O Serial dan Parallel untuk add-on, tetapi kemudian dihapus pada revisi berikutnya karena tingkat adopsi rendah dan kekhawatiran akan bypass perlindungan salinan
- CD subsystem terdiri dari DSP yang mengendalikan motor, laser, dan sinyal RF; Sub-CPU dengan Motorola 68HC05 microcontroller serta RAM 512B dan ROM 16KB; CD Controller yang menjembatani main CPU dan CD subsystem; serta buffer SRAM 32KB
- Program ROM pada Sub-CPU mengimplementasikan prosedur copy-protection dan memaksakannya tanpa bergantung pada kehendak main CPU
- Di bagian depan terdapat 4 soket untuk 2 controller dan 2 Memory Card; keempat slot ini identik secara elektrik dan alamatnya di-hardcode
- Sistem menyimpan BIOS dalam ROM 512KB, dan BIOS menyediakan startup, user shell, serta routine I/O
- Akses ke BIOS ROM sangat lambat karena bus data 8-bit, sehingga API disediakan dalam bentuk Kernel yang disalin ke main RAM saat boot, dan 64KB main RAM dicadangkan untuk PlayStation OS
- Proses boot berjalan dalam urutan eksekusi BIOS ROM, pemuatan PlayStation OS, penampilan splash, verifikasi keaslian CD, pemeriksaan dan eksekusi
SYSTEM.CNF, atau penampilan shell - Shell adalah antarmuka grafis sederhana yang menyediakan penyalinan dan penghapusan save Memory Card serta pemutaran Audio CD
- Sony SDK menyertakan compiler C dan library, dan library tersebut terhubung ke routine BIOS untuk akses perangkat keras
- DTL-H2000 untuk studio adalah kartu ISA dual-slot yang memuat bagian dalam PS1, I/O, dan sirkuit debugging, serta membutuhkan perangkat lunak yang berjalan pada PC dengan Windows 3.1 atau 95
- Net Yaroze untuk kalangan hobi menyediakan toolkit, manual, dan konsol PS1 berwarna hitam, tetapi tanpa akses ke CD drive sehingga software homebrew harus seluruhnya muat di dalam main RAM
Perlindungan salinan dan kunci wilayah
- Copy protection Sony bekerja dengan cara Sub-CPU memeriksa apakah Table of Contents pada CD memiliki Wobble Groove yang diukir pada frekuensi tertentu
- Wobble Groove ditambahkan selama proses mastering dan tidak dapat disalin dengan CD burner biasa; TOC berada di area Lead-In CD dan diulang berkali-kali untuk fault tolerance
- TOC game memuat salah satu string SCEA, SCEE, atau SCEI, dan metode ini juga dipakai untuk region-locking
- Pemeriksaan hanya dilakukan sekali saat mulai, sehingga bisa dilewati dengan swap trick, yaitu mengganti disc secara manual tepat setelah autentikasi, meski ada risiko merusak drive
- Beberapa game mencoba mencegah swap trick dengan menginisialisasi ulang drive selama gameplay agar pemeriksaan diulang
- Modchip adalah papan kecil yang diprogram untuk meniru sinyal Wobble Groove, digunakan dengan disolder ke konsol; secara hukum kontroversial tetapi sangat populer
- Game-game berikutnya menambahkan mekanisme perlindungan sendiri yang berfokus pada checksum untuk menghadapi penyebaran modchip, CD burner, dan emulator
- Libcrypt milik Sony menggabungkan pendekatan sisi hardware yang menyimpan checksum sektor tertentu di sub-channel disc, dengan routine sisi software yang mengambil checksum itu di berbagai bagian game lalu mencampurnya dengan nilai lain untuk verifikasi
1 komentar
Komentar Hacker News
Ada wilayah memori yang dipetakan ke memori fisik yang sama — https://psx-spx.consoledev.net/memorymap/
Saat melakukan port Metal Gear Solid dari PSX ke PC, para programmer Konami memakai trik yang cukup ekstrem untuk menyimpan apakah bom C4 dipasang di dinding atau di lantai
Pada dasarnya pointer menunjuk ke alamat memori fisik yang sama, tetapi kalau dipasang di dinding atau lantai mereka sepertinya melakukan OR dengan
80000000hatau memakaiA0000000h. Sudah lama sekali jadi saya tidak begitu ingat persis apa yang dilakukan, tapi proses porting ke PC itu menyenangkanAda iterator array yang cacat di kode BIOS, sehingga data arbitrer bisa disalin ke lokasi yang lebih tinggi pada peta memori daripada pointer acuannya. Biasanya pointer acuannya berada sangat tinggi sehingga kode yang sedang dieksekusi tidak tertimpa, tetapi karena ada alias memori, kalau nilainya diatur dengan tepat penulisannya bisa “berputar kembali” dan menimpa BIOS
Jadi pada praktiknya, hanya dengan masuk ke layar memory card, kita bisa mem-boot BIOS kustom, lalu dari sana menjalankan PSX.EXE tanpa melewati pemeriksaan mechacon untuk melewati copy protection
Saya juga ingin tahu lebih banyak tentang porting MGS. Penasaran apakah masih ada yang diingat. Saya ingat sebagian besar scripting memakai TCL, dan sepertinya MGS 1~4 memakai bahasa skrip yang masih satu garis keturunan
Kode sumber MGS2 baru-baru ini bocor, tetapi kemungkinan besar nyaris ditulis ulang sepenuhnya sehingga hampir tidak ada bagian yang dibagi dengan codebase PSX
PS1 juga tidak punya cukup RAM untuk menutupi seluruh jendela decoding RAM, sehingga muncul alias RAM. Saya tidak tahu detail persisnya, tetapi saya pernah melihat executable PS1 yang mengatur stack pointer ke ujung 8MiB RAM pada dev kit, namun di perangkat retail pada akhirnya tetap jatuh ke ujung 2MiB RAM dan berjalan normal. Secara teori bit juga bisa disisipkan di sana, dan tidak perlu menyentuh wilayah memori lain dengan perilaku cache yang berbeda
https://github.com/FoxdieTeam/mgs_reversing/blob/master/sour...
https://en.wikipedia.org/wiki/Classic_Mac_OS_memory_manageme...
Akibatnya, pada beberapa model muncul mode kompatibilitas mundur yang tidak jauh berbeda dari gerbang A20 pada PC, tetapi masa itu singkat
Ada Arm Top Byte Ignore(TBI), Intel Linear-Address Masking(LAM) beserta revisinya Linear Address Space Separation(LASS), dan AMD Upper Address Ignore(UAI), dan UAI masih belum aman dari serangan SLAM. Di atas itu juga ada ekstensi keamanan seperti ARM Memory Tagging Extension(MTE)
Tulisan yang sangat bagus, tetapi aslinya dipublikasikan pada 2019. Diskusi sebelumnya ada pada 2020 di https://news.ycombinator.com/item?id=22932134 dan pada 2021 di https://news.ycombinator.com/item?id=27576902, masing-masing dengan 114 komentar
Situs web yang dirancang dengan sangat indah. Semuanya ditempatkan dengan penuh pertimbangan, dan tampak seperti contoh bagus dari kebun digital yang dikurasi dengan baik. Terasa sangat terawat dan benar-benar seperti buatan manusia
Saya sedang mengerjakan proyek terkait PS1 sekarang dan ingin segera memublikasikannya, jadi saya memposting tulisan ini
Saya penasaran apakah ada rekomendasi emulator PS1 web/JS/WASM. Di desktop, PCSX-Redux [0] dan DuckStation [1] terasa bagus
Saya memang menemukan beberapa percobaan berbasis JS/emscripten, tetapi kalau ada rekomendasi saya akan sangat berterima kasih
[0] https://github.com/grumpycoders/pcsx-redux/
[1] https://duckstation.org/
PS1 adalah arsitektur yang membuat saya menyukai RISC, atau lebih tepatnya arsitektur load-store, dan membuat saya sadar bahwa selama ini saya keliru memahami sisi x86
Arsitektur PS1 itu memikat. Ini juga menunjukkan mengapa game-game PS1 punya gaya yang khas dan mudah dikenali, yang sampai sekarang masih ingin direproduksi orang
Saya suka tulisan Copetti. Saya memang tidak memahami dengan baik semua yang dibahasnya, tetapi sekadar menelusuri tulisan dan diagramnya saja sudah menyenangkan
Khususnya, proses mencoba memahami apa yang terjadi di dalam mesin seperti konsol generasi ke-5 dan ke-6 itu sangat seru
https://fabiensanglard.net/
Lebih bagus karena ini tulisan dari sebelum era Claude
Menjalankan instruksi setelah lompatan awalnya terasa seperti ide gila, tetapi setelah beberapa hari jadi terasa wajar. Di N64 juga ada masalah serupa, jadi kita harus mencari instruksi untuk disisipkan di antara dua operasi perkalian
Jika perkalian pertama mengalikan dengan 0 atau semacamnya sehingga selesai dalam dua siklus, CPU akan berhenti jika instruksi berikutnya juga perkalian
Jadi jika terjadi exception, interrupt handler kernel harus memeriksa apakah instruksi berikutnya adalah COP2 lalu menambahkan 4 ke program counter agar tidak dijalankan dua kali
Selain itu, instruksi COP2 tidak bisa ditempatkan di branch delay slot, mungkin karena alasan serupa. Namun beberapa game, kalau tidak salah ingat Tekken 3, benar-benar melakukan itu. Karena banyak emulator mengalami masalah di bagian ini atau memerlukan penanganan khusus, saya selalu penasaran apakah ini semacam pencegahan emulasi yang diselipkan diam-diam
Tulisan-tulisan dalam seri ini selalu luar biasa
Game PS1 menurut standar sekarang memang tidak terlalu bertahan baik, tetapi kalau game PS2 di-upscale ke 1440p~4K hasilnya menurut saya hampir sempurna
Sebagian besar memang karena nostalgia, tetapi jelas ada pesonanya sendiri, dan setelah mengetahui keterbatasan hardware unik PS1 saya justru makin menyukainya seiring waktu. Bahkan kalau melihat feed media sosial saja, “grafis PS1” sedang mengalami sedikit kebangkitan, dan banyak orang mencoba mereproduksi nuansa itu
Dari sisi gameplay, konsol ini punya library yang sangat besar, dengan ribuan game yang dirilis secara komersial dan banyak hidden gem. Saya malah akan terkejut jika ada gamer yang tidak bisa menemukan satu pun game yang cocok dengan seleranya dari daftar itu