Comments 2
Мне, к примеру, понравился цикл в расте с паттерн матчингом: код.
На плюсах вышло как-то так: код.
Что в плане компактности и «декларативности» мне очень нравится.
На плюсах вышло как-то так: код.
match_opcode(opcode
, []() { assert(false && "Unknown opcode."); }
, code(0x0, 0x0, 0xE, 0x0, [&]()
{ /*CLS*/
clear_display(); })
, code(0x0, 0x0, 0xE, 0xE, [&]()
{ /*RET*/
assert(sp_ > 0);
--sp_;
assert(sp_ < std::size(stack_));
pc_ = stack_[sp_]; })
, code(0x0, _n, _n, _n, [](std::uint16_t)
{ /* SYS addr. This instruction is only used on the old computers
on which Chip-8 was originally implemented.
It is ignored by modern interpreters. */ })
, code(0x1, _n, _n, _n, [&](std::uint16_t nnn)
{ /* JP addr. */
pc_ = nnn; })
, code(0x2, _n, _n, _n, [&](std::uint16_t nnn)
{ /* CALL addr. */
assert(sp_ < std::size(stack_));
stack_[sp_] = pc_;
++sp_;
pc_ = nnn; })
, code(0x3, _x, _k, _k, [&](std::uint8_t x, std::uint8_t kk)
{ /* SE Vx, byte. */
pc_ += ((V_[x] == kk) ? 2 : 0); })
Что в плане компактности и «декларативности» мне очень нравится.
Как бы теперь это все дело активировать
Sign up to leave a comment.
Эмуляция компьютера: интерпретатор CHIP-8, таймеры и обработка ввода