Articoli con Tag ‘Commodore-64’

Commodore 64 Javascript emulator

Un po’ di tempo fa avevo segnalato la versione di un emulatore Commodore 64 scritto in Adobe Actionscript 3.0, oggi in una nuova versione:

Commodore 64 Emulator in Adobe Flash

Continua...

Undolog: postazioni di lavoro tra passato e presente

L’altro giorno mi sono capitate tra le mani alcune vecchie fotografie con i miei primi computer! Così mi è venuto in mente di fotografare la mia postazione attuale e metterla a confronto con il “tempo” che è passato. Le fotografie ritrovate sono ovviamente di scarsa qualità, rispetto all’attuale, altro segno dei tempi!

Continua...

Greetings Professor Falken

Io ho una tradizione che porto avanti da ben 25 anni! Che festeggio ben volentieri! Dall’ormai lontano 1983, anno della sua uscita, una volta all’anno non posso esimermi dalla visione di WarGames (Giochi di guerra) il film che ha deciso, in qualche modo, il mio destino lavorativo.

WarGames

WarGames, nella sua "attuale" semplicità, fu all’epoca un vero successo, soprattutto tra gli appassionati di informatica.

Continua...

L’operazione aritmetica modulo

Il “modulo” è una delle operazioni aritmentiche disponibili su praticamente tutti i linguaggi di programmazione (l’ho usato la prima volta con il Basic del Commodore 64). Può comparire come semplice operatore, come nel caso di Actionscript o Javascript che usano entrambi il carattere “percento” (a % b), o come metodo o istruzione. Per gli sviluppatori può risultare utile in contesti apparentemente diversi tra loro. Gskinner ne ha parlato poco tempo fa, mostrando alcuni classici, ma interessanti, esempi.

Semplificando, l’operazione modulo tra due numeri restituisce il resto della loro divisione. Per completezza diciamo che l’operazione di modulo è un argomento assai vasto, che ho trattato anche in La cifratura RSA! Questa volta, tuttavia, non parleremo di codici o cifrature, ma di cose utili e molto più semplici.

Divisibile per… alternare

Il primo uso che possiamo fare dell’operazione di modulo è quella di determinare se un numero a è divisibile per un numero b! Se il risultatto di a % b(userò qui la notazione % per indicare l’operazione di modulo) è zero, a è divisibile per b. Ricordo che quando ebbi a che fare con un problema simile non conoscevo l’operazione di modulo. Sul Commodore 64 mi serviva sapere se un numero era divisibile per 2. All’epoca usai questa sintassi (ho ritrovato il codice origionale – anno 1983):

1
2
3
10 INPUT A
12 B=A/2: IF B = INT(B) THEN PRINT "OK IL NUMERO "A" E' PARI":GOTO 10
14 PRINT "IL NUMERO "A" E' DISPARI":GOTO 10

Il BASIC del Commodore 64, comunque, non possedeva l’operazione di modulo – almeno che io ricordi!!

In pratica facevo esattamente quello che per sua natura fa l’operazione di modulo: verificavo che la divisione per 2 non avesse resto, in questo caso verificavo che il risultato non contenesse decimali ( IF B = INT(B) )! Se l’operazione di divisione è uguale al suo intero, allora il numero è pari!

Se in a abbiamo il nostro valore da controllare, la stessa cosa può essere risolta da:

1
2
3
if( (a % 2) == 0 ) {
    // pari
}

Oppure, per il 3, da:

1
2
3
if( (a % 3) == 0 ) {
    // divisibile per 3
}

Piccola nota: grazie al binario se si ha a che fare con le potenze di 2 c’è annche un modo più rapido di verificare se un numero è pari o dispari. In notazione binaria, infatti, i numeri pari hanno tutti il primo bit a zero! Così, utilizzando gli operatori logici, è possibile sapere se un numero e pari o dispari semplicemente “testanto” il primo bit:

1
2
3
if( !(a & 1) ) {
    // pari
}

In Assembly, ad esempio, questo è pane quotidiano! Ed è ancora più immediato e semplice (il Motorola 68020, ad esempio, aveva un’istruzione BTST che “testata” proprio un singolo bit ;) ). Le operazioni logiche (AND, OR, NOT, XOR, etc…), infatti, sono notoriamente più veloci a livello di eseguzione e quindi di “tempo macchina”! (a & 1) esegue l’operazione logica di AND (& – moltiplicazione bit a bit) tra il nostro valore a e 1 (chiamato maschera). Se a = 7 (00000111), ad esempio:

1
2
3
00000111 AND
00000001 =
00000001 ; dispari

Se a = 8:

1
2
3
00001000 AND
00000001 =
00000000 ; pari

Non solo possiamo verificare i numeri pari, cioè con il primo bit a 0, e quindi divisibili per 2, ma possiamo anche verificare se un numero è divisibile per 4, 8, 16, 32, 64, etc… utilizzando le opportune maschere:

