summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/debug_menu.c26
-rw-r--r--apps/main.c32
2 files changed, 58 insertions, 0 deletions
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) {