Autore Topic: Caricamento Sid Files In Player  (Letto 2523 volte)

Elder0010

  • Utente
  • **
  • Post: 75
    • http://csdb.dk/scener/?id=22731
  • Gioco Preferito: Rampage
Caricamento Sid Files In Player
« il: 02 Febbraio 2011, 00:18:20 »
Sto cercando di aggiungere una musica di sottofondo a uno dei tanti esempi trovati in rete.

Sto usando DASM su OSX.
La risorsa "music.sid" viene caricata (se provo a spostare il file ricevo un errore in fase di compilazione), però in fase di esecuzione il programma si ferma all'istruzione

jsr $1000 ; initialize music

(torna al basic semplicemente)

se la commento, tutto funziona a meraviglia (ovviamente nessun audio) :| cosa sto sbagliando?

ringrazio anticipatamente :)

Codice: [Seleziona]
; Set up target processor and address where we wish to be loaded.
; Apparently these _have_ to be indented at least one step, otherwise
; DASM throws a fit.
processor 6502
org  $0810

;
; Main code
;
  sei       
  jsr $e544;screen clear
  ldx #$00
  lda #$00
  tax
  tay
  jsr $1000; initialize music
 
dmsg  lda htxt,x
  cmp #$40
  bcc charok
  sec
  sbc #$40 
charok  sta $0400,x
  inx
  cpx #$0a
  bne dmsg

   
mainloop ldx #$00             ;Set 'X' as 0
loopx  ldy #$00             ;Set 'Y' as 0
loopy  lda colours,X           ;Flashy border
  sta $d020
  iny                        ;Increment Y
  cpy #$08              ; Is 'Y' equal to #$77
  bne loopy        ; If not then Y=Y+1, goto LOOPY
  inx                       ; Increment X
  cpx #$08              ; Is 'X' equal to #$77
  bne loopx        ;If not then X=X+1, goto LOOPX
  lda $DC01;Load Spacebar command
  cmp #$EF;Is spacebar pressed
  bne mainloop;If not then jump to the MAINLOOP prompt
  rts; else END program operation

colours
  .BYTE $00,$06,$0E,$03
  .BYTE $03,$0E,$06,$00
 
 
htxt  .byte "TESTT 0010"
 
 
    org  $1000-2
    incbin "music.sid"
« Ultima modifica: 22 Gennaio 2015, 00:19:10 da eregil »
lda #0 sta $d020 sta $d021

med

  • Utente
  • **
  • Post: 103
    • med64.tk
  • Gioco Preferito: Turrican 2
Caricamento Sid Files In Player
« Risposta #1 il: 02 Febbraio 2011, 13:43:46 »
 Semplice... non puoi includere un file sid così com'è all'interno di un programma!!! Devi prima salvarlo in formato .prg. In teoria puoi usare lo stesso sidplayer.
Il salto che fai con jsr $1000 salta infatti a queste istruzioni:

EOR #$44
BRK
JAM
... ecc ecc!!!

Chiaro?  :)  

med

  • Utente
  • **
  • Post: 103
    • med64.tk
  • Gioco Preferito: Turrican 2
Caricamento Sid Files In Player
« Risposta #2 il: 02 Febbraio 2011, 19:31:55 »
 Per essere più precisi una soluzione senza fare troppe modifiche ci sarebbe...
devi semplicemente rilocare il file...
In altre parole sostituisci
Citazione
    org  $1000-2
   incbin "music.sid"
con

    org  $1000-124
   incbin "music.sid"

e così dovrebbe funzionare!
(io in questo momento non posso provare perchè scrivo da un computer non mio, quindi se non è 124 prova o con 123 o con 125, ma stai sicuro che funzionerà).
Un alternativa sarebbe quella di far caricare il file dall'indirizzo contenuto nell'header del file sid (anche se non è un header, ma un testo indicante la scritta "PSID") e cioè:

    org  $5350
   incbin "music.sid"

e quindi rilocare il tutto tramite un'apposita routine subito dopo il tuo "sei":

ldx #$00
ciclo lda $53cc,x
sta $1000,x
lda $54cc,x
sta $1100,x
lda $55cc,x
sta $1200,x
lda $56cc,x
sta $1300,x
lda $57cc,x
sta $1400,x
lda $58cc,x
sta $1500,x
lda $59cc,x
sta $1600,x
lda $5acc,x
sta $1700,x
lda $5bcc,x
sta $1800,x
dex
bne ciclo

e continuare con la tua routine. In questo modo la parte del file sid che realmente ti interessa verrebbe correttamente "locata" a partire da $1000 e stavolta il tuo jsr $1000 funzionerebbe.
Tiene a mente che affinchè tu possa sentire un qualche suono è necessario che ad ogni frame video tu esegua un semplice salto "jsr 1003", altrimenti non sentirai mai nulla.
Se vuoi fare una prova, basta che inserisci una routine del tipo:

suona lda #$ff
frame cmp $d012
bne frame
jsr $1003 ;suona la musica
jmp suona

Fammi sapere. A limite più tardi (dal mio computer) ti assemblo il file correttamente e te lo allego... ma secondo me, almeno questo lo dovresti fare tu!!!  :P

Buona serata.

Elder0010

  • Utente
  • **
  • Post: 75
    • http://csdb.dk/scener/?id=22731
  • Gioco Preferito: Rampage