1
2
3
if( !(a & 3) ) {
    // divisibile per 4 (maschera = 3 = 00000011) dato che 4 è 00000100)
}

Se gli ultimi due bit sono a zero il numero è divisibile per 4! Se gli ultimi 3 bit (maschera 00000111) sono a zero il numero è divisibile per 8! E così via :)

Gskinner mostra l’uso del modulo nei casi di generazione di valori alternati. Classico esempio è quello di modificare lo sfondo di una lista di elementi: una riga bianca e una grigia. Gskinner propone:

1
2
3
4
5
if (rowIndex % 2 == 0) {
   rowColor = 0xFFFFFF;
} else {
   rowColor = 0xCCCCCC;
}

Prima di tutto il codice sopra può essere risolto con una sola riga di codice:

1
rowColor = (rowIndex % 2 == 0)?0xFFFFFF:0xCCCCCC;

Inoltre, in questo specifico caso, eviterei effettivamente di eseguire una “pesante” operazione di modulo. Questa situazione particolare è spesso innestata in loop, e quindi sarebbe “bene” non sciupare cicli di clock macchina. In questi casi a me piace la più pulita (e logica) soluzione:

1
rowColor = (fooIndex = (fooIndex == false) )?0xFFFFFF:0xCCCCCC;

Dove è fooIndex è un valore impostato precedentemete a true o false, a seconda di come vogliamo impostare inizialmente il nostro colore sfondo. Questo approccio è più sottile e meno immediato, a prima vista, ma più rapido in quanto esegue operazioni logiche di true/false. Se fooIndex è true, quando viene eseguita l’istruzione (fooIndex = (fooIndex == false) ) la condizione (fooIndex == false) sarà falsa e di conseguenza fooIndex verrà impostato da true a false. La seconda volta, tuttavia, la condizione (fooIndex == false) sarà vera e quindi fooIndex verrà impostato da false a true! E così via…

Ripetizioni: il comportamento ad orologio

L’aritmetica finita, che sta alla base del funzionamento dell’operazione di modulo, è spesso indicata come aritmetica dell’orologio. Un orologio classico a lancette ha un quadrante suddiviso in 12 ore (12 diurne più 12 notturne!), sufficienti ad indicare una delle qualsiasi 24 ore di una giornata. Se alle 08:00 del mattino vi chiedessi che ora segnerà il vostro orologio fra 18 ore, la vostra risposta non sarebbe 8+18 = 26! Bensì le 02:00 di notte! Involontariamente e senza forse saperlo, eseguiamo conitnuamente operazioni di modulo ogni qualvolta abbiamo a che fare con gli orari.

In Italia siamo abituati al sistema di 24 ore (o misto). Quando indichiamo le ore 16:00 intendiamo quell’orario che in altri paesi è indicato come 04:00 pm. Chi usa il postfisso am/pm per distinguere le ore diune da quelle notturne, esegue ancor più spesso l’operazione di modulo, in questo caso modulo 12! Noi italiani, ed altri, invece, essendo abituati a considerare le 24 ore, eseguiamo operazioni con modulo 24!

Quando sono le 11 del mattino (11:00 per tutti) e pensiamo a “fra 5 ore”, noi italiani rispondiamo 5+11 = 16 (le quattro del pomeriggio), uno straniero potrebbe ugualmente rispondere 5+11 = 4 pm. Visto che 5 + 11, nell’aritmetica classica, fa evidentemente 16, come ha fatto lo straniero a rispondere 4 pm? Ha semplicemente eseguito il modulo 12 sul risultato: 5 + 11 = 16 mod 12 = 4. Non è necessario che prendiate una calcolatrice per verificare l’esattezza del computo, ma procedete come fanno un po’ tutti; visualizzate un quadrante di un’orologio e posizionate mentalmente le lancette sulle 11, aggiungete poi – sempre visivamente – 5 ore e, come per magia vi ritroverete effettivamente sulle 4! Ecco perchè le quattro del pomeriggio vengono chiamate 16 :)

In Italia, invece, usiamo un modulo 24, infatti: 11+5 = 16 mod 24 = 16. Quando sono le 23:00 di sera, dopo 5 ore non saranno le 28:00, perchè 28 modulo 12 = 4! 122514884225 modulo 24 = 17! Quello che accade è che la cifra del risultato modulo 24 non supera mai 24. Ma la cosa più interessante è che i numeri si ripetono indefinitivamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1 % 24 = 1
2 % 24 = 2
3 % 24 = 3
...
22 % 24 = 22
23 % 24 = 23
24 % 24 = 0
25 % 24 = 1
26 % 24 = 2
27 % 24 = 3
...
48 % 24 = 0
49 % 24 = 1
50 % 24 = 2
51 % 24 = 3
...

