summaryrefslogtreecommitdiff
path: root/eater_cpu/cpp/disas.h
blob: 9685e150a11d42021ba9df37c418dcfef4d26a81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#pragma once

#include <cstdint>
#include <format>
#include <string>

static std::string disas(uint8_t ins) {
  switch (ins >> 4) {
  case 0:
    return "nop";
  case 1:
    return std::format("lda {}", ins & 0x0f);
  case 2:
    return std::format("add {}", ins & 0x0f);
  case 3:
    return std::format("sub {}", ins & 0x0f);
  case 4:
    return std::format("sta {}", ins & 0x0f);
  case 5:
    return std::format("ldi {}", ins & 0x0f);
  case 6:
    return std::format("jmp");
  case 14:
    return std::format("out");
  case 15:
    return std::format("halt");
  default:
    return "???";
  }
}