[zxspectrum] Re: zx-badaloc news

On Tuesday, April 25, 2006 5:29 PM [GMT+1],
Mario <mario.prato@xxxxxxxx> wrote:

dunque,  fra una battuta e l'altra ho piazzato una pausa di circa 60
millisecondi

...che sono senza dubbio piu` che sufficienti a non perdere nessun carattere.


Io non ho messo nessun ritardo sulle singole battute (pensando erroneamente che sulla tastiera originale non c'e' nessun "ritardo" tra polpastrello e superficie del tasto) :-) ma ho dovuto per forza metterlo nella routine che gestisce le macro o cmq i tasti che implicano piu` di una battuta, come ad esempio le frecce, l'EDIT, il caps lock, etc.

Ecco quindi un pezzetto del commento che ho messo nel sorgente (ultimamente sono diventato molto ligio nei commenti):

; TIMER1 is clocked by system clock/4 and through a 1:2 prescaler.
; The system frequency is 85MHz/6 (14.167MHz) and TMR1 is
; reloaded with $5000. The resulting rollover frequency is 39.3Hz.
; This is slow enough for the zx-spectrum keyboard scan routine
; (that runs at 50Hz) to detect any change.

Questa e` la temporizzazione che scandisce l'invio dei keystrokes per le sequenze di tasti. 39.3Hz corrispondono a 25ms contro i tuoi 60 e questo spiega l'intera faccenda. La temporizzazione di cui parlo e` implementata ovviamente sia per la pressione che per il rilascio, ovvero pressione del tasto, 25ms, rilascio del tasto, 25ms, pressione del tasto, etc.

Posso affermare che 25ms vanno benissimo per tutte le sequenze che ho implementato, quindi in effetti corrisponde con la scansione eseguita in interrupt a 50Hz dallo zx-spectrum, TRANNE il caso in cui ci sia una doppia battuta sullo stesso tasto. Curioso, eh? Funziona perfettamente anche per le sequenze di shift, ovvero caps_shift, 25ms, "1", 25ms, rilascio "1", 25 ms, rilascio caps_shift esegue regolarmente la funzione EDIT.

Dato che la flash in cui sono memorizzate le sequenze ha una larghezza di 14 bit, ho potuto sbizzarrirmi ad usare i 6 bit eccedenti (il codice e` 8 bit) per implementare vari flag. Tra questi, qualche bit viene utilizzato come contatore msb per timer1. In pratica diventa un contatore (a scalare) di rollover, quindi ne moltiplica la durata. Per le virgolette ho usato un *4, ovvero 100ms, ma volendo potrei fare delle prove per trovare il minimo valore funzionante.

Corollario: e` possibile che per ogni cosa che aggiungo, mi salti fuori una nuova str... anezza?

Ciao!


Other related posts: