dreamcast/maple/maple_bus_ft9.hpp

54 lines
1.6 KiB
C++

#pragma once
namespace ft9 {
namespace data_transfer {
namespace digital_button {
constexpr uint32_t r() { return 0b1 << 7; }
constexpr uint32_t r(uint32_t reg) { return (reg >> 7) & 0b1; }
constexpr uint32_t l() { return 0b1 << 6; }
constexpr uint32_t l(uint32_t reg) { return (reg >> 6) & 0b1; }
constexpr uint32_t d() { return 0b1 << 5; }
constexpr uint32_t d(uint32_t reg) { return (reg >> 5) & 0b1; }
constexpr uint32_t u() { return 0b1 << 4; }
constexpr uint32_t u(uint32_t reg) { return (reg >> 4) & 0b1; }
constexpr uint32_t w() { return 0b1 << 3; }
constexpr uint32_t w(uint32_t reg) { return (reg >> 3) & 0b1; }
constexpr uint32_t a() { return 0b1 << 2; }
constexpr uint32_t a(uint32_t reg) { return (reg >> 2) & 0b1; }
constexpr uint32_t b() { return 0b1 << 1; }
constexpr uint32_t b(uint32_t reg) { return (reg >> 1) & 0b1; }
constexpr uint32_t c() { return 0b1 << 0; }
constexpr uint32_t c(uint32_t reg) { return (reg >> 0) & 0b1; }
}
namespace option {
constexpr uint32_t batt() { return 0b1 << 1; }
constexpr uint32_t batt(uint32_t reg) { return (reg >> 1) & 0b1; }
constexpr uint32_t wire() { return 0b1 << 0; }
constexpr uint32_t wire(uint32_t reg) { return (reg >> 0) & 0b1; }
}
struct data_format {
uint8_t digital_button;
uint8_t option;
uint8_t analog_coordinate_overflow;
uint8_t reserved;
uint16_t analog_coordinate_axis[8];
};
static_assert((sizeof (struct data_format)) % 4 == 0);
static_assert((sizeof (struct data_format)) == 20);
}
}