Descifrar PIC12F629 para saber su código y entenderlo

#1
Hola:

Tengo un archivo hex del PIC12F629.

:020000040000FA
:10000000000000000000831207309900831638308A
:100010008500C03081009B011C141A0883128500E2
:10002000B0018C01851D12284B20851D182815282C
:100030004B20851915284B20851915284B2085192B
:1000400015284B20851915282528051C28282B281C
:10005000051D2E283328051D38283D280630B00000
:1000600085003E2012280130B00085003E20122875
:100070000530B00085003E20122812283008831673
:100080009A001C1555309D00AA309D009C141C112F
:1000900083128C0108000330B1001830B200023026
:1000A000B300B10B5428B20B5628B30B5128582873
:0200B000080046
:0400B20000340034E2
:02400E00543F1D
:024200000200BA
:00000001FF
Con el MPLAB X 2.15 he importado el archivo hex. He copiado las instrucciones a .txt y es este de abajo.

Código:
                     Line         Address         Opcode         Label         DisAssy    
               1              000            0000                          NOP            
               2              001            0000                          NOP            
               3              002            0000                          NOP            
               4              003            1283                          BCF STATUS, 0x5
               5              004            3007                          MOVLW 0x7      
               6              005            0099                          MOVWF CMCON    
               7              006            1683                          BSF STATUS, 0x5
               8              007            3038                          MOVLW 0x38     
               9              008            0085                          MOVWF GPIO     
               10             009            30C0                          MOVLW 0xC0     
               11             00A            0081                          MOVWF TMR0     
               12             00B            019B                          CLRF 0x1B      
               13             00C            141C                          BSF 0x1C, 0x0  
               14             00D            081A                          MOVF 0x1A, W   
               15             00E            1283                          BCF STATUS, 0x5
               16             00F            0085                          MOVWF GPIO     
               17             010            01B0                          CLRF 0x30      
               18             011            018C                          CLRF PIR1      
               19             012            1D85                          BTFSS GPIO, 0x3
               20             013            2812                          GOTO 0x12      
               21             014            204B                          CALL 0x4B      
               22             015            1D85                          BTFSS GPIO, 0x3
               23             016            2818                          GOTO 0x18      
               24             017            2815                          GOTO 0x15      
               25             018            204B                          CALL 0x4B      
               26             019            1985                          BTFSC GPIO, 0x3
               27             01A            2815                          GOTO 0x15      
               28             01B            204B                          CALL 0x4B      
               29             01C            1985                          BTFSC GPIO, 0x3
               30             01D            2815                          GOTO 0x15      
               31             01E            204B                          CALL 0x4B      
               32             01F            1985                          BTFSC GPIO, 0x3
               33             020            2815                          GOTO 0x15      
               34             021            204B                          CALL 0x4B      
               35             022            1985                          BTFSC GPIO, 0x3
               36             023            2815                          GOTO 0x15      
               37             024            2825                          GOTO 0x25      
               38             025            1C05                          BTFSS GPIO, 0x0
               39             026            2828                          GOTO 0x28      
               40             027            282B                          GOTO 0x2B      
               41             028            1D05                          BTFSS GPIO, 0x2
               42             029            282E                          GOTO 0x2E      
               43             02A            2833                          GOTO 0x33      
               44             02B            1D05                          BTFSS GPIO, 0x2
               45             02C            2838                          GOTO 0x38      
               46             02D            283D                          GOTO 0x3D      
               47             02E            3006                          MOVLW 0x6      
               48             02F            00B0                          MOVWF 0x30     
               49             030            0085                          MOVWF GPIO     
               50             031            203E                          CALL 0x3E      
               51             032            2812                          GOTO 0x12      
               52             033            3001                          MOVLW 0x1      
               53             034            00B0                          MOVWF 0x30     
               54             035            0085                          MOVWF GPIO     
               55             036            203E                          CALL 0x3E      
               56             037            2812                          GOTO 0x12      
               57             038            3005                          MOVLW 0x5      
               58             039            00B0                          MOVWF 0x30     
               59             03A            0085                          MOVWF GPIO     
               60             03B            203E                          CALL 0x3E      
               61             03C            2812                          GOTO 0x12      
               62             03D            2812                          GOTO 0x12      
               63             03E            0830                          MOVF 0x30, W   
               64             03F            1683                          BSF STATUS, 0x5
               65             040            009A                          MOVWF 0x1A     
               66             041            151C                          BSF 0x1C, 0x2  
               67             042            3055                          MOVLW 0x55     
               68             043            009D                          MOVWF 0x1D     
               69             044            30AA                          MOVLW 0xAA     
               70             045            009D                          MOVWF 0x1D     
               71             046            149C                          BSF 0x1C, 0x1  
               72             047            111C                          BCF 0x1C, 0x2  
               73             048            1283                          BCF STATUS, 0x5
               74             049            018C                          CLRF PIR1      
               75             04A            0008                          RETURN         
               76             04B            3003                          MOVLW 0x3      
               77             04C            00B1                          MOVWF 0x31     
               78             04D            3018                          MOVLW 0x18     
               79             04E            00B2                          MOVWF 0x32     
               80             04F            3002                          MOVLW 0x2      
               81             050            00B3                          MOVWF 0x33     
               82             051            0BB1                          DECFSZ 0x31, F 
               83             052            2854                          GOTO 0x54      
               84             053            0BB2                          DECFSZ 0x32, F 
               85             054            2856                          GOTO 0x56      
               86             055            0BB3                          DECFSZ 0x33, F 
               87             056            2851                          GOTO 0x51      
               88             057            2858                          GOTO 0x58      
               89             058            0008                          RETURN         
               90             059            3400                          RETLW 0x0      
               91             05A            3400                          RETLW 0x0
