NESe (pronounced "Nessie") is a NES emulator based on the e6502 emulator, also written in C with a focus on speed and portability for use on embedded platforms, especially ARM.
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

95 rindas
2.2KB

  1. #include <stddef.h>
  2. #include "state.h"
  3. #include "ini.h"
  4. // Running State
  5. // TODO
  6. // Persistent State
  7. void cart_info_done(cart_info* cart) {
  8. if (cart->file) fclose(cart->file);
  9. free(cart->filename);
  10. }
  11. void nese_state_done(nese_State* state) {
  12. cart_info_done(&state->cart);
  13. }
  14. static const ini_datum prefs_schema = {
  15. .type = ini_section,
  16. .name = "nese",
  17. .count = 2,
  18. .data = (ini_datum[]){
  19. {
  20. .type = ini_section,
  21. .name = ".cart",
  22. .offset = offsetof(nese_State, cart),
  23. .count = 1,
  24. .data = (ini_datum[]){
  25. {
  26. .type = ini_string,
  27. .name = "filename",
  28. .offset = offsetof(cart_info, filename),
  29. },
  30. }
  31. }, {
  32. .type = ini_section,
  33. .name = ".flags",
  34. .offset = offsetof(nese_State, flags),
  35. .count = 3,
  36. .data = (ini_datum[]){
  37. {
  38. .type = ini_flag,
  39. .name = "fullscreen",
  40. .shift = State_Bit_Fullscreen,
  41. }, {
  42. .type = ini_flag,
  43. .name = "integer_scale",
  44. .shift = State_Bit_Integer_Scale,
  45. }, {
  46. .type = ini_flag,
  47. .name = "crt_effect",
  48. .shift = State_Bit_CRT_Effect,
  49. },
  50. }
  51. },
  52. },
  53. };
  54. int save_prefs_file(const nese_State* state, FILE* file) {
  55. return write_ini_file(file, &prefs_schema, state);
  56. }
  57. int load_prefs_file(nese_State* state, FILE* file) {
  58. return read_ini_file(file, &prefs_schema, state);
  59. }
  60. int save_prefs_filename(const nese_State* state,
  61. const char* filename) {
  62. int status = -1;
  63. FILE* file = fopen(filename, "w");
  64. if (NULL != file) {
  65. status = write_ini_file(file, &prefs_schema, state);
  66. fclose(file);
  67. }
  68. return status;
  69. }
  70. int load_prefs_filename(nese_State* state,
  71. const char* filename) {
  72. int status = -1;
  73. FILE* file = fopen(filename, "r");
  74. if (NULL != file) {
  75. status = read_ini_file(file, &prefs_schema, state);
  76. fclose(file);
  77. }
  78. return status;
  79. }