Ready64 Forum

Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: Naufr4g0 - 30 Ottobre 2008, 22:55:06

Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 30 Ottobre 2008, 22:55:06
 Salve a tutti mi presento: mi chiamo Davide e come, presumibilmente, tutti voi qui iscritti sul forum sono stato un grande appassionato del gioco su quella mitica scatolona di colore marroncino (qualcuno l'aveva bianco e di forma diversa) di nome Commodore 64.
Nella mia fase preadolescenziale avevo dedicato anima e corpo alla stesura di programmi in Basic cercando di emulare i grandi giochi commerciali, ma ahimè il Basic non era fatto per creare videogiochi e anche se si potevano usare gli sprites hardware con qualche escamotage, avveniva tutto a una lentezza tale da fare desistere dagli intenti il più intrepido programmatore del suddetto linguaggio.
Ora io sentivo sempre dire assembler assembler e la cosa mi incuriosiva molto, ma la ricerca di riviste specializzate era ardua nel mio paesello, trovavo le riviste che parlavano di giochi, ma poco e niente sulla programmazione.
Adesso dopo circa 20 anni ho deciso che voglio capirci qualcosa. Mi incuriosisce davvero tanto. Sarei anche contento soltanto di riuscire a spostare uno sprite usando l'assembler.
Qualcuno mi potrebbe suggerire una guida per cominciare dalle basi?
Io so programmare in altri linguaggi come C++ e Java, quindi posso buttarmi direttamente sul come e non sul perchè della programmazione.
Un'altra cosa: ho letto su questo forum che usate delle etichette per separare i frammenti di codice, ma si scrivono realmente queste etichette quando si programma o sono semplicemente dei metodi per semplificare la lettura quando si postano i codici?

Grazie in anticipo a chiunque voglio darmi dei chiarimenti,
Davide

EDIT: Ho provato a scrivere un po' di codice utilizzando Final Cartridge III e il comando MON dall'interprete basic. C'è di meglio o va bene anche questo?
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 31 Ottobre 2008, 08:42:21
 Hai già esperienza di linguaggi ad alto livello, che si chiamano così perchè ben sai che vengono tradotti da appositi SW (compilatori) in Linguaggio Macchina.
Quest'ultimo altro non è che la configurazione di byte da mandare in pasto al processore che, essendo particolarmente ostica, per essere resa lavorabile dagli utenti viene addolcita con degli assemblatori che sono in realtà degli editor specializzati che permettono con delle utility di semplificare la vita al povero programmatore senza cambiare la natura del linguaggio stesso.
Sperando di non aver detto troppe fesserie, ti invito intanto a leggere
http://it.wikipedia.org/wiki/Assembly (http://it.wikipedia.org/wiki/Assembly)
in modo da avere un'idea della situazione.


 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 31 Ottobre 2008, 15:31:05
 Ti ringrazio tanto per l'intervento, ma quello che mi hai detto già più o meno lo sapevo.
Infatti io cercavo un manuale valido per cominciare a scrivacchiare qualcosa in assembler e per avere consiglio su quale compilatore (o bisogna dire assemblatore?) utilizzare.
Ieri cliccando qui e li sui link ho trovato Turbo Assembler che sembra fatto ottimamente e mi permette di utilizzare delle label che semplificano il lavoro.
Cercavo pero' una guida per programmare. Ne ho trovate alcune ma non sono organizzate come dei tutorial, ci sono elenchi di istruzioni e codici da copiare... ma volevo qualcosa di più organizzato. :/
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Cbm - 31 Ottobre 2008, 18:22:40
 Ciao, hai provato a vedere se nella sezione libri del sito c'è qualcosa che può fare al caso tuo?
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: MEGANOID - 31 Ottobre 2008, 18:29:26
 Ciao,

qui troverai molte cose interessanti:

http://ready64.org/smf/index.php?topic=1000.0 (http://ready64.org/smf/index.php?topic=1000.0)

                                                                          :D  
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 31 Ottobre 2008, 18:59:51
 Mamma mia ho scaricato un mare di roba, sulla pagina suggeritami da Meganoid (che comunque avevo già adocchiato nelle ultime ore) ho trovato un tutorial che funziona da c64 che sembra molto interessante . Staremo a vedere.
Turbo Assembler è buono come compilatore? Mi piace che si possono usare le etichette che era quello che cercavo.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: eregil - 31 Ottobre 2008, 19:03:59
 Assembler != Compiler, quindi non è un "compilatore" ma un "assemblatore", come avevi intuito qualche post più su.
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 31 Ottobre 2008, 19:18:43
Citazione da: "eregil"
Assembler != Compiler, quindi non è un "compilatore" ma un "assemblatore", come avevi intuito qualche post più su.
Eh si infatti non sapevo come chiamarlo... =)
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 03 Novembre 2008, 14:21:48
 La documentazione che devi cercare per imparare il linguaggio macchina riguarda il processore, poi per fare diagrammi di flusso allora ti serve anche sapere COME il processore sia implementato nel sistema HW.
