summaryrefslogtreecommitdiff
path: root/software/pic.bootloader/bootloader-IDM.asm
diff options
context:
space:
mode:
Diffstat (limited to 'software/pic.bootloader/bootloader-IDM.asm')
-rw-r--r--software/pic.bootloader/bootloader-IDM.asm114
1 files changed, 114 insertions, 0 deletions
diff --git a/software/pic.bootloader/bootloader-IDM.asm b/software/pic.bootloader/bootloader-IDM.asm
new file mode 100644
index 0000000..f0a4316
--- /dev/null
+++ b/software/pic.bootloader/bootloader-IDM.asm
@@ -0,0 +1,114 @@
+ ;;
+ ;; spreadspace pic utils
+ ;;
+ ;;
+ ;; Copyright (C) 2011-2013 Christian Pointner <equinox@spreadspace.org>
+ ;;
+ ;; This file is part of spreadspace pic utils.
+ ;;
+ ;; spreadspace pic utils is free software: you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation, either version 3 of the License, or
+ ;; any later version.
+ ;;
+ ;; spreadspace pic utils is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ;; GNU General Public License for more details.
+ ;;
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with spreadspace pic utils. If not, see <http://www.gnu.org/licenses/>.
+ ;;
+ ;; -------------------------------------
+ ;; PREAMBLE
+
+ LIST p=16F1847
+ include "p16f1847.inc"
+ __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
+ __config _CONFIG2, _WRT_BOOT & _PLLEN_OFF & _STVREN_OFF & _BORV_LO & _LVP_OFF
+
+ ;; -------------------------------------
+ ;; DEFINES (chip/com specific)
+#define INTPIN PORTB,3
+USERVECT EQU H'200'
+ISRVECT EQU USERVECT + H'4'
+FLASH_BOUNDARY EQU b'00011111' ; flash write boundary is at 32 bytes boundaries
+CONFIG_OFFSET EQU H'07'
+
+VERSION_MAJ EQU .0
+VERSION_MIN EQU .1
+NAME_0 EQU 'I'
+NAME_1 EQU 'D'
+NAME_2 EQU 'M'
+DEVID_L EQU H'82'
+DEVID_H EQU H'14'
+FLASH_SIZE_L EQU H'00'
+FLASH_SIZE_H EQU H'20' ; 0x2000 -> 8192 Words of Flash
+FSS EQU .32 ; there 32 write latches
+EEPROM_SIZE_L EQU H'00'
+EEPROM_SIZE_H EQU H'01' ; 0x0100 -> 256 Bytes of EEPROM
+MESS EQU .64 ; this limit is because of to combuff size and single byte len field for messages
+CFG EQU .2
+SUPPORTED_H EQU .0
+SUPPORTED_L EQU b'00100111' ; only reset, read/write flash and read config is supported by now
+
+#define HOOK_CMD_RESET cmd_reset
+#define HOOK_CMD_R_FLASH cmd_r_flash
+#define HOOK_CMD_W_FLASH cmd_w_flash
+#define HOOK_CMD_R_EEPROM cmd_not_impl
+#define HOOK_CMD_W_EEPROM cmd_not_impl
+#define HOOK_CMD_R_CONFIG cmd_r_config
+#define HOOK_CMD_W_CONFIG cmd_not_impl
+
+ ;; Variables
+combuff EQU H'0020'
+current_cmdlen EQU H'0070'
+csum EQU H'0071'
+flags EQU H'007D'
+cnt EQU H'007F'
+
+ ;; Boot Macro
+bootmacro macro
+ goto preinit
+ endm
+
+ ;; for compatibility with older MCUs
+#define FSR FSR0L
+#define INDF INDF0
+
+ ;; -------------------------------------
+ ;; DEFINES (defines)
+#include "generic-defines.inc"
+
+ ;; -------------------------------------
+ ;; Bootloader init
+#include "generic-init.inc"
+
+preinit
+ movlb .3
+ bcf ANSELB,ANSB5 ; use this for com-spi
+ movlb .0
+ btfsc PORTB,5 ; use this for com-spi
+ goto USERVECT
+ goto com_init
+ ;; -------------------------------------
+ ;; Bootloader (com specific subroutines and init)
+#include "com-16f1847-spi.inc"
+
+ ;; -------------------------------------
+ ;; Bootloader (generic init/body)
+#include "generic-mainloop.inc"
+
+ ;; -------------------------------------
+ ;; chip specific commands
+#include "cmds-16f1847.inc"
+
+ ;; -------------------------------------
+ ;; -------------------------------------
+ ;; dummy user code
+ org USERVECT
+ goto USERVECT
+
+ ;; -------------------------------------
+ ;; END
+ end