/* MSP430 Emulator Copyright (C) 2020 Rudolf Geosits (rgeosits@live.esu.edu) "MSP430 Emulator" 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 (at your option) any later version. "MSP430 Emulator" 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 this program. If not, see . */ #ifndef _REGISTERS_H_ #define _REGISTERS_H_ #include #include #include #include #include "../../main.h" /* r2 or SR, the status register */ typedef struct Status_reg { uint8_t reserved : 7; // Reserved bits uint8_t overflow : 1; // Overflow flag uint8_t SCG1 : 1; // System Clock Generator SMCLK; ON = 0; OFF = 1; uint8_t SCG0 : 1; // System Clock Generator DCOCLK DCO ON = 0; DCO OFF = 1; uint8_t OSCOFF : 1; // Oscillator Off. LFXT1CLK ON = 0; LFXT1CLK OFF = 1; uint8_t CPUOFF : 1; // CPU off; CPU OFF = 1; CPU ON = 0; uint8_t GIE : 1; // General Inter enabl; Enbl maskable ints = 1; 0 = dont uint8_t negative : 1; // Negative flag uint8_t zero : 1; // Zero flag uint8_t carry : 1; // Carry flag; Set when result produces a carry } Status_reg; // Main CPU structure // typedef struct Cpu { bool running; /* CPU running or not */ uint16_t pc, sp; /* R0 and R1 respectively */ Status_reg sr; /* Status register fields */ int16_t cg2; /* R3 or Constant Generator #2 */ int16_t r4, r5, r6, r7; /* R4-R15 General Purpose Registers */ int16_t r8, r9, r10, r11; int16_t r12, r13, r14, r15; Port_1 *p1; //Port_2 *p2; Usci *usci; Bcm *bcm; Timer_a *timer_a; } Cpu; uint16_t sr_to_value (Emulator *emu); void set_sr_value (Emulator *emu, uint16_t value); void initialize_msp_registers (Emulator *emu); void update_register_display (Emulator *emu); #endif