Per il processore 6510 devi in pratica rifarti al 6502 da cui deriva (il 6510 ha dei piedini che fanno da PIO che lo rendono kustom).
http://it.wikipedia.org/wiki/MOS_Technology_6510 (http://it.wikipedia.org/wiki/MOS_Technology_6510)

Prova ad esempio in
http://6502.org/documents/datasheets/ (http://6502.org/documents/datasheets/)
a cercare i dati dei processori, salta le specifiche HW e vai al dizionario dei codici operativi.
Certo devi sapere cosa è un registro, a cosa servono i FLAGs, cosa vuol dire "puntare", ecc..
Nel caso avessi delle lacune a riguardo ti consiglierei un libro cartaceo da ITIS tipo... "sistemi a microprocessore" che magari trovi usato in qualche bancarella specializzata in testi scolastici.

Nei link suggeriti dagli altri trovi informazioni su come il processore sia implementato nel C64, e quindi cosa il 6510 può "tirar fuori" dall'HW.


A disposizione
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 03 Novembre 2008, 19:36:03
Citazione da: "Naufr4g0"

Ora io sentivo sempre dire assembler assembler e la cosa mi incuriosiva molto, ma la ricerca di riviste specializzate era ardua nel mio paesello, trovavo le riviste che parlavano di giochi, ma poco e niente sulla programmazione.
Adesso dopo circa 20 anni ho deciso che voglio capirci qualcosa. Mi incuriosisce davvero tanto. Sarei anche contento soltanto di riuscire a spostare uno sprite usando l'assembler.
Qualcuno mi potrebbe suggerire una guida per cominciare dalle basi?
Pensa che io ho imparato a programmare in assemblY proprio sul C64, e proprio grazie alla rivista che questo sito mette a disposizione gratuitamente, Commodore Computer Club!

Potresti... scaricarti tutti i numeri e studiarteli!  :D  Ne leggi uno al mese, come facevo io quando lo compravo in edicola...

Peccato che si possa scaricare solo una pagina per volta, e ogni rivista sia fatta di 90 pagine!!!
Amministratori, perche' non mettete online ZIP singoli, uno per ogni rivista? Tanto ormai c'e' l'ADSL...  :metallica: Se vi serve spazio, su Altervista vi regalano 200MB, cioe'  lo spazio per piu' di 20 riviste complete, ma pagando si puo' avere anche spazio in piu' (non mi ricordo se si paga una-tantum).

Cmq per me non fu sufficiente, in effetti, la sola rivista, dovetti trovarmi (faticosamente) un bel librone cartaceo sull'assembly del c64!

Nota bene: assemblY, non assemblER; l'assembly è il linguaggio, l'assembler è il programma per compilare i sorgenti in assembly.

E il linguaggio macchina invece è l'insieme di zeri e uni in cui alla fine risulta tradotto un qualunque programma, assembly, C o java che sia.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 03 Novembre 2008, 22:46:37
 Una risposta agli ultimi due post:
Quindi ho capito che mi suggerireste un manuale cartaceo.
Sarebbe interessante, ma dovrei trovarlo per pochi euro. Visto che ero mosso solo curiosità e non volevo andare troppo avanti. Poi, non so, magari m'appassiono.. :'D

@mces: purtroppo quelle lacune che tu dici in effetti ce le ho. Però stavo leggendo un tutorial che qualcosa me la sta chiarendo.

@jumpjack: Ho visto la rivista CCC e sembra interessante, ma poco pratica da consultare... (ci fosse magari un pdf per ogni numero!)
Tra l'altro non parla solo di assemblY e quindi devo cercare le pagine giuste a vista dall'anteprima delle immagini... :/
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 04 Novembre 2008, 07:10:07
 Esperienza personale:
all'ITIS ho imparato (testo cartaceo come da suggerimento) a programmare lo Z80 che è molto didattico (formativo), a casa ho imparato il 6510 (6502) con assembler prima in basic fatto da mio fratello (un mero traduttore assembly->linguaggio macchina) e poi con il CHAMP assembler.
Per professione anni dopo programmai gli ST6 (microCONTROLLORI single-chip).

Questo per dire: l'architettura base e il funzionamento di fondo è comune a TUTTI i microprocessori/microcontrollori e una volta imparato è bagaglio culturale, una fatica fatta una volta sola per tutte le volte che vorrai imparare un micro nuovo.

certo, lo sforzo non è gratis ma se hai passione è più leggero, quindi decidi tu: se credi che ti serva anche per il futuro, magari pure lavorativo, allora potrebbe essere il caso di imparare a programmare in codice macchina, e quindi per didattica ti consiglio un testo pensato per la didattica (dei tutorial ho diffidenza... un buon testo rimane pronto sulla mensola o sfogliabile pure durante una seduta al bagno....).

