summaryrefslogtreecommitdiff
path: root/eater_cpu/cpp/disas.h
blob: 3fd467032f55b3a53299b1dbc86fb36faccda08e (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
31
#pragma once

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

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