Siccome non avessi abbastanza cose da fare, ho comprato una copia di un'antica scheda informatica Commodore Kim 1. Il prezzo era di 245 $ nel 1976, cioè circa 1.200 euro oggi. | Comme si je n'avais pas assez de choses à faire, j'ai acheté la copie d'une antique carte informatique Commodore Kim-1. Le prix était de 245 dollars en 1976, c'est à dire environ 1.200 euros aujourd'hui. |
L'ho ordinata in Italia (a Bari, in Puglia). È stata creata con una scheda Arduino ed è pagabile.
(50 euro con il trasporto.) Si chiama Kim Uno. |
Je l’ai commandée en Italie (à Bari, dans les Pouilles). Elle a été créée avec une carte Arduino et est bon marché.
(50 euros avec le transport.) Elle se nomme Kim Uno |
Nella scheda c'è già un programma esempio, un cronometro. Ho trovato sul web due versioni del programma: in linguaggio esadecimale e in linguaggio assembly. 0 to F: sedici tasti per digitare il codice esadecimale di un indirizzo o di un dato. AD: digitare l'indirizzo (esempio AD 0400). DA: digitare il dato (esempio DA 00). +: Incrementare l'indirizzo. RS: fare il reset del sistema. GO: eseguire il programma dall'indirizzo scritto sul display. ST: stoppare il programma. Per modificare un dato: AD (indirizzo) DA (dato) |
Sur la carte, il y a déjà un exemple de programme, un chronomètre. J’ai trouvé sur le web deux versions du programme : en langage hexadécimal et en langage assembleur. 0 to F : seize touches pour taper le code hexadécimal d’une adresse ou d’une donnée. AD : saisir l’adresse (par exemple AD 0400). DA : saisir la donnée (exemple DA 00). + : Incrémenter l’adresse. RS : faire la réinitialisation du système. GO : exécuter le programme à partir de l’adresse écrite sur l’écran. ST : arrêter le programme. Pour modifier une donnée: AD (adresse) DA (donnée) |
Esadecimale | Hexadécimal |
[RS] 1 sec [AD] 0400 [DA] F8+18+A2+00+A9+01+85+29+ A0+00+A5+29+75+24+95+24+ DD+32+04+F0+06+B4+24+A9+ 00+85+29+94+24+94+F9+E8+ E0+03+D0+E4+A9+45+85+28+ 20+1F+1F+C6+28+D0+F9+4C+ 00+04+60+60+24+00+00+00+ [AD] 0024 [DA] 50+58+23+ [AD] 0400 [DA] |
|
Assembly | Assembleur |
Ho voluto commentare, linea dopo linea, il programma assembly (6502). | J'ai voulu commenter, ligne par ligne le programme assembleur (6052) |
Langage de programmation - Référence des instructions 6502 | |
* = $0400 0400 START 0400 SED (Impostare il flag del decimale a 1.) 0401 CLC (Riportare il flag del riporto a 0.) 0402 LDX #$00 (Caricare il valore nel registro X.) 0404 LDA #$01 (Caricare il valore nel registro dell'accumulatore A.) 0406 STA *$29 (Conservare un valore che proveniente dal registro accumulatore.) 0408 NEXTD 0408 LDY #$00 (Caricare il valore nel registro Y.) 040A LDA *$29 (Caricare il valore nel registro dell'accumulatore A.) 040C ADC *$24,X (Eseguire un'addizione con il riporto.) 040E STA *$24,X (Conservare un valore proveniente dal registro dell'accumulatore.) 0410 CMP CARRYT,X (Confrontare i flag come se fosse eseguita una sottrazione .) 0413 BEQ CONTIN (Saltare all'indirizzo quando il flag di uguaglianza è 1.) 0415 LDY *$24,X (Caricare il valore nel registro Y.) 0417 LDA #$00 (Caricare il valore nel registro dell'accumulatore A.) 0419 STA *$29 (Conservare un valore proveniente dal registro dell'accumulatore.) 041B CONTIN 041B STY *$24,X (Conservare un valore proveniente dal registro dell'accumulatore.) 041D STY *$F9,X (Conservare un valore proveniente dal registro dell'accumulatore.) 041F INX (Incrementare il registro X.) 0420 CPX #$03 (Confrontare i flag come se fosse eseguita una sottrazione sul registro X.) 0422 BNE NEXTD (Saltare all'indirizzo quando il flag di uguaglianzia è 0.) 0424 LDA #$45 (Caricare il valore nel registro dell'accumulatore.) 0426 STA *$28 (Conservare un valore proveniente dal registro dell'accumulatore.) 0428 L1 0428 JSR $1F1F (Chiamare un sottoprogramma all'indirizzo.) 042B DEC *$28 (Decrementare una memoria.) 042D BNE L1 (Saltare all'indirizzo quando il flag di uguaglianza è 0.) 042F JMP START (Saltare all'indirizzo.) 0432 CARRYT 0432 .BYTE $60 0433 .BYTE $60 0434 .BYTE $24 |
|
* = $0400 0400 START 0400 SED (Met le drapeau de décimal à 1.) 0401 CLC (Met le drapeau de retenue à 0.) 0402 LDX #$00 (Charge la valeur dans le registre X.) 0404 LDA #$01 (Charge la valeur dans le registre de l'accumulateur A.) 0406 STA *$29 (Entrepose une valeur provenant du registre de l'accumulateur.) 0408 NEXTD 0408 LDY #$00 (Charge la valeur dans le registre Y.) 040A LDA *$29 (Charge la valeur dans le registre de l'accumulateur A.) 040C ADC *$24,X (Permet de faire une addition avec la retenue.) 040E STA *$24,X (Entrepose une valeur provenant du registre de l'accumulateur.) 0410 CMP CARRYT,X (Compare des ensembles de drapeaux comme si une soustraction avait été effectuée.) 0413 BEQ CONTIN (Fait un saut à l'emplacement spécifié si le drapeau d'égalité vaut 1.) 0415 LDY *$24,X (Charge la valeur dans le registre Y.) 0417 LDA #$00 (Charge la valeur dans le registre de l'accumulateur A.) 0419 STA *$29 (Entrepose une valeur provenant du registre de l'accumulateur.) 041B CONTIN 041B STY *$24,X (Entrepose une valeur provenant du registre de l'accumulateur.) 041D STY *$F9,X (Entrepose une valeur provenant du registre de l'accumulateur.) 041F INX (Incrémente le registre X.) 0420 CPX #$03 (Compare des ensembles de drapeaux comme si une soustraction avait été effectuée sur le registre X.) 0422 BNE NEXTD (Fait un saut à l'emplacement spécifié si le drapeau d'égalité vaut 0.) 0424 LDA #$45 (Charge la valeur dans le registre de l'accumulateur A.) 0426 STA *$28 (Entrepose une valeur provenant du registre del'accumulateur.) 0428 L1 0428 JSR $1F1F (Appelle un sous-programme à l'emplacement spécifié.) 042B DEC *$28 (Décrémente une cellule mémoire.) 042D BNE L1 (Fait un saut à l'emplacement spécifié si le drapeau d'égalité vaut 0.) 042F JMP START (Saute à l'adresse spécifiée.) 0432 CARRYT 0432 .BYTE $60 0433 .BYTE $60 0434 .BYTE $24 |
|
Per non avere un cronometro, ma un orologio, bisogna impostare un'ora e digitare: AD 0024 DA SS+MM+OO+ (secondi, minuti, ore) AD 0400 GO |
Pour ne pas avoir un chronomètre, mais une horloge, il faut régler une heure et taper :
AD 0024 DA SS+MM+OO+ (secondes, minutes, heures) AD 0400 GO |
Questo è un programma esempio perché… l'orologio non funziona bene : in dieci minuti è in ritardo di quattro minuti. | C’est un exemple de programme parce que... l'horloge ne fonctionne pas bien : en dix minutes, elle a quatre minutes de retard. |