I’ve recently completed my Spectrum game and wanted to add music to it. A cool guy I met on Twitter by the name of Mike Richmond kindly wrote a wonderful tune for my game using Vortex Tracker. Unfortunately, it’s been quite the headache to get this working with my MPAGD game. But, I’ve finally done it!
To start off, I’ve edited the trailer.txt file which comes in the MPAGD ZX Suite to the following:
ay_player_base: .equ $e000 ay_player_init: .equ ay_player_base ay_player_play: .equ ay_player_base + $05 ay_player_mute: .equ ay_player_base + $08 ay_player_setup_flag: .equ ay_player_base + $0A ay_player_position: .equ ay_player_base + $0B corey_mod: .equ $e86E code_start: .equ $df00 .org code_start music_init: ld hl,corey_mod call ay_player_init ret music_play: call ay_player_play ret ay_player_inc: .org ay_player_base INCHOB "Corey_music.$c" savetap "test.tap",start
I exported the music + player from Vortex:
Kees was kind enough to provide me with a user.asm file which he was using to preserve colour in MPAGD and allows USER X calls to run z80 code.
I added my own code for USER 6 for MPAGD:
chk6 cp 6 jr nz,chk7 ld hl,corey_mod call ay_player_init ret
To initialise the music player, you need to call USER 6 in the INTRO MENU event script. I call is just after “EVENT INTROMENU”. You could possibly put it in the GAME INITIALISATION section but I have not tested that.
Now for the tricky bit. You need to edit the EngineZX.asm file to play the music from the correct location. Edit the vsync0 section to add the call to the music player:
vsync0 ld a,(23672) ; current clock reading. cp (hl) ; are they the same? jr z,vsync0 ; yes, wait until clock changes. ld (hl),a ; set new clock reading. call music_play ; COREYMUSIC! ret vsync5 call plsnd ; play sound.
The player needs to be put here otherwise you will only hear a static hissing sound while the player isn’t being called due to the cpu being busy waiting for the vsync.
Also, if you are using MPAGD v0.7.9 or later you will need to edit BUILD.BAT file and remove code where it does the ‘del user.asm’ part in the sjasm folder.
And that’s all there is to it! VOILA! 🙂