(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…

(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…

(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 è…

(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…

(Articolo di Phaze101) Linguaggio Macchina   Cos’è il Linguaggio Macchine Quindi, cos’è il Linguaggio Macchina? Che faccia ha? Questo è un semplice listato in Linguaggio Macchina per 6502: A2 01 8E 84 03 A9 02 6D 84 03 8D 85 03 60 Come potete vedere, per un essere umano sembra privo di significato. Per lo meno per la maggior parte, perché sono sicuro che un guru del 6502 sarebbe in grado di tradurlo al volo. Ma questo modo di scrivere In Linguaggio Macchina è un po’ estremo, e non saremo obbligati ad usarlo. E’ quello che il computer alla fine comprende, certo trasformato poi in binario (non in esadecibale), meglio ancora in segnali elettrci +5V o 0V, ma così andiamo troppo verso il profondo dell’hardware. Vediamo invece come rendere le cose più semplici. Partiamo da un po’ di Basic Di seguito un semplice programma basic. Nulla

di speciale, è veramente molto semplice: assegna un valore a X e Y, mette la somma dentro A e la stampa. 10 LET X = 1 20 LET Y = 2 30 A = X + Y 40 PRINT A Cosa succede quando scriviamo un programma così semplice? Quando diciamo al computer di eseguirlo, viene tradotto in Linguaggio Macchina e solo allora eseguito. Ovviamente è un processo lento, perché la traduzione deve avvenire prima che parta l’esecuzione vera e propria. Ho semplificato il processo reale, ma giusto per far capire a tutti, anche chi è proprio alle prime armi, qual è il processo che viene seguito. Questo excursus è utile per comprendere cosa diremo in seguito. Cos’è un Assembler? Un assembler è un programma che aiuta un essere umano a scrivere in assembly. L’assembly usa dei comandi mnemonici (rappresentati da 3 caratteri nel caso del 6502) per rappresentare le istruzione della CPU. Scrivere codice assembly vuol dire usare questi comandi. Ecco un listato in assembly che fa praticamente la stessa cosa del programma basic…

(Article by Phaze101) Machine Code   What is Machine code So, what is machine code and how it is written? Here is a simple 6502 program A2 01 8E 84 03 A9 02 6D 84 03 8D 85 03 60 As you can see it has no meaning to the human being. Well let me rephrase that. It has no meaning to most human beings, but I am sure that there are some 6502 Gurus out there that will be able to translate that. The above is the extreme and we will never write such a program thankfully. It is what the computer understands. Of course, they will be translated into binary (Not Hex) or better +5V and 0 but that is to deep down the line. So, let’s make things a bit simpler. Let’s do some BASIC Here is a simple basic program.  Nothing special, this is a

very simple Basic program. If is declaring X and Y with a value. Then it is just adding X + Y and storing the result in A. Then it prints contents of A which is the result. 10 LET X = 1 20 LET Y = 2 30 A = X + Y 40 PRINT A What happens when we write such a Basic program? Well, when we tell the computer to run this program the computer will translate the above into Machine Code and execute it for us. Of course, this is a slow process because of the translation that must happen before the machine code is execute. Please note I am trying to keep it simple here and not going into detail so as not to complicate things for beginners but in fact the process is more complex than what I explained. What is Assembler? An assembler is a program that helps the human being write assembly language. Assembly uses mnemonics (represented by 3 characters in the case of…

Sommario Un classico problema logico tratto da un best seller di enigmi e puzzle per C64. Viene proposta e sviluppata una soluzione molto più completa di quella fornita dal testo, applicabile ad una vastissima gamma di problemi analoghi ma anche ad innumerevoli situazioni di programmazione: dai gestionali all’automazione industriale, dai protocolli alla grafica. E' disponibile anche una versione PDF di quest'articolo ed i sorgenti presentati in formato ZIP. «È più facile quadrare un circolo che arrotondare un Matematico» (Augustus de Morgan, 1806-1871) 1 Introduzione. Scopo del presente articolo è l’illustrazione di un semplice problema che molti di noi «retroprogrammatori» si sono all’epoca divertiti a risolvere con l’ausilio del proprio PET preferito: una tipologia di problema che peraltro caratterizza anche molti rompicapo logici proposti dalle più note riviste di enigmistica. Il linguaggio è intenzionalmente informale, divulgativo e didascalico, scevro da particolari pretese di rigore, al fine di raggiungere il più vasto uditorio informatico possibile. L’articolo è organizzato in tre parti principali.

Nella prima parte si illustra il problema nella sua forma originale, proponendone anche una immediata traduzione dall’inglese. Nella seconda parte si presenta la scarna soluzione originale del testo. Nella terza e ultima parte si discute una soluzione completamente autonoma da parte del calcolatore, senza alcun passaggio manuale, rivelando la reale natura del problema e dell’algoritmo risolutivo, che si presta ad una scelta totalmente automatizzabile della soluzione corretta tra quelle potenzialmente valide. 2 Sarah’s Number. Il problema originale, a pagina 12 del testo [LS83], è caratterizzato dal numero progressivo 11. Eccone il testo completo: Last week while we were out sailing on the Henderson’s yacht, Julie, Ken, Liz, Morris and Naomi were trying to remember Sarah’s phone number. They all agreed on the prefix, but none of them could remember exactly the last four digits. They came up with these statements: Julie: There is a 9 in it. Ken: It is definitely higher than 5000. Liz: It is palindromic: it reads…