ARCHM XCOMP Z80A 2 CONSTS $0238 COM_DRV_ADDR $3000 DEST_ADDR 0 VALUE L4 \ We process the $20 exception by pre-putting a mask in the \ (HL) we're going to write to. If it wasn't a $20, we put a \ $ff mask. If it was a $20, we put a $7f mask. : @GET, A $03 LDri, ( @GET ) DE COM_DRV_ADDR LDdi, $28 RST, FJR JRNZ, [TO] L2 ( maybeerror ) A ORr, CZ RETc, ( Sending a straight NULL ends the comm. ) ; : @PUT, ( @PUT that char back ) C A LDrr, A $04 LDri, ( @PUT ) $28 RST, FJR JRNZ, [TO] L3 ( error ) A C LDrr, ; 0 XSTART HL DEST_ADDR LDdi, BEGIN, A $ff LDri, (HL) A LDrr, ( default mask ) LSET L1 ( loop2 ) @GET, @PUT, $20 CPi, FJR JRZ, TO L4 ( escapechar ) ( not an escape char, just apply the mask and write ) (HL) ANDr, (HL) A LDrr, HL INCd, BR JR, L4 FMARK ( escapechar, adjust by setting (hl) to $7f ) 7 (HL) RES, L1 BR JR, ( loop2 ) L2 FMARK ( maybeerror, was it an error? ) A ORr, L1 BR JRZ, ( loop2, not an error ) L3 FMARK ( error ) C A LDrr, ( error code from @GET/@PUT ) A $1a LDri, ( @ERROR ) $28 RST, RET,