Se era solo una punta di curiosità allora
http://it.wikipedia.org/wiki/Assembly (http://it.wikipedia.org/wiki/Assembly)
e quindi seleziona "Guida completa all'Assembly" (quasi a fondo pagina).
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 04 Novembre 2008, 08:23:37
 Ogni storia è diversa, ma io studiai (fine anni '80) su questo:
http://usato.unilibro.it/site/product_used...d=31092&idaff=0 (http://usato.unilibro.it/site/product_used.asp?id_used=31092&idaff=0)
e non mi risulta che le architetture base dei processori/controllori siano mai cambiate...
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 04 Novembre 2008, 09:23:40
 si potrebbe provare a cercare su google queste parole chiave, e vedere cosa ne esce...
registri
program counter
accumulatore
indirizzamento
carry
rilocabile
ALU
shift
flag

Magari da qualche parte esiste un buon tutorial in italiano, chissà...

Non conosco tutte le traduzioni in inglese di questi termini.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 04 Novembre 2008, 09:34:46
 Ah, un'altra cosa fondamentale è una MAPPA DI MEMORIA del processore su cui si intende programmare (il 6502 nel C64, come detto): la mappa di memoria indica dove bisogna leggere/scrivere per accedere ai caratteri dello schermo o ai singoli pixel, dove sono le varie routine che si occupano di eseguire i vari compiti ELEMENTARI, come leggere la tastiera, stampare un carattere, attivare uno sprite...

Pero' alcune mappe di memoria contengono solo un elenco di registri, non un elenco di routine, bisogna trovarne una completa... e commentata!
Forse da qui si puo' trovare il link giusto...:
http://www.devili.iki.fi/Computers/Commodore/ (http://www.devili.iki.fi/Computers/Commodore/)

Un disassemblato commentato sarebbe l'ideale per iniziare a capirci qualcosa.

In italiano non trovo niente, ma intanto ecco l'elenco completo dei comandi del 6502 in inglese:
http://www.obelisk.demon.co.uk/6502/reference.html (http://www.obelisk.demon.co.uk/6502/reference.html)

EDIT:
Ho trovato un libro cartaceo.. online:
http://www.atariarchives.org/mlb/ (http://www.atariarchives.org/mlb/)
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Raffox - 04 Novembre 2008, 10:27:34
 
Citazione da: "jumpjack"
EDIT:
Ho trovato un libro cartaceo.. online:
http://www.atariarchives.org/mlb/ (http://www.atariarchives.org/mlb/)
Occhio però alla sintassi dei prg in BASIC, qualora li digitassi, perchè sono presenti errori: DATTA anzichè DATA, ADRES al posto di ADDRESS.

Se proprio sei interessato ad apprendere (bene) la programmazione in Assembly e proprio non vuoi fare a meno di un supporto cartaceo, ti consiglio di:

- setacciare eBay e, con un pò di fortuna, acquistare per pochi Euro un libro relativo all'argomento (il migliore è: Programmazione del 6502, Rodnay Zaks);

- apprendere la struttura della mappa di memoria nonchè l'uso dei comandi Assembly e di un compilatore Assembler (ti consiglierei in proposito la versione portata avanti da iAN_CooG del DASM (http://iancoog.altervista.org/C/dasm2.20.07-iAN_Rev_L.rar));

- impratichirti facendo tanto de-engeneering, ossia disassemblando programmi altrui al fine di capirne il funzionamento (ad esempio, qui (http://cadaver.homeftp.net/), nella sezione RANT).

Tutto ciò, naturalmente, facendo ampio uso del prezioso materiale disponibile ai link forniti precedentemente dagli altri utenti!
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 04 Novembre 2008, 12:07:14
 sconsiglio vivamente l'apprendere dagli esempi: non sempre sono istruttivi, a volte sono criptici, spesso non esaustivi e sicuramente non sono didattici.
anche imparare meta-linguaggi per gestire l'assembly è una stupida perdita di tempo, basta saper usare un assembler entry-level e si può fare TUTTO.

Il 6502 NON ha mappa di memoria, se mi escludete la PIO integrata nel 6510, i registri e le peculiarità della pagina ZERO e UNO (rispettivamente per i puntatori e per lo STACK), la mappatura appare quando si parla del mondo esterno a cui è collegato il processore, nel nostro caso l'implementazione è l'HW del C64,
che è rappresentata nel manuale del C64 (anche in quello utente? nel "reference guide" sicuro!).
Le uniche entità di memoria che si trovano NEL processore sono i suoi registri (architettura comune a TUTTI i processori/controllori), la cui funzione e specializzazione trovi sia sul "reference guide" che nel link del "6502.org" che ti avevo postato prima.

Il libro su cui ho studiato io e che riporta VARIE implementazioni su VARI processori e controllori inizia trattando appunto l'architettura di un GENERICO processore per poi specializzare il discorso sulle varie macchine: questo è quello che chiamo appunto approccio didattico, se poi consideri che è per studenti di mediasuperiore (linguaggio e spiegazione dei concetti al relativo livello) credo che possa essere un buon libro (lui o un equivalente), considera che sul sul link di prima il libro costa 10euro, su e-bay 20 e sulla bancarella sotto casa.... vedi tu!
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 04 Novembre 2008, 14:34:08
 Ho trovato una guida in italiano alla programmazione del c64 in assembly!
http://www.bertinettobartolomeodavide.it/p...ODORE%2064.html (http://www.bertinettobartolomeodavide.it/programmazione/commodore64/PROGRAMMAZIONE%20LINGUAGGIO%20MACCHINA%20COMMODORE%2064.html)

NOn capisco perche' usa i NUMERI invece degli mnemonici per i comandi, ma vabbe'...
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 04 Novembre 2008, 15:24:43
 Mamma mia quanto materiale in poco tempo. :)
Grazie a tutti
Adesso dovro' spulciarmi un po' di roba, vediamo cosa riesco a fare.
Nel tutorial che avevo trovato stavo facendo la lezione sui flag, ma da una prima lettura c'ho capito poco. Capisco che è un po' complesso. Purtroppo non lo posso studiare come vorrei perchè ho la laurea a cui pensare.
Peccato inoltre che l'informatica non sarà mai la mia professione, visto che sono un Ing. Civile. :') E' già tanto che mi servirà utilizzare programmi ad altissimo livello, come il Matlab.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 04 Novembre 2008, 16:01:36
 Questo è bellissimo: un emulatore di 6502 in javascript!!!
http://www.6502asm.com/ (http://www.6502asm.com/)

Gli indirizzi di memoria non corrispondono a quelli del c64, ma i comandi ASM si'.
La memoria video per esempio va da $200 a $5ff invece che da $3e8 a $bb8 , ed è fatta di 1024 byte (32x32) invece che 1000 (40x25).

 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Roberto - 04 Novembre 2008, 16:40:29
 
Citazione da: "Naufr4g0"
Ho visto la rivista CCC e sembra interessante, ma poco pratica da consultare... (ci fosse magari un pdf per ogni numero!)
Tra l'altro non parla solo di assemblY e quindi devo cercare le pagine giuste a vista dall'anteprima delle immagini... :/
Timidamente segnalo l'esistenza di un sommario testuale che semplifica la consultazione della rivista: http://ready64.org/ccc/sommario.php (http://ready64.org/ccc/sommario.php)
Inoltre, generalmente a pagina 3, c'è comunque la scansione con il sommario, ben riconoscibile anche dalla miniatura.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 04 Novembre 2008, 17:06:41
Citazione da: "Roberto"
Citazione da: "Naufr4g0"
Ho visto la rivista CCC e sembra interessante, ma poco pratica da consultare... (ci fosse magari un pdf per ogni numero!)
Tra l'altro non parla solo di assemblY e quindi devo cercare le pagine giuste a vista dall'anteprima delle immagini... :/
Timidamente segnalo l'esistenza di un sommario testuale che semplifica la consultazione della rivista: http://ready64.org/ccc/sommario.php (http://ready64.org/ccc/sommario.php)
Inoltre, generalmente a pagina 3, c'è comunque la scansione con il sommario, ben riconoscibile anche dalla miniatura.
Grazie per il consiglio.
Non avevo notato ci fosse il sommario. :)
Cmq la difficoltà nella consultazione, da me lamentata, nulla vuole togliere alla qualità del lavoro svolto che ho apprezzato molto in ogni caso.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Raffox - 04 Novembre 2008, 17:59:31
 mces, al di là del modo che hai di scrivere (a tratti presuntuoso), trovo questo tuo intervento particolarmente fastidioso ed irritante.

