X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fmonitor%2Fmonitor.c;h=218afca6efa799a1db5935932575fe0b4b98bdcb;hp=33b31c7029b1fec5f6cb5373fbac50ace32b7930;hb=5c029aa0c4f7573d9fa49beefe6e887dee2b25f9;hpb=4de4683d6ed9abb3ce6eea37957f845d6d33243f diff --git a/firmware/apps/monitor/monitor.c b/firmware/apps/monitor/monitor.c index 33b31c7..218afca 100644 --- a/firmware/apps/monitor/monitor.c +++ b/firmware/apps/monitor/monitor.c @@ -9,9 +9,9 @@ //! Call a function by address. int fncall(unsigned int adr){ - //TODO replace this with portable C. - //Preprocessor definition might help. - __asm__("call r15"); //r12 on IAR + int (*machfn)() = 0; + machfn= (int (*)()) adr; + return machfn(); } //! Handles a monitor command. @@ -19,6 +19,13 @@ void monitorhandle(unsigned char app, unsigned char verb, unsigned long len){ switch(verb){ + default: + debugstr("ERROR: Command unsupported by debug monitor."); + break; + case MONITOR_ECHO: + //Echo back the same buffer. + txdata(app,verb,len); + break; case PEEK: cmddata[0]=memorybyte[cmddataword[0]]; txdata(app,verb,1); @@ -72,6 +79,10 @@ void monitorhandle(unsigned char app, silent=cmddata[0]; txdata(app,verb,1); break; + case MONITOR_CONNECTED: + msp430_init_dco_done(); + txdata(app,verb,0); + break; } } @@ -86,7 +97,9 @@ void monitor_ram_pattern(){ txdata(0x00,0x90,0); //Reboot + #ifdef MSP430 asm("br &0xfffe"); + #endif } //! Return the number of contiguous bytes 0xBEEF, to measure RAM usage.