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