(Articolo di Phaze101) PRIMI PASSI Con questo articolo abbiamo raggiunto finalmente il punto in cui passiamo dalla teoria alla pratica. Useremo CBM Prg Studio, ma non staremo qui a spiegare come fare a scaricarlo, installarlo e configurarlo visto che esistono già una moltitudine di video su YouTube che svolgono questo compito. Tutte quello che ci servirà lo spiegherò man mano che dovremo usarlo. Potete scaricare CBM Prg Studio da qui: http://www.ajordison.co.uk/ Ok, da ora in avanti ci sporcheremo le mani. I listati che proporrò saranno immagini, in modo che nessuno possa fare copia e incolla, perché ho bisogno che siate voi a digitare il codice. Solo facendo pratica digitando il codice come si faceva ai vecchi tempi quando si copiava i listati dalle riviste comprenderete quello che state facendo. Mi spiace se questo a qualcuno di voi non piacerà, ma è per il vostro bene: se veramente volete imparare l’assembly dovete avere la pazienza. Come ho detto nel primo articolo solo

con la pazienza riuscirete ad imparare l’assembly. Ovviamente per chi di voi è già esperto potrebbe sembrare assurdo, ma questi articoli si rivolgono a chi muove i primi passi e vuole imparare seriamente l’assembly. E se volete impararlo seriamente dovrete fare qualche sacrificio: digitare i listati è uno di quelli. Presto, quello che vedete come maestro, me, sarà sostituito da voi stessi. E quando questo accadrà, sarò fiero di voi e saprò che ho ottenuto quello che mi ero prefisso con questo corso. A quel punto sarò magari io a imparare da voi 😊 Tutto Insieme Facciamo un riassunto veloce di quanto visto nelle ultime due puntate. Nella puntata 4 abbiamo spiegato le modalità di indirizzamento, e nella 5 il set di istruzioni. Per chi di voi è ancora confuso, chiariamo il legame tra i due argomenti. Prendiamo un’istruzione e vediamo come le modalità di indirizzamento influiscono. Come esempio prendiamo LDA, che ormai dovreste sapere sta per LoaD Accumulator.…

(Article by Phaze101) First Steps With this article we have reached the section where we will be switching from theory into practice. We will be using CBM Prog Studio. I will not be wasting time in explaining how to download it, install it and configure it. There are too many videos on YouTube regarding this. If there is a need to explain one of its features or assembly directives, I will explain it when we encounter it. You can download CBM Prg Studio from here http://www.ajordison.co.uk/ Please note that from now on it will be hands on. The listings will be images so that no one can do cut and paste from the article to the assembler. I need you to type the code. Only if you practice typing in the code like the old days when copying listing from magazines you will learn what you are doing. Sorry if this is going to put some off you of but it

is for your own good. If you really want to learn assembly, you need to have patience. As I said in article one only if you have patience you will succeed in learning assembly. Of course, for those that know it all this might sound absurd, but these articles are aimed at beginners who seriously want to learn assembly. So, if you are serious in learning assembly you will make the effort, to type the listing and have patience. Soon, who you might see me as your teacher, or your master will be superseded by you. When that happens, I will be more than proud of what you have learnt or achieved in terms of this assembly  course. I will know that my work was not in vein. Then I will be able to learn from you and you’ll become my teacher 😊 Merging All Let’s recap sometime that we covered in articles 4 and 5. In article 4…

Formato Pdf dell'articolo Sorgente assembly “Oggi parleremo delle turmiche, una specie virtu-animale con strane abitudini. Sin dalla loro nascita posso muoversi liberamente e sanno benissimo come farlo ….”. Un documentario della national geographic avrebbe iniziato così la descrizione delle strane creature che voglio presentarvi oggi. Le turmiche furono presentate la prima volta da A.K.Dewdney in “Scientific American” alla fine del 1989 e, all’epoca, battezzò questi animaletti con il nome di turmiti. Le Formiche di Turing Le turmiche, o Formiche di Turing, sono dei particolari essere le cui modalità di movimento sono dettate dalla programmazione loro imposta sin dalla nascita. Questa programmazione nel movimento prevede uno “stato” interno che può cambiare in base alle condizioni dettate dalla loro “programmazione”, la possibilità di scegliere una direzione ed infine un nastro “infinito” che può essere letto e scritto, proprio come in una macchina di Turing. La macchina di Turing è la macchina che Alan Turing ipotizzò come modello di calcolatore programmabile. Questa macchina,

