From f80505c9d0275ce56b9d03b01aa96a5ad2ac0b59 Mon Sep 17 00:00:00 2001 From: Jörg Hohensohn Date: Sat, 2 Aug 2003 12:53:57 +0000 Subject: Diagnostic code added, to find init problems (charging, etc.) when flashed: the whole I/O space is saved on startup, can be dumped to a file via debug menu. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3912 a1c6a512-1295-4272-9138-f99709370657 --- apps/debug_menu.c | 26 ++++++++++++++++++++++++++ apps/main.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) (limited to 'apps') diff --git a/apps/debug_menu.c b/apps/debug_menu.c index 6df8f2f534..91746d2e58 100644 --- a/apps/debug_menu.c +++ b/apps/debug_menu.c @@ -193,6 +193,7 @@ bool dbg_mpeg_thread(void) /* Tool function to calculate a CRC16 across some buffer */ unsigned short crc_16(unsigned char* buf, unsigned len) { + /* CCITT standard polynomial 0x1021 */ static const unsigned short crc16_lookup[16] = { /* lookup table for 4 bits at a time is affordable */ 0x0000, 0x1021, 0x2042, 0x3063, @@ -1324,6 +1325,30 @@ bool dbg_save_roms(void) return false; } + +/* test code, to be removed later */ +extern union /* defined in main.c */ +{ + unsigned char port8 [512]; + unsigned short port16[256]; + unsigned port32[128]; +} startup_io; + +bool dbg_save_io(void) /* dump the initial I/O space to disk */ +{ + int fd; + + fd = creat("/startup_io.bin", O_WRONLY); + if(fd >= 0) + { + write(fd, (void *)&startup_io, sizeof(startup_io)); + close(fd); + } + + return false; +} +/* end of test code */ + bool debug_menu(void) { int m; @@ -1331,6 +1356,7 @@ bool debug_menu(void) struct menu_items items[] = { { "Dump ROM contents", dbg_save_roms }, + { "Dump startup I/O", dbg_save_io }, { "View I/O ports", dbg_ports }, #ifdef HAVE_LCD_BITMAP #ifdef HAVE_RTC diff --git a/apps/main.c b/apps/main.c index e10f9ed5f1..4d329bb658 100644 --- a/apps/main.c +++ b/apps/main.c @@ -54,6 +54,16 @@ #include "screens.h" #include "power.h" +/* diagnostic, to be removed later: */ +/* snapshot of the I/O space on startup, to compare initialisations */ +union +{ + unsigned char port8 [512]; + unsigned short port16[256]; + unsigned port32[128]; +} startup_io; + + char appsversion[]=APPSVERSION; void init(void); @@ -225,6 +235,28 @@ void init(void) int main(void) { + /* diagnostic, to be removed later: dump I/O space */ + int i; + for (i = 0; i < 512; i++) + { // most can be read with 8 bit access + startup_io.port8[i] = *((volatile unsigned char*)0x5FFFE00 + i); + } + // some don't allow that, read with 32 bit if aligned + startup_io.port32[0x140/4] = *((volatile unsigned char*)0x5FFFF40); + startup_io.port32[0x144/4] = *((volatile unsigned char*)0x5FFFF44); + startup_io.port32[0x150/4] = *((volatile unsigned char*)0x5FFFF50); + startup_io.port32[0x154/4] = *((volatile unsigned char*)0x5FFFF54); + startup_io.port32[0x160/4] = *((volatile unsigned char*)0x5FFFF60); + startup_io.port32[0x170/4] = *((volatile unsigned char*)0x5FFFF70); + startup_io.port32[0x174/4] = *((volatile unsigned char*)0x5FFFF74); + + // read the rest with 16 bit + startup_io.port16[0x14A/2] = *((volatile unsigned short*)0x5FFFF4A); + startup_io.port16[0x15A/2] = *((volatile unsigned short*)0x5FFFF5A); + startup_io.port16[0x16A/2] = *((volatile unsigned short*)0x5FFFF6A); + startup_io.port16[0x17A/2] = *((volatile unsigned short*)0x5FFFF7A); + /* end of diagnostic */ + app_main(); while(1) { -- cgit v1.2.3