Caricamento Sid Files In Player
« Risposta #3 il: 02 Febbraio 2011, 19:46:55 »
Ho provato a convertire il .sid in .prg con sidplay (macosx). Il file generato è perfettamente lanciabile da VICE. Sidplay utilizza PSID64 come tool di conversione.

Resta inteso che:

uso jsr $1000
per far partire il prg

e lo includo con

org $1000-2
incbin "music.prg"


ti allego il file .prg, magari è sbagliata la conversione??

nota: il monitor di vice presenta questo messaggio "Sound: Warning - Buffer drained"


ho provato anche gli altri due sistemi, ma nessun risultato. :( grazie per la disponibilità
« Ultima modifica: 22 Gennaio 2015, 00:19:34 da eregil »
lda #0 sta $d020 sta $d021

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Caricamento Sid Files In Player
« Risposta #4 il: 02 Febbraio 2011, 21:42:06 »
Non devi convertire in prg eseguibile con psid64 ma estrarre la parte di codice.

Devi togliere l'header PSID che e' di $7c bytes. In Sidplay2/w si fa "Save as" e selezioni *.dat come tipo file.
Altrimenti usa un hexeditor. Il .dat risultante e' in effetti un .prg con tanto di load address

Ad ogni modo un sid che ha indirizzo di init e play va suonato chiamando l'indirizzo di play ad ogni frame. Si puo' fare aspettando il raster ad una posizione fissa dentro un loop come ha detto med, ma e' sempre meglio usare un irq settato ad una data posizione del raster che vuoi tu.

Consiglio spassionato: usa il mio dasm, poi ognuno e' libero di farsi del male come preferisce :P
http://iancoog.altervista.org/C/dasm2.20.07-iAN_Rev_L.rar


Codice: [Seleziona]
; versione con irq player.

        org $0801
        word eop
        word 10
        byte $9e,"2061",0
eop
        word 0

;
; Main code
;
        sei
        jsr $e544  ;screen clear
        lda #$00
        tax
        tay
        jsr $1000; initialize music

      ; installa un irq per suonare la musica
        sei
        lda #$7f
        sta $dc0d
        lda $dc0d
        lda #<irqplayer
        sta $0314
        lda #>irqplayer
        sta $0315
        lda #$01
        sta $d01a
        sta $d019
        lda $d019
        lda #$00
        sta $d012
        lda #$9b
        sta $d011
        cli
        ldx #0

dmsg    lda htxt,x
        sta $0400,x
        inx
        cpx #[endhtxt-htxt]
        bne dmsg

      ; anche questo colorscroller andrebbe messo in irq;)
mainloop
        ldx #$00
loopx   ldy #$00
loopy   lda colours,X
        sta $d020
        iny
        cpy #$08
        bne loopy
        inx
        cpx #$08
        bne loopx
        lda $DC01
        cmp #$EF
        bne mainloop

        sei
        jsr $fd15
        jsr $fda3
        jsr $e5a0
debounce
        ldx $dc01
        cpx #$ff
        bne debounce
        inx
        stx $c6

        cli
        rts

colours
        byte $00,$06,$0E,$03
        byte $03,$0E,$06,$00


htxt    scru "TESTT 0010"
endhtxt


irqplayer
        inc $d019
        jsr $1003
        jmp $ea31


        *=$1000
        incprg "music.dat"


PS: non mi stanchero' MAI di ricordarlo, dare sempre un'occhiata ai vecchi thread, questi sono argomenti gia' trattati in precedenza anche su questo forum, ad es
http://ready64.org/smf/index.php?topic=1768
http://ready64.org/smf/index.php?topic=2893
« Ultima modifica: 22 Gennaio 2015, 00:20:29 da eregil »
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

med

  • Utente
  • **
  • Post: 103
    • med64.tk
  • Gioco Preferito: Turrican 2
Caricamento Sid Files In Player
« Risposta #5 il: 02 Febbraio 2011, 21:56:32 »
 
Citazione
Consiglio spassionato: usa il mio dasm, poi ognuno e' libero di farsi del male come preferisce

Concordo pienamente  ;)

Elder0010

  • Utente
  • **
  • Post: 75
    • http://csdb.dk/scener/?id=22731
  • Gioco Preferito: Rampage
Caricamento Sid Files In Player
« Risposta #6 il: 03 Febbraio 2011, 11:06:10 »
 prima di tutto grazie per tutte le info.

Ian: avevo visto la tua release di DASM, ma pensavo fosse un miglioramento con delle aggiunte per realizzare tecniche "da maestri" :) invece leggendo le modifiche che hai apportato, mi accorgo che hai implementato molte "comodità" ! Lo proverò sicuramente!

Avevo provato anche la tua routine trovata sul forum, e avevo la stesso identica situazione, da qui avevo intuito un possibile problema sul file importato! La prox volta prima di chiedere faro' un po piu' di RTFM  ;)  ;)  ;)  ;)

 
lda #0 sta $d020 sta $d021

Elder0010

  • Utente
  • **
  • Post: 75
    • http://csdb.dk/scener/?id=22731
  • Gioco Preferito: Rampage
Caricamento Sid Files In Player
« Risposta #7 il: 03 Febbraio 2011, 23:15:02 »
 ok il tuo codice ovviamente funziona a perfezione, ora mi chiudo a studiare un po le tecniche che hai usato

 :)
lda #0 sta $d020 sta $d021