El código de arriba es muy pequeño. Quiero hacer una descripción de lo que hace exactamente.

Parece que estaré mucho tiempo descifrando algo, por ejemplo, BCF STATUS, 0x5. Aquí debo saber que es el 0x5 del STATUS. Mirando la lista de abajo es RP0, para cambiar de banco de memoria, en este caso, en el banco 0. Sabiendo esto, ahora se que es:

BCF STATUS, 0x5 es igual aBCF STATUS, RP0

Así en cada instrucción.

Código:
        LIST

;==========================================================================
; Build date : May 28 2014
;  MPASM PIC12F629 processor include
; 
;  (c) Copyright 1999-2014 Microchip Technology, All rights reserved
;==========================================================================

        NOLIST

;==========================================================================
;  This header file defines configurations, registers, and other useful
;  bits of information for the PIC12F629 microcontroller.  These names
;  are taken to match the data sheets as closely as possible.
;
;  Note that the processor must be selected before this file is included.
;  The processor may be selected the following ways:
;
;       1. Command line switch:
;               C:\MPASM MYFILE.ASM /PIC12F629
;       2. LIST directive in the source file
;               LIST   P=PIC12F629
;       3. Processor Type entry in the MPASM full-screen interface
;       4. Setting the processor in the MPLAB Project Dialog
;==========================================================================

;==========================================================================
;
;       Verify Processor
;
;==========================================================================
        IFNDEF __12F629
           MESSG "Processor-header file mismatch.  Verify selected processor."
        ENDIF



;==========================================================================
;
;       Register Definitions
;
;==========================================================================

W                EQU  H'0000'
F                EQU  H'0001'

;----- Register Files -----------------------------------------------------

;-----Bank0------------------
INDF             EQU  H'0000'
TMR0             EQU  H'0001'
PCL              EQU  H'0002'
STATUS           EQU  H'0003'
FSR              EQU  H'0004'
GPIO             EQU  H'0005'
PCLATH           EQU  H'000A'
INTCON           EQU  H'000B'
PIR1             EQU  H'000C'
TMR1             EQU  H'000E'
TMR1L            EQU  H'000E'
TMR1H            EQU  H'000F'
T1CON            EQU  H'0010'
CMCON            EQU  H'0019'

