main index

Sorry, this page is in Italian language only, because it takes up some messages that I wrote in local forums...
Queste note sono troppo importanti per lasciarle perdere nel caos della rete, per cui le raccolgo in questa pagina... Il resto delle note in italiano è in quest'altra pagina.

FIRST OF ALL, did you read all of my P900 notes?
(hai già almeno sfogliato l'indice delle pagine relative al P900?)

Ehm... e questa gloriosa pagina l'avevi vista? :-)


Piccola parentesi: la pagina sul libro di Brambilla portato sul P900 l'avevi vista?


Emulare l'Amiga sul P900 sarebbe "facile"...?

Il tuo discorso mi suona un po' teorico perché i chip Amiga in questione sono indipendenti (come lo Z80 e la ULA dello Spectrum: non è che metti un byte a $4000 ed immediatamente si accendono sul video gli 8 pixel in questione; questo succederà solo quando la ULA ci "passerà sopra"... se li accendi subito allora è un'emulazione assai deboluccia).

L'Amiga, per quanto arretrato, ha un discreto cumulo di cosucce simpatiche, per cui l'impresa non è di quei casi in cui cui bastano "tre o quattro volte" la velocità del processore (a parte il fatto che emulare in C le istruzioni di un processore costa molte più risorse di quanto possiamo ottimisticamente immaginare).

La memoria non mi sembra un grave problema: non ricordo di aver mai visto da queste parti degli Amiga con più di 4 o 5 Mb RAM. Quindi sul P900 è certamente possibile (diamine, ci girano Doom e VRally senza protestare! la vera rogna è solo quel maledetto Symbian, più chiuso e caotico di Winzozz).

Dovrete (dovranno?) scendere a compromessi su altre caratteristiche, non sulla memoria. Non ci credo molto a vedere qualche Turrican girare sul P900 "proprio come sull'Amiga"... :-) Si fa prima a riscriverlo per P900.

Nello scorso messaggio peraltro intendevo dire che paradossalmente il P900 è più performante rispetto al P910 perché per quest'ultimo occorre scrivere tre (cioè quattro: non mi risulta che esista una istruzione di write a 24 bit sull'ARM9) byte per pixel, anziché due (per il P800 sarebbe la stessa cosa, e per certi versi anche più facilmente ottimizzabile, perché anziché 5-6-5 è 4-4-4, cioè lavori con dei nibble). Così, quando vai a rigenerare un frame video, devi scrivere 266240 bytes anziché 133120.

Ho il più sincero terrore che sul P910 la memoria video sia mappata in modo barbaro (ci sarebbe da fare salti di gioia se la mappa video fosse la stessa del P900 con i "due bit" extra di ogni pixel allocati altrove: così useresti la memoria video esattamente col P900, saresti compatibile al 100% col P900, aggiungeresti i due bit in questione - per i 262k colori - solo se ci tieni davvero)... Eppure fin dal P800 avrebbero potuto organizzarla 32 bits per pixel, e poi sfruttare solo quelli che l'LCD "permette" (4-4-4, 5-6-5, 6-6-6, e quando arriverà il successore del P990 anche 8-8-8). Lo scrivo fra virgolette perché 256mila colori (18 bit per pixel) sono una bidonata rispetto a chi ha già visto 65mila colori (hanno aggiunto un bit a Red e Blue e niente di più; con un display supercompresso a 132dpi, dopo i 65k colori l'unica cosa che conta è la luminosità e il contrasto, non altri due bit - che in fin dei conti, a parte il puro nome commerciale per arricchire il depliant, non sono proprio nulla).

Tornando a bomba, io stesso ho dovuto "srotolare" a mano i loop più critici (il gcc con "-O6" pasticciava troppo) ed usare una lookup-table per i colori dei pixel, e devo ringraziare chissà quale santo in Paradiso per il fatto che il gcc può ottimizzare le write da 16 bit e l'aggiornamento del puntatore in sole due istruzioni assembler ARM9, per cui otto pixel in verticale, ridotti a otto linee del tipo:
    *ptr=colore; ptr-=208;
diventano nientepopodimeno che otto supervelocissime sequenze assembler:
    strh lr, [r1, #0]
    sub r1, r1, #416
(se conoscessi questo assembler e se il Symbian fosse meno taccagno farei delle cose mostruose... è seccante dover avere un active object solo per aspettare eventi da touchscreen e tasti).

Anche l'LCD del P900 (e suppongo dunque del P910) ha una sua "velocità di refresh" (che stimerei tra i 50 e i 60Hz) e forse anche un refresh non proprio "lineare" come lo sogneremmo noi, per cui quando si lavora veloce si possono ottenere effetti curiosi - per esempio, una volta mi è capitato di vedere l'angolo in basso a sinistra del display (un triangolo di 80×80 pixel) che quasi "sfarfallava"; allo stesso modo, correndo a 25Hz, la parte più bassa dello schermo viene talvolta "refreshata" dall'LCD al frame successivo (per cui delle linee verticali che attraversano velocemente tutto lo schermo sembreranno cambiare colore nelle ultime scanline... per risolvere questo occorrerebbe aspettare l'inizio del refresh del display, ma non so come fare).


