lunedì 17 agosto 2020

Giochi della rivista SUPER COMMODORE n. 6 1985 per Commodore VIC-20


Istruzioni di Color Swap

Siete ormai frustrati dalla perdita di tempo - e dalla complessità - insita nel cambiamento dei calori visualizzati nelle schermate in alta risoluzione? Questo programma permette di cambiare i colori sullo schermo in modo istantaneo, e funziona inoltre in tutti i diversi modi grafici. COLOR SWAP è una utility in linguaggio macchina impiegabile dai vostri programmi in BASIC. Funzionando ad alta velocità , vi permetterà di modificare a piacere i colori visualizzati sullo schermo, senza dover listare o comunque "editare" il vostro programma, e senza dover attendere la ricostruzione dello schermo da parte del vostro computer. È Inoltre utilizzabile con qualsiasi tipo di visualizzazione: testo, multicolore, alta risoluzione, sprite e cosi via... COLOR SWAP si regola automaticamente sulla configurazione di schermo che avete scelto precedentemente. Dopo avere caricato il programma ci sarà una breve attesa, necessaria per inserire in memoria il codice macchina, quindi verrà visualizzato un messaggio contenente i parametri necessari per le chiamate a questa routine. A questo punto digitate NEW e premete RETURN: la routine in linguaggio macchina risiederà comunque nella memoria del computer, fino a che spegnerete la macchina od inserirete altri valori nelle locazioni di memoria occupate dalla routine stessa. COLOR SWAP è molto semplice da usare: esso crea due nuovi pseudo-registri di colore nelle locazioni 700 e 701: pensate la locazione 700 come il registro del vecchio colore e la locazione 701 come il registro del nuovo colore. Se fate due POKE in queste locazioni con due diversi codici colore, e quindi operate la SYS alla routine di COLOR SWAP, ogni colore visualizzato che corrisponde al codice inserito nella locazione 700 verrà modificato nel colore il cui codice è contenuto nella locazione 701. Per rendere più chiaro il concetto, ecco un esempio. Dopo aver caricato e mandato in esecuzione COLOR SWAP date il NEW e caricate qualunque programma in BASIC con il quale volete fare esperimenti. Lavorando in modo diretto potrete ad esemplo digitare:
POKE700,6:POKE701,7:SYS XXXXX (dove XXXXX è l'indirizzo visualizzato da COLOR SWAP)
Premendo RETURN, farete in modo che la routine in linguaggio macchina cerchi tutto ciò che è visualizzato in blu (codice 6) e lo trasformi in giallo (codice 7). Ciò potrà, ad esempio, modificare un intero cielo blu in giallo, o provocare la stessa trasformazione in un piccolo carattere ridefinito. La modifica dei colori avviene in modo istantaneo e, se non vi piace il risultato, invertite i valori delle POKE e rifate la SYS: ritornerete nelle condizioni iniziali. Man mano che prenderete confidenza con l'utilizzo di COLOR SWAP vi accorgerete che ci sono alcune cose importanti da tenere a mente: il programma è stato progettato per modificare qualsiasi visualizzazione di un particolare colore, e ciò in alcuni casi può essere sconcertante. Se modificate un cielo blu, ed il colore del testo è anch'esso blu, entrambi verranno sostituiti nel colore prescelto. Inoltre, può risultare difficile usare COLOR SWAP in modo multicolore nel VIC 20 ed in modo colore di fondo esteso con il C64. Il programma funziona bene, ma questi modi grafici, per la loro complessità di utilizzo, richiedono che il programmatore sappia sempre esattamente cosa sta facendo. Infine, per sicurezza, usate nelle due POKE solo i numeri corrispondenti ai codici di colore disponibili sul computer che state utilizzando. Notate inoltre che difficilmente COLOR SWAP funzionerà correttamente in congiunzione con altre routine in linguaggio macchina, comprese alcune cartridge come la Super Expander ed altre estensioni del BASIC.

Come è fatto il programma
I vari blocchi di codice macchina lavorano come le subroutine in BASIC, e COLOR SWAP è semplicemente un insieme di subroutine in codice macchina combinate nella giusta sequenza. La struttura del programma può essere immaginata come una serie di villaggi collegati da una strada a senso unico: se volete, ad esempio, evitare di passare dal villaggio che cambia il colore del testo, immettetevi sulla strada dopo il villaggio. Con COLOR SWAP, una volta entrati nella strada a senso unico dovete necessariamente percorrerla fino alla fine, dove il controllo verrà ripassato al BASIC. I diagrammi riportati mostrano come è strutturato il programma: le prime sezioni rappresentano modifiche che possono essere effettuate dal BASIC, generalmente con una POKE in una particolare locazione di memoria. Potete evitare di "passare" da queste porzioni iniziali di programma, evitando così di ottenere alcuni cambiamenti di colore non desiderati. Evitare di passare da un certo blocco di programma è molto semplice: basta fare una SYS all'indirizzo del primo "villaggio", lungo la strada, dal quale volete "passare": ciò, naturalmente, dopo aver effettuato le due POKE con i codici di colore desiderati. Questa caratteristica di molteplici punti di ingresso posseduta da COLOR SWAP è ovviamente utilissima, e con un minimo di esperienza e sperimentazione potrete ottenere effetti sorprendenti.

Rilocazione del programma
COLOR SWAP è rilocabile. Se la zona di memoria in cui esso risiede "per default" vi serve per altri scopi, potete tranquillamente trasferirlo in qualunque altra zona di memoria libera. La linea 120 del programma caricatore in BASIC, contiene la variabile RA, che può essere modificata con qualsiasi valore (conguente) desiderato. In ogni caso, se rilocate COLOR SWAP nell'area normalmente occupata dai programmi BASIC, dovete prendete alcuni accorgimenti, per evitare possibili sovrascritture. Dal momento che il VIC 20 possiede una memoria molto limitata, all'utente di questa macchina viene fornita l'opzione di locare COLOR SWAP nel buffer registratore (locazioni 828-1019). I programmi in linguaggio macchina che occupano queste locazioni sono protetti dal BASIC, ma vengono distrutti dalle operazioni con l'unità a cassette. Così, per aiutare i possessori di VIC 20 la versione di COLOR SWAP per questo computer può rilocarsi, sistemandosi automaticamente in cima alla memoria di qualsiasi configurazione disponiate. Per l'utilizzo di questa opzione è sufficiente rispondere alle domande poste dal computer. Gli utilizzatori del VIC 20 che ridefiniscono la variabile RA possono cancellare le linee da 10 a 60 ed inserire il  valore prescelto nell'espressione RA=-RA all'inizio della linea 120. Si ricordi che, con qualsiasi rilocazione, gli indirizzi a cui vengono fatte le SYS devono essere congruentemente modificati. L'espressione tra parentesi nel diagramma mostra come ottenere i nuovi indirizzi (RA è il valore del numero che appare dopo la SYS nel messaggio generato da COLOR SWAP). COLOR SWAP offre inoltre ai possessori di VIC 20 una notevole particolarità: registri colore separati per bordo e fondo. Normalmente, infatti, il colore del fondo e del bordo sono nel VIC 20 combinati in un unico numero, contenuto nel registro in 36879; con COLOR SWAP, invece, il colore del fondo è contenuto nella locazione 785, mentre il colore del bordo è contenuto nella locazione 786. Il contenuto di queste locazioni può inoltre essere letto normalmente da qualsiasi programma tramite un'istruzione PEEK.

Avvertenze per l'utilizzo con VIC 20
COLOR SWAP opera in maniera così semplice, che non può essere esteso in modo da coprire il "reverse" sul VIC 20. Tuttavia, usando il programma "Invertitore per VIC 20" si ottiene l'inversione dei bit da un valore all'altro ogni volta che si esegue una SYS743. Proprio come COLOR SWAP, anche questo programma può essere rilocato, modificando il valore della variabile RA. Crediamo tuttavia che raramente si possa presentare in questo caso la necessità di una rilocazione: il programma è totalmente indipendente da COLOR SWAP, sicuro da sovrascritture da parte del BASIC e non risiede nel buffer del registratore.

Esempi di possibili utilizzi
Dopo un po' di sperimentazione con COLOR SWAP potrete trovare una moltitudine di utilizzi diversi. Benché esso sia stato concepito fondamentalmente per l'utilizzo in modo diretto, in modo da editare" i colori visualizzati, può tranquillamente essere utilizzato in molte altre maniere. Ad esempio, i possessori di C64 dovrebbero sapere che non è possibile visualizzare un carattere "pokandolo" direttamente nella memoria di schermo, a meno che venga effettuata anche la corrispondente POKE nella memoria colore. Con COLOR SWAP, conoscendo i valori contenuti nella memoria colore, è possibile creare un contrasto tra il colore di fondo e quello del testo con una SYS alle routine di COLOR SWAP. Con COLOR SWAP in memoria nel vostro C64, e lo schermo nei colori standard, provate questa linea in modo diretto:
POKE700,6:POKE701,1:
SYS49286:POKE1524,83
Vedrete un cuoricino bianco apparire vicino al centro dello schermo. Fate delle POKE di altri codici carattere nella mappa video, e li vedrete apparire direttamente sullo schermo: conveniente, vero? COLOR SWAP può inoltre essere aggiunto ai programmi come subroutine: come parte di lunghi programmi COLOR SWAP permette di avere finestre di testo che lampeggiano rapidamente in diversi colori, scritte o disegni, che compaiono e spariscono, e permette di modificare istantaneamente il colore di caratteri e sprite. L'unica limitazione è la fantasia e la capacità del programmatore.

Locazioni di COLOR SWAP
VIC 20 - inizio
828 (RA) cambia il colore testo
844 (RA+16) cambia il colore ausiliario
875 (RA+47) cambia il colore di fondo
906 (RA+78) cambia il colore del bordo
942 (RA+114) cambia i colori rimanenti

Per verificare il colore di fondo:
SYS828:PRINTPEEK(785)
Per verificare il colore del bordo:
SYS828:PRINTPEEK(786)

C64 - inizio
49152 (RA) cambia il colore testo
49171 (RA+19) cambia il colore del bordo
49190 (RA+38) cambia il colore del fondo
49196 (RA+44) cambia il colore degli sprite
49254 (RA+102) cambia il colore di fondo esteso
49286 (RA+134)cambia i colori rimanenti

NOTA: Se COLOR SWAP è rilocato, usate le espressioni tra parentesi per calcolare i nuovi Indirizzi, in base al nuovo indirizzo RA. Gli utenti di VIC 20 che rilocano automaticamente attraverso il caricatore BASIC devono ricalcolare in questo modo gli indirizzi.


Giochi:

1) Astropanic
2) Forbidden Crypt (+8k)
3) Un piccolo database
4) Color Swap
5) Invertitore
6) Caverne Spaziali (+8k)

super_1985_6_vic20.rar

Nessun commento:

Posta un commento