add simple header dump
This commit is contained in:
parent
697742d59f
commit
ef82981d42
@ -185,6 +185,7 @@ ISR(USART0_RX_vect) // Interrupt for UART Byte received
|
||||
enum cmds {
|
||||
CMD_DUMP,
|
||||
CMD_DUMPVEC,
|
||||
CMD_DUMPHEADER,
|
||||
CMD_CRC,
|
||||
CMD_EXIT,
|
||||
CMD_RESET,
|
||||
@ -208,6 +209,7 @@ enum cmds {
|
||||
uint8_t cmdlist[][CMD_HELP] PROGMEM = {
|
||||
{"DUMP"},
|
||||
{"DUMPVEC"},
|
||||
{"DUMPHEADER"},
|
||||
{"CRC"},
|
||||
{"EXIT"},
|
||||
{"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)
|
||||
{
|
||||
@ -252,6 +249,9 @@ void shell_run(void)
|
||||
uint32_t arg2;
|
||||
uint32_t arg3;
|
||||
uint16_t crc;
|
||||
uint16_t offset;
|
||||
uint16_t i;
|
||||
uint8_t c;
|
||||
|
||||
if (!cr)
|
||||
return;
|
||||
@ -281,7 +281,6 @@ void shell_run(void)
|
||||
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_EXIT]) == 0) {
|
||||
leave_application();
|
||||
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_RESET]) == 0) {
|
||||
//send_reset();
|
||||
system_send_snes_reset();
|
||||
}else if (strcmp_P((char*)t, (PGM_P)cmdlist[CMD_IRQ]) == 0) {
|
||||
info_P(PSTR("Send IRQ\n"));
|
||||
@ -348,12 +347,50 @@ void shell_run(void)
|
||||
else
|
||||
offset = 0x0000;
|
||||
|
||||
info_P(PSTR("ABORT 0x%04x 0x%04x\n"), (0xFFE8 - offset),sram_word_be(0xFFE8 - offset));
|
||||
info_P(PSTR("BRK 0x%04x 0x%04x\n"), (0xFFE6 - offset),sram_word_be(0xFFE6 - offset));
|
||||
info_P(PSTR("COP 0x%04x 0x%04x\n"), (0xFFE4 - offset),sram_word_be(0xFFE4 - offset));
|
||||
info_P(PSTR("IRQ 0x%04x 0x%04x\n"), (0xFFEE - offset),sram_word_be(0xFFEE - offset));
|
||||
info_P(PSTR("NMI 0x%04x 0x%04x\n"), (0xFFEA - offset),sram_word_be(0xFFEA - offset));
|
||||
info_P(PSTR("RES 0x%04x 0x%04x\n"), (0xFFFC - offset),sram_word_be(0xFFFC - 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_read16_be(0xFFE6 - 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_read16_be(0xFFEE - 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_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) {
|
||||
if (get_hex_arg2(&arg1,&arg2))
|
||||
|
||||
@ -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)
|
||||
{
|
||||
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++) {
|
||||
dst[i] = sram_bulk_read();
|
||||
sram_bulk_read_next();
|
||||
ptr++;
|
||||
}
|
||||
sram_bulk_read_end();
|
||||
}
|
||||
|
||||
@ -206,6 +206,7 @@ void sram_bulk_read_start(uint32_t addr);
|
||||
inline void sram_bulk_read_next(void);
|
||||
inline void sram_bulk_read_end(void);
|
||||
uint8_t sram_bulk_read(void);
|
||||
uint16_t sram_read16_be(uint32_t addr);
|
||||
|
||||
void sram_bulk_write_start(uint32_t addr);
|
||||
inline void sram_bulk_write_next(void);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user