Ovvero: come suonargliele (le voci) a colpi di DATA 1.    Introduzione Il Commodore 64 è una macchina meravigliosa, su questo saremo tutti d’accordo, ma il basic v2 è un po’ ostico quando si voglia fare qualcosa di più che stampare “ciao” in un ciclo. In particolare, l’accesso alle funzionalità grafiche e sonore è famoso per il ricorso

massivo a pokes vari, nessuna scorciatoia, nessuna pietà! Soffermandoci sul sonoro, quindi sul SID, l’integrato che svolge a meraviglia tale compito, ci si imbatte per lo più in listati che insegnano come suonare una nota, al più una canzoncina a singola voce, usando tipicamente l’istruzione for…next come metodo per separare una nota da un’altra. (altro…)

Ma ora che abbiamo tutte queste belle TPP (vedi Sfide Matte-matiche #00) cosa ce ne facciamo ? Mi sembra ovvio, mettiamoci a costruire una casa con un bel po’ di mattoni di Diofanto. No, Diofanto non è un materiale particolare e

tantomeno una imprecazione a seguito di una badilata sui denti. Diofanto fu un antico matematico (https://it.wikipedia.org/wiki/Diofanto_di_Alessandria ) il cui nome viene usato anche per identificare le equazioni da risolversi per numeri interi (equazioni diofantine o diofantee appunto). (altro…)

La sfida “pilota” (si lo ammetto non ero sicuro avrebbe potuto interessare), imperniata sulla ricerca delle Triplette Pitagoriche Primitive, è stata ampiamente raccolta e retro-elaborata attraverso l’uso di

vari linguaggi e su vari computer. Personalmente sono molto contento dal numero di riscontri ottenuti e ancor di più dall’altissima qualità e varietà dei lavori pervenuti. (altro…)

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

by Claudio Parmigiani PURPOSE Allow the Apple-1 computer to generate sounds and simple melodies via BASIC or Assembler. IMPLEMENTATION A SID (Sound Interface Device, MOS 6581) has been used. It is addressed through a TTL logic, which will be explained later. Some circuitry has been added to ensure compatibility with the MOS 8580. An amplifier has also been added in order to provide an adequate output level. CIRCUIT POWER 5V is taken directly from the Expansion Bus 12V (for 6581) or 9V (for 8580) is derived from the “12V Unregulated” on the Expansion Bus. Raw voltage is about ~20V (not stabilized). A jumper is used to select the right voltage. FILTERS Typical 6581’s CAP1/CAP2 filter capacitors value is 470pF. These capacitors are present on the board. It is possible to select other capacitors by switching another couple of jumpers. Alternative capacitors must be connected to the appropriate sockets. AUDIO

AMPLIFIER A simple 1-transistor (2N2222) audio amplifier is used. Output is connected to a stereo 3.5mm jack female connector. MISCELLANEOUS POTX/POTY SID’s pin are connected to auxiliary connector, for future use. ADDRESSING Connections to /RES, R/W and ɸ2 signals are by the book, just like Data Bus (D0 to D7) and Address Bus (A0 to A4) signals. Chip Select (/CS) signal is derived from a TTL 74LS10 logic port, which provide a logic LOW signal when: Address bus is $C8xx ɸ2 is at logic HIGH level. $C8xx address is resolved as follows: HEX: C 8 0 0 ADDR LINE: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 BIN: 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 ↓ ↓ ↓ ↓ ACTION: pick "R" LOW signal pick A11 HIGH signal does not care does not care “R” signal is usually hard-wired on the CHIP SELECT section of the Mainboard of the Apple-1. It is usually connected…

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

(Article by Phaze101) Clearing the Screen   Why clearing the screen, is important? During a game clearing the screen can happen several times. Clearing the screen is time consuming. If this is happening several times during your game, it becomes an important factor which means you will need a fast routine. There are different methods of doing this. Some I agree with and some I do not like at all. Also, there are times when a fast routine is not necessary. It always depends where the routine is in the game. As I have stated this many times now, I would like to remind you all that I never wrote games as a professional, so the optimised, fast routines won’t be found here, although I try to cover some of this. Having said that this series of articles is aimed at beginners hence trying to understand concepts is more important in these cases. Method One – Using the Kernal In terms

of code this is the easiest method of clearing the screen. It is also the slowest method of clearing the screen. Although it is the slowest method to clear the screen there is use for it more than one thinks. An example of this is when you are on the main screen of the game and select to go to the instructions screen. It doesn’t need to be a fast routine to clear the screen and display the instructions. This method is using the Kernal. The Kernal is a block of code that has several routines in it to handle different things. As defined on the C64 Wiki “The Kernal was the set of low-level hardware interfaces repeated throughout Commodore's 8-bit computer series, beginning with the Commodore PET The Kernal consisted of thirty-nine (39) functions ranging from Input / Output control to file management, memory management, console management and time management. These functions formed the basis for higher level routines in the…