Programmare la Playstation con Linux

Mer, 07/01/2009 - 00:01

Programmare la Playstation con Linux

Inviato da Bemipefe 3 commenti

PREFAZIONE

Non ostante l'uscita della nuova PlayStation 3, spesso chiamata semplicemente PS3, le precedenti console PS2 e PSONE (chiamata a volte anche PSX) girano ancora sul mercato. In particolare la PSONE è andata fuori produzione nel 2006, cioè dopo circa 10 anni dall'uscita.

Ecco qui una guida per chi vuole avventurarsi nella programmazione della console PSONE, un esperienza che insegna a capire le differenze tra una macchina evoluta come il nostro PC e una macchina di bassa potenza ma con grosse ottimizzazioni come l'architettura MIPS.

UN PO DI TERMINOLOGIA

Come sapete la componente piu importante di un Calcolatore è la CPU ossia la Central Process Unit che viene spesso chiamata volgarmente “Processore”. I nostri PC o portatili che siano montano processori che hanno marche e caratteristiche diverse in particolare si parla di Intel e AMD. Tuttavia tutti i processori costruiti da questi due produttori appartengono comunque alla stessa famiglia, la famiglia Intel x86. Quindi sia i processori Intel che AMD sono costruiti secondo le specifiche dell'architettura Intel x86, dove la x indica il numero identificativo di un processore, ad esempio questa architettura fu introdotta nel 1978 con il processore 8086.

Successivamente, qualcuno selo ricorderà sicuramente, nacquero i 286 e poi 386 fino ad arrivare alla famiglia “Pentium”. Nello stesso tempo AMD costruiva l'Am386, il K5, i primi Athlon e così via.

CHE COSA ACCOMUNA TUTTI QUESTI PROCESSORI ?

Semplice ...il linguaggio macchina che usano per essere comandati. Voi potete parlare nella stessa lingua ad un Pentium 3 e ad un Athlon ad esempio.

Per quanto complesso vi possa sembrare un computer esso puo essere paragonato ad una mega calcolatrice. Infatti le operazioni base che riesce ad eseguire sono somme, sottrazioni, divisioni, moltiplicazioni e ovviamente operazioni per spostare i dati nella memoria o inviarli a qualche dispositivo,

Quando si programma un computer non si scrivono le operazioni base che lui è in grado di eseguire ma si scrive in un linguaggio (appunto chiamato linguaggio di programmazione) con cui noi scriviamo cosa vogliamo dalla macchina. Nel nostro caso noi programmeremo in linguaggio C. Ecco un esempio:

void main()
{
s = a + b
printf("Risultato = %d\n" , s);
}
 

Con questo diciamo che vogliamo sommare due numeri a e b e vogliamo stampato a video il risultato.

Quindi in ogni caso voi scrivete un programma nel linguaggio di programmazione (comprensibile da noi) e userete un programma per tradurlo in linguaggio macchina (comprensibile dalla macchina) attraverso il compilatore. Il compilatore traduce un file dal linguaggio di programmazione al linguaggio macchina, ossia una serie di operazioni base che eseguite in insieme fanno proprio quello che noi comandiamo. Questo programma in linguaggio macchina a meno di problemi minori, funzionerà su tutti e due i processori Intel o AMD che siano.

Per avere inforamazioni sul vostro processore basta che digitate da shell:

cat /proc/cpuinfo
 

In particolare potete stampare con cat anche altri file all'interno della cartella /proc. Qui risiedono molte informazioni sul vostro hardware. Ad esempio con “cat /proc/interrupts” potete vedere i dispositivi associati ad ogni interrupt. Ci sono informazioni sulle batterie (se si possiede un portatile) e altre informazioni non proprio interessanti per i non addetti.

CHE PROCESSORI MONTANO LA PSONE E LA PS2 ?

Immagino che vi starete già chiedendo se il linguaggio macchina che usa il processore della PSONE o PS2 sia uguale a quello del vostro PC. La risposta è NO.

Per un semplice motivo, i processori di questi due computer, che a voi piace chiamare console, fanno parte di un altra famiglia di processori. O meglio sono costruiti secondo l'architettura MIPS.
Questa famiglia è nata quando Bill Gates e Steves Jobs (i proprietari rispettivamente di Microsoft e Apple) erano ancora alle prime armi. In particolare il primo processore MIPS fu creato nel 1981 in America, alla Stanford University.

