Firmware: gather+display system information

This commit is contained in:
ikari 2012-01-02 23:31:40 +01:00
parent 6d28f3fb51
commit 97aef4a2d3
10 changed files with 53 additions and 23 deletions

View File

@ -55,7 +55,7 @@ TARGET = $(OBJDIR)/sd2snes
# List C source files here. (C dependencies are automatically generated.)
SRC = main.c ff.c ccsbcs.c clock.c uart.c power.c led.c timer.c printf.c spi.c fileops.c rtc.c fpga.c fpga_spi.c snes.c smc.c memory.c filetypes.c faulthandler.c sort.c crc32.c cic.c cli.c xmodem.c irq.c rle.c sdnative.c msu1.c crc16.c
SRC = main.c ff.c ccsbcs.c clock.c uart.c power.c led.c timer.c printf.c spi.c fileops.c rtc.c fpga.c fpga_spi.c snes.c smc.c memory.c filetypes.c faulthandler.c sort.c crc32.c cic.c cli.c xmodem.c irq.c rle.c sdnative.c msu1.c crc16.c sysinfo.c
# usbcontrol.c usb_hid.c usbhw_lpc.c usbinit.c usbstdreq.c

View File

@ -5,11 +5,16 @@
#include "cic.h"
char *cicstatenames[4] = { "CIC_OK", "CIC_FAIL", "CIC_PAIR", "CIC_SCIC" };
char *cicstatefriendly[4] = {"Original or no CIC", "Original CIC(failed)", "SuperCIC enhanced", "SuperCIC detected, not used"};
void print_cic_state() {
printf("CIC state: %s\n", get_cic_statename(get_cic_state()));
}
inline char *get_cic_statefriendlyname(enum cicstates state) {
return cicstatefriendly[state];
}
inline char *get_cic_statename(enum cicstates state) {
return cicstatenames[state];
}

View File

@ -13,6 +13,7 @@ enum cic_region { CIC_NTSC = 0, CIC_PAL };
void print_cic_state(void);
char *get_cic_statename(enum cicstates state);
char *get_cic_statefriendlyname(enum cicstates state);
enum cicstates get_cic_state(void);
void cic_init(int allow_pairmode);

View File

