Enter the fascinating world of programming PlayStation in the course "PS1 Programming with MIPS Assembly & C - Gustavo Pezzi." Get under the skin of the original Sony PlayStation console—deconstruct its inner hardware workings while mastering the art of game development. You will create your games by mixing a bit of MIPS assembly language and C programming that harnesses the power of the PS1 SDK library and a modern development toolchain to ease your work.
Begin a learning journey through the 5th generation of 32-bit consoles, where RISC architecture and high-level languages revolutionize the development of games. This course teaches you the basics of MIPS assembly. It helps you develop your ideas for games up from ground level to full-scale games, taking full advantage of the fact that C compilers are very efficient. Regardless of whether you already know some coding basics or are chomping at the bit to get started with retro programming, this course is self-contained. This is "PS1 Programming with MIPS Assembly & C," by Gustavo Pezzi. Hence, it caters to all enthusiasts from all levels and delves into a deep exploration of 3D game development in its prime.
There is no need for an actual PS1 console; exercises and final projects all run fluently on a PlayStation emulator. And while it's totally up to you to test your game on an actual console, burning a CD ISO and getting to play your game strictly as intended initially is around the corner. So, if you, too, find the force of retro gaming irresistible, and you would like to dive deep into the roots of its creation, then register for this course now and unravel the secrets of PS1 programming with MIPS Assembly & C by Gustavo Pezzi.
PS1 Programming with MIPS Assembly & C - Gustavo Pezzi Table of Contents:
-
Introduction
- Motivations & Learning Outcomes
- How to Take This Course
-
PlayStation History & Evolution
- The PS1 in the History of Game Consoles
- A New Player Enters the Game
- What is your favorite PS1 Game?
-
The PlayStation Hardware
- PS1 Hardware Overview
- The MIPS Processor
- What is ISA?
- MIPS Memory & Endianness
- PS1 Memory Map
- Quiz: PS1 Hardware
-
MIPS Assembly
- CPU Registers & Load Instructions
- Store, Add, & Subtract
- Jump & Branch Instructions
- Exercise: Our First MIPS Code
- MIPS Syntax Rules
- Installing the ARMIPS Assembler
- Assembling our Code
- The PSX-EXE File Format
- Quiz: MIPS Instructions
-
Emulation & Debugging
- Step-by-Step Execution
- Different PlayStation Emulators
- Fixing Off-by-One Error
- MIPS Pseudo-Instructions
-
The MIPS Pipeline
- MIPS Pipeline
- Delay Slots
- Exercise: Factorial
- Quiz: MIPS Pipeline
-
Subroutines & Signed Numbers
- Writing a Factorial Subroutine
- Negative Numbers
- Sign Extension
- Logical Instructions
- Bitshifting Instructions
- Quiz: Subroutines
-
CISC vs. RISC
- Examples of CISC & RISC Machines
- CISC vs. RISC Instructions
- Quiz: CISC vs. RISC
-
Graphics System
- The PS1 Graphics System
- Drawing Primitives
- GPU Packets
- Finding Packet Information
- Sending Packets to GP1
- Sending Packets to GP0
- Clearing the Display Area
- Quiz: GPU Packets
-
Rendering Polygons
- Drawing Flat-Shaded Triangles
- Drawing Flat-Shaded Quads
- Drawing Gouraud-Shaded Polygons
- Flat-Shaded Triangle Subroutine
- Stack & Stack Pointer
- Stack Parameters
- The MIPS ABI
- Stack & Heap Space
- Exercise: Drawing Polygons
-
MIPS Memory Alignment
- Variables
- Variable Alignment
- Vector Alignment
- Quiz: Memory Alignment
-
Copying Data to VRAM
- Copying Image Data to VRAM
- Multiplication & Division with Bitshifting
- 24BPP Display Mode
- Quiz: Copying Data to VRAM
-
Moving From Assembly to C
- Moving Away from Assembly
- The Original PS1 SDK Library
- Installing Tools on Windows 11
- Installing Tools on Windows XP
- Compiling a Simple C Project
-
Basic Data Types
- Double-Buffer Screen
- Integer Data Types
- Primitive Data Types
- Ordering Tables
- Primitive Buffer
- Sorting Primitives into the OT
- Sorting a Gouraud Quad in the OT
- More About Ordering Tables
- Quiz: Ordering Tables
-
Introduction to 3D Graphics
- A Review of 3D Projection
- Vertices & Face Indices
- The GTE Coprocessor
- Basic 3D Transformations
- Quiz: 3D Graphics Review
-
The GTE Coprocessor
- The RotTransPers Function
- Coding a Rotating 3D Cube
- Normal Clip
- Exercise: Cube Faces as Quads
-
Fixed-Point Math
- Review of Floating-Point Numbers
- Fixed-Point Number Representation
- Coding a Bouncing Cube
- Exercise: Drawing the Floor
- Different Transform Matrix per Object
- Quiz: Fixed-Point Math
-
GTE Inline Instructions
- GTE Register Set
- Inline GTE Instructions
- RTPT vs. RTPS
- Quiz: Inline GTE Instructions
-
Controller Input
- Reading Joypad State
- LIBETC Joypad Constant Names
- Reading Joypad via a BIOS Function
- The PlayStation BIOS
- Joypad Header File & Implementation
- Quiz: Joypad Input
-
Working with Multiple Files
- Header Files & Implementation Files
- Breaking our Project Apart
- Header Files for OT Functions
- Header Files for Display Functions
- Quiz: Header Files & Implementation Files
-
Camera Transformation
- Camera Space
- Look-At Transformation
- Look-At Function
- Coding the Look-At Camera Model
- Quiz: Camera Transformation
-
CD-ROM Access
- CD-ROM
- Generating an ISO on Windows XP
- Generating an ISO on Windows 11
- A Function to Read Files from the CD
- CD-ROM Access via a BIOS Function
- Understanding the MODEL.BIN File
- Dynamically Allocating Buffers
- Heap Initialization on Windows 11
- Interpreting Bytes as Numbers
- Handling Different Order of Bytes
- Reading Vertices & Faces from the CD
- Quiz: CD-ROM Access
-
Textured Polygons
- UV Coordinates, TPAGE, & CLUT
- Installing TIM Tool
- TIM File Format
- Reading TIM File from the CD
- Textured Cube Faces
- Wobbly Textures
- Polygon Jitter
- TPAGE Limitations & Techniques
- Quiz: Textured Polygons
-
Decoding PRM Files
- Introduction to our Final Project
- Importing Project Assets
- PRM File Layout
- Reading Object Name from File
- Reading Vertices & Normals from File
- Handling Different Types of Primitives
- Reading Primitives from File
- Drawing Flat-Shaded Object Faces
- Using sizeof with Variable Name
- Quiz: PRM File Layout
-
Decoding CMP Files
- CMP File Layout
- Reading Number of Textures from File
- Reading TIM Sizes from File
- A Function to Extract LZSS Data
- Texture Structs
- Uploading CMP Textures to VRAM
- Global Texture Store Array
- Rendering Textured 3D Objects
- TSB & CBA
- Quiz: CMP File Layout
-
Multiple 3D Objects
- Loading Multiple CMP Files
- Exercise: A Linked List of Objects
- Linked List Implementation
- Handling Joypad Press & Release
- Quiz: Multiple 3D Objects
-
Loading Landscape Objects
-
Ship Physics
-
Loading Track Faces
-
Polygon Subdivision & Tessellation
-
Polishing the Edges
-
Conclusion & Next Steps
Who is this course for?
- Aspiring game developers who are looking forward to delving into 3D game development.
- Nostalgic retro lovers in search of old gaming gear. Individuals with basic coding knowledge wanting to expand their skills.
- Inquiries from programmers interested in the basics of PlayStation programming.
Click on the links below to Download PS1 Programming with MIPS Assembly & C - Gustavo Pezzi!
You are replying to :
8/24/2024 8:25:37 AM
Thanks so much for this! Please add "NES Programming with 6502 Assembly" from the same author. It was updated in April, so pretty recent one and many people are looking for it.