Delay Code

procedure delay {
    arguments_none
    returns_nothing
    uniform_delay delay_instructions
    variable counter byte
    variable temp0 byte
    variable temp1 byte

    watch_dog_reset
    if (ir_in) {
	if (counter != 0) {
	    # We've got a pulse:
	    if (counter >= 12) {
		# We've got a start:
		byte0 := temp0
		byte1 := temp1
		temp0 := 0
		temp1 := 0
	    } else {
		# Shift 10 bits:
		temp0 := temp0 >> 1
		temp0@7 := temp1@0
		temp1 := temp1 >> 1
		if (counter >= 6) {
		    temp1@3 := 1
		}
	    }
	}
	counter := 0
    } else {
	counter := counter + 1
    }
}