title: Bootloader Issue
body: <p>I am having a strange problem with my serial bootloader on PIC18F87J11, the issue is primarily related with the GOTO instruction. I will explain further, first off this is my HEX File.</p>
  
  <pre><code>:040C0000E2EFFFF030
  :10FFC4000001E5EFFFF0000E956E00D08C8CA30EBF
  :10FFD400016E550EE82EFED7012EFCD78C9CA30E85
  :10FFE400016E550EE82EFED7012EFCD7EFD7EED7C3
  :04FFF40000EF06F024
  :04FFF800A0F4C0FFB2
  :00000001FF
  </code></pre>
  
  <p>As you can see the first address is <strong>0C00</strong> (line 1) then it writes the following E2EF, FFF0, and the rest FFFF until it reaches 64 byes. In another way this is what I am writing to memory.</p>
  
  <pre><code>Programming Flash Memory Addresses 0C00 - 0C3F  with the following 64 bytes of machine code
  
   EFE2  F0FF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF
   FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF
   FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF
   FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF
  </code></pre>
  
  <p>Now when I read the Program Memory from the PIC after writing to it, the GOTO instruction is not the same as the second line of the HEX file which has address FFC4</p>
  
  <pre><code>1537           00C00          EFE2                          GOTO 0x1FFC4 (should be 0x0FFC4)
  1538           00C02          F0FF                          NOP   
  </code></pre>
  
  <p>Now the next few lines of my HEX file goes to the following address and look like this.  </p>
  
  <pre><code>Programming Flash Memory Addresses FFC4 - FFFF  with the following 64 bytes of machine code
  
   FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF  FFFF
   FFFF  FFFF  6E01  0E55  2EE8  D7FE  2E01  D7FC
   9C8C  0EA3  6E01  0E55  2EE8  D7FE  2E01  D7FC
   D7EF  D7EE  EF00  F006  F4A0  FFC0  FFFF  FFFF
  </code></pre>
  
  <p>And this is what I read from program memory after I write to it the above data.</p>
  
  <pre><code>           32739          0FFC4          FFFF                          NOP           
             32740          0FFC6          FFFF                          NOP           
             32741          0FFC8          FFFF                          NOP           
             32742          0FFCA          FFFF                          NOP           
             32743          0FFCC          FFFF                          NOP           
             32744          0FFCE          FFFF                          NOP           
             32745          0FFD0          FFFF                          NOP           
             32746          0FFD2          FFFF                          NOP           
             32747          0FFD4          FFFF                          NOP           
             32748          0FFD6          FFFF                          NOP           
             32749          0FFD8          6E01                          MOVWF config, ACCESS
             32750          0FFDA          0E55                          MOVLW 0x55    
             32751          0FFDC          2EE8                          DECFSZ WREG, F, ACCESS
             32752          0FFDE          D7FE                          BRA 0xFFDC    
             32753          0FFE0          2E01                          DECFSZ config, F, ACCESS
             32754          0FFE2          D7FC                          BRA 0xFFDC    
             32755          0FFE4          9C8C                          BCF LATD, 6, ACCESS
             32756          0FFE6          0EA3                          MOVLW 0xA3    
             32757          0FFE8          6E01                          MOVWF config, ACCESS
             32758          0FFEA          0E55                          MOVLW 0x55    
             32759          0FFEC          2EE8                          DECFSZ WREG, F, ACCESS
             32760          0FFEE          D7FE                          BRA 0xFFEC    
             32761          0FFF0          2E01                          DECFSZ config, F, ACCESS
             32762          0FFF2          D7FC                          BRA 0xFFEC    
             32763          0FFF4          D7EF                          BRA 0xFFD4    
             32764          0FFF6          D7EE                          BRA 0xFFD4    
             32765          0FFF8          EF00                          GOTO 0x1E0C00 
             32766          0FFFA          FF06                          NOP           
             32767          0FFFC          A0F0                          BTFSS INTCON3, 0, ACCESS
             32768          0FFFE          C0F4                          MOVFF 0xF4, TOSU
  </code></pre>
  
  <p>Now why does address <strong>00C00</strong> point to <strong>1FFC4</strong>  (<strong>GOTO 0x1FFC4</strong>) instead of <strong>0FFC4</strong> where the rest of HEX file is actually written to?</p>
  
  <p>I really hope I can get some help here because I have been trying it to figure it out for the last week. Thanks! </p>
  
  <p><strong>UPDATE</strong> </p>
  
  <p>I am starting to think that the problem is related to the hex file of the application code. The hex file I was using was produced from the batch file mentioned on the tutorial, however the hex file produced by mplab xc8 is somewhat different. I will include more information and hopefully something can catch someone's eyes. </p>
  
  <p>This is what's written in the batch file</p>
  
  <pre><code>@echo off
  set cfile=%1
  set hexfile=%cfile:.c=.hex%
  
  rem Check if the c file has been updated and needs to be compiled
  FOR /F %%i IN ('DIR /B /O:D %cfile% %hexfile%') DO SET NEWEST=%%i
  IF "%NEWEST%"=="%cfile%" (ECHO xc8 --chip=18F87J11 --CODEOFFSET=00c00h %cfile%
  xc8 --chip=18F87J11 --CODEOFFSET=00c00h %cfile%
  
  ) ELSE ( echo No changes to %cfile% since last compiled. Skipping to download...
  )
  
  rem Only program the pic if the c file compiled successfully
  FOR /F %%i IN ('DIR /B /O:D %cfile% %hexfile%') DO SET NEWEST=%%i
  IF "%NEWEST%"=="%hexfile%" (echo serialprog %hexfile%
  serialprog %hexfile%
  )
  </code></pre>
  
  <p>This is the hex file produced by the batch file</p>
  
  <pre><code>:040C0000E2EFFFF030
  :020000040001F9   &lt;---- I deleted this line because it didn't seem needed
  :10FFC4000001E5EFFFF0000E956E00D08C8CA30EBF
  :10FFD400016E550EE82EFED7012EFCD78C9CA30E85
  :10FFE400016E550EE82EFED7012EFCD7EFD7EED7C3
  :04FFF40000EF06F024
  :04FFF800A0F4C0FFB2
  :00000001FF
  </code></pre>
  
  <p>This is the hex file produced by mplab xc8</p>
  
  <pre><code>:100C000002EF06F0E6EFFFF0FF00FF00FF00FF003D
  :020000040001F9
  :10FFC000FF00FF00FF00FF00FF00FF000001E9EF5E
  :10FFD000FFF0000E956E8C8CA30E016E550EE82E70
  :10FFE000FED7012EFCD78C9CA30E016E550EE82E79
  :0CFFF000FED7012EFCD7EFD7A0F4C0FF15
  :00000001FF
  </code></pre>