Bus error usually *is* an input pin on the processor, so that's correct how to do it.

offset is simply the number of data bus units. For 8-bit data buses, offset = byte address, minus the start of the handler. For 16-bit, offset is the number of 16 bit words, and for a 32-bit data bus it's the number of 32-bit words.

So for this memory range on a CPU with a 32-bit data bus:
Code
AM_RANGE(0x3000, 0x301f) AM_READWRITE(read32_r, read32_w)

...a CPU access to address 0x3010 would be an offset of 4 (0x3010 - the base 0x3000 = 0x10. Converted to 4-byte words = 4).