Ora i nostri due computer PSONE e PS2 montano rispettivamente il processore R3000 e R5900. Il primo è a 32 bit il secondo a 64 bit. Tanto per la cronaca i processori MIPS sono molto usati soprattutto in dispositivi integrati. Ad esempio potreste scoprire che il vostro router-modem ADSL monta un processore MIPS. Potete trovare tale processore su Cellulari, Lettori DVD, Navigatori Satellitari, Lavatrici, ....etc.

E potreste scoprire che il Sistema Operativo base su cui sono sviluppate le interfacce e i servizi di tali apparecchi è proprio Linux. Ebbene si è lui che vi permette di fare il bucato in modalità diverse o che si occupa di disegnare le immagini di un DVD sullo schermo.

Come capite ognuno di questi dispositivi è un piccolo computer. E ognuno di questi ha bisogno di un sistema operativo per funzionare. Possiamo paragonare la CPU al corpo e il sistema operativo alla mente ... ossia l'insieme delle azioni che rendono un corpo capace di azioni mirate.

Ad esempio se avete un Router ADSL che supporta ssh, e avete installato nel vostro sistema operativo openssh, (altrimenti basta scaricarlo dal gestore di pacchetti oppure dando urpmi openssh) potete accedere al router dal vostro PC. In particolare:

ssh -l root 192.168.1.1
 

Se vi dice qualcosa del tipo “ssh: connect to host 192.168.1.1 port 22: Network is unreachable” avete il router spendo o avete sbagliato l'IP (numero identificativo nella rete) del vostro router. Potreste provare con 192.168.0.1 o con 192.168.1.2 ... etc, basta che sia quallo giusto, nel libretto delle istruzioni in genere è sempre riportato.

Una volta stabilita la connessione vi chiederà la password del vostro router (quella con cui riuscite a configurarlo). Una volta inserita potrete digitare comandi sulla shell ssh come se fossero lanciati direttamente dal router.

A noi ci interessa lanciare un comando solo:

cat /proc/cpuinfo
 

Come quando lo lanciamo sul nostro PC, verrano stampate tutte le informazioni sul processore della macchina, in questo caso il router. A me ad esempio appare:

processor               		: 0
cpu model               		: MIPS 4KEc V4.8
BogoMIPS                		: 149.91
wait instruction        		: no
microsecond timers    		: yes
extra interrupt vector  	: yes
hardware watchpoint  	: yes
VCED exceptions       	: not available
VCEI exceptions         	: not available
 

Che afferma che è un processore MIPS R4000 (4KE)

CHE COSA CI SERVE PER PROGRAMMARE UN MIPS ?

--->1 – Per l'architettura PlayStation, una console PSONE in grado di leggere giochi masterizzati (quindi con Modchip) oppure se non ne avete una potete limitarvi ad usare l'emulatore ePSXe da installare nel vostro PC ... spieghero piu tardi come servirsene.

--->2 - Ci serve un compilatore in grado di tradurre dal linguaggio di programmazione al linguaggio macchina MIPS.

In particolare un cross-compiler, si chiama così perchè crea programmi che non sono nel linguaggio macchina della macchina dove viene eseguita la “traduzione”. Ossia voi dal vostro PC x86 traducete il linguaggio macchina per MIPS, che non è interpretabile dalla vostra.

Visto che il compilatore Linux GCC è totalmente libero e modificabile ossia Open Source (esente da copyright) c'è chi lo modifica per farlo diventare un traduttore per MIPS. Ma esistono delle versioni di GCC anche per molti altri processori.

Noi lo scaricheremo gia bello che pronto da qui:

ftp://ftp.denx.de/pub/eldk/4.1/mips-linux-x86/iso/mips-2007-01-21.iso

..potete scaricarlo con Kget se vi rimane piu comodoo scaricarlo in piu tempi.
Colgo l'occasione per fare i complimenti a Wolfgang Denk ideatore di questo fantastico CD. Se volete piu informazioni sui suoi lavori potete visitare la sua home page:

http://www.denx.de/en/News/WebHome

Per installare il tool potete masterizzate il cd oppure da root potete dare da shell:

mount -t auto -o loop mips-2007-01-21.iso /mnt/cdrom/  
 

La iso deve stare nella cartella corrente (work directory) della shell.
In ogni caso per installare darete da utente normale (date il comando exit se siete root):

