[zxspectrum] Re: Filmati DivIDEo su ZXMMC+

  • From: Eugenio Ciceri <eugenio.ciceri@xxxxxxxxx>
  • To: zxspectrum@xxxxxxxxxxxxx
  • Date: Fri, 16 Dec 2011 10:20:36 +0100

> Ora vado a pensarci su in orizzontale... ;-)

Dunque ci ho pensato su, ma l'idea di generare uno stream diverso
appositamente per la ZXMMC+ non mi piace proprio.
Inoltre temo che dovendo comunque aggiungere del codice da eseguire
durante il flyback molto probabilmente non si riuscirebbe lo stesso a
stare nei tempi.

A questo punto mi servirebbero delle informazioni più precise sul
protocollo di lettura dei dati dalla SD card.

Nel codice attuale ho utilizzato il comando MMC_READ_MULTIPLE_BLOCK
perché credevo che fornisse l'accesso a un flusso continuo e
ininterrotto di dati dalla card.
Purtroppo il fatto che invece si debba "spurgare" il flusso al termine
di ogni settore non permette di leggere almeno un intero frame senza
interruzioni.

E il punto è proprio qui.
Il codice utilizzato per lo streaming si interrompe già ad ogni frame
perché deve riallinearsi col primo settore del frame successivo.
I frame sono di lunghezza variabile, ma in media sono lunghi una
quindicina di settori.
Se fosse possibile leggere un frame intero senza interruzioni si
potrebbe forse interrompere la lettura da SD e riavviarla su un nuovo
settore proprio tra un frame e l'altro, dove il codice è già
predisposto per un riallineamento.

Qui potrebbe entrare in gioco il comando MMC_SET_BLOCK_SIZE, ma ieri
sera ho fatto un paio di prove veloci e non sono confortanti...
Se in modalità MMC_READ_MULTIPLE_BLOCK imposto la lunghezza del
settore a un valore diverso da 512 il programma va in crash
immediatamente.
Non ho ancora indagato sul motivo, ma ho provato con valori diversi
(51200, 5120, 513, 256, 1, 0) tutte le volte con lo stesso risultato.
E' possibile che in modalità MULTI il settore debba essere impostato
obbligatoriamente a 512 byte?

In un altro punto del programma, durante la ricerca dei settori di
inizio dei filmati presenti sulla card, ho impostato senza problemi la
lunghezza del settore a 9, ma in quel caso ero in modalità
MMC_READ_SINGLE_BLOCK.
Secondo te posso provare a usare la stessa modalità anche durante la
lettura dello stream impostando però la lunghezza del settore a 512*20
o prevedi già che non potrà funzionare?

Altre idee al momento non me ne vengono...

Other related posts: