DEVICE ZXSPECTRUM128
include "../_sdk/sys_h.asm"
include "playerdefs.asm"
org PLAYERSTART
begin PLAYERHEADER
isfilesupported
;cde = file extension
mwmsupported=$+1
ld a,'m'
cp c
ret nz
ld hl,'wm'
sub hl,de
ret
playerinit
;hl = shared pages
;a = player page
ld de,songdata_bank1
ld bc,3
ldir
call ismoonsoundpresent
ret z
ld (mwmsupported),a ;writes 255 disabling the extension
ret
playerdeinit
ret
musicload
;de = input file name
;First try loading wavekit with the same filename as input file.
;This allows overriding wavekit specified in MWM header without
;having the file edited.
ex de,hl
ld (filenameaddr),hl
ld c,'.'
call findlastchar ;out: de = after last dot or start
ld hl,2
add hl,de
ld (hl),'k'
filenameaddr=$+1
ld de,0
push hl
call openstream_file
pop hl
ld (hl),'m'
or a
jr z,loadmwkdata
;din't find wavekit so now have to load and parse module header
ld de,(filenameaddr)
call openstream_file
or a
ret nz
ld a,(songdata_bank1)
SETPG8000
ld de,0x8000
ld hl,284
call readstream_file
call closestream_file
;check if this is a valid MWM file
ld de,0x8000
ld a,8 ;file type 8 = wave user song
call check_header
ret nz
;check if wavekit is needed
ld hl,0x8114
ld de,mwknone
ld b,8
call chk_headerlus
jr z,loadmwm
;build filename
ld hl,(filenameaddr)
ld de,0x8000
call strcopy_hltode
ld hl,0x8000
ld c,'/'
call findlastchar ;out: de = after last slash or start
ld hl,0x8114
ld b,8
filenamecopyloop
ld a,(hl)
cp ' '
jr z,donefilenamecopy
ld (de),a
inc hl
inc de
djnz filenamecopyloop
donefilenamecopy
ex de,hl
ld (hl),'.'
inc hl
ld (hl),'m'
inc hl
ld (hl),'w'
inc hl
ld (hl),'k'
;load wavekit
ld de,0x8000
call openstream_file
or a
ret nz
loadmwkdata
call mwkload
push af
call closestream_file
pop af
ret nz
loadmwm
ld de,(filenameaddr)
call openstream_file
or a
ret nz
call mwmload
ret nz
call closestream_file
call start_music
ld a,255
ld (xloop),a
xor a
ret
musicunload
jp stop_music
musicplay
;out: zf=0 if still playing, zf=1 otherwise
ld a,(play_busy)
or a
ret z
in a,(MOON_STAT)
rla
jr nc,musicplay
call play_int
ld a,(play_busy)
or a
ret
checknone
ld a,(hl)
cp 'N'
ret nz
inc hl
ld a,(hl)
cp 'O'
ret nz
inc hl
ld a,(hl)
cp 'N'
ret nz
inc hl
ld a,(hl)
cp 'E'
ret nz
inc hl
ld a,(hl)
cp ' '
ret
strcopy_hltode
ld a,(hl)
ld (de),a
or a
ret z
inc hl
inc de
jr strcopy_hltode
;c = character
;hl = poi to filename in string
;out: de = after last dot or start
findlastchar
ld d,h
ld e,l ;de = after last char
findlastchar0
ld a,(hl)
inc hl
or a
ret z
cp c
jr nz,findlastchar0
jr findlastchar
mwknone
db "NONE "
load_file
push de
push ix
call readstream_file
pop ix
pop de
ret
selbank_FE
SETPG8000
ret
include "../_sdk/file.asm"
include "moonsound.asm"
include "mbwave/basic.asm"
end
savebin "mwm.bin",begin,end-begin