;
; LISTING 3

;          -------------------     
;          H E A D - M U S I C     
;          -------------------     
;      Written by Bernd Marienfeldt
;      Lichtenstein,8.12.87        
;         SEKA-ASSEMBLER + AMIGA   

START:
movem.l  d0-d7/a0-a6,-(sp)    ; Register auf StackPointer retten
move     #$4000,$dff09a       ; Interrupts ausschalten 
                              ; => voller Diskzugriff
bset     #3,$bfd100           ; Bit fuer DF0-Auswahl setzen 
bclr     #3,$bfd100           ; und loeschen => Auswahl
Frombegin:
move.l   #msize,d5            ; Anzahl der Daten die durchlaufen  
lea      Musicdatas,a5        ; Musikdaten nach A5 laden
Start1:
move.l   (a5)+,frequenz1      ; Frequenz1 setzen,eins weiter
move.l   (a5)+,frequenz2      ; Frequenz2 setzen,eins weiter
Start2:
bset     #0,$bfd100           ; Bit fuer Steppen setzen und
bclr     #0,$bfd100           ; loeschen => Steppen
jsr      wait                 ; Wait-Routine anspringen = Warten
btst     #6,$bfe001           ; L-Maustaste testen,wenn
beq      finito               ; gedrueckt Programm beenden
cmp.l    #0,frequenz1         ; Wenn Frequenz1 = 0 ist,muessen   
beq      aus                  ; Fequenzen neu gesetzt werden
sub.l    #1,frequenz1         ; Eins von Frequenz1 abziehen
bra      start2               ; 'Bra start2': mit alten Werten
Aus:                          ; weiterarbeiten.
dbra     d5,start1            ; Bis Musikdaten abgearbeitet sind
                              ; nach start1 verzweigen.(Musikdaten
                              ; minus 1,da die Schleife ja mindestens
                              ; ein mal durchlaufen wird.
Finito:
movem.l	 (a7)+,d0-d7/a0-a6    ; Register von StackPointer holen
rts                           ; Ausstieg aus Programm =>SEKA

Wait:                         ; Dies Wait-Schleife liese sich auch
                              ; mit Der Delay-Funkt. bewerkstelligen,
                              ; so sparen Sie aber das Oeffnen der
                              ; DosLibrary.
move.l   frequenz2,d3         ; Frequenz2 nach D3
wait1:
beq      auswait              ; Ist Fequenz schon = 0,falls ja nach
                              ; auswait =>also Warteschl. beenden.
sub.l    #1,d3                ; Eins von Frequenz2 abziehen
bra      wait1                ; Nach wait1 verzweigen => SCHLEIFE
Auswait:
rts                           ; Zurueckspringen von wo man ge-
                              ; kommen ist,also nach oben,nach
                              ; 'jsr wait'.

; ** DATAS fuer 'DEUTSCHE HYMNE-THEME' **
Musicdatas:
MSTART:
dc.l 1300,100,700,90,1100,80,1250,90,1150,75,1100,81,700,90,500,110
dc.l 900,102,1400,59,1200,67,1100,76,1000,82,950,92,600,82,500,106
dc.l 1300,65
MEND:

; Auch mal 'Alle..mein..'ausprobieren:dazu Musicdatas vor 'A..l'setzen
; und MSTART2 und MEND2 in MSTART MEND verwandeln und obige Daten
; rauschmeissen

; ** DATAS fuer 'ALLE MEINE ENDchen-THEME' **
MSTART2:
dc.l 900,100,900,90,900,80,900,75,1300,66,0,$8000,1200,66,0,$2000
dc.l 1000,60,0,$4000,800,60,0,$4000,800,60,0,$4000,800,60,0,$4000
dc.l 1200,70,0,$13000,1000,60,0,$4000,800,60,0,$4000,800,60,0,$4000
dc.l 800,60,0,$4000,1200,70,0,$4000,800,78,0,$4000,800,78,0,$4000
dc.l 800,78,0,$4000,800,78,0,$4000,1200,87,0,$4000,1200,87,0,$2000
dc.l 700,97,0,$2000,700,97,0,$2000,700,97,0,$2000,700,97,0,$2000
dc.l 1000,110
MEND2:

Frequenz1:     dc.l  0        ; Labels fuer Frequenz1 und Fequenz2
Frequenz2:     dc.l  0        ; Hier werden die Werte gespeichert.
GraphLib:   dc.b 	"graphics.library",0 ;Name fuerGraphics-Libr.
Msize = [[Mend-Mstart]/8]-1   ; (minus 1,wegen dbra)