;-----Bank1------------------
OPTION_REG       EQU  H'0081'
TRISIO           EQU  H'0085'
PIE1             EQU  H'008C'
PCON             EQU  H'008E'
OSCCAL           EQU  H'0090'
WPU              EQU  H'0095'
IOC              EQU  H'0096'
IOCB             EQU  H'0096'
VRCON            EQU  H'0099'
EEDAT            EQU  H'009A'
EEDATA           EQU  H'009A'
EEADR            EQU  H'009B'
EECON1           EQU  H'009C'
EECON2           EQU  H'009D'

;----- STATUS Bits -----------------------------------------------------
C                EQU  H'0000'
DC               EQU  H'0001'
Z                EQU  H'0002'
NOT_PD           EQU  H'0003'
NOT_TO           EQU  H'0004'
IRP              EQU  H'0007'

RP0              EQU  H'0005'
RP1              EQU  H'0006'


;----- GPIO Bits -----------------------------------------------------
GP0              EQU  H'0000'
GP1              EQU  H'0001'
GP2              EQU  H'0002'
GP3              EQU  H'0003'
GP4              EQU  H'0004'
GP5              EQU  H'0005'

GPIO0            EQU  H'0000'
GPIO1            EQU  H'0001'
GPIO2            EQU  H'0002'
GPIO3            EQU  H'0003'
GPIO4            EQU  H'0004'
GPIO5            EQU  H'0005'


;----- INTCON Bits -----------------------------------------------------
GPIF             EQU  H'0000'
INTF             EQU  H'0001'
T0IF             EQU  H'0002'
GPIE             EQU  H'0003'
INTE             EQU  H'0004'
T0IE             EQU  H'0005'
PEIE             EQU  H'0006'
GIE              EQU  H'0007'

TMR0IF           EQU  H'0002'
TMR0IE           EQU  H'0005'


;----- PIR1 Bits -----------------------------------------------------
TMR1IF           EQU  H'0000'
CMIF             EQU  H'0003'
ADIF             EQU  H'0006'
EEIF             EQU  H'0007'

T1IF             EQU  H'0000'


;----- T1CON Bits -----------------------------------------------------
TMR1ON           EQU  H'0000'
TMR1CS           EQU  H'0001'
NOT_T1SYNC       EQU  H'0002'
T1OSCEN          EQU  H'0003'
TMR1GE           EQU  H'0006'

T1CKPS0          EQU  H'0004'
T1CKPS1          EQU  H'0005'


;----- CMCON Bits -----------------------------------------------------
CIS              EQU  H'0003'
CINV             EQU  H'0004'
COUT             EQU  H'0006'

CM0              EQU  H'0000'
CM1              EQU  H'0001'
CM2              EQU  H'0002'


;----- OPTION_REG Bits -----------------------------------------------------
PSA              EQU  H'0003'
T0SE             EQU  H'0004'
T0CS             EQU  H'0005'
INTEDG           EQU  H'0006'
NOT_GPPU         EQU  H'0007'

PS0              EQU  H'0000'
PS1              EQU  H'0001'
PS2              EQU  H'0002'


;----- TRISIO Bits -----------------------------------------------------
TRISIO0          EQU  H'0000'
TRISIO1          EQU  H'0001'
TRISIO2          EQU  H'0002'
TRISIO3          EQU  H'0003'
TRISIO4          EQU  H'0004'
TRISIO5          EQU  H'0005'


;----- PIE1 Bits -----------------------------------------------------
TMR1IE           EQU  H'0000'
CMIE             EQU  H'0003'
ADIE             EQU  H'0006'
EEIE             EQU  H'0007'

T1IE             EQU  H'0000'


;----- PCON Bits -----------------------------------------------------
NOT_BOR          EQU  H'0000'
NOT_POR          EQU  H'0001'

NOT_BOD          EQU  H'0000'


;----- OSCCAL Bits -----------------------------------------------------
CAL0             EQU  H'0002'
CAL1             EQU  H'0003'
CAL2             EQU  H'0004'
CAL3             EQU  H'0005'
CAL4             EQU  H'0006'
CAL5             EQU  H'0007'


