Welcome to Schneider / Amstrad CPC Forum. Please login or sign up.

16. April 2024, 23:21:59

Login with username, password and session length

Shoutbox

TFM

2024-04-08, 20:42:44
Happy Sonnenfinsternis!  :)

TFM

2024-01-15, 17:06:57
Momentan billige Farbbänder auf Ebay für PCW

Devilmarkus

2023-07-09, 10:37:40
Zweiter 👋😂🤣

TFM

2023-06-13, 14:21:49
Sommerloch!

TFM

2023-05-30, 17:00:20
Erster ;-)

Recent

Members
Stats
  • Total Posts: 11,691
  • Total Topics: 1,334
  • Online today: 189
  • Online ever: 1,724
  • (16. January 2020, 00:18:45)
Users Online
Users: 1
Guests: 149
Total: 150

149 Guests, 1 User
Rennert

Sound Programmierung

Started by oobdoo, 08. February 2015, 10:23:07

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

oobdoo

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.  >:(
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

oobdoo

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
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

oobdoo

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.  :(
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

oobdoo

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
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TFM

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?
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

oobdoo

Egal ob ich DW oder DEFW schreibe, da ändert sich nix.  :'(
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TFM

#6
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!?!
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

oobdoo

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.
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

oobdoo

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


CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

TFM

Da sind zu viele 2en drin, aber das Bild erklärt es super. Danke.  :smiley027:
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)

oobdoo

Was für zweien? Dat funktioniert!!!  ;)
CPC 464/6128, 464/6128+, GX4000 | Atari 2600, 600XL, 800XL/XE, Portfolio | C64/II/G/R/SX, VC20, TC64 | LC 80, MPF-I | ZX81, AX81, ZX Spectrum 48k, ZX Spectrum+2 | Amiga 500/600/2000, A2630, A2088

EBO


TFM

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!
TFM of FutureSoft
http://www.futureos.de --> Das Betriebssystem FutureOS (Update: 20.12.2023)
http://futureos.cpc-live.com/files/LambdaSpeak_RSX_by_TFM.zip --> RSX ROM für LambdaSpeak (Update: 26.12.2021)