; Example use of MWM driver support routines ; Usage : LOAD SONG.MWM ; MWK file is automaticly loaded. org #100 include 2 ; MWMDRVR LD DE,intro_txt CALL PRINT LD A,(#80) OR A,A JP Z,help ; Return to dos if command line is empty MUSIC.INIT_DRIVER JP C,PRINT LD A,(#80) LD B,A LD HL,#81 check_cmd_line LD A,(HL) CP A," " JP NZ,found_file_name INC HL DJNZ check_cmd_line JP help found_file_name LD (start_file_name),HL EX DE,HL ; De = pointer to file name XOR A,A LD C,#43 ; _OPEN CALL 5 PUSH BC LD HL,278+6 LD C,#48 ; _READ LD DE,MWM_HEADER CALL 5 POP BC PUSH BC LD DE,0 LD HL,0 LD C,#4A ; _SEEK LD A,2 ; Relative to the end of the file CALL 5 LD (file_size),hl POP BC LD C,#45 ; _CLOSE CALL 5 JP NZ,error_mwm LD DE,MWM_HEADER CALL CHECK_HEADER JP NZ,MWM_ERROR ; MUSIC.STOP MUSIC.FREE ; Free used segents LD hl,(file_size) LD DE,16385 OR A,A SBC HL,DE LD B,1 JP C,smaller_then_16k LD B,2 smaller_then_16K PUSH BC CALL Get_doscall ; Get free segments POP BC SUB A,B JP C,No_ram_Free MUSIC.ALLOC LD DE,MWM_HEADER+276 LD HL,none_txt LD B,4 check_on_NONE LD A,(DE) CP A,(HL) JP NZ,load_wave_kit INC HL INC DE DJNZ check_on_NONE JP play load_wave_kit LD HL,MWM_HEADER+276 LD B,8 LD C,0 search: LD A,(HL) CP A," "+1 JP C,found INC C INC HL DJNZ search found: LD B,0 LD A,4 ADD A,C LD C,A PUSH BC EX DE,HL LD Hl,ext LD BC,4 LDIR ld c,#5B ; _PARSE ld b,0 LD DE,(start_file_name) CALL 5 ; Returns with HL to the begin of the file name OR A,A LD DE,(start_file_name) SBC HL,DE LD DE,string_buffer JP Z,No_path LD B,H LD C,L LD HL,(start_file_name) LDIR ; Copy string to string_buffer No_path LD HL,MWM_HEADER+276 POP BC LDIR ; Copy file name behind path name. LD A,"$" LD (DE),a PUSH DE LD DE,load_mwk_txt CALL PRINT LD DE,string_buffer CALL print LD DE,next_line CALL print POP DE XOR A,A LD (DE),a LD DE,string_buffer MUSIC.MWK.LOAD JP NZ,error_mwk play: LD DE,(start_file_name) MUSIC.MWM.LOAD 0 JP NZ,error_mwm MUSIC.MWM.INFO songname CALL print_name MUSIC.PLAY 0 ret MUSIC.DRIVER CHECK_HEADER LD HL,header_txt LD B,6 CHK_HEADER.0 LD A,(DE) CP (HL) RET NZ INC HL INC DE DJNZ CHK_HEADER.0 RET PRINT LD C,9 ; _STROUT JP 5 print_name: LD DE,song_txt CALL PRINT LD DE,songname CALL PRINT LD DE,next_line JP PRINT help LD DE,help_txt JP PRINT exit_to_dos LD C,0 JP 5 error_mwk LD DE,error_mwk_txt JP error error_mwm LD DE,error_mwm_txt error CALL PRINT MUSIC.FREE JP exit_to_dos MWM_ERROR POP DE ; Restore stack LD DE,file_mwm_error CALL PRINT JP exit_to_dos No_ram_Free LD DE,ram_txt CALL PRINT JP exit_to_dos song_txt DB "Song name: $" load_mwk_txt DB "Wavekit : $" start_file_name DW 0 next_line DB " ",13,10,"$" songname DS 60,0 ext DB ".MWK" none_txt DB "NONE" file_size DW 0 intro_txt DB "MWM loader 0.8 - NWO 1999",10,10,13,"$" help_txt DB "LOAD [d:][PATH]songname.mwm",10,13,10 DB " - MWK file is automaticly loaded.",13,10,"$" error_mwm_txt DB "*** Error Loading MWM file",10,13,"$" ram_txt DB "*** Not enough segments free",10,13,"$" error_mwk_txt DB 13,10,10,"*** Error Loading MWK file",10,13,"$" file_mwm_error DB 13,10,10,"*** File is not an MWM user file",10,13,"$" string_buffer DS 64 header_txt: db "MBMS",010h,8 MWM_HEADER