(Article by Phaze101) Intro Apologies I need to apologise to you all for publishing this article so late. I skipped the date by more than I planned to. As always life got in the way, especially work. I also had to do some other things that I felt I had abandoned for some time. The code of the article was ready immediately after Article 8 but to find time and write it all has taken longer than planned. Another reason why the articles are taking longer now is because to prepare the code, more research is involved, and the code is getting longer. Due to this, the articles are going to be released randomly and not on every Saturday. However, when there is a release in English, it will always be on a Saturday. The Italian version will follow later. Pastebin You will be delighted to know that from now on, the code will be on Pastebin. So, for those that

like to copy and paste, you now have this option. I might also include the previous code, depending on available time. Github In the future I might also use Github since there will be graphics and sounds to be loaded and so far, Pastebin doesn’t permit this. Eventually, it would be cool to have everything in one directory.   Print At From Previous Article The Commodore 64 doesn’t have a Print At command in Basic. However, it can achieve this in several different ways. In Article 8, we saw that by using some system routines like SetCursor (\$E50C) and PrintString (\$AB1E), we were able to tell the computer to print a string at a certain position. However, I think you all noticed that this was very slow, even in assembly. We therefore need a faster way of printing to the screen. To achieve this, we are going to build our own Print At routine and that is what we…

(Article by Phaze101) Stampare sullo schermo   Importante Ho dovuto prendere una pausa per motivi di lavoro, non potevo fare diversamente. Come per chiunque altro, anche io ho degli impegni per le quali devo decidere cosa è prioritario e cosa no. Inoltre, ho voluto mettere insieme una squadra per aiutarmi nella traduzione di questi articoli. Sono rimasto sorpreso dal numero di riposte ricevute a riguardo. Desidero ringraziare tutti quelli che mi hanno risposto e si sono adoperati per aiutarmi Articoli futuri Gli articoli stanno diventando più lunghi e complessi. Cercherò di mantenere il ritmo di un articolo a settimana, ma non escludo l’ipotesi di saltarne una occasionalmente. Inoltre, alcuni argomenti richiedono ulteriori ricerche. Non sono una enciclopedia e non conosco ogni singolo aspetto. Tutto ciò può richiedere del tempo. Articoli lunghi inoltre richiedono più tempo per essere tradotti in italiano. Sono fiducioso che questo aspetto diventerà più semplice con il team che mi supporta. Windows / Linux / MAC

Questo argomento potrebbe risultare un po’ controverso, ma vi chiedo di mettermi nei miei panni. Desidero insegnare il linguaggio assembly nella maniera più semplice possibile. E’ un requisito fondamentale per andare incontro a chi voglia imparare assembly.  Sfortunatamente, CBM Prg Studio gira solo su Windows. Credo sia l’ambiente di programmazione più semplice per chi sta iniziando. All’inizio ero indeciso tra CBM Prg Studio e Kick Assembler. Kick Assembler gira su tutte le piattaforme, ma non è così immediato come CBM Prg Studio e non dispone di un ambiente di sviluppo. Per cui, alla fine, ho optato per CMB Prg Studio. Capisco che potrebbero esserci alcuni di voi che usano solo Linux o Mac, e che potrebbero sentirsi esclusi, ma questo non è abbastanza per decidere di non utilizzare CBM Prg Studio. Ho deciso di dare priorità alla semplicità perché so che imparare l’assembly non è facile. Se lo strumento scelto non fosse sufficientemente semplice da usare, la situazione diventerebbe pesante. Scegliere…

(Article by Phaze101) Printing   Key Notes I had to take a break because work got in the way and I couldn’t do otherwise. Like everyone else I have commitments and need to do what is more important. Secondly, I wanted to set up a team to help me out with my articles. I was overwhelmed by the number of responses I got regarding this matter. I wish to thank all those that replied back to me and wanted to help out. Future Articles Articles are becoming longer and more complex. I will still try to maintain a weekly article, but I won’t exclude the possibility of occasionally skipping a week. Also, some topics need further research. I am not an encyclopaedia and do not know it all. This can take time. Longer articles also need more time to be translated to Italian. Hopefully this will become easier with a team behind me. Windows / Linux / MAC This may be

a controversial topic but I ask you to consider it from my point of view. I want to teach assembly in the simplest way possible. It is key to someone trying to learn assembly. Unfortunately, CBM Prog Studio only runs on Windows. I believe it is the easiest IDE program for a beginner. Initially I considered whether I should use CBM Prog Studio or Kick Assembler. Kick Assembler runs on all platforms, but it is not as easy as CBM Prog Studio and it has no IDE. In the end I decided to go with CBM Prog Studio. I realize that there might be some of you that use only Linux or Mac and they might feel excluded, but this still doesn’t justify the reason not to use CBM Prg Studio. I have decided to keep things as simple as possible since I know that learning assembly is not easy. If the tool I use is not easy enough…

(Articolo di Phaze101) Cancellare lo schermo   Perché cancellare lo schermo è importante? La pulizia dello schermo è un’operazione che si ripete spesso all’interno dei giochi. Cancellare lo schermo richiede del tempo. Se è necessario farlo più volte durante un gioco, allora può diventare un fattore importante e quindi c’è bisogno di una routine veloce. Ci sono diversi metodi per compiere quest’operazione. Con alcuni di questi mi trovo d’accordo, altri non mi piacciono affatto. Inoltre, a volte una routine veloce non è affatto necessaria. Dipende sempre da quando deve essere eseguita la routine all’interno del gioco. Come ho già dichiarato in altre occasioni, vorrei ricordare a tutti voi che non ho mai scritto giochi a livello professionale, quindi nei miei articoli non troverete routine ottimizzate e superveloci, anche se cercherò di occuparmene in parte. Detto questo, la serie di articoli è rivolta ai principianti ed in base al suo scopo didattico, cercare di capire i concetti della

programmazione è più importante. Metodo Uno – Utilizzare il Kernal In termini di codice, questo è il metodo più semplice per cancellare lo schermo ma è anche il metodo più lento. Anche se è il metodo più lento, viene utilizzato più spesso di quanto si pensi. Un esempio di applicazione è quando ci si trova nella schermata principale di un gioco e si sceglie di passare alla schermata delle istruzioni. In questo caso, non c'è bisogno di una routine ultraveloce per cancellare lo schermo e visualizzare le istruzioni. Il primo metodo di cui trattiamo utilizza il Kernal. Il Kernal è un blocco di codice che contiene numerose routine per gestire cose diverse del sistema. Come definito nel sito Wiki dedicato al C64: “Il Kernal è l’insieme di interfacce hardware di basso livello presente in tutta la serie di computer a 8 bit della Commodore, a cominciare dai Commodore PET. Il Kernal consiste di trentanove (39) funzioni che vanno dal controllo di input/output alla gestione dei…

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

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

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