Hi,
I started to disassembling ClonePI software. I'm trying to obtain C source code from hex file. Manually converting C code from assembly listing is a slow process. May be in the forum we can do it more easily together. Any help is appreciated.
Original hex file is ClonePI-18.hex, downloaded from www.fandy.front.ru/CPI_PRG_181_18.zip
I'm using Ida Pro V5.1, MPLAB IDE V8.0, HI-TECH PICC-18 V8.30
Here is the first part of C conversion
I started to disassembling ClonePI software. I'm trying to obtain C source code from hex file. Manually converting C code from assembly listing is a slow process. May be in the forum we can do it more easily together. Any help is appreciated.
Original hex file is ClonePI-18.hex, downloaded from www.fandy.front.ru/CPI_PRG_181_18.zip
I'm using Ida Pro V5.1, MPLAB IDE V8.0, HI-TECH PICC-18 V8.30
Here is the first part of C conversion
Code:
#include <hitech.h> #include <pic18.h> #include <stdio.h> //----------------------------------- #define ADC_CS RA3 #define LCD_RS RC4 #define LCD_EN RC5 #define LCD_DATA PORTB //------ LCD Module commands -------- #define DISP_ON 0x0C #define CLR_DISP 0x01 #define ENTRY_INC 0x06 #define LINE1 0x80 #define LINE2 0xC0 //----------------------------------- void InitLCD(void); void EepromWait(void); void SendINS(BYTE c); BYTE Barrier; //5F2 BYTE Volume; //5F3 void main(void) { IPEN = 0; INTCON = 0; INTCON3 = 0; PIE1 = 0; PIE2 = 0; PIR1 = 0; PIR2 = 0; ADCON1 = 7; /* 0A9C main: 0A9C nop 0A9E bcf rcon, 7, ACCESS 0AA0 clrf intcon, ACCESS 0AA2 clrf intcon3, ACCESS 0AA4 clrf pie1, ACCESS 0AA6 clrf pie2, ACCESS 0AA8 clrf pir1, ACCESS 0AAA clrf pir2, ACCESS 0AAC movlw 7 0AAE movwf adcon1, ACCESS */ PORTA = 0b00101000; PORTB = 0b00000000; PORTC = 0b00000100; TRISA = 0b11010011; TRISB = 0b11110000; TRISC = 0b11000000; RBPU = 0; /* 0AB0 movlw 28 0AB2 movwf porta, ACCESS 0AB4 clrf portb, ACCESS 0AB6 movlw 4 0AB8 movwf portc, ACCESS 0ABA movlw 0D3 0ABC movwf trisa, ACCESS 0ABE movlw 0F0 0AC0 movwf trisb, ACCESS 0AC2 movlw 0C0 0AC4 movwf trisc, ACCESS 0AC6 bcf intcon2, 7, ACCESS */ InitLCD(); printf(" Clone PI "); SendINS(LINE2); printf(" ver. 1.8.1a "); /* 0AC8 call InitLCD, 0 0ACC movlb 1 06EA aClonePi data " Clone PI "<0> 0ACE movlw 0EA 0AD0 movwf byte_DATA_131, BANKED 0AD2 movlw 6 0AD4 movwf byte_DATA_132, BANKED 0AD6 call printf, 0 0ADA movlw 0C0 0ADC call SendINS, 0 0AE0 movlb 1 06C8 aVer_1_8_1a data " ver. 1.8.1a "<0> 0AE2 movlw 0C8 0AE4 movwf byte_DATA_131, BANKED 0AE6 movlw 6 0AE8 movwf byte_DATA_132, BANKED 0AEA call printf, 0 */ EepromWait(); Volume = EEPROM_READ(0); /* 0AEE call EepromWait, 0 0AF2 clrf eeadr, ACCESS 0AF4 btfss intcon, 7, ACCESS 0AF6 bra loc_MEM_AFC 0AF8 bsf STATUS, 0, ACCESS 0AFA bra loc_MEM_AFE 0AFC loc_MEM_AFC: 0AFC bcf STATUS, 0, ACCESS 0AFE loc_MEM_AFE: 0AFE bcf intcon, 7, ACCESS 0B00 movlw 3F 0B02 andwf EECON1, f, ACCESS 0B04 bsf EECON1, 0, ACCESS 0B06 movf eedata, w, ACCESS 0B08 movwf eeadr, ACCESS 0B0A bcf intcon, 7, ACCESS 0B0C btfsc STATUS, 0, ACCESS 0B0E bsf intcon, 7, ACCESS 0B10 movff eeadr, Volume */ if(Volume >= 8) Volume = 5; /* 0B14 movlw 7 0B16 movlb 5 0B18 cpfsgt Volume, BANKED 0B1A bra loc_MEM_B22 0B1C movlw 5 0B1E movff wreg, Volume 0B22 loc_MEM_B22: */ EepromWait(); Barrier = EEPROM_READ(1); if( (Barrier > 16) || (Barrier < 1) ) Barrier = 4; /* 0B22 call EepromWait, 0 0B26 movlw 1 0B28 movwf eeadr, ACCESS 0B2A btfss intcon, 7, ACCESS 0B2C bra loc_MEM_B32 0B2E bsf STATUS, 0, ACCESS 0B30 bra loc_MEM_B34 0B32 loc_MEM_B32: 0B32 bcf STATUS, 0, ACCESS 0B34 loc_MEM_B34: 0B34 bcf intcon, 7, ACCESS 0B36 movlw 3F 0B38 andwf EECON1, f, ACCESS 0B3A bsf EECON1, 0, ACCESS 0B3C movf eedata, w, ACCESS 0B3E movwf eeadr, ACCESS 0B40 bcf intcon, 7, ACCESS 0B42 btfsc STATUS, 0, ACCESS 0B44 bsf intcon, 7, ACCESS 0B46 movff eeadr, Barrier 0B4A movlw 10 0B4C movlb 5 0B4E cpfsgt Barrier, BANKED 0B50 bra loc_MEM_B54 0B52 bra loc_MEM_B5C 0B54 loc_MEM_B54: 0B54 movlw 1 0B56 movlb 5 0B58 cpfslt Barrier, BANKED 0B5A bra loc_MEM_B62 0B5C loc_MEM_B5C: 0B5C movlw 4 0B5E movff wreg, Barrier 0B62 loc_MEM_B62: */ }
Comment