> Non appena sara' pronta l'interfaccia IDE, direi... :-)
Di quelle ce ne stanno a iosa, si diceva...
> A proposito, lo Z80 dispone di una istruzione per gestire il lock() ?
Questo e' l'infame problema dei semafori. Ho fatto i salti di gioia
quando ho visto che sul QL c'era quella istruzione assembler
"TAS" (test and set). Setta il byte indicato a 0xff, ma lascia i flags
come se avesse verificato detto byte essere zero.
Sullo Z80 non c'e' niente del genere. Uno dovrebbe disabilitare gli
interrupt e fare il test e poi riabilitare. Se il "semaforo" e' un
punto su cui non si accavallano troppo interrupt, allora si potrebbe
fare qualcosa del genere:
ld hl, $7000
inc (hl)
jz lockok
dec (hl)
jp busy
lock: ; ... fai quel che devi fare ...
ld hl, $7000
dec (hl)
all'inizio metto $ff nella locazione $7000 (significa "semaforo verde").
Il primo che arriva, incrementa il valore (che va a zero e setta i
flag). Se arriva qualcun altro nel frattempo (siamo sempre nell'idea
degli interrupt non disabilitati), incrementera' a 01, 02, 03, etc.
Ovviamente quando arriva il 255esimo, il valore ridiventa erroneamente
zero (per questo, dopo un test fallito, e' necessario decrementare).
Quando la routine che ha fatto il "lock" termina, allora invece di
decrementare, si limita a decrementare (non ipotizzo il metterci
nuovamente un $ff perche' qualche altro task potrebbe essere rimasto a
meta' strada tra il primo "inc" e il successivo "dec").