Intanto ci sono mille modi di apprendimento ed ogni utente deve sentirsi libero di adottare la metodologia di studio che più gli si confà.

Fatta questa scontata premessa, ti rispondo in questo modo:

1) il reverse engineering è una procedura applicata dalla stragrande maggioranza dei programmatori seri, e sicuramente è un validissimo modo di fare didattica specialmente per 'scoprire' certi segreti/perle di programmazione. Forse tu specificatamente avrai avuto difficoltà nello studiare lavori altrui, io invece ne ho tratto sempre utilissimi insegnamenti. Certo occorre avere il buon senso di scegliere programmi decenti se si desidera essere facilitati nel processo di apprendimento, ma ciò non toglie che anche da programmi più bislacchi si può sempre imparare, se non altro come ottimizzarli o fixarli!

Mi risulta assai difficle non contestare le che hai appenna scritto... Se, come dici, 'sconsigli vivamente' di apprendere da esempi altrui, mi spieghi allora DA DOVE un utente, che muove i primi passi nella programmazione in assembly, può conoscere le tecniche di programmazione? Danotare che anche i libri sono SEMPRE corredati da listati altrui: non è questo un processo di reverse engineering??

Gli esempi sono SEMPRE istruttivi, anche se presentano bug... il fatto stesso di riconoscerli è chiaro segnale di avanzamento e miglioramente delle proprie conoscenze!

2) è ovvio che, consigliando di studiare la mappa di memoria,  mi riferisco specificatamente a quella del Commodore 64. Tutto comunque deducibile soprattutto dal contesto generale (ti ricordo che questo è un sito dedicato al C64!)

3) Non è affatto vero che con un 'assembler entry level' si può fare TUTTO! Proprio perchè entry level, un assembler meno ricco di funzioni può andare bene per muovere i primi passi. Sicuramente si riveleranno comodi editor più avanzati ed 'intelligenti', magari anche per il solo fatto di semplificare certe procedure in fase di coding (proprio come le meta-tag).

