[zxspectrum] Re: ManicMiner su ZX81

  • From: Stefano Bodrato <stefano_bodrato@xxxxxxxxxxx>
  • To: "zxspectrum@xxxxxxxxxxxxx" <zxspectrum@xxxxxxxxxxxxx>
  • Date: Wed, 25 Sep 2013 10:59:42 +0200

 Subject: [zxspectrum] Re: ManicMiner su ZX81
 
Enrico Maria Giordano ha scritto:
> Buono a sapersi. A suo tempo (1982) feci qualche giochino in LM per lo 
> ZX81 (ormai perduto senza speranza :-( ) ma non mi resi conto di questa 
> velocità. Va beh, ero un novellino. :-)
> 
 
Dunque, anche se ha lo stesso clock dello Spectrum lo zx81 resta lento anche in 
L/M se lavori in modalità SLOW, cerco di chiarire.. 

 

Lo ZX81 è uno ZX80 potenziato: la nuova ROM contiene le funzioni principali 
dell'interprete BASIC sopravvissute anche nello Spectrum (Floating Point, 
stringhe, logica dell'editor, ecc..) e il driver per la modalità video "SLOW".

La stessa ROM funziona perfettamente anche sullo ZX80, senza lo SLOW: il codice 
associato alla NMI annusa l'hardware per capire se lo SLOW è supportato:

 

;   Now test if this really is a ZX81 or a ZX80 running the upgraded ROM.
;   The standard ZX80 did not have an NMI generator.

        LD      A,$7F           ; Load accumulator with %011111111
        EX      AF,AF'          ; save in AF'

        LD      B,$11           ; A counter within which an NMI should occur
                                ; if this is a ZX81.
        OUT     ($FE),A         ; start the NMI generator.


In ogni caso (anche nello ZX80) il quadro video è gestito da una combinazione 
di hardwre e software: alla fine viene settato un bit rapidamente a 1 o 0 e 
sparato direttamente al modulatore per uscire sullo schermo in bianco e nero 
(qui non entrano in gioco i problemi della differenza tra PAL, SECAM o NTSC 
perchè non abbiamo il colore).    A causa di un bug molti ZX81 hanno una ULA 
così primitiva da poter essere utilizzati solo su pochi televisori, di solito 
in B/N; anche la differente frame rate dei televisori americani viene gestita 
in software controllando la presenza di un diodo nella motherboard:

 

;   This is a good time to test if this is an American or British machine.
;   The US machine has an extra diode that causes bit 6 of a byte read from
;   a port to be reset.

        RLA                     ; (4) compensate for the shift test.
        RLA                     ; (4) rotate bit 7 out.
        RLA                     ; (4) test bit 6.


 

Nello ZX80 il video era visibile soltanto durante l'attesa della pressione di 
un tasto, perchè il loop di lettura della tastiera era remporizzato 
perfettamente e comprendeva anche l'output a video (ragione storica del fatto 
che anche sullo Spectrum premendo un tasto si esce da PAUSE).   Nello ZX81 
questa tecnica sopravvive solo se siamo in modalità FAST.

La modalità SLOW collega la NMI ai timer che segnalano l'inizio dello riga del 
beam sul video e attiva una serie di routine alternative cambiando il valore di 
IX (usato con una JP).   A questo punto la tastiera viene scansionata in modo 
differente e la ROM rimane per l'80% del tempo ad aspettare le interrupt per 
agganciare il corretto puntamento al set di caratteri.   Il programma BASIC (o 
L/M) gira soltanto nel momento in cui non ci sono immagini da visualizzare, 
ovvero durante la visualizzazione delle parti alta e bassa dello schermo e 
durante il riposizionamento in alto a sinistra del beam sullo schermo (chi sa 
come funziona TELEVIDEO probabilmente sta sorridendo).  Non mi dilungo perchè è 
molto complicato entrare nei dettagli, vi basti sapere che l'alta risoluzione 
non può essere ottenuta con sole modifiche hardware e che con il software è 
possibile fare tantissime cose, anche cambiare la risoluzione video a scapito o 
a vantaggio della CPU.

 

Per ragioni architetturali il puntamento al set di caratteri può avvenire solo 
nella ROM che oltre al font contiene il codice del BASIC che graficamente non 
serve a molto..   però cambiando il ciclo di visualizzazione software possiamo 
prepararci una finta pagina di testo 8 volte più grande e istruire lo ZX81 per 
visualizzare una sola riga di pixel per ogni carattere.  Se scegliamo bene il 
puntatore possiamo trovare nella ROM una combinazione di "sporcizia" tra cui 
pescare i pattern di bit che useremo per disegnare "Miner Willy".

 

La modalità ottenuta dovrebbe rallentare lo ZX81 più o meno quanto lo SLOW, ma 
forse hanno recuperato un pò di velocità riscrivendo il codice di scansione 
della tastiera, rallentando leggermente il frame rate o riducendo il numero di 
linee visibili sullo schermo.

ManicMiner non è un gioco che richiede tanta potenza elaborativa, lo Spectrum 
mangia la maggioranza del tempo in musica, cicli di ritardo e codice 
inefficiente (con il vecchio emulatore di Gerton Lunter si può ottenere un 
ManicMiner ragionevolmente veloce anche sui 286 disattivando l'emulazione 
accurata di LDIR).

 

L'emulatore dello ZX81 per lo ZX128 è un'altra follia, ma qui andiamo fuori 
tema: fidatevi, gira perfettamente sullo ZX81, probabilmente più velocemente 
che sullo Spectrum 128 !

 

 

 

 

 
                                          

Other related posts: