
|
[zxspectrum]
||
[Date Prev]
[08-2004 Date Index]
[Date Next]
||
[Thread Prev]
[08-2004 Thread Index]
[Thread Next]
[zxspectrum] Re: emulazione Spectrum
- From: Alfonso Martone <a.martone@xxxxxxxxxxx>
- To: zxspectrum@xxxxxxxxxxxxx
- Date: Thu, 5 Aug 2004 16:50:37 +0200
Il P900, il cellulare sul quale vorrei far funzionare l'emulatore
Spectrum non e' proprio un giocattolino: processore ARM9 a 32 bit
clockato a 156MHz, display 320x208 a 65536 colori, touchscreen,
possibilita' di scrivere programmi per usare il processore in modo
nativo (dunque C, C++, perfino assembler ARM/Thumb per chi lo conosce).
Il guaio di questo P900 e' quel maledetto sistema operativo Symbian.
In primo luogo, l'input/output lo puoi fare solo seguendo le convenzioni
Symbian (tutta una caciara di active-objects, richieste asincrone,
eventi, priorita', etc). Pensa che un banale "Hello World" costa
qualche decina di righe tra sorgente C++, file i risorse, file di
progetto etc. Il sorgente helloworld.cpp contiene non meno di quattro
classi. Un programa che ti scriva a video l'ultimo tasto che hai
premuto, mentre in C/C++ su DOS/Linux si scrive in una sola riga, qui
richiede parecchie decine di righe di codice. Inutile aggiungere che le
cose tipiche del DOS (sincronizzazioni precise, interrupts gestiti da
te, etc) te le puoi ampiamente scordare...
Il problema dell'output a video si risolve usando una funzione Symbian
(ovviamente non documentata) che restituisce un puntatore alla memoria
video; finche' altri task Symbian non scrivono a video (ossia finche'
non si scarica la batteria o arriva un messaggio o telefonata) si puo'
andare avanti allegramente (e a velocita' supersonica: per colorare un
pixel basta scrivere una word da qualche parte).
Il problema dell'I/O credo di risolverlo con un trucchetto: col thread
principale dedicato ad obbedire alle paranoiche convenzioni Symbian, ed
un secondo thread su cui gira l'emulatore, piu' un blocco di memoria
condivisa per far pescare a quest'ultimo la pressione dei tasti e del
touchscreen.
I guai non sono finiti: le applicazioni Symbian non possono avere
variabili globali (solo dati read-only, ossia "const static"), quindi
anche qui bisogna fare un po' di acrobazie propagando puntatori e cose
simili, tenendo conto di un'altra aberrante limitazione, ossia le
classi istanziate non devono contenere piu' di qualche migliaio di byte
di dati altrimenti "out of memory" (per fortuna con la malloc() si
possono allocare blocchi di centinaia di kbytes... in teoria dovrebbero
esserci almeno 5500-6000 kbyte liberi alla partenza; sul nuovo modello,
il P910, hanno messo piu' RAM e quindi la memoria libera sale a circa
20-21Mb).
Insomma, nonostante tutti questi guai l'emulatore si puo' "portare", a
velocita' ragionevole (perche' in C++ si va a velocita' ragionevole...
col Java, invece, si va piu' lenti perche' si da' comunque un file
binario in pasto ad una specie di interprete; poi non puo' scrivere
direttamente sulla memoria video, etc). Col VisualBasic e' anche peggio
(e l'AppForge, l'engine che fa "il visualbasic per i cellulari", e'
comunque scritto in C++...).
Questo e' proprio il genere di considerazioni da cui cominciare ogni
volta che si vuole "portare" un emulatore Spectrum.
> Domandina: saresti in grado di modificare FBZX o un'altro emulatore
> (preferirei poter usare windows) per simulare le logiche di banking
> della memoria del Chrome ? E' in pratica un'estensione delle logiche
> di paging dei +2/+3, compresa la possibilità di spostare la VRAM in
> fondo. Mi servirebbe per fare un paio di esperimenti.
Dato che ci sono poche differenze tra il +3 ed il Chrome, questo
dovrebbe essere semplicissimo per quasi qualsiasi emulatore, non solo
per fbzx. Io mi sto concentrando su fbzx per comodita' (non e' enorme,
non e' stravecchio, ha solo le feature piu' essenziali, non mi sembra
troppo difficile strappargli via la libreria SDL per metterci la mia
libreria video, etc).
|

|