The Soundmachine Song in ASS einbinden


The Soundmachine Song in ASS einbinden

von skriegel » Sa 11. Aug 2018, 20:42
Hallo,

ich schreibe ein kleines Demo in Assembler (mit MADS in WUDSN IDE) und habe ein Soundfile im obj-Format, welches mit "The Soundmachine" erstellt wurde. Dieses will ich nun in meinem Demo verwenden, aber ich habe keinen blassen Schimmer, wie ich das anstelle. Kann mir da jemand weiterhelfen?

Re: The Soundmachine Song in ASS einbinden

von tfhh » Mo 13. Aug 2018, 10:37
Moin,

skriegel hat geschrieben:ich schreibe ein kleines Demo in Assembler (mit MADS in WUDSN IDE) und habe ein Soundfile im obj-Format, welches mit "The Soundmachine" erstellt wurde. Dieses will ich nun in meinem Demo verwenden, aber ich habe keinen blassen Schimmer, wie ich das anstelle. Kann mir da jemand weiterhelfen?

Weia, das ist 30 Jahre her, wo ich damit gespielt habe 8)

Also, wenn ich mich recht erinnere, war das im Begleitbuch erklärt - das sollte sich finden lassen. Auf der 2. Diskette waren auch Beispiele, wie man das aus BASIC macht. Die Abspielroutine gab es für zwei oder drei verschiedene Speicherbereiche, die wurden geladen, das Musikfile auch und dann per USR gestartet. Ich weiß nicht, ob der Source für die Assemblerroutine mit drauf war, aber wenn nicht, kannst Du ja problemlos die Abspielroutine mit INCLUDEn und anspringen von Deinem Programm aus.

Aber alles ohne Gewähr...

Grüße, Jürgen

Re: The Soundmachine Song in ASS einbinden

von skriegel » Mo 13. Aug 2018, 11:25
Danke Jürgen.
Begleitbuch konnte ich noch nicht finden. Wie man das in BASIC macht, ist auf der Disk anhand eines Beispielprogramms ersichtlich. Allerdings reichen meine bescheidenen Künste nicht aus, daraus zu ersehen, wie ich es in MS mache.

"irgendwer" schrieb auf AtariAge, dass die Files statisch sind und mit $1F00 beginnen. Das konnte ich soweit durch debugging auch nachvollziehen.

Initialisiert werden soll wohl mit "jsr $1f09", abgespielt dann mit

lda #0
sta $1F1E

Aber da habe ich noch keinen Erfolg mit. :(

Re: The Soundmachine Song in ASS einbinden

von pps » Fr 17. Aug 2018, 23:24
Ich gehe mal davon aus, dass Du selbst irgendeinen Interrupt nutzt und die fertige Routine im "The Soundmachine"-File das auch macht.

Dann wird es schwer das einfach so abzuspielen. Wichtig wäre da die genaue Info, wie die das "damals" gebaut haben, damit man dann die eigenen Routinen in den anderen Interrupt schiebt.
Ich tippe mal, dass die Datei einfach einen vbi initialisiert und dann den Sound abspielt.

but... who knows? the manual ;)

Re: The Soundmachine Song in ASS einbinden

von skriegel » Sa 18. Aug 2018, 17:11
Nein, ich nutze keinen Interrupt.

Re: The Soundmachine Song in ASS einbinden

von Jac » Sa 25. Aug 2018, 01:00
Schick mal per Mail/PM was Du hast. Ich schau mal wie ich das zusammenbastel :-)

Re: The Soundmachine Song in ASS einbinden

von skriegel » Sa 25. Aug 2018, 13:05
Danke. Du hast Post. ;)

Re: The Soundmachine Song in ASS einbinden

von Jac » So 26. Aug 2018, 00:17
Dank Beispielsong hier die Lösung.
Der .OBJ File aus dem Soundmonitor hat 4 Segmente.
S1.png
S1.png (268.13 KiB) 2947-mal betrachtet


Das erste ist der eigentlichen Song + Code.
Das zweite initialisiert den Sound und hängt den Player in den Deferred VBI.
Das dritte setzt die Startadresse auf "Spring über DOSVEC/ins DOS/Cartridge"
Das vierte setzt MEMLO, damit BASIC nach dem Laden erst nach dem Song im Speicher anfängt.

Alles außer dem ersten braucht man nicht, wenn man es direkt einbindet.
Also habe ich mit WUDSN die Länge der ersten Segmentes gesucht, die INITAD address und das Flag das den Sound startet.