detta brevemente, è formata da una testina di lettura/scrittura (simile a quella dei mangianastri) che agisce su di un nastro (virtualmente infinito) che può muoversi avanti e indietro e sul quale la testina potrà leggere o scrivere alcuni simboli. Ebbene una macchina siffatta ha una potenza computazionale insuperabile, se le viene fornito sufficiente tempo (e la giusta programmazione) può risolvere qualsiasi problema. Per programmare la macchina di Turing sarà sufficiente una tabellina a doppia entrata, nella quale vi saranno tante righe quanti sono gli stati previsti dal programma e tante colonne quanti sono i simboli che si vogliono gestire. In ogni cella della tabellina ci saranno scritte 3 informazioni fondamentali: Quale simbolo scrivere sul nastro In quale stato la macchina si deve portare La direzione in cui si deve spostare la testina rispetto al nastro, destra, sinistra o in alternativa stare ferma. Ogniqualvolta la testina legge un simbolo, la macchina di Turing controllerà nella tabellina la cella corrispondente allo stato…

(Articolo di Phaze101) Il Set di Istruzioni Cercheremo di coprire il maggior numero possibile di istruzioni in questa puntata. Devo ammettere che ho riscritto il testo più volte, perchè non ero mai contento di come terminavo il tutto poichè avrei voluto trovare un modo veloce per spiegarle tutti in una volta. Non sono comunque soddisfatto al 100% ma penso che questa sia la miglior versione possibile. Come già fatto in molti altri libri ho deciso di dividere il set di istruzioni in categorie, potendo in questo modo spiegare nel dettaglio le categorie stesse e non ogni singola istruzioni. Strada che avrebbe richiesto troppo tempo oltre al fatto che sia su carta che on line è pieno di risorse di riferimento per questo scopo. Inizierò dapprima elencando tutte le istruzioni della CPU 6502, con una breve spiegazione di cosa fa ogni istruzione. Ricordate che molte istruzioni supportano differenti modalità di indirizzamento, come abbiamo visto l’ultima volta. Quindi se un’istruzione supporta delle modalità

di indirizzamento, non è detto che supporti tutte quelle che abbiamo visto. Questo varia da istruzione ad istruzione. Osservazione generali Alcune note per aiutarvi a ricordare più velocemente le varie istruzioni. La maggior parte delle volte che un’istruzione ha a che fare col registro A, l’istruzione stessa termina con una A. Lo stesso per I registri X e Y. Se l’istruzione trasferisce un valore dal registro A al registro Y, probabilmente terminerà con AY, ed allo stesso modo con le altre combinazioni. Le istruzioni di confronto iniziano con una C. Le istruzioni di branch iniziano con una B. Le istruzioni che puliscono (clear) qualcosa iniziano con CL. Le istruzioni che impostano (set) qualcosa, iniziano con SE. Le istruzioni di salto iniziano con una J. Le istruzioni che operano con lo stack solitamente iniziano con un P (per push e pull). Se un’istruzione inizia con DE è un’istruzione di decremento, mentre se inizia con IN è una di incremento. Quando…

(Article by Phaze101) The Instruction Set I am going to try and cover as much as I can here. This article was written more than once I have to admit. I was never happy with the finish of it since I wanted a quick way of explaining it all, in a easy way. I am still not 100% happy but this is the best way I could come up with that explains the instructions set. I came up with the idea of dividing the instruction set in categories. This was done in the past in several books. Like this I just need to explain each category instead of going through each instruction. Going through each instruction would have taken too much time and there are so many references that one can look at online to see what each instruction does. In the next section I am listing all the 6502 CPU Instruction set. Each instruction is explained in few words

what it does. Now remember that many of the instructions support different addressing modes, what we talked about in the previous article. Now if an instruction supports addressing modes, it doesn’t mean that it supports all of the addressing modes that we coved. If various from instruction to instruction. Another way of saying addressing modes is, each instruction can support different modes. General Observations The below might help you remember the instructions set quicker. Notice also that if the A register is affected most of the time the instructions ends with an A generally speaking. Same applies for X and Y. If it is a transfer from A to Y then the instruction will end with AY and same for the rest. Compare instructions start with a C. Branch instructions start with a B. When you are clearing something it starts with a CL. When you are setting something it starts with a SE. When you are jumping to a…

