diff --git a/src/RegEdit/RegEdit.c b/src/RegEdit/RegEdit.c index 6042841..b496ae1 100644 --- a/src/RegEdit/RegEdit.c +++ b/src/RegEdit/RegEdit.c @@ -1,61 +1,232 @@ /* - * Author: username - * Date: 2024 + * Author: Jake G + * Date: 2025 * filename: RegEdit.c - * description: module_purpose + * description: Provides a register editing interface. */ #include "RegEdit.h" -void RegEdit_SetRegister(void *reg) +// For 64-Bit systems and register access. + +void RegEdit_u64_SetRegister(void *reg) { - uint8_t *reg_ptr = (uint8_t *)reg; - *reg_ptr = 0xFF; + uint64_t *reg_ptr = (uint64_t *)reg; + //*reg_ptr = 0xFFFFFFFFFFFFFFFF; + *reg_ptr = UINT64_MAX; } -void RegEdit_ClearRegister(void *reg) +void RegEdit_u64_ClearRegister(void *reg) { - uint8_t *reg_ptr = (uint8_t *)reg; - *reg_ptr = 0x00; + uint64_t *reg_ptr = (uint64_t *)reg; + *reg_ptr = 0; } -void RegEdit_SetBit(void *reg, uint8_t bit_num) +void RegEdit_u64_SetBit(void *reg, uint8_t bit_num) +{ + uint64_t *reg_ptr = (uint64_t *)reg; + *reg_ptr |= (uint64_t)(1 << bit_num); +} + +void RegEdit_u64_ClearBit(void *reg, uint8_t bit_num) +{ + uint64_t *reg_ptr = (uint64_t *)reg; + *reg_ptr &= ~(1 << bit_num); +} + +bool RegEdit_u64_IsBitSet(void *reg, uint8_t bit_num) +{ + uint64_t *reg_ptr = (uint64_t *)reg; + return *reg_ptr & (1 << bit_num); +} + +void RegEdit_u64_OR_Num(void *reg, uint64_t num) +{ + uint64_t *reg_ptr = (uint64_t *)reg; + *reg_ptr |= num; +} + +void RegEdit_u64_AND_Num(void *reg, uint64_t num) +{ + uint64_t *reg_ptr = (uint64_t *)reg; + *reg_ptr &= num; +} + +void RegEdit_u64_SetNum(void *reg, uint64_t num) +{ + uint64_t *reg_ptr = (uint64_t *)reg; + *reg_ptr = num; +} + +uint64_t RegEdit_u64_ReadReg(void *reg) +{ + uint64_t *reg_ptr = (uint64_t *)reg; + return *reg_ptr; +} + +// For 32-Bit systems and register access. + +void RegEdit_u32_SetRegister(void *reg) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + *reg_ptr = UINT32_MAX; +} + +void RegEdit_u32_ClearRegister(void *reg) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + *reg_ptr = 0; +} + +void RegEdit_u32_SetBit(void *reg, uint8_t bit_num) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + *reg_ptr |= (uint32_t)(1 << bit_num); +} + +void RegEdit_u32_ClearBit(void *reg, uint8_t bit_num) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + *reg_ptr &= ~(1 << bit_num); +} + +bool RegEdit_u32_IsBitSet(void *reg, uint8_t bit_num) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + return *reg_ptr & (1 << bit_num); +} + +void RegEdit_u32_OR_Num(void *reg, uint32_t num) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + *reg_ptr |= num; +} + +void RegEdit_u32_AND_Num(void *reg, uint32_t num) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + *reg_ptr &= num; +} + +void RegEdit_u32_SetNum(void *reg, uint32_t num) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + *reg_ptr = num; +} + +uint32_t RegEdit_u32_ReadReg(void *reg) +{ + uint32_t *reg_ptr = (uint32_t *)reg; + return *reg_ptr; +} + +// For 16-Bit systems and register access. + +void RegEdit_u16_SetRegister(void *reg) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + *reg_ptr = UINT16_MAX; +} + +void RegEdit_u16_ClearRegister(void *reg) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + *reg_ptr = 0; +} + +void RegEdit_u16_SetBit(void *reg, uint8_t bit_num) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + *reg_ptr |= (uint16_t)(1 << bit_num); +} + +void RegEdit_u16_ClearBit(void *reg, uint8_t bit_num) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + *reg_ptr &= ~(1 << bit_num); +} + +bool RegEdit_u16_IsBitSet(void *reg, uint8_t bit_num) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + return *reg_ptr & (1 << bit_num); +} + +void RegEdit_u16_OR_Num(void *reg, uint16_t num) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + *reg_ptr |= num; +} + +void RegEdit_u16_AND_Num(void *reg, uint16_t num) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + *reg_ptr &= num; +} + +void RegEdit_u16_SetNum(void *reg, uint16_t num) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + *reg_ptr = num; +} + +uint16_t RegEdit_u16_ReadReg(void *reg) +{ + uint16_t *reg_ptr = (uint16_t *)reg; + return *reg_ptr; +} + +// For 8-Bit systems and register access. + +void RegEdit_u8_SetRegister(void *reg) +{ + uint8_t *reg_ptr = (uint8_t *)reg; + *reg_ptr = UINT8_MAX; +} + +void RegEdit_u8_ClearRegister(void *reg) +{ + uint8_t *reg_ptr = (uint8_t *)reg; + *reg_ptr = 0; +} + +void RegEdit_u8_SetBit(void *reg, uint8_t bit_num) { uint8_t *reg_ptr = (uint8_t *)reg; *reg_ptr |= (uint8_t)(1 << bit_num); } -void RegEdit_ClearBit(void *reg, uint8_t bit_num) +void RegEdit_u8_ClearBit(void *reg, uint8_t bit_num) { uint8_t *reg_ptr = (uint8_t *)reg; *reg_ptr &= ~(1 << bit_num); } -bool RegEdit_IsBitSet(void *reg, uint8_t bit_num) +bool RegEdit_u8_IsBitSet(void *reg, uint8_t bit_num) { uint8_t *reg_ptr = (uint8_t *)reg; return *reg_ptr & (1 << bit_num); } -void RegEdit_OR_Num(void *reg, uint8_t num) +void RegEdit_u8_OR_Num(void *reg, uint8_t num) { uint8_t *reg_ptr = (uint8_t *)reg; *reg_ptr |= num; } -void RegEdit_AND_Num(void *reg, uint8_t num) +void RegEdit_u8_AND_Num(void *reg, uint8_t num) { uint8_t *reg_ptr = (uint8_t *)reg; *reg_ptr &= num; } -void RegEdit_SetNum(void *reg, uint8_t num) +void RegEdit_u8_SetNum(void *reg, uint8_t num) { uint8_t *reg_ptr = (uint8_t *)reg; *reg_ptr = num; } -uint8_t RegEdit_ReadReg(void *reg) +uint8_t RegEdit_u8_ReadReg(void *reg) { uint8_t *reg_ptr = (uint8_t *)reg; return *reg_ptr; diff --git a/src/RegEdit/RegEdit.h b/src/RegEdit/RegEdit.h index 8ad2e91..3a161c8 100644 --- a/src/RegEdit/RegEdit.h +++ b/src/RegEdit/RegEdit.h @@ -11,67 +11,85 @@ #define REGEDIT_H #include +#include #include -/** - * - * @param reg The register address. - */ -void RegEdit_SetRegister(void *reg); +// Template of function signitures. +// XX: RegEdit_uxx +// REGTYPE: fixed width type. +/* +void XX_SetRegister(void *reg); +void XX_ClearRegister(void *reg); +void XX_SetBit(void *reg, uint8_t bit_num); +void XX_ClearBit(void *reg, uint8_t bit_num); +bool XX_IsBitSet(void *reg, uint8_t bit_num); +void XX_OR_Num(void *reg, REGTYPE num); +void XX_AND_Num(void *reg, REGTYPE num); +void XX_SetNum(void *reg, REGTYPE num); +REGTYPE XX_ReadReg(void *reg); +*/ + +// For 64-Bit systems and register access. /** - * + * @brief Sets all the bits in pointed register. * @param reg The register address. */ -void RegEdit_ClearRegister(void *reg); +void RegEdit_u64_SetRegister(void *reg); /** - * + * @brief Clears all the bits in pointed register. + * @param reg The register address. + */ +void RegEdit_u64_ClearRegister(void *reg); + +/** + * @brief Set's a specific bit in a register. * @param reg The register address. * @param bit_num The bit location. */ -void RegEdit_SetBit(void *reg, uint8_t bit_num); +void RegEdit_u64_SetBit(void *reg, uint8_t bit_num); +void RegEdit_u64_ClearBit(void *reg, uint8_t bit_num); +bool RegEdit_u64_IsBitSet(void *reg, uint8_t bit_num); +void RegEdit_u64_OR_Num(void *reg, uint64_t num); +void RegEdit_u64_AND_Num(void *reg, uint64_t num); +void RegEdit_u64_SetNum(void *reg, uint64_t num); +uint64_t RegEdit_u64_ReadReg(void *reg); -/** - * - * @param reg The register address. - * @param bit_num The bit location. - */ -void RegEdit_ClearBit(void *reg, uint8_t bit_num); +// For 32-Bit systems and register access. -/** - * - * @param reg The register address. - * @param bit_num The bit location. - * @return - */ -bool RegEdit_IsBitSet(void *reg, uint8_t bit_num); +void RegEdit_u32_SetRegister(void *reg); +void RegEdit_u32_ClearRegister(void *reg); +void RegEdit_u32_SetBit(void *reg, uint8_t bit_num); +void RegEdit_u32_ClearBit(void *reg, uint8_t bit_num); +bool RegEdit_u32_IsBitSet(void *reg, uint8_t bit_num); +void RegEdit_u32_OR_Num(void *reg, uint32_t num); +void RegEdit_u32_AND_Num(void *reg, uint32_t num); +void RegEdit_u32_SetNum(void *reg, uint32_t num); +uint32_t RegEdit_u32_ReadReg(void *reg); -/** - * - * @param reg The register address. - * @param num The bit location. - */ -void RegEdit_OR_Num(void *reg, uint8_t num); +// For 16-Bit systems and register access. -/** - * - * @param reg The register address. - * @param num The bit location. - */ -void RegEdit_AND_Num(void *reg, uint8_t num); +void RegEdit_u16_SetRegister(void *reg); +void RegEdit_u16_ClearRegister(void *reg); +void RegEdit_u16_SetBit(void *reg, uint8_t bit_num); +void RegEdit_u16_ClearBit(void *reg, uint8_t bit_num); +bool RegEdit_u16_IsBitSet(void *reg, uint8_t bit_num); +void RegEdit_u16_OR_Num(void *reg, uint16_t num); +void RegEdit_u16_AND_Num(void *reg, uint16_t num); +void RegEdit_u16_SetNum(void *reg, uint16_t num); +uint16_t RegEdit_u16_ReadReg(void *reg); -/** - * - * @param reg The register address. - * @param num The bit location. - */ -void RegEdit_SetNum(void *reg, uint8_t num); +// For 8-Bit systems and register access. -/** - * - * @param reg The register address. - */ -uint8_t RegEdit_ReadReg(void *reg); +void RegEdit_u8_SetRegister(void *reg); +void RegEdit_u8_ClearRegister(void *reg); +void RegEdit_u8_SetBit(void *reg, uint8_t bit_num); +void RegEdit_u8_ClearBit(void *reg, uint8_t bit_num); +bool RegEdit_u8_IsBitSet(void *reg, uint8_t bit_num); +void RegEdit_u8_OR_Num(void *reg, uint8_t num); +void RegEdit_u8_AND_Num(void *reg, uint8_t num); +void RegEdit_u8_SetNum(void *reg, uint8_t num); +uint8_t RegEdit_u8_ReadReg(void *reg); #endif // REGEDIT_H