make IRQ level triggered.
try unrolling port reading code to see if that fixes the DDR/port reading
bug.