4) Anche per quel che riguarda la scelta di un libro, i canali tramite i quali potersene appropriare sono diversi... però vorrei proprio vederti alla bancarella sotto casa tua mentre, guarda caso, trovi proprio il libro che cercavi per imparare l'assembly per C64! Saresti una vera mosca bianca.

Ah, dimenticavo... Il testo scritto da Rodnay Zaks, che tra l'altro è molto famoso tra gli addetti, è stato utilizzato anche da diversi noti programmatori italiani (vedi Marco Corazza, Federico Canetta etc.).
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 04 Novembre 2008, 18:15:14
 Beh anche io devo dire che gli esempi per me sono fondamentali, l'importante è non copiarli passivamente. Ne ho letto qualcuno è sono stati per me molto esaustivi, soprattutto per muovere i primi passi.
Per quanto riguarda la semplificazione del lavoro dovuto all'utilizzo di meta-tag, devo dire che è una comodità irrinunciabile e che tra l'altro non leva niente alla purezza dell'assembly. E' come avere un foglio di carta dove appuntiamo gli indirizzi utili per i salti. Tra l'altro immagino a quanto sarebbe scomodo aggiungere istruzioni tra una istruzione e l'altra, perchè dovremmo spostare tutto il codice in avanti.. :/
Mentre con assemblatori con Turbo assembler è tutto molto più comodo.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 04 Novembre 2008, 19:10:09
 ...io non ricordo di aver mai scritto UNA riga di codice in un nuovo linguaggio senza prima... averla copiata da qualcunaltro per poi modificarla!  :D

Cmq, a parte le polemiche, sono riuscito a trovare una interessantissima raccolta di "cartacei scannerizzati" sul commodore 64, incluso un libro che ho io, che ordinai per posta millenni fa e che credevo fosse introvabile! :huh:

Sembra che ormai su internet non ci sia niente di introvabile!!!

Ecco il disassemblato commentato  del sistema operativo del commodore 64!
http://www.1000bit.it/support/manuali/comm...ivo_del_C64.pdf (http://www.1000bit.it/support/manuali/commodore/Il_sistema_operativo_del_C64.pdf)

Ma vedo che ce ne sono anche molti altri, commentati e non.
http://www.1000bit.net/support/manuali/manuali.asp (http://www.1000bit.net/support/manuali/manuali.asp)

Mi ricordo quanto mi "intrippava" andare a ficcanasare negli "ingranaggi" del mio commodore 128, risalendo da un jump all'altro fino ad arrivare alle routine di decodifica della linea di comando!  :mattsid:
Addirittura scoprii dei comandi nuovi nel basic del 128 e nel suo "monitor", che "notificai" a CommodoreComputerClub, che pubblico' la mia lettera sui comandi "quit" e "off". Regalo un pupazzetto a chi riesce a ritrovarmi quale numero era!  :D Il comando che invece avevo scoperto per il monitor non me lo ricordo...

Tornando a come si impara l'assembly dai listati degli altri... ecco il mio, comparso su CCC #80 nel remoto 1990  :D (e chissenefrega della modestia  ;) )
http://ready64.org/ccc/80/032.jpg (http://ready64.org/ccc/80/032.jpg)
http://ready64.org/ccc/80/033.jpg (http://ready64.org/ccc/80/033.jpg)
http://ready64.org/ccc/80/034.jpg (http://ready64.org/ccc/80/034.jpg)
http://ready64.org/ccc/80/035.jpg (http://ready64.org/ccc/80/035.jpg)

...sto cercando di "ricostruire" l'hacking di cui si parla alla fine dell'articolo, che permetteva di scoprire un "easter egg" scurrile in Ghostbusters 2!  :D
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 04 Novembre 2008, 20:06:03
 Eh eh... funziona... :)
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 04 Novembre 2008, 20:26:58
Citazione da: "jumpjack"
Eh eh... funziona... :)
L'easter egg di ghostbusters 2 dici?
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: iAN CooG - 04 Novembre 2008, 20:29:30
Citazione da: "jumpjack"
invece che da $3e8 a $bb8
AUFFF... Non spariamo cifre a caso: $0400-$07e7.
Se non si ricordano, controllare i dox prima di postare. Non serve a nessuno scrivere inesattezze, anche se a leggere tutto il thread dall'inizio ce n'e' da mettersi le mani nei capelli, non staro' qua ad elencarle se no non ne usciamo piu'. :doh:  
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 05 Novembre 2008, 08:31:30
 Sono veramente spiacente che il mio stile di comunicare risulti irritante, me ne spiaccio, anche se non riesco a decodificarne il motivo visto che per stile anche quando voglio esprimere concetti categorici mi viene spontaneo usare termini (seguiti dalle motivazioni) come "scosnsiglio vivamente", dovresti, credo che, mi sembra, non credi che, ritengo.....
