>>124辺りでアセンブラによるソフトシリアル出力(ser_putcharと等価)を書いたので
今度はシリアル入力を書いてみる。

;シリアル受信 extern char ser_getchar(void)
;PCR8 .equ H'00FFEB ;I/Oレジスタ定義
;PDR8 .equ H'00FFDB ;3694は64K範囲のみ
_ser_getchar:
mov.w #0,R0 ;初期化
mov.w #0,R1
?_getchar_start:
mov.b @PDR8,R0H ;シリアルデータ入力(P80)
btst #0,R0H ;スタートビット(L)を検出,P80=0のときZ=1
bne ?_getchar_start ;スタートビット(L)検出するまでポーリング
;
bset #1,@PDR8 ;debug用serialパルス出力(P81端子をオシロ測定してbps推定する)
jsr @_delay ;スタートビット用bps速度調整ディレイ
bclr #1,@PDR8
;
;シリアルデータ読み取りルーチン開始
mov.b #8,R1L ;8bitデータ取得用カウンタ設定
?_getchar_get:
bld.b #0,@PDR8 ;ポートから1bitシリアル入力し指定ビットの状態をCYに得る
rotxr.b R0L ;シリアルのビット情報を保存しレジスタに並べる
;
bset #1,@PDR8 ;debug用serialパルス出力(P81)
jsr @_delay ;データビット用bps速度調整ディレイ
bclr #1,@PDR8
;
dec.b R1L ;シリアル受信用カウンタ-1
bne ?_getchar_get ;残りビットあればループ
rts