IPS(Interpreter for Process Structures) for mbed
Dependencies: ConfigFile FATFileSystem mbed
IPS port from linux/unix version.
mbed_blinky.ips
0 VAR led1 " LED1 " DigitalOut led1 ! : main ANFANG 1 JA? 1 led1 @ write 200 wait_ms 0 led1 @ write 200 wait_ms DANN/NOCHMAL ; main
- ips-02.tgz - ips for linux/unix
- ipsdoc.zip - document
- https://bitbucket.org/va009039/ips/
main.cpp
- Committer:
- va009039
- Date:
- 2015-05-13
- Revision:
- 1:e74530ad6b9e
- Child:
- 2:908338b1151a
File content as of revision 1:e74530ad6b9e:
// main.cpp 2015/5/13 #include "mbed.h" #include "BaseIPS.h" #include "VideoRAM.h" #include "VirtualRAM.h" #include "SDFileSystem.h" #include "ConfigFile.h" #include <string> #define CFG_FILE "/local/ips.cfg" #ifndef MBED_SPI0 #define MBED_SPI0 D11, D12, D13, D4 #endif SDFileSystem local(MBED_SPI0, "local"); // mosi, miso, sclk, cs, name RawSerial pc(USBTX,USBRX); class myips : public BaseIPS { VideoRAM vram; VirtualRAM mem; RawSerial& _pc; Timer t20ms; public: myips(RawSerial& pc): vram(pc),_pc(pc) { t20ms.reset(); t20ms.start(); } virtual u8 peekB(u16 a) { return mem.peek(a); } virtual void pokeB(u16 a, u8 b) { mem.poke(a, b); vram.vpoke(a, b); } virtual void* file_open(const char* filename, const char* mode) { string path = string("/local/") + filename; return fopen(path.c_str(), mode); } virtual int file_getc(void* handle) { MBED_ASSERT(handle); int c = fgetc((FILE*)handle); return c == EOF ? (-1) : c; } virtual void file_putc(int c, void* handle) { MBED_ASSERT(handle); fputc(c, (FILE*)handle); } virtual bool file_close(void* handle) { MBED_ASSERT(handle); if (fclose((FILE*)handle) == 0) { return true; } return false; } virtual bool test_20ms() { if (t20ms.read_ms() >= 20) { t20ms.reset(); return true; } return false; } virtual void do_io() { if (_pc.readable()) { int c = _pc.getc(); if (c == '\n' || c == '\r') { if (input_ptr != peek(a_PI)) { pokeB(READYFLAG, 1); poke(a_PE, input_ptr - 1); } else if (c == 0x08) // BS if (input_ptr > 0) { input_ptr--; } } else { if (input_ptr <= TVE) { pokeB(input_ptr++, c); } } } } }; int main() { string image = "IPS-Mu.bin"; string file; string cmd; ConfigFile cfg; if(cfg.read(CFG_FILE)) { char buf[128]; if (cfg.getValue("image", buf, sizeof(buf))) { image = buf; } if (cfg.getValue("file", buf, sizeof(buf))) { file = buf; cmd = string("\" ") + file + string(" \" READ"); } if (cfg.getValue("cmd", buf, sizeof(buf))) { cmd = buf; } } myips* ips = new myips(pc); void* fh = ips->file_open(image.c_str(), "rb"); MBED_ASSERT(fh); if (fh) { for(int i = 0; i <= 65535; i++) { int c = ips->file_getc(fh); if (c == (-1)) { break; } ips->pokeB(i, c); } ips->file_close(fh); } if (cmd != "") { ips->command(cmd.c_str()); } ips->emulator(); /* NOTREACHED */ }