Newsgroup: it.comp.retrocomputing
Titolo: [C64] [Vic20] Retro-articolo: Programmi in viaggio da Vic-20 a C-64

L'articolo è scaricabile da:
http://www.retrocensimento.bbk.com/varie/vic20to64.zip
--------------------------------------------------------
(Articolo pubblicato su Commodore Computer Club n.33, luglio/agosto 1986)
Programmi in viaggio da Vic 20 a C-64
E' realmente impossibile trasferire un programma Basic dal Vic 20 al
Commodore 64 servendosi del registratore? Purtroppo sì. A meno che...
di Pasquale D'Andreti
--------------------------------------------------------
Molti sono all'oscuro del fatto che gli interpreti Basic dei computer Vic-20
e C-64 sono totalmente compatibili tra loro dato che possiedono istruzioni e
comandi operanti allo stesso modo.
Ciò vuol dire, almeno in teoria, che ogni programma Basic scritto per un
computer dovrebbe girare sull'altro.
Il problema principale sorge quando si deve trasferire "fisicamente" un
programma registrato da un computer all'altro: nel caso si possegga l'unità
drive 1541 non esiste alcuna incompatibilità di lettura tra il Vic-20 ed il
C-64.
L'ostacolo è invece arduo da superare quando si ricorre al registratore:
infatti i due computer usano diversi toni e velocità di lettura e scrittura
e la differenza effettiva, benché lievissima, è comunque avvertita dal
computer e sufficiente a fornire indicazioni errate.
La principale diversità risiede in quello che viene chiamato "Header" (una
traduzione potrebbe essere "intestazione"), consistente in un breve
pacchetto di bytes che indica al computer la lunghezza del programma, la sua
posizione in memoria ed altre amenità del genere.
L'header è preceduto da una nota fissa che dura circa cinque secondi e, a
sua volta, precede la codifica audio dei dati veri e propri del programma.
Pertanto, utilizzando un C-64 per leggere un programma registrato per mezzo
di un Vic-20, otterremo, nel migliore dei casi, un messaggio di errore del
tipo "OUT OF MEMORY ERROR".
Per superare questo inconveniente si può procedere in diversi modi. Il più
semplice ed abbordabile da qualsiasi utente consiste nel registrare
nuovamente il programma da trasferire, in formato sequenziale, in modo da
aggirare l'ostacolo posto dall'header.
Come effettuare il trasferimento
Ammettiamo, per esempio, di dover trasportare un programma dal Vic-20 al
C-64; le operazioni da compiere col Vic sono le seguenti:
- Caricare, con un normale LOAD, il programma Basic in questione.
- Sostituire la cassetta originale con una vergine, riavvolgerla e azzerare
il contagiri sul registratore.
  * Digitare:
  OPEN 1,1,1:CMD 1:LIST
- Premere i tasti Record & Play del registratore e attendere la fine della
scrittura.
- Prendere nota del contagiri e digitare:
  PRINT#1:CLOSE 1
A questo punto il registratore si ferma definitivamente.
Ora non ci resta che collegare il registratore al C-64 e seguire quest'altra
procedura:
- Riavvolgere la cassetta utilizzata prima ed azzerare il contagiri.
- Digitare:
  OPEN 1,1,0
