Autore Topic: Scrolling Orizzontale  (Letto 5677 volte)

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Scrolling Orizzontale
« Risposta #30 il: 07 Ottobre 2010, 21:33:28 »
 Ottimo lavoro!
Che ne dici di provare ad aggiungere un po' di musica?
Scegli il sid più adatto e fai partire il player, se non sai bene come muoverti non hai che da chiedere (dove non arrivo io credo sia ben disposto ad aggiungere informazioni iAN).
Fa sempre piacere vedere qualcuno cimentarsi - con successo - con l'assembly!
Thumb up! ;)

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Scrolling Orizzontale
« Risposta #31 il: 08 Ottobre 2010, 10:41:06 »
 In effetti non ho mai affrontato il discorso "musica".
Immagino che ci sia un'area di memoria dedicata a contenere i dati del brano ed una sorta di player che lo fa suonare senza interrompere l'esecuzione del codice.....

Mi puoi cosigliare qualche tutorial?

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Scrolling Orizzontale
« Risposta #32 il: 08 Ottobre 2010, 13:05:00 »
 Dunque, tieni innanzittuto presente che i file sid in realtà hanno già dentro tutto il codice per il play. In sostanza non sono file musicali (tipo mod, xm o roba del genere) ma sono veri e propri programmi personalizzati ad hoc per emettere musica.
Ciò detto, per inserire sid io uso questo sistema:
- apro il player sidplayw (http://www.gsldata.se/c64/spw/sidplayw.html)
- scelgo il sid e lo carico
- in File->Properties mi leggo:
  * Load Range: area di memoria occupata
  * Init Address: chiamata di inizializzazione
  * Play Address: chiamata di play
- mi regolo se la zona di memoria é compatibile con il mio programma (non devono sovrapporsi evidentemente)
- vado su File->Conversion, seleziono il file nella tendina a sinistra e come tipo metto C64 Data (.dat)
- converto il file
A questo punto ho un file .dat che posso includere nel sorgente: l'unica cosa da tener presente é che i primi due byte vanno saltati perché rappresentano l'indirizzo iniziale. Puoi scegliere tu se eliminare i byte a mano con un editor binario o includere il file con un indirizzo di partenza di due byte inferiore rispetto a quello reale del file.
Una volta incluso il file é sufficiente una sola chiamata (jsr) all'init address da qualche parte in fase di inizializzazione ed una chiamata al play address in sincrono con l'interruzione: in linea di massima basta chiamare il player ogni 50esimo di secondo ma se la musica ti sembra lenta prova a mettere due chiamate al player in successione.

NB: la frequenza con la quale va chiamato il player meriterebbe in realtà un discorso a parte. Molti sid andrebbero suonati a 60hz o magari a frequenze anche più alte. In molti casi, comunque, si rivela necessario impostare un timer interrupt con il CIA. Per il momento ti consiglio di scegliere un sid per il quale sidplayw indichi "50Hz VBI (PAL)". VBI, per la cronaca, sta per vertical blank interrupt.
 

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Scrolling Orizzontale
« Risposta #33 il: 08 Ottobre 2010, 14:21:18 »
 Ci provo!

Una domanda riguardo lo scroller:
Come hai estratto i files di mappa,colore e char dal gioco originale?

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Scrolling Orizzontale
« Risposta #34 il: 08 Ottobre 2010, 17:27:27 »
 Ehhh... con un po' di pazienza!
Ogni gioco ha i suoi algoritmi per la gestione delle mappe quindi preferisco darti un metodo generale piuttosto che gli strumenti specifici per GS.
- Apri il gioco in un emulatore (con VICE si va bene a far sta roba)
- Carica un particolare livello (al limite con un trainer)
- Entra nel monitor dell'emulatore e controlla di essere in una raster line ($D012/$D011) dentro l'area di gioco: entra ed esci dal monitor finché non riesci.
- Ok, sei entrato in una raster line buona: prendi nota del valore di $D018 e di DD00 e usali per capire dove si trova l'area caratteri usata per disegnare lo schermo.
- Metti un breakpoint in scrittura su un qualsiasi indirizzo di memoria compreso nei primi 1000 (tipicamente é meglio un valore centrale tipo 500) puntati dalla area caratteri del VIC
- Esci dal monitor
- Dovresti rientrare nel monitor a seguito di uno spostamento maggiore di un carattere (potrebbero essere necessari spostamenti più grossi, dipende dal gioco); il breakpoint comunque ti permetterà di trovare la routine di aggiornamento dello schermo
- Studiala! :D
E' un metodo piuttosto... ruspante... ma nel caso di Giana Sisters e di un altro giochino di cui non so il titolo originale, ha funzionato perfettamente.

PS: in alternativa puoi mettere anche un breakpoint in scrittura sulla memoria colore.

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Scrolling Orizzontale
« Risposta #35 il: 08 Ottobre 2010, 17:49:57 »
 Una volta trovata l'area di memoria corretta come dumpi in un file dat?

Ps
Ho fatto qualche esperimento per suonare un file sid ma, per poterlo inserire nello scroller, devo rivedere un po di cose dato che mi pare di capire che, tale risorsa, funziona solo se inserita nell'area di memoria riportata nell'attributo:"Load Range"
corretto?

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Scrolling Orizzontale
« Risposta #36 il: 09 Ottobre 2010, 17:23:06 »
 X il dump:
In vice puoi salvare un blocco di memoria con questo comando:
s "nomefile" 0 start end
ad esempio:
s "test.dat" 0 c000 cfff
X il SID:
Chiaramente si. Il codice del SID, salvo perderci del tempo sopra, non é rilocabile quindi devi caricarlo esattamente nell'area di memoria per la quale é pensato: quella per l'appunto indicata nel load range.
Ricordati i 2 byte iniziali del .dat.

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Scrolling Orizzontale
« Risposta #37 il: 11 Ottobre 2010, 10:56:32 »
 grazie delle dritte!