mbed LPC1114 emulator pre-alpha version
Dependencies: BaseV6M mbed F12RFileSystem F32RFileSystem ROMSLOT SDStorage
Fork of emu812 by
TOYOSHIKI TINY BASIC mbed Edition TTB_mbed_LPC1114.bin save as "LPC1114.IMG" .
Diff: main_L152RE.cpp
- Revision:
- 6:41e64a077678
- Child:
- 9:ef9a58221fbe
diff -r 2483a16b42c0 -r 41e64a077678 main_L152RE.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main_L152RE.cpp Fri Apr 08 10:55:51 2016 +0900 @@ -0,0 +1,59 @@ +// main_L152RE.cpp 2016/4/6 +#if defined(TARGET_NUCLEO_L152RE) +#include "EMU111x.h" +#include "SDStorage.h" +#include "F32RFileSystem.h" +#include "ROMSLOT.h" + +DigitalOut led1(D3),led2(D2); +RawSerial pc(USBTX,USBRX); +SDStorage storage(D11, D12, D13, D4); // mosi, miso, sclk, cs +F32RFileSystem local(&storage, "local"); + +class MyEMU1114 : public EMU111x { + virtual void DigitalWrite_Callback(int port, int pin, int value) { + switch(port<<8|pin) { + case 1<<8|5: led1 = value; break; // PIO1_5(LED1) + case 0<<8|7: led2 = value; break; // PIO0_7(LED2) + } + } + virtual void SerialPutc_Callback(int ch, uint8_t c) { pc.putc(c); } + virtual int SerialGetc_Callback(int ch) { return pc.getc(); } + virtual int SerialReadable_Callback(int ch) { return pc.readable(); } +}; + +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); + 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; + } + ROMSLOT::Write(addr + fileSize, (const uint8_t*)buf, sizeof(buf)); + fileSize += n; + pc.putc('.'); + } + fh->close(); + return (uint8_t*)addr; +} + +int main() { + pc.baud(115200); + pc.puts("mbed LPC1114 emulator pre-alpha version\n"); + + MyEMU1114 mcu; + mcu.assign_flash(load(0x00040000, 0x8000, "LPC1114.IMG")); + + mcu.reset(); + for(;;) { + mcu.run(100); + mcu.clock_in(250); + } + /* NOTREACHED */ +} +#endif // TARGET_NUCLEO_L152RE +