目次
前
次
PIC逆アセンブル2(Python)
古いタイプのPIC16C84で作られたファームウエアを
PIC16F628Aに移植するために、HEXファイルからの
逆アセンブルが必要になりました。
以前、PICの逆アセンブラをPythonで作成したのは
テキストファイルからの逆アセンブルでした。
HEXファイルからの逆アセンブルにチャレンジして
みます。
PICはハーバードアーキテクチャを採用しているので
1ワード(14ビット)で命令リストは、以下。
14ビットの上位2ビットで大まかに分類してから
詳細に見ていけばよいと理解していました。
HEXファイルは、リトルエンディアンを採用しているので
14ビットを下位、上位の順で1ワードを構成して16
ビットでまとめる仕様。
仕様から、次のシーケンスを利用して逆アセンブルして
いけばよいと考えました。
- 1ライン入力
- データ数、アドレス、データタイプ、コード一式、CRCに分割
- アドレスは1/2に変換(1ワードが14ビットなので、16ビットにおさまってます)
- コード一式をデータ数のワードに分解
- ワードに分解されたなら1ワードごとに、下位、上位をスワップ
- 5で得られた1ワードを2進数14ビットに分割
- 14ビットのうち、上位2ビットを見て、0、1、2、3のタイプに分類
- 0タイプのワードを逆アセンブル
- 1タイプのワードを逆アセンブル
- 2タイプのワードを逆アセンブル
- 3タイプのワードを逆アセンブル
- 逆アセンブルで得られた文字列の前に、アドレスを置く
上のシーケンスを基本にPythonスクリプトにすると、以下。
#-----------------------
# procedure or function
#-----------------------
# data length
def get_length(x):
result = 0
for e in x :
# get 1 byte
tmp = ord(e)
# '0' - '9'
if 48 <= tmp and tmp <= 57 :
xx = tmp - 48
# 'A' - 'F'
elif 65 <= tmp and tmp <= 70 :
xx = tmp - 55
# 'a' - 'f'
else :
xx = tmp -87
result = result * 16 + xx
return result
# convert decimal to hexadecimal
def conv_hex(x):
# default
result = ""
# copy
xx = x
# loop
for e in range(4) :
# residue
r = xx % 16
# convert
if 0 <= r and r <= 9 :
tmp = chr(r+48)
else:
tmp = chr(r+55)
# concatenate
result = tmp + result
# quotient
xx = xx / 16
return result
# convert character string to integer
def conv_int(x):
# default
result = 0
# loop
for e in x :
# get 1 byte
tmp = e
# convert
if 48 <= ord(tmp) and ord(tmp) <= 57 :
xx = ord(tmp) - 48
else:
xx = ord(tmp) - 55
# add
result = result * 16 + xx
return result
# convert decimal to binary
def get_binary(x,y):
# copy
xx = x
# default
res = ""
for e in range(16) :
# get LSB
yy = "0"
if xx % 2 :
yy = "1"
# concatenate
res = yy + res
# next
xx = xx / 2
# cut
result = res[16-y:]
return result
# instruction type 0
def byte_handle(x):
# default
res = "???"
# get type
x0 = 0
for e in x[2:6] :
x0 = x0 * 2 + int(e)
# get direction
x1 = "W"
if int(x[6]) == 1 :
x1 = "F"
# get address
x2 = 0
for e in x[7:] :
x2 = x2 * 2 + int(e)
# branch
if x0 == 0 :
if x1 == 0 :
if x[6:] == "01100100" :
result = "CLRWDT"
if x[6:] == "00001001" :
result = "RETFIE"
if x[6:] == "00001000" :
result = "RETURN"
if x[6:] == "01100011" :
result = "SLEEP"
else :
result = "MOVWF "+ conv_hex(x2)
if x0 == 1 :
if int(x[6]) == 0 :
result = "CLRW"
else:
result = "CLRF "+ str(x2)
if x0 > 1 :
if x0 == 2 :
res = "SUBWF "
if x0 == 3 :
res = "DECF "
if x0 == 4 :
res = "IORWF "
if x0 == 5 :
res = "ANDWF "
if x0 == 6 :
res = "XORWF "
if x0 == 7 :
res = "ADDWF "
if x0 == 8 :
res = "MOVF "
if x0 == 9 :
res = "COMF "
if x0 == 10 :
res = "INCF "
if x0 == 11 :
res = "DECFSZ "
if x0 == 12 :
res = "RRF "
if x0 == 13 :
res = "RLF "
if x0 == 14 :
res = "SWAPF "
if x0 == 15 :
res = "INCFSZ "
# concatenate
result = res + str(x2) + "," + x1
return result
# instruction type 1 (bit handling)
def bit_handle(x):
# default
res = "???"
# get type
x0 = 0
for e in x[2:4] :
x0 = x0 * 2 + int(e)
# bit number
x1 = 0
for e in x[4:7] :
x1 = x1 * 2 + int(e)
# address
x2 = 0
for e in x[7:] :
x2 = x2 * 2 + int(e)
# branch
if x0 == 0 :
res = "BCF "
elif x0 == 1 :
res = "BSF "
elif x0 == 2 :
res = "BTFSC "
else :
res = "BTFSC "
# concatenate
result = res + conv_hex(x2)+","+str(x1)
return result
# instruction type 2 (branch)
def branch_handle(x):
# get type
x0 = int(x[2])
# address
x2 = 0
for e in x[3:] :
x2 = x2 * 2 + int(e)
# branch
res = "CALL "
if x0 == 1 :
res = "GOTO "
# concatenate
result = res + conv_hex(x2)
return result
# instruction type 3
def literal_handle(x):
# default
res = "???"
# get type
x0 = 0
for e in x[2:6] :
x0 = x0 * 2 + int(e)
# get address
x2 = 0
for e in x[6:] :
x2 = x2 * 2 + int(e)
# branch
if 0 <= x0 and x0 <= 3 :
res = "MOVLW "
if 4 <= x0 and x0 <= 7 :
res = "RETLW "
if x0 == 8 :
res = "IORLW "
if x0 == 9 :
res = "ANDLW "
if x0 == 10 :
res = "XORLW "
if x0 == 11 :
res = "****"
if 11 < x0 and x0 < 14 :
res = "SUBLW "
if x0 > 13 :
res = "ADDLW "
# concatenate
result = res + str(x2)
return result
# reverse assemble
def display_code(x):
#
result = ""
# get code
xcode = 0
for e in x[0:2] :
xcode = xcode * 2 + int(e)
# branch
if xcode == 0 :
result = byte_handle(x)
elif xcode == 1 :
result = bit_handle(x)
elif xcode == 2 :
result = branch_handle(x)
else :
result = literal_handle(x)
return result
#--------------
# file handler
#--------------
fin = open('target.hex','r')
# get
line = fin.read()
# close
fin.close()
# generate list
glist = line.split('\n')
# delete space
alist = []
for e in glist :
if e != '' :
alist.append(e)
#------------------
# reverse assemble
#------------------
for e in alist :
# get word length
xlen = len(e)
# get line length
llen = get_length(e[1:3])
# address
xadr = get_length(e[3:7])
# byte -> word
xadr = xadr / 2
# data block
xdat = e[9:xlen-2]
# split
ydat = ""
for e in range(llen):
# pointer
xp = e * 4
xph = xp+2
# lower
dl = xdat[xp:xph]
# upper
dh = xdat[xph:xph+2]
# concatenate
tmp = dh + dl
# concatenate
ydat = ydat + tmp + " "
# convert code to string
if llen > 0 :
# instruction code
if xadr < 1024 :
xlst = ydat.split(' ')
# reverse assembly
for ee in xlst :
if ee != "" :
current = conv_int(ee)
bcurrent = get_binary(current,14)
print conv_hex(xadr),ee,"-",display_code(bcurrent)
xadr = xadr + 1
# configration code
else:
tmp = conv_hex(xadr) + " : " + xdat
print tmp
スクリプトで扱うHEXファイルの内容は、以下。
:020000004E2B85
:080008009000030E91000A08AC
:1000100092000A108A1083121708161896183E309C
:10002000810213089407131C18281608332094071C
:10003000140C8F003F398F1A403C55200F1B103C89
:100040008F000608F0390F048600960B2B28150840
:1000500093008E1496160B1112088A00110E83005D
:10006000900E100E09008207FF340034FF34003474
:100070000034FF3400340034FF3400340034FF34E3
:1000800000340034FF3400340034FF3400340034D2
:10009000FF3400340034FF3400340034FF340034C3
:1000A0000034FF3400340034FF348207083408344D
:1000B0000934093409340A340A340A340B340B3451
:1000C0000B340C340C340C340C340D340D340D342E
:1000D0000D340E340E340E340E340E340E340F3410
:1000E0000F340F340F340F340F340F340F348B01AF
:1000F0008316F0308605013096008B128316573038
:10010000810083128B1308000C30F4229700083012
:10011000950083165830810083128B168B170800C8
:100120008E1C90281508031C173C95008E100800A3
:100130008207543469346E347934543472346134FF
:100140006B342034763431342E3434340034033973
:10015000820700346434C8340F39820700340A340B
:1001600014341E34283432343C34463450345A3437
:100170000739820724344734503452344D344334E1
:100180002C340739820724344734503447344734F9
:1001900041342C34820700340034013406340134F5
:1001A000073401340334033400340034063401349A
:1001B0000734013401348207003400340034013440
:1001C000073408340F34103413340034003401344D
:1001D000073408340F34003482078634A2344034A4
:1001E00040344034403460343E3454345434313438
:1001F0002E3434342034840099010329840000080B
:10020000A7209900840A0008AC209907840A0008F6
:100210000F39190708009A011A08323E84001A089B
:10022000EC2080009A0A1A080E3A031D0C29882136
:100230002C218829980009301906031936299908B4
:10024000031D43291A08B8201806031D36299A0AE7
:100250002C301806031D08002C308400303080003C
:10026000840A0408323A031D2E297D291A08C12068
:100270001806031D8829093099009A0A2C3018069F
:10028000031D08007D2918082C3A03197D29180838
:100290002A3A031988291908CA201A0603190800DE
:1002A0001908073A031964290F3A03196429180831
:1002B0002E3A031908001908DB201A071C3E840097
:1002C000180880009A0A080018082E3A031979299C
:1002D0001908DB201C3E8400840A00088403800087
:1002E000840A840A000884038000840A18088000B5
:1002F00008001908CA209A0008009A01990A1908EA
:10030000093A031987291908103A031D08008B219F
:100310009A01990108001C3084002730B9000008B8
:10032000413A03199629703A031D98296030B900A3
:100330009B01840A9A01000D990015308407190861
:100340001E3960388000EC3084079A0A1A08063A91
:10035000031D9B290630F4229A00C0301A1CB406F3
:100360009A1CB3061A1DB206A319B5062418B606C0
:10037000AB18B7060730F4223038B8000310B80DB8
:100380002530FB201C3EBA002730FB201C3EBB0062
:100390002930FB201C3EBC002C30FE20BE00BD01DD
:1003A0000A30BD0ABE020318D129BD033E07AC20A6
:1003B000BE006C30BD072F30840000080F39203E8E
:1003C000BE073030FB201C3EBF0027080F393C30F1
:1003D0000319BB0725080F39031D08005030BA0761
:1003E000B61B08000A30BA07B61736130800C30D4B
:1003F000430C902043091F39031D08000310F729FF
:100400000030032A7E30C1000830C200C10CF72141
:10041000C301C20B062A08000130F422C000080004
:100420000A30F422C000080084200022C00B152AE4
:100430000222FF30C400C5000800C1000830C2001D
:10044000410C01300318C5060310C40CC50C031C75
:100450002D2A0830C5068430C406C10CF721C20B12
:10046000202A0800FF30C5064406C00045081D22AA
:1004700040081D22022202227D200800C600000042
:10048000C60B402A080083160516851183128511B4
:100490000800C8000A30C70003108511031C851529
:1004A000A9303E220314C80CC70B4D2A08000D309A
:1004B0005C220A305C2A2030492AC900490E612298
:1004C00049080F39093C031CF93E393C492A4810B8
:1004D000051E00340930C70038303E220310051EC7
:1004E0000314C80CA9303E220000C70B6E2A48082E
:1004F000051A782A481408006722481C7C2A08003C
:1005000083168510051083120130CC00CB00FF301C
:10051000CE009B00CD00CF010800061ECD014A0889
:100520000102CA07031C08000310861E0314CF0D26
:10053000CB0B08002630CB00CD0A0319CD03061ED5
:10054000CD019B0A03199B03CC0B08000A30CC0099
:10055000CE0A0319CE0308008D22CD080319BA2A4A
:100560000530F4224D02031CB72A0510BB2ACB1E0E
:100570000510CB1A05141B08053C0318C62A851064
:100580003908603A27300319B900D02A3908603A8F
:100590000319CF2A4B1A85144B1E8510D02A8514B7
:1005A000CF08031DDF2A0230061F0B30F4224E0253
:1005B000031CDF2A0530F4224D020318EF2A0B300A
:1005C000F4224E02031CF32A4F1805154F08FE3A79
:1005D000031DF32A1022CE018821CF0101340C2201
:1005E000CE018821013400343F3989008316081474
:1005F0008312080808003F39890083168B130815F9
:1006000055308900AA308900881408118B17881882
:10061000072B8312080005151422323084000008CD
:100620001D22840A0408393A031D0F2B0030F422DE
:100630008D000D08F42200380319212B1D228D0A8C
:10064000192B00081D22840A0408403A031D212B9F
:100650000830F4221D220930F4221D228C0B3E2B7F
:100660000330F4228C000430F4228D000D08F422B3
:10067000003803193E2B1D228D0A362B322205111C
:100680000800851405144823851005104823080028
:1006900000008D0B482B970B482B080043220B21A1
:1006A00077208022831605118312051141234123EF
:1006B000412301308C009C2B6722481C652B8D0048
:1006C0001B3A03196A2B0D081A21AC220038031DAE
:1006D0000B235C2B7C228D001B3A03196A2B0D081F
:1006E0000D08443A03198A2B0D080D08553A0319D1
:1006F000942B0D08563A03199C2B0D08313A031917
:10070000A62B0D08323A0319A92B0D08333A031909
:10071000B32B5C2B8D017C2288000D08FB228D0AF7
:100720000D1F8B2B80225C2B8D010D08F4225C2287
:100730008D0A0D1F952B5C2B8D010D08982000381C
:100740000319A52B5C228D0A9D2B5C2B051584209B
:10075000AD2B05158420031090206722481CAD2B7B
:100760007D2005115C2B0515842003109020672245
:06077000481CB52BB02B64
:02400E00F23F7F
:104200000D0028000C0003001E0003000000000049
:104210003E002F000A0003003C009C009E00860028
:104220008200980098006000A4008A009800820034
:10423000B200400061000300F000000020005400C4
:1042400069006E0079005400720061006B0021006B
:0242500000006C
:00000001FF
作成した逆アセンブラを使い、逆アセンブルして
得られた内容を、I/Oリダイレクトでファイルに
落としてみました。
0000 2B4E - GOTO 034E
0004 0090 - MOVWF 0010
0005 0E03 - SWAPF 3,W
0006 0091 - MOVWF 0011
0007 080A - MOVF 10,W
0008 0092 - MOVWF 0012
0009 100A - BCF 000A,0
000A 108A - BCF 000A,1
000B 1283 - BCF 0003,5
000C 0817 - MOVF 23,W
000D 1816 - BTFSC 0016,0
000E 1896 - BTFSC 0016,1
000F 303E - MOVLW 62
0010 0281 - SUBWF 1,F
0011 0813 - MOVF 19,W
0012 0794 - ADDWF 20,F
0013 1C13 - BTFSC 0013,0
0014 2818 - GOTO 0018
0015 0816 - MOVF 22,W
0016 2033 - CALL 0033
0017 0794 - ADDWF 20,F
0018 0C14 - RRF 20,W
0019 008F - MOVWF 000F
001A 393F - ANDLW 63
001B 1A8F - BTFSC 000F,5
001C 3C40 - SUBLW 64
001D 2055 - CALL 0055
001E 1B0F - BTFSC 000F,6
001F 3C10 - SUBLW 16
0020 008F - MOVWF 000F
0021 0806 - MOVF 6,W
0022 39F0 - ANDLW 240
0023 040F - IORWF 15,W
0024 0086 - MOVWF 0006
0025 0B96 - DECFSZ 22,F
0026 282B - GOTO 002B
0027 0815 - MOVF 21,W
0028 0093 - MOVWF 0013
0029 148E - BSF 000E,1
002A 1696 - BSF 0016,5
002B 110B - BCF 000B,2
002C 0812 - MOVF 18,W
002D 008A - MOVWF 000A
002E 0E11 - SWAPF 17,W
002F 0083 - MOVWF 0003
0030 0E90 - SWAPF 16,F
0031 0E10 - SWAPF 16,W
0032 0009 - MOVWF 0009
0033 0782 - ADDWF 2,F
0034 34FF - RETLW 255
0035 3400 - RETLW 0
0036 34FF - RETLW 255
0037 3400 - RETLW 0
0038 3400 - RETLW 0
0039 34FF - RETLW 255
003A 3400 - RETLW 0
003B 3400 - RETLW 0
003C 34FF - RETLW 255
003D 3400 - RETLW 0
003E 3400 - RETLW 0
003F 34FF - RETLW 255
0040 3400 - RETLW 0
0041 3400 - RETLW 0
0042 34FF - RETLW 255
0043 3400 - RETLW 0
0044 3400 - RETLW 0
0045 34FF - RETLW 255
0046 3400 - RETLW 0
0047 3400 - RETLW 0
0048 34FF - RETLW 255
0049 3400 - RETLW 0
004A 3400 - RETLW 0
004B 34FF - RETLW 255
004C 3400 - RETLW 0
004D 3400 - RETLW 0
004E 34FF - RETLW 255
004F 3400 - RETLW 0
0050 3400 - RETLW 0
0051 34FF - RETLW 255
0052 3400 - RETLW 0
0053 3400 - RETLW 0
0054 34FF - RETLW 255
0055 0782 - ADDWF 2,F
0056 3408 - RETLW 8
0057 3408 - RETLW 8
0058 3409 - RETLW 9
0059 3409 - RETLW 9
005A 3409 - RETLW 9
005B 340A - RETLW 10
005C 340A - RETLW 10
005D 340A - RETLW 10
005E 340B - RETLW 11
005F 340B - RETLW 11
0060 340B - RETLW 11
0061 340C - RETLW 12
0062 340C - RETLW 12
0063 340C - RETLW 12
0064 340C - RETLW 12
0065 340D - RETLW 13
0066 340D - RETLW 13
0067 340D - RETLW 13
0068 340D - RETLW 13
0069 340E - RETLW 14
006A 340E - RETLW 14
006B 340E - RETLW 14
006C 340E - RETLW 14
006D 340E - RETLW 14
006E 340E - RETLW 14
006F 340F - RETLW 15
0070 340F - RETLW 15
0071 340F - RETLW 15
0072 340F - RETLW 15
0073 340F - RETLW 15
0074 340F - RETLW 15
0075 340F - RETLW 15
0076 340F - RETLW 15
0077 018B - CLRF 11
0078 1683 - BSF 0003,5
0079 30F0 - MOVLW 240
007A 0586 - ANDWF 6,F
007B 3001 - MOVLW 1
007C 0096 - MOVWF 0016
007D 128B - BCF 000B,5
007E 1683 - BSF 0003,5
007F 3057 - MOVLW 87
0080 0081 - MOVWF 0001
0081 1283 - BCF 0003,5
0082 138B - BCF 000B,7
0083 0008 - MOVWF 0008
0084 300C - MOVLW 12
0085 22F4 - CALL 02F4
0086 0097 - MOVWF 0017
0087 3008 - MOVLW 8
0088 0095 - MOVWF 0015
0089 1683 - BSF 0003,5
008A 3058 - MOVLW 88
008B 0081 - MOVWF 0001
008C 1283 - BCF 0003,5
008D 168B - BSF 000B,5
008E 178B - BSF 000B,7
008F 0008 - MOVWF 0008
0090 1C8E - BTFSC 000E,1
0091 2890 - GOTO 0090
0092 0815 - MOVF 21,W
0093 1C03 - BTFSC 0003,0
0094 3C17 - SUBLW 23
0095 0095 - MOVWF 0015
0096 108E - BCF 000E,1
0097 0008 - MOVWF 0008
0098 0782 - ADDWF 2,F
0099 3454 - RETLW 84
009A 3469 - RETLW 105
009B 346E - RETLW 110
009C 3479 - RETLW 121
009D 3454 - RETLW 84
009E 3472 - RETLW 114
009F 3461 - RETLW 97
00A0 346B - RETLW 107
00A1 3420 - RETLW 32
00A2 3476 - RETLW 118
00A3 3431 - RETLW 49
00A4 342E - RETLW 46
00A5 3434 - RETLW 52
00A6 3400 - RETLW 0
00A7 3903 - ANDLW 3
00A8 0782 - ADDWF 2,F
00A9 3400 - RETLW 0
00AA 3464 - RETLW 100
00AB 34C8 - RETLW 200
00AC 390F - ANDLW 15
00AD 0782 - ADDWF 2,F
00AE 3400 - RETLW 0
00AF 340A - RETLW 10
00B0 3414 - RETLW 20
00B1 341E - RETLW 30
00B2 3428 - RETLW 40
00B3 3432 - RETLW 50
00B4 343C - RETLW 60
00B5 3446 - RETLW 70
00B6 3450 - RETLW 80
00B7 345A - RETLW 90
00B8 3907 - ANDLW 7
00B9 0782 - ADDWF 2,F
00BA 3424 - RETLW 36
00BB 3447 - RETLW 71
00BC 3450 - RETLW 80
00BD 3452 - RETLW 82
00BE 344D - RETLW 77
00BF 3443 - RETLW 67
00C0 342C - RETLW 44
00C1 3907 - ANDLW 7
00C2 0782 - ADDWF 2,F
00C3 3424 - RETLW 36
00C4 3447 - RETLW 71
00C5 3450 - RETLW 80
00C6 3447 - RETLW 71
00C7 3447 - RETLW 71
00C8 3441 - RETLW 65
00C9 342C - RETLW 44
00CA 0782 - ADDWF 2,F
00CB 3400 - RETLW 0
00CC 3400 - RETLW 0
00CD 3401 - RETLW 1
00CE 3406 - RETLW 6
00CF 3401 - RETLW 1
00D0 3407 - RETLW 7
00D1 3401 - RETLW 1
00D2 3403 - RETLW 3
00D3 3403 - RETLW 3
00D4 3400 - RETLW 0
00D5 3400 - RETLW 0
00D6 3406 - RETLW 6
00D7 3401 - RETLW 1
00D8 3407 - RETLW 7
00D9 3401 - RETLW 1
00DA 3401 - RETLW 1
00DB 0782 - ADDWF 2,F
00DC 3400 - RETLW 0
00DD 3400 - RETLW 0
00DE 3400 - RETLW 0
00DF 3401 - RETLW 1
00E0 3407 - RETLW 7
00E1 3408 - RETLW 8
00E2 340F - RETLW 15
00E3 3410 - RETLW 16
00E4 3413 - RETLW 19
00E5 3400 - RETLW 0
00E6 3400 - RETLW 0
00E7 3401 - RETLW 1
00E8 3407 - RETLW 7
00E9 3408 - RETLW 8
00EA 340F - RETLW 15
00EB 3400 - RETLW 0
00EC 0782 - ADDWF 2,F
00ED 3486 - RETLW 134
00EE 34A2 - RETLW 162
00EF 3440 - RETLW 64
00F0 3440 - RETLW 64
00F1 3440 - RETLW 64
00F2 3440 - RETLW 64
00F3 3460 - RETLW 96
00F4 343E - RETLW 62
00F5 3454 - RETLW 84
00F6 3454 - RETLW 84
00F7 3431 - RETLW 49
00F8 342E - RETLW 46
00F9 3434 - RETLW 52
00FA 3420 - RETLW 32
00FB 0084 - MOVWF 0004
00FC 0199 - CLRF 25
00FD 2903 - GOTO 0103
00FE 0084 - MOVWF 0004
00FF 0800 - MOVF 0,W
0100 20A7 - CALL 00A7
0101 0099 - MOVWF 0019
0102 0A84 - INCF 4,F
0103 0800 - MOVF 0,W
0104 20AC - CALL 00AC
0105 0799 - ADDWF 25,F
0106 0A84 - INCF 4,F
0107 0800 - MOVF 0,W
0108 390F - ANDLW 15
0109 0719 - ADDWF 25,W
010A 0008 - MOVWF 0008
010B 019A - CLRF 26
010C 081A - MOVF 26,W
010D 3E32 - ADDLW 50
010E 0084 - MOVWF 0004
010F 081A - MOVF 26,W
0110 20EC - CALL 00EC
0111 0080 - MOVWF 0000
0112 0A9A - INCF 26,F
0113 081A - MOVF 26,W
0114 3A0E - XORLW 14
0115 1D03 - BTFSC 0003,2
0116 290C - GOTO 010C
0117 2188 - CALL 0188
0118 212C - CALL 012C
0119 2988 - GOTO 0188
011A 0098 - MOVWF 0018
011B 3009 - MOVLW 9
011C 0619 - XORWF 25,W
011D 1903 - BTFSC 0003,2
011E 2936 - GOTO 0136
011F 0899 - MOVF 25,F
0120 1D03 - BTFSC 0003,2
0121 2943 - GOTO 0143
0122 081A - MOVF 26,W
0123 20B8 - CALL 00B8
0124 0618 - XORWF 24,W
0125 1D03 - BTFSC 0003,2
0126 2936 - GOTO 0136
0127 0A9A - INCF 26,F
0128 302C - MOVLW 44
0129 0618 - XORWF 24,W
012A 1D03 - BTFSC 0003,2
012B 0008 - MOVWF 0008
012C 302C - MOVLW 44
012D 0084 - MOVWF 0004
012E 3030 - MOVLW 48
012F 0080 - MOVWF 0000
0130 0A84 - INCF 4,F
0131 0804 - MOVF 4,W
0132 3A32 - XORLW 50
0133 1D03 - BTFSC 0003,2
0134 292E - GOTO 012E
0135 297D - GOTO 017D
0136 081A - MOVF 26,W
0137 20C1 - CALL 00C1
0138 0618 - XORWF 24,W
0139 1D03 - BTFSC 0003,2
013A 2988 - GOTO 0188
013B 3009 - MOVLW 9
013C 0099 - MOVWF 0019
013D 0A9A - INCF 26,F
013E 302C - MOVLW 44
013F 0618 - XORWF 24,W
0140 1D03 - BTFSC 0003,2
0141 0008 - MOVWF 0008
0142 297D - GOTO 017D
0143 0818 - MOVF 24,W
0144 3A2C - XORLW 44
0145 1903 - BTFSC 0003,2
0146 297D - GOTO 017D
0147 0818 - MOVF 24,W
0148 3A2A - XORLW 42
0149 1903 - BTFSC 0003,2
014A 2988 - GOTO 0188
014B 0819 - MOVF 25,W
014C 20CA - CALL 00CA
014D 061A - XORWF 26,W
014E 1903 - BTFSC 0003,2
014F 0008 - MOVWF 0008
0150 0819 - MOVF 25,W
0151 3A07 - XORLW 7
0152 1903 - BTFSC 0003,2
0153 2964 - GOTO 0164
0154 3A0F - XORLW 15
0155 1903 - BTFSC 0003,2
0156 2964 - GOTO 0164
0157 0818 - MOVF 24,W
0158 3A2E - XORLW 46
0159 1903 - BTFSC 0003,2
015A 0008 - MOVWF 0008
015B 0819 - MOVF 25,W
015C 20DB - CALL 00DB
015D 071A - ADDWF 26,W
015E 3E1C - ADDLW 28
015F 0084 - MOVWF 0004
0160 0818 - MOVF 24,W
0161 0080 - MOVWF 0000
0162 0A9A - INCF 26,F
0163 0008 - MOVWF 0008
0164 0818 - MOVF 24,W
0165 3A2E - XORLW 46
0166 1903 - BTFSC 0003,2
0167 2979 - GOTO 0179
0168 0819 - MOVF 25,W
0169 20DB - CALL 00DB
016A 3E1C - ADDLW 28
016B 0084 - MOVWF 0004
016C 0A84 - INCF 4,F
016D 0800 - MOVF 0,W
016E 0384 - DECF 4,F
016F 0080 - MOVWF 0000
0170 0A84 - INCF 4,F
0171 0A84 - INCF 4,F
0172 0800 - MOVF 0,W
0173 0384 - DECF 4,F
0174 0080 - MOVWF 0000
0175 0A84 - INCF 4,F
0176 0818 - MOVF 24,W
0177 0080 - MOVWF 0000
0178 0008 - MOVWF 0008
0179 0819 - MOVF 25,W
017A 20CA - CALL 00CA
017B 009A - MOVWF 001A
017C 0008 - MOVWF 0008
017D 019A - CLRF 26
017E 0A99 - INCF 25,F
017F 0819 - MOVF 25,W
0180 3A09 - XORLW 9
0181 1903 - BTFSC 0003,2
0182 2987 - GOTO 0187
0183 0819 - MOVF 25,W
0184 3A10 - XORLW 16
0185 1D03 - BTFSC 0003,2
0186 0008 - MOVWF 0008
0187 218B - CALL 018B
0188 019A - CLRF 26
0189 0199 - CLRF 25
018A 0008 - MOVWF 0008
018B 301C - MOVLW 28
018C 0084 - MOVWF 0004
018D 3027 - MOVLW 39
018E 00B9 - MOVWF 0039
018F 0800 - MOVF 0,W
0190 3A41 - XORLW 65
0191 1903 - BTFSC 0003,2
0192 2996 - GOTO 0196
0193 3A70 - XORLW 112
0194 1D03 - BTFSC 0003,2
0195 2998 - GOTO 0198
0196 3060 - MOVLW 96
0197 00B9 - MOVWF 0039
0198 019B - CLRF 27
0199 0A84 - INCF 4,F
019A 019A - CLRF 26
019B 0D00 - RLF 0,W
019C 0099 - MOVWF 0019
019D 3015 - MOVLW 21
019E 0784 - ADDWF 4,F
019F 0819 - MOVF 25,W
01A0 391E - ANDLW 30
01A1 3860 - IORLW 96
01A2 0080 - MOVWF 0000
01A3 30EC - MOVLW 236
01A4 0784 - ADDWF 4,F
01A5 0A9A - INCF 26,F
01A6 081A - MOVF 26,W
01A7 3A06 - XORLW 6
01A8 1D03 - BTFSC 0003,2
01A9 299B - GOTO 019B
01AA 3006 - MOVLW 6
01AB 22F4 - CALL 02F4
01AC 009A - MOVWF 001A
01AD 30C0 - MOVLW 192
01AE 1C1A - BTFSC 001A,0
01AF 06B4 - XORWF 52,F
01B0 1C9A - BTFSC 001A,1
01B1 06B3 - XORWF 51,F
01B2 1D1A - BTFSC 001A,2
01B3 06B2 - XORWF 50,F
01B4 19A3 - BTFSC 0023,3
01B5 06B5 - XORWF 53,F
01B6 1824 - BTFSC 0024,0
01B7 06B6 - XORWF 54,F
01B8 18AB - BTFSC 002B,1
01B9 06B7 - XORWF 55,F
01BA 3007 - MOVLW 7
01BB 22F4 - CALL 02F4
01BC 3830 - IORLW 48
01BD 00B8 - MOVWF 0038
01BE 1003 - BCF 0003,0
01BF 0DB8 - RLF 56,F
01C0 3025 - MOVLW 37
01C1 20FB - CALL 00FB
01C2 3E1C - ADDLW 28
01C3 00BA - MOVWF 003A
01C4 3027 - MOVLW 39
01C5 20FB - CALL 00FB
01C6 3E1C - ADDLW 28
01C7 00BB - MOVWF 003B
01C8 3029 - MOVLW 41
01C9 20FB - CALL 00FB
01CA 3E1C - ADDLW 28
01CB 00BC - MOVWF 003C
01CC 302C - MOVLW 44
01CD 20FE - CALL 00FE
01CE 00BE - MOVWF 003E
01CF 01BD - CLRF 61
01D0 300A - MOVLW 10
01D1 0ABD - INCF 61,F
01D2 02BE - SUBWF 62,F
01D3 1803 - BTFSC 0003,0
01D4 29D1 - GOTO 01D1
01D5 03BD - DECF 61,F
01D6 073E - ADDWF 62,W
01D7 20AC - CALL 00AC
01D8 00BE - MOVWF 003E
01D9 306C - MOVLW 108
01DA 07BD - ADDWF 61,F
01DB 302F - MOVLW 47
01DC 0084 - MOVWF 0004
01DD 0800 - MOVF 0,W
01DE 390F - ANDLW 15
01DF 3E20 - ADDLW 32
01E0 07BE - ADDWF 62,F
01E1 3030 - MOVLW 48
01E2 20FB - CALL 00FB
01E3 3E1C - ADDLW 28
01E4 00BF - MOVWF 003F
01E5 0827 - MOVF 39,W
01E6 390F - ANDLW 15
01E7 303C - MOVLW 60
01E8 1903 - BTFSC 0003,2
01E9 07BB - ADDWF 59,F
01EA 0825 - MOVF 37,W
01EB 390F - ANDLW 15
01EC 1D03 - BTFSC 0003,2
01ED 0008 - MOVWF 0008
01EE 3050 - MOVLW 80
01EF 07BA - ADDWF 58,F
01F0 1BB6 - BTFSC 0036,7
01F1 0008 - MOVWF 0008
01F2 300A - MOVLW 10
01F3 07BA - ADDWF 58,F
01F4 17B6 - BSF 0036,7
01F5 1336 - BCF 0036,6
01F6 0008 - MOVWF 0008
01F7 0DC3 - RLF 67,F
01F8 0C43 - RRF 67,W
01F9 2090 - CALL 0090
01FA 0943 - COMF 67,W
01FB 391F - ANDLW 31
01FC 1D03 - BTFSC 0003,2
01FD 0008 - MOVWF 0008
01FE 1003 - BCF 0003,0
01FF 29F7 - GOTO 01F7
0200 3000 - MOVLW 0
0201 2A03 - GOTO 0203
0202 307E - MOVLW 126
0203 00C1 - MOVWF 0041
0204 3008 - MOVLW 8
0205 00C2 - MOVWF 0042
0206 0CC1 - RRF 65,F
0207 21F7 - CALL 01F7
0208 01C3 - CLRF 67
0209 0BC2 - DECFSZ 66,F
020A 2A06 - GOTO 0206
020B 0008 - MOVWF 0008
020C 3001 - MOVLW 1
020D 22F4 - CALL 02F4
020E 00C0 - MOVWF 0040
020F 0008 - MOVWF 0008
0210 300A - MOVLW 10
0211 22F4 - CALL 02F4
0212 00C0 - MOVWF 0040
0213 0008 - MOVWF 0008
0214 2084 - CALL 0084
0215 2200 - CALL 0200
0216 0BC0 - DECFSZ 64,F
0217 2A15 - GOTO 0215
0218 2202 - CALL 0202
0219 30FF - MOVLW 255
021A 00C4 - MOVWF 0044
021B 00C5 - MOVWF 0045
021C 0008 - MOVWF 0008
021D 00C1 - MOVWF 0041
021E 3008 - MOVLW 8
021F 00C2 - MOVWF 0042
0220 0C41 - RRF 65,W
0221 3001 - MOVLW 1
0222 1803 - BTFSC 0003,0
0223 06C5 - XORWF 69,F
0224 1003 - BCF 0003,0
0225 0CC4 - RRF 68,F
0226 0CC5 - RRF 69,F
0227 1C03 - BTFSC 0003,0
0228 2A2D - GOTO 022D
0229 3008 - MOVLW 8
022A 06C5 - XORWF 69,F
022B 3084 - MOVLW 132
022C 06C4 - XORWF 68,F
022D 0CC1 - RRF 65,F
022E 21F7 - CALL 01F7
022F 0BC2 - DECFSZ 66,F
0230 2A20 - GOTO 0220
0231 0008 - MOVWF 0008
0232 30FF - MOVLW 255
0233 06C5 - XORWF 69,F
0234 0644 - XORWF 68,W
0235 00C0 - MOVWF 0040
0236 0845 - MOVF 69,W
0237 221D - CALL 021D
0238 0840 - MOVF 64,W
0239 221D - CALL 021D
023A 2202 - CALL 0202
023B 2202 - CALL 0202
023C 207D - CALL 007D
023D 0008 - MOVWF 0008
023E 00C6 - MOVWF 0046
023F 0000 - MOVWF 0000
0240 0BC6 - DECFSZ 70,F
0241 2A40 - GOTO 0240
0242 0008 - MOVWF 0008
0243 1683 - BSF 0003,5
0244 1605 - BSF 0005,4
0245 1185 - BCF 0005,3
0246 1283 - BCF 0003,5
0247 1185 - BCF 0005,3
0248 0008 - MOVWF 0008
0249 00C8 - MOVWF 0048
024A 300A - MOVLW 10
024B 00C7 - MOVWF 0047
024C 1003 - BCF 0003,0
024D 1185 - BCF 0005,3
024E 1C03 - BTFSC 0003,0
024F 1585 - BSF 0005,3
0250 30A9 - MOVLW 169
0251 223E - CALL 023E
0252 1403 - BSF 0003,0
0253 0CC8 - RRF 72,F
0254 0BC7 - DECFSZ 71,F
0255 2A4D - GOTO 024D
0256 0008 - MOVWF 0008
0257 300D - MOVLW 13
0258 225C - CALL 025C
0259 300A - MOVLW 10
025A 2A5C - GOTO 025C
025B 3020 - MOVLW 32
025C 2A49 - GOTO 0249
025D 00C9 - MOVWF 0049
025E 0E49 - SWAPF 73,W
025F 2261 - CALL 0261
0260 0849 - MOVF 73,W
0261 390F - ANDLW 15
0262 3C09 - SUBLW 9
0263 1C03 - BTFSC 0003,0
0264 3EF9 - ADDLW 249
0265 3C39 - SUBLW 57
0266 2A49 - GOTO 0249
0267 1048 - BCF 0048,0
0268 1E05 - BTFSC 0005,4
0269 3400 - RETLW 0
026A 3009 - MOVLW 9
026B 00C7 - MOVWF 0047
026C 3038 - MOVLW 56
026D 223E - CALL 023E
026E 1003 - BCF 0003,0
026F 1E05 - BTFSC 0005,4
0270 1403 - BSF 0003,0
0271 0CC8 - RRF 72,F
0272 30A9 - MOVLW 169
0273 223E - CALL 023E
0274 0000 - MOVWF 0000
0275 0BC7 - DECFSZ 71,F
0276 2A6E - GOTO 026E
0277 0848 - MOVF 72,W
0278 1A05 - BTFSC 0005,4
0279 2A78 - GOTO 0278
027A 1448 - BSF 0048,0
027B 0008 - MOVWF 0008
027C 2267 - CALL 0267
027D 1C48 - BTFSC 0048,0
027E 2A7C - GOTO 027C
027F 0008 - MOVWF 0008
0280 1683 - BSF 0003,5
0281 1085 - BCF 0005,1
0282 1005 - BCF 0005,0
0283 1283 - BCF 0003,5
0284 3001 - MOVLW 1
0285 00CC - MOVWF 004C
0286 00CB - MOVWF 004B
0287 30FF - MOVLW 255
0288 00CE - MOVWF 004E
0289 009B - MOVWF 001B
028A 00CD - MOVWF 004D
028B 01CF - CLRF 79
028C 0008 - MOVWF 0008
028D 1E06 - BTFSC 0006,4
028E 01CD - CLRF 77
028F 084A - MOVF 74,W
0290 0201 - SUBWF 1,W
0291 07CA - ADDWF 74,F
0292 1C03 - BTFSC 0003,0
0293 0008 - MOVWF 0008
0294 1003 - BCF 0003,0
0295 1E86 - BTFSC 0006,5
0296 1403 - BSF 0003,0
0297 0DCF - RLF 79,F
0298 0BCB - DECFSZ 75,F
0299 0008 - MOVWF 0008
029A 3026 - MOVLW 38
029B 00CB - MOVWF 004B
029C 0ACD - INCF 77,F
029D 1903 - BTFSC 0003,2
029E 03CD - DECF 77,F
029F 1E06 - BTFSC 0006,4
02A0 01CD - CLRF 77
02A1 0A9B - INCF 27,F
02A2 1903 - BTFSC 0003,2
02A3 039B - DECF 27,F
02A4 0BCC - DECFSZ 76,F
02A5 0008 - MOVWF 0008
02A6 300A - MOVLW 10
02A7 00CC - MOVWF 004C
02A8 0ACE - INCF 78,F
02A9 1903 - BTFSC 0003,2
02AA 03CE - DECF 78,F
02AB 0008 - MOVWF 0008
02AC 228D - CALL 028D
02AD 08CD - MOVF 77,F
02AE 1903 - BTFSC 0003,2
02AF 2ABA - GOTO 02BA
02B0 3005 - MOVLW 5
02B1 22F4 - CALL 02F4
02B2 024D - SUBWF 77,W
02B3 1C03 - BTFSC 0003,0
02B4 2AB7 - GOTO 02B7
02B5 1005 - BCF 0005,0
02B6 2ABB - GOTO 02BB
02B7 1ECB - BTFSC 004B,5
02B8 1005 - BCF 0005,0
02B9 1ACB - BTFSC 004B,5
02BA 1405 - BSF 0005,0
02BB 081B - MOVF 27,W
02BC 3C05 - SUBLW 5
02BD 1803 - BTFSC 0003,0
02BE 2AC6 - GOTO 02C6
02BF 1085 - BCF 0005,1
02C0 0839 - MOVF 57,W
02C1 3A60 - XORLW 96
02C2 3027 - MOVLW 39
02C3 1903 - BTFSC 0003,2
02C4 00B9 - MOVWF 0039
02C5 2AD0 - GOTO 02D0
02C6 0839 - MOVF 57,W
02C7 3A60 - XORLW 96
02C8 1903 - BTFSC 0003,2
02C9 2ACF - GOTO 02CF
02CA 1A4B - BTFSC 004B,4
02CB 1485 - BSF 0005,1
02CC 1E4B - BTFSC 004B,4
02CD 1085 - BCF 0005,1
02CE 2AD0 - GOTO 02D0
02CF 1485 - BSF 0005,1
02D0 08CF - MOVF 79,F
02D1 1D03 - BTFSC 0003,2
02D2 2ADF - GOTO 02DF
02D3 3002 - MOVLW 2
02D4 1F06 - BTFSC 0006,6
02D5 300B - MOVLW 11
02D6 22F4 - CALL 02F4
02D7 024E - SUBWF 78,W
02D8 1C03 - BTFSC 0003,0
02D9 2ADF - GOTO 02DF
02DA 3005 - MOVLW 5
02DB 22F4 - CALL 02F4
02DC 024D - SUBWF 77,W
02DD 1803 - BTFSC 0003,0
02DE 2AEF - GOTO 02EF
02DF 300B - MOVLW 11
02E0 22F4 - CALL 02F4
02E1 024E - SUBWF 78,W
02E2 1C03 - BTFSC 0003,0
02E3 2AF3 - GOTO 02F3
02E4 184F - BTFSC 004F,0
02E5 1505 - BSF 0005,2
02E6 084F - MOVF 79,W
02E7 3AFE - XORLW 254
02E8 1D03 - BTFSC 0003,2
02E9 2AF3 - GOTO 02F3
02EA 2210 - CALL 0210
02EB 01CE - CLRF 78
02EC 2188 - CALL 0188
02ED 01CF - CLRF 79
02EE 3401 - RETLW 1
02EF 220C - CALL 020C
02F0 01CE - CLRF 78
02F1 2188 - CALL 0188
02F2 3401 - RETLW 1
02F3 3400 - RETLW 0
02F4 393F - ANDLW 63
02F5 0089 - MOVWF 0009
02F6 1683 - BSF 0003,5
02F7 1408 - BSF 0008,0
02F8 1283 - BCF 0003,5
02F9 0808 - MOVF 8,W
02FA 0008 - MOVWF 0008
02FB 393F - ANDLW 63
02FC 0089 - MOVWF 0009
02FD 1683 - BSF 0003,5
02FE 138B - BCF 000B,7
02FF 1508 - BSF 0008,2
0300 3055 - MOVLW 85
0301 0089 - MOVWF 0009
0302 30AA - MOVLW 170
0303 0089 - MOVWF 0009
0304 1488 - BSF 0008,1
0305 1108 - BCF 0008,2
0306 178B - BSF 000B,7
0307 1888 - BTFSC 0008,1
0308 2B07 - GOTO 0307
0309 1283 - BCF 0003,5
030A 0008 - MOVWF 0008
030B 1505 - BSF 0005,2
030C 2214 - CALL 0214
030D 3032 - MOVLW 50
030E 0084 - MOVWF 0004
030F 0800 - MOVF 0,W
0310 221D - CALL 021D
0311 0A84 - INCF 4,F
0312 0804 - MOVF 4,W
0313 3A39 - XORLW 57
0314 1D03 - BTFSC 0003,2
0315 2B0F - GOTO 030F
0316 3000 - MOVLW 0
0317 22F4 - CALL 02F4
0318 008D - MOVWF 000D
0319 080D - MOVF 13,W
031A 22F4 - CALL 02F4
031B 3800 - IORLW 0
031C 1903 - BTFSC 0003,2
031D 2B21 - GOTO 0321
031E 221D - CALL 021D
031F 0A8D - INCF 13,F
0320 2B19 - GOTO 0319
0321 0800 - MOVF 0,W
0322 221D - CALL 021D
0323 0A84 - INCF 4,F
0324 0804 - MOVF 4,W
0325 3A40 - XORLW 64
0326 1D03 - BTFSC 0003,2
0327 2B21 - GOTO 0321
0328 3008 - MOVLW 8
0329 22F4 - CALL 02F4
032A 221D - CALL 021D
032B 3009 - MOVLW 9
032C 22F4 - CALL 02F4
032D 221D - CALL 021D
032E 0B8C - DECFSZ 12,F
032F 2B3E - GOTO 033E
0330 3003 - MOVLW 3
0331 22F4 - CALL 02F4
0332 008C - MOVWF 000C
0333 3004 - MOVLW 4
0334 22F4 - CALL 02F4
0335 008D - MOVWF 000D
0336 080D - MOVF 13,W
0337 22F4 - CALL 02F4
0338 3800 - IORLW 0
0339 1903 - BTFSC 0003,2
033A 2B3E - GOTO 033E
033B 221D - CALL 021D
033C 0A8D - INCF 13,F
033D 2B36 - GOTO 0336
033E 2232 - CALL 0232
033F 1105 - BCF 0005,2
0340 0008 - MOVWF 0008
0341 1485 - BSF 0005,1
0342 1405 - BSF 0005,0
0343 2348 - CALL 0348
0344 1085 - BCF 0005,1
0345 1005 - BCF 0005,0
0346 2348 - CALL 0348
0347 0008 - MOVWF 0008
0348 0000 - MOVWF 0000
0349 0B8D - DECFSZ 13,F
034A 2B48 - GOTO 0348
034B 0B97 - DECFSZ 23,F
034C 2B48 - GOTO 0348
034D 0008 - MOVWF 0008
034E 2243 - CALL 0243
034F 210B - CALL 010B
0350 2077 - CALL 0077
0351 2280 - CALL 0280
0352 1683 - BSF 0003,5
0353 1105 - BCF 0005,2
0354 1283 - BCF 0003,5
0355 1105 - BCF 0005,2
0356 2341 - CALL 0341
0357 2341 - CALL 0341
0358 2341 - CALL 0341
0359 3001 - MOVLW 1
035A 008C - MOVWF 000C
035B 2B9C - GOTO 039C
035C 2267 - CALL 0267
035D 1C48 - BTFSC 0048,0
035E 2B65 - GOTO 0365
035F 008D - MOVWF 000D
0360 3A1B - XORLW 27
0361 1903 - BTFSC 0003,2
0362 2B6A - GOTO 036A
0363 080D - MOVF 13,W
0364 211A - CALL 011A
0365 22AC - CALL 02AC
0366 3800 - IORLW 0
0367 1D03 - BTFSC 0003,2
0368 230B - CALL 030B
0369 2B5C - GOTO 035C
036A 227C - CALL 027C
036B 008D - MOVWF 000D
036C 3A1B - XORLW 27
036D 1903 - BTFSC 0003,2
036E 2B6A - GOTO 036A
036F 080D - MOVF 13,W
0370 080D - MOVF 13,W
0371 3A44 - XORLW 68
0372 1903 - BTFSC 0003,2
0373 2B8A - GOTO 038A
0374 080D - MOVF 13,W
0375 080D - MOVF 13,W
0376 3A55 - XORLW 85
0377 1903 - BTFSC 0003,2
0378 2B94 - GOTO 0394
0379 080D - MOVF 13,W
037A 3A56 - XORLW 86
037B 1903 - BTFSC 0003,2
037C 2B9C - GOTO 039C
037D 080D - MOVF 13,W
037E 3A31 - XORLW 49
037F 1903 - BTFSC 0003,2
0380 2BA6 - GOTO 03A6
0381 080D - MOVF 13,W
0382 3A32 - XORLW 50
0383 1903 - BTFSC 0003,2
0384 2BA9 - GOTO 03A9
0385 080D - MOVF 13,W
0386 3A33 - XORLW 51
0387 1903 - BTFSC 0003,2
0388 2BB3 - GOTO 03B3
0389 2B5C - GOTO 035C
038A 018D - CLRF 13
038B 227C - CALL 027C
038C 0088 - MOVWF 0008
038D 080D - MOVF 13,W
038E 22FB - CALL 02FB
038F 0A8D - INCF 13,F
0390 1F0D - BTFSC 000D,6
0391 2B8B - GOTO 038B
0392 2280 - CALL 0280
0393 2B5C - GOTO 035C
0394 018D - CLRF 13
0395 080D - MOVF 13,W
0396 22F4 - CALL 02F4
0397 225C - CALL 025C
0398 0A8D - INCF 13,F
0399 1F0D - BTFSC 000D,6
039A 2B95 - GOTO 0395
039B 2B5C - GOTO 035C
039C 018D - CLRF 13
039D 080D - MOVF 13,W
039E 2098 - CALL 0098
039F 3800 - IORLW 0
03A0 1903 - BTFSC 0003,2
03A1 2BA5 - GOTO 03A5
03A2 225C - CALL 025C
03A3 0A8D - INCF 13,F
03A4 2B9D - GOTO 039D
03A5 2B5C - GOTO 035C
03A6 1505 - BSF 0005,2
03A7 2084 - CALL 0084
03A8 2BAD - GOTO 03AD
03A9 1505 - BSF 0005,2
03AA 2084 - CALL 0084
03AB 1003 - BCF 0003,0
03AC 2090 - CALL 0090
03AD 2267 - CALL 0267
03AE 1C48 - BTFSC 0048,0
03AF 2BAD - GOTO 03AD
03B0 207D - CALL 007D
03B1 1105 - BCF 0005,2
03B2 2B5C - GOTO 035C
03B3 1505 - BSF 0005,2
03B4 2084 - CALL 0084
03B5 1003 - BCF 0003,0
03B6 2090 - CALL 0090
03B7 2267 - CALL 0267
03B8 1C48 - BTFSC 0048,0
03B9 2BB5 - GOTO 03B5
03BA 2BB0 - GOTO 03B0
2007 : F23F
2100 : 0D0028000C0003001E00030000000000
2108 : 3E002F000A0003003C009C009E008600
2110 : 8200980098006000A4008A0098008200
2118 : B200400061000300F000000020005400
2120 : 69006E0079005400720061006B002100
2128 : 0000
PIC16C84は、シリアルインタフェースがないですが
PIC16F628Aはもっています。
シリアルインタフェースのコマンドインタプリタと
D/Aコンバータのエミュレートをどう扱っているか
を解析できました。
GPSを利用して、現在置と気温、室温、湿度をEEPROMに
入れる装置を考えています。
逆アセンブルの内容は、有用なプログラミングノウハウ
の情報提供をしてくれました。
この装置の雛形は、次の回路図を利用。
目次
前
次