- Premere il tasto Play del registratore ed attendere che il computer trovi
il file (comparirà FOUND in assenza del cursore lampeggiante).
- Attendere una diecina di secondi finché non compare il consueto READY ed
il cursore.
- Cancellare lo schermo e portare il cursore in alto a sinistra (Tasti Shift
e Clr/home);
- Digitare:
PRINT"POKE153,1"CHR$(145):POKE631,145:POKE632,145:POKE633,13:POKE634,19:POKE
635,13:POKE198,5
Come possiamo osservare, questa linea è più lunga di ottanta caratteri e, di
conseguenza, dovremo digitare i comandi di PRINT e POKE in forma abbreviata
(rispettivamente "?" per Print, e per Poke, "P" seguita dalla "O" shiftata).
- A questo punto il registratore dovrebbe cominciare a girare: senza dare
importanza a ciò che succede allo schermo (appare e scompare) e al
registratore (avanza e si ferma) dovremo premere il tasto Run/stop non
appena il contagiri ha indicato il numero di cui avevamo preso nota,
maggiorato di 10. Se indicava, ad esempio, 45, premeremo Run/stop col
contagiri su 55.
Dopo quest'ultima operazione, l'intero programma dovrebbe essere in memoria,
perfettamente listabile e salvabile.
Una prima precauzione da prendere consiste nel registrare repentinamente il
programma così ottenuto su una cassetta (con un normale SAVE), in modo da
assicurarsi una copia d'emergenza nel caso qualcosa non funzioni
nell'eventuale modifica del programma.
Le diversità hardware
Come affermato precedentemente i due computer sono perfettamente compatibili
in ambiente Basic ma, ed è questo che li rende sostanzialmente diversi,
hanno caratteristiche hardware che non hanno alcun punto in comune.
Infatti ciò che deve essere variato in un programma portato dal Vic-20 al
C-64 (o viceversa), sono le istruzioni che modificano o leggono la memoria e
le istruzioni di stampa sullo schermo, ossia POKE, PEEK, PRINT, mentre le
istruzioni SYS, USR dovrebbero essere totalmente eliminate.
Nella tabella pubblicata indichiamo le differenti aree di memoria che hanno
le stesse funzioni nel VIC-20 e nel C-64.
Purtroppo la tabella è solo indicativa in quanto, anche se sono indicati gli
indirizzi relativi ad una funzione, i valori in essi depositati sono
interpretati in modo completamente diverso a seconda del computer
considerato.
Quando si incontrano istruzioni riguardanti gli indirizzi sopra riportati, è
bene controllare attentamente il manuale d'istruzione.
Le istruzioni print sono quelle più facilmente modificabili in quanto,
conoscendo il formato di schermo (22x23 nel Vic-20 e 40x25 nel C-64), se ne
possono prevedere, e quindi modificare, gli effetti.
Un altro problema che si presenta nel trasportare i programma dal C-64 al
Vic-20 è quello della memoria: è totalmente inutile cercare di caricare un
programma lungo 30K sul Vic-20 inespanso (provare per credere...).
In conclusione, possiamo dire che il trasferimento di un programma Basic dal
Vic-20 al C-64 ha molte più probabilità di riuscire bene che non viceversa
in quanto le maggiori possibilità offerte dal C-64 esaltano le prestazioni
grafiche e sonore del programma trasferito ed eventualmente modificato.
TABELLA 1. PRINCIPALI DIFFERENZE ESISTENTI TRA VIC-20 E COMMODORE 64
--------------------------------------------------------------------
Funzione      Vic-20         C-64
col. sfondo   36879 bit 4-7  53281
col. bordo    36879 bit 0-2  53280
mem. schermo  7680-8191      1024-2047
+8K,+16K,+24K 4096-4607      ---------
mem. col.     38400-38911    55296-56295
+8K,+16K,+24K 37888-38399    -----------
suono:voce 1  36874          54272-54273
suono:voce 2  36875          54279-54280
suono:voce 3  36876          54286-54287
suono:voce 4  36877          assente
suono:volume  36878 bit 0-3  54296 (0-3)
chip video    36864-36879    53248-53294
chip suono    36874-36878    54272-54300

 
http://www.retrocensimento.bbk.com/varie/vic20to64.zip
ti ringrazio :-)
Maurizio

 http.... [cut]
Buon lavoro, bravo.
Tra l'altro l'idea di OCRizzare  gli articoli più interessanti di CCC (la
scansione sarebbe improponibile per vari motivi) e magari distribuirli;
sarebbe una cosa molto utile alla comunità, come opera di preservazione.
Anche io posseggo diversi numeri e potrei contribuire, ma mi chiedevo se
qualcuno è a conoscenza degli aspetti legali della vicenda, visto che la
System è viva e vegeta ed ancora detiene i diritti di sfruttamento di CCC.
Chi sa qualcosa in più al riguardo?
Ciao,
Rob

> Chi sa qualcosa in più al riguardo?
Basta chiedere l'autorizzazione :-))))
Non credo che la systems farebbe storie...

 Non credo che la systems farebbe storie...
Si, volevo sapere se qualcuno l'ha già chiesta e mi può far sapere cos'hanno
risposto :-)