;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 使用するレジスタの定義 .def o_data = R18 ;1バイト分のイメージデータ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1ライン分出力のコアロジック ;***** ラインイメージ読み出し & 書き込み ***** ldi xl,low(LINE_IMG) ldi xh,high(LINE_IMG) ;ラインイメージの先頭をXに代入 inc xl ;Xに1足す(左8ビットは表示非対象とするため) ;(SRAMは128バイトなのでXHは常に0) ld o_data,X+ ;出力データの1バイト目を読み出す DI_LOOP2: ;***** 1ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) lsr o_data ;右シフトして次のデータを準備 nop nop nop nop ;***** 2ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) lsr o_data ;右シフトして次のデータを準備 nop nop nop nop ;***** 3ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) lsr o_data ;右シフトして次のデータを準備 nop nop nop nop ;***** 4ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) lsr o_data ;右シフトして次のデータを準備 nop nop nop nop ;***** 5ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) lsr o_data ;右シフトして次のデータを準備 nop nop nop nop ;***** 6ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) lsr o_data ;右シフトして次のデータを準備 nop nop nop nop ;***** 7ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) lsr o_data ;右シフトして次のデータを準備 nop nop nop nop ;***** 8ビット目 ***** out portB,o_data ;ポートBに出力データを出力(表示される) ;***** 8ビット分表示したら、次のデータを読み出し ***** ld o_data,X+ ;次の出力データを読み出し、 cpi xl,low(LINE_IMG) + 1 + 17 + 1 ;17バイト出力終了? brne DI_LOOP2 ;至って無ければ次の8ビットに ;***** 1行分表示が終わったら、右側部分は空白(黒)に ***** nop cbi portB,0 ;ポートBのビット0をクリア(黒表示) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; dseg(S-RAM領域)の定義 .dseg LINE_IMG: ;ラインイメージ .BYTE 20 ;20バイト (ビットイメージで格納) ; →LSBが右、MSBが左となるデータを使用