mbed LPC1114 emulator pre-alpha version

Dependencies:   BaseV6M mbed F12RFileSystem F32RFileSystem ROMSLOT SDStorage

Fork of emu812 by Norimasa Okamoto

480
TOYOSHIKI TINY BASIC mbed Edition TTB_mbed_LPC1114.bin save as "LPC1114.IMG" .

Revision:
6:41e64a077678
Parent:
4:6629544a482e
Child:
9:ef9a58221fbe
--- a/main.cpp	Thu Aug 20 18:44:46 2015 +0900
+++ b/main.cpp	Fri Apr 08 10:55:51 2016 +0900
@@ -1,11 +1,18 @@
-// main.cpp 2015/8/19
+// main.cpp 2016/4/7
+#if defined(TARGET_LPC1768)
 #include "EMU111x.h"
+#include "SDStorage.h"
+#include "F32RFileSystem.h"
+#include "ROMSLOT.h"
 
 DigitalOut led1(LED1),led2(LED2);
-RawSerial pc(USBTX,USBRX);
-
+RawSerial pc(MBED_UARTUSB);
+#ifdef USE_SD
+SDStorage storage(MBED_SPI0);
+F32RFileSystem local(&storage, "local");
+#else
 LocalFileSystem local("local");
-uint8_t* flash = (uint8_t*)0x2007c000; // AHBSRAM0,AHBSRAM1
+#endif
 
 class MyEMU1114 : public EMU111x {
     virtual void DigitalWrite_Callback(int port, int pin, int value) {
@@ -19,22 +26,32 @@
     virtual int SerialReadable_Callback(int ch) { return pc.readable(); }
 };
 
-uint8_t* load(uint8_t* buf, int size, const char* filename) {
-    pc.printf("loading[%s]... ", filename);
+uint8_t* load(uint32_t addr, uint32_t limit, const char* filename) {
+    pc.printf("loading[%s]", filename);
     FileHandle* fh = local.open(filename, O_RDONLY);
     MBED_ASSERT(fh);
-    int n = fh->read(buf, size);
-    pc.printf("%d bytes\n", n);
+    for(uint32_t fileSize = 0; fileSize <= limit;) {
+        uint8_t buf[256];
+        size_t n = fh->read(buf, sizeof(buf));
+        if (n == 0) {
+            pc.printf(" %d bytes\n", fileSize);
+            break;
+        }
+        bool result = ROMSLOT::Write(addr + fileSize, (const uint8_t*)buf, sizeof(buf));
+        MBED_ASSERT(result);
+        fileSize += n;
+        pc.putc('.');
+    }
     fh->close();
-    return buf;
+    return (uint8_t*)addr;
 }
 
 int main() {
     pc.baud(115200);
-    pc.puts("LPC1114 emulator pre-alpha version\n");
+    pc.puts("mbed LPC1114 emulator pre-alpha version\n");
 
     MyEMU1114 mcu;
-    mcu.assign_flash(load(flash, 32*1024, "LPC1114.IMG"));
+    mcu.assign_flash(load(0x00040000, 0x8000, "LPC1114.IMG"));
 
     mcu.reset();
     for(;;) {
@@ -43,4 +60,5 @@
     }
     /* NOTREACHED */
 }
+#endif // TARGET_LPC1768