|
Avr8bit-emulator
An emulator for the Atmel AVR 8-bit microcontroller
|
Branching and jumps instructions. More...
#include <stdint.h>#include <stdbool.h>#include "core.h"#include "sram.h"#include "data_space.h"#include "sreg_utils.h"#include "emulator.h"

Go to the source code of this file.
Functions | |
| void | rjmp (uint8_t k, struct CORE *core) |
| Perform a relative jump. | |
| void | ijmp (struct CORE *core) |
| Perform an indirect jump. | |
| void | jmp (uint32_t k, struct CORE *core) |
| Perform an absolute jump. | |
| void | rcall (uint8_t k, struct CORE *core, struct SRAM *sram) |
| Perform a relative call to a subroutine. | |
| void | icall (struct CORE *core, struct SRAM *sram) |
| Perform an indirect call to a subroutine. | |
| void | eicall (struct CORE *core, struct SRAM *sram) |
| Perform an extended indirect call to a subroutine. | |
| void | ret (struct CORE *core, struct SRAM *sram) |
| Return from a subroutine. | |
| void | reti (struct CORE *core, struct SRAM *sram) |
| Return from an interrupt. | |
| void | cpse (uint8_t d, uint8_t r, struct CORE *core) |
| Compare and skip if equal. | |
| void | cp (uint8_t d, uint8_t r, struct CORE *core) |
| Compare two registers. | |
| void | cpc (uint8_t d, uint8_t r, struct CORE *core) |
| Compare two registers with carry. | |
| void | cpi (uint8_t d, uint8_t K, struct CORE *core) |
| Compare register with an immediate value. | |
| void | sbrc (uint8_t r, uint8_t b, struct CORE *core) |
| Skip if bit in register is cleared. | |
| void | sbrs (uint8_t r, uint8_t b, struct CORE *core) |
| Skip if bit in register is set. | |
| void | sbic (uint8_t A, uint8_t b, struct CORE *core, union DATA_SPACE *data_space) |
| Skip if bit in I/O register is cleared. | |
| void | sbis (uint8_t A, uint8_t b, struct CORE *core, union DATA_SPACE *data_space) |
| Skip if bit in I/O register is set. | |
| void | brbs (uint8_t s, uint8_t k, struct CORE *core) |
| Branch if status flag is set. | |
| void | brbc (uint8_t s, uint8_t k, struct CORE *core) |
| Branch if status flag is cleared. | |
| void | breq (uint8_t k, struct CORE *core) |
| Branch if equal. | |
| void | brne (uint8_t k, struct CORE *core) |
| Branch if not equal. | |
| void | brcs (uint8_t k, struct CORE *core) |
| Branch if carry set. | |
| void | brcc (uint8_t k, struct CORE *core) |
| Branch if carry cleared. | |
| void | brsh (uint8_t k, struct CORE *core) |
| Branch if same or higher. | |
| void | brlo (uint8_t k, struct CORE *core) |
| Branch if lower. | |
| void | brmi (uint8_t k, struct CORE *core) |
| Branch if minus. | |
| void | brpl (uint8_t k, struct CORE *core) |
| Branch if plus. | |
| void | brge (uint8_t k, struct CORE *core) |
| Branch if greater or equal. | |
| void | brlt (uint8_t k, struct CORE *core) |
| Branch if less than. | |
| void | brhs (uint8_t k, struct CORE *core) |
| Branch if half carry set. | |
| void | brhc (uint8_t k, struct CORE *core) |
| Branch if half carry cleared. | |
| void | brts (uint8_t k, struct CORE *core) |
| Branch if T flag set. | |
| void | brtc (uint8_t k, struct CORE *core) |
| Branch if T flag cleared. | |
| void | brvs (uint8_t k, struct CORE *core) |
| Branch if overflow set. | |
| void | brvc (uint8_t k, struct CORE *core) |
| Branch if overflow cleared. | |
| void | brie (uint8_t k, struct CORE *core) |
| Branch if interrupts enabled. | |
| void | brid (uint8_t k, struct CORE *core) |
| Branch if interrupts disabled. | |
Branching and jumps instructions.
Contains all atomic branching and jumps instructions
Definition in file branch.h.
| void brbc | ( | uint8_t | s, |
| uint8_t | k, | ||
| struct CORE * | core | ||
| ) |
Branch if status flag is cleared.
| s | Status flag. |
| k | Relative address. |
| core | Pointer to the CORE structure. |
Definition at line 247 of file branch.c.
References CORE::PC, SREG::sreg, and CORE::sreg.
| void brbs | ( | uint8_t | s, |
| uint8_t | k, | ||
| struct CORE * | core | ||
| ) |
Branch if status flag is set.
| s | Status flag. |
| k | Relative address. |
| core | Pointer to the CORE structure. |
Definition at line 230 of file branch.c.
References CORE::PC, SREG::sreg, and CORE::sreg.
| void brcc | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if carry cleared.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 315 of file branch.c.
References SREG::C, CORE::PC, and CORE::sreg.
| void brcs | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if carry set.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 298 of file branch.c.
References SREG::C, CORE::PC, and CORE::sreg.
| void breq | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if equal.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 264 of file branch.c.
References CORE::PC, CORE::sreg, and SREG::Z.
| void brge | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if greater or equal.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 400 of file branch.c.
References SREG::N, CORE::PC, CORE::sreg, and SREG::V.
| void brhc | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if half carry cleared.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 451 of file branch.c.
References SREG::H, CORE::PC, and CORE::sreg.
| void brhs | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if half carry set.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 434 of file branch.c.
References SREG::H, CORE::PC, and CORE::sreg.
| void brid | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if interrupts disabled.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 553 of file branch.c.
References SREG::I, CORE::PC, and CORE::sreg.
| void brie | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if interrupts enabled.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 536 of file branch.c.
References SREG::I, CORE::PC, and CORE::sreg.
| void brlo | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if lower.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 349 of file branch.c.
References SREG::C, CORE::PC, and CORE::sreg.
| void brlt | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if less than.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 417 of file branch.c.
References SREG::N, CORE::PC, CORE::sreg, and SREG::V.
| void brmi | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if minus.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 366 of file branch.c.
References SREG::N, CORE::PC, and CORE::sreg.
| void brne | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if not equal.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 281 of file branch.c.
References CORE::PC, CORE::sreg, and SREG::Z.
| void brpl | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if plus.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 383 of file branch.c.
References SREG::N, CORE::PC, and CORE::sreg.
| void brsh | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if same or higher.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 332 of file branch.c.
References SREG::C, CORE::PC, and CORE::sreg.
| void brtc | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if T flag cleared.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 485 of file branch.c.
References CORE::PC, CORE::sreg, and SREG::T.
| void brts | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if T flag set.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 468 of file branch.c.
References CORE::PC, CORE::sreg, and SREG::T.
| void brvc | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if overflow cleared.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 519 of file branch.c.
References CORE::PC, CORE::sreg, and SREG::V.
| void brvs | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
Branch if overflow set.
| k | The offset for the branch. |
| core | Pointer to the core structure. |
Definition at line 502 of file branch.c.
References CORE::PC, CORE::sreg, and SREG::V.
| void cp | ( | uint8_t | d, |
| uint8_t | r, | ||
| struct CORE * | core | ||
| ) |
Compare two registers.
| d | Destination register. |
| r | Source register. |
| core | Pointer to the CORE structure. |
Definition at line 120 of file branch.c.
References CORE::gp, GP::R, and update_sreg_arithm().
| void cpc | ( | uint8_t | d, |
| uint8_t | r, | ||
| struct CORE * | core | ||
| ) |
Compare two registers with carry.
| d | Destination register. |
| r | Source register. |
| core | Pointer to the CORE structure. |
Definition at line 132 of file branch.c.
References SREG::C, CORE::gp, GP::R, CORE::sreg, and update_sreg_arithm().
| void cpi | ( | uint8_t | d, |
| uint8_t | K, | ||
| struct CORE * | core | ||
| ) |
Compare register with an immediate value.
| d | Destination register. |
| K | Immediate value. |
| core | Pointer to the CORE structure. |
Definition at line 144 of file branch.c.
References CORE::gp, GP::R, and update_sreg_arithm().
| void cpse | ( | uint8_t | d, |
| uint8_t | r, | ||
| struct CORE * | core | ||
| ) |
Compare and skip if equal.
| d | The destination register. |
| r | The source register. |
| core | Pointer to the CORE structure. |
Definition at line 102 of file branch.c.
Perform an indirect call to a subroutine.
Definition at line 54 of file branch.c.
References CORE::gp, SRAM::mem, CORE::PC, CORE::SP, and GP::Z.
| void ijmp | ( | struct CORE * | core | ) |
| void jmp | ( | uint32_t | k, |
| struct CORE * | core | ||
| ) |
Perform a relative call to a subroutine.
| k | The offset for the call. |
| core | Pointer to the CORE structure. |
| sram | Pointer to the SRAM structure. |
Definition at line 39 of file branch.c.
Return from an interrupt.
Definition at line 87 of file branch.c.
References SRAM::mem, CORE::PC, CORE::SP, CORE::sreg, and update_sreg_I().
| void rjmp | ( | uint8_t | k, |
| struct CORE * | core | ||
| ) |
| void sbic | ( | uint8_t | A, |
| uint8_t | b, | ||
| struct CORE * | core, | ||
| union DATA_SPACE * | data_space | ||
| ) |
Skip if bit in I/O register is cleared.
| A | I/O register address. |
| b | Bit position. |
| core | Pointer to the CORE structure. |
| data_space | Pointer to the DATA_SPACE union. |
Definition at line 192 of file branch.c.
References DATA_SPACE::io_reg, and CORE::PC.
| void sbis | ( | uint8_t | A, |
| uint8_t | b, | ||
| struct CORE * | core, | ||
| union DATA_SPACE * | data_space | ||
| ) |
Skip if bit in I/O register is set.
| A | I/O register address. |
| b | Bit position. |
| core | Pointer to the CORE structure. |
| data_space | Pointer to the DATA_SPACE union. |
Definition at line 211 of file branch.c.
References DATA_SPACE::io_reg, and CORE::PC.
| void sbrc | ( | uint8_t | r, |
| uint8_t | b, | ||
| struct CORE * | core | ||
| ) |
Skip if bit in register is cleared.
| r | Register. |
| b | Bit position. |
| core | Pointer to the CORE structure. |
Definition at line 156 of file branch.c.
| void sbrs | ( | uint8_t | r, |
| uint8_t | b, | ||
| struct CORE * | core | ||
| ) |
Skip if bit in register is set.
| r | Register. |
| b | Bit position. |
| core | Pointer to the CORE structure. |
Definition at line 174 of file branch.c.