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" .
main.cpp@9:ef9a58221fbe, 2016-04-09 (annotated)
- 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?
User | Revision | Line number | New 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 |