;----- WPU Bits -----------------------------------------------------
WPU0             EQU  H'0000'
WPU1             EQU  H'0001'
WPU2             EQU  H'0002'
WPU4             EQU  H'0004'
WPU5             EQU  H'0005'


;----- IOC Bits -----------------------------------------------------
IOC0             EQU  H'0000'
IOC1             EQU  H'0001'
IOC2             EQU  H'0002'
IOC3             EQU  H'0003'
IOC4             EQU  H'0004'
IOC5             EQU  H'0005'

IOCB0            EQU  H'0000'
IOCB1            EQU  H'0001'
IOCB2            EQU  H'0002'
IOCB3            EQU  H'0003'
IOCB4            EQU  H'0004'
IOCB5            EQU  H'0005'


;----- IOCB Bits -----------------------------------------------------
IOC0             EQU  H'0000'
IOC1             EQU  H'0001'
IOC2             EQU  H'0002'
IOC3             EQU  H'0003'
IOC4             EQU  H'0004'
IOC5             EQU  H'0005'

IOCB0            EQU  H'0000'
IOCB1            EQU  H'0001'
IOCB2            EQU  H'0002'
IOCB3            EQU  H'0003'
IOCB4            EQU  H'0004'
IOCB5            EQU  H'0005'


;----- VRCON Bits -----------------------------------------------------
VRR              EQU  H'0005'
VREN             EQU  H'0007'

VR0              EQU  H'0000'
VR1              EQU  H'0001'
VR2              EQU  H'0002'
VR3              EQU  H'0003'


;----- EECON1 Bits -----------------------------------------------------
RD               EQU  H'0000'
WR               EQU  H'0001'
WREN             EQU  H'0002'
WRERR            EQU  H'0003'




;==========================================================================
;
;       RAM Definitions
;
;==========================================================================
       __MAXRAM  H'00DF'
       __BADRAM  H'0006'-H'0009'
       __BADRAM  H'000D'
       __BADRAM  H'0011'-H'0018'
       __BADRAM  H'001A'-H'001F'
       __BADRAM  H'0060'-H'007F'
       __BADRAM  H'0086'-H'0089'
       __BADRAM  H'008D'
       __BADRAM  H'008F'
       __BADRAM  H'0091'-H'0094'
       __BADRAM  H'0097'-H'0098'
       __BADRAM  H'009E'-H'009F'

;==========================================================================
;
;       Configuration Bits
;
;   NAME            Address
;   CONFIG            2007h
;
;==========================================================================

; The following is an assignment of address values for all of the
; configuration registers for the purpose of table reads
_CONFIG          EQU  H'2007'

;----- CONFIG Options --------------------------------------------------
_FOSC_LP             EQU  H'3FF8'    ; LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_LP_OSC              EQU  H'3FF8'    ; LP oscillator: Low power crystal on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_FOSC_XT             EQU  H'3FF9'    ; XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_XT_OSC              EQU  H'3FF9'    ; XT oscillator: Crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_FOSC_HS             EQU  H'3FFA'    ; HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_HS_OSC              EQU  H'3FFA'    ; HS oscillator: High speed crystal/resonator on GP4/OSC2/CLKOUT and GP5/OSC1/CLKIN
_FOSC_EC             EQU  H'3FFB'    ; EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN
_EC_OSC              EQU  H'3FFB'    ; EC: I/O function on GP4/OSC2/CLKOUT pin, CLKIN on GP5/OSC1/CLKIN
_FOSC_INTRCIO        EQU  H'3FFC'    ; INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_INTRC_OSC_NOCLKOUT  EQU  H'3FFC'    ; INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_FOSC_INTRCCLK       EQU  H'3FFD'    ; INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_INTRC_OSC_CLKOUT    EQU  H'3FFD'    ; INTOSC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN
_FOSC_EXTRCIO        EQU  H'3FFE'    ; RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
_EXTRC_OSC_NOCLKOUT  EQU  H'3FFE'    ; RC oscillator: I/O function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
_FOSC_EXTRCCLK       EQU  H'3FFF'    ; RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN
_EXTRC_OSC_CLKOUT    EQU  H'3FFF'    ; RC oscillator: CLKOUT function on GP4/OSC2/CLKOUT pin, RC on GP5/OSC1/CLKIN

