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" .

Committer:
va009039
Date:
Fri Apr 08 10:55:51 2016 +0900
Revision:
6:41e64a077678
Parent:
4:6629544a482e
Child:
9:ef9a58221fbe
add Nucleo-L152RE.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 6:41e64a077678 1 // main.cpp 2016/4/7
va009039 6:41e64a077678 2 #if defined(TARGET_LPC1768)
va009039 3:5df725af50e0 3 #include "EMU111x.h"
va009039 6:41e64a077678 4 #include "SDStorage.h"
va009039 6:41e64a077678 5 #include "F32RFileSystem.h"
va009039 6:41e64a077678 6 #include "ROMSLOT.h"
va009039 0:e38daa7b1a22 7
va009039 3:5df725af50e0 8 DigitalOut led1(LED1),led2(LED2);
va009039 6:41e64a077678 9 RawSerial pc(MBED_UARTUSB);
va009039 6:41e64a077678 10 #ifdef USE_SD
va009039 6:41e64a077678 11 SDStorage storage(MBED_SPI0);
va009039 6:41e64a077678 12 F32RFileSystem local(&storage, "local");
va009039 6:41e64a077678 13 #else
va009039 1:913dfd59e25a 14 LocalFileSystem local("local");
va009039 6:41e64a077678 15 #endif
va009039 0:e38daa7b1a22 16
va009039 3:5df725af50e0 17 class MyEMU1114 : public EMU111x {
va009039 1:913dfd59e25a 18 virtual void DigitalWrite_Callback(int port, int pin, int value) {
va009039 3:5df725af50e0 19 switch(port<<8|pin) {
va009039 3:5df725af50e0 20 case 1<<8|5: led1 = value; break; // PIO1_5(LED1)
va009039 3:5df725af50e0 21 case 0<<8|7: led2 = value; break; // PIO0_7(LED2)
va009039 1:913dfd59e25a 22 }
va009039 1:913dfd59e25a 23 }
va009039 3:5df725af50e0 24 virtual void SerialPutc_Callback(int ch, uint8_t c) { pc.putc(c); }
va009039 3:5df725af50e0 25 virtual int SerialGetc_Callback(int ch) { return pc.getc(); }
va009039 3:5df725af50e0 26 virtual int SerialReadable_Callback(int ch) { return pc.readable(); }
va009039 1:913dfd59e25a 27 };
va009039 1:913dfd59e25a 28
va009039 6:41e64a077678 29 uint8_t* load(uint32_t addr, uint32_t limit, const char* filename) {
va009039 6:41e64a077678 30 pc.printf("loading[%s]", filename);
va009039 0:e38daa7b1a22 31 FileHandle* fh = local.open(filename, O_RDONLY);
va009039 3:5df725af50e0 32 MBED_ASSERT(fh);
va009039 6:41e64a077678 33 for(uint32_t fileSize = 0; fileSize <= limit;) {
va009039 6:41e64a077678 34 uint8_t buf[256];
va009039 6:41e64a077678 35 size_t n = fh->read(buf, sizeof(buf));
va009039 6:41e64a077678 36 if (n == 0) {
va009039 6:41e64a077678 37 pc.printf(" %d bytes\n", fileSize);
va009039 6:41e64a077678 38 break;
va009039 6:41e64a077678 39 }
va009039 6:41e64a077678 40 bool result = ROMSLOT::Write(addr + fileSize, (const uint8_t*)buf, sizeof(buf));
va009039 6:41e64a077678 41 MBED_ASSERT(result);
va009039 6:41e64a077678 42 fileSize += n;
va009039 6:41e64a077678 43 pc.putc('.');
va009039 6:41e64a077678 44 }
va009039 0:e38daa7b1a22 45 fh->close();
va009039 6:41e64a077678 46 return (uint8_t*)addr;
va009039 0:e38daa7b1a22 47 }
va009039 1:913dfd59e25a 48
va009039 0:e38daa7b1a22 49 int main() {
va009039 0:e38daa7b1a22 50 pc.baud(115200);
va009039 6:41e64a077678 51 pc.puts("mbed LPC1114 emulator pre-alpha version\n");
va009039 1:913dfd59e25a 52
va009039 3:5df725af50e0 53 MyEMU1114 mcu;
va009039 6:41e64a077678 54 mcu.assign_flash(load(0x00040000, 0x8000, "LPC1114.IMG"));
va009039 1:913dfd59e25a 55
va009039 1:913dfd59e25a 56 mcu.reset();
va009039 1:913dfd59e25a 57 for(;;) {
va009039 1:913dfd59e25a 58 mcu.run(100);
va009039 3:5df725af50e0 59 mcu.clock_in(250);
va009039 0:e38daa7b1a22 60 }
va009039 1:913dfd59e25a 61 /* NOTREACHED */
va009039 0:e38daa7b1a22 62 }
va009039 6:41e64a077678 63 #endif // TARGET_LPC1768
va009039 1:913dfd59e25a 64