@ -134,7 +134,7 @@ static int8_t parse_wordlist(char *wordlist) {
do {
// If current word list character is \0: No match found
if (c == 0) {
printf("Unknown word: %s\n",curchar);
printf("Unknown word: %s\n(use ? for help)",curchar);
return -1;
}

View File

@ -66,6 +66,8 @@ uint32_t scan_dir(char* path, FILINFO* fno_param, char mkdb, uint32_t this_dir_t
static uint32_t parent_tgt;
static uint32_t dir_end = 0;
static uint8_t was_empty = 0;
static uint16_t num_files_total = 0;
static uint16_t num_dirs_total = 0;
uint32_t dir_tgt;
uint16_t numentries;
uint32_t dirsize;
@ -91,6 +93,7 @@ uint32_t scan_dir(char* path, FILINFO* fno_param, char mkdb, uint32_t this_dir_t
numentries=0;
for(pass = 0; pass < 2; pass++) {
if(pass) {
num_dirs_total++;
dirsize = 4*(numentries);
next_subdir_tgt += dirsize + 4;
if(parent_tgt) next_subdir_tgt += 4;
@ -180,6 +183,7 @@ uint32_t scan_dir(char* path, FILINFO* fno_param, char mkdb, uint32_t this_dir_t
} else {
SNES_FTYPE type = determine_filetype((char*)fn);
if(type != TYPE_UNKNOWN) {
num_files_total++;
numentries++;
if(pass) {
if(mkdb) {
@ -250,6 +254,8 @@ uint32_t scan_dir(char* path, FILINFO* fno_param, char mkdb, uint32_t this_dir_t
// printf("db_tgt=%lx dir_end=%lx\n", db_tgt, dir_end);
sram_writelong(db_tgt, SRAM_DB_ADDR+4);
sram_writelong(dir_end, SRAM_DB_ADDR+8);
sram_writeshort(num_files_total, SRAM_DB_ADDR+12);
sram_writeshort(num_dirs_total, SRAM_DB_ADDR+14);
return crc;
}

View File

@ -26,6 +26,7 @@
#include "smc.h"
#include "msu1.h"
#include "rtc.h"
#include "sysinfo.h"
#define EMC0TOGGLE (3<<4)
#define MR0R (1<<1)
@ -208,7 +209,7 @@ printf("PCONP=%lx\n", LPC_SC->PCONP);
sram_writebyte(0x00, SRAM_STATUS_ADDR+SYS_RTC_STATUS);
set_fpga_time(get_bcdtime());
}
sram_memset(SRAM_SYSINFO_ADDR, 13*40, 0x20);
printf("SNES GO!\n");
snes_reset(1);
delay_ms(1);
@ -243,8 +244,13 @@ printf("PCONP=%lx\n", LPC_SC->PCONP);
/* set RTC */
set_bcdtime(btime);
set_fpga_time(btime);
cmd=0; /* stay in loop */
cmd=0; /* stay in menu loop */
break;
case SNES_CMD_SYSINFO:
/* go to sysinfo loop */
sysinfo_loop();
cmd=0; /* stay in menu loop */
break;
default:
printf("unknown cmd: %d\n", cmd);
cmd=0; /* unknown cmd: stay in loop */

View File

@ -30,19 +30,20 @@
#include <arm/NXP/LPC17xx/LPC17xx.h>
#include "smc.h"
#define SRAM_ROM_ADDR (0x000000L)
#define SRAM_SAVE_ADDR (0xE00000L)
#define SRAM_ROM_ADDR (0x000000L)
#define SRAM_SAVE_ADDR (0xE00000L)
#define SRAM_MENU_ADDR (0xE00000L)
#define SRAM_DB_ADDR (0xE40000L)
#define SRAM_DIR_ADDR (0xE10000L)
#define SRAM_CMD_ADDR (0xFF1000L)
#define SRAM_PARAM_ADDR (0xFF1004L)
#define SRAM_STATUS_ADDR (0xFF1100L)
#define SRAM_MENU_SAVE_ADDR (0xFF0000L)
#define SRAM_SCRATCHPAD (0xFFFF00L)
#define SRAM_DIRID (0xFFFFF0L)
#define SRAM_RELIABILITY_SCORE (0x100)
#define SRAM_MENU_ADDR (0xE00000L)
#define SRAM_DB_ADDR (0xE40000L)
#define SRAM_DIR_ADDR (0xE10000L)
#define SRAM_CMD_ADDR (0xFF1000L)
#define SRAM_PARAM_ADDR (0xFF1004L)
#define SRAM_STATUS_ADDR (0xFF1100L)
#define SRAM_SYSINFO_ADDR (0xFF1110L)
#define SRAM_MENU_SAVE_ADDR (0xFF0000L)
#define SRAM_SCRATCHPAD (0xFFFF00L)
#define SRAM_DIRID (0xFFFFF0L)
#define SRAM_RELIABILITY_SCORE (0x100)
#define LOADROM_WITH_SRAM (1)
#define LOADROM_WITH_RESET (2)

View File

@ -111,6 +111,7 @@
uint8_t cmd[6]={0,0,0,0,0,0};
uint8_t rsp[17];
uint8_t csd[17];
uint8_t cid[17];
uint8_t ccs=0;
uint32_t rca;
@ -158,6 +159,17 @@ static uint32_t getbits(void *buffer, uint16_t start, int8_t bits) {
return result;
}
void sdn_checkinit(BYTE drv) {
if(disk_state == DISK_CHANGED) {
disk_initialize(drv);
}
}
uint8_t* sdn_getcid() {
sdn_checkinit(0);
return cid;
}
static inline void wiggle_slow_pos(uint16_t times) {
while(times--) {
delay_us(2);
@ -578,12 +590,6 @@ int acmd_fast(uint8_t cmd, uint32_t param, uint8_t crc, uint8_t* dat, uint8_t* r
return cmd_fast(cmd, param, crc, dat, rsp);
}
void sdn_checkinit(BYTE drv) {
if(disk_state == DISK_CHANGED) {
disk_initialize(drv);
}
}
int stream_datablock(uint8_t *buf) {
// uint8_t datshift=8;
int j=512;
@ -887,7 +893,10 @@ DRESULT sdn_initialize(BYTE drv) {
}
/* record CSD for getinfo */
cmd_slow(SEND_CSD, rca, 0, NULL, rsp);
cmd_slow(SEND_CSD, rca, 0, NULL, csd);
/* record CID */
cmd_slow(SEND_CID, rca, 0, NULL, cid);
/* select the card */
if(cmd_slow(SELECT_CARD, rca, 0, NULL, rsp)) {

View File

@ -24,6 +24,7 @@ DRESULT sdn_write(BYTE drv, const BYTE *buffer, DWORD sector, BYTE count);
DRESULT sdn_getinfo(BYTE drv, BYTE page, void *buffer);
void sdn_changed(void);
uint8_t* sdn_getcid(void);
#endif

View File

@ -29,6 +29,7 @@
#define SNES_CMD_LOADROM (1)
#define SNES_CMD_SETRTC (2)
#define SNES_CMD_SYSINFO (3)
#define MENU_ERR_OK (0)
#define MENU_ERR_NODSP (1)