Autore Topic: Assembler Questo Sconosciuto  (Letto 8443 volte)

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Assembler Questo Sconosciuto
« il: 07 Ottobre 2005, 17:23:58 »
 Salve a tutti,

Vorrei dire che una competenza cosi come ho visto nei forum mi fa sentire una schiappa totale,forse questo mio sentirmi cosi mi spinge a chiere aiuto,per me e per tutti quelli che vorrebbero ma non osano chiedere.
Il mio problema è l'assembler :huh:
Ho sempre programmato in basic,molto piu facile da autoapprendere,spaziando dal c16 al c64 al c128 e ho scritto diversi bei gioiellini (mi sono diplomato con una minitesi su un programma che simulava la fase di decollo di un aereo fatto con il c128).
Il problema è che vagando per internet sono inciampato su quei "pazzi" "geni" della :hail: PROTOVISION.
Ma avete visto cosa fanno fare ad un C64?SuperCPU a parte.....
Tutto assembler.....col basic non ci faccio niente di quello che vorrei aiutatemi
sennò :doh: .

 

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Assembler Questo Sconosciuto
« Risposta #1 il: 08 Ottobre 2005, 01:08:51 »
 Qual e' la domanda?
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Assembler Questo Sconosciuto
« Risposta #2 il: 08 Ottobre 2005, 02:24:57 »
 La domanda è:l'assembler potete spiegarlo dalle basi?magari con esempi pratici,tutte le volte che hanno provato mi hanno propinato:
LDA......
LDY.....
STO.....
nel senso,si puo capire l'assembler con esempi pratici?Il programma della mongolfiera sul manuale del c64 spiegava un po di cose....
L'assembler fatto cosi....un programma dei commenti.....

 

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Assembler Questo Sconosciuto
« Risposta #3 il: 08 Ottobre 2005, 09:44:44 »
 
Citazione
magari con esempi pratici,tutte le volte che hanno provato mi hanno propinato:
LDA......
LDY.....
STO.....

Scusa,ma se vuoi gli esempi pratici le LDA,LDY ecc. te le devi sorbire per forza...

Comunque,su Internet non mi risulta che ci siano guide in Italiano,a parte il corso introduttivo dell'ex-membro MarC=ello,che adesso si trova sul sito degli HF.
Comincia da lì:è un buon inizio.

Ciao
 

djwiper

  • Utente
  • **
  • Post: 197
  • Gioco Preferito: Sim City
Assembler Questo Sconosciuto
« Risposta #4 il: 08 Ottobre 2005, 16:15:16 »
 Ciao... da un mese a questa parte grazie a Marcello ho capito che col basic si può fare molto  ;)

Comunque anche l'esempio della mongolfiera, o quello delle "bouncing balls" possono essere paragonate all'assembler perchè sempre di programmazione si tratta, e la programmazione è tutto fuorchè discorsiva. In base a questo, credo, che è sempre relativo dire il basic è facile, il c è difficile, l'asm impossibile.

Anche io sono nelle tue stesse condizioni e, se accetti un consiglio, ti dico di seguire gli esempi che ogni tanto vengono postati in programmazione e provare a modificarli. Credo che gli utenti qui presenti, che di lm commodorense ne capiscono eccome, sono ben felici di chiarirti alcuni dubbi ma, come dire, il grosso lo devi fare tu.

Finisco quotando Alberto: la guida di Marcello è un ottimo testo su cui studiare..

 :ciauz:  
Ho capito di odiare le firme...

Massi cadenti

  • Utente
  • **
  • Post: 237
    • http://massicadenti.altervista.org
  • Gioco Preferito: The Last Ninja
Assembler Questo Sconosciuto
« Risposta #5 il: 08 Ottobre 2005, 16:24:12 »
 L'assembler è una gran brutta bestia, di qualsiasi "famiglia" di CPU parliamo. Nel caso del 65xx (e del 6510 del C64 in particolare), però, quantomeno all'epoca sono uscite tantissime pubblicazioni che aiutavano a capirne i meandri. Una su tutte CCC e il suo "fratello minore" Commodore.

Io, pur NON ritenendomi pratico di assembler, tutto quello che so l'ho imparato da lì.

Visto che a quanto pare una parte di numeri di CCC sono ormai disponibili in rete, penso che se sei interessato all'argomento non sarebbe una cattiva idea partire da lì. Cominciare a vedere i disassemblati commentati delle routine più semplici, iniziare a tenere a mente i puntatori e cercare di capire cosa vogliono dire quelle sigle (LDA, STA, LDY, RTS ecc.) che non sono, in fondo, molto diverse come concetto dalle tante sigle che oggi si usano su Internet per dire LOL, ROTFL e via dicendo. Insomma sono acronimi (più o meno) di termini e frasi in inglese.

