;/----------------------------------------------------------------------\
;|								    	|
;|	Name:     MPlayerdemo.ASM 					|
;|								    	|
;|	Von Joachim Hellmann  © 1992 MAXON Computer GMBH		|
;|								    	|
;|	Benötigt MPlayer V1.0 oder höher !  				|
;|								    	|
;|	Achtung : MPlayer muß sich auf der Diskette im aktuellen   	|
;|		  Directiory befinden, wenn nicht, dann  einfach	|
;|		  den  Pfad  für MPlayers ( PlayerPfad ) auf den	|
;|		  gewünschten Pfad setzen !			    	|
;|								    	|
;|	Zum Compilieren mit Seka-Assembler SECTION Anweisung entfernen	|
;|								    	|
;\----------------------------------------------------------------------/

Execbase	equ	4

;-----------------------------  Exec-Library  ---------------------------

OpenLibrary	equ	-552
CloseLibrary	equ	-414

;-----------------------------  Dos-Library  ----------------------------

LoadSeg		equ	-150
UnLoadSeg	equ	-156

;--------------------------------  MPlayer  -----------------------------

InitPlayer	equ	4   ; InitPlayer    ()
FreePlayer	equ	8   ; FreePlayer    ()
LoadSong	equ     12  ; d0 = LoadSong (Name) d0
FreeSong	equ     16  ; FreeSong      ()
PlaySong	equ	20  ; PlaySong      (Songpointer,Patternanzahl) d0,d1
StopSong	equ	24  ; StopSong      ()
PlayPattern	equ	28  ; PlayPattern   (Patternnummer,Anzahl) d0,d1
StopPattern	equ	32  ; StopPattern   ()
CheckMidi	equ	36  ; d0 = Checkmidi()
WaitMidi	equ	40  ; WaitMidi      ()
AdjustMidi	equ	44  ; AdjustMidi    ()
NoteOff		equ	48  ; NoteOff       ()
Panic		equ	52  ; Panic         ()
CallStack	equ	56  ; Callstack     (Offset,Rückgabewert,d0,d1,d2,d3)
		  	    ; Nur für AmigaBasic und C-Programmierer gedacht!

;------------------------------------------------------------------------

		SECTION _Main,CODE

;---------------------------- Hauptprogramm  ----------------------------

Startup:

		move.l	Execbase,a6		; Doslibrary öffnen
		lea	DosName(PC),a1		; Library Name
		moveq	#0,d0			; Version egal !
		jsr	OpenLibrary(a6)		; und öffnen
		tst.l	d0			; Fehler ?
		beq	KeineDosLib		; sollte nicht vorkommen !
		move.l	d0,DosBase
		
		move.l	DosBase(PC),A6		; MPlayer laden
		move.l 	#PlayerPfad,D1		; Pfad des Players
		jsr	LoadSeg(A6)		; und laden
		tst.l	d0			; Fehler ?
		beq	SegFehler		; dann beenden !
		move.l	d0,SegmentZeiger	; Segmentzeiger sichern 
		
		asl.l	#2,d0			; BCPL-Zeiger 
		addq.l	#4,d0			; umwandeln
		move.l	d0,MMidiBase		; und sichern !

		move.l	MMidiBase,a5		; Zeiger auf Playermodul
		jsr	InitPlayer(a5)		; Player initialisieren
		tst.l	d0			; Fehler
		bmi	InitFehler		; dann Programm beenden
				
		move.l	MMidiBase,a5		; Zeiger auf Playermodul
		move.l 	#DemoSong,d0		; Name des Demosongs
		jsr	LoadSong(a5)		; Laden
		tst.l	d0			; Fehler ?
		beq	Exit			; Bää, Programm beenden
		move.l	d0,MidiBase		; Zeiger auf MidiBase

		move.l	MMidiBase,a5		; Zeiger auf Playermodul
		jsr	AdjustMidi(a5)		; Daten des Midimixers
						; an Midigerät schicken !

		move.l	MMidiBase,a5		; Zeiger auf Playermodul
		move.l	#0,d0			; Songpointer auf null
						; setzen ( Songanfang )
		move.l	#3,d1			; drei Pattern spielen
		jsr	PlaySong(a5)		; Spielen
		tst.l	d0			; Fehler ?
		bmi	Exit			; Programm beenden
		
		move.l	MMidiBase,a5		; Zeiger auf Playermodul
		jsr	WaitMidi(a5)		; Warte auf Songende
						; Ohne Prozessorzeit zu
						; verbrauchen 
						; Demotask wird auf waiting
						; gesetzt !						
Exit:
		move.l	MMidiBase,a5		; Zeiger auf Playermodul
		jsr	FreePlayer(a5)		; Player von seiner Arbeit
						; befreien !
InitFehler:
		move.l	Dosbase(PC),a6		; Player aus System 
		move.l	SegmentZeiger(PC),d1	; entfernen
		jsr	UnloadSeg(a6)		; und tschüüs !
SegFehler:
		move.l	Execbase,a6		; Doslibrary schließen 
		move.l	DosBase(PC),a1
		jsr	CloseLibrary(a6)
KeineDosLib:
		moveq	#0,d0			; Keine Fehler !
		rts				; zurück zum CLI
		
;------------------------ Programm Daten --------------------------------
		
DosBase:	dc.l 0				; Zeiger auf Dos-Library
MMidiBase:	dc.l 0				; Zeiger auf MPlayer
MidiBase:	dc.l 0				; Zeiger auf MidiBase
SegmentZeiger:	dc.l 0				; BCPL MPlayerzeiger


DosName:	dc.b "dos.library",0		; Name der Doslibrary
PlayerPfad:	dc.b "MPlayer",0		; MPlayer Diskettenpfad
		even
DemoSong:	dc.b "df0:Songs/Demosong",0	; Name des Demosongs

		end
				
;----------------------- Strukturen -------------------------------------

AmigaSampleList:
	$0010	16	Sizeof(AmigaSampleList)
	$0000	 0	Sample_Adress
	$0004	 4	Sample_Size
	$0008	 8	Sample_LoopStart
	$000c	12	Sample_LoopSize	

Analyzer:
	$0018	24	Sizeof(Analyzer)
	$0000	 0	Channel 1
	$0001	 1	Channel 2
	$0002	 2	Channel 3
	$0003	 3	Channel 4
	$0004	 4	Channel 5
	$0005	 5	Channel 6
	$0006	 6	Channel 7
	$0007	 7	Channel 8
	$0008	 8	Channel 9
	$0009	 9	Channel 10
	$000a	10	Channel 11
	$000b	11	Channel 12
	$000c	12 	Channel 13
	$000d	13 	Channel 14
	$000e	14 	Channel 15
	$000f	15 	Channel 16
	$0010	16 	Channel 17
	$0011	17 	Channel 18
	$0012	18 	Channel 19
	$0013	19 	Channel 20
	$0014	20 	Channel 21
	$0015	21 	Channel 22
	$0016	22 	Channel 23
	$0017	23 	Channel 24
		
MidiBase:
	$001e	26	Sizeof(Midi_Base)
	$0000	 0	Module_Adress
	$0004    4	InstrumentChannelInfo
	$0008	 8	Analyzer
	$000c	12	Amiga_SampleList
	$0010	16	SongList
	$0014	20	Pattern_count
	$001a	22	Actual_Line
	
SongList:
	$00ff	255	Sizeof(Songlist)
	$0000	 0	Pattern 1
	$0000	 1	Pattern 2
	$0000	 2	Pattern 3
		 ..  .. 
		 ..  .. 
		 ..  .. 
		 ..  .. 
	$00fe  254	Pattern 254