Non ho certezze da vendere, offro le mie opinioni che sono frutto della mia esperienza, e quindi puntualizzo:
nonostante questo sia un sito dedicato al mitico 64 ritengo che se una persona per passione impara a scrivere in LM magari può farlo in maniera che gli possa essere anche utile sul lavoro o sul curriculum vitae dove non puoi scrivere "ho imparato a copia-incolla ad usare un processore ma non ho capito cosa sono i FLAGs".
Forse NON hai imparato.
Avete mai appreso l'inglese da zero solo ascoltando la CNN?
Allora se con il 10..30% di sforzo in MENO si riesce a fare know-how perchè non consigliarlo? non mi sembra proprio di tradire la natura di un vecchio utente di C64, visto pure che anche per me il biscottone è stato una palestra di SW e HW (anche HW NON informatico!) che mi ha dato la possibilità di trovare un lavoro decente.
Per il testo: QUALUNQUE libro/tutorial/suocera che sia in grado di spiegare con un minimo di rigore l'architettura di un microperatore è appropriato, il riferimento al cartaceo su cui studiai è un mero riferimento bibliografico a piè di pagina (giuro che l'editore non mi passa la tangente..).
Sono ancora fermamente convinto che per chi inizia osservare il SW scritto dagli altri sia DELETERIO anche perchè sposta l'attenzione del neofita da "come funziona la CPU" a "quali compiti il SISTEMA è in grado di svolgere".
Sono due cose diverse e se vuoi fare il meccanico non devi studiare da autista.
(azzz.... sono riuscito a non dire "secondo me"!)
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 05 Novembre 2008, 08:46:02
Citazione da: "iAN CooG/HF"
Citazione da: "jumpjack"
invece che da $3e8 a $bb8
AUFFF... Non spariamo cifre a caso: $0400-$07e7.
Se non si ricordano, controllare i dox prima di postare. Non serve a nessuno scrivere inesattezze, anche se a leggere tutto il thread dall'inizio ce n'e' da mettersi le mani nei capelli, non staro' qua ad elencarle se no non ne usciamo piu'. :doh:
boh, veramente mi pareva di aver anche provato con poke 1000,1 ed era venuta una A in alto a sinistra, ma ho fatto duemila prove, magari mi so' confuso...  :stordita:

Citazione
L'easter egg di ghostbusters 2 dici?
si'.  :D  
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 05 Novembre 2008, 09:04:22
Citazione da: "jumpjack"

boh, veramente mi pareva di aver anche provato con poke 1000,1 ed era venuta una A in alto a sinistra, ma ho fatto duemila prove, magari mi so' confuso...  :stordita:

 
cavolo, è vero... ma allora dove ho scritto?!? cosa c'e' nella locazione 1000??  :huh:
mah.
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Raffox - 05 Novembre 2008, 11:55:20
 
Citazione da: "mces"
Sono veramente spiacente che il mio stile di comunicare risulti irritante, me ne spiaccio, anche se non riesco a decodificarne il motivo
Hmmm... sei veramente spiacente e te ne spiacci. OK! Figo!

Se non riesci a 'decodificare' (??) il motivo adesso ti aiuto io, ma considera questo mio post l'ultimo rivolto a te perchè non ho nè il tempo nè più la voglia di seguire le tue prese di posizione.

In due parole: se, a chi ne fa richiesta, un utente offre un consiglio e succede che tu non lo reputi compatibile al tuo modus operandi, sei CORTESEMENTE pregato di non demolire l'opinione altrui, tantomeno fare inutili e fastidiose pressioni su fattori che tu, e solo tu, consideri come migliore via d'apprendimento.

Ai presenti può non fregare quale libro, suocera (fai anche del triste spirito) o editor sia consigliato. La scelta rimane, grazie a Dio, personalissima e dettata unicamente dai propri gusti. Possono risultare utili i consigli di tutti, tanto i tuoi quanto i miei. Nello specifico se tu hai avuto il piacere di studiare su un libro per istituti tecnici e te la senti di proporlo a chi vuole iniziare, ben venga la tua dritta.
Lascia però spazio anche ai consigli di altri utenti, che una certa esperienza (forse) ce l'hanno... Non vado oltre per non infierire.

In questo mondo non esisti solo tu e il tuo testo ITIS.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 05 Novembre 2008, 12:22:37
 Innanzi tutto grazie per aver indicato le cose che di me infastidiscono, anche io oltre questo post non scriverò a riguardo e se riterrò il caso di comunicare ulteriormente a proposito con qualcuno lo farò in privato perchè di questo tema credo che freghi veramente poco agli altri....
Ho sempre ritenuto la mia e le altre opinioni di pari livello, ciò non toglie che io possa avere anche opinioni sulle opinioni altrui (e gli altri sulle mie!), ed è per questo che cerco di mettere sul piatto anche gli argomenti che mi hanno portato a farmi quell'opinione, in modo da poterle mettere alla prova degli altri.

Ritengo che se un neofita che vuole imparare ad eseguire processi di SINTESI inizia un cammino formativo autodidatta di ANALISI, per me sbaglia.
Ho già detto il mio pensiero a riguardo e non mi sembra che mi siano state date motivazioni contrarie sufficienti a riconsiderare la mia tesi.