Questa ripetizione è di una comodità disarmante. Immaginiamo, ad esempio, di dover disporre un oggetto, un MovieClip, similmente ad una scacchiera, su quattro colonne. Creiamo un MovieClip quandrato, 55×55 pixel e dal pannello delle proprietà esportiamolo con il nome Simbolo. Il codice seguente disporrà il nostro MovieClip su quattro colonne e andrà “a capo” grazie all’operazione di modulo:

1
2
3
4
5
6
7
var col:Number = 4;
for(var i=0; i < 12; i++) {
    var s:Sprite    = new Simbolo();
    addChild( s );
    s.x             = (i % col)*60;
    s.y             = Math.floor(i/col)*60;
}

Come si vede dal codice, la variabile i del ciclo for cresce in modo indefinito. Ma la coordinata x del nostro MovieClip non supera mai un certo valore, e si ripete indefinitivamente! Ecco un esempio concreto:

Loading Flash Player...

Tramite le due manopole potete variare il numero di colonne (il modulo) e il numero totale degli elementi, sfruttando l’algoritmo di sopra.

Continua...

Linguaggi di sviluppo

Ho “riesumato” questo mio articolo scritto un po’ di anni fa. L’ho leggermente rivisto, aggiornando qualcosina qua e là, tuttavia credo sia ancora attuale ed interessante.

INTRODUZIONE

Che cos’è un linguaggio di sviluppo? Un elaboratore elettronico, alias PC (Personal Computer), ha un suo linguaggio personale. Questo linguaggio viene chiamato codice macchina, per intendere che ogni macchina, quindi ogni elaboratore (PC Compatibili, Apple, Unix, ecc…), ne ha uno esclusivo e proprietario. I programmi che vediamo “girare” sul nostro PC vengono principalmente eseguiti da quel misterioso oggetto chiamato microprocessore. Questo rappresenta il cuore, l’unità intelligente, di ogni elaboratore elettronico. In realtà una applicazione non viene eseguita solo dal microprocessore ma si appoggia, per così dire, a quello che viene chiamato sistema operativo: uno strato software fornito dal produttore della macchina (si veda, ad esempio, i Macintosh della Apple).

Continua...

C’era una volta…

Annuario Videogiochi 1984 "C’era una volta" un tempo in cui la parola Personal Computer non aveva significato. Era il tempo delle console, piccoli marchingegni che si collegavano alla TV, i precursori delle Playstation di oggi. E nelle riviste se ne vedevano davvero di tutti i colori: Intellivision, Atari, Philips, grandi macchine – per l’epoca – che garantivano divertimento unito a stupore. Ed ecco le prime riviste, come l’annuario di VideoGiochi (nella foto) del 1984.  Le pubblicità, accattivanti per l’epoca, mostravano una tecnologia mai vista prima. C’era la Colecovision, con il suo Video Game System, «una console domestica per videogames su cartucce standard Colecovision», all’eccezionale prezzo di 485.000 Lire.

Continua...

Auguri

Commodore 64

E tutto cominciò da qui… auguri al mio primo Personal Computer, come veniva pubblicizzato all’epoca che, nonostante sia ormai tecnicamente superato, rimarrà sempre insuperabile nell’animo e nel ricordo di molti!

Continua...

Emulatore Assembler 6502

Visto che siamo in tema di nostalgia, ecco un simpatico emulatore dello storico microprocessore del 6502; montato negli anni ’80 in console e computer come l’Apple, Nintendo NS e il Commodore 64 (che poi passo al 6510, …). Questo simpatico gioiellino è scritto interamente in Javascript, funzionante in pratica su tutti i browser (da Safari a Opera), con il solo difetto di essere leggermente lento. Tuttavia vale la pena provarlo. Sul sito (http://www.6502asm.com/) trovate alcuni simpatici esempi, lenti ma curiosi.

Continua...

Codice per Commodore 64

Ho recuperato il mio blocchetto del Commodore 64 per verificare il porting dell’emultatore FC64 proposto quache Post fa! Purtroppo alcune funzionalità della tastiera non sono proprio riuscito a farle funzionare, quindi non ho potuto provare e inserire alcuni listati interessanti (vecchi ricordi nostalgici). Se ricordate, il Commodore 64 aveva combinazioni speciali usate durante la scrittura del codice BASIC, come il simbolo della R in negativo (reverse) o il cuoricino, sempre in negativo, per pulire lo schermo.

Continua...

Commodore 64 Web Emulator

Se leggete gli ultimi due Post che ho scritto (Net Software e Amiga Web Emulator), questo sembra la diretta conseguenza. Apropos, quindi, di emulatori e Flash 9 con ActionScript 3.0, ecco qualcosa di veramente grandioso, nostalgia a parte. Il progetto si chiama FC64 e vuole essere un’emulatore a basso livello del glorioso Commodore 64! È stato scritto in ActionScript 3.0, quindi per visualizzare il filmato (mi sento strano a chiamare filmato una cosa di questa genere…) dovete installare la versione 9 del plugin di Adobe.


Commodore 64 – Flash 9 Web Emulator

Continua...


Stop SOPA