diff --git a/Examples/clock b/Examples/clock deleted file mode 100755 index 7e21f6e..0000000 Binary files a/Examples/clock and /dev/null differ diff --git a/Examples/fibonacci b/Examples/fibonacci deleted file mode 100755 index 337c1c7..0000000 Binary files a/Examples/fibonacci and /dev/null differ diff --git a/registers.c b/registers.c index 2bfe71c..3cbcc94 100644 --- a/registers.c +++ b/registers.c @@ -30,7 +30,6 @@ registers registers_create() registers r = NULL; r = (registers)malloc(sizeof(struct registers_data)); - r->mode = USR; r->reg = (register_data *)malloc(sizeof(register_data) * N_REGISTRES); for (int i = 0; i < N_REGISTRES; i++) { @@ -129,7 +128,7 @@ uint8_t get_read_write_mode(uint8_t mode) uint8_t registers_get_mode(registers r) { - return r->mode; + return get_bits(r->reg[CPSR].data[0], 5, 0); } static int registers_mode_has_spsr(registers r, uint8_t mode) @@ -160,7 +159,7 @@ uint32_t registers_read(registers r, uint8_t reg, uint8_t mode) uint32_t registers_read_cpsr(registers r) { - return registers_read(r, CPSR, r->mode); + return r->reg[CPSR].data[0]; } uint32_t registers_read_spsr(registers r, uint8_t mode) @@ -181,7 +180,7 @@ void registers_write(registers r, uint8_t reg, uint8_t mode, uint32_t value) void registers_write_cpsr(registers r, uint32_t value) { - registers_write(r, CPSR, 0, value); + r->reg[CPSR].data[0] = value; return; } diff --git a/registers.h b/registers.h index 8a7c07d..4175a31 100644 --- a/registers.h +++ b/registers.h @@ -48,7 +48,6 @@ typedef struct */ struct registers_data { - uint8_t mode; register_data *reg; }; diff --git a/registers_test.c b/registers_test.c index 8c9a2fe..11d4a43 100644 --- a/registers_test.c +++ b/registers_test.c @@ -16,9 +16,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, �tats-Unis. Contact: Guillaume.Huard@imag.fr - B�timent IMAG - 700 avenue centrale, domaine universitaire - 38401 Saint Martin d'H�res + B�timent IMAG + 700 avenue centrale, domaine universitaire + 38401 Saint Martin d'H�res */ #include #include @@ -28,55 +28,67 @@ Contact: Guillaume.Huard@imag.fr #include "arm_constants.h" #include "util.h" -int main() { +int main() +{ registers r; uint32_t word_value[15], word_read; int i; r = registers_create(); - if (r == NULL) { + if (r == NULL) + { fprintf(stderr, "Error when creating simulated registers\n"); exit(1); } printf("Registers created\n"); srandom(getpid()); - for (i = 0; i < 15; i++) { + for (i = 0; i < 15; i++) + { word_value[i] = random(); } // Arm reset printf("Reseting registers...\n"); - registers_write_cpsr(r, 0x1d3); + registers_write_cpsr(r, 0x110); + uint8_t mode = registers_get_mode(r); printf("Testing read and write to general registers:\n"); - for (i = 0; i < 15; i++) { + for (i = 0; i < 15; i++) + { registers_write(r, i, mode, word_value[i]); } - for (i = 0; i < 15; i++) { + for (i = 0; i < 15; i++) + { word_read = registers_read(r, i, mode); printf("- register %d : must have : %d and have %d (in mode %d) ", i, word_value[i], word_read, mode); - if (word_read != word_value[i]) return 1; + if (word_read != word_value[i]) + return 1; printf("Test passed\n"); } - printf("Current mode : "); - if (registers_get_mode(r) != USR) return 1; + if (registers_get_mode(r) != USR) + return 1; printf("Test passed\n"); - r->mode = IRQ; + registers_write_cpsr(r, 0x1d3); + printf("Mode is priviledged : "); - if (!registers_in_a_privileged_mode(r)) return 1; + if (!registers_in_a_privileged_mode(r)) + return 1; printf("Test passed\n"); printf("Mode has spsr : "); - if (!registers_current_mode_has_spsr(r)) return 1; + if (!registers_current_mode_has_spsr(r)) + return 1; printf("Test passed\n"); printf("Test if pointer have the same destination : "); - if (registers_read(r, 0, USR) != registers_read(r, 0, IRQ)) return 1; + if (registers_read(r, 0, USR) != registers_read(r, 0, IRQ)) + return 1; printf("Test passed\n"); printf("Test if pointer have differents destination : "); registers_write(r, 14, USR, 0x10); registers_write(r, 14, IRQ, 0x5); - if (registers_read(r, 14, USR) == registers_read(r, 14, IRQ)) return 1; + if (registers_read(r, 14, USR) == registers_read(r, 14, IRQ)) + return 1; printf("Test passed\n"); printf("Free registers...\n");