La richiesta iniziale è stata discussa nei vari post in maniera molto variegata, ora sarà il buon senso del richiedente a formarsi un'idea a proposito, calzante con la propria situazione personale, e proseguire (o meno) per la strada che riterrà più opportuna senza che nessuno abbia ad offendersene.

Il mio spirito può non piacere, ma non possimo neanche escludere che un'esperta softwerista abbia un genero interessato all'assembly!!!

 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 05 Novembre 2008, 13:51:14
 che noia, quand'e' che si ricomincia a parlare di programmazione?
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 05 Novembre 2008, 14:30:38
 Hai ragione jumpjack,
allora visto che qualcuno aveva detto di non aver capito bene cosa fossero i FLAGs....

I FLAGs (bandierine) sono dei singoli BIT che hanno uno spcefico significato e che vengono modificati da alcune operazioni e consultati da altre, rappresentano la memoria di stato del processo.

Un esempio?
Prendiamo in esame come il controllore confronta tra loro due numeri (CMP), ebbene semplicemente li sottrae nell'ALU e pone a "1" il FLAG "Z" (flag deputato ad indicare un risultato uguale a zero), se vuoi che in questo caso il processo devi dalla sua linea saltando ad un altro punto del programma allora puoi mettere l'istruzione di salto condizionato BEQ (Branch on EQual) che salta se il FLAG di Z è settato ad indicare una comparazione tra due entità uguali, se vuoi il contrario metti l'istruzione BNE (Branch on Not Equal).
La cosa interessante è che il FLAG "Z" è settato anche da altre istruzioni così se trovi

LDA# 00h
BNE pippo

l'istruzione LDAimmediato zero caricherà in A il valore zero, questo setterà il flag Z che indica pure ugualianza, e quindi NON salterà a "pippo",
se il valore caricato fosse diverso da zero allora salterebbe a "pippo" perchè il flag di Z sarebbe resettato dall'operazione di caricamento.
Hai appena visto come il caricamento di un valore in una variabile porta a cambiare la strada del processo in maniera sintetica (buona programmazione) ma criptica.

Se ho scritto imprecisioni posso dire a parziale scusa che saranno circa 3 lustri che non programmo il 6510....
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 05 Novembre 2008, 14:50:41
Citazione da: "mces"
Hai ragione jumpjack,
allora visto che qualcuno aveva detto di non aver capito bene cosa fossero i FLAGs....

I FLAGs (bandierine) sono dei singoli BIT che hanno uno spcefico significato e che vengono modificati da alcune operazioni e consultati da altre, rappresentano la memoria di stato del processo.

Un esempio?
Prendiamo in esame come il controllore confronta tra loro due numeri (CMP), ebbene semplicemente li sottrae nell'ALU e pone a "1" il FLAG "Z" (flag deputato ad indicare un risultato uguale a zero), se vuoi che in questo caso il processo devi dalla sua linea saltando ad un altro punto del programma allora puoi mettere l'istruzione di salto condizionato BEQ (Branch on EQual) che salta se il FLAG di Z è settato ad indicare una comparazione tra due entità uguali, se vuoi il contrario metti l'istruzione BNE (Branch on Not Equal).
La cosa interessante è che il FLAG "Z" è settato anche da altre istruzioni così se trovi

LDA# 00h
BNE pippo

l'istruzione LDAimmediato zero caricherà in A il valore zero, questo setterà il flag Z che indica pure ugualianza, e quindi NON salterà a "pippo",
se il valore caricato fosse diverso da zero allora salterebbe a "pippo" perchè il flag di Z sarebbe resettato dall'operazione di caricamento.
Hai appena visto come il caricamento di un valore in una variabile porta a cambiare la strada del processo in maniera sintetica (buona programmazione) ma criptica.

Se ho scritto imprecisioni posso dire a parziale scusa che saranno circa 3 lustri che non programmo il 6510....
mi sa che sei "troppo avanti" per il Naufr4g0, non credo che sappia cos'e' l'ALU, che "vuol dire" CMP e BEQ,  "chi è" A e che c'entra pippo.  ;)

Dobbiamo aspettare che faccia lui le domande... o partire proprio da zero-zero, tipo:
"Un programma in assembly è una sequenza di comandi, detti anche MNEMONICI, perche' sono abbreviazioni (come LDA, STA, BEQ), ognuna delle quali corrisponde a un numero da 1 a 255, numeri che il computer interpreta come istruzioni. Ma siccome per noi umani lavorare coi numeri è difficile, ad ogni numero è stato associato uno "mnemonico".

In assembly, a volte chiamato anche impropriamente Linguaggio Macchina e abbreviato in LM, non esistono istruzioni complicate: puoi lavorare solo su singoli byte, e molto spesso si lavora sui singoli bit, accendendoli, spegnendoli o leggendoli, e agendo di conseguenza. Quindi non esiste l'istruzione VARIABILE1 = VARIABILE2 + 7, anzi, nn esistono proprio le variabili: nel 6502 esistono solo tre "cose" simili a variabili, chiamate RegistroX, RegistroY e Accumulatore (A), e tutte le operazioni devono passare attraverso almeno uno di questi REGISTRI.

