programmers resources
  http://www.intel-assembler.it/  (c)2017 intel-assembler.it   info@intel-assembler.it
 
Search :  
Lingua Italiana    English Language   
Index
 
just an empty assembly space
just an arrow Intel Platform
just an arrow Article & Guides
just an arrow Download Software


23/01/2009 Featured Article: How to remove Buzus Virus (permalink)




:::3058399:::
Bottone Scambio Directory Pubblicitaonline.it
Home Page | Articles & Guides | Download | Intel Platform | Contacts

Google
 


Bookmark and Share
Download 
Tell a friend



Playstation Architecture, hardware and coding

A document about Playstation 1 full of tech inf

(by joshua walker)

A 105 page guide on Playstation. Contains information about hardware architecture, memory handling, graphics processing, sound device, media reader, I/O ports and much more. Although it's an old guide about the first version of Playstation it's, in any case, an interesting piece of documentation showing processor and coprocessor commands for the R3000 CPU.
This article is online from 1086 days and has been seen 4104 times




A document about Playstation architecture, hardware infos, Memory maps,
GPU, GPU transformation unit and motion decoder, the Sound system, ports
and much more.

It's about Playstation first version but is very interesting bacause it
shows the complete architecture and what programming instructions are
available for each hardware subsystem.

Table of Contents

1. Introduction
2. History
3. The MIPS R3000A 32 RISC Processor
 - Overview
 - The R3000A instruction set
 - R3000A opcode encoding
4. Memory
 - Memory Map
 - Virtual Memory
 - The System Control Coprocessor (Cop0)
 - Exception Handling
 - Breakpoint management
 - DMA
5. Video
 - Overview
 - The Graphics Processing Unit (GPU)
 - The Graphics Transformation Engine (GTE)
 - The Motion Decoder (MDEC)
6. Sound
 - The Sound Processing Unit (SPU)
7. CD-ROM
8. Root Counters
9. Controllers
10. Memory Cards
11. Serial port I/O
12. Parallel port I/O

Appendices
A. Number Systems
B. BIOS functions
C. GPU command listing
D. Glossary of terms
E. Bibliography

The R3000A

Overview
The heart of the PSX is a slightly modified R3000A CPU from MIPS and LSI.
This is a 32 bit Reduced Instruction Set Controller (RISC) processor that clocks
at 33.8688 MHz. It has an operating performance of 30 million instructions per
second. In addition, it has an Internal instruction cache of 4 KB, a data cache
of 1 KB and has a bus transfer rate of 132 MB/sec. It has internally one
Arithmetic/Logic unit (ALU), One shifter, and totally lacks an FPU or floating
point unit. The R3000A is configured for litle-endian  byte order and defines a
word as 32-bits, a half-word, as 16-bits, and a byte as 8-bits.

The PSX has two coprocessors, cop0, the System Control coprocessor, and cop2,
the GPU or Graphics Processing Unit. These are covered later on in this
document.

Instruction cache
The PSX's R3000A contains 4 KB of instruction cache. The instruction
cache is organized with a line size of 16 bytes. This should achieve hit
rate of around 80%. The cache is implemented using physical address and
tags, as opposed to virtual ones.

Data cache
The PSX's R3000A incorporates an on-chip data cache of  1KB, organized
as a line size of 4 bytes (one word). This also should achieve hit rates
of 80% in most applications. This also is a directly mapped physical
address cache. The data cache is implemented as a write through cache,
to maintain that the main memory is the same as the internal cache. In
order to minimize processor stalls due to data write operations, the bus
interface unit uses a 4-deep write buffer which captures address and
data at the processor execution rate, allowing it to be retired to main
memory at a much slower rate without impacting system performance.

32 bit architecture
The R3000A uses thirty-two 32-bit registers, a 32 bit program counter,
and two 32 bit registers for multiply/divide functions.  The following
table lists the registers by register number, name, and usage.

General Purpose Registers

Register number Name Usage
R0 ZR Constant Zero
R1 AT Reserved for the assembler
R2-R3 V0-V1 Values for results and expression evaluation
R4-R7 A0-A3 Arguments
R8-R15 T0-T7 Temporaries (not preserved across call)
R16-R23 S0-S7 Saved (preserved across call)
R24-R25 T8-T9 More temporaries (not preserved across call)
R26-R27 K0-K1 Reserved for OS Kernel
R28 GP Global Pointer
R29 SP Stack Pointer
R30 FP Frame Pointer
R31  RA Return address (set by function call)

Multiply/Divide result Registers and Program counter
Name Description
HI Multiplication 64 bit high result or division  remainder
LO Multiplication 64 bit low result or division quotient
PC Program Counter

Even though all general purpose registers have different names, they are
ll treated the same except for two. The R0 (ZR) register is hardwired as
zero. The Second exception is R31 (RA) which is used at a link register
when link or jump routines are called. These instructions are used in
subroutine calls, and the subroutine return address is placed in
register R31. This register can be written to or read as a normal
register in other operations.

R3000A Instruction set
The instruction encoding is based on the MIPS architecture. The means
that there are three types of instruction encoding.

