受信ringバッファから読みだすルーチン: LSIC80、石は8085=8080コード
char* _asm_u(char*);    /* 左辺値にするための宣言*/
#define ring(ptr,ring) *(_asm_u("\n\tMVI\tH, HIGH " #ring "_\n" \
"\tLDA\t" #ptr "_\n\tMOV\tL,A\n\tINR\tA\n\tSTA\t" #ptr "_\n"))
char ch1read(void) { return ring(c1r_rpt,r1ring);

受信ringバッファに書込む割込み処理の、正常受信時の処理:
    ring(c1r_wpt,r1ring) = ACHDR;<---I/Oreg. B000h番地

rptとwptはbyte、ringは[256]にして自然ラップアラウンド、添え字計算時の
アドレス演算がワード演算されないように最適化させてます。