diff --git a/.vscode/settings.json b/.vscode/settings.json index a938144..ea35c0b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,6 @@ "makefile.makefilePath": "", "files.associations": { "platform-nspire.h": "c", - "*.inc": "c", - "stdint.h": "c" + "*.inc": "c" } } \ No newline at end of file diff --git a/source/main.S b/source/main.S index 7d44a35..5a74c13 100644 --- a/source/main.S +++ b/source/main.S @@ -396,10 +396,8 @@ save_state: - ldr r0, =saved_state_cpu_status - ldr r1, =saved_state_cpu_cpsr - sub r2, r9, #s_SIZE - + mov r0, saved_state_cpu_status + str r1, saved_state_cpu_cpsr bl write_save_state ldr lr, saved_state_cpu_status+56 // subroutine return diff --git a/source/save_state.c b/source/save_state.c index 8eecc57..d76b361 100644 --- a/source/save_state.c +++ b/source/save_state.c @@ -4,27 +4,22 @@ #include -#define s_SIZE 0x4600 +#define s_SIZE 0x4600; -const size_t cpu_status_size = (15 * sizeof(uint16_t)); +void write_save_state(uint32_t saved_state_cpu_status_addr, uint32_t saved_state_cpu_cpsr); -void write_save_state(uint8_t* saved_state_cpu_status_addr, uint8_t* saved_state_cpu_cpsr, void* state_ds_addr); +void write_save_state(uint32_t saved_state_cpu_status_addr, uint32_t saved_state_cpu_cpsr){ + size_t lenght = s_SIZE; -void write_save_state(uint8_t* saved_state_cpu_status_addr, uint8_t* saved_state_cpu_cpsr, void* state_ds_addr){ - size_t data_size = cpu_status_size + sizeof(uint8_t) + s_SIZE; - uint8_t *data = malloc(data_size); - uint8_t *data_start = data; + size_t data_size = s_SIZE + sizeof(uint32_t); + uint32_t *data = malloc(data_size); - memcpy(data, state_ds_addr, s_SIZE); - data += s_SIZE; + memcpy(data, saved_state_cpu_status_addr, lenght); - memcpy(data, saved_state_cpu_status_addr, cpu_status_size); - data += cpu_status_size; - - memcpy(data, saved_state_cpu_cpsr, 1); + data[data_size-1] = saved_state_cpu_cpsr; FILE* savefile = fopen("/documents/ndless/test.tns", "wb"); - fwrite(data_start, data_size, 1, savefile); + fwrite(data, data_size, 1, savefile); fclose(savefile); } \ No newline at end of file