Autore Topic: Sidplayer V.01  (Letto 2047 volte)

Fabbroz75

  • Utente
  • **
  • Post: 65
  • Gioco Preferito: Aufwiedersehen Monty
Sidplayer V.01
« il: 07 Luglio 2006, 11:40:55 »
 ho ultimato, correggendo ed imparando qlcosa in piu'.. la mia routine che legge sid.
Avevo riscontrato un problema in fase di compilazione... perche' erroneamente.. avevo settato il parametro -f3 in dasm...

Altro problema risolto.. sono i primi 2 byte della song...

posto il codice:
Codice: [Seleziona]
; fSID v0.1 by Fabbroz75 - luglio06
; Da ottimizzare ed ampliare
;

startaddsong = $1000
startplaysong = $1006
nplaysong = $00

    *=startaddsong-2
    .incbin mus.dat

    *= $c000

; cancello lo schermo e setto il colore nero
cls    
    lda #$00; colore 0
    sta $d020; centro
    sta $d021; bordo
    jsr $e544; cancello lo schermo
    

; stampo il testo      
    ldx #$00;
print
    lda txt,x    
    beq start    
    jsr $ffd2
    inx          
    bne print ; ho letto il byte 0 del testo?
  
; vado all'indirizzo della musica
start
    sei
    lda #nplaysong   ;qui deciso che song suonare del file
                             ;( se ne ha piu' di una )
    jsr startaddsong

; raster
lp   lda #$80      
wt  cmp $d012  
     bne wt      

;facci partire la musica  
     inc $d020
     jsr startplaysong    
     dec $d020
     jmp lp
      
txt
     byte "FSID V01 BY FABBROZ75"
     byte 0

SYS49152 per lanciarlo

ed ecco il compilato:
c64.prg.zip


Ovviamente sempre pronto per suggerimenti e miglioramenti :)
C64/C64c/C128/C16/Vic20 | 64SD Infinity 2.0 |

Fabbroz75

  • Utente
  • **
  • Post: 65
  • Gioco Preferito: Aufwiedersehen Monty
Sidplayer V.01
« Risposta #1 il: 07 Luglio 2006, 13:42:54 »
 Ho trovato un effetto carino... casualmente... volevo fare un fadeout dell musica...
Alzando ed abbassando il volume ( $d418 ) si ha un effetto click simile al Vinile :)


da aggiungere sotto dec $d020 nella routine di raster
( ho usato valori binari invece di hex )

Codice: [Seleziona]

    lda #%00000000    ; hex #$00 - dec 0
    sta $d418
    lda #%00001111    ; hex #$0f  - dec 15
    sta $d418

C64/C64c/C128/C16/Vic20 | 64SD Infinity 2.0 |

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Sidplayer V.01
« Risposta #2 il: 08 Luglio 2006, 14:57:31 »
 L'effetto che tu dici e' dovuto un "baco" del registro volume, che se ben sfruttato puo' diventare la 4a voce del sid, il digitalizzato e' realizzato proprio usando il click prodotto dall'accensione e speginmento del volume.
Un paio di suggerimenti:
Codice: [Seleziona]
 *=startaddsong-2
    .incbin mus.dat
fallo diventare
Codice: [Seleziona]
 *=startaddsong
    .INCPRG mus.dat
Ho implementato il pseudo op INCPRG apposta per non dover fare quel workaround, senza contare che come hai fatto tu includi anche i 2 byte di loadaddress nel binario compilato che anziche' iniziare a $1000 inizia appunto a $0ffe.
ah: il punto e' opzionale in DASM, puoi scrivere tranquillamente i pseudo op byte, word, org, incbin, incprg, etc.

Codice: [Seleziona]
*= $c000
L'indirizzo piu' usato e spesso a sproposito =)
Hai una musica che va da $1000 a $1a81, perche' andare a creare un prg di 44kb quando puo' essere di 3kb o meno? metti la tua routine piu' vicino possibile, $0f00, o $1a82, o $2000 ma $c000 e' decisamente fuori luogo.
Ma soprattutto, inizia a pensare di compattare i tuoi programmi. Ce ne sono migliaia nativi, ma i milgiori sono i cross crunchers, e dato che stai sviluppando da PC non vedo perche' sbattersi a trasferire i prg e impiegare ore a cruncharli su C64 ;)
Exomizer http://hem.bredband.net/magli143/exo/
Pucrunch (sul mio sito c'e' la mia modifica)

Codice: [Seleziona]
; stampo il testo
Ora che hai imparato a farlo un carattere alla volta, puoi usare (quando e' possibile) la routine di print del basic.
Codice: [Seleziona]
lda #<txt
ldy #>txt
jsr $ab1e
In A ci va il byte basso dell'indirizzo della stringa null terminated, in Y il byte alto.
Per maggiori info, ovviamente, Mapping the C64 e il disasseblato della rom.
Ci sono casi in cui non si puo' usare, ad esempio se blocchi le interrupt o disabiliti la rom del basic, ma questo lo vedrai quando ci arriverai.
Ora puoi passare a fare la stessa routine usando gli interrupt.
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Fabbroz75

  • Utente
  • **
  • Post: 65
  • Gioco Preferito: Aufwiedersehen Monty
Sidplayer V.01
« Risposta #3 il: 08 Luglio 2006, 16:39:26 »
 Grazie per i tuoi preziosissimi consigli :)

Ho applicato i tuoi suggerimenti ed ho aggiunto:

Codice: [Seleziona]
         ...

lp    lda #$80  
wt   cmp $d012
      bne wt      
      inc $d020
      jsr startplaysong  
      dec $d020

; inizio codice aggiunto
loop lda $dc01
       and #$10
       bne lp
       jsr wt
; fine
          ...



Leggo se è stato premuto spazio e salto alla routine che controlla il raster... cosi' facendo, do una sorta di play veloce.

so che lo sai.. ma lo scrivo x chi non lo sapesse :)

Credo di aver capito anche come fare un fade... dovrei portare a zero $d418
C64/C64c/C128/C16/Vic20 | 64SD Infinity 2.0 |

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Sidplayer V.01
« Risposta #4 il: 08 Luglio 2006, 16:53:08 »
Citazione da: "Fabbroz75"
Credo di aver capito anche come fare un fade... dovrei portare a zero $d418
Si, devi solo tenere conto che il registro del volume e' spesso modificato dalle routine del player ad ogni nota, e questo comporterebbe dei click non desiderati.
Va disassemblato il .sid per vedere se necessita di una patch fatta al volo.
Codice: [Seleziona]
1033  A9 1F     LDA #$1F
1035  8D 18 D4  STA $D418
Come immaginavo =)
prima di iniziare il fade cambia la STA in BIT, per non far piu' scrivere a $d418
Codice: [Seleziona]
lda #$2c
sta $1035
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -