Rather than a off by one, the partial updates were including the current line which was drawing it before the irq handler could update the scroll register. The line of bad pixel at the bottom is a harmless hack to make sure a raster irq at the last line would arrive before vblank (which broke akumajo), the correct solution would be to make 256 modes be 512 pixel high and double scan every line.