_WDTE_OFF            EQU  H'3FF7'    ; WDT disabled
_WDT_OFF             EQU  H'3FF7'    ; WDT disabled
_WDTE_ON             EQU  H'3FFF'    ; WDT enabled
_WDT_ON              EQU  H'3FFF'    ; WDT enabled

_PWRTE_ON            EQU  H'3FEF'    ; PWRT enabled
_PWRTE_OFF           EQU  H'3FFF'    ; PWRT disabled

_MCLRE_OFF           EQU  H'3FDF'    ; GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD
_MCLRE_ON            EQU  H'3FFF'    ; GP3/MCLR pin function is MCLR

_BOREN_OFF           EQU  H'3FBF'    ; BOD disabled
_BODEN_OFF           EQU  H'3FBF'    ; BOD disabled
_BOREN_ON            EQU  H'3FFF'    ; BOD enabled
_BODEN_ON            EQU  H'3FFF'    ; BOD enabled

_CP_ON               EQU  H'3F7F'    ; Program Memory code protection is enabled
_CP_OFF              EQU  H'3FFF'    ; Program Memory code protection is disabled

_CPD_ON              EQU  H'3EFF'    ; Data memory code protection is enabled
_CPD_OFF             EQU  H'3FFF'    ; Data memory code protection is disabled

;----- DEVID Equates --------------------------------------------------
_DEVID1          EQU  H'2006'

;----- IDLOC Equates --------------------------------------------------
_IDLOC0          EQU  H'2000'
_IDLOC1          EQU  H'2001'
_IDLOC2          EQU  H'2002'
_IDLOC3          EQU  H'2003'

        LIST
Parece muy complejo.

La pregunta es:
¿Hay un método que te lo haga automático?

Si lo hago manual en cada instrucción, me pego media vida.

Un saludo.
 
#2
Creo que no hay forma sencilla de hacerlo, abrí por las dudas un .HEX en MPLAB y luego le dí en View/Program memory; aquí aparecen 3 pestañas: Opcode, machine y symbolic, en esta última deberían de aparecer los nombres "simbólicos" pero no es así salvo los registros predetermiandos del PIC. :unsure:
Igual el programa no es muy largo, a mano tendrá que ser :oops:

¿Has intentado verlo en IcProg?
 
#3
Los editores de texto tienen la opción de "Buscar y reemplazar", que puedes aplicar de forma repetida ;)

Creo que... con el MPLAB X, en el modo depuración, en la ventana de Dissassembly del Program, sí que salen los símbolos, pero... estoy hablando de memoria.

En cuanto a lo que hace la instrucción BCF STATUS, RP0, es hacer que el procesador trabaje con el bank 0 de los registros principales (SFR) del micro.
 
#4
Hola:

Lo descompilé con el www.ic-prog.com como dices y lo traduce mejor.

Código:
; Generated by WinDis84, (c) Nigel Goodwin 1998.

            LIST      P=16F84, F=INHX8M
            include "P16FXX.inc"
            ORG     0x0000

            NOP
            NOP
            NOP
            BCF     STATUS    , RP0
            MOVLW   0x07
            MOVWF   0x19
            BSF     STATUS    , RP0
            MOVLW   0x38
            MOVWF   TRISA
            MOVLW   0xC0
            MOVWF   OPTION_REG
            CLRF    0x1B
            BSF     0x1C      , 00
            MOVF    0x1A      , W
            BCF     STATUS    , RP0
            MOVWF   PORTA
            CLRF    0x30
            CLRF    0x0C
Label_0001  BTFSS   PORTA     , 03
            GOTO    Label_0001
            CALL    Label_0002
Label_0004  BTFSS   PORTA     , 03
            GOTO    Label_0003
            GOTO    Label_0004
Label_0003  CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            CALL    Label_0002
            BTFSC   PORTA     , 03
            GOTO    Label_0004
            GOTO    Label_0005