mkdir $HOME/Programs
mkdir $HOME/Programs/MIPS
/mnt/cdrom/install -d $HOME/Programs/MIPS
 

Per non creare problemi col compilatore di sistema installaremo il tool nella vostra home.
Se avevete scelto di masterizzare sappiate che ho assunto che il punto di mount del vostro lettore CD sia /mnt/cdrom. Se appare un errore del tipo

bash: install: No such file or directory
 

allora il vostro viene montato da un altra parte. Controllate dove dando il comando cat /etc/fstab

--->3 - Ci servono tutta una serie di piccoli tool per creare file eseguibili dalla PSONE o dall'emulatore.

In particolare dovete scaricare:

psxtool-install.sh

Poi dovete semplicemente creare una cartella e mettere dentro questo script. Dopo di che premete F4 oppure raggiungete la cartella dalla Konsole. Dopo aver dato il comando su inserite la password di root (amministratore), poi data semplicemente:

sh psxtool-install.sh
 

Appena lanciato lo script scaricherà il file psxtool.tar.gz e dopo aver estratto i file e cartelle all'interno verranno installati automaticamente tutti i tool necessari alla programmazione della PSONE, compresi l'emulatore ePSXe e i pacchetti rpm necessari al suo funzionamento. Dopo tale installazione avrete in mano le potenzialità per programmare la vostra console (sia reale che emulata con ePSXe).

Faccio ora un elenco dei tool necessari che verrano installati nel vostro sistema operativo.

mips_4KCle-objcopy:
Incluso nella iso del cross compiler sopracitata che scaricherete. Converte i file eseguibili dal formato ELF a ECOFF che è il vecchio formato standard Linux.

Tutti i programmi eseguibili in Linux, piu o meno su qualsiasi architettura sono in formato ELF (Executable and Link Format), tuttavia la PSONE non usa lo stesso formato ma usa il formato PS-X EXE. Per ovviare a tale problema useremo 2 convertitori.

eco2exe:
Incluso nei tool che installerete, converte i file ECOFF (ottenuti precedentemente con mips_4KCle-objcopy) nel formato per la PSONE.

Beh ora ci siamo no ? Abbiamo cio che traduce nel linguaggio macchina per PSONE, cio che converte nel formato eseguibile da questa, quindi siamo ok no ? ... E invece no. Possiamo dire che quelli della Sony programmano in manira decisamente non standard, o almeno non molto similmente alla programmazione di un PC, ma per la particolarità della macchina, la PSONE, tutti queste conversioni e passaggi aggiuntivi sono necessari.

In particolare dobbiamo usare un utlimo tool per “fixare” i file in formato PS-X EXE ossia per ripararli da un anomalia... se così la vogliammo chiamare. In particolare il lettore CD della PlayStation è un po rudimentale ossia riesce a leggere solo a blocchi di 2048 byte, quindi se un file non ha una grandezza che è un multiplo di questo valore, la PSONE non leggerà mai quel file o almeno interamente.

exefixup:
Anche questo programma è incluso nei tool che installarete e serve per modificare la grandezza dei file in formato PS-X EXE in modo da renderli di una grandezza in byte multipla di 2048. Se non si usa questo tool i programmi non vengono eseguiti.

--->4 – Librerie ed Header e quant'altro per la PSONE. Ci servono delle librerie e i relativi header per poter programmare in Linguaggio C, o quantomeno per compilare tali programmi.

Verrano installati in particolare gli header e le librerie nella cartella:

$HOME/Programs/MIPS/

I particolari li potete vedere aprendo con Kate o Kwrite lo script di installazione “psxtool-install”. In ogni caso i file installati saranno:

liblade.a:
Libreria un po vecchia ma ancora funzionante, permette di gestire stampe a video, rendering, e qualcosa sull'audio, e stata sviluppata da un certo Blade.

Io personalmente ho aggiunto il file console.o in questa libreria, dotandola di una sorta di stampa in modalità console.

libspu.a:
E' una parte della libreria “libps”, di cui ho preso solo la parte “audio”. Useremo questa per far riprodurre suoni alla nostra console.

syscall.o e _start.o:
Questi due file sono alla base della programmazione, infatti il primo contiene la lista delle syscall e bioscall della psone, il secondo si occupa dell'inizializzazione dei programmi. Verranno impastati con il vostro programma per renderlo funzionante.

