;Playdemo.asm
;(Plays a packed amd)
;
;How to use the player of Amusic (in polling mode!!!)
;6.12.1995 by Conqueror / $$$
;
;Link this with amdobj.obj!!!
;

EXTRN _InitAdlib   : near
EXTRN _AdlibPlayer : near
EXTRN _StopAdlib   : near

EXTRN _AdlibState   : byte


.model small
.stack
.386
.data

FileName	db 14 dup(0)
fhandle dw 0

WorkBuffer db 522h dup(?)


ModBase	label byte
	db 50000 dup(?)



;####### CODE #########

.code
maincode:
	mov	ax,@data
        mov	ds,ax

        mov	bx,82h
        mov	di,offset FileName
fnam_loop:
	mov	cl,es:[bx]
        cmp	cl,0Dh
        jz	fnam_eos
        cmp	cl,20h
        jz	fnam_eos
        or	cl,cl
        jz	fnam_eos
        mov	ds:[di],cl
        inc	di
        inc	bx
        cmp	bx,82h+12
        jb	fnam_loop
fnam_eos:
        mov	es,ax


;------ Load the mod

        mov	ax,3D00h
        mov	dx,offset FileName
        xor	cl,cl
        int	21h
        jc	LoadError
        mov	[fhandle],ax

	mov	ah,3Fh
        mov	bx,[fhandle]
        mov	cx,50000
        mov	dx,offset ModBase
        int	21h

        mov	ah,3Eh
        mov	bx,[fhandle]
        int	21h


;------ Init the mod!!!
        mov	si,offset ModBase
        mov	di,offset WorkBuffer
        mov	al,1	    ;0=irq_mode  1=polling_mode
	call	_InitAdlib

        cmp	cs:[_AdlibState],0
        jz	LoadError		;No adlib present!?

PlayLoop:			;*** MAINLOOP *****


;------ Wait for retrace!!!
        mov	dx,03DAh
Wait1:	in	al,dx
	and	al,8
        jnz	short Wait1
Wait2:	in	al,dx
        and	al,8
        jz	short Wait2

        mov	si,offset ModBase
        mov	di,offset WorkBuffer
        call	_AdlibPlayer


;------ check ESC key
	in	al,60h
	dec	al
	jnz    	short PlayLoop


;------ Fuck off!!!
        call	_StopAdlib

LoadError:
	mov	ah,04Ch		;BYE
	int	21h

end maincode
