Beste mede CO-ers.
Ik heb hier een PIC16C57C met rare kuren van een automatisch hek.
Ik wou eens het programma er uit halen en disassembleren.
De HEX file heb ik er al uitgehaald maar nu wil ik deze weer omzetten naar een .asm bestand.

Ik heb reeds het forum doorzocht en volgende discussie eens doorgenomen : http://www.circuitsonline.net/forum/view/23537/.
Ik heb gedaan wat daar verteld wordt maar hier met MPLAB importeer ik de HEX file en er gebeurt gewoon niets, zelfs geen foutmelding en ook het dissasembly venster is leeg. Nochtans zit er een programma in de HEX file.

Is iemand die weet wat er mis loopt?

Volgens mij is het bij MPLAB de bedoeling dat je 1 chip uitleest en vervolgens andere chip mee kan programmeren.

Het is (denk ik) zeker niet de bedoeling van MPLAB om de broncode weer terug te krijgen.

Volgens mij kan ic-prpg dat voor je doen.

Ik heb in het verleden nogal eens met de hand gedisassembleerd, en er waren destijds tools zoals Sourcer of Sourcerer (voor de pc X86 cpu) die een heel behoorlijk leesbare source konden maken.

De echte broncode kun je natuurlijk nooit terugkrijgen uit een hexdump, maar met voldoende tijd en kennis van de instructieset kun je een heel eind komen. De vraag is of het je dat waard is.

Stuur het me ff op, ik stuur je dan een asm terug.

Op 15 oktober 2006 14:42:00 schreef reapp:
Stuur het me ff op, ik stuur je dan een asm terug.

Als je daar een apart programmaatje voor hebt, zou je daarvan een linkje kunnen geven?

Hier is de HEX-file in kwestie.
Ik heb trouwens ook de indruk dat dit programma me nogal kort lijkt. Zou er iets van een code beveiliging kunnen tussenzitten. Ik heb er nochtans data uitgekregen.

[Bericht gewijzigd door Peter Claus op ]

Dat is eigenlijk nog in ontwikkeling en ben er nog niet uit wat ik ermee ga doen.

Dit was het resultaat.


;******************************************
;**    Generated by RE PIC Disassembler  **
;**      Developed By RE-Applications    **
;**         www.RE-Applications.be       **
;******************************************

; modify if necessary
#include <p16C57.inc>

            LIST     P=16C57
            __CONFIG	_CP_ON & _XT_OSC

;  *** PROGRAM ***
                  org    0x0000
a_00000           bcf    0x08, 1             ;db 0x04, 0x28
                  bcf    0x08, 3             ;db 0x04, 0x68
                  bcf    STATUS, PA0         ;db 0x04, 0xA3
                  bsf    STATUS, PA1         ;db 0x05, 0xC3
                  goto   a_00000             ;db 0x0A, 0x00
                  retlw  0x00                ;db 0x08, 0x00
                  bcf    0x0B, 5             ;db 0x04, 0xAB
a_0000E           clrwdt                     ;db 0x00, 0x04
                  btfss  0x07, 7             ;db 0x07, 0xE7
                  goto   a_0000E             ;db 0x0A, 0x07
a_00014           clrwdt                     ;db 0x00, 0x04
                  btfsc  0x07, 7             ;db 0x06, 0xE7
                  goto   a_00014             ;db 0x0A, 0x0A
                  movlw  0xC1                ;db 0x0C, 0xC1
                  movwf  TMR0                ;db 0x00, 0x21
a_0001E           clrwdt                     ;db 0x00, 0x04
                  movf   0x01, W             ;db 0x02, 0x01
                  btfss  STATUS, Z           ;db 0x07, 0x43
                  goto   a_0001E             ;db 0x0A, 0x0F
                  movlw  0x25                ;db 0x0C, 0x25
                  movwf  TMR0                ;db 0x00, 0x21
a_0002A           clrwdt                     ;db 0x00, 0x04
                  movf   0x01, W             ;db 0x02, 0x01
                  btfss  STATUS, Z           ;db 0x07, 0x43
                  goto   a_0002A             ;db 0x0A, 0x15
                  btfsc  0x07, 7             ;db 0x06, 0xE7
                  bsf    0x0B, 5             ;db 0x05, 0xAB
                  bsf    STATUS, PA0         ;db 0x05, 0xA3
                  goto   a_0008A             ;db 0x0A, 0x45
                  bsf    0x0C, 0             ;db 0x05, 0x0C
                  movlw  0x05                ;db 0x0C, 0x05
                  movwf  0x0E                ;db 0x00, 0x2E