elf32psx.x:
Non tutti sanno che si puo modificare la formattazione dei file ELF (file eseguibili Linux) semplicemente modificando o riscrivendo un ldscript personalizzato. L' ldscript è usato dal linker, per capire come disporre i dati in un ELF. Il linker è il programma che si occupa di incollare tutti i file .o tradotti nel linguaggio macchina per ottenere un eseguibile. Per il compilatore del nostro PC il linker si chiama semplicemente ld mentre per MIPS il linker sarà mips_4KCle-ld.

Il nostro file elf32psx.x è proprio lo script per tale linker, che disporra i dati in modo da renderli leggibili dalla psx.

vagpack & depack:
Il primo tool converte i file audio .wav in file audio .vag che sono interpretabili dalla PSONE. Il secondo fa la cosa opposta, converte i .vag in .wav.

psx-compiler:
Questo invece è uno script creato da me che si occupa di compilare , convertire , creare l'immagine CD per la vostra console, semplicemente eseguendolo. O meglio basta creare una cartella e al suo interno creare un file .c (sorgente di un programma C) , dopo di che basta premere F4 oppure raggiungere da shell la cartella e digitare psx-compiler.

Questo script esegue in successione i vari tool fino ad ottenere un file eseguibile e riconoscibile dalla psone:

>Inizia col compilare ogni .c che si trova nella cartella, fino ad ottenere un eseguibile MIPS informato ELF.

>Poi converte l'ELF in ECOFF e quest'ultimo in PS-X EXE che è il formato Play Station.

>Aggiusta la grandezza dell'eseguibile con exefixup

>Dopo di che crea un immagine .iso e un immagine raw (che ingenere hanno estenzione .img o .bin ) con estensione .bin e il relativo file per la masterizzazione .cue.

Per chi conosce il linguaggio bash è tutto scritto nel file “psx-compiler”.

CONFIGURIAMO ePSXe
Prima di iniziare dobbiamo configurare l'emulatore. In particolare dobbiamo farlo partire da shell semplicemente digitando:

$HOME/Programs/Epsxe/epsxe
 

Settiamo ...

-Video Plugin impostato su Pete's XGL2 Driver 2.9 oppure se non avete accelerazione 3D P.E.Op.S. SoftX Driver 1.18

-Audio Plugin impostato su P.E.Op.S. OSS Audio Driver 1.9

-Impostate il file del BIOS (si trova nella cartella di ePSXe in Programs)

ATTENZIONE!
>Ricordatevi che tra le opzioni video va attivato il limitatore di FPS altrimenti sia i giochi che le applicazioni vengono riprodotte troppo velocemente.

>Ricordo in oltre che il browser di ePSXe (molto scarno) è diviso in parte sinistra e destra. A sinistra ci sono le Cartelle a destra i File dentro la cartella attuale. Per poter tornare alla cartella superiore si deve cliccare su ../. Per accedere ad una cartella basta cliccarci due volte sopra (nella parte sinistra), per selezionare un file stessa cosa (nella parte destra).

>Altra cosa ... non provate ad aprire immagini .ISO con ePSXe. Al contrario di quanto scrittto nel menu (in particolare “Run ISO”) potete aprire con l'emulatore solo immagini in formato RAW ossia quelle che hanno estenzione .IMG o .BIN ed hanno associato sempre un file .CUE per la masterizzazione (che per ora non vi serve). Per convertire da ISO a RAW potete usare il tool iso2raw installato insieme agli altri tools, lanciando da shell:

iso2raw nobootinfo file.iso
 

Dove “file.iso” è il nome dell'ISO che volete convertire.
Per convertire da RAW a ISO esiste un programma che si chiama ccd2iso ed è scaricabile dal gestore dei pacchetti.

Se avete un Linux a 64 bit verranno installati automaticamente anche anche altri pacchetti a 32bit:

-libdrm2-2.3.0-4mdv2008.0.i586.rpm
-libmesagl1-7.0.1-10mdv2008.0.i586.rpm
-libxxf86vm1-1.0.1-3mdv2008.0.i586.rpm

In oltre verra installato un ambiente 32 bit necessario per eseguire ePSXe. I pacchetti installati sono quelli riportati in questa guida:

http://www.mandrakeitalia.org/modules/wfsection/article.php?page=1&articleid=337

IL PRIMO PROGRAMMA PSONE!