Label_0005  BTFSS   PORTA     , 00
            GOTO    Label_0006
            GOTO    Label_0007
Label_0006  BTFSS   PORTA     , 02
            GOTO    Label_0008
            GOTO    Label_0009
Label_0007  BTFSS   PORTA     , 02
            GOTO    Label_000A
            GOTO    Label_000B
Label_0008  MOVLW   0x06
            MOVWF   0x30
            MOVWF   PORTA
            CALL    Label_000C
            GOTO    Label_0001
Label_0009  MOVLW   0x01
            MOVWF   0x30
            MOVWF   PORTA
            CALL    Label_000C
            GOTO    Label_0001
Label_000A  MOVLW   0x05
            MOVWF   0x30
            MOVWF   PORTA
            CALL    Label_000C
            GOTO    Label_0001
Label_000B  GOTO    Label_0001
Label_000C  MOVF    0x30      , W
            BSF     STATUS    , RP0
            MOVWF   0x1A
            BSF     0x1C      , 02
            MOVLW   0x55
            MOVWF   0x1D
            MOVLW   0xAA
            MOVWF   0x1D
            BSF     0x1C      , 01
            BCF     0x1C      , 02
            BCF     STATUS    , RP0
            CLRF    0x0C
            RETURN
Label_0002  MOVLW   0x03
            MOVWF   0x31
            MOVLW   0x18
            MOVWF   0x32
            MOVLW   0x02
            MOVWF   0x33
Label_000F  DECFSZ  0x31      , f
            GOTO    Label_000D
            DECFSZ  0x32      , f
Label_000D  GOTO    Label_000E
            DECFSZ  0x33      , f
Label_000E  GOTO    Label_000F
            GOTO    Label_0010
Label_0010  RETURN
            RETLW   0x00
            RETLW   0x00
 
            ORG     0x2000
            DATA    0x0F
            DATA    0x0F
            DATA    0x0F
            DATA    0x0F
 
            ORG     0x2007
            DATA    0x14
 
            ORG     0x2100
            DATA    0x02


            END
Si te fijas, hasta las estiquetas de los gotos aparecen. Este está mejor traducido.

No me puedo creer que el MPLAB v8.92 aún tiene muchos detalles pulidos que el MPLAB X.

El que dice nuestro amigo arriba es de esta versión, la 8.xx. Haber si espabilan con el MPLAB X que tiene que pulir muchas cosas.

Saludo.
 
#6
Pero revísalo bien porque allí reconoce el código como para un 16F84A y originalmente dices que es de un 12F629 :unsure:

Con respecto al MPLAB creo que si le falta depuración, lo descargué pero no me acomodé con él, está muy cambiado todo con respecto a versiones anteriores
 
#7
Hola:

He señalado en el 12F29, y al descompilar siempre aparece el 16Fxx, no te preocupes.

En cuanto a MPLAB v8 es el que se puede ver las etiquetas, te las generan, como label1, label2, label3... En MPLAB X no lo hace. MPLAB X tiene mucho que mejorar.

Buenas.
 
#8
Viendo que el MPLAB X no hace nada de eso, ni siquiera con la utilidad hexmate, he pedido ayuda al amigo Google, que me ha recomendado la utilidad unPIC.pl, y como yo soy programador de Perl, pues no he podido resistirme :)

Lo he ejecutado así:

perl unPIC.pl p12f629.inc misterio.hex

Y ha salido esto:
Código:
unPIC.pl  -- written by Tamas Rudnai

loading INC file "p12f629.inc"
 loaded from 338 lines of INC file
loading HEX file "misterio.hex"
186 bytes loaded from 17 lines of HEX file
PIC 14bit disassembled 91 instructions, 2 control datas and 30 labels
PHP:
;**********************************************************
;*  misterio.hex
;**********************************************************
;*  This file had been disassembled using unPIC.pl
;*  
;*  unPIC.pl is written by Tamas Rudnai
;*   -> based on Timo Rossi's work on pic14dis.c
;**********************************************************
;*  Please advised that unPIC.pl is not foolproof.
;*  It could happen that the code was not correctly
;*  reversed as the chip is not defined corretly
;*  or because of a bug in the tool's code.
;**********************************************************


        list p=12f629

        include "p12f629.inc"


