I downloaded ispLEVER earlier and had a play over lunch... The ABEL HDL doesn't seem too hard and there is an example which is pretty close to what I want... so I might go with the sledge hammer approach...
module decode
title 'memory decode'
A15,A14,A13,A12,A11 pin;
ROM1,IO,ROM2,ROM3, RAM pin istype 'com';
H,L,X = 1,0,.X.;
Address = [A15,A14,A13,A12, A11,X,X,X, X,X,X,X, X,X,X,X];
equations
!RAM = (Address < ^h8000);
!ROM1 = (Address >= ^h9000) & (Address < ^hE000);
!ROM2 = (Address >= ^hE000) & (Address <= ^hE7FF);
!IO = (Address >= ^hE800) & (Address <= ^hEFFF);
!ROM3 = (Address >= ^hF000);
test_vectors
(Address -> [ROM1,ROM2,ROM3,IO,RAM])
^h0000 -> [ H, H, H, H, L ];
^h4000 -> [ H, H, H, H, L ];
^h8000 -> [ H, H, H, H, H ];
^hC000 -> [ L, H, H, H, H ];
^hE000 -> [ H, L, H, H, H ];
^hE800 -> [ H, H, H, L, H ];
^hF000 -> [ H, H, L, H, H ];
^hF800 -> [ H, H, L, H, H ];
end