E' ovvio che un'infarinatura di base aiuta, ma penso che guardando i disassemblati di CCC se ne possa fare anche a meno, perché niente è meglio di un esempio pratico per imparare qualcosa.


Se ti dicessi che LDA sta per LoaD Accumulator, tu giustamente mi chiederesti cos'è e a cosa serve l'accumulatore.
Se invece io ti scrivessi:

LDA $0F       ; Carica il numero decimale 15 nell'accumulatore...
STA $C000   ; ... e piazzalo nella locazione decimale 49152
RTI              ; Torna da interrupt

Già capisci che tutto questo è l'equivalente di una POKE49152,15 da BASIC.

Inoltre, e questo è molto più importante, ti spiega a cosa serve l'accumulatore: è una sorta di "contenitore" di numeri transitori. E in più hai imparato anche a che servono STA (STore Accumulator) e RTI (ReTurn from Interrupt).

Chiaro, no?  :D
Lo so, per tanti è difficile da capire anche se ormai sono 12 anni che lo uso, ma <b>il mio nick ha la "c" <u>minuscola</u></b>...
"Prima volta" nel settembre 1982 (Vic20 di mio cugino)
Utente C16 dal 25 dicembre 1984. Utente C128 dal 24 dicembre 1987
C16(4), C128, Vic20, 1541, 1541-II, 1530(3), 1531(2), X1541, MPS802, CaptainMikyII, Moviola x C64, esp.16KB x C16, ca.1300 cassette, ca.900 floppy, ca.10 joystick, paddles, accessori vari
<a href="http://massicadenti.altervista.org/algasoft.html">La mia pagina sulle Alga Soft, sulle cassette napoletane e su come Napoli ha vissuto a modo tutto suo gli anni d'oro della pirateria</a>
<a href="http://ready64.it/forum/?showtopic=2252#">Massi cadenti non è né un esperto (anche se si millanta tale) né un frequentatore di questo forum</a>
Importante: <a href="http://ready64.massicadenti.com">Ready64 è un sito che <B><U>non</U> è di Massi cadenti</B> ma di Rob Nicoletti</a>

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Assembler Questo Sconosciuto
« Risposta #6 il: 08 Ottobre 2005, 20:02:52 »
Citazione da: "Massi cadenti"
RTI              ; Torna da interrupt
 
RTS. A questi livelli e' piu' che sufficiente. ;)
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Massi cadenti

  • Utente
  • **
  • Post: 237
    • http://massicadenti.altervista.org
  • Gioco Preferito: The Last Ninja
Assembler Questo Sconosciuto
« Risposta #7 il: 08 Ottobre 2005, 20:28:59 »
Citazione da: "iAN CooG/HF"
Citazione da: "Massi cadenti"
RTI              ; Torna da interrupt
 
RTS. A questi livelli e' piu' che sufficiente. ;)
Per un attimo temevo che l'RTS non tornasse al BASIC (ovvio che la routine andasse lanciata tramite SYS). ;)
Ho sempre creduto che JMP e JSR fossero l'equivalente di GOTO e GOSUB rispettivamente, e che RTS fosse l'equivalente del comando RETURN del BASIC. Sbaglio? (Devo studiare, lo so :D)
Lo so, per tanti è difficile da capire anche se ormai sono 12 anni che lo uso, ma <b>il mio nick ha la "c" <u>minuscola</u></b>...
"Prima volta" nel settembre 1982 (Vic20 di mio cugino)
Utente C16 dal 25 dicembre 1984. Utente C128 dal 24 dicembre 1987
C16(4), C128, Vic20, 1541, 1541-II, 1530(3), 1531(2), X1541, MPS802, CaptainMikyII, Moviola x C64, esp.16KB x C16, ca.1300 cassette, ca.900 floppy, ca.10 joystick, paddles, accessori vari
<a href="http://massicadenti.altervista.org/algasoft.html">La mia pagina sulle Alga Soft, sulle cassette napoletane e su come Napoli ha vissuto a modo tutto suo gli anni d'oro della pirateria</a>
<a href="http://ready64.it/forum/?showtopic=2252#">Massi cadenti non è né un esperto (anche se si millanta tale) né un frequentatore di questo forum</a>
Importante: <a href="http://ready64.massicadenti.com">Ready64 è un sito che <B><U>non</U> è di Massi cadenti</B> ma di Rob Nicoletti</a>

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Assembler Questo Sconosciuto
« Risposta #8 il: 12 Ottobre 2005, 00:44:27 »
 Devo dire che l'esempio che hai fatto è il più chiaro che mi sia stato fatto.
