Autore Topic: Convivenza Basic, Assembly E Musica...  (Letto 1575 volte)

DanyUP

  • Newbie
  • *
  • Post: 4
  • Gioco Preferito: Gunslinger
Convivenza Basic, Assembly E Musica...
« il: 22 Luglio 2009, 12:13:07 »
 Rieccomi a chiedere un aiuto su questo forum! :)
Ho un vecchissimo programmino in basic che mostrava una serie di schermate di testo (tipo presentazione) e volevo aggiungere una musica di sottofondo. Ho il file binario della musica, una piccola procedura che la mette in riproduzione e sto cercando di far convivere tutte queste parti. Il problema è che appena comincia la musica mi si corrompe la parte di basic e, a giudicare dai vari listati che vengono fuori, è proprio la parte binaria della musica che va a scrivere, ad ogni esecuzione dell'interruzione, sulla memoria riservata al basic. Ho provato ad usare altre musiche ma alla fine fanno tutte dei bei danni alla parte basic :(
Come posso mettere insieme tutti questi pezzi, evitando sovrascritture?
Grazie!

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Convivenza Basic, Assembly E Musica...
« Risposta #1 il: 22 Luglio 2009, 13:53:45 »
 iAN sicuramente potrà risponderti in  maniera più completa, é decisamente più preparato di me sui SID.
Questi sono i miei due cents.
Non conoscendo il tuo livello parto dalle cose base:
- hai verificato in che zona viene caricato il binario del SID stesso? Se va a sovrapporsi all'area dove risiede il tuo programma basic (da 2048 fino al massimo a 40959) puoi ovviamente riscontrare problemi. A tal proposito ti ricordo che, IIRC, le locazioni 45 e 46 indicano l'ultima locazione di memoria usata dal programma. Se questo é il caso puoi pensare di rilocare la routine analizzando l'assemblativo - buon divertimento! - o eventualmente spostare il puntatore di inizio basic ad una locazione che si trovi dopo il sid (l'ultima soluzione chiaramente ha senso se il sid si trova in una zona bassa della memoria).
- problematica più ostica se, invece, il player sid fa uso di locazioni in pagina 0 (0-255) usate normalmente dal basic. In questo caso é necessaria un'analisi del codice ed una modifica delle locazioni usate come variabili nel player. Tale attività può rivelarsi particolarmente incasinata perché potrebbe essere necessario usare locazioni fuori dalla 0 page: in questo caso le istruzioni che puntano a tali locazioni andrebbero ad occupare un byte in più disallineando tutto il codice.
Una soluzione che ho pensato in questo momento e potrebbe rivelarsi buona in quest'ultimo caso é la seguente: potresti scrivere una piccola routine in assembly che salvi l'intera pagina 0 diciamo a 49152 (va bene qualsiasi altra area di 256 byte libera); a seguito di questo copiare i 256 byte successivi (ancora, qualsiasi altra area di 256 byte va bene) nella pagina 0; chiamare la routine del player; risalvare la pagina 0 nell'area 49152+256 (la seconda area); ripristinare la pagina 0 prendendo i valori dalla prima area (49152). Insomma una sorta di context switch.
Se hai bisogno di una routine di questo genere posso buttartela giù tranquillamente. A sapere quali locazioni vengono modificate si potrebbe "ottimizzarla" per le necessità del sid.

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Convivenza Basic, Assembly E Musica...
« Risposta #2 il: 22 Luglio 2009, 20:13:19 »
 Dany: confermo le indicazioni di freshness e aggiungo che e' un po' troppo fumoso e astratto quel che hai descritto, senza avere qua davanti i files che hai usato e la procedura che adotti (linkati in memoria in un unico prg o caricati a runtime? i puntatori del basic sono settati correttamente o non li hai nemmeno considerati? e cosi' via) e' un po' difficile dirti cosa c'e' che non va. Postali e vedremo.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -