Tratto da Noi C64 & 128 - 1987, Settembre
DOPO L'ERA DEI CORSARI E DEI BUCANIERI PADRONI INCONTRASTATI DEGLI IMMENSI OCEANI, A DISTANZA DI SECOLI, ALLE SOGLIE DELL'ANNO 2000, SI TORNA A PARLARE DI PIRATI. NON FANNO PIÙ RAZZIA DI TESORI O DI BOTTINI DI GUERRA. MA DI PROGRAMMI.
COME ALLORA LE CORONE DOMINATRICI, OGGI I REGNANTI DEL SOFTWARE HANNO DICHIARATO GUERRA Al FUORILEGGE. UNA DURA LOTTA È IN CORSO, ANCHE SE POI, ALLA FINE, NON CI SARANNO FORSE NÉ VINTI NÉ VINCITORI.
Nel mondo, le società di produzione e commercializzazione di software lamentano perdite di profitti dovute alle copie illegali dei loro programmi per svariati milioni di dollari. Nonostante la presenza di leggi severissime a tutela del copyright, paesi come gli Stati Uniti, l'Inghilterra e la Germania non sono stati in grado di fronteggiare il fenomeno delle copie clandestine. In Italia, poi, dove queste leggi sono di là da venire, il problema è molto più accentuato. Qui, infatti, ha un grande sviluppo la vendita delle copie praticata da ditte commerciali o pseudoeditoriali, senza che l'illecito abbia conseguenze gravi civili o penali; nei paesi citati, invece, le stesse subirebbero pesanti sentenze di condanna.
Così oggi, come negli anni appena trascorsi, è normale da noi andare in edicola e acquistare software pirata allettati dalla convenienza del prezzo di acquisto. A sole 7.000 lire da 5 a 8 giochi nuovissimi appena giunti dai corrispondenti stranieri. Costo iniziale praticamente 0. Una piccola mascheratina nel titolo magari italianizzato, qualche parola qua e là, tradotta con un monitor e voila. il programma, anzi i programmi sono pronti da servire all'insegna della rapidità, economicità e convenienza. Una vicenda analoga, se replicata in Germania o in Inghilterra, porterebbe all'arresto dei responsabili e a sanzioni pecuniarie tali da togliere del tutto la convenienza di operazioni del genere.
Ci vorrà qualche tempo ancora, ma anche in Italia una legge in grado di contrastare questi fenomeni prima o poi sarà, varata; e allora...
Allora, giustamente, non si può proibire ad un privato che abbia acquistato legalmente un programma di farne una copia di sicurezza per uso personale; anzi, vista la vulnerabilità dei supporti, dischi e cassette, sono spesso le ditte stesse di produzione del programma a consigliarne la duplicazione.
Da circostanze del genere decolla quella che potremmo definire la libera iniziativa, come si sa, molto sviluppata in Italia. I ragionamenti di partenza sono pressapoco questi.
- Il programma X è molto interessante, anzi mi serve; ma serve anche a Carlo, Roberto e Maria. Dividiamo allora il prezzo di acquisto per 4 e facciamo quattro copie di sicurezza, una per ciascuno dei partecipanti al consorzio. C'è anche il vantaggio di disporre dell'originale con i relativi manuali di istruzioni da fotocopiare: è una soluzione ideale.
Un pò come quello delle figurine tra i banchi di scuola, ma nel nostro caso non ci sono limiti di età. Professionisti, politici, dirigenti vi prendono parte insieme ai ragazzi in una specie di rito animato da spirito di collezione, io do una cosa a te, tu dai una cosa a me: le cose, ovviamente, sono programmi.
- A me manca questo! -Tu ce l'hai quello?
- Affare fatto!
Tutti felici e contenti.
Magari non ci sono le istruzioni, non si sa e non si potrà utilizzarlo, ma non importa: un titolo in più nella lista, un avanzamento nella graduatoria del chi ce ne ha di più.
I nuovi pirati sono milioni. A chi o a che cosa attribuire la causa di tale fenomeno?
Al momento la risposta più saggia sembra essere: TUTTI e TUTTO. Le case di software hanno iniziato le vendite dei loro prodotti partendo da prezzi vertiginosi, sbagliando inconsciamente o forse no, le previsioni sull'evoluzione del mercato. Da che mondo è mondo si sa che più prezioso è un oggetto più grande è il rischio che possa essere rubato. Dunque non si potevano aspettare altro.
Inoltre la grande diffusione degli home computer ha trasferito verso grandi strati della popolazione la conoscenza dei segreti informatici, prima riservati a pochi privilegiati. I nuovi pirati sono figli di questa silenziosa rivoluzione popolare che ha dimostrato ai potenti la fine di un monopolio tecnologico avanzato. In questo spirito, ad ogni tentativo dei produttori di impedire le copie con nuove protezioni, subito corrisponde una ricerca dei pirati di metodi e tecniche per aggirarle o farle saltare. E la gara continua, sempre più accanita e serrata, senza possibilità di interruzione.
La mancanza di cultura informatica (e come poteva esserci?) ha giocato anch'essa un ruolo fondamentale. Il pubblico ha reagito un pò come i selvaggi davanti agli oggetti di una civiltà sconosciuta. Si caricano il collo di sveglie soltanto perchè sono belle e fanno tic-tac. Non appena, però saranno capaci di leggere il tempo sul quadrante, una basterà, insieme magari ad un altro orologio, ma da polso.
Il tempo è galantuomo. Il prezzo dei programmi originali è in continua diminuzione, le leggi contro le organizzazioni pirata a scopo di lucro saranno promulgate, la cultura informatica cresce nel paese. Un punto di equilibrio civile sarà così raggiunto. Gli unici a dolersene saranno forse i produttori di computer: loro sanno quanta parte hanno avuto i nuovi pirati del ventesimo secolo nel boom delle loro vendite.
Duplicator 128 è un programma per copiare file PRG e SEQ per 128 con drive 1571 i 1581.
La novità del copiatore consiste nella sua capacità di operare su entrambe le facce del disco.
Una volta lanciato il programma, avrete una scelta di 4 tasti, da F1 a F7. Con F1 entrate nell'opzione di copia: viene letta e visualizzata la directory del disco nel drive, ed in basso trovate i tasti da usare per scegliere, annullare, iniziare la copia o tornare al menù.
Con F3 leggete la directory: potete fermarne lo scorrimento tramite NO SCROLL.
Usate F5 per inviare dei comandi al disco: la stringa è limitata a 16 caratteri.
Quando non avete più bisogno del programma, premete F7 e riotterrete il controllo. Una volta fuori, date di nuovo RUN per rientrare. Quando caricate DUPLICATOR 128 per la prima volta, non togliete subito il suo disco dal drive, perchè deve caricare delle routine in linguaggio macchina.
E' un copiatore totale per 128 con 1571 in grado di riprodurre entrambe le facce del disco con tutti i file presenti sull'originale.
Essendo interamente in linguaggio macchina, può essere lanciato con BOOT "BACKUP 128". In alto apparirà una scritta indicante il tipo di drive in uso. Poi vi sarà chiesto se rilevare gli errori: nel caso premiate R ogni errore riscontrato in lettura e scrittura vi sarà segnalato.
A questo punto inserite il disco originale: il programma deve leggere il flag singola/doppia faccia; nel caso sia un disco a doppia faccia, potrete scegliere se copiare 1 o 2 facce. Ora inizia la copia: lo schermo scomparirà e la luce del drive lampeggerà velocemente per ogni settore trasferito.
Una volta riapparso lo schermo, vi si chiederà di inserire il disco copia: la prima volta potrete scegliere se formattarlo; ricordate che la formattazione rispecchia quella del disco originale: se questo era a singola faccia, anche la copia sarà formattata a singola faccia.
Inserite il disco copia, premete un tasto ed aspettate.
In tutto si faranno due passate per faccia.
In soli due minuti consente di copiare completamente una intera faccia del disco con un C64 o un C128 in modo 64 e un drive 1541.
Appartiene alla famiglia dei copiatori "traccia-traccia", in grado di riprodurre quasi qualsiasi tipo di file, compresi alcuni errori di protezione. L'unico svantaggio del metodo "traccia-traccia" consiste nel fatto che richiede il medesimo tempo sia per un disco pieno di dati che per uno, al contrario, quasi vuoto. Usare FASTCOPY è molto semplice, anche perché il programma guida passo passo l'utilizzatore.
Non tutti hanno a disposizione un disk drive e devono limitarsi al registratore, oppure passano dal registratore al drive e vogliono trasferire i programmi dalla cassetta al disco. I problemi, sia da nastro a nastro che da nastro a disco, consistono nelle eventuali protezioni dei programmi. Infatti, se il programma su cassetta risiede nell'area BASIC o nella zona da 49152 a 53247, è possibile caricarlo e salvarlo senza tante complicazioni: al massimo, se si trovasse da 49152 a 53247, basterebbe usare un monitor di linguaggio macchina, capace di salvare le zone al di fuori dell'area BASIC. Quando però c'è una protezione come l'auto-start, magari associata al turbo, allora la faccenda si complica.
Ogni turbo ha una temporizzazione tutta sua, non standard, e non si può avere un caricatore universale: la soluzione sta nel capire dove si lochi il turbo e come faccia partire il programma alla fine del caricamento. Su nastro, nel caso di protezione turbo, abbiamo perciò almeno due file: il primo è il caricatore turbo, ed il secondo (o i successivi) è il programma in formato turbo. Dobbiamo per prima cosa sapere gli indirizzi dove si loca il caricatore turbo: questo è possibile aprendo il file su nastro come se fosse sequenziale, tramite una semplicissima istruzione OPEN1.
Apparirà la scritta PRESS PLAY ON TAPE, e il computer inizierà la ricerca di una testata di file. Appena avrà trovato qualcosa, fermerà il nastro e stamperà FOUND nome del file. Ora premete pure il tasto C = . Riapparirà il cursore e il nastro resterà fermo. Cominciamo col leggere gli indirizzi d'inizio e di fine del programma caricatore:
PRINTPEEK(829) + PEEK(830)*256
PRINTPEEK(831) + PEEK(832)*256
Nelle locazioni 829-830 si trova l'indirizzo iniziale, ed in 831-832 quello finale.
Questa procedura può essere seguita anche sul C128 per la maggior parte delle cassette del C64. Cambiano le locazioni del buffer di cassetta, che invece di trovarsi da 828 a 1019 si trova da 2816 a 3007: gli indirizzi iniziale e finale si leggeranno rispettivamente dunque in 2817-2818 e 2819-2820.
Arrivati a questo punto è necessario conoscere il linguaggio macchina, per entrare nel codice del turbo e disabilitare l'autostart. Problemi quindi per chi ne è digiuno, ma le protezioni non sono fatte in BASIC per essere sbloccate da tutti. Ecco il miglior consiglio ai principianti per trasferire da nastro a nastro: usate due registratori ed un cavetto di duplicazione, sperando che vi vada bene, oppure una di quelle interfacce di duplicazione vendute nei negozi specializzati.
Da nastro a disco non rimangono invece che le cartucce di sprotezione come il BANDIT, di cui abbiamo dato notizia FLASH in un numero precedente. Dunque, abbiamo appena aperto (OPEN) il file su nastro, e la sua testata si trova nel buffer del registratore: poniamo che in memoria abbiate precedentemente caricato un monitor di linguagio macchina, oppure siate in modo 128; entrate in monitor ed usate il comando TRANSFER:
T 033C 03FB 633C per il C64
TB00BBF633C per il C128
passiamo ora ad esaminare gli indirizzi del caricatore turbo:
M 633D 6340 in modo 64 e 128
rare volte troverete che sono compresi fra $0300 e $0304 al l'i nei rea. In tali casi sono semplicemente dei byte che vanno a sostituirsi ai vettori del BASIC, dando il controllo al turbo, e possono essere ignorati. Altre volte vedrete invece $02A7-$0304 o qualcosa del genere: allora il caricatore risiede in parte in quella zona, e bisogna proseguire il caricamento.
Il metodo più sicuro per proseguire il caricamento senza cedere il controllo al turbo è usare un programmino caricatore in linguaggio macchina, che non usa i vettori del BASIC. Facciamolo partire da $8000:
A 8000
LDX #1
STX BA
LDA#0
STA B7
JSR FFD5
LDX #0
1 LDA 02A7,X
STA 62A7,X
INX
BNE1
SEI
JSR
FD15
CLI
JMP
Dopo la chiamata a $FFD5 (la routine di LOAD) il caricatore turbo risiederà in memoria negli indirizzi visti prima nella OPEN: ci basterà trasferirlo aggiungendo semplicemente un offset (uno spostamento) di $6000 (o qualunque altro, basta non confonda gli indirizzi originali), poi chiamare le routine del Kernal che ripristinano i vettori del sistema operativo. Scrivete il programma, uscite dal monitor, riavvolgete la cassetta all'inizio e date SYS32768. Il registratore farà pochi giri dopo il FOUND e si fermerà: se non lofa, avete sbagliato qualcosa, oppure la protezione non è di questo tipo.
Rientrate in monitor (o passate in modo 128 ed entrate nel suo monitor), leggete, tanto per scrupolo, il contenuto di $6300-6301 o $6302-6303 ed andate a disassemblare all'indirizzo ricavato.
Troverete alcune chiamate a subroutine (JSR) e, ad un certo punto, degli STA in $C1, C2, C3 e C4 (od altre 4 locazioni): li dovrebbero risiedere gli indirizzi iniziale e finale del vero programma.
E' necessario prenderne nota, perchè dovete sapere come sarà occupata la memoria dopo il caricamento. Per prenderne nota, inserite un'istruzione BRK nel codice del turbo, subito dopo gli STA in $C1 e seguenti, poi modificate il programmino in $8000
perchè esegua il trasferimento inverso, da $62A7 a $02A7, ed eliminate la parte di ripristino dei vettori. Riavvolgete il nastro, date SYS32768 ed aspettate: dopo alcune righe colorate lo schermo dovrebbe tornare blu, come se aveste premuto RUN-/STOP + RESTORE; se non lofa, provate a lasciare nel programmino in $8000 la chiamata a $FD15.
Adesso leggete gli indirizzi con:
PRINTPEEK(193) + PEEK(194)*256 PRINTPEEK(195) + PEEK(196)*256
e segnateli da qualche parte. A questo punto sta a voi decidere sul da farsi, a seconda di dove verrà caricato il programma vero e proprio. La strada preferibile di solito consiste nello scrivere un programmino di salvataggio locato in una zona non interessata dal caricamento, poi modificare la parte finale del turbo in modo da eseguire un JMP al programmino.
In effetti, se disassemblate il codice del turbo, dopo la parte di ricezione e memorizzazione dei byte (JSR xxxx, STA ($C1),Y) dovreste trovare un JMP xxxx, che è come la SYS di partenza del programma. Cambiate l'indirizzo di JMP e il gioco è fatto!
Riassumiamo:
I passi sono molto semplificati, ma l'importante è avere in mente tutta la situazione, sapendo quel che succede e cosa c'è in memoria in ogni momento.
La pratica è sempre la maestra migliore.
Non tutte le protezioni sono così semplici: ad esempio, una già adottata due o tre volte consiste nel suddividere il programma in 10-12 pezzi, qualcuno magari di poche centinaia di byte, in modo che sul nastro non occupi neanche mezzo giro e sfugga al caricamento separato. Altre dopo il caricamento decodificano il programma, oppure sono scritte usando codici illeciti del 6502, per cui il monitor non li riconosce e dobbiamo fare un paziente lavoro di traduzione.
Di solito, più è lungo un caricatore, più subdolo è il suo funzionamento:
ad esempio il Novaload di Skyfox o Beach Head II, in cui il turbo è suddiviso in tantissime sottoparti ed è impossibile seguirne il flusso. Il punto debole del Novaload sta nella parte finale, subito dopo il ripristino della locazione 1: a quel punto possiamo inserire un RTS per tornare semplicemente al BASIC e fare quel che più ci piace.
Il caricatore turbo della cassetta originale di Lords of Midnight è stato un osso duro: pensate che si automodifica durante il caricamento, e quindi non è possibile fermarlo. Dai e ridai, grazie anche al C128, la protezione è saltata.
Ricordate che gli indirizzi del programma da caricare risiedono sempre in 829-830 e 831-832: una volta conosciutili si può caricare e duplicare qualunque cosa non protetta. Per i programmi protetti invece avete appena avuto un banale esempio di sprotezione, che dovrà essere studiato ed adattato ad ogni caso. Le cartucce le usa solo chi non ha tempo e non vuol fare un lavoro da artista.
WBO
Sulla cassetta allegata alla rivista sono presenti due programmi per la duplicazione di software su nastro. Il primo, BACKUP TAPE, è in grado di riprodurre qualsiasi programma purché salvato a velocità normale. Il secondo, 202 TURBO, può invece operare anche su file lunghissimi (202 blocchi) e salvarli in turbo. Richiede, però, di conoscere l'indirizzo iniziale (START), finale (END) e del primo byte utilizzato(RUN). Dei primi due indirizzi abbiamo appena parlato; riguardo al terzo di solito basta scoprire l'indirizzo posto accanto alla SYS presente nel caricatore.
Il 202 TURBO funziona perfettamente anche per i trasferimenti da disco a cassetta.
Entrambi i programmi, una volta caricati, non consentono il passaggio al file successivo. Sarà necessario riavvolgere, cominciare da capo ed effettuare la selezione da menù.