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

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

(Articolo di Emanuele Bonin) PartyPlanner_Sorgente (file .asm) Party Planner Sinceramente non ho idea se l’immagine che vedete in testa di questo articolo vi susciti qualche emozione, ma a me ha sempre fatto un effetto misto di sorpresa e ammirazione essendo associata ad un articolo che non ho mai scordato. L’articolo in questione si trovava nel numero di novembre del 1987 di “Le Scienze” (traduzione italiana di Scientific American), l’articolo è stato scritto dal grande A.K.Dewdney, il quale non ha bisogno di presentazioni. Nell’articolo Dewdney ha descritto come creare un programma in grado di simulare le interazioni umane ad una festa. Questa cosa mi ha affascinato sin da quando, “giovine”, imberbe ed aspirante nerd, lo lessi la prima volta e riuscii a riprodurlo in un C64, programmando con l’amato Basic. Col passare del tempo lo riscrissi anche in altri linguaggi e su computer più veloci, se non altro per dare un po' di sprint al party, ora sono tornato all’adorato biscottone color crema (emulato sigh), ma

stavolta utilizzando l’assembly. Let’s party “Recentemente ho dato un ricevimento a cui non ho potuto partecipare di persona.”, così iniziava Dewdney sul suo bellissimo articolo, e fu dopo aver letto quelle parole che decisi di dare anch’io il mio primo ricevimento, ora, con altri mezzi, ho dato un altro ricevimento, ma, al contrario di Dewdney, ho trovato il modo per essere presente in esso. Ho quindi organizzato una festa ed ho invitato tutta la redazione di 8BRPI. Il fine ultimo di “Party Planner” (o PP, così chiamerò il programma) è quello di dare un’idea di come potrebbe svolgersi la festa. Le simpatie e le antipatie tra le persone sono cosa normale e squisitamente umana, e saranno proprio questi sentimenti che guideranno i movimenti della festa, le persone tenderanno ad avvicinarsi tra di loro se si conoscono o provano attrazione, oppure si allontaneranno in casi totalmente opposti o ancora si rincorreranno se sussistesse una sorta di…

(Article by Phaze101) What is C64 Bedtime Coding? This is a series of articles related to the 6502 Assembly language programming on the Commodore C64. The intention is to learn this while having fun. We will achieve this objective by writing simple games. For who is it These tutorials will be mainly aimed and focused for beginners who want to learn to write assembly language. Also, it is for those that want to write games for the C64 using assembly. My aim is to show you simple things that can get you to achieve this goal of writing your own games and at the same time learn the assembly language. If you are one of those people that always wanted to learn how to write games on the C64 and you never managed to learn assembly then this series is for you. Please note that I will keep things simple and will not go into detail so as not to

confuse beginners. Reflect for a moment We all like playing games, right? Have you ever wondered and thought about how games are done? We are all fascinated with demos where coders show what they can do by pushing the hardware to the limits but how is all this possible? Does it seem something that it is impossible for you to do? Do you think that you are not capable of doing so? Well let me assure you that you do not need to be a genius to write simple games. All you need is patience. Writing games in Basic is simple compare to writing in Assembly but with patience and knowing small simple things you can achieve a lot. With patience you will be able to push the hardware to the limits and achieve greater things that Basic can’t give you. What you need to know There are a few things that you need to know to code in assembly…

(Articolo di Phaze101) Che cos'è C64 Bedtime Coding? E’ una serie di articoli relativi alla programmazione in linguaggio Assembly 6502 sul Commodore C64. L'intenzione è di imparare a programmare divertendosi e raggiungeremo tale obiettivo scrivendo semplici giochi. A chi è rivolto? Questi tutorial saranno principalmente mirati ai principianti che desiderano imparare a scrivere in linguaggio assembly e, in particolare, a coloro che vogliono scrivere giochi per il C64 in questo linguaggio. Il mio obiettivo è quello di mostrarti cose semplici che possono aiutarti a raggiungere questo obiettivo scrivendo giochi e imparando al contempo il linguaggio assembly. Se sei una di quelle persone che hanno sempre voluto imparare a scrivere giochi sul C64 e non sei mai riuscito a imparare l’assembly, questa serie fa per te. Nota che manterrò le cose semplici e non entrerò nei dettagli per non confondere i principianti. Riflettete per un momento A tutti noi piace giocare, vero? Vi siete mai chiesti come sono fatti

i giochi? Siamo tutti affascinati dalle “Demo”, in cui i programmatori mostrano cosa possono fare spingendo l'hardware al limite, ma come è possibile fare tutto ciò? Ti sembra una cosa impossibile da realizzare? Pensi di non essere capace di farlo? Bene, ti assicuro che non è necessario essere un genio per scrivere giochi semplici. Tutto ciò di cui hai bisogno è la pazienza. Scrivere giochi in Basic è più semplice rispetto a scriverli in Assembly, ma con un po’ di pazienza e l’apprendimento di semplici trucchetti potrai ottenere grandi risultati. Armati quindi di impegno e buona volontà e anche tu sarai presto in grado di spingere l'hardware ai limiti e ottenere così risultati più avanzati di quelli che il Basic può offrirti. Cosa hai bisogno di sapere? Ci sono alcune cose che devi sapere per poter programmare in assembly e scrivere giochi: Conoscere il sistema numerico (binario e esadecimale)Conoscere e comprendere il set di istruzioni del 6502 e conoscere lo “Status Register”.Conoscere…

In queste righe farò un excursus sulle notevoli capacità del Basic 7.0 incorporate nel Commodore128, ultimo computer ad 8-bit della Commodore uscito nel 1985. Innanzi tutto una breve storia: il C128 era nato per sostituire il C64 e le sue capacità lasciavano presagire il meglio. Aveva infatti 3 modalità operative: C128 che usava una CPU 8502 con 128 Kbyte RAM; una modalità C64 uguale identica al C64 compatibile con tutte le sue periferiche e cartucce i classici 64Kbyte RAM; ed in più una CPU Z80 per far funzionare il C128 in modalità CP/M, il predecessore di Ms-Dos. Sia la modalità C128 che CP/M usando un monitor Commodore come il 1084 permetteva di usare una modalità ad 80 colonne con risoluzione 640x200 il che gli consentiva di fungere anche da macchina per ufficio. Vendette svariati milioni di esemplari ma venne ben presto dismesso per due motivi principali: l’enorme successo del C64 (in quegli anni rinnovato nella veste C64C simile al C128)

e al fatto che la Commodore ormai si stava impegnando a fondo nel suo primo computer a 16-bit, l’Amiga 1000 con CPU Motorola 68000 come l’Apple Macintosh e l’Atari ST. Il C128 resta quindi l’ultima macchina 8-bit prodotta dalla Commodore. Qui ci concentreremo sulle caratteristiche uniche del BASIC 7.0: è quindi inutile concentrarci sulle capacità di base del tutto uguali a quelle del C64 ma metterò in rilievo le differenze coi BASIC degli altri 8-bit Commodore. Comandi essenziali da disco Per formattare un disco basta il comando HEADER “nome_disco”, id ; con uno solo non serve. Quindi basta ad esempio HEADER “my-disk” per caricare un programma basic da disco DLOAD “nome_prog”, id per salvarlo DSAVE “nome_disco”, id per verificare se il programma nel computer è uguale a quello scritto su disco DVERIFY “nome_prog”, id in tutti questi comandi se non si inserisce l’id del disco si presuppone il device numero 8; se si hanno due drive si può scrivere ad…