Possiamo ora iniziare a testare il tutto, compilando un semplice programma, che come in ogni linguaggio di programmazione si fa come primo approccio al linguaggio.

Sto parlando del classico “Hello World” ossia la stampa a video di questa scritta. Questa volta non lo vedrete sulla konsole di Linux ma sulla PSONE . Se non ne avete una beh ... la vedrete dall'emulatore.

hello_psone

Create una cartella nella home o dove vogliate, copiate dentro il file hello_psone.c e poi premendo F4 oppure raggiungedo da shell la locazione del file, digitate semplicemente:

psx-compiler
 

Se tutto va a buon fine dovreste poter vedere la finestra dell'emulatore ePSXe (che è stato installato in $HOME/Programs) che si apre e che vi mostra la scritta “Hello World”. Muovendo le frecce della tastiera dovreste poter muovere la scritta.

MASTERIZZARE CD PER PSONE

L'unica modalità con cui si puo masterizzare un CD-ROM per la PSONE è la Modalità 2 chiamata Mode 2 che si differenzia dalla Modalità classica (Mode 1) per lo spazio occupato in ogni blocco. In entrambele modalità i blocchi sono da 2352 byte, ma in Mode 1 lo spazio libero per blocch è di 2048 byte , contro i 2336 in Mode 2, che non usa codici di correzione d'errore e quindi ha piu spazio libero per blocco.

Il restante dello spazio di un blocco è occupato, in entrambe le modalità dai metadati ossia informazioni di formattazione tipo: numero del blocco, spazio usato, settore di appartenenza, etc....
Ecco perchè non si possono occupare tutti i 2352 byte di un blocco.

Quindi quando masterizzate un immagine ISO ricordatevi di impostare tale modalità. Nel nostro caso non è necessario visto che vi basterà cliccare sul file .CUE generati dopo la compilazione ossia dopo aver lanciato psx-compiler. Il file .CUE serve per masterizzare l'immaginre RAW con estenzione .BIN, ed in esso è gia inserita la modalità di masterizzazione di tale immagine.

MA LA PSONE HA UN SISTEMA OPERATIVO ?

Certamente, ma la PSONE non contiene al suo interno un SO evoluto come Linux o Windows.
Basta pensare che Il SO della PSONE occupa in RAM appena 64 KB contro i 32 MB o piu del piu scarno Linux e i 128 MB Minimi di Windows.

Ma prima di spiegarvi come è fatto dovrei farvi capire che cosa è un Sistema Operativo, spesso in italiano abbreviato con SO e in inglese OS (Operating System).

Come capite da soli a primavista il SO è un insieme di programmi fondamentali che rendono un computer usabile per le nostre attività. In realtà la cosa è un po piu complessa, nel senso che un sistema operativo è costruito in maniera gerarchica, ossia si parte dalle applicazioni che dialogano con l'ardware su cui si costruisce e si arriva a costruire un programma come ad esempio OpenOffice, o Amraok e tutti i programmi che si appogiano a queste fondamenta.

Ogni macchina possiede tuttavia nativamente una serie di micro SO che è il BIOS, questo è quello che si occupa di settare la macchina all'avvio, ed è quello che fornisce le funzionalità per dialogare con l'hardware e gestire l'instradamento sul BUS dei dati. In oltre è questo che si interfaccia con il SO che installate poi sulla macchina. Nella maggior parte dei PC vi si accede premendo CANC ripetutamente appena si preme il pulsante di accensione (dopo che appaiono le prime scritte).

Una parte fondamentale del SO, quella che si occupa di dialogare con l'Hardware è il kernel. Questo fornisce una serie di funzonalità base del tipo, stampa a video , invio dati da e per dispositivi , gestione dei file , etc... tutto cio è implementato tenendo conto delle funzionalità del BIOS, quindi della macchina su cui dovrà essere caricato quel kernel

Sopra al kernel si appoggiano tutti i programmi utente, che sfruttano tutti i livelli precedenti per svolgere attività che noi comandiamo. Proviamo a ripercorrere i vari livelli con un esempio... se voi avviate una Canzone da Amarok cosa succede ?

Avviene piu o meno cio:

Amarok userà le funzionalità del SO su cui è eseguito (In questo caso Linux) per domandargli dell'esistenza di un certo file. Quindi proverà a fare OPEN su un file (ad aprirlo ossia renderlo disponibile in lettura)