Penso comunque di essere in condizioni DISASTROSE perchè se vedo scritto:

10 PRINT" pippo"
20 GOTO 10

non ho problemi hacapire come risponderà il computer a questi comandi,ma non so scriverlo il ASM.
Pensa che sia proprio una carenza concettuale la mia.
Come posso ottenere lo stesso risultato delle due righe di cui sopra solamente caricando valori negli accumulatori?

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Assembler Questo Sconosciuto
« Risposta #9 il: 12 Ottobre 2005, 19:19:00 »
 
Citazione
Per un attimo temevo che l'RTS non tornasse al BASIC

 :confused:

Citazione
Ho sempre creduto che JMP e JSR fossero l'equivalente di GOTO e GOSUB rispettivamente e che RTS fosse l'equivalente del comando RETURN del BASIC

Anch'io  :D

Citazione
Penso comunque di essere in condizioni DISASTROSE

Chiunque all'inizio è in condizioni disastrose:nessuno nasce con la scienza infusa.  ;)

Citazione
10 PRINT" pippo"
20 GOTO 10

non ho problemi hacapire come risponderà il computer a questi comandi,ma non so scriverlo il ASM.

Beh,per uno che parte da zero con l'assembler non è semplicissimo tradurre un programma simile. ;)

Inizia con qualcosa di più semplice,per esempio togliendo quel 20 GOTO 10.
La routine per stampare il carattere ASCII nell'accumulatore è locata all'indirizzo 65490 ($ffd2 in esadecimale).Quindi dovrai dare in pasto al tuo programma tutti i caratteri della stringa e chiamare la routine a $ffd2 per ogni carattere,fino a quando non arrivi alla fine della stringa.
Io ti ho dato l'algoritmo;adesso tocca a te trovare gli "ingredienti" giusti. ;)

Ciao

Massi cadenti

  • Utente
  • **
  • Post: 237
    • http://massicadenti.altervista.org
  • Gioco Preferito: The Last Ninja
Assembler Questo Sconosciuto
« Risposta #10 il: 12 Ottobre 2005, 21:21:14 »
Citazione da: "Alberto"
Citazione
Per un attimo temevo che l'RTS non tornasse al BASIC

 :confused:
 
Sì hai capito bene. Ho invece poi ovviamente verificato la routine e funziona perfettamente con RTS. :D
Lo so, per tanti è difficile da capire anche se ormai sono 12 anni che lo uso, ma <b>il mio nick ha la "c" <u>minuscola</u></b>...
"Prima volta" nel settembre 1982 (Vic20 di mio cugino)
Utente C16 dal 25 dicembre 1984. Utente C128 dal 24 dicembre 1987
C16(4), C128, Vic20, 1541, 1541-II, 1530(3), 1531(2), X1541, MPS802, CaptainMikyII, Moviola x C64, esp.16KB x C16, ca.1300 cassette, ca.900 floppy, ca.10 joystick, paddles, accessori vari
<a href="http://massicadenti.altervista.org/algasoft.html">La mia pagina sulle Alga Soft, sulle cassette napoletane e su come Napoli ha vissuto a modo tutto suo gli anni d'oro della pirateria</a>
<a href="http://ready64.it/forum/?showtopic=2252#">Massi cadenti non è né un esperto (anche se si millanta tale) né un frequentatore di questo forum</a>
Importante: <a href="http://ready64.massicadenti.com">Ready64 è un sito che <B><U>non</U> è di Massi cadenti</B> ma di Rob Nicoletti</a>

Massi cadenti

  • Utente
  • **
  • Post: 237
    • http://massicadenti.altervista.org
  • Gioco Preferito: The Last Ninja
Assembler Questo Sconosciuto
« Risposta #11 il: 12 Ottobre 2005, 21:31:40 »
 
Citazione da: "Alberto"
Citazione
10 PRINT" pippo"
20 GOTO 10

Inizia con qualcosa di più semplice,per esempio togliendo quel 20 GOTO 10.
La routine per stampare il carattere ASCII nell'accumulatore è locata all'indirizzo 65490 ($ffd2 in esadecimale).Quindi dovrai dare in pasto al tuo programma tutti i caratteri della stringa e chiamare la routine a $ffd2 per ogni carattere,fino a quando non arrivi alla fine della stringa.
Io ci ho provato, ma non funziona:

