( Save ACIA conf ) ACIA_CTL : ACIA_CTL [ LITN ] ; ACIA_IO : ACIA_IO [ LITN ] ; ACIA_MEM : ACIA_MEM [ LITN ] ; ( Memory layout +0 ACIAR> +2 ACIAW> +4 ACIA( +6 ACIA) ) (xentry) ~ACIA AF PUSHqq, HL PUSHqq, DE PUSHqq, ( Read our character from ACIA into our BUFIDX ) ACIA_CTL INAn, 0x01 ANDn, ( is ACIA rcv buf full? ) IFNZ, ( correct interrupt cause ) ( +2 == ACIAW> ) ACIA_MEM 2+ LDHL(nn), ( is it == to ACIAR>? ) ( +0 == ACIAR> ) DE ACIA_MEM LDdd(nn), ( carry cleared from ANDn above ) DE SBCHLss, IFNZ, ( buffer full? ) ( no, continue ) DE ADDHLss, ( restore ACIAW> ) ( buffer not full, let's write ) ACIA_IO INAn, (HL) A LDrr, ( advance W> ) HL INCss, ( +2 == ACIAW> ) ACIA_MEM 2+ LD(nn)HL, ( +6 == ACIA) ) DE ACIA_MEM 6 + LDdd(nn), DE SUBHLss, IFZ, ( end of buffer reached? ) ( yes ) ( +4 == ACIA( ) ACIA_MEM 4 + LDHL(nn), ( +2 == ACIAW> ) ACIA_MEM 2+ LD(nn)HL, THEN, THEN, THEN, DE POPqq, HL POPqq, AF POPqq, EI, RETI,