Newsgroup: it.comp.retrocomputing
Titolo: esperto SPECTRUM cercasi

C'e' nessuno di voi esperto dei registri del sistema operativo del mitico
ZX-Spectrum ?
desidearvo sapere se conoscete quale indirizzo di varialbile devo modificare
per avere il fischio iniziale di registrazione
vorrei usarlo come frequenza campione per tarare dei vecchi regisytratori a
nastro.
mi riferisco al comando POKE 23xxx,xxx
grazie


Se vuoi il suono dell'header e una serie lunghissima di byte basta
dare SAVE"pippo" CODE 0,65535 e premere un tasto in pratica salvi
tutta la memoria.....
in alternativa puoi provare PRINT USR 12xx( con xx mi pare fosse da 10
a 20....) ottieni un falso save che pero' inchioda lo Speccy.
Oppure BEEP durata,nota......infine POKE 23609,X (con x compreso tra 0
e 255) produce un suono ad ogni tasto premuto di lunghezza variabile a
seconda dell'x pokato.
Marco

I registri dello ZX sono di una banalità impressionante, si riducono 
solamente a una porta di I/O la 254 (se non ricordo male) che da sola 
gestiva colori bordo, suono, registratore e tastiera, un miracolo del mitico 
Clive!
Prima di tutto qualche piccolo ragguaglio sullo Z80: questa cpu permette di 
indirizzare 65536 byte  (= 16 bit di bus indirizzi X 8 bit di bus dati) di 
memoria e 256 porte di I/O a 8 bit ciascuna con l'aggiunta che per molte 
operazioni di I/O sulle 8 linee alte del bus indirizzo (che in teoria non 
erano utilizzate essendo sufficienti 8 bit per indirizzare 256 porte) 
venivano buttai fuori gli 8 bit dell'accumulatore e questo fatto veniva 
sfruttato per gestire la tastiera (una matrice di 8 X 5 interruttori = 40 
tasti).
Ricapitolando: in lettura 1 bit corrisponde all'ingresso registratore e 5 
bit ai 5 tasti corrispondenti alla linea / alle line di tasti (che come 
detto sono 8 da 5 tasti ciascuna) per le quali l'accumulatore contiene il 
livello logico 1; in scrittura 3 bit per settare il colore dello schermo 1 
bit per l'uscita registratore e 1 bit per il suono, quindi per generare una 
nota tutte le tempistiche vanno gestite a livelli di cicli di cpu (lo ZX non 
aveva neanche un timer programambile, ma semplicemente un interrupt ad ogni 
inizio quadro video, cioè a 50Hz).
Nota che il bit corrispondente al beep oltre che venire inviato 
all'altoparlantino piezoelettrico interno viene mixato da un paio di amp-op 
al bit che corrisponde all'uscita registratore ed entrambi erano presenti 
sulla presa jack out.
Per la mappatura esatta dei bit non deve essere difficile trovarla con 
Google.
A livello di BASIC puoi utilizzare il comando BEEP (durata, frequenza) 
oppure scrivere  tanti 0 e tanti 1 sul bit adeguato della porta 254 con il 
comando OUT gestendo i ritardi con qualche loop per generare la nota 
corretta.
In teoria in era ossibile regolare il volume, qualche cosa si poteva fare 
(c'è chi ha perfino fatto sintetizzatori vocali puramente software) giocando 
sulla parzializzazione dell'ona quadra, ma questo lo facevi facilmente 
solamente ricorrendo all'asm (per carità, niente di difficile, anzi 
abbastanza divertente).
Spero di essere stato sufficientemente chiaro, se no chiedi pure.
Carlo
 

 Clive!
No, no... quelle sono le porte di i/o (e cmq lo z80 può nativamente 
gestirne 65535). I registri di sistema sono locazioni di memoria 
(descritte abbastanza bene anche nel manuale italiano dello spectrum).
-- 
Abstraction is achieved by data hiding and enforced by encapsulation.
News 2002 [v 2.07] / StopDialer / PopDuster - 
http://www.socket2000.com
Akapulce portal: 
http://www.akapulce.net

 (descritte abbastanza bene anche nel manuale italiano dello spectrum).
Hai ragione se si intende "registri del sistema operativo" come nel post 
iniziale, la mia era un considerazione aggiuntiva e riguardava il registro 
interno della ULA (mappato sulla porta 254) che è il sistema diretto per 
gestire il suono (e tutto il resto dell'hardware), che mi pare possa essere 
una risposta alle esigenze di Mario_Ottone.
Riguardo il numero di porte di I/O gestite nativamente dallo Z80 come detto 
sono 256 (solo gli 8 bit bassi del bus indirizzi), poi l'architettura dello
Z80 prevede che per particolari operazioni di IO (non tutte) sugli 8 bit 
alti vengano buttati fuori gli 8 bit del registro B (mi ero sbagliato 
parlando dell'accumulatore, sorry, ma il concetto non cambia), cosa che lo 
ZX Spectrum sfrutta per gestire la matrice della tastiera e di conseguenza 
le istruzione BASIC di INP/OUT prevedono un indirizzamento a 16 bit, ma è 
una forzatura.
Se vuoi puoi vedere Wikipedia: 
http://en.wikipedia.org/wiki/Zilog_Z80
 da cui 
riporto il brano in questione:
Undocumented 16 bit I/O-addressing
The Z80 was officially described as supporting 16 bit (64 KiB) memory 
addressing, and 8 bit (256 ports) I/O-addressing. Looking carefully at the 
hardware reference manual, it can be seen that several I/O instructions, OUT 
(C),A for example, assert the contents of the entire 16 bit BC register to 
the address bus. An orthodox design would maybe decode the entire 16 bit 
address bus on I/O operations in order to take advantage of this feature, 
but it has also been used to minimize hardware requirements, see ZX81.

 alti vengano buttati fuori gli 8 bit del registro B (mi ero sbagliato 
Beh, nel libro "la programmazione dello z80" di Rodney Zaks del 1979 
era già presente... ;-)
-- 
Logic:   The art of being wrong with confidence...