Per esempio, per memorizzare il valore 1 nella posizione di memoria $400, devi scrivere:
LDA #$01
STA $400

Cioe':
LoaD into Accumulator value $01  (# indica che è un valore, $ che è esadecimale; senza "#" sarebbe l'indirizzo di un byte in memoria)
STore Accumulator into location $400

Ecco fatto, hai scritto una A in alto a sinistra sullo schermo!

Per vederlo concretamente, devi scrivere questo programma nella memoria cel c64: l'istruzione POKE locazione, numero inserisce appunto un numero in una locazione di memoria.
Siccome "LDA  numero" corrisponde al numero xxx, e "STA locazione" corrisponde al numero yyy, per memorizzare questo microprogramma in memoria dovrai memorizzare questi numeri in fila:
xxx
1
yyy
00
04

I valori di xxx e yyy non me li ricordo, e non mi ricordo nemmeno se $0400 si memorizza come 00 04 o 04 00....  :huh:

Cmq, una volta scoperti, per memorizzare il programma si fa:
poke 49152,xxx
poke 49153,1
poke 49154,yyy
poke 49155,0
poke 49156,4

sys 49152

Naturalmente, per programmi piu' complicati bisognerà usare un ASSEMBLER...
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 05 Novembre 2008, 14:56:04
 Ah, ecco un assembler online:
http://e-tradition.net/bytes/6502/assembler.html (http://e-tradition.net/bytes/6502/assembler.html)

Con la calcolatrice di windows calcoli quanto valgono $a9 e $8d (e anche $60, il codice di RTS, l'istruzione che va messa alla fine di ogni programma), per cui diventa:

poke 49152,169
poke 49153,1
poke 49154,141
poke 49155,0
poke 49156,4
poke 49157,96

sys 49152
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: Naufr4g0 - 05 Novembre 2008, 16:23:58
 Perciò io ho già scaricato il Turbo Assembler.
Quindi preferisco saltare direttamente questa programmazione ML dall'ambiente Basic. :)
Tra l'altro ho pure il monitor della Final Cartdridge III, che cmq è più comodo.
Per quanto riguarda i registri ho già visto come funzionano, e ho già fatto qualche prova con scritture di caratteri a schermo e qualche cosa con gli sprite.
I flag sto invece capendo a cosa servono, ma richiedono un po' più del tempo che ci sto dedicando per ora per apprendere bene il loro funzionamento.
Cmq ringrazio tutti quelli che mi stanno dando suggerimenti su questo thread.
Tenterò naturalmente un approccio al problema nel modo che sarà a me più congeniale, devo infatti evitare di vedere l'apprendimento dell'assembly come uno studio, altrimenti mi viene a noia e abbandono tutto.. :/ Quindi preferisco un approccio sia teorico che pratico allo stesso tempo, cosicchè possa vedere subito i risultati dei miei sforzi.
Un po' come uno scolaretto che studia con gioco.. eheeh
Ricordo che queste cose non mi serviranno alla professione.
Posterò qui i dubbi che via via mi verranno.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 05 Novembre 2008, 17:28:47
 Sulla rete si trova di tutto, per fortuna!
 forse  ti potrebbe interessare questo
http://www.geocities.com/oneelkruns/asm1step.html (http://www.geocities.com/oneelkruns/asm1step.html)
che, in inglese, offre anche definizioni ed esempi di cosa siano i FLAGs e di come interagiscono con il codice.
Per capire il concetto dei FLAGs ricorda che essi sono la memoria INTERNA che rappresenta in tempo reale lo stato della macchina-processore e che quindi è influenzato dalle istruzioni che il 6510 esegue e le stesse istruzioni possono accedere a queste informazioni ad es. per condizionare salti, eseguire riporti in operazioni matematiche, e quant'altro.

 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: mces - 13 Novembre 2008, 08:15:43
 Scusate se rianimo una discussione ormai "fredda", ma credo che la si possa chiudere in bellezza dando notizia del libro già citato su questi post e ora disponibile per il download:

http://ready64.org/libri/scheda_libro.php?id_libro=35 (http://ready64.org/libri/scheda_libro.php?id_libro=35)

Credo che una lettura anche non approfondita possa almeno orientare chi vuole annusare più da vicno un pò di linguaggio macchina.
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: jumpjack - 13 Novembre 2008, 08:50:46
Citazione da: "mces"
Scusate se rianimo una discussione ormai "fredda", ma credo che la si possa chiudere in bellezza dando notizia del libro già citato su questi post e ora disponibile per il download:

http://ready64.org/libri/scheda_libro.php?id_libro=35 (http://ready64.org/libri/scheda_libro.php?id_libro=35)

Credo che una lettura anche non approfondita possa almeno orientare chi vuole annusare più da vicno un pò di linguaggio macchina.
Forte questa raccolta di libri, mica l'avevo vista!
 
Titolo: Programmare In Assembler Da Dove Cominciare?
Inserito da: pippo79 - 13 Novembre 2008, 22:39:54
 
Citazione da: "mces"
LDA# 00h
BNE pippo



Che, qualcuno mi ha chiamato?