Autore Topic: Primi Passi In Assemby  (Letto 3577 volte)

harlock1975

  • Neo-iscritto
  • *
  • Post: 16
  • Gioco Preferito: turrican
Primi Passi In Assemby
« il: 12 Febbraio 2010, 14:11:31 »
 Ciao a tutti, dopo aver letto diversi articoli e spulciato un pò di sorgenti in rete, ho provato a fare un programmino in assembly con il DASM per dividere lo schermo in due colori col raster... e ovviamente non ha funzionato :)
Vabbè, ho fatto qualche passo indietro ed ho provato solo a cambiare il colore del bordo... e non ha funzionato nemmeno questo!!!
Vi posto il codice
Codice: [Seleziona]
 processor 6502
  org $0800

SCREEN  = $D020

start:  lda #$00
  sta SCREEN
Ora, con due righe in croce, dov'è che sono riuscito a sbagliare???
Faccio i test in Winvice, ma il RUN non fa nulla mentre un SYS2048 pulisce lo schermo...
Grazie!

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Primi Passi In Assemby
« Risposta #1 il: 12 Febbraio 2010, 14:58:22 »
 Be', per cominciare, ricorda di terminare i tuoi programmini con un RTS, altrimenti l'esecuzione passa in locazioni dove non hai scritto nulla e può esserci un BRK (che a C64 appena acceso ha l'effetto che lamenti).

2048 non è proprio l'indirizzo iniziale ideale per una routine in LM, per ragioni abbastanza ovvie; quando realizzerai qualcosa di più serio dovrai tenere conto anche di questi dettagli. Per il momento però mi sembra che tu abbia ancora da leggere un po' di tutorial. :)
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

harlock1975

  • Neo-iscritto
  • *
  • Post: 16
  • Gioco Preferito: turrican
Primi Passi In Assemby
« Risposta #2 il: 12 Febbraio 2010, 17:44:39 »
 Ciao eregil, grazie per la risposta. Ho appena provato a mettere l'RTS ma niente da fare, stesso risultato.
L'indirizzo 2048 che ho usato l'ho preso da qua http://www.cosine.org.uk/tmr/articles_memory_maps.php ed anche in "Escape from NY" di Cadaver, di cui ho il sorgente.
Mi dici le "ovvie ragioni"? E dove trovo gli altri dettagli a cui fai riferimento?  :huh:

Ciao e grazie

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Primi Passi In Assemby
« Risposta #3 il: 12 Febbraio 2010, 18:45:56 »
 Se aggiungere RTS si risolve in un "niente da fare" può significare solo che hai sbagliato qualcosa... se vuoi aiuto riposta il tuo codice con la modifica, la sfera di cristallo è guasta :)

Riguardo l'indirizzo iniziale 2048: ovviamente quando dico che non è un indirizzo iniziale ideale, non parlo per tutti i casi, ma per quelli più comuni. Più precisamente:

1) se la routine deve coesistere con un programma Basic, questo solitamente inizierà a 2049, e la locazione 2048 dovrà contenere uno 0. La routine in LM dovrà risiedere altrove.

Se l'area Basic è rilocata puoi avere una routine a 2048, naturalmente, ma fintanto che l'area Basic si trova nella sua posizione standard (come si poteva supporre nel tuo primo post) si deve evitare di avere routine che partano con SYS 2048.

2) se si desidera che il programma in LM parta con un RUN, si farà iniziare a 2049 un blocco con un programma Basic di una sola riga che contenga la SYS; la routine in LM inizierà dunque una manciata di byte più in là.

È possibile che tu abbia visto appunto un caso del genere, un org 2048 seguito dalla sequenza di byte che codifica questo programma Basic di una riga con la SYS. Quindi non una routine che inizia a 2048 e parte con SYS 2048.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

harlock1975

  • Neo-iscritto
  • *
  • Post: 16
  • Gioco Preferito: turrican
Primi Passi In Assemby
« Risposta #4 il: 13 Febbraio 2010, 08:51:27 »
Il discorso sull'indirizzo l'avevo immaginato, visto che proprio a quel link che ho postato dice "BASIC programs start from $0801 and head upwards", grazie della conferma :)
Per il problema della sfera di cristallo, ecco il codice, ma è uguale a quello del primo post, con l'aggiunta di RTS alla fine
Codice: [Seleziona]
  processor 6502
  org $0800

SCREEN  = $D020

start:  lda #$00
  sta SCREEN
  rts
Già che ci sono allego il prg.

Ciao
« Ultima modifica: 22 Gennaio 2015, 00:12:30 da eregil »

eregil

  • Administrator
  • Utente
  • *****
  • Post: 710
  • Gioco Preferito: Impossible Mission
Primi Passi In Assemby
« Risposta #5 il: 13 Febbraio 2010, 12:56:37 »
 Non so come tu abbia creato quel .prg, fatto sta che è lui ad essere farlocco... se assembli correttamente quelle tre righe di codice, hanno l'effetto previsto.
 
Non rispondo a richieste private, di qualunque genere esse siano.
Per domande tecniche leggete le FAQ e usate l'apposito forum.
Per questioni amministrative contattate lo staff tramite il form Contatti sul sito.

harlock1975

  • Neo-iscritto
  • *
  • Post: 16
  • Gioco Preferito: turrican
Primi Passi In Assemby
« Risposta #6 il: 13 Febbraio 2010, 15:04:40 »
 ok, pian piano ci arriviamo. ho assemblato usando il seguente batch
Codice: [Seleziona]
dasm.exe test.asm -otest.prg -v3 -p3
pause
Non è che il DASM (2.20.10b) abbia tante altre opzioni, ho provato ad es. -f# (tutti e tre i valori possibili), ma il risultato è lo stesso.
Mi dici come l'hai assemblate tu?

ciao
 

harlock1975

  • Neo-iscritto
  • *
  • Post: 16
  • Gioco Preferito: turrican
Primi Passi In Assemby
« Risposta #7 il: 15 Febbraio 2010, 23:40:32 »
 ...problema risolto. Alla fine avevi ragione, eregil, anche se non era del tutto colpa mia :)
Con la versione 2.20.10 che usavo, modificata in data 8/11/04, non va.
Con la medesima versione (scaricata ora dalla homepage), modificata 31/10/04, funziona!  :doh:

ciao