bcd.h (2098B)
1#ifndef __BCD_H_INCLUDE 2#define __BCD_H_INCLUDE 3 4#include <types.h> 5#include <stdint.h> 6 7/** @file bcd.h 8 Support for working with BCD (Binary Coded Decimal) 9 10 See the example BCD project for additional details. 11*/ 12 13// macro for creating BCD constants 14#define BCD_HEX(v) ((BCD)(v)) 15 16/** Converts an integer value into BCD format 17 18 A maximum of 8 digits may be used 19*/ 20#define MAKE_BCD(v) BCD_HEX(0x ## v) 21 22typedef uint32_t BCD; 23 24/** Converts integer __i__ into BCD format (Binary Coded Decimal) 25 @param i Numeric value to convert 26 @param value Pointer to a BCD variable to store the converted result 27*/ 28void uint2bcd(uint16_t i, BCD * value) OLDCALL; 29 30/** Adds two numbers in BCD format: __sour__ += __value__ 31 @param sour Pointer to a BCD value to add to (and where the result is stored) 32 @param value Pointer to the BCD value to add to __sour__ 33*/ 34void bcd_add(BCD * sour, const BCD * value) OLDCALL; 35 36/** Subtracts two numbers in BCD format: __sour__ -= __value__ 37 @param sour Pointer to a BCD value to subtract from (and where the result is stored) 38 @param value Pointer to the BCD value to subtract from __sour__ 39*/ 40void bcd_sub(BCD * sour, const BCD * value) OLDCALL; 41 42/** Convert a BCD number into an asciiz (null terminated) string and return the length 43 @param bcd Pointer to BCD value to convert 44 @param tile_offset Optional per-character offset value to add (use 0 for none) 45 @param buffer Buffer to store the result in 46 47 Returns: Length in characters (always 8) 48 49 __buffer__ should be large enough to store the converted string 50 (9 bytes: 8 characters + 1 for terminator) 51 52 There are a couple different ways to use __tile_offset__. 53 For example: 54 \li It can be the Index of the Font Tile '0' in VRAM to 55 allow the buffer to be used directly with @ref set_bkg_tiles. 56 \li It can also be set to the ascii value for character '0' 57 so that the buffer is a normal string that can be passed to @ref printf. 58*/ 59uint8_t bcd2text(const BCD * bcd, uint8_t tile_offset, uint8_t * buffer) OLDCALL; 60 61#endif