; MWM driver implemetation code NWO 1999 .LABEL 20 EXT_BIO EQU #FFCA ; Extended Bios entry WAVESEG equ 0FB1Eh ; Mapper segement where the replayer is stored ; Jump Table MWM_Load equ #4000 MWK_Load equ MWM_Load+3 Play_music equ MWK_Load+3 Stop_music equ play_music+3 Cont_music equ stop_music+3 Fade_music equ cont_music+3 Alloc_segs equ fade_music+3 Free_segs equ alloc_segs+3 MWM_info equ free_segs+3 MWM_address equ mwm_info+3 driver_info equ mwm_address+3 ;Driver vars. banks equ driver_info + 3 sram_size equ banks + 256 DOSJmpTab equ sram_size + 2 play_busy equ DOSJmpTab + 2 songdata_bank1 equ play_busy + 1 songdata_bank2 equ songdata_bank1 + 1 songdata_bank3 equ songdata_bank2 + 1 songdata_adres equ songdata_bank3 + 1 play_pos equ songdata_adres + 2 play_step equ play_pos + 2 status equ play_step + 2 step_buffer equ status + 2 load_buffer equ step_buffer + 25 MUSIC.INIT_DRIVER macro call check_if_inst ld de,not_installed_txt scf jp nz,driver_not@sym call Get_doscall or a,a driver_not@sym endm MUSIC.PLAY macro @bank if "@bank">"" ld a,@bank endif call play_it endm MUSIC.STOP macro call stop_it endm MUSIC.CONT macro call cont_it endm MUSIC.FADE macro @fade_speed ld a,@fade_speed ld ix,Alloc_segs call call_seg endm MUSIC.MWM.LOAD macro @bank,@file ld a,@bank if "@file">"" ld de,file@sym endif call Loadmwm if "@file">"" jr done@sym file@sym db "@file",0 done@sym endif endm MUSIC.MWK.LOAD macro @file if "@file">"" ld de,file@sym endif call Loadmwk if "@file">"" jr done@sym file@sym db "@file",0 done@sym endif endm MUSIC.ALLOC macro @segments ld b,@segments ld ix,Alloc_segs call call_seg endm MUSIC.FREE macro ld ix,free_segs call call_seg endm MUSIC.MWM.INFO macro @song_name ld de,@song_name ld ix,MWM_info call call_seg endm MUSIC.ADDRESS macro @address if "@address">"" ld de,@address endif ld ix,MWM_address call call_seg endm ; IN - ; OUT - ADE = Driver version number (example: a="1" and DE="00" = 1.00). ; HL = Sram size in KB. MUSIC.DRIVER_INF macro ld ix,driver_info call call_seg endm MUSIC.DRIVER macro Loadmwm ld ix,MWM_Load jp call_seg Loadmwm ld ix,MWK_Load jp call_seg play_it ld ix,Play_music jp call_seg stop_it ld ix,Stop_music jp call_seg cont_it ld ix,Cont_music jp call_seg Get_doscall: xor a ld de,4*256+2 call EXT_BIO ld a,c ld bc,#0C add hl,bc ld de,jump_to ld bc,3 ldir ret ; Check if replayer is installed ; output: if nz=0 not installed ; if z=1 installed check_if_inst: ld hl,id_FB04h ld de,0fb04h+21 ld b,5 check_if_inst0: ld a,(de) cp (hl) ret nz inc hl inc de djnz check_if_inst0 ret call_seg ld iy,(WAVESEG-1) jump_to jp #f200 id_FB04h: db "MBTSR" ; If this is on address FB04h+21 not_installed_txt: db "*** Wavedriver TSR not installed!",13,10,"$" endm