# HG changeset patch # User František Kučera # Date 1514068461 -3600 # Node ID ae4a9092e1a8bffb09518ae750376cd15a43293d # Parent b9ceffdcaf148fb41d4769ec55d55a04c56fc43c GOTO in class diff -r b9ceffdcaf14 -r ae4a9092e1a8 c++/rgb-assembler/rgb-assembler.cpp --- a/c++/rgb-assembler/rgb-assembler.cpp Sat Dec 23 23:24:51 2017 +0100 +++ b/c++/rgb-assembler/rgb-assembler.cpp Sat Dec 23 23:34:21 2017 +0100 @@ -112,18 +112,25 @@ write(memory, a, CMD_END); } + unordered_map> commands = { + {CMD_GOTO, make_shared()}, + }; + for (address_t i = 0; i < MEMORY_SIZE;) { wprintf(L"command %*d = ", 4, i); command_t command = read(memory, i); wprintf(L"%02X ", command); + shared_ptr cx = commands[command]; + + if (cx) { + cx->process(memory, i); + continue; + } else { + // TODO: wprintf(L"invalid command\n"); + } + switch (command) { - case CMD_GOTO: - { - i = read(memory, i); - wprintf(L"GOTO %*d\n", 5, i); - break; - } case CMD_SLEEP: { sleep_t delay = read(memory, i);