I-Type (Immediate)
op rs rt immediate

J-Type (Jump)
 op target

R-Type (Register)
op rs rt rd shamt funct

where:

op is a 6-bit operation code
rs is a five bit source register specifier
rt is a 5-bit target register or branch condition
immediate is a 16-bit immediate, or branch or address displacement
target is a 26-bit jump target address
rd is a 5-bit destination register specifier
shamt is a 5-bit shift amount
funct is a 6-bit function field


The R3000A instruction set can be divided into the following basic groups:
Load/Store instructions move data between memory and the general registers.
They are all encoded as "I-Type" instructions, and the only addressing mode
implemented is base register plus signed, immediate offset. This directly
enables the use of three distinct addressing modes: register plus offset;
register direct; and immediate.

Computational instructions perform arithmetic, logical, and shift operations on
values in registers. They are encoded as either "R-Type" instructions, when both
source operands as well as the result are general registers, and "I-Type", when
one of the source operands is a 16-bit immediate value. Computational
instructions use a three address format, so that operations don't needlessly
interfere with the contents of source registers.

Jump and Branch instructions change the control flow of a program. A Jump
instruction can be encoded as a "J-Type" instruction, in which case the Jump
target address is a paged absolute address formed by combining the 26-bit
immediate value with four bits of the Program Counter. This form is used for
subroutine calls. Alternately, Jumps can be encoded using the "R-Type" format,
in which case the target address is a 32-bit value contained in one of the
general registers. This form is typically used for returns and dispatches.
Branch operations are encoded as "I-Type" instructions. The target address is
formed from a 16-bit displacement relative to the Program Counter. The Jump and
Link instructions save a return address in Register r31. These are typically
used as subroutine calls, where the subroutine return address is stored into
r31 during the call operation.

Co-Processor instructions perform operations on the co-processor set.
Co-Processor Loads and Stores are always encoded as "I-Type" instructions;
co-processor operational instructions have co-processor dependent formats.

In the R3000A, the System Control Co-Processor (cop0) contains registers which
are used in memory management and exception handling.

Special instructions perform a variety of tasks, including movement of data
between special and general registers, system calls, and breakpoint operations.
They are always encoded as "R-Type" instructions.

INSTRUCTION SET SUMMARY
The following table describes The assembly instructions for the R3000A. Please
refer to the appendix for more detail about opcode encoding

Load and Store Instructions

Instruction Format and Description
Load Byte LB rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Sign-extend contents of addressed byte and
                                     load into rt.
Load Byte Unsigned LBU rt, offset (base) Sign-extend 16-bit offset and add
                                     to contents of register base to form
                                     address. Zero-extend contents of addressed
                                     byte and load into rt.
Load Halfword LH rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Sign-extend contents of addressed byte and
                                     load into rt.
Load Halfword Unsigned LHU rt, offset (base) Sign-extend 16-bit offset and add
                                     to contents of register base to form
                                     address. Zero-extend contents of addressed
                                     byte and load into rt.
Load Word LW rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Load contents of addressed word into
                                     register rt.
Load Word Left LWL rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Shift addressed word left so that addressed
                                     byte is leftmost byte of a word. Merge
                                     bytes from memory with contents of register
                                     rt and load result into register rt.
Load Word Right LWR rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Shift addressed word right so that
                                     addressed byte is rightmost byte of a word.
                                     Merge bytes from memory with contents of
                                     register rt and load result into register
                                     rt.
Store Byte SB rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Store least significant byte of register
                                     rt at addressed location.
Store Halfword SH rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Store least significant halfword of
                                     register rt at addressed location.
Store Word SW rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Store least significant word of register
                                     rt at addressed location.
Store Word Left SWL rt, offset (base) Sign-extend 16-bit offset and add to
                                     contents of register base to form address.
                                     Shift contents of register rt right so that
                                     leftmost byte of the word is in position of
                                     addressed byte. Store bytes containing
                                     original data into corresponding bytes at
                                     addressed byte.
Store Word Right SWR rt, offset (base) Sign-extend 16-bit offset and add
                                     to contents of register base to form
                                     address. Shift contents of register rt left
                                     so that rightmost byte of the word is in
                                     position of addressed byte. Store bytes
                                     containing original data into corresponding
                                     bytes at addressed byte.

(download for full text)



Top
Download 
Tell a friend
Bookmark and Share



Similar Articles

MIPS Assembly Language Programming
CS50 Discussion and Project Book
(by Daniel J. Ellard)

 Tags: playstation, R3000, MIPS


webmaster jes
writers rguru, tech-g, aiguru, drAx

site optimized for IE/Firefox/Chrome with 1024x768 resolution

Valid HTML 4.01 Transitional


ALL TRADEMARKS ® ARE PROPERTY OF LEGITTIMATE OWNERS.
© ALL RIGHTS RESERVED.

hosting&web - www.accademia3.it

grossocactus
find rguru on
http://www.twitter.com/sicurezza3/
... send an email ...
Your name

Destination email

Message

captcha! Code