Rst_Vector  org 0x000
        nop                         ; 0000: 0000
        nop                         ; 0001: 0000
        nop                         ; 0002: 0000
        bcf             STATUS, RP0 ; 0003: 1283
        movlw           0x07        ; 0004: 3007
        movwf           mem_19      ; 0005: 0099
        bsf             STATUS, RP0 ; 0006: 1683
        movlw           0x38        ; 0007: 3038
        movwf           mem_05      ; 0008: 0085
        movlw           0xc0        ; 0009: 30C0
        movwf           mem_01      ; 000A: 0081
        clrf            mem_1b, f   ; 000B: 019B
        bsf             mem_1c, 0   ; 000C: 141C
        movf            mem_1a, W   ; 000D: 081A
        bcf             STATUS, RP0 ; 000E: 1283
        movwf           mem_05      ; 000F: 0085
        clrf            mem_30, f   ; 0010: 01B0
        clrf            mem_0c, f   ; 0011: 018C

label_012
; jump here from: 0032
; jump here from: 0037
; jump here from: 003C
; jump here from: 003D
        btfss           mem_05, 3   ; 0012: 1D85
        goto            $-1         ; 0013: 2812

        call            sub_04b     ; 0014: 204B

loop_015
; jump here from: 0017
; jump here from: 001A
; jump here from: 001D
; jump here from: 0020
; jump here from: 0023
        btfss           mem_05, 3   ; 0015: 1D85
        goto            loop_018    ; 0016: 2818
        goto            loop_015    ; 0017: 2815
;
; end of loop_015
;------------------------------------------------------------


loop_018
; jump here from: 0016
        call            sub_04b     ; 0018: 204B

        btfsc           mem_05, 3   ; 0019: 1985
        goto            loop_015    ; 001A: 2815

        call            sub_04b     ; 001B: 204B

        btfsc           mem_05, 3   ; 001C: 1985
        goto            loop_015    ; 001D: 2815

        call            sub_04b     ; 001E: 204B

        btfsc           mem_05, 3   ; 001F: 1985
        goto            loop_015    ; 0020: 2815

        call            sub_04b     ; 0021: 204B

        btfsc           mem_05, 3   ; 0022: 1985
        goto            loop_015    ; 0023: 2815
        goto            $+1         ; 0024: 2825
;
; end of loop_018
;------------------------------------------------------------


label_025
        btfss           mem_05, 0   ; 0025: 1C05
        goto            loop_028    ; 0026: 2828
        goto            label_02b   ; 0027: 282B
;
; end of label_025
;------------------------------------------------------------


loop_028
; jump here from: 0026
        btfss           mem_05, 2   ; 0028: 1D05
        goto            loop_02e    ; 0029: 282E
        goto            label_033   ; 002A: 2833
;
; end of loop_028
;------------------------------------------------------------


label_02b
; jump here from: 0027
        btfss           mem_05, 2   ; 002B: 1D05
        goto            loop_038    ; 002C: 2838
        goto            label_03d   ; 002D: 283D
;
; end of label_02b
;------------------------------------------------------------


loop_02e
; jump here from: 0029
        movlw           0x06        ; 002E: 3006
        movwf           mem_30      ; 002F: 00B0
        movwf           mem_05      ; 0030: 0085
        call            sub_03e     ; 0031: 203E

        goto            label_012   ; 0032: 2812

label_033
; jump here from: 002A
        movlw           0x01        ; 0033: 3001
        movwf           mem_30      ; 0034: 00B0
        movwf           mem_05      ; 0035: 0085
        call            sub_03e     ; 0036: 203E

        goto            label_012   ; 0037: 2812

loop_038
; jump here from: 002C
        movlw           0x05        ; 0038: 3005
        movwf           mem_30      ; 0039: 00B0
        movwf           mem_05      ; 003A: 0085
        call            sub_03e     ; 003B: 203E

        goto            label_012   ; 003C: 2812

