sysinfo.c 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #include <arm/NXP/LPC17xx/LPC17xx.h>
  2. #include <arm/bits.h>
  3. #include <string.h>
  4. #include "config.h"
  5. #include "diskio.h"
  6. #include "ff.h"
  7. #include "timer.h"
  8. #include "uart.h"
  9. #include "fileops.h"
  10. #include "memory.h"
  11. #include "snes.h"
  12. #include "fpga.h"
  13. #include "fpga_spi.h"
  14. #include "cic.h"
  15. #include "sdnative.h"
  16. #include "sysinfo.h"
  17. static uint32_t sd_tacc_max, sd_tacc_avg;
  18. void sysinfo_loop() {
  19. sd_tacc_max = 0;
  20. sd_tacc_avg = 0;
  21. while(sram_readbyte(SRAM_CMD_ADDR) != 0x00) {
  22. write_sysinfo();
  23. delay_ms(100);
  24. }
  25. }
  26. void write_sysinfo() {
  27. uint32_t sram_addr = SRAM_SYSINFO_ADDR;
  28. char linebuf[40];
  29. int len;
  30. int sd_ok = 0;
  31. uint8_t *sd_cid = sdn_getcid();
  32. uint32_t sd_tacc_max_int = sd_tacc_max / 1000;
  33. uint32_t sd_tacc_max_frac = sd_tacc_max - (sd_tacc_max_int * 1000);
  34. uint32_t sd_tacc_avg_int = sd_tacc_avg / 1000;
  35. uint32_t sd_tacc_avg_frac = sd_tacc_avg - (sd_tacc_avg_int * 1000);
  36. uint16_t numfiles = sram_readshort(SRAM_DB_ADDR+12);
  37. uint16_t numdirs = sram_readshort(SRAM_DB_ADDR+14);
  38. int32_t sysclk = get_snes_sysclk();
  39. len = snprintf(linebuf, sizeof(linebuf), "Firmware version: %s", CONFIG_VERSION);
  40. sram_writeblock(linebuf, sram_addr, 40);
  41. sram_memset(sram_addr+len, 40-len, 0x20);
  42. sram_addr += 40;
  43. len = snprintf(linebuf, sizeof(linebuf), " ");
  44. sram_writeblock(linebuf, sram_addr, 40);
  45. sram_memset(sram_addr+len, 40-len, 0x20);
  46. sram_addr += 40;
  47. if(disk_state == DISK_REMOVED) {
  48. sd_tacc_max = 0;
  49. sd_tacc_avg = 0;
  50. len = snprintf(linebuf, sizeof(linebuf), " ");
  51. sram_writeblock(linebuf, sram_addr, 40);
  52. sram_memset(sram_addr+len, 40-len, 0x20);
  53. sram_addr += 40;
  54. len = snprintf(linebuf, sizeof(linebuf), " *** SD Card removed *** ");
  55. sram_writeblock(linebuf, sram_addr, 40);
  56. sram_memset(sram_addr+len, 40-len, 0x20);
  57. sram_addr += 40;
  58. len = snprintf(linebuf, sizeof(linebuf), " ");
  59. sram_writeblock(linebuf, sram_addr, 40);
  60. sram_memset(sram_addr+len, 40-len, 0x20);
  61. sram_addr += 40;
  62. len = snprintf(linebuf, sizeof(linebuf), " ");
  63. sram_writeblock(linebuf, sram_addr, 40);
  64. sram_memset(sram_addr+len, 40-len, 0x20);
  65. sram_addr += 40;
  66. sd_ok = 0;
  67. } else {
  68. len = snprintf(linebuf, sizeof(linebuf), "SD Maker/OEM: 0x%02x, \"%c%c\"", sd_cid[1], sd_cid[2], sd_cid[3]);
  69. sram_writeblock(linebuf, sram_addr, 40);
  70. sram_memset(sram_addr+len, 40-len, 0x20);
  71. sram_addr += 40;
  72. len = snprintf(linebuf, sizeof(linebuf), "SD Product Name: \"%c%c%c%c%c\", Rev. %d.%d", sd_cid[4], sd_cid[5], sd_cid[6], sd_cid[7], sd_cid[8], sd_cid[9]>>4, sd_cid[9]&15);
  73. sram_writeblock(linebuf, sram_addr, 40);
  74. sram_memset(sram_addr+len, 40-len, 0x20);
  75. sram_addr += 40;
  76. len = snprintf(linebuf, sizeof(linebuf), "SD Serial No.: %02x%02x%02x%02x, Mfd. %d/%02d", sd_cid[10], sd_cid[11], sd_cid[12], sd_cid[13], 2000+((sd_cid[14]&15)<<4)+(sd_cid[15]>>4), sd_cid[15]&15);
  77. sram_writeblock(linebuf, sram_addr, 40);
  78. sram_memset(sram_addr+len, 40-len, 0x20);
  79. sram_addr += 40;
  80. if(sd_tacc_max)
  81. len = snprintf(linebuf, sizeof(linebuf), "SD acc. time: %ld.%03ld / %ld.%03ld ms avg/max", sd_tacc_avg_int, sd_tacc_avg_frac, sd_tacc_max_int, sd_tacc_max_frac);
  82. else
  83. len = snprintf(linebuf, sizeof(linebuf), "SD acc. time: measuring... ");
  84. sram_writeblock(linebuf, sram_addr, 40);
  85. sram_memset(sram_addr+len, 40-len, 0x20);
  86. sram_addr += 40;
  87. sd_ok = 1;
  88. }
  89. len = snprintf(linebuf, sizeof(linebuf), " ");
  90. sram_writeblock(linebuf, sram_addr, 40);
  91. sram_memset(sram_addr+len, 40-len, 0x20);
  92. sram_addr += 40;
  93. len = snprintf(linebuf, sizeof(linebuf), "CIC state: %s", get_cic_statefriendlyname(get_cic_state()));
  94. sram_writeblock(linebuf, sram_addr, 40);
  95. sram_memset(sram_addr+len, 40-len, 0x20);
  96. sram_addr += 40;
  97. if(sysclk == -1)
  98. len = snprintf(linebuf, sizeof(linebuf), "SNES master clock: measuring...");
  99. else
  100. len = snprintf(linebuf, sizeof(linebuf), "SNES master clock: %ldHz ", get_snes_sysclk());
  101. sram_writeblock(linebuf, sram_addr, 40);
  102. sram_memset(sram_addr+len, 40-len, 0x20);
  103. sram_addr += 40;
  104. len = snprintf(linebuf, sizeof(linebuf), " ");
  105. sram_writeblock(linebuf, sram_addr, 40);
  106. sram_memset(sram_addr+len, 40-len, 0x20);
  107. sram_addr += 40;
  108. len = snprintf(linebuf, sizeof(linebuf), "Database: %d files, %d dirs", numfiles, numdirs);
  109. sram_writeblock(linebuf, sram_addr, 40);
  110. sram_memset(sram_addr+len, 40-len, 0x20);
  111. sram_addr += 40;
  112. len = snprintf(linebuf, sizeof(linebuf), " ");
  113. sram_writeblock(linebuf, sram_addr, 40);
  114. sram_memset(sram_addr+len, 40-len, 0x20);
  115. sram_addr += 40;
  116. len = snprintf(linebuf, sizeof(linebuf), " ");
  117. sram_writeblock(linebuf, sram_addr, 40);
  118. sram_memset(sram_addr+len, 40-len, 0x20);
  119. sram_hexdump(SRAM_SYSINFO_ADDR, 13*40);
  120. if(sysclk != -1 && sd_ok)sdn_gettacc(&sd_tacc_max, &sd_tacc_avg);
  121. }