Il giro del cavallo Il giro del cavallo Sommario Nel 1985 veniva stampato un testo unico nel suo genere: «Artificial Intelligence Projects for the Commodore 64». Presentiamo uno degli esempi più noti tratti da tale libro, il che ci fornisce un'ottima occasione per parlare di un problema scacchistico che ha interessato nei secoli matematici del calibro di Eulero, Legendre, Vandermonde e soprattutto della tecnica dimostrativa computazionale con la quale recentemente è stato risolto. Come d'abitudine, l'articolo è disponibile anche in formato PDF (caldamente consigliato). Sono inoltre disponibili i sorgenti e il project file per CBM Prg Studio in formato ZIP. «Sans les mathématiques on ne pénètre point au fond de la philosophie. Sans les philosophie on ne pénètre point au fond des mathématiques. Sans le deux, on ne pénètre point au fond de rien.» (Gottfried W. Leibniz, 1646-1716) 1 Introduzione. Scopo del presente articolo è la presentazione di un programma BASIC V2 che molti di noi «retroprogrammatori» si sono all'epoca divertiti a

digitare durante lo studio di un testo più unico che raro sulla IA applicata al C64 [9]: uno dei primi testi applicativi di larga diffusione ad introdurre tecniche all'epoca altamente innovative, che solo molti anni dopo sarebbero state trattate sistematicamente in volumi di meritata fama come [10]. Il linguaggio è intenzionalmente informale, divulgativo e didascalico, scevro da particolari pretese di rigore, al fine di raggiungere il più vasto uditorio informatico possibile. 2 Knight's tour. Figura 1: Esempio di percorso chiuso diretto. Il problema originale, la cui prima traccia storicamente certa risale circa all'850 d.C., riguarda il pezzo degli scacchi noto come cavallo (knight nel mondo anglosassone), che notoriamente si muove lungo l'immaginaria diagonale di un rettangolo con lati di due e tre caselle rispettivamente. Si tratta di trovare (almeno) un percorso che porti il cavallo ad occupare tutte le caselle della scacchiera partendo da una casella qualsiasi e passando una e una sola volta su ciascuna altra casella.…

(Articolo di Phaze101) Modalità di Indirizzamento Questa sezione contiene una panoramica di tutto quello che dovete sapere riguardo la CPU. I prossimi articoli entreranno più nel dettaglio. Prima di iniziare con le modalità di indirizzamento è necessario ripassare alcuni concetti base propedeutici alla comprensione. Pagine di Memoria Per la comprensione di quanto stiamo per dire è necessario aver letto il primo articolo di questa serie. Come prima cosa, chiariamo cos’è una pagina quando si parla di memoria. E’ un indirizzo di memoria tra $00 e $FF, con ogni pagina grande 256 byte. Come sapete il C64 ha 64K, e cioè ha una memoria che parte dall’indirizzo $0000 fino all’indirizzo $FFFF. Per cui la pagina zero e da $0000 e finisce a$00FF, Pagina uno parte da $0100 e finisce a $01FF. Pagina due è da $0200 a $02FF e così via. Notate come il primo bye indica sempre il numero di pagina, per cui

l’indirizzo $0310 ci dice che sia sulla terza pagina. Questo vuole anche dire che il C64 ha 256 pagine di memoria. Pagine speciali Le pagine 0 e 1 sono molto importanti e speciali. La Pagina Zero è molto usata dal Sistema e molto importante. Ci permette di utilizzare un indirizzamento a 16-bit. La CPU ha una modalità di indirizzamento che si chiama indirizzamento pagina zero che spiegheremo più Avanti. La Pagina Uno invece l’abbiamo incontrata quando abbiamo parlato dello Stack ed anche lei è speciale. Questa pagina non può essere usata perché deve essere lasciata alla CPU per la gestione dello stack, appunto. In teoria dalla pagina 2 in poi ($0200 - $FFFF) siamo liberi di farne uso, ma in pratica parti di questa memoria sono mappate o sovrapposte ( “shadowed”) dal Kernel del C64, dall’interprete basic e da altri component hardware come lo schermo e la memoria per I colori. Per ora è sufficiente sapere che non tutta la memoria dalla pagina due in poi è…

