PSX Dev ! Nel 2011 !!

Aperto da Avanaboy, Giugno 05, 2011, 01:49:50

Discussione precedente - Discussione successiva

Avanaboy

Salve , sono un collezionista e un appassionato di console ! Vorrei fare dei progetti per PSX , soprattutto sono un patito di INTRO e "cracktro" ... mi consigliate delle buone librerie ( devono funzuionare senza farmi uscire pazzo 1230430 volte ) per lo sviluppo di homebrew per PSX ?
Fate conto che programmo in C , quindi per favore niente asm XD

Facendo riferimento a questo vecchissimo topic : http://www.romhacking.it/forums/index.php?topic=1067.0 , vorrei capire quali sono i punti a sfavore delle Blade Libs ...

Conto nel vostro aiuto ...

PS: quando ho visto che esisteva un forum italiano sul rom hacking , ke trattava anche argomenti di sviluppo per retroconsole , mi sono subito brillati gli occhi ... confido su di voi :'D

Gemini

Il kit di Blade sostanzialmente ha problemi a funzionare sull'hardware vero e proprio (ergo, blocchi di sistema in determinate situazioni), mentre ha effetti quasi casuali di malfunzionamento sui vari emulatori. Inoltre mancano diverse funzioni (principalmente asincronia, se non ricordo male) e alcune librerie funzionano un po' come gli gira, come il modulo per la SPU che a volte non lancia alcun suono in esecuzione.

Se vuoi un SDK gratuito e decisamente più aggiornato e funzionante, buttati sulla roba di tails92/nextvolume: http://gamesource.groups.yahoo.com/group/psxdev/

In alternativa, recupera direttamente l'SDK ufficiale e usalo senza troppe remore di infrangere copyright o altro. È talmente tanto vecchio e deprecato che dubito freghi più veramente qualcosa alla Sony. Senza contare che rimane ancora il miglior strumento per sviluppare applicazioni e giochi PlayStation senza incappare in strani malfunzionamenti dovuti a caratteristiche non documentate della console.

Avanaboy

Grazie 1000 gemini per il tuo prezioso aiuto ...

Allora comincio a dire che :

CitazioneIn alternativa, recupera direttamente l'SDK ufficiale e usalo senza troppe remore di infrangere copyright o altro. È talmente tanto vecchio e deprecato che dubito freghi più veramente qualcosa alla Sony. Senza contare che rimane ancora il miglior strumento per sviluppare applicazioni e giochi PlayStation senza incappare in strani malfunzionamenti dovuti a caratteristiche non documentate della console.

Ho tentato un sacco di volte di usarlo ... ogni volta ke riesco a trovarlo mancano sempre dei files fondamentali , oppure sono danneggiati :(


Piu tardi do un'occhiata al link di tails92 ;)

PS: posso contare sul tuo aiuto se avro' problemi ? sono anni che cerco di produrre qualcosa per PSX ...

Gemini

Chiedi pure. Alla fine siamo rimasti in due precisi (io e nextvolume) a lavorare attivamente sul programmi per PlayStation. Mi può fare solo piacere che la scena del software fatto in casa si espanda, anche se a quanto pare siamo solo noi italiani ad avere questo genere di interesse. ???

Citazione di: Avanaboy il Giugno 05, 2011, 14:57:30Ho tentato un sacco di volte di usarlo ... ogni volta ke riesco a trovarlo mancano sempre dei files fondamentali , oppure sono danneggiati :(
Che file mancherebbero esattamente? Io sviluppo proprio con l'SDK Psy-Q e non ho mai avuto problemi di configurazione, a parte con le versioni più antiche che ormai non sono compatibili con nessun sistema operativo se non Windows 98.

Phoenix

Confermo anch'io che le Psy-Q funzionano senza problemi. Addirittura io le usai per sviluppare il sistema di softsub per FF7. Prova a farti un giro sul vecchio sito di Brisma, lì dovresti trovare qualcosa.
Phoenix
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************

Avanaboy

Io l'ho preso su due siti diversi ... il 4.3 se non sbaglio ... non sono mai riuscito a compilarci nulla , mancavano file , e altri eseguibili erano danneggiati ... io l'ho usato su XP ... potrebbe essere questo il problema ? cmq ora provo a riscaricare il tutto e vedere se riesco a capirci qualcosa ;)

EDIT: gemini che versione di psyq usi tu ?

EDIT2: dopo tanti sforzi sembra che sono riuscito ad ottenere una versione di psyq ( aggiornata da 3.qualcosa a 4.6 ) ... mi chiedevo pero' se è normale che mancano i vari tool per convertire le immagini in .tim e altro ... fatemi sapere ;) (cmq sto usando dosbox per far funzionare il tutto ...)

Phoenix

dosbox non serve, ricordo che bastava inserire nella cartella bin di psyq un programma per la compatibilità dos, credo si chiamasse dos4gw.exe. Forse quello però serviva per il cpe2exe.exe (che non mi sembra sia presente in psy-q, credo sia opera degli hitmen).
Phoenix
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************

Avanaboy

Esatto .... mi sono appena accorto ke cosi non si puo' lavorare ... mi sa che installo una macchina virtuale ( sono a 64 bit , non posso lavorare con dos4gw :( ) ...

Phoenix , tu lo psyq 4.6 lo hai testato su XP ? mi assicuri la compatibilità ?


aspetto tue risposte ;)