Emulare lo Spectrum sul P900...

L'emulatore Spectrum per il P900 è più o meno agli sgoccioli. Devo ancora implementare la parte audio (il Symbian è un sistema infame, quasi peggio di Winzozz) e poche altre cose.

Il telefonino Sony Ericsson P900 ha un processore ARM9 a 156 MHz; a naso direi che come potenza di calcolo non andrà oltre i primissimi "Pentium 150". Ha a bordo un sistema operativo (Symbian, con interfaccia utente UIQ) che è un succhiarisorse almeno quanto Winzozz XP; non ci si può fare né debugging in loco e neppure il profiling (in teoria si potrebbe fare, ma sarebbe una faticaccia immane) e addirittura, provare una nuova build costa non meno di un minuto fra compilazione su PC e installazione sul cellulare...

L'emulatore Spectrum 48k ci gira a velocità reale (in teoria sarebbe capace di andare al 110-120% della velocità dello Spectrum, ma ho aggiunto pause di sincronizzazione in modo che tutto fili liscio).

La prima versione l'avevo costruita attorno all'emulatore FBZX di cui parlavo sulla mailing-list, ma con tutte le possibili ottimizzazioni non riuscivo a tirar fuori più del 40-43% di velocità di emulazione (avrebbe a stento emulato uno Spectrum 128 clockato a 1.5 MHz). Dopo diversi ferocissimi tentativi, mi son rassegnato a cancellare tutto il superfluo: ho tagliato via l'emulazione degli Spectrum 128k/+2/etc e delle loro periferiche, e alla fine perfino l'Interface 1 e il microdrive... fiuuu!!!

Ora, col display a 25 frame al secondo (ridisegno cioè l'intero video ogni due frame) e con ottimizzazioni infuocate (ho dovuto srotolare alcuni loop "a mano" per evitare di fargli ricalcolare i puntatori, proprio come ai vecchi tempi!), riesco finalmente ad andare abbastanza tranquillo al 100% di velocità di emulazione.

È stato appassionante lavorarci quest'estate (sia pure "a puntate") perché su questa piattaforma P900 c'è proprio l'aria dei bei vecchi tempi, dei tempi dei pionieri, quando l'hardware era quello che era e la macchina non era velocizzabile/espandibile a suon di soldini...

Ero certo di poterci arrivare perché un mio programmino di benchmark che usava la sola funzione "setpixel" riusciva in circa sette secondi a riempire lo schermo per mille volte (oltre 140 frame al secondo).

Ovviamente il guaio erano il ritracciamento del frame video (occorreva emulare almeno 25 volte al secondo l'intera sequenza border, paper/ink/bright, flash) durante l'emulazione dello Z80 (la quale pure non è velocissima, anche se usa delle chilometriche "switch") tenendo aggiornato l'hardware (porta 254, tastiera, joystick kempston) e nel frattempo aspettando pressioni sui tasti e sul touchscreen.

La tragedia è che è già uscito il P910i, il modello successivo del P900, che ha 18 bit per pixel (anziché 16) per cui per colorare un pixel a video occorre scrivere 3 o 4 bytes e quindi nel migliore dei casi il refresh video andrà a velocità dimezzata (a 12.5 fps è uno schifo anche per scrivere solo un listatino in Basic).

Comunque, sono diverse settimane che ho uno Spectrum in tasca (dotato anche di telefono GPRS e altri ammennicoli) ed è un piacere quasi insano giocare a Jet Set Willy o Atic Atac col touchscreen mentre gli altri ti guardano attoniti "dove hai preso questo giochino?" - e io: "questo giochino è stato scritto 21 anni fa su un altro computer di cui ora tu non sai ancora nulla"... :-)

La pagina (temporanea) con qualche foto (e senza download perché ancora non l'ho "pacchettato" decentemente) è questa: P900 Zx Spectrum emulator

Naturalmente non intendo passare subito in giro il link di detta pagina (certo prima o poi Google ci arriverà da solo) per evitare di scatenare anzitempo un terremoto di email in stile "quando sarà pronto?" :-)


Qualche nota per i miscredenti (ce ne sono ancora, in giro):


Google
 
Web www.alfonsomartone.itb.it

P900 e fresella con olive, tonno, pomodoro, mozzarella, origano, e naturalmente una birretta

Sony Ericsson P900 index - send e-mail - home page