(Article by Phaze101) Addressing Modes This sections is an overview of everything you need to know in relation to the CPU. Future articles will go in further detail. Before I start explaining the addressing modes I need to give an overview of some basic concepts that would help understanding things better. Memory Pages It is time to know your numbers so if you haven’t read the first article please do so and understand the hex number system. First let me cover what is a page. A page is a memory address from $00 to $FF, which makes each page 256 bytes long. Remember the C64 has 64K, this means is can access memory form $0000 to $FFFF. So,  page zero is from $0000 to $00FF. Page one is from $0100 to $01FF.  Page 2 is from $0200 to $02FF and so on. Notice that the first byte is always indicating which page we are

on. If the address is $0310 it means we are on page 3. Please note also that since the first byte indicate the number of pages it also means that the C64 has 256 pages of memory. Special Pages From the above you need to know that Page 0 and Page 1 are very important pages. They are special pages. Page Zero which is used a lot by the system is a very important page. It allows us to do 16-bit addressing. The CPU has got an addressing mode, called page zero addressing. We will cover addressing modes further down this article. Page One which I covered when I mentioned the stack pointer is also a special page. This page cannot be used, and we leave the CPU to manage the stack in this area. In theory we can use memory from page 2 onwards ($0200 - $FFFF). Having said that some of the memory is mapped or shadowed by the C64 Kernel, the C64 Basic…

(Articolo di Phaze101)  I Registri della CPU I registri del 6510 Nella puntata precedente abbiamo visto che la CPU usa dei propri Registri, che non sono altro che locazioni di memoria usate dalla CPU stessa per eseguire le sue funzioni. Il 6510 ha tre Registri, chiamati A (abbreviazione di accumulatore), X e Y. Esiste anche un registro di stato “Status Register(SR)” ed un registro “Program Counter (PC)” oltre ovviamente al contatore dello stack, “Stack Pointer  (SP)”. L’accumulatore (A) E’ usato per memorizzare numeri ad 8 bit da 0 a 255 (o $FF). Vi si possono caricare valori della memoria, o direttamente indicando un valore. Possiamo anche trasferire il valore dell’Accumulatore in un indirizzo di memoria. E’ l’unico registro che può essere usato per operazione aritmetiche, come l’addizione e la sottrazione. I Registri X e Y Questi registri sono in un certo qual modo identici all’accumulatore. Possono memorizzare un valore ad 8 bit. E’ anche possibile spostare un

valore dalla memoria dei registri, o indicare direttamente un valore, ed infine copiare i loro valori in una locazione di memoria. Una funzione molto potente di questi registri, che verrà descritta più avanti quando affronteremo le modalità di indirizzamento, è quella che consente di usarli come indici. Il registro di Stato (SR) Il registro di stato contiene una serie di flag (bit) che avranno valore 0 o 1 a seconda delle operazioni che la CPU sta facendo, ed è lungo 8 bit. Ad esempio quando l’operazione ha come risultato zero, viene alzato il flag Zero. Ecco la lista di questi flag.   Lo Stack Pointer (SP) Questo registro controlla il puntatore allo stack. Questo può essere paragonato ad una pila di piatti. I piatti in cima sono sempre quelli presi per primi, e se vi aggiungo un piatto, andrà sempre messo in cima. Questo vuol dire che lo stack è una coda di tipo LIFO (Last In First Out) Lo stack è usato…

(Article by Phaze101) The CPU Registers The 6510 CPU Registers In the previous article it was shown that the CPU is using its own Registers which are just memory locations within the CPU, and these permit the CPU to perform its functions. The 6510 processor has 3 Registers. These are called the A register which is short for the Accumulator, the X register and the Y register. There is also the Status Register (SR) and the Program Counter (PC) plus the Stack Pointer (SP). The Accumulator (A) This is used to store an 8-bit number from 0 to 255 or $FF. You can load a value from memory to the Accumulator. It is also possible to load a number directly to the A register. We can also transfer the Accumulator register value to memory. The accumulator is the only register that can be used for arithmetic operations such as addition and subtraction. The X and Y Registers

These registers are in a way identical to the accumulator. They can hold an 8-bit value. It is also possible to load a value from memory and store it in these registers. Same thing as the Accumulator you can also load a number directly to them. You can also store the contents of the X and Y register into memory. The X and Y registers can also be used for indexing and this is a powerful feature of these registers. I will cover this in greater detail when I will be explaining the addressing modes. The Status Register (SR) The status register has a serious of flags which are flipped (switched on or off) according to the operations that the CPU performs. It is 8 bits wide. An example of this is when an operation results in a zero then the Zero flag is set. Here is a list of the Status Register flags The Stack Pointer (SP) The Stack Pointer controls the…