add simple header dump

This commit is contained in:
optixx 2009-10-18 17:16:33 +02:00
parent 697742d59f
commit ef82981d42
4 changed files with 57 additions and 13 deletions

View File

@ -185,6 +185,7 @@ ISR(USART0_RX_vect) // Interrupt for UART Byte received
enum cmds { enum cmds {
CMD_DUMP, CMD_DUMP,
CMD_DUMPVEC, CMD_DUMPVEC,
CMD_DUMPHEADER,
CMD_CRC, CMD_CRC,
CMD_EXIT, CMD_EXIT,
CMD_RESET, CMD_RESET,
@ -208,6 +209,7 @@ enum cmds {
uint8_t cmdlist[][CMD_HELP] PROGMEM = { uint8_t cmdlist[][CMD_HELP] PROGMEM = {
{"DUMP"}, {"DUMP"},
{"DUMPVEC"}, {"DUMPVEC"},
{"DUMPHEADER"},
{"CRC"}, {"CRC"},
{"EXIT"}, {"EXIT"},
{"RESET"}, {"RESET"},
@ -239,11 +241,6 @@ void shell_help(void){
} }
} }
uint16_t sram_word_be(uint32_t addr){
uint8_t hi = sram_read(addr);
uint8_t lo = sram_read(addr+1);
return (hi << 8 | lo );
}
void shell_run(void) void shell_run(void)
{ {
@ -252,6 +249,9 @@ void shell_run(void)
uint32_t arg2; uint32_t arg2;
uint32_t arg3; uint32_t arg3;
uint16_t crc; uint16_t crc;
uint16_t offset;
uint16_t i;
uint8_t c;
if (!cr) if (!cr)
return; return;
@ -281,7 +281,6 @@ void shell_run(void)
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_EXIT]) == 0) { }else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_EXIT]) == 0) {
leave_application(); leave_application();
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_RESET]) == 0) { }else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_RESET]) == 0) {
//send_reset();
system_send_snes_reset(); system_send_snes_reset();
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_IRQ]) == 0) { }else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_IRQ]) == 0) {
info_P(PSTR("Send IRQ\n")); info_P(PSTR("Send IRQ\n"));
@ -348,13 +347,51 @@ void shell_run(void)
else else
offset = 0x0000; offset = 0x0000;
info_P(PSTR("ABORT 0x%04x 0x%04x\n"), (0xFFE8 - offset),sram_word_be(0xFFE8 - offset)); info_P(PSTR("ABORT 0x%04x 0x%04x\n"), (0xFFE8 - offset),sram_read16_be(0xFFE8 - offset));
info_P(PSTR("BRK 0x%04x 0x%04x\n"), (0xFFE6 - offset),sram_word_be(0xFFE6 - offset)); info_P(PSTR("BRK 0x%04x 0x%04x\n"), (0xFFE6 - offset),sram_read16_be(0xFFE6 - offset));
info_P(PSTR("COP 0x%04x 0x%04x\n"), (0xFFE4 - offset),sram_word_be(0xFFE4 - offset)); info_P(PSTR("COP 0x%04x 0x%04x\n"), (0xFFE4 - offset),sram_read16_be(0xFFE4 - offset));
info_P(PSTR("IRQ 0x%04x 0x%04x\n"), (0xFFEE - offset),sram_word_be(0xFFEE - offset)); info_P(PSTR("IRQ 0x%04x 0x%04x\n"), (0xFFEE - offset),sram_read16_be(0xFFEE - offset));
info_P(PSTR("NMI 0x%04x 0x%04x\n"), (0xFFEA - offset),sram_word_be(0xFFEA - offset)); info_P(PSTR("NMI 0x%04x 0x%04x\n"), (0xFFEA - offset),sram_read16_be(0xFFEA - offset));
info_P(PSTR("RES 0x%04x 0x%04x\n"), (0xFFFC - offset),sram_word_be(0xFFFC - offset)); info_P(PSTR("RES 0x%04x 0x%04x\n"), (0xFFFC - offset),sram_read16_be(0xFFFC - offset));
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_DUMPHEADER]) == 0) {
if (system.rom_mode==LOROM)
offset = 0x8000;
else
offset = 0x0000;
/*
# $ffc0..$ffd4 => Name of the ROM, typically in ASCII, using spaces to pad the name to 21 bytes.
# $ffd5 => ROM layout, typically $20 for LoROM, or $21 for HiROM. Add $10 for FastROM.
# $ffd6 => Cartridge type, typically $00 for ROM only, or $02 for ROM with save-RAM.
# $ffd7 => ROM size byte.
# $ffd8 => RAM size byte.
# $ffd9 => Country code, which selects the video in the emulator. Values $00, $01, $0d use NTSC. Values in range $02..$0c use PAL. Other values are invalid.
# $ffda => Licensee code. If this value is $33, then the ROM has an extended header with ID at $ffb2..$ffb5.
# $ffdb => Version number, typically $00.
# $ffdc..$ffdd => Checksum complement, which is the bitwise-xor of the checksum and $ffff.
# $ffde..$ffdf => SNES checksum, an unsigned 16-bit checksum of bytes.
# $ffe0..$ffe3 => Unknown.
*/
info_P(PSTR("NAME 0x%04x "), (0xffc0 - offset));
for(arg1=(0xffc0 - offset); arg1<(0xffc0 - offset + 21);arg1++){
c = sram_read(arg1);
if (c>0x1f && c<0x7f)
printf("%c",c);
}
printf("\n");
info_P(PSTR("LAYOUT 0x%04x 0x%02x\n"), (0xffd5 - offset),sram_read(0xffd5 - offset));
info_P(PSTR("TYPE 0x%04x 0x%02x\n"), (0xffd6 - offset),sram_read(0xffd6 - offset));
info_P(PSTR("ROM 0x%04x 0x%02x\n"), (0xffd7 - offset),sram_read(0xffd7 - offset));
info_P(PSTR("RAM 0x%04x 0x%02x\n"), (0xffd8 - offset),sram_read(0xffd8 - offset));
info_P(PSTR("CCODE 0x%04x 0x%02x\n"), (0xffd9 - offset),sram_read(0xffd9 - offset));
info_P(PSTR("LIC 0x%04x 0x%02x\n"), (0xffda - offset),sram_read(0xffda - offset));
info_P(PSTR("VER 0x%04x 0x%02x\n"), (0xffdb - offset),sram_read(0xffdb - offset));
info_P(PSTR("SUM1 0x%04x 0x%04x\n"), (0xffdc - offset),sram_read16_be(0xffdc - offset));
info_P(PSTR("SUM2 0x%04x 0x%04x\n"), (0xffde - offset),sram_read16_be(0xffde - offset));
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_SHMWR]) == 0) { }else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_SHMWR]) == 0) {
if (get_hex_arg2(&arg1,&arg2)) if (get_hex_arg2(&arg1,&arg2))
shared_memory_write((uint8_t)arg1, (uint8_t)arg1); shared_memory_write((uint8_t)arg1, (uint8_t)arg1);

View File

@ -215,6 +215,12 @@ uint8_t sram_read(uint32_t addr)
} }
uint16_t sram_read16_be(uint32_t addr){
uint8_t hi = sram_read(addr);
uint8_t lo = sram_read(addr+1);
return (hi << 8 | lo );
}
void sram_bulk_write_start(uint32_t addr) void sram_bulk_write_start(uint32_t addr)
{ {
debug_P(DEBUG_SRAM, PSTR("sram_bulk_write_start: addr=0x%08lx\n\r"), addr); debug_P(DEBUG_SRAM, PSTR("sram_bulk_write_start: addr=0x%08lx\n\r"), addr);
@ -313,7 +319,6 @@ void sram_bulk_copy_into_buffer(uint32_t addr, uint8_t * dst, uint32_t len)
for (i = addr; i < (addr + len); i++) { for (i = addr; i < (addr + len); i++) {
dst[i] = sram_bulk_read(); dst[i] = sram_bulk_read();
sram_bulk_read_next(); sram_bulk_read_next();
ptr++;
} }
sram_bulk_read_end(); sram_bulk_read_end();
} }

View File

@ -206,6 +206,7 @@ void sram_bulk_read_start(uint32_t addr);
inline void sram_bulk_read_next(void); inline void sram_bulk_read_next(void);
inline void sram_bulk_read_end(void); inline void sram_bulk_read_end(void);
uint8_t sram_bulk_read(void); uint8_t sram_bulk_read(void);
uint16_t sram_read16_be(uint32_t addr);
void sram_bulk_write_start(uint32_t addr); void sram_bulk_write_start(uint32_t addr);
inline void sram_bulk_write_next(void); inline void sram_bulk_write_next(void);

View File

@ -4,3 +4,4 @@ Shell: dump cart header
Shell: dump and set irq vector Shell: dump and set irq vector
Shell: Dump and set reset vector Shell: Dump and set reset vector
verbose system status values verbose system status values
interchange for cs line and try to steal bus