Gemini

Il 4.6 lo uso io su XP ed è configurato per lavorare in combo con Visual Studio 2010 tramite progetto Makefile, per cui compatibilità totale su tutti i fronti. Questa è la toolchain che utilizzo:
CC = ccpsx
ASM = asmpsx
LINK = slink
LIBLNK = psylib2

Al posto di CPE2EXE basta usare CPE2X, che mi pare sia l'alternativa aggiornata e funzionante di Hitmen.

Avanaboy

Perfetto  ,  sto facendo una macchina virtuale per usare il tutto ;)

Grazie anche a Phoenix , che mi sta aiutando molto ;)

[edit]Allora , ottime notizie ...

sembra funzioni tutto , ho provato a compilare un paio di sorgenti degli esempi ,e a convertire il file cpe in file exe con CPE2X ... l'emulatore lo legge alla perfezione ;)

Domani iniziero' il lavoro di coodin piu serio ... speriamo bene !!

Vi aggiornero' regolarmente :) GRAZIE per l'aiuto datomi sino ad ora ! :)

Avanaboy

Allora , iniziamo con alcune domande :

Ho visto si negli esempi del kit , sia nelle guide , che per caricare immagini e file audio , questi vengono direttamente spediti nella ram della console via cavo ... oppure vengono inseriti in file .h ( per farlo che programma si usa ? va bene il classio bin2h ? non credo... ) ... Non esiste nessuna API per caricare "al volo" da CD una immagine tim ?  ???

aspetto i vostri chiarimenti ;)




Phoenix

Non ho mai usato funzioni di lettura da CD in Psy-Q. Però da quel che leggo dalla documentazione, sembra basti usare

CdRead(int numSettoriDaLeggere,char* bufferLettura,int mode);

preceduta da un CdlSetLoc che indica da quale settore iniziare a leggere.
Il valore mode è specificato dalla tabella 10-4 della libref46.pdf, che dovrebbe indicare la modalità di accesso al disco (double speed, streaming ecc.).

Aspetto cmq gemini per maggiori delucidazioni.

N.B. CdlSetLoc è un command da inviare tramite la funzione CdControl.

Per quanto riguarda i .h, ci dovrebbero essere funzioni per la gestione dell'header tim e del loro contenuto nella psyq. Quindi, sì, credo basti convertire con bin2h la tim in .h, e tramite puntatori alla struttura nel .h usare le funzioni di gestione delle TIM.
Phoenix
****************
membro di SadNES cITy
I gruppo italiano di traduzione ROM
http://www.sadnescity.it
*****************************

Gemini

