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:
Sat Apr 09 16:49:02 2016 +0900
Revision:
9:ef9a58221fbe
Parent:
6:41e64a077678
update ROMSLOT.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 9:ef9a58221fbe 1 // emu1114/main_L152RE.cpp 2016/4/9
va009039 6:41e64a077678 2 #if defined(TARGET_NUCLEO_L152RE)
va009039 6:41e64a077678 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 6:41e64a077678 7
va009039 6:41e64a077678 8 DigitalOut led1(D3),led2(D2);
va009039 6:41e64a077678 9 RawSerial pc(USBTX,USBRX);
va009039 6:41e64a077678 10 SDStorage storage(D11, D12, D13, D4); // mosi, miso, sclk, cs
va009039 6:41e64a077678 11 F32RFileSystem local(&storage, "local");
va009039 9:ef9a58221fbe 12 ROMSLOT slot;
va009039 6:41e64a077678 13
va009039 6:41e64a077678 14 class MyEMU1114 : public EMU111x {
va009039 6:41e64a077678 15 virtual void DigitalWrite_Callback(int port, int pin, int value) {
va009039 6:41e64a077678 16 switch(port<<8|pin) {
va009039 6:41e64a077678 17 case 1<<8|5: led1 = value; break; // PIO1_5(LED1)
va009039 6:41e64a077678 18 case 0<<8|7: led2 = value; break; // PIO0_7(LED2)
va009039 6:41e64a077678 19 }
va009039 6:41e64a077678 20 }
va009039 6:41e64a077678 21 virtual void SerialPutc_Callback(int ch, uint8_t c) { pc.putc(c); }
va009039 6:41e64a077678 22 virtual int SerialGetc_Callback(int ch) { return pc.getc(); }
va009039 6:41e64a077678 23 virtual int SerialReadable_Callback(int ch) { return pc.readable(); }
va009039 6:41e64a077678 24 };
va009039 6:41e64a077678 25
va009039 9:ef9a58221fbe 26 uint8_t* load(size_t limit, const char* filename) {
va009039 6:41e64a077678 27 pc.printf("loading[%s]", filename);
va009039 6:41e64a077678 28 FileHandle* fh = local.open(filename, O_RDONLY);
va009039 6:41e64a077678 29 MBED_ASSERT(fh);
va009039 9:ef9a58221fbe 30 uint32_t addr = slot.New(limit);
va009039 9:ef9a58221fbe 31 for(size_t n = 0; n <= limit;) {
va009039 6:41e64a077678 32 uint8_t buf[256];
va009039 9:ef9a58221fbe 33 size_t r = fh->read(buf, sizeof(buf));
va009039 9:ef9a58221fbe 34 if (r == 0) {
va009039 9:ef9a58221fbe 35 pc.printf(" %u bytes\n", n);
va009039 6:41e64a077678 36 break;
va009039 6:41e64a077678 37 }
va009039 9:ef9a58221fbe 38 slot.Write(addr + n, (const uint8_t*)buf, sizeof(buf));
va009039 9:ef9a58221fbe 39 n += r;
va009039 6:41e64a077678 40 pc.putc('.');
va009039 6:41e64a077678 41 }
va009039 6:41e64a077678 42 fh->close();
va009039 6:41e64a077678 43 return (uint8_t*)addr;
va009039 6:41e64a077678 44 }
va009039 6:41e64a077678 45
va009039 6:41e64a077678 46 int main() {
va009039 6:41e64a077678 47 pc.baud(115200);
va009039 9:ef9a58221fbe 48 pc.puts("mbed LPC1114 emulator pre-alpha version 0.01\n");
va009039 6:41e64a077678 49
va009039 6:41e64a077678 50 MyEMU1114 mcu;
va009039 9:ef9a58221fbe 51 mcu.assign_flash(load(0x8000, "LPC1114.IMG"));
va009039 6:41e64a077678 52
va009039 6:41e64a077678 53 mcu.reset();
va009039 6:41e64a077678 54 for(;;) {
va009039 6:41e64a077678 55 mcu.run(100);
va009039 6:41e64a077678 56 mcu.clock_in(250);
va009039 6:41e64a077678 57 }
va009039 6:41e64a077678 58 /* NOTREACHED */
va009039 6:41e64a077678 59 }
va009039 6:41e64a077678 60 #endif // TARGET_NUCLEO_L152RE
va009039 6:41e64a077678 61