目次

PIC逆アセンブル2(Python)

 古いタイプのPIC16C84で作られたファームウエアを
 PIC16F628Aに移植するために、HEXファイルからの
 逆アセンブルが必要になりました。

 以前、PICの逆アセンブラをPythonで作成したのは
 テキストファイルからの逆アセンブルでした。
 HEXファイルからの逆アセンブルにチャレンジして
 みます。

 PICはハーバードアーキテクチャを採用しているので
 1ワード(14ビット)で命令リストは、以下。



 14ビットの上位2ビットで大まかに分類してから
 詳細に見ていけばよいと理解していました。

 HEXファイルは、リトルエンディアンを採用しているので
 14ビットを下位、上位の順で1ワードを構成して16
 ビットでまとめる仕様。

 仕様から、次のシーケンスを利用して逆アセンブルして
 いけばよいと考えました。
  1. 1ライン入力
  2. データ数、アドレス、データタイプ、コード一式、CRCに分割
  3. アドレスは1/2に変換(1ワードが14ビットなので、16ビットにおさまってます)
  4. コード一式をデータ数のワードに分解
  5. ワードに分解されたなら1ワードごとに、下位、上位をスワップ
  6. 5で得られた1ワードを2進数14ビットに分割
  7. 14ビットのうち、上位2ビットを見て、0、1、2、3のタイプに分類
  8. 0タイプのワードを逆アセンブル
  9. 1タイプのワードを逆アセンブル
  10. 2タイプのワードを逆アセンブル
  11. 3タイプのワードを逆アセンブル
  12. 逆アセンブルで得られた文字列の前に、アドレスを置く
 上のシーケンスを基本に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に  入れる装置を考えています。  逆アセンブルの内容は、有用なプログラミングノウハウ  の情報提供をしてくれました。  この装置の雛形は、次の回路図を利用。

目次

inserted by FC2 system