label_03d
; jump here from: 002D
        goto            label_012   ; 003D: 2812
;
; end of label_03d
;------------------------------------------------------------


;------------------------------------------------------------
; Subroutine: sub_03e
;
; called from: 0031
; called from: 0036
; called from: 003B

sub_03e
        movf            mem_30, W   ; 003E: 0830
        bsf             STATUS, RP0 ; 003F: 1683
        movwf           mem_1a      ; 0040: 009A
        bsf             mem_1c, 2   ; 0041: 151C
        movlw           0x55        ; 0042: 3055
        movwf           mem_1d      ; 0043: 009D
        movlw           0xaa        ; 0044: 30AA
        movwf           mem_1d      ; 0045: 009D
        bsf             mem_1c, 1   ; 0046: 149C
        bcf             mem_1c, 2   ; 0047: 111C
        bcf             STATUS, RP0 ; 0048: 1283
        clrf            mem_0c, f   ; 0049: 018C
        return                      ; 004A: 0008
;
; end of sub_03e
;------------------------------------------------------------


;------------------------------------------------------------
; Subroutine: sub_04b
;
; called from: 0014
; called from: 0018
; called from: 001B
; called from: 001E
; called from: 0021

sub_04b
        movlw           0x03        ; 004B: 3003
        movwf           mem_31      ; 004C: 00B1
        movlw           0x18        ; 004D: 3018
        movwf           mem_32      ; 004E: 00B2
        movlw           0x02        ; 004F: 3002
        movwf           mem_33      ; 0050: 00B3

loop_051
; jump here from: 0056
        decfsz          mem_31, f   ; 0051: 0BB1
        goto            loop_054    ; 0052: 2854

        decfsz          mem_32, f   ; 0053: 0BB2

loop_054
; jump here from: 0052
        goto            loop_056    ; 0054: 2856

        decfsz          mem_33, f   ; 0055: 0BB3

loop_056
; jump here from: 0054
        goto            loop_051    ; 0056: 2851
        goto            $+1         ; 0057: 2858
;
; end of loop_056
;------------------------------------------------------------


label_058
        return                      ; 0058: 0008
;
; end of sub_04b
;------------------------------------------------------------

        retlw           0x00        ; 0059: 3400
        retlw           0x00        ; 005A: 3400
;
; end of label_000
;------------------------------------------------------------

                                    ; 005B: 0000
                                    ; 2007: 3F54
                                    ; 2100: 0002


;------------- symbol definitions ------------------

mem_00    equ   0x00
mem_01    equ   0x01
mem_05    equ   0x05
mem_0c    equ   0x0C
mem_19    equ   0x19
mem_1a    equ   0x1A
mem_1b    equ   0x1B
mem_1c    equ   0x1C
mem_1d    equ   0x1D
mem_30    equ   0x30
mem_31    equ   0x31
mem_32    equ   0x32
mem_33    equ   0x33


;---------------------------------------------------


        end
que... es "casi" perfecto... se ha comido algunas etiquetas. Pero bueno, queda muy bien. :)

Debería repasar el código, para ver dónde falla, pero ahora estoy algo liado con códigos del z80.

Edito: Arreglé el problema y pongo el nuevo código generado. Informé al autor del nuevo parche (enlace del mensaje #9)
 
Última edición:
#12
En el MPLAB X, primero debes crear un proyecto que esté basado en el hex, y luego debes sacar la ventana con la vista de la zona de memoria de programa:

Window->PIC Memory Views->Program Memory

Vas a ella y en los desplegables (abajo) eliges Program y Code. Con eso ya estás viendo el código del programa.

Pulsas con el botón derecho del ratón en cualquier parte del código, y seleccionas Output to File... Grabas el archivo, y sale un código como el publicado en #1
 
Última edición:
#13
Hola:

Es importar de hex a ver algo parecido al asm, en MPLAB v8.92 se ve mejor las etiquetas. MPLAB X tiene que mejorar mucho.

Sin-título-2.png

Un saludo.
 
Arriba