12 typedef uint16_t address_t;
13 typedef uint8_t command_t;
14 typedef uint8_t sleep_t;
15 typedef uint8_t color_t;
17 const address_t MEMORY_SIZE = 1024;
19 const command_t CMD_GOTO = 0x70;
20 const command_t CMD_SLEEP = 0xFF;
21 const command_t CMD_COLOR = 0xAA;
22 const command_t CMD_END = 0xED;
25 * Reads data on given position in memory and increments the index (position).
27 template<typename T> T read(command_t * memory, address_t &index) {
28 // TODO: for addresses: map higher memory to static hardcoded areas or peripherals
29 // TODO: sizeof (command_t) != 1 ?
30 T * value = reinterpret_cast<T*> (memory + index);
31 index += sizeof (*value) / sizeof (command_t);
36 * Writes data to given position in memory and increments the index (position).
38 template<typename T> void write(command_t * memory, address_t &index, const T value) {
39 // TODO: sizeof (command_t) != 1 ?
40 // T * m = (T*) (memory + index);
41 T * m = reinterpret_cast<T*> (memory + index);
43 index += sizeof (value) / sizeof (command_t);
46 int main(int argc, char* argv[]) {
48 setlocale(LC_ALL, "");
50 command_t * memory = (command_t*) malloc(MEMORY_SIZE);
54 write<command_t>(memory, a, CMD_SLEEP);
55 write<sleep_t>(memory, a, 255);
56 write<command_t>(memory, a, CMD_SLEEP);
57 write<sleep_t>(memory, a, 10);
58 write<command_t>(memory, a, CMD_SLEEP);
59 write<sleep_t>(memory, a, 255);
60 write<command_t>(memory, a, CMD_GOTO);
61 write<address_t>(memory, a, a + 4);
62 write<command_t>(memory, a, 1);
63 write<command_t>(memory, a, 1);
64 write<command_t>(memory, a, CMD_SLEEP);
65 write<sleep_t>(memory, a, 255);
66 write<command_t>(memory, a, CMD_COLOR);
67 write<color_t>(memory, a, 50);
68 write<color_t>(memory, a, 100);
69 write<color_t>(memory, a, 150);
70 write<command_t>(memory, a, CMD_END);
73 for (address_t i = 0; i < MEMORY_SIZE;) {
74 wprintf(L"command %d = ", i);
75 command_t ch = read<command_t>(memory, i);
86 i = read<address_t>(memory, i);
87 command.append("GOTO ");
90 command.append("SLEEP");
91 this_thread::sleep_for(chrono::milliseconds(read<sleep_t>(memory, i)));
94 command.append("COLOR");
95 r = read<color_t>(memory, i);
96 g = read<color_t>(memory, i);
97 b = read<color_t>(memory, i);
100 command.append("END");
106 if (!command.empty()) {
107 wprintf(L"\t%s\n", command.c_str());
113 wprintf(L"all done\n");