3 This file is part of the AVR-Huffman.
4 Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de)
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
20 #include "avr-asm-macros.S"
22 #include <avr/sfr_defs.h>
26 /******************************************************************************/
27 /* uint8_t charisinstr_P(char c, PGM_P str)
45 /******************************************************************************/
46 /* void dump_chars(uint8_t* buffer, uint8_t len)
47 * param buffer: r24:r25
96 /*****************************************************************************/
97 /* void print_aligned(unsigned long value, uint8_t align)
98 * param value: r22:r25
105 stack_alloc 12, r28, r29
132 /*****************************************************************************/
133 /* void dump(char* s)
160 ldi r30, lo8(memtype_desc)
161 ldi r31, hi8(memtype_desc)
180 ldi r30, lo8(memtype_desc+2)
181 ldi r31, hi8(memtype_desc+2)
195 stack_alloc 2+DUMP_WIDTH, r28, r29
224 ldi r24, lo8(dumping)
225 ldi r25, hi8(dumping)
235 ldi r24, lo8(bytesof)
236 ldi r25, hi8(bytesof)
242 ldi r24, lo8(beginning)
243 ldi r25, hi8(beginning)
263 ldi xREADLEN, DUMP_WIDTH
274 cp DUMP_WIDTH, SIZE_0
340 stack_free 2+DUMP_WIDTH
347 .asciz "\r\ndumping "
351 .asciz ", beginnig at 0x"
356 /******************************************************************************/
357 /* void pgm_read_block(void* buffer, uint32_t addr, uint8_t length)
358 * param buffer: r24:r25
359 * param addr: r20:r23
362 .global pgm_read_block
392 /******************************************************************************/
393 /* void ram_read_block(void* buffer, uint32_t addr, uint8_t length)
394 * param buffer: r24:r25
395 * param addr: r20:r23
398 .global ram_read_block
412 /******************************************************************************/
413 /* void ee_read_block(void* buffer, uint32_t addr, uint8_t length)
414 * param buffer: r24:r25
415 * param addr: r20:r23
422 .global ee_read_block
429 sbic _SFR_IO_ADDR(EECR), EEPE
431 out _SFR_IO_ADDR(EEARH), r31
432 out _SFR_IO_ADDR(EEARL), r30
433 sbi _SFR_IO_ADDR(EECR), EERE
435 in r20, _SFR_IO_ADDR(EEDR)