A questo punto la OPEN che è una SYSCALL (o chiamata di sistema) eseguirà tutti i passaggi per cerare tale file, ma in questo contesto interverranno anche le funzioni del BIOS per la gestione degli Interrupts. Questi interrompono il normale flusso di esecuzione per passare a funzioni che variano dal tipo di interrupt. Ad esempio l'interrupt 9 viene lanciato dalla tastiera quando viene premuto un tasto e la CPU si occupa di trasferire i dati sulla RAM da cui verrano letti dai vari programmi interessati.

Le funzoni del BIOS saranno a loro volta chiamate dalla OPEN. Le richieste saranno del tipo: sul disco x leggi y byte, (dove x e y sono dei valori) e copiali in memoria (per memoria si intende RAM).

A questo punto si risalirà nella gerarchia tornando fino all'applicazione.I dati verranno caricati, la OPEN saprà dove sono stati messi, e a seconda delle informazioni contenute in questi dirà se il file è presente o meno e dove è posizionato nel disco. Amarok avvierà la lettura e la riproduzione del file o emanerà un messaggio d'errore dicendo che il file non esiste.

Per la PSONE a questo punto, la gerarchia è la stessa ?
Piu o meno si. Tuttavia il SO è integrato nella ROM del BIOS, al contrario il SO dei nostri PC è memorizzato su HD. All'avvio viene caricato il BIOS che opera le inizializzazioni preliminari ed carica il kernel attraverso il quale parte l'interfaccia che è quella che vedete accendendo la PSONE senza mettere CDROM.

Ora tutte le applicazioni o programmi, che nel nostro caso sono Videogames usano questo mini SO per funzionare. Quindi per avviare animazioni, suoni, caricamento immagini, disegno scritte, disegno di poligoni (ambiente 3D) etc...

Il SO delle PSONE mette a disposizione molte funzionalità interessanti. Il kernel supporta le syscall standard Linux, che sono open , read , write , lseek , e molte altre. In oltre supporta alcune delle funzioni standard della libreria C ( la libreria glibc) sulle stringhe tipo atoi , strcpm , strcat etc..Quindi programmando in C potete usarle come fate sul vostro PC x86.

La lista completa delle syscall e delle funzioni di sistema della PSONE e molte altre di queste informazioni le potete trovare su questo PDF

BOOT DEI CD DELLA PSONE

Il sistema di boot (avvio) dei CD-ROM funziona in maniera abbastanza semplice. Questo puo avvenire in due modi.
Nel primo caso abbiamo nel CD un file che si chiama PSX.EXE e lo avvia direttamente. Questo e cio che succede per i programmi compilati con il tool fornito in questa guida.

Nel secondo caso nel CD non esiste un file psx.exe ma abbiamo il file SYSTEM.CNF che contiene le informazioni di boot, il contenuto tipico puo essere:

BOOT = cdrom:\PROGRAM.EXE;1
TCB = 4
EVENT = 10
STACK = 801FFF00
 

dove con PROGRAM.EXE è specificato che questo programma partirà al boot.

USARE LE PRIMITIVE DELLA GPU

La GPU della nostra PSONE, o meglio la Graphic Process Unit, è il processore di tutte le istruzioni grafiche. Questo processore supporta dei comandi che possono essere inviati dalla CPU principale attraverso la chiamata della system call GPU_cwb che ha come prototipo qualcosa del tipo:

GPU_cwb(void *to_print , int size);

Come primo parametro accetta strutture del tipo:

struct triangle
{
	unsigned char R,G,B,code;
	short	x0,y0;
	short	x1,y1;
	short	x2,y2;
};
 
per poligono a 3 punti monocromatico (un triangolo) , ed in oltre:

struct rectangle
{
	unsigned char R,G,B,code;
	short	x0,y0;
	short	x1,y1;
	short	x2,y2;
	short	x3,y3;
};
 
per poligono a 4 punti monocromatico (un rettangolo).

Per capire meglio il funzionamento (sempre che conosciate il linguaggio C) potete provare a leggere e compilare questi due sorgenti:

polygons
snake

Come al solito metteteli ognuno in una cartella e da questa lanciate il comando psx-compiler:

Come avrete intuito R, G e B sono le variabile che memorizzano il colore del poligono. x0,y0,x1,y1 etc... sono le coordinate dei 3 o 4 punti (a seconda del poligono) che congiunti danno sullo schermo la forma geometrica da noi desiderata.