Se vuoi una funzione rapida e non particolarmente complessa (tradotto: niente processi asincroni) puoi usare CdSearchFile in combinazione con CdControl e CdRead. Anzitutto inizializza il sistema del CD inserendo CdInit da qualche parte dopo ResetCallback().

Un esempio di come inizializzo io la console:
void InitSys()
{
extern _GsPOSITION POSITION;
extern DRAWENV GsDRAWENV;
extern DISPENV GsDISPENV;

ResetCallback();
InitializeCardAndEvents(0);
//InitThreads();
CdInit();
FS_Init();

ResetGraph(0);
SetGraphDebug(0);

InitControllers();

// sound shit
SsInit();
menu_vab=SsRmsLoad("MENU.RMS");

SetVideoMode(MODE_NTSC);
GsInitGraph(FRAME_X,FRAME_Y,GsOFSGPU|GsNONINTER, 1, 0);
GsDefDispBuff(0,0,FRAME_X,0);

WorldOrderingTable[0].length=OT_LENGTH;
WorldOrderingTable[0].org=zSortTable[0];
WorldOrderingTable[1].length=OT_LENGTH;
WorldOrderingTable[1].org=zSortTable[1];

Init3D();

ClearFBuffer(0,0,1024,768); // clear all the bios textures
VSyncCallback((void (*)()) VSyncCB);
}


Per quanto riguarda il corpo della funzione di caricamento dei file (presa da alcuni sorgenti d'esempio ufficiali):
int _read1(long byte, void *sectbuf, int mode)
{
int nsector,cnt;
nsector=(byte+2047)/2048;

// read start
CdRead(nsector, sectbuf, mode);

while((cnt=CdReadSync(1,NULL))>0) VSync(0);
return cnt;
}

CdlFILE* file_read(char *fname, void *address)
{
int mode = CdlModeSpeed;
int cnt,i;

DEBUGPRINT(("Loading %s at %x\n",fname,address));
for (i = 0; i < 10; i++) // 10 times retry
{
if (CdSearchFile(&fp, fname) == 0)
continue;

// set target position
CdControl(CdlSetloc, (u_char *)&(fp.pos), 0);
cnt = _read1(fp.size,address,mode); // read

// if it success, break
if(cnt==0)
return(&fp); // success
}
DEBUGPRINT(("%s: cannot read\n", fname));
return 0; // fail
}

Richiama file_read, poi passagli come parametri fname per il nome del file da caricare (metti un ";1" a fine stringa altrimenti non caricherà nulla, es: "\DATA\IMG.TIM;1") e address per la destinazione in ram.

PS: Per cortesia, evita di postare nuovi messaggi a breve distanza. Usa il tasto modifica, tanto il topic risulterà in ogni caso visibile come se una nuova risposta fosse stata postata.

Avanaboy

Grazie 1000 per il codice di init , utilissimo !!

Guardando un po questi due sorgenti che mi hai postato , ho visto che non usi _96_init() che a quanto ho capito dovrebbe inizializzare i driver necessari alla lettura del cdrom  :-\
come mai questa scelta ?

PS: spero che non vi scocciate di aiutarmi ad imparare ;) usero' il tasto edit in caso :)

EDIT: cosa è questo "InitializeCardAndEvents(0);" ? nella reference del 4.6 nn l'ho trovato ??? ... e neanche FS_init() e InitControllers... sono funzioni tue vero ? :)

Gemini

Citazione di: Avanaboy il Giugno 07, 2011, 15:14:04Guardando un po questi due sorgenti che mi hai postato , ho visto che non usi _96_init() che a quanto ho capito dovrebbe inizializzare i driver necessari alla lettura del cdrom  :-\
come mai questa scelta ?
Perché _96_init() dovrebbe essere già all'interno di CdInit(), insieme ad altra roba delle librerie del CD.

CitazioneEDIT: cosa è questo "InitializeCardAndEvents(0);" ? nella reference del 4.6 nn l'ho trovato ??? ... e neanche FS_init() e InitControllers... sono funzioni tue vero ? :)
L'SDK è sempre lo stesso, per cui sì, è tutta roba mia.