Re: The Soundmachine Song in ASS einbinden

von Jac » So 26. Aug 2018, 00:18
Das braucht man tatsächlich;

Code: Alles auswählen

sound_org   = $1f00
sound_init   = $1f09
sound_mode   = $1f1e
      
   org sound_org
   ins "ONE.obj",+6,$bd4

   org $4000

start   jsr sound_init   ;Install players in deferred vertical blank

   lda #0
   sta sound_mode
   jmp *

   run start




So sehen die Segmente original aus:

Code: Alles auswählen
;COM block 1
;0000 : 0000 : FF FF 00 1F D3 2A                                 
;0006 : 1F00 : 01 05 01 01 01 01 00 80 0A A9 22 8D 35 21 A9 27
;0016 : 1F10 : 8D 36 21 20 2F 26 4C 52 26
;1F09: A9 22             LDA #$22
;1F0B: 8D 35 21          STA $2135
;1F0E: A9 27             LDA #$27
;1F10: 8D 36 21          STA $2136
;1F13: 20 2F 26          JSR $262F
;1F16: 4C 52 26          JMP $2652
;
;262F: A9 00     L262F   LDA #$00
;2631: 8D 1B 1F          STA $1F1B
;2634: A9 01             LDA #$01
;2636: 8D 1E 1F          STA $1F1E
;2639: A2 7F             LDX #$7F
;263B: BD AF 25  L263B   LDA $25AF,X
;263E: 9D EF 1F          STA $1FEF,X
;2641: CA                DEX
;2642: 10 F7             BPL $263B
;2644: A2 00             LDX #$00
;2646: BD 8A 26  L2646   LDA $268A,X
;2649: 9D 1F 1F          STA $1F1F,X
;264C: E8                INX
;264D: E0 10             CPX #$10
;264F: D0 F5             BNE $2646
;2651: 60                RTS
;
;
;2652: A9 01             LDA #$01
;2654: 85 42             STA CRITIC
;2656: A2 FF             LDX #$FF
;2658: A0 64     L2658   LDY #$64
;265A: 88        L265A   DEY
;265B: D0 FD             BNE $265A
;265D: CA                DEX
;265E: D0 F8             BNE $2658
;2660: AD 08 1F          LDA $1F08
;2663: C9 B2             CMP #$B2
;2665: F0 1B             BEQ $2682
;2667: AD 24 02          LDA VVBLKD
;266A: 8D E2 23          STA $23E2
;266D: AD 25 02          LDA VVBLKD+1
;2670: 8D E3 23          STA $23E3
;2673: A9 6F             LDA #$6F
;2675: 8D 24 02          STA VVBLKD
;2678: A9 20             LDA #$20
;267A: 8D 25 02          STA VVBLKD+1
;267D: A9 B2             LDA #$B2
;267F: 8D 08 1F          STA $1F08
;2682: A9 00             LDA #$00
;2684: 85 42             STA CRITIC
;2686: EA                NOP
;2687: EA                NOP
;2688: EA                NOP
;2689: 60                RTS
;       $26A3 6C 0A 00          JMP (DOSVEC)

;COM block 2: Set INIAD to $1f09
;0BDA : 0000 : E2 02 E3 02                                           
;0BDE : 02E2 : 09 1F                                                 
;
;COM block 3: Set RUNAD to $26A3
;0BE0 : 0000 : E0 02 E1 02                                           
;0BE4 : 02E0 : A3 26                                                   
;
;COM block 4; Set MEMLO ($2E7$2E8) to $2AD4 (end of music)
;0BE6 : 0000 : E7 02 E8 02                                         
;0BEA : 02E7 : D4 2A   

Re: The Soundmachine Song in ASS einbinden

von skriegel » So 26. Aug 2018, 19:16
Super, vielen Dank.

Den Code verstehe ich aber nicht komplett. Was genau macht die "+6" in

ins "ONE.obj",+6,$bd4

?

$bd4 ist die Länge des Songs, oder?

Re: The Soundmachine Song in ASS einbinden

von Jac » So 26. Aug 2018, 23:42
Der ,+6 überspringt die erste 6 bytes der Datei. Dort steht der COM Header: FF FF <start >start <end >end
Und ja, $bd4 ist die Länge der Sounddaten/des ersten Segments.

Hier: start = $1f00, end = $2Ad3 => start-end+1=$bd4