I reverse engineered the .xex file created by lightman:
Figured out what the extra bytes at the head of the file were and wrote a bit of python to convert a Commodore .prg file created by Kick to a .xex file:
https://github.com/peckhamdata/prg2xex
The difference between the two _seems_ to be a leading 0xff 0xff, then the start address then the end address. A .prg file just has the start address.
Thanks for your help and interest folks. I enjoyed learning about display lists too. Didn't realise how cool the ANTIC chip is.