LDA $10    ; Carattere "P" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $09    ; Carattere "I" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $10    ; Carattere "P" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $10    ; Carattere "P" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $0F    ; Carattere "O" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
RTS          ; Torna al BASIC

L'ho immessa a partire da $C000 (49152) ma con un SYS49152 mi dice READY. e basta. Avendo il dubbio della colorazione della cella sono andato col cursore su tutto lo schermo ma nulla, non ho trovato la stringa PIPPO da nessuna parte.
Dov'è che sbaglio?

P.S. Ho usato il monitor del VICE 1.17

EDIT: Non è che dovevo usare LDX? :D Oppure che il READY. del BASIC m'è venuto scritto SOPRA alla stringa?
Lo so, per tanti è difficile da capire anche se ormai sono 12 anni che lo uso, ma <b>il mio nick ha la "c" <u>minuscola</u></b>...
"Prima volta" nel settembre 1982 (Vic20 di mio cugino)
Utente C16 dal 25 dicembre 1984. Utente C128 dal 24 dicembre 1987
C16(4), C128, Vic20, 1541, 1541-II, 1530(3), 1531(2), X1541, MPS802, CaptainMikyII, Moviola x C64, esp.16KB x C16, ca.1300 cassette, ca.900 floppy, ca.10 joystick, paddles, accessori vari
<a href="http://massicadenti.altervista.org/algasoft.html">La mia pagina sulle Alga Soft, sulle cassette napoletane e su come Napoli ha vissuto a modo tutto suo gli anni d'oro della pirateria</a>
<a href="http://ready64.it/forum/?showtopic=2252#">Massi cadenti non è né un esperto (anche se si millanta tale) né un frequentatore di questo forum</a>
Importante: <a href="http://ready64.massicadenti.com">Ready64 è un sito che <B><U>non</U> è di Massi cadenti</B> ma di Rob Nicoletti</a>

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Assembler Questo Sconosciuto
« Risposta #12 il: 12 Ottobre 2005, 21:43:43 »
 
Occhio alla differenza tra GOSUB e SYS:la prima chiama da Basic una routine Basic,la seconda chiama da Basic una routine assembler.

Citazione
Io ci ho provato, ma non funziona:

LDA $10 ; Carattere "P" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $09 ; Carattere "I" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $10 ; Carattere "P" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $10 ; Carattere "P" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
LDA $0F ; Carattere "O" nell'accumulatore
JSR $FFD2 ; Salto a $FFD2
RTS ; Torna al BASIC

L'ho immessa a partire da $C000 (49152) ma con un SYS49152 mi dice READY. e basta. Avendo il dubbio della colorazione della cella sono andato col cursore su tutto lo schermo ma nulla, non ho trovato la stringa PIPPO da nessuna parte.
Dov'è che sbaglio?

Allora,andiamo con ordine.

1.Innanzitutto,la routine $ffd2 prende i caratteri ASCII di una stringa,mentre tu le hai passato delle locazioni di memoria (che forse volevano essere i codici schermo dei caratteri).
Se non erro,i codici ASCII dei caratteri A-Z vanno da 65 a 90 ($41-$5A in esadecimale).

2.Ti conviene creare un ciclo per non scrivere la stessa istruzione 5 volte.
Ovviamente,ti servirà un "cursore" (ossia,un indice) per poterti spostare lungo la stringa,in modo da stamparne un carattere alla volta.

P.S.:per ora lascia perdere il GOTO 10;un concetto alla volta. ;)

Bye

6526_CIA

  • Neo-iscritto
  • *
  • Post: 25
  • Gioco Preferito: KATAKIS;ENFORCER
Assembler Questo Sconosciuto
« Risposta #13 il: 12 Ottobre 2005, 23:50:59 »
 
Codice: [Seleziona]
2.Ti conviene creare un ciclo per non scrivere la stessa istruzione 5 volte.
Ovviamente,ti servirà un "cursore" (ossia,un indice) per poterti spostare lungo la stringa,in modo da stamparne un carattere alla volta.

Per cursore intendi una immissione sequenziale dei careatteri come si otterrebbe in basic creando un ciclo che opera con MID$?

 

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Assembler Questo Sconosciuto
« Risposta #14 il: 13 Ottobre 2005, 17:41:45 »
 
Citazione
Per cursore intendi una immissione sequenziale dei careatteri come si otterrebbe in basic creando un ciclo che opera con MID$?
Diciamo qualcosa di simile  :)