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! 🙂
0 Comments.