That game loop isn't as good as it should be. Don't use a timer to know when to draw but when to update your game logic and draw only when no events are waiting.
Thanks for that, understood. I didn't have any mention of game logic in my code as there isn't any yet
But yes, I'll add only rendering when necessary and when no other events are pending. My ALLEGRO_EVENT variable gameEvent is global (as are all the other game-wide things such as display, event queue, timer etc). It means I can use essentially the same code in the 'menu' and 'options' states as well as 'play'.