semihost server example program

Dependencies:   SWD mbed USBLocalFileSystem BaseDAP USBDAP

/media/uploads/va009039/kl46z-lpc800-360x480.jpg

LPCXpresso
LPC11U68
LPCXpresso
LPC1549
FRDM-KL46ZEA LPC4088 QSB
app-board
LPC1768
app-board
LPC810LPC1114FN28
serverserverserverserverserverclientclient
SWDIOD12D12D12p25p21p4(P0_2)p12
SWCLKD10D10D10p26p22p3(P0_3)p3
nRESET
*option
D6D6D6p34p30p1(P0_5)p23
GNDGNDGNDGNDp1p1p7p22
3.3VP3V3P3V3P3V3p44p40p6p21
flash writeSW2(P0_1)SW3(P1_9)SW1p14
joystick
center
p14
joystick
center

client example:

Import programlpc810-semihost_helloworld

semihost client example program

Revision:
9:7e71c20c96e4
Parent:
7:acfd2dbff157
--- a/src/RamDisk.cpp	Tue Feb 18 09:32:40 2014 +0000
+++ b/src/RamDisk.cpp	Thu Feb 20 09:43:03 2014 +0000
@@ -6,15 +6,10 @@
 #define RAMDISK_DBG(...)
 #endif
 
-RamDisk::RamDisk()
+RamDisk::RamDisk(int sectors):_sectors(sectors)
 {
+    onUpdate = NULL;
     format();
-    _sectors = 128; // 128*512 64Kbytes
-}
-
-/* virtual */ int RamDisk::storage_initialize()
-{
-    return 0;
 }
 
 /* virtual */ uint32_t RamDisk::storage_sectors()
@@ -27,28 +22,20 @@
     return _sectors * 512;
 }
 
-/* virtual */ int RamDisk::storage_status()
-{
-    return 0;
-}
-
 /* virtual */ int RamDisk::storage_read(uint8_t * data, uint32_t block)
 {
     RAMDISK_DBG("R block=%d", block);
+    update();
     memset(data, 0x00, 512);
     if (_sector_image.count(block) > 0) {
         uint8_t* buf = _sector_image[block];
         int size = buf[0]|(buf[1]<<8);
+        size &= 0x7fff; // remove ROM area bit
         memcpy(data, buf + 2, size);
     }
     return 0;
 }
 
-bool is_romdata(uint8_t* data)
-{
-    return data < (uint8_t*)0x1ffff000;
-}
-
 static int block_size(const uint8_t* data)
 {
     for(int i = 512-1; i >= 0; i--) {
@@ -61,10 +48,11 @@
 
 /* virtual */ int RamDisk::storage_write(const uint8_t * data, uint32_t block)
 {
+    update();
     int size = block_size(data);
     if (_sector_image.count(block) > 0) {
         uint8_t* buf = _sector_image[block];
-        if (!is_romdata(buf)) {
+        if (!(buf[1] & 0x80)) { // ROM area
             free(buf);
         }
         buf = (uint8_t*)malloc(size + 2);
@@ -104,7 +92,8 @@
         int block = _sector_image.getKey(i);
         uint8_t* buf = _sector_image[block];
         int size = buf[0]|(buf[1]<<8);
-        printf("0x%02x,0x%02x,0x%02x, // block=%d, size=%d\n", 
+        size &= 0x7fff;
+        printf("0x%02x,0x%02x,0x%02x|0x80, // block=%d, size=%d, ROM area\n", 
                                 block, buf[0], buf[1], block, size);
         if (mode == 1) {
             for(int j = 0; j < size; j++) {