Schneider / Amstrad CPC Forum

Amstrad / Schneider CPC => Programmierung => Topic started by: oobdoo on 08. February 2015, 10:23:07

Title: Sound Programmierung
Post by: oobdoo on 08. February 2015, 10:23:07
In meinem Spiel taucht folgende Befehlsreihenfolge auf:

ENV 1,100,2,2,1,1,1
ENT 1,100,-2,2
SOUND 1,284,200,1,1,1

Wie setzt man sowas in Assembler um?  :(

Ich hab schon auf dem CPCWiki geschaut, aber die arbeiten nur mit Byte-Werten. Bei mir gibt es aber den Wert 284, also mehr wie acht Bit.

Werd aus dem englischen Zeuchs nicht schlau draus.  >:(
Title: Re: Sound Programmierung
Post by: oobdoo on 08. February 2015, 14:32:40
Hat sich erledigt. Hab auf CPCWiki einen Hinweis bekommen mit dem es funktioniert hat.  :00008351:

org &4000
.sque equ &bcaa

       ld a,1
       ld hl,env
       call &bcbc

       ld a,1
       ld hl,ent
       call &bcbf

ld hl,sdata
call sque
ret

.sdata defb 1
defb 1
defb 1
defw 284
defb 0
defb 1
defw 200

.env defb 1,100,2,2,1,1,1

.ent defb 1,100,-2,2
Title: Re: Sound Programmierung
Post by: oobdoo on 09. February 2015, 20:52:10
Nächstes Problem mit dem Sound. Beim ersten Beispiel klingt BASIC genauso wie Assembler.

Nicht aber beim anderen Sound.

BASIC aus dem Programm
for qwe=7 to 0 step -1
sound 4,0,1,qwe,4,0,31
next


Z80 als Beispiel
.bla

ld hl,env2+7
call &bcaa

LD HL,5000
.loop1400
DEC HL
LD A,H
OR L
JR NZ,loop1400     

        ld hl,env2+7
        call &bcaa

LD HL,5000
.loop14001
DEC HL
LD A,H
OR L
JR NZ,loop14001
       
        ld hl,env2+14
        call &bcaa

LD HL,5000
.loop14002
DEC HL
LD A,H
OR L
JR NZ,loop14002
       
        ld hl,env2+21
        call &bcaa

LD HL,5000
.loop14003
DEC HL
LD A,H
OR L
JR NZ,loop14003
       
        ld hl,env2+28
        call &bcaa

LD HL,5000
.loop14004
DEC HL
LD A,H
OR L
JR NZ,loop14004
       
        ld hl,env2+35
        call &bcaa

LD HL,5000
.loop14005
DEC HL
LD A,H
OR L
JR NZ,loop14005
       
        ld hl,env2+42
        call &bcaa

LD HL,5000
.loop14006
DEC HL
LD A,H
OR L
JR NZ,loop14006
       
        ld hl,env2+49
        call &bcaa
              ret
             
.env2
defb 4,0,1,7,4,0,31
defb 4,0,1,6,4,0,31
defb 4,0,1,5,4,0,31
defb 4,0,1,4,4,0,31
defb 4,0,1,3,4,0,31
defb 4,0,1,2,4,0,31
defb 4,0,1,1,4,0,31
defb 4,0,1,0,4,0,31


Klingt total nach was anderem.  :(
Title: Re: Sound Programmierung
Post by: oobdoo on 09. February 2015, 21:16:26
Hm, einen Fehler habe ich schon gefunden. Da darf ja nicht nur DEFB stehen, sondern bei Byte 2-3 und 7-8 ein DEFW.
Aber dann hör ich gar nix mehr.  :o
Title: Re: Sound Programmierung
Post by: TFM on 09. February 2015, 22:21:39
K.A. welche DB oder DW Anweisungen es sind. Aber bei DW / DEFW wird das low Byte zuerst im RAM abgelegt. Findet hier eine Verwechslung statt?
Title: Re: Sound Programmierung
Post by: oobdoo on 10. February 2015, 15:23:03
Egal ob ich DW oder DEFW schreibe, da ändert sich nix.  :'(
Title: Re: Sound Programmierung
Post by: TFM on 10. February 2015, 21:58:10
Nein ich meinte, dass bei DW von der Z80 zuerst mal das Low-Byte, dann das High-Byte abelegt wird.

Kannst Du bitte ein Beispiel in BASIC und eines in Assembler angeben? (da wo ein Problem auftritt).



EDIT: Ich habe gerade dein BASIC Beispiel von oben probiert. Die drei Zeilen machen gar keinen Sound. Also da fehlt wohl etwas (von deinem Listing).
Und das fehlt wohl auch im Asselmbler-Program!?!
Title: Re: Sound Programmierung
Post by: oobdoo on 11. February 2015, 19:01:06
Ich komme aber weiterhin ins Schleudern mit den Begriffen.

Sound in BASIC hat die Parameter...
01. Kanalstatus
02. Tonperiode
03. Dauer
04. Lautstärke
05. Lautstärkenhüllkurve
06. Tonhüllkurve
07. Geräuschperiode

Sound in Z80 mit &BCAA laut meinem deutschen Firmwarehandbuch...
Byte 0 Kanalangabe und Rendezvouserfordernisse
Byte 1 Amplituden-Hüllkurve
Byte 2 Ton-Hüllkurve
Byte 3..4 Tin-Periode
Byte 5 Geräuschperiode
Byte 6 Anfangsamplitude
Byte 7..8 Dauer oder Hüllkurven-Wiederholungszähler

Byte 0 würde ich 01. zuordnen.
Byte 5 zu 07.
Byte 7..8 zu 03.

Und der Rest? Irgendwie bringe ich den Begriffe nicht zueinander.
Title: Re: Sound Programmierung
Post by: oobdoo on 13. February 2015, 17:40:35
Sounddaten umwandeln (BASIC => Z80)
Da die Reihenfolge bei der Parameterübergabe in Assembler eine andere als in BASIC ist, habe ich mal was in Excel gebastelt.
Vielleicht kann es ja einer auch gebrauchen.

SOUND 2,284,10,2,2,1,10 ergibt

defb 2,2,1
defw 284
defb 10,2
defw 10


Title: Re: Sound Programmierung
Post by: TFM on 13. February 2015, 17:54:37
Da sind zu viele 2en drin, aber das Bild erklärt es super. Danke.  :smiley027:
Title: Re: Sound Programmierung
Post by: oobdoo on 13. February 2015, 18:30:50
Was für zweien? Dat funktioniert!!!  ;)
Title: Re: Sound Programmierung
Post by: EBO on 03. September 2016, 20:26:32
Neter Sound
Title: Re: Sound Programmierung
Post by: TFM on 04. September 2016, 01:23:47
Quote from: oobdoo on 13. February 2015, 18:30:50
Was für zweien? Dat funktioniert!!!  ;)

Ja, klar, ist nur schwierig bei den ganzen Doppelten Zweien zu verfolgen wo die hinkommen. Prost!