Una variabile importante è code che viene settata opportunamente a seconda dell'azione che si vuole compiere. In particolare i valori che puo assumere sono riportati in questa lista

GPU Command

MEMORIA E PATHNAME

La memoria della PSONE è costituita dalla RAM di 2048 KB (ossia 2 MB circa) , dalla ROM dove risiede il BIOS e il SO, e ovviamente dal CD-ROM.

In particolare per quest'ultimo è utile conoscere come raggiungere un file attraverso la syscall open.
I percorsi sono del tipo:

“cdrom:PATHNAME;1
 

in cui PATHNAME indica il percorso attraverso le cartelle, per raggiungere un determinato file. Ad esempio se nel cdrom abbiamo la cartella A con dentro la cartella B che contiene il file PIPPO il nosro pathname per raggiungere PIPPO sarà:

“cdrom:\A\B\PIPPO;1
 

RIPRODURRE SUONI CON L' SPU

L'SPU della PSONE, ovvero la Sound Process Unit, l'apparato che riproduce suoni, supporta la riproduzione con campionamento a 44.100 kHz (tipica dei CD-ROM Audio). I formati riproducibili sono lo standard PCM (Pulse Code Modulation) dei CD-ROM Audio e Il formato VAG che dovrebbe basarsi sul PSF (Portable Sound Format).

http://en.wikipedia.org/wiki/PlayStation_Sound_Format

La PSONE non dispone qundi di software o utility per la decodifica di file in formati piu recenti come MP3 o WMA.

Ora un semplice esempio con cui riprodurre un file .vag ottenuto convertendo un file .wav attraverso il tool vagpack per convertire un file .wav basta raggiungere il file e poi dare da shell:

vagpack nomefile.wav
 

dove “nomefile.wav” indica il file da convertire.

spudemo

Purtroppo la qualità sonora è pessima poiché non sono riuscito ad ottimizzare il programma o forse o sbagliato qualcosa nella conversione o nella riproduzione. Tuttavia è utile come esempio.

ALTRO MATERIALE UTILE

Per comprendere meglio il funzionamento della PSONE e della libreria bladeps.a allego queste demo che erano contenute nel kit di sviluppo PsoneDevStudio per Windows.

Other Demos

In oltre metto i link ai sorgenti delle librerie bladeps e libspu compilabili con make da Linux

bladeps source
libspu source

LINKS

ENGLISH VERSION of THIS GUIDE http://digilander.libero.it/Bemipefe/Psone/psxtool.html
Hardware PSONE http://digilander.libero.it/Bemipefe/Psone/psone_hardware.pdf
Wikipedia Page http://en.wikipedia.org/wiki/Psone#PS_one
PSONE Programming in Windows http://digilander.libero.it/Bemipefe/psone_windev.html
PSONE resource and help http://hitmen.c02.at/
Not Yaroze http://www.geocities.co.jp/Playtown/2004/psx/

_/\/\/\Bemipefe/\/\/\_


In:



Commenti

Ritratto di gdeber
#1

Inviato da gdeber il Gio, 15/01/2009 - 12:06.

Complimenti

Complimenti! davvero un ottima guida...
Mi fa venire la voglia di rispolverare la psx e fargli fare cose assolutamente inutili... :-P

Ciao
Debe

***L'assembler è alla base dell'universo®***



Ritratto di DonGennaro
#2

Inviato da DonGennaro il Sab, 17/01/2009 - 16:29.

Re: Complimenti

Mi sembra una guida buona..però ci sono alcune cose di cui vorrei "lamentarmi"
Se una persona decide di "Programmare una play station" non penso che non sappia cosa sia un linguaggio macchina come funziona ALU la CU i registri il linguaggio macchina ecc ecc o al massimo se non lo sa non gli interessa.
Poi bho.
Per il resto va bene^_^

Ricorda per sempre il cinque novembre.
E la congiura contro lo stato.
Ricorda e sta attento che quel tradimento...
MAI E POI MAI SIA DIMENTICATO.



Ritratto di Bemipefe
#3

Inviato da Bemipefe il Dom, 25/01/2009 - 15:45.

Re: Complimenti

Grazie.
Ho cercato di rendere la guida interessante anche per quelli non del settore.

CIAO!

_/\/\/\Bemipefe/\/\/\_