(Article by Phaze101) PrintAT and Colour Update I have been debating with myself regarding how to handle support in relation to these articles. In the past I have given support to anyone that wrote to me via email, contacted me via FB or via Reddit, asked for help on one of the websites where these articles are published and so on. This was too hard to manage since the queries were coming from too many different places and sometimes, I lost track. Therefore, I decided to change this a little bit. It is taking too much of my time as is. I decided that from article 11 onwards, the only way you can get support is if you join the Phaze101 Facebook group and comment under the article. This should give me visibility of all issues, queries or comments in one place. Also, for sake of updates that I do from time to time on the previous articles, all updates

will be done on the PDF documents only. These are found on the Phaze101 FB group under the files section and on the RetroProgramming Italia (RPI) FB group under the files section. The Phaze101 FB group will hold the English Version of the articles and their updates. Likewise, the RetroProgramming Italia (RPI) FB group will hold both the English and the Italian version and their respective updates. I will not be updating anything else except these. To keep track of updates, I have updated the PDF article template to include a version number. Like this, things should be easier to manage since everything is in one place, or at least, two places. The future of these articles I like to keep things simple and I hope I have managed to achieve this so far. I also like to use simple English because I think of the many non-native English speaking out there that might be reading these articles. Also, but…

(Article by Phaze101) Introduzione Le mie scuse Ho bisogno di scusarmi con tutti voi per il ritardo nella pubblicazione di questo articolo. Ho saltato la data che avevo pianificato.  Come sempre la vita si è messa in mezzo, soprattutto il lavoro. Ho avuto anche altri impegni che trascuravo da tempo. Il codice di questo articolo era pronto immediatamente dopo l’articolo 8, ma trovare del tempo per commentarlo ha richiesto più di quanto avessi previsto. Un altro motivo per cui questo articolo ha richiesto più tempo è dovuto alla preparazione del codice, che ha richiesto maggiori ricerche ed è piuttosto lungo. Per tutti questi motivi, i futuri articoli saranno rilasciati senza programmazione e non tutti i sabati. Tuttavia, quando ci sarà un nuovo articolo in inglese, sarà sempre di sabato. La versione in italiano sarà pubblicata qualche giorno dopo. Pastebin Sarete felici di sapere che da oggi il codice è su Pastebin. Quindi, per quelli che amano il copia e

incolla, sappiate che avete anche questa opzione. Potrei anche inserire il codice precedente, dipende dal tempo che avrò a disposizione. Github In futuro, potrei anche usare Github dal momento in cui ci saranno da caricare la grafica, i suoni e molto altro, cosa che Pastebin non permette. Senza dubbio è meglio avere tutto in un’unica cartella. Print At Dal precedente articolo Il Commodore 64 non ha un comando Print At (Stampa A) in Basic, ma si può ottenere con metodi diversi. Nell’articolo 8, abbiamo visto come attraverso l’uso di alcune routine come SetCursor (\$E50C) e PrintString (\$AB1E) siamo stati capaci di dire al computer di stampare una stringa in una posizione precisa. Tuttavia, io ritengo che questa strada sia veramente lenta, anche se eseguita in assembly. Abbiamo quindi bisogno di essere più veloci nella stampa nello schermo. Per raggiungere il nostro obiettivo, dobbiamo costruire la nostra routinr Print At ed è quello che vi mostrerò in questo articolo. I concetti del…

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