PHPプログラムで学ぶアセンブラのしくみ
第4回 バイナリをマイコンにダウンロードするしくみを見てみよう
前回は,
今回は,
ダウンローダの仕組み
PICは,
具体的には,
では,
最初に,
リスト1 download.
recvline
call recvrs
movf rxdata, 0
xorlw 0x3a ; ":"
btfss STATUS, Z
goto recvline
clrf sum
recvline_len
call recvhex
movf rxdata, 0
movwf len
addlw 0xef
movlw 0x10 ; error: len > 0x10
btfsc STATUS, C
goto disperror
....
HTTPレスポンスを解析し,
リスト2 download.
setdatah
btfsc mode, MODE_FULL
retlw 0
movwf INDF
incf FSR, 1
bsf STATUS, RP1
xorwf EEDATH & 0x7f, 0
bcf STATUS, RP1
btfss STATUS, Z
bsf mode, MODE_CHANGEBUF
btfss STATUS, Z
bsf mode, MODE_CHANGE
bsf STATUS, RP1
incf EEADR & 0x7f, 1
bsf STATUS, RP0
bsf EECON1 & 0x7f, EEPGD
bsf EECON1 & 0x7f, RD
nop
nop
bcf STATUS, RP0
bcf STATUS, RP1
retlw 0
受信したバイナリと,
リスト3 download.
writebuf
movwf FSR
movf INDF, 0
movwf addrh
incf FSR, 1
movf INDF, 0
movwf addrl
incf FSR, 1
bcf STATUS, C
rrf addrh, 0
bsf STATUS, RP1
movwf EEADRH & 0x7f
bcf STATUS, RP1
rrf addrl, 0
bsf STATUS, RP1
movwf EEADR & 0x7f
bcf STATUS, RP1
movlw 0x10
movwf work0
writebuf0
bsf STATUS, RP1
movf INDF, 0
movwf EEDAT & 0x7f
incf FSR, 1
movf INDF, 0
movwf EEDATH & 0x7f
incf FSR, 1
bsf STATUS, RP0
bsf EECON1 & 0x7f, EEPGD
bsf EECON1 & 0x7f, WREN
movlw 0x55
movwf EECON2 & 0x7f
movlw 0xaa
movwf EECON2 & 0x7f
bsf EECON1 & 0x7f, WR
nop
nop
bcf EECON1 & 0x7f, WREN
bcf STATUS, RP0
incf EEADR & 0x7f, 1
bcf STATUS, RP1
decfsz work0, 1
goto writebuf0
retlw 0
RAMがいっぱいになったら,
説明はここまでなのですが,
CPUの中を読む
マイコンをはじめとして,
PIC16Fシリーズの命令コードは14ビットですので,
「10」
今度は,
これだけだと,
筆者は基本的に,
バックナンバー
PHPプログラムで学ぶアセンブラのしくみ
- 第4回 バイナリをマイコンにダウンロードするしくみを見てみよう
- 第3回 アセンブラをハードウェアに載せて動かしてみよう
- 第2回 PHP版アセンブラプログラムのポイント
- 第1回 PHPでアセンブラを作ってみた