keypad actually works now and UI responds mostly as expected. Next order of business : nvram write-protect switch. There is a physical switch that enables writing to the nvram but isn't read directly by the CPU.
I have something like this
map(0x000, 0x0ff).ram().region("nvram", 0).share("nvram");
my first idea would be to configure that region to have a custom WRITE8 handler that discards writes while write-protected ?
About that switch, how about something like
PORT_CONFNAME(1, 0, "CAL enable")