a_00040           call   a_00000             ;db 0x09, 0x00
                  btfsc  0x0A, 6             ;db 0x06, 0xCA
                  goto   a_00040             ;db 0x0A, 0x20
a_00046           clrwdt                     ;db 0x00, 0x04
                  btfss  0x07, 7             ;db 0x07, 0xE7
                  goto   a_00046             ;db 0x0A, 0x23
a_0004C           clrwdt                     ;db 0x00, 0x04
                  btfsc  0x07, 7             ;db 0x06, 0xE7
                  goto   a_0004C             ;db 0x0A, 0x26
a_00052           clrwdt                     ;db 0x00, 0x04
                  btfss  PORTB, 2            ;db 0x07, 0x46
                  goto   a_00060             ;db 0x0A, 0x30
                  btfss  0x07, 7             ;db 0x07, 0xE7
                  goto   a_00052             ;db 0x0A, 0x29
                  bsf    STATUS, PA0         ;db 0x05, 0xA3
                  goto   a_0001E             ;db 0x0A, 0x0F
a_00060           movlw  0xF8                ;db 0x0C, 0xF8
                  andwf  0x0C, F             ;db 0x01, 0x6C
                  bsf    0x0A, 5             ;db 0x05, 0xAA
                  movlw  0x0A                ;db 0x0C, 0x0A
                  movwf  0x18                ;db 0x00, 0x38
a_0006A           call   a_00000             ;db 0x09, 0x00
                  movf   0x18, F             ;db 0x02, 0x38
                  btfss  STATUS, Z           ;db 0x07, 0x43
                  goto   a_0006A             ;db 0x0A, 0x35
                  bsf    STATUS, PA0         ;db 0x05, 0xA3
                  goto   a_00082             ;db 0x0A, 0x41
                  xorlw  0xFF                ;db 0x0F, 0xFF
                  xorlw  0xFF                ;db 0x0F, 0xFF
                  xorlw  0xFF                ;db 0x0F, 0xFF
                  xorlw  0xFF                ;db 0x0F, 0xFF
                  xorlw  0xFF                ;db 0x0F, 0xFF
                  End

Ben je zeker dat er niks mis is, ik vermoed dat de lees beveiliging opstaat omdat er na het eerste blok allemaal nullen staan.

Verschrikkelijk wel bedankt reapp.
Mocht ik je ooit eens tegenkomen hebt ge een Leffe of een Duvel van mij tegoed ;-).

Waar heb je dat programma vandaan?

edit : Het is wel mogelijk dat er beveiliging was maar dan kan je toch niks uitlezen? De instructies op de laatste regels zijn wat raar, 4X dezelfde.

[Bericht gewijzigd door Peter Claus op ]

Ben er nog aan bezig :) Home made dus.

De instructies op de laatste regels zijn wat raar, 4X dezelfde.

Heb ik ook gezien maar dat staat ook zo in de hex, net daarvoor staat een goto naar een ontbrekend stuk dus ik vermoed dat die 5 instructies niks betekenen.

Die disassembler is die ook voor "ons". Ik zie hem nl niet als download terwijl hij er wel bijstaat.

"Dit programma is echter nog in ontwikkeling en is (nog) niet beschikbaar voor download." :) Ik ben voor alle zekerheid gaan kijken.

Hallo, Ik heb het probleem intussen gevonden.

Voor de geïnteresseerden. Deze pic zit op een print die een automatisch hek opent en sluit.
De fout was dat er één kant altijd bleef dichtstaan.
Het bleek aan de aansluiting van de sensoren en combinatie van de ingangen te liggen (moeilijk te vinden want een handleiding was er niet bij).

In verband met die PIC heb ik nog een algemeen bijkomend vraagje.
Ik heb eens een printscreen gemaakt van de software waarmee ik de PIC uitlees.

Klik op de afbeelding voor groter formaat.
http://www.uploadarchief.net/files/download/PIC16C57_tbn.JPG

Nu zie ik code protection on staan.
Hoe komt het dan dat er dan toch een gedeelte van het programma uitgelezen wordt (tot adres 3F hexadecimaal) ondanks de beveiliging, als je kijkt in het gedeelte van de uitgelezen bytes.
Ik zou verwachten dat er niets zou verschijnen.
Is er dan toch een deel van het geheugenbereik toegankelijk bij beveiligde PIC's?

Bij sommige PICs kan je de CP (Code Protect) bits instellen voor verschillende blokken van het flashgeheugen.

Ik ken de 16C54 niet maar misschien is dit hier het geval.

CD :)