Files
CLK/Processors/Bus/PartialAddresses.hpp
T
2026-03-10 14:20:41 -04:00

50 lines
920 B
C++

//
// PartialAddresses.hpp
// Clock Signal
//
// Created by Thomas Harte on 04/03/2026.
// Copyright © 2026 Thomas Harte. All rights reserved.
//
#pragma once
#include <concepts>
namespace Bus::Address {
template <std::unsigned_integral AddressT>
struct Literal {
constexpr Literal(const AddressT address) noexcept : address_(address) {}
operator AddressT() const {
return address_;
}
private:
AddressT address_;
};
template <std::unsigned_integral AddressT, AddressT value>
struct Fixed {
operator AddressT() const {
return value;
}
};
template <
std::unsigned_integral AddressT,
std::unsigned_integral VariableT,
std::unsigned_integral FixedT,
FixedT Page
>
struct FixedPage {
FixedPage(const VariableT address) noexcept : address_(address) {}
operator AddressT() const {
return (Page << 8*sizeof(VariableT)) | address_;
}
private:
VariableT address_;
};
} // namespace Bus::Address